feat(telemetry): אירועי-סוכן מובנים בשער-הפלטפורמה — נראוּת לולאות-recovery (#219) #404
Reference in New Issue
Block a user
Delete Branch "worktree-agent-telemetry"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
מה
פרוסה ראשונה של #219 (למידה מ-Gastown OTel): טלמטריה מובנית על שכבת-הסוכנים, כדי להפוך דיבוג לולאות-recovery מפורנזיקה-ידנית מול Paperclip DB (
agent_wakeup_requests/heartbeat_runs) לנראוּת בזמן-אמת.איך
web/agent_telemetry.py— emitter אגנוסטי-לפלטפורמה.emit(event, **fields)+ דקורטורinstrument(...)שעוטף async-op, מודדduration_ms, גוזרoutcome(ok/noopל-{"ok":False}/errorבזריקה), ומריםresult_keys(למשלcancelledמה-reaper). schema יציב (ts/v/event/outcome+flat fields),_SINKמבודד → JSON-line על loggeragent.telemetryהיום, OTLP מחר בלי שינוי call-site.web/agent_platform_port.pyבלבד (התפר היחיד) — כלpc_*משנה-מצב נעטף: כל ה-wakeups (agent.wakeupעםagent_role/case/issue),agent.comment,interaction.reaped/cancelled,run.cancelled,agent.session_reset. השמות הציבוריים והחתימות נשמרים — app.py לא משתנה. פעולות read-only (list_live_runs/get_run_log…) לא מחווטות בכוונה (לא מעירות ולא משנות disposition).Invariants
agent_telemetryלא מייבא Paperclip; אירועים בשמות-דומיין שורדים החלפת-פלטפורמה; הפליטה מהשער בלבד. ליבת-האינטליגנציה (mcp-server/src) לא נגעה.בדיקות
web/tests/test_agent_telemetry.py— 6 בדיקות (schema+drop-None, result_keys, noop, re-raise-after-error, שקיפות-דקורטור, sink-לא-מפיל). ✅ עוברות.המשך
מזין את #222 (טקסונומיית-בריאות Zombie/Stalled — נגזרת מאותם אירועים). backend OTLP = פרוסה נפרדת (
_SINKswap).🤖 Generated with Claude Code
מוסיף web/agent_telemetry.py — emitter אגנוסטי-לפלטפורמה שפולט אירוע JSON מובנה לכל פעולת-פלטפורמה משנת-מצב (wakeup/comment/interaction-reap/cancel/ run-cancel/session-reset). מטרה: להפוך דיבוג לולאות-recovery מפורנזיקה-ידנית מול Paperclip DB (agent_wakeup_requests/heartbeat_runs) לנראוּת בזמן-אמת. - הפליטה מחווטת ב-web/agent_platform_port.py בלבד (התפר היחיד) — כל pc_* משנה-מצב נעטף ב-instrument(); השמות הציבוריים והחתימות נשמרים, app.py לא משתנה. - אגנוסטי-לפלטפורמה (G12): agent_telemetry לא מייבא Paperclip; אירועים בשמות-דומיין שורדים החלפת-פלטפורמה. מסלול-פליטה יחיד (G2). - OTLP-ready ("logs first"): schema יציב + _SINK מבודד להחלפה עתידית בלי שינוי call-site. - error מ-op נפלט כאירוע ואז נזרק-מחדש — אין בליעה שקטה (§6). - store-UTC (feedback_israel_time). 6 בדיקות pytest (web/tests/test_agent_telemetry.py). Invariants: מקיים G2 (מסלול-טלמטריה יחיד), G12/INV-PORT1 (פליטה מהשער, ליבה נקייה), כלל-הנדסה §6 (אין בליעה שקטה). מזין את #222 (טקסונומיית-בריאות). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>