الانتقال إلى المحتوى الرئيسي

سجل زمني كامل

كل حدث يُطلق في وولف فيش يتم تسجيله في ملف Markdown يومي. يمنحك هذا سجلاً زمنياً كاملاً لكل ما حدث — المدخلات والتصنيفات واستدعاءات LLM وتنفيذ الأدوات وقرارات الأمان وعمليات الذاكرة والمزيد.

الموقع

brain/corpus/YYYY-MM-DD.log.md
ملف واحد في اليوم. سجل اليوم دائماً في:
brain/corpus/$(date +%Y-%m-%d).log.md

كيف يعمل

يلفّ ناقل أحداث corpus كل استدعاء emit() بالتسجيل. يتم تخزين الأحداث مؤقتاً لمدة ثانيتين قبل الكتابة على القرص — ليس بالوقت الفعلي تماماً، لكنه قريب بما يكفي لتصحيح الأخطاء.
يتم تنظيف سجلات الأحداث تلقائياً بعد 7 أيام. إذا كنت بحاجة للاحتفاظ بالسجلات لفترة أطول، انسخها خارج مجلد corpus/ أو عدّل مدة الاحتفاظ في config.json.

أنواع الأحداث

يُصدر النظام أكثر من 30 نوع حدث. إليك الأكثر فائدة لتصحيح الأخطاء:
الحدثمتى يُطلق
input.receivedالمستخدم يرسل رسالة
input.classifiedيتم تحديد نية الرسالة
context.builtprefrontal ينتهي من تجميع السياق
llm.requestيُرسل الطلب إلى مزود LLM
llm.responseLLM يُرجع استجابة
llm.stream.startيبدأ البث
llm.stream.endيكتمل البث
tool.calledLLM يطلب استدعاء أداة
tool.completedينجح تنفيذ الأداة
tool.failedيفشل تنفيذ الأداة
safety.allowedamygdala يسمح بالعملية
safety.blockedamygdala يحظر العملية
safety.approvedالمستخدم يوافق على عملية محظورة
safety.deniedالمستخدم يرفض عملية محظورة
task.createdmotor يبدأ مهمة جديدة
task.stepخطوة مهمة تكتمل
task.completedالمهمة تنتهي بنجاح
task.failedالمهمة تفشل بعد إعادة المحاولات
memory.savedhippocampus يحفظ حلقة
memory.retrievedhippocampus يسترجع شظايا
capability.loadedcerebellum يُحمّل قدرة
capability.errorفشل تحميل قدرة
health.warninghypothalamus يكتشف مشكلة
health.criticalصحة النظام متدهورة

صيغة السجل

كل إدخال يبدو هكذا:
## 14:30:22.847 [input.received]
- **turnId**: turn-a8f3c
- **channel**: desktop
- **content**: Can you check if the server is running?

## 14:30:22.901 [input.classified]
- **turnId**: turn-a8f3c
- **intent**: tool_use
- **confidence**: 0.94

## 14:30:23.156 [context.built]
- **turnId**: turn-a8f3c
- **tokens**: 8420
- **skills**: shell, filesystem
- **memoryFragments**: 2

## 14:30:24.302 [llm.response]
- **turnId**: turn-a8f3c
- **provider**: openai
- **model**: gpt-4o
- **toolCalls**: 1
- **inputTokens**: 8420
- **outputTokens**: 89

## 14:30:24.310 [tool.called]
- **turnId**: turn-a8f3c
- **taskId**: TASK-1747
- **tool**: shell_exec
- **args**: {"command": "systemctl status myapp"}

## 14:30:24.315 [safety.allowed]
- **turnId**: turn-a8f3c
- **tool**: shell_exec
- **reason**: no danger_patterns matched

## 14:30:25.102 [tool.completed]
- **turnId**: turn-a8f3c
- **taskId**: TASK-1747
- **tool**: shell_exec
- **duration**: 792ms
- **exitCode**: 0

## 14:30:25.108 [task.completed]
- **turnId**: turn-a8f3c
- **taskId**: TASK-1747
- **steps**: 1
- **totalDuration**: 792ms

تتبع رسالة

كل حدث يتضمن turnId. لمتابعة رسالة واحدة عبر خط الأنابيب بالكامل، ابحث عن معرف الدور:
grep -A 3 "turn-a8f3c" brain/corpus/2025-05-16.log.md
يُظهر لك هذا كل حدث مرتبط بذلك التفاعل بالترتيب الزمني.

سيناريوهات تصحيح شائعة

ابحث في السجل عن معرف الدور وابحث عن:
  1. input.classified — هل تم التعرف على النية كـ tool_use؟
  2. context.built — هل تم تضمين مهارة القدرة؟
  3. llm.response — هل أخرج النموذج عدد toolCalls أكبر من 0؟
إذا لم يُنتج النموذج استدعاء أداة، فالمشكلة في السياق (تحقق من لقطة التصحيح). إذا أنتج استدعاءً لكن لم يحدث شيء بعده، ابحث عن حدث safety.blocked.

المراقبة المباشرة

شاهد السجل في الوقت الفعلي أثناء التطوير:
tail -f ~/.wolffish/workspace/brain/corpus/$(date +%Y-%m-%d).log.md
ادمج مع grep --line-buffered لتصفية أنواع أحداث محددة في الوقت الفعلي:
tail -f brain/corpus/$(date +%Y-%m-%d).log.md | grep --line-buffered "safety\|tool\."