oh-my-knowledge 0.28.0 → 0.30.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 +49 -3
- package/README.zh.md +49 -3
- package/dist/src/analysis/failure-clusterer.js +1 -1
- package/dist/src/analysis/failure-clusterer.js.map +1 -1
- package/dist/src/analysis/gap-analyzer.d.ts +8 -1
- package/dist/src/analysis/gap-analyzer.d.ts.map +1 -1
- package/dist/src/analysis/gap-analyzer.js +65 -33
- package/dist/src/analysis/gap-analyzer.js.map +1 -1
- package/dist/src/analysis/report-diagnostics.js +2 -0
- package/dist/src/analysis/report-diagnostics.js.map +1 -1
- package/dist/src/analysis/sample-diagnostics.js +14 -14
- package/dist/src/analysis/sample-diagnostics.js.map +1 -1
- package/dist/src/authoring/evolver.d.ts +7 -1
- package/dist/src/authoring/evolver.d.ts.map +1 -1
- package/dist/src/authoring/evolver.js +8 -5
- package/dist/src/authoring/evolver.js.map +1 -1
- package/dist/src/authoring/generator.d.ts +21 -23
- package/dist/src/authoring/generator.d.ts.map +1 -1
- package/dist/src/authoring/generator.js +621 -40
- package/dist/src/authoring/generator.js.map +1 -1
- package/dist/src/authoring/sample-fixer.d.ts +45 -0
- package/dist/src/authoring/sample-fixer.d.ts.map +1 -0
- package/dist/src/authoring/sample-fixer.js +186 -0
- package/dist/src/authoring/sample-fixer.js.map +1 -0
- package/dist/src/cli/commands/evolve.d.ts.map +1 -1
- package/dist/src/cli/commands/evolve.js +17 -0
- package/dist/src/cli/commands/evolve.js.map +1 -1
- package/dist/src/cli/commands/observe.d.ts.map +1 -1
- package/dist/src/cli/commands/observe.js +170 -0
- package/dist/src/cli/commands/observe.js.map +1 -1
- package/dist/src/cli/commands/registry.d.ts.map +1 -1
- package/dist/src/cli/commands/registry.js +9 -1
- package/dist/src/cli/commands/registry.js.map +1 -1
- package/dist/src/cli/commands/sample.d.ts +13 -0
- package/dist/src/cli/commands/sample.d.ts.map +1 -1
- package/dist/src/cli/commands/sample.js +307 -13
- package/dist/src/cli/commands/sample.js.map +1 -1
- package/dist/src/cli/commands/studio.d.ts.map +1 -1
- package/dist/src/cli/commands/studio.js +8 -0
- package/dist/src/cli/commands/studio.js.map +1 -1
- package/dist/src/cli/i18n-dict.d.ts +1 -1
- package/dist/src/cli/i18n-dict.d.ts.map +1 -1
- package/dist/src/cli/i18n-dict.js +189 -17
- package/dist/src/cli/i18n-dict.js.map +1 -1
- package/dist/src/cli/parse-run-config.d.ts +14 -2
- package/dist/src/cli/parse-run-config.d.ts.map +1 -1
- package/dist/src/cli/parse-run-config.js +62 -10
- package/dist/src/cli/parse-run-config.js.map +1 -1
- package/dist/src/doctor/health/builtin-dimensions.d.ts.map +1 -1
- package/dist/src/doctor/health/builtin-dimensions.js +20 -23
- package/dist/src/doctor/health/builtin-dimensions.js.map +1 -1
- package/dist/src/doctor/health/composer.d.ts.map +1 -1
- package/dist/src/doctor/health/composer.js +7 -3
- package/dist/src/doctor/health/composer.js.map +1 -1
- package/dist/src/doctor/health/dimension-spec.d.ts +1 -0
- package/dist/src/doctor/health/dimension-spec.d.ts.map +1 -1
- package/dist/src/doctor/health/parser.d.ts.map +1 -1
- package/dist/src/doctor/health/parser.js +1 -0
- package/dist/src/doctor/health/parser.js.map +1 -1
- package/dist/src/doctor/health/prompt-builder.js +25 -17
- package/dist/src/doctor/health/prompt-builder.js.map +1 -1
- package/dist/src/doctor/html-renderer.d.ts.map +1 -1
- package/dist/src/doctor/html-renderer.js +76 -66
- package/dist/src/doctor/html-renderer.js.map +1 -1
- package/dist/src/doctor/rules.d.ts.map +1 -1
- package/dist/src/doctor/rules.js +32 -0
- package/dist/src/doctor/rules.js.map +1 -1
- package/dist/src/eval-core/cache.d.ts +16 -2
- package/dist/src/eval-core/cache.d.ts.map +1 -1
- package/dist/src/eval-core/cache.js +86 -15
- package/dist/src/eval-core/cache.js.map +1 -1
- package/dist/src/eval-core/evaluation-execution.d.ts +11 -1
- package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -1
- package/dist/src/eval-core/evaluation-execution.js +78 -6
- package/dist/src/eval-core/evaluation-execution.js.map +1 -1
- package/dist/src/eval-core/evaluation-job.d.ts +2 -1
- package/dist/src/eval-core/evaluation-job.d.ts.map +1 -1
- package/dist/src/eval-core/evaluation-job.js +2 -1
- package/dist/src/eval-core/evaluation-job.js.map +1 -1
- package/dist/src/eval-core/evaluation-reporting.d.ts +7 -0
- package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -1
- package/dist/src/eval-core/evaluation-reporting.js +19 -2
- package/dist/src/eval-core/evaluation-reporting.js.map +1 -1
- package/dist/src/eval-core/execution-strategy.d.ts +1 -1
- package/dist/src/eval-core/execution-strategy.d.ts.map +1 -1
- package/dist/src/eval-core/execution-strategy.js +12 -1
- package/dist/src/eval-core/execution-strategy.js.map +1 -1
- package/dist/src/eval-core/mock-hook.cjs +203 -0
- package/dist/src/eval-core/mocks-runtime.d.ts +96 -0
- package/dist/src/eval-core/mocks-runtime.d.ts.map +1 -0
- package/dist/src/eval-core/mocks-runtime.js +323 -0
- package/dist/src/eval-core/mocks-runtime.js.map +1 -0
- package/dist/src/eval-core/schema.d.ts.map +1 -1
- package/dist/src/eval-core/schema.js +18 -5
- package/dist/src/eval-core/schema.js.map +1 -1
- package/dist/src/eval-core/task-planner.d.ts +9 -1
- package/dist/src/eval-core/task-planner.d.ts.map +1 -1
- package/dist/src/eval-core/task-planner.js +40 -1
- package/dist/src/eval-core/task-planner.js.map +1 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +5 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.js +2 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +22 -1
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.js +39 -12
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
- package/dist/src/eval-workflows/evaluation-preparation.d.ts +5 -0
- package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -1
- package/dist/src/eval-workflows/evaluation-preparation.js +3 -1
- package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts +12 -2
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.js +17 -5
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
- package/dist/src/executors/claude-cli.d.ts +1 -1
- package/dist/src/executors/claude-cli.d.ts.map +1 -1
- package/dist/src/executors/claude-cli.js +57 -6
- package/dist/src/executors/claude-cli.js.map +1 -1
- package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -1
- package/dist/src/executors/claude-sdk-trace.js +10 -4
- package/dist/src/executors/claude-sdk-trace.js.map +1 -1
- package/dist/src/executors/claude-sdk.d.ts +1 -1
- package/dist/src/executors/claude-sdk.d.ts.map +1 -1
- package/dist/src/executors/claude-sdk.js +25 -2
- package/dist/src/executors/claude-sdk.js.map +1 -1
- package/dist/src/executors/shared.d.ts +1 -1
- package/dist/src/executors/shared.d.ts.map +1 -1
- package/dist/src/executors/shared.js +6 -1
- package/dist/src/executors/shared.js.map +1 -1
- package/dist/src/grading/assertions.d.ts +5 -0
- package/dist/src/grading/assertions.d.ts.map +1 -1
- package/dist/src/grading/assertions.js +27 -1
- package/dist/src/grading/assertions.js.map +1 -1
- package/dist/src/grading/debias-validate.js +4 -4
- package/dist/src/grading/debias-validate.js.map +1 -1
- package/dist/src/grading/diagnostic.d.ts +40 -0
- package/dist/src/grading/diagnostic.d.ts.map +1 -0
- package/dist/src/grading/diagnostic.js +450 -0
- package/dist/src/grading/diagnostic.js.map +1 -0
- package/dist/src/grading/gold-cli.js +2 -2
- package/dist/src/grading/gold-cli.js.map +1 -1
- package/dist/src/grading/index.d.ts +5 -0
- package/dist/src/grading/index.d.ts.map +1 -1
- package/dist/src/grading/judge.d.ts.map +1 -1
- package/dist/src/grading/judge.js +54 -2
- package/dist/src/grading/judge.js.map +1 -1
- package/dist/src/grading/layered-scores.d.ts.map +1 -1
- package/dist/src/grading/layered-scores.js +1 -0
- package/dist/src/grading/layered-scores.js.map +1 -1
- package/dist/src/inputs/eval-config.js +19 -0
- package/dist/src/inputs/eval-config.js.map +1 -1
- package/dist/src/inputs/load-samples.d.ts +22 -2
- package/dist/src/inputs/load-samples.d.ts.map +1 -1
- package/dist/src/inputs/load-samples.js +193 -22
- package/dist/src/inputs/load-samples.js.map +1 -1
- package/dist/src/inputs/skill-loader.d.ts.map +1 -1
- package/dist/src/inputs/skill-loader.js +11 -3
- package/dist/src/inputs/skill-loader.js.map +1 -1
- package/dist/src/observability/experience.d.ts +260 -0
- package/dist/src/observability/experience.d.ts.map +1 -0
- package/dist/src/observability/experience.js +1233 -0
- package/dist/src/observability/experience.js.map +1 -0
- package/dist/src/observability/inbox-view-model.d.ts +27 -0
- package/dist/src/observability/inbox-view-model.d.ts.map +1 -0
- package/dist/src/observability/inbox-view-model.js +135 -0
- package/dist/src/observability/inbox-view-model.js.map +1 -0
- package/dist/src/observability/inbox.d.ts +125 -0
- package/dist/src/observability/inbox.d.ts.map +1 -0
- package/dist/src/observability/inbox.js +741 -0
- package/dist/src/observability/inbox.js.map +1 -0
- package/dist/src/observability/problem-patterns.d.ts +51 -0
- package/dist/src/observability/problem-patterns.d.ts.map +1 -0
- package/dist/src/observability/problem-patterns.js +205 -0
- package/dist/src/observability/problem-patterns.js.map +1 -0
- package/dist/src/observability/review-state.d.ts +54 -0
- package/dist/src/observability/review-state.d.ts.map +1 -0
- package/dist/src/observability/review-state.js +131 -0
- package/dist/src/observability/review-state.js.map +1 -0
- package/dist/src/observability/skill-chain-advisories.d.ts +25 -0
- package/dist/src/observability/skill-chain-advisories.d.ts.map +1 -0
- package/dist/src/observability/skill-chain-advisories.js +69 -0
- package/dist/src/observability/skill-chain-advisories.js.map +1 -0
- package/dist/src/observability/skill-chain.d.ts +61 -0
- package/dist/src/observability/skill-chain.d.ts.map +1 -0
- package/dist/src/observability/skill-chain.js +233 -0
- package/dist/src/observability/skill-chain.js.map +1 -0
- package/dist/src/observability/text-signals.d.ts +7 -0
- package/dist/src/observability/text-signals.d.ts.map +1 -0
- package/dist/src/observability/text-signals.js +22 -0
- package/dist/src/observability/text-signals.js.map +1 -0
- package/dist/src/observability/trace-adapter.d.ts +12 -64
- package/dist/src/observability/trace-adapter.d.ts.map +1 -1
- package/dist/src/observability/trace-adapter.js +9 -355
- package/dist/src/observability/trace-adapter.js.map +1 -1
- package/dist/src/observability/trace-attribution.d.ts +56 -0
- package/dist/src/observability/trace-attribution.d.ts.map +1 -0
- package/dist/src/observability/trace-attribution.js +200 -0
- package/dist/src/observability/trace-attribution.js.map +1 -0
- package/dist/src/observability/trace-segmenter.d.ts +52 -0
- package/dist/src/observability/trace-segmenter.d.ts.map +1 -0
- package/dist/src/observability/trace-segmenter.js +320 -0
- package/dist/src/observability/trace-segmenter.js.map +1 -0
- package/dist/src/observability/trace-source.d.ts +99 -0
- package/dist/src/observability/trace-source.d.ts.map +1 -0
- package/dist/src/observability/trace-source.js +492 -0
- package/dist/src/observability/trace-source.js.map +1 -0
- package/dist/src/renderer/html-renderer.d.ts.map +1 -1
- package/dist/src/renderer/html-renderer.js +324 -218
- package/dist/src/renderer/html-renderer.js.map +1 -1
- package/dist/src/renderer/layout.d.ts.map +1 -1
- package/dist/src/renderer/layout.js +155 -71
- package/dist/src/renderer/layout.js.map +1 -1
- package/dist/src/renderer/observation-inbox-renderer.d.ts +4 -0
- package/dist/src/renderer/observation-inbox-renderer.d.ts.map +1 -0
- package/dist/src/renderer/observation-inbox-renderer.js +5376 -0
- package/dist/src/renderer/observation-inbox-renderer.js.map +1 -0
- package/dist/src/renderer/skill-detail-renderer.d.ts +15 -0
- package/dist/src/renderer/skill-detail-renderer.d.ts.map +1 -0
- package/dist/src/renderer/skill-detail-renderer.js +1234 -0
- package/dist/src/renderer/skill-detail-renderer.js.map +1 -0
- package/dist/src/renderer/skill-list-renderer.d.ts +4 -0
- package/dist/src/renderer/skill-list-renderer.d.ts.map +1 -0
- package/dist/src/renderer/skill-list-renderer.js +327 -0
- package/dist/src/renderer/skill-list-renderer.js.map +1 -0
- package/dist/src/renderer/summary.d.ts +17 -0
- package/dist/src/renderer/summary.d.ts.map +1 -1
- package/dist/src/renderer/summary.js +346 -74
- package/dist/src/renderer/summary.js.map +1 -1
- package/dist/src/renderer/table.d.ts.map +1 -1
- package/dist/src/renderer/table.js +213 -167
- package/dist/src/renderer/table.js.map +1 -1
- package/dist/src/renderer/test-view.d.ts +66 -0
- package/dist/src/renderer/test-view.d.ts.map +1 -0
- package/dist/src/renderer/test-view.js +905 -0
- package/dist/src/renderer/test-view.js.map +1 -0
- package/dist/src/renderer/trends.d.ts.map +1 -1
- package/dist/src/renderer/trends.js +3 -1
- package/dist/src/renderer/trends.js.map +1 -1
- package/dist/src/server/report-server.d.ts +6 -1
- package/dist/src/server/report-server.d.ts.map +1 -1
- package/dist/src/server/report-server.js +182 -6
- package/dist/src/server/report-server.js.map +1 -1
- package/dist/src/server/report-store.d.ts.map +1 -1
- package/dist/src/server/report-store.js +33 -1
- package/dist/src/server/report-store.js.map +1 -1
- package/dist/src/server/skill-index.d.ts +77 -0
- package/dist/src/server/skill-index.d.ts.map +1 -0
- package/dist/src/server/skill-index.js +331 -0
- package/dist/src/server/skill-index.js.map +1 -0
- package/dist/src/server/skill-insights.d.ts +92 -0
- package/dist/src/server/skill-insights.d.ts.map +1 -0
- package/dist/src/server/skill-insights.js +676 -0
- package/dist/src/server/skill-insights.js.map +1 -0
- package/dist/src/shared/hard-rules.d.ts +40 -0
- package/dist/src/shared/hard-rules.d.ts.map +1 -0
- package/dist/src/shared/hard-rules.js +200 -0
- package/dist/src/shared/hard-rules.js.map +1 -0
- package/dist/src/shared/time.d.ts +2 -0
- package/dist/src/shared/time.d.ts.map +1 -0
- package/dist/src/shared/time.js +10 -0
- package/dist/src/shared/time.js.map +1 -0
- package/dist/src/shared/tool-search.d.ts +9 -0
- package/dist/src/shared/tool-search.d.ts.map +1 -0
- package/dist/src/shared/tool-search.js +104 -0
- package/dist/src/shared/tool-search.js.map +1 -0
- package/dist/src/types/eval.d.ts +83 -0
- package/dist/src/types/eval.d.ts.map +1 -1
- package/dist/src/types/executor.d.ts +47 -0
- package/dist/src/types/executor.d.ts.map +1 -1
- package/dist/src/types/judge.d.ts +76 -0
- package/dist/src/types/judge.d.ts.map +1 -1
- package/dist/src/types/judge.js +3 -1
- package/dist/src/types/judge.js.map +1 -1
- package/dist/src/types/report.d.ts +63 -3
- package/dist/src/types/report.d.ts.map +1 -1
- package/dist/src/util/safe-slice.d.ts +23 -0
- package/dist/src/util/safe-slice.d.ts.map +1 -0
- package/dist/src/util/safe-slice.js +33 -0
- package/dist/src/util/safe-slice.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { e, fmtNum, fmtDuration,
|
|
1
|
+
import { e, fmtNum, fmtDuration, t } from './layout.js';
|
|
2
2
|
/** Render the multi-judge ensemble breakdown for a single (sample × rubric or dimension). */
|
|
3
3
|
function renderEnsembleBlock(ensemble, agreement, lang) {
|
|
4
4
|
if (!ensemble || ensemble.length < 2)
|
|
@@ -8,188 +8,234 @@ function renderEnsembleBlock(ensemble, agreement, lang) {
|
|
|
8
8
|
? ` <span style="color:var(--text-muted)">±${judge.scoreStddev}</span>`
|
|
9
9
|
: '';
|
|
10
10
|
const fail = judge.judgeFailureCount && judge.judgeFailureCount > 0
|
|
11
|
-
? ` <span style="color:var(--red);font-size:
|
|
11
|
+
? ` <span style="color:var(--red);font-size:11px">${judge.judgeFailureCount}/${judge.scoreSamples?.length || '?'} fail</span>`
|
|
12
12
|
: '';
|
|
13
13
|
const reasoning = judge.reasoning
|
|
14
|
-
? `<details
|
|
14
|
+
? `<details class="sc-cot"><summary>${t('judgeReasoning', lang)} ${t('judgeReasoningExpand', lang)}</summary><pre class="sc-cot-body">${e(judge.reasoning)}</pre></details>`
|
|
15
15
|
: '';
|
|
16
|
-
return `<div style="margin-top:
|
|
16
|
+
return `<div style="margin-top:6px;font-size:13px"><strong>${e(judge.judge)}</strong>: ${judge.score}${stddev}${fail}${reasoning}</div>`;
|
|
17
17
|
}).join('');
|
|
18
18
|
const agreementLine = agreement && agreement.pairCount > 0
|
|
19
|
-
? `<div style="margin-top:
|
|
19
|
+
? `<div style="margin-top:6px;font-size:12px;color:var(--text-muted)" title="${t('madDesc', lang)}">MAD ${agreement.meanAbsDiff}${agreement.pearson != null ? ` · Pearson ${agreement.pearson}` : ''}</div>`
|
|
20
20
|
: '';
|
|
21
|
-
return `<details
|
|
21
|
+
return `<details class="sc-section"><summary class="sc-section-h" style="cursor:pointer">${t('ensembleHeader', lang)} (${ensemble.length})</summary>${rows}${agreementLine}</details>`;
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
function renderTrace(turns, toolCalls, timing, fullOutput, id, lang) {
|
|
42
|
-
if (!turns || turns.length === 0)
|
|
43
|
-
return '';
|
|
44
|
-
const timingHtml = timing
|
|
45
|
-
? `<div style="font-size:11px;color:var(--text-muted);margin-bottom:8px">${t('traceExecMs', lang)} ${fmtDuration(timing.execMs)} · ${t('traceGradeMs', lang)} ${fmtDuration(timing.gradeMs)} · ${t('traceTotalMs', lang)} ${fmtDuration(timing.totalMs)}</div>`
|
|
46
|
-
: '';
|
|
47
|
-
const steps = turns.map((turn, i) => {
|
|
48
|
-
const durTag = turn.durationMs ? `<span style="color:var(--text-muted);font-size:10px;margin-left:6px">${fmtDuration(turn.durationMs)}</span>` : '';
|
|
49
|
-
if (turn.role === 'assistant') {
|
|
50
|
-
const toolTags = (turn.toolCalls || []).map((tc) => {
|
|
51
|
-
const statusColor = tc.success ? 'var(--green)' : 'var(--red)';
|
|
52
|
-
const inputPreview = typeof tc.input === 'string' ? tc.input.slice(0, 80) : JSON.stringify(tc.input || '').slice(0, 80);
|
|
53
|
-
return `<div style="margin:2px 0 2px 16px;font-size:11px"><span style="color:${statusColor}">●</span> <strong>${e(tc.tool)}</strong> <span style="color:var(--text-muted)">${e(inputPreview)}</span></div>`;
|
|
54
|
-
}).join('');
|
|
55
|
-
const textPreview = turn.content ? `<div style="font-size:11px;color:var(--text-secondary);margin-left:16px;white-space:pre-wrap;max-height:60px;overflow:hidden">${e(turn.content.slice(0, 200))}</div>` : '';
|
|
56
|
-
return `<div style="margin:4px 0;padding:4px 0;border-left:2px solid var(--accent)">
|
|
57
|
-
<div style="font-size:11px;padding-left:8px"><span style="color:var(--accent);font-weight:600">[${i + 1}] ${t('traceAssistant', lang)}</span>${durTag}</div>
|
|
58
|
-
${toolTags}${textPreview}
|
|
59
|
-
</div>`;
|
|
23
|
+
/**
|
|
24
|
+
* 渲染单个 variant 在某个 sample 上的"评分卡片块"。
|
|
25
|
+
* 结构化分段:综合分 → 三层分(事实/行为/LLM 评价)→ 失败断言 → judge 推理 → 工具调用统计。
|
|
26
|
+
* 每段独立展示,文本左对齐,数字 tabular-nums 对齐。
|
|
27
|
+
*
|
|
28
|
+
* delta(对比第 1 个 variant)只在多 variant 模式下显示。
|
|
29
|
+
*/
|
|
30
|
+
function renderVariantBlock(d, variantName, comparedTo, lang) {
|
|
31
|
+
const score = d.compositeScore ?? d.llmScore;
|
|
32
|
+
const hasScore = typeof score === 'number';
|
|
33
|
+
const scoreText = hasScore ? score : (d.ok ? '—' : 'ERR');
|
|
34
|
+
const scoreColor = !d.ok ? 'var(--red)' : (hasScore && score >= 4) ? 'var(--green)' : (hasScore && score >= 3) ? 'var(--yellow)' : (hasScore ? 'var(--red)' : 'var(--text-muted)');
|
|
35
|
+
// Judge 自一致性指标(单评分模式 ≥2 次评委时):stddev + failure count
|
|
36
|
+
let stabilityHtml = '';
|
|
37
|
+
if (d.llmScoreSamples && d.llmScoreSamples.length > 1) {
|
|
38
|
+
if (d.llmScoreStddev != null) {
|
|
39
|
+
stabilityHtml += ` <span class="sc-stab" title="${t('judgeStddevDesc', lang)}">±${d.llmScoreStddev}</span>`;
|
|
60
40
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
41
|
+
if (d.llmScoreFailures && d.llmScoreFailures > 0) {
|
|
42
|
+
stabilityHtml += ` <span class="sc-stab sc-stab--fail" title="${t('judgeFailuresDesc', lang)}">${d.llmScoreFailures}/${d.llmScoreSamples.length} fail</span>`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// delta 跟首 variant(通常是 baseline)的差值
|
|
46
|
+
let scoreDelta = '';
|
|
47
|
+
if (comparedTo && hasScore && typeof comparedTo.compositeScore === 'number') {
|
|
48
|
+
const diff = score - comparedTo.compositeScore;
|
|
49
|
+
if (Math.abs(diff) >= 0.05) {
|
|
50
|
+
const sign = diff > 0 ? '+' : '';
|
|
51
|
+
const dColor = diff > 0 ? 'var(--green)' : 'var(--red)';
|
|
52
|
+
scoreDelta = `<span style="color:${dColor};font-size:13px;margin-left:8px;font-weight:600">${sign}${diff.toFixed(2)}</span>`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// 三层分
|
|
56
|
+
const ls = d.layeredScores;
|
|
57
|
+
const layerRows = [];
|
|
58
|
+
if (ls?.factScore != null) {
|
|
59
|
+
const dColor = ls.factScore >= 4 ? 'var(--green)' : ls.factScore >= 3 ? 'var(--yellow)' : 'var(--red)';
|
|
60
|
+
layerRows.push(`<div class="sc-layer-row"><span class="sc-layer-name">${lang === 'zh' ? '事实' : 'Fact'}</span><span class="sc-layer-val" style="color:${dColor}">${ls.factScore}</span></div>`);
|
|
61
|
+
}
|
|
62
|
+
if (ls?.behaviorScore != null) {
|
|
63
|
+
const dColor = ls.behaviorScore >= 4 ? 'var(--green)' : ls.behaviorScore >= 3 ? 'var(--yellow)' : 'var(--red)';
|
|
64
|
+
layerRows.push(`<div class="sc-layer-row"><span class="sc-layer-name">${lang === 'zh' ? '行为' : 'Behavior'}</span><span class="sc-layer-val" style="color:${dColor}">${ls.behaviorScore}</span></div>`);
|
|
65
|
+
}
|
|
66
|
+
if (ls?.judgeScore != null) {
|
|
67
|
+
const dColor = ls.judgeScore >= 4 ? 'var(--green)' : ls.judgeScore >= 3 ? 'var(--yellow)' : 'var(--red)';
|
|
68
|
+
layerRows.push(`<div class="sc-layer-row"><span class="sc-layer-name">${lang === 'zh' ? 'LLM 评价' : 'Judge'}</span><span class="sc-layer-val" style="color:${dColor}">${ls.judgeScore}</span></div>`);
|
|
69
|
+
}
|
|
70
|
+
const layeredHtml = layerRows.length > 0 ? `<div class="sc-layers">${layerRows.join('')}</div>` : '';
|
|
71
|
+
// 失败断言(只列 fail 的)
|
|
72
|
+
let assertionHtml = '';
|
|
73
|
+
if (d.assertions?.details) {
|
|
74
|
+
const failed = d.assertions.details.filter((a) => !a.passed);
|
|
75
|
+
const total = d.assertions.details.length;
|
|
76
|
+
if (failed.length > 0) {
|
|
77
|
+
const items = failed.map((a) => `<li><code>${e(a.type)}</code>: ${e(String(a.value))}</li>`).join('');
|
|
78
|
+
assertionHtml = `<div class="sc-section"><div class="sc-section-h">${lang === 'zh' ? '失败断言' : 'Failed assertions'} <span class="sc-stat">${failed.length}/${total}</span></div><ul class="sc-assert-list">${items}</ul></div>`;
|
|
79
|
+
}
|
|
80
|
+
else if (total > 0) {
|
|
81
|
+
assertionHtml = `<div class="sc-section sc-section--muted">${lang === 'zh' ? '断言全过' : 'All passed'} <span class="sc-stat">${total}/${total}</span></div>`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Judge 评价
|
|
85
|
+
let judgeHtml = '';
|
|
86
|
+
if (d.llmReason) {
|
|
87
|
+
const reasonText = d.llmReason.length > 200 ? d.llmReason.slice(0, 200) + '…' : d.llmReason;
|
|
88
|
+
const cot = d.llmReasoning
|
|
89
|
+
? `<details class="sc-cot"><summary>${lang === 'zh' ? '展开完整 CoT' : 'show full CoT'}</summary><pre class="sc-cot-body">${e(d.llmReasoning)}</pre></details>`
|
|
90
|
+
: '';
|
|
91
|
+
judgeHtml = `<div class="sc-section"><div class="sc-section-h">${lang === 'zh' ? 'Judge 评价' : 'Judge'}</div><div class="sc-judge-text">${e(reasonText)}</div>${cot}</div>`;
|
|
92
|
+
}
|
|
93
|
+
// Multi-judge ensemble (collapsed)
|
|
94
|
+
const ensembleHtml = renderEnsembleBlock(d.llmEnsemble, d.llmAgreement, lang);
|
|
95
|
+
// 维度评分(multi-rubric mode)
|
|
96
|
+
let dimHtml = '';
|
|
97
|
+
if (d.dimensions && Object.keys(d.dimensions).length > 0) {
|
|
98
|
+
const dimRows = Object.entries(d.dimensions).map(([dim, info]) => {
|
|
99
|
+
const s = typeof info === 'object' ? info.score : info;
|
|
100
|
+
const dColor = (typeof s === 'number' && s >= 4) ? 'var(--green)' : (typeof s === 'number' && s >= 3) ? 'var(--yellow)' : 'var(--red)';
|
|
101
|
+
return `<div class="sc-layer-row"><span class="sc-layer-name">${e(dim)}</span><span class="sc-layer-val" style="color:${dColor}">${s}</span></div>`;
|
|
102
|
+
}).join('');
|
|
103
|
+
dimHtml = `<div class="sc-section"><div class="sc-section-h">${lang === 'zh' ? '维度评分' : 'Dimensions'}</div><div class="sc-layers">${dimRows}</div></div>`;
|
|
104
|
+
}
|
|
105
|
+
// 事实校验
|
|
106
|
+
let factCheckHtml = '';
|
|
107
|
+
if (d.factCheck && d.factCheck.totalCount > 0) {
|
|
108
|
+
const fc = d.factCheck;
|
|
109
|
+
const fcColor = fc.verifiedRate >= 0.8 ? 'var(--green)' : fc.verifiedRate >= 0.5 ? 'var(--yellow)' : 'var(--red)';
|
|
110
|
+
factCheckHtml = `<div class="sc-meta-row"><span class="sc-meta-name">${lang === 'zh' ? '事实校验' : 'Fact verified'}</span><span style="color:${fcColor}">${fc.verifiedCount}/${fc.totalCount}</span></div>`;
|
|
111
|
+
}
|
|
112
|
+
// 工具调用 + tokens + 耗时
|
|
113
|
+
const totalMs = d.timing?.totalMs || d.durationMs;
|
|
114
|
+
const metaParts = [];
|
|
115
|
+
if (d.numToolCalls != null && d.numToolCalls > 0) {
|
|
116
|
+
const srColor = (d.toolSuccessRate ?? 1) >= 0.8 ? 'var(--green)' : 'var(--red)';
|
|
117
|
+
const srText = d.toolSuccessRate != null ? `${(d.toolSuccessRate * 100).toFixed(0)}%` : '—';
|
|
118
|
+
metaParts.push(`<div class="sc-meta-row"><span class="sc-meta-name">${lang === 'zh' ? '工具调用' : 'Tools'}</span>${d.numToolCalls} <span style="color:${srColor}">(${srText} OK)</span></div>`);
|
|
119
|
+
}
|
|
120
|
+
metaParts.push(`<div class="sc-meta-row"><span class="sc-meta-name">${lang === 'zh' ? 'Tokens' : 'Tokens'}</span>${fmtNum(d.totalTokens)}</div>`);
|
|
121
|
+
metaParts.push(`<div class="sc-meta-row"><span class="sc-meta-name">${lang === 'zh' ? '耗时' : 'Duration'}</span>${fmtDuration(totalMs)}</div>`);
|
|
122
|
+
// Error message
|
|
123
|
+
const errorHtml = !d.ok && d.error
|
|
124
|
+
? `<div class="sc-error">⚠ ${e(d.error)}</div>`
|
|
76
125
|
: '';
|
|
77
|
-
return `<
|
|
78
|
-
<
|
|
79
|
-
<div
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
126
|
+
return `<div class="sc-variant">
|
|
127
|
+
<div class="sc-variant-h">${e(variantName)}</div>
|
|
128
|
+
<div class="sc-score-line"><span class="sc-score" style="color:${scoreColor}">${scoreText}</span><span class="sc-score-unit">/ 5</span>${scoreDelta}${stabilityHtml}</div>
|
|
129
|
+
${layeredHtml}
|
|
130
|
+
${errorHtml}
|
|
131
|
+
${assertionHtml}
|
|
132
|
+
${dimHtml}
|
|
133
|
+
${judgeHtml}
|
|
134
|
+
${ensembleHtml}
|
|
135
|
+
${factCheckHtml ? `<div class="sc-section">${factCheckHtml}</div>` : ''}
|
|
136
|
+
<div class="sc-meta">${metaParts.join('')}</div>
|
|
137
|
+
</div>`;
|
|
83
138
|
}
|
|
84
139
|
export function renderSampleTable(variants, results, lang) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
140
|
+
// v0.30 — 不再用宽表格(每 td 塞 15 种内容居中显示乱);
|
|
141
|
+
// 改成"用例可折叠卡片",点击展开看 variant-by-variant 的结构化评分块。
|
|
142
|
+
// 每条用例先按综合分升序(差的在前),便于聚焦问题样本。
|
|
143
|
+
const sortedResults = [...results].sort((a, b) => {
|
|
144
|
+
// 取首 variant 的 composite,按升序排
|
|
145
|
+
const sa = a.variants?.[variants[0]]?.compositeScore ?? 0;
|
|
146
|
+
const sb = b.variants?.[variants[0]]?.compositeScore ?? 0;
|
|
147
|
+
return sa - sb;
|
|
148
|
+
});
|
|
149
|
+
const sampleCards = sortedResults.map((r) => {
|
|
150
|
+
// 头部摘要:sample_id + 各 variant 的 score 一行带过
|
|
151
|
+
const scoreSummary = variants.map((v) => {
|
|
152
|
+
const d = r.variants?.[v];
|
|
153
|
+
const score = d?.compositeScore ?? d?.llmScore;
|
|
154
|
+
if (typeof score !== 'number')
|
|
155
|
+
return `<span class="sc-summary-score sc-summary-score--muted">${e(v)} —</span>`;
|
|
156
|
+
const color = score >= 4 ? 'var(--green)' : score >= 3 ? 'var(--yellow)' : 'var(--red)';
|
|
157
|
+
return `<span class="sc-summary-score" style="color:${color}">${e(v)} ${score.toFixed(2)}</span>`;
|
|
158
|
+
}).join('<span class="sc-summary-sep">·</span>');
|
|
159
|
+
// 体内每个 variant 一栏(side-by-side),传 baseline (variants[0]) 用于 delta
|
|
160
|
+
const baselineResult = r.variants?.[variants[0]];
|
|
161
|
+
const variantBlocks = variants.map((v, i) => {
|
|
88
162
|
const d = r.variants?.[v];
|
|
89
163
|
if (!d)
|
|
90
|
-
return
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const scoreClass = !d.ok ? 'badge-err' : hasScore ? 'badge-ok' : 'badge-muted';
|
|
94
|
-
const scoreText = hasScore ? score : (d.ok ? '-' : 'ERR');
|
|
95
|
-
// Layered score badges
|
|
96
|
-
let layeredHtml = '';
|
|
97
|
-
if (d.layeredScores) {
|
|
98
|
-
const ls = d.layeredScores;
|
|
99
|
-
const badges = [];
|
|
100
|
-
if (ls.factScore != null)
|
|
101
|
-
badges.push(`<span class="dim-tag" title="${lang === 'zh' ? '事实:输出中的事实声明是否正确(规则验证)' : 'Fact: Are factual claims correct (rule-verified)'}">${lang === 'zh' ? '事实' : 'F'}:${ls.factScore}</span>`);
|
|
102
|
-
if (ls.behaviorScore != null)
|
|
103
|
-
badges.push(`<span class="dim-tag" title="${lang === 'zh' ? '行为:执行路径是否符合预期(规则验证)' : 'Behavior: Is execution path compliant (rule-verified)'}">${lang === 'zh' ? '行为' : 'B'}:${ls.behaviorScore}</span>`);
|
|
104
|
-
if (ls.judgeScore != null)
|
|
105
|
-
badges.push(`<span class="dim-tag" title="${lang === 'zh' ? 'LLM 评价:LLM 评委按预先写好的评分规则(英文叫 rubric)给输出打的主观分' : 'LLM judge: subjective score given by the judge LLM against a predefined rubric (scoring criteria)'}">${lang === 'zh' ? 'LLM 评价' : 'J'}:${ls.judgeScore}</span>`);
|
|
106
|
-
if (badges.length > 0)
|
|
107
|
-
layeredHtml = `<div class="dim-scores">${badges.join('')}</div>`;
|
|
108
|
-
}
|
|
109
|
-
// Fact check badge
|
|
110
|
-
let factCheckHtml = '';
|
|
111
|
-
if (d.factCheck && d.factCheck.totalCount > 0) {
|
|
112
|
-
const fc = d.factCheck;
|
|
113
|
-
const fcColor = fc.verifiedRate >= 0.8 ? 'var(--green)' : fc.verifiedRate >= 0.5 ? 'var(--yellow)' : 'var(--red)';
|
|
114
|
-
factCheckHtml = `<div style="font-size:11px;margin-top:2px"><span style="color:${fcColor}">${lang === 'zh' ? '事实验证' : 'Verified'} ${fc.verifiedCount}/${fc.totalCount}</span></div>`;
|
|
115
|
-
}
|
|
116
|
-
const errorHtml = !d.ok && d.error
|
|
117
|
-
? `<br><span class="error-detail">${e(d.error)}</span>`
|
|
118
|
-
: '';
|
|
119
|
-
// Only show failed assertions
|
|
120
|
-
let assertionHtml = '';
|
|
121
|
-
if (d.assertions?.details) {
|
|
122
|
-
const failed = d.assertions.details.filter((a) => !a.passed);
|
|
123
|
-
if (failed.length > 0) {
|
|
124
|
-
const items = failed.map((a) => `<li><span class="badge badge-fail" style="font-size:10px;padding:1px 4px">✗</span> ${e(a.type)}: ${e(a.value)}</li>`).join('');
|
|
125
|
-
assertionHtml = `<ul class="assertion-list">${items}</ul>`;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
let dimHtml = '';
|
|
129
|
-
let dimEnsembleHtml = '';
|
|
130
|
-
if (d.dimensions) {
|
|
131
|
-
const tags = Object.entries(d.dimensions).map(([dim, info]) => {
|
|
132
|
-
const s = typeof info === 'object' ? info.score : info;
|
|
133
|
-
const dr = typeof info === 'object' ? info : undefined;
|
|
134
|
-
const stab = dr ? renderJudgeStability(dr.scoreStddev, dr.scoreSamples, dr.judgeFailureCount, lang) : '';
|
|
135
|
-
return `<span class="dim-tag">${e(dim)}: ${s}</span>${stab}`;
|
|
136
|
-
}).join('');
|
|
137
|
-
dimHtml = `<div class="dim-scores">${tags}</div>`;
|
|
138
|
-
// Per-dimension ensemble blocks (collapsed)
|
|
139
|
-
const ensBlocks = Object.entries(d.dimensions)
|
|
140
|
-
.map(([dim, info]) => {
|
|
141
|
-
if (typeof info !== 'object')
|
|
142
|
-
return '';
|
|
143
|
-
const dr = info;
|
|
144
|
-
const block = renderEnsembleBlock(dr.ensemble, dr.agreement, lang);
|
|
145
|
-
const reasoning = renderReasoning(dr.reasoning, lang);
|
|
146
|
-
if (!block && !reasoning)
|
|
147
|
-
return '';
|
|
148
|
-
return `<div style="margin-top:4px"><strong style="font-size:11px">${e(dim)}</strong>${block}${reasoning}</div>`;
|
|
149
|
-
})
|
|
150
|
-
.filter(Boolean).join('');
|
|
151
|
-
if (ensBlocks)
|
|
152
|
-
dimEnsembleHtml = ensBlocks;
|
|
153
|
-
}
|
|
154
|
-
// Single-rubric mode: stddev / failures / reasoning / ensemble inline
|
|
155
|
-
const stabilityHtml = renderJudgeStability(d.llmScoreStddev, d.llmScoreSamples, d.llmScoreFailures, lang);
|
|
156
|
-
const reasoningHtml = renderReasoning(d.llmReasoning, lang);
|
|
157
|
-
const ensembleHtml = renderEnsembleBlock(d.llmEnsemble, d.llmAgreement, lang);
|
|
158
|
-
const reasonHtml = d.llmReason
|
|
159
|
-
? `<br><span style="font-size:11px;color:var(--text-muted)">${e(d.llmReason?.slice(0, 80))}</span>`
|
|
160
|
-
: '';
|
|
161
|
-
// Agent tool call summary
|
|
162
|
-
let toolHtml = '';
|
|
163
|
-
if (d.numToolCalls != null && d.numToolCalls > 0) {
|
|
164
|
-
const srColor = (d.toolSuccessRate ?? 1) >= 0.8 ? 'var(--green)' : 'var(--red)';
|
|
165
|
-
const srText = d.toolSuccessRate != null ? `${(d.toolSuccessRate * 100).toFixed(0)}%` : '-';
|
|
166
|
-
const toolList = (d.toolNames || []).join(', ');
|
|
167
|
-
const toolTip = toolList ? ` title="${e(toolList)}"` : '';
|
|
168
|
-
toolHtml = `<div style="font-size:11px;margin-top:2px;color:var(--text-muted)"${toolTip}>🔧 ${d.numToolCalls} calls · <span style="color:${srColor}">${srText} OK</span></div>`;
|
|
169
|
-
}
|
|
170
|
-
// Execution trace (expandable)
|
|
171
|
-
const traceId = `trace-${r.sample_id}-${v}`.replace(/[^a-zA-Z0-9-]/g, '_');
|
|
172
|
-
const traceHtml = d.turns ? renderTrace(d.turns, d.toolCalls, d.timing, d.fullOutput, traceId, lang) : '';
|
|
173
|
-
// Timing summary
|
|
174
|
-
const timingHtml = d.timing
|
|
175
|
-
? `<div style="font-size:10px;color:var(--text-muted);margin-top:2px">${t('traceExecMs', lang)} ${fmtDuration(d.timing.execMs)} · ${t('traceGradeMs', lang)} ${fmtDuration(d.timing.gradeMs)}</div>`
|
|
176
|
-
: '';
|
|
177
|
-
const firstV = r.variants?.[variants[0]];
|
|
178
|
-
const totalMs = d.timing?.totalMs || d.durationMs;
|
|
179
|
-
const firstTotalMs = firstV?.timing?.totalMs || firstV?.durationMs || 0;
|
|
180
|
-
const tokenDelta = i > 0 && firstV ? delta(firstV.totalTokens, d.totalTokens, true) : '';
|
|
181
|
-
const msDelta = i > 0 && firstTotalMs ? delta(firstTotalMs, totalMs, true) : '';
|
|
182
|
-
return `<td><span class="badge ${scoreClass}">${scoreText}</span>${stabilityHtml}${layeredHtml}${factCheckHtml}${errorHtml}${reasonHtml}${reasoningHtml}${ensembleHtml}${assertionHtml}${dimHtml}${dimEnsembleHtml}${toolHtml}${timingHtml}${traceHtml}</td><td>${fmtNum(d.totalTokens)}${tokenDelta}</td><td>${fmtDuration(totalMs)}${msDelta}</td>`;
|
|
164
|
+
return `<div class="sc-variant"><div class="sc-variant-h">${e(v)}</div><div class="sc-empty">—</div></div>`;
|
|
165
|
+
// 跟 baseline 比;baseline 自身不显示 delta
|
|
166
|
+
return renderVariantBlock(d, v, i === 0 ? undefined : baselineResult, lang);
|
|
183
167
|
}).join('');
|
|
184
|
-
return `<
|
|
168
|
+
return `<details class="sc-sample-card">
|
|
169
|
+
<summary class="sc-sample-h">
|
|
170
|
+
<code class="sc-sample-id">${e(r.sample_id)}</code>
|
|
171
|
+
<span class="sc-sample-scores">${scoreSummary}</span>
|
|
172
|
+
</summary>
|
|
173
|
+
<div class="sc-sample-body">
|
|
174
|
+
<div class="sc-variants" data-cols="${variants.length}">${variantBlocks}</div>
|
|
175
|
+
</div>
|
|
176
|
+
</details>`;
|
|
185
177
|
}).join('');
|
|
186
178
|
return `
|
|
187
179
|
<h2 data-i18n="perSampleDetail">${t('perSampleDetail', lang)}</h2>
|
|
188
|
-
<div class="
|
|
189
|
-
<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
180
|
+
<div class="sc-sample-list">${sampleCards}</div>
|
|
181
|
+
<style>
|
|
182
|
+
/* 评分页 — 逐用例详情卡片(替代旧 table)
|
|
183
|
+
结构:
|
|
184
|
+
.sc-sample-list 外层 stack
|
|
185
|
+
.sc-sample-card 一条用例,可折叠 details
|
|
186
|
+
.sc-sample-h 头(id + 各 variant 分数摘要)
|
|
187
|
+
.sc-sample-body 体
|
|
188
|
+
.sc-variants grid 多列(每 variant 一栏)
|
|
189
|
+
.sc-variant 单 variant 评分块
|
|
190
|
+
关键:文本左对齐,数字右对齐 + tabular-nums,分段而非表格,
|
|
191
|
+
减少居中混排和长短文本拥挤。 */
|
|
192
|
+
.sc-sample-list { display:flex;flex-direction:column;gap:8px;margin:12px 0 }
|
|
193
|
+
.sc-sample-card { background:var(--bg-surface);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:box-shadow .15s }
|
|
194
|
+
.sc-sample-card:hover { box-shadow:var(--shadow-md) }
|
|
195
|
+
.sc-sample-card[open] { box-shadow:var(--shadow-md) }
|
|
196
|
+
.sc-sample-h { display:flex;align-items:center;gap:14px;padding:14px 18px;cursor:pointer;list-style:none;font-size:14.5px }
|
|
197
|
+
.sc-sample-h::-webkit-details-marker { display:none }
|
|
198
|
+
.sc-sample-h::after { content:'›';margin-left:auto;color:var(--text-muted);font-size:18px;transition:transform .15s }
|
|
199
|
+
.sc-sample-card[open] .sc-sample-h::after { transform:rotate(90deg) }
|
|
200
|
+
.sc-sample-id { font-family:"SF Mono",Menlo,monospace;color:var(--text-muted);font-size:13px;font-weight:500;letter-spacing:-0.01em }
|
|
201
|
+
.sc-sample-scores { display:flex;align-items:center;gap:8px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--text-secondary) }
|
|
202
|
+
.sc-summary-score { font-family:"SF Mono",Menlo,monospace;font-weight:500 }
|
|
203
|
+
.sc-summary-score--muted { color:var(--text-muted) }
|
|
204
|
+
.sc-summary-sep { color:var(--text-muted) }
|
|
205
|
+
.sc-sample-body { padding:0 18px 18px;border-top:1px solid var(--border) }
|
|
206
|
+
/* 多列 grid:1 variant 用单列;2 用 1fr 1fr;>=3 自适应 */
|
|
207
|
+
.sc-variants { display:grid;gap:24px;margin-top:18px;grid-template-columns:1fr }
|
|
208
|
+
.sc-variants[data-cols="2"] { grid-template-columns:1fr 1fr }
|
|
209
|
+
.sc-variants[data-cols="3"] { grid-template-columns:repeat(3,1fr) }
|
|
210
|
+
.sc-variants[data-cols="4"] { grid-template-columns:repeat(2,1fr) }
|
|
211
|
+
@media (max-width:760px){ .sc-variants, .sc-variants[data-cols="2"], .sc-variants[data-cols="3"], .sc-variants[data-cols="4"] { grid-template-columns:1fr } }
|
|
212
|
+
.sc-variant { background:var(--bg-soft);border-radius:6px;padding:14px 16px;font-size:14px;line-height:1.7 }
|
|
213
|
+
.sc-variant-h { font-size:13px;font-weight:600;color:var(--text-muted);margin-bottom:8px;letter-spacing:0.02em;font-family:"SF Mono",Menlo,monospace }
|
|
214
|
+
.sc-score-line { display:flex;align-items:baseline;gap:6px;margin-bottom:14px }
|
|
215
|
+
.sc-score { font-size:32px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1 }
|
|
216
|
+
.sc-score-unit { font-size:14px;color:var(--text-muted);font-weight:400 }
|
|
217
|
+
.sc-stab { font-size:12px;color:var(--text-muted);margin-left:8px;font-family:"SF Mono",Menlo,monospace;background:var(--bg-soft);padding:2px 6px;border-radius:3px }
|
|
218
|
+
.sc-stab--fail { color:var(--red);background:var(--red-bg) }
|
|
219
|
+
.sc-layers { display:flex;flex-direction:column;gap:4px;margin-bottom:8px }
|
|
220
|
+
.sc-layer-row { display:flex;justify-content:space-between;align-items:baseline;font-size:13.5px;line-height:1.6 }
|
|
221
|
+
.sc-layer-name { color:var(--text-secondary) }
|
|
222
|
+
.sc-layer-val { font-weight:600;font-variant-numeric:tabular-nums;font-family:"SF Mono",Menlo,monospace }
|
|
223
|
+
.sc-section { margin-top:14px }
|
|
224
|
+
.sc-section--muted { color:var(--text-muted);font-size:13px }
|
|
225
|
+
.sc-section-h { font-size:13px;font-weight:600;color:var(--text-secondary);margin-bottom:6px }
|
|
226
|
+
.sc-stat { color:var(--text-muted);font-weight:400;margin-left:6px;font-variant-numeric:tabular-nums }
|
|
227
|
+
.sc-assert-list { margin:0;padding-left:20px;font-size:13px;line-height:1.7;color:var(--text-secondary) }
|
|
228
|
+
.sc-assert-list li { margin:3px 0 }
|
|
229
|
+
.sc-assert-list code { font-family:"SF Mono",Menlo,monospace;background:var(--bg-surface);padding:1px 6px;border-radius:3px;font-size:12px }
|
|
230
|
+
.sc-judge-text { font-size:13.5px;line-height:1.7;color:var(--text-primary);white-space:pre-wrap;word-break:break-word }
|
|
231
|
+
.sc-cot { margin-top:8px;font-size:12px }
|
|
232
|
+
.sc-cot summary { cursor:pointer;color:var(--text-muted) }
|
|
233
|
+
.sc-cot-body { font-size:12.5px;line-height:1.7;color:var(--text-secondary);white-space:pre-wrap;font-family:inherit;background:var(--bg-surface);padding:10px 14px;border-radius:4px;margin-top:6px;max-height:400px;overflow-y:auto }
|
|
234
|
+
.sc-meta { margin-top:14px;padding-top:12px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:4px }
|
|
235
|
+
.sc-meta-row { display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-muted);font-variant-numeric:tabular-nums }
|
|
236
|
+
.sc-meta-name { color:var(--text-muted) }
|
|
237
|
+
.sc-error { margin-top:10px;padding:10px 14px;background:var(--red-bg);border-left:3px solid var(--red);border-radius:4px;font-size:13px;color:var(--red);line-height:1.6 }
|
|
238
|
+
.sc-empty { color:var(--text-muted);font-style:italic;padding:14px 0 }
|
|
239
|
+
</style>`;
|
|
194
240
|
}
|
|
195
241
|
//# sourceMappingURL=table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/renderer/table.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/renderer/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单测视角渲染器 — 把 EvaluationReport 当作 vitest 风格的测试结果看:
|
|
3
|
+
*
|
|
4
|
+
* 每个 sample = 一个 test case
|
|
5
|
+
* ┌─ 用例设计(测试契约): prompt / rubric / 期望 assertions / 工具调用 mock
|
|
6
|
+
* ├─ 执行轨迹: thinking + tool calls + 断言绑定到 turn
|
|
7
|
+
* └─ 断言汇总: 每条 assertion 在哪一步触发,pass/fail
|
|
8
|
+
*
|
|
9
|
+
* 数据全部来自 EvaluationReport,不引入新数据源:
|
|
10
|
+
* - 设计 ← report.sampleSnapshots[sample_id]
|
|
11
|
+
* - 执行 ← VariantResult.turns / .toolCalls / .mockStats / .fullOutput
|
|
12
|
+
* - 断言 ← VariantResult.assertions.details (已经有 passed/failed)
|
|
13
|
+
*
|
|
14
|
+
* 旧 report 缺 sampleSnapshots 时降级显示("无设计快照,只有执行结果")。
|
|
15
|
+
*/
|
|
16
|
+
import type { EvaluationReport, SampleSnapshot, VariantResult, Lang } from '../types/index.js';
|
|
17
|
+
import type { Assertion } from '../types/eval.js';
|
|
18
|
+
import type { ToolCallInfo, TurnInfo } from '../types/executor.js';
|
|
19
|
+
import type { AssertionDetail } from '../types/judge.js';
|
|
20
|
+
/** Tool call 的稳定签名,用于在 turns 里反查 turn 序号。 */
|
|
21
|
+
export declare function toolCallSignature(tc: ToolCallInfo): string;
|
|
22
|
+
/** 走 turns 数组,给每个 tool call 标一个 turn 编号(1-based)。导出供单测验证。 */
|
|
23
|
+
export declare function indexToolCallsByTurn(turns: TurnInfo[] | undefined): Map<string, number>;
|
|
24
|
+
/** 字符串解析:`tool_input_contains` / `tool_output_contains` 用 `Tool:substring` 格式。 */
|
|
25
|
+
export declare function parseToolColonValue(value: string): {
|
|
26
|
+
tool: string;
|
|
27
|
+
needle: string;
|
|
28
|
+
};
|
|
29
|
+
/** 把单条 assertion 绑定到某一步。匹配不到返回 null(contains/regex 等作用于 fullOutput
|
|
30
|
+
* 的天然没有 turn 绑定)。导出供单测。
|
|
31
|
+
*
|
|
32
|
+
* 局限:mock_hit 的 turn 绑定靠"该 tool 的第 N 次调用 = 第 N 个 mock"启发式,
|
|
33
|
+
* 和真实 mock matcher(按 match 规则)可能不一致——状态机 mock 场景下 turn 标签可能近似。
|
|
34
|
+
* pass/fail 仍以 AssertionDetail.passed 为准。 */
|
|
35
|
+
export declare function findAssertionTurn(assertion: Assertion, detail: AssertionDetail, toolCalls: ToolCallInfo[], turnByCallSig: Map<string, number>): {
|
|
36
|
+
turn: number | null;
|
|
37
|
+
matchedCall?: ToolCallInfo;
|
|
38
|
+
};
|
|
39
|
+
/** 用例的整体 verdict:全部 assertion 通过 → pass;任一失败 → fail;无 assertion → 视为 pass(谨慎)。 */
|
|
40
|
+
export declare function sampleVerdict(details: AssertionDetail[] | undefined): 'pass' | 'fail';
|
|
41
|
+
/**
|
|
42
|
+
* 判断 sample 是否是"诱错样本(tripwire)"——视觉上要跟普通 fail 区分开。
|
|
43
|
+
*
|
|
44
|
+
* 识别来源(任一即算):
|
|
45
|
+
* 1. snapshot.tripwire === true(generator/作者显式标记)
|
|
46
|
+
* 2. diagnostic.rootCause 包含 'tripwire_intentional'(LLM 诊断时自己识破的)
|
|
47
|
+
*
|
|
48
|
+
* 用途:UI 把诱错样本的失败渲染成紫色 "🪤 诱错触发" 而非红色 "✗ FAIL",
|
|
49
|
+
* 避免使用者误以为是要修的真 bug。
|
|
50
|
+
*/
|
|
51
|
+
export declare function isTripwireSample(snapshot: SampleSnapshot | undefined, variant: VariantResult): boolean;
|
|
52
|
+
export declare function renderTestView(report: EvaluationReport, lang: Lang): string;
|
|
53
|
+
/** 单测视角的 CSS。
|
|
54
|
+
*
|
|
55
|
+
* 设计原则:
|
|
56
|
+
* - **scoped 浅色岛**:外层 layout 是深色主题(评分 tab 用),test view 在 .tv-root
|
|
57
|
+
* 里覆盖一套浅色变量,实现"切到单测 tab = 切到杂志阅读模式"。
|
|
58
|
+
* - **潘通启发的哑色调**:sage/dusty rose/mauve(饱和度 ~50%),不像 GitHub error log。
|
|
59
|
+
* - **大字号 + 高行高**:正文 15px / 行高 1.75,代码 13px。中文优先 PingFang/YaHei。
|
|
60
|
+
* - **subtle shadow 替代 border**:卡片间 16-24px 留白,box-shadow 浮起感。
|
|
61
|
+
* - **default-collapsed**:通过的用例只显一行;失败/诱错展开诊断,其余 section 折叠。
|
|
62
|
+
*/
|
|
63
|
+
export declare const TEST_VIEW_CSS = "\n/* tv-root: \u6D45\u8272\u5C9B,scoped \u8986\u76D6\u5916\u5C42\u6DF1\u8272 layout */\n.tv-root {\n --tv-bg:#fbfaf7; --tv-bg-card:#ffffff; --tv-bg-soft:rgba(58,58,58,.025);\n --tv-text:#3a3a3a; --tv-text-2:#7a7a7a; --tv-text-3:#a8a8a8;\n --tv-divider:#e8e3da;\n /* \u52A0\u5927 pass / fail / tripwire \u7684\u8272\u76F8\u8DDD\u79BB + \u6697\u5EA6\u5DEE,\u907F\u514D\u8FDC\u770B\u96F7\u540C\u3002\n pass: \u9F20\u5C3E\u8349\u7EFF(\u6697\u4E00\u6863,\u9760\u8FD1\u6797\u5730);fail: \u7816\u7EA2\u571F\u9676(\u6697\u4E00\u6863,\u8FDC\u79BB pink);tripwire: \u7D2B\u7F57\u5170(\u72EC\u7ACB\u8272\u76F8)\u3002 */\n --tv-pass:#5e8252; --tv-fail:#9c4a3f; --tv-tripwire:#7a6b89;\n --tv-pass-soft:rgba(94,130,82,.10); --tv-fail-soft:rgba(156,74,63,.10); --tv-tripwire-soft:rgba(122,107,137,.10);\n --tv-accent:#5a7a93; --tv-warn:#b08030;\n --tv-shadow:0 1px 3px rgba(58,58,58,.06);\n --tv-shadow-hover:0 2px 8px rgba(58,58,58,.10);\n background:var(--tv-bg); color:var(--tv-text);\n padding:32px 0; margin:-16px 0 0; border-radius:6px;\n font-family:-apple-system,BlinkMacSystemFont,\"PingFang SC\",\"Microsoft YaHei\",\"Segoe UI\",sans-serif;\n font-size:15px; line-height:1.75;\n}\n/* Variant tabs \u2014 \u663E\u5F0F reset \u6D4F\u89C8\u5668\u9ED8\u8BA4 button \u6837\u5F0F(border-radius / outline / appearance)\n \u9632\u6B62 layout \u90A3\u8FB9\u7684\u5168\u5C40 button \u89C4\u5219\u7ED9\u5E95\u90E8\u52A0\u4E86\u5947\u602A\u5706\u89D2\u548C\u6DF1\u8272\u80CC\u666F\u3002 */\n.tv-root .tv-variant-tabs { display:flex;gap:0;margin:0 0 24px;border-bottom:1px solid var(--tv-divider) }\n.tv-root .tv-vtab { padding:12px 20px;background:transparent;border:none;border-radius:0;cursor:pointer;color:var(--tv-text-2);border-bottom:2px solid transparent;font-size:14px;font-family:inherit;font-weight:500;outline:none;appearance:none;-webkit-appearance:none;margin-bottom:-1px }\n.tv-root .tv-vtab:hover { color:var(--tv-text) }\n.tv-root .tv-vtab--active { color:var(--tv-text);border-bottom-color:var(--tv-accent);font-weight:600 }\n.tv-root .tv-vtab:focus-visible { outline:2px solid var(--tv-accent);outline-offset:-4px;border-radius:4px }\n/* tv-variant-panel: \u4E0D\u6253\u6A2A\u5411 padding,\u5185\u5BB9\u76F4\u63A5\u5BF9\u9F50 .tv-root \u8FB9\u754C,\u8DDF\u5916\u5C42 omk-view-panel \u7684 h1/subtitle \u540C\u57FA\u7EBF\u3002 */\n/* Stats \u2014 \u66F4\u6241\u5E73\u7684\u6570\u5B57+\u6807\u7B7E\u5E03\u5C40 */\n.tv-root .tv-variant-stats { display:flex;gap:32px;margin:0 0 24px;font-size:14px;color:var(--tv-text-2);align-items:baseline }\n.tv-root .tv-stat { display:flex;align-items:baseline;gap:6px }\n.tv-root .tv-stat-num { color:var(--tv-text);font-weight:600;font-size:18px;font-variant-numeric:tabular-nums }\n.tv-root .tv-stat--pass .tv-stat-num { color:var(--tv-pass) }\n.tv-root .tv-stat--fail .tv-stat-num { color:var(--tv-fail) }\n.tv-root .tv-stat--tripwire .tv-stat-num { color:var(--tv-tripwire) }\n/* Group separator */\n.tv-root .tv-group-sep { display:flex;align-items:center;gap:14px;margin:32px 0 16px;color:var(--tv-text-3);font-size:12px;text-transform:uppercase;letter-spacing:0.08em;font-weight:500 }\n.tv-root .tv-group-sep::after { content:'';flex:1;height:1px;background:var(--tv-divider) }\n/* Pass rows \u2014 one-line list,\u5DE6\u8FB9\u4E00\u9053\u6DE1 sage \u8272\u6761\u505A\"\u901A\u8FC7\"\u6697\u793A */\n.tv-root .tv-rows { display:flex;flex-direction:column;gap:6px;margin:0 }\n.tv-root .tv-row { background:var(--tv-bg-card);border-radius:6px;box-shadow:var(--tv-shadow);transition:box-shadow .15s;border-left:3px solid var(--tv-pass) }\n.tv-root .tv-row:hover { box-shadow:var(--tv-shadow-hover) }\n.tv-root .tv-row[open] { box-shadow:var(--tv-shadow-hover) }\n.tv-root .tv-row-h { display:flex;align-items:center;gap:14px;padding:14px 20px;cursor:pointer;list-style:none;font-size:15px }\n.tv-root .tv-row-h::-webkit-details-marker { display:none }\n.tv-root .tv-row-h::after { content:'\u203A';margin-left:8px;color:var(--tv-text-3);font-size:18px;transition:transform .15s }\n.tv-root .tv-row[open] .tv-row-h::after { transform:rotate(90deg) }\n/* Cards (fail / tripwire) \u2014 \u9ED8\u8BA4\u6298\u53E0,\u8DDF pass row \u4E00\u81F4;\u5934\u90E8\u4E0B\u9762\u52A0\u4E00\u884C preview \u8BA9\u6298\u53E0\u6001\u4E5F\u6709\u4FE1\u606F\u5BC6\u5EA6 */\n.tv-root .tv-card { background:var(--tv-bg-card);border-radius:8px;box-shadow:var(--tv-shadow);margin:0 0 12px;transition:box-shadow .15s }\n.tv-root .tv-card:hover { box-shadow:var(--tv-shadow-hover) }\n.tv-root .tv-card--fail { border-left:3px solid var(--tv-fail) }\n.tv-root .tv-card--tripwire { border-left:3px solid var(--tv-tripwire) }\n.tv-root .tv-card-h { display:flex;align-items:center;gap:14px;padding:16px 22px;cursor:pointer;list-style:none;font-size:15px }\n.tv-root .tv-card-h::-webkit-details-marker { display:none }\n.tv-root .tv-card-h::after { content:'\u203A';margin-left:8px;color:var(--tv-text-3);font-size:18px;transition:transform .15s }\n.tv-root .tv-card[open] .tv-card-h::after { transform:rotate(90deg) }\n.tv-root .tv-card[open] .tv-card-h { border-bottom:1px solid var(--tv-divider) }\n.tv-root .tv-card-preview { padding:0 22px 14px;color:var(--tv-text-2);font-size:14px;line-height:1.7;border-bottom:1px solid var(--tv-divider) }\n.tv-root .tv-card[open] .tv-card-preview { display:none }\n/* Status dots \u2014 \u7528\u5F62\u72B6 + \u8272 + \u5B57\u7B26\u7684\u4E09\u91CD\u533A\u5206,\u907F\u514D\u8272\u76F2 / \u8FDC\u770B\u96F7\u540C\u3002\n pass: \u5B9E\u5FC3\u5706 sage;fail: \u7EA2 \u2717 \u5B57\u7B26(\u66F4\u663E\u773C);tripwire: \u7D2B\u8272 \u25C6 \u83F1\u5F62\u3002 */\n.tv-root .tv-dot { display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0;font-size:14px;font-weight:700;line-height:1 }\n.tv-root .tv-dot--pass::before { content:'';width:10px;height:10px;border-radius:50%;background:var(--tv-pass);box-shadow:0 0 0 3px var(--tv-pass-soft) }\n.tv-root .tv-dot--fail::before { content:'\u2717';color:var(--tv-fail);font-size:16px;font-weight:700 }\n.tv-root .tv-dot--tripwire::before { content:'\u25C6';color:var(--tv-tripwire);font-size:13px }\n.tv-root .tv-id { font-family:\"SF Mono\",\"JetBrains Mono\",Menlo,Consolas,monospace;font-size:13px;color:var(--tv-text-3) }\n.tv-root .tv-title { flex:1;font-size:15px;color:var(--tv-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap }\n.tv-root .tv-meta { font-size:13px;color:var(--tv-text-3);font-variant-numeric:tabular-nums;font-family:\"SF Mono\",\"JetBrains Mono\",Menlo,monospace }\n/* Body padding */\n.tv-root .tv-card-body, .tv-root .tv-row-body { padding:22px }\n/* Tripwire banner \u2014 \u5361\u7247\u9876\u90E8\u7684\u7D2B\u8272\u89E3\u91CA\u5E26 */\n.tv-root .tv-tripwire-banner { margin:-22px -22px 20px;padding:18px 22px;background:rgba(139,124,147,.08);border-radius:8px 8px 0 0;border-bottom:1px solid var(--tv-divider) }\n.tv-root .tv-tripwire-banner-title { font-size:14px;font-weight:600;color:var(--tv-tripwire);margin-bottom:6px;letter-spacing:0.02em }\n.tv-root .tv-tripwire-banner-body { font-size:14px;color:var(--tv-text-2);line-height:1.7 }\n/* Diagnosis \u2014 \u4E00\u6BB5\u767D\u8BDD + \u5355\u4E00\u84DD\u8272\u5EFA\u8BAE\u5757 + \u6298\u53E0\u7EC6\u8282 */\n.tv-root .tv-diag { margin:4px 0 16px }\n.tv-root .tv-diag-text { font-size:15px;line-height:1.75;color:var(--tv-text);margin:0 0 16px }\n.tv-root .tv-suggestion { background:rgba(90,122,147,.06);border-left:3px solid var(--tv-accent);padding:14px 18px;margin:12px 0;border-radius:0 4px 4px 0 }\n.tv-root .tv-suggestion-label { display:inline-block;color:var(--tv-accent);font-weight:600;font-size:13px;margin-right:8px;letter-spacing:0.02em }\n.tv-root .tv-suggestion-body { margin:6px 0 0;font-size:14.5px;line-height:1.7;color:var(--tv-text) }\n.tv-root .tv-diag-details { margin-top:14px }\n.tv-root .tv-diag-details > summary { cursor:pointer;font-size:13px;color:var(--tv-text-2);list-style:none }\n.tv-root .tv-diag-details > summary::-webkit-details-marker { display:none }\n.tv-root .tv-diag-details > summary::before { content:'\u25B8 ';color:var(--tv-text-3);display:inline-block;width:16px }\n.tv-root .tv-diag-details[open] > summary::before { content:'\u25BE ' }\n.tv-root .tv-diag-details-body { padding:10px 0 0 16px;font-size:14px;line-height:1.7;color:var(--tv-text-2) }\n.tv-root .tv-diag-details-body p { margin:6px 0 }\n.tv-root .tv-diag-details-body strong { color:var(--tv-text);margin-right:6px }\n/* RootCause inline pill */\n.tv-root .tv-diag-rc-pill { font-size:11px;padding:2px 8px;border-radius:10px;background:var(--tv-bg-soft);color:var(--tv-text-2);margin-right:6px;display:inline-block }\n.tv-root .tv-diag-rc--tripwire_intentional { background:rgba(139,124,147,.12);color:var(--tv-tripwire) }\n.tv-root .tv-diag-rc--sample_design { background:rgba(90,122,147,.10);color:var(--tv-accent) }\n.tv-root .tv-diag-rc--skill_doc_unclear, .tv-diag-rc--skill_doc_missing, .tv-root .tv-diag-rc--llm_misread { background:rgba(176,128,48,.10);color:var(--tv-warn) }\n/* Failure-mode chips \u2014 \u4E2D\u6587\u6807\u7B7E,\u663E\u8457\u5C55\u793A\u5728 summary \u4E0B */\n.tv-root .tv-diag-modes { display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 14px }\n.tv-root .tv-diag-modes-label { font-size:12px;color:var(--tv-text-2);margin-right:4px }\n.tv-root .tv-diag-mode-pill { font-size:12px;padding:3px 10px;border-radius:11px;background:var(--tv-bg-soft);color:var(--tv-text);font-weight:500 }\n.tv-root .tv-diag-mode--workflow-skip { background:rgba(176,128,48,.12);color:var(--tv-warn) }\n.tv-root .tv-diag-mode--hardcoded { background:rgba(176,128,48,.12);color:var(--tv-warn) }\n.tv-root .tv-diag-mode--hallucination { background:rgba(180,75,75,.14);color:#b44b4b }\n.tv-root .tv-diag-mode--tool-misuse { background:rgba(176,128,48,.12);color:var(--tv-warn) }\n.tv-root .tv-diag-mode--env-blocked { background:rgba(90,122,147,.12);color:var(--tv-accent) }\n.tv-root .tv-diag-mode--misread { background:rgba(176,128,48,.12);color:var(--tv-warn) }\n.tv-root .tv-diag-mode--other { background:var(--tv-bg-soft);color:var(--tv-text-2) }\n/* Workflow checklist \u2014 \u9ED8\u8BA4\u5C55\u5F00,\u653E\u5728 suggestion \u4E4B\u4E0A,\u76F4\u89C2\u5C55\u793A LLM \u8D70\u5BF9\u54EA\u51E0\u6B65 */\n.tv-root .tv-diag-workflow { margin:14px 0;padding:12px 14px;background:var(--tv-bg-soft);border-radius:6px }\n.tv-root .tv-diag-workflow-title { font-size:13px;font-weight:600;color:var(--tv-text);margin:0 0 10px;letter-spacing:0.02em }\n.tv-root .tv-diag-workflow-list { list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px }\n.tv-root .tv-diag-workflow-item { display:flex;align-items:flex-start;gap:10px;line-height:1.6 }\n.tv-root .tv-diag-workflow-icon { flex-shrink:0;font-weight:700;font-size:14px;width:16px;text-align:center;margin-top:2px }\n.tv-root .tv-diag-workflow-item--pass .tv-diag-workflow-icon { color:#3a8a3a }\n.tv-root .tv-diag-workflow-item--fail .tv-diag-workflow-icon { color:#b44b4b }\n.tv-root .tv-diag-workflow-body { display:flex;flex-direction:column;gap:2px;flex:1 }\n.tv-root .tv-diag-workflow-step { font-size:14px;color:var(--tv-text) }\n.tv-root .tv-diag-workflow-evidence { font-size:12.5px;color:var(--tv-text-2);line-height:1.55 }\n.tv-root .tv-diag-workflow-item--fail .tv-diag-workflow-step { color:#b44b4b }\n/* Partial salvage \u63D0\u793A */\n.tv-root .tv-diag-partial { font-size:12px;color:var(--tv-text-3);margin:0 0 8px;font-style:italic }\n/* Sub-sections \u2014 design / trace / assertions, \u5168\u90E8\u9ED8\u8BA4\u6298\u53E0 */\n.tv-root .tv-section { margin-top:6px;border-top:1px solid var(--tv-divider);padding-top:14px }\n.tv-root .tv-section > summary { cursor:pointer;font-size:14px;font-weight:500;color:var(--tv-text);padding:6px 0;list-style:none }\n.tv-root .tv-section > summary::-webkit-details-marker { display:none }\n.tv-root .tv-section > summary::before { content:'\u25B8 ';color:var(--tv-text-3);display:inline-block;width:16px;font-weight:400 }\n.tv-root .tv-section[open] > summary::before { content:'\u25BE ' }\n.tv-root .tv-section-stat { font-weight:400;color:var(--tv-text-3);margin-left:6px;font-size:13px }\n.tv-root .tv-section-body { padding:14px 0 0 16px;font-size:14.5px;line-height:1.7 }\n/* Design fields */\n.tv-root .tv-prompt, .tv-root .tv-rubric { font-size:14.5px;line-height:1.75;margin:8px 0;color:var(--tv-text-2) }\n.tv-root .tv-prompt strong, .tv-root .tv-rubric strong { color:var(--tv-text);margin-right:6px;font-weight:600 }\n.tv-root .tv-meta-pills { margin:10px 0;display:flex;flex-wrap:wrap;gap:8px }\n.tv-root .tv-meta-pill { font-size:12px;padding:3px 10px;background:var(--tv-bg-soft);border-radius:10px;color:var(--tv-text-2);font-family:\"SF Mono\",Menlo,monospace }\n.tv-root .tv-expected { margin-top:12px }\n.tv-root .tv-expected-h { font-size:13px;color:var(--tv-text-2);margin-bottom:6px }\n.tv-root .tv-expect-line { font-size:13px;font-family:\"SF Mono\",Menlo,monospace;color:var(--tv-text-2);padding:3px 0;line-height:1.6 }\n.tv-root .tv-collapsible { margin-top:10px;font-size:13px }\n.tv-root .tv-collapsible > summary { cursor:pointer;color:var(--tv-text-2) }\n/* Mocks */\n.tv-root .tv-mocks { margin-top:8px }\n.tv-root .tv-mock-line { font-size:12px;font-family:\"SF Mono\",Menlo,monospace;padding:3px 0;display:flex;flex-wrap:wrap;gap:6px;align-items:center;line-height:1.6 }\n.tv-root .tv-mock-idx { color:var(--tv-text-3);font-weight:600 }\n.tv-root .tv-mock-tool { background:var(--tv-bg-soft);padding:2px 6px;border-radius:3px }\n.tv-root .tv-mock-match, .tv-root .tv-mock-return { color:var(--tv-text-2);overflow:hidden;text-overflow:ellipsis;max-width:340px;white-space:nowrap }\n.tv-root .tv-mock-arrow { color:var(--tv-text-3) }\n/* Trace turns */\n.tv-root .tv-turn { margin:10px 0;padding:12px 16px;background:var(--tv-bg-soft);border-radius:4px;border-left:2px solid var(--tv-divider) }\n.tv-root .tv-turn-h { font-size:14px;font-weight:500;color:var(--tv-text);margin-bottom:6px }\n.tv-root .tv-turn-dur { color:var(--tv-text-3);font-weight:400;font-size:12px;margin-left:6px }\n.tv-root .tv-thinking { margin:6px 0;font-size:13px }\n.tv-root .tv-thinking summary { cursor:pointer;color:var(--tv-text-3);font-style:italic }\n.tv-root .tv-thinking-body { padding:10px 14px;background:rgba(58,58,58,.04);border-radius:4px;color:var(--tv-text-2);white-space:pre-wrap;font-size:13px;line-height:1.7;margin-top:6px }\n/* Tool calls */\n.tv-root .tv-call { margin:6px 0;padding:10px 14px;background:rgba(58,58,58,.03);border-radius:4px;font-size:13px }\n.tv-root .tv-call--err { border-left:2px solid var(--tv-fail) }\n.tv-root .tv-call-h { font-weight:500;color:var(--tv-text);margin-bottom:4px;font-size:14px }\n.tv-root .tv-call details { margin:4px 0;font-size:12px }\n.tv-root .tv-call summary { cursor:pointer;color:var(--tv-text-3);padding:2px 0 }\n.tv-root .tv-pre { font-family:\"SF Mono\",\"JetBrains Mono\",Menlo,Consolas,monospace;font-size:13px;background:rgba(58,58,58,.04);padding:10px 14px;border-radius:4px;overflow:auto;max-height:320px;white-space:pre-wrap;margin:4px 0;color:var(--tv-text-2);line-height:1.55 }\n.tv-root .tv-mock-badge { font-size:12px;color:var(--tv-pass);background:rgba(125,155,118,.12);padding:2px 8px;border-radius:10px;margin-left:8px }\n.tv-root .tv-trace-assert { font-size:13px;font-family:\"SF Mono\",Menlo,monospace;padding:3px 0;margin-top:6px;line-height:1.5 }\n.tv-root .tv-trace-assert.tv-assert--fail { color:var(--tv-fail) }\n.tv-root .tv-trace-assert.tv-assert--pass { color:var(--tv-text-2) }\n/* Final answer */\n.tv-root .tv-final { margin-top:14px }\n.tv-root .tv-final-h { font-size:14px;font-weight:500;color:var(--tv-text);margin-bottom:6px }\n/* Assertions */\n.tv-root .tv-assert { font-size:14px;font-family:\"SF Mono\",Menlo,monospace;padding:5px 0;line-height:1.6 }\n.tv-root .tv-assert--pass { color:var(--tv-text-2) }\n.tv-root .tv-assert--fail { color:var(--tv-fail) }\n.tv-root .tv-assert-value { background:rgba(58,58,58,.04);padding:2px 6px;border-radius:3px;margin:0 2px }\n.tv-root .tv-turn-tag { font-size:12px;color:var(--tv-text-3);margin-left:8px;font-style:italic;font-family:-apple-system,sans-serif }\n.tv-root .tv-turn-tag--ok { color:var(--tv-pass) }\n.tv-root .tv-turn-tag--miss { color:var(--tv-fail) }\n.tv-root .tv-assert-msg { font-size:13px;color:var(--tv-text-3);margin-left:20px;margin-top:3px }\n/* Empty/warn states */\n.tv-root .tv-empty, .tv-root .tv-empty-page { color:var(--tv-text-3);font-style:italic;padding:14px 0;font-size:14px }\n.tv-root .tv-warn { color:var(--tv-warn);background:rgba(176,128,48,.08);padding:14px 18px;border-radius:4px;margin:8px 24px;font-size:14px;line-height:1.7 }\n";
|
|
64
|
+
/** 单测视角配套 JS:variant 切换 + view tab 切换。挂在 layout 末尾。 */
|
|
65
|
+
export declare const TEST_VIEW_JS = "\nfunction omkSwitchVariant(btn) {\n var target = btn.getAttribute('data-target');\n var tabs = btn.parentElement.querySelectorAll('.tv-vtab');\n tabs.forEach(function(t){ t.classList.toggle('tv-vtab--active', t === btn); });\n var panels = btn.parentElement.parentElement.querySelectorAll('.tv-variant-panel');\n panels.forEach(function(p){ p.hidden = (p.getAttribute('data-variant') !== target); });\n}\nfunction omkSwitchView(name) {\n var tabs = document.querySelectorAll('.omk-view-tab');\n tabs.forEach(function(t){ t.classList.toggle('omk-view-tab--active', t.getAttribute('data-view') === name); });\n var panels = document.querySelectorAll('.omk-view-panel');\n panels.forEach(function(p){ p.hidden = (p.getAttribute('data-view') !== name); });\n}\n";
|
|
66
|
+
//# sourceMappingURL=test-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-view.d.ts","sourceRoot":"","sources":["../../../src/renderer/test-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOzD,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvF;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAInF;AAED;;;;;8CAK8C;AAC9C,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,YAAY,EAAE,EACzB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,YAAY,CAAA;CAAE,CA4CrD;AAMD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAGrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAItG;AAwgBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAgE3E;AAiCD;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,44gBA8KzB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,owBAcxB,CAAC"}
|