From 011555fb785d49bebf8243c1ae0e55eb66f98b8b Mon Sep 17 00:00:00 2001 From: Chaim Date: Sun, 17 May 2026 11:23:47 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20update=20CLAUDE.md=20=E2=80=94=20webhoo?= =?UTF-8?q?k=20pipeline,=20scheduled=20jobs,=20paperclip=5Fapi.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Document emit_case_status_webhook flow and plugin integration - Document stale-case-reminder and weekly-feedback-analysis jobs - Fix paperclip_api.py vs paperclip_client.py (both exist, api.py is current) - Add warning: weekly-feedback-job CEO has no issueId Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8de3461..501b89c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -126,9 +126,10 @@ │ ├── training/ ← 4 החלטות לאימון (DOCX) │ ├── exports/ ← טיוטות DOCX מיוצאות │ └── cases/{case-number}/ ← תיקי עררים (מבנה שטוח, סטטוס ב-DB) -├── web/ ← FastAPI backend (Python): 75 API endpoints +├── web/ ← FastAPI backend (Python): 75+ API endpoints │ ├── app.py ← API ראשי -│ ├── paperclip_client.py ← אינטגרציית Paperclip +│ ├── paperclip_api.py ← אינטגרציית Paperclip: `pc_request()` + `emit_case_status_webhook()` +│ ├── paperclip_client.py ← legacy client (ישן — השתמש ב-paperclip_api.py) │ └── gitea_client.py ← אינטגרציית Gitea ├── web-ui/ ← Next.js frontend (TypeScript/React): ממשק המשתמש │ └── next.config.ts ← proxy: /api/* → FastAPI :8000 @@ -197,6 +198,32 @@ - הסקריפט מסנן local skills שלא קיימים ב-CMPA (מציג אזהרה), משתמש ב-API (לא DB ישיר), יוצר revisions, idempotent. - שאלות ה-skill הרשמי של Paperclip — `paperclip` skill תחת `paperclipai/paperclip`. +### Webhook יוצא — עדכון סטטוס תיק לפלאגין + +כשסטטוס תיק משתנה דרך `PUT /api/cases/{case_number}`, הבקאנד שולח webhook אסינכרוני לפלאגין: + +``` +PUT /api/cases/{case_number} → emit_case_status_webhook() [BackgroundTask] + → POST /api/plugins/marcusgroup.legal-ai/webhooks/case-status + → plugin-legal-ai/onWebhook() + → comment בעברית על issue + CEO wakeup (כשסטטוס = qa_failed) +``` + +- הקוד ב-`web/paperclip_api.py` (`emit_case_status_webhook`), fire-and-forget, timeout 5s +- הפלאגין שומר idempotency key ב-state עם TTL 5 דקות למניעת spam על retry +- `GET /api/cases/stale?days=N` — תיקים שלא עודכנו N ימים; מוחרגים: `new`, `final`, `exported` +- `GET /api/chair-feedback/weekly-summary` — סיכום פידבק YU"R לשבוע האחרון + +### Scheduled Jobs (plugin-legal-ai) + +| Job | לוח זמנים | מה עושה | +|-----|-----------|---------| +| `stale-case-reminder` | יומי 08:00 | שולח comment אזהרה על תיקים תקועים >3 ימים | +| `weekly-feedback-analysis` | ראשון 19:00 | מעיר CEO לניתוח פידבק YU"R ועדכון `docs/legal-decision-lessons.md` | +| `sync-case-status` | כל 30 דק' | מסנכרן סטטוסי תיקים בין legal-ai ל-Paperclip | + +CEO שמתעורר מ-`weekly-feedback-job` כותב לקובץ בלבד — **אין לו issueId, אל תנסה לפרסם comment או לסגור issue**. + ### External adapters — `deepseek_local` - מיקום ה-package: [adapters/deepseek-paperclip-adapter/](adapters/deepseek-paperclip-adapter/) (לא ב-`node_modules`). - רישום ב-Paperclip: רשומה ב-`~/.paperclip/adapter-plugins.json` (נטען אוטומטית ב-startup דרך `buildExternalAdapters`). אין צורך בעריכת `node_modules`.