Initial import NDC_1C

This commit is contained in:
2026-03-26 10:38:25 +03:00
commit a162d77ef7
2943 changed files with 3615871 additions and 0 deletions
@@ -0,0 +1,86 @@
import { PanelFrame } from "./PanelFrame";
import type { RuntimeRun } from "../state/types";
import { JsonView } from "./JsonView";
interface RuntimePanelProps {
runs: RuntimeRun[];
selectedRunId: string;
onSelectRun: (runId: string) => void;
onStartRun: () => Promise<void> | void;
onFinishRun: () => Promise<void> | void;
onRefreshRuns: () => Promise<void> | void;
onRunEval: () => Promise<void> | void;
onCopyEvalReport: () => Promise<void> | void;
evalBusy: boolean;
traceItems: unknown[];
evalReport: unknown;
}
export function RuntimePanel({
runs,
selectedRunId,
onSelectRun,
onStartRun,
onFinishRun,
onRefreshRuns,
onRunEval,
onCopyEvalReport,
evalBusy,
traceItems,
evalReport
}: RuntimePanelProps) {
return (
<PanelFrame
title="NDC Run Monitor"
subtitle="Важно: кнопка Запустить run создает только run-сущность. Кнопка eval запускает batch-проверку normalizer v2.0.2."
>
<div className="button-row">
<button type="button" onClick={() => onStartRun()}>
Запустить run
</button>
<button type="button" onClick={() => onFinishRun()} disabled={!selectedRunId}>
Завершить выбранный run
</button>
<button type="button" onClick={() => onRefreshRuns()}>
Обновить runs
</button>
<button type="button" onClick={() => onRunEval()} disabled={evalBusy}>
{evalBusy ? "Идет eval v2.0.2..." : "Запустить eval v2.0.2"}
</button>
</div>
<div className="runtime-grid">
<div className="runtime-runs">
{runs.map((run) => (
<button
key={run.runId}
type="button"
className={selectedRunId === run.runId ? "history-item selected" : "history-item"}
onClick={() => onSelectRun(run.runId)}
>
<div className="history-row">
<strong>{run.status}</strong>
<span>{run.runId}</span>
</div>
<div className="history-row">
<span>{run.sessionId}</span>
<span>{new Date(run.updatedAt).toLocaleString("ru-RU")}</span>
</div>
</button>
))}
{runs.length === 0 ? <p className="muted">Нет активных запусков.</p> : null}
</div>
<div>
<h3>Trace выбранного run</h3>
<JsonView value={traceItems} />
<div className="eval-report-wrap">
<h3 style={{ marginTop: 12 }}>Отчет eval</h3>
<JsonView value={evalReport ?? { note: "Eval пока не запускался" }} />
<button type="button" className="copy-cube-button" title="Скопировать отчет eval" onClick={() => onCopyEvalReport()}>
⧉
</button>
</div>
</div>
</div>
</PanelFrame>
);
}