feat(ops): פאנל "מתאמי-סוכנים" ב-/operations — מעבר-אדפטר בכפתור #248

Merged
chaim merged 1 commits from worktree-adapter-migrate-ui into main 2026-06-13 12:12:40 +00:00
Owner

הקשר

שלב-ה-UI של מנגנון מעבר-האדפטר (PR #247 — המנוע ב-CLI). מוסיף כפתור-מעבר ב-/operations כך שחיים לא נוגע ב-dropdown הגולמי של Paperclip.

אתגר ארכיטקטוני: קונטיינר legal-ai לא יכול לבצע את המעבר (צריך FS-הוסט — עותקי-הוראות נטולי-frontmatter, קובץ-הגדרות gemini — ו-DB מובנה). הפתרון: הרצה host-side דרך גשר-court-fetch (8771), בדיוק כמו כפתורי-pm2 הקיימים.

מה ה-PR עושה

  • court_fetch_service/server.py — endpoint /adapter-migration מאומת (Bearer COURT_FETCH_SHARED_SECRET) שמריץ את scripts/migrate_agent_adapter.py עם allowlist-פעולות ו-args אטומיים (create_subprocess_exec, ללא shell; הסקריפט מאמת אדפטרים/מודלים). נשמר symbol-light — בלי enums/מונחי-Paperclip — כדי לא לדלוף G12 לשכבת mcp-server.
  • web/app.py — proxy POST /api/operations/agents/migrate-adapter → הגשר (Bearer, כמו _ops_pm2_control).
  • web-uiuseMigrateAdapter (operations.ts) + AgentAdaptersPanel לפי המוקאפ המאושר 02d-operations-adapters.html:
    • roster per-role (מתאם נוכחי + מודל + בורר-יעד), מחזור usePaperclipAgents.
    • סרגל-חירום גלובלי: "העבר הכל ל-Gemini " / "החזר הכל ל-Claude".
    • דיאלוג-אישור שמריץ preflight (check) ומציג את הפלט, עם toggle "שחרר כלי-כתיבה" כשיש conflict; חוסם אישור אם preflight נכשל.
    • דגלי "מועבר · fallback" / "⚠ א-סימטרי בין החברות".

עיצוב

אושר ע"י חיים בשער Claude Design (פרויקט "עוזר משפטי — IA Redesign (X17)", 02d-operations-adapters.html) — per web-ui/AGENTS.md.

בדיקות

  • tsc --noEmit נקי · eslint נקי · py_compile נקי (server.py + app.py).
  • E2E מלא יבוצע בפריסה (להלן).

Deploy (אחרי מיזוג)

  1. גשר (host, pm2): git pull בעץ-ההוסט /home/chaim/legal-ai → הוספת PAPERCLIP_BOARD_API_KEY ל-/home/chaim/.legal-court-fetch-service.envpm2 restart legal-court-fetch-service --update-env.
  2. app.py + UI: Coolify (commit→push→build) + npm run api:types.

Invariants

  • G12 — הגשר symbol-light; הלוגיקה ה-Paperclip-ספציפית נשארת ב-scripts/ (שכבת SHELL).
  • INV-MC1 — שתי החברות יחד.
  • INV-IA — "מקום אחד" (/operations). המשך FU-8a.

🤖 Generated with Claude Code

## הקשר שלב-ה-UI של מנגנון מעבר-האדפטר ([PR #247](../pulls/247) — המנוע ב-CLI). מוסיף כפתור-מעבר ב-/operations כך שחיים לא נוגע ב-dropdown הגולמי של Paperclip. **אתגר ארכיטקטוני:** קונטיינר legal-ai לא יכול לבצע את המעבר (צריך FS-הוסט — עותקי-הוראות נטולי-frontmatter, קובץ-הגדרות gemini — ו-DB מובנה). הפתרון: הרצה host-side דרך **גשר-court-fetch (8771)**, בדיוק כמו כפתורי-pm2 הקיימים. ## מה ה-PR עושה - **`court_fetch_service/server.py`** — endpoint `/adapter-migration` מאומת (Bearer `COURT_FETCH_SHARED_SECRET`) שמריץ את `scripts/migrate_agent_adapter.py` עם **allowlist-פעולות** ו-args אטומיים (`create_subprocess_exec`, ללא shell; הסקריפט מאמת אדפטרים/מודלים). נשמר **symbol-light** — בלי enums/מונחי-Paperclip — כדי לא לדלוף G12 לשכבת mcp-server. - **`web/app.py`** — proxy `POST /api/operations/agents/migrate-adapter` → הגשר (Bearer, כמו `_ops_pm2_control`). - **web-ui** — `useMigrateAdapter` (operations.ts) + `AgentAdaptersPanel` לפי המוקאפ המאושר `02d-operations-adapters.html`: - roster per-role (מתאם נוכחי + מודל + בורר-יעד), מחזור `usePaperclipAgents`. - סרגל-חירום גלובלי: "העבר הכל ל-Gemini ⚡" / "החזר הכל ל-Claude". - דיאלוג-אישור שמריץ **preflight (check)** ומציג את הפלט, עם toggle "שחרר כלי-כתיבה" כשיש conflict; חוסם אישור אם preflight נכשל. - דגלי "מועבר · fallback" / "⚠ א-סימטרי בין החברות". ## עיצוב אושר ע"י חיים בשער **Claude Design** (פרויקט "עוזר משפטי — IA Redesign (X17)", `02d-operations-adapters.html`) — per `web-ui/AGENTS.md`. ## בדיקות - `tsc --noEmit` נקי · `eslint` נקי · `py_compile` נקי (server.py + app.py). - E2E מלא יבוצע בפריסה (להלן). ## Deploy (אחרי מיזוג) 1. **גשר (host, pm2)**: `git pull` בעץ-ההוסט `/home/chaim/legal-ai` → הוספת `PAPERCLIP_BOARD_API_KEY` ל-`/home/chaim/.legal-court-fetch-service.env` → `pm2 restart legal-court-fetch-service --update-env`. 2. **app.py + UI**: Coolify (commit→push→build) + `npm run api:types`. ## Invariants - **G12** — הגשר symbol-light; הלוגיקה ה-Paperclip-ספציפית נשארת ב-`scripts/` (שכבת SHELL). - **INV-MC1** — שתי החברות יחד. - **INV-IA** — "מקום אחד" (/operations). המשך **FU-8a**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-13 12:07:07 +00:00
feat(ops): פאנל "מתאמי-סוכנים" ב-/operations — מעבר-אדפטר בכפתור (any→any)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
64612240d5
שלב-ה-UI של מנגנון מעבר-האדפטר (PR #247). הכפתור ב-/operations מריץ את
scripts/migrate_agent_adapter.py בהוסט דרך גשר-court-fetch (הקונטיינר לא יכול
לבצע — צריך FS-הוסט + DB-המובנה), בדיוק כמו כפתורי-pm2.

- court_fetch_service/server.py: endpoint /adapter-migration מאומת (Bearer,
  COURT_FETCH_SHARED_SECRET) שמריץ את הסקריפט עם allowlist-פעולות ו-args אטומיים
  (exec, ללא shell; הסקריפט מאמת). symbol-light לשמירת G12 בשכבת mcp-server.
- web/app.py: proxy POST /api/operations/agents/migrate-adapter → הגשר.
- web-ui: useMigrateAdapter (operations.ts) + AgentAdaptersPanel לפי המוקאפ
  המאושר 02d-operations-adapters.html: roster per-role (מתאם נוכחי+מודל+בורר-יעד),
  סרגל-חירום גלובלי (הכל→Gemini/החזר→Claude), preflight בדיאלוג + toggle שחרור-כלים,
  דגלי מועבר/א-סימטרי. מחזר usePaperclipAgents לתצוגה.

עיצוב אושר ע"י חיים בשער Claude Design (פרויקט IA Redesign X17).
נבדק: tsc --noEmit נקי, eslint נקי.

Invariants: G12 (גשר symbol-light; הסקריפט בשכבת scripts/ הוא שמדבר Paperclip),
INV-MC1 (שתי החברות יחד), INV-IA "מקום אחד" (/operations). המשך FU-8a.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit 6fc87de1c5 into main 2026-06-13 12:12:40 +00:00
chaim deleted branch worktree-adapter-migrate-ui 2026-06-13 12:12:41 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#248