feat(operations): הוספת codex_local לסרגל-חירום + סקריפט A/B-benchmark
Some checks failed
G12 Leak-Guard / leak-guard (push) Has been cancelled
Build & Deploy / build-and-deploy (push) Has been cancelled
Lint — undefined names / undefined-names (push) Has been cancelled

- adapter_profiles.py: codex_local.default_model = gpt-5.5 (עדכון מ-gpt-5.3-codex)
- agent-adapters-panel.tsx: כפתור "העבר הכל ל-Codex " בסרגל-החירום (ב-G/Codex fallback)
- operations.ts: הוספת codex_local לדוקומנטציה של useAdapterMigrate
- ab_halacha_codex.py: סקריפט A/B חדש — חילוץ הלכות דרך codex exec/gpt-5.5 (non-destructive benchmark)
- SCRIPTS.md: תיעוד ab_halacha_codex.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 10:42:14 +00:00
parent a78601b9d0
commit 471934cc2c
5 changed files with 316 additions and 13 deletions

View File

@@ -3,7 +3,7 @@
/**
* מתאמי-סוכנים (Adapter) — /operations panel.
*
* Migrate any committee agent between run-engines (Claude / Gemini / DeepSeek)
* Migrate any committee agent between run-engines (Claude / Gemini / DeepSeek / Codex)
* in BOTH companies at once, with a preflight that prevents the silent crash
* (frontmatter `---` breaks the gemini/deepseek CLI; model must match provider;
* gemini excludeTools is global). Built to the Claude Design mockup
@@ -57,6 +57,7 @@ const ADAPTERS = [
{ value: "claude_local", label: "Claude", cls: "bg-info-bg text-info border-info/40" },
{ value: "gemini_local", label: "Gemini", cls: "bg-warn-bg text-warn border-warn/40" },
{ value: "deepseek_local", label: "DeepSeek", cls: "bg-gold-wash text-gold-deep border-gold/40" },
{ value: "codex_local", label: "Codex", cls: "bg-success-bg text-success border-success/40" },
] as const;
// Bilingual role subtitle under the agent name (mockup 02d) — display-only,
@@ -149,7 +150,7 @@ export function AgentAdaptersPanel() {
<Card className="bg-surface border-rule shadow-sm">
<CardContent className="px-6 py-5">
<p className="text-ink-muted text-xs mb-4">
העברת כל סוכן בין מנועי-ההרצה (Claude · Gemini · DeepSeek), בשתי החברות יחד. כל מעבר
העברת כל סוכן בין מנועי-ההרצה (Claude · Gemini · DeepSeek · Codex), בשתי החברות יחד. כל מעבר
עובר preflight שמונע קריסה. מעבר ל-Gemini/DeepSeek = fallback מופחת-איכות להחזיר ל-Claude
כשטוקני-Claude חוזרים.
</p>
@@ -159,7 +160,7 @@ export function AgentAdaptersPanel() {
<div className="min-w-0">
<div className="text-[0.85rem] text-navy font-semibold">מצב-חירום · טוקני-Claude</div>
<div className="text-[0.7rem] text-ink-muted">
כשנגמרים הטוקנים להפיל את כל הצוות ל-Gemini בלחיצה, ולהחזיר כשחוזרים.
כשנגמרים הטוקנים להפיל את כל הצוות ל-Gemini או ל-Codex בלחיצה, ולהחזיר כשחוזרים.
</div>
</div>
<div className="flex items-center gap-2 ms-auto shrink-0">
@@ -171,6 +172,11 @@ export function AgentAdaptersPanel() {
onClick={() => openMigrate("all", "gemini_local", "העברת כל הסוכנים ל-Gemini ⚡")}>
העבר הכל ל-Gemini
</Button>
<Button size="sm" variant="default" disabled={busy}
className="bg-success text-white hover:bg-success/90"
onClick={() => openMigrate("all", "codex_local", "העברת כל הסוכנים ל-Codex (gpt-5.5) ⚡")}>
העבר הכל ל-Codex
</Button>
</div>
</div>
@@ -272,7 +278,7 @@ export function AgentAdaptersPanel() {
<DialogDescription>
{dlg?.body.action === "revert"
? "שחזור מדויק למתאם ולמודל שהיו לפני המעבר, בשתי החברות."
: "המעבר חל על שתי החברות (CMP + CMPA). Gemini/DeepSeek = fallback מופחת-איכות."}
: "המעבר חל על שתי החברות (CMP + CMPA). Gemini/DeepSeek/Codex = fallback מופחת-איכות."}
</DialogDescription>
</DialogHeader>

View File

@@ -231,7 +231,7 @@ export function useResetAgentSession() {
// ── Agent adapter migration ────────────────────────────────────────────────
// Migrate an agent (or "all") between run-engines (claude_local / gemini_local /
// deepseek_local) in BOTH companies. Host-side (runs scripts/migrate_agent_adapter.py
// deepseek_local / codex_local) in BOTH companies. Host-side (runs scripts/migrate_agent_adapter.py
// via the court-fetch bridge), so the script's exit code + output are relayed so
// the panel can render preflight warnings. A non-zero exit on a "check" is an
// informative refusal, not a transport error — callers inspect exit_code.