diff --git a/docs/admin/keys-and-permissions.mdx b/docs/admin/keys-and-permissions.mdx
index 82ca36dc2..d2a364ee0 100644
--- a/docs/admin/keys-and-permissions.mdx
+++ b/docs/admin/keys-and-permissions.mdx
@@ -54,7 +54,7 @@ Key secrets are shown when created or regenerated. Store them in a secret manage
| Events | `events:add`, `events:read` |
| Keys | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` is human-session only |
| Users | `users:create`, `users:read`, `users:update`, `users:delete` |
-| Evaluations | `evaluations:read`, `evaluations:trigger` |
+| Evaluations | `evaluations:read`, `evaluations:trigger`, `evaluations:run` |
| Dashboards | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
| Queries | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
| Assistant | `agent:use` |
diff --git a/docs/ar/admin/keys-and-permissions.mdx b/docs/ar/admin/keys-and-permissions.mdx
index 0f8682ef5..43a40efc3 100644
--- a/docs/ar/admin/keys-and-permissions.mdx
+++ b/docs/ar/admin/keys-and-permissions.mdx
@@ -1,30 +1,29 @@
---
----
title: "المفاتيح والأذونات"
-description: "إنشاء مفاتيح API ذات نطاق محدد للآلات والأتمتة والمشغلين."
+description: "أنشئ مفاتيح API محدودة النطاق للآلات والأتمتة والمشغلين."
icon: "key-round"
---
-تنتمي مفاتيح API إلى منظمة وتحمل أذونات صريحة. استخدم مفاتيح منفصلة لإدراج العوامل وتسليم السياسات والمقيمين والأتمتة في CI والنصوص الإدارية.
+تنتمي مفاتيح API إلى مؤسسة وتحمل أذونات صريحة. استخدم مفاتيح منفصلة لاستقبال الوكيل وتسليم السياسة والمقيّمون والأتمتة المستمرة والبرامج الإدارية.
-## إنشاء وتدوير المفتاح
+## إنشاء وتدوير مفتاح
-
- 1. انتقل إلى **Administration → Keys**، وحدد **new key**، وأدخل اسم الحمل الكروي.
- 2. اختر مجموعة أذونات واضبط الأذونات الفردية فقط عندما تكون المجموعة المعرفة مسبقًا غير كافية.
- 3. أنشئ المفتاح وانسخ سره لمرة واحدة فورًا.
- 4. افتح المفتاح لاحقًا لتحديث المنح أو تعطيله أو إعادة إنشاء السر.
+
+ 1. انتقل إلى **الإدارة → المفاتيح**، اختر **مفتاح جديد**، وأدخل اسم حمل العمل.
+ 2. اختر مجموعة أذونات واضبط الأذونات الفردية فقط عندما تكون القائمة المحددة غير كافية.
+ 3. أنشئ المفتاح وانسخ سره لمرة واحدة فوراً.
+ 4. افتح المفتاح لاحقاً لتحديث الأذونات أو تعطيله أو إعادة تعيين السر.
- درج الإنشاء هو المكان الذي تختار فيه أضيق المنح المطلوبة من قبل الحمل الكروي.
+ درج الإنشاء هو المكان الذي تختار فيه أضيق الأذونات المطلوبة من قبل حمل العمل.
- 
+ 
- بعد الإنشاء، تعرض صفحة المفاتيح البيانات الوصفية الثابتة وإجراءات الإدارة. لا يتم عرض السر لمرة واحدة مرة أخرى.
+ بعد الإنشاء، تعرض صفحة المفاتيح البيانات الوصفية الدائمة وإجراءات الإدارة. السر لمرة واحدة لن يتم عرضه مرة أخرى.
- 
+ 
- استخدم هذه القائمة لمراجعة المنح بانتظام وتعطيل المفاتيح التي لم تعد تتطابق مع حمل كروي نشط.
+ استخدم هذه القائمة لمراجعة الأذونات بانتظام وتعطيل المفاتيح التي لا تعود تعيّن إلى حمل عمل نشط.
```bash
@@ -37,39 +36,39 @@ icon: "key-round"
fp keys disable production-agents
```
- أعد توجيه أو احتفظ بإخراج الإنشاء/إعادة الإنشاء بأمان؛ يتم إرجاع السر مرة واحدة.
+ أعد توجيه أو التقط مخرجات الإنشاء/إعادة التعيين بشكل آمن؛ يتم إرجاع السر مرة واحدة فقط.
-الأذونان المطلوبان لآلة Failproof AI متصلة مستقلان:
+الأذونتان المطلوبتان من قبل آلة Failproof AI المتصلة مستقلتان:
- `events:add` يرسل الأحداث وبيانات الجلسة.
- `policies:pull` يسترجع نشرات السياسة المعينة.
-يتم عرض أسرار المفاتيح عند إنشاؤها أو إعادة إنشاؤها. قم بتخزينها في مدير السر وقم بتدويرها دون إعادة استخدام بيانات المشغل التفاعلية.
+يتم عرض أسرار المفاتيح عند إنشاؤها أو إعادة تعيينها. قم بتخزينها في مدير الأسرار وأدرها دون إعادة استخدام بيانات اعتماد المشغل التفاعلية.
-## فهرس الأذونات
+## كتالوج الأذونات
| المنطقة | الأذونات |
| --- | --- |
| الأحداث | `events:add`, `events:read` |
-| المفاتيح | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` للجلسات البشرية فقط |
+| المفاتيح | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`؛ `keys:update` للجلسات البشرية فقط |
| المستخدمون | `users:create`, `users:read`, `users:update`, `users:delete` |
-| التقييمات | `evaluations:read`, `evaluations:trigger` |
-| لوحات المعلومات | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
+| التقييمات | `evaluations:read`, `evaluations:trigger`, `evaluations:run` |
+| لوحات التحكم | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
| الاستعلامات | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
| المساعد | `agent:use` |
| الإعدادات | `settings:read`, `settings:write` |
| التنبيهات | `alerts:read`, `alerts:write` |
| المشاكل | `issues:read`, `issues:create`, `issues:close` |
-| التدقيق | `audits:read`, `audits:write` |
+| عمليات التدقيق | `audits:read`, `audits:write` |
| السياسات | `policies:read`, `policies:write`, `policies:pull` |
| الاستخدام | `usage:read` |
-`orgs:admin` محجوز لمشغل المثيل ولا يمكن منحه لمفتاح منظمة أو عضو عادي. يتم قبول رموز `incidents:*` و `alerts:ack` المتقاعدة للتوافقية وتطبيع الأذونات `issues:*` الحالية.
+`orgs:admin` محجوز لمشغل المثيل ولا يمكن منحه لمفتاح تنظيمي أو عضو عادي. يتم قبول الرموز المتقاعدة `incidents:*` و `alerts:ack` للتوافق وتطبيعها على أذونات `issues:*` الحالية.
-مجموعات الأذونات المدمجة هي `read-only` و `standard` و `admin`. يضيف `standard` تشغيل التقييم وتنفيذ الاستعلامات والاستجابة للمشاكل واستخدام المساعد إلى أذونات القراءة. يؤدي إنشاء المفتاح إلى إزالة المنح التي تقتصر على البشر حتى عندما تحتوي مجموعة الأذونات عليها.
+مجموعات الأذونات المدمجة هي `read-only` و `standard` و `admin`. يضيف `standard` تفعيل التقييم وتنفيذ الاستعلام والاستجابة للمشاكل واستخدام المساعد إلى أذونات القراءة. ينزع إنشاء المفتاح الأذونات الخاصة بالبشر فقط حتى عندما تحتوي مجموعة الأذونات عليها.
- يمكن لمفاتيح النطاق على مستوى المثيل تحديد منظمة باستخدام رأس `X-AgentEye-Org`. قم بتعيينه بشكل صريح على النشرات متعددة المنظمات؛ قد يؤدي حذفه إلى تحديد المنظمة الافتراضية.
+ يمكن لمفاتيح النطاق الموسع اختيار منظمة من خلال رأس `X-AgentEye-Org`. اضبطه بصراحة في النشرات متعددة المنظمات؛ قد يؤدي الإغفال إلى تحديد المنظمة الافتراضية.
\ No newline at end of file
diff --git a/docs/ar/admin/overview.mdx b/docs/ar/admin/overview.mdx
index 8827906ad..23483ed1d 100644
--- a/docs/ar/admin/overview.mdx
+++ b/docs/ar/admin/overview.mdx
@@ -1,5 +1,4 @@
---
----
title: "الإدارة"
description: "تشغيل الوصول والاستخدام والمنظمات والأمان دون دمجها في سير عمل الموثوقية."
icon: "settings-2"
diff --git a/docs/ar/admin/usage.mdx b/docs/ar/admin/usage.mdx
index 532df2e43..066940331 100644
--- a/docs/ar/admin/usage.mdx
+++ b/docs/ar/admin/usage.mdx
@@ -1,5 +1,4 @@
---
----
title: "الاستخدام"
description: "فحص استهلاك المنظمة والنافذة الفعالة للفواتير."
icon: "chart-no-axes-combined"
diff --git a/docs/ar/audits/agent-contracts.mdx b/docs/ar/audits/agent-contracts.mdx
index 442b6c2bb..abd6d8a32 100644
--- a/docs/ar/audits/agent-contracts.mdx
+++ b/docs/ar/audits/agent-contracts.mdx
@@ -1,5 +1,4 @@
---
----
title: "سياق الوكيل"
description: "أخبر المراجعات بما يجب أن يفعله كل وكيل، وما يجب أن ينتجه، وما يجب أن لا يفعله أبداً."
icon: "bot"
diff --git a/docs/ar/audits/alerts.mdx b/docs/ar/audits/alerts.mdx
index a7a8b5af1..bb9d34362 100644
--- a/docs/ar/audits/alerts.mdx
+++ b/docs/ar/audits/alerts.mdx
@@ -1,5 +1,4 @@
---
----
title: "التنبيهات"
description: "كتشف تكرار الحوادث وإعادة توجيهها إلى المستجيبين المناسبين."
icon: "bell-ring"
diff --git a/docs/ar/audits/cadence.mdx b/docs/ar/audits/cadence.mdx
index 35661228f..32cf486b6 100644
--- a/docs/ar/audits/cadence.mdx
+++ b/docs/ar/audits/cadence.mdx
@@ -1,5 +1,4 @@
---
----
title: "تكرار المراجعة"
description: "حدد موعد تشغيل المراجعات المتكررة وكمية البيانات التي تراجعها."
icon: "calendar-clock"
diff --git a/docs/ar/audits/findings-and-issues.mdx b/docs/ar/audits/findings-and-issues.mdx
index 8655cd01e..ff12081d9 100644
--- a/docs/ar/audits/findings-and-issues.mdx
+++ b/docs/ar/audits/findings-and-issues.mdx
@@ -1,5 +1,4 @@
---
----
title: "النتائج والمشاكل"
description: "تحويل أدلة التدقيق إلى عمل إعادة معالجة مملوك وقابل للتتبع."
icon: "clipboard-check"
diff --git a/docs/ar/audits/recipes.mdx b/docs/ar/audits/recipes.mdx
index d93b47879..402c90080 100644
--- a/docs/ar/audits/recipes.mdx
+++ b/docs/ar/audits/recipes.mdx
@@ -1,5 +1,4 @@
---
----
title: "وصفات التدقيق"
description: "أهداف البداية للتحقيقات الشائعة لفشل الوكيل."
icon: "book-open-check"
diff --git a/docs/ar/audits/run.mdx b/docs/ar/audits/run.mdx
index 7b857ebaa..6e221a7d1 100644
--- a/docs/ar/audits/run.mdx
+++ b/docs/ar/audits/run.mdx
@@ -1,5 +1,4 @@
---
----
title: "تشغيل ومراجعة التدقيق"
description: "قم بتشغيل التدقيق والتحقق من نطاقه وفحص النتائج الناتجة."
icon: "play"
diff --git a/docs/ar/evaluations/deploy.mdx b/docs/ar/evaluations/deploy.mdx
new file mode 100644
index 000000000..7bff943f6
--- /dev/null
+++ b/docs/ar/evaluations/deploy.mdx
@@ -0,0 +1,55 @@
+---
+title: "نشر وإصدار تقييم"
+description: "نشر نسخة ثابتة، اطلع على ما هو مباشر، انشر نسخ جديدة، استعد للإصدار السابق، وسجل الجلسات التي لديك بالفعل."
+icon: "cloud-upload"
+---
+
+## نشره
+
+حدد **نشر `@`** في أسفل صفحة التأليف. تصبح النسخة ثابتة بمجرد نشرها: من ذلك الحين فصاعداً، كل جلسة تنتهي وينطبق عليها الشرط يتم تسجيلها بها.
+
+## اطلع على ما هو مباشر
+
+**تحليل → تأليف التقييم** يسرد تعريفات المؤسسة المستضافة، التقييمات التي يقوم بها مُقيّم الإدارة. يعرض كل صف:
+
+- اسمه ومفتاحه وإصداره ونوع النتيجة
+- مجموع اختياره المصدر، الذي يميز الإصدارات المنشورة عن بعضها دون فتح الكود
+- ما إذا كان **شرطياً** أو يعمل على **جميع الجلسات المكتملة** — الشرط هو ما يحصر التقييم على وكلاء أو بيئات معينة
+- المهلة الزمنية والعلامات ووقت آخر تغيير له
+
+
+
+ابحث في القائمة أو صفّيها حسب الحالة. التقييمات التي يسجلها عامل العمل الخاص بك لا تُدرج هنا؛ النتائج الخاصة بها تحمل علامة **عميل** على [صفحة التقييمات](/ar/sessions/evaluations)، والتقييمات المستضافة تحمل **إدارة**.
+
+يمكن للمؤسسة أن تمتلك ما يصل إلى 100 تقييم مستضاف مختلف مفعل في المرة الواحدة.
+
+## نشر نسخة جديدة
+
+حدد **نسخة جديدة** على صف. تفتح صفحة التأليف مع كود تلك النسخة؛ غيّره واختبره ونشره. ينتقل المفتاح ونوع النتيجة ولا يمكن أن يتغيرا.
+
+نشر خليفة يعطّل سابقه ويبقيه على القائمة. تحتفظ النتائج بالنسخة التي أنتجتها، لذا يوضح الرسم البياني بالضبط متى تولت المنطق الجديد.
+
+## استعد للإصدار السابق
+
+حدد **تعطيل** على النسخة الحالية و**تفعيل** على الإصدار الذي تريده مرة أخرى. لا يتم حذف أي شيء، وكل نتيجة تبقى كما هي.
+
+## إيقاف التقييم
+
+حدد **تعطيل**. بدون نسخة مفعلة، يتوقف عن العمل على الجلسات الجديدة. لإيقاف تقييم يقوم به عامل العمل الخاص بك، توقف عن تسجيله: أزله من العامل أو أوقف العامل.
+
+## تسجيل الجلسات التي لديك بالفعل
+
+التقييم يعمل للأمام: نسخة تُنشر الآن لا تسجل جلسة انتهت قبلها. لتسجيل السجل، افتح **تسجيل الجلسات التي لديك بالفعل** على صفحة تأليف التقييم، واختر نافذة تصل إلى 90 يوم وبشكل اختياري تقييم واحد فقط، وعد قبل أن تعمل. العدد هو بالضبط ما سيعمل، وكل زوج جلسة وتقييم فيه قابل للفواتير.
+
+يملأ الفجوات فقط. جلسة لديها بالفعل نتيجة لذلك التقييم تحتفظ بها، والعمل على نفس النافذة مرتين لا يسجل شيئاً جديداً.
+
+لتسجيل جلسة واحدة مرة أخرى — بعد إصلاح أو لجلسة لم تنته بنظافة — حدد **إعادة تقييم** على صفحتها. تُضاف النتيجة الجديدة إلى سجل الجلسة؛ تبقى الأولى.
+
+## الأذونات
+
+| الإذن | يتيح لك |
+| --- | --- |
+| `evaluations:read` | مشاهدة النتائج وفتح صفحة تأليف التقييم |
+| `evaluations:trigger` | مشاهدة ونشر وإصدار وتفعيل وتعطيل التعريفات المستضافة؛ اختبارها؛ تسجيل السجل؛ إعادة تقييم جلسة |
+| `events:read` | الاختبار على جلسات حقيقية وتأسيس المسودات في مفاتيح البيانات الخاصة بك، بالإضافة إلى `evaluations:trigger` |
+| `evaluations:run` | تشغيل عامل المقيّم الخاص بك |
\ No newline at end of file
diff --git a/docs/ar/evaluations/overview.mdx b/docs/ar/evaluations/overview.mdx
new file mode 100644
index 000000000..4d3a20356
--- /dev/null
+++ b/docs/ar/evaluations/overview.mdx
@@ -0,0 +1,44 @@
+---
+title: "تقييم الوكلاء"
+description: "قيّم كل جلسة منتهية باستخدام التقييمات التي تحددها: فحوصات Python مستضافة، أو حكام LLM في العامل الخاص بك."
+icon: "gauge"
+---
+
+يسجل التقييم جلسة وكيل منتهية. عند انتهاء جلسة، يتم تشغيل كل تقييم مفعّل ينطبق عليها وتسجيل ما وجدته، مع التفاصيل التي يمكنك قراءتها بجانب التتبع:
+
+- **درجة** من 0 إلى 1، مع إمكانية تحديدها كناجحة أو فاشلة
+- **مقياس**، مثل عدد، أو مدة، أو تكلفة، مع وحدتها
+- **تأكيد**، إما أنه نجح أو لم ينجح
+
+## نوعان من المقيّمين
+
+| | Python مستضاف | العامل الخاص بك |
+| --- | --- | --- |
+| مكتوب | في لوحة التحكم، تحت **Analyze → eval authoring** | في Python، باستخدام [Evaluator SDK](/ar/reference/evaluator-sdk) |
+| يعمل | على مقيّم Failproof AI المُدار، في بيئة معزولة | على البنية التحتية الخاصة بك |
+| الأفضل لـ | الفحوصات الحتمية المستندة إلى الكود | حكام LLM، استدعاءات النماذج، الحزم، الأسرار، الوصول إلى الشبكة، المعالجة الثقيلة |
+
+Python المستضاف متعمد الصغر: تعبير واحد، بدون استيرادات، بدون شبكة. أي شيء يتطلب نموذج — مثل حكم LLM يسجل ما إذا كانت الإجابة ذات صلة — يعمل في العامل الخاص بك بدلاً من ذلك. لا يحتاج أي من النوعين إلى اتصال واردة: يطالب العمال بالجلسات المنتهية ويقدمون النتائج عبر HTTPS الصادرة.
+
+## كل منظمة تقيّم وكلاءها الخاصة
+
+التقييمات تنتمي إلى المنظمة التي تحددها. تكتب كل منظمة في النسخة الخاصة بها — فحوصاتها الخاصة، وشروطها، وحدودها، وتسمياتها — وتصدر نسخًا وتنشرها دون التأثير على أي نسخة أخرى، وترى النتائج الخاصة بها فقط. صفّ تلك النتائج حسب الوكيل والبيئة والتقييم والوقت، أو اسأل المساعد عنها.
+
+## من المسودة الأولى إلى الدرجات المباشرة
+
+
+
+ اشرح ما يجب قياسه واترك للمساعد صياغة مسودة، أو اكتبها بنفسك. انظر [كتابة التقييم](/ar/evaluations/write).
+
+
+ قم بتشغيلها على جلسات حقيقية قبل إطلاقها مباشرة؛ لا يتم حفظ أي شيء. انظر [اختبار التقييم](/ar/evaluations/test).
+
+
+ انشر نسخة ثابتة، ونشر نسخًا جديدة مع تطورها، والعودة إلى نسخة سابقة. انظر [النشر والإصدار](/ar/evaluations/deploy).
+
+
+ مثّل الدرجات بيانيًا على مدار الوقت، وقارن بين الوكلاء والبيئات، واسأل المساعد. انظر [قراءة نتائج التقييم](/ar/sessions/evaluations).
+
+
+
+التقييم يعمل للأمام: نسخة تم نشرها الآن تسجل الجلسات التي تنتهي من الآن فصاعدًا. لتسجيل الجلسات التي لديك بالفعل، [املأ الفجوات](/ar/evaluations/deploy#score-sessions-you-already-have).
\ No newline at end of file
diff --git a/docs/ar/evaluations/test.mdx b/docs/ar/evaluations/test.mdx
new file mode 100644
index 000000000..4331e988a
--- /dev/null
+++ b/docs/ar/evaluations/test.mdx
@@ -0,0 +1,29 @@
+---
+title: "اختبار التقييم"
+description: "قم بتشغيل التقييم على جلساتك الحقيقية قبل نشره. لا يتم حفظ أي شيء."
+icon: "flask-conical"
+---
+
+**اختبار هذا التقييم**، في صفحة التأليف، يقوم بتشغيل الكود مقابل جلساتك الحقيقية على مجموعة المقيّمين دون نشره. لا يتم حفظ أي شيء: الفشل هنا هو معاينة فقط، والنشر مسموح به دائماً.
+
+
+
+ حدد **تحقق** لترجمة الكود والشرط مقابل قواعد الحماية الرملية دون تشغيلهما على أي جلسة.
+
+
+ ضيّق نطاق الجلسات المطابقة حسب الوكيل أو البيئة أو الوقت أو معرّف الجلسة، وحدد ما يصل إلى 10 جلسات. أدرج الجلسات التي يجب أن يفشل فيها التقييم وكذلك تلك التي يجب أن ينجح فيها.
+
+
+ حدد **تشغيل مقابل N جلسة**، واقرأ كل صف.
+
+
+
+| الصف | المعنى |
+| --- | --- |
+| **حسناً** | تم تشغيله. يسرد الصف كل درجة ومقياس وتأكيد أعاده، وكم من الوقت استغرق. |
+| **تم تخطيه** | عادت الشرط `False`، لذلك لم يتم تشغيل التقييم. هذا تخطي، وليس فشلاً. |
+| فشل | رفع استثناء أو انتهت مهلة الوقت أو استخدم شيئاً ترفضه الحماية الرملية. يوضح الصف أي منها، و**أصلحه** يسلم الخطأ للمساعد عندما يمكنه المساعدة. |
+
+
+
+تتوقف النتيجة عن كونها حالية في اللحظة التي تقوم فيها بتحرير الكود؛ يتم تلميعها بدلاً من إعادة استخدامها.
\ No newline at end of file
diff --git a/docs/ar/evaluations/write.mdx b/docs/ar/evaluations/write.mdx
new file mode 100644
index 000000000..19400fac4
--- /dev/null
+++ b/docs/ar/evaluations/write.mdx
@@ -0,0 +1,76 @@
+---
+title: "كتابة تقييم"
+description: "صف ما تريد قياسه واترك للمساعد صياغة تقييم Python مستضاف، أو اكتب الكود بنفسك. تعمل حكام LLM في عاملك الخاص."
+icon: "file-pen-line"
+---
+
+التقييمات المستضافة عبارة عن أكواد Python صغيرة وحتمية، مكتوبة في لوحة التحكم وتعمل على أسطول تقييم Failproof AI. المنطق الأثقل — حكم LLM، أو حزمة، أو سر، أو استدعاء شبكة — يعمل في [عاملك الخاص](#write-it-in-your-own-worker) بدلاً من ذلك.
+
+## صغه من وصف
+
+1. اذهب إلى **Analyze → eval authoring** واختر **new eval**.
+2. صف ما تريد قياسه بالإنجليزية العادية، أو اختر من **start from an example…**، ثم اختر **draft**.
+3. راجع الحقول والكود الذي يملأها، ثم [اختبره](/ar/evaluations/test) و[انشره](/ar/evaluations/deploy).
+
+
+
+المسودة مبنية على الأحداث الخاصة بمؤسستك: تقرأ الصفحة مفاتيح الحمولة التي حملتها جلساتك على مدار السبعة أيام الماضية، لذا يقرأ الكود المفاتيح الموجودة بدلاً من التخمين. قبل تسليم المسودة، يختبرها المساعد مقابل ما يصل إلى خمس من جلساتك الأخيرة، ويصلح كل ما يمكنه إثبات أنه معطوب — لمدة تصل إلى ثلاث جولات — وفحص مرة واحدة أن الكود يقيس ما طلبته. احتفظ بالوصف محددًا: الطلبات العامة أبطأ ويمكن أن تنقطع. راجع الكود على أي حال؛ النشر لا يتم حظره أبدًا.
+
+## تعيين الحقول
+
+| حقل | ما هو |
+| --- | --- |
+| name | ما يراه الناس. قابل للتعديل لاحقًا |
+| key | المعرف المستقر الذي تخطط تحته النتائج، مثل `code_assistant_quality_gate` |
+| version | أي سلسلة إصدار بدون مسافات، مثل `1.0.0` |
+| result | **score** (من 0 إلى 1)، **metric** (رقم بوحدة)، أو **assertion** (نجح أو لا) |
+| timeout seconds | افتراضي 30. يوقف الحماية أي تشغيل فردي عند 60 |
+| labels | حتى 20، مفصولة بفواصل. قابلة للتعديل لاحقًا |
+| condition | اختياري. تعبير Python؛ يعمل التقييم فقط على الجلسات حيث يكون `True` |
+
+استخدم الشرط لتحديد نطاق التقييم للعوامل والبيئات المخصصة له:
+
+```python
+session.agent_id == "code-assistant" and session.environment == "production"
+```
+
+المفتاح والإصدار ونوع النتيجة والشرط والكود ثابتة بمجرد النشر: لتغيير أي منها، انشر إصدارًا جديدًا. الاسم والتسميات وما إذا كانت مفعلة تبقى قابلة للتعديل.
+
+## اكتب الكود بنفسك
+
+**كود المقيّم** هو تعبير Python واحد يُرجع `EvalResult(...)`، مع وجود `session` في النطاق. هذا الواحد يسجل حصة نتائج الأداة التي عادت بشكل صحيح:
+
+```python
+EvalResult(
+ score=Score(
+ len([e for e in session.events_of_type("tool_result") if e.payload.get("status") == "ok"])
+ / max(1, session.count("tool_result"))
+ ),
+ metrics={"tool_calls": Metric(session.count("tool_use"), unit="calls")},
+ reasoning="Share of tool results that came back ok.",
+)
+```
+
+تبدأ النتيجة بمفتاح التقييم الخاص به، في نوعه المعلن: `score=` لتقييم النقاط، أو إدخال `metrics` أو `assertions` باسم المفتاح لتقييم متري أو مؤكدة. تأتي المقاييس والمؤكدات الأخرى معها، حتى 25 نتيجة في التشغيل.
+
+| في النطاق | يعطيك |
+| --- | --- |
+| `session` | `session_id`، `agent_id`، `environment`، `started_at`، `ended_at`، `event_count`، و`events`، بالإضافة إلى `count(event_type)` و`events_of_type(event_type)` |
+| كل حدث | `id`، `ts`، `event_type`، و`payload` |
+| أنواع النتائج | `EvalResult`، `Score`، `Metric`، `Assertion`، و`ConditionResult` للشرط |
+| Builtins | `abs`، `all`، `any`، `bool`، `dict`، `float`، `int`، `len`، `list`، `max`، `min`، `range`، `round`، `set`، `sorted`، `str`، `sum`، `tuple` |
+
+لا شيء آخر قابل للوصول: لا استيراد، ولا سمات تتجاوز بيانات الجلسة وطرق السلسلة والقاموس البسيطة مثل `get` و`lower` و`split`، والتي يجب استدعاؤها بدلاً من الإشارة إليها. مفاتيح الحمولة هي كل ما يرسله وكلاء عملك — `status` أعلاه مثال فقط — لذا اقرأها من جلسة حقيقية. **format** يرتب الكود و**fix** يطلب من المساعد إصلاحه. يمكن أن يكون الكود حتى 128 KiB، والشرط حتى 16 KiB.
+
+
+
+## اكتبه في عاملك الخاص
+
+عندما يحتاج التقييم إلى نموذج أو حزمة أو سر أو شبكة، اكتبه باستخدام [Evaluator SDK](/ar/reference/evaluator-sdk) وشغّله على البنية التحتية الخاصة بك. يستخدم نفس أنواع النتائج، وتظهر نتائجه بجانب النتائج المستضافة، موسومة **customer**:
+
+```python
+@app.eval("answer_relevance", version="judge-v1", labels=["llm_judge"], timeout_seconds=30)
+async def answer_relevance(session):
+ value, reasoning = await ask_judge(session) # your LLM call: a 0-1 score and why
+ return EvalResult(score=Score(value, passed=value >= 0.7), reasoning=reasoning)
+```
\ No newline at end of file
diff --git a/docs/ar/index.mdx b/docs/ar/index.mdx
index 92b389a32..dea610256 100644
--- a/docs/ar/index.mdx
+++ b/docs/ar/index.mdx
@@ -1,5 +1,4 @@
---
----
title: "اجعل وكيلك failproof"
description: "قابلية المراقبة والإنفاذ لكل محرك يعمل به وكلاؤك — برامج سطر الأوامر للترميز، بوابات الدردشة، المساعدات المستضافة ذاتياً، والوكلاء المزودين بآليات المراقبة الخاصة بك."
icon: "shield-check"
diff --git a/docs/ar/policies/deploy.mdx b/docs/ar/policies/deploy.mdx
index b2aa395d4..6d13da67a 100644
--- a/docs/ar/policies/deploy.mdx
+++ b/docs/ar/policies/deploy.mdx
@@ -1,52 +1,94 @@
---
----
-title: "نشر السياسات"
-description: "طرح نسخة سياسة تمت مراجعتها على الأجهزة المخطط لها."
+title: "نشر سياسة"
+description: "ضع نسخة سياسة مختبرة على الآلات في وضع المراقبة، وفرضها، وتأكد من أن كل آلة التقطتها."
icon: "cloud-upload"
---
-يربط النشر نسخة واحدة أو أكثر من السياسات بمجموعة مستهدفة من الأجهزة المسجلة.
+يضع النشر نسخ السياسات المنشورة على آلة، كل منها بأحد التأثيرين:
+
+- **المراقبة** تسجل ما كانت السياسة ستفعله، ولا تحجب أي شيء.
+- **الإنفاذ** يتصرف بناءً على القرار: `deny` يحجب الاستدعاء و`instruct` يوجه الوكيل.
+
+## إضافة آلة
-## تطبيق النشر
+تظهر الآلة ضمن **Admin → enforcement** بمجرد اتصالها بـ Cloud. إذا لم تكن موجودة بعد:
- 1. انتقل إلى **Admin → enforcement**، ابحث عن الجهاز، وقم بتوسيع صفه.
- 2. حدد **edit**، أضف نسخة السياسة المراجعة، واختر **observe** أو تأثيرها المفروض.
- 3. طبق التغيير، ثم انتظر الفحص التالي للجهاز وأكد حالة نشره وتغطيته.
- 4. انتقل إلى **Observe → policy** لفحص القرارات المباشرة.
+ 1. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا باستخدام `policies:pull`، حتى تتمكن الآلة من استقبال النشرات، و`events:add`، حتى تصل قراراتها إلى Cloud.
+ 2. اتصل بالآلة باستخدام هذا المفتاح — [ربط آلة بـ Cloud](/ar/start/setup#connect-a-machine-to-cloud) يشرح ذلك.
+ 3. تأكد من ظهورها ضمن **Admin → enforcement**.
+
+
+ على الآلة:
- 
+ ```bash
+ npm install -g failproofai
+ failproofai config
+ failproofai config --status
+ ```
+
+ في محطة طرفية، يطلب `failproofai config` ما إذا كان يجب الاتصال بـ Cloud ويأخذ المفتاح عند موجه مخفي. ثم تأكد من تسجيل الآلة باستخدام `fp fleet list` من أي مكان.
-
- انشر من واجهة سطر الأوامر باستخدام `fp fleet`. راجع المجموعة الناتجة قبل تطبيقها — `deploy` يطبع الخطة الكاملة ويطلب **فقط على طرفية تفاعلية بدون `--json`**. تحت `--json`، أو مع `--yes`، أو مع إعادة توجيه stdin (خطوة CI، نص برمجي، وكيل يقوم بتنفيذ شيء ما) يتم التطبيق فوراً بدون خطة وبدون طلب — لذا قم بتشغيل `fp fleet show ` أولاً إذا كنت تريد مراجعة:
+
+
+## نشر في وضع المراقبة
+
+
+
+ 1. انتقل إلى **Admin → enforcement**، وجد الآلة، وأوسّع صفها.
+ 2. حدد **edit**، أضف نسخة السياسة المختبرة، واختر **observe**.
+ 3. طبق التغيير، ثم انتظر الفحص التالي للآلة وتأكد من حالة نشرها والتغطية.
+ 4. انتقل إلى **Observe → policy** لفحص القرارات المباشرة.
+ 
+
+
```bash
fp fleet list
fp fleet show
- fp fleet deploy --add no-force-push
+ fp fleet deploy --add no-force-push:observe
```
- يعرض `fp fleet diff ` القصد مقابل التسليم (يقرأ الجهاز على أنه `behind` حتى يستقصي مرة أخرى)، و`fp fleet history ` يسرد الأجيال، و`fp fleet rollback ` يعيد تطبيق واحد — يرفض إذا كان هذا الجيل يسمي سياسة تم تعطيلها أو حذفها منذ ذلك الحين.
+ اللاحقة `:observe` هي ما يجعلها في وضع المراقبة: `--add no-force-push` بدون لاحقة يحافظ على التأثير الذي تمتلكه الآلة بالفعل لتلك السياسة، وخلاف ذلك ينفذ. غيّره لاحقًا إلى الإنفاذ باستخدام `--add no-force-push:enforce`.
+
+ `deploy` **يستبدل مجموعة السياسات الكاملة للآلة** بالنتيجة. يطبع الخطة، ثم يطلب التأكيد — لكن فقط على محطة طرفية تفاعلية. باستخدام `--yes`، ضمن `fp --json`، أو مع إعادة توجيه stdin (خطوة CI، نص برمجي، وكيل ينفذ أوامر) يتم التطبيق دون طلب؛ الخطة لا تزال مطبوعة أو مُرجعة كـ `plan` ضمن `--json`.
- افحص الجهاز نفسه باستخدام `failproofai config --status`، واستخدم `fp sessions --env production --since 24h` و`fp events --event-type hook_completed` بعد النشر للتحقق من وصول النشاط إلى Cloud.
+ على الآلة، `failproofai policies` تدرج السياسات المُدارة بواسطة Cloud التي تعمل و`failproofai config --status` يعرض اتصالها. استخدم `fp sessions --env production --since 24h` و`fp events --event-type hook_completed` لتأكيد وصول نشاطها إلى Cloud.
-
- انشر نسخة تمت مراجعتها، وليس مسودة قابلة للتغيير، بدءاً من جهاز غير إنتاجي أو مجموعة صغيرة يمكنك فحص جلساتها.
+
+ اختر النسخة المنشورة والآلات التي يجب تشغيلها عليها.
-
- راجع المطابقات والأسباب والأدوات المتأثرة والإيجابيات الكاذبة دون حجب العمل.
+
+ راجع التطابقات والأسباب والأدوات المتأثرة والإيجابيات الخاطئة بينما لا يتم حجب أي شيء.
-
- قم بالترقية بعد ملاحظة المطابقات التي تفصل الإجراءات غير الآمنة عن الإجراءات الصحيحة، ثم تأكد من أن كل جهاز مقصود قد سحب النشر ويقوم بالإبلاغ عن القرارات.
+
+ غيّر التأثير إلى الإنفاذ بمجرد فصل التطابقات المراقبة للإجراءات غير الآمنة عن الإجراءات الصحيحة، ثم تأكد من أن كل آلة مقصودة انسحبت التغيير وتقدم القرارات.
-تحتاج الأجهزة إلى إمكانية `policies:pull`. يتم التحكم في الإبلاغ عن الأحداث بشكل منفصل بواسطة `events:add`؛ تحقق من كليهما عندما تتوقع تحليل Cloud وفرض.
+## التحقق من التغطية
+
+التغطية تجيب على ما إذا كانت السياسة تعمل حيث توجد المخاطرة.
+
+1. انتقل إلى **Admin → enforcement** واستعرض إجماليات الإنفاذ والمراقبة.
+2. ابحث عن آلة بالمعرف أو الملصق، أو قم بالتصفية للآلات التي تفتقد سياسة.
+3. وسّع الصف لمقارنة السياسات المعينة والنشر المبلّغ عنه والفحص الأخير والسجل.
+4. أحدّث بعد فترة الاستطلاع للآلة عندما يكون النشر المطبق لا يزال معلقًا.
+
+
+
+ابحث عن الآلات التي لم تسحب النشر الأخير، والآلات المسجلة التي توقفت عن الإبلاغ، والسياسة المعينة للبيئة الخاطئة، وانجراف الإصدار بعد تحديث متقطع.
+
+ضع تسميات للآلات حسب الحمل والبيئة — أسماء المضيفين وحدها نادراً ما تستمر بعد الزيادة التلقائية أو الاستبدال:
+
+```bash
+failproofai config --machine-label checkout-runner-03
+```
- إدارة الفرض هي سير عمل إداري سحابي. لا تتعامل مع مسارات الفرض الحصرية للجذر على أنها نقاط نهاية API عادية من `/v1`.
+ إدارة الإنفاذ هي سير عمل إداري بـ Cloud. لا تتعامل مع مسارات الإنفاذ الحصرية للـ root كنقاط نهاية عادية `/v1` API للعملاء.
\ No newline at end of file
diff --git a/docs/ar/policies/editor.mdx b/docs/ar/policies/editor.mdx
index ed6ed1238..e0e244339 100644
--- a/docs/ar/policies/editor.mdx
+++ b/docs/ar/policies/editor.mdx
@@ -1,50 +1,96 @@
---
----
-title: "محرر السياسات"
-description: "إنشاء ومراجعة السياسات ذات الإصدارات من نمط فشل مؤكد."
+title: "كتابة سياسة"
+description: "دع Failproof AI يصيغ سياسة من نتيجة تدقيق، أو اكتبها بنفسك، ثم راجعها واختبرها ونشرها."
icon: "file-pen-line"
---
-استخدم محرر السياسات لتحويل نتيجة بحث أو مشكلة إلى قاعدة قابلة للنشر. احتفظ بالتأليف منفصلاً عن النشر بحيث لا يمكن لمسودة أن تغيّر السلوك الحي بصمت.
+هناك طريقتان لكتابة سياسة: السماح لـ Failproof AI بصياغتها من نتيجة تدقيق، أو كتابة الكود بنفسك. لا يتم نشر أو نشر أي شيء حتى تختار القيام بذلك.
+
+## كتابة سياسة من تدقيق
+
+يكتشف التدقيق عطلاً؛ والسياسة توقف حدوثها مرة أخرى. يصيغ Failproof AI السياسة من أدلة النتيجة نفسها.
-عندما تكون لديك مشكلة بها نمط إجراء قابل للتكرار، افتحها تحت **Analyze → issues** واختر **generate policy**. يشرح Failproof AI أولاً ما إذا كانت السياسة يمكنها التعبير عن المشكلة، ثم تنقل النية المراجعة وسياق النتيجة إلى المحرر. يبقى المصدر المُنتج كمسودة حتى تنشره.
+### 1. تشغيل تدقيق
-## نشر إصدار السياسة
+[شغّل تدقيق](/ar/audits/run) على الجلسات التي يحدث فيها الفشل. تحمل كل نتيجة جلسات الأدلة الخاصة بها والسبب الجذري ومسار الوقاية المقترح. ابدأ من نتيجة لها **نمط إجراء قابل للتكرار** — يمكن للسياسة فقط إيقاف ما يمكنها التعرف عليه في حدث الخطاف.
+
+### 2. إنشاء المسودة
-
- 1. انتقل إلى **Admin → policy editor** وفي **compose**، وصف نمط الفشل أو الصق مصدر سياسة JavaScript.
- 2. تحقق من صحة المصدر وأصلح كل خطأ يتم الإبلاغ عنه.
- 3. أدخل هوية السياسة وانشرها، ثم استخدم **library** للمقارنة أو تعطيل الإصدارات.
- 4. اختر **enforcement** عندما يكون الإصدار جاهزاً لنشر الآلة.
+
+ 1. افتح مشكلة النتيجة ضمن **Analyze → issues** وتحقق من الجلسات المقتبسة والسبب الجذري والتوصية.
+ 2. اختر **generate policy**. يخبرك Failproof AI أولاً ما إذا كانت السياسة يمكن أن تعبر عن المشكلة على الإطلاق. تعني نتيجة **no policy** أن الحل هو تنبيه أو تغيير سير عمل أو شخص — وليس سياسة.
+ 3. اختر **write this policy**. يصبح عنوان المشكلة والنتيجة والسبب الجذري والتوصية والنية الإنفاذ المقترحة مسودة في **Admin → policy editor**. استخدم **open the editor anyway** عندما تختلف مع فحص الصلاحية.
- 
+ 
- انشر من واجهة سطر الأوامر باستخدام `fp policies publish`. تُنشئ **إصدار جديد** ولا تحرر واحداً موجوداً، وتتحقق من المصدر باستخدام node قبل الإرسال — لا يفعل ذلك شيء آخر في المراحل اللاحقة، لذا كان خطأ بناء الجملة قد يظهر على الآلة في وقت الفرض:
+ اقرأ الأدلة، ثم صِغ مع المساعد. يطبع `compose` المصدر لمراجعتك ولا ينشر شيئاً:
```bash
- fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny
- fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+ fp issues show
+ fp audits finding
+ fp policies compose "Block git push --force on release branches"
```
- النشر لا ينشر أي شيء — يبقى إصدار جديد غير مستخدم حتى يضعه `fp fleet deploy` على آلة. يقوم `fp policies compose ""` بصياغة المصدر بمساعدة مساعد Cloud ويطبعه للمراجعة بدلاً من نشره.
-
- لتثبيت سياسة في وكيل CLI محلي بدلاً من ذلك (وليس Cloud)، استخدم `failproofai policies --install --custom ./checkout.policies.ts --cli claude --scope project`.
+ يتطلب `compose` جلسة موقعة (`fp login`) دورها لديه `policies:write`؛ يرفض مفاتيح API.
-## قائمة التحقق من التأليف
+### 3. مراجعة المسودة
+
+المسودة نقطة انطلاق وليست حكماً. قبل النشر، تحقق من أنها:
+
+1. تسمي وضع الفشل باللغة التشغيلية.
+2. تطابق فقط أحداث الخطاف والأدوات التي تحمل أدلة كافية للقرار.
+3. تستخدم أضيق شرط يمسك الإجراء غير الآمن.
+4. تعيد سبباً يخبر الوكيل ما يجب فعله بدلاً من ذلك.
+5. تستخدم `instruct` حيث يمكن للوكيل تصحيح المسار بأمان، و `deny` فقط حيث السماح بالإجراء غير مقبول أو لا رجعة فيه.
+
+تحقق من المصدر في المحرر وأصلح كل خطأ تم الإبلاغ عنه.
+
+### 4. اختبره، ثم انشره
+
+شغّل **backtest** تحت المصدر قبل النشر: يعيد تشغيل المسودة مقابل الاستدعاءات التي قامت بها أسطولك بالفعل ويحسب الاستدعاءات الفعالة التي كانت ستقاطعها. [Test a policy](/ar/policies/test) يغطي ذلك والفحوصات الأخرى.
+
+عندما تتصرف بشكل صحيح، أدخل هوية السياسة واختر **publish version**. يؤدي النشر إلى إنشاء نسخة ثابتة وعدم نشر أي شيء: فهو يبقى غير مستخدم حتى [تنشره](/ar/policies/deploy). من محطة نهائية:
+
+```bash
+fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+```
+
+يتحقق `publish` من المصدر قبل إرساله، لذا تظهر أخطاء بناء الجملة هنا بدلاً من الماكينة وقت الإنفاذ.
+
+## اكتبه بنفسك
+
+السياسة هي JavaScript أو TypeScript ضد API `failproofai`:
+
+```ts
+import { customPolicies, allow, deny } from "failproofai";
+
+customPolicies.add({
+ name: "protect-production-paths",
+ description: "Block writes to production configuration",
+ match: { events: ["PreToolUse"] },
+ fn: async (ctx) => {
+ if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
+ const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
+ if (path.split("/").includes("production")) {
+ return deny("Writes to production configuration require approval.");
+ }
+ return allow();
+ },
+});
+```
+
+هذا يطابق `production/config.yml` و `/srv/production/config.yml` و `/srv/production` و `C:\\production\\config.yml` لكل من `Write` و `Edit`، لكن ليس `production-backup`: يجب أن تكون `production` جزءاً كاملاً من المسار. السياق يحمل أيضاً نوع الحدث والحمول المُعاد تنسيقه وبيانات وصفية الجلسة والمعاملات والمصدر CLI عند توفره — انظر [policy SDK](/ar/reference/policy-sdk).
+
+لنشره كنسخة، ألصق المصدر في **compose** في **Admin → policy editor** واتبع الخطوات 3 و 4 أعلاه، أو انشر الملف من محطة نهائية باستخدام `fp policies publish`.
-1. سمّ نمط الفشل باللغة التشغيلية.
-2. اختر أحداث الخطاف والأدوات التي تحتوي على أدلة كافية للقرار.
-3. اكتب أضيق شرط يطابق السلوك غير الآمن.
-4. أرجع سبباً يخبر الوكيل أو المشغل ما يجب فعله بعد ذلك.
-5. أضف أمثلة يجب أن تطابق وأمثلة يجب أن تبقى مسموحة.
-6. احفظ إصدار جديد واطلب مراجعة.
+لتشغيله على ماكينة بدون Cloud، احفظه تحت `.failproofai/policies/` باسم ينتهي بـ `policies.js` أو `policies.mjs` أو `policies.ts` — تلك تحمل تلقائياً في نطاق المشروع والمستخدم — أو ثبّته بالمسار:
-استخدم `instruct` عندما يمكن للوكيل تصحيح المسار بأمان. استخدم `deny` عندما يؤدي السماح بالإجراء إلى خلق خطر غير مقبول أو غير قابل للعكس.
+```bash
+failproofai policies --install --custom ./security.policies.ts --scope project
+```
-
- إصدارات السياسة هي مدخلات نشر غير قابلة للتغيير. يؤدي تحرير مسودة إلى إنشاء إصدار جديد؛ لا ينبغي أن يعيد كتابة الإصدار المعين بالفعل للآلات.
-
\ No newline at end of file
+أعط كل سياسة اسماً فريداً عبر الاتفاقية والسياسات المخصصة والحزمة والسياسات المدارة من قبل Cloud.
\ No newline at end of file
diff --git a/docs/ar/policies/failure-behavior.mdx b/docs/ar/policies/failure-behavior.mdx
index ba16d9ece..6e590601e 100644
--- a/docs/ar/policies/failure-behavior.mdx
+++ b/docs/ar/policies/failure-behavior.mdx
@@ -1,68 +1,69 @@
---
----
title: "سلوك الفشل"
-description: "فهم ما يحدث عند عدم توفر تقييم السياسة أو مُحقِّق محلي."
+description: "افهم ما يحدث عندما يكون تقييم السياسة أو مشترك الأداة المحلي غير متاح."
icon: "shield-alert"
---
-تم تصميم Failproof AI بحيث يكون فشل الإنفاذ مرئياً بدلاً من السماح الصامت بالعمل المحفوف بالمخاطر.
+تم تصميم Failproof AI بحيث يكون فشل الإنفاذ مرئيًا بدلاً من السماح صامتًا بعمل محفوف بالمخاطر.
-## تشخيص كتلة فشل مغلقة
+## تشخيص كتلة الفشل المغلقة
-
+
1. انتقل إلى **Admin → enforcement** وافتح الجهاز.
- 2. تحقق من آخر تسجيل دخول له والنشر المعين والنشر المُبلغ عنه.
+ 2. تحقق من آخر فحص له والنشر المعين والنشر المبلغ عنه.
3. انتقل إلى **Observe → policy** وافتح جلسة القرار المرفوض.
- 4. تأكد مما إذا كان السبب يُبلغ عن إمكانية الوصول إلى مُحقِّق أو عدم توافق الإصدار أو السياسة نفسها.
+ 4. أكد ما إذا كان السبب يشير إلى إمكانية الوصول إلى مشترك الأداة أو عدم التطابق الإصدار أو السياسة نفسها.
-
+
```bash
failproofai config --status
npm install -g failproofai@latest
failproofai config
```
- إعادة تشغيل `failproofai config` يحدّث ويعيد تشغيل مُحقِّق بعد ترقية الحزمة.
+ إعادة تشغيل `failproofai config` يحدّث ويعيد تشغيل مشترك الأداة بعد ترقية الحزمة.
-على جهاز تم تكوينه لاستخدام `failproofaid`، يكون المُحقِّق هو المُقيّم الوحيد. إذا كان غير قابل للوصول أو لم تطابق نسخة البروتوكول الخاصة به CLI، يفشل تقييم الخطاف بشكل مغلق. يتم رفض الإجراء برسالة توجه المشغّل إلى فحص مُحقِّق أو تحديثه.
+على جهاز تم تكوينه لاستخدام `failproofaid`، مشترك الأداة هو المقيّم الوحيد. إذا كان غير قابل للوصول أو إصدار البروتوكول الخاص به لا يطابق واجهة سطر الأوامر، فإن تقييم hook يفشل بشكل مغلق. يتم رفض الإجراء مع سبب يوجه المشغل للتحقق من مشترك الأداة أو تحديثه.
-قبل تكوين المُحقِّق، تقيّم الخطافات السياسات في العملية. بمجرد تسجيل تكوين المُحقِّق، لا يعود Failproof AI يرجع بصمت إلى مُقيّم ثانٍ عند فشل المُحقِّق.
+قبل تكوين مشترك الأداة، يتم تقييم hooks للسياسات داخل العملية. بمجرد تسجيل تكوين مشترك الأداة، لا يعود Failproof AI يعود صامتًا إلى مقيّم ثاني عند فشل مشترك الأداة.
-## الرد على قرار فشل مغلق
+## الاستجابة لقرار الفشل المغلق
1. شغّل `failproofai config --status`.
2. إذا اختلفت الإصدارات، أعد تشغيل `failproofai config` بعد تحديث الحزمة.
-3. إذا كان المُحقِّق غير قابل للوصول، افحص حالة الخدمة والسجلات المحلية.
-4. استأنف عمل الوكيل فقط بعد التأكد من أن مسار تقييم السياسة معروف وسليم.
+3. إذا كان مشترك الأداة غير قابل للوصول، تفقد حالة خدمته والسجلات المحلية.
+4. استأنف عمل الوكيل فقط بعد التأكد من صحة مسار تقييم السياسة المعروف.
- لا تُعد محاولة الإجراء المحظور بشكل متكرر. رد فشل مغلق يعني أن النظام لم يتمكن من إثبات أن الإجراء كان آمناً.
+ لا تحاول بشكل متكرر الإجراء المحظور. استجابة الفشل المغلق تعني أن النظام لم يتمكن من تأكيد أن الإجراء كان آمنًا.
-## حزمة لن يتم تحميلها
+## لن تحميل حزمة
-الجهاز الذي تم إخباره بإنفاذ حزمة، ولا يستطيع تشغيلها، يرفضها بدلاً من المتابعة بصمت. المُحفّز هو **توقع مُسجّل**، وليس توقع فارغ أبداً: جهاز بدون حزم مثبتة يكون صامتاً، بينما حزمة تم إعلانها ولن يتم حلها — أو التي تسجل أقل مما يُعلنه البيان — ترفضها.
+جهاز تم إخباره بفرض حزمة ولا يمكنه تشغيلها يرفض بدلاً من المتابعة بصمت. المحفّز هو **توقع مسجل**، وليس توقع فارغ أبدًا: جهاز لا يحتوي على حزم مثبتة يكون صامتًا، في حين أن حزمة يتم التصريح بها ولن يتم حلها - أو التي تسجل أقل مما يصرح به البيان - ترفض.
-الرفض **ضيق**، بخلاف مُحقِّق غير قابل للوصول. مُحقِّق لا يمكن الوصول إليه يعني عدم حدوث أي تقييم على الإطلاق، لذا لا يمكن معرفة شيء آمن. حزمة لن يتم تحميلها لها مجموعة قابلة للعد من الحراسات المفقودة، لأن كل سياسة معلنة تحمل `match` خاصة بها — لذا ترفض فقط الأحداث والأدوات التي غطتها تلك السياسات، وكل شيء آخر يتقدم.
+الرفض **محدود**، بخلاف مشترك أداة غير قابل للوصول. مشترك أداة لا يمكن الوصول إليه يعني عدم حدوث أي تقييم على الإطلاق، لذا لا يمكن معرفة شيء آمن. حزمة لن تحميل لها مجموعة معددة من الحراس المفقودين، لأن كل سياسة معلنة تحمل الخاص بها `match` - لذا فهي ترفض فقط الأحداث والأدوات التي غطتها تلك السياسات، وكل شيء آخر يستمر.
-لا تحدث من أجل:
+لا يتم تشغيله لـ:
-- حزمة `observe`، التي تقيّم وتتجاهل بالبناء
-- السياسات التي لم تأخذها أبداً، أو أطفأتها بشكل صريح
-- حزمة لم يستقبلها المحمّل، حيث لا يمكن التمييز بين "لا تسجيلات" وتخطي مقصود
+- حزمة `observe`، التي تقيّم وتتجاهل حسب البناء
+- السياسات التي لم تأخذها أبدًا، أو أيقفتها بشكل صريح
+- حزمة لم يستقبلها المحمل، حيث لا يمكن التمييز بين "لا توجد تسجيلات" وتخطي متعمد
- توقف جلسة نشط
-- انتهاء مهلة زمنية للتحميل، وهي عابرة — يجب ألا يؤدي لحظة واحدة من البطء إلى الرفض حتى يتدخل إنسان
+- مهلة زمنية للتحميل، وهي مؤقتة - لا يجب أن لحظة واحدة بطيئة على القرص ترفض حتى يتدخل الإنسان
-`UserPromptSubmit` **توجيهات** بدلاً من الرفض، بغض النظر عما أعلنته السياسة المفقودة. سيؤدي الرفض الشامل إلى أخذها معه وقفل الوكيل الذي يمكنه إصلاح المشكلة.
+`UserPromptSubmit` **يأمر** بدلاً من الرفض، مهما كانت السياسة المفقودة تصرح به. الرفض الشامل سيأخذها معه ويقفلك خارج الوكيل الذي يمكنه إصلاح المشكلة.
-### ماذا تفعل
+### ما يجب فعله
```bash
-failproofai pack list
+failproofai policies
```
-يسمي أي حزمة مثبتة لن يتم تحميلها، ويقول السبب، والخروج بقيمة غير صفر. ثم أعد تثبيتها (`failproofai pack add `) أو أزلها (`failproofai pack remove `) — إزالتها تسحب التوقع، والرفض يتوقف معها.
\ No newline at end of file
+يعلم القائمة حزمة مثبتة يتم تسجيل تثبيتها أو digest يتحقق لم يعد صحيحًا، وتقول السبب. لا تستورد الحزمة، لذا واحدة التي تفشل فقط بمجرد تحميلها - تسجيل أقل مما يصرح به البيان - تُدرج كالمعتاد؛ الرفض أدناه هو ما يسمي ذاك. كلا الطريقتين، أعد تثبيتها (`failproofai policies add `) أو أزلها (`failproofai policies remove `) - إزالتها تسحب التوقع، والرفض يتوقف معها.
+
+ينسب الرفض نفسه إلى `pack/failproofai-pack-unavailable`، الذي يتفوق على السياسات التي تم تحميلها، لذا فإن استدعاء أداة محظور يسمي الحزمة المفقودة بدلاً من أي حارس باقٍ حدث لينطلق أولاً.
\ No newline at end of file
diff --git a/docs/ar/policies/local-configuration.mdx b/docs/ar/policies/local-configuration.mdx
index 690de26c5..50592799c 100644
--- a/docs/ar/policies/local-configuration.mdx
+++ b/docs/ar/policies/local-configuration.mdx
@@ -1,56 +1,49 @@
---
----
title: "التكوين المحلي"
-description: "التحكم في نطاق السياسة والمعاملات والملفات المخصصة وإعدادات Failproof AI على مستوى الجهاز."
+description: "تحكم في نطاق السياسة والمعاملات والملفات المخصصة وإعدادات Failproof AI على مستوى الجهاز."
icon: "file-cog"
---
-يفصل Failproof AI بين اختيار السياسة وإعدادات الجهاز والخادم. يحافظ هذا على قابلية مراجعة اختيارات سياسة المستودع بينما تبقى بيانات الاعتماد وحالة الخادم خارج المستودع.
+يحافظ Failproof AI على فصل ما يمكن للمستودع أن يلتزم به — توصيل الخطافات ومعاملات السياسة والسياسات المخصصة — عن حالة الجهاز مثل بيانات الاعتماد والحزم المثبتة والخادم.
-## اختر نطاق السياسة
+## اختر نطاقًا
-
-
- شغّل `failproofai` بدون معاملات لفتح لوحة معلومات السياسة المحلية. اختر نطاق المستخدم أو المشروع أو المحلي قبل تفعيل سياسة بحيث يتم كتابة التغيير إلى ملف التكوين المقصود.
+يقرر النطاق مكان توصيل الخطافات وملف التكوين الذي تكتب فيه المعاملات ومسارات السياسات المخصصة:
- - **المستخدم** ينطبق على جميع المشاريع على هذا الجهاز.
- - **المشروع** ينتمي إلى المستودع ويمكن إرساله.
- - **محلي** يتجاوز مشروعًا واحدًا لمستخدم واحد ويجب أن يبقى في gitignore.
+- **المستخدم** ينطبق على جميع المشاريع على هذا الجهاز.
+- **المشروع** ينتمي إلى المستودع ويمكن الالتزام به.
+- **محلي** يتجاوز مشروعًا واحدًا لمستخدم واحد ويجب أن يبقى معاملاً من قبل gitignore.
-
-
- ```bash
- failproofai policy add block-rm-rf --scope user
- failproofai policy add block-force-push --scope project
- failproofai policy add warn-large-file-write --scope local
- failproofai policies
- ```
+```bash
+failproofai policies --install --cli claude --scope project # wire hooks for this repository
+failproofai policies --install --cli claude --scope user # or for every project on this machine
+failproofai policies
+```
- لا يدعم كل محرك النطاق المحلي. يرفض CLI نطاقًا لا يستطيع المحرك المختار تمثيله.
-
-
+لا يدعم كل جهاز النطاق المحلي؛ يرفض CLI نطاقًا لا يمكن لجهاز التشغيل المختار تمثيله.
+
+سياسات الحزم التي تعمل **لا** تُحدد النطاق. يتم تسجيل المفتاح مع الحزمة المثبتة، لذا فإن `failproofai policies add ` يشغل سياسة على كامل الجهاز، مهما قال `--scope`.
| النطاق | ملف تكوين السياسة |
| --- | --- |
-| مشروع | `/.failproofai/policies-config.json` |
+| المشروع | `/.failproofai/policies-config.json` |
| محلي | `/.failproofai/policies-config.local.json` |
-| مستخدم | `~/.failproofai/policies-config.json` |
+| المستخدم | `~/.failproofai/policies-config.json` |
-يتم دمج السياسات المفعلة كاتحاد. معاملات السياسة تستخدم النطاق الأول الذي يحدد المعاملات لتلك السياسة، بالترتيب: مشروع → محلي → مستخدم. تستخدم مسارات السياسات المخصصة الصريحة النطاق الأول الذي يحددها.
+معاملات السياسة تستخدم أول نطاق يحدد معاملات لتلك السياسة، بترتيب المشروع → محلي → المستخدم. مسارات السياسات المخصصة الصريحة تستخدم أول نطاق يحددها.
-## كوّن معاملات السياسة
+## قم بتكوين معاملات السياسة
-
- افتح السياسة في لوحة معلومات محلية، حرّر المعاملات المدعومة، وحفظ في النطاق المختار. شغّل إجراء وكيل يطابق وآخر لا يطابق، ثم افحص القرار في **Observe → policy**.
+
+ افتح السياسة في لوحة التحكم المحلية وعدّل معاملاتها المدعومة وحفظ في النطاق المختار. قم بتشغيل إجراء وكيل متطابق وغير متطابق، ثم افحص القرار في **Observe → policy**.
- حرّر `policies-config.json` للنطاق المختار، ثم شغّل `failproofai policies` لتسطيح أسماء السياسات أو مفاتيح المعاملات غير المعروفة.
+ عدّل `policies-config.json` للنطاق المختار، ثم قم بتشغيل `failproofai policies`: سيحذرك عن إدخال `policyParams` يسمي سياسة لا تحملها أي حزمة مثبتة. لا يفحص المفاتيح داخل الإدخال، لذا تحقق من تهجئتها مقابل الجدول أدناه.
```json
{
- "enabledPolicies": ["block-rm-rf", "block-force-push"],
"policyParams": {
"block-rm-rf": {
"allowPaths": ["/tmp/build-output"]
@@ -65,21 +58,45 @@ icon: "file-cog"
+### المعاملات التي تقبلها سياسات Failproof AI
+
+تتحقق كل سياسة من أنواع معاملاتها الخاصة.
+
+| السياسة | المعامل | النوع والإفتراضي |
+| --- | --- | --- |
+| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`؛ الإدخالات تحتوي على `regex` و `label` |
+| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` |
+| `block-sudo` | `allowPatterns` | `string[]`, `[]` |
+| `block-rm-rf` | `allowPaths` | `string[]`, `[]` |
+| محجوبات البنية التحتية | `allowPatterns` | `string[]`, `[]` |
+| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` |
+| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` |
+| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` |
+| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` |
+| `warn-large-file-write` | `thresholdKb` | `number`, `1024` |
+| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`؛ `string`, `"main"` |
+| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` |
+| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` |
+
+
+ نمط السماح يوسع ما قد يفعله الوكيل. اختبر التجزئة الدقيقة وتباينات الأوامر على جهاز التشغيل الهدف قبل نشره عبر أسطول.
+
+
## افهم ملفات الجهاز
-يحتوي `~/.failproofai` على ملفات منفصلة لحدود ثقة منفصلة:
+`~/.failproofai` يحتوي على ملفات منفصلة لحدود الثقة المختلفة:
| المسار | الغرض |
| --- | --- |
-| `config.json` | إعدادات الخادم والتدقيق والقياس عن بُعد غير السرية |
-| `credentials.json` | بيانات اعتماد السحابة؛ مخزنة برمز إذن المالك فقط |
-| `policies-config.json` | اختيار نطاق المستخدم المدمج والمعاملات والمسارات المخصصة الصريحة |
-| `policies/` | سياسات اتفاقية المستخدم وتحفظات السياسة المدارة من السحابة |
-| `hook-activity/` | سجل قرار السياسة المحلية |
-| `state/` | ملف الخادم والصحة والإيقاف المؤقت وحالة وقت التشغيل |
+| `config.json` | إعدادات الخادم وعدم السرية والتدقيق والقياس عن بعد |
+| `credentials.json` | بيانات اعتماد السحابة؛ مخزنة بأذونات المالك فقط |
+| `policies-config.json` | معاملات نطاق المستخدم ومسارات السياسات المخصصة الصريحة |
+| `policies/` | سياسات اتفاقية المستخدم والحزم المثبتة وأي من سياساتها مشغلة وتخطيطات السياسة المدارة من السحابة |
+| `hook-activity/` | سجل قرارات السياسة المحلية |
+| `state/` | حالة الخادم والصحة والإيقاف المؤقت وحالة التشغيل |
-استخدم `FAILPROOFAI_HOME` لنقل تخطيط الجهاز الكامل لحاوية أو اختبار معزول. لا تنقل دلائل الحالة الفردية بشكل مستقل.
+استخدم `FAILPROOFAI_HOME` لنقل تخطيط الجهاز الكامل لحاوية أو اختبار معزول. لا تنقل مجلدات الحالة الفردية بشكل مستقل.
- لا تُرسل `credentials.json`. أرسل تكوين سياسة المشروع وسياسات اتفاقية المشروع فقط بعد مراجعتها كرمز فرض.
+ لا تلتزم أبدًا بـ `credentials.json`. التزم بتكوين السياسة على مستوى المشروع وسياسات اتفاقية المشروع فقط بعد مراجعتها كرمز إنفاذ.
\ No newline at end of file
diff --git a/docs/ar/policies/overview.mdx b/docs/ar/policies/overview.mdx
index 5e2a3ec67..d33c2f972 100644
--- a/docs/ar/policies/overview.mdx
+++ b/docs/ar/policies/overview.mdx
@@ -1,64 +1,54 @@
---
----
title: "السياسات"
-description: "راقب أو وجّه أو احجب إجراءات الوكيل قبل أن تتكرر حالة فشل معروفة."
+description: "راقب أو وجّه أو احجب إجراءات الوكيل قبل تكرار فشل معروف."
icon: "shield-check"
---
-تقيّم السياسة حدث خطاف الوكيل وتُرجع أحد ثلاثة قرارات:
+تقيّم السياسة حدث خطاف الوكيل وتعيد أحد ثلاثة قرارات:
- `allow` يسمح بمتابعة الإجراء.
-- `instruct` يعطي الوكيل توجيهات تصحيحية.
+- `instruct` يعطي الوكيل إرشادات تصحيحية.
- `deny` يحجب الإجراء مع سبب.
-## استخدم أسطح السياسة الثلاثة
-
-
-
- 1. انتقل إلى **Observe → policy** لتصفية وفحص قرارات السياسة من الجلسات.
- 2. انتقل إلى **Admin → policy editor** لإنشاء وتحقق من صحة ونشر أو تعطيل أو فحص إصدارات غير قابلة للتغيير.
- 3. انتقل إلى **Admin → enforcement** لتعيين الإصدارات والتأثيرات على الأجهزة.
-
- استخدم صفحة السياسة لفهم ما يطابق بالفعل قبل تأليف أو تغيير الإنفاذ.
-
- 
-
- محرر السياسة هو حيث تحول حالة الفشل إلى كود، وتتحقق منها، وتنشر إصدارًا غير قابل للتغيير.
-
- 
-
- يقوم الإنفاذ بعد ذلك بتعيين الإصدار المنشور وتأثيره (المراقبة أو الإنفاذ) للأجهزة.
-
- 
+## مكان وجود السياسات
- تحقق من القرارات على صفحة السياسة بعد النشر بحيث تكون عروض التأليف والأسطول مرتبطة بنشاط الوكيل الفعلي.
-
-
- استخدم `failproofai` لتثبيت التحقق من السياسة محليًا:
+| في لوحة التحكم | ما تفعله هناك |
+| --- | --- |
+| **Observe → policy** | راجع القرارات من جلسات حقيقية: أي سياسة طابقت، على أي جهاز، ولماذا |
+| **Admin → policy editor** | اكتب سياسة، واختبرها بأثر رجعي ضد حركة المرور السابقة، وانشر نسخة غير قابلة للتغيير، وقارن الإصدارات في **library** |
+| **Admin → enforcement** | ضع الإصدارات على الأجهزة في وضع المراقبة أو الفرض |
- ```bash
- failproofai policies
- failproofai policy add block-rm-rf --scope project
- failproofai config --status
- ```
+محرر السياسة هو حيث يصبح الفشل قاعدة. صف وضع الفشل أو الصق مصدر السياسة في **compose**، واختبر المسودة بأثر رجعي ضد حركة المرور التي لديك بالفعل، ثم انشر نسخة:
- استخدم `fp` للعثور على جلسات السحابة والأحداث التي تحتوي على قرارات السياسة. يبقى التأليف بواسطة السحابة ونشر الأسطول من سير عمل لوحة التحكم.
-
-
+
-للسياسات ثلاثة أسطح مميزة في Failproof AI:
+على جهاز، `failproofai policies` يسرد كل شيء يفرضه هناك. `fp policies` و `fp fleet` يغطيان المحرر والفرض من محطة طرفية — انظر [Cloud CLI reference](/ar/reference/cloud-cli).
-1. **حلل القرارات** في الجلسات والآلات الحسابية والتدقيقات.
-2. **ألّف الإصدارات** باستخدام القواعد المدمجة أو الكود أو محرر السياسة.
-3. **انشر وأنفذ** الإصدارات عبر الأجهزة المختارة.
+## احصل على سياسة
-ابدأ من حالة فشل مؤكدة. عرّف أصغر حدث ومطابقة أداة تحددها، واختبر الأمثلة الشرعية وغير الآمنة، ثم راقب قبل الإنفاذ.
+هناك طريقتان للحصول على واحدة.
-
- فعّل قاعدة تمت مراجعتها للمخاطر الشائعة المتعلقة بالأسرار والأصداف و Git والسحابة وسير العمل.
+
+ دع Failproof AI يصيغ واحدة من نتيجة تدقيق، أو اكتب المصدر بنفسك، ثم راجع واحشره في المحرر.
-
- عبّر عن قرار خاص بسير العمل في JavaScript أو TypeScript.
+
+ ركب حزمة سياسات Failproof AI لحالتك، أو حزمة مجتمعية من مركز السياسات، في أمر واحد.
-
\ No newline at end of file
+
+
+## ثم شحنها
+
+
+
+ اختبر المسودة بأثر رجعي ضد حركة المرور التي لديك بالفعل، وقم بتشغيلها ضد إجراء يجب أن توقفه وواحد يجب أن تسمح به — كل ذلك قبل النشر. انظر [Test a policy](/ar/policies/test).
+
+
+ ضع الإصدار على الأجهزة في وضع **observe**، اقرأ قراراتها، ثم افرضها. انظر [Deploy a policy](/ar/policies/deploy).
+
+
+ كل نشر هو نسخة جديدة غير قابلة للتغيير، لذا فإن النشر الذي يحجب العمل الصحيح يتم التراجع عنه بإعادة نشر الإصدار الجيد الأخير. انظر [Versions and rollback](/ar/policies/rollback).
+
+
+
+لمشاركة السياسات الخاصة بك مع فريق آخر، [انشرها كحزمة](/ar/policies/publish-a-pack). لمعرفة ما يحدث عندما لا يمكن تقييم السياسة على الإطلاق، انظر [Failure behavior](/ar/policies/failure-behavior).
\ No newline at end of file
diff --git a/docs/ar/policies/packs.mdx b/docs/ar/policies/packs.mdx
index ffc553042..1c7163604 100644
--- a/docs/ar/policies/packs.mdx
+++ b/docs/ar/policies/packs.mdx
@@ -1,110 +1,119 @@
---
-title: "حزم السياسات"
-description: "ثبّت مجموعة سياسات منشورة كإصدار GitHub، وأدِر ما تفرضه."
+title: "استخدم حزمة سياسة"
+description: "ادمج حزمة سياسة من Failproof AI لحالتك، أو حزمة مجتمع من مركز السياسات، واختر ما تفرضه."
icon: "package"
---
-الحزمة عبارة عن مجموعة سياسات منشورة كإصدار GitHub. أمر واحد يثبتها، يتم التحقق من قيم التجزئة الخاصة بالإصدار قبل تشغيل أي شيء، ويتم تسجيل الخلاصة حتى لا تتمكن الحزمة من التغيير على جهازك بعد ذلك.
+الحزمة عبارة عن مجموعة من السياسات يتم نشرها كإصدار GitHub. أمر واحد يثبتها: يتم التحقق من قيم اختيار الإصدار قبل تشغيل أي شيء، ويتم تسجيل الخلاصة الخاصة بها بحيث لا يمكن أن تتغير الحزمة على جهازك فيما بعد.
-## ثبّت سياسات Failproof AI
+استعرض كل حزمة وكل سياسة في كل منها على [مركز السياسات](https://befailproof.ai/policy-hub/). هناك نوعان:
+
+- **حزم سياسة Failproof AI** — حزم جاهزة لحالات الاستخدام المحددة مسبقاً: ادمج واحدة وتعمل. [حزمة سياسة وكيل الترميز](https://befailproof.ai/policy-hub/failproofai/policies/) متاحة الآن، وستأتي حزم لحالات استخدام أخرى قريباً.
+- **حزم السياسة المجتمعية** — سياسات كتبها المطورون لحالات الاستخدام الخاصة بهم ونشروها ليستخدمها أي شخص.
+
+## حزم سياسة Failproof AI
+
+### حزمة سياسة وكيل الترميز
```bash
-failproofai pack add core
+failproofai policies add FailproofAI/policies
```
-هذا يثبت المجموعة التي ننشرها، من النسخة الموجودة داخل الحزمة — لذا فهي لا تحتاج إلى شبكة ولا يمكن أن تفشل خلف وكيل. خذ جزءًا منها:
+تحتوي الحزمة على 38 سياسة وتشغل 10 منها التي يميزها البيان كآمنة للتفعيل دون إشراف؛ يتم إدراج الباقي لاختيارك. بعض الأكثر استخداماً، وما إذا كان `policies add` بسيطاً يشغلها:
+
+| السياسة | ما تفعله | مفعّلة افتراضياً |
+| --- | --- | --- |
+| `block-push-master` | يحجب الدفع المباشر للفروع المحمية | نعم |
+| `block-env-files` | يحجب قراءة وكتابة ملفات `.env` | نعم |
+| `protect-env-vars` | يحجب الأوامر التي تفرغ متغيرات البيئة | نعم |
+| `block-sudo` | يحجب `sudo` ما لم تطابق نمط سماح | نعم |
+| `block-curl-pipe-sh` | يحجب السكريبتات المنزلة الموجهة مباشرة إلى shell | نعم |
+| `sanitize-*` (خمس سياسات) | الإبلاغ عن مفاتيح API، رموز Bearer، JWTs، المفاتيح الخاصة، وسلاسل الاتصال الموجودة في مخرجات الأداة | نعم |
+| `block-rm-rf` | يحجب عمليات الحذف العودية الكارثية | لا |
+| `block-force-push` | يحجب الدفع القسري | لا |
+| `block-secrets-write` | يحجب عمليات الكتابة إلى ملفات بيانات الاعتماد والمفاتيح السرية | لا |
+| `warn-destructive-sql` | ينبه على `DROP`، `TRUNCATE`، و`DELETE` بدون `WHERE` | لا |
+
+شغّل أي منها مطفأة بالاسم — `failproofai policies add block-rm-rf` — أو خذ الحزمة بأكملها باستخدام `--all`. انظر كل سياسة فيها، مجمعة حسب الفئة:
```bash
-failproofai pack add core --policy block-rm-rf # واحدة أو عدة مفصولة بفواصل
-failproofai pack add core --category dangerous-commands # فئة كاملة
-failproofai pack add core --all # كل شيء فيها
+failproofai policies show FailproofAI/policies
```
-يسرد `failproofai pack list` كل فئة توفرها الحزمة.
+## حزم السياسة المجتمعية
-## شاهد ما تحتويه الحزمة، قبل تثبيتها
+ينشر المطورون حزماً لحالات الاستخدام التي واجهوها، و[مركز السياسات](https://befailproof.ai/policy-hub/) يسردها. حزمة السياسة المجتمعية منشورة من قبل مؤلفها، وليست مراجعة من قبل Failproof AI، لذا اقرأ ما تحتويه قبل تثبيتها:
```bash
-failproofai pack list acme/support-agent
+failproofai policies show acme/support-agent
```
-يسرد كل سياسة تحملها الحزمة، مجمعة حسب الفئة، يحدد أيها يقوم مؤلفها بتشغيلها افتراضيًا وأيها اختياري. يقرأ **البيان فقط** — القطعة الأساسية لا يتم تنزيلها أبدًا ولا يتم استيرادها، لذلك فإن الاطلاع على حزمة غريبة لا يمكنه تشغيل كود غريب. البيان لا يزال يتم التحقق منه مقابل `SHA256SUMS` الخاص بالإصدار، لذا فإن ما تقرأه هو ما سيتم تثبيته.
-
-`failproofai pack list` بدون مصدر يسرد الحزم المثبتة بالفعل هنا.
+يسرد هذا كل سياسة تحتويها، مجمعة حسب الفئة، ويميز أي منها يشغلها المؤلف افتراضياً. يقرأ **فقط البيان** — لا يتم تنزيل أو استيراد الأداة الأساسية، لذا النظر إلى حزمة الغريب لا يمكن أن يشغل كود الغريب. يتم التحقق من البيان لا يزال ضد `SHA256SUMS` الخاص بالإصدار، لذا ما تقرأه هو ما سيتم تثبيته.
-## ثبّت حزمة شخص آخر
+ثم ثبتها:
```bash
-failproofai pack add acme/support-agent
+failproofai policies add acme/support-agent
```
-أي من هذه يعمل — الصق أيهما لديك:
+أي من هذه تعمل — الصق أيهما لديك:
| المصدر | النتيجة |
| --- | --- |
-| `acme/support-agent` | أحدث إصدار، **مثبت** على الوسم الدقيق الذي تم حله |
+| `acme/support-agent` | أحدث إصدار، **مثبتة** على الوسم الدقيق الذي تم حله |
| `acme/support-agent@v2.1.0` | هذا الإصدار |
-| `github:acme/support-agent@v2.1.0` | نفسه، مكتوب صراحة |
-| `https://github.com/acme/support-agent/releases/tag/v2.1.0` | نفسه، منسوخ من متصفح |
+| `github:acme/support-agent@v2.1.0` | نفس الشيء، مكتوب بصراحة |
+| `https://github.com/acme/support-agent/releases/tag/v2.1.0` | نفس الشيء، منسوخ من المتصفح |
-عدم تسمية وسم يثبت أحدث إصدار **ويثبته**، ثم يخبرك بالوسم الذي اختاره. ما يتم تسجيله يسمي دائمًا إصدارًا واحدًا بالضبط، لذا فإن إعادة التثبيت لا يمكنها الانحراف.
+عدم تسمية وسم يثبت أحدث إصدار **ويثبته**، ثم يخبرك بأي وسم اختاره. ما يتم تسجيله يسمي دائماً إصدار واحد بالضبط، لذا لا يمكن للإعادة أن تنجرف.
-## خذ جزءًا من حزمة
+## خذ جزءاً من الحزمة
-افتراضيًا تحصل على الإعدادات **الخاصة** بالحزمة — السياسات التي وضع علامة عليها مؤلفها كآمنة للتشغيل دون مراقبة — وليس كل ما تحتويه.
+افتراضياً، تحصل على **الافتراضيات الخاصة** بالحزمة — السياسات التي وضع علامة عليها المؤلف كآمنة للتفعيل دون إشراف — وليس كل ما تحتويه.
```bash
-failproofai pack add acme/support-agent --category billing,git
-failproofai pack add acme/support-agent --policy block-refunds
-failproofai pack add acme/support-agent --all
+failproofai policies add FailproofAI/policies --policy block-rm-rf # واحدة أو عدة مفصولة بفواصل
+failproofai policies add FailproofAI/policies --category dangerous-commands # فئة كاملة
+failproofai policies add FailproofAI/policies --all # كل شيء فيها
```
-يتم دمج `--category` و `--policy` كاتحاد (`--only` يُقبل كمرادف لـ `--policy`). إعادة التثبيت بإصدار أحدث تحافظ على اختيارك بدلاً من إعادة تشغيل الباقي.
+`--category` و `--policy` يجتمعان كاتحاد (`--only` يُقبل كمرادف لـ `--policy`). عندما تكون الحزمة مثبتة بالفعل، تضيف العلامات إلى ما لديك، وإعادة إضافتها بدون علامة وبدون طرفية — للترقية، مثلاً — تحافظ على اختيارك كما هو. في طرفية بدون علامة، `add` يفتح المنتقي بدلاً من ذلك، مع وضع علامة مسبقة بافتراضيات المؤلف، وما تضع عليه علامة يستبدل اختيارك.
-## أدِر ما هو مشغّل
+## أدر ما هو مشغول
```bash
-failproofai policies # كل مصدر في قائمة واحدة، الحزم مضمنة
-failproofai pack list # الحزم فقط، مجمعة حسب الفئة
+failproofai policies # كل مصدر في قائمة واحدة، الحزم مشمولة
+failproofai policies add block-rm-rf # شغّل سياسة واحدة
failproofai policies --uninstall block-refunds # أطفئ سياسة حزمة واحدة
-failproofai policies --install block-refunds # وأعدها للتشغيل
-failproofai pack remove acme/support-agent
+failproofai policies --install block-refunds # وعودة
+failproofai policies remove acme/support-agent # أزل الحزمة
```
-الاسم الحر يعني **المدمج** عندما يكون موجودًا بهذا الاسم. اسم نسخة الحزمة صراحة عندما تحتاج إلى:
+تشغيل سياسة حزمة أو إطفاؤها ينطبق على الجهاز بأكمله: يتم تسجيل المفتاح مع الحزمة المثبتة، وليس في تكوين المشروع، مهما قال `--scope`.
+
+الاسم بدون شرطة مائلة هو سياسة؛ أي شيء يحتوي على واحدة هو مصدر حزمة. الاسم العاري يحل إلى الحزمة المثبتة التي تعلنها. عندما تعلن حزمتان مثبتتان نفس الاسم، اسم الاسم الذي تقصده:
```bash
failproofai policies --uninstall acme/support-agent:block-refunds
```
-
-إذا كانت حزمة تشحن سياسة يكون اسمها أيضًا **مدمج مُفعّل**، يعمل المدمج ويتم تخطي نسخة الحزمة — وإلا سيتم تقييم نفس الحماية مرتين. أطفئ المدمج لاستخدام نسخة الحزمة بدلاً من ذلك.
-
-
-## من أين تأتي سياسات Failproof AI
-
-`core` يقرأ النسخة المُدرجة في حزمة npm. نفس المجموعة منشورة كإصدار GitHub، وهو ما تثبتها إذا كنت تريد إصدارًا معينًا:
-
-```bash
-failproofai pack add core # من هذه الحزمة، بدون شبكة
-failproofai pack add FailproofAI/policies # نفس المجموعة، من إصدار GitHub الخاص بها
-```
+الأنطاقات والمعاملات والملفات التي تكتبها هذه الأوامر مغطاة في [التكوين المحلي](/ar/policies/local-configuration).
-## ما الذي يوفره التحقق من السلامة وما لا يوفره
+## ما تشتريه سلامة التكامل وما لا تشتريه
-`SHA256SUMS` يشحن في نفس الإصدار مع القطعة، لذا فهو **ليس** توقيعًا ولا يثبت أي شيء عن من نشره. ما يثبته هو أن البايتات هي تلك التي نشرها هذا الإصدار — وبسبب تسجيل الخلاصة عند إضافة الحزمة والتحقق منها مجددًا قبل كل استيراد، لا يمكن للحزمة تغيير ما تحته على جهازك. مستودع يعيد وضع علامات أو يستبدل أصلًا يتوقف عن التحميل بدلاً من تشغيل شيء آخر بصمت.
+`SHA256SUMS` يأتي في نفس الإصدار مثل الأداة، لذا فهو **ليس** توقيعاً ولا يثبت أي شيء عن من نشره. ما يثبته هو أن البايتات هي التي نشرها هذا الإصدار — وبسبب تسجيل الخلاصة عند إضافة الحزمة وإعادة التحقق منها قبل كل استيراد، لا يمكن لحزمة أن تتغير على جهازك فيما بعد. مستودع يعيد وسم أو يستبدل أصلاً يتوقف عن التحميل بدلاً من تشغيل شيء آخر بهدوء.
-في وقت التثبيت، يتم أيضًا **استيراد الحزمة مرة واحدة** والتحقق من بيانها. تُرفض حزمة لا يمكن تحليل قطعتها أو التي تسجل شيئًا غير ما تعلنه قبل تفعيل أي شيء — بدلاً من التثبيت بنظافة والفشل في استدعاء أداتك التالي.
+في وقت التثبيت، يتم أيضاً **استيراد الحزمة مرة واحدة** والتحقق منها ضد بيانها الخاص. تُرفض حزمة لا يحلل أداتها أو التي تسجل شيئاً آخر غير ما تعلنه قبل تفعيل أي شيء — بدلاً من التثبيت بنظافة والفشل في استدعاء الأداة التالي.
-## عندما لن تحمل الحزمة
+## عندما لن تُحمّل حزمة
-حزمة أُخبرت هذه الآلة بفرضها ولا يمكنها التشغيل **ترفض** الأحداث التي غطتها سياساتها المفقودة، بدلاً من السماح بها بصمت. انظر [سلوك الفشل](/ar/policies/failure-behavior). `failproofai pack list` يسمي أي حزمة في تلك الحالة ويخرج برقم غير صفري.
+حزمة أُخبر هذا الجهاز بفرضها ولا يمكن تشغيلها **تنكر** الأحداث التي غطتها سياساتها المفقودة، بدلاً من السماح بها بهدوء — مثل `pack/failproofai-pack-unavailable`، والذي يتفوق على السياسات التي تحملت بحيث يُعزى الإنكار إلى الحزمة المفقودة بدلاً من أي حارس يحدث أن يطلق أولاً. الاستثناء هو `UserPromptSubmit`، الذي يوجه بدلاً من ذلك: الإنكار هناك قد يقفلك من الوكيل الذي تحتاجه لإصلاحه. انظر [سلوك الفشل](/ar/policies/failure-behavior).
## غير متصل والمرايا
| المتغير | التأثير |
| --- | --- |
| `FAILPROOFAI_NO_DOWNLOAD=1` | يرفض الجلب؛ الحزم المثبتة بالفعل تستمر في الفرض |
-| `FAILPROOFAI_PACK_BASE_URL` | يوجه جلب الحزم إلى مرآة بدلاً من `github.com` |
+| `FAILPROOFAI_PACK_BASE_URL` | يوجه جلب الحزمة إلى مرآة بدلاً من `github.com` |
-نشر حزمتك الخاصة: انظر [انشر حزمة](/ar/policies/publish-a-pack).
\ No newline at end of file
+لمشاركة سياساتك الخاصة بهذه الطريقة، انظر [نشر حزمة سياسة](/ar/policies/publish-a-pack).
\ No newline at end of file
diff --git a/docs/ar/policies/publish-a-pack.mdx b/docs/ar/policies/publish-a-pack.mdx
index 602fdb5a2..310339552 100644
--- a/docs/ar/policies/publish-a-pack.mdx
+++ b/docs/ar/policies/publish-a-pack.mdx
@@ -1,15 +1,22 @@
---
----
-title: "نشر حزمة"
-description: "شحن سياساتك الخاصة كإصدار GitHub يمكن لأي شخص تثبيته."
+title: "نشر مجموعة سياسات"
+description: "شحن سياساتك الخاصة كإصدار GitHub يمكن لأي شخص تثبيتها."
icon: "upload"
---
-الحزمة عبارة عن ثلاثة ملفات مرفقة بإصدار GitHub. يكتب `failproofai pack build` جميعها الثلاثة من ملف سياسة لديك بالفعل.
+مجموعة السياسات تتكون من ثلاث ملفات مرفقة بإصدار GitHub. أمر `failproofai publish` يكتب جميع الملفات الثلاث من ملفات السياسات أمامه، ينشئ الإصدار، ويرفعها.
## 1. اكتب السياسات
-ملف واحد، باستخدام نفس واجهة برمجية التطبيقات كأي سياسة مخصصة. هناك حقلان إضافيان مهمان للحزمة:
+ابدأ من شيء يعمل بالفعل بدلاً من قالب فارغ:
+
+```bash
+failproofai publish --init
+```
+
+هذا يسأل عن اسم المجموعة، يكتب `.mjs`، ثم يتوقف — لا شبكة، لا git، لا شيء منشور. الملف الذي يكتبه هو سياسة واحدة تحجب بالفعل `git push --force`. يرفض استبدال الملف الموجود.
+
+السياسات تستخدم نفس واجهة برمجية التطبيقات مثل أي سياسة مخصصة. حقلان إضافيان مهمان للمجموعة:
```js
import { customPolicies, deny, allow } from "failproofai";
@@ -18,7 +25,7 @@ customPolicies.add({
name: "block-refunds",
description: "Refunds above the approved limit need a human",
category: "Billing", // groups it, and is what --category selects on
- defaultEnabled: true, // switched on by a plain `pack add`
+ defaultEnabled: true, // switched on by a plain `policies add`
match: { events: ["PreToolUse"], tools: ["Bash"] },
fn: async (ctx) =>
String(ctx.toolInput?.command ?? "").includes("refund")
@@ -27,66 +34,95 @@ customPolicies.add({
});
```
-`defaultEnabled` افتراضيًا **false** عند حذفه. يؤدي `failproofai pack add` بسيط إلى تشغيل فقط ما حددته — تثبيت كل سياسة من شخص غريب دون مراقبة ليس قرارًا يجب على المثبِّت أن يتخذه نيابة عن مستخدمه.
+`defaultEnabled` يُعيّن افتراضياً إلى **false** عندما تحذفه. أمر `failproofai policies add` البسيط يفعّل فقط ما وسّمته — تثبيت كل السياسات من غريب بدون مراقبة ليس قراراً يجب على المثبّت أن يتخذه نيابة عن المستخدم.
+
+اكتب أي عدد من الملفات تريده؛ ملف واحد لكل فئة يبدو جيداً. كل ملف في المجلد الذي يسجل السياسات سيتم دمجه في الحزمة الوحيدة التي تحتاجها.
-يجب أن يكون الإدخال **ملف واحد مكتفٍ بذاته**. يتم تثبيت الإدخال فقط برقم معالجة التلخيص، لذا فإن الحزمة التي تستورد ملفات محلية لا يمكنها بصدق المطالبة بأن المعالجة تغطي ما يعمل. قم بالدمج أولاً (`esbuild` أو `bun build` أو `rollup`) وأنشئ الحزمة من الحزمة المدمجة — يرفض `pack build` الاستيراد المحلي بدلاً من شحن وعد لا يمكنه الوفاء به.
+ التجميع يتطلب **bun**. بدونه، استمر مع ملف مستقل واحد. على أي حال، الملف المدخل المنشور يجب ألا يستورد ملفات محلية في وقت التثبيت: فقط الملف المدخل له digest مثبت، لذا المجموعة التي تصل إلى أشقاء لا تستطيع بصراحة المطالبة بأن الـ digest يغطي ما يعمل — و `publish` يرفضها بدلاً من شحن وعد لا تستطيع الوفاء به.
-## 2. بناء أصول الإصدار
+## 2. جرّبها هنا أولاً
+
+قبل أن يراها أي شخص آخر، فرّض الملف على هذا الجهاز:
```bash
-failproofai pack build ./policies.mjs \
- --id acme/support-agent \
- --version 1.0.0 \
- --out ./dist-pack
+failproofai policies -i -c ./.mjs
```
-يكتب ثلاثة ملفات، ويتحقق من صحة كل سياسة باستخدام **قواعد محمل التحميل الخاصة به** أولاً — بحيث تفشل الحزمة التي قد لا تثبت أبدًا هنا، حيث يمكنك إصلاحها:
+أي مسار، أي اسم ملف. اطلب من وكيلك أن يفعل الشيء الذي حجبته وشاهده يتم رفضه. لا شيء منشور وأحد آخر لا يتأثر. يغطي [اختبار سياسة](/ar/policies/test) الباقي: الحالة الشرعية التي يجب أن تسمح بها، والمدخلات التي تكسرها.
+
+## 3. انشرها
+
+```bash
+failproofai publish
+```
+
+يعرّف حيث ينشر، ما يجب دمجه وما إصدار لتسميته، ويسأل فقط عندما لا شيء في المستودع يخبره. بالترتيب، توقف قبل إنشاء إصدار إذا كان هناك خطأ:
+
+1. يجد ملفات السياسات هنا بـ **المحتوى** — تلك التي تستورد `failproofai` وتستدعي `customPolicies.add` — بدلاً من اسم الملف، لذا يجد `guards.mjs` ويتجاهل `policies.mjs` غير الصلة. لا ينحدر إلى المجلدات الفرعية، لذا لا يتم التقاط fixture اختبار بالصدفة.
+2. يقرأ المستودع من `git remote get-url origin`، في **مجلد الملف** بدلاً من مجلدك، ويحدد الإصدار.
+3. يجد بيانات اعتمادك: `GITHUB_TOKEN`، `GH_TOKEN`، أو `gh auth login`. يحتاج إلى كتابة الإصدار وليس أكثر، ولا يتم طباعته أبداً.
+4. ينشئ المستودع إذا لم يكن موجوداً. هذا يحدث قبل البناء، لذا المجموعة المرفوضة في الخطوة التالية يمكن أن تترك مستودع جديد بدون إصدار فيه.
+5. يبني الأصول الثلاثة، يتحقق منها مع **قواعد محمّل السياسات الخاصة** — نفس الكود الذي يقرر ما قد يثبّت على جهاز الغريب — لذا المجموعة التي لا تستطيع التثبيت أبداً تفشل هنا، حيث تستطيع إصلاحها.
+6. ينشئ أو يعيد استخدام الإصدار ويرفع، يستبدل الأصول بنفس الاسم.
| الملف | ما هو |
| --- | --- |
-| `failproofai-pack.json` | البيان: المعرّف والإصدار والتأثير وإدخال واحد لكل سياسة |
-| `failproofai-pack.mjs` | إدخالك، كما هو |
-| `SHA256SUMS` | `` للآخريْن |
+| `failproofai-pack.json` | البيان: المعرّف، الإصدار، التأثير، وإدخال واحد لكل سياسة |
+| `failproofai-pack.mjs` | الملف المدخل المجمّع لديك |
+| `SHA256SUMS` | `` للاثنين الآخرين |
-مرفوضة في وقت البناء: معرّف ليس `publisher/name`، اسم سياسة يحتوي على `/`، سياسة تصرح `alwaysOn`، `description` أو `category` أو `match` مفقودة، إدخال لا يسجل أي شيء، وإدخال يستورد ملفات محلية.
+أسماء الأصول ثابتة — إنها ما يبني واجهة سطر أوامر المستهلك عناوين URL منها، بدون استدعاء واجهة برمجية وبدون اكتشاف.
-## 3. أرفقها بإصدار
+مرفوضة في وقت البناء: معرّف ليس `publisher/name`، اسم سياسة يحتوي على `/`، سياسة تعلن `alwaysOn`، `description`، `category` أو `match` مفقودة، ملف مدخل لا يسجل شيئاً، وملف مدخل يستورد ملفات محلية.
-ضع علامة على الإصدار بنفس الإصدار الذي أنشأته، وأرفق جميع الملفات الثلاثة كأصول إصدار:
+تجاوز أي شيء قررته:
```bash
-gh release create 1.0.0 \
- ./dist-pack/failproofai-pack.json \
- ./dist-pack/failproofai-pack.mjs \
- ./dist-pack/SHA256SUMS
+failproofai publish \
+ --repo acme/support-agent \
+ --version 1.0.0 \
+ --effect observe \
+ --dry-run
```
-يمكن لأي شخص الآن تثبيته:
+`--id` يحدد معرّف المجموعة عندما يجب أن يختلف عن المستودع، `--tag` يحدد علامة الإصدار، `--notes` يستبدل ملاحظات الإصدار المُنتجة — وهي حيث `policies show --releases` تقرأ أعداد كل إصدار والتزام من — `--out` يختار حيث الأصول مكتوبة (افتراضي `dist-pack`)، و `--dry-run` يبنيها بدون نشر ولا يحتاج بيانات اعتماد.
-```bash
-failproofai pack add acme/support-agent
-```
+يمكن لأي شخص الآن تثبيتها مع `failproofai policies add acme/support-agent`. انظر [مجموعات السياسات](/ar/policies/packs) لتثبيت إصدار والأخذ بجزء فقط من واحدة.
+
+### أدرجها في مركز السياسات
-أسماء الأصول ثابتة — وهي ما ينشئه CLI المستهلك من عناوين URL، بدون استدعاء API وبدون اكتشاف.
+أضف موضوع `failproofai-policies` إلى المستودع على GitHub. لا توجد نموذج تقديم ولا قائمة انتظار موافقة: زاحف [مركز السياسات](https://befailproof.ai/policy-hub/) يلتقط المستودع في الممر التالي. الموضوع يضعه فقط قيد الدراسة — ما يدرجه هو إصدار بيانه يتحقق ضد `SHA256SUMS` الخاص به ويُحلل تحت نفس القواعد التي تستخدمها واجهة سطر الأوامر، وهو بالضبط ما `failproofai publish` ينتجه.
+
+## كيفية تحديد الإصدار
+
+الإصدار هو **الـ commit الذي تنشر منه** — SHA القصير له، اثنا عشر حرفاً: `a1b2c3d4e5f6`. لا شيء لاختياره ولا شيء للزيادة، والإصدار يسمي بالضبط حيث جاءت البايتات، لذا نشر نفس المصدر مرتين يعطي نفس الإصدار.
+
+يتم قراءته من الشجرة أمامك، ليس أبداً من إصدارات المستودع، لذا نسخة طازجة وجهاز معزول الهواء يحسبان نفس الإجابة بدون السؤال GitHub عما حدث قبل.
+
+لأن الإصدار يسمي commit، هذا commit يجب أن يكون موجوداً. في محطة طرفية، `publish` يصنعه لك: يهيئ مستودع عندما لا يكون هناك واحد، والتزامات ملفات السياسات المتغيّرة قبل البناء. يرفض بدلاً من ذلك — يسمي `--version` كطريقة للخروج — عندما يعمل بدون محطة طرفية (التزام مصنوع على عداء CI لن يكون موجوداً في مكان آخر)، عندما ملفات أخرى غير السياسات لم تُلتزم، أو في checkout بدون التزامات بعد. علامة على `HEAD` تفوز على SHA — شخص وسّم `v1.2.0` قال ما هذا الإصدار.
+
+SHA لا يحمل ترتيباً من تلقاء نفسه، لذا استخدم `failproofai policies show / --releases` لرؤية أي إصدار جاء أولاً — الأحدث في الأعلى.
## شحن إصدار جديد
-قم بالبناء باستخدام `--version` الجديد، ضع علامة على إصدار جديد، وأرفق الأصول الثلاثة مرة أخرى. يقوم المستهلكون بتشغيل نفس `pack add` والاحتفاظ بأي مجموعة فرعية اختاروها؛ السياسة التي أوقفوها تبقى معطلة عبر الترقية.
+التزم التغيير وشغّل `failproofai publish` مرة أخرى — الالتزام الجديد هو الإصدار الجديد. المستهلكون يشغّلون نفس `failproofai policies add`. بدون محطة طرفية، أو مع علامة اختيار، يبقون على المجموعة الجزئية التي اختاروها وسياسة أطفأوها تبقى مطفأة؛ في محطة طرفية بدون علامة، يفتح المختار مع تحديد مسبق بقيمك الافتراضية وإجابتهم تستبدل اختيارهم.
-تغيير **اسم** السياسة هو تغيير كبير: الجهاز الذي أوقفها يوقف اسمًا لم يعد موجودًا، والاسم الجديد يأتي في أي `defaultEnabled` يقول.
+تغيير **اسم** سياسة هو تغيير كسر: جهاز كان قد أطفأه يطفئ اسماً لا يعود موجوداً، والاسم الجديد يصل بأي `defaultEnabled` يقول.
## ما يثق به مستخدموك
-`SHA256SUMS` يعيش في نفس الإصدار مثل الأصل، لذا فإنه يثبت أن البايتات هي تلك التي نشرتها — وليس من أنت. أي شخص يمكنه الكتابة إلى المستودع يمكنه كتابة كلا الملفين. حماية مستخدميك هي أن المعالجة يتم تثبيتها عند التثبيت، بحيث لا يمكن تغيير ما شحنته من تحتهم بعد ذلك.
+`SHA256SUMS` يعيش في نفس الإصدار مثل الأصل، لذا يثبت البايتات هي تلك التي نشرتها — ليس من أنت. أي شخص يمكنه الكتابة إلى المستودع يمكنه كتابة كلا الملفات. حماية مستخدميك هي أن الـ digest مثبت عند التثبيت، لذا ما شحنته لا يمكنه التغيير تحتهم بعد ذلك.
+
+انشر من مستودع تتحكم في الوصول للكتابة فيه، وتعامل مع إصدار مجموعة مثل نشر حزمة.
-انشر من مستودع يتحكم في الوصول الكتابي إليه، وتعامل مع إصدار حزمة مثل نشر حزمة.
+المستودع يجب أن يكون أيضاً **عام**. عمليات التثبيت HTTPS مجهولة بدون بيانات اعتماد لتقديمها، لذا مستودع خاص موجود يتم رفضه قبل أي شيء مبني أو مرفوع، وواحد `publish` ينشئ عام لنفس السبب. `--allow-private` يتجاوز ذلك لشخص يسلّم الملفات الثلاثة بطريقة أخرى، ويقول بصراحة أن لا `policies add` يمكنه الوصول إليها. فقط الإصدار يهم: عمليات التثبيت تقرأ `releases/download//` ولا تلمس شجرة git الخاصة بك.
-## لاحظ قبل أن تفرض
+## لاحظ قبل أن تفرّض
-قد يصرح البيان `"effect": "observe"`. هذه السياسات تعمل ويتم **تسجيل أحكامها والتخلص منها** — لا شيء مسدود. إنها الطريقة لقياس قاعدة جديدة مقابل حركة المرور الحقيقية قبل أن تتمكن من مقاطعة عمل أي شخص.
+البيان قد يعلن `"effect": "observe"` — `failproofai publish --effect observe` هو ما يحدده. تلك السياسات تعمل وأحكامها **مسجلة ومرفوضة** — لا شيء محجوب. إنها الطريقة لقياس قاعدة جديدة ضد حركة حقيقية قبل أن تستطيع قطع عمل أي شخص.
```json
-{ "id": "acme/support-agent", "version": "1.1.0", "effect": "observe", "policies": [ ... ] }
+{ "id": "acme/support-agent", "version": "a1b2c3d4e5f6", "effect": "observe", "policies": [ ... ] }
```
\ No newline at end of file
diff --git a/docs/ar/policies/rollback.mdx b/docs/ar/policies/rollback.mdx
index 621137578..c8bcfa146 100644
--- a/docs/ar/policies/rollback.mdx
+++ b/docs/ar/policies/rollback.mdx
@@ -1,42 +1,75 @@
---
----
-title: "التراجع عن النشر"
-description: "استعادة نشر سياسة معروف عند حدوث اضطراب في عمل الوكيل الصحيح."
+title: "الإصدارات والعودة للإصدار السابق"
+description: "كل نشر هو إصدار ثابت، لذا يمكن التراجع عن أي نشر يعطل عمل الوكلاء الصحيح بإعادة نشر آخر إصدار جيد."
icon: "rotate-ccw"
---
-يغيّر التراجع عن النشر النسخة المنشورة أو يزيل تعيين السياسة؛ لكنه لا يمحو سجل القرارات الذي يشرح الحادثة.
+إصدار السياسة المنشور لا يتغير أبداً. عند تعديل السياسة والنشر مرة أخرى، يتم إنشاء إصدار جديد؛ لا يتم إعادة كتابة الإصدار الموجود بالفعل على الأجهزة. هذا ما يجعل العودة للإصدار السابق آمنة: آخر إصدار جيد لا يزال موجوداً، بكل بايت منه، والعودة للإصدار السابق لا تمحو سجل القرارات الذي يشرح ما حدث خطأ.
-## التراجع عن نشر على آلة
+## البحث عن إصدار
- 1. انتقل إلى **Admin → enforcement**، وقم بتوسيع الآلة المتأثرة، وحدد مجموعة السياسات الموثوقة الأخيرة لها.
- 2. اختر **edit**، واستعد تلك الإصدارات والتأثيرات، وطبّق النشر الجديد.
- 3. انتظر تسجيل الدخول للآلة، ثم تحقق من النشر المبلّغ عنه.
- 4. افتح **Observe → policy** والجلسات المتأثرة لتأكيد عدم حجب العمل الصحيح.
+ انتقل إلى **Admin → policy editor** وافتح **library** لمقارنة إصدارات السياسة أو تعطيل أحدها.
+
+
+ ```bash
+ fp policies list # كل إصدار سياسة
+ fp policies show # إصدار واحد، مع مصدره
+ ```
+
+
+## العودة للإصدار السابق على جهاز
+
+
+
+ 1. انتقل إلى **Admin → enforcement**، وقم بتوسيع الجهاز المتأثر، وحدد آخر مجموعة سياسات معروفة الجودة.
+ 2. اختر **edit**، استعد تلك الإصدارات والمزايا، وطبق النشر الجديد.
+ 3. انتظر تحديث الجهاز، ثم تحقق من النشر المُبلَّغ عنه.
+ 4. افتح **Observe → policy** والجلسات المتأثرة للتأكد من أن العمل الصحيح لم يعد محظوراً.
-
- التراجع عن نشر السحابة هو سير عمل لوحة تحكم. استخدم الحالة المحلية للتأكد من وصول النشر المصحح إلى الآلة:
+
+ كل نشر لجهاز هو جيل مرقّم. اعرض قائمتها، ثم أعد تفعيل واحد:
```bash
- failproofai config --status
+ fp fleet history
+ fp fleet rollback
```
- يوقف `failproofai config --pause` السياسات المدمجة والمخصصة وسياسات الاتفاقية لجلسة محلية واحدة. لا يوقف السياسات المدارة من قبل السحابة، لذا فهو ليس حلاً بديلاً لنشر سحابة سيء.
+ `rollback` ينشئ جيلاً جديداً يحمل المجموعة القديمة بدلاً من إعادة تعيين العداد، لذا يبقى السجل إضافياً فقط، ويرفض جيلاً يسمي سياسة تم تعطيلها أو حذفها. يحتاج إلى جلسة موقعة بـ `policies:write`. `fp fleet diff ` يعرض ما كان مقصوداً مقابل ما طبقه الجهاز — يقرأ كـ `behind` حتى يستفسر الجهاز مرة أخرى — وعلى الجهاز نفسه، `failproofai policies` يعرج النشر الذي يعمل عليه.
-## متى يتم التراجع عن النشر
+## إزالة سياسة واحدة من كل جهاز
+
+```bash
+fp policies disable # إزالتها من كل نشر يحملها
+fp policies enable # إعادتها
+```
+
+كل واحدة تنشئ جيلاً جديداً على كل نشر تلمسه. العودة للإصدار السابق لأحد هذه الأجيال ليس كيف تتراجع عن `disable`، على الرغم من — `rollback` يرفض جيلاً يسمي سياسة معطلة، وكل جيل من قبل تعطيل السياسة يسمي هذه. `fp policies enable` هو الطريق للعودة، وينشئ جيله الخاص بدوره.
+
+## العودة إلى حزمة
+
+الحزمة مثبتة في الإصدار الذي قمت بتثبيته، لذا العودة للإصدار السابق تعني تثبيت إصدار سابق:
+
+```bash
+failproofai policies show FailproofAI/policies --releases # كل إصدار نشره، وأيها موجود هنا
+failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # دبّس هذا
+```
+
+بدون طرفية، أو مع `--policy` أو `--category` أو `--all`، إعادة الإضافة تحافظ على المجموعة الفرعية التي اخترتها. في طرفية بدون أي منها، تفتح محدد التحديد مع إزالة اختيار إعدادات المؤلف الافتراضية، وما تختاره يحل محل اختيارك — لذا أعد اختيار ما كان لديك.
+
+## متى تعود للإصدار السابق
-- تحجب السياسة إجراء إنتاج متوقع.
-- حجم التطابق أعلى بشكل ملموس مما توقعه الانتشار المرصود.
-- تعتمد السياسة على حقول لا توفرها عملية التكامل.
-- تغيّر النسخة الجديدة السلوك خارج نطاق وضع الفشل المقصود.
+- سياسة تحظر إجراءً إنتاجياً متوقعاً.
+- حجم المطابقة أعلى بشكل ملموس من ما تنبأت به عملية النشر المرصودة.
+- سياسة تعتمد على حقول لا توفرها التكامل.
+- نسخة جديدة تغير السلوك خارج وضع الفشل المقصود.
-بعد التراجع عن النشر، افتح الجلسات المتأثرة وحدد الحالة التي تسببت في الإيجابية الخاطئة. أنشئ نسخة جديدة، واختبر الحالات غير الآمنة والمشروعة، ثم كرر مرحلة المراقبة.
+بعد العودة للإصدار السابق، افتح الجلسات المتأثرة وجد الشرط وراء الإيجابية الخاطئة. نشر نسخة جديدة، [اختبر](/ar/policies/test) الحالة غير الآمنة والشرعية، وراقبها مرة أخرى قبل الإنفاذ.
- يمكن أن يكون إيقاف التطبيق مناسباً أثناء حادثة، لكنه يوسع التعرض لكل سياسة نشطة في هذا النطاق. فضّل التراجع عن نسخة السياسة المحددة عند الإمكان.
+ `failproofai config --pause` توقف السياسات المحلية لجلسة واحدة وليس أبداً التي يديرها Cloud، لذا ليست طريقة للخروج من نشر Cloud سيء. الإيقاف المؤقت أيضاً يوسع التعرض لكل سياسة في نطاقه؛ فضّل العودة للإصدار السابق من الإصدار الوحيد الذي يسيء التصرف.
\ No newline at end of file
diff --git a/docs/ar/policies/test.mdx b/docs/ar/policies/test.mdx
new file mode 100644
index 000000000..26bd7dcd4
--- /dev/null
+++ b/docs/ar/policies/test.mdx
@@ -0,0 +1,60 @@
+---
+title: "اختبار سياسة"
+description: "قم بالاختبار العكسي لمسودة ضد حركة المرور التي لديك بالفعل، وأثبت أنها توقف ما يجب إيقافه وتسمح بما يجب السماح به، قبل أن تفرضها أي آلة."
+icon: "flask-conical"
+---
+
+اختبر كل سياسة بطريقتين: ضد حركة المرور التي أنتجتها وكلاؤك بالفعل، وضد إجراء شرعي يجب أن تسمح به. السياسة التي لم ترَ سوى الحالة غير الآمنة لم تُختبر.
+
+## الاختبار العكسي للمسودة
+
+
+
+ محرر السياسة يعيد تشغيل مسودة ضد الاستدعاءات التي أجرتها أسطولك بالفعل، قبل نشرها.
+
+ 1. افتح المسودة في **Admin → policy editor**. يؤكد المحرر أنها تحلل كـ JavaScript.
+ 2. في **backtest**، اختر الوكلاء ونطاق الوقت الذي تريد إعادة تشغيله — **كل الوكلاء** و**30d** بشكل افتراضي — واترك آخر مرشح على **everything** ما لم تريد تضييقه.
+ 3. اختر **run backtest**.
+
+ 
+
+ النتيجة هي ما كانت ستفعله المسودة لتلك الاستدعاءات — بما في ذلك عدد استدعاءات **working** التي كانت ستقاطع. هذه إيجابيات خاطئة تم العثور عليها قبل أن يواجهها أي وكيل: أحكم المسودة وشغلها مرة أخرى حتى يصبح هذا الرقم مقبولاً.
+
+
+ الاختبار العكسي هو ميزة لوحة التحكم. من الطرفية، شغل السياسة ضد الأحداث التي تصفها بدلاً من ذلك، أدناه.
+
+
+
+## شغله ضد حدث تصفه
+
+`fp policies test` يشغل ملف السياسة على جهازك ضد حدث اصطناعي ويتحقق من القرار. لا يتم نشر أي شيء ولا يصل أي شيء إلى Cloud:
+
+```bash
+fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny
+fp policies test ./checkout.policy.mjs --command "git push" --expect allow
+```
+
+شكّل الحدث باستخدام `--event` و `--tool` و `--command` و `--file`. مرشح `match` الخاص بالسياسة نفسها ينطبق أيضاً، لذا فإن السياسة التي لا تغطي الحدث الذي وصفته تُرجع `skipped` بدلاً من قرار — عادة ما يكون علامة على أن `match` أضيق مما قصدت.
+
+## شغله على جهاز واحد
+
+بعد ذلك، فرضه حقاً على جهازك الخاص، ضد وكيلك الخاص:
+
+```bash
+failproofai policies --install --custom ./checkout.policy.mjs --scope project
+failproofai policies
+```
+
+الأمر الأول يتحقق من صحة الملف وينصبه؛ والثاني يؤكد أنه تم تحميله، إلى جانب كل شيء آخر يفرضه هنا. اطلب من الوكيل أن يفعل ما تحقفه السياسة وشاهده يتم رفضه، ثم قم بالإصدار الشرعي وشاهده يمر. لا أحد آخر يتأثر.
+
+على جهاز متصل بـ Cloud، تحقق من كلا القرارين تحت **Observe → policy**: قم بالتصفية حسب اسم السياسة، ثم افتح كل جلسة مرتبطة لتأكيد إدخال الأداة التي طابقتها والسبب في عودتها.
+
+## اختبر ما ينكسر
+
+التثبيت يرفض ملف مفقود، أو خطأ في بناء الجملة، أو استيراد لم يتم حله، أو استثناء على المستوى الأعلى، أو وحدة تتجاوز المهلة الزمنية أثناء التحميل — لذا أعد تشغيله بعد كل تغيير على الملف أو أي شيء يستورده. في وقت الفرض، يتم تسجيل نفس الملف المكسور و **skipped** بحيث تستمر كل سياسة أخرى في العمل: تعامل مع تحذير التحميل في سجلات الإنتاج كفرض مفقود. ملفات الاتفاقية يتم تحميلها بدون أمر التثبيت، لذا احتفظ بخطوة `failproofai policies --install --custom ` صريحة في CI — هذا ما يفشل البناء على سياسة مكسورة.
+
+ثم أطعمه ما يرسله الوكلاء فعلاً، ليس فقط الإدخال الذي تتوقعه: الحقول المفقودة، أسماء الأدوات البديلة مثل `Write` و `Edit`، مسارات Windows، إدخال مشوه. أرجع `allow` أو `instruct` أو `deny` متعمد على كل مسار، اجعل الدالة حتمية، واربط أي استدعاء خارجي برصيد زمني قصير.
+
+## ثم انشره وراقبه
+
+يُظهر الاختبار العكسي ما كانت ستفعله السياسة لحركة المرور التي كانت لديك؛ لا يمكن أن يُظهر ما ستفعله حركة المرور التي لم تشهدها حتى الآن. اختر **publish version** في المحرر (أو شغل `fp policies publish`)، ثم [نشّرها](/ar/policies/deploy) في وضع **observe** أولاً — يتم تسجيل أحكامها ولا يتم حظر أي شيء — وفرضها بمجرد أن تفصل مطابقاتها الإجراءات غير الآمنة عن الإجراءات الصحيحة.
\ No newline at end of file
diff --git a/docs/ar/reference/cloud-cli.mdx b/docs/ar/reference/cloud-cli.mdx
index 41ebf2238..77ffc250b 100644
--- a/docs/ar/reference/cloud-cli.mdx
+++ b/docs/ar/reference/cloud-cli.mdx
@@ -1,13 +1,12 @@
---
----
-title: "Failproof Cloud CLI"
-description: "مرجع شامل للاستعلام عن وإدارة Failproof AI Cloud باستخدام fp."
+title: "واجهة سطر الأوامر Failproof Cloud"
+description: "مرجع شامل للاستعلام عن Failproof AI Cloud والإشراف على fp."
icon: "cloud-cog"
---
-استخدم `fp` للاطلاع على بيانات السحابة (telemetry)، وإدارة الإنفاذ المُدار بواسطة السحابة (السياسات ونشرات الأسطول وقرارات الحماية)، وإدارة عمليات التدقيق والنتائج والمشاكل والتنبيهات والمفاتيح والمستخدمين والاستعلامات والإعدادات. استخدم [`failproofai`](/ar/reference/failproof-cli) للخطافات المحلية والسياسات والالتقاط وتسجيل الآلات.
+استخدم `fp` للتفتيش على بيانات telemetry السحابة، وإدارة فرض العمل المدار بواسطة السحابة (السياسات، نشرات الأسطول، قرارات guardrail)، والإشراف على عمليات التدقيق والنتائج والمشاكل والتنبيهات والمفاتيح والمستخدمين والاستعلامات والإعدادات. استخدم [`failproofai`](/ar/reference/failproof-cli) للخطافات المحلية والسياسات والالتقاط وتسجيل الماكينة.
-ثبّت واجهة سطر أوامر السحابة المُصدرة كأداة مستقلة:
+ثبّت واجهة سطر الأوامر السحابية المُصدرة كأداة معزولة:
```bash
uv tool install fp-cloud-cli
@@ -33,19 +32,19 @@ fp [GLOBAL_OPTIONS] COMMAND [SUBCOMMAND] [ARGUMENTS] [OPTIONS]
fp --json sessions --since 24h
```
-نفّذ `fp COMMAND --help` أو `fp COMMAND SUBCOMMAND --help` للحصول على المساعدة في الطرفية.
+شغّل `fp COMMAND --help` أو `fp COMMAND SUBCOMMAND --help` للحصول على مساعدة من المحطة الطرفية.
-## أوامر واجهة سطر الأوامر
+## أوامر CLI
### المصادقة
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp login` | سجّل الدخول برمز لمرة واحدة يُرسل عبر البريد الإلكتروني واختر مؤسسة. | `--email`, `-e`; `--org`; `--force` |
-| `fp logout` | ألغِ وأزل جلسة المستخدم المحفوظة. | — |
-| `fp whoami` | اعرض الهوية الحالية ووضع المصادقة والمؤسسة والأذونات. | — |
-| `fp version` | اعرض إصدار واجهة سطر الأوامر المثبتة. | — |
-| `fp help` | اعرض مساعدة الأمر على المستوى الأعلى. | — |
+| `fp login` | تسجيل الدخول برمز أحادي المرة مرسل عبر البريد الإلكتروني واختر مؤسسة. | `--email`, `-e`; `--org`; `--force` |
+| `fp logout` | إلغاء وإزالة جلسة المستخدم المحفوظة. | — |
+| `fp whoami` | عرض الهوية الحالية وطريقة المصادقة والمؤسسة والأذونات. | — |
+| `fp version` | عرض إصدار CLI المثبتة. | — |
+| `fp help` | عرض مساعدة الأمر على المستوى الأعلى. | — |
```bash
fp login --email you@example.com --org reliability-team
@@ -58,24 +57,24 @@ fp whoami
fp events [OPTIONS]
```
-يسرد أحداث الوكيل الفردية. يستبعد التغذية الخفيفة الافتراضية الحمولات الأولية؛ استخدم `--full` فقط للتحقيق المحدود.
+تسرد أحداث الوكيل الفردية. يستبعد التغذية الخفيفة الافتراضية الحمولات الأولية؛ استخدم `--full` فقط للتحقيق المحدود.
| الخيار | الوصف |
| --- | --- |
-| `--limit`, `-n ` | أقصى إجمالي للصفوف. الافتراضي: `50`. |
+| `--limit`, `-n ` | الحد الأقصى للصفوف الكلية. الافتراضي: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h`, أو `7d`. |
| `--from ` / `--to ` | نطاق ISO 8601 UTC؛ يتجاوز `--since`. |
-| `--env ` | تصفية البيئة؛ كرّر أو افصل القيم بفواصل. |
-| `--event-type ` | تصفية نوع الحدث؛ كرّر أو افصل القيم بفواصل. |
-| `--agent-id ` | تصفية الوكيل؛ كرّر أو افصل القيم بفواصل. |
-| `--session-id ` | تصفية الجلسة؛ كرّر أو افصل القيم بفواصل. |
-| `--search ` | بحث نص الحمولة؛ قابل للتكرار، مع تطابق أي مصطلح. |
-| `--order asc\|desc` | ترتيب الوقت. الافتراضي: الأحدث أولاً. |
-| `--all` | ترقيم تلقائي حتى `--limit`. |
-| `--cursor ` | استأنف من مؤشر معتم. |
-| `--page-size ` | صفوف لكل طلب مع `--all`؛ أقصى `200`. |
-| `--full` | أدرج الحمولات الأولية عبر نقطة نهاية الحدث الأثقل. |
-| `--fields ` | أرجع الحقول المحددة فقط؛ طلب `payload` يفعّل الوضع الكامل. |
+| `--env ` | تصفية البيئة؛ كرر أو افصل القيم بفواصل. |
+| `--event-type ` | تصفية نوع الحدث؛ كرر أو افصل القيم بفواصل. |
+| `--agent-id ` | تصفية الوكيل؛ كرر أو افصل القيم بفواصل. |
+| `--session-id ` | تصفية الجلسة؛ كرر أو افصل القيم بفواصل. |
+| `--search ` | بحث نصي عن الحمولة؛ قابل للتكرار، مع مطابقة أي حد. |
+| `--order asc\|desc` | ترتيب زمني. الافتراضي: الأحدث أولاً. |
+| `--all` | ترحيل تلقائي حتى `--limit`. |
+| `--cursor ` | استئناف من مؤشر معتم. |
+| `--page-size ` | صفوف لكل طلب مع `--all`؛ الحد الأقصى `200`. |
+| `--full` | تضمين الحمولات الأولية من خلال نقطة نهاية الحدث الأثقل. |
+| `--fields ` | إرجاع الحقول المحددة فقط؛ طلب `payload` يفعّل الوضع الكامل. |
```bash
fp events --session-id --order asc --all --limit 10000
@@ -83,7 +82,7 @@ fp --json events --full --session-id --all --limit 10000
```
- `--all` يرقّم حتى `--limit`، التي تبلغ افتراضياً **50** — لذا `--all` وحده يتوقف عند 50 صف. عندما يتوقف مبكراً، تحمل الاستجابة `next_cursor` للاستئناف منه؛ `"next_cursor": null` تعني أن التغذية استُنفدت فعلاً.
+ `--all` يرحّل **حتى `--limit`**، والذي يبلغ افتراضياً **50** — لذا `--all` بمفرده يتوقف عند 50 صف. عندما يتوقف مبكراً، تحمل الاستجابة `next_cursor` للاستئناف منه؛ `"next_cursor": null` يعني أن التغذية كانت مستنفدة فعلاً.
### الجلسات
@@ -94,19 +93,19 @@ fp sessions [OPTIONS]
| الخيار | الوصف |
| --- | --- |
-| `--limit`, `-n ` | أقصى إجمالي للصفوف. الافتراضي: `50`. |
+| `--limit`, `-n ` | الحد الأقصى للصفوف الكلية. الافتراضي: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h`, أو `7d`. |
| `--from ` / `--to ` | نطاق ISO 8601 UTC؛ يتجاوز `--since`. |
-| `--env ` | تصفية البيئة؛ كرّر أو افصل القيم بفواصل. |
-| `--status ` | `done`, `error`, أو `timeout`؛ كرّر أو افصل القيم بفواصل. |
-| `--agent-id ` | طابق الجلسات التي تتضمن أي وكيل مختار. |
-| `--session-id ` | تصفية الجلسة؛ كرّر أو افصل القيم بفواصل. |
-| `--all` | ترقيم تلقائي حتى `--limit`. |
-| `--cursor ` | استأنف من مؤشر معتم. |
-| `--page-size ` | صفوف لكل طلب مع `--all`؛ أقصى `200`. |
-| `--fields ` | أرجع الحقول المحددة فقط. |
-| `--full-ids` | لا تقصّر معرّفات الجلسات في مخرجات الطرفية. |
-| `--agents` | وسّع قائمة الوكلاء لجلسات متعددة الوكلاء. |
+| `--env ` | تصفية البيئة؛ كرر أو افصل القيم بفواصل. |
+| `--status ` | `done`, `error`, أو `timeout`؛ كرر أو افصل القيم بفواصل. |
+| `--agent-id ` | طابق الجلسات التي تتضمن أي وكيل محدد. |
+| `--session-id ` | تصفية الجلسة؛ كرر أو افصل القيم بفواصل. |
+| `--all` | ترحيل تلقائي حتى `--limit`. |
+| `--cursor ` | استئناف من مؤشر معتم. |
+| `--page-size ` | صفوف لكل طلب مع `--all`؛ الحد الأقصى `200`. |
+| `--fields ` | إرجاع الحقول المحددة فقط. |
+| `--full-ids` | لا تقصّر معرفات الجلسات في إخراج المحطة الطرفية. |
+| `--agents` | توسيع قائمة الوكلاء للجلسات متعددة الوكلاء. |
### التقييمات
@@ -116,15 +115,15 @@ fp evals [OPTIONS]
| الخيار | الوصف |
| --- | --- |
-| `--aggregate` | اعرض الإجماليات والإحصائيات لكل درجة بدلاً من التقييمات الفردية. |
-| `--limit`, `-n ` | أقصى صفوف قائمة. الافتراضي: `50`. |
-| `--since`, `--from`, `--to` | اختر نطاق الوقت. |
-| `--env`, `--status`, `--agent-id`, `--session-id` | ضيّق إلى قيمة واحدة دقيقة لكل مرشح. |
+| `--aggregate` | عرض الإجماليات والإحصائيات لكل درجة بدلاً من التقييمات الفردية. |
+| `--limit`, `-n ` | الحد الأقصى لصفوف القائمة. الافتراضي: `50`. |
+| `--since`, `--from`, `--to` | حدد نطاق الوقت. |
+| `--env`, `--status`, `--agent-id`, `--session-id` | ضيّق على قيمة واحدة محددة لكل تصفية. |
| `--score KEY:MIN..MAX` | نطاق الدرجات؛ قابل للتكرار ويجب أن تطابق جميع النطاقات. |
-| `--all`, `--cursor`, `--page-size` | تحكم بترقيم القائمة. |
-| `--fields ` | أرجع الحقول المحددة فقط. |
-| `--full-ids` | اعرض معرّفات الجلسات الكاملة. |
-| `--scores-full` | اعرض كل درجة في مخرجات الطرفية. |
+| `--all`, `--cursor`, `--page-size` | تحكم في ترحيل القائمة. |
+| `--fields ` | إرجاع الحقول المحددة فقط. |
+| `--full-ids` | عرض معرفات الجلسات الكاملة. |
+| `--scores-full` | عرض كل درجة في إخراج المحطة الطرفية. |
### الأخطاء
@@ -134,120 +133,120 @@ fp errors [OPTIONS]
| الخيار | الوصف |
| --- | --- |
-| `--aggregate` | لخّص الأخطاء المطابقة بدلاً من سرد الصفوف. |
-| `--limit`, `-n ` | أقصى صفوف قائمة. الافتراضي: `50`. |
-| `--since`, `--from`, `--to` | اختر نطاق الوقت. |
-| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | ضيّق مجموعة الأخطاء. |
-| `--search ` | ابحث في نص الحمولة؛ قابل للتكرار. |
-| `--order asc\|desc` | ترتيب الوقت. |
-| `--all`, `--cursor`, `--page-size` | تحكم بترقيم القائمة. |
-| `--fields ` | أرجع الحقول المحددة فقط. |
-| `--full-ids` | اعرض معرّفات الجلسات الكاملة. |
+| `--aggregate` | ملخص الأخطاء المطابقة بدلاً من عرض الصفوف. |
+| `--limit`, `-n ` | الحد الأقصى لصفوف القائمة. الافتراضي: `50`. |
+| `--since`, `--from`, `--to` | حدد نطاق الوقت. |
+| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | ضيّق من مجموعة الأخطاء. |
+| `--search ` | بحث نصي عن الحمولة؛ قابل للتكرار. |
+| `--order asc\|desc` | ترتيب زمني. |
+| `--all`, `--cursor`, `--page-size` | تحكم في ترحيل القائمة. |
+| `--fields ` | إرجاع الحقول المحددة فقط. |
+| `--full-ids` | عرض معرفات الجلسات الكاملة. |
### الاستخدام وقيم التصفية
| الأمر | الغرض |
| --- | --- |
-| `fp usage` | اعرض الاستخدام لنافذة التقييس الحالية. |
-| `fp list envs` | اسرد البيئات المرصودة. |
-| `fp list agents` | اسرد معرّفات الوكلاء المرصودة. |
-| `fp list event_types` | اسرد أنواع الأحداث. |
-| `fp list score_filters` | اسرد مفاتيح درجات التقييم. |
-| `fp list models` | اسرد أسماء النماذج. |
-| `fp list hooks` | اسرد أسماء الخطافات. |
-| `fp list tools` | اسرد أسماء الأدوات. |
-| `fp list error_types` | اسرد أنواع الأخطاء. |
+| `fp usage` | عرض الاستخدام لنافذة التقسيم الحالية. |
+| `fp list envs` | عرض قائمة البيئات المراقبة. |
+| `fp list agents` | عرض قائمة معرفات الوكلاء المراقبة. |
+| `fp list event_types` | عرض قائمة أنواع الأحداث. |
+| `fp list score_filters` | عرض قائمة مفاتيح درجات التقييم. |
+| `fp list models` | عرض قائمة أسماء النماذج. |
+| `fp list hooks` | عرض قائمة أسماء الخطافات. |
+| `fp list tools` | عرض قائمة أسماء الأدوات. |
+| `fp list error_types` | عرض قائمة أنواع الأخطاء. |
### المؤسسات
| الأمر | الغرض |
| --- | --- |
-| `fp orgs list` | اسرد المؤسسات المتاحة. |
-| `fp orgs switch [SLUG]` | احفظ مؤسسة نشطة؛ يطلب عند الحذف. |
-| `fp orgs current` | اعرض المؤسسة النشطة. |
-| `fp orgs perms` | اعرض أذوناتك في المؤسسة النشطة. |
+| `fp orgs list` | عرض قائمة المؤسسات القابلة للوصول. |
+| `fp orgs switch [SLUG]` | احفظ مؤسسة نشطة؛ يُطلب عند الحذف. |
+| `fp orgs current` | عرض المؤسسة النشطة. |
+| `fp orgs perms` | عرض أذوناتك في المؤسسة النشطة. |
### مفاتيح API
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp keys list` | اسرد مفاتيح المؤسسة. | `--show-id`; `--fields ` |
-| `fp keys show NAME` | اعرض مفتاح واحد ومنحه. | — |
-| `fp keys create NAME` | أنشئ مفتاح واكشف سره مرة واحدة. | `--permission-set`; `--add`; `--remove` |
-| `fp keys update NAME` | استبدل مجموعة الأذونات أو اضبط المنح. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
-| `fp keys regenerate NAME` | أدِر السر واكشف البديل مرة واحدة. | `--yes`, `-y` |
-| `fp keys disable NAME` | ألغِ مفتاح بشكل دائم. | `--yes`, `-y` |
+| `fp keys list` | عرض قائمة مفاتيح المؤسسة. | `--show-id`; `--fields ` |
+| `fp keys show NAME` | عرض مفتاح واحد ومنحاته. | — |
+| `fp keys create NAME` | إنشاء مفتاح وكشف سره مرة واحدة. | `--permission-set`; `--add`; `--remove` |
+| `fp keys update NAME` | استبدال مجموعة الأذونات أو ضبط المنح. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp keys regenerate NAME` | تدوير السر واكشف الاستبدال مرة واحدة. | `--yes`, `-y` |
+| `fp keys disable NAME` | إلغاء مفتاح بشكل دائم. | `--yes`, `-y` |
-تستخدم رموز الأذونات `resource:action`، مثل `events:add`. كرّر `--add`، افصل الرموز بفواصل، أو استخدم إجراءات منقوطة مثل `events:read.add`.
+تستخدم رموز الأذونات `resource:action`، مثل `events:add`. كرر `--add`، افصل الرموز بفواصل، أو استخدم إجراءات مفصولة بنقاط مثل `events:read.add`.
### الاستعلامات
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp query list` | اسرد الاستعلامات المحفوظة. | `--show-id`; `--fields ` |
-| `fp query show NAME` | اعرض استعلام واحد. | — |
-| `fp query create NAME` | احفظ استعلام. | `--sql `; `--description` |
-| `fp query update NAME` | حدّث أو أعد تسمية استعلام. | `--name`; `--sql`; `--description`; `--yes`, `-y` |
-| `fp query delete NAME` | احذف استعلام محفوظ. | `--yes`, `-y` |
-| `fp query run [NAME]` | نفّذ استعلام محفوظ أو SQL مخصص. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
-| `fp query schema [TABLE]` | اسرد الجداول القابلة للاستعلام أو افحص جدول واحد. | — |
+| `fp query list` | عرض قائمة الاستعلامات المحفوظة. | `--show-id`; `--fields ` |
+| `fp query show NAME` | عرض استعلام واحد. | — |
+| `fp query create NAME` | حفظ استعلام. | `--sql `; `--description` |
+| `fp query update NAME` | تحديث أو إعادة تسمية استعلام. | `--name`; `--sql`; `--description`; `--yes`, `-y` |
+| `fp query delete NAME` | حذف استعلام محفوظ. | `--yes`, `-y` |
+| `fp query run [NAME]` | شغّل استعلاماً محفوظاً أو SQL فوري. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
+| `fp query schema [TABLE]` | عرض قائمة الجداول القابلة للاستعلام أو فحص جدول واحد. | — |
### المستخدمون
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp users list` | اسرد أعضاء المؤسسة. | `--active-only`; `--show-id` |
-| `fp users show EMAIL` | اعرض عضو ومنحه. | — |
-| `fp users create EMAIL` | أضف عضو. | `--permission-set`; `--add`; `--remove` |
-| `fp users update EMAIL` | غيّر منح العضو. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
-| `fp users disable EMAIL` | عطّل تسجيل الدخول. | `--yes`, `-y` |
-| `fp users enable EMAIL` | أعد تفعيل تسجيل الدخول. | `--yes`, `-y` |
+| `fp users list` | عرض قائمة أعضاء المؤسسة. | `--active-only`; `--show-id` |
+| `fp users show EMAIL` | عرض عضو ومنحاه. | — |
+| `fp users create EMAIL` | إضافة عضو. | `--permission-set`; `--add`; `--remove` |
+| `fp users update EMAIL` | تغيير منح العضو. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp users disable EMAIL` | تعطيل تسجيل الدخول. | `--yes`, `-y` |
+| `fp users enable EMAIL` | إعادة تفعيل تسجيل الدخول. | `--yes`, `-y` |
### الإعدادات
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp settings list` | اسرد إعدادات المؤسسة والقيم الحالية. | — |
-| `fp settings schema` | اعرض القيم المقبولة والأوصاف. | — |
-| `fp settings set KEY` | غيّر إعداد موجود. | واحد بالضبط من `--value`, `--json-value`, `--file`; `--yes`, `-y` اختياري |
+| `fp settings list` | عرض قائمة إعدادات المؤسسة والقيم الحالية. | — |
+| `fp settings schema` | عرض القيم المقبولة والأوصاف. | — |
+| `fp settings set KEY` | تغيير إعداد موجود. | واحد فقط من `--value`, `--json-value`, `--file`؛ اختياري `--yes`, `-y` |
### التنبيهات
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp alerts list` | اسرد قواعد التنبيهات. | `--show-id` |
-| `fp alerts show NAME` | اعرض تنبيه واحد. | — |
-| `fp alerts create NAME` | أنشئ تنبيه. | `--file`; `--description`; `--severity`; `--trigger-kind`; `--trigger-spec`; `--channels`; `--eval-interval-secs`; `--min-breaches`; `--eval-window` |
-| `fp alerts update NAME` | حدّث أو أعد تسمية تنبيه. | خيارات الإنشاء بالإضافة إلى `--name`; `--yes`, `-y` |
-| `fp alerts delete NAME` | احذف تنبيه. | `--yes`, `-y` |
-| `fp alerts test NAME` | أرسل إخطار اختبار. | `--channels`; `--yes`, `-y` |
+| `fp alerts list` | عرض قائمة قواعد التنبيه. | `--show-id` |
+| `fp alerts show NAME` | عرض تنبيه واحد. | — |
+| `fp alerts create NAME` | إنشاء تنبيه. | `--file`; `--description`; `--severity`; `--trigger-kind`; `--trigger-spec`; `--channels`; `--eval-interval-secs`; `--min-breaches`; `--eval-window` |
+| `fp alerts update NAME` | تحديث أو إعادة تسمية تنبيه. | خيارات الإنشاء بالإضافة إلى `--name`; `--yes`, `-y` |
+| `fp alerts delete NAME` | حذف تنبيه. | `--yes`, `-y` |
+| `fp alerts test NAME` | إرسال إخطار اختبار. | `--channels`; `--yes`, `-y` |
-درجات التنبيهات هي `info`, `warning`, و `critical`. أنواع المشغلات هي `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound`, و `per_event`. يجب أن تكون فترات التقييم بين 30 و 86,400 ثانية.
+شدات التنبيه هي `info`, `warning`, و `critical`. أنواع المشغلات هي `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound`, و `per_event`. يجب أن تكون فترات التقييم بين 30 و 86400 ثانية.
-### عمليات التدقيق
+### التدقيق
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp audits list` | اسرد عمليات التدقيق. | `--enabled-only`; `--show-id` |
-| `fp audits show NAME` | اعرض تعريف التدقيق الواحد والحالة. | — |
-| `fp audits create NAME` | أنشئ تدقيق وأدرج تشغيله الأول فوراً. | انظر [خيارات الإنشاء](#audit-create-options). |
-| `fp audits edit NAME` | استبدل إعدادات التدقيق مع الاحتفاظ بالقيم غير المحددة. | خيارات تعريف الإنشاء; `--name`; `--yes`, `-y` |
-| `fp audits delete NAME` | احذف تدقيق ونتائجه وسجل التشغيل. | `--yes`, `-y` |
-| `fp audits run NAME` | أدرج تشغيل يدوي. | — |
-| `fp audits runs NAME` | اسرد سجل التشغيل. | `--limit`, `-n`; `--show-id` |
-| `fp audits context-show NAME` | اعرض الملخص وحالة جلب رابط المرجع. | — |
-| `fp audits context-set NAME` | غيّر الملخص أو روابط المرجع. | `--text`; `--text-file`; `--url`; `--clear-urls` |
-| `fp audits context-refresh NAME` | أعد جلب روابط المرجع. | — |
-| `fp audits findings` | اسرد النتائج. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
-| `fp audits finding FINDING_ID` | اعرض نتيجة واحدة وأدلتها. | — |
-| `fp audits ack FINDING_ID` | اعترف بنتيجة. | `--reason` |
-| `fp audits mute FINDING_ID` | اكتم نمط متكرر. | `--reason`; `--yes`, `-y` |
-| `fp audits dismiss FINDING_ID` | ضع علامة على نمط غير قابل للتنفيذ واكتمه. | `--reason`; `--yes`, `-y` |
-| `fp audits resolve FINDING_ID` | ضع علامة على نتيجة محلولة بدون كتم مستقبلي. | `--yes`, `-y` |
-| `fp audits reopen FINDING_ID` | أعد نتيجة إلى قائمة الانتظار المباشرة ومسح الكتم. | — |
-| `fp audits assign FINDING_ID` | عيّن مالك النتيجة. | `--to ` مطلوب |
-
-#### خيارات إنشاء التدقيق
+| `fp audits list` | عرض قائمة المراجعات. | `--enabled-only`; `--show-id` |
+| `fp audits show NAME` | عرض تعريف المراجعة واحدة وحالتها. | — |
+| `fp audits create NAME` | إنشاء مراجعة وطلب تشغيلها الأول على الفور. | انظر [خيارات الإنشاء](#audit-create-options). |
+| `fp audits edit NAME` | استبدل إعدادات المراجعة مع الاحتفاظ بالقيم غير المحددة. | خيارات تعريف الإنشاء؛ `--name`; `--yes`, `-y` |
+| `fp audits delete NAME` | حذف مراجعة ونتائجها وسجل التشغيل. | `--yes`, `-y` |
+| `fp audits run NAME` | طلب تشغيل يدوي. | — |
+| `fp audits runs NAME` | عرض قائمة سجل التشغيل. | `--limit`, `-n`; `--show-id` |
+| `fp audits context-show NAME` | عرض الملخص وحالة جلب عنوان URL المرجعي. | — |
+| `fp audits context-set NAME` | تغيير الملخص أو عناوين URL المرجعية. | `--text`; `--text-file`; `--url`; `--clear-urls` |
+| `fp audits context-refresh NAME` | إعادة جلب عناوين URL المرجعية. | — |
+| `fp audits findings` | عرض قائمة النتائج. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
+| `fp audits finding FINDING_ID` | عرض نتيجة واحدة وأدلتها. | — |
+| `fp audits ack FINDING_ID` | الإقرار بنتيجة. | `--reason` |
+| `fp audits mute FINDING_ID` | قمع نمط متكرر. | `--reason`; `--yes`, `-y` |
+| `fp audits dismiss FINDING_ID` | وضع علامة على النمط غير قابل للتنفيذ وقمعه. | `--reason`; `--yes`, `-y` |
+| `fp audits resolve FINDING_ID` | وضع علامة على إصلاح النتيجة بدون قمع مستقبلي. | `--yes`, `-y` |
+| `fp audits reopen FINDING_ID` | إرجاع نتيجة إلى قائمة الانتظار المباشرة ومسح القمع. | — |
+| `fp audits assign FINDING_ID` | تعيين مالك النتيجة. | `--to ` مطلوب |
+
+#### خيارات إنشاء المراجعة
```bash
fp audits create checkout-reliability \
@@ -262,120 +261,120 @@ fp audits create checkout-reliability \
| الخيار | الوصف |
| --- | --- |
-| `--file ` | أسّس التعريف على JSON، أو استخدم `-` للإدخال القياسي. تتجاوز الأعلام الصريحة قيم الملف. |
-| `--description ` | اذكر سؤال الفشل أو الغرض. |
-| `--enabled` / `--disabled` | ابدأ الجدولة بتشغيل أو إيقاف. الافتراضي: مفعّل. |
+| `--file ` | بناء التعريف على JSON، أو استخدم `-` للإدخال القياسي. الأعلام الصريحة تتجاوز قيم الملف. |
+| `--description ` | حدد سؤال الفشل أو الغرض. |
+| `--enabled` / `--disabled` | ابدأ الجدولة على أو بـ إيقاف. الافتراضي: مفعّل. |
| `--schedule-interval-secs ` | `3600`–`604800`. الافتراضي: `86400`. |
-| `--schedule-anchor ` | مرحلة UTC ثابتة في شكل ISO 8601. الافتراضي: 09:00 UTC التالية. |
-| `--window-mode since_last\|fixed` | استمرّ بعد آخر نافذة محللة بالكامل أو افحص نافذة دوارة بشكل متكرر. الافتراضي: `since_last`. |
+| `--schedule-anchor ` | المرحلة UTC الثابتة بصيغة ISO 8601. الافتراضي: 09:00 UTC التالية. |
+| `--window-mode since_last\|fixed` | متابعة بعد آخر نافذة تم تحليلها بالكامل أو فحص نافذة متداخلة بشكل متكرر. الافتراضي: `since_last`. |
| `--lookback-window-secs ` | `3600`–`7776000`. الافتراضي: `604800`. |
-| `--scope ''` | صفّي حسب `environments`, `agent_ids`, أو حقول النطاق الأخرى المدعومة. |
-| `--ignore-error-type ` | استبعد أنواع الأخطاء؛ كرّر أو افصل بفواصل. |
-| `--llm` / `--no-llm` | فعّل أو عطّل التحليل الموجه بالوكيل. الافتراضي: مفعّل. |
+| `--scope ''` | التصفية حسب `environments`, `agent_ids`, أو حقول نطاق أخرى مدعومة. |
+| `--ignore-error-type ` | استبعد أنواع الأخطاء؛ كرر أو افصل بفواصل. |
+| `--llm` / `--no-llm` | فعّل أو عطّل التحليل الذي يحركه الوكيل. الافتراضي: مفعّل. |
| `--top-k ` | احتفظ بـ `1`–`500` نتيجة. الافتراضي: `50`. |
| `--sensitivity low\|medium\|high` | اضبط حساسية الإبلاغ. الافتراضي: `medium`. |
| `--channels ''` | مصفوفة قنوات الإخطار. |
-| `--text ` | ملخص مضمّن، أقصى 8,192 حرف. |
-| `--text-file ` | اقرأ الملخص من ملف؛ حصري متبادل مع `--text`. |
-| `--url ` | أضف مرجع HTTPS عام؛ كرّر حتى خمس مرات. |
+| `--text ` | ملخص مضمن، بحد أقصى 8192 حرف. |
+| `--text-file ` | اقرأ الملخص من ملف؛ متعارض مع `--text`. |
+| `--url ` | أضف مرجعاً عام HTTPS؛ كرر حتى خمس مرات. |
-أدرج السياق أثناء الإنشاء عندما يحتاجه التشغيل الأول. يلتزم الإنشاء بالتعريف والسياق معاً قبل بدء التشغيل المصفوف.
+أدرج السياق أثناء الإنشاء عندما يحتاجه التشغيل الأول. الإنشاء ينفذ التعريف والسياق معاً قبل بدء التشغيل المطلوب.
- `fp audits run` غير متزامن. صوّت `fp audits runs NAME` حتى يحقق آخر تشغيل النجاح أو الفشل قبل قراءة نتائجه.
+ `fp audits run` غير متزامن. استطلع `fp audits runs NAME` حتى ينجح التشغيل الأخير أو يفشل قبل قراءة نتائجه.
### المشاكل
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp issues list` | اسرد المشاكل. | `--state`; `--alert-id`; `--limit`, `-n`; `--show-id` |
-| `fp issues count` | احسب المشاكل المفتوحة أو حالات المشاكل المختارة. | `--state` |
-| `fp issues show INCIDENT_ID` | اعرض تفاصيل المشكلة والتعليقات والمشتركين والنشاط. | — |
-| `fp issues open` | افتح مشكلة يدوية أو مرتبطة بتنبيه. | `--summary` مطلوب؛ `--title`, `--alert-id`, `--severity` اختياري |
-| `fp issues ack INCIDENT_ID` | اعترف بمشكلة. | — |
-| `fp issues assign INCIDENT_ID` | استبدل المعينين؛ احذف الخيار لمسحهم. | `--assignee` قابل للتكرار |
-| `fp issues resolve INCIDENT_ID` | حلّ مشكلة. | `--yes`, `-y` |
-| `fp issues comment-list INCIDENT_ID` | اسرد التعليقات. | — |
-| `fp issues comment-add INCIDENT_ID` | أضف تعليق. | واحد بالضبط من `--body`, `--file` |
-| `fp issues comment-delete INCIDENT_ID COMMENT_ID` | احذف تعليق. | `--yes`, `-y` |
-| `fp issues subscribers INCIDENT_ID` | اسرد المشتركين. | — |
-| `fp issues subscribe INCIDENT_ID` | اشترك بنفسك أو مع مشغّل آخر. | `--email` |
-| `fp issues unsubscribe INCIDENT_ID` | أزل اشتراك. | `--email` |
-
-حالات المشاكل الصالحة هي `firing`, `acknowledged`, و `resolved`. درجات المشاكل المستقلة هي `info`, `warning`, و `critical`.
+| `fp issues list` | عرض قائمة المشاكل. | `--state`; `--alert-id`; `--limit`, `-n`; `--show-id` |
+| `fp issues count` | عدّ المشاكل المفتوحة أو حالات المشاكل المحددة. | `--state` |
+| `fp issues show INCIDENT_ID` | عرض تفاصيل المشكلة والتعليقات والمشتركين والنشاط. | — |
+| `fp issues open` | افتح مشكلة يدوية أو مرتبطة بتنبيه. | `--summary` مطلوب؛ اختياري `--title`, `--alert-id`, `--severity` |
+| `fp issues ack INCIDENT_ID` | الإقرار بمشكلة. | — |
+| `fp issues assign INCIDENT_ID` | استبدل المكلفين؛ حذف الخيار لمسحهم. | `--assignee` قابل للتكرار |
+| `fp issues resolve INCIDENT_ID` | حل مشكلة. | `--yes`, `-y` |
+| `fp issues comment-list INCIDENT_ID` | عرض قائمة التعليقات. | — |
+| `fp issues comment-add INCIDENT_ID` | إضافة تعليق. | واحد فقط من `--body`, `--file` |
+| `fp issues comment-delete INCIDENT_ID COMMENT_ID` | حذف تعليق. | `--yes`, `-y` |
+| `fp issues subscribers INCIDENT_ID` | عرض قائمة المشتركين. | — |
+| `fp issues subscribe INCIDENT_ID` | اشترك بنفسك أو بمشغل آخر. | `--email` |
+| `fp issues unsubscribe INCIDENT_ID` | إزالة اشتراك. | `--email` |
+
+حالات المشاكل الصحيحة هي `firing`, `acknowledged`, و `resolved`. شدات المشاكل المستقلة هي `info`, `warning`, و `critical`.
### مساعد السحابة
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp agent health` | تحقق من توفر والمساعد والتكوين. | — |
-| `fp agent models` | اسرد نماذج المساعد المتاحة. | — |
-| `fp agent chats` | اسرد الدردشات المحفوظة. | — |
-| `fp agent ask [MESSAGE]` | ابدأ أو استمرّ في دردشة؛ اقرأ من الإدخال القياسي عند حذف الرسالة. | `--chat`; `--model`; `--page-context` |
-| `fp agent show CHAT_ID` | اعرض محادثة محفوظة. | — |
+| `fp agent health` | تحقق من توفر وتكوين المساعد. | — |
+| `fp agent models` | عرض قائمة نماذج المساعد المتاحة. | — |
+| `fp agent chats` | عرض قائمة المحادثات المحفوظة. | — |
+| `fp agent ask [MESSAGE]` | ابدأ أو استمر في محادثة؛ اقرأ من الإدخال القياسي عند حذف الرسالة. | `--chat`; `--model`; `--page-context` |
+| `fp agent show CHAT_ID` | عرض محادثة محفوظة. | — |
| `fp agent rename CHAT_ID` | أعد تسمية محادثة. | `--title` مطلوب |
-| `fp agent delete CHAT_ID` | احذف محادثة. | `--yes`, `-y` |
+| `fp agent delete CHAT_ID` | حذف محادثة. | `--yes`, `-y` |
### السياسات
-إصدارات السياسة المُدارة بواسطة السحابة. **جلسة فقط** — يخرج كل أمر هنا بـ `2` تحت مفتاح API، قبل أي طلب، لأن هذه مسارات كتابة جذر مقصودة غائبة عن `/v1`.
+إصدارات السياسة المدارة بواسطة السحابة. **جلسة فقط** — كل أمر هنا يُخرج `2` تحت مفتاح API، قبل أي طلب، لأن هذه مسارات كتابة جذرية محذوفة عن قصد من `/v1`.
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp policies list` | اسرد إصدارات السياسات. | `--json` |
-| `fp policies show POLICY_ID` | اعرض سياسة واحدة، مع مصدرها. | — |
-| `fp policies publish NAME PATH` | ألّف إصدار من `.mjs` محلي. | `--description`; `--no-verify` |
-| `fp policies enable POLICY_ID` | أضفها مرة أخرى إلى كل نشر أُزيلت منه، مما يخلق جيل جديد على كل واحد. | `--yes`, `-y` |
-| `fp policies disable POLICY_ID` | أزلها من كل نشر يحملها، مما يخلق جيل جديد على كل واحد. | `--yes`, `-y` |
-| `fp policies delete POLICY_ID` | احذف إصدار سياسة. | `--yes`, `-y` |
-| `fp policies test PATH` | شغّل سياسة محلياً مقابل سياق تركيبي. يطبّق مرشح `match` لكل سياسة، لذا يُبلَّغ عن سياسة لا تغطي الحدث/الأداة المعطاة `skipped` بدلاً من التشغيل. | `--event`; `--tool`; `--command`; `--file-path`; `--expect` |
-| `fp policies compose PROMPT` | صغ سياسة مع المساعد. تحتاج `policies:write`. | — |
+| `fp policies list` | عرض قائمة إصدارات السياسة. | `--json` |
+| `fp policies show POLICY_ID` | عرض سياسة واحدة، مع مصدرها. | — |
+| `fp policies publish NAME PATH` | نقيب إصدار من `.mjs` محلي. | `--description`; `--no-verify` |
+| `fp policies enable POLICY_ID` | أضفها مرة أخرى إلى كل نشر تم إزالتها منه، نقيب جيل جديد على كل واحد. | `--yes`, `-y` |
+| `fp policies disable POLICY_ID` | أزلها من كل نشر تحملها، نقيب جيل جديد على كل واحد. | `--yes`, `-y` |
+| `fp policies delete POLICY_ID` | حذف إصدار سياسة. | `--yes`, `-y` |
+| `fp policies test PATH` | شغّل سياسة محلياً مقابل سياق تركيبي. تطبق تصفية `match` لكل سياسة، لذلك التي لا تغطي الحدث/الأداة المحددة يتم الإبلاغ عنها `skipped` بدلاً من التشغيل. | `--event`; `--tool`; `--command`; `--file`; `--expect` |
+| `fp policies compose PROMPT` | صيغ سياسة مع المساعد. يحتاج `policies:write`. | — |
### الأسطول
-أي آلات تشغّل أي سياسات. **جلسة فقط**، السبب نفسه أعلاه.
+أي ماكينات تشغل أي سياسات. **جلسة فقط**، نفس السبب أعلاه.
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp fleet list` | اسرد الآلات المسجلة وجيل نشرها. | — |
-| `fp fleet show MACHINE_ID` | مجموعة السياسات التي تشغّلها آلة حالياً. | — |
-| `fp fleet deploy MACHINE_ID` | **استبدل مجموعة السياسات كاملة للآلة.** اطبع الخطة واسأل فقط على طرفية تفاعلية بدون `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
-| `fp fleet diff MACHINE_ID` | قارن آلة مقابل نشر آخر. | — |
-| `fp fleet history MACHINE_ID` | النشرات السابقة لآلة. | — |
-| `fp fleet rollback MACHINE_ID` | استعد نشراً سابقاً. | `--yes`, `-y` |
-| `fp fleet rename MACHINE_ID` | أعط آلة اسماً قابلاً للقراءة. | `--name` مطلوب |
+| `fp fleet list` | عرض قائمة الماكينات المسجلة وجيل النشر الخاص بها. | — |
+| `fp fleet show MACHINE_ID` | مجموعة السياسات التي تشغلها ماكينة حالياً. | — |
+| `fp fleet deploy MACHINE_ID` | **استبدل مجموعة السياسات الكاملة للماكينة.** اطبع الخطة واسأل فقط على محطة طرفية تفاعلية بدون `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
+| `fp fleet diff MACHINE_ID` | قارن ماكينة مقابل نشر آخر. | — |
+| `fp fleet history MACHINE_ID` | النشريات السابقة لماكينة. | — |
+| `fp fleet rollback MACHINE_ID GENERATION` | أعد تثبيت مجموعة السياسات لجيل سابق، كجيل جديد. | `--yes`, `-y` |
+| `fp fleet rename MACHINE_ID` | أعط ماكينة اسماً قابلاً للقراءة. | `--name` مطلوب |
-### الحماية
+### guardrails
-ما فعله الإنفاذ فعلياً. **جلسة فقط**، السبب نفسه أعلاه.
+ما فعله الفرض فعلاً. **جلسة فقط**، نفس السبب أعلاه.
| الأمر | الغرض | الخيارات |
| --- | --- | --- |
-| `fp guardrails summary` | التغطية والمجاميع المحظورة/المقيّمة وخطأ رفض وجدول السياسة. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
-| `fp guardrails timeline` | القرارات المجمّعة على النافذة، مجموعة عبر كل مصدر سياسة. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails summary` | التغطية والإجماليات المحجوبة/المقيّمة وخط رفض وجدول لكل سياسة. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails timeline` | القرارات المجمعة على النافذة، مجموعة على كل مصدر سياسة. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
## الأعلام العامة
| العلم | الوصف |
| --- | --- |
-| `--json` | أصدر JSON قابل لقراءة الآلة. |
-| `--base-url ` | استخدم لوحة معلومات مستقلة أو تطوير. |
-| `--org ` | اختر مؤسسة لهذا التشغيل. |
+| `--json` | بث JSON قابل للقراءة من الآلة. |
+| `--base-url ` | استخدم لوحة تحكم ذاتية الاستضافة أو التطوير. |
+| `--org ` | حدد مؤسسة لهذا الاستدعاء. |
| `--token ` | تجاوز رمز جلسة المستخدم المحفوظ. |
-| `--api-key ` | صادق الأتمتة برمز API؛ لا يُحفظ أبداً. |
+| `--api-key ` | المصادقة الأتمتة برمز API؛ لا تُحفظ أبداً. |
| `--timeout ` | مهلة HTTP؛ يجب أن تكون موجبة. الافتراضي: `30`. |
-| `--quiet`, `-q` | اكتم مخرجات الحالة على stderr. |
-| `--no-color` | عطّل الإخراج الملون. |
-| `--insecure` / `--secure` | عطّل أو استعد التحقق من شهادة TLS. |
-| `--version` | اطبع الإصدار غير المجاور وخرج. |
-| `--help`, `-h` | اعرض المساعدة. |
+| `--quiet`, `-q` | قمع إخراج الحالة على stderr. |
+| `--no-color` | تعطيل الإخراج الملون. |
+| `--insecure` / `--secure` | تعطيل أو استعادة التحقق من شهادة TLS. |
+| `--version` | طباعة الإصدار المفتوح والخروج. |
+| `--help`, `-h` | عرض المساعدة. |
-`--api-key` مقصود للأتمتة. تسجيل الدخول وتبديل المؤسسة وأوامر المساعد تتطلب جلسة مستخدم.
+`--api-key` مخصصة للأتمتة. تسجيل الدخول وتبديل المؤسسة وأوامر المساعد تتطلب جلسة مستخدم.
## متغيرات البيئة
-| المتغير | ما يعادله أو الغرض |
+| المتغير | المكافئ أو الغرض |
| --- | --- |
| `FP_DASHBOARD_URL` | `--base-url` |
| `FP_ORG` | `--org` |
@@ -383,18 +382,18 @@ fp audits create checkout-reliability \
| `FP_API_KEY` | `--api-key` |
| `FP_JSON` | `--json` |
| `FP_INSECURE` | `--insecure` |
-| `FP_HOME` | أعد توضيع دليل تكوين CLI (الافتراضي `~/.failproofai/fpcli`). |
+| `FP_HOME` | أعد وضع مجلد تكوين CLI (الافتراضي `~/.failproofai/fpcli`). |
| `FP_ANALYTICS_DISABLED` أو `DO_NOT_TRACK` | عطّل تحليلات CLI المجهولة. |
| `NO_COLOR` | عطّل الإخراج الملون. |
-تتجاوز الأعلام الصريحة متغيرات البيئة، التي تتجاوز التكوين المحفوظ. في وضع مفتاح API، اختر المستأجر بوضوح مع `--org` أو `FP_ORG`.
+الأعلام الصريحة تتجاوز متغيرات البيئة، التي تتجاوز التكوين المحفوظ. في وضع مفتاح API، حدد المستأجر بشكل صريح مع `--org` أو `FP_ORG`.
- تهجئات `AGENTEYE_*` من هذه **لا تُقرأ بواسطة `fp`** ولم تكن أبداً — يعلن CLI `FP_*` (`fp_cli/app.py`)، ومتغير غير معروف ليس خطأ. ضبط `AGENTEYE_DASHBOARD_URL` لا يستهدف CLI؛ يُتجاهل والأمر يعمل بصمت ضد لوحة المعلومات المحفوظة بدلاً من ذلك.
+ تهجئات `AGENTEYE_*` لهذه **لا تُقرأ بواسطة `fp`** وأبداً لم تكن — يعلن CLI عن `FP_*` (`fp_cli/app.py`)، وحتى متغير غير معروف ليس خطأ. تعيين `AGENTEYE_DASHBOARD_URL` لا يعيد تحديد هدف CLI؛ يتم تجاهله والأمر يعمل بصمت مقابل لوحة التحكم المحفوظة بدلاً منه.
- `AGENTEYE_HOME` و `AGENTEYE_ENVIRONMENT` موجودة لا تزال، لكنها تنتمي إلى **جامع والتطبيق الكلينوميتري**، وليس إلى CLI هذا.
+ `AGENTEYE_HOME` و `AGENTEYE_ENVIRONMENT` لا تزال موجودة، لكنها تتعلق بـ **المجمع و telemetry SDK**، وليس بـ CLI هذا.
- الأوامر التي تحذف أو تلغي أو تكتم أو تحلّ أو تستبدل التكوين تطالب افتراضياً. استخدم `--yes` فقط بعد التحقق من المؤسسة النشطة والهدف.
+ الأوامر التي تحذف أو تلغي أو تقمع أو تحل أو تستبدل التكوين تطالب بشكل افتراضي. استخدم `--yes` فقط بعد التحقق من المؤسسة النشطة والهدف.
\ No newline at end of file
diff --git a/docs/ar/reference/custom-agents.mdx b/docs/ar/reference/custom-agents.mdx
index 5a7630a2d..5ca2384f9 100644
--- a/docs/ar/reference/custom-agents.mdx
+++ b/docs/ar/reference/custom-agents.mdx
@@ -1,17 +1,17 @@
---
-title: "وكلاء مخصصون"
-description: "الإعدادات والفهرس الكامل للأحداث وقواعد الربط والتسليم لـ failproofai-sdk."
+title: "وكلاء مخصصة"
+description: "الإعدادات وفهرس الأحداث وقواعد الارتباط والتسليم لـ failproofai-sdk."
icon: "python"
---
-شرح لكل إعداد وطريقة وحقل. إذا كنت تقوم بالقياس للمرة الأولى، ابدأ بالدليل — هذه الصفحة مخصصة للبحث عن الأشياء.
+شرح لكل إعداد وطريقة وحقل ويعمل. إذا كنت تقوم بالتجهيز للمرة الأولى، ابدأ بالدليل — هذه الصفحة مخصصة للبحث.
-
- التثبيت والقياس وطرق الأحداث ومثال عملي والمشاكل الشائعة.
+
+ التثبيت والتجهيز وطرق الأحداث ومثال عملي ومشاكل شائعة.
- LangChain و CrewAI و LlamaIndex و Pydantic AI تقيس نفسها بنفسها باستدعاء واحد.
+ تجهز LangChain و CrewAI و LlamaIndex و Pydantic AI نفسها بمكالمة واحدة.
@@ -23,24 +23,30 @@ Python 3.10 أو أحدث. بدون متطلبات وقت التشغيل.
pip install failproofai-sdk
```
-يتم تثبيت الحزمة باسم `failproofai-sdk` واستيرادها في Python باسم `failproofai_sdk`. إضافات الإطار مثل `failproofai-sdk[langgraph]` تثبت الإطار نفسه؛ المحولات دائماً مدرجة في العجلة الأساسية.
+يتم تثبيت الحزمة باسم `failproofai-sdk` واستيرادها في Python كـ `failproofai_sdk`. الإضافات الإطار مثل `failproofai-sdk[langgraph]` تثبت الإطار نفسه؛ تأتي المحولات دائماً في الحزمة الأساسية.
-## ربط مراقب Failproof
+## توصيل مُراقب Failproof
- 1. انتقل إلى **Admin → Keys** وأنشئ مفتاحاً بصلاحية `events:add`.
- 2. [ربط مراقب Failproof بـ Cloud](/ar/start/setup#connect-a-machine-to-cloud) على جهاز الوكيل.
- 3. قم بتشغيل جلسة واحدة مع القياس، ثم ابحث عن معرّفها الدقيق تحت **Observe → Events**.
- 4. انتقل إلى **Observe → Sessions**، اختر نفس البيئة، وافتح الأثر المعاد بناؤه.
+ 1. انتقل إلى **Admin → Keys** وأنشئ مفتاحاً بـ `events:add`.
+ 2. [وصّل مُراقب Failproof إلى Cloud](/ar/start/setup#connect-a-machine-to-cloud) على جهاز الوكيل.
+ 3. قم بتشغيل جلسة واحدة مجهزة، ثم ابحث عن معرّفها الدقيق ضمن **Observe → Events**.
+ 4. انتقل إلى **Observe → Sessions** واختر نفس البيئة وافتح الأثر المعاد بناؤه.
- 
+ 
-
+
+ اقرأ مفتاح `events:add` إلى الـ shell. `read -s` يأخذها عند نص لا يتكرر، لذا لا تظهر أبداً في أمر أو في سجل shell:
+
+ ```bash
+ read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN
+ ```
+
+ ثم جهز الجهاز وتحقق من أنه متصل:
+
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ failproofai config
failproofai config --status
```
@@ -58,32 +64,32 @@ failproofai_sdk.configure(
)
```
-| الحجة | ما تفعله |
+| الوسيط | ما يفعله |
| --- | --- |
-| `environment` | العلامة على كل حدث — `production` أو `staging` أو `prod-eu`. القيمة الافتراضية `dev`. |
-| `flush_interval` | عدد مرات كتابة الخيط الخلفي إلى القرص بالثواني. القيمة الافتراضية `0.5`. |
-| `base_dir` | مكان الكتابة. القيمة الافتراضية سبول المراقب، وهذا ما تريده ما لم تكن تعرف خلاف ذلك. |
+| `environment` | التسمية على كل حدث — `production` أو `staging` أو `prod-eu`. الافتراضي هو `dev`. |
+| `flush_interval` | عدد مرات كتابة الـ thread في الخلفية إلى القرص، بالثواني. الافتراضي هو `0.5`. |
+| `base_dir` | مكان الكتابة. الافتراضي هو spool المُراقب، وهو ما تريده إلا إذا كنت تعرف خلاف ذلك. |
-اضبط عن طريق متغير البيئة بدلاً من ذلك:
+عيّن من خلال متغير البيئة بدلاً من ذلك:
-| متغير | ما يفعله |
+| المتغير | ما يفعله |
| --- | --- |
-| `AGENTEYE_ENVIRONMENT` | يضبط `environment` بدون تغيير الكود، لعندما تكون العلامة تابعة للنشر وليس التطبيق. حجة `configure()` تتفوق عليها. |
-| `FAILPROOFAI_HOME` | ينقل جذر Failproof AI الذي يحتفظ بالسبول. |
-| `FAILPROOFAI_SDK_STRICT` | قيمة `1` تجعل أخطاء القياس ترفع بدلاً من تسجيلها. |
-| `FAILPROOFAI_SDK_STRICT_INTEGRATIONS` | قيمة `1` تجعل مشكلة توافق الإطار ترفع بدلاً من التحذير والمتابعة. |
+| `AGENTEYE_ENVIRONMENT` | يضبط `environment` بدون تغيير في الكود، لما تكون التسمية تخص النشر وليس التطبيق. وسيط `configure()` يفوز عليه. |
+| `FAILPROOFAI_HOME` | ينقل جذر Failproof AI الذي يحتفظ بـ spool. |
+| `FAILPROOFAI_SDK_STRICT` | `1` يجعل أخطاء التجهيز ترفع بدلاً من أن تُسجل. |
+| `FAILPROOFAI_SDK_STRICT_INTEGRATIONS` | `1` يجعل مشكلة توافق الإطار ترفع بدلاً من التحذير والمتابعة. |
- **لا توجد فواصل في `environment`.** تقسم وحدة الاستيعاب هذا الحقل على الفواصل لبناء المرشحات، وتتخطى أي حدث تحتوي علامته على واحدة — لذلك يختفي التشغيل كله بصمت. اكتب `prod-eu` وليس `prod,eu`.
+ **لا فواصل في `environment`.** يقسم Ingest هذا الحقل على الفواصل لبناء عوامل تصفيتها، وتخطي أي حدث تحتوي تسميته على واحدة — لذا يختفي التشغيل الكامل بصمت. اكتب `prod-eu` وليس `prod,eu`.
- `configure(environment="prod,eu")` ترفع لذلك تكتشفها فوراً. `AGENTEYE_ENVIRONMENT` لا يمكنها أن ترفع — لا أحد يناديك — لذلك تحذر مرة واحدة وتعود إلى `dev`.
+ `configure(environment="prod,eu")` ترفع لذا تكتشف على الفور. `AGENTEYE_ENVIRONMENT` لا يمكن أن ترفع — لا أحد يناديك — لذا تحذر مرة واحدة وتعود إلى `dev`.
-يتم صف الأحداث في الذاكرة والكتابة في الخلفية كل `flush_interval` ثانية، مع كتابة نهائية عند خروج المترجم. تفقد العملية المقتولة مباشرة أي شيء لم يتم كتابته بعد.
+يتم وضع الأحداث في قائمة الانتظار في الذاكرة والكتابة في الخلفية كل `flush_interval` ثانية، مع كتابة نهائية عند خروج المفسّر. تخسر العملية المقتولة بشكل مباشر كل ما لم يتم كتابته بعد.
## الهوية
-كل حدث ينتمي إلى جلسة ووكيل. **النطاقات تملأ كليهما**، لذا نادراً ما تمرر هما:
+ينتمي كل حدث إلى جلسة ووكيل. **النطاقات تملأ كليهما**، لذا نادراً ما تمررهما:
```python
with failproofai_sdk.session():
@@ -91,15 +97,15 @@ with failproofai_sdk.session():
failproofai_sdk.event.tool_use(tool_name="search", tool_call_id="c1")
```
-تمرير `session_id` أو `agent_id` بشكل صريح لا يزال يعمل ويتفوق عليه. بدون ربط أو تمرير، يرفع الاستدعاء `TypeError` بدلاً من إصدار حدث قد تتجاهله Cloud بصمت.
+لا يزال تمرير `session_id` أو `agent_id` بشكل صريح يعمل ويفوز. بدون ربط أو تمرير، تطرح المكالمة `TypeError` بدلاً من إصدار حدث سيتجاهله Cloud بصمت.
- تركب الهوية على متغيرات السياق. تتابع مهام `asyncio` تلقائياً، لكن **ليس** الخيوط الجديدة — غلف العامل بـ `failproofai_sdk.propagate()` أو أحداثه تهبط بدون تعلق.
+ الهوية تركب على متغيرات السياق. تتبع مهام `asyncio` تلقائياً، لكن **ليس** الـ threads الجديدة — لف عامل في `failproofai_sdk.propagate()` أو أحداثه تهبط غير مرتبطة.
## فهرس الأحداث
-خمسة عشر طريقة. معظمها يأتي في **أزواج** — تستدعي الفتاح، ثم الإغلاق، والمراقب يوقت الفجوة.
+خمسة عشر طريقة. معظمها يأتي في **أزواج** — تستدعي الفاتح، ثم الإغلاق، وتوقيت الـ SDK الفجوة.
| | يفتح | يغلق |
| --- | --- | --- |
@@ -110,39 +116,39 @@ with failproofai_sdk.session():
| **الخطافات** | `hook_triggered` | `hook_completed` |
| **البشر** | `human_wait` | `human_input` |
-ثلاثة تقف بمفردها: `error` و `human_pause` و `human_interrupt`.
+ثلاثة تقف وحدها: `error` و `human_pause` و `human_interrupt`.
-كل طريقة تأخذ أيضاً `session_id` و `agent_id`، والتي تملأها النطاقات لك. أي شيء يُترك كـ `None` يُسقط بدلاً من إرساله كـ JSON `null`، وكل طريقة ترجع `None`.
+كل طريقة تأخذ أيضاً `session_id` و `agent_id`، التي تملأها النطاقات لك. أي شيء متروك كـ `None` يتم حذفه بدلاً من إرساله كـ JSON `null`، وكل طريقة تعود `None`.
-| الطريقة | مطلوب | اختياري |
+| الطريقة | مطلوبة | اختيارية |
| --- | --- | --- |
-| `agent_start` | — | `goal` و `parent_id` |
-| `agent_end` | — | `outcome` و `summary` |
-| `agent_pause` | `pause_id` | `reason` و `user_id` |
-| `agent_resume` | `pause_id` | `reason` و `user_id` |
-| `model_request` | — | `model` و `messages` و `system` و `tools` و `request_id` |
-| `model_response` | — | `model` و `stop_reason` و `input_tokens` و `output_tokens` و `content` و `role` و `request_id` و `duration_ms` |
-| `tool_use` | `tool_name` و `tool_call_id` | `input` |
-| `tool_result` | `tool_name` و `tool_call_id` | `output` و `error` |
-| `hook_triggered` | `hook_name` و `hook_id` | `trigger_event` و `input` |
-| `hook_completed` | `hook_name` و `hook_id` | `outcome` و `output` و `error` |
-| `error` | `error_type` و `message` | `traceback` |
-| `human_wait` | `input_id` | `prompt` و `options` و `reason` |
+| `agent_start` | — | `goal`, `parent_id` |
+| `agent_end` | — | `outcome`, `summary` |
+| `agent_pause` | `pause_id` | `reason`, `user_id` |
+| `agent_resume` | `pause_id` | `reason`, `user_id` |
+| `model_request` | — | `model`, `messages`, `system`, `tools`, `request_id` |
+| `model_response` | — | `model`, `stop_reason`, `input_tokens`, `output_tokens`, `content`, `role`, `request_id`, `duration_ms` |
+| `tool_use` | `tool_name`, `tool_call_id` | `input` |
+| `tool_result` | `tool_name`, `tool_call_id` | `output`, `error` |
+| `hook_triggered` | `hook_name`, `hook_id` | `trigger_event`, `input` |
+| `hook_completed` | `hook_name`, `hook_id` | `outcome`, `output`, `error` |
+| `error` | `error_type`, `message` | `traceback` |
+| `human_wait` | `input_id` | `prompt`, `options`, `reason` |
| `human_input` | `input_id` | `response` |
-| `human_pause` | — | `reason` و `user_id` |
-| `human_interrupt` | — | `reason` و `user_id` و `at_step` |
+| `human_pause` | — | `reason`, `user_id` |
+| `human_interrupt` | — | `reason`, `user_id`, `at_step` |
- لتحديد تشغيل كفاشل، يجب أن تكون `outcome` واحدة من `failed` أو `error` أو `timeout` أو `rejected`. أي شيء آخر — بما في ذلك الحالة القريبة الفائتة `"failure"` — يُحسب كنجاح.
+ لوضع علامة على التشغيل كفاشل، يجب أن يكون `outcome` أحد `failed` أو `error` أو `timeout` أو `rejected`. أي شيء آخر — بما في ذلك `"failure"` القريب جداً — يعتبر نجاحاً.
## الاقتران والمدة
-**قاعدة واحدة: أعط حدث الإغلاق نفس المعرّف مثل فاتحه.** هذا ما يقرنهما، وما يسمح للمراقب بتوقيت الفجوة.
+**قاعدة واحدة: أعط حدث الإغلاق نفس معرّف الفاتح.** هذا هو ما يقرنهما، وما يسمح للـ SDK بتوقيت الفجوة.
| الزوج | مطابقة على |
| --- | --- |
@@ -152,48 +158,48 @@ with failproofai_sdk.session():
| `human_wait` → `human_input` | `input_id` |
| `model_request` → `model_response` | `request_id` |
-**لا تمرر `duration_ms` بنفسك.** المراقب يقيسه، وتمريره يرفع `ValueError`.
+**لا تمرر `duration_ms` بنفسك.** الـ SDK يقيسها، ومررها يرفع `ValueError`.
-الاستثناء الوحيد هو `model_response`، حيث أنت فقط تعرف كمون المزود الحقيقي. مرر عدداً صحيحاً من الميلي ثانية — تمرير عدد عشري يرفع، لأن العمود عدد صحيح 32 بت وسيهبط فارغاً وإلا.
+الاستثناء الوحيد هو `model_response`، حيث فقط أنت تعرف زمن انتظار المزود الحقيقي. مرّر عدداً صحيحاً من الملي ثواني — عائم يرفع، لأن العمود عدد صحيح 32 بت وسيهبط فارغاً وإلا.
-
+
-- **المعرّفات لا تحتاج فقط أن تكون فريدة حسب النوع لكل جلسة.** استدعاء أداة وخطاف يمكنهما مشاركة واحد؛ جلستان تعمل مرة واحدة يمكنهما إعادة استخدام نفس المعرّفات بدون تصادم.
-- **لا تقتصر على وكيل.** زوج مفتوح تحت وكيل واحد ومغلق تحت آخر لا يزال يطابق — وهي الحالة الطبيعية في الكود متعدد الوكلاء.
-- **`request_id` اختياري لكن موصى به.** بدونه، أحداث النموذج تقترن بالترتيب الذي تصل به، لذا استدعاءان متزامنان في نفس الوكيل يمكنهما عدم الاقتران بشكل صحيح.
-- **زوج منقسم عبر العمليات** لا يزال يطابق في Cloud، لكن المراقب لا يمكنه توقيت ذلك — لا شيء في أي عملية رأى كلا النصفين.
-- **بحد أقصى 10،000 فاتح ينتظرون إغلاق في وقت واحد.** بعد ذلك الأقدم يُسقط، لذا تسرب لا يمكن أن ينمو بدون حد.
+- **المعرّفات تحتاج فقط أن تكون فريدة لكل نوع، لكل جلسة.** يمكن لاستدعاء أداة وخطاف أن يشاركا واحداً؛ جلستان تعملان في نفس الوقت يمكن أن تعيد استخدام نفس المعرّفات بدون اصطدام.
+- **لم يتم نطاقها لوكيل.** زوج مفتوح تحت وكيل واحد ومغلق تحت آخر لا يزال يطابق — وهي الحالة الطبيعية في كود متعدد الوكلاء.
+- **`request_id` اختياري ولكن موصى به.** بدونه، تقترن أحداث النموذج بترتيب وصولها، لذا يمكن لمكالمتي متزامنة في نفس الوكيل أن تخطئا في الاقتران.
+- **زوج مقسوم عبر العمليات** لا يزال يطابق في Cloud، لكن الـ SDK لا يمكنه توقيته — لم تر أي عملية كلا النصفين.
+- **على الأكثر 10,000 فاتح ينتظر إغلاقاً في نفس الوقت.** بعد ذلك الأقدم يتم حذفه، لذا التسريب لا يمكن أن ينمو بدون حد.
## حقولك الخاصة
-أي كلمة أساسية إضافية تمررها يتم تخزينها مع الحدث:
+أي كلمة مفتاحية إضافية تمررها يتم تخزينها مع الحدث:
```python
failproofai_sdk.event.tool_use(
tool_name="search", tool_call_id="c1",
- fw_tenant="acme", fw_region="eu-west-1", # خاصتك
+ fw_tenant="acme", fw_region="eu-west-1", # حقولك الخاصة
)
```
-فضّل أنواع JSON إذا كنت تريد الاستعلام عنها لاحقاً. أي شيء آخر — UUID أو datetime أو `Decimal` أو set أو bytes أو كائن نموذج — يتم تخزينه كسلسلة.
+فضّل أنواع JSON إذا كنت تريد الاستعلام عنها لاحقاً. أي شيء آخر — UUID أو datetime أو `Decimal` أو مجموعة أو bytes أو كائن نموذج — يتم تخزينه كسلسلة.
- **ضع بادئة لأسماء حقولك.** الإضافات يتم تطبيقها أخيراً، لذا حقل يسمى `model` أو `tool_name` أو `outcome` يستبدل الحقيقي بصمت. محولات الإطار تستخدم `fw_`؛ افعل الشيء نفسه والشيء الوحيد الذي يمكن أن يتصادم.
+ **أضف بادئة لأسماء الحقول الخاصة بك.** يتم تطبيق الإضافات أخيراً، لذا حقل يسمى `model` أو `tool_name` أو `outcome` سيكتب فوق الحقل الحقيقي بصمت. المحولات الإطار تستخدم `fw_`؛ افعل الشيء ذاته ولا شيء يمكن أن يصطدم.
- هذا هو أيضاً السبب في أن حقل اختياري مكتوب بخطأ لا يخطئ أبداً — إنه ببساطة يصبح حقل مخصص جديد. إذا كان حقل قياسي مفقوداً في Cloud، تحقق من الإملاء أولاً.
+ هذا هو أيضاً لماذا حقل اختياري مكتوب بشكل خاطئ لا ينتج خطأ — فقط يصبح حقل مخصص جديد. إذا كان حقل قياسي غائب في Cloud، تحقق من الإملاء أولاً.
-هذه الأسماء الخمسة محجوزة ومرفوضة بشكل مباشر: `timestamp` و `session_id` و `agent_id` و `type` و `environment`.
+هذه خمسة أسماء محجوزة ومرفوضة بشكل مباشر: `timestamp` و `session_id` و `agent_id` و `type` و `environment`.
## التسليم والتحقق
- في **Observe → Events**، تحقق من وجود `agent_start` أولاً و `agent_end` أخيراً. ثم افتح **Observe → Sessions** وأكّد ظهور أحداث النموذج والأداة والبشر والخطاف والخطأ بالترتيب المقصود. استخدم معرّف الجلسة كمفتاح استكشاف الأخطاء الأساسي.
+ في **Observe → Events**، تحقق من وجود `agent_start` أولاً و `agent_end` موجود أخيراً. ثم افتح **Observe → Sessions** وأكد ظهور نموذج وأداة وإنسان وخطاف وأحداث خطأ بالترتيب المقصود. استخدم معرّف الجلسة كمفتاح استكشاف أخطاء أساسي.
-
+
```bash
failproofai flush --wait --timeout 60
failproofai config --status
@@ -203,14 +209,14 @@ failproofai_sdk.event.tool_use(
-إذا كانت Cloud فارغة، افحص `$FAILPROOFAI_HOME/custom-agents/events`، وإلا `~/.failproofai/custom-agents/events`. ملفات JSONL تثبت إصدار المراقب؛ سبول متنام يشير إلى إعدادات المراقب أو التسليم، بينما سبول فارغ يشير إلى القياس أو عمر العملية.
+إذا كانت Cloud فارغة، افحص `$FAILPROOFAI_HOME/custom-agents/events`، وإلا `~/.failproofai/custom-agents/events`. ملفات JSONL تثبت إصدار SDK؛ تشير مخزونة متنامية إلى إعدادات المُراقب أو التسليم، بينما تشير مخزونة فارغة إلى التجهيز أو عمر العملية.
- افحص السبول فقط عندما يكون المراقب متوقفاً. بينما يعمل، يجمع ويحذف كل دفعة في ميلي ثانية، لذا قائمة الدليل تتسابق مع المجمع وتظهر أحداث أقل بكثير مما تم إصدارها.
+ افحص المخزن فقط عند توقف المُراقب. بينما يعمل، يجمع ويحذف كل دفعة خلال ملي ثانية، لذا قائمة الدليل تتنافس مع المجمّع وتظهر أحداثاً أقل بكثير مما تم إصدارها.
-## منع الإخفاقات في وقت تشغيل مخصص
+## منع الأخطاء في وقت تشغيل مخصص
-استخدم النتائج القابلة للتدقيق والآثار المرتبطة لتعريف الإجراء غير الآمن والأدلة المطلوبة والاستجابة المقصودة. يجب أن تعريض تكامل الإنفاذ المخصص الإجراء قبل التنفيذ، وتمرير إدخاله المنظم إلى محرك السياسة، وتطبيق قرار allow أو instruct أو deny الناتج.
+استخدم نتائج التدقيق والأثار المرتبطة لتحديد الإجراء غير الآمن والدليل المطلوب والرد المقصود. يجب أن يكشف التكامل الإنفاذ المخصص الإجراء قبل التنفيذ، ومرّر مدخلاته المنظمة إلى محرك السياسة، وطبّق قرار allow أو instruct أو deny الناتج.
-[اتصل بـ Failproof AI](mailto:support@befailproof.ai) وسنساعدك على ربط نموذج وقت التشغيل الخاص بك وحدود الأداة والدورة الحياتية بخطافات السياسة، ثم التحقق من التكامل معك.
\ No newline at end of file
+[تواصل مع Failproof AI](mailto:support@befailproof.ai) وسيساعدك في ربط نموذج وقت التشغيل المخصص وحدود الأداة والدورة الحياة إلى خطافات السياسة، ثم التحقق من التكامل معك.
\ No newline at end of file
diff --git a/docs/ar/reference/evaluator-sdk.mdx b/docs/ar/reference/evaluator-sdk.mdx
index 6f3eb4f27..14f022306 100644
--- a/docs/ar/reference/evaluator-sdk.mdx
+++ b/docs/ar/reference/evaluator-sdk.mdx
@@ -1,191 +1,118 @@
---
----
title: "Evaluator SDK"
-description: "أنشئ خدمة تقيّم جلسات Failproof AI بشكل متزامن أو غير متزامن."
+description: "شغّل عامل التقييم الخاص بك، لقضاة LLM وأي شيء آخر لا يمكن لـ Python المستضاف القيام به."
icon: "gauge"
---
-يستقبل المقيّم جلسة وكيل مكتملة ويرجع إشارات الجودة التي تهمك: درجات رقمية، وتفسير لكل درجة، وملخص اختياري. يخزّن Failproof AI هذه النتائج بجانب التتبع ويرسمها عبر الوكلاء والبيئات.
-
-## إعداد مقيّم
-
-
-
- ثبّت SDK والخادم المستخدم لتشغيله.
-
- ```bash
- pip install failproofai-sdk uvicorn
- ```
-
-
-
- أنشئ ملف `evaluator.py`. يتحقق هذا المثال مما إذا كانت الجلسة تحتوي على أي استدعاءات أداة فاشلة.
-
- ```python
- import os
- from failproofai.evaluator import Evaluator, EvalResponse
-
- app = Evaluator(token=os.environ.get("EVALUATOR_TOKEN"))
-
- @app.config
- def config():
- return {"inactivity_timeout_secs": 1800}
+يقوم Evaluator SDK بتشغيل التقييمات على بنيتك التحتية الخاصة. يسجّل عاملك التقييمات لديه في Failproof AI، ويستحوذ على الجلسات عند انتهائها، ويسجّلها، ويرسل النتائج، كل ذلك عبر HTTPS الصادرة: لا شيء يتصل بها. استخدمه فيما لا يمكن [لـ Python المستضاف](/ar/evaluations/write) القيام به — قضاة LLM ، استدعاءات النموذج، الحزم، الأسرار، والوصول إلى الشبكة. تظهر نتائجه بجانب النتائج المستضافة على [صفحة التقييمات](/ar/sessions/evaluations)، موسومة بـ **customer**.
- @app.evaluator
- def evaluate(req):
- tool_errors = sum(
- 1 for item in req.events
- if item.event_type == "tool_result" and item.payload.get("error")
- )
- return EvalResponse(
- scores={"tool_reliability": 1.0 if tool_errors == 0 else 0.0},
- reasoning={"tool_reliability": f"{tool_errors} tool errors"},
- )
- ```
-
+يتم شحنه في `failproofai-sdk`، تحت `failproofai_sdk.evaluator`؛ استيراد SDK التتبع لا يحمّله.
-
- عيّن رمزًا مشتركًا، شغّل المقيّم، وتأكد من استجابة نقطة نهاية الصحة.
-
- ```bash
- export EVALUATOR_TOKEN=
- uvicorn evaluator:app --host 0.0.0.0 --port 8080
- ```
-
- في محطة طرفية أخرى:
-
- ```bash
- curl http://127.0.0.1:8080/health
- ```
-
-
-
-## ربط المقيّم بـ Failproof AI
+```bash
+pip install failproofai-sdk
+```
-1. انشر المقيّم على عنوان URL بروتوكول HTTPS يمكن الوصول إليه بواسطة Failproof AI Cloud.
-2. كوّن `EVALUATOR_ENDPOINT` باستخدام هذا العنوان وعيّن `EVALUATOR_TOKEN` للرمز نفسه الذي يستخدمه المقيّم. بالنسبة للسحابة المُدارة، اتصل بـ [support@befailproof.ai](mailto:support@befailproof.ai) لتكوين الاتصال.
-3. شغّل عملية تقييم وتأكد من ظهور درجاتها في Failproof AI.
+## اكتب التقييمات
-
-
- افتح جلسة مكتملة ضمن **Observe → Sessions** وحدّد **Run evaluation** إذا لم يتم تقييمها تلقائيًا. راجع الحالة والدرجات والتفسير والملخص في لوحة **Evaluation** الخاصة بالجلسة.
+```python
+from failproofai_sdk.evaluator import ConditionResult, EvalResult, Evaluator, Metric, Score
+
+app = Evaluator(name="customer-production", version="2026.08.1")
+
+
+@app.eval(
+ "tool_efficiency",
+ version="1.0.0",
+ labels=["tools", "deterministic"],
+ when=lambda session: ConditionResult(session.count("tool_use") > 0, "no_tool_calls"),
+)
+def tool_efficiency(session):
+ calls = session.events_of_type("tool_use")
+ distinct = {e.payload.get("tool_name") for e in calls if e.payload.get("tool_name")}
+ value = len(distinct) / len(calls)
+ return EvalResult(
+ score=Score(value, passed=value >= 0.7),
+ metrics={"tool_call_count": Metric(len(calls), unit="events")},
+ reasoning=f"{len(distinct)} distinct tools across {len(calls)} calls",
+ )
- استخدم **Observe → Evaluations** لمقارنة الدرجات عبر الوكلاء أو البيئات. استخدم **Observe → Metrics** لقياسات الكمون والتكلفة والرمز وغيرها من المقاييس الرقمية.
- ابدأ بجلسة واحدة للتأكد من أن المقيّم أرجع مفاتيح الدرجات المتوقعة وتفسيرًا مفيدًا لهذا التشغيل المحدد.
+@app.eval(
+ "answer_relevance",
+ version="judge-v1",
+ labels=["llm_judge", "relevance"],
+ when=lambda session: ConditionResult(
+ session.count("human_input") > 0 and session.count("model_response") > 0,
+ "no_exchange",
+ ),
+ timeout_seconds=30,
+)
+async def answer_relevance(session):
+ question = session.events_of_type("human_input")[-1].payload.get("response")
+ answer = session.events_of_type("model_response")[-1].payload.get("content")
+ value, reasoning = await ask_judge(question, answer) # your LLM call: a 0-1 score and why
+ return EvalResult(score=Score(value, passed=value >= 0.7), reasoning=reasoning)
+
+
+if __name__ == "__main__":
+ app.run_from_env()
+```
- 
+- `@app.eval(key, version=...)` يسجّل تقييماً. المفتاح هو ما تتخطط نتائجه تحته؛ غيّر الإصدار كلما تغيرت المنطق، وكل نتيجة تحتفظ بالإصدار الذي أنتجها. عامل واحد يحمل ما يصل إلى 100 تقييم.
+- `result_kind` هو `"score"` ما لم تقل خلاف ذلك. للتقييم `"metric"` أو `"assertion"`، سمّ إدخال `metrics` أو `assertions` واحد باسم المفتاح: هذا الإدخال هو نتيجته.
+- `when` يقرر ما إذا كانت جلسة قابلة للتطبيق. أرجع `ConditionResult(False, "")` لتخطي واحدة، والسبب يتم تسجيله.
+- يمكن أن يكون التقييم دالة عادية أو `async`، و `timeout_seconds` يحدده.
+- مفاتيح الحمل الجديد — `tool_name` و `response` و `content` أعلاه — هي ما ترسله وكلاؤك، لذا اقرأها من جلسة حقيقية.
- عندما تبدو النتائج الفردية صحيحة، استخدم لوحة تحكم التقييم لمقارنة تلك الدرجات عبر الزمن وعبر الوكلاء أو البيئات.
+## شغّل العامل
- 
+ضع مفتاحاً بإذن `evaluations:run`، تم إنشاؤه تحت **Administration → Keys**، في `FAILPROOFAI_EVALUATOR_TOKEN` — اضبطه من متجر الأسرار بدلاً من كتابته في أمر — وابدأ العامل:
- يجب أن تستخدم الرسم البياني الصحي أسماء درجات مستقرة؛ تغيير مفتاح ينشئ سلسلة منفصلة.
-
-
- ```bash
- fp evals --since 1h --score tool_reliability:0..1
- fp evals --since 24h --aggregate
- ```
-
-
+```bash
+FAILPROOFAI_EVALUATOR_URL=https://app.befailproof.ai python evaluator.py
+```
-بالنسبة لنسخة السحابة المُستضافة ذاتيًا، يتم تعطيل التقييم التلقائي حتى يتم تعيين `EVALUATOR_ENDPOINT` على عملية الخادم. أعد تشغيل الخادم بعد تغيير متغيرات بيئة المقيّم.
+بدون كتلة `__main__`، `python -m failproofai_sdk.evaluator evaluator:app` يفعل الشيء نفسه.
-تعرّض الخدمة `GET /health` و`GET /config` و`POST /evaluate` وبشكل اختياري `GET /evaluate/{job_id}`. أرجع `JobPending` للعمل غير المتزامن وسجّل `@app.job_lookup` لكي يتمكن Failproof AI من الاستقصاء عنه.
+| المتغير | الافتراضي | الغرض |
+| --- | --- | --- |
+| `FAILPROOFAI_EVALUATOR_URL` | مطلوب | حيث يوجد Failproof AI: `https://app.befailproof.ai` للسحابة. HTTPS ما لم يشير إلى loopback |
+| `FAILPROOFAI_EVALUATOR_TOKEN` | مطلوب | مفتاح بـ `evaluations:run` |
+| `FAILPROOFAI_EVALUATOR_WORKER_ID` | `-` | يسمّي هذا العامل |
+| `FAILPROOFAI_EVALUATOR_CONCURRENCY` | `1` | الجلسات التي يسجّلها هذا العامل في وقت واحد |
+| `FAILPROOFAI_EVALUATOR_REQUEST_TIMEOUT_SECONDS` | `30` | المهلة الزمنية لكل طلب إلى Failproof AI |
+| `FAILPROOFAI_EVALUATOR_DRAIN_TIMEOUT_SECONDS` | `60` | المدة التي ينتظرها العامل المتوقف عن التشغيل للتشغيل قيد الطيران |
+| `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` | `false` | السماح بـ HTTP عادي لعنوان URL ليس loopback — انظر التحذير أدناه |
+| `FAILPROOFAI_EVALUATOR_MODULE` | لا شيء | `module:attribute` لـ `python -m failproofai_sdk.evaluator` |
-عند تكوين رمز، جميع المسارات ما عدا الصحة تتطلب الرمز المشفر نفسه الذي يرسله Failproof AI باعتباره `EVALUATOR_TOKEN`.
+
+ `FAILPROOFAI_EVALUATOR_ALLOW_INSECURE_HTTP` يرسل كل شيء بنص واضح. يحمل العامل `FAILPROOFAI_EVALUATOR_TOKEN` كرأس `Authorization: Bearer` في كل طلب، والنسخ المرسلة التي يجلبها هي الجلسات نفسها — لذا يقرأ أي شخص على المسار كلاهما، والمفتاح الذي يقرؤونه يشغّل التقييمات حتى تقوم بتدويره. استخدمه فقط على شبكة تطوير معزولة. في كل مكان آخر، يجب أن يكون العنوان HTTPS؛ loopback لا يحتاج إلى أي علم.
+
-## أنواع SDK
+## أنواع النتائج
| النوع | الحقول |
| --- | --- |
-| `AgentEvent` | `id`, `ts`, `event_type`, `payload` |
-| `EvalRequest` | `schema_version`, `session_id`, `agent_id`, `environment`, `started_at`, `ended_at`, `events` |
-| `EvalResponse` | `scores`, `reasoning`, `summary` |
-| `JobPending` | `job_id`, `next_poll_secs` |
-| `EvaluatorConfig` | `inactivity_timeout_secs`, `default_poll_interval_secs` |
-
-## المزخرفات والمسارات
+| `Score` | `value` (0 إلى 1)، `passed`، `unit` (الافتراضي `ratio`)، `display_value`، `description` |
+| `Metric` | `value`، `unit`، `display_value`، `description` |
+| `Assertion` | `passed`، `description` |
+| `EvalResult` | `score`، `metrics`، `assertions`، `reasoning`، `summary`، `labels` |
+| `ConditionResult` | `applicable`، `reason_code` |
-| المزخرف | المسار | مطلوب |
-| --- | --- | --- |
-| `@app.evaluator` | `POST /evaluate` | نعم |
-| `@app.job_lookup` | `GET /evaluate/{job_id}` | عند إرجاع `JobPending` |
-| `@app.config` | `GET /config` | لا |
-
-يحدّ SDK أجسام طلبات التقييم بـ 25 ميجابايت. يتم تجاهل حقول الطلب غير المعروفة بحيث تبقى الخدمات متوافقة عند نمو عقد الحدث.
+يحمل `EvalResult` على الأقل درجة واحدة أو متري أو تأكيد، وبحد أقصى 25، كل واحد تحت مفتاح فريد.
-## إرجاع العمل غير المتزامن
+## الجلسة
-استخدم `JobPending` عندما لا يمكن إنهاء التقييم داخل طلب واحد. معرّف الوظيفة معتم لـ Failproof AI ويجب أن يبقى قابلًا للحل بواسطة خدمتك حتى يتم جمع النتيجة أو انتهاء انتظار الخادم.
-
-```python
-from failproofai.evaluator import EvalRequest, EvalResponse, Evaluator, JobPending
-
-app = Evaluator(token="shared-secret")
-
-@app.evaluator
-def start(req: EvalRequest) -> JobPending:
- job_id = enqueue(req)
- return JobPending(job_id=job_id, next_poll_secs=30)
-
-@app.job_lookup
-def lookup(job_id: str):
- result = get_result(job_id)
- if result is None:
- return JobPending(job_id=job_id, next_poll_secs=30)
- return EvalResponse(
- scores=result.scores,
- reasoning=result.reasoning,
- summary=result.summary,
- )
-```
+| الحقل أو الطريقة | يعطيك |
+| --- | --- |
+| `session_id` و `agent_id` و `environment` | هوية الجلسة |
+| `started_at` و `ended_at` | متى بدأت وانتهت |
+| `event_count` و `events` | النسخة المرسلة الكاملة والمرتبة |
+| `count(event_type)` | عدد الأحداث من ذلك النوع التي تحتويها |
+| `events_of_type(event_type)` | تلك الأحداث، بالترتيب |
-يتم اختيار وتيرة الاستقصاء بهذا الترتيب: `JobPending.next_poll_secs` و`EvaluatorConfig.default_poll_interval_secs` ثم `EVALUATOR_POLLING_INTERVAL_SECS` الخاص بالخادم. يتم كبح القيم بين ثانية واحدة وساعة واحدة. الحد الأقصى الافتراضي لساعة الحائط للخادم هو ساعة واحدة.
+يحمل كل حدث `id` و `ts` و `event_type` و `payload`.
-## حقول الطلب والاستجابة
+## مقيّم الإرث
-| الحقل | النوع | ملاحظات |
-| --- | --- | --- |
-| `EvalRequest.schema_version` | `str` | حاليًا `"1"`. |
-| `session_id`, `agent_id`, `environment` | `str` | هوية الجلسة والبيئة. |
-| `started_at` | `datetime` | طابع زمني للحدث الأول. |
-| `ended_at` | `datetime \| None` | موجود عند بث الجلسة حدث نهاية. |
-| `events` | `list[AgentEvent]` | تدفق الحدث المكتمل والمرتب. |
-| `AgentEvent.id` | `int` | معرّف صف حدث النظام الخلفي. |
-| `AgentEvent.ts` | `datetime` | طابع زمني للحدث. |
-| `AgentEvent.event_type` | `str` | عائلة الحدث مثل `tool_use`. |
-| `AgentEvent.payload` | `dict[str, Any]` | حمولة الحدث الكاملة. |
-| `EvalResponse.scores` | `dict[str, float] \| None` | الأبعاد الرقمية المرسومة في التقييمات. |
-| `EvalResponse.reasoning` | `dict[str, str] \| None` | تفسيرات لكل درجة؛ يجب أن تعكس المفاتيح `scores`. |
-| `EvalResponse.summary` | `str \| None` | السرد التقييمي الشامل. |
-
-## إعدادات مشغّل الخادم
-
-التقييم التلقائي يشمل الانتشار كله ويبقى معطلًا عند غياب `EVALUATOR_ENDPOINT`.
-
-| المتغير | الافتراضي | الغرض |
-| --- | --- | --- |
-| `EVALUATOR_ENDPOINT` | غير معيّن | عنوان URL الأساسي لخدمة المقيّم. |
-| `EVALUATOR_TOKEN` | غير معيّن | الرمز المشفر المشترك مع `Evaluator(token=...)`. |
-| `EVALUATOR_WORKERS` | `2` | عمال المُرسل المتزامنون. |
-| `EVALUATOR_CLAIM_BATCH` | `4` | الجلسات المطالب بها لكل تمرير مُرسل. |
-| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | وتيرة الاستقصاء غير المتزامن الاحتياطية. |
-| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | انتظار الطلب لكل مقيّم. |
-| `EVALUATOR_MAX_ATTEMPTS` | `5` | محاولات التسليم قبل الفشل النهائي. |
-| `EVALUATOR_CONFIG_REFRESH_SECS` | `300` | وتيرة التحديث لـ `/config`. |
-| `EVALUATOR_MAX_POLL_DURATION_SECS` | `3600` | الحد الأقصى لوقت ساعة الحائط للاستقصاء غير المتزامن. |
-
-يمكن للخادم أيضًا تقييد المؤسسات التي تستخدم المقيّم العام لنشر شامل. تعامل مع تغييرات نقطة النهاية والرمز والمحاولة والبوابة التنظيمية كتكوين مشغّل وأعد تشغيل أو نشر الخادم بعد تغييرها.
-
-## الأمان والعمليات
-
-- ضع المقيّم خلف HTTPS عندما تعبر حركة المرور حدود الشبكة الموثوقة.
-- كوّن رمزًا مشفرًا غير فارغ واحفظه متطابقًا على كلا الخدمتين.
-- لا تسجّل الرمز أو المحفوظات الحساسة الكاملة من حمولات الطلبات.
-- اجعل معالجات المتزامن قابلة للإدراك؛ قد تكرر المحاولات مرة أخرى الطلب.
-- احفظ حالة الوظيفة غير المتزامنة خارج ذاكرة العملية في الإنتاج.
-- أرجع مفاتيح درجات مستقرة. إعادة تسمية مفتاح تنشئ سلسلة رسم بياني جديدة بدلاً من تغيير القديم.
-
-ينبعث SDK من السجلات البنيوية لدورة الحياة مثل `eval received` و`eval responded` و`job lookup` و`config returned` و`auth rejected` واستثناءات المعالج. لا يكوّن معالجات السجلات؛ استخدم تكوين السجلات لتطبيق المضيف.
\ No newline at end of file
+يتم إيقاف Evaluator SDK السابق — خدمة HTTP استدعاها Failproof AI على `EVALUATOR_ENDPOINT`، والإجابة على `/evaluate` والتحقيق من خلال `JobPending` —. قم ببناء مقيّمين جدد على هذا العامل؛ يمكن لمشغلي مثيل ذاتي الاستضافة الذي يقوم بتشغيل خدمة قديمة أن يحتفظوا بها خلال الانتقال.
\ No newline at end of file
diff --git a/docs/ar/reference/failproof-cli.mdx b/docs/ar/reference/failproof-cli.mdx
index 0344448d9..2de3a9926 100644
--- a/docs/ar/reference/failproof-cli.mdx
+++ b/docs/ar/reference/failproof-cli.mdx
@@ -1,87 +1,104 @@
---
----
-title: "واجهة أوامر Failproof AI"
-description: "ثبّت الخطافات، أدِر السياسات المحلية، اتصل بالسحابة، وشغّل مراقب الخادم المحلي."
+title: "Failproof AI CLI"
+description: "تثبيت الخطافات، وإدارة السياسات المحلية، والاتصال بـ Cloud، وتشغيل مستند الخدمة المحلي."
icon: "terminal"
---
-ثبّت واجهة الأوامر المحلية باستخدام `npm install -g failproofai`. شغّلها بدون معاملات لفتح لوحة تحكم السياسات المحلية.
+ثبّت واجهة سطر الأوامر المحلية باستخدام `npm install -g failproofai`. قم بتشغيلها بدون معاملات لفتح لوحة معلومات السياسة المحلية.
-تتطلب الحزمة Node.js 20.9 أو إصدار أحدث. يدعم Bun 1.3 أو إصدار أحدث للتطوير وتثبيتات المصدر. `failproofai configure` و`failproofai setup` هما أسماء مستعارة لـ `failproofai config`؛ `failproofai p` اسم مستعار لـ `failproofai policies`.
+تتطلب الحزمة Node.js 20.9 أو أحدث. يتم دعم Bun 1.3 أو أحدث للتطوير والتثبيتات من المصدر. `failproofai configure` و `failproofai setup` هما اسمان مستعاران لـ `failproofai config`. `failproofai policy` و `failproofai pack` و `failproofai p` هي جميعاً تهجئات لـ `failproofai policies` — كانت الحزم والسياسات الفردية ثلاث أوامر لفكرة واحدة وهي الآن واحدة. التهجئات الأقدم لا تزال تعمل، مع استثناءين: `pack list ` أصبحت الآن `policies show `، و `pack build` أصبحت الآن `publish`.
## إعداد جهاز
+ثبّت واجهة سطر الأوامر، ثم اقرأ مفتاح الجهاز في قذيفة النظام. `read -s` يأخذها عند مطالبة لا تصدر صدى، لذا لا تظهر أبداً في أمر:
+
```bash
npm install -g failproofai
-failproofai config \
- --connect https://app.befailproof.ai \
- --token \
- --machine-label checkout-prod-01
-failproofai policies --install
+read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN
+```
+
+ثم أعد إعداد الجهاز واختر ما يفرضه:
+
+```bash
+failproofai config
+failproofai policies add FailproofAI/policies
failproofai config --status
```
-شغّل `failproofai` بدون معاملات لفتح لوحة تحكم السياسات المحلية.
+`failproofai config` هو كل الإعداد: يثبّت خدمة `failproofaid` (الجذر مرة واحدة، عبر `sudo -n` — لا يوجد أبداً مطالبة كلمة مرور تفاعلية)، ويربط الخطافات في كل واجهة سطر أوامر وكيل يجدها، ويتصل بـ Cloud عند توفر مفتاح. بدون terminal — CI، حاوية، وكيل يقودها — يطبق بدلاً من السؤال، ويخرج 1 إذا لم يحدث أي شيء طُلب منه القيام به.
+
+لا يختار أي سياسات. هذه هي وظيفة الأمر الثاني، وبدونها لا يفرض جهاز تم تكوينه حديثاً سوى الحارس الذي يعمل دائماً.
+
+فضّل متغير البيئة على `--token`: معامل سطر أوامر قابل للقراءة من `ps` بواسطة كل مستخدم على الصندوق. هذا كل ما يحميه المتغير — مفتاح يُكتب في أي أمر، بما في ذلك `export`، لا يزال ينتهي به الحال في سجل shell، ولهذا السبب يتم قراءته باستخدام `read -s` أعلاه. في CI، اضبطه من مخزن السرية واحتفظ بتتبع shell (`set -x`) مُيقِّفاً، أو سيطبع التتبع المفتاح.
+
+
+ `--connect ` يسجل جهاز **تم إعداده بالفعل**. يعود بمجرد نجاح التسجيل — لا يثبّت مستند الخدمة ولا يربط أي خطافات. استخدم `failproofai config` البسيط (أو `failproofai config --token `) على جهاز لم يتم إعداده بعد، أو سيبدو كمتصل أثناء جمع وعدم فرض أي شيء.
+
+
+قم بتشغيل `failproofai` بدون معاملات لفتح لوحة معلومات السياسة المحلية.
| الأمر | النتيجة |
| --- | --- |
-| `failproofai config` | شغّل إعداد الجهاز بشكل تفاعلي |
-| `failproofai config --connect --token ` | اتصل بسحابة الاستقبال وتسليم السياسات |
-| `failproofai config --status` | أظهر حالة الاتصال والمراقب والتسليم والإيقاف المؤقت |
-| `failproofai policies` | اسرد السياسات المدمجة والمخصصة والاتفاقية والحزمة والمُدارة من السحابة |
-| `failproofai policies --install` | ثبّت الخطافات وفعّل السياسات |
-| `failproofai policy add ` | فعّل سياسة واحدة — مدمجة أو `:` من حزمة مثبّتة |
-| `failproofai policy remove ` | عطّل سياسة واحدة، نفس الأسماء |
-| `failproofai policies --uninstall` | عطّل السياسات أو أزل خطافات الأجهزة |
-| `failproofai pack list` | اسرد حزم السياسات المثبّتة وكل سياسة تحملها |
-| `failproofai pack add ` | ثبّت حزمة سياسات من إصدار GitHub؛ عدم وجود وسم يأخذ الأحدث ويثبّته |
-| `failproofai pack add --bundled` | ثبّت السياسات المدمجة كحزمة، من هذه الحزمة، بدون شبكة |
-| `failproofai pack build ` | أنشئ الأصول الثلاثة للإصدار لحزمة خاصة بك |
-| `failproofai pack remove ` | عطّل حزمة مثبّتة |
-| `failproofai audit` | امسح السجل المحلي للوكيل وافتح طريقة العرض المحلية للتدقيق |
-| `failproofai audit --schedule [days] --email ` | جدولة عمليات الفحص المحلية المتكررة وأرسل النتائج بالبريد الإلكتروني |
-| `failproofai audit --status` | أظهر عنوان التقرير والفاصل الزمني والفحص المجدول التالي |
-| `failproofai audit --no-schedule` | أوقف الفحوصات المتكررة دون حذف سجل التدقيق |
-| `failproofai harness list` | اسرد مسارات الالتقاط الإضافية |
-| `failproofai flush --wait` | اسلم ملف الأحداث الحالي |
-| `failproofai backfill --since 30d` | أعد قراءة السجل المُمرر مسبقاً |
-| `failproofai config --pause [duration]` | أوقف جلسة محلية واحدة مؤقتاً لمدة 30 دقيقة بشكل افتراضي، حتى 8 ساعات |
-| `failproofai config --resume` | استئنف جلسة محلية موقوفة مؤقتاً؛ أضف `--all` لمسح جميع الإيقافات المؤقتة |
-| `failproofai update` | أنهِ ترحيلات الحزمة وحدّث المراقب |
-| `failproofai migrate --dry-run` | معاينة أو تشغيل ترحيلات تخطيط الصفحة الرئيسية المعلقة |
-| `failproofai uninstall` | أزل الخطافات والمراقب قبل إزالة الحزمة |
-| `failproofai --version` | اطبع إصدار الحزمة المثبّتة |
-| `failproofai --help` | أظهر الأوامر والاستخدام العام |
-
-## أعلام الإعدادات
+| `failproofai config` | إعداد الجهاز: الوكلاء، مستند الخدمة، وCloud عند وجود مفتاح |
+| `failproofai config --token ` | الإعداد والاتصال في مرة واحدة، بدون السؤال عن أي شيء |
+| `failproofai config --connect ` | تسجيل جهاز **تم إعداده بالفعل** — بدون مستند خدمة، بدون خطافات |
+| `failproofai config --status` | عرض حالة الاتصال، مستند الخدمة، الإيصال، والتعليق |
+| `failproofai policies` | قائمة السياسات المدمجة، المخصصة، الاتفاقية، الحزمة، والمدارة بواسطة Cloud |
+| `failproofai policies --install` | ربط الخطافات في واجهات سطر أوامر الوكيل. لا يفعّل أي سياسة بمفردها |
+| `failproofai policies add ` | تفعيل سياسة واحدة — مدمجة، أو `:` من حزمة مثبتة |
+| `failproofai policies remove ` | تعطيل سياسة واحدة، نفس التسمية |
+| `failproofai policies --uninstall` | تعطيل السياسات أو إزالة خطافات الهيكل |
+| `failproofai policies show /` | ما تحمله حزمة، المقروءة من بيانات التعريف الخاصة بها، قبل أخذها |
+| `failproofai policies show / --releases` | كل إصدار نُشر، وأيها موجود هنا |
+| `failproofai policies add ` | تثبيت حزمة سياسة من إصدار GitHub؛ بدون علامة تأخذ الأحدث وتثبتها |
+| `failproofai publish` | شحن سياساتك الخاصة كحزمة؛ `--init` يكتب واحدة للبدء منها |
+| `failproofai policies remove ` | إلغاء تثبيت حزمة |
+| `failproofai audit` | مسح سجل الوكيل المحلي وفتح عرض التدقيق المحلي |
+| `failproofai audit --schedule [days] --email ` | جدولة الفحوصات المحلية المتكررة وإرسال نتائجها عبر البريد الإلكتروني |
+| `failproofai audit --status` | عرض عنوان التقرير والفاصل الزمني والفحص المجدول التالي |
+| `failproofai audit --no-schedule` | إيقاف الفحوصات المتكررة بدون حذف سجل التدقيق |
+| `failproofai harness list` | قائمة مسارات الالتقاط الإضافية |
+| `failproofai flush --wait` | تسليم ملف الحدث الحالي |
+| `failproofai backfill --since 30d` | إعادة قراءة السجل الذي تم تمريره مسبقاً |
+| `failproofai config --pause [duration]` | إيقاف جلسة محلية واحدة لمدة 30 دقيقة افتراضياً، حتى 8 ساعات |
+| `failproofai config --resume` | استئناف جلسة محلية مُعلقة واحدة؛ أضف `--all` لمسح جميع الإيقافات |
+| `failproofai update` | إنهاء عمليات ترحيل الحزم وتحديث مستند الخدمة |
+| `failproofai migrate --dry-run` | معاينة أو تشغيل عمليات ترحيل التخطيط المنزلي المعلقة |
+| `failproofai uninstall` | إزالة الخطافات ومستند الخدمة قبل إزالة الحزمة |
+| `failproofai --version` | طباعة إصدار الحزمة المثبتة |
+| `failproofai --help` | عرض الأوامر والاستخدام العام |
+
+## أعلام التكوين
| العلم | الاستخدام |
| --- | --- |
-| `--connect --token ` | اتصل بشكل غير تفاعلي |
-| `--machine-id ` | عيّن معرّف الجهاز الثابت |
-| `--machine-label ` | عيّن أو غيّر تسمية لوحة التحكم |
-| `--no-transcripts` | أرسل القرارات بدون محتوى النسخة |
-| `--disconnect` | أوقف سحب سياسة السحابة وتسليم الأحداث |
-| `--status` | أظهر حالة الجهاز الحالية |
-| `--pause [duration]` | أوقف أحدث جلسة في الدليل الحالي مؤقتاً؛ يقبل الثواني أو الدقائق أو الساعات ويستخدم 30 دقيقة بشكل افتراضي |
-| `--resume` | أنهِ إيقاف مطابق مبكراً |
-| `--session ` | استهدِف جلسة صريحة للإيقاف المؤقت أو الاستئناف |
+| `--token ` | الإعداد والاتصال بدون تفاعل؛ اقرأ أيضاً من `FAILPROOFAI_CLOUD_TOKEN` |
+| `--url ` | الاتصال بمكان آخر غير `app.befailproof.ai`؛ اقرأ أيضاً من `FAILPROOFAI_CLOUD_URL` |
+| `--connect ` | التسجيل فقط، على جهاز تم إعداده بالفعل. يتجاوز مستند الخدمة وكل خطاف |
+| `--machine-id ` | ضبط معرّف الجهاز المستقر |
+| `--machine-label ` | إعادة تسمية جهاز **مرتبط بالفعل**. بمفردها لا تشغّل أبداً الإعداد، لذا أضفها بعد `failproofai config`، وليس أثناء |
+| `--no-transcripts` | إرسال القرارات بدون محتوى النصوص |
+| `--disconnect` | إيقاف سحب سياسات Cloud وإيصال الأحداث |
+| `--status` | عرض حالة الجهاز الحالية |
+| `--pause [duration]` | إيقاف أحدث جلسة في الدليل الحالي؛ يقبل ثواني أو دقائق أو ساعات ويتعطل إلى 30 دقيقة |
+| `--resume` | إنهاء الإيقاف المطابق مبكراً |
+| `--session ` | استهدف جلسة صريحة للإيقاف أو الاستئناف |
| `--all` | مع `--resume`، أنهِ كل إيقاف نشط |
-تعليق الجلسات المحلية يوقف السياسات المدمجة والمخصصة والاتفاقية والحزمة لجلسة واحدة. تنتهي دائماً ولا تعطّل السياسات المُدارة من السحابة. `block-failproofai-commands` — والتي تكون مفعّلة دائماً ولا يمكن تعطيلها أو إيقافها مؤقتاً بنفسها — تمنع وكيلاً مزوداً بأجهزة استشعار من استخدام هذا الثغرة بنفسها.
+تعليقات الإيقاف المحلية تعلق السياسات المدمجة والمخصصة والاتفاقية والحزمة لجلسة واحدة. تنتهي دائماً ولا تعطّل سياسات Cloud المدارة. `block-failproofai-commands` — التي تكون قيد التشغيل دائماً ولا يمكن تعطيلها أو إيقافها بمفردها — تمنع وكيل معدّ من استخدام هذه الفتحة الخلفية بنفسه.
-## أعلام السياسات
+## أعلام السياسة
| العلم | الاستخدام |
| --- | --- |
-| `--install`, `-i` | فعّل السياسات وثبّت خطافات الأجهزة |
-| `--uninstall`, `-u` | عطّل السياسات أو أزل الخطافات |
-| `--cli ` | استهدِف جهاز أو أكثر من الأجهزة المدعومة |
-| `--scope user\|project\|local\|all` | اختر نطاق الإعدادات؛ `all` للإلغاء |
-| `--beta` | اشمل سياسات تجريبية |
-| `--custom`, `-c ` | تحقق وحمّل ملف سياسة مخصص؛ قابل للتكرار |
+| `--install`, `-i` | تثبيت خطافات الهيكل. الأسماء بعده تفعّل تلك السياسات؛ بدونها، لا تغييرات السياسة |
+| `--uninstall`, `-u` | تعطيل السياسات أو إزالة الخطافات |
+| `--cli ` | استهدف هيكل واحد أو أكثر مدعوم |
+| `--scope user\|project\|local\|all` | اختر نطاق التكوين؛ `all` للإلغاء |
+| `--beta` | تضمين السياسات التجريبية |
+| `--custom`, `-c ` | التحقق من صحة وتحميل ملف سياسة مخصص؛ قابل للتكرار |
-## أعلام التسليم والصيانة
+## أعلام الإيصال والصيانة
| الأمر | الأعلام |
| --- | --- |
@@ -91,9 +108,9 @@ failproofai config --status
| `migrate` | `--dry-run` |
| `uninstall` | `--purge`, `--dry-run`, `--yes` |
-يجب تشغيل `failproofai update` بعد `npm install -g failproofai@latest`؛ تقوم بإجراء ترحيلات تخطيط الصفحة الرئيسية وتثبيت ثنائي المراقب المطابق وإعادة تشغيل الخدمة. `--no-daemon` ينفذ فقط ترحيل التخطيط.
+يجب تشغيل `failproofai update` بعد `npm install -g failproofai@latest`؛ يُجري ترحيلات التخطيط المنزلي، وينصّب الثنائي مستند الخدمة المطابق، ويعيد تشغيل الخدمة. `--no-daemon` يؤدي فقط ترحيل التخطيط.
-## مسارات الأجهزة
+## مسارات الهيكل
```text
failproofai harness list [harness]
@@ -101,11 +118,11 @@ failproofai harness add-path [label=]
failproofai harness remove-path
```
-أسماء الأجهزة المدعومة هي `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity`, و`goose`.
+أسماء الهيكل المدعومة هي `claude`، `codex`، `copilot`، `cursor`، `opencode`، `pi`، `hermes`، `openclaw`، `factory`، `devin`، `antigravity`، و `goose`.
-تضع التسميات مساحة أسماء معرّفات الوكيل المشتقة عند احتواء جذرين على نسخ من نفس المشروع. يتم رفض الجذور المتداخلة والتسميات المكررة لمنع الجمع المكرر أو فساد المؤشر. إعادة تحميل إعدادات المسارات الإضافية بدون إعادة تشغيل المراقب.
+معاملات مساحات أسماء معرّفات الوكيل المشتقة عندما يحتوي جذران على نسخ من نفس المشروع. يتم رفض الجذور المتداخلة والتسميات المكررة لمنع الجمع المكرر أو تلف المؤشر. إعادة تحميل تكوين المسار الإضافي بدون إعادة تشغيل مستند الخدمة.
-يمكن لبيئات الحاويات استبدال المسارات الإضافية المكونة بملف بمتغير مفصول بفواصل يُسمى `FAILPROOFAI__EXTRA_PATHS`، على سبيل المثال:
+يمكن لبيئات الحاويات استبدال المسارات الإضافية المكوّنة بملف بمتغير فاصل بفواصل يُسمى `FAILPROOFAI__EXTRA_PATHS`، على سبيل المثال:
```bash
export FAILPROOFAI_OPENCLAW_EXTRA_PATHS="user1=/srv/openclaw-a,user2=/srv/openclaw-b"
@@ -113,26 +130,28 @@ export FAILPROOFAI_OPENCLAW_EXTRA_PATHS="user1=/srv/openclaw-a,user2=/srv/opencl
## متغيرات البيئة
-استخدم ملفات الإعدادات للسلوك الدائم للجهاز. متغيرات البيئة مفيدة للغاية للحاويات والاختبارات والعملية الواحدة.
+استخدم ملفات التكوين لسلوك الجهاز المستمر. متغيرات البيئة مفيدة بشكل أساسي للحاويات والاختبارات والعملية الواحدة.
| المتغير | الاستخدام |
| --- | --- |
-| `FAILPROOFAI_HOME` | إعادة تحديد موقع تخطيط `~/.failproofai` الكامل |
-| `FAILPROOFAI_LOG_LEVEL` | عيّن مستوى تفاصيل السجل المحلي |
-| `FAILPROOFAI_HOOK_LOG_FILE` | اكتب تشخيصات الخطافات إلى ملف محدد |
-| `FAILPROOFAI_TELEMETRY_DISABLED=1` | عطّل قياس الاستخدام المجهول لهذه العملية |
-| `FAILPROOFAI_NO_FIRST_RUN=1` | تخطّ إعداد التشغيل الأول التفاعلي |
-| `FAILPROOFAI_NO_AUTO_AUDIT=1` | تخطّ التدقيق المحلي بعد الإعداد |
-| `FAILPROOFAI_LLM_BASE_URL` | جاوز نقطة نهاية متوافقة مع OpenAI يستخدمها سياسات LLM |
-| `FAILPROOFAI_LLM_API_KEY` | وفّر مفتاح API الذي تستخدمه سياسات LLM |
-| `FAILPROOFAI_LLM_MODEL` | اختر النموذج الذي تستخدمه سياسات LLM |
-| `FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS` | حدّد تحميل وحدة السياسة المخصصة |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | رفض جلب الحزم والملفات الثنائية للمراقب؛ ما هو مثبّت يستمر في الإنفاذ |
+| `FAILPROOFAI_CLOUD_TOKEN` | مفتاح Cloud، بدلاً من `--token`. فضّل هذا: معامل قابل للقراءة من `ps` بواسطة كل مستخدم. اضبطه باستخدام `read -s` أو من مخزن سرية CI، لا بطريقة كتابة المفتاح في أمر، الذي ينتهي به الحال في سجل shell في كلا الحالتين |
+| `FAILPROOFAI_CLOUD_URL` | عنوان URL لـ Cloud، بدلاً من `--url`. نفس المتغير الذي يقرأه مستند الخدمة |
+| `FAILPROOFAI_HOME` | نقل التخطيط `~/.failproofai` الكامل |
+| `FAILPROOFAI_LOG_LEVEL` | ضبط حجم السجل المحلي |
+| `FAILPROOFAI_HOOK_LOG_FILE` | كتابة تشخيصات الخطاف إلى ملف محدد |
+| `FAILPROOFAI_TELEMETRY_DISABLED=1` | تعطيل القياس عن بُعد المجهول لهذه العملية |
+| `FAILPROOFAI_NO_FIRST_RUN=1` | تخطي إعداد التشغيل الأول التفاعلي |
+| `FAILPROOFAI_NO_AUTO_AUDIT=1` | تخطي التدقيق المحلي بعد الإعداد |
+| `FAILPROOFAI_LLM_BASE_URL` | تجاوز نقطة نهاية محتملة OpenAI المستخدمة بواسطة سياسات LLM |
+| `FAILPROOFAI_LLM_API_KEY` | توفير مفتاح API المستخدم بواسطة سياسات LLM |
+| `FAILPROOFAI_LLM_MODEL` | اختر النموذج المستخدم بواسطة سياسات LLM |
+| `FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS` | ربط تحميل وحدة السياسة المخصصة |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | رفض جلب الحزم والثنائيات مستند الخدمة؛ ما تم تثبيته يستمر في الفرض |
| `FAILPROOFAI_PACK_BASE_URL` | جلب الحزم من مرآة بدلاً من `github.com` |
-| `FAILPROOFAI__EXTRA_PATHS` | استبدل مسارات التقاط إضافية مكونة لجهاز واحد |
-| `NO_COLOR` | عطّل مخرجات المحطة الملونة |
+| `FAILPROOFAI__EXTRA_PATHS` | استبدال مسارات الالتقاط الإضافية المكوّنة لهيكل واحد |
+| `NO_COLOR` | تعطيل مخرجات الطرفية الملونة |
-متغيرات الصفحة الرئيسية الخاصة بالوكيل مثل `CLAUDE_PROJECTS_PATH`, `CURSOR_HOME`, `HERMES_HOME`, و`OPENCLAW_HOME` تتجاوز حيث يكتشف Failproof AI جلسات محلية لذلك الجهاز.
+متغيرات المنزل الخاصة بالوكيل مثل `CLAUDE_PROJECTS_PATH` و `CURSOR_HOME` و `HERMES_HOME` و `OPENCLAW_HOME` تتجاوز حيث يكتشف Failproof AI جلسات محلية لذلك الهيكل.
## إيقاف أو إزالة جهاز بأمان
@@ -142,9 +161,9 @@ failproofai config --status
failproofai config --resume
```
-لا يعطّل إيقاف الجلسة المحلية المؤقت السياسات المُدارة من السحابة. استعد نشرات السحابة من خلال سير عمل إنفاذ السحابة عند كون الطرح نفسه هو المشكلة.
+إيقاف جلسة محلية لا يعطّل سياسات Cloud المدارة. استعد نشرات Cloud من خلال سير عمل فرض Cloud عندما يكون الطرح نفسه هو المشكلة.
-قبل إزالة حزمة npm، أزل الخطافات والمراقب المثبّتين:
+قبل إزالة حزمة npm، أزل الخطافات المثبتة ومستند الخدمة:
```bash
failproofai uninstall --dry-run
@@ -152,8 +171,8 @@ failproofai uninstall --yes
npm rm -g failproofai
```
-شغّل `failproofai --help` للحصول على تفاصيل خاصة بالإصدار.
+قم بتشغيل `failproofai --help` للحصول على تفاصيل خاصة بالإصدار.
- شغّل `failproofai uninstall` قبل `npm rm -g failproofai`؛ npm لا يزيل خطافات الوكيل المثبّتة أو خدمة المراقب.
+ قم بتشغيل `failproofai uninstall` قبل `npm rm -g failproofai`؛ npm لا تزيل خطافات الوكيل المثبتة أو خدمة مستند الخدمة.
\ No newline at end of file
diff --git a/docs/ar/reference/harnesses.mdx b/docs/ar/reference/harnesses.mdx
index 42d4bc66c..e11d15a66 100644
--- a/docs/ar/reference/harnesses.mdx
+++ b/docs/ar/reference/harnesses.mdx
@@ -1,80 +1,86 @@
---
title: "وسائط الوكيل"
-description: "التقط الجلسات وفرض السياسات عبر جميع وسائط الوكيل الـ 12 المدعومة."
+description: "التقط الجلسات وطبق السياسات عبر جميع وسائط الوكيل المدعومة البالغ عددها 12."
icon: "plug-zap"
---
-الوسيط هو أي شيء يعمل الوكيل الخاص بك بداخله فعليًا. Failproof AI يدعم اثني عشر منها، في فئتين:
+الوسيط هو كل شيء يعمل الوكيل بداخله فعليًا. Failproof AI يدعم اثنا عشر منها، في فئتين:
-- **أدوات سطر أوامر الترميز** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
-- **بوابات الدردشة والمساعد** (2) — Hermes (Slack, Telegram, cron), OpenClaw (مساعد يستضيفه الذات)
+- **واجهات سطر أوامر البرمجة** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
+- **بوابات الدردشة والمساعدين** (2) — Hermes (Slack, Telegram, cron), OpenClaw (مساعد ذاتي الاستضافة)
-تنطبق السياسات ذاتها وسجل الجلسة ذاته على أي وسيط يعمل الوكيل فيه. تعكس طبقة محول واحدة أسماء الأحداث الأصلية لكل وسيط وأسماء الأدوات وحقول إدخال الأدوات إلى 29 حدثًا قانونيًا قبل تشغيل أي سياسة.
+نفس السياسات وسجل الجلسة نفسه ينطبق مهما كان الوكيل يعمل فيه. تقوم طبقة محول واحدة بتعيين أسماء الأحداث الأصلية لكل وسيط، وأسماء الأدوات، وحقول مدخلات الأدوات على 29 حدثًا قانونيًا قبل تشغيل أي سياسة.
-وكيل يعمل في **لا شيء** من الاثني عشر يتم تجهيزه مباشرة باستخدام [Python SDK](/ar/reference/custom-agents). هذا عقد مختلف، ويستحق التأكيد بصراحة: SDK توفر التتبع والجلسات والتقييمات والتدقيق — **لا تفرض السياسات بمفردها.** منع إجراء غير آمن قبل تنفيذه يحتاج إلى ربط إنفاذ في حد أداة وقتك؛ [اتصل بنا](mailto:support@befailproof.ai) وسنقوم بتعيينه.
+وكيل يعمل في **لا شيء** من الاثني عشر يتم جهزه مباشرة باستخدام [Python SDK](/ar/reference/custom-agents). هذا عقد مختلف، ويستحق التوضيح بصراحة: SDK يوفر التتبع والجلسات والتقييمات والتدقيق — **لا يفرض السياسات بمفرده.** منع الإجراء غير الآمن قبل تنفيذه يحتاج إلى هوك إنفاذ عند حدود أداة وقت التشغيل الخاص بك؛ [تواصل معنا](mailto:support@befailproof.ai) وسنقوم بتعيينه.
-| الوسيط | نطاقات الربط المدعومة |
+| الوسيط | نطاقات الهوك المدعومة |
| --- | --- |
-| Claude Code | المستخدم, المشروع, محلي |
-| Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi | المستخدم, المشروع |
-| Factory Droid, Devin CLI, Antigravity CLI, Goose | المستخدم, المشروع |
-| Hermes, OpenClaw | المستخدم |
+| Claude Code | User, project, local |
+| Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi | User, project |
+| Factory Droid, Devin CLI, Antigravity CLI, Goose | User, project |
+| Hermes, OpenClaw | User |
-تقوم كل تكامل بتطبيع أسماء أحداث الربط الأصلية وأسماء الأدوات وحقول إدخال الأدوات قبل تشغيل السياسات. لا يمكن للسياسة أن تتصرف إلا على الأحداث التي يعرضها الوسيط؛ اختبر سلوك نهاية الدور والتعليمات على الوسيط والإصدار الدقيق الذي تنشره.
+كل تكامل يوحد أسماء أحداث الهوك الأصلية والأداة وحقول مدخلات الأدوات قبل تشغيل السياسات. لا يمكن للسياسة أن تعمل إلا على الأحداث التي يكشفها الوسيط؛ اختبر السلوك في نهاية الدوران والتعليمات على الوسيط والإصدار الدقيق الذي تنشره.
## قدرة الإنفاذ
-"منع" يعني أن الحكم الذي أرجعه محول المحول الحالي يتم استهلاكه بواسطة الوسيط المسمى. قد يحل منع ما بعد الأداة محل النتيجة المعروضة للنموذج ولكن لا يمكنه التراجع عن تأثير جانبي للأداة حدث بالفعل.
+"منع" يعني أن الحكم الذي يعيده محول التكيف الحالي يتم استهلاكه بواسطة الوسيط المسمى. قد يعدل الحجب بعد الأداة النتيجة المعروضة للنموذج ولكن لا يمكنه التراجع عن تأثير جانبي للأداة قد حدث بالفعل.
-| الوسيط | أحداث الحجب المتحققة | تحذيرات المراقبة فقط أو عدم الحجب |
+| الوسيط | أحداث الحجب المتحقق منها | التحفظات التي لا يمكن ملاحظتها أو غير حاجزة |
| --- | --- | --- |
-| Claude Code | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact`, وعدة أحداث المهمة/الإعدادات | `PostToolUse`, دورة حياة الجلسة, الإخطارات, وأحداث ما بعد الفشل قابلة للمراقبة فقط. |
-| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | يحل منع ما بعد الأداة محل النتيجة بعد التنفيذ؛ بدء الجلسة وأحداث الضغط قابلة للمراقبة في المحول الحالي. |
-| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | يحل منع ما بعد الأداة محل النتيجة بعد التنفيذ؛ أحداث الجلسة والإخطار قابلة للمراقبة فقط. |
-| Cursor | `PreToolUse`, `UserPromptSubmit`, `Stop` | `PostToolUse` وأحداث الجلسة قابلة للمراقبة فقط. |
-| OpenCode | `PreToolUse` | أحداث ما بعد الأداة ودورة الحياة قابلة للمراقبة؛ معالجة الإيقاف الحالية هي إرشادات لدور لاحق وليست بوابة محققة. |
-| Pi | `PreToolUse`, `UserPromptSubmit` | أحداث ما بعد الأداة ودورة الحياة قابلة للمراقبة؛ إرشادات الإيقاف تنطبق على دور لاحق. |
-| Hermes | `PreToolUse` | أحكام ما بعد الأداة والجلسة وإيقاف الوكيل الفرعي ليست بوابات. |
-| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | أحداث ما بعد الأداة والجلسة وإيقاف الوكيل الفرعي والضغط قابلة للمراقبة فقط. |
-| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | أحكام ما بعد الأداة وإيقاف الوكيل الفرعي قابلة للمراقبة فقط. |
-| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PermissionRequest` المشروط | لا تعمل ربطات الإذن في كل وضع إذن؛ أحداث ما بعد الأداة والجلسة قابلة للمراقبة فقط. |
-| Antigravity CLI | `PreToolUse`, `Stop` | أحكام طلب المستخدم وما بعد الأداة قابلة للمراقبة؛ يمكن لا تزال حقن تعليمات المطالبة. |
-| Goose | `PreToolUse` | أحداث طلب المستخدم وما بعد الأداة والجلسة قابلة للمراقبة فقط. يوجد ربط إيقاف أصلي للحجب في المنطقة السابقة لكن لا يتم تثبيته بواسطة المحول الحالي. |
-
-القدرات حساسة للإصدار. أعد الاختبار بعد ترقية CLI الوكيل، خاصة عندما تعتمد السياسة على سلوك المطالبة أو الإيقاف أو الإذن أو ما بعد الأداة بدلاً من بوابة ما قبل الأداة الشائعة.
-
-## تثبيت الالتقاط وربطات السياسة
+| Claude Code | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact`، وعدة أحداث المهمة/الإعدادات | `PostToolUse`، دورة حياة الجلسة، الإخطارات، وأحداث ما بعد الفشل هي ملاحظة فقط. |
+| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | يعدل الحجب بعد الأداة النتيجة بعد التنفيذ؛ أحداث بداية الجلسة والضغط كبير هي ملاحظة فقط في محول التكيف الحالي. |
+| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | يعدل الحجب بعد الأداة النتيجة بعد التنفيذ؛ أحداث الجلسة والإخطارات هي ملاحظة فقط. |
+| Cursor | `PreToolUse`, `UserPromptSubmit`, `Stop` | `PostToolUse` وأحداث الجلسة هي ملاحظة فقط. |
+| OpenCode | `PreToolUse` | أحداث ما بعد الأداة ودورة الحياة هي ملاحظة فقط؛ معالجة الإيقاف الحالية هي إرشادات للدوران اللاحق بدلاً من أن تكون بوابة تم التحقق منها. |
+| Pi | `PreToolUse`, `UserPromptSubmit` | أحداث ما بعد الأداة ودورة الحياة هي ملاحظة فقط؛ تنطبق إرشادات الإيقاف على دوران لاحق. |
+| Hermes | `PreToolUse` | حكومات ما بعد الأداة والجلسة والإيقاف الفرعي ليست بوابات. |
+| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | أحداث ما بعد الأداة والجلسة والإيقاف الفرعي والضغط كبير هي ملاحظة فقط. |
+| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | حكومات ما بعد الأداة والإيقاف الفرعي هي ملاحظة فقط. |
+| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, مشروط `PermissionRequest` | لا تعمل هوكات الإذن في كل وضع إذن؛ أحداث ما بعد الأداة والجلسة هي ملاحظة فقط. |
+| Antigravity CLI | `PreToolUse`, `Stop` | حكومات موجز المستخدم وما بعد الأداة هي ملاحظة فقط؛ لا يزال يمكن حقن تعليمات الموجز. |
+| Goose | `PreToolUse` | أحداث موجز المستخدم وما بعد الأداة والجلسة هي ملاحظة فقط. يوجد هوك إيقاف حجب أصلي في المنطقة الأعلى ولكن لا يتم تثبيته بواسطة محول التكيف الحالي. |
+
+القدرات حساسة للإصدار. أعد الاختبار بعد ترقية CLI الوكيل، خاصة عندما تعتمد السياسة على سلوك الموجز أو الإيقاف أو الإذن أو ما بعد الأداة بدلاً من بوابة ما قبل الأداة الشائعة.
+
+## تثبيت الالتقاط وهوكات السياسة
- 1. افتح **الإدارة → المفاتيح** وأنشئ مفتاحًا يحتوي على `events:add` و `policies:pull`، مع تسميته للجهاز أو البيئة.
- 2. على الجهاز المستهدف، اربط CLI المحلي بالمفتاح المعروض وثبت ربطات الوسيط.
- 3. ابدأ جلسة وكيل جديدة، ثم أكد أحداث الربط والجلسة الخاصة بها في **المراقبة → الأحداث**.
- 4. افتح **المراقبة → السياسة** لنفس الإطار الزمني وأكد أن قرار السياسة ينسب إلى الجهاز.
+ 1. افتح **الإدارة → المفاتيح** وأنشئ مفتاحًا بـ `events:add` و `policies:pull`، باسم الجهاز أو البيئة.
+ 2. على الجهاز الهدف، اربط CLI المحلي بالمفتاح المعروض وثبّت هوكات الوسيط.
+ 3. ابدأ جلسة وكيل جديدة، ثم تأكد من أحداث الهوك والجلسة الخاصة بها تحت **المراقبة → الأحداث**.
+ 4. افتح **المراقبة → السياسة** لنفس نطاق الوقت وتأكد من أن قرار السياسة نُسب إلى الجهاز.
- يبدأ الاتصال بمفتاح الجهاز. أكد أنه يتضمن كل من أذونات الالتقاط وتسليم السياسة قبل نسخ سره.
+ يبدأ الاتصال بمفتاح الجهاز. تأكد من أنه يتضمن أذونات الاستيعاب وتسليم السياسة قبل نسخ سره.
- 
+ 
- بعد تثبيت الربطات، يجب أن يعرض دفق الأحداث أحداثًا جديدة من الجهاز والبيئة التي اتصلت بها.
+ بعد تثبيت الهوكات، يجب أن يعرض تدفق الأحداث أحداثًا جديدة من الجهاز والبيئة التي اتصلت بها.
- 
+ 
- أخيرًا، تحقق من أن قرارات السياسة ينسب إلى نفس الجهاز. هذا يؤكد أن الوسيط يقوم بالإبلاغ عن نشاط السياسة بالإضافة إلى أحداث التتبع.
+ أخيرًا، تحقق من نسبة قرارات السياسة إلى نفس الجهاز. هذا يؤكد أن الوسيط يقدم تقارير عن نشاط السياسة وكذلك أحداث التتبع.
- 
+ 
- ثبت ربطات لكل وسيط يتم اكتشافه:
+ اقرأ مفتاح الجهاز في الشل. `read -s` يأخذه في موجه لا يعكس، حتى لا يظهر أبدًا في أمر أو في سجل الشل:
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
- failproofai policies --install
+ read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN
```
- أو استهدف وسائط محددة ونطاق التكوين:
+ ثم قم بإعداد الجهاز — يربط هذا هوكات لكل وسيط مكتشف، ويثبت المعالج، ويتصل بـ Cloud:
+
+ ```bash
+ failproofai config
+ failproofai policies add FailproofAI/policies
+ ```
+
+ الإعداد لا يفعل أي سياسة بمفرده، وهذا ما الأمر الثاني موجود له.
+
+ أو استهدف وسائط سميت ونطاق تكوين:
```bash
failproofai policies --install \
@@ -82,7 +88,7 @@ icon: "plug-zap"
--scope user
```
- نطاق المشروع يحتفظ بتكوين الربط مع مستودع. يغطي النطاق المستخدم العمل عبر المستودعات. Claude Code يدعم أيضًا النطاق المحلي؛ الدعم يختلف حسب الوسيط و CLI يرفض المجموعات غير المدعومة.
+ نطاق المشروع يحافظ على تكوين الهوك مع مستودع. نطاق المستخدم يغطي العمل عبر المستودعات. Claude Code يدعم أيضًا نطاق محلي؛ يختلف الدعم حسب الوسيط و CLI يرفض المجموعات غير المدعومة.
تحقق من الجهاز وأحداثه:
@@ -94,16 +100,16 @@ icon: "plug-zap"
-## إضافة مسار جلسة غير افتراضي
+## أضف مسار جلسة غير افتراضي
- المسارات الإضافية مسجلة على الجهاز، وليس في السحابة. بعد إضافة واحد، افتح **المراقبة → الجلسات**، صفي حسب بيئة الجهاز، وأكد أن الجلسات من المسار الجديد تظهر. افتح جلسة وتحقق من الوكيل والوسيط وطوابع زمن الأحداث قبل الاعتماد عليها في التدقيق.
+ يتم تسجيل المسارات الإضافية على الجهاز، وليس في Cloud. بعد إضافة واحد، افتح **المراقبة → الجلسات**، وقم بالتصفية لبيئة الجهاز، وتأكد من ظهور الجلسات من المسار الجديد. افتح جلسة وتحقق من الوكيل والوسيط وطوابع أوقات الأحداث قبل الاعتماد عليها في التدقيق.
- 
+ 
- أضف مسارًا برنامج تسمية اختياري، ثم افحص المسارات المكونة:
+ أضف مسارًا مع تسمية اختيارية، ثم افحص المسارات المكونة:
```bash
failproofai harness add-path claude checkout=/srv/checkout/.claude
@@ -112,10 +118,10 @@ icon: "plug-zap"
failproofai backfill --since 7d
```
- إزالة مسار مع `failproofai harness remove-path claude checkout`.
+ أزل مسارًا باستخدام `failproofai harness remove-path claude checkout`.
- قم بتشغيل جلسة جديدة واحدة بعد التثبيت. تحقق من كل من دفق الأحداث المباشر وقرار السياسة الفعلي قبل توسيع التجميع.
+ شغّل جلسة جديدة واحدة بعد التثبيت. تحقق من تدفق الأحداث المباشر وقرار السياسة الفعلي قبل توسيع الإطلاق.
\ No newline at end of file
diff --git a/docs/ar/reference/overview.mdx b/docs/ar/reference/overview.mdx
index 56c29a85a..d673bfcbb 100644
--- a/docs/ar/reference/overview.mdx
+++ b/docs/ar/reference/overview.mdx
@@ -1,73 +1,76 @@
---
title: "التكاملات والمراجع"
-description: "اتصل بأدوات الوكلاء المدعومة والمكتبات البرمجية والواجهات سطر الأوامر والواجهة HTTP."
+description: "قم بتوصيل حزم الوكلاء المدعومة وأدوات SDK والمتصفحات والواجهة البرمجية HTTP."
icon: "braces"
---
-اختر التكامل الأقرب إلى مكان تشغيل الوكيل الخاص بك بالفعل.
+اختر التكامل الأقرب إلى المكان الذي يعمل فيه وكيلك بالفعل.
-
- ثبّت الخطاطيف للأدوات المدعومة للترميز والوكلاء المستقلين.
+
+ قم بتثبيت الخطافات للمتصفحات والوكلاء المستقلين المدعومة.
-
- قم بتكامل LangGraph أو CrewAI أو LlamaIndex أو Pydantic AI أو وكيل مخصص.
+
+ قم بأداة LangGraph أو CrewAI أو LlamaIndex أو Pydantic AI أو وكيل مخصص.
- التكوين وكتالوج الأحداث وقواعد الربط والتسليم.
+ الإعدادات وفهرس الأحداث وقواعد الارتباط والتسليم.
- استعرض المشاريع المحلية والجلسات وأنشطة السياسات والتدقيق غير المتصل.
+ راجع المشاريع المحلية والجلسات ونشاط السياسة والتدقيق دون الاتصال.
- قم بتكوين الالتقاط المحلي والخطاطيف والسياسات والتدقيق والتسليم وحالة الجهاز.
+ قم بتكوين الالتقاط المحلي والخطافات والسياسات والتدقيق والتسليم وحالة الجهاز.
- ابحث في جلسات Cloud والتدقيق والمشاكل والتنبيهات والمفاتيح والمستخدمين والإعدادات وأدرها.
+ الاستعلام والإدارة لجلسات Cloud والتدقيق والمشاكل والتنبيهات والمفاتيح والمستخدمين والإعدادات.
- قيّم الجلسات المكتملة أو غير النشطة باستخدام خدمة FastAPI.
+ قم بتقييم الجلسات الكاملة أو غير النشطة باستخدام خدمة FastAPI.
- قم بكتابة واختبار قرارات السماح والتعليمات والرفض الخاصة بسير العمل.
+ قم بإنشاء واختبار قرارات السماح والتعليمات والرفض الخاصة بسير العمل.
- نشّر مستوى التحكم في Cloud على مجموعة Kubernetes التي تديرها.
+ قم بنشر مستوى التحكم في Cloud على مجموعة Kubernetes المدارة من قبل العميل.
-تغطي [مرجع HTTP API](/ar/reference/http-api) المُنشأة سطح `/v1` العام. تشرح الصفحات المكتوبة يدويًا سير العمل الذي يتجاوز عدة نقاط نهاية أو يستخدم واجهات إدارية خارج هذا السطح العام.
+يغطي [مرجع HTTP API](/ar/reference/http-api) المُنشأ سطح `/v1` العام. تشرح الصفحات المكتوبة يدويًا سير العمل الذي يمتد عبر نقاط نهاية متعددة أو يستخدم واجهات إدارية خارج هذا السطح العام.
-## اتصل بوكيل والتحقق من البيانات
+## قم بتوصيل وكيل والتحقق من البيانات
- 1. افتح **Administration → Keys**، أنشئ مفتاحًا باستخدام `events:add` و `policies:pull`، وانسخ السر.
+ 1. افتح **الإدارة → المفاتيح**، وأنشئ مفتاحًا باستخدام `events:add` و `policies:pull`، وانسخ السر.
2. قم بتكوين التكامل باستخدام الصفحة المطابقة أعلاه.
- 3. افتح **Observe → Events** للتأكد من وصول الأحداث، ثم **Observe → Sessions** للتأكد من تشكيلها لعمليات تشغيل كاملة.
- 4. قم بالتصفية حسب بيئة التكامل وافحص جلسة واحدة للحصول على النموذج والأداة والخطأ وحقول السياسة المطلوبة من قبل التدقيقات.
+ 3. افتح **المراقبة → الأحداث** للتأكد من وصول الأحداث، ثم **المراقبة → الجلسات** للتأكد من تكوين عمليات تشغيل كاملة.
+ 4. صفّي حسب بيئة التكامل وافحص جلسة واحدة للحصول على حقول النموذج والأداة والخطأ والسياسة المطلوبة من قبل عمليات التدقيق.
- ابدأ بدرج المفاتيح. تحدد الامتيازات المختارة ما إذا كان بإمكان الجهاز إرسال الأحداث واستقبال السياسات المُدارة من Cloud.
+ ابدأ بدرج المفاتيح. تحدد المنح المحددة ما إذا كان يمكن للجهاز إرسال الأحداث واستقبال السياسات المُدارة بواسطة Cloud.
- 
+ 
- بعد توصيل التكامل، استخدم قائمة الجلسات للتأكد من أن أحداثها يتم تجميعها في عمليات تشغيل كاملة في البيئة المتوقعة.
+ بعد توصيل التكامل، استخدم قائمة الجلسات للتأكد من تجميع أحداثها في عمليات تشغيل كاملة في البيئة المتوقعة.
- 
+ 
- افتح إحدى هذه الجلسات قبل اعتبار التكامل مكتملاً؛ يجب أن تحتوي التتبع على نموذج وأداة وخطأ وأدلة السياسة التي يحتاجها التدقيق.
+ افتح إحدى هذه الجلسات قبل اعتبار التكامل مكتملاً؛ يجب أن يحتوي التتبع على دليل النموذج والأداة والخطأ والسياسة التي يحتاجها التدقيق.
- أنشئ مفتاح جهاز وقم بتوصيل مراقب Failproof والتحقق من الجلسة الأولى.
+ أنشئ مفتاح جهاز، ثم اقرأ السر الذي يطبعه في shell. `read -s` يأخذه في موجه لا يعكس، لذلك لا يظهر أبدًا في أمر أو في سجل shell:
```bash
fp keys create agent-production \
--add events:add \
--add policies:pull
+ read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN
+ ```
+
+ قم بتوصيل خيط Failproof والتحقق من الجلسة الأولى:
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ ```bash
+ failproofai config
failproofai flush --wait
fp sessions --since 1h --env production
@@ -76,6 +79,6 @@ icon: "braces"
استخدم `fp --json sessions ...` عندما تستهلك أداة أخرى النتيجة. يجب أن تأتي الأعلام العامة مثل `--json` و `--org` و `--base-url` قبل الأمر.
- انظر إلى [مرجع Failproof AI CLI](/ar/reference/failproof-cli) للأوامر المحلية و [مرجع Failproof Cloud CLI](/ar/reference/cloud-cli#cli-commands) لأوامر `fp`.
+ انظر إلى [مرجع Failproof AI CLI](/ar/reference/failproof-cli) لأوامر محلية و [مرجع Failproof Cloud CLI](/ar/reference/cloud-cli#cli-commands) لأوامر `fp`.
\ No newline at end of file
diff --git a/docs/ar/reference/policy-sdk.mdx b/docs/ar/reference/policy-sdk.mdx
index eb0e43a4b..0176d5e6b 100644
--- a/docs/ar/reference/policy-sdk.mdx
+++ b/docs/ar/reference/policy-sdk.mdx
@@ -1,36 +1,35 @@
---
----
title: "السياسات المخصصة"
-description: "قم بتأليف واختبار ونشر سياسات JavaScript أو TypeScript لحالات الفشل الخاصة بوكلائك."
+description: "قم بكتابة واختبار ونشر سياسات JavaScript أو TypeScript لحالات الفشل المحددة لوكلائك."
icon: "shield-plus"
---
-تحول السياسات المخصصة نمط فشل من آثارك أو تدقيقاتك إلى قرار يعمل أثناء عمل الوكيل. يمكن للسياسة السماح بإجراء أو توجيه الوكيل أو رفض الإجراء قبل أن يسبب حادثة أخرى.
+تحول السياسات المخصصة نمط فشل من آثارك أو عمليات التدقيق إلى قرار يتم تنفيذه أثناء عمل الوكيل. يمكن للسياسة السماح بإجراء ما، أو إرشاد الوكيل، أو منع الإجراء قبل أن يسبب حادثة أخرى.
-استخدم سياسة مخصصة عندما يعتمد السلوك على أدواتك أو مساراتك أو أوامرك أو بيئاتك أو قواعد التشغيل. تحقق من [فهرس السياسات المدمجة](/ar/policies/builtin-catalog) أولاً حتى لا تعيد إنشاء عنصر تحكم موجود.
+استخدم سياسة مخصصة عندما يعتمد السلوك على أدواتك أو مساراتك أو أوامرك أو بيئاتك أو قواعد التشغيل. تحقق من [حزمة سياسات Failproof AI](/ar/policies/packs) أولاً حتى لا تعيد إنشاء عنصر تحكم موجود.
-## تأليف سياسة مخصصة
+## كتابة سياسة مخصصة
- 1. انتقل إلى **Admin → policy editor**، وحدد **New policy**، واشرح الفشل الذي تريد منعه.
- 2. أضف مصدر السياسة، ثم اختبر المطابقات المتوقعة وعدم المطابقات الآمنة في المحرر. حل كل خطأ تحقق.
- 3. احفظ المسودة وحدد **Publish version** لإنشاء نسخة ثابتة.
- 4. انتقل إلى **Admin → enforcement**، ثم نشر النسخة إلى جهاز اختبار في وضع **observe**، والتحقق من قراراتها ضمن **Observe → policy** قبل فرضها.
+ 1. انتقل إلى **Admin → محرر السياسات**، حدد **سياسة جديدة**، وصف حالة الفشل التي تريد منعها.
+ 2. أضف مصدر السياسة، ثم اختبر المطابقات المتوقعة والمطابقات الآمنة غير المطابقة في المحرر. حل كل خطأ تحقق.
+ 3. احفظ المسودة وحدد **نشر النسخة** لإنشاء نسخة غير قابلة للتغيير.
+ 4. انتقل إلى **Admin → الفرض**، وأنشر النسخة على جهاز اختبار في وضع **المراقبة**، وتحقق من قراراتها تحت **المراقبة → السياسة** قبل فرضها.
- 
+ 
1. أنشئ `.failproofai/policies/checkout-policies.ts`. يجب أن ينتهي اسم الملف بـ `policies.js` أو `policies.mjs` أو `policies.ts`.
2. سجل سياسة واحدة أو أكثر باستخدام `customPolicies.add()`.
3. تحقق وثبت الملف باستخدام `failproofai policies --install --custom ./.failproofai/policies/checkout-policies.ts --scope project`.
- 4. اطلق إجراء واحد متطابق وإجراء واحد آمن. قم بتشغيل `failproofai policies`، ثم افحص القرارات المنسوبة ضمن **Observe → policy**.
+ 4. فعّل إجراء واحد مطابق وإجراء آمن واحد. شغّل `failproofai policies`، ثم افحص القرارات المنسوبة تحت **المراقبة → السياسة**.
## ابدأ بقاعدة ضيقة
-تحظر هذه السياسة أوامر Kubernetes المدمرة فقط عندما يستهدف الأمر الإنتاج. كل شيء خارج نمط الفشل الدقيق هذا يُرجع `allow()`.
+تحظر هذه السياسة أوامر Kubernetes المدمرة فقط عندما يستهدف الأمر الإنتاج. كل شيء خارج نمط الفشل هذا بالضبط يرجع `allow()`.
```ts
import { customPolicies, allow, deny } from "failproofai";
@@ -56,20 +55,20 @@ customPolicies.add({
});
```
-السياسات الجيدة ضيقة بما يكفي لشرحها في جملة واحدة. طابق الإجراء القابل للمراقبة—وليس النية التي تأمل أن يكون لدى الوكيل—وأرجع `allow()` بمجرد عدم تطبيق القاعدة.
+السياسات الجيدة ضيقة بما يكفي للشرح في جملة واحدة. طابق الإجراء الملاحظ — وليس النية التي تأمل أن يكون لدى الوكيل — وارجع `allow()` بمجرد عدم تطبيق القاعدة.
-## اختر قرارًا
+## اختر قراراً
-| المساعد | النتيجة | استخدمه عندما |
+| مساعد | النتيجة | استخدمه عندما |
| --- | --- | --- |
-| `allow(reason?)` | تستمر العملية. | السياسة لا تنطبق أو الإجراء آمن. |
-| `instruct(reason)` | تستمر العملية مع إرشادات حيث يدعمها التوقيع. | تريد توجيه الوكيل نحو نهج أفضل دون فرض ثابت. |
-| `deny(reason)` | يتم حظر العملية عندما يدعم الحدث والتوقيع الحظر. | يجب ألا يمضي الإجراء قدمًا. |
+| `allow(reason?)` | تستمر العملية. | لا تنطبق السياسة أو الإجراء آمن. |
+| `instruct(reason)` | تستمر العملية مع إرشادات حيث يدعمها الحزام. | تريد توجيه الوكيل نحو نهج أفضل دون فرض ثابت. |
+| `deny(reason)` | يتم حظر العملية عندما يدعمها الحدث والحزام. | يجب أن لا تستمر العملية. |
اكتب السبب للوكيل الذي يجب أن يتعافى. اشرح ما تم اكتشافه وما يجب أن يفعله بدلاً من ذلك.
- لا تستخدم `instruct()` لحد أمان. يختلف توصيل الإرشادات حسب توقيع الوكيل. استخدم `deny()` عندما يجب منع الإجراء.
+ لا تستخدم `instruct()` لحد أمان. يختلف توصيل الإرشادات حسب حزام الوكيل. استخدم `deny()` عندما يجب منع الإجراء.
## كائن السياسة
@@ -85,12 +84,12 @@ customPolicies.add({
| الحقل | مطلوب | الوصف |
| --- | --- | --- |
-| `name` | نعم | معرّف مستقر للسياسة. احفظ الأسماء فريدة عبر الملفات. |
+| `name` | نعم | معرّف ثابت للسياسة. ابق أسماء فريدة عبر الملفات. |
| `description` | لا | الغرض القابل للقراءة البشرية الموضح في قوائم السياسات والقرارات. |
| `match.events` | لا | أنواع الأحداث التي تستدعي السياسة. حذف `match` يستدعيها لكل حدث متاح. |
| `fn` | نعم | دالة متزامنة أو غير متزامنة ترجع نتيجة `allow` أو `instruct` أو `deny`. |
-فلتر الأدوات داخل `fn`. `match.toolNames` ليست جزءًا من نوع السياسة المخصصة العام.
+قم بتصفية الأدوات داخل `fn`. `match.toolNames` ليس جزءاً من نوع السياسة المخصصة العام.
## سياق السياسة
@@ -98,19 +97,19 @@ customPolicies.add({
| الحقل | النوع | ما يحتويه |
| --- | --- | --- |
-| `eventType` | `HookEventType` | حدث معياري يتم تقييمه حاليًا. |
-| `toolName` | `string \| undefined` | اسم الأداة الأساسي مثل `Bash` أو `Read` أو `Write` أو `Edit`. |
-| `toolInput` | `Record \| undefined` | الإدخال الأساسي لاستدعاء الأداة الحالية. |
-| `payload` | `Record` | حمولة الحدث المعياري الكاملة. |
-| `session` | `SessionMetadata \| undefined` | معرّف الجلسة والدليل العامل ومسار النسخة ونمط الإذن وبيانات التوقيع عند توفرها. |
-| `cli` | `string \| undefined` | توقيع وكيل المصدر، مثل `claude` أو `codex` أو `cursor`. |
-| `params` | `Record` | معاملات السياسة المدمجة. السياسات المخصصة حاليًا تتلقى كائنًا فارغًا. |
+| `eventType` | `HookEventType` | الحدث المعياري قيد التقييم حالياً. |
+| `toolName` | `string \| undefined` | اسم الأداة القياسي مثل `Bash` أو `Read` أو `Write` أو `Edit`. |
+| `toolInput` | `Record \| undefined` | المدخل القياسي لاستدعاء الأداة الحالية. |
+| `payload` | `Record` | حمولة الحدث المعيارية الكاملة. |
+| `session` | `SessionMetadata \| undefined` | معرّف الجلسة والدليل العامل ومسار النسخة والوضع المسموح وبيانات الحزام عند توفرها. |
+| `cli` | `string \| undefined` | حزام الوكيل المصدر، مثل `claude` أو `codex` أو `cursor`. |
+| `params` | `Record` | معاملات السياسة المدمجة. تتلقى السياسات المخصصة حالياً كائناً فارغاً. |
-تعامل مع كل قيمة اختيارية على أنها اختيارية حقيقية. لا توفر نسخ الوكيل وأنواع الأحداث نفس الحقول.
+اعامل كل قيمة اختيارية على أنها اختيارية حقاً. إصدارات الوكيل وأنواع الأحداث لا توفر جميعها نفس الحقول.
### مدخلات الأدوات الشائعة
-يوحد Failproof AI الأدوات الشائعة عبر التوقيعات المدعومة حتى تتمكن السياسة عادة من استخدام شكل إدخال واحد.
+يقوم Failproof AI بتوحيد الأدوات الشائعة عبر الأحزمة المدعومة بحيث يمكن لسياسة عادة استخدام شكل مدخل واحد.
| الأداة | الحقول الشائعة |
| --- | --- |
@@ -120,7 +119,7 @@ customPolicies.add({
| `Edit` | `file_path`, `old_string`, `new_string` |
| `Grep` | `pattern`, `path` |
-استخدم الإجبار الدفاعي لأن قيم مدخلات الأدوات يتم طبعها كـ `unknown`:
+استخدم الإكراه الدفاعي لأن قيم مدخلات الأداة مكتوبة كـ `unknown`:
```ts
const command = String(ctx.toolInput?.command ?? "");
@@ -129,25 +128,25 @@ const filePath = String(ctx.toolInput?.file_path ?? "");
## اختر الحدث
-| الحدث | متى يعمل | الاستخدام النموذجي |
+| الحدث | متى يتم تشغيله | الاستخدام النموذجي |
| --- | --- | --- |
| `PreToolUse` | قبل تنفيذ أداة. | حظر أو توجيه الأوامر والكتابات والقراءات والإجراءات الخارجية. |
-| `PostToolUse` | بعد إرجاع أداة. | افحص النتائج قبل أن تصل إلى الوكيل. ينتج الحظر النتيجة بأكملها؛ لا يحرر الحقول المختارة. |
-| `PermissionRequest` | عندما يطلب الوكيل إذنًا. | تطبيق قواعد الأذن الخاصة بالمنظمة. |
-| `UserPromptSubmit` | قبل استمرار مطالبة مرسلة. | رفض التعليمات المحظورة أو إضافة إرشادات سير العمل. |
-| `Stop` | عندما يحاول الوكيل الانتهاء. | اطلب شرط إنهاء قابل للوصول، مثل خطوة التحقق المحلية. |
-| `SubagentStop` | عندما يحاول الوكيل الفرعي الانتهاء. | بوابة العمل المفوض قبل عودته إلى الأب. |
-| `SessionStart` / `SessionEnd` | على حدود الجلسة. | سجل أو افحص حالة مستوى الجلسة. |
+| `PostToolUse` | بعد إرجاع أداة. | افحص النتائج قبل وصولها إلى الوكيل. يحظر الرفض النتيجة بالكامل؛ لا يحرر الحقول المحددة. |
+| `PermissionRequest` | عندما يطلب الوكيل إذناً. | تطبيق قواعد الأذونات الخاصة بالمنظمة. |
+| `UserPromptSubmit` | قبل استمرار المطالبة المرسلة. | رفض التعليمات المحظورة أو إضافة إرشادات سير العمل. |
+| `Stop` | عندما يحاول الوكيل الإنهاء. | تطلب شرط إنهاء قابل للوصول، مثل خطوة التحقق المحلية. |
+| `SubagentStop` | عندما يحاول وكيل فرعي الإنهاء. | إغلاق العمل المفوض قبل عودته إلى الوالد. |
+| `SessionStart` / `SessionEnd` | في حدود الجلسة. | تسجيل أو فحص حالة مستوى الجلسة. |
-يعتمد توفر الحدث والسلوك الحظر على توقيع الوكيل. انظر [توقيعات الوكيل](/ar/reference/harnesses) قبل الاعتماد على حدث عبر أسطول مختلط.
+توفر الحدث والسلوك الحظري يعتمد على حزام الوكيل. انظر [أحزمة الوكيل](/ar/reference/harnesses) قبل الاعتماد على حدث عبر أسطول مختلط.
`SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `Notification`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `Stop`, `StopFailure`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `PreCompact`, `PostCompact`, `Elicitation`, `ElicitationResult`, `UserPromptExpansion`, `PostToolBatch`, و `Setup`.
-## تأليف أنماط السياسات الشائعة
+## كتابة أنماط السياسة الشائعة
-### حظر الكتابات إلى المسارات المحمية
+### حظر الكتابات في المسارات المحمية
```ts
import { customPolicies, allow, deny } from "failproofai";
@@ -167,7 +166,7 @@ customPolicies.add({
});
```
-### تقديم إرشادات غير محظورة
+### إعطاء إرشادات غير حظرية
```ts
import { customPolicies, allow, instruct } from "failproofai";
@@ -187,7 +186,7 @@ customPolicies.add({
});
```
-### بوابة إكمال الجلسة
+### إغلاق إنهاء الجلسة
```ts
import { execFileSync } from "node:child_process";
@@ -216,30 +215,30 @@ customPolicies.add({
```
- حدث `Stop` المرفوض يمكن أن يجعل الوكيل يحاول مجددًا. قم بالبوابة فقط على شرط يمكن للوكيل تلبيته في البيئة الحالية، وقيد كل استدعاء عملية فرعية أو شبكة.
+ يمكن لحدث `Stop` المرفوض أن يجعل الوكيل يعيد المحاولة. قم بالإغلاق فقط على شرط يمكن للوكيل تلبيته في البيئة الحالية، وحدّ كل استدعاء عملية فرعية أو شبكة.
## تحميل ملفات السياسة
### ملفات الاتفاقية
-تحميل ملفات الاتفاقية تلقائيًا:
+تحميل ملفات الاتفاقية تلقائياً:
```text
/.failproofai/policies/security-policies.ts
~/.failproofai/policies/personal-policies.mjs
```
-- يتم تحميل أدلة السياسة للمشروع والمستخدم معًا.
-- الملفات تحميل أبجديًا داخل كل دليل.
+- يتم تحميل أدلة السياسات للمشروع والمستخدم معاً.
+- يتم تحميل الملفات أبجدياً داخل كل دليل.
- يجب أن ينتهي الملف بـ `policies.js` أو `policies.mjs` أو `policies.ts`.
-- يتم دعم استدعاءات متعددة `customPolicies.add()` في ملف واحد.
-- الاستيراد النسبي من الوحدات المحلية مدعوم.
-- يمكن التزام سياسات المشروع بحيث تتبع نفس القواعد المستودع.
+- تدعم استدعاءات متعددة `customPolicies.add()` في ملف واحد.
+- الواردات النسبية من الوحدات المحلية مدعومة.
+- يمكن التزام سياسات المشروع بحيث تتبع نفس القواعد الدقيقة المستودع.
### ملفات صريحة
-استخدم مسارات صريحة عندما يجب أن تسمي التحقق أو التكوين ملف الإدخال مباشرة:
+استخدم المسارات الصريحة عندما يجب أن يسمي التحقق أو التكوين ملف الدخول مباشرة:
```bash
failproofai policies --install \
@@ -248,7 +247,7 @@ failproofai policies --install \
--scope project
```
-تحميل الملفات الصريحة أولاً، تليها ملفات اتفاقية المشروع ثم ملفات اتفاقية المستخدم. يتم تحميل الملف المكتشف من خلال كلا المسارين مرة واحدة.
+تحميل الملفات الصريحة أولاً، تليها ملفات اتفاقية المشروع ثم ملفات اتفاقية المستخدم. الملف المكتشف من خلال كلا المسارين يتم تحميله مرة واحدة.
## التحقق والاختبار
@@ -261,30 +260,30 @@ failproofai policies --install \
failproofai policies
```
-يلتقط التحقق الملفات المفقودة وأخطاء بناء الجملة والاستيرادات غير المحلولة والاستثناءات على مستوى أعلى وحدود انتظار تحميل الوحدة. لا يثبت أن منطق المطابقة صحيح.
+يعترض التحقق على الملفات المفقودة وأخطاء بناء الجملة والواردات غير المحلولة والاستثناءات من المستوى الأعلى والمهل الزمنية لتحميل الوحدة. لا يثبت أن منطق المطابقة صحيح.
اختبر على الأقل هذه الحالات:
-- إجراء واحد يجب أن يطابق وينتج عن سبب السياسة المقصود.
-- إجراء واحد قريب لكنه آمن يجب أن يعيد `allow()`.
-- حقول أداة مفقودة أو مشوهة.
-- بناء جملة أوامر بديل والمسارات والاقتباسات والحالة والمسافة البيضاء.
+- إجراء واحد يجب أن يتطابق وينتج السبب السياسي المقصود.
+- إجراء آمن واحد قريب يجب أن يرجع `allow()`.
+- حقول الأداة المفقودة أو غير المشكلة بشكل صحيح.
+- بناء جملة الأمر البديل والمسارات والعروض والهيكل وسقوط المسافات البيضاء.
- عملية فرعية أو اعتماد شبكة غير متاح.
-نسب النتيجة إلى سياستك المخصصة ضمن **Observe → policy**. الاختبار المحظور غير كافٍ إذا كانت سياسة مدمجة أخرى هي التي اتخذت القرار.
+انسب النتيجة إلى السياسة المخصصة تحت **المراقبة → السياسة**. الاختبار المحظور غير كافٍ إذا اتخذت سياسة مدمجة أخرى القرار.
## سلوك وقت التشغيل
-- السياسات المدمجة تقيّم قبل السياسات المخصصة.
-- أول `deny` توقف مزيد من تقييم السياسة.
+- تقيّم السياسات المدمجة قبل السياسات المخصصة.
+- أول `deny` يوقف مزيد من تقييم السياسة.
- يمكن دمج نتائج `instruct` متعددة عندما لا ترفض أي سياسة الحدث.
-- لدالة السياسة موعد نهائي تنفيذ 10 ثواني.
-- الاستثناء المرمى أو انتهاء المهلة الزمنية تم تسجيله ومعاملته كـ `allow()`.
-- ملف اتفاقية يفشل في التحميل يتم تخطيه؛ ملفات مخصصة أخرى والسياسات المدمجة تستمر.
-- تحميل الوحدة على مستوى أعلى لديه أيضًا موعد نهائي 10 ثواني.
-- وضع الملاحظة السحابية يقوم بتشغيل السياسة لكن يسجل قرارًا غير متاح دون فرضه.
+- دالة السياسة لها موعد نهائي لتنفيذ مدته 10 ثوان.
+- يتم تسجيل الاستثناء المرفوع أو المهلة الزمنية والتعامل معها كـ `allow()`.
+- ملف اتفاقية فشل التحميل يتم تخطيه؛ تستمر الملفات المخصصة الأخرى والسياسات المدمجة.
+- تحميل الوحدة من المستوى الأعلى أيضاً له مهلة زمنية مدتها 10 ثوان.
+- وضع الملاحظة السحابية يقوم بتشغيل السياسة لكن يسجل قراراً غير سماح دون فرضه.
-احفظ وحدات السياسة حتمية وسريعة. تجنب استدعاءات الشبكة على مستوى أعلى أو بدء الخادم. قيد العمل داخل `fn`، تمسك بفشل الاعتماد، واختر عن قصد ما إذا كان هذا الفشل يجب أن يسمح أو يرفض العملية.
+اجعل وحدات السياسة حتمية وسريعة. تجنب استدعاءات الشبكة من المستوى الأعلى أو بدء الخادم. ربط العمل داخل `fn`، اقبض فشل الاعتماد، واختر عن قصد ما إذا كان هذا الفشل يجب أن يسمح أو ينكر العملية.
## تصدير API
@@ -292,13 +291,13 @@ failproofai policies
| --- | --- |
| `customPolicies.add(policy)` | سجل سياسة مخصصة عند تحميل الوحدة. |
| `allow(reason?)` | السماح بالعملية. |
-| `instruct(reason)` | السماح بالعملية وتقديم إرشادات حيث مدعومة. |
-| `deny(reason)` | حظر العملية حيث مدعومة. |
-| `getCustomHooks()` | إرجاع السياسات المسجلة حاليًا في سجل الوحدة. |
-| `clearCustomHooks()` | امسح هذا السجل، في المقام الأول للاختبارات والمحملات. |
+| `instruct(reason)` | السماح بالعملية وتوفير إرشادات حيث يدعمها. |
+| `deny(reason)` | حظر العملية حيث يدعمها. |
+| `getCustomHooks()` | إرجاع السياسات المسجلة حالياً في سجل وحدة. |
+| `clearCustomHooks()` | امسح هذا السجل، بشكل أساسي للاختبارات والمحملات. |
-TypeScript تصدر `PolicyContext` و `PolicyResult` و `CustomHook` و `PolicyDecision` و `PolicyFunction`.
+تُصدّر TypeScript `PolicyContext` و `PolicyResult` و `CustomHook` و `PolicyDecision` و `PolicyFunction`.
- انشر نسخة، انشرها في وضع الملاحظة، تحقق من القرارات، وانتقل إلى الإنفاذ.
+ انشر نسخة، انشرها في وضع المراقبة، تحقق من القرارات، وانتقل إلى الفرض.
\ No newline at end of file
diff --git a/docs/ar/sessions/assistant.mdx b/docs/ar/sessions/assistant.mdx
index 6fd63c8fb..bc00d786f 100644
--- a/docs/ar/sessions/assistant.mdx
+++ b/docs/ar/sessions/assistant.mdx
@@ -1,5 +1,4 @@
---
----
title: "مساعد Failproof"
description: "حلل وشغل Failproof AI باستخدام اللغة الطبيعية، من الأسئلة والاستفسارات إلى لوحات المعلومات والتدقيق."
icon: "message-square-text"
diff --git a/docs/ar/sessions/dashboards.mdx b/docs/ar/sessions/dashboards.mdx
index 318610784..a1fd12604 100644
--- a/docs/ar/sessions/dashboards.mdx
+++ b/docs/ar/sessions/dashboards.mdx
@@ -1,5 +1,4 @@
---
----
title: "لوحات المعلومات"
description: "تتبع إشارات الموثوقية التي تهم الوكيل أو سير العمل."
icon: "layout-dashboard"
diff --git a/docs/ar/sessions/errors.mdx b/docs/ar/sessions/errors.mdx
index 8277065b5..55f9df2cb 100644
--- a/docs/ar/sessions/errors.mdx
+++ b/docs/ar/sessions/errors.mdx
@@ -1,5 +1,4 @@
---
----
title: "الأخطاء"
description: "جمّع الأخطاء المتكررة وافتح الجلسات المرتبطة بها."
icon: "circle-alert"
diff --git a/docs/ar/sessions/evaluations.mdx b/docs/ar/sessions/evaluations.mdx
index ad4b8f0b1..e9ac39b15 100644
--- a/docs/ar/sessions/evaluations.mdx
+++ b/docs/ar/sessions/evaluations.mdx
@@ -1,26 +1,25 @@
---
----
-title: "التقييمات المباشرة"
-description: "قيّم الجلسات المباشرة والمكتملة من حيث الجودة والامتثال والتكلفة والكمون."
+title: "قراءة نتائج التقييم"
+description: "رسم بياني لدرجات التقييم عبر الوقت، ومقارنة الوكلاء والبيئات، ورؤية سبب حصول الجلسة على درجة منخفضة، وطلب المساعدة من المساعد."
icon: "gauge"
---
-تطبق التقييمات المباشرة أحكامًا متسقة على جلسات الوكيل. استخدمها للإشارات التي يجب قياسها بشكل مستمر بدلاً من التحقيق فيها فقط أثناء التدقيق.
+تصل النتائج من كل تقييم، سواء كان مستضافًا أو من العامل الخاص بك، إلى نفس الأماكن.
-## مراجعة جودة التقييم
+## مقارنة الدرجات عبر الوقت
- 1. انتقل إلى **Observe → Evaluations**.
- 2. أضف سلسلة واختر الوكيل والبيئة ودرجة التقييم والإحصائية والمنحنى.
- 3. أضف سلسلًا لمقارنة البيئات أو الوكلاء أو مفاتيح الدرجات.
- 4. حدد النتيجة لفتح الجلسات المطابقة أو مشاركة العرض المُرشح. استخدم **Observe → Metrics** للكمون والرموز والتكلفة وقيم الحجم الأخرى.
+ انتقل إلى **Observe → evaluations**.
+
+ - **Recent runs** يسرد كل تقييم عند وصوله: سواء جاء من المقيّم المستضاف (**managed**) أو الخاص بك (**customer**)، والوكيل والجلسة، والتقييم وإصداره، وحالته، ودرجته أو مقاييسه.
+ - **Score over time** يرسم ما تطلبه. اختر **add series** واختر وكيلاً وبيئة وتقييمًا وإحصائية: avg أو min أو max أو p50 أو p75 أو p90 أو p95 أو p99 أو stddev أو mode. كل سلسلة هي خط واحد؛ امنحها **curve** الخاص بها لرسمها على مخطط منفصل.
- 
+ 
- افتح جلسة من التنقيب لفحص الاستدلال لكل درجة:
+ نطاق زمني واحد وحجم صندوق واحد ينطبقان على كل سلسلة. الصندوق الدقيق يجد حادثة؛ الصندوق الخشن يظهر الاتجاه، ويمكن أن يخفي الارتفاعات التي تبحث عنها. الجرافة حيث لم يتم تسجيل شيء هي فجوة في الخط، وليس صفرًا أبدًا، والخطوط المرجعية تحدد 0.5 و 0.8.
- 
+ كل جزء من العرض يعيش في عنوان URL: **share** ينسخه، ومن يفتحه يرى المقارنة التي بنيتها بالضبط.
```bash
@@ -33,21 +32,25 @@ icon: "gauge"
-يتلقى المقيّم هوية الجلسة والبيئة والطوابع الزمنية والأحداث المرتبة. يمكنه إرجاع مفاتيح درجات رقمية مع استدلال اختياري وملخص. يمكن للمقيّمين طويلي المدى إرجاع وظيفة قيد الانتظار والاستعلام عنها لاحقًا.
+رسم **avg** و **p90** لنفس التقييم لترى ما إذا كان المتوسط الجيد يخفي ذيلاً سيئًا، أو نفس التقييم لوكيلين، أو للإنتاج والتدريج، لمقارنتهما على محور واحد. تقاس التكاليف والكمون وعدد الرموز، التي تحمل وحدات، في الرسم البياني تحت **Observe → metrics**، رسم بياني واحد لكل وحدة.
+
+## معرفة سبب حصول الجلسة على درجة منخفضة
+
+افتح جلسة من **Observe → sessions**؛ الشبكة تحمل درجات كل جلسة وتصفيها حسب نطاق الدرجات. يقود السكة اليمنى للجلسة بملخص التقييم، ثم شريط لكل درجة مع تفكير المقيّم تحتها.
+
+
+
+## اطلب من المساعد
+
+اطرح أسئلة عن بيانات التقييم باللغة الإنجليزية البسيطة: "أخبرني عن بعض التقييمات الحديثة"، أو أي وكلاء تنخفض درجاتهم. يقرأ [المساعد](/ar/sessions/assistant) وينحل نتائج ويجيب بجداول يمكنك المتابعة عليها، والسؤال الذي يستحق الاحتفاظ به يمكن أن يصبح [استعلام](/ar/sessions/queries) أو [لوحة تحكم](/ar/sessions/dashboards).
-## أهداف التقييم الجيدة
+
-- إكمال المهمة أو الصحة
-- التأصيل وخطر الهلوسة
-- اختيار الأداة وكفاءة الأداة
-- امتثال السياسة أو العملية
-- ميزانيات التكلفة والكمون
-- تصعيد بشري مطلوب
+## راقب وتصرف
-## من الدرجة إلى الاستجابة
+- **Dashboards**، تحت **Analyze → dashboards**، اتجاه الدرجات التي تميز، لكل وكيل وبيئة، للمنظمة بأكملها.
-أظهر الدرجات في لوحات التحكم لتتبع الاتجاهات. أنشئ تنبيهات للحدود أو الشروط المركبة. عندما تنخفض الدرجة عبر مجموعة سكانية، قم بإجراء تدقيق للتحقيق في السبب؛ وعندما يكون السبب إجراءً قابلاً للتكرار، نشّر سياسة.
+ 
-
- قم بتطبيق التقييم المتزامن أو غير المتزامن باستخدام Python evaluator SDK.
-
\ No newline at end of file
+- **Alerts** تخطرك عندما تتجاوز درجة ما عتبة. انظر [alerts](/ar/audits/alerts).
+- عندما تنخفض درجة عبر جلسات عديدة، [قم بتشغيل تدقيق](/ar/audits/run) لاكتشاف السبب؛ عندما تكون السبب إجراءً قابلاً للتكرار، [اكتب سياسة](/ar/policies/editor).
\ No newline at end of file
diff --git a/docs/ar/sessions/live-events.mdx b/docs/ar/sessions/live-events.mdx
index 7c678d3ac..a5476ae67 100644
--- a/docs/ar/sessions/live-events.mdx
+++ b/docs/ar/sessions/live-events.mdx
@@ -1,5 +1,4 @@
---
----
title: "الأحداث المباشرة"
description: "شاهد نشاط الوكيل يصل أثناء تشغيل جلسة عمل."
icon: "radio"
diff --git a/docs/ar/sessions/models.mdx b/docs/ar/sessions/models.mdx
index b47c3ccec..862d72e63 100644
--- a/docs/ar/sessions/models.mdx
+++ b/docs/ar/sessions/models.mdx
@@ -1,5 +1,4 @@
---
----
title: "النماذج"
description: "قارن زمن الاستجابة والرموز واستخدام السياق وتوزيع حركة المرور بين النماذج."
icon: "cpu"
diff --git a/docs/ar/sessions/overview.mdx b/docs/ar/sessions/overview.mdx
index 5726912ee..9933bb518 100644
--- a/docs/ar/sessions/overview.mdx
+++ b/docs/ar/sessions/overview.mdx
@@ -1,5 +1,4 @@
---
----
title: "الجلسات"
description: "ابدأ بسجل كامل لتشغيل وكيل واحد."
icon: "workflow"
diff --git a/docs/ar/sessions/policy-decisions.mdx b/docs/ar/sessions/policy-decisions.mdx
index 6fe89515e..c972d4a2d 100644
--- a/docs/ar/sessions/policy-decisions.mdx
+++ b/docs/ar/sessions/policy-decisions.mdx
@@ -1,5 +1,4 @@
---
----
title: "قرارات السياسة"
description: "اطّلع على السياسات المقيّمة والمحظورة والموجّهة والمسموح بها."
icon: "shield-check"
diff --git a/docs/ar/sessions/read-a-trace.mdx b/docs/ar/sessions/read-a-trace.mdx
index 212dddf39..a3600aa9c 100644
--- a/docs/ar/sessions/read-a-trace.mdx
+++ b/docs/ar/sessions/read-a-trace.mdx
@@ -1,5 +1,4 @@
---
----
title: "قراءة التتبع"
description: "ابحث عن الحدث الذي غيّر مسار جلسة الوكيل."
icon: "route"
diff --git a/docs/ar/start/first-policy.mdx b/docs/ar/start/first-policy.mdx
index ccc76b888..6647e7f1f 100644
--- a/docs/ar/start/first-policy.mdx
+++ b/docs/ar/start/first-policy.mdx
@@ -1,5 +1,4 @@
---
----
title: "منع فشلك الأول باستخدام سياسة"
description: "قم بتأليف نسخة من السياسة، وانشرها في وضع المراقبة، ثم طبقها."
icon: "shield-check"
diff --git a/docs/ar/start/integrations.mdx b/docs/ar/start/integrations.mdx
index 047a0ff6f..a56459630 100644
--- a/docs/ar/start/integrations.mdx
+++ b/docs/ar/start/integrations.mdx
@@ -1,5 +1,4 @@
---
----
title: "جهز وكيلك"
sidebarTitle: "الأطر العمل"
description: "اربط أي إطار عمل وكيل مدعوم إلى Failproof AI برمز واحد."
diff --git a/docs/ar/start/integrations/crewai.mdx b/docs/ar/start/integrations/crewai.mdx
index 16861f7bf..e580e5d34 100644
--- a/docs/ar/start/integrations/crewai.mdx
+++ b/docs/ar/start/integrations/crewai.mdx
@@ -1,5 +1,4 @@
---
----
title: "CrewAI"
sidebarTitle: "CrewAI"
description: "تجهيز الفرق والتدفقات والوكلاء حسب الدور والأدوات والذاكرة وردود الفعل البشرية."
diff --git a/docs/ar/start/integrations/langchain.mdx b/docs/ar/start/integrations/langchain.mdx
index c6f9eee46..a35b43efa 100644
--- a/docs/ar/start/integrations/langchain.mdx
+++ b/docs/ar/start/integrations/langchain.mdx
@@ -1,5 +1,4 @@
---
----
title: "LangChain و LangGraph"
sidebarTitle: "LangChain و LangGraph"
description: "قم بتتبع الرسوم البيانية والعقد والأدوات والمسترجعات واستدعاءات النموذج برمز واحد."
diff --git a/docs/ar/start/quickstart.mdx b/docs/ar/start/quickstart.mdx
index b59e7768f..bdd1425f4 100644
--- a/docs/ar/start/quickstart.mdx
+++ b/docs/ar/start/quickstart.mdx
@@ -1,13 +1,12 @@
---
----
title: "البدء السريع"
-description: "التقط جلسة وكيل، ابحث عن عطل، وابدأ في منعه."
+description: "التقط جلسة وكيل، وابحث عن عطل، وابدأ في منعه."
icon: "zap"
---
-يساعدك هذا البدء السريع في إعداد جهاز واحد للإبلاغ عن الجلسات، وتشغيل تدقيق، ونشر سياسة. استخدم المهارة لإعداد Failproof AI، أو اتبع الخطوات اليدوية.
+يساعدك هذا البدء السريع في جعل جهاز واحد يرسل الجلسات، وتشغيل تدقيق، ونشر سياسة. استخدم المهارة لإعداد Failproof AI، أو اتبع الخطوات اليدوية.
-**أي مسار هو مسارك؟** إذا كان وكيلك يعمل في أحد [الأطر](/ar/reference/harnesses) الـ 12 المدعومة — وهي واجهة سطر أوامر لترميز الأكواد، أو بوابة مثل Hermes أو OpenClaw — اتبع الخطوات أدناه؛ تحتاج إلى Node.js 20.9 أو إصدار أحدث. إذا لم يكن لدى وكيلك إطار عمل، فقم بتجهيزه باستخدام [Python SDK](/ar/reference/custom-agents) للتتبع والتدقيق، ثم عد إلى [تشغيل أول فحص فشل](/ar/start/first-audit)؛ الإنفاذ على هذا المسار يتطلب hook في وقت التشغيل.
+**أي مسار هو مسارك؟** إذا كان وكيلك يعمل في أحد [الأنظمة](/ar/reference/harnesses) المدعومة الـ 12 — واجهة سطر أوامر للترميز، أو بوابة مثل Hermes أو OpenClaw — اتبع الخطوات أدناه؛ تحتاج إلى Node.js 20.9 أو أحدث. إذا لم يكن لدى وكيلك نظام، فقم بتجهيزه باستخدام [Python SDK](/ar/reference/custom-agents) للتتبع والتدقيق، ثم عاود الانضمام في [تشغيل أول فحص فشل](/ar/start/first-audit)؛ الإنفاذ على هذا المسار يتطلب خطاف في وقت التشغيل.
@@ -22,19 +21,19 @@ icon: "zap"
Set up Failproof AI for this project, connect this machine, install the right hooks and policies, and verify that a session arrives.
```
- يفحص وكيلك المشروع، ويختار التكامل ذي الصلة، وينفذ الإعداد، ويتحقق منه. راجع [مستودع مهارات FailproofAI](https://github.com/FailproofAI/skills) للاطلاع على المهارات الفردية وخيارات التثبيت المتقدمة.
+ يفحص وكيلك المشروع، ويختار التكامل ذي الصلة، ويجري الإعداد، ويتحقق منه. انظر [مستودع مهارات FailproofAI](https://github.com/FailproofAI/skills) للاطلاع على المهارات الفردية وخيارات التثبيت المتقدمة.
- ## قبل أن تبدأ
+ ## قبل البدء
-1. افتح [لوحة معلومات Failproof AI](https://app.befailproof.ai) وأنشئ حسابًا أو سجل الدخول باستخدام بريدك الإلكتروني للعمل.
-2. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا باستخدام `events:add` و `policies:pull`.
-3. انسخ السر لمرة واحدة وخزنه على الجهاز المستهدف:
+1. افتح [لوحة تحكم Failproof AI](https://app.befailproof.ai) وأنشئ حسابًا أو سجل دخولك باستخدام بريدك الإلكتروني للعمل.
+2. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا بصلاحيات `events:add` و `policies:pull`.
+3. انسخ السر لمرة واحدة، ثم اقرأه في shell على الجهاز الهدف. `read -s` يأخذه في موجه لا يتم طباعته، لذا لا يظهر أبدًا في أمر:
```bash
-export FAILPROOFAI_KEY=""
+read -rs FAILPROOFAI_KEY && export FAILPROOFAI_KEY
```
## التثبيت
@@ -43,12 +42,18 @@ export FAILPROOFAI_KEY=""
```bash
npm install -g failproofai
- failproofai config --connect https://app.befailproof.ai --token "$FAILPROOFAI_KEY"
+ FAILPROOFAI_CLOUD_TOKEN="$FAILPROOFAI_KEY" failproofai config
```
- يتم إرسال نسخ الجلسات بشكل افتراضي. أضف `--no-transcripts` للإبلاغ عن نشاط hook وقرارات السياسة دون محتوى النسخة.
+ هذا الأمر الواحد هو كل الإعداد: يثبت daemon المحلي (root مرة واحدة)، ويربط الخطافات في كل agent CLI يجده، ويربط هذا الجهاز بـ Cloud. تمرير المفتاح عبر البيئة بدلاً من `--token` يبقيه خارج `ps`، حيث يمكن لكل مستخدم على الجهاز قراءة معاملات الأمر. لكنه لا يبقيه خارج سجل shell — قراءته باستخدام `read -s` هو ما يفعل ذلك. في CI، أدخله كسر مخفي وأبقِ تتبع shell (`set -x`) معطلاً، وإلا فإن التتبع سيطبعه.
+
+ يتم إرسال نصوص الجلسات افتراضيًا. أضف `--no-transcripts` للإبلاغ عن نشاط الخطاف وقرارات السياسة بدون محتوى النسخة.
+
+
+ لا تلجأ إلى `failproofai config --connect ` هنا. هذا العلم ينضم إلى جهاز **بالفعل** معد ويعود مباشرة — بدون daemon أو خطافات — لذا قد يظهر الجهاز في Cloud بينما لا يجمع ولا ينفذ أي شيء.
+
- إذا كان لدى هذا الجهاز بالفعل سجل وكيل، فقم بمعاينة واستيراد آخر سبعة أيام، ثم انتظر انتهاء التسليم. تخطَّ هذه الخطوة على جهاز جديد.
+ إذا كان لدى هذا الجهاز سجل وكيل بالفعل، معاينة واستيراد آخر سبعة أيام، ثم انتظر انتهاء التسليم. تخطّ هذه الخطوة على جهاز جديد.
```bash
failproofai backfill --since 7d --dry-run
@@ -56,30 +61,41 @@ export FAILPROOFAI_KEY=""
failproofai flush --wait
```
- افتح **Sessions** في Failproof AI واختر جلسة مستوردة.
+ افتح **Sessions** في Failproof AI وحدد جلسة مستوردة.
-
- يرفع هذا Failproof AI إلى إطار العمل الخاص بك ويثبت 39 سياسة مدمجة. استخدمها لرؤية قرارات السياسة المحلية وتجربة الإنفاذ قبل أن يدقق Failproof AI جلساتك ويكتب سياسات لوكلائك.
-
- دع المثبت يكتشف إطار العمل الخاص بك، أو حدد واحدًا بوضوح. كل واحد من الـ 12 هو قيمة `--cli` صالحة — `claude`، `codex`، `copilot`، `cursor`، `opencode`، `pi`، `hermes`، `openclaw`، `factory`، `devin`، `antigravity`، `goose`.
+
+ الخطوة السابقة قد ربطت بالفعل كل agent CLI تم اكتشافه. أعد تشغيلها لنظام واحد بشكل واضح عند الحاجة، أو لإضافة نظام تم تثبيته لاحقًا. كل واحد من الـ 12 هو قيمة `--cli` صحيحة — `claude`، `codex`، `copilot`، `cursor`، `opencode`، `pi`، `hermes`، `openclaw`، `factory`، `devin`، `antigravity`، `goose`.
```bash
failproofai policies --install --cli claude --scope user # a coding CLI
failproofai policies --install --cli hermes --scope user # a Slack/Telegram gateway
```
- يتم التحقق من حظر استدعاء أداة قبل تشغيلها على جميع الـ 12. يتم التحقق من بوابات نهاية الدور على 8 — راجع [قدرة الإنفاذ](/ar/reference/harnesses#enforcement-capability) للحصول على مصفوفة لكل إطار عمل.
+ يتم التحقق من حظر استدعاء الأداة قبل تشغيلها على الـ 12 جميعًا. يتم التحقق من بوابات نهاية الدوران على 8 — انظر [قدرة الإنفاذ](/ar/reference/harnesses#enforcement-capability) لمصفوفة كل نظام.
+
+
+ ربط الخطافات لا يفعل أي سياسة. الإعداد يختار عن قصد لا شيء — هذا قرارك — لذا خذ حزمة:
+
+ ```bash
+ failproofai policies add FailproofAI/policies
+ ```
+
+ يتم جلب الحزمة من إصدار GitHub الخاص بها، التحقق من المجموع الاختباري، وتثبيتها إلى العلامة المحددة التي تم حلها. تحمل 38 سياسة وتشغل 10 منها التي يشير بيانها الوصفية إلى أنها آمنة للتفعيل بدون إشراف. استخدمها لرؤية قرارات السياسة المحلية وتجربة الإنفاذ قبل أن يدقق Failproof AI جلساتك وكتابة السياسات للوكلاء.
+
+ اقرأ أي حزمة قبل أخذها باستخدام `failproofai policies show /`، وانظر [حزم السياسات](/ar/policies/packs) لأخذ جزء فقط من واحدة.
+
+ حتى يتم تشغيل هذا، الشيء الوحيد الذي ينفذ هو `block-failproofai-commands` — الحارس الذي يعمل دائمًا والذي يوقف وكيل من إيقاف Failproof AI. `failproofai policies` يسرد ما هو مشغل.
-
- اتبع [تشغيل أول فحص فشل](/ar/start/first-audit). استخدم هدفًا محددًا مثل "البحث عن جلسات أعاد فيها الوكيل محاولة استدعاء أداة فاشل دون تغيير نهجه".
+
+ اتبع [تشغيل أول فحص فشل](/ar/start/first-audit). استخدم هدفًا محددًا مثل بحث الجلسات حيث أعاد الوكيل محاولة أداة فاشلة دون تغيير نهجه.
- اتبع [منع أول فشل باستخدام سياسة](/ar/start/first-policy). ابدأ بوضع المراقبة، وافحص المطابقات، ثم فعّل النسخة المراجعة.
+ اتبع [منع أول فشل بسياسة](/ar/start/first-policy). ابدأ في وضع المراقبة، افحص المطابقات، ثم نفذ النسخة المراجعة.
- شغّل `failproofai config --status`. يبلغ الإعداد الصحي عن اتصال السحابة، وحالة daemon، وما إذا كان الإنفاذ موقوفًا.
+ قم بتشغيل `failproofai config --status`. يُبلّغ الإعداد الصحي عن اتصال السحابة وحالة daemon وما إذا كان الإنفاذ موقوفًا.
\ No newline at end of file
diff --git a/docs/ar/start/quickstarts/crewai.mdx b/docs/ar/start/quickstarts/crewai.mdx
index d948814b2..9ee22d1db 100644
--- a/docs/ar/start/quickstarts/crewai.mdx
+++ b/docs/ar/start/quickstarts/crewai.mdx
@@ -1,5 +1,4 @@
---
----
title: "CrewAI"
description: "قم بالتثبيت والمراقبة وشاهد أول تتبع لك."
icon: "/images/frameworks/crewai.svg"
diff --git a/docs/ar/start/quickstarts/custom-agents.mdx b/docs/ar/start/quickstarts/custom-agents.mdx
index e5b6d2347..a25d12073 100644
--- a/docs/ar/start/quickstarts/custom-agents.mdx
+++ b/docs/ar/start/quickstarts/custom-agents.mdx
@@ -1,5 +1,4 @@
---
----
title: "وكلاء مخصصون"
description: "غلّف وكيلك في ثلاث كتل `with` وسيبدأ التسجيل."
icon: "code"
diff --git a/docs/ar/start/quickstarts/langchain.mdx b/docs/ar/start/quickstarts/langchain.mdx
index b16ccee4b..53c3f78f1 100644
--- a/docs/ar/start/quickstarts/langchain.mdx
+++ b/docs/ar/start/quickstarts/langchain.mdx
@@ -1,5 +1,4 @@
---
----
title: "LangChain و LangGraph"
description: "التثبيت والأداة والحصول على أول تتبع لديك."
icon: "/images/frameworks/langchain.svg"
diff --git a/docs/ar/start/setup.mdx b/docs/ar/start/setup.mdx
index 3ba31a76e..6e79eb8fc 100644
--- a/docs/ar/start/setup.mdx
+++ b/docs/ar/start/setup.mdx
@@ -1,68 +1,89 @@
---
title: "اختر إعدادك"
-description: "اختر بين الفرض المحلي أو Failproof AI Cloud أو نشر موجه للمؤسسات."
+description: "اختر الفرض المحلي أو Failproof AI Cloud أو نشر المؤسسات."
icon: "waypoints"
---
- ثبّت الـ hooks والسياسات على جهاز. استخدم هذا عندما تحتاج إلى حماية فورية دون إرسال بيانات الجلسة إلى Cloud.
+ قم بإعداد جهاز بدون مفتاح Cloud واختر حزمة سياسة. استخدم هذا عندما تحتاج إلى حماية فورية دون إرسال بيانات الجلسة إلى Cloud.
- أضف جلسات مركزية وعمليات تدقيق وتقييمات عبر الإنترنت ولوحات معلومات ونبهات ونشر سياسة للأسطول.
+ أضف الجلسات المركزية والتدقيقات والتقييمات عبر الإنترنت والحسابات الشخصية والتنبيهات ونشر سياسات الأسطول.
-
- استخدم عناصر التحكم في المؤسسة والمفاتيح ذات النطاق والبنية الأساسية الخاصة ومتطلبات الأمان الخاصة بالنشر.
+
+ استخدم عناصر التحكم التنظيمية والمفاتيح المحدودة النطاق والبنية الأساسية الخاصة ومتطلبات الأمان الخاصة بالنشر.
+## الفرض المحلي
+
+شغّل `failproofai config` بدون مفتاح، ثم خذ حزمة باستخدام `failproofai policies add FailproofAI/policies`. في الطرفية، اختر **Not now — stay local** عندما يطلب الإعداد الاتصال بـ Cloud؛ بدون طرفية وبدون `FAILPROOFAI_CLOUD_TOKEN`، يبقى محليًا من تلقاء نفسه. يفرض الخيط الخلفي والخطافات على الجهاز، ولا يتم إرسال بيانات الجلسة إلى Cloud. للاتصال لاحقًا، اتبع الخطوات أدناه.
+
## مسار الإنتاج الموصى به
-1. قم بتوصيل جهاز غير موجه للإنتاج مع تفعيل التقاط النصوص.
+1. قم بتوصيل جهاز غير إنتاجي مع تمكين التقاط النصوص.
2. تحقق من الجلسات والتقييمات في Cloud.
-3. أنشئ عملية تدقيق لحالة فشل معروفة.
-4. نشّر السياسة الأولى في وضع المراقبة.
+3. أنشئ تدقيقًا لحالة فشل معروفة.
+4. انشر السياسة الأولى في وضع المراقبة.
5. قم بالتوسع إلى الإنتاج بعد مراجعة المطابقات والإيجابيات الكاذبة.
## توصيل جهاز بـ Cloud
-
- 1. انتقل إلى **الإدارة → المفاتيح** وأنشئ مفتاحًا يتمتع بصلاحيات `events:add` و `policies:pull`.
- 2. انسخ السر لمرة واحدة إلى الجهاز المستهدف.
- 3. بعد تشغيل أمر اتصال CLI، انتقل إلى **الإدارة → الفرض** وتأكد من ظهور الجهاز.
- 4. انتقل إلى **المراقبة → الأحداث** وتأكد من وصول حدثه الأول.
+
+ 1. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا باستخدام `events:add` و `policies:pull`.
+ 2. انسخ السر لمرة واحدة إلى الجهاز الهدف.
+ 3. بعد تشغيل أمر اتصال CLI، انتقل إلى **Admin → enforcement** وأكد ظهور الجهاز.
+ 4. انتقل إلى **Observe → Events** وأكد وصول حدثه الأول.
- درج المفتاح يعرض الصلاحيتين المطلوبتين بواسطة جهاز موصول: استقبال الأحداث وتسليم السياسة.
+ يعرض درج المفتاح المنحتين اللذين يحتاجهما جهاز متصل: استيعاب الأحداث وتوصيل السياسة.
- 
+ 
- بعد الاتصال، يجب أن يظهر الجهاز في الفرض مع حالة السياسة المطلوبة والمبلغ عنها.
+ بعد الاتصال، يجب أن يظهر الجهاز في الفرض مع حالة السياسة المرغوبة وحالة النشر.
- 
+ 
- يؤكد الحدث الأول الوارد أن الخادم يمكنه توصيل البيانات إلى Cloud، بشكل مستقل عن نشر السياسة.
+ يؤكد الحدث الأول الذي يصل على أن الخيط الخلفي يمكنه تسليم البيانات إلى Cloud، بشكل مستقل عن نشر السياسة.

- استمر فقط بعد رؤية الجهاز وحدثه الأول.
+ تابع فقط بعد أن يكون الجهاز وحدثه الأول مرئيين.
+ اقرأ السر لمرة واحدة في الشل. `read -s` يأخذه في موجه لا يتم صداه، لذلك لا يظهر أبدًا في أمر أو في سجل الشل:
+
```bash
- failproofai config --connect https://app.befailproof.ai \
- --token "$FAILPROOFAI_KEY" \
- --machine-label checkout-runner-01
+ read -rs FAILPROOFAI_CLOUD_TOKEN && export FAILPROOFAI_CLOUD_TOKEN
+ ```
+
+ ثم قم بإعداد الجهاز واختر سياساته وسمّه:
- failproofai policies --install --cli claude --scope user
+ ```bash
+ failproofai config
+
+ failproofai policies add FailproofAI/policies
+ failproofai config --machine-label checkout-runner-01
failproofai config --status
```
+ `failproofai config` يقوم بالإعداد بالكامل — الخيط الخلفي والخطافات لكل CLI وكيل يجده والاتصال بـ Cloud — ثم لا يختار أي سياسات، وهو ما الأمر الثاني موجود له.
+
+ يأتي التسمية **بعد** الاتصال وليس أثناء: `failproofai config --machine-label ` يعيد تسمية جهاز متصل بالفعل، وعلى جهاز غير متصل فإنه لا يفعل شيئًا سوى قول ذلك.
+
أضف `--no-transcripts` عندما يجب أن تبقى محتويات النصوص محلية.
+
+ في CI، قم بتعيين `FAILPROOFAI_CLOUD_TOKEN` من مخزن الأسرار بدلاً من `read -s`، واحتفظ بتتبع الشل (`set -x`) إيقاف، أو التتبع يطبع المفتاح.
+
+
+ على جهاز **بالفعل** تم إعداده، `failproofai config --connect ` يسجله وشيء آخر فقط. لا تستخدم هذا النموذج للتثبيت الأول: يعود قبل وجود الخيط الخلفي أو أي خطاف، تاركًا جهازًا يظهر في Cloud لكن لا يجمع أو يفرض شيئًا.
+
-يتحقق الاتصال بـ Cloud من استقبال الأحداث وتسليم السياسة بشكل مستقل. قد يكون المفتاح صالحًا لذلك لكنه ينقصه إحدى الصلاحيات المطلوبة. استخدم `failproofai config --status` لمعرفة الإمكانية المكونة.
+يتحقق الاتصال بـ Cloud من استيعاب الأحداث وتوصيل السياسة بشكل مستقل. قد يكون المفتاح صحيحًا إذن لكن ينقصه إذن واحد مطلوب. استخدم `failproofai config --status` لمعرفة القدرة المكونة.
- كتابة إعداد Cloud للبيانات الاعتماد المحلية فقط بعد نجاح الإمكانية ذات الصلة. لا تترك عملية التحقق الفاشلة جهازًا يبدو موصولًا عندما لا يكون كذلك.
+ يكتب إعداد Cloud بيانات اعتماد محلية فقط بعد نجاح القدرة ذات الصلة. التحقق الفاشل لا يترك جهازًا يبدو متصلاً عندما لا يكون كذلك.
\ No newline at end of file
diff --git a/docs/de/admin/keys-and-permissions.mdx b/docs/de/admin/keys-and-permissions.mdx
index 638bc6ac6..99ed8d814 100644
--- a/docs/de/admin/keys-and-permissions.mdx
+++ b/docs/de/admin/keys-and-permissions.mdx
@@ -4,26 +4,26 @@ description: "Erstellen Sie bereichsbegrenzte API-Schlüssel für Maschinen, Aut
icon: "key-round"
---
-API-Schlüssel gehören zu einer Organisation und tragen explizite Berechtigungen. Verwenden Sie separate Schlüssel für Agent-Ingestion, Policy-Auslieferung, Evaluatoren, CI-Automatisierung und administrative Skripte.
+API-Schlüssel gehören einer Organisation und tragen explizite Berechtigungen. Verwenden Sie separate Schlüssel für Agent-Ingestion, Policy-Auslieferung, Evaluatoren, CI-Automatisierung und administrative Skripte.
## Schlüssel erstellen und rotieren
- 1. Gehen Sie zu **Administration → Keys**, wählen Sie **Neuer Schlüssel** und geben Sie einen Workload-Namen ein.
+ 1. Gehen Sie zu **Administration → Keys**, wählen Sie **new key** und geben Sie einen Workload-Namen ein.
2. Wählen Sie ein Berechtigungs-Preset und passen Sie einzelne Berechtigungen nur dann an, wenn das Preset nicht ausreicht.
- 3. Erstellen Sie den Schlüssel und kopieren Sie das einmalige Secret sofort.
+ 3. Erstellen Sie den Schlüssel und kopieren Sie sein einmalig angezeigtes Secret sofort.
4. Öffnen Sie den Schlüssel später, um Berechtigungen zu aktualisieren, ihn zu deaktivieren oder das Secret neu zu generieren.
- Im Erstellungs-Drawer wählen Sie die minimal erforderlichen Berechtigungen für den Workload aus.
+ Im Erstellungs-Drawer wählen Sie die minimal erforderlichen Berechtigungen für den jeweiligen Workload.

Nach der Erstellung zeigt die Keys-Seite die dauerhaften Metadaten und Verwaltungsaktionen. Das einmalige Secret wird nicht erneut angezeigt.
- 
+ 
- Nutzen Sie diese Liste, um Berechtigungen regelmäßig zu überprüfen und Schlüssel zu deaktivieren, die keinem aktiven Workload mehr zugeordnet sind.
+ Nutzen Sie diese Liste, um Berechtigungen regelmäßig zu prüfen und Schlüssel zu deaktivieren, die keinem aktiven Workload mehr zugeordnet sind.
```bash
@@ -36,25 +36,25 @@ API-Schlüssel gehören zu einer Organisation und tragen explizite Berechtigunge
fp keys disable production-agents
```
- Leiten Sie die Ausgabe von create/regenerate sicher um oder erfassen Sie diese; das Secret wird nur einmal zurückgegeben.
+ Leiten Sie die Ausgabe von create/regenerate sicher um oder erfassen Sie sie; das Secret wird nur einmal zurückgegeben.
-Die zwei Berechtigungen, die eine verbundene Failproof AI-Maschine benötigt, sind unabhängig voneinander:
+Die beiden Berechtigungen, die eine verbundene Failproof AI-Maschine benötigt, sind unabhängig voneinander:
- `events:add` sendet Events und Session-Daten.
- `policies:pull` ruft zugewiesene Policy-Deployments ab.
-Schlüssel-Secrets werden bei der Erstellung oder Neu-Generierung angezeigt. Speichern Sie sie in einem Secret-Manager und rotieren Sie sie, ohne die interaktiven Zugangsdaten eines Operators wiederzuverwenden.
+Schlüssel-Secrets werden bei der Erstellung oder Regenerierung angezeigt. Speichern Sie sie in einem Secret-Manager und rotieren Sie sie, ohne dabei die interaktiven Anmeldedaten eines Operators wiederzuverwenden.
## Berechtigungskatalog
| Bereich | Berechtigungen |
| --- | --- |
| Events | `events:add`, `events:read` |
-| Keys | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` ist nur für menschliche Sitzungen |
+| Keys | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` ist nur für menschliche Sitzungen verfügbar |
| Users | `users:create`, `users:read`, `users:update`, `users:delete` |
-| Evaluations | `evaluations:read`, `evaluations:trigger` |
+| Evaluations | `evaluations:read`, `evaluations:trigger`, `evaluations:run` |
| Dashboards | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
| Queries | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
| Assistant | `agent:use` |
@@ -65,10 +65,10 @@ Schlüssel-Secrets werden bei der Erstellung oder Neu-Generierung angezeigt. Spe
| Policies | `policies:read`, `policies:write`, `policies:pull` |
| Usage | `usage:read` |
-`orgs:admin` ist dem Instanz-Operator vorbehalten und kann keinem Organisations-Schlüssel oder gewöhnlichen Mitglied gewährt werden. Veraltete `incidents:*`- und `alerts:ack`-Tokens werden aus Kompatibilitätsgründen akzeptiert und auf aktuelle `issues:*`-Berechtigungen normalisiert.
+`orgs:admin` ist dem Instanz-Operator vorbehalten und kann weder einem Organisations-Schlüssel noch einem gewöhnlichen Mitglied gewährt werden. Veraltete `incidents:*`- und `alerts:ack`-Token werden aus Kompatibilitätsgründen akzeptiert und auf die aktuellen `issues:*`-Berechtigungen normalisiert.
-Die eingebauten Berechtigungs-Presets sind `read-only`, `standard` und `admin`. `standard` ergänzt die Leseberechtigungen um das Auslösen von Evaluierungen, die Ausführung von Abfragen, die Bearbeitung von Issues und die Nutzung des Assistenten. Bei der Schlüsselerstellung werden menschliche Berechtigungen entfernt, auch wenn ein Berechtigungs-Preset diese enthält.
+Die integrierten Berechtigungs-Presets sind `read-only`, `standard` und `admin`. `standard` ergänzt die Leseberechtigungen um das Auslösen von Evaluierungen, die Ausführung von Queries, die Bearbeitung von Issues und die Nutzung des Assistenten. Bei der Schlüsselerstellung werden rein menschliche Berechtigungen entfernt, auch wenn ein Preset diese enthält.
- Instanz-bezogene Schlüssel können eine Organisation über den Header `X-AgentEye-Org` auswählen. Setzen Sie diesen bei Multi-Organisations-Deployments explizit; wird er weggelassen, kann die Standardorganisation ausgewählt werden.
+ Instanz-bezogene Schlüssel können eine Organisation über den `X-AgentEye-Org`-Header auswählen. Setzen Sie diesen bei Multi-Organisations-Deployments explizit; wird er weggelassen, wird möglicherweise die Standardorganisation ausgewählt.
\ No newline at end of file
diff --git a/docs/de/evaluations/deploy.mdx b/docs/de/evaluations/deploy.mdx
new file mode 100644
index 000000000..ee291fc06
--- /dev/null
+++ b/docs/de/evaluations/deploy.mdx
@@ -0,0 +1,55 @@
+---
+title: "Eine Evaluation deployen und versionieren"
+description: "Eine unveränderliche Version deployen, den aktiven Stand einsehen, neue Versionen veröffentlichen, zurückrollen und bereits vorhandene Sessions bewerten."
+icon: "cloud-upload"
+---
+
+## Deployment
+
+Wähle unten auf der Authoring-Seite **deploy `@`** aus. Die Version ist nach der Veröffentlichung unveränderlich: Ab diesem Zeitpunkt wird jede abgeschlossene Session, auf die die Bedingung zutrifft, damit bewertet.
+
+## Den aktiven Stand einsehen
+
+**Analyze → eval authoring** listet die gehosteten Definitionen deiner Organisation – also die Evaluationen, die der verwaltete Evaluator dafür ausführt. Jede Zeile zeigt:
+
+- Name, Key, Version und Ergebnistyp
+- die Quell-Prüfsumme, anhand derer sich deployte Revisionen unterscheiden lassen, ohne den Code öffnen zu müssen
+- ob die Evaluation **konditionell** ist oder für **alle abgeschlossenen Sessions** läuft – die Bedingung schränkt eine Evaluation auf bestimmte Agents oder Umgebungen ein
+- Timeout, Labels und den Zeitpunkt der letzten Änderung
+
+
+
+Du kannst die Liste durchsuchen oder nach Status filtern. Evaluationen, die dein eigener Worker registriert, werden hier nicht aufgeführt; ihre Ergebnisse tragen auf der [Evaluations-Seite](/de/sessions/evaluations) das Tag **customer**, gehostete dagegen **managed**.
+
+Eine Organisation kann gleichzeitig bis zu 100 verschiedene gehostete Evaluationen aktiviert haben.
+
+## Eine neue Version veröffentlichen
+
+Wähle in einer Zeile **new version** aus. Die Authoring-Seite öffnet sich mit dem Code dieser Version; ändere ihn, teste ihn und deploye ihn. Key und Ergebnistyp werden übernommen und können nicht geändert werden.
+
+Die Veröffentlichung einer Nachfolgeversion deaktiviert die Vorgängerversion, die jedoch in der Liste verbleibt. Ergebnisse behalten die Version, die sie erzeugt hat – ein Diagramm zeigt also genau, wann die neue Logik übernommen hat.
+
+## Zurückrollen
+
+Wähle bei der aktuellen Version **disable** und bei der gewünschten Version **enable** aus. Es wird nichts gelöscht, und alle Ergebnisse bleiben unverändert erhalten.
+
+## Eine Evaluation stoppen
+
+Wähle **disable** aus. Ohne aktivierte Version läuft die Evaluation für neue Sessions nicht mehr. Um eine Evaluation zu stoppen, die dein eigener Worker ausführt, registriere sie nicht mehr: Entferne sie aus dem Worker oder stoppe den Worker.
+
+## Bereits vorhandene Sessions bewerten
+
+Evaluationen laufen vorwärts: Eine jetzt deployte Version bewertet niemals eine Session, die davor geendet hat. Um historische Daten zu bewerten, öffne auf der Eval-Authoring-Seite **score sessions you already have**, wähle ein Zeitfenster von bis zu 90 Tagen und optional eine einzelne Evaluation aus, und zähle vor dem Ausführen nach. Die Anzahl entspricht genau dem, was ausgeführt wird – jedes Session-Evaluations-Paar darin ist eine abrechenbare Evaluation.
+
+Dabei werden nur Lücken gefüllt. Eine Session, für die bereits ein Ergebnis dieser Evaluation vorliegt, behält es, und das zweifache Ausführen desselben Zeitfensters bewertet nichts Neues.
+
+Um eine Session erneut zu bewerten – nach einer Korrektur oder für eine Session, die nicht sauber beendet wurde – wähle auf der Session-Seite **re-evaluate** aus. Das neue Ergebnis wird der Verlaufshistorie der Session hinzugefügt; frühere Ergebnisse bleiben erhalten.
+
+## Berechtigungen
+
+| Berechtigung | Ermöglicht |
+| --- | --- |
+| `evaluations:read` | Ergebnisse einsehen und die Eval-Authoring-Seite öffnen |
+| `evaluations:trigger` | Gehostete Definitionen einsehen, deployen, versionieren, aktivieren und deaktivieren; testen; Verlauf bewerten; eine Session neu bewerten |
+| `events:read` | Gegen echte Sessions testen und Entwürfe auf Payload-Keys stützen, zusätzlich zu `evaluations:trigger` |
+| `evaluations:run` | Einen eigenen Evaluator-Worker betreiben |
\ No newline at end of file
diff --git a/docs/de/evaluations/overview.mdx b/docs/de/evaluations/overview.mdx
new file mode 100644
index 000000000..6afd23c4e
--- /dev/null
+++ b/docs/de/evaluations/overview.mdx
@@ -0,0 +1,44 @@
+---
+title: "Agenten evaluieren"
+description: "Bewerte jede abgeschlossene Sitzung mit selbst definierten Evaluierungen: gehostete Python-Prüfungen oder LLM-Richter in deinem eigenen Worker."
+icon: "gauge"
+---
+
+Eine Evaluierung bewertet eine abgeschlossene Agenten-Sitzung. Wenn eine Sitzung endet, wird jede aktivierte Evaluierung, die auf sie zutrifft, ausgeführt und zeichnet die Ergebnisse auf – mit einer Begründung, die du direkt neben dem Trace lesen kannst:
+
+- ein **Score** von 0 bis 1, optional als bestanden oder nicht bestanden markiert
+- eine **Metrik**, z. B. eine Anzahl, eine Dauer oder Kosten, mit ihrer Einheit
+- eine **Assertion**, die bestanden hat oder nicht
+
+## Zwei Arten von Evaluatoren
+
+| | Gehostetes Python | Eigener Worker |
+| --- | --- | --- |
+| Geschrieben | Im Dashboard unter **Analyze → eval authoring** | In Python, mit dem [Evaluator SDK](/de/reference/evaluator-sdk) |
+| Läuft | Auf dem verwalteten Evaluator von Failproof AI, in einer Sandbox | Auf deiner eigenen Infrastruktur |
+| Am besten für | Deterministische, codebasierte Prüfungen | LLM-Richter, Modellaufrufe, Pakete, Secrets, Netzwerkzugriff, rechenintensive Verarbeitung |
+
+Gehostetes Python ist bewusst schlank gehalten: ein Ausdruck, keine Imports, kein Netzwerk. Alles, was ein Modell erfordert – etwa ein LLM-Richter, der bewertet, ob eine Antwort relevant war – läuft stattdessen in deinem eigenen Worker. Keine der beiden Varianten benötigt eine eingehende Verbindung: Worker holen abgeschlossene Sitzungen ab und übermitteln Ergebnisse über ausgehendes HTTPS.
+
+## Jede Organisation evaluiert ihre eigenen Agenten
+
+Evaluierungen gehören der Organisation, die sie definiert. Jede Organisation auf einer Instanz schreibt ihre eigenen – eigene Prüfungen, Bedingungen, Schwellenwerte und Labels – versioniert und deployt sie, ohne andere Organisationen zu beeinflussen, und sieht nur ihre eigenen Ergebnisse. Diese Ergebnisse lassen sich nach Agent, Umgebung, Evaluierung und Zeitraum filtern oder per Assistent abfragen.
+
+## Vom ersten Entwurf zu Live-Scores
+
+
+
+ Beschreibe, was gemessen werden soll, und lass den Assistenten einen Entwurf erstellen – oder schreibe sie selbst. Siehe [Eine Evaluierung schreiben](/de/evaluations/write).
+
+
+ Führe sie gegen echte Sitzungen aus, bevor sie live geht; nichts wird gespeichert. Siehe [Eine Evaluierung testen](/de/evaluations/test).
+
+
+ Deploye eine unveränderliche Version, veröffentliche neue Versionen bei Weiterentwicklung und kehre bei Bedarf zu einer früheren zurück. Siehe [Deployen und versionieren](/de/evaluations/deploy).
+
+
+ Visualisiere Scores über die Zeit, vergleiche Agenten und Umgebungen, und stelle Fragen an den Assistenten. Siehe [Evaluierungsergebnisse lesen](/de/sessions/evaluations).
+
+
+
+Evaluierungen wirken vorwärts: Eine jetzt deployete Version bewertet die Sitzungen, die ab sofort abgeschlossen werden. Um bereits vorhandene Sitzungen zu bewerten, [fülle sie nach](/de/evaluations/deploy#score-sessions-you-already-have).
\ No newline at end of file
diff --git a/docs/de/evaluations/test.mdx b/docs/de/evaluations/test.mdx
new file mode 100644
index 000000000..a27491e4c
--- /dev/null
+++ b/docs/de/evaluations/test.mdx
@@ -0,0 +1,29 @@
+---
+title: "Eine Evaluation testen"
+description: "Führen Sie eine Evaluation gegen Ihre echten Sitzungen aus, bevor Sie sie deployen. Es wird nichts gespeichert."
+icon: "flask-conical"
+---
+
+**Diese Evaluation testen** führt auf der Autorenseite den Code gegen Ihre echten Sitzungen auf der Evaluator-Flotte aus, ohne sie zu deployen. Es wird nichts gespeichert: Ein Fehler hier ist lediglich eine Vorschau, und das Deployen ist immer möglich.
+
+
+
+ Wählen Sie **check**, um den Code und die Bedingung gegen die Regeln der Sandbox zu kompilieren, ohne sie auf einer Sitzung auszuführen.
+
+
+ Grenzen Sie die übereinstimmenden Sitzungen nach Agent, Umgebung, Zeitraum oder Sitzungs-ID ein und wählen Sie bis zu 10 aus. Nehmen Sie sowohl Sitzungen auf, bei denen die Evaluation fehlschlagen soll, als auch solche, bei denen sie bestehen soll.
+
+
+ Wählen Sie **run against N sessions** und lesen Sie jede Zeile.
+
+
+
+| Zeile | Bedeutung |
+| --- | --- |
+| **ok** | Sie wurde ausgeführt. Die Zeile listet jeden Score, jede Metrik und jede zurückgegebene Assertion sowie die benötigte Zeit auf. |
+| **skipped** | Die Bedingung hat `False` zurückgegeben, sodass die Evaluation nicht ausgeführt wurde. Das ist ein Skip, kein Fehler. |
+| Failed | Sie hat einen Fehler ausgelöst, ist abgelaufen oder hat etwas verwendet, das die Sandbox ablehnt. Die Zeile gibt an, was passiert ist, und **Fix it** übergibt den Fehler an den Assistenten, wenn dieser helfen kann. |
+
+
+
+Ein Ergebnis verliert seine Aktualität in dem Moment, in dem Sie den Code bearbeiten; es wird abgeblendet statt wiederverwendet.
\ No newline at end of file
diff --git a/docs/de/evaluations/write.mdx b/docs/de/evaluations/write.mdx
new file mode 100644
index 000000000..8d49af3ae
--- /dev/null
+++ b/docs/de/evaluations/write.mdx
@@ -0,0 +1,76 @@
+---
+title: "Eine Evaluierung schreiben"
+description: "Beschreibe, was gemessen werden soll, und lass den Assistenten eine gehostete Python-Evaluierung entwerfen, oder schreibe den Code selbst. LLM-Richter laufen in deinem eigenen Worker."
+icon: "file-pen-line"
+---
+
+Gehostete Evaluierungen sind kleine, deterministische Python-Programme, die im Dashboard geschrieben und auf der Evaluator-Flotte von Failproof AI ausgeführt werden. Aufwendigere Logik — ein LLM-Richter, ein Paket, ein Secret, ein Netzwerkaufruf — läuft stattdessen [in deinem eigenen Worker](#write-it-in-your-own-worker).
+
+## Aus einer Beschreibung entwerfen
+
+1. Gehe zu **Analyze → eval authoring** und wähle **new eval**.
+2. Beschreibe auf Englisch, was gemessen werden soll, oder wähle unter **start from an example…** ein Beispiel aus, und klicke auf **draft**.
+3. Überprüfe die Felder und den generierten Code, [teste die Evaluierung](/de/evaluations/test) und [stelle sie bereit](/de/evaluations/deploy).
+
+
+
+Der Entwurf basiert auf den eigenen Events deiner Organisation: Die Seite liest aus, welche Payload-Schlüssel deine Sessions in den letzten sieben Tagen verwendet haben, sodass der Code auf tatsächlich vorhandene Schlüssel zugreift und nicht rät. Bevor der Entwurf übergeben wird, testet der Assistent ihn gegen bis zu fünf deiner neuesten Sessions, behebt nachweisbare Fehler — in bis zu drei Runden — und prüft einmalig, ob der Code das misst, was du angefragt hast. Formuliere die Beschreibung möglichst präzise: Zu allgemeine Prompts sind langsamer und können zu Timeouts führen. Überprüfe den Code in jedem Fall; das Deployment wird dadurch nicht blockiert.
+
+## Die Felder befüllen
+
+| Feld | Bedeutung |
+| --- | --- |
+| name | Anzeigename. Kann später geändert werden |
+| key | Der stabile Bezeichner, unter dem die Ergebnisse angezeigt werden, z. B. `code_assistant_quality_gate` |
+| version | Eine beliebige Versionszeichenkette ohne Leerzeichen, z. B. `1.0.0` |
+| result | **score** (0 bis 1), **metric** (eine Zahl mit Einheit) oder **assertion** (bestanden oder nicht) |
+| timeout seconds | Standard: 30. Die Sandbox bricht einzelne Läufe nach 60 Sekunden ab |
+| labels | Bis zu 20, kommagetrennt. Können später geändert werden |
+| condition | Optional. Ein Python-Ausdruck; die Evaluierung läuft nur für Sessions, bei denen er `True` ergibt |
+
+Verwende die Bedingung, um eine Evaluierung auf die dafür vorgesehenen Agents und Umgebungen einzuschränken:
+
+```python
+session.agent_id == "code-assistant" and session.environment == "production"
+```
+
+Key, Version, Ergebnistyp, Bedingung und Code sind nach dem Deployment unveränderlich: Um sie zu ändern, muss eine neue Version veröffentlicht werden. Name, Labels und der Aktivierungsstatus bleiben bearbeitbar.
+
+## Den Code selbst schreiben
+
+Der **evaluator code** ist ein einzelner Python-Ausdruck, der `EvalResult(...)` zurückgibt, wobei `session` im Scope verfügbar ist. Dieses Beispiel bewertet den Anteil der Tool-Ergebnisse, die mit ok zurückgekehrt sind:
+
+```python
+EvalResult(
+ score=Score(
+ len([e for e in session.events_of_type("tool_result") if e.payload.get("status") == "ok"])
+ / max(1, session.count("tool_result"))
+ ),
+ metrics={"tool_calls": Metric(session.count("tool_use"), unit="calls")},
+ reasoning="Share of tool results that came back ok.",
+)
+```
+
+Ein Ergebnis beginnt mit dem eigenen Key der Evaluierung, im deklarierten Typ: `score=` für eine Score-Evaluierung, oder ein `metrics`- bzw. `assertions`-Eintrag mit dem Namen des Keys für eine Metrik- oder Assertion-Evaluierung. Weitere Metriken und Assertions können mitsenden — bis zu 25 Ergebnisse pro Lauf.
+
+| Im Scope | Stellt bereit |
+| --- | --- |
+| `session` | `session_id`, `agent_id`, `environment`, `started_at`, `ended_at`, `event_count` und `events`, sowie `count(event_type)` und `events_of_type(event_type)` |
+| Jedes Event | `id`, `ts`, `event_type` und `payload` |
+| Ergebnistypen | `EvalResult`, `Score`, `Metric`, `Assertion` und `ConditionResult` für eine Bedingung |
+| Builtins | `abs`, `all`, `any`, `bool`, `dict`, `float`, `int`, `len`, `list`, `max`, `min`, `range`, `round`, `set`, `sorted`, `str`, `sum`, `tuple` |
+
+Nichts anderes ist erreichbar: keine Imports und keine Attribute über die Session-Daten sowie einfache String- und Dictionary-Methoden wie `get`, `lower` und `split` hinaus, die aufgerufen werden müssen anstatt nur referenziert zu werden. Payload-Schlüssel sind das, was deine Agents senden — `status` oben ist nur ein Beispiel — lies sie daher von einer echten Session ab. **format** formatiert den Code, **fix** beauftragt den Assistenten, ihn zu reparieren. Der Code kann bis zu 128 KiB groß sein, die Bedingung bis zu 16 KiB.
+
+
+
+## Im eigenen Worker schreiben
+
+Wenn eine Evaluierung ein Modell, ein Paket, ein Secret oder das Netzwerk benötigt, schreibe sie mit dem [Evaluator SDK](/de/reference/evaluator-sdk) und führe sie auf deiner eigenen Infrastruktur aus. Sie verwendet dieselben Ergebnistypen, und ihre Ergebnisse erscheinen neben gehosteten Evaluierungen, gekennzeichnet mit **customer**:
+
+```python
+@app.eval("answer_relevance", version="judge-v1", labels=["llm_judge"], timeout_seconds=30)
+async def answer_relevance(session):
+ value, reasoning = await ask_judge(session) # your LLM call: a 0-1 score and why
+ return EvalResult(score=Score(value, passed=value >= 0.7), reasoning=reasoning)
+```
\ No newline at end of file
diff --git a/docs/de/policies/deploy.mdx b/docs/de/policies/deploy.mdx
index 7093b5ab9..42209a55c 100644
--- a/docs/de/policies/deploy.mdx
+++ b/docs/de/policies/deploy.mdx
@@ -1,51 +1,94 @@
---
-title: "Richtlinien deployen"
-description: "Eine geprüfte Richtlinienversion auf den vorgesehenen Maschinen ausrollen."
+title: "Eine Richtlinie bereitstellen"
+description: "Eine getestete Richtlinienversion im Beobachtungsmodus auf Maschinen ausrollen, durchsetzen und bestätigen, dass alle Maschinen sie erhalten haben."
icon: "cloud-upload"
---
-Ein Deployment verbindet eine oder mehrere Richtlinienversionen mit einer Zielgruppe eingeschriebener Maschinen.
+Eine Bereitstellung überträgt veröffentlichte Richtlinienversionen auf eine Maschine, jeweils mit einem von zwei Effekten:
-## Deployment anwenden
+- **Beobachten** zeichnet auf, was die Richtlinie getan hätte, blockiert jedoch nichts.
+- **Durchsetzen** handelt gemäß der Entscheidung: ein `deny` blockiert den Aufruf und ein `instruct` lenkt den Agenten.
+
+## Eine Maschine hinzufügen
+
+Eine Maschine erscheint unter **Admin → enforcement**, sobald sie mit Cloud verbunden ist. Falls die gewünschte noch nicht dort angezeigt wird:
- 1. Gehe zu **Admin → Durchsetzung**, finde die Maschine und klappe ihre Zeile auf.
- 2. Wähle **Bearbeiten**, füge die geprüfte Richtlinienversion hinzu und wähle **Beobachten** oder eine durchsetzende Wirkung.
- 3. Wende die Änderung an, warte dann auf den nächsten Check-in der Maschine und bestätige deren Deployment- und Coverage-Status.
- 4. Gehe zu **Beobachten → Richtlinie**, um Live-Entscheidungen einzusehen.
-
- 
+ 1. Gehen Sie zu **Administration → Keys** und erstellen Sie einen Schlüssel mit `policies:pull`, damit die Maschine Bereitstellungen empfangen kann, und `events:add`, damit ihre Entscheidungen Cloud erreichen.
+ 2. Verbinden Sie die Maschine mit diesem Schlüssel — [Eine Maschine mit Cloud verbinden](/de/start/setup#connect-a-machine-to-cloud) führt Sie durch den Vorgang.
+ 3. Bestätigen Sie, dass sie unter **Admin → enforcement** angezeigt wird.
- Deploye über die CLI mit `fp fleet`. Überprüfe das resultierende Set, bevor du es anwendest — `deploy` gibt den vollständigen Plan aus und fragt **nur in einem interaktiven Terminal ohne `--json`**. Mit `--json`, mit `--yes` oder bei umgeleitetem stdin (ein CI-Schritt, ein Skript, ein Agent der eine Shell aufruft) wird der Plan sofort ohne Ausgabe und ohne Abfrage angewendet — führe daher zuerst `fp fleet show ` aus, wenn du den Plan prüfen möchtest:
+ Auf der Maschine:
+
+ ```bash
+ npm install -g failproofai
+ failproofai config
+ failproofai config --status
+ ```
+
+ Im Terminal fragt `failproofai config`, ob eine Verbindung zu Cloud hergestellt werden soll, und fordert den Schlüssel an einer maskierten Eingabeaufforderung an. Bestätigen Sie anschließend von überall, dass die Maschine registriert ist, mit `fp fleet list`.
+
+
+
+## Im Beobachtungsmodus bereitstellen
+
+
+
+ 1. Gehen Sie zu **Admin → enforcement**, suchen Sie die Maschine und klappen Sie deren Zeile auf.
+ 2. Wählen Sie **Bearbeiten**, fügen Sie die getestete Richtlinienversion hinzu und wählen Sie **Beobachten**.
+ 3. Übernehmen Sie die Änderung, warten Sie dann auf den nächsten Check-in der Maschine und bestätigen Sie deren Bereitstellungs- und Abdeckungsstatus.
+ 4. Gehen Sie zu **Observe → policy**, um Live-Entscheidungen zu prüfen.
+ 
+
+
```bash
fp fleet list
fp fleet show
- fp fleet deploy --add no-force-push
+ fp fleet deploy --add no-force-push:observe
```
- `fp fleet diff ` zeigt Absicht vs. Lieferung (eine Maschine wird als `behind` angezeigt, bis sie das nächste Mal abfragt), `fp fleet history ` listet die Generationen auf und `fp fleet rollback ` stellt eine davon wieder her — dies schlägt fehl, wenn diese Generation eine inzwischen deaktivierte oder gelöschte Richtlinie benennt.
+ Das Suffix `:observe` sorgt für den Beobachtungsmodus: ein einfaches `--add no-force-push` ohne Suffix behält den Effekt bei, den die Maschine für diese Richtlinie bereits hat, und setzt andernfalls durch. Wechseln Sie später mit `--add no-force-push:enforce` zum Durchsetzungsmodus.
+
+ `deploy` **ersetzt den gesamten Richtliniensatz der Maschine** mit dem Ergebnis. Es gibt den Plan aus und fragt vor der Anwendung nach — jedoch nur bei einem interaktiven Terminal. Mit `--yes`, unter `fp --json` oder bei umgeleiteter stdin (ein CI-Schritt, ein Skript, ein Agent, der ausführt) wird ohne Rückfrage angewendet; der Plan wird dennoch ausgegeben oder als `plan` unter `--json` zurückgegeben.
- Überprüfe die Maschine selbst mit `failproofai config --status` und verwende nach dem Deployment `fp sessions --env production --since 24h` sowie `fp events --event-type hook_completed`, um zu verifizieren, dass Aktivität die Cloud erreicht.
+ Auf der Maschine listet `failproofai policies` die von Cloud verwalteten Richtlinien auf, die ausgeführt werden, und `failproofai config --status` zeigt deren Verbindung an. Verwenden Sie `fp sessions --env production --since 24h` und `fp events --event-type hook_completed`, um zu bestätigen, dass die Aktivität die Cloud erreicht.
-
- Deploye eine geprüfte Version, kein veränderliches Draft, beginnend mit einer Nicht-Produktionsmaschine oder einer kleinen Gruppe, deren Sessions du einsehen kannst.
+
+ Wählen Sie die veröffentlichte Version und die Maschinen aus, auf denen sie ausgeführt werden soll.
-
- Überprüfe Treffer, Begründungen, betroffene Tools und False Positives, ohne die Arbeit zu blockieren.
+
+ Überprüfen Sie Übereinstimmungen, Begründungen, betroffene Tools und Falschmeldungen, während nichts blockiert wird.
-
- Stelle nach dem Deployment auf Durchsetzung um, wenn beobachtete Treffer unsichere Aktionen von gültigen trennen, und bestätige dann, dass jede vorgesehene Maschine das Deployment abgerufen hat und Entscheidungen meldet.
+
+ Wechseln Sie den Effekt zum Durchsetzen, sobald die beobachteten Übereinstimmungen unsichere Aktionen von gültigen trennen, und bestätigen Sie dann, dass jede vorgesehene Maschine die Änderung abgerufen hat und Entscheidungen meldet.
-Maschinen benötigen die Berechtigung `policies:pull`. Die Ereignismeldung wird separat über `events:add` gesteuert; überprüfe beides, wenn du Cloud-Analyse und Durchsetzung erwartest.
+## Abdeckung prüfen
+
+Die Abdeckung zeigt, ob eine Richtlinie dort ausgeführt wird, wo das Risiko besteht.
+
+1. Gehen Sie zu **Admin → enforcement** und überprüfen Sie die Summen für Durchsetzen und Beobachten.
+2. Suchen Sie eine Maschine nach ID oder Label, oder filtern Sie nach Maschinen, bei denen eine Richtlinie fehlt.
+3. Klappen Sie eine Zeile auf, um zugewiesene Richtlinien, gemeldete Bereitstellung, letzten Check-in und Verlauf zu vergleichen.
+4. Aktualisieren Sie nach dem Abrufintervall der Maschine, wenn eine angewendete Bereitstellung noch aussteht.
+
+
+
+Achten Sie auf Maschinen, die die neueste Bereitstellung nie abgerufen haben, registrierte Maschinen, die keine Meldungen mehr senden, eine Richtlinie, die der falschen Umgebung zugewiesen ist, und Versionsabweichungen nach einem unterbrochenen Update.
+
+Kennzeichnen Sie Maschinen nach Workload und Umgebung — Hostnamen allein überleben Autoskalierung oder Austausch selten:
+
+```bash
+failproofai config --machine-label checkout-runner-03
+```
- Die Verwaltung der Durchsetzung ist ein administrativer Cloud-Workflow. Behandle rein root-basierte Durchsetzungsrouten nicht als gewöhnliche Kunden-`/v1`-API-Endpunkte.
+ Die Durchsetzungsverwaltung ist ein administrativer Cloud-Workflow. Behandeln Sie root-exklusive Durchsetzungsrouten nicht als gewöhnliche Kunden-`/v1`-API-Endpunkte.
\ No newline at end of file
diff --git a/docs/de/policies/editor.mdx b/docs/de/policies/editor.mdx
index 77ab4898a..e14bf1d09 100644
--- a/docs/de/policies/editor.mdx
+++ b/docs/de/policies/editor.mdx
@@ -1,49 +1,96 @@
---
-title: "Policy-Editor"
-description: "Erstelle und überarbeite versionierte Richtlinien auf Basis eines bestätigten Fehlermusters."
+title: "Eine Richtlinie schreiben"
+description: "Lass Failproof AI eine Richtlinie aus einem Audit-Befund entwerfen, oder schreibe die Quelle selbst – dann überprüfen, testen und veröffentlichen."
icon: "file-pen-line"
---
-Verwende den Policy-Editor, um einen Fund oder ein Problem in eine einsetzbare Regel umzuwandeln. Halte Erstellung und Deployment getrennt, damit ein Entwurf das Live-Verhalten nicht stillschweigend verändern kann.
+Es gibt zwei Möglichkeiten, eine Richtlinie zu schreiben: Failproof AI entwirft sie aus einem Audit-Befund, oder du schreibst die Quelle selbst. Nichts wird veröffentlicht oder bereitgestellt, bis du es entscheidest.
-Wenn ein Problem ein wiederholbares Aktionsmuster aufweist, öffne es unter **Analyze → issues** und wähle **generate policy**. Failproof AI erklärt zunächst, ob eine Richtlinie das Problem abbilden kann, und überführt dann den geprüften Intent sowie den Fundkontext in den Editor. Die generierte Quelle bleibt so lange ein Entwurf, bis du sie veröffentlichst.
+## Eine Richtlinie aus einem Audit schreiben
-## Eine Richtlinienversion veröffentlichen
+Ein Audit findet einen Fehler; eine Richtlinie verhindert, dass er sich wiederholt. Failproof AI entwirft die Richtlinie anhand der Belege des Befunds.
+
+### 1. Audit durchführen
+
+Führe einen [Audit](/de/audits/run) über die Sitzungen durch, in denen der Fehler auftritt. Jeder Befund enthält seine Belege, eine Grundursache und einen vorgeschlagenen Präventionspfad. Arbeite mit einem Befund, der ein **wiederholbares Aktionsmuster** aufweist – eine Richtlinie kann nur das stoppen, was sie in einem Hook-Ereignis erkennen kann.
+
+### 2. Den Entwurf generieren
- 1. Gehe zu **Admin → policy editor** und beschreibe im Bereich **compose** das Fehlermuster, oder füge den JavaScript-Richtlinienquellcode ein.
- 2. Validiere den Quellcode und behebe alle gemeldeten Fehler.
- 3. Trage die Richtlinienidentität ein und veröffentliche sie. Nutze anschließend **library**, um Versionen zu vergleichen oder zu deaktivieren.
- 4. Wähle **enforcement**, sobald die Version für ein maschinelles Rollout bereit ist.
+ 1. Öffne das Problem des Befunds unter **Analyze → issues** und überprüfe die zitierten Sitzungen, die Grundursache und die Empfehlung.
+ 2. Wähle **generate policy**. Failproof AI beurteilt zunächst, ob eine Richtlinie das Problem überhaupt ausdrücken kann. Ein **no policy**-Ergebnis bedeutet, dass die Lösung eine Benachrichtigung, eine Workflow-Änderung oder eine Person erfordert – keine Richtlinie.
+ 3. Wähle **write this policy**. Der Titel des Problems, der Befund, die Grundursache, die Empfehlung und die vorgeschlagene Durchsetzungsabsicht werden als Entwurf in **Admin → policy editor** übernommen. Verwende **open the editor anyway**, wenn du mit der Eignungsprüfung nicht einverstanden bist.
- 
+ 
- Veröffentliche über die CLI mit `fp policies publish`. Dieser Befehl erstellt eine **neue Version** und bearbeitet keine bestehende in-place. Außerdem prüft er den Quellcode syntaktisch mit node, bevor er ihn überträgt – da nachgelagerte Schritte dies nicht tun, würde ein Syntaxfehler sonst erst zur Enforcement-Zeit auf dem Zielsystem auftreten:
+ Lies die Belege und erstelle dann einen Entwurf mit dem Assistenten. `compose` gibt die Quelle zur Überprüfung aus und veröffentlicht nichts:
```bash
- fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny
- fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+ fp issues show
+ fp audits finding
+ fp policies compose "Block git push --force on release branches"
```
- Das Veröffentlichen deployt nichts – eine neue Version liegt ungenutzt vor, bis `fp fleet deploy` sie auf einem Gerät aktiviert. `fp policies compose ""` entwirft Quellcode mithilfe des Cloud-Assistenten und gibt ihn zur Überprüfung aus, anstatt ihn direkt zu veröffentlichen.
-
- Um eine Richtlinie stattdessen in eine lokale Agenten-CLI (nicht Cloud) zu installieren, verwende `failproofai policies --install --custom ./checkout.policies.ts --cli claude --scope project`.
+ `compose` benötigt eine angemeldete Sitzung (`fp login`), deren Rolle `policies:write` besitzt; API-Keys werden abgelehnt.
-## Checkliste für die Erstellung
+### 3. Den Entwurf überprüfen
+
+Ein Entwurf ist ein Ausgangspunkt, kein Urteil. Überprüfe vor der Veröffentlichung, ob er:
+
+1. Den Fehlermodus in operativer Sprache benennt.
+2. Nur die Hook-Ereignisse und Tools abgleicht, die genug Belege für eine Entscheidung liefern.
+3. Die engste Bedingung verwendet, die die unsichere Aktion erfasst.
+4. Eine Begründung zurückgibt, die dem Agenten mitteilt, was er stattdessen tun soll.
+5. `instruct` verwendet, wenn der Agent den Kurs sicher korrigieren kann, und `deny` nur dann, wenn das Zulassen der Aktion inakzeptabel oder irreversibel ist.
+
+Validiere die Quelle im Editor und behebe jeden gemeldeten Fehler.
+
+### 4. Testen und dann veröffentlichen
+
+Führe **backtest** unter der Quelle durch, bevor du veröffentlichst: Es spielt den Entwurf gegen Aufrufe ab, die deine Agenten bereits gemacht haben, und zählt die funktionierenden Aufrufe, die unterbrochen worden wären. [Eine Richtlinie testen](/de/policies/test) behandelt das sowie die anderen Prüfungen.
+
+Wenn sie sich korrekt verhält, gib die Richtlinienidentität ein und wähle **publish version**. Das Veröffentlichen erstellt eine unveränderliche Version und stellt nichts bereit: Sie liegt ungenutzt, bis du sie [bereitstellst](/de/policies/deploy). Über ein Terminal:
+
+```bash
+fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+```
+
+`publish` prüft die Quelle syntaktisch, bevor sie gesendet wird – ein Syntaxfehler wird also hier aufgedeckt und nicht zur Laufzeit auf einem Gerät.
+
+## Selbst schreiben
+
+Eine Richtlinie ist JavaScript oder TypeScript gegen die `failproofai`-API:
+
+```ts
+import { customPolicies, allow, deny } from "failproofai";
+
+customPolicies.add({
+ name: "protect-production-paths",
+ description: "Block writes to production configuration",
+ match: { events: ["PreToolUse"] },
+ fn: async (ctx) => {
+ if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
+ const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
+ if (path.split("/").includes("production")) {
+ return deny("Writes to production configuration require approval.");
+ }
+ return allow();
+ },
+});
+```
+
+Dies trifft auf `production/config.yml`, `/srv/production/config.yml`, `/srv/production` und `C:\\production\\config.yml` für sowohl `Write` als auch `Edit` zu, jedoch nicht auf `production-backup`: `production` muss ein vollständiges Pfadsegment sein. Der Kontext enthält außerdem den Ereignistyp, normalisierte Nutzdaten, Sitzungsmetadaten, Parameter und die Quell-CLI, sofern verfügbar – siehe das [Policy SDK](/de/reference/policy-sdk).
+
+Um es als Version zu veröffentlichen, füge die Quelle in **compose** unter **Admin → policy editor** ein und folge den Schritten 3 und 4 oben, oder veröffentliche die Datei über ein Terminal mit `fp policies publish`.
-1. Benenne das Fehlermuster in operativer Sprache.
-2. Wähle die Hook-Events und Tools aus, die ausreichend Kontext für eine Entscheidung liefern.
-3. Formuliere die engstmögliche Bedingung, die unsicheres Verhalten trifft.
-4. Gib eine Begründung zurück, die dem Agenten oder Operator mitteilt, wie weiter vorzugehen ist.
-5. Füge Beispiele hinzu, die übereinstimmen sollen, sowie Beispiele, die weiterhin erlaubt bleiben müssen.
-6. Speichere eine neue Version und fordere eine Überprüfung an.
+Um sie ohne Cloud auf einem Gerät auszuführen, speichere sie unter `.failproofai/policies/` mit einem Namen, der auf `policies.js`, `policies.mjs` oder `policies.ts` endet – diese werden automatisch im Projekt- und Benutzerbereich geladen – oder installiere sie über den Pfad:
-Verwende `instruct`, wenn der Agent den Kurs sicher korrigieren kann. Verwende `deny`, wenn das Zulassen der Aktion ein inakzeptables oder irreversibles Risiko darstellen würde.
+```bash
+failproofai policies --install --custom ./security.policies.ts --scope project
+```
-
- Richtlinienversionen sind unveränderliche Deployment-Eingaben. Das Bearbeiten eines Entwurfs erstellt eine neue Version; bestehende Versionen, die bereits Maschinen zugewiesen sind, sollten nicht überschrieben werden.
-
\ No newline at end of file
+Gib jeder Richtlinie einen Namen, der über Konventions-, benutzerdefinierte, Paket- und Cloud-verwaltete Richtlinien hinweg eindeutig ist.
\ No newline at end of file
diff --git a/docs/de/policies/failure-behavior.mdx b/docs/de/policies/failure-behavior.mdx
index 7a325c148..551195f30 100644
--- a/docs/de/policies/failure-behavior.mdx
+++ b/docs/de/policies/failure-behavior.mdx
@@ -1,19 +1,19 @@
---
title: "Fehlerverhalten"
-description: "Verstehen Sie, was passiert, wenn die Policy-Auswertung oder der lokale Daemon nicht erreichbar ist."
+description: "Verstehen Sie, was passiert, wenn die Policy-Auswertung oder der lokale Daemon nicht verfügbar ist."
icon: "shield-alert"
---
-Failproof AI ist so konzipiert, dass ein Durchsetzungsfehler sichtbar wird, anstatt riskante Aktionen stillschweigend zuzulassen.
+Failproof AI ist so konzipiert, dass ein Erzwingungsfehler sichtbar wird, anstatt riskante Aktionen stillschweigend zuzulassen.
## Einen Failure-Closed-Block diagnostizieren
- 1. Gehen Sie zu **Admin → enforcement** und öffnen Sie den Rechner.
- 2. Prüfen Sie dessen letzten Check-in, zugewiesene Deployment und gemeldetes Deployment.
- 3. Gehen Sie zu **Observe → policy** und öffnen Sie die Sitzung der abgelehnten Entscheidung.
- 4. Überprüfen Sie, ob der Grund auf Daemon-Erreichbarkeit, Versionsabweichung oder die Policy selbst hinweist.
+ 1. Gehen Sie zu **Admin → Enforcement** und öffnen Sie die Maschine.
+ 2. Prüfen Sie das letzte Check-in, das zugewiesene Deployment und das gemeldete Deployment.
+ 3. Gehen Sie zu **Observe → Policy** und öffnen Sie die Sitzung der abgelehnten Entscheidung.
+ 4. Prüfen Sie, ob der Grund auf Daemon-Erreichbarkeit, Versionsunterschiede oder die Policy selbst hinweist.
@@ -23,45 +23,47 @@ Failproof AI ist so konzipiert, dass ein Durchsetzungsfehler sichtbar wird, anst
failproofai config
```
- Ein erneutes Ausführen von `failproofai config` aktualisiert und startet den Daemon nach einem Paket-Upgrade neu.
+ Das erneute Ausführen von `failproofai config` aktualisiert und startet den Daemon nach einem Paket-Upgrade neu.
-Auf einem Rechner, der für die Verwendung von `failproofaid` konfiguriert ist, ist der Daemon der einzige Auswerter. Wenn er nicht erreichbar ist oder seine Protokollversion nicht mit der CLI übereinstimmt, schlägt die Hook-Auswertung geschlossen fehl. Die Aktion wird mit einem Hinweis abgelehnt, der den Operator auffordert, den Daemon zu überprüfen oder zu aktualisieren.
+Auf einer Maschine, die für die Verwendung von `failproofaid` konfiguriert ist, ist der Daemon der einzige Auswertende. Wenn er nicht erreichbar ist oder seine Protokollversion nicht mit der CLI übereinstimmt, schlägt die Hook-Auswertung geschlossen fehl. Die Aktion wird mit einem Hinweis abgelehnt, der den Operator anweist, den Daemon zu überprüfen oder zu aktualisieren.
-Vor der Daemon-Konfiguration werten Hooks Policies prozessintern aus. Sobald die Daemon-Konfiguration gespeichert ist, fällt Failproof AI bei einem Daemon-Ausfall nicht stillschweigend auf einen zweiten Auswerter zurück.
+Vor der Daemon-Konfiguration werten Hooks Policies in-process aus. Sobald die Daemon-Konfiguration gespeichert ist, fällt Failproof AI bei einem Daemon-Fehler nicht stillschweigend auf einen zweiten Auswertenden zurück.
## Auf eine Failure-Closed-Entscheidung reagieren
1. Führen Sie `failproofai config --status` aus.
-2. Wenn sich die Versionen unterscheiden, führen Sie `failproofai config` nach dem Paket-Update erneut aus.
-3. Wenn der Daemon nicht erreichbar ist, prüfen Sie dessen Dienststatus und lokale Logs.
-4. Setzen Sie die Agenten-Arbeit erst fort, wenn ein bekannter Policy-Auswertungspfad wieder funktioniert.
+2. Wenn sich die Versionen unterscheiden, führen Sie `failproofai config` nach dem Aktualisieren des Pakets erneut aus.
+3. Wenn der Daemon nicht erreichbar ist, prüfen Sie seinen Service-Status und die lokalen Logs.
+4. Setzen Sie die Agent-Arbeit erst fort, wenn ein bekannter Policy-Auswertungspfad fehlerfrei funktioniert.
- Wiederholen Sie die blockierte Aktion nicht wiederholt. Eine Failure-Closed-Antwort bedeutet, dass das System nicht feststellen konnte, ob die Aktion sicher war.
+ Versuchen Sie nicht wiederholt, die blockierte Aktion erneut auszuführen. Eine Failure-Closed-Antwort bedeutet, dass das System nicht feststellen konnte, ob die Aktion sicher war.
## Ein Pack lässt sich nicht laden
-Ein Rechner, der angewiesen wurde, ein Pack durchzusetzen, und es nicht ausführen kann, lehnt ab, anstatt stillschweigend fortzufahren. Der Auslöser ist eine **aufgezeichnete Erwartung**, niemals eine leere: Ein Rechner ohne installierte Packs ist still, während ein Pack, das deklariert wurde und sich nicht auflösen lässt – oder das weniger registriert als sein Manifest angibt – ablehnt.
+Eine Maschine, die angewiesen wurde, ein Pack durchzusetzen, und es nicht ausführen kann, lehnt ab, anstatt still weiterzumachen. Der Auslöser ist eine **aufgezeichnete Erwartung**, niemals eine leere: Eine Maschine ohne installierte Packs ist still, während ein Pack, das deklariert ist und sich nicht auflösen lässt – oder das weniger registriert, als sein Manifest deklariert – ablehnt.
-Die Ablehnung ist **eng gefasst**, anders als bei einem nicht erreichbaren Daemon. Ein Daemon, der nicht erreicht werden kann, bedeutet, dass überhaupt keine Auswertung stattgefunden hat und daher nichts als sicher eingestuft werden kann. Ein Pack, das sich nicht laden lässt, hat eine aufzählbare Menge fehlender Guards, da jede deklarierte Policy ihren eigenen `match` mitbringt – es lehnt daher nur die Ereignisse und Tools ab, die diese Policies abdeckten, während alles andere weiterläuft.
+Die Ablehnung ist **eng gefasst**, anders als bei einem nicht erreichbaren Daemon. Ein Daemon, der nicht erreichbar ist, bedeutet, dass überhaupt keine Auswertung stattgefunden hat, sodass nichts als sicher eingestuft werden kann. Ein Pack, das sich nicht laden lässt, hat einen aufzählbaren Satz fehlender Guards, da jede deklarierte Policy ihren eigenen `match` trägt – es lehnt also nur die Ereignisse und Tools ab, die diese Policies abdeckten, und alles andere wird fortgesetzt.
Es wird nicht ausgelöst bei:
- einem `observe`-Pack, das konstruktionsbedingt auswertet und verwirft
-- Policies, die nie übernommen oder explizit deaktiviert wurden
-- einem Pack, das der Loader nie erhalten hat, wo sich „keine Registrierungen" nicht von einem bewussten Überspringen unterscheiden lässt
-- einer Pause einer aktiven Sitzung
-- einem Load-Timeout, das vorübergehend ist – ein kurzer langsamer Festplattenmoment darf nicht ablehnen, bis ein Mensch eingreift
+- Policies, die Sie nie übernommen oder explizit deaktiviert haben
+- einem Pack, das der Loader nie erhalten hat und bei dem „keine Registrierungen" nicht von einem bewussten Überspringen unterschieden werden kann
+- einer aktiven Sitzungspause
+- einem Lade-Timeout, das vorübergehend ist – ein einzelner langsamer Festplattenmoment darf nicht ablehnen, bis ein Mensch eingreift
-`UserPromptSubmit` **instruiert** statt abzulehnen, unabhängig davon, was die fehlende Policy deklariert hat. Eine pauschale Ablehnung würde dies einschließen und Sie vom Agenten aussperren, der das Problem beheben könnte.
+`UserPromptSubmit` **weist an**, anstatt abzulehnen, unabhängig davon, was die fehlende Policy deklariert hat. Eine pauschale Ablehnung würde auch diesen Eintrag erfassen und Sie von dem Agent aussperren, der das Problem beheben könnte.
### Vorgehensweise
```bash
-failproofai pack list
+failproofai policies
```
-Der Befehl nennt alle installierten Packs, die sich nicht laden lassen, gibt den Grund an und beendet sich mit einem Nicht-Null-Exit-Code. Installieren Sie das Pack anschließend entweder neu (`failproofai pack add `) oder entfernen Sie es (`failproofai pack remove `) – durch das Entfernen wird die Erwartung zurückgezogen, und die Ablehnung endet damit.
\ No newline at end of file
+Die Auflistung markiert ein installiertes Pack, dessen Installationseintrag oder Digest nicht mehr verifiziert werden kann, und gibt den Grund an. Das Pack wird dabei nicht importiert, sodass eines, das erst beim Laden fehlschlägt – indem es weniger als sein Manifest deklariert registriert – normal aufgelistet wird; die nachfolgende Ablehnung ist das, was dieses Pack benennt. In jedem Fall installieren Sie es neu (`failproofai policies add `) oder entfernen Sie es (`failproofai policies remove `) – das Entfernen zieht die Erwartung zurück, und die Ablehnung hört damit auf.
+
+Die Ablehnung selbst wird `pack/failproofai-pack-unavailable` zugeschrieben, was die geladenen Policies überrangt, sodass ein blockierter Tool-Aufruf das fehlende Pack benennt und nicht den zufällig zuerst ausgelösten verbleibenden Guard.
\ No newline at end of file
diff --git a/docs/de/policies/local-configuration.mdx b/docs/de/policies/local-configuration.mdx
index 7e14fbb3a..71a8e7e17 100644
--- a/docs/de/policies/local-configuration.mdx
+++ b/docs/de/policies/local-configuration.mdx
@@ -1,55 +1,49 @@
---
title: "Lokale Konfiguration"
-description: "Richtlinienbereich, Parameter, benutzerdefinierte Dateien und maschinenspezifische Failproof AI-Einstellungen verwalten."
+description: "Steuern Sie Policy-Scope, Parameter, benutzerdefinierte Dateien und maschinenweite Failproof AI-Einstellungen."
icon: "file-cog"
---
-Failproof AI trennt die Richtlinienauswahl von Maschinen- und Daemon-Einstellungen. Dadurch bleiben die Repository-Richtlinienentscheidungen überprüfbar, während Anmeldedaten und Daemon-Zustand außerhalb des Repositorys gespeichert werden.
+Failproof AI trennt, was ein Repository committen kann – Hook-Verdrahtung, Policy-Parameter, benutzerdefinierte Policies – von Maschinenzustand wie Anmeldedaten, installierten Packs und dem Daemon.
-## Einen Richtlinienbereich wählen
+## Scope auswählen
-
-
- Führen Sie `failproofai` ohne Argumente aus, um das lokale Richtlinien-Dashboard zu öffnen. Wählen Sie den Benutzer-, Projekt- oder lokalen Bereich, bevor Sie eine Richtlinie aktivieren, damit die Änderung in die gewünschte Konfigurationsdatei geschrieben wird.
+Ein Scope legt fest, wo die Hooks verdrahtet werden und in welche Konfigurationsdatei Sie Parameter und benutzerdefinierte Policy-Pfade schreiben:
- - **Benutzer** gilt projektübergreifend auf dieser Maschine.
- - **Projekt** gehört zum Repository und kann eingecheckt werden.
- - **Lokal** überschreibt ein Projekt für einen Benutzer und sollte in der .gitignore bleiben.
+- **User** gilt projektübergreifend auf dieser Maschine.
+- **Project** gehört zum Repository und kann committet werden.
+- **Local** überschreibt ein Projekt für einen Benutzer und sollte gitignoriert bleiben.
-
-
- ```bash
- failproofai policy add block-rm-rf --scope user
- failproofai policy add block-force-push --scope project
- failproofai policy add warn-large-file-write --scope local
- failproofai policies
- ```
+```bash
+failproofai policies --install --cli claude --scope project # Hooks für dieses Repository verdrahten
+failproofai policies --install --cli claude --scope user # oder für jedes Projekt auf dieser Maschine
+failproofai policies
+```
- Nicht jedes Harness unterstützt den lokalen Bereich. Die CLI lehnt einen Bereich ab, den das ausgewählte Harness nicht abbilden kann.
-
-
+Nicht jedes Harness unterstützt den Local-Scope; die CLI lehnt einen Scope ab, den das gewählte Harness nicht abbilden kann.
+
+Welche Pack-Policies aktiviert sind, ist **nicht** scoped. Die Einstellung wird beim installierten Pack gespeichert, sodass `failproofai policies add ` eine Policy für die gesamte Maschine aktiviert, unabhängig von `--scope`.
-| Bereich | Richtlinien-Konfigurationsdatei |
+| Scope | Policy-Konfigurationsdatei |
| --- | --- |
-| Projekt | `/.failproofai/policies-config.json` |
-| Lokal | `/.failproofai/policies-config.local.json` |
-| Benutzer | `~/.failproofai/policies-config.json` |
+| Project | `/.failproofai/policies-config.json` |
+| Local | `/.failproofai/policies-config.local.json` |
+| User | `~/.failproofai/policies-config.json` |
-Aktivierte Richtlinien werden als Vereinigung zusammengeführt. Für Richtlinienparameter wird der erste Bereich verwendet, der Parameter für die jeweilige Richtlinie definiert – in der Reihenfolge Projekt → Lokal → Benutzer. Bei expliziten benutzerdefinierten Richtlinienpfaden wird ebenfalls der erste Bereich verwendet, der diese definiert.
+Policy-Parameter verwenden den ersten Scope, der Parameter für diese Policy definiert, in der Reihenfolge Project → Local → User. Explizite benutzerdefinierte Policy-Pfade verwenden den ersten Scope, der sie definiert.
-## Richtlinienparameter konfigurieren
+## Policy-Parameter konfigurieren
- Öffnen Sie die Richtlinie im lokalen Dashboard, bearbeiten Sie die unterstützten Parameter und speichern Sie im gewählten Bereich. Führen Sie dann eine passende und eine nicht passende Agentenaktion aus und überprüfen Sie die Entscheidung unter **Beobachten → Richtlinie**.
+ Öffnen Sie die Policy im lokalen Dashboard, bearbeiten Sie die unterstützten Parameter und speichern Sie im gewählten Scope. Führen Sie eine passende und eine nicht passende Agent-Aktion aus und prüfen Sie die Entscheidung unter **Observe → policy**.
- Bearbeiten Sie die `policies-config.json` des gewählten Bereichs und führen Sie anschließend `failproofai policies` aus, um unbekannte Richtliniennamen oder Parameterschlüssel anzuzeigen.
+ Bearbeiten Sie die `policies-config.json` des gewählten Scopes und führen Sie anschließend `failproofai policies` aus: Es warnt vor einem `policyParams`-Eintrag, der eine Policy benennt, die kein installiertes Pack enthält. Die Schlüssel innerhalb eines Eintrags werden nicht geprüft – vergleichen Sie daher deren Schreibweise mit der nachfolgenden Tabelle.
```json
{
- "enabledPolicies": ["block-rm-rf", "block-force-push"],
"policyParams": {
"block-rm-rf": {
"allowPaths": ["/tmp/build-output"]
@@ -64,21 +58,45 @@ Aktivierte Richtlinien werden als Vereinigung zusammengeführt. Für Richtlinien
+### Parameter, die die Failproof AI-Policies akzeptieren
+
+Jede Policy validiert ihre eigenen Parametertypen.
+
+| Policy | Parameter | Typ und Standard |
+| --- | --- | --- |
+| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; Einträge enthalten `regex` und `label` |
+| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` |
+| `block-sudo` | `allowPatterns` | `string[]`, `[]` |
+| `block-rm-rf` | `allowPaths` | `string[]`, `[]` |
+| Infrastructure blockers | `allowPatterns` | `string[]`, `[]` |
+| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` |
+| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` |
+| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` |
+| `prefer-package-manager` | `allowed`, `blocked` | `string[]`, `[]` |
+| `warn-large-file-write` | `thresholdKb` | `number`, `1024` |
+| `require-push-before-stop` | `remote`, `baseBranch` | `string`, `"origin"`; `string`, `"main"` |
+| `require-pr-before-stop` | `baseBranch` | `string`, `"main"` |
+| `require-no-conflicts-before-stop` | `baseBranch` | `string`, `"main"` |
+
+
+ Ein Allow-Pattern erweitert, was ein Agent tun darf. Testen Sie die genaue Tokenisierung und Befehlsvarianten auf dem Ziel-Harness, bevor Sie es flächendeckend einsetzen.
+
+
## Die Maschinendateien verstehen
-`~/.failproofai` enthält separate Dateien für separate Vertrauensbereiche:
+`~/.failproofai` enthält separate Dateien für separate Vertrauensgrenzen:
| Pfad | Zweck |
| --- | --- |
| `config.json` | Nicht-geheime Daemon-, Audit- und Telemetrie-Einstellungen |
-| `credentials.json` | Cloud-Anmeldedaten; mit ausschließlichen Eigentümerberechtigungen gespeichert |
-| `policies-config.json` | Benutzerbereich: integrierte Auswahl, Parameter und explizite benutzerdefinierte Pfade |
-| `policies/` | Benutzerkonventions-Richtlinien und Cloud-verwaltete Richtlinien-Artefakte |
-| `hook-activity/` | Lokales Protokoll der Richtlinienentscheidungen |
-| `state/` | Daemon-Spool, Zustand für Gesundheit, Pause und Laufzeit |
+| `credentials.json` | Cloud-Anmeldedaten; gespeichert mit Nur-Eigentümer-Berechtigungen |
+| `policies-config.json` | User-Scope-Parameter und explizite benutzerdefinierte Policy-Pfade |
+| `policies/` | Benutzer-Konventions-Policies, installierte Packs und welche ihrer Policies aktiv sind, sowie Cloud-verwaltete Policy-Artefakte |
+| `hook-activity/` | Lokales Policy-Entscheidungsprotokoll |
+| `state/` | Daemon-Spool, Zustand, Pause und Laufzeitstatus |
-Verwenden Sie `FAILPROOFAI_HOME`, um das vollständige Maschinenverzeichnis für einen Container oder isolierten Test an einen anderen Ort zu verschieben. Verschieben Sie einzelne Zustandsverzeichnisse nicht unabhängig voneinander.
+Verwenden Sie `FAILPROOFAI_HOME`, um das gesamte Maschinen-Layout für einen Container oder einen isolierten Test zu verlagern. Verlegen Sie keine einzelnen Statusverzeichnisse unabhängig voneinander.
- Checken Sie `credentials.json` niemals ein. Checken Sie Projekt-Richtlinienkonfigurationen und Projektkonventions-Richtlinien erst ein, nachdem Sie diese als Durchsetzungscode überprüft haben.
+ Committen Sie niemals `credentials.json`. Committen Sie Projekt-Policy-Konfigurationen und Projekt-Konventions-Policies nur, nachdem Sie diese als Durchsetzungscode geprüft haben.
\ No newline at end of file
diff --git a/docs/de/policies/overview.mdx b/docs/de/policies/overview.mdx
index 582baf466..ef10a9f0e 100644
--- a/docs/de/policies/overview.mdx
+++ b/docs/de/policies/overview.mdx
@@ -1,63 +1,54 @@
---
title: "Policies"
-description: "Beobachte, steuere oder blockiere Agentenaktionen, bevor ein bekannter Fehler erneut auftritt."
+description: "Agent-Aktionen beobachten, steuern oder blockieren, bevor ein bekannter Fehler sich wiederholt."
icon: "shield-check"
---
-Eine Policy wertet ein Agenten-Hook-Ereignis aus und gibt eine von drei Entscheidungen zurück:
+Eine Policy wertet ein Agent-Hook-Ereignis aus und gibt eine von drei Entscheidungen zurück:
- `allow` lässt die Aktion fortfahren.
- `instruct` gibt dem Agenten korrigierende Hinweise.
- `deny` blockiert die Aktion mit einer Begründung.
-## Die drei Policy-Oberflächen nutzen
+## Wo Policies gespeichert sind
-
-
- 1. Gehe zu **Observe → policy**, um Policy-Entscheidungen aus Sitzungen zu filtern und zu untersuchen.
- 2. Gehe zu **Admin → policy editor**, um Policies zu erstellen, zu validieren, zu veröffentlichen, zu deaktivieren oder unveränderliche Versionen einzusehen.
- 3. Gehe zu **Admin → enforcement**, um Versionen und Effekte Maschinen zuzuweisen.
+| Im Dashboard | Was Sie dort tun |
+| --- | --- |
+| **Observe → policy** | Entscheidungen aus echten Sitzungen überprüfen: welche Policy übereinstimmte, auf welcher Maschine und warum |
+| **Admin → policy editor** | Eine Policy schreiben, gegen vergangenen Traffic backtesten, eine unveränderliche Version veröffentlichen und Versionen in der **library** vergleichen |
+| **Admin → enforcement** | Versionen auf Maschinen in Observe- oder Enforce-Modus einsetzen |
- Nutze die Policy-Seite, um zu verstehen, was bereits greift, bevor du Enforcement erstellst oder änderst.
+Der Policy-Editor ist der Ort, an dem ein Fehler zur Regel wird. Beschreiben Sie den Fehlerfall oder fügen Sie Policy-Quellcode in **compose** ein, testen Sie den Entwurf gegen bereits vorhandenen Traffic und veröffentlichen Sie eine Version:
- 
+
- Im Editor wandelst du eine Fehlerbedingung in Quellcode um, validierst ihn und veröffentlichst eine unveränderliche Version.
+Auf einer Maschine listet `failproofai policies` alles auf, was dort durchgesetzt wird. `fp policies` und `fp fleet` decken Editor und Enforcement vom Terminal aus ab — siehe die [Cloud-CLI-Referenz](/de/reference/cloud-cli).
- 
+## Eine Policy erhalten
- Enforcement weist dann diese veröffentlichte Version und ihren Beobachtungs- oder Durchsetzungseffekt Maschinen zu.
-
- 
-
- Überprüfe die Entscheidungen nach der Bereitstellung erneut auf der Policy-Seite, damit die Authoring- und Flottenansichten mit der tatsächlichen Agentenaktivität verknüpft sind.
-
-
- Verwende `failproofai` für lokale Policy-Installation und -Validierung:
-
- ```bash
- failproofai policies
- failproofai policy add block-rm-rf --scope project
- failproofai config --status
- ```
-
- Verwende `fp`, um Cloud-Sitzungen und -Ereignisse mit Policy-Entscheidungen zu finden. Das Erstellen von Policies in der Cloud und die Flottenbereitstellung bleiben Dashboard-Workflows.
-
-
-
-Policies haben drei eigenständige Bereiche in Failproof AI:
-
-1. **Entscheidungen analysieren** in Sitzungen, Dashboards und Audits.
-2. **Versionen erstellen** mit eingebauten Regeln, Code oder dem Policy-Editor.
-3. **Versionen bereitstellen und durchsetzen** auf ausgewählten Maschinen.
-
-Beginne mit einem bestätigten Fehlermodus. Definiere die kleinstmögliche Ereignis- und Tool-Übereinstimmung, die ihn identifiziert, teste legitime und unsichere Beispiele, und beobachte zunächst, bevor du durchsetzt.
+Es gibt zwei Möglichkeiten.
-
- Aktiviere eine geprüfte Regel für häufige Risiken bei Secrets, Shell, Git, Cloud und Workflows.
+
+ Lassen Sie Failproof AI einen Entwurf aus einem Audit-Befund erstellen, oder schreiben Sie den Quellcode selbst, überprüfen und veröffentlichen Sie ihn dann im Editor.
-
- Formuliere eine workflow-spezifische Entscheidung in JavaScript oder TypeScript.
+
+ Binden Sie ein Failproof AI Policy-Pack für Ihren Anwendungsfall oder ein Community-Pack aus dem Policy-Hub mit einem einzigen Befehl ein.
-
\ No newline at end of file
+
+
+## Dann ausrollen
+
+
+
+ Testen Sie den Entwurf gegen bereits vorhandenen Traffic und führen Sie ihn gegen eine Aktion aus, die er stoppen muss, und eine, die er zulassen muss — alles vor der Veröffentlichung. Siehe [Eine Policy testen](/de/policies/test).
+
+
+ Setzen Sie die Version auf Maschinen im **Observe**-Modus ein, lesen Sie ihre Entscheidungen, und erzwingen Sie sie dann. Siehe [Eine Policy deployen](/de/policies/deploy).
+
+
+ Jede Veröffentlichung ist eine neue, unveränderliche Version, sodass ein Rollout, der gültige Arbeit blockiert, durch erneutes Deployen der letzten funktionierenden Version rückgängig gemacht werden kann. Siehe [Versionen und Rollback](/de/policies/rollback).
+
+
+
+Um Ihre Policies mit anderen Teams zu teilen, [veröffentlichen Sie sie als Pack](/de/policies/publish-a-pack). Was passiert, wenn eine Policy überhaupt nicht ausgewertet werden kann, erfahren Sie unter [Fehlerverhalten](/de/policies/failure-behavior).
\ No newline at end of file
diff --git a/docs/de/policies/packs.mdx b/docs/de/policies/packs.mdx
index f5e68cff0..6465a214e 100644
--- a/docs/de/policies/packs.mdx
+++ b/docs/de/policies/packs.mdx
@@ -1,110 +1,119 @@
---
-title: "Policy-Pakete"
-description: "Installiere einen Satz von Richtlinien, der als GitHub-Release veröffentlicht wurde, und verwalte dessen Durchsetzung."
+title: "Ein Policy-Pack verwenden"
+description: "Binden Sie ein Failproof AI Policy-Pack für Ihren Anwendungsfall ein – oder ein Community-Pack aus dem Policy-Hub – und wählen Sie, was es durchsetzen soll."
icon: "package"
---
-Ein Paket ist ein Satz von Richtlinien, der als GitHub-Release veröffentlicht wird. Ein einziger Befehl installiert es, die eigenen Prüfsummen des Releases werden vor der Ausführung verifiziert, und der Digest wird gespeichert, damit das Paket danach nicht unbemerkt verändert werden kann.
+Ein Pack ist eine Sammlung von Policies, die als GitHub-Release veröffentlicht werden. Ein einziger Befehl installiert es: Die Prüfsummen des Releases werden vor der Ausführung verifiziert, und der Digest wird gespeichert, damit das Pack danach auf Ihrem Rechner nicht unbemerkt verändert werden kann.
-## Die Failproof AI-Richtlinien installieren
+Alle Packs und alle darin enthaltenen Policies finden Sie im [Policy-Hub](https://befailproof.ai/policy-hub/). Es gibt zwei Arten:
+
+- **Failproof AI Policy-Packs** — fertig konfigurierte Packs für vordefinierte Anwendungsfälle: einfach einbinden und es funktioniert. Das [Coding-Agent-Policy-Pack](https://befailproof.ai/policy-hub/failproofai/policies/) ist bereits verfügbar, weitere Packs für andere Anwendungsfälle folgen in Kürze.
+- **Community-Policy-Packs** — Policies, die Entwickler für ihre eigenen Anwendungsfälle geschrieben und für alle veröffentlicht haben.
+
+## Failproof AI Policy-Packs
+
+### Coding-Agent-Policy-Pack
```bash
-failproofai pack add core
+failproofai policies add FailproofAI/policies
```
-Damit wird der von uns veröffentlichte Satz installiert – aus der im Paket enthaltenen Kopie. Es ist also keine Netzwerkverbindung erforderlich und es kann auch hinter einem Proxy nicht fehlschlagen. Einen Teil davon installieren:
+Das Pack enthält 38 Policies und aktiviert die 10, die sein Manifest als sicher für den unbeaufsichtigten Betrieb markiert; die übrigen werden Ihnen zur Auswahl angezeigt. Einige der am häufigsten verwendeten und ob ein einfaches `policies add` sie aktiviert:
+
+| Policy | Was sie bewirkt | Standardmäßig aktiv |
+| --- | --- | --- |
+| `block-push-master` | Blockiert direkte Pushes auf geschützte Branches | Ja |
+| `block-env-files` | Blockiert das Lesen und Schreiben von `.env`-Dateien | Ja |
+| `protect-env-vars` | Blockiert Befehle, die Umgebungsvariablen ausgeben | Ja |
+| `block-sudo` | Blockiert `sudo`, sofern kein Allow-Muster zutrifft | Ja |
+| `block-curl-pipe-sh` | Blockiert heruntergeladene Skripte, die direkt in eine Shell geleitet werden | Ja |
+| `sanitize-*` (fünf Policies) | Meldet API-Schlüssel, Bearer-Tokens, JWTs, private Schlüssel und Verbindungsstrings in der Tool-Ausgabe | Ja |
+| `block-rm-rf` | Blockiert katastrophale rekursive Löschvorgänge | Nein |
+| `block-force-push` | Blockiert Force-Pushes | Nein |
+| `block-secrets-write` | Blockiert Schreibzugriffe auf Credential- und Secret-Key-Dateien | Nein |
+| `warn-destructive-sql` | Warnt bei `DROP`, `TRUNCATE` und `DELETE` ohne `WHERE` | Nein |
+
+Aktivieren Sie einzelne deaktivierte Policies namentlich – `failproofai policies add block-rm-rf` – oder nehmen Sie das gesamte Pack mit `--all`. Alle enthaltenen Policies nach Kategorie gruppiert anzeigen:
```bash
-failproofai pack add core --policy block-rm-rf # eine oder einige, kommagetrennt
-failproofai pack add core --category dangerous-commands # eine ganze Kategorie
-failproofai pack add core --all # alles darin
+failproofai policies show FailproofAI/policies
```
-`failproofai pack list` listet alle Kategorien auf, die das Paket enthält.
+## Community-Policy-Packs
-## Den Inhalt eines Pakets vor der Installation einsehen
+Entwickler veröffentlichen Packs für ihre eigenen Anwendungsfälle, der [Policy-Hub](https://befailproof.ai/policy-hub/) listet sie auf. Ein Community-Pack wird vom jeweiligen Autor veröffentlicht und nicht von Failproof AI geprüft – lesen Sie daher den Inhalt, bevor Sie es installieren:
```bash
-failproofai pack list acme/support-agent
+failproofai policies show acme/support-agent
```
-Listet alle Richtlinien des Pakets auf, gruppiert nach Kategorie, und zeigt an, welche vom Autor standardmäßig aktiviert und welche optional sind. Es wird **ausschließlich das Manifest** gelesen – das Einstiegs-Artefakt wird weder heruntergeladen noch importiert. Das Anzeigen eines fremden Pakets führt also keinen fremden Code aus. Das Manifest wird dennoch gegen die `SHA256SUMS` des Releases geprüft, sodass das Angezeigte dem entspricht, was installiert werden würde.
-
-`failproofai pack list` ohne Quelle listet die hier bereits installierten Pakete auf.
+Dies listet alle enthaltenen Policies nach Kategorie gruppiert auf und markiert, welche der Autor standardmäßig aktiviert. Es wird **ausschließlich das Manifest** gelesen – das Entry-Artefakt wird weder heruntergeladen noch importiert, sodass das Anzeigen eines fremden Packs keinen fremden Code ausführen kann. Das Manifest wird dennoch gegen die `SHA256SUMS` des Releases geprüft, sodass das, was Sie lesen, auch das ist, was installiert werden würde.
-## Ein fremdes Paket installieren
+Anschließend installieren:
```bash
-failproofai pack add acme/support-agent
+failproofai policies add acme/support-agent
```
-Alle dieser Varianten funktionieren – verwende einfach die, die du zur Hand hast:
+Alle folgenden Formate werden akzeptiert – verwenden Sie das, das Ihnen vorliegt:
| Quelle | Ergebnis |
| --- | --- |
-| `acme/support-agent` | Neuestes Release, **angeheftet** am aufgelösten genauen Tag |
-| `acme/support-agent@v2.1.0` | Dieses Release |
-| `github:acme/support-agent@v2.1.0` | Dasselbe, explizit angegeben |
+| `acme/support-agent` | Neuestes Release, **gepinnt** auf den exakten aufgelösten Tag |
+| `acme/support-agent@v2.1.0` | Genau dieses Release |
+| `github:acme/support-agent@v2.1.0` | Dasselbe, explizit geschrieben |
| `https://github.com/acme/support-agent/releases/tag/v2.1.0` | Dasselbe, aus dem Browser kopiert |
-Wird kein Tag angegeben, wird das neueste Release installiert **und angeheftet**; anschließend wird der gewählte Tag ausgegeben. Was gespeichert wird, benennt immer genau ein Release, sodass eine Neuinstallation nicht abweichen kann.
+Wird kein Tag angegeben, wird das neueste Release installiert und **gepinnt**; anschließend wird Ihnen mitgeteilt, welcher Tag gewählt wurde. Was aufgezeichnet wird, benennt immer genau ein Release, sodass eine Neuinstallation nicht zu Abweichungen führen kann.
-## Nur einen Teil eines Pakets übernehmen
+## Nur einen Teil eines Packs verwenden
-Standardmäßig erhältst du die **eigenen** Standardwerte des Pakets – die Richtlinien, die der Autor als sicher für den unbeaufsichtigten Betrieb markiert hat – nicht alles, was es enthält.
+Standardmäßig erhalten Sie die **eigenen** Standardwerte des Packs – die Policies, die der Autor als sicher für den unbeaufsichtigten Betrieb markiert hat –, nicht alles, was es enthält.
```bash
-failproofai pack add acme/support-agent --category billing,git
-failproofai pack add acme/support-agent --policy block-refunds
-failproofai pack add acme/support-agent --all
+failproofai policies add FailproofAI/policies --policy block-rm-rf # eine oder mehrere, kommagetrennt
+failproofai policies add FailproofAI/policies --category dangerous-commands # eine ganze Kategorie
+failproofai policies add FailproofAI/policies --all # alles darin
```
-`--category` und `--policy` werden als Vereinigung kombiniert (`--only` wird als Synonym für `--policy` akzeptiert). Das erneute Hinzufügen in einer neueren Version behält deine getroffene Auswahl bei, anstatt den Rest wieder einzuschalten.
+`--category` und `--policy` werden als Vereinigung kombiniert (`--only` wird als Synonym für `--policy` akzeptiert). Wenn das Pack bereits installiert ist, ergänzen die Flags das Vorhandene; wenn es ohne Flag und ohne Terminal erneut hinzugefügt wird – etwa für ein Upgrade –, bleibt die bisherige Auswahl erhalten. An einem Terminal ohne Flag öffnet `add` stattdessen die Auswahlmaske, vorausgefüllt mit den Standardwerten des Autors; was Sie auswählen, ersetzt Ihre bisherige Auswahl.
-## Aktive Richtlinien verwalten
+## Den aktivierten Zustand verwalten
```bash
-failproofai policies # alle Quellen in einer Liste, inkl. Pakete
-failproofai pack list # nur Pakete, nach Kategorie gruppiert
-failproofai policies --uninstall block-refunds # eine Paketrichtlinie deaktivieren
+failproofai policies # alle Quellen in einer Liste, inklusive Packs
+failproofai policies add block-rm-rf # eine Policy aktivieren
+failproofai policies --uninstall block-refunds # eine Pack-Policy deaktivieren
failproofai policies --install block-refunds # und wieder aktivieren
-failproofai pack remove acme/support-agent
+failproofai policies remove acme/support-agent # das Pack deinstallieren
```
-Ein einfacher Name bezieht sich auf die **eingebaute** Richtlinie, sofern eine mit diesem Namen existiert. Benutze den vollqualifizierten Namen eines Pakets, wenn du explizit auf die Paketkopie verweisen möchtest:
+Das Aktivieren oder Deaktivieren einer Pack-Policy gilt für den gesamten Rechner: Der Status wird zusammen mit dem installierten Pack gespeichert, nicht in der Projektkonfiguration – unabhängig davon, was `--scope` besagt.
+
+Ein Name ohne Schrägstrich ist eine Policy; alles mit einem Schrägstrich ist eine Pack-Quelle. Ein einfacher Name wird dem installierten Pack zugeordnet, das ihn deklariert. Wenn zwei installierte Packs denselben Namen deklarieren, geben Sie explizit an, welches gemeint ist:
```bash
failproofai policies --uninstall acme/support-agent:block-refunds
```
-
-Wenn ein Paket eine Richtlinie enthält, deren Name auch einer **aktivierten eingebauten** Richtlinie entspricht, wird die eingebaute Richtlinie ausgeführt und die Paketkopie übersprungen – andernfalls würde dieselbe Prüfung doppelt ausgewertet. Deaktiviere die eingebaute Richtlinie, um stattdessen die Paketversion zu verwenden.
-
-
-## Woher die Failproof AI-Richtlinien stammen
-
-`core` liest die im npm-Paket enthaltene Kopie. Derselbe Satz wird auch als GitHub-Release veröffentlicht, und genau dieses installierst du, wenn du eine bestimmte Version möchtest:
-
-```bash
-failproofai pack add core # aus diesem Paket, ohne Netzwerk
-failproofai pack add FailproofAI/policies # derselbe Satz, aus dem GitHub-Release
-```
+Scopes, Parameter und die Dateien, die diese Befehle schreiben, sind unter [Lokale Konfiguration](/de/policies/local-configuration) beschrieben.
-## Was Integritätsprüfungen leisten – und was nicht
+## Was Integritätsprüfung leistet und was nicht
-`SHA256SUMS` wird im selben Release wie das Artefakt ausgeliefert und ist daher **keine** Signatur und beweist nichts über den Herausgeber. Was sie beweist, ist, dass die Bytes genau die sind, die dieses Release veröffentlicht hat – und da der Digest beim Hinzufügen des Pakets gespeichert und vor jedem Import erneut geprüft wird, kann ein Paket danach nicht unbemerkt verändert werden. Ein Repository, das einen Asset neu taggt oder ersetzt, wird nicht mehr geladen, anstatt still etwas anderes auszuführen.
+`SHA256SUMS` wird im selben Release wie das Artefakt ausgeliefert und ist daher **keine** Signatur – sie beweist nichts über den Urheber. Was sie beweist: Die Bytes sind genau die, die in diesem Release veröffentlicht wurden. Da der Digest beim Hinzufügen des Packs aufgezeichnet und vor jedem Import erneut geprüft wird, kann ein Pack auf Ihrem Rechner nachträglich nicht unbemerkt verändert werden. Ein Repository, das einen Tag neu setzt oder ein Asset ersetzt, wird nicht mehr geladen, anstatt still etwas anderes auszuführen.
-Bei der Installation wird das Paket außerdem **einmal importiert** und gegen sein eigenes Manifest geprüft. Ein Paket, dessen Artefakt sich nicht parsen lässt oder das etwas anderes registriert als deklariert, wird abgelehnt, bevor irgendetwas aktiviert wird – anstatt sauber zu installieren und beim nächsten Tool-Aufruf zu versagen.
+Bei der Installation wird das Pack außerdem **einmalig importiert** und gegen sein eigenes Manifest geprüft. Ein Pack, dessen Artefakt nicht geparst werden kann oder das etwas anderes registriert als deklariert, wird abgelehnt, bevor irgendetwas aktiviert wird – anstatt sauber zu installieren und beim nächsten Tool-Aufruf zu versagen.
-## Wenn ein Paket nicht geladen werden kann
+## Wenn ein Pack nicht geladen werden kann
-Ein Paket, dessen Durchsetzung auf diesem Rechner konfiguriert ist, aber nicht ausgeführt werden kann, **verweigert** die Ereignisse, die seine fehlenden Richtlinien abgedeckt hätten, anstatt sie stillschweigend zuzulassen. Siehe [Fehlerverhalten](/de/policies/failure-behavior). `failproofai pack list` benennt jedes Paket in diesem Zustand und beendet sich mit einem Fehlercode.
+Ein Pack, das dieser Rechner durchsetzen soll, aber nicht ausführen kann, **verweigert** die Ereignisse, die seine fehlenden Policies abgedeckt hätten, anstatt sie still zu erlauben – als `pack/failproofai-pack-unavailable`, das den Policies, die geladen wurden, vorrangig ist, sodass die Ablehnung dem fehlenden Pack zugeordnet wird und nicht dem zufällig zuerst ausgelösten Guard. Ausnahme ist `UserPromptSubmit`, das stattdessen instruiert: Eine Ablehnung dort würde Sie vom Agenten aussperren, den Sie zur Behebung benötigen. Siehe [Fehlerverhalten](/de/policies/failure-behavior).
-## Offline-Betrieb und Mirrors
+## Offline und Mirrors
-| Variable | Auswirkung |
+| Variable | Effekt |
| --- | --- |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | Verweigert das Abrufen; bereits installierte Pakete werden weiter durchgesetzt |
-| `FAILPROOFAI_PACK_BASE_URL` | Leitet den Paketabruf auf einen Mirror statt auf `github.com` um |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | Verweigert Downloads; bereits installierte Packs setzen weiterhin durch |
+| `FAILPROOFAI_PACK_BASE_URL` | Leitet das Abrufen von Packs auf einen Mirror statt `github.com` um |
-Eigenes Paket veröffentlichen: siehe [Ein Paket veröffentlichen](/de/policies/publish-a-pack).
\ No newline at end of file
+Informationen zur Veröffentlichung eigener Policies auf diese Weise finden Sie unter [Ein Policy-Pack veröffentlichen](/de/policies/publish-a-pack).
\ No newline at end of file
diff --git a/docs/de/policies/publish-a-pack.mdx b/docs/de/policies/publish-a-pack.mdx
index df8e320e7..71f97a24f 100644
--- a/docs/de/policies/publish-a-pack.mdx
+++ b/docs/de/policies/publish-a-pack.mdx
@@ -1,14 +1,22 @@
---
-title: "Ein Pack veröffentlichen"
+title: "Ein Policy-Pack veröffentlichen"
description: "Eigene Policies als GitHub-Release bereitstellen, das jeder installieren kann."
icon: "upload"
---
-Ein Pack besteht aus drei Dateien, die an ein GitHub-Release angehängt werden. `failproofai pack build` erzeugt alle drei aus einer bereits vorhandenen Policy-Datei.
+Ein Pack besteht aus drei Dateien, die einem GitHub-Release angehängt werden. `failproofai publish` schreibt alle drei aus den vorliegenden Policy-Dateien, erstellt das Release und lädt sie hoch.
## 1. Die Policies schreiben
-Eine Datei, mit derselben API wie jede andere Custom Policy. Zwei zusätzliche Felder sind für ein Pack relevant:
+Fang mit etwas Funktionierendem an, nicht mit einer Vorlage voller Lücken:
+
+```bash
+failproofai publish --init
+```
+
+Dieser Befehl fragt nach dem Namen des Packs, schreibt `.mjs` und hört auf — kein Netzwerk, kein Git, nichts wird veröffentlicht. Die erzeugte Datei enthält eine Policy, die `git push --force` bereits blockiert. Eine vorhandene Datei wird nicht überschrieben.
+
+Policies verwenden dieselbe API wie jede benutzerdefinierte Policy. Zwei zusätzliche Felder sind für ein Pack relevant:
```js
import { customPolicies, deny, allow } from "failproofai";
@@ -17,7 +25,7 @@ customPolicies.add({
name: "block-refunds",
description: "Refunds above the approved limit need a human",
category: "Billing", // groups it, and is what --category selects on
- defaultEnabled: true, // switched on by a plain `pack add`
+ defaultEnabled: true, // switched on by a plain `policies add`
match: { events: ["PreToolUse"], tools: ["Bash"] },
fn: async (ctx) =>
String(ctx.toolInput?.command ?? "").includes("refund")
@@ -26,66 +34,95 @@ customPolicies.add({
});
```
-`defaultEnabled` ist standardmäßig **false**, wenn es weggelassen wird. Ein einfaches `failproofai pack add` aktiviert nur die Policies, die du als solche markiert hast — alle Policies eines unbekannten Packs unbeaufsichtigt zu installieren ist eine Entscheidung, die der Installer nicht für seinen Nutzer treffen sollte.
+`defaultEnabled` ist standardmäßig **false**, wenn es weggelassen wird. Ein einfaches `failproofai policies add` aktiviert nur die Policies, die du entsprechend markiert hast — alle Policies eines Fremden unbeaufsichtigt zu installieren ist keine Entscheidung, die der Installer für den Benutzer treffen sollte.
+
+Schreib so viele Dateien wie nötig; eine pro Kategorie ist gut lesbar. Jede Datei im Verzeichnis, die Policies registriert, wird in das einzelne Artefakt gebündelt, das ein Pack sein muss.
-Der Eintrag muss eine **in sich geschlossene Datei** sein. Nur der Eintrag wird per Digest gesichert, daher könnte ein Pack, das lokale Dateien importiert, nicht ernsthaft behaupten, der Digest decke das ab, was tatsächlich ausgeführt wird. Bündele die Dateien zuerst (`esbuild`, `bun build`, `rollup`) und baue das Pack aus dem Bundle — `pack build` lehnt einen lokalen Import ab, anstatt ein Versprechen zu liefern, das es nicht einhalten kann.
+ Für das Bündeln wird **bun** benötigt. Ohne bun bleib bei einer einzigen, in sich geschlossenen Datei. In jedem Fall darf der veröffentlichte Einstiegspunkt zur Installationszeit keine lokalen Dateien importieren: Nur der Einstiegspunkt wird per Digest gesichert. Ein Pack, der auf Geschwisterdateien zugreift, könnte nicht ehrlich behaupten, der Digest decke das ab, was ausgeführt wird — und `publish` lehnt ein solches Pack ab, anstatt ein Versprechen zu liefern, das es nicht halten kann.
-## 2. Die Release-Assets bauen
+## 2. Erst hier testen
+
+Bevor es jemand anderes sehen kann, die Datei auf diesem Rechner erzwingen:
```bash
-failproofai pack build ./policies.mjs \
- --id acme/support-agent \
- --version 1.0.0 \
- --out ./dist-pack
+failproofai policies -i -c ./.mjs
+```
+
+Beliebiger Pfad, beliebiger Dateiname. Lass deinen Agenten das tun, was du blockiert hast, und beobachte, wie es abgelehnt wird. Es wird nichts veröffentlicht und niemand sonst ist betroffen. [Eine Policy testen](/de/policies/test) behandelt den Rest: den legitimen Fall, den sie erlauben muss, und die Eingaben, die sie brechen.
+
+## 3. Veröffentlichen
+
+```bash
+failproofai publish
```
-Der Befehl schreibt drei Dateien und validiert jede Policy zunächst mit den **eigenen Regeln des Loaders** — damit schlägt ein Pack, das sich nie installieren ließe, hier fehl, wo du es noch beheben kannst:
+Der Befehl ermittelt selbst, wo veröffentlicht werden soll, was gebündelt wird und welche Versionsnummer vergeben wird — und fragt nur nach, wenn das Repository keine Informationen liefert. Der Ablauf, der abbricht, bevor ein Release erstellt wird, wenn etwas nicht stimmt:
+
+1. Findet die Policy-Dateien hier nach **Inhalt** — solche, die `failproofai` importieren und `customPolicies.add` aufrufen — anstatt nach Dateiname. So findet es `guards.mjs` und ignoriert ein unverwandtes `policies.mjs`. Es steigt nicht in Unterverzeichnisse hinab, sodass ein Test-Fixture nie versehentlich erfasst wird.
+2. Liest das Repo aus `git remote get-url origin` — im Verzeichnis der **Datei**, nicht in deinem — und bestimmt die Version.
+3. Findet deine Zugangsdaten: `GITHUB_TOKEN`, `GH_TOKEN` oder `gh auth login`. Release-Schreibzugriff wird benötigt und nichts weiter; die Zugangsdaten werden nie ausgegeben.
+4. Erstellt das Repository, falls es nicht existiert. Das geschieht vor dem Build, sodass ein im nächsten Schritt abgelehntes Pack ein neues Repository ohne Release hinterlassen kann.
+5. Baut die drei Assets und validiert sie mit den **eigenen Regeln des Loaders** — demselben Code, der entscheidet, was auf einer fremden Maschine installiert werden darf — sodass ein Pack, das sich nie installieren ließe, hier scheitert, wo du es noch beheben kannst.
+6. Erstellt oder verwendet das Release erneut und lädt hoch, wobei Assets gleichen Namens ersetzt werden.
-| Datei | Beschreibung |
+| Datei | Inhalt |
| --- | --- |
| `failproofai-pack.json` | Das Manifest: ID, Version, Effekt und ein Eintrag pro Policy |
-| `failproofai-pack.mjs` | Dein Eintrag, unverändert |
-| `SHA256SUMS` | `` für die anderen beiden Dateien |
+| `failproofai-pack.mjs` | Dein gebündelter Einstiegspunkt |
+| `SHA256SUMS` | `` für die anderen beiden |
-Beim Build abgelehnt werden: eine ID, die nicht dem Format `publisher/name` entspricht, ein Policy-Name mit `/`, eine Policy, die `alwaysOn` deklariert, eine fehlende `description`, `category` oder `match`, ein Eintrag, der nichts registriert, und ein Eintrag, der lokale Dateien importiert.
+Die Asset-Namen sind fest vorgegeben — sie sind das, woraus die CLI eines Verbrauchers seine URLs konstruiert, ohne API-Aufruf und ohne Discovery.
-## 3. An ein Release anhängen
+Beim Build abgelehnt wird: eine ID, die nicht `publisher/name` entspricht, ein Policy-Name mit `/`, eine Policy, die `alwaysOn` deklariert, eine fehlende `description`, `category` oder `match`, ein Einstiegspunkt, der nichts registriert, und ein Einstiegspunkt, der lokale Dateien importiert.
-Tagge das Release mit derselben Version, die du beim Build angegeben hast, und füge alle drei Dateien als Release-Assets hinzu:
+Alles Entschiedene lässt sich überschreiben:
```bash
-gh release create 1.0.0 \
- ./dist-pack/failproofai-pack.json \
- ./dist-pack/failproofai-pack.mjs \
- ./dist-pack/SHA256SUMS
+failproofai publish \
+ --repo acme/support-agent \
+ --version 1.0.0 \
+ --effect observe \
+ --dry-run
```
-Jetzt kann jeder das Pack installieren:
+`--id` setzt die Pack-ID, wenn sie vom Repo abweichen soll; `--tag` setzt den Tag des Releases; `--notes` ersetzt die generierten Release-Notes — aus denen `policies show --releases` die Anzahl und den Commit jedes Releases liest; `--out` legt fest, wohin die Assets geschrieben werden (Standard: `dist-pack`); und `--dry-run` baut sie, ohne zu veröffentlichen, und benötigt keine Zugangsdaten.
-```bash
-failproofai pack add acme/support-agent
-```
+Jetzt kann jeder es mit `failproofai policies add acme/support-agent` installieren. Siehe [Policy-Packs](/de/policies/packs) zum Pinnen einer Version und zum Übernehmen nur eines Teils davon.
+
+### Im Policy-Hub listen
-Die Asset-Namen sind fest vorgegeben — aus ihnen baut die CLI des Consumers die URLs, ohne API-Aufruf und ohne Erkennung.
+Füge dem Repository auf GitHub das Topic `failproofai-policies` hinzu. Es gibt kein Einreichungsformular und keine Genehmigungswarteschlange: Der Crawler des [Policy-Hubs](https://befailproof.ai/policy-hub/) nimmt das Repository beim nächsten Durchlauf auf. Das Topic stellt es nur zur Aufnahme bereit — was es listet, ist ein Release, dessen Manifest gegen seine eigene `SHA256SUMS` verifiziert und nach denselben Regeln geparst wird, die die CLI verwendet — genau das, was `failproofai publish` erzeugt.
-## Eine neue Version veröffentlichen
+## Wie die Version bestimmt wird
-Baue mit der neuen `--version`, tagge ein neues Release und hänge die drei Assets erneut an. Consumers führen dasselbe `pack add` aus und behalten die Auswahl, die sie getroffen hatten; eine deaktivierte Policy bleibt auch nach dem Upgrade deaktiviert.
+Die Version ist der **Commit, von dem aus veröffentlicht wird** — sein kurzes SHA, zwölf Zeichen: `a1b2c3d4e5f6`. Es gibt nichts auszuwählen und nichts zu inkrementieren, und die Version benennt genau, woher die Bytes stammen — dasselbe Quell-Commit zweimal zu veröffentlichen ergibt dieselbe Version.
-Den **Namen** einer Policy zu ändern ist ein Breaking Change: Eine Maschine, die ihn deaktiviert hatte, deaktiviert nun einen Namen, der nicht mehr existiert — und der neue Name wird mit dem Wert aus `defaultEnabled` aktiviert.
+Sie wird aus dem aktuellen Verzeichnisbaum gelesen, nie aus den Releases des Repositories, sodass ein frischer Clone und eine Air-Gapped-Maschine dieselbe Antwort berechnen, ohne GitHub nach dem Vorherigen zu fragen.
+
+Da die Version einen Commit benennt, muss dieser Commit existieren. An einem Terminal erstellt `publish` ihn für dich: Es initialisiert ein Repository, wenn keines vorhanden ist, und committet geänderte Policy-Dateien, bevor es baut. Es **verweigert** die Aktion stattdessen — mit `--version` als Ausweg — wenn es ohne Terminal läuft (ein auf einem CI-Runner erstellter Commit würde sonst nirgendwo anders existieren), wenn andere Dateien als die Policies uncommitted sind oder in einem Checkout ohne Commits. Ein Tag auf `HEAD` hat Vorrang vor dem SHA — wer `v1.2.0` getaggt hat, hat gesagt, was dieses Release ist.
+
+Ein SHA trägt keine eigene Reihenfolge, also verwende `failproofai policies show / --releases`, um zu sehen, welches Release zuerst kam — neuestes oben.
+
+## Eine neue Version liefern
+
+Die Änderung committen und `failproofai publish` erneut ausführen — der neue Commit ist die neue Version. Verbraucher führen dasselbe `failproofai policies add` aus. Ohne Terminal oder mit einem Auswahlparameter behalten sie die Teilmenge, die sie gewählt hatten, und eine deaktivierte Policy bleibt deaktiviert; an einem Terminal ohne Parameter öffnet sich der Picker mit deinen Standardwerten vorausgewählt, und ihre Antwort ersetzt ihre bisherige Auswahl.
+
+Das **Umbenennen** einer Policy ist eine Breaking Change: Eine Maschine, die sie deaktiviert hatte, deaktiviert nun einen Namen, der nicht mehr existiert, und der neue Name wird mit dem Wert von `defaultEnabled` übernommen.
## Was deine Nutzer vertrauen
-`SHA256SUMS` liegt im selben Release wie das Artefakt und beweist damit, dass die Bytes genau die sind, die du veröffentlicht hast — nicht wer du bist. Wer Schreibzugriff auf das Repository hat, kann beide Dateien schreiben. Der Schutz für deine Nutzer besteht darin, dass der Digest beim Installieren fest eingespeichert wird — was du geliefert hast, kann sich danach nicht mehr unter ihnen ändern.
+`SHA256SUMS` liegt im selben Release wie das Artefakt und beweist damit, dass die Bytes die sind, die du veröffentlicht hast — nicht wer du bist. Wer Schreibzugriff auf das Repository hat, kann beide Dateien schreiben. Der Schutz deiner Nutzer liegt darin, dass der Digest beim Installieren gepinnt wird — was du geliefert hast, kann sich danach nicht unter ihnen ändern.
+
+Veröffentliche aus einem Repository, dessen Schreibzugriff du kontrollierst, und behandle ein Pack-Release wie das Veröffentlichen eines Pakets.
-Veröffentliche aus einem Repository, dessen Schreibzugriff du kontrollierst, und behandle ein Pack-Release wie die Veröffentlichung eines Pakets.
+Das Repository muss außerdem **öffentlich** sein. Installationen sind anonymes HTTPS ohne Zugangsdaten, daher wird ein bestehendes privates Repo abgelehnt, bevor etwas gebaut oder hochgeladen wird — und ein von `publish` erstelltes Repository ist aus demselben Grund öffentlich. `--allow-private` überschreibt das für jemanden, der die drei Assets auf anderem Weg weitergibt, und macht deutlich, dass kein `policies add` sie erreichen kann. Nur das Release ist relevant: Installationen lesen `releases/download//` und berühren deinen Git-Tree nie.
## Beobachten, bevor du durchsetzt
-Ein Manifest kann `"effect": "observe"` deklarieren. Diese Policies laufen, und ihre Urteile werden **aufgezeichnet und verworfen** — es wird nichts blockiert. Das ist der Weg, eine neue Regel gegen echten Traffic zu messen, bevor sie die Arbeit von jemandem unterbrechen kann.
+Ein Manifest kann `"effect": "observe"` deklarieren — gesetzt wird das mit `failproofai publish --effect observe`. Diese Policies laufen und ihre Urteile werden **aufgezeichnet und verworfen** — nichts wird blockiert. So lässt sich eine neue Regel gegen echten Traffic messen, bevor sie die Arbeit irgendjemanden unterbrechen kann.
```json
-{ "id": "acme/support-agent", "version": "1.1.0", "effect": "observe", "policies": [ ... ] }
+{ "id": "acme/support-agent", "version": "a1b2c3d4e5f6", "effect": "observe", "policies": [ ... ] }
```
\ No newline at end of file
diff --git a/docs/de/policies/rollback.mdx b/docs/de/policies/rollback.mdx
index 8bb5bee03..5be42ad00 100644
--- a/docs/de/policies/rollback.mdx
+++ b/docs/de/policies/rollback.mdx
@@ -1,41 +1,75 @@
---
-title: "Rollback"
-description: "Einen bekannten Policy-Deployment-Zustand wiederherstellen, wenn ein Rollout gültige Agent-Arbeit unterbricht."
+title: "Versionen und Rollback"
+description: "Jede Veröffentlichung ist eine unveränderliche Version, sodass ein Rollout, der gültige Agenten-Arbeit beeinträchtigt, durch erneutes Bereitstellen der letzten funktionierenden Version rückgängig gemacht werden kann."
icon: "rotate-ccw"
---
-Rollback ändert die bereitgestellte Version oder entfernt eine Policy-Zuweisung; die Entscheidungshistorie, die den Vorfall erklärt, wird dabei nicht gelöscht.
+Eine veröffentlichte Richtlinienversion ändert sich nie. Das Bearbeiten einer Richtlinie und erneute Veröffentlichen erstellt eine neue Version; die bereits auf Maschinen vorhandene Version wird dabei nie überschrieben. Das macht Rollbacks sicher: Die letzte funktionierende Version ist noch vorhanden, Byte für Byte, und ein Rollback löscht nicht den Entscheidungsverlauf, der erklärt, was schiefgelaufen ist.
-## Eine Maschine zurücksetzen
+## Eine Version finden
- 1. Gehen Sie zu **Admin → enforcement**, erweitern Sie die betroffene Maschine und identifizieren Sie das zuletzt bekannte funktionierende Policy-Set.
- 2. Wählen Sie **edit**, stellen Sie die entsprechenden Versionen und Effekte wieder her und wenden Sie das neue Deployment an.
- 3. Warten Sie auf den Check-in der Maschine und überprüfen Sie dann das gemeldete Deployment.
- 4. Öffnen Sie **Observe → policy** und die betroffenen Sessions, um zu bestätigen, dass gültige Arbeit nicht länger blockiert wird.
+ Gehe zu **Admin → Richtlinien-Editor** und öffne die **Bibliothek**, um Versionen einer Richtlinie zu vergleichen oder eine zu deaktivieren.
+
+
+ ```bash
+ fp policies list # every policy version
+ fp policies show # one version, with its source
+ ```
+
+
+## Rollback einer Maschine
+
+
+
+ 1. Gehe zu **Admin → Durchsetzung**, erweitere die betroffene Maschine und identifiziere ihren zuletzt als gut bekannten Richtliniensatz.
+ 2. Wähle **Bearbeiten**, stelle diese Versionen und Effekte wieder her und wende das neue Deployment an.
+ 3. Warte auf den Check-in der Maschine und verifiziere dann das gemeldete Deployment.
+ 4. Öffne **Beobachten → Richtlinie** und die betroffenen Sitzungen, um zu bestätigen, dass gültige Arbeit nicht länger blockiert wird.
- Der Rollback eines Cloud-Deployments ist ein Dashboard-Workflow. Verwenden Sie den lokalen Status, um zu bestätigen, dass das korrigierte Deployment die Maschine erreicht hat:
+ Jedes Deployment auf einer Maschine ist eine nummerierte Generation. Liste sie auf und stelle dann eine davon wieder her:
```bash
- failproofai config --status
+ fp fleet history
+ fp fleet rollback
```
- `failproofai config --pause` pausiert eingebaute, benutzerdefinierte und konventionsbasierte Policies für eine lokale Session. Cloud-verwaltete Policies werden dadurch nicht pausiert – es handelt sich also nicht um eine Umgehungslösung für ein fehlerhaftes Cloud-Deployment.
+ `rollback` erstellt eine neue Generation mit dem alten Satz, anstatt den Zähler zurückzusetzen, sodass der Verlauf nur erweiterbar bleibt. Es lehnt eine Generation ab, die eine inzwischen deaktivierte oder gelöschte Richtlinie benennt. Der Befehl benötigt eine angemeldete Sitzung mit `policies:write`. `fp fleet diff ` zeigt den Unterschied zwischen dem Beabsichtigten und dem, was die Maschine tatsächlich angewendet hat — der Status erscheint als `behind`, bis die Maschine das nächste Mal abfragt. Auf der Maschine selbst listet `failproofai policies` das aktuell laufende Deployment auf.
+## Eine Richtlinie von allen Maschinen entfernen
+
+```bash
+fp policies disable # remove it from every deployment carrying it
+fp policies enable # add it back
+```
+
+Jeder dieser Befehle erstellt eine neue Generation für jedes betroffene Deployment. Das Zurückrollen einer dieser Generationen ist jedoch nicht der Weg, ein `disable` rückgängig zu machen — `rollback` lehnt eine Generation ab, die eine deaktivierte Richtlinie benennt, und jede Generation vor dem Deaktivieren verweist auf diese. `fp policies enable` ist der richtige Weg zurück, und er erstellt seinerseits eine eigene neue Generation.
+
+## Rollback eines Pakets
+
+Ein Paket ist an das installierte Release gebunden; ein Rollback bedeutet daher die Installation eines früheren Releases:
+
+```bash
+failproofai policies show FailproofAI/policies --releases # every version it has published, and which one is here
+failproofai policies add FailproofAI/policies@a1b2c3d4e5f6 # pin that one
+```
+
+Ohne Terminal oder mit `--policy`, `--category` oder `--all` behält das erneute Hinzufügen die zuvor gewählte Teilmenge. Im Terminal ohne diese Optionen öffnet sich die Auswahl mit den Standardeinstellungen des Autors vorausgewählt, und die getroffene Auswahl ersetzt die vorherige — daher die bisherige Auswahl erneut bestätigen.
+
## Wann ein Rollback sinnvoll ist
-- Eine Policy blockiert eine erwartete Produktionsaktion.
-- Das Match-Volumen ist deutlich höher als beim beobachteten Rollout prognostiziert.
-- Eine Policy ist von Feldern abhängig, die eine Integration nicht bereitstellt.
-- Eine neue Version ändert das Verhalten außerhalb des beabsichtigten Failure-Modes.
+- Eine Richtlinie blockiert eine erwartete Produktionsaktion.
+- Das Übereinstimmungsvolumen ist erheblich höher als der beobachtete Rollout vorhergesagt hat.
+- Eine Richtlinie ist abhängig von Feldern, die eine Integration nicht bereitstellt.
+- Eine neue Version ändert das Verhalten außerhalb des vorgesehenen Fehlerfalls.
-Öffnen Sie nach dem Rollback die betroffenen Sessions und identifizieren Sie die Bedingung, die das False Positive verursacht hat. Erstellen Sie eine neue Version, testen Sie sowohl den unsicheren als auch den legitimen Fall und wiederholen Sie anschließend die Observe-Phase.
+Nach einem Rollback die betroffenen Sitzungen öffnen und die Ursache des False Positives ermitteln. Eine neue Version veröffentlichen, [testen](/de/policies/test) — sowohl den unsicheren als auch den legitimen Fall — und erneut beobachten, bevor die Durchsetzung aktiviert wird.
- Das Pausieren der Enforcement kann bei einem Vorfall angebracht sein, weitet jedoch die Angriffsfläche für jede aktive Policy in diesem Scope aus. Bevorzugen Sie nach Möglichkeit den Rollback der spezifischen Policy-Version.
+ `failproofai config --pause` pausiert lokale Richtlinien für eine Sitzung, jedoch niemals Cloud-verwaltete. Es ist daher kein Ausweg aus einem fehlerhaften Cloud-Deployment. Eine Pause weitet außerdem die Angriffsfläche für alle Richtlinien in ihrem Geltungsbereich aus; es ist vorzuziehen, die eine fehlerhafte Version zurückzurollen.
\ No newline at end of file
diff --git a/docs/de/policies/test.mdx b/docs/de/policies/test.mdx
new file mode 100644
index 000000000..a27fa4fec
--- /dev/null
+++ b/docs/de/policies/test.mdx
@@ -0,0 +1,60 @@
+---
+title: "Eine Policy testen"
+description: "Führe einen Backtest eines Entwurfs gegen vorhandenen Traffic durch und beweise, dass er stoppt, was gestoppt werden soll, und zulässt, was durchgehen muss – bevor eine Maschine ihn durchsetzt."
+icon: "flask-conical"
+---
+
+Teste jede Policy auf zwei Arten: gegen den Traffic, den deine Agents bereits erzeugt haben, und gegen eine legitime Aktion, die durchgelassen werden muss. Eine Policy, die nur den unsicheren Fall gesehen hat, wurde nicht ausreichend getestet.
+
+## Den Entwurf einem Backtest unterziehen
+
+
+
+ Der Policy-Editor spielt einen Entwurf gegen Aufrufe zurück, die deine Flotte bereits gemacht hat – bevor du ihn veröffentlichst.
+
+ 1. Öffne den Entwurf unter **Admin → Policy-Editor**. Der Editor bestätigt, dass er als JavaScript geparst wird.
+ 2. Wähle im Bereich **Backtest** die Agents und das Zeitfenster für die Wiedergabe – standardmäßig **alle Agents** und **30 Tage** – und lasse den letzten Filter auf **alles**, es sei denn, du möchtest die Auswahl eingrenzen.
+ 3. Wähle **Backtest ausführen**.
+
+ 
+
+ Das Ergebnis zeigt, was der Entwurf mit diesen Aufrufen gemacht hätte – einschließlich der Anzahl **funktionierender** Aufrufe, die er unterbrochen hätte. Das sind False Positives, die gefunden werden, bevor ein Agent auf sie trifft: Verfeinere den Entwurf und führe den Test erneut aus, bis diese Zahl akzeptabel ist.
+
+
+ Backtesting ist eine Dashboard-Funktion. Führe die Policy stattdessen über ein Terminal gegen selbst beschriebene Events aus (siehe unten).
+
+
+
+## Gegen ein selbst beschriebenes Event ausführen
+
+`fp policies test` führt eine Policy-Datei auf deinem Rechner gegen ein synthetisches Event aus und prüft die Entscheidung. Es wird nichts veröffentlicht und nichts erreicht die Cloud:
+
+```bash
+fp policies test ./checkout.policy.mjs --command "git push --force" --expect deny
+fp policies test ./checkout.policy.mjs --command "git push" --expect allow
+```
+
+Forme das Event mit `--event`, `--tool`, `--command` und `--file`. Der eigene `match`-Filter der Policy greift weiterhin, sodass eine Policy, die das beschriebene Event nicht abdeckt, `skipped` statt einer Entscheidung zurückgibt – in der Regel ein Zeichen dafür, dass ihr `match` enger ist als beabsichtigt.
+
+## Auf einem Rechner ausführen
+
+Setze sie als Nächstes auf deinem eigenen Rechner gegen deinen eigenen Agent durch:
+
+```bash
+failproofai policies --install --custom ./checkout.policy.mjs --scope project
+failproofai policies
+```
+
+Der erste Befehl validiert und installiert die Datei; der zweite bestätigt, dass sie geladen wurde – zusammen mit allem anderen, was hier durchgesetzt wird. Bitte den Agent, das zu tun, was die Policy stoppt, und beobachte, wie es abgelehnt wird; führe dann die legitime Version durch und beobachte, wie sie durchgeht. Niemand sonst wird beeinträchtigt.
+
+Prüfe auf einem mit der Cloud verbundenen Rechner beide Entscheidungen unter **Observe → Policy**: Filtere nach dem Policy-Namen und öffne dann jede verknüpfte Session, um den übereinstimmenden Tool-Input und den zurückgegebenen Grund zu bestätigen.
+
+## Testen, was Fehler verursacht
+
+Die Installation verweigert eine fehlende Datei, einen Syntaxfehler, einen unaufgelösten Import, eine Ausnahme auf oberster Ebene oder ein Modul, das beim Laden das Zeitlimit überschreitet – führe die Installation daher nach jeder Änderung an der Datei oder allem, was sie importiert, erneut aus. Zum Zeitpunkt der Durchsetzung wird dieselbe fehlerhafte Datei protokolliert und **übersprungen**, sodass alle anderen Policies weiter ausgeführt werden: Behandle eine Load-Warnung in Produktions-Logs als verlorene Durchsetzung. Convention-Dateien laden ohne den Installationsbefehl, daher füge in CI einen expliziten `failproofai policies --install --custom `-Schritt ein – dieser lässt den Build bei einer fehlerhaften Policy fehlschlagen.
+
+Speise danach das ein, was Agents tatsächlich senden, nicht nur den erwarteten Input: fehlende Felder, alternative Tool-Namen wie `Write` und `Edit`, Windows-Pfade, fehlerhaften Input. Gib auf jedem Pfad ein bewusstes `allow`, `instruct` oder `deny` zurück, halte die Funktion deterministisch und begrenze jeden externen Aufruf mit einem kurzen Timeout.
+
+## Dann veröffentlichen und beobachten
+
+Ein Backtest zeigt, was die Policy mit dem vorhandenen Traffic gemacht hätte; er kann nicht zeigen, was noch nicht gesehener Traffic auslösen wird. Wähle **Version veröffentlichen** im Editor (oder führe `fp policies publish` aus), dann [stelle sie](/de/policies/deploy) zunächst im **Observe**-Modus bereit – ihre Urteile werden aufgezeichnet und nichts wird blockiert – und setze sie durch, sobald ihre Treffer unsichere Aktionen von gültigen trennen.
\ No newline at end of file
diff --git a/docs/de/reference/cloud-cli.mdx b/docs/de/reference/cloud-cli.mdx
index 45b4e8536..25d68abbb 100644
--- a/docs/de/reference/cloud-cli.mdx
+++ b/docs/de/reference/cloud-cli.mdx
@@ -1,12 +1,12 @@
---
title: "Failproof Cloud CLI"
-description: "Vollständige Referenz für Abfragen und Verwaltung von Failproof AI Cloud mit fp."
+description: "Vollständige Referenz zur Abfrage und Verwaltung von Failproof AI Cloud mit fp."
icon: "cloud-cog"
---
-Verwende `fp`, um Cloud-Telemetrie einzusehen, cloud-verwaltete Durchsetzung (Richtlinien, Fleet-Deployments, Guardrail-Entscheidungen) zu verwalten sowie Audits, Befunde, Issues, Warnungen, Schlüssel, Benutzer, Abfragen und Einstellungen zu administrieren. Verwende [`failproofai`](/de/reference/failproof-cli) für lokale Hooks, Richtlinien, Erfassung und Machine-Enrollment.
+Verwende `fp` zum Überprüfen von Cloud-Telemetrie, zur Verwaltung von cloud-gesteuerter Durchsetzung (Richtlinien, Fleet-Deployments, Guardrail-Entscheidungen) sowie zur Verwaltung von Audits, Findings, Issues, Alerts, Schlüsseln, Benutzern, Abfragen und Einstellungen. Verwende [`failproofai`](/de/reference/failproof-cli) für lokale Hooks, Richtlinien, Capture und Machine-Enrollment.
-Installiere die veröffentlichte Cloud CLI als isoliertes Werkzeug:
+Installiere das veröffentlichte Cloud CLI als isoliertes Tool:
```bash
uv tool install fp-cloud-cli
@@ -26,13 +26,13 @@ fp whoami
fp [GLOBAL_OPTIONS] COMMAND [SUBCOMMAND] [ARGUMENTS] [OPTIONS]
```
-Globale Optionen müssen vor dem Befehl stehen:
+Globale Optionen müssen vor dem Befehl angegeben werden:
```bash
fp --json sessions --since 24h
```
-Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` für Hilfe im Terminal aus.
+Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` aus, um die Terminalhilfe anzuzeigen.
## CLI-Befehle
@@ -40,11 +40,11 @@ Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` für Hilfe im Ter
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp login` | Anmelden mit einem per E-Mail zugesandten Einmalcode und Auswahl einer Organisation. | `--email`, `-e`; `--org`; `--force` |
+| `fp login` | Anmeldung mit einem per E-Mail zugesandten Einmalcode und Auswahl einer Organisation. | `--email`, `-e`; `--org`; `--force` |
| `fp logout` | Gespeicherte Benutzersitzung widerrufen und entfernen. | — |
| `fp whoami` | Aktuelle Identität, Authentifizierungsmodus, Organisation und Berechtigungen anzeigen. | — |
| `fp version` | Installierte CLI-Version anzeigen. | — |
-| `fp help` | Hilfe zu Befehlen der obersten Ebene anzeigen. | — |
+| `fp help` | Hilfe zu den Befehlen der obersten Ebene anzeigen. | — |
```bash
fp login --email you@example.com --org reliability-team
@@ -57,23 +57,23 @@ fp whoami
fp events [OPTIONS]
```
-Listet einzelne Agent-Events auf. Der standardmäßige Light-Feed schließt rohe Payloads aus; verwende `--full` nur für eine eingegrenzte Untersuchung.
+Listet einzelne Agent-Events auf. Der Standard-Light-Feed schließt rohe Payloads aus; verwende `--full` nur für abgegrenzte Untersuchungen.
| Option | Beschreibung |
| --- | --- |
-| `--limit`, `-n ` | Maximale Gesamtzahl an Zeilen. Standard: `50`. |
+| `--limit`, `-n ` | Maximale Gesamtanzahl an Zeilen. Standard: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` oder `7d`. |
| `--from ` / `--to ` | ISO 8601 UTC-Bereich; überschreibt `--since`. |
-| `--env ` | Umgebungsfilter; Werte wiederholen oder kommagetrennt angeben. |
-| `--event-type ` | Event-Typ-Filter; Werte wiederholen oder kommagetrennt angeben. |
-| `--agent-id ` | Agent-Filter; Werte wiederholen oder kommagetrennt angeben. |
-| `--session-id ` | Sitzungsfilter; Werte wiederholen oder kommagetrennt angeben. |
-| `--search ` | Volltextsuche in Payloads; wiederholbar, ein beliebiger Begriff muss übereinstimmen. |
-| `--order asc\|desc` | Zeitreihenfolge. Standard: neueste zuerst. |
-| `--all` | Automatisch bis zu `--limit` paginieren. |
-| `--cursor ` | Von einem undurchsichtigen Cursor fortsetzen. |
-| `--page-size ` | Zeilen pro Anfrage bei `--all`; maximal `200`. |
-| `--full` | Rohe Payloads über den schwereren Event-Endpunkt einschließen. |
+| `--env ` | Umgebungsfilter; wiederholbar oder durch Komma getrennt. |
+| `--event-type ` | Event-Typ-Filter; wiederholbar oder durch Komma getrennt. |
+| `--agent-id ` | Agent-Filter; wiederholbar oder durch Komma getrennt. |
+| `--session-id ` | Session-Filter; wiederholbar oder durch Komma getrennt. |
+| `--search ` | Payload-Textsuche; wiederholbar, ein beliebiger Begriff reicht für einen Treffer. |
+| `--order asc\|desc` | Zeitliche Sortierung. Standard: neueste zuerst. |
+| `--all` | Automatische Paginierung bis zu `--limit`. |
+| `--cursor ` | Fortsetzung ab einem opaken Cursor. |
+| `--page-size ` | Zeilen pro Anfrage mit `--all`; maximal `200`. |
+| `--full` | Rohe Payloads über den aufwändigeren Event-Endpunkt einbeziehen. |
| `--fields ` | Nur ausgewählte Felder zurückgeben; bei Anforderung von `payload` wird der Full-Modus aktiviert. |
```bash
@@ -82,7 +82,7 @@ fp --json events --full --session-id --all --limit 10000
```
- `--all` paginiert **bis zu `--limit`**, was standardmäßig **50** beträgt — `--all` allein stoppt also bei 50 Zeilen. Wenn es vorzeitig stoppt, enthält die Antwort einen `next_cursor` zum Fortsetzen; `"next_cursor": null` bedeutet, dass der Feed tatsächlich erschöpft war.
+ `--all` paginiert **bis zu `--limit`**, was standardmäßig **50** ist — `--all` allein stoppt also bei 50 Zeilen. Wenn es vorzeitig stoppt, enthält die Antwort einen `next_cursor` zum Fortsetzen; `"next_cursor": null` bedeutet, dass der Feed tatsächlich vollständig verarbeitet wurde.
### Sessions
@@ -93,19 +93,19 @@ fp sessions [OPTIONS]
| Option | Beschreibung |
| --- | --- |
-| `--limit`, `-n ` | Maximale Gesamtzahl an Zeilen. Standard: `50`. |
+| `--limit`, `-n ` | Maximale Gesamtanzahl an Zeilen. Standard: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` oder `7d`. |
| `--from ` / `--to ` | ISO 8601 UTC-Bereich; überschreibt `--since`. |
-| `--env ` | Umgebungsfilter; Werte wiederholen oder kommagetrennt angeben. |
-| `--status ` | `done`, `error` oder `timeout`; Werte wiederholen oder kommagetrennt angeben. |
-| `--agent-id ` | Sitzungen mit einem der ausgewählten Agenten abgleichen. |
-| `--session-id ` | Sitzungsfilter; Werte wiederholen oder kommagetrennt angeben. |
-| `--all` | Automatisch bis zu `--limit` paginieren. |
-| `--cursor ` | Von einem undurchsichtigen Cursor fortsetzen. |
-| `--page-size ` | Zeilen pro Anfrage bei `--all`; maximal `200`. |
+| `--env ` | Umgebungsfilter; wiederholbar oder durch Komma getrennt. |
+| `--status ` | `done`, `error` oder `timeout`; wiederholbar oder durch Komma getrennt. |
+| `--agent-id ` | Sessions mit einem der ausgewählten Agents abgleichen. |
+| `--session-id ` | Session-Filter; wiederholbar oder durch Komma getrennt. |
+| `--all` | Automatische Paginierung bis zu `--limit`. |
+| `--cursor ` | Fortsetzung ab einem opaken Cursor. |
+| `--page-size ` | Zeilen pro Anfrage mit `--all`; maximal `200`. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
-| `--full-ids` | Sitzungs-IDs in der Terminalausgabe nicht kürzen. |
-| `--agents` | Agentenliste für Multi-Agenten-Sitzungen erweitern. |
+| `--full-ids` | Session-IDs in der Terminalausgabe nicht kürzen. |
+| `--agents` | Die Agentenliste für Multi-Agent-Sessions erweitern. |
### Evaluierungen
@@ -122,7 +122,7 @@ fp evals [OPTIONS]
| `--score KEY:MIN..MAX` | Score-Bereich; wiederholbar, alle Bereiche müssen übereinstimmen. |
| `--all`, `--cursor`, `--page-size` | Listenpaginierung steuern. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
-| `--full-ids` | Vollständige Sitzungs-IDs anzeigen. |
+| `--full-ids` | Vollständige Session-IDs anzeigen. |
| `--scores-full` | Alle Scores in der Terminalausgabe anzeigen. |
### Fehler
@@ -133,15 +133,15 @@ fp errors [OPTIONS]
| Option | Beschreibung |
| --- | --- |
-| `--aggregate` | Übereinstimmende Fehler zusammenfassen statt Zeilen aufzulisten. |
+| `--aggregate` | Übereinstimmende Fehler zusammenfassen anstatt Zeilen aufzulisten. |
| `--limit`, `-n ` | Maximale Listenzeilen. Standard: `50`. |
| `--since`, `--from`, `--to` | Zeitbereich auswählen. |
-| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Fehlermenge einschränken. |
+| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Die Fehlermenge eingrenzen. |
| `--search ` | Payload-Text durchsuchen; wiederholbar. |
-| `--order asc\|desc` | Zeitreihenfolge. |
+| `--order asc\|desc` | Zeitliche Sortierung. |
| `--all`, `--cursor`, `--page-size` | Listenpaginierung steuern. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
-| `--full-ids` | Vollständige Sitzungs-IDs anzeigen. |
+| `--full-ids` | Vollständige Session-IDs anzeigen. |
### Nutzung und Filterwerte
@@ -151,7 +151,7 @@ fp errors [OPTIONS]
| `fp list envs` | Beobachtete Umgebungen auflisten. |
| `fp list agents` | Beobachtete Agent-IDs auflisten. |
| `fp list event_types` | Event-Typen auflisten. |
-| `fp list score_filters` | Evaluierungsscore-Schlüssel auflisten. |
+| `fp list score_filters` | Evaluierungs-Score-Schlüssel auflisten. |
| `fp list models` | Modellnamen auflisten. |
| `fp list hooks` | Hook-Namen auflisten. |
| `fp list tools` | Tool-Namen auflisten. |
@@ -162,7 +162,7 @@ fp errors [OPTIONS]
| Befehl | Zweck |
| --- | --- |
| `fp orgs list` | Zugängliche Organisationen auflisten. |
-| `fp orgs switch [SLUG]` | Aktive Organisation speichern; bei Auslassung wird nachgefragt. |
+| `fp orgs switch [SLUG]` | Aktive Organisation speichern; fragt nach, wenn weggelassen. |
| `fp orgs current` | Aktive Organisation anzeigen. |
| `fp orgs perms` | Eigene Berechtigungen in der aktiven Organisation anzeigen. |
@@ -171,13 +171,13 @@ fp errors [OPTIONS]
| Befehl | Zweck | Optionen |
| --- | --- | --- |
| `fp keys list` | Organisationsschlüssel auflisten. | `--show-id`; `--fields ` |
-| `fp keys show NAME` | Einen Schlüssel und seine Berechtigungen anzeigen. | — |
-| `fp keys create NAME` | Einen Schlüssel erstellen und sein Geheimnis einmalig anzeigen. | `--permission-set`; `--add`; `--remove` |
-| `fp keys update NAME` | Das Berechtigungs-Set ersetzen oder Berechtigungen anpassen. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
-| `fp keys regenerate NAME` | Das Geheimnis rotieren und den Ersatz einmalig anzeigen. | `--yes`, `-y` |
+| `fp keys show NAME` | Einen Schlüssel und seine Grants anzeigen. | — |
+| `fp keys create NAME` | Einen Schlüssel erstellen und sein Secret einmalig anzeigen. | `--permission-set`; `--add`; `--remove` |
+| `fp keys update NAME` | Den Permission-Set ersetzen oder Grants anpassen. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp keys regenerate NAME` | Das Secret rotieren und den Ersatz einmalig anzeigen. | `--yes`, `-y` |
| `fp keys disable NAME` | Einen Schlüssel dauerhaft widerrufen. | `--yes`, `-y` |
-Berechtigungs-Tokens verwenden `resource:action`, z. B. `events:add`. Wiederhole `--add`, trenne Tokens durch Kommas oder verwende gepunktete Aktionen wie `events:read.add`.
+Berechtigungs-Tokens verwenden `resource:action`, z. B. `events:add`. Wiederhole `--add`, trenne Tokens durch Komma, oder verwende gepunktete Aktionen wie `events:read.add`.
### Abfragen
@@ -189,16 +189,16 @@ Berechtigungs-Tokens verwenden `resource:action`, z. B. `events:add`. Wiederhole
| `fp query update NAME` | Eine Abfrage aktualisieren oder umbenennen. | `--name`; `--sql`; `--description`; `--yes`, `-y` |
| `fp query delete NAME` | Eine gespeicherte Abfrage löschen. | `--yes`, `-y` |
| `fp query run [NAME]` | Eine gespeicherte Abfrage oder Ad-hoc-SQL ausführen. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
-| `fp query schema [TABLE]` | Abfragbare Tabellen auflisten oder eine Tabelle untersuchen. | — |
+| `fp query schema [TABLE]` | Abfragbare Tabellen auflisten oder eine Tabelle inspizieren. | — |
### Benutzer
| Befehl | Zweck | Optionen |
| --- | --- | --- |
| `fp users list` | Organisationsmitglieder auflisten. | `--active-only`; `--show-id` |
-| `fp users show EMAIL` | Ein Mitglied und seine Berechtigungen anzeigen. | — |
+| `fp users show EMAIL` | Ein Mitglied und seine Grants anzeigen. | — |
| `fp users create EMAIL` | Ein Mitglied hinzufügen. | `--permission-set`; `--add`; `--remove` |
-| `fp users update EMAIL` | Die Berechtigungen eines Mitglieds ändern. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp users update EMAIL` | Grants eines Mitglieds ändern. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
| `fp users disable EMAIL` | Anmeldung deaktivieren. | `--yes`, `-y` |
| `fp users enable EMAIL` | Anmeldung wieder aktivieren. | `--yes`, `-y` |
@@ -210,41 +210,41 @@ Berechtigungs-Tokens verwenden `resource:action`, z. B. `events:add`. Wiederhole
| `fp settings schema` | Akzeptierte Werte und Beschreibungen anzeigen. | — |
| `fp settings set KEY` | Eine vorhandene Einstellung ändern. | genau eine von `--value`, `--json-value`, `--file`; optional `--yes`, `-y` |
-### Warnungen
+### Alerts
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp alerts list` | Warnungsregeln auflisten. | `--show-id` |
-| `fp alerts show NAME` | Eine Warnung anzeigen. | — |
-| `fp alerts create NAME` | Eine Warnung erstellen. | `--file`; `--description`; `--severity`; `--trigger-kind`; `--trigger-spec`; `--channels`; `--eval-interval-secs`; `--min-breaches`; `--eval-window` |
-| `fp alerts update NAME` | Eine Warnung aktualisieren oder umbenennen. | Erstellungsoptionen plus `--name`; `--yes`, `-y` |
-| `fp alerts delete NAME` | Eine Warnung löschen. | `--yes`, `-y` |
+| `fp alerts list` | Alert-Regeln auflisten. | `--show-id` |
+| `fp alerts show NAME` | Einen Alert anzeigen. | — |
+| `fp alerts create NAME` | Einen Alert erstellen. | `--file`; `--description`; `--severity`; `--trigger-kind`; `--trigger-spec`; `--channels`; `--eval-interval-secs`; `--min-breaches`; `--eval-window` |
+| `fp alerts update NAME` | Einen Alert aktualisieren oder umbenennen. | Erstellungsoptionen plus `--name`; `--yes`, `-y` |
+| `fp alerts delete NAME` | Einen Alert löschen. | `--yes`, `-y` |
| `fp alerts test NAME` | Eine Testbenachrichtigung senden. | `--channels`; `--yes`, `-y` |
-Warnungsschweregrade sind `info`, `warning` und `critical`. Trigger-Arten sind `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound` und `per_event`. Evaluierungsintervalle müssen zwischen 30 und 86.400 Sekunden liegen.
+Alert-Schweregrade sind `info`, `warning` und `critical`. Trigger-Arten sind `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound` und `per_event`. Evaluierungsintervalle müssen zwischen 30 und 86.400 Sekunden liegen.
### Audits
| Befehl | Zweck | Optionen |
| --- | --- | --- |
| `fp audits list` | Audits auflisten. | `--enabled-only`; `--show-id` |
-| `fp audits show NAME` | Eine Audit-Definition und ihren Zustand anzeigen. | — |
-| `fp audits create NAME` | Ein Audit erstellen und sofort dessen ersten Lauf in die Warteschlange stellen. | Siehe [Erstellungsoptionen](#audit-create-options). |
-| `fp audits edit NAME` | Audit-Einstellungen ersetzen, wobei nicht angegebene Werte beibehalten werden. | Definitionsoptionen zur Erstellung; `--name`; `--yes`, `-y` |
-| `fp audits delete NAME` | Ein Audit, seine Befunde und den Ausführungsverlauf löschen. | `--yes`, `-y` |
-| `fp audits run NAME` | Einen manuellen Lauf in die Warteschlange stellen. | — |
+| `fp audits show NAME` | Eine Audit-Definition und ihren Status anzeigen. | — |
+| `fp audits create NAME` | Einen Audit erstellen und sofort seinen ersten Durchlauf einreihen. | Siehe [Erstellungsoptionen](#audit-create-options). |
+| `fp audits edit NAME` | Audit-Einstellungen ersetzen, ohne nicht angegebene Werte zu verändern. | Definitionsoptionen für die Erstellung; `--name`; `--yes`, `-y` |
+| `fp audits delete NAME` | Einen Audit, seine Findings und den Ausführungsverlauf löschen. | `--yes`, `-y` |
+| `fp audits run NAME` | Einen manuellen Durchlauf einreihen. | — |
| `fp audits runs NAME` | Ausführungsverlauf auflisten. | `--limit`, `-n`; `--show-id` |
-| `fp audits context-show NAME` | Den Kurztext und den URL-Abrufstatus der Referenz anzeigen. | — |
-| `fp audits context-set NAME` | Den Kurztext oder die Referenz-URLs ändern. | `--text`; `--text-file`; `--url`; `--clear-urls` |
+| `fp audits context-show NAME` | Den Brief und den Status des URL-Abrufs anzeigen. | — |
+| `fp audits context-set NAME` | Den Brief oder Referenz-URLs ändern. | `--text`; `--text-file`; `--url`; `--clear-urls` |
| `fp audits context-refresh NAME` | Referenz-URLs erneut abrufen. | — |
-| `fp audits findings` | Befunde auflisten. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
-| `fp audits finding FINDING_ID` | Einen Befund und seine Belege anzeigen. | — |
-| `fp audits ack FINDING_ID` | Einen Befund bestätigen. | `--reason` |
+| `fp audits findings` | Findings auflisten. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
+| `fp audits finding FINDING_ID` | Ein Finding und seine Belege anzeigen. | — |
+| `fp audits ack FINDING_ID` | Ein Finding bestätigen. | `--reason` |
| `fp audits mute FINDING_ID` | Ein wiederkehrendes Muster unterdrücken. | `--reason`; `--yes`, `-y` |
| `fp audits dismiss FINDING_ID` | Ein Muster als nicht handlungsrelevant markieren und unterdrücken. | `--reason`; `--yes`, `-y` |
-| `fp audits resolve FINDING_ID` | Einen Befund als behoben markieren, ohne künftige Unterdrückung. | `--yes`, `-y` |
-| `fp audits reopen FINDING_ID` | Einen Befund in die aktive Warteschlange zurückgeben und die Unterdrückung aufheben. | — |
-| `fp audits assign FINDING_ID` | Den Eigentümer eines Befunds festlegen. | erforderlich: `--to ` |
+| `fp audits resolve FINDING_ID` | Ein Finding als behoben markieren, ohne künftige Unterdrückung. | `--yes`, `-y` |
+| `fp audits reopen FINDING_ID` | Ein Finding in die aktive Warteschlange zurückstellen und die Unterdrückung aufheben. | — |
+| `fp audits assign FINDING_ID` | Den Eigentümer eines Findings festlegen. | erforderlich: `--to ` |
#### Audit-Erstellungsoptionen
@@ -261,27 +261,27 @@ fp audits create checkout-reliability \
| Option | Beschreibung |
| --- | --- |
-| `--file ` | Definition auf JSON basieren oder `-` für stdin verwenden. Explizite Flags überschreiben Dateiwerte. |
+| `--file ` | Definition auf JSON basieren, oder `-` für stdin verwenden. Explizite Flags überschreiben Dateiwerte. |
| `--description ` | Die Fehlerfrage oder den Zweck beschreiben. |
| `--enabled` / `--disabled` | Planung ein- oder ausschalten. Standard: aktiviert. |
| `--schedule-interval-secs ` | `3600`–`604800`. Standard: `86400`. |
-| `--schedule-anchor ` | Fester UTC-Zeitpunkt im ISO 8601-Format. Standard: nächste 09:00 UTC. |
-| `--window-mode since_last\|fixed` | Nach dem letzten vollständig analysierten Fenster fortfahren oder ein rollierendes Fenster wiederholt untersuchen. Standard: `since_last`. |
+| `--schedule-anchor ` | Fester UTC-Zeitpunkt in ISO 8601-Form. Standard: nächstes 09:00 UTC. |
+| `--window-mode since_last\|fixed` | Nach dem letzten vollständig analysierten Fenster fortsetzen oder ein gleitendes Fenster wiederholt untersuchen. Standard: `since_last`. |
| `--lookback-window-secs ` | `3600`–`7776000`. Standard: `604800`. |
| `--scope ''` | Nach `environments`, `agent_ids` oder anderen unterstützten Scope-Feldern filtern. |
-| `--ignore-error-type ` | Fehlertypen ausschließen; wiederholen oder kommagetrennt angeben. |
+| `--ignore-error-type ` | Fehlertypen ausschließen; wiederholbar oder durch Komma getrennt. |
| `--llm` / `--no-llm` | Agentische Analyse aktivieren oder deaktivieren. Standard: aktiviert. |
-| `--top-k