oh-my-knowledge 0.29.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.
Files changed (253) hide show
  1. package/README.md +12 -5
  2. package/README.zh.md +12 -5
  3. package/dist/src/analysis/report-diagnostics.js +2 -0
  4. package/dist/src/analysis/report-diagnostics.js.map +1 -1
  5. package/dist/src/authoring/evolver.d.ts +7 -1
  6. package/dist/src/authoring/evolver.d.ts.map +1 -1
  7. package/dist/src/authoring/evolver.js +8 -5
  8. package/dist/src/authoring/evolver.js.map +1 -1
  9. package/dist/src/authoring/generator.d.ts +21 -23
  10. package/dist/src/authoring/generator.d.ts.map +1 -1
  11. package/dist/src/authoring/generator.js +621 -40
  12. package/dist/src/authoring/generator.js.map +1 -1
  13. package/dist/src/authoring/sample-fixer.d.ts +45 -0
  14. package/dist/src/authoring/sample-fixer.d.ts.map +1 -0
  15. package/dist/src/authoring/sample-fixer.js +186 -0
  16. package/dist/src/authoring/sample-fixer.js.map +1 -0
  17. package/dist/src/cli/commands/evolve.d.ts.map +1 -1
  18. package/dist/src/cli/commands/evolve.js +17 -0
  19. package/dist/src/cli/commands/evolve.js.map +1 -1
  20. package/dist/src/cli/commands/observe.js +2 -1
  21. package/dist/src/cli/commands/observe.js.map +1 -1
  22. package/dist/src/cli/commands/sample.d.ts +13 -0
  23. package/dist/src/cli/commands/sample.d.ts.map +1 -1
  24. package/dist/src/cli/commands/sample.js +307 -13
  25. package/dist/src/cli/commands/sample.js.map +1 -1
  26. package/dist/src/cli/i18n-dict.d.ts +1 -1
  27. package/dist/src/cli/i18n-dict.d.ts.map +1 -1
  28. package/dist/src/cli/i18n-dict.js +64 -6
  29. package/dist/src/cli/i18n-dict.js.map +1 -1
  30. package/dist/src/cli/parse-run-config.d.ts +14 -2
  31. package/dist/src/cli/parse-run-config.d.ts.map +1 -1
  32. package/dist/src/cli/parse-run-config.js +62 -10
  33. package/dist/src/cli/parse-run-config.js.map +1 -1
  34. package/dist/src/doctor/health/builtin-dimensions.d.ts.map +1 -1
  35. package/dist/src/doctor/health/builtin-dimensions.js +20 -23
  36. package/dist/src/doctor/health/builtin-dimensions.js.map +1 -1
  37. package/dist/src/doctor/health/composer.d.ts.map +1 -1
  38. package/dist/src/doctor/health/composer.js +7 -3
  39. package/dist/src/doctor/health/composer.js.map +1 -1
  40. package/dist/src/doctor/health/dimension-spec.d.ts +1 -0
  41. package/dist/src/doctor/health/dimension-spec.d.ts.map +1 -1
  42. package/dist/src/doctor/health/parser.d.ts.map +1 -1
  43. package/dist/src/doctor/health/parser.js +1 -0
  44. package/dist/src/doctor/health/parser.js.map +1 -1
  45. package/dist/src/doctor/health/prompt-builder.js +25 -17
  46. package/dist/src/doctor/health/prompt-builder.js.map +1 -1
  47. package/dist/src/doctor/html-renderer.d.ts.map +1 -1
  48. package/dist/src/doctor/html-renderer.js +76 -66
  49. package/dist/src/doctor/html-renderer.js.map +1 -1
  50. package/dist/src/doctor/rules.d.ts.map +1 -1
  51. package/dist/src/doctor/rules.js +32 -0
  52. package/dist/src/doctor/rules.js.map +1 -1
  53. package/dist/src/eval-core/cache.d.ts +16 -2
  54. package/dist/src/eval-core/cache.d.ts.map +1 -1
  55. package/dist/src/eval-core/cache.js +86 -15
  56. package/dist/src/eval-core/cache.js.map +1 -1
  57. package/dist/src/eval-core/evaluation-execution.d.ts +11 -1
  58. package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -1
  59. package/dist/src/eval-core/evaluation-execution.js +78 -6
  60. package/dist/src/eval-core/evaluation-execution.js.map +1 -1
  61. package/dist/src/eval-core/evaluation-job.d.ts +2 -1
  62. package/dist/src/eval-core/evaluation-job.d.ts.map +1 -1
  63. package/dist/src/eval-core/evaluation-job.js +2 -1
  64. package/dist/src/eval-core/evaluation-job.js.map +1 -1
  65. package/dist/src/eval-core/evaluation-reporting.d.ts +7 -0
  66. package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -1
  67. package/dist/src/eval-core/evaluation-reporting.js +19 -2
  68. package/dist/src/eval-core/evaluation-reporting.js.map +1 -1
  69. package/dist/src/eval-core/execution-strategy.d.ts +1 -1
  70. package/dist/src/eval-core/execution-strategy.d.ts.map +1 -1
  71. package/dist/src/eval-core/execution-strategy.js +12 -1
  72. package/dist/src/eval-core/execution-strategy.js.map +1 -1
  73. package/dist/src/eval-core/mock-hook.cjs +203 -0
  74. package/dist/src/eval-core/mocks-runtime.d.ts +96 -0
  75. package/dist/src/eval-core/mocks-runtime.d.ts.map +1 -0
  76. package/dist/src/eval-core/mocks-runtime.js +323 -0
  77. package/dist/src/eval-core/mocks-runtime.js.map +1 -0
  78. package/dist/src/eval-core/schema.d.ts.map +1 -1
  79. package/dist/src/eval-core/schema.js +18 -5
  80. package/dist/src/eval-core/schema.js.map +1 -1
  81. package/dist/src/eval-core/task-planner.d.ts +9 -1
  82. package/dist/src/eval-core/task-planner.d.ts.map +1 -1
  83. package/dist/src/eval-core/task-planner.js +40 -1
  84. package/dist/src/eval-core/task-planner.js.map +1 -1
  85. package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +5 -1
  86. package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -1
  87. package/dist/src/eval-workflows/batch-evaluation-workflow.js +2 -1
  88. package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -1
  89. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +22 -1
  90. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
  91. package/dist/src/eval-workflows/evaluation-pipeline.js +39 -12
  92. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
  93. package/dist/src/eval-workflows/evaluation-preparation.d.ts +5 -0
  94. package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -1
  95. package/dist/src/eval-workflows/evaluation-preparation.js +3 -1
  96. package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -1
  97. package/dist/src/eval-workflows/run-evaluation.d.ts +12 -2
  98. package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
  99. package/dist/src/eval-workflows/run-evaluation.js +17 -5
  100. package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
  101. package/dist/src/executors/claude-cli.d.ts +1 -1
  102. package/dist/src/executors/claude-cli.d.ts.map +1 -1
  103. package/dist/src/executors/claude-cli.js +57 -6
  104. package/dist/src/executors/claude-cli.js.map +1 -1
  105. package/dist/src/executors/claude-sdk-trace.d.ts.map +1 -1
  106. package/dist/src/executors/claude-sdk-trace.js +10 -4
  107. package/dist/src/executors/claude-sdk-trace.js.map +1 -1
  108. package/dist/src/executors/claude-sdk.d.ts +1 -1
  109. package/dist/src/executors/claude-sdk.d.ts.map +1 -1
  110. package/dist/src/executors/claude-sdk.js +25 -2
  111. package/dist/src/executors/claude-sdk.js.map +1 -1
  112. package/dist/src/executors/shared.d.ts +1 -1
  113. package/dist/src/executors/shared.d.ts.map +1 -1
  114. package/dist/src/executors/shared.js +6 -1
  115. package/dist/src/executors/shared.js.map +1 -1
  116. package/dist/src/grading/assertions.d.ts +5 -0
  117. package/dist/src/grading/assertions.d.ts.map +1 -1
  118. package/dist/src/grading/assertions.js +27 -1
  119. package/dist/src/grading/assertions.js.map +1 -1
  120. package/dist/src/grading/diagnostic.d.ts +40 -0
  121. package/dist/src/grading/diagnostic.d.ts.map +1 -0
  122. package/dist/src/grading/diagnostic.js +450 -0
  123. package/dist/src/grading/diagnostic.js.map +1 -0
  124. package/dist/src/grading/index.d.ts +5 -0
  125. package/dist/src/grading/index.d.ts.map +1 -1
  126. package/dist/src/grading/judge.d.ts.map +1 -1
  127. package/dist/src/grading/judge.js +54 -2
  128. package/dist/src/grading/judge.js.map +1 -1
  129. package/dist/src/grading/layered-scores.d.ts.map +1 -1
  130. package/dist/src/grading/layered-scores.js +1 -0
  131. package/dist/src/grading/layered-scores.js.map +1 -1
  132. package/dist/src/inputs/eval-config.js +19 -0
  133. package/dist/src/inputs/eval-config.js.map +1 -1
  134. package/dist/src/inputs/load-samples.d.ts +22 -2
  135. package/dist/src/inputs/load-samples.d.ts.map +1 -1
  136. package/dist/src/inputs/load-samples.js +193 -22
  137. package/dist/src/inputs/load-samples.js.map +1 -1
  138. package/dist/src/inputs/skill-loader.d.ts.map +1 -1
  139. package/dist/src/inputs/skill-loader.js +11 -3
  140. package/dist/src/inputs/skill-loader.js.map +1 -1
  141. package/dist/src/observability/experience.d.ts +260 -0
  142. package/dist/src/observability/experience.d.ts.map +1 -0
  143. package/dist/src/observability/experience.js +1233 -0
  144. package/dist/src/observability/experience.js.map +1 -0
  145. package/dist/src/observability/inbox-view-model.d.ts +11 -1
  146. package/dist/src/observability/inbox-view-model.d.ts.map +1 -1
  147. package/dist/src/observability/inbox-view-model.js +76 -3
  148. package/dist/src/observability/inbox-view-model.js.map +1 -1
  149. package/dist/src/observability/inbox.d.ts +27 -2
  150. package/dist/src/observability/inbox.d.ts.map +1 -1
  151. package/dist/src/observability/inbox.js +46 -8
  152. package/dist/src/observability/inbox.js.map +1 -1
  153. package/dist/src/observability/problem-patterns.d.ts +51 -0
  154. package/dist/src/observability/problem-patterns.d.ts.map +1 -0
  155. package/dist/src/observability/problem-patterns.js +205 -0
  156. package/dist/src/observability/problem-patterns.js.map +1 -0
  157. package/dist/src/observability/review-state.d.ts +54 -0
  158. package/dist/src/observability/review-state.d.ts.map +1 -0
  159. package/dist/src/observability/review-state.js +131 -0
  160. package/dist/src/observability/review-state.js.map +1 -0
  161. package/dist/src/observability/skill-chain-advisories.d.ts +25 -0
  162. package/dist/src/observability/skill-chain-advisories.d.ts.map +1 -0
  163. package/dist/src/observability/skill-chain-advisories.js +69 -0
  164. package/dist/src/observability/skill-chain-advisories.js.map +1 -0
  165. package/dist/src/observability/skill-chain.d.ts +61 -0
  166. package/dist/src/observability/skill-chain.d.ts.map +1 -0
  167. package/dist/src/observability/skill-chain.js +233 -0
  168. package/dist/src/observability/skill-chain.js.map +1 -0
  169. package/dist/src/observability/text-signals.d.ts +7 -0
  170. package/dist/src/observability/text-signals.d.ts.map +1 -0
  171. package/dist/src/observability/text-signals.js +22 -0
  172. package/dist/src/observability/text-signals.js.map +1 -0
  173. package/dist/src/observability/trace-adapter.d.ts +1 -1
  174. package/dist/src/observability/trace-adapter.d.ts.map +1 -1
  175. package/dist/src/observability/trace-adapter.js +1 -1
  176. package/dist/src/observability/trace-adapter.js.map +1 -1
  177. package/dist/src/observability/trace-attribution.d.ts +29 -1
  178. package/dist/src/observability/trace-attribution.d.ts.map +1 -1
  179. package/dist/src/observability/trace-attribution.js +106 -10
  180. package/dist/src/observability/trace-attribution.js.map +1 -1
  181. package/dist/src/observability/trace-segmenter.d.ts +11 -1
  182. package/dist/src/observability/trace-segmenter.d.ts.map +1 -1
  183. package/dist/src/observability/trace-segmenter.js +117 -28
  184. package/dist/src/observability/trace-segmenter.js.map +1 -1
  185. package/dist/src/observability/trace-source.d.ts +28 -1
  186. package/dist/src/observability/trace-source.d.ts.map +1 -1
  187. package/dist/src/observability/trace-source.js +356 -6
  188. package/dist/src/observability/trace-source.js.map +1 -1
  189. package/dist/src/renderer/html-renderer.d.ts.map +1 -1
  190. package/dist/src/renderer/html-renderer.js +229 -171
  191. package/dist/src/renderer/html-renderer.js.map +1 -1
  192. package/dist/src/renderer/layout.d.ts.map +1 -1
  193. package/dist/src/renderer/layout.js +108 -61
  194. package/dist/src/renderer/layout.js.map +1 -1
  195. package/dist/src/renderer/observation-inbox-renderer.d.ts.map +1 -1
  196. package/dist/src/renderer/observation-inbox-renderer.js +4567 -91
  197. package/dist/src/renderer/observation-inbox-renderer.js.map +1 -1
  198. package/dist/src/renderer/skill-detail-renderer.d.ts +15 -0
  199. package/dist/src/renderer/skill-detail-renderer.d.ts.map +1 -0
  200. package/dist/src/renderer/skill-detail-renderer.js +1234 -0
  201. package/dist/src/renderer/skill-detail-renderer.js.map +1 -0
  202. package/dist/src/renderer/skill-list-renderer.d.ts +4 -0
  203. package/dist/src/renderer/skill-list-renderer.d.ts.map +1 -0
  204. package/dist/src/renderer/skill-list-renderer.js +327 -0
  205. package/dist/src/renderer/skill-list-renderer.js.map +1 -0
  206. package/dist/src/renderer/summary.d.ts.map +1 -1
  207. package/dist/src/renderer/summary.js +78 -50
  208. package/dist/src/renderer/summary.js.map +1 -1
  209. package/dist/src/renderer/table.d.ts.map +1 -1
  210. package/dist/src/renderer/table.js +213 -167
  211. package/dist/src/renderer/table.js.map +1 -1
  212. package/dist/src/renderer/test-view.d.ts +66 -0
  213. package/dist/src/renderer/test-view.d.ts.map +1 -0
  214. package/dist/src/renderer/test-view.js +905 -0
  215. package/dist/src/renderer/test-view.js.map +1 -0
  216. package/dist/src/server/report-server.d.ts +4 -1
  217. package/dist/src/server/report-server.d.ts.map +1 -1
  218. package/dist/src/server/report-server.js +149 -4
  219. package/dist/src/server/report-server.js.map +1 -1
  220. package/dist/src/server/report-store.d.ts.map +1 -1
  221. package/dist/src/server/report-store.js +33 -1
  222. package/dist/src/server/report-store.js.map +1 -1
  223. package/dist/src/server/skill-index.d.ts +77 -0
  224. package/dist/src/server/skill-index.d.ts.map +1 -0
  225. package/dist/src/server/skill-index.js +331 -0
  226. package/dist/src/server/skill-index.js.map +1 -0
  227. package/dist/src/server/skill-insights.d.ts +92 -0
  228. package/dist/src/server/skill-insights.d.ts.map +1 -0
  229. package/dist/src/server/skill-insights.js +676 -0
  230. package/dist/src/server/skill-insights.js.map +1 -0
  231. package/dist/src/shared/hard-rules.d.ts +40 -0
  232. package/dist/src/shared/hard-rules.d.ts.map +1 -0
  233. package/dist/src/shared/hard-rules.js +200 -0
  234. package/dist/src/shared/hard-rules.js.map +1 -0
  235. package/dist/src/shared/time.d.ts +2 -0
  236. package/dist/src/shared/time.d.ts.map +1 -0
  237. package/dist/src/shared/time.js +10 -0
  238. package/dist/src/shared/time.js.map +1 -0
  239. package/dist/src/types/eval.d.ts +83 -0
  240. package/dist/src/types/eval.d.ts.map +1 -1
  241. package/dist/src/types/executor.d.ts +43 -0
  242. package/dist/src/types/executor.d.ts.map +1 -1
  243. package/dist/src/types/judge.d.ts +76 -0
  244. package/dist/src/types/judge.d.ts.map +1 -1
  245. package/dist/src/types/judge.js +3 -1
  246. package/dist/src/types/judge.js.map +1 -1
  247. package/dist/src/types/report.d.ts +63 -3
  248. package/dist/src/types/report.d.ts.map +1 -1
  249. package/dist/src/util/safe-slice.d.ts +23 -0
  250. package/dist/src/util/safe-slice.d.ts.map +1 -0
  251. package/dist/src/util/safe-slice.js +33 -0
  252. package/dist/src/util/safe-slice.js.map +1 -0
  253. package/package.json +5 -4
@@ -1,9 +1,143 @@
1
1
  import { CliExit } from '../cli-exit.js';
2
- import { resolve, join } from 'node:path';
3
- import { existsSync } from 'node:fs';
2
+ import { resolve, join, basename, dirname, extname } from 'node:path';
3
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import yaml from 'js-yaml';
4
5
  import { tCli, langFromArgv } from '../i18n.js';
5
- import { COMMON_OPTIONS } from '../parse-run-config.js';
6
+ import { COMMON_OPTIONS, DEFAULT_REPORTS_DIR } from '../parse-run-config.js';
6
7
  import { parseArgsStrictOrExit } from '../parse-strict.js';
8
+ import { loadSamples, parseYaml } from '../../inputs/load-samples.js';
9
+ import { hashSample, hashString } from '../../eval-core/evaluation-reporting.js';
10
+ function isRecord(value) {
11
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
12
+ }
13
+ function isYamlPath(filePath) {
14
+ return /\.(ya?ml)$/i.test(filePath);
15
+ }
16
+ function parseSampleDocument(filePath) {
17
+ const raw = readFileSync(filePath, 'utf-8');
18
+ return isYamlPath(filePath) ? parseYaml(raw) : JSON.parse(raw);
19
+ }
20
+ function getSamplesArray(document, filePath) {
21
+ if (Array.isArray(document))
22
+ return document;
23
+ if (isRecord(document) && Array.isArray(document.samples))
24
+ return document.samples;
25
+ throw new Error(`invalid samples file shape: ${filePath} (expected an array or an object with a 'samples' field)`);
26
+ }
27
+ function stringifySampleDocument(filePath, document) {
28
+ if (isYamlPath(filePath))
29
+ return yaml.dump(document, { lineWidth: -1, noRefs: true });
30
+ return JSON.stringify(document, null, 2);
31
+ }
32
+ function formatIdList(ids) {
33
+ const shown = ids.slice(0, 5);
34
+ const suffix = ids.length > shown.length ? ` +${ids.length - shown.length}` : '';
35
+ return shown.join(', ') + suffix;
36
+ }
37
+ export function collectSampleDesignFailureIds(report, treatmentName) {
38
+ const ids = new Set();
39
+ for (const entry of report.results) {
40
+ const rootCause = entry.variants[treatmentName]?.diagnostic?.rootCause ?? [];
41
+ if (rootCause.includes('sample_design'))
42
+ ids.add(entry.sample_id);
43
+ }
44
+ return ids;
45
+ }
46
+ export function assertFixReportMatchesCurrentInputs(params) {
47
+ const { report, treatmentName, skillContent, samples, sampleIds } = params;
48
+ const lang = params.lang ?? 'zh';
49
+ const issues = [];
50
+ const expectedSkillHash = report.meta.artifactHashes?.[treatmentName];
51
+ const currentSkillHash = hashString(skillContent);
52
+ if (!expectedSkillHash) {
53
+ issues.push(lang === 'zh'
54
+ ? `报告缺少 ${treatmentName} 的 skill 指纹,无法确认诊断对应当前 SKILL.md。`
55
+ : `Report is missing the skill hash for ${treatmentName}; cannot verify it matches the current SKILL.md.`);
56
+ }
57
+ else if (expectedSkillHash !== currentSkillHash) {
58
+ issues.push(lang === 'zh'
59
+ ? `skill 指纹不一致:报告 ${expectedSkillHash},当前 ${currentSkillHash}。`
60
+ : `Skill hash mismatch: report ${expectedSkillHash}, current ${currentSkillHash}.`);
61
+ }
62
+ const reportSampleHashes = report.meta.sampleHashes;
63
+ if (!reportSampleHashes) {
64
+ issues.push(lang === 'zh'
65
+ ? '报告缺少用例指纹,无法确认 sample_design 诊断对应当前 samples。'
66
+ : 'Report is missing sample hashes; cannot verify sample_design diagnostics match the current samples.');
67
+ }
68
+ else {
69
+ const samplesById = new Map(samples.map((sample) => [sample.sample_id, sample]));
70
+ const missingCurrentSamples = [];
71
+ const missingReportHashes = [];
72
+ const mismatchedSamples = [];
73
+ for (const sampleId of sampleIds) {
74
+ const currentSample = samplesById.get(sampleId);
75
+ if (!currentSample) {
76
+ missingCurrentSamples.push(sampleId);
77
+ continue;
78
+ }
79
+ const expectedSampleHash = reportSampleHashes[sampleId];
80
+ if (!expectedSampleHash) {
81
+ missingReportHashes.push(sampleId);
82
+ continue;
83
+ }
84
+ const currentSampleHash = hashSample(currentSample);
85
+ if (expectedSampleHash !== currentSampleHash) {
86
+ mismatchedSamples.push(sampleId);
87
+ }
88
+ }
89
+ if (missingCurrentSamples.length > 0) {
90
+ issues.push(lang === 'zh'
91
+ ? `当前 samples 缺少报告中的用例:${formatIdList(missingCurrentSamples)}。`
92
+ : `Current samples are missing report sample(s): ${formatIdList(missingCurrentSamples)}.`);
93
+ }
94
+ if (missingReportHashes.length > 0) {
95
+ issues.push(lang === 'zh'
96
+ ? `报告缺少这些用例的指纹:${formatIdList(missingReportHashes)}。`
97
+ : `Report is missing hashes for sample(s): ${formatIdList(missingReportHashes)}.`);
98
+ }
99
+ if (mismatchedSamples.length > 0) {
100
+ issues.push(lang === 'zh'
101
+ ? `用例指纹不一致:${formatIdList(mismatchedSamples)}。`
102
+ : `Sample hash mismatch: ${formatIdList(mismatchedSamples)}.`);
103
+ }
104
+ }
105
+ if (issues.length === 0)
106
+ return;
107
+ const heading = lang === 'zh'
108
+ ? '报告与当前输入不一致,已停止自动修复。'
109
+ : 'Report does not match the current inputs; automatic fixing stopped.';
110
+ const hint = lang === 'zh'
111
+ ? '请先重新运行 omk eval,再执行 omk sample --fix。'
112
+ : 'Re-run omk eval first, then run omk sample --fix again.';
113
+ throw new Error([heading, ...issues, hint].join('\n'));
114
+ }
115
+ export function writeFixedSamplesToSources(loaded, samples, changedIds) {
116
+ if (changedIds.size === 0)
117
+ return [];
118
+ const fixedById = new Map(samples.map((sample) => [sample.sample_id, sample]));
119
+ const idsByFile = new Map();
120
+ for (const sampleId of changedIds) {
121
+ const filePath = loaded.sampleSourceById[sampleId];
122
+ if (!filePath)
123
+ throw new Error(`sample ${sampleId} source file not found`);
124
+ const ids = idsByFile.get(filePath) ?? new Set();
125
+ ids.add(sampleId);
126
+ idsByFile.set(filePath, ids);
127
+ }
128
+ const written = [];
129
+ for (const [filePath, ids] of idsByFile.entries()) {
130
+ const document = parseSampleDocument(filePath);
131
+ const fileSamples = getSamplesArray(document, filePath);
132
+ const nextSamples = fileSamples.map((sample) => (ids.has(sample.sample_id) ? (fixedById.get(sample.sample_id) ?? sample) : sample));
133
+ const nextDocument = Array.isArray(document)
134
+ ? nextSamples
135
+ : { ...document, samples: nextSamples };
136
+ writeFileSync(filePath, stringifySampleDocument(filePath, nextDocument));
137
+ written.push(filePath);
138
+ }
139
+ return written;
140
+ }
7
141
  export async function execute(argv) {
8
142
  const lang = langFromArgv(argv);
9
143
  const { values, positionals } = parseArgsStrictOrExit({
@@ -11,16 +145,32 @@ export async function execute(argv) {
11
145
  options: {
12
146
  ...COMMON_OPTIONS,
13
147
  batch: { type: 'boolean', default: false },
14
- count: { type: 'string', default: '5' },
15
- model: { type: 'string', default: 'sonnet' },
148
+ count: { type: 'string' },
149
+ model: { type: 'string', default: 'opus' },
16
150
  'skill-dir': { type: 'string', default: 'skills' },
151
+ focus: { type: 'string' },
152
+ fix: { type: 'boolean', default: false },
153
+ 'reports-dir': { type: 'string' },
154
+ treatment: { type: 'string' },
17
155
  },
18
156
  allowPositionals: true,
19
157
  });
158
+ if (values.fix) {
159
+ await executeFix(values, positionals, lang);
160
+ return;
161
+ }
20
162
  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);
163
+ const { readFileSync, writeFileSync, mkdirSync } = await import('node:fs');
164
+ const path = await import('node:path');
165
+ // count 语义:用户显式给值 → 强制 N 条;不给 → undefined,LLM 按 skill 类型自定数量。
166
+ const count = values.count !== undefined
167
+ ? Math.max(1, Number(values.count) || 5)
168
+ : undefined;
23
169
  const model = values.model;
170
+ const focus = values.focus || undefined;
171
+ if (focus) {
172
+ process.stderr.write(tCli('cli.gen.focus_applied', lang, { focus }));
173
+ }
24
174
  if (values.batch) {
25
175
  // Batch mode: generate for all skills missing eval-samples
26
176
  const skillDir = resolve(values['skill-dir']);
@@ -37,17 +187,20 @@ export async function execute(argv) {
37
187
  let samplesPath;
38
188
  const fullPath = join(skillDir, entry);
39
189
  if (entry.endsWith('.md') && !entry.endsWith('.eval-samples.json')) {
190
+ // 单文件 skill 没有 ".omk/" 容器(无目录),沿用 sibling 文件 <name>.eval-samples.json
40
191
  name = entry.slice(0, -3);
41
192
  skillPath = fullPath;
42
193
  samplesPath = join(skillDir, `${name}.eval-samples.json`);
43
194
  }
44
195
  else if (statSync(fullPath).isDirectory()) {
196
+ // 目录 skill 走 omk 标准约定: <skill>/.omk/samples.json
197
+ // 与 loadSamples 的目录模式对齐(支持 .omk/ 下多文件合并)
45
198
  const skillMd = join(fullPath, 'SKILL.md');
46
199
  if (!existsSync(skillMd))
47
200
  continue;
48
201
  name = entry;
49
202
  skillPath = skillMd;
50
- samplesPath = join(fullPath, 'eval-samples.json');
203
+ samplesPath = join(fullPath, '.omk', 'samples.json');
51
204
  }
52
205
  else {
53
206
  continue;
@@ -56,10 +209,16 @@ export async function execute(argv) {
56
209
  process.stderr.write(tCli('cli.gen.skill_skipped_existing', lang, { name }));
57
210
  continue;
58
211
  }
59
- process.stderr.write(tCli('cli.gen.skill_generating', lang, { name, count }));
212
+ if (count !== undefined) {
213
+ process.stderr.write(tCli('cli.gen.skill_generating', lang, { name, count }));
214
+ }
215
+ else {
216
+ process.stderr.write(tCli('cli.gen.skill_generating_auto', lang, { name }));
217
+ }
60
218
  try {
61
219
  const skillContent = readFileSync(skillPath, 'utf-8');
62
- const { samples, costUSD } = await generateSamples({ skillContent, count, model });
220
+ const { samples, costUSD } = await generateSamples({ skillContent, count, model, focus });
221
+ mkdirSync(path.dirname(samplesPath), { recursive: true });
63
222
  writeFileSync(samplesPath, JSON.stringify(samples, null, 2));
64
223
  const cost = costUSD > 0 ? ` $${costUSD.toFixed(4)}` : '';
65
224
  process.stderr.write(tCli('cli.gen.skill_done', lang, {
@@ -94,14 +253,28 @@ export async function execute(argv) {
94
253
  throw new CliExit(1);
95
254
  }
96
255
  const skillContent = readFileSync(resolvedPath, 'utf-8');
97
- const outputPath = resolve('eval-samples.json');
256
+ // 输出路径推断:如果传入的是 <skill>/SKILL.md(目录式 skill),
257
+ // 写到 <skill>/.omk/samples.json(omk 标准约定);
258
+ // 否则(SKILL.md 不存在 / 单文件 skill / 直接跑 .md)落到 cwd 兜底。
259
+ const skillBasename = path.basename(resolvedPath);
260
+ const skillParentDir = path.dirname(resolvedPath);
261
+ const isStandardSkillLayout = skillBasename === 'SKILL.md';
262
+ const outputPath = isStandardSkillLayout
263
+ ? path.join(skillParentDir, '.omk', 'samples.json')
264
+ : resolve('eval-samples.json');
98
265
  if (existsSync(outputPath)) {
99
266
  console.error(tCli('cli.gen.samples_already_exists', lang));
100
267
  throw new CliExit(1);
101
268
  }
102
- process.stderr.write(tCli('cli.gen.single_generating', lang, { count }));
269
+ if (count !== undefined) {
270
+ process.stderr.write(tCli('cli.gen.single_generating', lang, { count }));
271
+ }
272
+ else {
273
+ process.stderr.write(tCli('cli.gen.single_generating_auto', lang));
274
+ }
103
275
  try {
104
- const { samples, costUSD } = await generateSamples({ skillContent, count, model });
276
+ const { samples, costUSD } = await generateSamples({ skillContent, count, model, focus });
277
+ mkdirSync(path.dirname(outputPath), { recursive: true });
105
278
  writeFileSync(outputPath, JSON.stringify(samples, null, 2));
106
279
  const cost = costUSD > 0 ? ` $${costUSD.toFixed(4)}` : '';
107
280
  process.stderr.write(tCli('cli.gen.single_done', lang, {
@@ -118,4 +291,125 @@ export async function execute(argv) {
118
291
  }
119
292
  }
120
293
  }
294
+ async function executeFix(values, positionals, lang) {
295
+ const { fixSamples } = await import('../../authoring/sample-fixer.js');
296
+ const { createFileStore } = await import('../../server/report-store.js');
297
+ const model = values.model ?? 'opus';
298
+ const reportsDir = resolve(values['reports-dir'] ?? DEFAULT_REPORTS_DIR);
299
+ // 1. Determine skill path and samples path
300
+ const skillPath = positionals[0];
301
+ if (!skillPath) {
302
+ console.error(lang === 'zh' ? '请指定 skill 路径,如: omk sample skills/my-skill/SKILL.md --fix' : 'Specify skill path: omk sample skills/my-skill/SKILL.md --fix');
303
+ throw new CliExit(1);
304
+ }
305
+ const resolvedSkillPath = resolve(skillPath);
306
+ if (!existsSync(resolvedSkillPath)) {
307
+ console.error(lang === 'zh' ? `skill 文件不存在: ${resolvedSkillPath}` : `Skill file not found: ${resolvedSkillPath}`);
308
+ throw new CliExit(1);
309
+ }
310
+ const isDir = basename(resolvedSkillPath) === 'SKILL.md';
311
+ const skillDir = isDir ? dirname(resolvedSkillPath) : dirname(resolvedSkillPath);
312
+ const samplesInput = isDir
313
+ ? join(skillDir, '.omk')
314
+ : resolve('eval-samples.json');
315
+ if (!existsSync(samplesInput)) {
316
+ console.error(lang === 'zh' ? `samples 路径不存在: ${samplesInput},先运行 omk sample 生成` : `Samples path not found: ${samplesInput}, run omk sample first`);
317
+ throw new CliExit(1);
318
+ }
319
+ // 2. Determine treatment name
320
+ const defaultTreatmentName = isDir
321
+ ? basename(skillDir)
322
+ : basename(resolvedSkillPath, extname(resolvedSkillPath));
323
+ const treatmentName = values.treatment ?? defaultTreatmentName;
324
+ // 3. Find the latest report
325
+ process.stderr.write(lang === 'zh' ? `🔍 正在查找 ${treatmentName} 的最新评测报告...\n` : `🔍 Scanning latest report for ${treatmentName}...\n`);
326
+ const store = createFileStore(reportsDir);
327
+ const reports = await store.findByVariant(treatmentName);
328
+ if (reports.length === 0) {
329
+ console.error(lang === 'zh' ? `未找到 ${treatmentName} 的评测报告(报告目录: ${reportsDir})` : `No eval report found for ${treatmentName} in ${reportsDir}`);
330
+ throw new CliExit(1);
331
+ }
332
+ const report = reports[0];
333
+ process.stderr.write(lang === 'zh' ? `📄 使用报告: ${report.id} (${report.meta?.timestamp ?? '?'})\n` : `📄 Using report: ${report.id} (${report.meta?.timestamp ?? '?'})\n`);
334
+ // 4. Load samples using the same semantics as eval.
335
+ let loadedSamples;
336
+ try {
337
+ loadedSamples = loadSamples(samplesInput);
338
+ }
339
+ catch (err) {
340
+ const message = err instanceof Error ? err.message : String(err);
341
+ console.error(lang === 'zh' ? `samples 加载失败: ${message}` : `Failed to load samples: ${message}`);
342
+ throw new CliExit(1);
343
+ }
344
+ const samples = loadedSamples.samples;
345
+ const skillContent = readFileSync(resolvedSkillPath, 'utf-8');
346
+ // 5. Count sample_design failures and verify this report still matches current inputs.
347
+ const sampleDesignIds = collectSampleDesignFailureIds(report, treatmentName);
348
+ const sampleDesignCount = sampleDesignIds.size;
349
+ if (sampleDesignCount === 0) {
350
+ process.stderr.write(lang === 'zh' ? '✅ 没有 sample_design 类型的失败,无需修复\n' : '✅ No sample_design failures found, nothing to fix\n');
351
+ return;
352
+ }
353
+ try {
354
+ assertFixReportMatchesCurrentInputs({
355
+ report,
356
+ treatmentName,
357
+ skillContent,
358
+ samples,
359
+ sampleIds: sampleDesignIds,
360
+ lang,
361
+ });
362
+ }
363
+ catch (err) {
364
+ console.error(err instanceof Error ? err.message : String(err));
365
+ throw new CliExit(1);
366
+ }
367
+ process.stderr.write(lang === 'zh' ? `🔧 发现 ${sampleDesignCount} 条 sample_design 失败,开始修复...\n` : `🔧 Found ${sampleDesignCount} sample_design failure(s), fixing...\n`);
368
+ // 6. Create executor wrapper
369
+ const { createExecutor } = await import('../../executors/index.js');
370
+ const exec = createExecutor('claude');
371
+ const executorFn = async (opts) => {
372
+ const result = await exec({
373
+ model: opts.model,
374
+ system: opts.system,
375
+ prompt: opts.prompt,
376
+ timeoutMs: opts.timeoutMs,
377
+ lean: opts.lean,
378
+ });
379
+ return { ok: result.ok, text: result.output ?? '', costUSD: result.costUSD };
380
+ };
381
+ // 7. Run fixes
382
+ const result = await fixSamples({
383
+ skillContent,
384
+ samples,
385
+ report,
386
+ treatmentKey: treatmentName,
387
+ executor: executorFn,
388
+ model,
389
+ });
390
+ // 8. Write back
391
+ let writtenFiles = [];
392
+ if (result.fixedCount > 0) {
393
+ const changedIds = new Set(result.fixes.filter((f) => f.changed).map((f) => f.sampleId));
394
+ writtenFiles = writeFixedSamplesToSources(loadedSamples, result.samples, changedIds);
395
+ }
396
+ // 9. Report
397
+ for (const f of result.fixes) {
398
+ if (f.changed) {
399
+ process.stderr.write(lang === 'zh' ? ` ✅ ${f.sampleId} 已修复\n` : ` ✅ ${f.sampleId} fixed\n`);
400
+ }
401
+ else {
402
+ process.stderr.write(lang === 'zh' ? ` ⚠ ${f.sampleId} 未修改${f.error ? `: ${f.error}` : ''}\n` : ` ⚠ ${f.sampleId} unchanged${f.error ? `: ${f.error}` : ''}\n`);
403
+ }
404
+ }
405
+ const cost = result.costUSD > 0 ? ` $${result.costUSD.toFixed(4)}` : '';
406
+ const outputTarget = writtenFiles.length === 0
407
+ ? samplesInput
408
+ : writtenFiles.length === 1
409
+ ? writtenFiles[0]
410
+ : `${writtenFiles.length} files`;
411
+ process.stderr.write(lang === 'zh'
412
+ ? `\n🔧 修复完成: ${result.fixedCount}/${sampleDesignCount} 条已修复 → ${outputTarget}${cost}\n`
413
+ : `\n🔧 Fix complete: ${result.fixedCount}/${sampleDesignCount} fixed → ${outputTarget}${cost}\n`);
414
+ }
121
415
  //# sourceMappingURL=sample.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../../src/cli/commands/sample.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../../src/cli/commands/sample.ts"],"names":[],"mappings":"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"}
@@ -45,7 +45,7 @@
45
45
  * 未来扩 Lang (zh-TW / ja / ko ...): 改 src/types/shared.ts 的 Lang union,
46
46
  * Record 类型自动强制每 key 加新语言版本。
47
47
  */
48
- export type CliMessageKey = 'cli.common.unknown_domain' | 'cli.init.scaffolded' | 'cli.init.next_steps_title' | 'cli.init.next_step_edit_samples' | 'cli.init.next_step_edit_skills' | 'cli.init.next_step_run' | 'cli.init.note_codex_executor' | 'cli.update.new_version_available' | 'cli.progress.preflight_starting' | 'cli.progress.sample_retry' | 'cli.progress.sample_error' | 'cli.progress.sample_executing' | 'cli.progress.sample_exec_done' | 'cli.progress.output_preview' | 'cli.progress.judging' | 'cli.progress.judged' | 'cli.progress.skipped' | 'cli.progress.sample_done' | 'cli.progress.sample_failed_done' | 'cli.run.invalid_repeat' | 'cli.run.invalid_judge_repeat' | 'cli.run.no_debias_length_active' | 'cli.run.invalid_bootstrap_samples' | 'cli.run.bootstrap_samples_too_large' | 'cli.run.power_warning_tiny_n' | 'cli.run.power_warning_small_n' | 'cli.run.power_warning_repeat_one' | 'cli.run.dry_run_no_scores' | 'cli.run.skill_section' | 'cli.run.run_section' | 'cli.run.batch_complete' | 'cli.run.batch_verdict_header' | 'cli.run.batch_child_report_missing' | 'cli.run.eval_complete' | 'cli.run.tally' | 'cli.run.report_saved' | 'cli.run.report_only_gate_skipped' | 'cli.run.report_server_running' | 'cli.run.report_server_view' | 'cli.run.report_server_stop' | 'cli.run.no_serve_in_non_tty' | 'cli.run.no_serve_view_hint' | 'cli.run.gold_load_failed' | 'cli.run.gold_load_issue' | 'cli.run.contamination_warning' | 'cli.common.error_prefix' | 'cli.observe.view_hint' | 'cli.common.skill_dir_not_found' | 'cli.common.skill_file_not_found' | 'cli.common.report_not_found' | 'cli.common.no_judge_model' | 'cli.common.judge_models_single_only' | 'cli.common.warn_load_samples_failed' | 'cli.studio.started' | 'cli.studio.stop_hint' | 'cli.studio.open_failed' | 'cli.gen.skill_skipped_existing' | 'cli.gen.skill_generating' | 'cli.gen.skill_done' | 'cli.gen.skill_failed' | 'cli.gen.batch_none_needed' | 'cli.gen.batch_summary' | 'cli.gen.specify_skill_path' | 'cli.gen.samples_already_exists' | 'cli.gen.single_generating' | 'cli.gen.single_done' | 'cli.gen.review_hint' | 'cli.gen.failed' | 'cli.evolve.specify_skill_path' | 'cli.evolve.section_header' | 'cli.evolve.round_baseline' | 'cli.evolve.round_error' | 'cli.evolve.round_done' | 'cli.evolve.summary' | 'cli.evolve.best_path' | 'cli.evolve.versions_saved' | 'cli.evolve.report_link' | 'cli.help.product_main' | 'cli.help.init_usage' | 'cli.help.eval' | 'cli.help.eval_gold' | 'cli.help.observe' | 'cli.help.observe_ingest' | 'cli.help.observe_inbox' | 'cli.help.observe_show' | 'cli.help.evolve' | 'cli.help.sample' | 'cli.help.studio' | 'cli.doctor.rule.skill_readable' | 'cli.doctor.rule.skill_metadata' | 'cli.doctor.rule.dependencies' | 'cli.doctor.rule.samples_contract' | 'cli.doctor.rule.skill_health_check' | 'cli.doctor.health.skipped' | 'cli.doctor.health.no_dimensions' | 'cli.doctor.health.fail.executor' | 'cli.doctor.health.fail.parse' | 'cli.doctor.health.fail.empty_output' | 'cli.doctor.health.hint.executor' | 'cli.doctor.health.hint.parse' | 'cli.doctor.health.dim.message' | 'cli.doctor.health.dim.missing' | 'cli.doctor.health.summary.label' | 'cli.doctor.health.summary.message' | 'cli.doctor.health.summary.no_top' | 'cli.doctor.health.dim.trigger-boundary' | 'cli.doctor.health.dim.doc-clarity' | 'cli.doctor.health.dim.instr-precision' | 'cli.doctor.health.dim.dependency' | 'cli.doctor.health.dim.tool-conventions' | 'cli.doctor.health.dim.security' | 'cli.doctor.health.dim.examples' | 'cli.doctor.skill_readable.pass' | 'cli.doctor.skill_metadata.pass' | 'cli.doctor.dependencies.pass' | 'cli.doctor.samples_contract.pass' | 'cli.doctor.skill_readable.fail.missing' | 'cli.doctor.skill_readable.fail.empty' | 'cli.doctor.skill_readable.fail.too_short' | 'cli.doctor.skill_readable.hint.missing' | 'cli.doctor.dependencies.hint.tool' | 'cli.doctor.dependencies.hint.file' | 'cli.doctor.dependencies.hint.env' | 'cli.doctor.dependencies.hint.preflight' | 'cli.doctor.dependencies.issue.tool_not_found' | 'cli.doctor.dependencies.issue.file_not_found' | 'cli.doctor.dependencies.issue.env_not_set' | 'cli.doctor.dependencies.issue.preflight_failed' | 'cli.doctor.skill_readable.hint.too_short' | 'cli.doctor.skill_metadata.fail.frontmatter_invalid' | 'cli.doctor.skill_metadata.fail.missing_skillmd' | 'cli.doctor.skill_metadata.hint.frontmatter' | 'cli.doctor.skill_metadata.hint.missing_skillmd' | 'cli.doctor.dependencies.fail' | 'cli.doctor.samples_contract.skipped' | 'cli.doctor.samples_contract.warn.empty' | 'cli.doctor.samples_contract.warn.missing_prompt' | 'cli.doctor.samples_contract.hint' | 'cli.help.doctor_usage' | 'cli.doctor.no_skill_found' | 'cli.doctor.samples_detected' | 'cli.doctor.gate_blocked' | 'cli.run.skip_connectivity_warning';
48
+ export type CliMessageKey = 'cli.common.unknown_domain' | 'cli.init.scaffolded' | 'cli.init.next_steps_title' | 'cli.init.next_step_edit_samples' | 'cli.init.next_step_edit_skills' | 'cli.init.next_step_run' | 'cli.init.note_codex_executor' | 'cli.update.new_version_available' | 'cli.progress.preflight_starting' | 'cli.progress.sample_retry' | 'cli.progress.sample_error' | 'cli.progress.sample_executing' | 'cli.progress.sample_exec_done' | 'cli.progress.output_preview' | 'cli.progress.judging' | 'cli.progress.judged' | 'cli.progress.skipped' | 'cli.progress.sample_done' | 'cli.progress.sample_failed_done' | 'cli.run.invalid_repeat' | 'cli.run.invalid_judge_repeat' | 'cli.run.no_debias_length_active' | 'cli.run.invalid_bootstrap_samples' | 'cli.run.bootstrap_samples_too_large' | 'cli.run.power_warning_tiny_n' | 'cli.run.power_warning_small_n' | 'cli.run.power_warning_repeat_one' | 'cli.run.dry_run_no_scores' | 'cli.run.skill_section' | 'cli.run.run_section' | 'cli.run.batch_complete' | 'cli.run.batch_verdict_header' | 'cli.run.batch_child_report_missing' | 'cli.run.eval_complete' | 'cli.run.tally' | 'cli.run.report_saved' | 'cli.run.report_only_gate_skipped' | 'cli.run.report_server_running' | 'cli.run.report_server_view' | 'cli.run.report_server_stop' | 'cli.run.no_serve_in_non_tty' | 'cli.run.no_serve_view_hint' | 'cli.run.gold_load_failed' | 'cli.run.gold_load_issue' | 'cli.run.contamination_warning' | 'cli.common.error_prefix' | 'cli.observe.view_hint' | 'cli.common.skill_dir_not_found' | 'cli.common.skill_file_not_found' | 'cli.common.report_not_found' | 'cli.common.no_judge_model' | 'cli.common.judge_models_single_only' | 'cli.common.warn_load_samples_failed' | 'cli.studio.started' | 'cli.studio.stop_hint' | 'cli.studio.open_failed' | 'cli.gen.skill_skipped_existing' | 'cli.gen.skill_generating' | 'cli.gen.skill_generating_auto' | 'cli.gen.skill_done' | 'cli.gen.skill_failed' | 'cli.gen.batch_none_needed' | 'cli.gen.batch_summary' | 'cli.gen.specify_skill_path' | 'cli.gen.samples_already_exists' | 'cli.gen.single_generating' | 'cli.gen.single_generating_auto' | 'cli.gen.single_done' | 'cli.gen.review_hint' | 'cli.gen.failed' | 'cli.gen.focus_applied' | 'cli.evolve.specify_skill_path' | 'cli.evolve.section_header' | 'cli.evolve.round_baseline' | 'cli.evolve.round_error' | 'cli.evolve.round_done' | 'cli.evolve.summary' | 'cli.evolve.best_path' | 'cli.evolve.versions_saved' | 'cli.evolve.report_link' | 'cli.help.product_main' | 'cli.help.init_usage' | 'cli.help.eval' | 'cli.help.eval_gold' | 'cli.help.observe' | 'cli.help.observe_ingest' | 'cli.help.observe_inbox' | 'cli.help.observe_show' | 'cli.help.evolve' | 'cli.help.sample' | 'cli.help.studio' | 'cli.doctor.rule.skill_readable' | 'cli.doctor.rule.skill_metadata' | 'cli.doctor.rule.dependencies' | 'cli.doctor.rule.samples_contract' | 'cli.doctor.rule.skill_health_check' | 'cli.doctor.health.skipped' | 'cli.doctor.health.no_dimensions' | 'cli.doctor.health.fail.executor' | 'cli.doctor.health.fail.parse' | 'cli.doctor.health.fail.empty_output' | 'cli.doctor.health.hint.executor' | 'cli.doctor.health.hint.parse' | 'cli.doctor.health.dim.message' | 'cli.doctor.health.dim.missing' | 'cli.doctor.health.summary.label' | 'cli.doctor.health.summary.message' | 'cli.doctor.health.summary.no_top' | 'cli.doctor.health.dim.trigger-boundary' | 'cli.doctor.health.dim.doc-clarity' | 'cli.doctor.health.dim.instr-precision' | 'cli.doctor.health.dim.dependency' | 'cli.doctor.health.dim.tool-conventions' | 'cli.doctor.health.dim.security' | 'cli.doctor.health.dim.examples' | 'cli.doctor.skill_readable.pass' | 'cli.doctor.skill_metadata.pass' | 'cli.doctor.dependencies.pass' | 'cli.doctor.samples_contract.pass' | 'cli.doctor.skill_readable.fail.missing' | 'cli.doctor.skill_readable.fail.empty' | 'cli.doctor.skill_readable.fail.too_short' | 'cli.doctor.skill_readable.hint.missing' | 'cli.doctor.dependencies.hint.tool' | 'cli.doctor.dependencies.hint.file' | 'cli.doctor.dependencies.hint.env' | 'cli.doctor.dependencies.hint.preflight' | 'cli.doctor.dependencies.issue.tool_not_found' | 'cli.doctor.dependencies.issue.file_not_found' | 'cli.doctor.dependencies.issue.env_not_set' | 'cli.doctor.dependencies.issue.preflight_failed' | 'cli.doctor.skill_readable.hint.too_short' | 'cli.doctor.skill_metadata.fail.frontmatter_invalid' | 'cli.doctor.skill_metadata.fail.hardrules_invalid' | 'cli.doctor.skill_metadata.fail.workflows_invalid' | 'cli.doctor.skill_metadata.fail.missing_skillmd' | 'cli.doctor.skill_metadata.hint.frontmatter' | 'cli.doctor.skill_metadata.hint.hardrules' | 'cli.doctor.skill_metadata.hint.workflows' | 'cli.doctor.skill_metadata.hint.missing_skillmd' | 'cli.doctor.dependencies.fail' | 'cli.doctor.samples_contract.skipped' | 'cli.doctor.samples_contract.warn.empty' | 'cli.doctor.samples_contract.warn.missing_prompt' | 'cli.doctor.samples_contract.hint' | 'cli.help.doctor_usage' | 'cli.doctor.no_skill_found' | 'cli.doctor.samples_detected' | 'cli.doctor.gate_blocked' | 'cli.run.skip_connectivity_warning';
49
49
  export interface CliMessage {
50
50
  zh: string;
51
51
  en: string;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-dict.d.ts","sourceRoot":"","sources":["../../../src/cli/i18n-dict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n-dict.d.ts","sourceRoot":"","sources":["../../../src/cli/i18n-dict.ts"],"names":[],"mappings":"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"}
@@ -278,6 +278,10 @@ export const CLI_DICT = {
278
278
  zh: '🔄 {name}: 正在生成 {count} 条评测用例...\n',
279
279
  en: '🔄 {name}: generating {count} test cases...\n',
280
280
  },
281
+ 'cli.gen.skill_generating_auto': {
282
+ zh: '🔄 {name}: 正在生成评测用例(数量由 LLM 按 skill 类型自动判断)...\n',
283
+ en: '🔄 {name}: generating test cases (count auto-decided by LLM based on skill type)...\n',
284
+ },
281
285
  'cli.gen.skill_done': {
282
286
  zh: '✅ {name}: 已生成 {n} 条用例 → {path}{cost}\n',
283
287
  en: '✅ {name}: generated {n} samples → {path}{cost}\n',
@@ -306,6 +310,10 @@ export const CLI_DICT = {
306
310
  zh: '🔄 正在生成 {count} 条评测用例...\n',
307
311
  en: '🔄 Generating {count} test cases...\n',
308
312
  },
313
+ 'cli.gen.single_generating_auto': {
314
+ zh: '🔄 正在生成评测用例(数量由 LLM 按 skill 类型自动判断)...\n',
315
+ en: '🔄 Generating test cases (count auto-decided by LLM based on skill type)...\n',
316
+ },
309
317
  'cli.gen.single_done': {
310
318
  zh: '✅ 已生成 {n} 条用例 → {path}{cost}\n',
311
319
  en: '✅ Generated {n} samples → {path}{cost}\n',
@@ -318,6 +326,10 @@ export const CLI_DICT = {
318
326
  zh: '生成失败: {message}',
319
327
  en: 'Generation failed: {message}',
320
328
  },
329
+ 'cli.gen.focus_applied': {
330
+ zh: '🎯 场景重点(--focus):{focus}\n',
331
+ en: '🎯 Focus scenarios (--focus): {focus}\n',
332
+ },
321
333
  'cli.evolve.specify_skill_path': {
322
334
  zh: '请指定 skill 文件路径, 例如: omk evolve skills/my-skill.md',
323
335
  en: 'Please specify a skill file path, e.g.: omk evolve skills/my-skill.md',
@@ -453,7 +465,8 @@ omk eval——离线评测 skill 版本,并给出 ship/no-ship verdict
453
465
  --treatment <v1,v2> 实验组 variant,逗号分隔
454
466
  --config <path> eval.yaml / JSON 配置
455
467
  --executor <name> 执行器:claude / claude-sdk / codex / openai / gemini / custom
456
- --model <name> 任务执行模型(默认:sonnet)
468
+ --model <name> 任务执行模型(默认:opus;想要省钱可改 sonnet / haiku;想钉版本可写 claude-opus-4-7)
469
+ --effort <level> 执行模型扩展思考预算 low / medium / high / xhigh / max(默认:low;高 effort 跨报告不可严格比较)
457
470
  --judge-models <list> 评委配置,例如 claude:haiku 或 claude:opus,openai:gpt-4o
458
471
  --dry-run 预览任务,不调用模型
459
472
  --batch 批量评测:每个 skill 独立 vs baseline
@@ -463,6 +476,9 @@ omk eval——离线评测 skill 版本,并给出 ship/no-ship verdict
463
476
  --trivial-diff <number> 实际可忽略 diff(默认:0.1)
464
477
  --report-only / --no-gate 生成报告并打印 verdict,但始终 exit 0
465
478
  --no-serve 评测后不自动启动报告 server
479
+ --no-judge 关闭 judge 主观评分(仍跑断言;layered 评分可能塌缩到事实/行为层)
480
+ --no-diagnostic 关闭 diagnostic 诊断 LLM 调用(默认开启,给 failed sample 出"哪错了 + 怎么改"建议)
481
+ --skip-doctor escape hatch:跳过 doctor 健康检查门禁(默认强制启用)。评测环境用 mock/stub 提供依赖时绕开 doctor 物理路径误报;garbage-in 风险由调用方承担
466
482
 
467
483
  示例:
468
484
  omk eval --control baseline --treatment my-skill # 单 skill 必要性测试(baseline 是保留 variant 名,代表「不注入 skill 的裸基线」)
@@ -484,7 +500,8 @@ Common options:
484
500
  --treatment <v1,v2> Treatment variants, comma-separated
485
501
  --config <path> eval.yaml / JSON config
486
502
  --executor <name> Executor: claude / claude-sdk / codex / openai / gemini / custom
487
- --model <name> Task execution model (default: sonnet)
503
+ --model <name> Task execution model (default: opus; pass --model sonnet/haiku to save cost, or claude-opus-4-7 to pin)
504
+ --effort <level> Reasoning effort for executor LLM: low / medium / high / xhigh / max (default: low; reports across efforts not strictly comparable)
488
505
  --judge-models <list> Judge config, e.g. claude:haiku or claude:opus,openai:gpt-4o
489
506
  --dry-run Preview tasks without model calls
490
507
  --batch Batch evaluation: each skill independently against baseline
@@ -494,6 +511,9 @@ Common options:
494
511
  --trivial-diff <number> Practically negligible diff (default: 0.1)
495
512
  --report-only / --no-gate Produce the report and print verdict, but always exit 0
496
513
  --no-serve Do not auto-start report server after evaluation
514
+ --no-judge Disable judge subjective scoring (assertions still run; layered scoring may collapse to fact/behavior layers)
515
+ --no-diagnostic Disable diagnostic LLM call (on by default; emits "what went wrong + how to fix" advice for failed samples)
516
+ --skip-doctor Escape hatch: bypass the doctor health check gate (default on). Useful when the eval environment supplies dependencies via mocks/stubs and doctor's physical-path checks misfire; caller owns garbage-in risk
497
517
 
498
518
  Examples:
499
519
  omk eval --control baseline --treatment my-skill # Single-skill necessity test (baseline is a reserved variant — "no skill injected")
@@ -714,11 +734,22 @@ omk sample——生成或补齐 eval-samples 评测用例
714
734
  omk sample <skill-path> [options]
715
735
  omk sample --batch [--skill-dir <dir>] [options]
716
736
 
737
+ 输出位置(默认):
738
+ <skill>/SKILL.md → <skill>/.omk/samples.json(omk 标准约定)
739
+ 其他 .md 路径 → 当前目录的 eval-samples.json(兜底)
740
+
717
741
  选项:
718
- --count <n> 生成用例数量(默认:5)
719
- --model <name> 生成模型(默认:sonnet)
742
+ --count <n> 强制生成 N 条(不指定时由 LLM 按 skill 类型自动判断:
743
+ 工作流型 6-8 条 / 原子型 4-6 条 / 混合型 5-7 条)
744
+ --model <name> 生成模型(默认:opus;lean+effort-low 已自动开,想省钱可改 sonnet/haiku)
745
+ --focus <text> 自然语言指定希望覆盖的场景(追加到 prompt,优先级高于自由发挥)
720
746
  --batch 为 skill 目录下缺少 eval-samples 的 skill 批量生成
721
747
  --skill-dir <path> skill 目录(batch 使用,默认:skills)
748
+
749
+ 示例:
750
+ omk improve samples skills/req-tool.md
751
+ omk improve samples skills/req-tool.md --count 8 \\
752
+ --focus "重点覆盖 tag 查询走 PROJECT 空 → WORKSPACE 兜底的多步流程,以及 search 失败的错误路径"
722
753
  `,
723
754
  en: `
724
755
  omk sample — generate or fill eval-samples test cases
@@ -727,11 +758,22 @@ Usage:
727
758
  omk sample <skill-path> [options]
728
759
  omk sample --batch [--skill-dir <dir>] [options]
729
760
 
761
+ Output path (default):
762
+ <skill>/SKILL.md → <skill>/.omk/samples.json (omk standard layout)
763
+ other .md paths → ./eval-samples.json in current directory (fallback)
764
+
730
765
  Options:
731
- --count <n> Number of test cases to generate (default: 5)
732
- --model <name> Generation model (default: sonnet)
766
+ --count <n> Force N samples (omit to let LLM auto-decide by skill type:
767
+ workflow 6-8 / atomic 4-6 / mixed 5-7)
768
+ --model <name> Generation model (default: opus; lean+effort-low applied; pass --model sonnet/haiku to save cost)
769
+ --focus <text> Natural-language scenario hints appended to the prompt (overrides freeform diversity)
733
770
  --batch Generate for skills that are missing eval-samples
734
771
  --skill-dir <path> Skill directory for batch mode (default: skills)
772
+
773
+ Examples:
774
+ omk improve samples skills/req-tool.md
775
+ omk improve samples skills/req-tool.md --count 8 \\
776
+ --focus "Cover PROJECT-empty → WORKSPACE-fallback multi-step tag lookup and the search-failure error path"
735
777
  `,
736
778
  },
737
779
  'cli.help.studio': {
@@ -899,6 +941,14 @@ Examples:
899
941
  zh: 'front-matter 格式错误: {error}',
900
942
  en: 'front-matter format error: {error}',
901
943
  },
944
+ 'cli.doctor.skill_metadata.fail.hardrules_invalid': {
945
+ zh: 'hardRules 结构错误: {error}',
946
+ en: 'hardRules schema error: {error}',
947
+ },
948
+ 'cli.doctor.skill_metadata.fail.workflows_invalid': {
949
+ zh: 'workflows 结构错误: {error}',
950
+ en: 'workflows schema error: {error}',
951
+ },
902
952
  'cli.doctor.skill_metadata.fail.missing_skillmd': {
903
953
  zh: 'directory-skill 缺少 SKILL.md 入口文件',
904
954
  en: 'directory-skill missing SKILL.md entry file',
@@ -907,6 +957,14 @@ Examples:
907
957
  zh: 'front-matter 用 YAML 语法,key: value 或 - item 形式。可参考 examples/multi-skills 下的 skill 写法',
908
958
  en: 'front-matter uses YAML syntax (key: value or - item). See examples/multi-skills for reference',
909
959
  },
960
+ 'cli.doctor.skill_metadata.hint.hardrules': {
961
+ zh: 'hardRules 必须写在 SKILL.md front-matter 中,格式为 hardRules: [{ id, rule, expectedBehavior }];id 要稳定且唯一,expectedBehavior 写可观察行为。',
962
+ en: 'hardRules must live in SKILL.md front-matter as hardRules: [{ id, rule, expectedBehavior }]; id must be stable and unique, expectedBehavior should describe observable behavior.',
963
+ },
964
+ 'cli.doctor.skill_metadata.hint.workflows': {
965
+ zh: 'workflows 必须写在 SKILL.md front-matter 中,格式为 workflows: [{ id, description, nodes: [{ id, action }] }];nodes 也兼容 steps 别名。',
966
+ en: 'workflows must live in SKILL.md front-matter as workflows: [{ id, description, nodes: [{ id, action }] }]; nodes also accepts the steps alias.',
967
+ },
910
968
  'cli.doctor.skill_metadata.hint.missing_skillmd': {
911
969
  zh: 'directory-skill 必须有 SKILL.md 文件作为入口。或将 skill 写成单文件 .md',
912
970
  en: 'directory-skills require a SKILL.md entry file. Alternatively, write the skill as a single .md file',