diff --git a/web-ui/src/components/operations/agent-adapters-panel.tsx b/web-ui/src/components/operations/agent-adapters-panel.tsx index d235b1a..3d405ca 100644 --- a/web-ui/src/components/operations/agent-adapters-panel.tsx +++ b/web-ui/src/components/operations/agent-adapters-panel.tsx @@ -27,6 +27,14 @@ import { SelectContent, SelectItem, } from "@/components/ui/select"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; import { Dialog, DialogContent, @@ -51,6 +59,18 @@ const ADAPTERS = [ { value: "deepseek_local", label: "DeepSeek", cls: "bg-gold-wash text-gold-deep border-gold/40" }, ] as const; +// Bilingual role subtitle under the agent name (mockup 02d) — display-only, +// keyed by the agent's Hebrew name. Falls back to none for unmapped agents. +const ROLE_SUBTITLE: Record = { + "עוזר משפטי": "CEO · מתזמר", + "מנתח משפטי": "analyst", + "כותב החלטה": "writer", + "מנהל ידע": "אוצֵר-הלכות", + "בודק איכות": "qa", + "הגהת מסמכים": "proofreader", + "שטן מליץ": "red-team (Gemini)", +}; + function adapterCls(a: string | null | undefined): string { return ADAPTERS.find((x) => x.value === a)?.cls ?? "bg-rule-soft text-ink-muted border-rule"; } @@ -157,60 +177,89 @@ export function AgentAdaptersPanel() { {isLoading || !data ? ( ) : ( -
- {data.pairs.map((p) => { - const cur = currentOf(p); - const tgt = targetFor(p); - const migrated = cur !== "claude_local" && cur !== null; - const asym = isAsymmetric(p); - return ( -
-
-
- {p.name} - - {adapterLabel(cur)} - - - {modelOf(p) || "(default)"} - - {asym ? ( - - ⚠ א-סימטרי בין החברות +
+ + + + תפקיד + מתאם נוכחי + מודל + העבר ל־ + + מצב + + + + {data.pairs.map((p) => { + const cur = currentOf(p); + const tgt = targetFor(p); + const migrated = cur !== "claude_local" && cur !== null; + const asym = isAsymmetric(p); + const subtitle = ROLE_SUBTITLE[p.name]; + return ( + + +
{p.name}
+ {subtitle ? ( +
{subtitle}
+ ) : null} +
+ + + {adapterLabel(cur)} - ) : migrated ? ( - - מועבר · fallback - - ) : null} - - -
- - - {migrated ? ( - - ) : null} -
- - ); - })} +
+ + + {modelOf(p) || "(default)"} + + + + + + +
+ + {migrated ? ( + + ) : null} +
+
+ + {asym ? ( + + ⚠ א-סימטרי + + ) : migrated ? ( + + מועבר · fallback + + ) : ( + + תקין + + )} + +
+ ); + })} +
+
)} diff --git a/web-ui/src/components/precedents/halacha-review-panel.tsx b/web-ui/src/components/precedents/halacha-review-panel.tsx index bf6cbb5..61b9b36 100644 --- a/web-ui/src/components/precedents/halacha-review-panel.tsx +++ b/web-ui/src/components/precedents/halacha-review-panel.tsx @@ -185,11 +185,16 @@ function HalachaCard({
+ {/* gold "הלכה" tag opening the meta row (mockup 19 `.b-hal`) */} + + הלכה + {h.page_reference && ( {h.page_reference} )}