feat(run): tool-aware model picker and run panel labels for codex lanes

Model dropdown now shows curated Claude vs Codex models per lane's tool,
and the run panel title/subtitle/binary-missing text switch between
"Chạy Claude"/"Chạy Codex" accordingly.
This commit is contained in:
2026-08-27 13:33:55 +07:00
parent ccf2fdb8eb
commit b1734a492f
8 changed files with 47 additions and 32 deletions
@@ -88,6 +88,7 @@ export function LaneConsolePane({
const currentLane = laneId !== null ? lanes.find((l) => l.id === laneId) : null;
const laneTool = currentLane?.tool ?? "claude";
const toolLabel = laneTool === "codex" ? "Codex" : "Claude";
useEffect(() => {
onHasActiveRunChange?.(handle !== null);
@@ -419,7 +420,9 @@ export function LaneConsolePane({
</div>
<div className="min-w-0 flex-1">
<div className="flex items-center gap-2">
<h1 className="text-lg font-semibold text-fg-primary">{t("title")}</h1>
<h1 className="text-lg font-semibold text-fg-primary">
{t("title", { tool: toolLabel })}
</h1>
{wsConnected ? (
<span className="flex items-center gap-1.5 text-[11px] text-status-success bg-status-success/10 border border-status-success/20 px-2 py-0.5 rounded-full">
<span className="w-1.5 h-1.5 rounded-full bg-status-success animate-pulse-dot" />
@@ -432,7 +435,7 @@ export function LaneConsolePane({
</span>
)}
</div>
<p className="text-xs text-fg-muted max-w-3xl">{t("subtitle")}</p>
<p className="text-xs text-fg-muted max-w-3xl">{t("subtitle", { tool: toolLabel })}</p>
</div>
<ActiveRunsSwitcher
activeRuns={activeRuns}
@@ -449,7 +452,7 @@ export function LaneConsolePane({
{binaryStatus && !binaryStatus[laneTool]?.found && (
<div className="rounded-lg border border-status-danger/40 bg-status-danger/10 px-4 py-3 text-sm text-status-danger flex items-center gap-2">
<AlertCircle className="w-4 h-4 flex-shrink-0" />
<span>{t("binary.missing")}</span>
<span>{t("binary.missing", { cli: laneTool, tool: toolLabel })}</span>
</div>
)}