title: العمارة description: “كيفية عمل معالج الخطاف وتحميل الإعدادات وتقييم السياسات بشكل داخلي” icon: sitemap
تشرح هذه الوثيقة كيفية عمل failproofai بشكل داخلي: كيفية اعتراض نظام الخطاف لاستدعاءات أدوات الوكيل، وكيفية تحميل ودمج الإعدادات، وكيفية تقييم السياسات، وكيفية مراقبة لوحة التحكم لنشاط الوكيل.نظرة عامة
يمتلك failproofai نظامين فرعيين مستقلين:- معالج الخطاف - عملية سطر أوامر سريعة يستدعيها Claude Code على كل استدعاء أداة وكيل. يقيّم السياسات ويعيد قرارًا.
- مراقب الوكيل (لوحة التحكم) - تطبيق ويب Next.js لمراقبة جلسات الوكيل وإدارة السياسات.
~/.failproofai/ ومجلد .failproofai/ الخاص بالمشروع، لكنهما يعملان كعمليات منفصلة ويتصلان فقط عبر نظام الملفات.
معالج الخطاف
التكامل مع Claude Code
عند تشغيلfailproofai policies --install، يكتب إدخالات مثل هذه في ~/.claude/settings.json:
failproofai --hook PreToolUse كعملية فرعية قبل كل استدعاء أداة، مرسلاً حمولة JSON عبر stdin.
تنسيق الحمولة
PostToolUse، تحتوي الحمولة أيضًا على tool_result مع مخرجات الأداة.
يفرض المعالج حدًا أقصى لـ stdin بحجم 1 ميجابايت. يتم تجاهل الحمولات التي تتجاوز هذا الحد وجميع السياسات تسمح ضمنيًا.
تنسيق الاستجابة
رفض (PreToolUse):- رمز الخروج:
2 - السبب مكتوب في stderr (وليس stdout)
- رمز الخروج:
0 - stdout فارغ
allow(message) للسياسة بإرسال سياق معلومات إلى Claude حتى عند السماح بالعملية. يكتب معالج الخطاف JSON التالي إلى stdout (وليس ملف إعدادات — هذه هي استجابة المعالج لـ Claude Code، تماماً مثل الإجابات على الرفض والتوجيه أعلاه):
- رمز الخروج:
0(العملية مسموحة) - عند عودة عدة سياسات
allowبرسالة، يتم ربط رسائلها بفواصل سطر جديد في سلسلةadditionalContextواحدة - إذا لم توفر أي سياسة رسالة، يكون stdout فارغاً (نفس السابق)
خط أنابيب المعالجة
ينفذsrc/hooks/handler.ts خط الأنابيب الكامل:
تحميل الإعدادات
يطبقsrc/hooks/hooks-config.ts تحميل الإعدادات بثلاث نطاقات.
enabledPolicies- اتحاد مزال التكرار عبر جميع الملفات الثلاثةpolicyParams- لكل سياسة، الملف الأول الذي يعرّفها يفوز بالكاملcustomPoliciesPath- الملف الأول الذي يعرّفه يفوزllm- الملف الأول الذي يعرّفه يفوز
readHooksConfig() (العام فقط) للقراءة والكتابة، حيث لا يتم استدعاؤها مع cwd المشروع.
تقييم السياسة
يشغلsrc/hooks/policy-evaluator.ts السياسات بالترتيب.
لكل سياسة:
- البحث عن مخطط
paramsالخاص بالسياسة (إن وجد). - قراءة
policyParams[policy.name]من الإعدادات المدمجة. - دمج القيم المقدمة من قبل المستخدم فوق الافتراضيات في المخطط لإنتاج
ctx.params. - استدعاء
policy.fn(ctx)مع السياق المحل. - إذا كانت النتيجة
deny، توقف على الفور وأعد هذا القرار. - إذا كانت النتيجة
instruct، تراكم الرسالة والمتابعة. - إذا كانت النتيجة
allow، انتقل إلى السياسة التالية.
- إذا تم إرجاع أي
deny، أصدر استجابة الرفض. - إذا تم جمع أي عائدات
instruct، أصدر استجابة توجيه واحدة مع ربط جميع الرسائل. - وإلا، أصدر استجابة السماح (stdout فارغ، الخروج 0).
السياسات المدمجة
يعرّفsrc/hooks/builtin-policies.ts جميع 39 سياسة مدمجة كائنات BuiltinPolicyDefinition:
params تعلن PolicyParamsSchema بأنواع وافتراضيات لكل معامل. يحقن مقيّم السياسة القيم المحلة في ctx.params قبل استدعاء fn. تقرأ دوال السياسة ctx.params بدون حماية فارغة لأن الافتراضيات تُطبق دائماً أولاً.
يستخدم مطابقة الأنماط داخل السياسات رموز الأوامر المحللة (argv)، وليس مطابقة السلسلة النصية الخام. وهذا يمنع الالتفاف عبر حقن عامل الأوامر (على سبيل المثال، نمط لـ sudo systemctl status * لا يمكن الالتفاف عليه بإضافة ; rm -rf / إلى الأمر).
السياسات المخصصة
ينفذsrc/hooks/custom-hooks-registry.ts سجل مدعوم globalThis:
src/hooks/custom-hooks-loader.ts ملف السياسة الخاص بالمستخدم:
- اقرأ
customPoliciesPathمن الإعدادات؛ تخطي إذا كان غائباً. - حل إلى مسار مطلق؛ تحقق من وجود الملف.
- أعد كتابة جميع واردات
from "failproofai"إلى مسار dist الفعلي حتى يتم حلcustomPoliciesإلى نفس سجلglobalThis. - أعد كتابة الواردات المحلية العابرة بشكل متكرر لضمان التوافقية ESM.
- اكتب ملفات
.mjsمؤقتة وimport()ملف الدخول. - اتصل بـ
getCustomHooks()لاسترجاع الخطافات المسجلة. - نظف جميع الملفات المؤقتة في كتلة
finally.
~/.failproofai/hook.log ويعيد المحمل مصفوفة فارغة. السياسات المدمجة غير متأثرة.
يتم تقييم السياسات المخصصة بعد جميع السياسات المدمجة. إنكار السياسة المخصصة لا يزال يختصر السياسات المخصصة الإضافية (لكن جميع المدمجة قد عملت بالفعل في تلك النقطة).
تسجيل النشاط
بعد كل حدث خطاف، يضيف المعالج سطر JSONL إلى~/.failproofai/hook-activity.jsonl:
عمارة لوحة التحكم
لوحة التحكم هي تطبيق Next.js 16 يستخدم App Router مع React Server Components و Server Actions.- تستدعي مكونات الصفحة
lib/projects.tsوlib/log-entries.tsلقراءة بيانات المشروع/الجلسة مباشرة من نظام الملفات (بدون طبقة API للقراءات). - تستخدم صفحة السياسات Server Actions لجميع التطبيقات (تبديل، تحديث المعاملات، التثبيت/الإزالة).
- يحلل عارض الجلسة تنسيق نص Claude JSONL ويعرض جدول زمني للرسائل واستدعاءات الأدوات.
- بدون قاعدة بيانات - جميع الحالة الدائمة موجودة في ملفات عادية (
~/.failproofai/،~/.claude/projects/). - Server Actions للتطبيقات - لا حاجة إلى REST API لعمليات CRUD.
- React Server Components لصفحات القراءة - تحميل أولي أسرع، بدون حزمة عميل لجلب البيانات.
- مكونات العميل فقط حيث تكون التفاعلية مطلوبة (تبديلات السياسة، بحث النشاط، عارض السجل).

