oh-my-knowledge 0.0.1 → 0.18.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/LICENSE +21 -0
- package/README.md +537 -332
- package/dist/src/analysis/coverage-analyzer.d.ts +57 -0
- package/dist/src/analysis/coverage-analyzer.d.ts.map +1 -0
- package/dist/src/analysis/coverage-analyzer.js +262 -0
- package/dist/src/analysis/coverage-analyzer.js.map +1 -0
- package/dist/src/analysis/gap-analyzer.d.ts +114 -0
- package/dist/src/analysis/gap-analyzer.d.ts.map +1 -0
- package/dist/src/analysis/gap-analyzer.js +439 -0
- package/dist/src/analysis/gap-analyzer.js.map +1 -0
- package/dist/src/analysis/hedging-classifier.d.ts +34 -0
- package/dist/src/analysis/hedging-classifier.d.ts.map +1 -0
- package/dist/src/analysis/hedging-classifier.js +144 -0
- package/dist/src/analysis/hedging-classifier.js.map +1 -0
- package/dist/src/analysis/report-diagnostics.d.ts +9 -0
- package/dist/src/analysis/report-diagnostics.d.ts.map +1 -0
- package/dist/src/analysis/report-diagnostics.js +631 -0
- package/dist/src/analysis/report-diagnostics.js.map +1 -0
- package/dist/src/authoring/evolver.d.ts +64 -0
- package/dist/src/authoring/evolver.d.ts.map +1 -0
- package/dist/src/authoring/evolver.js +275 -0
- package/dist/src/authoring/evolver.js.map +1 -0
- package/dist/src/authoring/generator.d.ts +13 -0
- package/dist/src/authoring/generator.d.ts.map +1 -0
- package/dist/src/authoring/generator.js +60 -0
- package/dist/src/authoring/generator.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +1004 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/eval-core/cache.d.ts +11 -0
- package/dist/src/eval-core/cache.d.ts.map +1 -0
- package/dist/src/eval-core/cache.js +53 -0
- package/dist/src/eval-core/cache.js.map +1 -0
- package/dist/src/eval-core/ci-gates.d.ts +17 -0
- package/dist/src/eval-core/ci-gates.d.ts.map +1 -0
- package/dist/src/eval-core/ci-gates.js +42 -0
- package/dist/src/eval-core/ci-gates.js.map +1 -0
- package/dist/src/eval-core/dependency-checker.d.ts +37 -0
- package/dist/src/eval-core/dependency-checker.d.ts.map +1 -0
- package/dist/src/eval-core/dependency-checker.js +280 -0
- package/dist/src/eval-core/dependency-checker.js.map +1 -0
- package/dist/src/eval-core/evaluation-execution.d.ts +26 -0
- package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-execution.js +196 -0
- package/dist/src/eval-core/evaluation-execution.js.map +1 -0
- package/dist/src/eval-core/evaluation-job.d.ts +48 -0
- package/dist/src/eval-core/evaluation-job.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-job.js +112 -0
- package/dist/src/eval-core/evaluation-job.js.map +1 -0
- package/dist/src/eval-core/evaluation-reporting.d.ts +28 -0
- package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -0
- package/dist/src/eval-core/evaluation-reporting.js +123 -0
- package/dist/src/eval-core/evaluation-reporting.js.map +1 -0
- package/dist/src/eval-core/execution-strategy.d.ts +11 -0
- package/dist/src/eval-core/execution-strategy.d.ts.map +1 -0
- package/dist/src/eval-core/execution-strategy.js +121 -0
- package/dist/src/eval-core/execution-strategy.js.map +1 -0
- package/dist/src/eval-core/fact-checker.d.ts +25 -0
- package/dist/src/eval-core/fact-checker.d.ts.map +1 -0
- package/dist/src/eval-core/fact-checker.js +66 -0
- package/dist/src/eval-core/fact-checker.js.map +1 -0
- package/dist/src/eval-core/schema.d.ts +30 -0
- package/dist/src/eval-core/schema.d.ts.map +1 -0
- package/dist/src/eval-core/schema.js +195 -0
- package/dist/src/eval-core/schema.js.map +1 -0
- package/dist/src/eval-core/statistics.d.ts +86 -0
- package/dist/src/eval-core/statistics.d.ts.map +1 -0
- package/dist/src/eval-core/statistics.js +210 -0
- package/dist/src/eval-core/statistics.js.map +1 -0
- package/dist/src/eval-core/task-planner.d.ts +4 -0
- package/dist/src/eval-core/task-planner.d.ts.map +1 -0
- package/dist/src/eval-core/task-planner.js +33 -0
- package/dist/src/eval-core/task-planner.js.map +1 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +133 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +1 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.js +169 -0
- package/dist/src/eval-workflows/each-evaluation-workflow.js.map +1 -0
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +38 -0
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -0
- package/dist/src/eval-workflows/evaluation-pipeline.js +214 -0
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -0
- package/dist/src/eval-workflows/evaluation-preparation.d.ts +64 -0
- package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -0
- package/dist/src/eval-workflows/evaluation-preparation.js +90 -0
- package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -0
- package/dist/src/eval-workflows/run-evaluation.d.ts +105 -0
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -0
- package/dist/src/eval-workflows/run-evaluation.js +264 -0
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -0
- package/dist/src/executors/anthropic-api.d.ts +3 -0
- package/dist/src/executors/anthropic-api.d.ts.map +1 -0
- package/dist/src/executors/anthropic-api.js +43 -0
- package/dist/src/executors/anthropic-api.js.map +1 -0
- package/dist/src/executors/claude-cli.d.ts +3 -0
- package/dist/src/executors/claude-cli.d.ts.map +1 -0
- package/dist/src/executors/claude-cli.js +103 -0
- package/dist/src/executors/claude-cli.js.map +1 -0
- package/dist/src/executors/claude-sdk-trace.d.ts +10 -0
- package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -0
- package/dist/src/executors/claude-sdk-trace.js +100 -0
- package/dist/src/executors/claude-sdk-trace.js.map +1 -0
- package/dist/src/executors/claude-sdk.d.ts +3 -0
- package/dist/src/executors/claude-sdk.d.ts.map +1 -0
- package/dist/src/executors/claude-sdk.js +160 -0
- package/dist/src/executors/claude-sdk.js.map +1 -0
- package/dist/src/executors/gemini.d.ts +3 -0
- package/dist/src/executors/gemini.d.ts.map +1 -0
- package/dist/src/executors/gemini.js +78 -0
- package/dist/src/executors/gemini.js.map +1 -0
- package/dist/src/executors/index.d.ts +7 -0
- package/dist/src/executors/index.d.ts.map +1 -0
- package/dist/src/executors/index.js +22 -0
- package/dist/src/executors/index.js.map +1 -0
- package/dist/src/executors/openai-api.d.ts +3 -0
- package/dist/src/executors/openai-api.d.ts.map +1 -0
- package/dist/src/executors/openai-api.js +40 -0
- package/dist/src/executors/openai-api.js.map +1 -0
- package/dist/src/executors/openai-cli.d.ts +3 -0
- package/dist/src/executors/openai-cli.d.ts.map +1 -0
- package/dist/src/executors/openai-cli.js +60 -0
- package/dist/src/executors/openai-cli.js.map +1 -0
- package/dist/src/executors/script.d.ts +3 -0
- package/dist/src/executors/script.d.ts.map +1 -0
- package/dist/src/executors/script.js +63 -0
- package/dist/src/executors/script.js.map +1 -0
- package/dist/src/executors/shared.d.ts +117 -0
- package/dist/src/executors/shared.d.ts.map +1 -0
- package/dist/src/executors/shared.js +49 -0
- package/dist/src/executors/shared.js.map +1 -0
- package/dist/src/grading/assertions.d.ts +18 -0
- package/dist/src/grading/assertions.d.ts.map +1 -0
- package/dist/src/grading/assertions.js +239 -0
- package/dist/src/grading/assertions.js.map +1 -0
- package/dist/src/grading/index.d.ts +26 -0
- package/dist/src/grading/index.d.ts.map +1 -0
- package/dist/src/grading/index.js +98 -0
- package/dist/src/grading/index.js.map +1 -0
- package/dist/src/grading/judge.d.ts +13 -0
- package/dist/src/grading/judge.d.ts.map +1 -0
- package/dist/src/grading/judge.js +98 -0
- package/dist/src/grading/judge.js.map +1 -0
- package/dist/src/grading/layered-scores.d.ts +13 -0
- package/dist/src/grading/layered-scores.d.ts.map +1 -0
- package/dist/src/grading/layered-scores.js +62 -0
- package/dist/src/grading/layered-scores.js.map +1 -0
- package/dist/src/inputs/eval-config.d.ts +13 -0
- package/dist/src/inputs/eval-config.d.ts.map +1 -0
- package/dist/src/inputs/eval-config.js +136 -0
- package/dist/src/inputs/eval-config.js.map +1 -0
- package/dist/src/inputs/load-samples.d.ts +16 -0
- package/dist/src/inputs/load-samples.d.ts.map +1 -0
- package/dist/src/inputs/load-samples.js +51 -0
- package/dist/src/inputs/load-samples.js.map +1 -0
- package/dist/src/inputs/mcp-resolver.d.ts +50 -0
- package/dist/src/inputs/mcp-resolver.d.ts.map +1 -0
- package/dist/src/inputs/mcp-resolver.js +307 -0
- package/dist/src/inputs/mcp-resolver.js.map +1 -0
- package/dist/src/inputs/skill-loader.d.ts +18 -0
- package/dist/src/inputs/skill-loader.d.ts.map +1 -0
- package/dist/src/inputs/skill-loader.js +222 -0
- package/dist/src/inputs/skill-loader.js.map +1 -0
- package/dist/src/inputs/url-fetcher.d.ts +19 -0
- package/dist/src/inputs/url-fetcher.d.ts.map +1 -0
- package/dist/src/inputs/url-fetcher.js +241 -0
- package/dist/src/inputs/url-fetcher.js.map +1 -0
- package/dist/src/observability/production-analyzer.d.ts +61 -0
- package/dist/src/observability/production-analyzer.d.ts.map +1 -0
- package/dist/src/observability/production-analyzer.js +183 -0
- package/dist/src/observability/production-analyzer.js.map +1 -0
- package/dist/src/observability/trace-adapter.d.ts +75 -0
- package/dist/src/observability/trace-adapter.d.ts.map +1 -0
- package/dist/src/observability/trace-adapter.js +341 -0
- package/dist/src/observability/trace-adapter.js.map +1 -0
- package/dist/src/renderer/html-renderer.d.ts +9 -0
- package/dist/src/renderer/html-renderer.d.ts.map +1 -0
- package/dist/src/renderer/html-renderer.js +338 -0
- package/dist/src/renderer/html-renderer.js.map +1 -0
- package/dist/src/renderer/layout.d.ts +13 -0
- package/dist/src/renderer/layout.d.ts.map +1 -0
- package/dist/src/renderer/layout.js +476 -0
- package/dist/src/renderer/layout.js.map +1 -0
- package/dist/src/renderer/skill-health-renderer.d.ts +20 -0
- package/dist/src/renderer/skill-health-renderer.d.ts.map +1 -0
- package/dist/src/renderer/skill-health-renderer.js +218 -0
- package/dist/src/renderer/skill-health-renderer.js.map +1 -0
- package/dist/src/renderer/summary.d.ts +21 -0
- package/dist/src/renderer/summary.d.ts.map +1 -0
- package/dist/src/renderer/summary.js +1072 -0
- package/dist/src/renderer/summary.js.map +1 -0
- package/dist/src/renderer/table.d.ts +3 -0
- package/dist/src/renderer/table.d.ts.map +1 -0
- package/dist/src/renderer/table.js +134 -0
- package/dist/src/renderer/table.js.map +1 -0
- package/dist/src/renderer/trends.d.ts +6 -0
- package/dist/src/renderer/trends.d.ts.map +1 -0
- package/dist/src/renderer/trends.js +127 -0
- package/dist/src/renderer/trends.js.map +1 -0
- package/dist/src/server/job-store.d.ts +4 -0
- package/dist/src/server/job-store.d.ts.map +1 -0
- package/dist/src/server/job-store.js +68 -0
- package/dist/src/server/job-store.js.map +1 -0
- package/dist/src/server/report-server.d.ts +16 -0
- package/dist/src/server/report-server.d.ts.map +1 -0
- package/dist/src/server/report-server.js +196 -0
- package/dist/src/server/report-server.js.map +1 -0
- package/dist/src/server/report-store.d.ts +44 -0
- package/dist/src/server/report-store.d.ts.map +1 -0
- package/dist/src/server/report-store.js +190 -0
- package/dist/src/server/report-store.js.map +1 -0
- package/dist/src/types.d.ts +553 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +44 -3
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML report renderer — orchestrates sub-modules.
|
|
3
|
+
*/
|
|
4
|
+
import { e, fmtCost, fmtDuration, COLORS, DEFAULT_LANG, t, layout } from './layout.js';
|
|
5
|
+
import { renderAgentOverview, renderAnalysis, renderKnowledgeInteractionSection, renderSummaryCards, renderVarianceComparisons, } from './summary.js';
|
|
6
|
+
import { renderSampleTable } from './table.js';
|
|
7
|
+
import { renderTrendsBody } from './trends.js';
|
|
8
|
+
export function renderRunList(runs, lang = DEFAULT_LANG) {
|
|
9
|
+
if (!runs || runs.length === 0) {
|
|
10
|
+
return layout(t('title', lang), `
|
|
11
|
+
<main>
|
|
12
|
+
<h1>${t('title', lang)}</h1>
|
|
13
|
+
<p class="subtitle">${t('subtitle', lang)}</p>
|
|
14
|
+
<p style="color:var(--text-muted);margin-top:40px">${t('noRuns', lang)}</p>
|
|
15
|
+
</main>
|
|
16
|
+
`, lang);
|
|
17
|
+
}
|
|
18
|
+
const rows = runs.map((run) => {
|
|
19
|
+
const m = run.meta;
|
|
20
|
+
const hasScores = Object.values(run.summary || {}).some((s) => typeof s.avgCompositeScore === 'number' || typeof s.avgLlmScore === 'number');
|
|
21
|
+
const scoreCol = hasScores
|
|
22
|
+
? Object.entries(run.summary || {}).map(([v, s]) => {
|
|
23
|
+
const score = s.avgCompositeScore ?? s.avgLlmScore ?? null;
|
|
24
|
+
if (score == null)
|
|
25
|
+
return `<span style="color:var(--text-muted)">${e(v)}: -</span>`;
|
|
26
|
+
const color = score >= 4 ? 'var(--green)' : score >= 3 ? 'var(--yellow)' : 'var(--red)';
|
|
27
|
+
const barW = Math.round((score / 5) * 100);
|
|
28
|
+
return `<div style="display:flex;align-items:center;gap:6px;margin:2px 0">` +
|
|
29
|
+
`<span title="${e(v)}" style="font-size:11px;color:var(--text-muted);width:56px;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0">${e(v)}</span>` +
|
|
30
|
+
`<div style="width:64px;height:6px;background:var(--bg-surface);border-radius:3px;flex-shrink:0">` +
|
|
31
|
+
`<div style="width:${barW}%;height:100%;background:${color};border-radius:3px"></div></div>` +
|
|
32
|
+
`<span style="font-size:12px;font-weight:600;color:${color};min-width:24px">${score}</span></div>`;
|
|
33
|
+
}).join('')
|
|
34
|
+
: '<div style="color:var(--text-faint);font-size:0.6875rem;text-align:center">no score</div>';
|
|
35
|
+
const badges = ''; // TODO: artifact kind 体系完善后,按 kind 显示评测类型标签
|
|
36
|
+
return `<tr>
|
|
37
|
+
<td><a href="/run/${e(run.id)}"><span style="color:var(--text-primary)">${e(run.id)}${badges}</span><br><span style="font-size:0.6875rem;color:var(--text-muted)">${(() => {
|
|
38
|
+
// Extract date/time from report ID: ...-YYYYMMDD-HHmm
|
|
39
|
+
const idMatch = run.id.match(/(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})$/);
|
|
40
|
+
if (idMatch)
|
|
41
|
+
return `${idMatch[2]}/${idMatch[3]} ${idMatch[4]}:${idMatch[5]}`;
|
|
42
|
+
return m.timestamp ? new Date(m.timestamp).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }) : e(run.id);
|
|
43
|
+
})()}</span></a></td>
|
|
44
|
+
<td>${e(m.model || '-')}</td>
|
|
45
|
+
<td>${m.sampleCount || 0}</td>
|
|
46
|
+
<td>${scoreCol}</td>
|
|
47
|
+
<td>${fmtCost(Object.values(run.summary || {}).reduce((s, v) => s + (v.totalExecCostUSD || 0), 0))}</td>
|
|
48
|
+
<td>${fmtDuration(Object.values(run.summary || {}).reduce((s, v) => s + (v.avgDurationMs || 0) * (v.successCount || 0), 0))}</td>
|
|
49
|
+
<td style="white-space:nowrap"><button onclick="deleteRun('${e(run.id)}',this)" class="btn-danger" data-i18n="deleteBtnText">${t('deleteBtnText', lang)}</button></td>
|
|
50
|
+
</tr>`;
|
|
51
|
+
}).join('');
|
|
52
|
+
const runCount = lang === 'zh' ? `${runs.length} 次评测` : `${runs.length} runs`;
|
|
53
|
+
const totalCost = runs.reduce((s, r) => s + Object.values(r.summary || {}).reduce((sv, v) => sv + (v.totalExecCostUSD || 0), 0), 0);
|
|
54
|
+
const costLabel = lang === 'zh' ? `累计 ${fmtCost(totalCost)}` : `Total ${fmtCost(totalCost)}`;
|
|
55
|
+
// Collect variants with ≥2 reports for trend links
|
|
56
|
+
const variantCounts = {};
|
|
57
|
+
for (const run of runs) {
|
|
58
|
+
for (const v of (run.meta?.variants || [])) {
|
|
59
|
+
if (v === 'baseline')
|
|
60
|
+
continue;
|
|
61
|
+
variantCounts[v] = (variantCounts[v] || 0) + 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const trendLinks = Object.entries(variantCounts)
|
|
65
|
+
.filter(([, count]) => count >= 2)
|
|
66
|
+
.map(([v]) => `<a href="/trends/${encodeURIComponent(v)}" style="display:inline-block;margin:4px 6px 4px 0;padding:3px 10px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius);color:var(--accent);text-decoration:none">${e(v)} (${variantCounts[v]})</a>`)
|
|
67
|
+
.join('');
|
|
68
|
+
const trendsSection = trendLinks ? `<div style="margin:12px 0"><span style="font-size:12px;color:var(--text-muted);margin-right:8px">${lang === 'zh' ? '📈 趋势:' : '📈 Trends:'}</span>${trendLinks}</div>` : '';
|
|
69
|
+
return layout(t('title', lang), `
|
|
70
|
+
<main>
|
|
71
|
+
<h1>${t('title', lang)}</h1>
|
|
72
|
+
<p class="subtitle" data-i18n="subtitle">${t('subtitle', lang)} · ${runCount} · ${costLabel}</p>
|
|
73
|
+
${trendsSection}
|
|
74
|
+
<div style="margin:12px 0;display:flex;gap:8px;align-items:center">
|
|
75
|
+
<input id="filter-input" type="text" placeholder="${lang === 'zh' ? '搜索报告名称、变体...' : 'Filter by name, variant...'}" style="flex:1;max-width:320px;padding:6px 10px;font-size:13px;background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius);outline:none" oninput="filterTable(this.value)">
|
|
76
|
+
<span id="filter-count" style="font-size:11px;color:var(--text-muted)"></span>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="table-wrap">
|
|
79
|
+
<table id="report-table">
|
|
80
|
+
<thead><tr>
|
|
81
|
+
<th data-i18n="runId">${t('runId', lang)}</th>
|
|
82
|
+
<th data-i18n="model">${t('model', lang)}</th>
|
|
83
|
+
<th data-i18n="samples">${t('samples', lang)}</th>
|
|
84
|
+
<th data-i18n="score">${t('score', lang)}</th>
|
|
85
|
+
<th data-i18n="cost">${t('cost', lang)}</th>
|
|
86
|
+
<th>${lang === 'zh' ? '耗时' : 'Duration'}</th>
|
|
87
|
+
<th></th>
|
|
88
|
+
</tr></thead>
|
|
89
|
+
<tbody>${rows}</tbody>
|
|
90
|
+
</table>
|
|
91
|
+
</div>
|
|
92
|
+
<script>
|
|
93
|
+
function filterTable(q) {
|
|
94
|
+
var rows = document.querySelectorAll('#report-table tbody tr');
|
|
95
|
+
var lower = q.toLowerCase();
|
|
96
|
+
var shown = 0;
|
|
97
|
+
rows.forEach(function(row) {
|
|
98
|
+
var text = row.textContent.toLowerCase();
|
|
99
|
+
var match = !q || text.indexOf(lower) !== -1;
|
|
100
|
+
row.style.display = match ? '' : 'none';
|
|
101
|
+
if (match) shown++;
|
|
102
|
+
});
|
|
103
|
+
var countEl = document.getElementById('filter-count');
|
|
104
|
+
countEl.textContent = q ? (shown + '/${runs.length}') : '';
|
|
105
|
+
}
|
|
106
|
+
function deleteRun(id, btn) {
|
|
107
|
+
var lang = document.documentElement.dataset.lang || '${DEFAULT_LANG}';
|
|
108
|
+
if (!confirm(I18N[lang].deleteConfirm + ' ' + id + ' ?')) return;
|
|
109
|
+
fetch('/api/run/' + encodeURIComponent(id), { method: 'DELETE' })
|
|
110
|
+
.then(function(r) { return r.json(); })
|
|
111
|
+
.then(function(d) {
|
|
112
|
+
if (d.ok) { btn.closest('tr').remove(); }
|
|
113
|
+
else { alert(I18N[lang].deleteFail + ': ' + (d.error || 'unknown')); }
|
|
114
|
+
})
|
|
115
|
+
.catch(function(err) { alert(I18N[lang].deleteFail + ': ' + err.message); });
|
|
116
|
+
}
|
|
117
|
+
</script>
|
|
118
|
+
</main>
|
|
119
|
+
`, lang);
|
|
120
|
+
}
|
|
121
|
+
export function renderRunDetail(report, lang = DEFAULT_LANG) {
|
|
122
|
+
if (!report) {
|
|
123
|
+
return layout(t('title', lang), `
|
|
124
|
+
<main>
|
|
125
|
+
<nav class="nav"><a href="/">${t('backToList', lang)}</a></nav>
|
|
126
|
+
<h1>Run not found</h1>
|
|
127
|
+
</main>
|
|
128
|
+
`, lang);
|
|
129
|
+
}
|
|
130
|
+
const m = report.meta;
|
|
131
|
+
const variants = m.variants || [];
|
|
132
|
+
const summary = report.summary || {};
|
|
133
|
+
const results = report.results || [];
|
|
134
|
+
const cards = renderSummaryCards(variants, summary, lang, report.variance);
|
|
135
|
+
const sampleTable = renderSampleTable(variants, results, lang);
|
|
136
|
+
const totalExecCost = Object.values(summary).reduce((s, v) => s + (v.totalExecCostUSD || 0), 0);
|
|
137
|
+
const totalDurationMs = Object.values(summary).reduce((s, v) => s + (v.avgDurationMs || 0) * (v.successCount || 0), 0);
|
|
138
|
+
const sourceLabels = {
|
|
139
|
+
zh: { 'variant-name': '本地文件', 'file-path': '本地文件', git: 'Git 版本', inline: '内联', baseline: '无', custom: '自定义' },
|
|
140
|
+
en: { 'variant-name': 'Local file', 'file-path': 'Local file', git: 'Git ref', inline: 'Inline', baseline: 'None', custom: 'Custom' },
|
|
141
|
+
};
|
|
142
|
+
const typeLabels = {
|
|
143
|
+
zh: { baseline: '基线', 'runtime-context-only': '仅运行环境', 'artifact-injection': '知识注入' },
|
|
144
|
+
en: { baseline: 'Baseline', 'runtime-context-only': 'Runtime context only', 'artifact-injection': 'Artifact injection' },
|
|
145
|
+
};
|
|
146
|
+
const strategyLabels = {
|
|
147
|
+
zh: { baseline: '无注入', 'system-prompt': '系统提示词', 'user-prompt': '用户提示词', 'agent-session': 'Agent 会话', 'workflow-session': '工作流会话' },
|
|
148
|
+
en: { baseline: 'None', 'system-prompt': 'System prompt', 'user-prompt': 'User prompt', 'agent-session': 'Agent session', 'workflow-session': 'Workflow session' },
|
|
149
|
+
};
|
|
150
|
+
const variantConfigRows = (m.variantConfigs || []).map((config, i) => {
|
|
151
|
+
const expTypeRaw = config.experimentType || '-';
|
|
152
|
+
const expType = (typeLabels[lang] || typeLabels.en)[String(expTypeRaw)] || expTypeRaw;
|
|
153
|
+
const source = config.artifactKind === 'baseline'
|
|
154
|
+
? (lang === 'zh' ? '无' : 'None')
|
|
155
|
+
: (sourceLabels[lang] || sourceLabels.en)[config.artifactSource] || config.artifactSource;
|
|
156
|
+
const strategy = (strategyLabels[lang] || strategyLabels.en)[config.executionStrategy] || config.executionStrategy;
|
|
157
|
+
const cwdRaw = config.cwd || '';
|
|
158
|
+
const runtimeContext = cwdRaw
|
|
159
|
+
? cwdRaw.replace(/.*\/Projects\//, '').replace(/.*\/Documents\//, '').replace(/\/Users\/[^/]+\//, '~/')
|
|
160
|
+
: (lang === 'zh' ? '默认' : 'default');
|
|
161
|
+
const color = COLORS[i % COLORS.length];
|
|
162
|
+
return `<tr>
|
|
163
|
+
<td style="border-left:3px solid ${color};padding-left:12px"><strong>${e(config.variant)}</strong></td>
|
|
164
|
+
<td>${e(expType)}</td>
|
|
165
|
+
<td>${e(config.artifactKind)}</td>
|
|
166
|
+
<td>${e(source)}</td>
|
|
167
|
+
<td>${e(strategy)}</td>
|
|
168
|
+
<td title="${e(cwdRaw)}">${e(runtimeContext)}</td>
|
|
169
|
+
</tr>`;
|
|
170
|
+
}).join('');
|
|
171
|
+
const configModalId = 'guide-variant-config';
|
|
172
|
+
const repeatSuffix = report.variance
|
|
173
|
+
? (lang === 'zh' ? ` × ${report.variance.runs} 轮` : ` × ${report.variance.runs} runs`)
|
|
174
|
+
: '';
|
|
175
|
+
const experimentSummary = lang === 'zh'
|
|
176
|
+
? `${m.sampleCount} 个测评用例 × ${variants.length} 组实验${repeatSuffix}`
|
|
177
|
+
: `${m.sampleCount} samples × ${variants.length} variants${repeatSuffix}`;
|
|
178
|
+
const variantConfigSection = variantConfigRows ? `
|
|
179
|
+
<section style="margin:20px 0">
|
|
180
|
+
<h2 style="display:flex;align-items:center;gap:4px">${t('variantConfig', lang)} <button type="button" class="hint-btn" onclick="openModal('${configModalId}')" aria-label="${e(t('variantConfigDesc', lang))}" aria-haspopup="dialog">?</button></h2>
|
|
181
|
+
<p style="font-size:12px;color:var(--text-muted);margin-bottom:8px">${experimentSummary}</p>
|
|
182
|
+
<div class="table-wrap">
|
|
183
|
+
<table>
|
|
184
|
+
<thead><tr>
|
|
185
|
+
<th>🏷️ ${t('variants', lang)}</th>
|
|
186
|
+
<th>🧪 ${t('variantType', lang)}</th>
|
|
187
|
+
<th>📦 ${t('variantArtifactKind', lang)}</th>
|
|
188
|
+
<th>📂 ${t('variantArtifactSource', lang)}</th>
|
|
189
|
+
<th>⚙️ ${t('variantExecutionStrategy', lang)}</th>
|
|
190
|
+
<th>🖥️ ${t('variantRuntimeContext', lang)}</th>
|
|
191
|
+
</tr></thead>
|
|
192
|
+
<tbody>${variantConfigRows}</tbody>
|
|
193
|
+
</table>
|
|
194
|
+
</div>
|
|
195
|
+
</section>
|
|
196
|
+
<div id="${configModalId}" class="modal-overlay" role="dialog" aria-modal="true" aria-labelledby="${configModalId}-title" onclick="if(event.target===this)closeModal('${configModalId}')">
|
|
197
|
+
<div class="modal-content">
|
|
198
|
+
<div class="modal-header">
|
|
199
|
+
<strong id="${configModalId}-title" style="font-size:1rem">${lang === 'zh' ? '如何阅读实验配置?' : 'How to read experiment setup?'}</strong>
|
|
200
|
+
<button type="button" class="modal-close" onclick="closeModal('${configModalId}')" aria-label="${lang === 'zh' ? '关闭' : 'Close'}">✕</button>
|
|
201
|
+
</div>
|
|
202
|
+
<p style="font-size:13px;color:var(--text-secondary);margin:4px 0 16px">${e(t('variantConfigDesc', lang))}</p>
|
|
203
|
+
<table class="modal-table"><tbody>
|
|
204
|
+
${lang === 'zh' ? `
|
|
205
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variants', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">实验分组的名称标签</td></tr>
|
|
206
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantType', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">该分组属于哪种实验类型(baseline / 仅运行环境 / 知识注入)</td></tr>
|
|
207
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>知识类型</strong></td><td style="padding:6px 0;color:var(--text-secondary)">被评测对象的类型(skill / agent / workflow / baseline)</td></tr>
|
|
208
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantArtifactSource', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">知识从哪里加载(本地文件 / Git 版本 / 内联)</td></tr>
|
|
209
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantExecutionStrategy', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">知识如何注入执行(system-prompt / user-prompt / agent-session)</td></tr>
|
|
210
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantRuntimeContext', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Agent 运行的工作目录(影响可访问的文件和工具)</td></tr>
|
|
211
|
+
` : `
|
|
212
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variants', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Name label for this experiment group</td></tr>
|
|
213
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantType', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Role in the experiment (baseline / runtime-context-only / artifact-injection)</td></tr>
|
|
214
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>Artifact Kind</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Type of artifact being evaluated (skill / agent / workflow / baseline)</td></tr>
|
|
215
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantArtifactSource', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Where the artifact comes from (local file / git ref / inline)</td></tr>
|
|
216
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>${t('variantExecutionStrategy', lang)}</strong></td><td style="padding:6px 0;color:var(--text-secondary)">How the artifact is injected (system-prompt / user-prompt / agent-session)</td></tr>
|
|
217
|
+
<tr><td style="padding:6px 0;color:var(--text-primary)"><strong>Runtime Context</strong></td><td style="padding:6px 0;color:var(--text-secondary)">Working directory the agent runs in (affects accessible files and tools)</td></tr>
|
|
218
|
+
`}
|
|
219
|
+
</tbody></table>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
` : '';
|
|
223
|
+
return layout(`${report.id}`, `
|
|
224
|
+
<main>
|
|
225
|
+
<nav class="nav"><a href="/" data-i18n="backToList">${t('backToList', lang)}</a></nav>
|
|
226
|
+
<h1>${e(report.id)}</h1>
|
|
227
|
+
<div class="meta-tags">
|
|
228
|
+
<span class="meta-tag">${t('model', lang)}: ${e(m.model)}</span>
|
|
229
|
+
<span class="meta-tag">${t('judge', lang)}: ${e(m.judgeModel || 'none')}</span>
|
|
230
|
+
<span class="meta-tag">${t('executor', lang)}: ${e(m.executor || 'claude')}</span>
|
|
231
|
+
<span class="meta-tag">${t('cost', lang)}: ${fmtCost(totalExecCost)}</span>
|
|
232
|
+
<span class="meta-tag">${lang === 'zh' ? '耗时' : 'duration'}: ${fmtDuration(totalDurationMs)}</span>
|
|
233
|
+
${m.gitInfo ? `<span class="meta-tag">commit: ${e(m.gitInfo.commitShort)}${m.gitInfo.dirty ? '*' : ''} (${e(m.gitInfo.branch)})</span>` : ''}
|
|
234
|
+
${m.blind ? `<span class="meta-tag" style="color:var(--green)" data-i18n="blindLabel">${t('blindLabel', lang)}</span>` : ''}
|
|
235
|
+
</div>
|
|
236
|
+
${m.blind ? `
|
|
237
|
+
<div style="margin:12px 0">
|
|
238
|
+
<button onclick="document.getElementById('blind-reveal').style.display=document.getElementById('blind-reveal').style.display==='none'?'block':'none'" data-i18n="revealBlind">${t('revealBlind', lang)}</button>
|
|
239
|
+
<div id="blind-reveal" style="display:none;margin-top:8px;padding:12px;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius)" role="region" aria-label="Blind variant mapping">
|
|
240
|
+
${Object.entries(m.blindMap || {}).map(([label, real]) => `<div style="font-size:13px;color:var(--text-secondary)"><strong>Variant ${e(label)}</strong> → ${e(real)}</div>`).join('')}
|
|
241
|
+
</div>
|
|
242
|
+
</div>` : ''}
|
|
243
|
+
|
|
244
|
+
${variantConfigSection}
|
|
245
|
+
|
|
246
|
+
<section>${cards}</section>
|
|
247
|
+
|
|
248
|
+
${renderVarianceComparisons(report.variance, lang, Boolean(report.meta.layeredStats))}
|
|
249
|
+
|
|
250
|
+
${renderAnalysis(report.analysis, lang)}
|
|
251
|
+
|
|
252
|
+
${renderAgentOverview(variants, summary, lang)}
|
|
253
|
+
|
|
254
|
+
${renderKnowledgeInteractionSection(report.analysis?.coverage, report.analysis?.gapReports, lang)}
|
|
255
|
+
|
|
256
|
+
<section>${sampleTable}</section>
|
|
257
|
+
|
|
258
|
+
</main>
|
|
259
|
+
`, lang);
|
|
260
|
+
}
|
|
261
|
+
export function renderEachRunDetail(report, lang = DEFAULT_LANG) {
|
|
262
|
+
if (!report) {
|
|
263
|
+
return layout(t('title', lang), `
|
|
264
|
+
<main>
|
|
265
|
+
<nav class="nav"><a href="/">${t('backToList', lang)}</a></nav>
|
|
266
|
+
<h1>Run not found</h1>
|
|
267
|
+
</main>
|
|
268
|
+
`, lang);
|
|
269
|
+
}
|
|
270
|
+
const m = report.meta;
|
|
271
|
+
const overview = report.overview || null;
|
|
272
|
+
const eachArtifacts = report.artifacts || [];
|
|
273
|
+
// Overview table
|
|
274
|
+
const overviewRows = (overview?.artifacts || []).map((sk) => {
|
|
275
|
+
const bs = typeof sk.baselineScore === 'number' ? sk.baselineScore.toFixed(2) : '-';
|
|
276
|
+
const ss = typeof sk.artifactScore === 'number' ? sk.artifactScore.toFixed(2) : '-';
|
|
277
|
+
const imp = sk.improvement || '-';
|
|
278
|
+
const impColor = imp.startsWith('+') ? 'var(--green)' : imp.startsWith('-') ? 'var(--red)' : 'var(--text-muted)';
|
|
279
|
+
return `<tr>
|
|
280
|
+
<td><a href="#skill-${e(sk.name)}">${e(sk.name)}</a></td>
|
|
281
|
+
<td>${bs}</td>
|
|
282
|
+
<td>${ss}</td>
|
|
283
|
+
<td style="color:${impColor};font-weight:600">${imp}</td>
|
|
284
|
+
</tr>`;
|
|
285
|
+
}).join('');
|
|
286
|
+
// Per-artifact detail sections
|
|
287
|
+
const skillSections = eachArtifacts.map((sk) => {
|
|
288
|
+
const variants = ['baseline', 'skill'];
|
|
289
|
+
const summary = sk.summary || {};
|
|
290
|
+
const cards = renderSummaryCards(variants, summary, lang);
|
|
291
|
+
const sampleTable = renderSampleTable(variants, sk.results, lang);
|
|
292
|
+
return `
|
|
293
|
+
<section id="skill-${e(sk.name)}" style="margin-top:36px;padding-top:20px;border-top:1px solid var(--border)">
|
|
294
|
+
<h2>${e(sk.name)}</h2>
|
|
295
|
+
<p style="font-size:12px;color:var(--text-muted)">${t('samples', lang)}: ${sk.sampleCount} · Hash: ${e(sk.artifactHash || '-')}</p>
|
|
296
|
+
${cards}
|
|
297
|
+
${sampleTable}
|
|
298
|
+
</section>
|
|
299
|
+
`;
|
|
300
|
+
}).join('');
|
|
301
|
+
return layout(`${t('reportTitle', lang)} - ${report.id}`, `
|
|
302
|
+
<main>
|
|
303
|
+
<nav class="nav"><a href="/" data-i18n="backToList">${t('backToList', lang)}</a></nav>
|
|
304
|
+
<h1>${e(report.id)}</h1>
|
|
305
|
+
<div class="meta-tags">
|
|
306
|
+
<span class="meta-tag">${t('model', lang)}: ${e(m.model)}</span>
|
|
307
|
+
<span class="meta-tag">${t('judge', lang)}: ${e(m.judgeModel || 'none')}</span>
|
|
308
|
+
<span class="meta-tag">${t('executor', lang)}: ${e(m.executor || 'claude')}</span>
|
|
309
|
+
<span class="meta-tag">${t('cost', lang)}: ${fmtCost(m.totalCostUSD)}</span>
|
|
310
|
+
</div>
|
|
311
|
+
|
|
312
|
+
<section>
|
|
313
|
+
<h2>${t('eachOverview', lang)}</h2>
|
|
314
|
+
|
|
315
|
+
<p style="font-size:13px;color:var(--text-muted)">${overview?.totalArtifacts || 0} ${t('eachSkills', lang)} · ${overview?.totalSamples || 0} ${t('eachSamples', lang)} · ${fmtCost(overview?.totalCostUSD || 0)}</p>
|
|
316
|
+
<div class="table-wrap">
|
|
317
|
+
<table>
|
|
318
|
+
<thead><tr>
|
|
319
|
+
<th>${t('eachSkill', lang)}</th>
|
|
320
|
+
<th>${t('eachBaseline', lang)}</th>
|
|
321
|
+
<th>${t('eachWithSkill', lang)}</th>
|
|
322
|
+
<th>${t('eachImprovement', lang)}</th>
|
|
323
|
+
</tr></thead>
|
|
324
|
+
<tbody>${overviewRows}</tbody>
|
|
325
|
+
</table>
|
|
326
|
+
</div>
|
|
327
|
+
</section>
|
|
328
|
+
|
|
329
|
+
${skillSections}
|
|
330
|
+
|
|
331
|
+
</main>
|
|
332
|
+
`, lang);
|
|
333
|
+
}
|
|
334
|
+
export function renderTrendsPage(variantName, runs, lang = DEFAULT_LANG) {
|
|
335
|
+
const body = renderTrendsBody(variantName, runs, lang);
|
|
336
|
+
return layout(`${variantName} — ${lang === 'zh' ? '趋势' : 'Trends'}`, `<main>${body}</main>`, lang);
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=html-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-renderer.js","sourceRoot":"","sources":["../../../src/renderer/html-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Lang } from '../types.js';
|
|
2
|
+
export declare function e(text: unknown): string;
|
|
3
|
+
export declare function fmtNum(n: number | undefined | null, digits?: number): string;
|
|
4
|
+
export declare function fmtDuration(ms: number | undefined | null): string;
|
|
5
|
+
export declare function fmtCost(usd: number | undefined | null): string;
|
|
6
|
+
export declare function fmtLocalTime(isoStr: string): string;
|
|
7
|
+
export declare function delta(a: number | undefined | null, b: number | undefined | null, lowerIsBetter?: boolean): string;
|
|
8
|
+
export declare const COLORS: string[];
|
|
9
|
+
export declare const I18N: Record<Lang, Record<string, string>>;
|
|
10
|
+
export declare const DEFAULT_LANG: Lang;
|
|
11
|
+
export declare function t(key: string, lang?: Lang): string;
|
|
12
|
+
export declare function layout(title: string, body: string, lang?: Lang): string;
|
|
13
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/renderer/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAgB,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOvC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAE/E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAOjE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAE9D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,aAAa,GAAE,OAAe,GAAG,MAAM,CAOxH;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,EAAiH,CAAC;AAE7I,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+GrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,IAAW,CAAC;AAEvC,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,IAAmB,GAAG,MAAM,CAEhE;AAyDD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAmB,GAAG,MAAM,CA2QrF"}
|