oh-my-knowledge 0.26.0 → 0.27.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 +109 -347
- package/README.zh.md +146 -376
- package/dist/src/analysis/report-diagnostics.d.ts +1 -1
- package/dist/src/analysis/report-diagnostics.js +1 -1
- package/dist/src/analysis/sample-diagnostics.d.ts +2 -2
- package/dist/src/analysis/sample-diagnostics.js +2 -2
- package/dist/src/authoring/generator.d.ts.map +1 -1
- package/dist/src/authoring/generator.js +9 -8
- package/dist/src/authoring/generator.js.map +1 -1
- package/dist/src/cli/cli-exit.d.ts +15 -0
- package/dist/src/cli/cli-exit.d.ts.map +1 -0
- package/dist/src/cli/cli-exit.js +19 -0
- package/dist/src/cli/cli-exit.js.map +1 -0
- package/dist/src/cli/commands/_shared.d.ts +12 -0
- package/dist/src/cli/commands/_shared.d.ts.map +1 -0
- package/dist/src/cli/commands/_shared.js +26 -0
- package/dist/src/cli/commands/_shared.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +137 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/eval-debias.d.ts +2 -0
- package/dist/src/cli/commands/eval-debias.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-debias.js +88 -0
- package/dist/src/cli/commands/eval-debias.js.map +1 -0
- package/dist/src/cli/commands/eval-gold.d.ts +2 -0
- package/dist/src/cli/commands/eval-gold.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-gold.js +137 -0
- package/dist/src/cli/commands/eval-gold.js.map +1 -0
- package/dist/src/cli/commands/eval-runner.d.ts +2 -0
- package/dist/src/cli/commands/eval-runner.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-runner.js +299 -0
- package/dist/src/cli/commands/eval-runner.js.map +1 -0
- package/dist/src/cli/commands/eval.d.ts +2 -0
- package/dist/src/cli/commands/eval.d.ts.map +1 -0
- package/dist/src/cli/commands/eval.js +16 -0
- package/dist/src/cli/commands/eval.js.map +1 -0
- package/dist/src/cli/commands/export-diff.d.ts +2 -0
- package/dist/src/cli/commands/export-diff.d.ts.map +1 -0
- package/dist/src/cli/commands/export-diff.js +177 -0
- package/dist/src/cli/commands/export-diff.js.map +1 -0
- package/dist/src/cli/commands/export-saturation.d.ts +2 -0
- package/dist/src/cli/commands/export-saturation.d.ts.map +1 -0
- package/dist/src/cli/commands/export-saturation.js +59 -0
- package/dist/src/cli/commands/export-saturation.js.map +1 -0
- package/dist/src/cli/commands/export-verdict.d.ts +2 -0
- package/dist/src/cli/commands/export-verdict.d.ts.map +1 -0
- package/dist/src/cli/commands/export-verdict.js +45 -0
- package/dist/src/cli/commands/export-verdict.js.map +1 -0
- package/dist/src/cli/commands/export.d.ts +2 -0
- package/dist/src/cli/commands/export.d.ts.map +1 -0
- package/dist/src/cli/commands/export.js +150 -0
- package/dist/src/cli/commands/export.js.map +1 -0
- package/dist/src/cli/commands/improve-failures.d.ts +2 -0
- package/dist/src/cli/commands/improve-failures.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-failures.js +59 -0
- package/dist/src/cli/commands/improve-failures.js.map +1 -0
- package/dist/src/cli/commands/improve-plan.d.ts +2 -0
- package/dist/src/cli/commands/improve-plan.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-plan.js +75 -0
- package/dist/src/cli/commands/improve-plan.js.map +1 -0
- package/dist/src/cli/commands/improve-samples.d.ts +2 -0
- package/dist/src/cli/commands/improve-samples.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-samples.js +120 -0
- package/dist/src/cli/commands/improve-samples.js.map +1 -0
- package/dist/src/cli/commands/improve-skill.d.ts +2 -0
- package/dist/src/cli/commands/improve-skill.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-skill.js +115 -0
- package/dist/src/cli/commands/improve-skill.js.map +1 -0
- package/dist/src/cli/commands/improve.d.ts +2 -0
- package/dist/src/cli/commands/improve.d.ts.map +1 -0
- package/dist/src/cli/commands/improve.js +34 -0
- package/dist/src/cli/commands/improve.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +2 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +110 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/observe.d.ts +2 -0
- package/dist/src/cli/commands/observe.d.ts.map +1 -0
- package/dist/src/cli/commands/observe.js +77 -0
- package/dist/src/cli/commands/observe.js.map +1 -0
- package/dist/src/cli/commands/registry.d.ts +11 -0
- package/dist/src/cli/commands/registry.d.ts.map +1 -0
- package/dist/src/cli/commands/registry.js +42 -0
- package/dist/src/cli/commands/registry.js.map +1 -0
- package/dist/src/cli/commands/studio.d.ts +2 -0
- package/dist/src/cli/commands/studio.d.ts.map +1 -0
- package/dist/src/cli/commands/studio.js +76 -0
- package/dist/src/cli/commands/studio.js.map +1 -0
- package/dist/src/cli/coverage-renderer.d.ts +1 -1
- package/dist/src/cli/coverage-renderer.js +1 -1
- package/dist/src/cli/i18n-dict.d.ts +4 -4
- package/dist/src/cli/i18n-dict.d.ts.map +1 -1
- package/dist/src/cli/i18n-dict.js +558 -564
- package/dist/src/cli/i18n-dict.js.map +1 -1
- package/dist/src/cli/index.js +43 -1516
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/parse-run-config.d.ts +3 -4
- package/dist/src/cli/parse-run-config.d.ts.map +1 -1
- package/dist/src/cli/parse-run-config.js +5 -5
- package/dist/src/cli/parse-run-config.js.map +1 -1
- package/dist/src/cli/parse-strict.d.ts +0 -13
- package/dist/src/cli/parse-strict.d.ts.map +1 -1
- package/dist/src/cli/parse-strict.js +2 -1
- package/dist/src/cli/parse-strict.js.map +1 -1
- package/dist/src/doctor/index.d.ts +1 -1
- package/dist/src/doctor/index.js +2 -2
- package/dist/src/doctor/index.js.map +1 -1
- package/dist/src/doctor/preflight.d.ts +2 -2
- package/dist/src/doctor/preflight.js +2 -2
- package/dist/src/eval-core/fact-checker.js +1 -1
- package/dist/src/eval-core/fact-checker.js.map +1 -1
- package/dist/src/eval-core/layer-gates.d.ts +1 -1
- package/dist/src/eval-core/layer-gates.js +1 -1
- package/dist/src/eval-core/verdict.d.ts +4 -4
- package/dist/src/eval-core/verdict.d.ts.map +1 -1
- package/dist/src/eval-core/verdict.js +2 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +15 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.js +13 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +6 -3
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.js +10 -9
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.js +13 -6
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
- package/dist/src/executors/script.d.ts.map +1 -1
- package/dist/src/executors/script.js +16 -3
- package/dist/src/executors/script.js.map +1 -1
- package/dist/src/grading/debias-validate.d.ts +2 -2
- package/dist/src/grading/debias-validate.js +2 -2
- package/dist/src/grading/gold-cli.d.ts +2 -5
- package/dist/src/grading/gold-cli.d.ts.map +1 -1
- package/dist/src/grading/gold-cli.js +4 -8
- package/dist/src/grading/gold-cli.js.map +1 -1
- package/dist/src/grading/judge.d.ts +1 -1
- package/dist/src/renderer/html-renderer.js +1 -1
- package/dist/src/renderer/layout.js +5 -5
- package/dist/src/renderer/layout.js.map +1 -1
- package/dist/src/renderer/skill-health-renderer.d.ts +1 -1
- package/dist/src/renderer/skill-health-renderer.js +1 -1
- package/dist/src/renderer/summary.js +8 -8
- package/dist/src/server/report-server.d.ts.map +1 -1
- package/dist/src/server/report-server.js +8 -7
- package/dist/src/server/report-server.js.map +1 -1
- package/dist/src/types/doctor.d.ts +3 -3
- package/dist/src/types/eval.d.ts +1 -1
- package/dist/src/types/report.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { CliExit } from '../cli-exit.js';
|
|
3
|
+
import { langFromArgv } from '../i18n.js';
|
|
4
|
+
import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
|
|
5
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
6
|
+
import { requireEvaluationReport } from './_shared.js';
|
|
7
|
+
export async function execute(argv) {
|
|
8
|
+
const lang = langFromArgv(argv);
|
|
9
|
+
const reportId = argv[0];
|
|
10
|
+
if (!reportId) {
|
|
11
|
+
console.log(lang === 'zh'
|
|
12
|
+
? '用法:omk export saturation <report-id> [--variant <name>]'
|
|
13
|
+
: 'Usage: omk export saturation <report-id> [--variant <name>]');
|
|
14
|
+
throw new CliExit(1);
|
|
15
|
+
}
|
|
16
|
+
const { values } = parseArgsStrictOrExit({
|
|
17
|
+
args: argv.slice(1),
|
|
18
|
+
options: {
|
|
19
|
+
...COMMON_OPTIONS,
|
|
20
|
+
'reports-dir': { type: 'string', default: DEFAULT_REPORTS_DIR },
|
|
21
|
+
variant: { type: 'string' },
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
const { createFileStore } = await import('../../server/report-store.js');
|
|
25
|
+
const store = createFileStore(resolve(values['reports-dir']));
|
|
26
|
+
const report = requireEvaluationReport(await store.get(reportId), reportId, lang);
|
|
27
|
+
const saturation = report.variance?.saturation;
|
|
28
|
+
if (!saturation) {
|
|
29
|
+
console.error(lang === 'zh'
|
|
30
|
+
? '该报告没有 saturation 数据,需要 --repeat ≥ 2 才会记录。'
|
|
31
|
+
: 'This report has no saturation data; it requires --repeat ≥ 2.');
|
|
32
|
+
throw new CliExit(1);
|
|
33
|
+
}
|
|
34
|
+
const targetVariants = values.variant ? [values.variant] : (report.meta.variants ?? []);
|
|
35
|
+
console.log(lang === 'zh'
|
|
36
|
+
? '\n Saturation 判定(读取报告中已持久化的数据)\n'
|
|
37
|
+
: '\n Saturation verdict (from persisted report data)\n');
|
|
38
|
+
for (const variant of targetVariants) {
|
|
39
|
+
const trace = saturation.perVariant[variant];
|
|
40
|
+
if (!trace || trace.length === 0) {
|
|
41
|
+
console.log(` ${variant}: no trace data`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
console.log(` ${variant}:`);
|
|
45
|
+
console.log(` checkpoints: ${trace.length} (N=${trace.map((p) => p.n).join(', ')})`);
|
|
46
|
+
const last = trace[trace.length - 1];
|
|
47
|
+
console.log(` last point mean=${last.mean.toFixed(3)}, CI=[${last.ciLow.toFixed(3)}, ${last.ciHigh.toFixed(3)}]`);
|
|
48
|
+
const persisted = saturation.verdicts?.[variant];
|
|
49
|
+
if (persisted) {
|
|
50
|
+
const result = persisted.saturated ? `saturated@N=${persisted.atN ?? '?'}` : 'not saturated';
|
|
51
|
+
console.log(` verdict (${persisted.method}): ${result} - ${persisted.reason}`);
|
|
52
|
+
}
|
|
53
|
+
else if (trace.length < 5) {
|
|
54
|
+
console.log(` verdict: only ${trace.length} data points (< 5), skipping`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
console.log('');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=export-saturation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-saturation.js","sourceRoot":"","sources":["../../../../src/cli/commands/export-saturation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-verdict.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/export-verdict.ts"],"names":[],"mappings":"AAQA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { CliExit } from '../cli-exit.js';
|
|
3
|
+
import { langFromArgv } from '../i18n.js';
|
|
4
|
+
import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
|
|
5
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
6
|
+
import { requireEvaluationReport } from './_shared.js';
|
|
7
|
+
export async function execute(argv) {
|
|
8
|
+
const lang = langFromArgv(argv);
|
|
9
|
+
const reportId = argv[0];
|
|
10
|
+
if (!reportId) {
|
|
11
|
+
console.log(lang === 'zh'
|
|
12
|
+
? '用法:omk export verdict <report-id> [--threshold <n>] [--trivial-diff <n>]'
|
|
13
|
+
: 'Usage: omk export verdict <report-id> [--threshold <n>] [--trivial-diff <n>]');
|
|
14
|
+
throw new CliExit(1);
|
|
15
|
+
}
|
|
16
|
+
const { values } = parseArgsStrictOrExit({
|
|
17
|
+
args: argv.slice(1),
|
|
18
|
+
options: {
|
|
19
|
+
...COMMON_OPTIONS,
|
|
20
|
+
'reports-dir': { type: 'string', default: DEFAULT_REPORTS_DIR },
|
|
21
|
+
threshold: { type: 'string' },
|
|
22
|
+
'trivial-diff': { type: 'string' },
|
|
23
|
+
verbose: { type: 'boolean', default: false },
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const { createFileStore } = await import('../../server/report-store.js');
|
|
27
|
+
const store = createFileStore(resolve(values['reports-dir']));
|
|
28
|
+
const report = requireEvaluationReport(await store.get(reportId), reportId, lang);
|
|
29
|
+
const { computeVerdict, formatVerdictText } = await import('../../eval-core/verdict.js');
|
|
30
|
+
const { reportComparabilityWarnings, formatComparabilityWarnings } = await import('../../eval-core/comparability.js');
|
|
31
|
+
const comparability = formatComparabilityWarnings(reportComparabilityWarnings(report), lang);
|
|
32
|
+
if (comparability)
|
|
33
|
+
process.stderr.write(`${comparability}\n`);
|
|
34
|
+
const result = computeVerdict(report, {
|
|
35
|
+
gateThreshold: values.threshold != null ? Number(values.threshold) : undefined,
|
|
36
|
+
triviallySmallDiff: values['trivial-diff'] != null ? Number(values['trivial-diff']) : undefined,
|
|
37
|
+
});
|
|
38
|
+
console.log(formatVerdictText(result, { verbose: Boolean(values.verbose) }));
|
|
39
|
+
if (result.level === 'PROGRESS')
|
|
40
|
+
throw new CliExit(0);
|
|
41
|
+
if (result.level === 'SOLO' && result.headline.includes('PASS'))
|
|
42
|
+
throw new CliExit(0);
|
|
43
|
+
throw new CliExit(1);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=export-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-verdict.js","sourceRoot":"","sources":["../../../../src/cli/commands/export-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAaA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE3D"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { CliExit } from '../cli-exit.js';
|
|
4
|
+
import { tCli, langFromArgv } from '../i18n.js';
|
|
5
|
+
import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
|
|
6
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
7
|
+
import { execute as diff } from './export-diff.js';
|
|
8
|
+
import { execute as saturation } from './export-saturation.js';
|
|
9
|
+
import { execute as verdictCommand } from './export-verdict.js';
|
|
10
|
+
export async function execute(argv) {
|
|
11
|
+
const lang = langFromArgv(argv);
|
|
12
|
+
const [sub, ...rest] = argv;
|
|
13
|
+
if (sub === 'diff') {
|
|
14
|
+
await diff(rest);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (sub === 'verdict') {
|
|
18
|
+
await verdictCommand(rest);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (sub === 'saturation') {
|
|
22
|
+
await saturation(rest);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const { values, positionals } = parseArgsStrictOrExit({
|
|
26
|
+
args: argv,
|
|
27
|
+
allowPositionals: true,
|
|
28
|
+
options: {
|
|
29
|
+
...COMMON_OPTIONS,
|
|
30
|
+
format: { type: 'string', default: 'html' },
|
|
31
|
+
out: { type: 'string' },
|
|
32
|
+
'reports-dir': { type: 'string', default: DEFAULT_REPORTS_DIR },
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
const id = positionals[0];
|
|
36
|
+
if (!id) {
|
|
37
|
+
console.log(tCli('cli.help.export', lang).trim());
|
|
38
|
+
throw new CliExit(1);
|
|
39
|
+
}
|
|
40
|
+
const format = String(values.format);
|
|
41
|
+
if (!['html', 'markdown', 'github-summary'].includes(format)) {
|
|
42
|
+
console.error(tCli('cli.export.unsupported_format', lang, { format: String(values.format) }));
|
|
43
|
+
throw new CliExit(2);
|
|
44
|
+
}
|
|
45
|
+
const { createFileStore } = await import('../../server/report-store.js');
|
|
46
|
+
const store = createFileStore(resolve(values['reports-dir']));
|
|
47
|
+
const report = await store.get(id);
|
|
48
|
+
if (!report) {
|
|
49
|
+
console.error(tCli('cli.common.report_not_found', lang, { id }));
|
|
50
|
+
throw new CliExit(1);
|
|
51
|
+
}
|
|
52
|
+
if (format === 'html') {
|
|
53
|
+
const { renderReportDocumentDetail } = await import('../../renderer/html-renderer.js');
|
|
54
|
+
const outPath = resolve(values.out ?? `${id}.html`);
|
|
55
|
+
writeFileSync(outPath, renderReportDocumentDetail(report));
|
|
56
|
+
console.log(tCli('cli.export.html_done', lang, { path: outPath }));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const verdict = report.kind === 'evaluation' ? await renderVerdict(report) : 'n/a';
|
|
60
|
+
const body = format === 'github-summary'
|
|
61
|
+
? renderGithubSummary(report, lang, verdict)
|
|
62
|
+
: renderMarkdown(report, lang, verdict);
|
|
63
|
+
const out = values.out;
|
|
64
|
+
if (out) {
|
|
65
|
+
const outPath = resolve(out);
|
|
66
|
+
writeFileSync(outPath, body);
|
|
67
|
+
console.log(tCli('cli.export.done', lang, { path: outPath }));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
console.log(body);
|
|
71
|
+
}
|
|
72
|
+
async function renderVerdict(report) {
|
|
73
|
+
const { computeVerdict } = await import('../../eval-core/verdict.js');
|
|
74
|
+
return computeVerdict(report).headline;
|
|
75
|
+
}
|
|
76
|
+
function renderGithubSummary(report, lang, verdict) {
|
|
77
|
+
if (report.kind !== 'evaluation') {
|
|
78
|
+
return renderBatchMarkdown(report, lang);
|
|
79
|
+
}
|
|
80
|
+
const lines = [
|
|
81
|
+
lang === 'zh' ? '## omk 评测摘要' : '## omk Evaluation Summary',
|
|
82
|
+
'',
|
|
83
|
+
`- ${lang === 'zh' ? '报告' : 'Report'}:\`${report.id}\``,
|
|
84
|
+
`- ${lang === 'zh' ? '结论' : 'Verdict'}:${verdict}`,
|
|
85
|
+
`- ${lang === 'zh' ? '样本数' : 'Samples'}:${report.meta.sampleCount}`,
|
|
86
|
+
`- ${lang === 'zh' ? '模型' : 'Model'}:${report.meta.executor}:${report.meta.model}`,
|
|
87
|
+
`- ${lang === 'zh' ? '版本' : 'Variants'}:${report.meta.variants.join(' / ')}`,
|
|
88
|
+
'',
|
|
89
|
+
renderVariantTable(report, lang),
|
|
90
|
+
'',
|
|
91
|
+
renderAuditBlock(report, lang),
|
|
92
|
+
];
|
|
93
|
+
return lines.join('\n').trim();
|
|
94
|
+
}
|
|
95
|
+
function renderMarkdown(report, lang, verdict) {
|
|
96
|
+
if (report.kind !== 'evaluation') {
|
|
97
|
+
return renderBatchMarkdown(report, lang);
|
|
98
|
+
}
|
|
99
|
+
const lines = [
|
|
100
|
+
`# ${lang === 'zh' ? 'omk 评测报告' : 'omk Evaluation Report'}:${report.id}`,
|
|
101
|
+
'',
|
|
102
|
+
`- ${lang === 'zh' ? '结论' : 'Verdict'}:${verdict}`,
|
|
103
|
+
`- ${lang === 'zh' ? '时间' : 'Timestamp'}:${report.meta.timestamp}`,
|
|
104
|
+
`- ${lang === 'zh' ? '样本数' : 'Samples'}:${report.meta.sampleCount}`,
|
|
105
|
+
`- ${lang === 'zh' ? '执行器' : 'Executor'}:${report.meta.executor}`,
|
|
106
|
+
`- ${lang === 'zh' ? '模型' : 'Model'}:${report.meta.model}`,
|
|
107
|
+
'',
|
|
108
|
+
`## ${lang === 'zh' ? '版本摘要' : 'Variant Summary'}`,
|
|
109
|
+
'',
|
|
110
|
+
renderVariantTable(report, lang),
|
|
111
|
+
'',
|
|
112
|
+
`## ${lang === 'zh' ? '审计信息' : 'Audit Evidence'}`,
|
|
113
|
+
'',
|
|
114
|
+
renderAuditBlock(report, lang),
|
|
115
|
+
];
|
|
116
|
+
return lines.join('\n').trim();
|
|
117
|
+
}
|
|
118
|
+
function renderBatchMarkdown(report, lang) {
|
|
119
|
+
return [
|
|
120
|
+
`# ${lang === 'zh' ? 'omk 批量评测报告' : 'omk Batch Evaluation Report'}:${report.id}`,
|
|
121
|
+
'',
|
|
122
|
+
`- ${lang === 'zh' ? '类型' : 'Kind'}:${report.kind}`,
|
|
123
|
+
`- ${lang === 'zh' ? '时间' : 'Timestamp'}:${report.meta?.timestamp ?? 'n/a'}`,
|
|
124
|
+
].join('\n');
|
|
125
|
+
}
|
|
126
|
+
function renderVariantTable(report, lang) {
|
|
127
|
+
const header = lang === 'zh'
|
|
128
|
+
? '| 版本 | 样本 | 成功 | 综合分 | 成本 |\n|---|---:|---:|---:|---:|'
|
|
129
|
+
: '| Variant | Samples | Success | Score | Cost |\n|---|---:|---:|---:|---:|';
|
|
130
|
+
const rows = Object.entries(report.summary ?? {}).map(([variant, s]) => {
|
|
131
|
+
const summary = s;
|
|
132
|
+
const score = summary.avgCompositeScore != null ? summary.avgCompositeScore.toFixed(2) : '-';
|
|
133
|
+
const cost = summary.totalCostUSD != null ? `$${summary.totalCostUSD.toFixed(4)}` : '-';
|
|
134
|
+
return `| ${variant} | ${summary.totalSamples} | ${summary.successCount} | ${score} | ${cost} |`;
|
|
135
|
+
});
|
|
136
|
+
return [header, ...rows].join('\n');
|
|
137
|
+
}
|
|
138
|
+
function renderAuditBlock(report, lang) {
|
|
139
|
+
const hashes = Object.entries(report.meta.artifactHashes ?? {})
|
|
140
|
+
.map(([name, hash]) => ` - ${name}: \`${hash}\``)
|
|
141
|
+
.join('\n') || (lang === 'zh' ? ' - 未记录' : ' - not recorded');
|
|
142
|
+
return [
|
|
143
|
+
`- ${lang === 'zh' ? 'CLI 版本' : 'CLI version'}:${report.meta.cliVersion}`,
|
|
144
|
+
`- ${lang === 'zh' ? 'Node 版本' : 'Node version'}:${report.meta.nodeVersion}`,
|
|
145
|
+
`- ${lang === 'zh' ? '评委提示词指纹' : 'Judge prompt hash'}:${report.meta.judgePromptHash ?? 'n/a'}`,
|
|
146
|
+
`- ${lang === 'zh' ? '样本指纹数量' : 'Sample fingerprints'}:${Object.keys(report.meta.sampleHashes ?? {}).length}`,
|
|
147
|
+
`- ${lang === 'zh' ? 'artifact 指纹' : 'Artifact fingerprints'}:\n${hashes}`,
|
|
148
|
+
].join('\n');
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-failures.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/improve-failures.ts"],"names":[],"mappings":"AAQA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD3D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { CliExit } from '../cli-exit.js';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { tCli, langFromArgv } from '../i18n.js';
|
|
4
|
+
import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
|
|
5
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
6
|
+
import { requireEvaluationReport } from './_shared.js';
|
|
7
|
+
export async function execute(argv) {
|
|
8
|
+
const lang = langFromArgv(argv);
|
|
9
|
+
const reportId = argv[0];
|
|
10
|
+
if (!reportId) {
|
|
11
|
+
console.log(tCli('cli.help.improve_failures', lang));
|
|
12
|
+
throw new CliExit(1);
|
|
13
|
+
}
|
|
14
|
+
const { values } = parseArgsStrictOrExit({
|
|
15
|
+
args: argv.slice(1),
|
|
16
|
+
options: {
|
|
17
|
+
...COMMON_OPTIONS,
|
|
18
|
+
'reports-dir': { type: 'string', default: DEFAULT_REPORTS_DIR },
|
|
19
|
+
'judge-models': { type: 'string' },
|
|
20
|
+
'max-clusters': { type: 'string', default: '5' },
|
|
21
|
+
threshold: { type: 'string', default: '3' },
|
|
22
|
+
'max-feed': { type: 'string', default: '50' },
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
// Parse --judge-models 在 load report 之前 fail-fast。
|
|
26
|
+
const { parseJudgeModelsArgOrExit: parseJudgesB } = await import('../parse-run-config.js');
|
|
27
|
+
const cliJudgeModelsB = values['judge-models'] !== undefined
|
|
28
|
+
? parseJudgesB(values['judge-models'])
|
|
29
|
+
: undefined;
|
|
30
|
+
if (cliJudgeModelsB && cliJudgeModelsB.length > 1) {
|
|
31
|
+
console.error(tCli('cli.common.judge_models_single_only', lang, { cmd: 'failures' }));
|
|
32
|
+
throw new CliExit(2);
|
|
33
|
+
}
|
|
34
|
+
const { createFileStore } = await import('../../server/report-store.js');
|
|
35
|
+
const store = createFileStore(resolve(values['reports-dir']));
|
|
36
|
+
const report = requireEvaluationReport(await store.get(reportId), reportId, lang);
|
|
37
|
+
const failuresJudges = cliJudgeModelsB
|
|
38
|
+
?? (report.meta?.judgeModels?.[0]
|
|
39
|
+
? [{ executor: report.meta.judgeModels[0].executor, model: report.meta.judgeModels[0].model }]
|
|
40
|
+
: []);
|
|
41
|
+
if (failuresJudges.length === 0) {
|
|
42
|
+
console.error(tCli('cli.common.no_judge_model', lang));
|
|
43
|
+
throw new CliExit(1);
|
|
44
|
+
}
|
|
45
|
+
const { createExecutor } = await import('../../executors/index.js');
|
|
46
|
+
const executor = createExecutor(failuresJudges[0].executor);
|
|
47
|
+
const judgeModel = failuresJudges[0].model;
|
|
48
|
+
const { clusterFailures, formatFailureClusterReport } = await import('../../analysis/failure-clusterer.js');
|
|
49
|
+
const out = await clusterFailures({
|
|
50
|
+
report,
|
|
51
|
+
executor,
|
|
52
|
+
judgeModel,
|
|
53
|
+
maxClusters: Number(values['max-clusters']) || 5,
|
|
54
|
+
failureThreshold: Number(values.threshold) || 3,
|
|
55
|
+
maxFailuresFed: Number(values['max-feed']) || 50,
|
|
56
|
+
});
|
|
57
|
+
console.log(formatFailureClusterReport(out));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=improve-failures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-failures.js","sourceRoot":"","sources":["../../../../src/cli/commands/improve-failures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-plan.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/improve-plan.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE3D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { CliExit } from '../cli-exit.js';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { tCli, langFromArgv } from '../i18n.js';
|
|
5
|
+
import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
|
|
6
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
7
|
+
import { renderSampleDesignCoverage } from '../coverage-renderer.js';
|
|
8
|
+
import { requireEvaluationReport } from './_shared.js';
|
|
9
|
+
export async function execute(argv) {
|
|
10
|
+
const lang = langFromArgv(argv);
|
|
11
|
+
const reportId = argv[0];
|
|
12
|
+
if (!reportId) {
|
|
13
|
+
console.log(tCli('cli.help.improve_plan', lang));
|
|
14
|
+
throw new CliExit(1);
|
|
15
|
+
}
|
|
16
|
+
const { values } = parseArgsStrictOrExit({
|
|
17
|
+
args: argv.slice(1),
|
|
18
|
+
options: {
|
|
19
|
+
...COMMON_OPTIONS,
|
|
20
|
+
'reports-dir': { type: 'string', default: DEFAULT_REPORTS_DIR },
|
|
21
|
+
samples: { type: 'string' },
|
|
22
|
+
top: { type: 'string', default: '10' },
|
|
23
|
+
'duplicate-rouge': { type: 'string' },
|
|
24
|
+
'ambiguous-stddev': { type: 'string' },
|
|
25
|
+
'cost-k': { type: 'string' },
|
|
26
|
+
'latency-k': { type: 'string' },
|
|
27
|
+
flat: { type: 'string' },
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const { createFileStore } = await import('../../server/report-store.js');
|
|
31
|
+
const store = createFileStore(resolve(values['reports-dir']));
|
|
32
|
+
const report = requireEvaluationReport(await store.get(reportId), reportId, lang);
|
|
33
|
+
// Try to read the samples file for near-duplicate detection. Source order:
|
|
34
|
+
// 1. --samples <path> override
|
|
35
|
+
// 2. report.meta.request.samplesPath (recorded at run time)
|
|
36
|
+
// If neither resolves to a readable file, skip near-duplicate gracefully.
|
|
37
|
+
let samples;
|
|
38
|
+
const samplesPath = values.samples ?? report.meta?.request?.samplesPath;
|
|
39
|
+
if (samplesPath && existsSync(samplesPath)) {
|
|
40
|
+
try {
|
|
41
|
+
const { loadSamples } = await import('../../inputs/load-samples.js');
|
|
42
|
+
samples = loadSamples(samplesPath).samples;
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
process.stderr.write(tCli('cli.common.warn_load_samples_failed', lang, {
|
|
46
|
+
path: samplesPath, message: err.message,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const topRaw = Number(values.top);
|
|
51
|
+
const topN = Number.isFinite(topRaw) && topRaw > 0 ? topRaw : undefined;
|
|
52
|
+
const { diagnoseSamples, formatSampleDiagnostics } = await import('../../analysis/sample-diagnostics.js');
|
|
53
|
+
const diag = diagnoseSamples(report, {
|
|
54
|
+
samples,
|
|
55
|
+
duplicateRouge: values['duplicate-rouge'] != null ? Number(values['duplicate-rouge']) : undefined,
|
|
56
|
+
ambiguousStddev: values['ambiguous-stddev'] != null ? Number(values['ambiguous-stddev']) : undefined,
|
|
57
|
+
costOutlierK: values['cost-k'] != null ? Number(values['cost-k']) : undefined,
|
|
58
|
+
latencyOutlierK: values['latency-k'] != null ? Number(values['latency-k']) : undefined,
|
|
59
|
+
flatThreshold: values.flat != null ? Number(values.flat) : undefined,
|
|
60
|
+
});
|
|
61
|
+
console.log(formatSampleDiagnostics(diag, { topN, lang }));
|
|
62
|
+
// Sample design science coverage block. Render after diagnose 主体,因为
|
|
63
|
+
// coverage 是声明式元数据(capability/difficulty/construct/provenance)的整体分布,
|
|
64
|
+
// 跟 issue list 是不同视角的两件事。优先从 samples (现场加载) 算,fallback 到
|
|
65
|
+
// report.analysis.sampleQuality(报告里持久化的数据)。
|
|
66
|
+
const coverageBlock = renderSampleDesignCoverage(samples, report.analysis?.sampleQuality, lang);
|
|
67
|
+
if (coverageBlock)
|
|
68
|
+
console.log(coverageBlock);
|
|
69
|
+
// Exit code: 0 if health ≥ 70 and no errors; 1 otherwise. CI-friendly.
|
|
70
|
+
if (diag.totals.errors === 0 && diag.healthScore >= 70) {
|
|
71
|
+
throw new CliExit(0);
|
|
72
|
+
}
|
|
73
|
+
throw new CliExit(1);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=improve-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-plan.js","sourceRoot":"","sources":["../../../../src/cli/commands/improve-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-samples.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/improve-samples.ts"],"names":[],"mappings":"AAYA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsH3D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { CliExit } from '../cli-exit.js';
|
|
2
|
+
import { resolve, join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { tCli, langFromArgv } from '../i18n.js';
|
|
5
|
+
import { COMMON_OPTIONS } from '../parse-run-config.js';
|
|
6
|
+
import { parseArgsStrictOrExit } from '../parse-strict.js';
|
|
7
|
+
export async function execute(argv) {
|
|
8
|
+
const lang = langFromArgv(argv);
|
|
9
|
+
const { values } = parseArgsStrictOrExit({
|
|
10
|
+
args: argv,
|
|
11
|
+
options: {
|
|
12
|
+
...COMMON_OPTIONS,
|
|
13
|
+
batch: { type: 'boolean', default: false },
|
|
14
|
+
count: { type: 'string', default: '5' },
|
|
15
|
+
model: { type: 'string', default: 'sonnet' },
|
|
16
|
+
'skill-dir': { type: 'string', default: 'skills' },
|
|
17
|
+
},
|
|
18
|
+
allowPositionals: true,
|
|
19
|
+
});
|
|
20
|
+
const { generateSamples } = await import('../../authoring/generator.js');
|
|
21
|
+
const { readFileSync, writeFileSync } = await import('node:fs');
|
|
22
|
+
const count = Math.max(1, Number(values.count) || 5);
|
|
23
|
+
const model = values.model;
|
|
24
|
+
if (values.batch) {
|
|
25
|
+
// Batch mode: generate for all skills missing eval-samples
|
|
26
|
+
const skillDir = resolve(values['skill-dir']);
|
|
27
|
+
if (!existsSync(skillDir)) {
|
|
28
|
+
console.error(tCli('cli.common.skill_dir_not_found', lang, { path: skillDir }));
|
|
29
|
+
throw new CliExit(1);
|
|
30
|
+
}
|
|
31
|
+
const { readdirSync, statSync } = await import('node:fs');
|
|
32
|
+
const entries = readdirSync(skillDir);
|
|
33
|
+
let generated = 0;
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
let name;
|
|
36
|
+
let skillPath;
|
|
37
|
+
let samplesPath;
|
|
38
|
+
const fullPath = join(skillDir, entry);
|
|
39
|
+
if (entry.endsWith('.md') && !entry.endsWith('.eval-samples.json')) {
|
|
40
|
+
name = entry.slice(0, -3);
|
|
41
|
+
skillPath = fullPath;
|
|
42
|
+
samplesPath = join(skillDir, `${name}.eval-samples.json`);
|
|
43
|
+
}
|
|
44
|
+
else if (statSync(fullPath).isDirectory()) {
|
|
45
|
+
const skillMd = join(fullPath, 'SKILL.md');
|
|
46
|
+
if (!existsSync(skillMd))
|
|
47
|
+
continue;
|
|
48
|
+
name = entry;
|
|
49
|
+
skillPath = skillMd;
|
|
50
|
+
samplesPath = join(fullPath, 'eval-samples.json');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (existsSync(samplesPath)) {
|
|
56
|
+
process.stderr.write(tCli('cli.gen.skill_skipped_existing', lang, { name }));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
process.stderr.write(tCli('cli.gen.skill_generating', lang, { name, count }));
|
|
60
|
+
try {
|
|
61
|
+
const skillContent = readFileSync(skillPath, 'utf-8');
|
|
62
|
+
const { samples, costUSD } = await generateSamples({ skillContent, count, model });
|
|
63
|
+
writeFileSync(samplesPath, JSON.stringify(samples, null, 2));
|
|
64
|
+
const cost = costUSD > 0 ? ` $${costUSD.toFixed(4)}` : '';
|
|
65
|
+
process.stderr.write(tCli('cli.gen.skill_done', lang, {
|
|
66
|
+
name, n: samples.length, path: samplesPath, cost,
|
|
67
|
+
}));
|
|
68
|
+
generated++;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
process.stderr.write(tCli('cli.gen.skill_failed', lang, {
|
|
72
|
+
name, message: err.message,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (generated === 0) {
|
|
77
|
+
console.log(tCli('cli.gen.batch_none_needed', lang));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(tCli('cli.gen.batch_summary', lang, { n: generated }));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Single skill mode
|
|
85
|
+
const skillPath = argv.find((a) => !a.startsWith('-'));
|
|
86
|
+
if (!skillPath) {
|
|
87
|
+
console.error(tCli('cli.gen.specify_skill_path', lang));
|
|
88
|
+
throw new CliExit(1);
|
|
89
|
+
}
|
|
90
|
+
const resolvedPath = resolve(skillPath);
|
|
91
|
+
if (!existsSync(resolvedPath)) {
|
|
92
|
+
console.error(tCli('cli.common.skill_file_not_found', lang, { path: resolvedPath }));
|
|
93
|
+
throw new CliExit(1);
|
|
94
|
+
}
|
|
95
|
+
const skillContent = readFileSync(resolvedPath, 'utf-8');
|
|
96
|
+
const outputPath = resolve('eval-samples.json');
|
|
97
|
+
if (existsSync(outputPath)) {
|
|
98
|
+
console.error(tCli('cli.gen.samples_already_exists', lang));
|
|
99
|
+
throw new CliExit(1);
|
|
100
|
+
}
|
|
101
|
+
process.stderr.write(tCli('cli.gen.single_generating', lang, { count }));
|
|
102
|
+
try {
|
|
103
|
+
const { samples, costUSD } = await generateSamples({ skillContent, count, model });
|
|
104
|
+
writeFileSync(outputPath, JSON.stringify(samples, null, 2));
|
|
105
|
+
const cost = costUSD > 0 ? ` $${costUSD.toFixed(4)}` : '';
|
|
106
|
+
process.stderr.write(tCli('cli.gen.single_done', lang, {
|
|
107
|
+
n: samples.length, path: outputPath, cost,
|
|
108
|
+
}));
|
|
109
|
+
console.log(tCli('cli.gen.review_hint', lang));
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
// CliExit 透传,保持 eval / improve / doctor 的一致性约束。
|
|
113
|
+
if (err instanceof CliExit)
|
|
114
|
+
throw err;
|
|
115
|
+
console.error(tCli('cli.gen.failed', lang, { message: err.message }));
|
|
116
|
+
throw new CliExit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=improve-samples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-samples.js","sourceRoot":"","sources":["../../../../src/cli/commands/improve-samples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-skill.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/improve-skill.ts"],"names":[],"mappings":"AA0CA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G3D"}
|