dsh-harbor-evolution 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -3
- package/index.js +40 -0
- package/lib/client.js +96 -17
- package/lib/dashboard.js +167 -15
- package/lib/evolution.js +189 -0
- package/lib/model-runtime.js +11 -7
- package/lib/session-diagnostic.js +320 -0
- package/lib/session-materializer.js +194 -0
- package/lib/session-projection.js +161 -0
- package/lib/session-redaction.js +311 -0
- package/lib/session-selection.js +294 -0
- package/lib/setup.js +9 -3
- package/package.json +6 -1
- package/schemas/dsh-session-observation.schema.json +69 -0
- package/schemas/evaluation-result-v2.schema.json +45 -0
- package/schemas/historical-evaluation-context.schema.json +66 -0
- package/schemas/historical-evaluation-summary.schema.json +49 -0
- package/schemas/historical-generation-batch.schema.json +76 -0
- package/skills/evolve-agent-with-harbor/SKILL.md +47 -7
- package/skills/evolve-agent-with-harbor/evals/evals.json +9 -6
- package/skills/evolve-agent-with-harbor/references/evaluator-upgrade.md +3 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Installable DeepSeek Harness Plugin + Skill for running stable Harbor evaluation and controlled Agent evolution loops, with a native DSH Web dashboard.
|
|
4
4
|
|
|
5
|
-
The package gives DSH
|
|
5
|
+
The package gives DSH sixteen strict Harbor tools, dedicated Tool cards, a nine-stage Evaluation Workbench, an installation Doctor, and the model- and user-invocable `evolve-agent-with-harbor` Skill. The Skill starts with four user-facing concepts—Dataset (what to test), Generator (who answers), Evaluator plus criteria (what good means), and Optimizer (who improves it)—then compiles accepted choices into the strict Evaluation Stack. When no Dataset is supplied, it can instead preview recent completed DSH Sessions and evaluate each immutable Session as one Historical Trial without rerunning a Candidate. A DSH Generator may explicitly pin the current default model as a non-secret Candidate identity while retaining the per-Job Host Broker credential boundary. The Plugin validates Dataset identity, checks Trial Lifecycle and Score Validity, governs independent Ground Truth meta-evaluation, diagnoses evidence provenance, limits each iteration to one controlled Candidate change, and invokes the Promotion Gate only as an explicit action.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -14,8 +14,8 @@ npx --yes dsh-harbor-evolution@latest setup --project-root "$PWD"
|
|
|
14
14
|
|
|
15
15
|
The setup command installs both required runtimes:
|
|
16
16
|
|
|
17
|
-
- `harbor-dsh-evolution==0.
|
|
18
|
-
- `dsh-harbor-evolution@0.
|
|
17
|
+
- `harbor-dsh-evolution==0.8.0` in a managed Python environment.
|
|
18
|
+
- `dsh-harbor-evolution@0.8.0` in the selected DSH profile.
|
|
19
19
|
|
|
20
20
|
It then stores the absolute Harbor executable paths and a fallback `projectRoot` in the profile's `harbor-evolution` block and verifies the integration. Agent Tool calls always use the calling session's absolute working directory as their project root; the configured value remains the Web Workbench and non-Agent fallback. Existing unrelated profile entries are preserved, and rerunning setup updates the same block.
|
|
21
21
|
|
|
@@ -40,10 +40,17 @@ The Plugin registers:
|
|
|
40
40
|
- `harbor_model_binding`
|
|
41
41
|
- `harbor_evolution_init`
|
|
42
42
|
- `harbor_evolution_doctor`
|
|
43
|
+
- `harbor_quick_diagnostic_init`
|
|
44
|
+
- `harbor_session_diagnostic_preview`
|
|
45
|
+
- `harbor_session_diagnostic_run`
|
|
43
46
|
- `harbor_dataset_validate`
|
|
44
47
|
- `harbor_context_preview`
|
|
45
48
|
- `harbor_eval_run`
|
|
46
49
|
- `harbor_eval_result`
|
|
50
|
+
- `harbor_evaluator_inspect`
|
|
51
|
+
- `harbor_evaluator_update`
|
|
52
|
+
- `harbor_ground_truth_init`
|
|
53
|
+
- `harbor_evaluator_meta_evaluate`
|
|
47
54
|
- `harbor_candidate_compare`
|
|
48
55
|
|
|
49
56
|
In the `web` profile, the same package also registers:
|
package/index.js
CHANGED
|
@@ -7,7 +7,9 @@ import { fileURLToPath } from 'node:url'
|
|
|
7
7
|
import { loadBundledSkill } from './lib/official-skill.js'
|
|
8
8
|
import { CandidateModelRuntime } from './lib/model-runtime.js'
|
|
9
9
|
import { RUNTIME_POLICY } from './lib/runtime-identity.js'
|
|
10
|
+
import { SessionDiagnosticService } from './lib/session-diagnostic.js'
|
|
10
11
|
import { EvolutionService } from './lib/service.js'
|
|
12
|
+
import { runHistoricalEvaluation } from './lib/evolution.js'
|
|
11
13
|
import { installDashboardWeb } from './lib/web.js'
|
|
12
14
|
|
|
13
15
|
export const name = 'harbor-evolution'
|
|
@@ -29,6 +31,8 @@ export const Config = Schema.object({
|
|
|
29
31
|
harborDshBin: Schema.string().default(''),
|
|
30
32
|
agentImportPath: Schema.string().default('harbor_dsh_evolution.agent:DshCandidateAgent'),
|
|
31
33
|
pluginImportPath: Schema.string().default('dsh-evolution'),
|
|
34
|
+
historicalAgentImportPath: Schema.string().default('harbor_dsh_evolution.session_agent:SessionObservationAgent'),
|
|
35
|
+
historicalPluginImportPath: Schema.string().default('dsh-historical-evaluation'),
|
|
32
36
|
pythonPath: Schema.string().default(''),
|
|
33
37
|
timeoutMs: Schema.number().default(1800000),
|
|
34
38
|
candidateProvider: Schema.string().default(''),
|
|
@@ -38,6 +42,8 @@ export const Config = Schema.object({
|
|
|
38
42
|
modelBrokerAdvertisedHost: Schema.string().default('host.docker.internal'),
|
|
39
43
|
modelBrokerMaxRequests: Schema.number().min(1).default(1000),
|
|
40
44
|
modelBrokerMaxRequestBytes: Schema.number().min(1024).default(33554432),
|
|
45
|
+
sessionMaxReads: Schema.number().min(1).default(100),
|
|
46
|
+
sessionReadConcurrency: Schema.number().min(1).default(4),
|
|
41
47
|
})
|
|
42
48
|
|
|
43
49
|
function jsonTool(definition, execute) {
|
|
@@ -83,6 +89,12 @@ export function apply(ctx, config) {
|
|
|
83
89
|
const modelRuntime = new CandidateModelRuntime(ctx, resolved)
|
|
84
90
|
const metadata = { pluginVersion: packageJson.version, projectRootSource: 'configured' }
|
|
85
91
|
const service = new EvolutionService(resolved, metadata, modelRuntime)
|
|
92
|
+
const sessionDiagnostic = new SessionDiagnosticService({
|
|
93
|
+
ctx,
|
|
94
|
+
config: resolved,
|
|
95
|
+
modelRuntime,
|
|
96
|
+
runHistoricalEvaluation,
|
|
97
|
+
})
|
|
86
98
|
const serviceForTool = exec => {
|
|
87
99
|
const projectRoot = synchronizeWorkbenchProjectRoot(service, exec)
|
|
88
100
|
return new EvolutionService({ ...resolved, projectRoot }, metadata, modelRuntime)
|
|
@@ -155,6 +167,34 @@ export function apply(ctx, config) {
|
|
|
155
167
|
},
|
|
156
168
|
}, (args, exec) => serviceForTool(exec).quickDiagnostic(args)))
|
|
157
169
|
|
|
170
|
+
ctx.tools.register(jsonTool({
|
|
171
|
+
name: 'harbor_session_diagnostic_preview',
|
|
172
|
+
description: 'Preview up to 10 recently active, completed top-level DSH Sessions in the exact current workspace as an observe-existing Historical Generation Job. Returns only safe metadata and an owner-bound 15-minute selection token; it never exposes raw Session ids or transcript/tool payloads.',
|
|
173
|
+
parameters: {
|
|
174
|
+
limit: { type: 'number', description: 'Number of eligible recent Sessions, from 1 to 10. Defaults to 10.' },
|
|
175
|
+
createdAfter: { type: 'string', description: 'Optional ISO-8601 lower bound on Session creation time. Use it to narrow an exact scan when the workspace exceeds the configured read budget.' },
|
|
176
|
+
includeFeedback: { type: 'boolean', description: 'Include only feedback counts in Preview and redacted feedback in the frozen Batch. Defaults to true.' },
|
|
177
|
+
evaluatorProvider: { type: 'string', description: 'Optional Judge provider; supply together with evaluatorModel. Defaults to the calling DSH Agent model and is frozen into the confirmation token.' },
|
|
178
|
+
evaluatorModel: { type: 'string' },
|
|
179
|
+
evaluatorReasoningEffort: { type: 'string', description: 'Optional Judge reasoning effort; requires explicit evaluatorProvider and evaluatorModel.' },
|
|
180
|
+
},
|
|
181
|
+
}, (args, exec) => {
|
|
182
|
+
synchronizeWorkbenchProjectRoot(service, exec)
|
|
183
|
+
return sessionDiagnostic.preview(args, exec)
|
|
184
|
+
}))
|
|
185
|
+
|
|
186
|
+
ctx.tools.register(jsonTool({
|
|
187
|
+
name: 'harbor_session_diagnostic_run',
|
|
188
|
+
description: 'Consume a confirmed Session selection token, revalidate every immutable source boundary, write a private redacted Historical Generation Batch, materialize one Harbor Trial per Session, and run the non-promotion Historical Job.',
|
|
189
|
+
parameters: {
|
|
190
|
+
selectionToken: { type: 'string', required: true },
|
|
191
|
+
jobName: { type: 'string' },
|
|
192
|
+
},
|
|
193
|
+
}, (args, exec) => {
|
|
194
|
+
synchronizeWorkbenchProjectRoot(service, exec)
|
|
195
|
+
return sessionDiagnostic.run(args, exec)
|
|
196
|
+
}))
|
|
197
|
+
|
|
158
198
|
ctx.tools.register(jsonTool({
|
|
159
199
|
name: 'harbor_dataset_validate',
|
|
160
200
|
description: 'Validate dataset-manifest.json, task uniqueness, instructions, paths, sensitive metadata, and the immutable source digest.',
|
package/lib/client.js
CHANGED
|
@@ -79,6 +79,21 @@ var dictionaries = {
|
|
|
79
79
|
reporter: "\u8BC4\u6D4B\u62A5\u544A",
|
|
80
80
|
optimizer: "\u4F18\u5316\u5668",
|
|
81
81
|
gate: "\u664B\u7EA7\u95E8\u7981",
|
|
82
|
+
historicalTarget: "\u5386\u53F2\u751F\u6210\u8BB0\u5F55",
|
|
83
|
+
generationRecords: "\u4F1A\u8BDD\u8BB0\u5F55",
|
|
84
|
+
generationSource: "\u751F\u6210\u6765\u6E90",
|
|
85
|
+
generatorPopulation: "\u751F\u6210\u5668\u7FA4\u4F53",
|
|
86
|
+
executionMode: "\u6267\u884C\u65B9\u5F0F",
|
|
87
|
+
observationMode: "\u53EA\u89C2\u5BDF\u5DF2\u6709\u7ED3\u679C",
|
|
88
|
+
batch: "\u6279\u6B21",
|
|
89
|
+
scoredTrials: "\u5DF2\u8BC4\u5206 Trials",
|
|
90
|
+
unscoredTrials: "\u672A\u8BC4\u5206 Trials",
|
|
91
|
+
homogeneousPopulation: "\u540C\u6784\u751F\u6210\u5668\u7FA4\u4F53",
|
|
92
|
+
mixedPopulation: "\u6DF7\u5408\u751F\u6210\u5668\u7FA4\u4F53",
|
|
93
|
+
metaNotRun: "\u672A\u8FD0\u884C\uFF08\u672A\u9A8C\u8BC1\uFF09",
|
|
94
|
+
metaNotRunHint: "\u672C Job \u53EA\u8BC4\u6D4B\u5DF2\u6709\u751F\u6210\u8BB0\u5F55\uFF1B\u5B83\u6CA1\u6709\u8BC4\u4F30\u8BC4\u6D4B\u5668\u672C\u8EAB\u662F\u5426\u53EF\u9760\u3002\u4E25\u683C\u7684\u8BC4\u6D4B\u5668\u5143\u8BC4\u6D4B\u9700\u8981\u72EC\u7ACB GT \u548C\u5355\u72EC\u7684\u5143\u8BC4\u6D4B\u6D41\u7A0B\u3002",
|
|
95
|
+
gateNotApplicable: "\u4E0D\u9002\u7528\uFF08N/A\uFF09",
|
|
96
|
+
gateNotApplicableHint: "\u5386\u53F2\u751F\u6210\u8BC4\u6D4B\u662F\u8BCA\u65AD\u8BC1\u636E\uFF0C\u4E0D\u662F Candidate \u5BF9\u6BD4\u6216\u664B\u7EA7\u8F93\u5165\u3002\u8BF7\u5C06\u786E\u8BA4\u7684 badcase \u56FA\u5316\u4E3A\u56DE\u5F52 Dataset\uFF0C\u518D\u8FD0\u884C Candidate Job\u3002",
|
|
82
97
|
context: "Context v2",
|
|
83
98
|
trials: "Trials",
|
|
84
99
|
exceptions: "\u5F02\u5E38",
|
|
@@ -301,6 +316,21 @@ var dictionaries = {
|
|
|
301
316
|
reporter: "Reporter",
|
|
302
317
|
optimizer: "Optimizer",
|
|
303
318
|
gate: "Gate",
|
|
319
|
+
historicalTarget: "Historical generation records",
|
|
320
|
+
generationRecords: "Session records",
|
|
321
|
+
generationSource: "Generation source",
|
|
322
|
+
generatorPopulation: "Generator population",
|
|
323
|
+
executionMode: "Execution mode",
|
|
324
|
+
observationMode: "Observe existing results only",
|
|
325
|
+
batch: "Batch",
|
|
326
|
+
scoredTrials: "Scored Trials",
|
|
327
|
+
unscoredTrials: "Unscored Trials",
|
|
328
|
+
homogeneousPopulation: "Homogeneous generator population",
|
|
329
|
+
mixedPopulation: "Mixed generator population",
|
|
330
|
+
metaNotRun: "Not run (unvalidated)",
|
|
331
|
+
metaNotRunHint: "This Job evaluates existing generation records; it does not establish whether the Evaluator itself is reliable. Strict Evaluator meta-evaluation requires independent GT and a separate meta-evaluation flow.",
|
|
332
|
+
gateNotApplicable: "Not applicable (N/A)",
|
|
333
|
+
gateNotApplicableHint: "Historical generation evaluation is diagnostic evidence, not Candidate comparison or promotion input. Convert confirmed badcases into a fixed regression Dataset before running a Candidate Job.",
|
|
304
334
|
context: "Context v2",
|
|
305
335
|
trials: "Trials",
|
|
306
336
|
exceptions: "Exceptions",
|
|
@@ -540,6 +570,25 @@ function gateReasonText(value) {
|
|
|
540
570
|
if (!isRecord(value)) return String(value ?? "\u2014");
|
|
541
571
|
return [value.code, value.message].filter(Boolean).join(" \xB7 ") || pretty(value);
|
|
542
572
|
}
|
|
573
|
+
var HISTORICAL_JOB_KIND = "historical-generation-evaluation";
|
|
574
|
+
function isHistoricalJob(value) {
|
|
575
|
+
return value?.jobKind === HISTORICAL_JOB_KIND || value?.job_kind === HISTORICAL_JOB_KIND || value?.artifacts?.context?.protocol === "historical-generation-evaluation-context/v1" || value?.evaluationContext?.protocol === "historical-generation-evaluation-context/v1";
|
|
576
|
+
}
|
|
577
|
+
function generatorPopulationText(population, t) {
|
|
578
|
+
if (!isRecord(population)) return "\u2014";
|
|
579
|
+
const label = population.homogeneous === false ? t("mixedPopulation") : population.homogeneous === true ? t("homogeneousPopulation") : void 0;
|
|
580
|
+
const agents = population.agent_presets ?? population.agent_ids ?? population.agents ?? [];
|
|
581
|
+
const models = population.model_routes ?? population.models ?? [];
|
|
582
|
+
return [label, ...agents, ...models].filter(Boolean).join(" \xB7 ") || pretty(population);
|
|
583
|
+
}
|
|
584
|
+
function judgeIdentityDetails(judge) {
|
|
585
|
+
return [
|
|
586
|
+
judge?.coupling,
|
|
587
|
+
judge?.reasoning_effort ? `reasoning=${judge.reasoning_effort}` : void 0,
|
|
588
|
+
judge?.transport ? `transport=${judge.transport}` : void 0,
|
|
589
|
+
judge?.version ? `version=${judge.version}` : void 0
|
|
590
|
+
].filter(Boolean).join(" \xB7 ") || "\u2014";
|
|
591
|
+
}
|
|
543
592
|
async function api(route, params = {}) {
|
|
544
593
|
const query = new URLSearchParams(Object.entries(params).filter(([, value]) => value !== void 0 && value !== ""));
|
|
545
594
|
const response = await fetch(`${API}/${route}${query.size ? `?${query}` : ""}`, { credentials: "same-origin", cache: "no-store" });
|
|
@@ -604,14 +653,18 @@ function MetricPills({ metrics }) {
|
|
|
604
653
|
function JobCard({ job, t, open }) {
|
|
605
654
|
const candidate = job.candidate ?? {};
|
|
606
655
|
const progress = job.progress ?? {};
|
|
607
|
-
|
|
656
|
+
const historical = isHistoricalJob(job);
|
|
657
|
+
const target = job.evaluationTarget ?? {};
|
|
658
|
+
const coverage = job.coverage ?? {};
|
|
659
|
+
return /* @__PURE__ */ import_react.default.createElement("button", { type: "button", className: "hse-job", onClick: () => open(job.name) }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-job-body" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-job-top" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-job-title" }, /* @__PURE__ */ import_react.default.createElement("strong", null, job.name), /* @__PURE__ */ import_react.default.createElement("small", null, new Date(job.updatedAt).toLocaleString(), " \xB7 ", progress.health ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-status", "data-status": job.status }, t(job.status))), historical ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("historicalTarget")), /* @__PURE__ */ import_react.default.createElement("b", null, target.source_kind ?? job.generationSource?.kind ?? "\u2014", " \xB7 ", target.record_count ?? job.nTrials ?? 0, " ", t("generationRecords"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("generatorPopulation")), /* @__PURE__ */ import_react.default.createElement("b", null, generatorPopulationText(job.generatorPopulation ?? target.generator_population, t))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("executionMode")), /* @__PURE__ */ import_react.default.createElement("b", null, job.executionMode ?? t("observationMode"), " \xB7 ", t("gateNotApplicable"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("progress")), /* @__PURE__ */ import_react.default.createElement("b", null, progress.completed ?? 0, "/", progress.total ?? job.nTrials ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("scoredTrials")), /* @__PURE__ */ import_react.default.createElement("b", null, coverage.scored_trials ?? job.nValidScores ?? "\u2014", " / ", coverage.total_trials ?? job.nTrials ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("unscoredTrials")), /* @__PURE__ */ import_react.default.createElement("b", null, coverage.unscored_trials ?? job.nUnscoredTrials ?? 0, " \xB7 completed-unscored"))) : /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("candidate")), /* @__PURE__ */ import_react.default.createElement("b", null, candidate.candidate_id ?? "\u2014", " \xB7 ", candidate.version ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("dataset")), /* @__PURE__ */ import_react.default.createElement("b", null, job.dataset?.dataset_id ?? "\u2014", " \xB7 ", job.dataset?.version ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("mode")), /* @__PURE__ */ import_react.default.createElement("b", null, job.mode ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("progress")), /* @__PURE__ */ import_react.default.createElement("b", null, progress.completed ?? 0, "/", progress.total ?? job.nTrials ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("validity")), /* @__PURE__ */ import_react.default.createElement("b", null, typeof job.nValidScores === "number" ? `${t("validScores")} ${job.nValidScores}` : t("unavailable"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("exceptions")), /* @__PURE__ */ import_react.default.createElement("b", null, job.nExceptions))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-progress", "aria-label": `${progress.percent ?? 0}%` }, /* @__PURE__ */ import_react.default.createElement("i", { style: { width: `${progress.percent ?? 0}%` } })), /* @__PURE__ */ import_react.default.createElement(MetricPills, { metrics: job.metrics })));
|
|
608
660
|
}
|
|
609
661
|
function TrialDetail({ detail, t }) {
|
|
610
662
|
if (!detail) return /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-trial-detail hse-muted" }, t("evidence"), " \u2014");
|
|
611
663
|
const assessment = detail.assessment;
|
|
612
664
|
if (!assessment) return /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-trial-detail" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-trial-score" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("span", null, detail.lifecycle?.name ?? detail.trial), /* @__PURE__ */ import_react.default.createElement("b", null, "\u2014")), /* @__PURE__ */ import_react.default.createElement("span", null, detail.status)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("currentStatus")), /* @__PURE__ */ import_react.default.createElement("pre", null, pretty(detail.lifecycle))));
|
|
613
665
|
const score = assessment.score ?? { value: assessment.rewards?.reward, valid: assessment.status === "assessed" };
|
|
614
|
-
|
|
666
|
+
const unscored = detail.status === "completed-unscored" || detail.lifecycle?.status === "completed-unscored";
|
|
667
|
+
return /* @__PURE__ */ import_react.default.createElement("article", { className: "hse-trial-detail", "aria-live": "polite" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-trial-score" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("span", null, t("score")), /* @__PURE__ */ import_react.default.createElement("b", null, score.valid ? format(score.value) : "\u2014")), /* @__PURE__ */ import_react.default.createElement("span", { className: unscored ? "hse-muted" : score.valid ? "hse-valid" : "hse-invalid" }, unscored ? "completed-unscored" : score.valid ? `\u2713 ${t("valid")}` : `\xD7 ${t("invalid")}`)), !score.valid ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("validity")), /* @__PURE__ */ import_react.default.createElement("ul", null, (score.invalid_reasons ?? []).map((reason) => /* @__PURE__ */ import_react.default.createElement("li", { key: reason }, reason)))) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("findings")), /* @__PURE__ */ import_react.default.createElement("ul", null, (assessment.findings ?? []).length ? assessment.findings.map((item, index) => /* @__PURE__ */ import_react.default.createElement("li", { key: index }, item.code ? `${item.code}: ` : "", item.message ?? String(item))) : /* @__PURE__ */ import_react.default.createElement("li", null, "\u2014"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("recommendations")), /* @__PURE__ */ import_react.default.createElement("ul", null, (assessment.recommendations ?? []).length ? assessment.recommendations.map((item, index) => /* @__PURE__ */ import_react.default.createElement("li", { key: index }, item.message ?? String(item))) : /* @__PURE__ */ import_react.default.createElement("li", null, "\u2014"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("output")), /* @__PURE__ */ import_react.default.createElement("pre", null, pretty(assessment.output))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("criteria")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-criteria" }, (assessment.criteria ?? Object.entries(assessment.rewards ?? {}).map(([id, value]) => ({ id, score: value }))).map((item) => /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-criterion", key: item.id }, /* @__PURE__ */ import_react.default.createElement("span", null, item.label ?? item.id), /* @__PURE__ */ import_react.default.createElement("b", null, format(item.score)))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("provenance")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-provenance" }, (assessment.evidence_provenance ?? assessment.evidence ?? []).map((item, index) => /* @__PURE__ */ import_react.default.createElement("span", { key: item.id ?? index, title: item.artifact_ref }, item.label ?? item.kind ?? "Evidence")))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("h4", null, t("timing")), /* @__PURE__ */ import_react.default.createElement("pre", null, pretty(assessment.process))), /* @__PURE__ */ import_react.default.createElement("details", { className: "hse-detail-group" }, /* @__PURE__ */ import_react.default.createElement("summary", null, t("audit")), /* @__PURE__ */ import_react.default.createElement("pre", null, pretty(assessment))));
|
|
615
668
|
}
|
|
616
669
|
function TrialExplorer({ job, workspace, active, t }) {
|
|
617
670
|
const [query, setQuery] = (0, import_react.useState)("");
|
|
@@ -645,7 +698,7 @@ function TrialExplorer({ job, workspace, active, t }) {
|
|
|
645
698
|
} }), /* @__PURE__ */ import_react.default.createElement("select", { className: "hse-select", value: status, onChange: (event) => {
|
|
646
699
|
setStatus(event.target.value);
|
|
647
700
|
setOffset(0);
|
|
648
|
-
} }, /* @__PURE__ */ import_react.default.createElement("option", { value: "" }, t("all")), /* @__PURE__ */ import_react.default.createElement("option", { value: "completed" }, "completed"), /* @__PURE__ */ import_react.default.createElement("option", { value: "candidate-quality-failed" }, "candidate-quality-failed"), /* @__PURE__ */ import_react.default.createElement("option", { value: "infrastructure-error" }, "infrastructure-error"), /* @__PURE__ */ import_react.default.createElement("option", { value: "evaluation-error" }, "evaluation-error"), /* @__PURE__ */ import_react.default.createElement("option", { value: "running-agent" }, "running-agent"), /* @__PURE__ */ import_react.default.createElement("option", { value: "evaluating" }, "evaluating")), /* @__PURE__ */ import_react.default.createElement("select", { className: "hse-select", value: validity, onChange: (event) => {
|
|
701
|
+
} }, /* @__PURE__ */ import_react.default.createElement("option", { value: "" }, t("all")), /* @__PURE__ */ import_react.default.createElement("option", { value: "completed" }, "completed"), /* @__PURE__ */ import_react.default.createElement("option", { value: "completed-unscored" }, "completed-unscored"), /* @__PURE__ */ import_react.default.createElement("option", { value: "candidate-quality-failed" }, "candidate-quality-failed"), /* @__PURE__ */ import_react.default.createElement("option", { value: "infrastructure-error" }, "infrastructure-error"), /* @__PURE__ */ import_react.default.createElement("option", { value: "evaluation-error" }, "evaluation-error"), /* @__PURE__ */ import_react.default.createElement("option", { value: "running-agent" }, "running-agent"), /* @__PURE__ */ import_react.default.createElement("option", { value: "evaluating" }, "evaluating")), /* @__PURE__ */ import_react.default.createElement("select", { className: "hse-select", value: validity, onChange: (event) => {
|
|
649
702
|
setValidity(event.target.value);
|
|
650
703
|
setOffset(0);
|
|
651
704
|
} }, /* @__PURE__ */ import_react.default.createElement("option", { value: "" }, t("validity")), /* @__PURE__ */ import_react.default.createElement("option", { value: "true" }, t("valid")), /* @__PURE__ */ import_react.default.createElement("option", { value: "false" }, t("invalid"))), /* @__PURE__ */ import_react.default.createElement("select", { className: "hse-select", value: sort, onChange: (event) => setSort(event.target.value) }, /* @__PURE__ */ import_react.default.createElement("option", { value: "dataset-order" }, t("datasetOrder")), /* @__PURE__ */ import_react.default.createElement("option", { value: "latest-completed" }, t("latest")), /* @__PURE__ */ import_react.default.createElement("option", { value: "lowest-score" }, t("lowest")), /* @__PURE__ */ import_react.default.createElement("option", { value: "errors" }, t("errorsFirst")))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, "#"), /* @__PURE__ */ import_react.default.createElement("th", null, t("queryTrial")), /* @__PURE__ */ import_react.default.createElement("th", null, t("statusLabel")), /* @__PURE__ */ import_react.default.createElement("th", null, t("score")), /* @__PURE__ */ import_react.default.createElement("th", null, t("attempt")))), /* @__PURE__ */ import_react.default.createElement("tbody", null, page?.items?.map((trial) => /* @__PURE__ */ import_react.default.createElement("tr", { key: `${trial.id}-${trial.attempt}`, "data-selected": String(selected) === String(trial.id) }, /* @__PURE__ */ import_react.default.createElement("td", null, trial.datasetOrder + 1), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => void choose(trial.id ?? trial.datasetTrial) }, trial.displayName ?? trial.datasetTrial ?? trial.name)), /* @__PURE__ */ import_react.default.createElement("td", null, trial.status), /* @__PURE__ */ import_react.default.createElement("td", null, trial.score?.valid ? format(trial.score.value ?? trial.rewards?.reward) : "\u2014"), /* @__PURE__ */ import_react.default.createElement("td", null, trial.attempt)))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-pager" }, /* @__PURE__ */ import_react.default.createElement("span", null, page?.total ? `${offset + 1}\u2013${Math.min(offset + (page.items?.length ?? 0), page.total)} / ${page.total}` : "0 / 0"), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !offset, onClick: () => setOffset(Math.max(0, offset - 100)) }, t("previous")), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !page?.hasMore, onClick: () => setOffset(offset + 100) }, t("next")))), /* @__PURE__ */ import_react.default.createElement(TrialDetail, { detail, t }));
|
|
@@ -674,6 +727,16 @@ function CandidatePanel({ artifacts, t }) {
|
|
|
674
727
|
const runtime = context.runtime ?? candidate.runtime ?? {};
|
|
675
728
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("experimentIdentity")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("experimentIdentityHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-identity-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("candidate")), /* @__PURE__ */ import_react.default.createElement("b", null, candidate.candidate_id ?? "\u2014", " \xB7 ", candidate.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(candidate.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("dataset")), /* @__PURE__ */ import_react.default.createElement("b", null, dataset.dataset_id ?? "\u2014", " \xB7 ", dataset.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, dataset.task_count ?? "\u2014", " Tasks \xB7 ", short(dataset.source_digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("evaluationStack")), /* @__PURE__ */ import_react.default.createElement("b", null, stack.stack_id ?? "\u2014", " \xB7 ", stack.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(stack.comparison_digest ?? stack.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("runtime")), /* @__PURE__ */ import_react.default.createElement("b", null, "Harbor ", runtime.harbor_version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, candidate.runtime?.kind ?? "\u2014", " \xB7 ", candidate.runtime?.version ?? "\u2014", " \xB7 ", context.mode ?? "\u2014")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("immutableCandidateFiles")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, t("file")), /* @__PURE__ */ import_react.default.createElement("th", null, t("size")), /* @__PURE__ */ import_react.default.createElement("th", null, t("digest")))), /* @__PURE__ */ import_react.default.createElement("tbody", null, (candidate.files ?? []).map((file) => /* @__PURE__ */ import_react.default.createElement("tr", { key: file.path }, /* @__PURE__ */ import_react.default.createElement("td", null, file.path), /* @__PURE__ */ import_react.default.createElement("td", null, file.size), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("code", null, short(file.sha256))))))))));
|
|
676
729
|
}
|
|
730
|
+
function HistoricalTargetPanel({ detail, artifacts, t }) {
|
|
731
|
+
const summary = artifacts.summary ?? {};
|
|
732
|
+
const context = artifacts.context ?? {};
|
|
733
|
+
const target = detail?.evaluationTarget ?? summary.evaluation_target ?? context.evaluation_target ?? {};
|
|
734
|
+
const source = detail?.generationSource ?? summary.generation_source ?? context.generation_source ?? {};
|
|
735
|
+
const population = detail?.generatorPopulation ?? target.generator_population;
|
|
736
|
+
const coverage = detail?.coverage ?? summary.coverage ?? {};
|
|
737
|
+
const adapter = context.execution_adapter ?? {};
|
|
738
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("historicalTarget")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("observationMode")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-identity-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("batch")), /* @__PURE__ */ import_react.default.createElement("b", null, target.batch_id ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(target.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("generationRecords")), /* @__PURE__ */ import_react.default.createElement("b", null, target.record_count ?? coverage.total_trials ?? "\u2014", " Trials"), /* @__PURE__ */ import_react.default.createElement("code", null, target.kind ?? "\u2014", " \xB7 ", target.source_kind ?? source.kind ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("generationSource")), /* @__PURE__ */ import_react.default.createElement("b", null, source.kind ?? target.source_kind ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, source.adapter_id ?? adapter.adapter_id ?? adapter.id ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("executionMode")), /* @__PURE__ */ import_react.default.createElement("b", null, detail?.executionMode ?? summary.execution_mode ?? context.execution_mode ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, context.protocol ?? "\u2014")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("generatorPopulation")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, population?.homogeneous === false ? t("mixedPopulation") : population?.homogeneous === true ? t("homogeneousPopulation") : t("generatorPopulation")), /* @__PURE__ */ import_react.default.createElement("b", null, generatorPopulationText(population, t)), /* @__PURE__ */ import_react.default.createElement("code", null, population ? short(population.digest) : "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("coverage")), /* @__PURE__ */ import_react.default.createElement("b", null, coverage.scored_trials ?? "\u2014", " / ", coverage.total_trials ?? target.record_count ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, t("unscoredTrials"), ": ", coverage.unscored_trials ?? 0, " \xB7 completed-unscored")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Trial coverage"), /* @__PURE__ */ import_react.default.createElement("b", null, typeof coverage.trial_rate === "number" ? `${format(coverage.trial_rate * 100)}%` : "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, t("scoredTrials"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Criterion coverage"), /* @__PURE__ */ import_react.default.createElement("b", null, coverage.criterion_scored ?? "\u2014", " / ", coverage.criterion_total ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, typeof coverage.criterion_rate === "number" ? `${format(coverage.criterion_rate * 100)}%` : "\u2014")))));
|
|
739
|
+
}
|
|
677
740
|
function ContractPanel({ artifacts, component, t }) {
|
|
678
741
|
const contract = artifacts.contract ?? {};
|
|
679
742
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("integrationBoundary")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("integration")), /* @__PURE__ */ import_react.default.createElement("b", null, component?.id ?? "\u2014", " \xB7 ", component?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(component?.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("scoringContract")), /* @__PURE__ */ import_react.default.createElement("b", null, contract.contract_id ?? "\u2014", " \xB7 ", contract.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, t("primaryMetric"), ": ", contract.primary_metric ?? "\u2014")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("hardRequirements")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-chip-list" }, (contract.hard_requirements ?? []).map((item) => /* @__PURE__ */ import_react.default.createElement("span", { key: item.id ?? item }, item.id ?? item)))));
|
|
@@ -721,7 +784,7 @@ function RendererPanel({ job, workspace, active, component, t }) {
|
|
|
721
784
|
}, [workspace, job, selected]);
|
|
722
785
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("renderer")), /* @__PURE__ */ import_react.default.createElement("b", null, component?.id ?? "\u2014", " \xB7 ", component?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(component?.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("generatedOutput")), /* @__PURE__ */ import_react.default.createElement("b", null, page?.items?.length ?? 0, " Trials"), /* @__PURE__ */ import_react.default.createElement("code", null, t("previewSource"), ": ", detail?.preview?.provenance?.map((item) => item.label ?? item.kind).join(" \xB7 ") || "\u2014")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("generatedOutput")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-output-layout" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-output-list" }, (page?.items ?? []).map((trial, index) => /* @__PURE__ */ import_react.default.createElement("button", { type: "button", className: "hse-output-item", "data-active": String(selected) === String(trial.id ?? trial.datasetTrial), key: `${trial.id}-${trial.attempt}`, onClick: () => setSelected(trial.id ?? trial.datasetTrial) }, /* @__PURE__ */ import_react.default.createElement("b", null, index + 1, ". ", trial.displayName ?? trial.datasetTrial ?? trial.name), /* @__PURE__ */ import_react.default.createElement("span", null, trial.status, " \xB7 attempt ", trial.attempt)))), /* @__PURE__ */ import_react.default.createElement(ArtifactPreview, { detail, t }))));
|
|
723
786
|
}
|
|
724
|
-
function TrialAssessmentReport({ job, workspace, active, artifacts, t }) {
|
|
787
|
+
function TrialAssessmentReport({ job, workspace, active, artifacts, historical = false, t }) {
|
|
725
788
|
const [offset, setOffset] = (0, import_react.useState)(0);
|
|
726
789
|
const [page, setPage] = (0, import_react.useState)();
|
|
727
790
|
const [selected, setSelected] = (0, import_react.useState)();
|
|
@@ -762,18 +825,22 @@ function TrialAssessmentReport({ job, workspace, active, artifacts, t }) {
|
|
|
762
825
|
const assessment = detail?.assessment;
|
|
763
826
|
const score = assessment?.score;
|
|
764
827
|
const artifactTitle = assessment?.output?.title ?? detail?.preview?.title ?? "\u2014";
|
|
765
|
-
return /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("trialAssessments")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("trialAssessmentsHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table hse-report-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, "#"), /* @__PURE__ */ import_react.default.createElement("th", null, t("queryTrial")), /* @__PURE__ */ import_react.default.createElement("th", null, t("overallScore")), metricIds.map((id) => /* @__PURE__ */ import_react.default.createElement("th", { key: id }, labels[id] ?? id)))), /* @__PURE__ */ import_react.default.createElement("tbody", null, (page?.items ?? []).map((trial) => /* @__PURE__ */ import_react.default.createElement("tr", { key: `${trial.id}-${trial.attempt}`, "data-selected": String(selected) === String(trial.id ?? trial.datasetTrial) }, /* @__PURE__ */ import_react.default.createElement("td", null, trial.datasetOrder + 1), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("button", { type: "button", onClick: () => setSelected(trial.id ?? trial.datasetTrial) }, trial.displayName ?? trial.datasetTrial ?? trial.name)), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-report-score", "data-valid": trial.score?.valid }, trial.score?.valid ? format(trial.score.value ?? trial.rewards?.[primary]) : "\u2014")), metricIds.map((id) => /* @__PURE__ */ import_react.default.createElement("td", { key: id }, format(trial.rewards?.[id])))))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-pager" }, /* @__PURE__ */ import_react.default.createElement("span", null, page?.total ? `${offset + 1}\u2013${Math.min(offset + (page.items?.length ?? 0), page.total)} / ${page.total}` : "0 / 0"), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !offset, onClick: () => setOffset(Math.max(0, offset - REPORT_PAGE_SIZE)) }, t("previous")), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !page?.hasMore, onClick: () => setOffset(offset + REPORT_PAGE_SIZE) }, t("next"))), detailState.status === "loading" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-empty" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-spin" }), t("loading")) : detailState.status === "error" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-error" }, detailState.error) : assessment ? /* @__PURE__ */ import_react.default.createElement("article", { className: "hse-report-detail" }, /* @__PURE__ */ import_react.default.createElement("header", { className: "hse-report-detail-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h4", null, selectedTrial?.displayName ?? assessment.query ?? assessment.trial_name), /* @__PURE__ */ import_react.default.createElement("span", null, t("artifact"), ": ", artifactTitle), /* @__PURE__ */ import_react.default.createElement("code", null, assessment.dataset_trial ?? selectedTrial?.datasetTrial)), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("span", null, t("overallScore")), /* @__PURE__ */ import_react.default.createElement("b", { className: score?.valid ? "hse-valid" : "hse-invalid" }, score?.valid ? format(score.value) : "\u2014"))), !score?.valid ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, (score?.invalid_reasons ?? []).join(" \xB7 ")) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-report-compare" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-report-criteria" }, (assessment.criteria ?? []).map((criterion) => /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-report-criterion", key: criterion.id }, /* @__PURE__ */ import_react.default.createElement("header", null, /* @__PURE__ */ import_react.default.createElement("b", null, criterion.label ?? labels[criterion.id] ?? criterion.id), /* @__PURE__ */ import_react.default.createElement("b", null, format(criterion.score))), /* @__PURE__ */ import_react.default.createElement("dl", null, /* @__PURE__ */ import_react.default.createElement("dt", null, t("assessmentReason")), /* @__PURE__ */ import_react.default.createElement("dd", null, criterion.reason || t("noAssessmentReason")), /* @__PURE__ */ import_react.default.createElement("dt", null, t("assessmentRecommendation")), /* @__PURE__ */ import_react.default.createElement("dd", { className: "hse-report-recommendation" }, criterion.recommendation || t("noAssessmentRecommendation")))))), /* @__PURE__ */ import_react.default.createElement(ArtifactPreview, { detail, t }))) : null);
|
|
828
|
+
return /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("trialAssessments")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("trialAssessmentsHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table hse-report-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, "#"), /* @__PURE__ */ import_react.default.createElement("th", null, t("queryTrial")), /* @__PURE__ */ import_react.default.createElement("th", null, t("overallScore")), metricIds.map((id) => /* @__PURE__ */ import_react.default.createElement("th", { key: id }, labels[id] ?? id)))), /* @__PURE__ */ import_react.default.createElement("tbody", null, (page?.items ?? []).map((trial) => /* @__PURE__ */ import_react.default.createElement("tr", { key: `${trial.id}-${trial.attempt}`, "data-selected": String(selected) === String(trial.id ?? trial.datasetTrial) }, /* @__PURE__ */ import_react.default.createElement("td", null, trial.datasetOrder + 1), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("button", { type: "button", onClick: () => setSelected(trial.id ?? trial.datasetTrial) }, trial.displayName ?? trial.datasetTrial ?? trial.name)), /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-report-score", "data-valid": trial.scoringStatus === "unscored" ? void 0 : trial.score?.valid }, trial.scoringStatus === "unscored" ? "completed-unscored" : trial.score?.valid ? format(trial.score.value ?? trial.rewards?.[primary]) : "\u2014")), metricIds.map((id) => /* @__PURE__ */ import_react.default.createElement("td", { key: id }, format(trial.rewards?.[id])))))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-pager" }, /* @__PURE__ */ import_react.default.createElement("span", null, page?.total ? `${offset + 1}\u2013${Math.min(offset + (page.items?.length ?? 0), page.total)} / ${page.total}` : "0 / 0"), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !offset, onClick: () => setOffset(Math.max(0, offset - REPORT_PAGE_SIZE)) }, t("previous")), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !page?.hasMore, onClick: () => setOffset(offset + REPORT_PAGE_SIZE) }, t("next"))), detailState.status === "loading" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-empty" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-spin" }), t("loading")) : detailState.status === "error" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-error" }, detailState.error) : assessment ? /* @__PURE__ */ import_react.default.createElement("article", { className: "hse-report-detail" }, /* @__PURE__ */ import_react.default.createElement("header", { className: "hse-report-detail-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h4", null, selectedTrial?.displayName ?? assessment.query ?? assessment.trial_name), /* @__PURE__ */ import_react.default.createElement("span", null, t("artifact"), ": ", artifactTitle), /* @__PURE__ */ import_react.default.createElement("code", null, assessment.dataset_trial ?? selectedTrial?.datasetTrial)), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("span", null, t("overallScore")), /* @__PURE__ */ import_react.default.createElement("b", { className: selectedTrial?.scoringStatus === "unscored" ? "hse-muted" : score?.valid ? "hse-valid" : "hse-invalid" }, selectedTrial?.scoringStatus === "unscored" ? "completed-unscored" : score?.valid ? format(score.value) : "\u2014"))), !score?.valid ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, selectedTrial?.scoringStatus === "unscored" && historical ? `${t("unscoredTrials")} \xB7 ` : "", (score?.invalid_reasons ?? []).join(" \xB7 ")) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-report-compare" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-report-criteria" }, (assessment.criteria ?? []).map((criterion) => /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-report-criterion", key: criterion.id }, /* @__PURE__ */ import_react.default.createElement("header", null, /* @__PURE__ */ import_react.default.createElement("b", null, criterion.label ?? labels[criterion.id] ?? criterion.id), /* @__PURE__ */ import_react.default.createElement("b", null, format(criterion.score))), /* @__PURE__ */ import_react.default.createElement("dl", null, /* @__PURE__ */ import_react.default.createElement("dt", null, t("assessmentReason")), /* @__PURE__ */ import_react.default.createElement("dd", null, criterion.reason || t("noAssessmentReason")), /* @__PURE__ */ import_react.default.createElement("dt", null, t("assessmentRecommendation")), /* @__PURE__ */ import_react.default.createElement("dd", { className: "hse-report-recommendation" }, criterion.recommendation || t("noAssessmentRecommendation")))))), /* @__PURE__ */ import_react.default.createElement(ArtifactPreview, { detail, t }))) : null);
|
|
766
829
|
}
|
|
767
|
-
function ReporterPanel({ job, workspace, active, artifacts, t }) {
|
|
830
|
+
function ReporterPanel({ job, workspace, active, artifacts, jobKind, t }) {
|
|
768
831
|
const summary = artifacts.summary ?? {};
|
|
769
832
|
const population = artifacts.population ?? {};
|
|
770
833
|
const metrics = population.metrics ?? summary.metrics ?? {};
|
|
771
834
|
const labels = metricLabelMap(artifacts);
|
|
772
|
-
const
|
|
773
|
-
const
|
|
774
|
-
const
|
|
835
|
+
const historical = jobKind === HISTORICAL_JOB_KIND;
|
|
836
|
+
const coverage = summary.coverage ?? {};
|
|
837
|
+
const total = historical ? coverage.total_trials ?? summary.n_trials ?? 0 : summary.n_trials ?? population.population_size ?? 0;
|
|
838
|
+
const valid = historical ? coverage.scored_trials ?? summary.n_valid_scores : summary.n_valid_scores ?? population.valid_population_size;
|
|
839
|
+
const unscored = historical ? coverage.unscored_trials ?? summary.status_counts?.["completed-unscored"] ?? 0 : void 0;
|
|
840
|
+
const rawGroups = population.groups ?? (historical ? summary.status_counts : {});
|
|
841
|
+
const groups = Array.isArray(rawGroups) ? rawGroups : Object.entries(rawGroups ?? {}).map(([id, count]) => ({ id, count }));
|
|
775
842
|
const configured = population.hook?.configured_component;
|
|
776
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("populationEvidence")), configured ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-hook-state", "data-executed": Boolean(configured.executed) }, /* @__PURE__ */ import_react.default.createElement("b", null, t("hookExecution"), ": ", configured.id ?? "\u2014", " \xB7 ", configured.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("br", null), configured.executed ? t("configuredHookRun") : t("configuredHookNotRun")) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpis" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("trials")), /* @__PURE__ */ import_react.default.createElement("b", null, total)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("valid")), /* @__PURE__ */ import_react.default.createElement("b", { className: "hse-valid" }, valid ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("invalid")), /* @__PURE__ */ import_react.default.createElement("b", { className: "hse-invalid" }, summary.n_invalid_scores ?? population.invalid_population_size ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("exceptions")), /* @__PURE__ */ import_react.default.createElement("b", null, summary.n_exceptions ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("
|
|
843
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("populationEvidence")), configured ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-hook-state", "data-executed": Boolean(configured.executed) }, /* @__PURE__ */ import_react.default.createElement("b", null, t("hookExecution"), ": ", configured.id ?? "\u2014", " \xB7 ", configured.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("br", null), configured.executed ? t("configuredHookRun") : t("configuredHookNotRun")) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpis" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("trials")), /* @__PURE__ */ import_react.default.createElement("b", null, total)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, historical ? t("scoredTrials") : t("valid")), /* @__PURE__ */ import_react.default.createElement("b", { className: "hse-valid" }, valid ?? "\u2014")), historical ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("unscoredTrials")), /* @__PURE__ */ import_react.default.createElement("b", null, unscored)) : /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("invalid")), /* @__PURE__ */ import_react.default.createElement("b", { className: "hse-invalid" }, summary.n_invalid_scores ?? population.invalid_population_size ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("exceptions")), /* @__PURE__ */ import_react.default.createElement("b", null, summary.n_exceptions ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("coverage")), /* @__PURE__ */ import_react.default.createElement("b", null, historical && typeof coverage.trial_rate === "number" ? `${format(coverage.trial_rate * 100)}%` : summary.artifact_validation?.valid ? "VALID" : "CHECK")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, t("metric")), /* @__PURE__ */ import_react.default.createElement("th", null, t("aggregate")), /* @__PURE__ */ import_react.default.createElement("th", null, t("coverage")))), /* @__PURE__ */ import_react.default.createElement("tbody", null, Object.entries(metrics).map(([id, value]) => /* @__PURE__ */ import_react.default.createElement("tr", { key: id }, /* @__PURE__ */ import_react.default.createElement("td", null, /* @__PURE__ */ import_react.default.createElement("b", null, labels[id] ?? id), /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement("code", null, id)), /* @__PURE__ */ import_react.default.createElement("td", null, format(value)), /* @__PURE__ */ import_react.default.createElement("td", null, valid ?? "\u2014", " / ", total))))))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("trialGroups")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-chip-list" }, groups.map((group) => /* @__PURE__ */ import_react.default.createElement("span", { key: group.id }, group.id, ": ", group.count)))), /* @__PURE__ */ import_react.default.createElement(TrialAssessmentReport, { job, workspace, active, artifacts, historical, t }));
|
|
777
844
|
}
|
|
778
845
|
function TrialDeltaTable({ title, items }) {
|
|
779
846
|
return /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, title, " \xB7 ", items?.length ?? 0), items?.length ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, "Trial"), /* @__PURE__ */ import_react.default.createElement("th", null, "Baseline"), /* @__PURE__ */ import_react.default.createElement("th", null, "Candidate"), /* @__PURE__ */ import_react.default.createElement("th", null, "Delta"))), /* @__PURE__ */ import_react.default.createElement("tbody", null, items.map((item) => /* @__PURE__ */ import_react.default.createElement("tr", { key: item.trial }, /* @__PURE__ */ import_react.default.createElement("td", null, item.trial), /* @__PURE__ */ import_react.default.createElement("td", null, format(item.baseline)), /* @__PURE__ */ import_react.default.createElement("td", null, format(item.candidate)), /* @__PURE__ */ import_react.default.createElement("td", { className: "hse-delta", "data-positive": (item.delta ?? 0) >= 0 }, item.delta >= 0 ? "+" : "", format(item.delta))))))) : /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-muted" }, "0"));
|
|
@@ -812,6 +879,9 @@ function GateEvidencePanel({ artifacts, t }) {
|
|
|
812
879
|
const population = report.population ?? {};
|
|
813
880
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-gate-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h3", null, t("gateEvidence")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, report.baseline_job ?? "\u2014", " \u2192 ", report.candidate_job ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-decision", "data-pass": pass }, report.decision ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("comparable")), /* @__PURE__ */ import_react.default.createElement("b", { className: report.comparable ? "hse-valid" : "hse-invalid" }, report.comparable ? "\u2713 TRUE" : "\xD7 FALSE"), /* @__PURE__ */ import_react.default.createElement("code", null, short(report.baseline_evaluation_context?.digest), " = ", short(report.candidate_evaluation_context?.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, report.gate_eligible ? t("eligible") : t("notEligible")), /* @__PURE__ */ import_react.default.createElement("b", { className: report.gate_eligible ? "hse-valid" : "hse-invalid" }, population.baseline_valid ?? "\u2014", " / ", population.baseline ?? "\u2014", " \u2192 ", population.candidate_valid ?? "\u2014", " / ", population.candidate ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, t("policy"), ": ", report.policy?.policy_id ?? "\u2014", " \xB7 ", report.policy?.version ?? "\u2014")))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("metricDeltas")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, t("metric")), /* @__PURE__ */ import_react.default.createElement("th", null, "Baseline"), /* @__PURE__ */ import_react.default.createElement("th", null, "Candidate"), /* @__PURE__ */ import_react.default.createElement("th", null, "Delta"))), /* @__PURE__ */ import_react.default.createElement("tbody", null, Object.entries(report.metric_deltas ?? {}).map(([id, delta]) => /* @__PURE__ */ import_react.default.createElement("tr", { key: id }, /* @__PURE__ */ import_react.default.createElement("td", null, labels[id] ?? id), /* @__PURE__ */ import_react.default.createElement("td", null, format(report.baseline_metrics?.[id])), /* @__PURE__ */ import_react.default.createElement("td", null, format(report.candidate_metrics?.[id])), /* @__PURE__ */ import_react.default.createElement("td", { className: "hse-delta", "data-positive": delta >= 0 }, delta >= 0 ? "+" : "", format(delta)))))))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpis" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("improved")), /* @__PURE__ */ import_react.default.createElement("b", null, report.improved_trials?.length ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("regressed")), /* @__PURE__ */ import_react.default.createElement("b", null, report.regressed_trials?.length ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("newExceptions")), /* @__PURE__ */ import_react.default.createElement("b", null, report.new_exceptions?.length ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("artifactRegressions")), /* @__PURE__ */ import_react.default.createElement("b", null, report.artifact_regressions?.length ?? 0)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("reasons")), /* @__PURE__ */ import_react.default.createElement("b", null, report.reasons?.length ?? 0))), report.reasons?.length ? /* @__PURE__ */ import_react.default.createElement("ul", null, report.reasons.map((reason, index) => /* @__PURE__ */ import_react.default.createElement("li", { key: `${gateReasonText(reason)}-${index}` }, gateReasonText(reason)))) : null));
|
|
814
881
|
}
|
|
882
|
+
function HistoricalGatePanel({ t }) {
|
|
883
|
+
return /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-gate-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h3", null, t("gateEvidence")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("gateNotApplicableHint"))), /* @__PURE__ */ import_react.default.createElement("span", { className: "hse-decision" }, t("gateNotApplicable"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, /* @__PURE__ */ import_react.default.createElement("b", null, "UNSUPPORTED_JOB_KIND_FOR_PROMOTION"), /* @__PURE__ */ import_react.default.createElement("br", null), "historical-generation-evaluation \xB7 diagnostic \xB7 observe-existing"));
|
|
884
|
+
}
|
|
815
885
|
function EvaluatorEditor({ value, workspace, reload, t }) {
|
|
816
886
|
const active = value.evaluatorInterface;
|
|
817
887
|
const evaluator = active?.evaluator;
|
|
@@ -883,7 +953,7 @@ function GovernancePanel({ job, workspace, t }) {
|
|
|
883
953
|
setCopied(false);
|
|
884
954
|
}
|
|
885
955
|
};
|
|
886
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("currentEvaluator")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("governanceHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-governance-id" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("evaluator")), /* @__PURE__ */ import_react.default.createElement("b", null, evaluator?.id ?? "\u2014", " \xB7 ", evaluator?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, evaluator?.entry ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("rubric")), /* @__PURE__ */ import_react.default.createElement("b", null, rubric?.id ?? "\u2014", " \xB7 ", rubric?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, rubric?.entry ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Judge"), /* @__PURE__ */ import_react.default.createElement("b", null, value.judge?.provider ?? "\u2014", " / ", value.judge?.model ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, value.judge
|
|
956
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("currentEvaluator")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("governanceHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-governance-id" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("evaluator")), /* @__PURE__ */ import_react.default.createElement("b", null, evaluator?.id ?? "\u2014", " \xB7 ", evaluator?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, evaluator?.entry ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("rubric")), /* @__PURE__ */ import_react.default.createElement("b", null, rubric?.id ?? "\u2014", " \xB7 ", rubric?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, rubric?.entry ?? "\u2014")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Judge"), /* @__PURE__ */ import_react.default.createElement("b", null, value.judge?.provider ?? "\u2014", " / ", value.judge?.model ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, judgeIdentityDetails(value.judge))))), /* @__PURE__ */ import_react.default.createElement(EvaluatorEditor, { value, workspace, reload: load, t }), [["evaluator", evaluator], ["rubric", rubric]].map(([role, component]) => /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section", key: role }, /* @__PURE__ */ import_react.default.createElement("h3", null, role === "evaluator" ? t("evaluator") : t("rubric"), " \xB7 ", component?.id ?? "\u2014", " \xB7 ", component?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("sourceCode")), /* @__PURE__ */ import_react.default.createElement("b", null, component?.entry ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(component?.digest))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Reward semantics"), /* @__PURE__ */ import_react.default.createElement("b", null, component?.reward_affecting ? "reward-affecting" : "non-reward"), /* @__PURE__ */ import_react.default.createElement("code", null, component?.source?.error ?? "read-only"))), component?.source?.text ? /* @__PURE__ */ import_react.default.createElement("details", { className: "hse-source-details" }, /* @__PURE__ */ import_react.default.createElement("summary", null, t("sourceCode")), /* @__PURE__ */ import_react.default.createElement("pre", { className: "hse-source" }, component.source.text)) : /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, component?.source?.error))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section hse-upgrade" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("upgradeEvaluator")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("upgradeHint")), /* @__PURE__ */ import_react.default.createElement("ol", null, [1, 2, 3, 4, 5].map((index) => /* @__PURE__ */ import_react.default.createElement("li", { key: index }, t(`upgradeStep${index}`)))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("freshBaseline")), /* @__PURE__ */ import_react.default.createElement("b", null, "Evaluator / Rubric / Judge identity"), /* @__PURE__ */ import_react.default.createElement("code", null, (workflow.freshBaselineRequiredWhen ?? []).join(" \xB7 "))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("metaEvaluation")), /* @__PURE__ */ import_react.default.createElement("b", null, "Independent GT \xB7 ESF \xB7 SCE \xB7 RCR"), /* @__PURE__ */ import_react.default.createElement("code", null, "No automatic evaluation or Gate"))), /* @__PURE__ */ import_react.default.createElement("pre", { className: "hse-prompt" }, prompt), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-prompt-actions" }, /* @__PURE__ */ import_react.default.createElement("button", { className: "hse-button", type: "button", onClick: () => void copy() }, copied ? t("copied") : t("copyPrompt")))));
|
|
887
957
|
}
|
|
888
958
|
function MetaEvaluationPanel({ job, workspace, t }) {
|
|
889
959
|
const [state, setState] = (0, import_react.useState)({ status: "loading" });
|
|
@@ -908,6 +978,12 @@ function MetaEvaluationPanel({ job, workspace, t }) {
|
|
|
908
978
|
const pagination = value.disagreementPagination ?? {};
|
|
909
979
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("metaWorkflow")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("metaWorkflowHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-meta-flow" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("b", null, "1. Evaluator Candidate"), /* @__PURE__ */ import_react.default.createElement("br", null), value.workflow?.candidate), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("b", null, "2. Fixed artifacts + GT"), /* @__PURE__ */ import_react.default.createElement("br", null), value.workflow?.dataset), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("b", null, "3. Repeated observations"), /* @__PURE__ */ import_react.default.createElement("br", null), value.workflow?.output), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("b", null, "4. ESF / SCE / RCR"), /* @__PURE__ */ import_react.default.createElement("br", null), value.workflow?.verifier))), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("groundTruth")), groundTruth ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "ID / version"), /* @__PURE__ */ import_react.default.createElement("b", null, groundTruth.id, " \xB7 ", groundTruth.version), /* @__PURE__ */ import_react.default.createElement("code", null, groundTruth.path)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("gtSource")), /* @__PURE__ */ import_react.default.createElement("b", null, groundTruth.source?.kind), /* @__PURE__ */ import_react.default.createElement("code", null, groundTruth.source?.description)), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("gtCases")), /* @__PURE__ */ import_react.default.createElement("b", null, groundTruth.caseCount), /* @__PURE__ */ import_react.default.createElement("code", null, groundTruth.criteria?.map((item) => item.label ?? item.id).join(" \xB7 "))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("gtBadcases")), /* @__PURE__ */ import_react.default.createElement("b", null, groundTruth.badcaseCount), /* @__PURE__ */ import_react.default.createElement("code", null, t("gtProvenance"), ": ", groundTruth.source?.provenance)))) : /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, /* @__PURE__ */ import_react.default.createElement("b", null, t("groundTruthRequired")), /* @__PURE__ */ import_react.default.createElement("br", null), t("gtKinds")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-hook-state", "data-executed": Boolean(report) }, /* @__PURE__ */ import_react.default.createElement("b", null, t("metaNext")), /* @__PURE__ */ import_react.default.createElement("br", null), value.workflow?.nextAction)), report ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, "Evaluator \xB7 ", report.evaluator?.id, " \xB7 ", report.evaluator?.version), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpis" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, "ESF \u2191"), /* @__PURE__ */ import_react.default.createElement("b", null, format(metrics.esf))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, "SCE \u2193"), /* @__PURE__ */ import_react.default.createElement("b", null, format(metrics.sce))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, "RCR \u2191"), /* @__PURE__ */ import_react.default.createElement("b", null, format(metrics.rcr))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("coverage")), /* @__PURE__ */ import_react.default.createElement("b", null, format(report.coverage?.rate))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-kpi" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("disagreements")), /* @__PURE__ */ import_react.default.createElement("b", null, pagination.total ?? report.disagreements?.length ?? 0)))), pagination.total ? /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("disagreements")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-table-wrap" }, /* @__PURE__ */ import_react.default.createElement("table", { className: "hse-evidence-table" }, /* @__PURE__ */ import_react.default.createElement("thead", null, /* @__PURE__ */ import_react.default.createElement("tr", null, /* @__PURE__ */ import_react.default.createElement("th", null, "Case"), /* @__PURE__ */ import_react.default.createElement("th", null, "Criterion"), /* @__PURE__ */ import_react.default.createElement("th", null, "GT"), /* @__PURE__ */ import_react.default.createElement("th", null, "Observed"))), /* @__PURE__ */ import_react.default.createElement("tbody", null, (report.disagreements ?? []).map((item, index) => /* @__PURE__ */ import_react.default.createElement("tr", { key: `${item.case_id}-${item.repeat}-${item.criterion_id}-${index}` }, /* @__PURE__ */ import_react.default.createElement("td", null, item.case_id), /* @__PURE__ */ import_react.default.createElement("td", null, item.criterion_id), /* @__PURE__ */ import_react.default.createElement("td", null, format(item.ground_truth)), /* @__PURE__ */ import_react.default.createElement("td", null, format(item.observed))))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-pager" }, /* @__PURE__ */ import_react.default.createElement("span", null, pagination.total ? `${offset + 1}\u2013${Math.min(offset + (report.disagreements?.length ?? 0), pagination.total)} / ${pagination.total}` : "0 / 0"), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !offset, onClick: () => setOffset(Math.max(0, offset - pageSize)) }, t("previous")), /* @__PURE__ */ import_react.default.createElement("button", { disabled: !pagination.hasMore, onClick: () => setOffset(offset + pageSize) }, t("next")))) : null) : null);
|
|
910
980
|
}
|
|
981
|
+
function HistoricalMetaEvaluationPanel({ detail, artifacts, t }) {
|
|
982
|
+
const context = artifacts.context ?? {};
|
|
983
|
+
const metaEvaluation = context.downstream_analysis?.evaluator_meta_evaluation ?? detail?.evaluatorMetaEvaluation ?? artifacts.summary?.evaluator_meta_evaluation ?? { status: "not-run", validation_report_ref: null };
|
|
984
|
+
const notRun = metaEvaluation.status === "not-run";
|
|
985
|
+
return /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("meta")), /* @__PURE__ */ import_react.default.createElement("p", { className: "hse-muted" }, t("metaNotRunHint")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-grid" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, t("currentStatus")), /* @__PURE__ */ import_react.default.createElement("b", null, notRun ? t("metaNotRun") : metaEvaluation.status ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, context.protocol ?? "historical-generation-evaluation-context/v1")), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-card" }, /* @__PURE__ */ import_react.default.createElement("span", null, "Validation report"), /* @__PURE__ */ import_react.default.createElement("b", null, metaEvaluation.validation_report_ref ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, notRun ? "Evaluator reliability remains unvalidated" : short(metaEvaluation.digest)))));
|
|
986
|
+
}
|
|
911
987
|
function Workbench({ job, workspace, jobs, close, t }) {
|
|
912
988
|
const [state, setState] = (0, import_react.useState)({ status: "loading" });
|
|
913
989
|
const [stage, setStage] = (0, import_react.useState)("candidate");
|
|
@@ -934,18 +1010,21 @@ function Workbench({ job, workspace, jobs, close, t }) {
|
|
|
934
1010
|
}, [close]);
|
|
935
1011
|
const detail = state.value;
|
|
936
1012
|
const artifacts = detail?.artifacts ?? {};
|
|
1013
|
+
const historical = isHistoricalJob(detail) || isHistoricalJob(activeJob);
|
|
1014
|
+
const target = detail?.evaluationTarget ?? activeJob?.evaluationTarget ?? artifacts.summary?.evaluation_target ?? artifacts.context?.evaluation_target ?? {};
|
|
1015
|
+
const contextSupported = detail?.capabilities?.contextSupported ?? detail?.capabilities?.contextV2;
|
|
937
1016
|
const component = artifacts.stack?.components?.[stage];
|
|
938
1017
|
let content;
|
|
939
|
-
if (stage === "candidate") content = /* @__PURE__ */ import_react.default.createElement(CandidatePanel, { artifacts, t });
|
|
1018
|
+
if (stage === "candidate") content = historical ? /* @__PURE__ */ import_react.default.createElement(HistoricalTargetPanel, { detail, artifacts, t }) : /* @__PURE__ */ import_react.default.createElement(CandidatePanel, { artifacts, t });
|
|
940
1019
|
else if (stage === "dataset") content = /* @__PURE__ */ import_react.default.createElement(DatasetPanel, { job, workspace, artifacts, t });
|
|
941
1020
|
else if (stage === "renderer") content = /* @__PURE__ */ import_react.default.createElement(RendererPanel, { job, workspace, active: Boolean(activeJob?.progress?.active), component, t });
|
|
942
1021
|
else if (stage === "judge") content = /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(GovernancePanel, { job, workspace, t }), /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("h3", null, t("trials"), " / ", t("evidence")), /* @__PURE__ */ import_react.default.createElement(TrialExplorer, { job, workspace, active: Boolean(activeJob?.progress?.active), t })));
|
|
943
|
-
else if (stage === "meta") content = /* @__PURE__ */ import_react.default.createElement(MetaEvaluationPanel, { job, workspace, t });
|
|
944
|
-
else if (stage === "reporter") content = /* @__PURE__ */ import_react.default.createElement(ReporterPanel, { job, workspace, active: Boolean(activeJob?.progress?.active), artifacts, t });
|
|
1022
|
+
else if (stage === "meta") content = historical ? /* @__PURE__ */ import_react.default.createElement(HistoricalMetaEvaluationPanel, { detail, artifacts, t }) : /* @__PURE__ */ import_react.default.createElement(MetaEvaluationPanel, { job, workspace, t });
|
|
1023
|
+
else if (stage === "reporter") content = /* @__PURE__ */ import_react.default.createElement(ReporterPanel, { job, workspace, active: Boolean(activeJob?.progress?.active), artifacts, jobKind: detail?.jobKind ?? activeJob?.jobKind, t });
|
|
945
1024
|
else if (stage === "optimizer") content = /* @__PURE__ */ import_react.default.createElement(OptimizerPanel, { artifacts, t });
|
|
946
|
-
else if (stage === "gate") content = /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(ComparePanel, { job, workspace, jobs, artifacts, t }), /* @__PURE__ */ import_react.default.createElement(GateEvidencePanel, { artifacts, t }));
|
|
1025
|
+
else if (stage === "gate") content = historical ? /* @__PURE__ */ import_react.default.createElement(HistoricalGatePanel, { t }) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(ComparePanel, { job, workspace, jobs, artifacts, t }), /* @__PURE__ */ import_react.default.createElement(GateEvidencePanel, { artifacts, t }));
|
|
947
1026
|
else content = stage === "integration" ? /* @__PURE__ */ import_react.default.createElement(ContractPanel, { artifacts, component, t }) : /* @__PURE__ */ import_react.default.createElement("section", { className: "hse-section" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-components" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-component" }, /* @__PURE__ */ import_react.default.createElement("span", null, stage, component?.reward_affecting ? " \xB7 reward-affecting" : ""), /* @__PURE__ */ import_react.default.createElement("b", null, component?.id ?? "\u2014", " \xB7 ", component?.version ?? "\u2014"), /* @__PURE__ */ import_react.default.createElement("code", null, short(component?.digest)))));
|
|
948
|
-
return /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-overlay", role: "presentation", onMouseDown: (event) => event.target === event.currentTarget && close() }, /* @__PURE__ */ import_react.default.createElement("aside", { className: "hse-drawer", role: "dialog", "aria-modal": "true", "aria-label": job }, /* @__PURE__ */ import_react.default.createElement("header", { className: "hse-drawer-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", null, job), /* @__PURE__ */ import_react.default.createElement("p", null, activeJob?.
|
|
1027
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-overlay", role: "presentation", onMouseDown: (event) => event.target === event.currentTarget && close() }, /* @__PURE__ */ import_react.default.createElement("aside", { className: "hse-drawer", role: "dialog", "aria-modal": "true", "aria-label": job }, /* @__PURE__ */ import_react.default.createElement("header", { className: "hse-drawer-head" }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", null, job), /* @__PURE__ */ import_react.default.createElement("p", null, historical ? `${t("historicalTarget")} \xB7 ${target.source_kind ?? activeJob?.generationSource?.kind ?? "\u2014"} \xB7 ${target.record_count ?? activeJob?.nTrials ?? 0} ${t("generationRecords")}` : `${activeJob?.candidate?.candidate_id ?? "\u2014"} \xB7 ${activeJob?.candidate?.version ?? "\u2014"}`, " \xB7 ", activeJob?.mode ?? "\u2014", " \xB7 ", activeJob?.progress?.completed ?? 0, "/", activeJob?.progress?.total ?? 0)), /* @__PURE__ */ import_react.default.createElement("button", { type: "button", className: "hse-close", onClick: close }, t("close"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-workbench" }, /* @__PURE__ */ import_react.default.createElement("nav", { className: "hse-stage-nav", "aria-label": t("stageNav") }, STAGES.map((item) => /* @__PURE__ */ import_react.default.createElement("button", { type: "button", key: item, "data-active": stage === item, "aria-current": stage === item ? "step" : void 0, onClick: () => setStage(item) }, STAGES.indexOf(item) + 1, ". ", historical && item === "candidate" ? t("historicalTarget") : historical && item === "dataset" ? t("generationRecords") : t(item)))), state.status === "loading" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-empty" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-spin" }), t("loading")) : state.status === "error" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-error" }, state.error, /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement("button", { className: "hse-button", onClick: () => void load() }, t("retry"))) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, !contextSupported ? /* @__PURE__ */ import_react.default.createElement("div", { className: "hse-capability" }, t("capabilityUnavailable")) : null, content, /* @__PURE__ */ import_react.default.createElement("details", { className: "hse-section hse-audit" }, /* @__PURE__ */ import_react.default.createElement("summary", null, t("audit"), " / ", t("artifacts")), /* @__PURE__ */ import_react.default.createElement("pre", null, pretty({ validation: detail.validation, registry: artifacts.registry, context: artifacts.context, doctor: artifacts.doctor })))))));
|
|
949
1028
|
}
|
|
950
1029
|
function DashboardView({ t }) {
|
|
951
1030
|
const [workspace, setWorkspace] = (0, import_react.useState)("");
|
|
@@ -1034,7 +1113,7 @@ function apply(ctx) {
|
|
|
1034
1113
|
ctx.slots.inject("conversation.view", () => ctx.slots.register({ name: "conversation.view", id: "harbor-evolution", order: 30, locale: NS, label: () => t("tab"), inject: injected }, DashboardView));
|
|
1035
1114
|
ctx.slots.inject("settings.section", () => ctx.slots.register({ name: "settings.section", id: "harbor-evolution", order: 35, label: () => t("settings"), inject: injected }, DoctorView));
|
|
1036
1115
|
ctx.slots.inject("tool.call.toolview", function* registerTools() {
|
|
1037
|
-
for (const key of ["harbor_candidate_snapshot", "harbor_model_binding", "harbor_evolution_init", "harbor_evolution_doctor", "harbor_quick_diagnostic_init", "harbor_dataset_validate", "harbor_context_preview", "harbor_eval_run", "harbor_eval_result", "harbor_evaluator_inspect", "harbor_evaluator_update", "harbor_ground_truth_init", "harbor_evaluator_meta_evaluate", "harbor_candidate_compare"]) yield ctx.slots.register({ name: "tool.call.toolview", key, inject: injected }, HarborToolView);
|
|
1116
|
+
for (const key of ["harbor_candidate_snapshot", "harbor_model_binding", "harbor_evolution_init", "harbor_evolution_doctor", "harbor_quick_diagnostic_init", "harbor_session_diagnostic_preview", "harbor_session_diagnostic_run", "harbor_dataset_validate", "harbor_context_preview", "harbor_eval_run", "harbor_eval_result", "harbor_evaluator_inspect", "harbor_evaluator_update", "harbor_ground_truth_init", "harbor_evaluator_meta_evaluate", "harbor_candidate_compare"]) yield ctx.slots.register({ name: "tool.call.toolview", key, inject: injected }, HarborToolView);
|
|
1038
1117
|
});
|
|
1039
1118
|
}
|
|
1040
1119
|
module.exports = { name, inject, apply };
|