oh-my-knowledge 0.23.0 → 0.25.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 (196) hide show
  1. package/README.md +146 -84
  2. package/README.zh.md +144 -83
  3. package/dist/src/analysis/report-diagnostics.d.ts +3 -2
  4. package/dist/src/analysis/report-diagnostics.d.ts.map +1 -1
  5. package/dist/src/analysis/report-diagnostics.js +107 -80
  6. package/dist/src/analysis/report-diagnostics.js.map +1 -1
  7. package/dist/src/analysis/sample-diagnostics.d.ts +4 -1
  8. package/dist/src/analysis/sample-diagnostics.d.ts.map +1 -1
  9. package/dist/src/analysis/sample-diagnostics.js +123 -29
  10. package/dist/src/analysis/sample-diagnostics.js.map +1 -1
  11. package/dist/src/analysis/saturation.d.ts +2 -2
  12. package/dist/src/analysis/saturation.js +2 -2
  13. package/dist/src/authoring/evolver.d.ts +12 -4
  14. package/dist/src/authoring/evolver.d.ts.map +1 -1
  15. package/dist/src/authoring/evolver.js +35 -10
  16. package/dist/src/authoring/evolver.js.map +1 -1
  17. package/dist/src/cli/i18n-dict.d.ts +1 -1
  18. package/dist/src/cli/i18n-dict.d.ts.map +1 -1
  19. package/dist/src/cli/i18n-dict.js +241 -64
  20. package/dist/src/cli/i18n-dict.js.map +1 -1
  21. package/dist/src/cli/index.js +267 -152
  22. package/dist/src/cli/index.js.map +1 -1
  23. package/dist/src/cli/parse-run-config.d.ts +32 -9
  24. package/dist/src/cli/parse-run-config.d.ts.map +1 -1
  25. package/dist/src/cli/parse-run-config.js +80 -25
  26. package/dist/src/cli/parse-run-config.js.map +1 -1
  27. package/dist/src/cli/parse-strict.d.ts +20 -0
  28. package/dist/src/cli/parse-strict.d.ts.map +1 -0
  29. package/dist/src/cli/parse-strict.js +25 -0
  30. package/dist/src/cli/parse-strict.js.map +1 -0
  31. package/dist/src/cli/progress.d.ts +1 -0
  32. package/dist/src/cli/progress.d.ts.map +1 -1
  33. package/dist/src/cli/progress.js +8 -1
  34. package/dist/src/cli/progress.js.map +1 -1
  35. package/dist/src/doctor/index.d.ts +19 -0
  36. package/dist/src/doctor/index.d.ts.map +1 -0
  37. package/dist/src/doctor/index.js +182 -0
  38. package/dist/src/doctor/index.js.map +1 -0
  39. package/dist/src/doctor/preflight.d.ts +32 -0
  40. package/dist/src/doctor/preflight.d.ts.map +1 -0
  41. package/dist/src/doctor/preflight.js +32 -0
  42. package/dist/src/doctor/preflight.js.map +1 -0
  43. package/dist/src/doctor/renderer.d.ts +13 -0
  44. package/dist/src/doctor/renderer.d.ts.map +1 -0
  45. package/dist/src/doctor/renderer.js +69 -0
  46. package/dist/src/doctor/renderer.js.map +1 -0
  47. package/dist/src/doctor/rules.d.ts +30 -0
  48. package/dist/src/doctor/rules.d.ts.map +1 -0
  49. package/dist/src/doctor/rules.js +216 -0
  50. package/dist/src/doctor/rules.js.map +1 -0
  51. package/dist/src/eval-core/bootstrap.d.ts +1 -1
  52. package/dist/src/eval-core/bootstrap.js +1 -1
  53. package/dist/src/eval-core/cache.d.ts +7 -5
  54. package/dist/src/eval-core/cache.d.ts.map +1 -1
  55. package/dist/src/eval-core/cache.js +11 -7
  56. package/dist/src/eval-core/cache.js.map +1 -1
  57. package/dist/src/eval-core/comparability.d.ts +11 -0
  58. package/dist/src/eval-core/comparability.d.ts.map +1 -0
  59. package/dist/src/eval-core/comparability.js +296 -0
  60. package/dist/src/eval-core/comparability.js.map +1 -0
  61. package/dist/src/eval-core/dependency-checker.js +1 -1
  62. package/dist/src/eval-core/dependency-checker.js.map +1 -1
  63. package/dist/src/eval-core/evaluation-execution.d.ts +23 -7
  64. package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -1
  65. package/dist/src/eval-core/evaluation-execution.js +53 -21
  66. package/dist/src/eval-core/evaluation-execution.js.map +1 -1
  67. package/dist/src/eval-core/evaluation-job.d.ts +3 -5
  68. package/dist/src/eval-core/evaluation-job.d.ts.map +1 -1
  69. package/dist/src/eval-core/evaluation-job.js +2 -4
  70. package/dist/src/eval-core/evaluation-job.js.map +1 -1
  71. package/dist/src/eval-core/evaluation-reporting.d.ts +3 -1
  72. package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -1
  73. package/dist/src/eval-core/evaluation-reporting.js +67 -9
  74. package/dist/src/eval-core/evaluation-reporting.js.map +1 -1
  75. package/dist/src/eval-core/execution-strategy.js +2 -2
  76. package/dist/src/eval-core/execution-strategy.js.map +1 -1
  77. package/dist/src/eval-core/schema.d.ts.map +1 -1
  78. package/dist/src/eval-core/schema.js +20 -2
  79. package/dist/src/eval-core/schema.js.map +1 -1
  80. package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +113 -0
  81. package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -0
  82. package/dist/src/eval-workflows/batch-evaluation-workflow.js +217 -0
  83. package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -0
  84. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +6 -4
  85. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
  86. package/dist/src/eval-workflows/evaluation-pipeline.js +44 -38
  87. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
  88. package/dist/src/eval-workflows/evaluation-preparation.d.ts +4 -17
  89. package/dist/src/eval-workflows/evaluation-preparation.d.ts.map +1 -1
  90. package/dist/src/eval-workflows/evaluation-preparation.js +3 -18
  91. package/dist/src/eval-workflows/evaluation-preparation.js.map +1 -1
  92. package/dist/src/eval-workflows/run-evaluation.d.ts +27 -23
  93. package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
  94. package/dist/src/eval-workflows/run-evaluation.js +137 -20
  95. package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
  96. package/dist/src/executors/claude-cli.d.ts.map +1 -1
  97. package/dist/src/executors/claude-cli.js +11 -6
  98. package/dist/src/executors/claude-cli.js.map +1 -1
  99. package/dist/src/executors/codex-cli-trace.d.ts +10 -0
  100. package/dist/src/executors/codex-cli-trace.d.ts.map +1 -0
  101. package/dist/src/executors/codex-cli-trace.js +123 -0
  102. package/dist/src/executors/codex-cli-trace.js.map +1 -0
  103. package/dist/src/executors/codex-cli.d.ts +18 -0
  104. package/dist/src/executors/codex-cli.d.ts.map +1 -0
  105. package/dist/src/executors/codex-cli.js +254 -0
  106. package/dist/src/executors/codex-cli.js.map +1 -0
  107. package/dist/src/executors/codex-sdk.d.ts +18 -0
  108. package/dist/src/executors/codex-sdk.d.ts.map +1 -0
  109. package/dist/src/executors/codex-sdk.js +214 -0
  110. package/dist/src/executors/codex-sdk.js.map +1 -0
  111. package/dist/src/executors/gemini.d.ts.map +1 -1
  112. package/dist/src/executors/gemini.js +28 -24
  113. package/dist/src/executors/gemini.js.map +1 -1
  114. package/dist/src/executors/index.d.ts.map +1 -1
  115. package/dist/src/executors/index.js +7 -2
  116. package/dist/src/executors/index.js.map +1 -1
  117. package/dist/src/executors/runtime-fingerprint.d.ts +7 -0
  118. package/dist/src/executors/runtime-fingerprint.d.ts.map +1 -0
  119. package/dist/src/executors/runtime-fingerprint.js +277 -0
  120. package/dist/src/executors/runtime-fingerprint.js.map +1 -0
  121. package/dist/src/executors/script.d.ts.map +1 -1
  122. package/dist/src/executors/script.js +47 -55
  123. package/dist/src/executors/script.js.map +1 -1
  124. package/dist/src/executors/shared.d.ts +78 -1
  125. package/dist/src/executors/shared.d.ts.map +1 -1
  126. package/dist/src/executors/shared.js +203 -1
  127. package/dist/src/executors/shared.js.map +1 -1
  128. package/dist/src/grading/assertions.d.ts.map +1 -1
  129. package/dist/src/grading/assertions.js +22 -7
  130. package/dist/src/grading/assertions.js.map +1 -1
  131. package/dist/src/grading/gold-cli.js +4 -4
  132. package/dist/src/grading/gold-cli.js.map +1 -1
  133. package/dist/src/grading/human-gold.d.ts +1 -1
  134. package/dist/src/grading/human-gold.js +1 -1
  135. package/dist/src/grading/index.d.ts +20 -15
  136. package/dist/src/grading/index.d.ts.map +1 -1
  137. package/dist/src/grading/index.js +40 -16
  138. package/dist/src/grading/index.js.map +1 -1
  139. package/dist/src/grading/judge.d.ts +1 -1
  140. package/dist/src/grading/judge.d.ts.map +1 -1
  141. package/dist/src/grading/judge.js +76 -7
  142. package/dist/src/grading/judge.js.map +1 -1
  143. package/dist/src/inputs/eval-config.js +65 -7
  144. package/dist/src/inputs/eval-config.js.map +1 -1
  145. package/dist/src/inputs/skill-loader.d.ts +1 -1
  146. package/dist/src/inputs/skill-loader.d.ts.map +1 -1
  147. package/dist/src/inputs/skill-loader.js +1 -1
  148. package/dist/src/inputs/skill-loader.js.map +1 -1
  149. package/dist/src/renderer/html-renderer.d.ts +5 -4
  150. package/dist/src/renderer/html-renderer.d.ts.map +1 -1
  151. package/dist/src/renderer/html-renderer.js +240 -96
  152. package/dist/src/renderer/html-renderer.js.map +1 -1
  153. package/dist/src/renderer/layout.d.ts +2 -1
  154. package/dist/src/renderer/layout.d.ts.map +1 -1
  155. package/dist/src/renderer/layout.js +30 -42
  156. package/dist/src/renderer/layout.js.map +1 -1
  157. package/dist/src/renderer/summary.d.ts +3 -3
  158. package/dist/src/renderer/summary.d.ts.map +1 -1
  159. package/dist/src/renderer/summary.js +233 -43
  160. package/dist/src/renderer/summary.js.map +1 -1
  161. package/dist/src/renderer/trends.d.ts.map +1 -1
  162. package/dist/src/renderer/trends.js +5 -3
  163. package/dist/src/renderer/trends.js.map +1 -1
  164. package/dist/src/server/report-server.js +4 -4
  165. package/dist/src/server/report-server.js.map +1 -1
  166. package/dist/src/server/report-store.d.ts +7 -5
  167. package/dist/src/server/report-store.d.ts.map +1 -1
  168. package/dist/src/server/report-store.js +39 -11
  169. package/dist/src/server/report-store.js.map +1 -1
  170. package/dist/src/types/doctor.d.ts +95 -0
  171. package/dist/src/types/doctor.d.ts.map +1 -0
  172. package/dist/src/types/doctor.js +2 -0
  173. package/dist/src/types/doctor.js.map +1 -0
  174. package/dist/src/types/eval.d.ts +40 -19
  175. package/dist/src/types/eval.d.ts.map +1 -1
  176. package/dist/src/types/executor.d.ts +38 -0
  177. package/dist/src/types/executor.d.ts.map +1 -1
  178. package/dist/src/types/index.d.ts +1 -0
  179. package/dist/src/types/index.d.ts.map +1 -1
  180. package/dist/src/types/index.js +1 -0
  181. package/dist/src/types/index.js.map +1 -1
  182. package/dist/src/types/judge.d.ts +21 -0
  183. package/dist/src/types/judge.d.ts.map +1 -1
  184. package/dist/src/types/report.d.ts +100 -35
  185. package/dist/src/types/report.d.ts.map +1 -1
  186. package/dist/src/types/storage.d.ts +7 -7
  187. package/dist/src/types/storage.d.ts.map +1 -1
  188. package/package.json +6 -5
  189. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +0 -153
  190. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +0 -1
  191. package/dist/src/eval-workflows/each-evaluation-workflow.js +0 -178
  192. package/dist/src/eval-workflows/each-evaluation-workflow.js.map +0 -1
  193. package/dist/src/executors/openai-cli.d.ts +0 -3
  194. package/dist/src/executors/openai-cli.d.ts.map +0 -1
  195. package/dist/src/executors/openai-cli.js +0 -60
  196. package/dist/src/executors/openai-cli.js.map +0 -1
package/README.zh.md CHANGED
@@ -1,53 +1,22 @@
1
1
  # oh-my-knowledge
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/oh-my-knowledge.svg)](https://www.npmjs.com/package/oh-my-knowledge)
4
+ [![npm weekly downloads](https://img.shields.io/npm/dw/oh-my-knowledge.svg)](https://www.npmjs.com/package/oh-my-knowledge)
4
5
  [![CI](https://github.com/lizhiyao/oh-my-knowledge/actions/workflows/ci.yml/badge.svg)](https://github.com/lizhiyao/oh-my-knowledge/actions/workflows/ci.yml)
5
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
6
7
  [![Node.js Version](https://img.shields.io/node/v/oh-my-knowledge.svg)](https://nodejs.org)
7
8
 
8
9
  [English](./README.md) | **简体中文**
9
10
 
10
- **omk** — 内置统计严谨性的 LLM 评测框架。Bootstrap CI / Krippendorff α / 长度偏差校正 / 饱和曲线开箱即用。原生支持 Claude Code skill、prompt、agent、RAG。
11
+ **omk** — 你给 LLM 的知识,价值在哪里?
12
+ omk 帮你用客观数据回答,而不是凭感觉。
11
13
 
12
- **固定模型,只变知识载体,数据说话。**
14
+ **固定模型,只变知识载体。**
13
15
 
14
- ## 为什么需要这个工具
15
-
16
- 做知识工程的团队会产出大量知识载体(当前常见是 skill,也包括 prompt、agent、workflow 等)。当被问到"v2 比 v1 好在哪"时,需要客观数据而非主观判断。`oh-my-knowledge` 通过控制变量实验解决这个问题:相同模型、相同测试样本,只改变知识载体。
17
-
18
- ## 核心能力
19
-
20
- - **控制变量离线评测** — 固定模型和样本,只变知识载体;兼容 Claude Code skill、CLAUDE.md prompt、RAG 知识库等任何 markdown 形式的指令
21
- - **六维独立打分** — Fact / Behavior / LLM-judge / Cost / Efficiency / Stability 分别出信号,单一维度的回退不会被其他维度的收益掩盖
22
- - **线上 session 观测** — 解析 Claude Code session JSONL,在真实用户会话上测量各 skill 的失败率、耗时、token 成本和知识缺口信号
23
- - **知识缺口识别** — 严重度加权的信号(显式标记 / 搜索失败 / hedging 用语 / 反复失败)量化风险敞口,不宣称完备性
24
- - **合并前 CI 门** — `omk bench gate` 强制三层 all-pass(fact + behavior + llm-judge),抓复合分掩盖的单层回退
25
- - **一行 ship/no-ship 结论** — `omk bench verdict <reportId>` 聚合 bootstrap CI / 三层 ci-gate / saturation / human α,给六档 verdict(PROGRESS / CAUTIOUS / REGRESS / NOISE / UNDERPOWERED / SOLO)+ 行动建议;exit code 反映是否可 ship
26
-
27
- ### 统计严谨性
28
- LLM 评测最容易踩的坑是"自信的偏差"——CI 很窄但结论错。omk 的统计层做四件事让结论可被外部审计:
29
-
30
- - **Bootstrap CI** (`--bootstrap`) — 不假设分布的置信区间。t 检验在 LLM 序数评分上失效,bootstrap 直接重采样原始数据,对小 N(< 30)和偏态分布都稳。pairwise diff CI 不含 0 = 显著差异。
31
- - **Human Gold + Krippendorff α** (`--gold-dir`) — 引入外部标注作为锚点。CI 解决"评委稳不稳",α 解决"评委对不对"——两个维度互补。omk 自动检测污染(gold annotator 与 judge 同模型时警告)。
32
- - **Length-controlled judge prompt** (默认开启) — 研究证实 LLM 评委隐性偏向更长的回答。omk 的 judge prompt 加显式段落"长度不是质量信号",template hash 为 v3-cot-length,跟旧版本的报告 hash 肉眼可辨。`omk bench debias-validate length <reportId>` 重判检测偏差幅度。
33
- - **Saturation curve** — 回答"我跑够样本了吗"。`--repeat ≥ 5` 时累积 N → 均值 + bootstrap CI 序列,CI 宽度衰减率 < 5% 持续 3 个窗口判定饱和——再多样本对结论无实质收益。HTML 报告内联 SVG 曲线 + verdict。
34
-
35
- ## 为什么选 omk
36
-
37
- | | omk | promptfoo | DeepEval | RAGAS | LangSmith |
38
- |--|--|--|--|--|--|
39
- | Bootstrap CI | ✓ | ✗ | ✗ | ✗ | ✗ |
40
- | Krippendorff α(评委 ↔ 人工锚点) | ✓ | ✗ | ✗ | ✗ | ✗ |
41
- | Length-debias 评委 prompt | ✓ 默认 | ✗ | ✗ | ✗ | ✗ |
42
- | 饱和曲线 | ✓ | ✗ | ✗ | ✗ | ✗ |
43
- | 三层独立评分 | ✓ | ✗ | 部分 | ✗ | ✗ |
44
- | 原生 Claude Code skill | ✓ | ✗ | ✗ | ✗ | ✗ |
45
- | 完整中文文档 | ✓ | ✗ | ✗ | ✗ | ✗ |
46
- | 托管 SaaS 看板 | ✗ | ✗ | ✓ | ✗ | ✓ |
16
+ <a id="statistical-rigor"></a>
17
+ > 默认带:Bootstrap 置信区间 · Krippendorff α(评委 ↔ 人工)· 长度去偏 · 饱和曲线 · 用例隔离(construct validity)。[这些为什么重要 →](docs/zh/statistical-rigor.md)
47
18
 
48
- omk 的护城河是**统计严谨性** — 每条结论都能被研究者审计。需要托管 SaaS 看板?选 LangSmith。要本地快速 prompt 迭代不要统计层?选 promptfoo。**要 ship 到生产且会被问"为什么应该相信这个数字"?选 omk**。
49
-
50
- 完整对比(7 个工具 × 25+ 维度): [docs/zh/comparison.md](docs/zh/comparison.md)
19
+ ![omk 报告](./assets/screenshots/report-overview-zh.png)
51
20
 
52
21
  ## 快速开始
53
22
 
@@ -68,18 +37,22 @@ cd my-eval
68
37
  omk bench run --dry-run
69
38
 
70
39
  # 运行评测(自动发现 skills/ 目录下的所有 artifact)
71
- omk bench run
40
+ omk bench run # → 5 分钟出 HTML 报告 + verdict
41
+ # (omk doctor 和 LLM 连通性检测都是强制前置门禁;
42
+ # --skip-connectivity 可跳连通性,doctor 无 skip flag)
72
43
 
73
44
  # CLI 输出语言: zh (默认) / en — flag 优先级高于环境变量
74
45
  omk bench run --lang en
75
46
  OMK_LANG=en omk bench report
76
47
  ```
77
48
 
78
- ## 在 Claude Code 中使用
49
+ ## 在 AI Coding Agent 中使用
79
50
 
80
- 安装 omk 后,在 Claude Code 中直接用自然语言交互:
51
+ ### 在 Claude Code 中使用
81
52
 
82
- ```
53
+ 当 `omk` skill 已在 Claude Code 中可用时,可以直接这样调用:
54
+
55
+ ```bash
83
56
  /omk eval # 评测当前项目的 artifact
84
57
  /omk evolve # 自动迭代改进 artifact
85
58
  /omk gen-samples # 生成测试用例
@@ -87,28 +60,71 @@ OMK_LANG=en omk bench report
87
60
 
88
61
  或直接说"帮我评测 v1 和 v2 的差异"、"改进一下这个 artifact",omk 会自动理解意图并调用对应命令。
89
62
 
63
+ ### 在 Codex 中使用
64
+
65
+ Codex 默认不支持 `/omk ...` 这种 Claude Code 风格的 slash command。通常直接让 agent 执行 `omk` CLI,例如:
66
+
67
+ ```bash
68
+ omk bench run
69
+ omk bench evolve
70
+ omk bench gen-samples skills/my-skill.md
71
+ ```
72
+
73
+ 也可以直接用自然语言描述目标,例如"比较 v1 和 v2 的评测差异"、"为这个 skill 生成测试用例"。
74
+
75
+ ## 为什么需要这个工具
76
+
77
+ 做知识工程的团队会产出大量知识载体(当前常见是 skill,也包括 prompt、agent、workflow 等)。当被问到"v2 比 v1 好在哪"时,需要客观数据而非主观判断。`oh-my-knowledge` 通过控制变量实验解决这个问题:相同模型、相同测试用例,只改变知识载体。
78
+
79
+ ## 核心能力
80
+
81
+ - **评测前置健康检查** — `omk doctor` 在 `bench run` / `bench gate` 之前**强制**运行,检查 skill 可读性、元数据合法性、依赖完整性、samples 契约——纯静态零 LLM 调用,类比 SE 工具栈的 lint + typecheck。executor / judge 连通性是独立阶段,可用 `--skip-connectivity` 单独跳过
82
+ - **控制变量离线评测** — 固定模型和用例,只变知识载体;兼容 Claude Code skill、CLAUDE.md prompt、RAG 知识库等任何 markdown 形式的指令
83
+ - **六维独立打分** — Fact / Behavior / LLM-judge / Cost / Efficiency / Stability 分别出信号,单一维度的回退不会被其他维度的收益掩盖
84
+ - **线上 session 观测** — 解析 Claude Code session JSONL,在真实用户会话上测量各 skill 的失败率、耗时、token 成本和知识缺口信号
85
+ - **知识缺口识别** — 严重度加权的信号(显式标记 / 搜索失败 / hedging 用语 / 反复失败)量化风险敞口,不宣称完备性
86
+ - **合并前 CI 门** — `omk bench gate` 强制三层 all-pass(fact + behavior + llm-judge),抓复合分掩盖的单层回退
87
+ - **一行 ship/no-ship 结论** — `omk bench verdict <reportId>` 聚合 bootstrap CI / 三层 ci-gate / saturation / human α,给六档 verdict(PROGRESS / CAUTIOUS / REGRESS / NOISE / UNDERPOWERED / SOLO)+ 行动建议;exit code 反映是否可 ship
88
+
89
+ ## 为什么选 omk
90
+
91
+ | | omk | promptfoo | DeepEval | LangSmith |
92
+ |--|--|--|--|--|
93
+ | Bootstrap 置信区间 | ✓ 默认 | ✗ | ✗ | ✗ |
94
+ | Krippendorff α(评委 ↔ 人工) | ✓ 默认 | ✗ | ✗ | ✗ |
95
+ | 长度去偏的评委 prompt | ✓ 默认 | ✗ | ✗ | ✗ |
96
+ | 饱和曲线 | ✓ | ✗ | ✗ | ✗ |
97
+ | 三层独立评分 | ✓ | ✗ | 部分 | ✗ |
98
+ | 用例隔离(construct validity) | ✓ 默认 | ✗ | ✗ | ✗ |
99
+ | 原生 Claude Code skill | ✓ | ✗ | ✗ | ✗ |
100
+ | 托管 SaaS 看板 | ✗ | ✗ | ✓ | ✓ |
101
+
102
+ omk 的护城河是 **default-on 安全网** —— Bootstrap CI / 评委 ↔ 人工 α / 长度去偏不是 advanced flag,是默认行为。其他工具让你**手动**接置信区间;omk 让你**默认无法忽略**它。需要 SaaS 看板?选 LangSmith。要快速 prompt 迭代不要统计层?选 promptfoo。**要发到生产且会被问"为什么应该相信这个数字"?选 omk。**
103
+
104
+ RAG 专项评测请看 RAGAS(独立 niche,跟 omk 互补)。完整对比(7 个工具 × 25+ 维度): [docs/zh/comparison.md](docs/zh/comparison.md)
105
+
90
106
  ## 特性
91
107
 
92
108
  | 特性 | 说明 |
93
109
  |------|------|
94
- | **21+ 种断言** | 包含子串、正则、JSON Schema、ROUGE/BLEU/Levenshtein 相似度、Agent 工具调用、语义相似度、自定义函数等 |
95
- | **断言取反 + 组合** | 通用 `not: true` 字段 + `assert-set` (any/all) 任意嵌套 |
110
+ | **Verdict 一行结论** | `omk bench verdict <id>` 六档判定 + ship 建议 + exit code 路由,与 HTML 报告 verdict pill 共享规则 |
96
111
  | **六维评估** | 事实 / 行为 / LLM 评价 / 成本 / 效率 / 稳定性独立展示 |
97
- | **统计严谨性** | Bootstrap CI / Krippendorff α / Length-debias / Saturation curve |
112
+ | **多执行器** | 支持 Claude CLI / Claude SDK / Codex CLI / Codex SDK / OpenAI / Gemini 及自定义命令 |
113
+ | **21+ 种断言** | 包含子串、正则、JSON Schema、ROUGE/BLEU/Levenshtein 相似度、Agent 工具调用、语义相似度、自定义函数等 |
114
+ | **统计严谨性** | Bootstrap CI / Krippendorff α / 长度去偏 / 饱和曲线 —— 全部默认开。[详情 →](docs/zh/statistical-rigor.md) |
115
+ | **用例质量诊断** | `omk bench diagnose <id>` 7 类 issue(区分度低 / 重复 / 歧义 / 成本异常 / 全 fail 等)+ healthScore 0-100 |
116
+ | **失败聚类 + 根因** | `omk bench failures <id>` 单 LLM 调用聚类失败用例 + 每 cluster 给修复建议 |
117
+ | **RAG metrics** | `faithfulness` / `answer_relevancy` / `context_recall` 三 metric — 反幻觉 + 切题度 + context 覆盖,自动继承长度去偏 |
118
+ | **预算硬阈值** | `--budget-usd / --budget-per-sample-usd / --budget-per-sample-ms` 总成本 + 单用例成本/耗时上限,超出中止保留 partial report |
98
119
  | **用例隔离 (construct validity)** | `--strict-baseline` (默认开) 三堵 baseline 拿到被测 skill 的污染路径:(1) SDK skill auto-discovery (2) subagent Skill 工具调用 (3) cwd 文件系统(避免 baseline 顺 `skills/<name>/` symlink 直接 Read 到 SKILL.md)。eval.yaml `allowedSkills` 支持 per-variant 白名单 |
99
- | **用例设计科学性 (sample design science)** | Sample schema 加 `capability` / `difficulty` / `construct` / `provenance` 元数据字段(HF Dataset Cards 风)。`bench diagnose` 输出 coverage 分桶 + 检测 `rubric_clarity_low` / `capability_thin` 两类新 issue。`bench gen-samples` 自动给生成的 sample 打 provenance。详见 [docs/sample-design-spec.md](docs/sample-design-spec.md),含 8 条行业 gap(HELM / MMLU-Pro / Construct Validity / IRT / Dataset Cards / Adversarial)的 omk v1 映射 |
100
- | **Verdict 一行结论** | `omk bench verdict <id>` 六档判定 + ship 建议 + exit code 路由,与 HTML 报告 verdict pill 共享规则 |
101
- | **RAG metrics** | `faithfulness` / `answer_relevancy` / `context_recall` 三 metric — 反幻觉 + 切题度 + context 覆盖,自动继承 length-debias |
102
- | **样本质量诊断** | `omk bench diagnose <id>` 7 类 issue(区分度低 / 重复 / 歧义 / 成本异常 / 全 fail 等)+ healthScore 0-100 |
103
- | **失败聚类 + 根因** | `omk bench failures <id>` 单 LLM 调用聚类失败样本 + 每 cluster 给修复建议 |
104
- | **预算硬阈值** | `--budget-usd / --budget-per-sample-usd / --budget-per-sample-ms` 总成本 + 单样本成本/耗时上限,超出中止保留 partial report |
105
- | **多执行器** | 支持 Claude CLI / Claude SDK / OpenAI / Gemini 及自定义命令 |
120
+ | **用例设计科学性 (sample design science)** | Sample schema 加 `capability` / `difficulty` / `construct` / `provenance` 元数据字段(HF Dataset Cards 风)。`bench diagnose` 输出 coverage 分桶 + 检测 `rubric_clarity_low` / `capability_thin` 两类新 issue。`bench gen-samples` 自动给生成的用例打 provenance。详见 [docs/sample-design-spec.md](docs/sample-design-spec.md),含 8 条行业 gap(HELM / MMLU-Pro / Construct Validity / IRT / Dataset Cards / Adversarial)的 omk v1 映射 |
106
121
  | **多评委 ensemble** | `--judge-models claude:opus,openai:gpt-4o` 跨厂商评分 + agreement 度量 |
107
122
  | **MCP URL 获取** | 通过 MCP Server 获取私有文档 URL 内容(SSO 保护的知识库等) |
108
123
  | **盲测 A/B** | `--blind` 隐藏变体名称,HTML 报告有揭晓按钮 |
109
- | **并行执行** | `--concurrency N` 并行 N 个任务 |
110
124
  | **多轮方差分析** | `--repeat N` 重复 N 次,计算均值/标准差/置信区间/t 检验 |
111
- | **自动分析** | 检测低区分度断言、均匀分数、全通过/全失败、高成本样本 |
125
+ | **并行执行** | `--concurrency N` 并行 N 个任务 |
126
+ | **断言取反 + 组合** | 通用 `not: true` 字段 + `assert-set` (any/all) 任意嵌套 |
127
+ | **自动分析** | 检测低区分度断言、均匀分数、全通过/全失败、高成本用例 |
112
128
  | **可追溯性** | 报告含 CLI 版本、Node 版本、artifact 版本指纹、judge prompt hash |
113
129
  | **中英切换** | HTML 报告右上角一键切换语言 |
114
130
 
@@ -133,7 +149,7 @@ flowchart TD
133
149
  end
134
150
 
135
151
  subgraph Exec["④ 执行器(固定模型)"]
136
- E["claude / claude-sdk / openai / gemini<br/>anthropic-api / openai-api / 自定义命令"]
152
+ E["claude / claude-sdk / codex / openai / gemini<br/>anthropic-api / openai-api / 自定义命令"]
137
153
  T["claude-sdk 抽取<br/>turns / toolCalls trace"]
138
154
  E -.-> T
139
155
  end
@@ -370,13 +386,14 @@ omk bench run [选项]
370
386
  --skill-dir <路径> artifact 目录(默认:skills)
371
387
  --control <expr> 对照组变体表达式(experiment role = control)
372
388
  --treatment <v1,v2> 实验组变体表达式,逗号分隔
373
- 除非用 --config 或 --each,--control / --treatment 两者至少传一个
389
+ 除非用 --config 或 --batch,--control / --treatment 两者至少传一个
374
390
  特殊值:baseline(空 artifact)、git:name(git 历史版本)、
375
391
  git:ref:name(指定 commit)、含 / 的路径(直接读取文件)
376
392
  --config <路径> YAML/JSON 配置文件(evaluation-as-code);在一个文件里声明
377
393
  samples + variants + model + executor;CLI 参数会覆盖 config
378
394
  --model <名称> 被测模型(默认:sonnet)
379
- --judge-model <名称> 评委模型(默认:haiku)
395
+ --judge-models <list> 评委配置;1 条 = 单评委 (默认 claude:haiku),
396
+ ≥ 2 条 = ensemble。格式 `executor:model[,executor:model]`
380
397
  --output-dir <路径> 输出目录(默认:~/.oh-my-knowledge/reports/)
381
398
  --no-judge 跳过 LLM 评分
382
399
  --no-cache 禁用结果缓存(默认开启,相同输入自动复用)
@@ -386,16 +403,15 @@ omk bench run [选项]
386
403
  --timeout <秒> 单个任务的执行器超时时间(默认:120)
387
404
  --repeat <n> 重复 N 次做方差分析(默认:1)
388
405
  --executor <名称> 执行器(默认:claude),支持自定义命令
389
- --skip-preflight 跳过评测前的模型连通性检查
406
+ --skip-connectivity 跳过评测前 LLM 连通性检测(doctor 仍然强制执行,无 skip flag)。
407
+ --resume 时自动跳过(原 run 已验过连通性)。
390
408
  --mcp-config <路径> MCP 配置文件,用于通过 MCP Server 获取私有文档 URL 内容
391
409
  (默认:当前目录的 .mcp.json)
392
410
  --no-serve 评测完成后不自动启动报告服务
393
411
  --verbose 打印每个样本的详细执行结果(耗时、tokens、输出预览)
394
- --each 批量评测:每个 artifact 独立和 baseline 对比
412
+ --batch 批量评测:每个 artifact 独立和 baseline 对比
395
413
  需要每个 artifact 配对 {name}.eval-samples.json
396
414
  --judge-repeat <n> 每条 sample × dimension 跑 LLM 评委 N 次,输出 stddev (评委自一致性)
397
- --judge-models <list> 多评委 ensemble: "executor1:model1,executor2:model2"
398
- ≥ 2 个 judge 触发 ensemble + inter-judge agreement 输出
399
415
  --bootstrap 启用 distribution-free CI:每个 variant 加 bootstrap CI,
400
416
  pairwise diff CI 含 0 = 不显著
401
417
  --bootstrap-samples N bootstrap 重采样次数 (默认 1000)
@@ -411,11 +427,34 @@ omk bench run [选项]
411
427
 
412
428
  **eval.yaml 预算字段**: `budget: { totalUSD?, perSampleUSD?, perSampleMs? }`,所有字段可选且必须 ≥ 0。CLI 同名 flag 覆盖配置值。
413
429
 
430
+ **eval.yaml 实验设计字段**: 上面 CLI flag 同样可以写到 `eval.yaml` 让实验配置可复现 (CLI > eval.yaml > 默认):
431
+
432
+ ```yaml
433
+ samples: ./eval-samples.yaml
434
+ model: sonnet
435
+ repeat: 5 # 多轮方差分析, ≥ 1
436
+ judgeRepeat: 3 # 每条 (sample × dim) 评委自一致性次数, ≥ 1
437
+ bootstrap: true # 每 variant distribution-free CI
438
+ bootstrapSamples: 2000 # 默认 1000, ≥ 100
439
+ goldDir: ./gold # 跑完自动对比 human anchor 算 α / κ / Pearson
440
+ lengthDebias: true # 默认; 设 false 复现 v0.21 之前的 hash
441
+ strictBaseline: true # 默认; 设 false 关掉 skill 隔离
442
+ noJudge: false # 默认; 设 true 完全跳过 LLM 评委
443
+ judgeModels: # 1 条 = 单评委; ≥ 2 条 = ensemble
444
+ - { executor: claude, model: opus }
445
+ - { executor: openai-api, model: gpt-4o }
446
+ variants:
447
+ - { name: baseline, role: control, artifact: baseline }
448
+ - { name: my-skill, role: treatment, artifact: ./skills/my-skill.md }
449
+ ```
450
+
451
+ **字段入口**: `bench run` 完整支持上述全部字段; `bench gate` 通过 `parseRunConfig` 共享 variants / executor / model / `judgeModels`(单评委 + ensemble 都生效)/ noJudge / noCache / blind / strictBaseline / budget / mcpConfig / variantAllowedSkills,但 `handleRun` 自己处理的实验设计字段(`repeat` / `judgeRepeat` / `bootstrap` / `bootstrapSamples` / `goldDir` / `lengthDebias`)gate 不读,后续按需扩展到 gate。其他子命令(`evolve` / `verdict` / `diff` / `analyze` 等)完全不读 eval.yaml。
452
+
414
453
  **和 `cost_max` / `latency_max` 断言的区别**: 断言是**单样本评分维度**(超出直接打 0 分,run 继续);budget 是**工作流级硬阈值**(`totalUSD` 超出整个 run abort 保留 partial report,per-sample 超出该样本失败但 run 继续)。一个回答"质量是否达标",一个回答"花钱/时间是否在预算内"。
415
454
 
416
- ### `omk bench run --each`(批量评测)
455
+ ### `omk bench run --batch`(批量评测)
417
456
 
418
- 当 skills/ 下放了多个**独立的** artifact 时,使用 `--each` 逐个评测,每个 artifact 独立和 baseline 对比,生成一份合并报告。
457
+ 当 skills/ 下放了多个**独立的** artifact 时,使用 `--batch` 逐个评测,每个 artifact 独立和 baseline 对比,生成一份 BatchEvaluationReport,内部索引多个 child EvaluationReport。
419
458
 
420
459
  ```
421
460
  skills/
@@ -435,8 +474,8 @@ skills/
435
474
  - 没有配对 eval-samples 的 artifact 会被跳过并打印警告
436
475
 
437
476
  ```bash
438
- omk bench run --each
439
- omk bench run --each --dry-run
477
+ omk bench run --batch
478
+ omk bench run --batch --dry-run
440
479
  ```
441
480
 
442
481
  ### `omk bench gen-samples`(生成测评用例)
@@ -448,7 +487,7 @@ omk bench run --each --dry-run
448
487
  omk bench gen-samples skills/my-skill.md
449
488
 
450
489
  # 为 skills/ 下所有缺少测试集的 artifact 批量生成
451
- omk bench gen-samples --each
490
+ omk bench gen-samples --batch
452
491
 
453
492
  # 指定生成数量
454
493
  omk bench gen-samples skills/my-skill.md --count 10
@@ -457,10 +496,10 @@ omk bench gen-samples skills/my-skill.md --count 10
457
496
  选项:
458
497
 
459
498
  ```
460
- --each 为所有缺少 eval-samples 的 artifact 批量生成
499
+ --batch 为所有缺少 eval-samples 的 artifact 批量生成
461
500
  --count <n> 每个 artifact 生成的样本数(默认:5)
462
501
  --model <名称> 生成用的模型(默认:sonnet)
463
- --skill-dir <路径> artifact 目录(默认:skills),配合 --each 使用
502
+ --skill-dir <路径> artifact 目录(默认:skills),配合 --batch 使用
464
503
  ```
465
504
 
466
505
  ### `omk bench evolve`(自我循环改进)
@@ -498,6 +537,26 @@ omk bench gate [选项]
498
537
  fact / behavior / judge 三层
499
538
  ```
500
539
 
540
+ ### `omk doctor`(评测前置健康检查)
541
+
542
+ 纯静态 / 零 LLM 调用,类比 SE 工具栈的 lint + typecheck。`bench run` / `bench gate` 之前强制运行,YAML 写错、依赖缺失这类问题会 abort 评测并给可操作错误,而不是让你拿到 garbage-in 的 verdict 数字。也可独立调用,适合本地迭代或 CI 单跑。
543
+
544
+ ```bash
545
+ omk doctor # 批量检查当前目录或 ./skills 下所有 skill
546
+ omk doctor skills/v1.md # 单个文件
547
+ omk doctor skills/ --json # JSON 输出供 CI 消费
548
+ omk doctor --gate; echo $? # 静默模式 — 任意 fatal 失败 exit 1
549
+ ```
550
+
551
+ doctor 检查项:
552
+
553
+ - **skill 文件可读** — 文件存在、内容非空、有最低长度
554
+ - **skill 元数据合法** — front-matter(若有)YAML 合法;directory-skill 有 `SKILL.md`
555
+ - **前置依赖完整** — 引用的 CLI 工具、文件、环境变量都可用(复用 `preflightDependencies`)
556
+ - **用例 ↔ skill 输入约定** — 传 samples 时校验非空且含 prompt 字段(warn 级)
557
+
558
+ executor / judge 连通性由独立的 evaluation preflight 阶段负责,不在 doctor 范围内 — 边界清晰:doctor 静态,eval 动态。`bench run` / `bench gate` 在 doctor 失败时 abort(exit 1,stderr 前缀 `doctor failed:`)。**doctor 是评测必经环节,无 skip flag**(静态检查零成本无理由跳过);LLM 连通性可用 `--skip-connectivity` 单独控制(`--resume` 时自动跳过)。
559
+
501
560
  ### `omk bench report`
502
561
 
503
562
  启动报告服务,浏览历史报告、提交反馈、删除报告。
@@ -542,7 +601,7 @@ gold-dir/
542
601
  ```bash
543
602
  omk bench debias-validate length <reportId> [选项]
544
603
  --variant <name> 只测一个 variant
545
- --judge-model <id> override report 的 judge model
604
+ --judge-models <executor:model> override report 的评委(仅支持单评委)
546
605
  --bootstrap-samples N bootstrap 迭代数 (默认 1000)
547
606
  --seed N 确定性种子
548
607
  ```
@@ -598,8 +657,7 @@ omk bench diagnose <reportId> [选项]
598
657
 
599
658
  ```bash
600
659
  omk bench failures <reportId> [选项]
601
- --judge-executor <name> 执行器 (默认 claude)
602
- --judge-model <id> 聚类用 model (默认沿用 report.meta.judgeModel)
660
+ --judge-models <executor:model> 聚类评委 (默认沿用 report.meta.judgeModels[0],仅支持单评委)
603
661
  --max-clusters <n> 最多多少 cluster (默认 5)
604
662
  --threshold <num> 算失败的分数阈值 (默认 3)
605
663
  --max-feed <n> 最多喂给 LLM 多少条 (默认 50,超出取最差)
@@ -664,13 +722,16 @@ omk analyze ~/.claude/projects/my-project --kb /path/to/project
664
722
  |--------|----------|------|
665
723
  | `claude` | 默认 | 通过 `claude -p` 调用 Claude CLI |
666
724
  | `claude-sdk` | 结构化输出 | 通过 Claude Agent SDK 调用,无 stdout 解析,避免 buffer 截断 |
667
- | `openai` | 跨厂商对比 | 通过 `openai api` CLI 调用 |
725
+ | `codex` | OpenAI agent CLI | 通过 `codex exec --json` 调用,需本地装好登录的 codex(`@openai/codex`);best-effort tool trace,**costUSD 不报**(codex 自身不输出 USD,需外部账单核算) |
726
+ | `codex-sdk` | OpenAI agent SDK | 通过 `@openai/codex-sdk` 调用其自带的 `@openai/codex` binary 和 SDK 事件流;**costUSD 不报** |
668
727
  | `gemini` | 跨厂商对比 | 通过 `gemini` CLI 调用 |
669
728
  | `anthropic-api` | 无需 CLI | 直接调用 Anthropic HTTP API(需 `ANTHROPIC_API_KEY`) |
670
729
  | `openai-api` | 无需 CLI | 直接调用 OpenAI HTTP API(需 `OPENAI_API_KEY`) |
671
730
 
672
731
  API 直调执行器支持通过环境变量自定义 Base URL:`ANTHROPIC_BASE_URL`、`OPENAI_BASE_URL`。
673
732
 
733
+ Codex construct-validity 说明:(1) `codex` 使用 `PATH` 上找到的 `codex` binary;`codex-sdk` 使用 `@openai/codex-sdk` 解析到的自带 `@openai/codex` binary。报告会持久化 per-variant `meta.executorRuntimes`、`meta.executorRuntime`,以及每个评委的 `meta.judgeModels[].runtime` 指纹(binary 或 SDK 版本 + 能力快照),`bench diff` / `bench verdict` 会在 strict comparability 无法审计时提示。runtime 指纹不一致时,结果应解释为 executor runtime 对比,而不只是 prompt/template 行为对比。(2) 两个 executor 都隔离用户级 config:`codex` 传 `--ephemeral` + `--ignore-user-config`,`codex-sdk` 把 `$CODEX_HOME` 重定向到 per-process tmp 目录(auth.json 通过 symlink 透传)。用户的 `~/.codex/config.toml` 不会渗入任意一个 executor 的 eval。
734
+
674
735
  ### 自定义执行器
675
736
 
676
737
  任何 shell 命令都可以作为执行器,通过 stdin/stdout JSON 协议通信:
@@ -714,7 +775,7 @@ skills/
714
775
  | `./path/to/file.md` | 含 `/` 的路径,直接读取文件作为 artifact |
715
776
  | `variant@/path/to/project` | 给任意变体附加运行目录,支持 `name@cwd`、`git:name@cwd`、`/file.md@cwd` |
716
777
 
717
- `--control` 和 `--treatment` 都不传时,用 `--config eval.yaml` 或 `--each`。`--each` 模式下会自动用 `baseline` 作对照组,每个被发现的 artifact 作实验组。
778
+ `--control` 和 `--treatment` 都不传时,用 `--config eval.yaml` 或 `--batch`。`--batch` 模式下会自动用 `baseline` 作对照组,每个被发现的 artifact 作实验组。
718
779
 
719
780
  ```bash
720
781
  # 显式:一个 control,一个或多个 treatment
@@ -855,25 +916,25 @@ omk bench run \
855
916
  export OPENAI_API_KEY="你的智谱 API Key"
856
917
  export OPENAI_BASE_URL="https://open.bigmodel.cn/api/paas/v4"
857
918
  omk bench run --executor openai-api --model glm-4-plus \
858
- --judge-model glm-4-plus --no-cache
919
+ --judge-models openai-api:glm-4-plus --no-cache
859
920
 
860
921
  # 通义千问
861
922
  export OPENAI_API_KEY="你的通义 API Key"
862
923
  export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
863
924
  omk bench run --executor openai-api --model qwen-plus \
864
- --judge-model qwen-plus
925
+ --judge-models openai-api:qwen-plus
865
926
 
866
927
  # DeepSeek
867
928
  export OPENAI_API_KEY="你的 DeepSeek API Key"
868
929
  export OPENAI_BASE_URL="https://api.deepseek.com"
869
930
  omk bench run --executor openai-api --model deepseek-chat \
870
- --judge-model deepseek-chat
931
+ --judge-models openai-api:deepseek-chat
871
932
 
872
933
  # Moonshot(Kimi)
873
934
  export OPENAI_API_KEY="你的 Moonshot API Key"
874
935
  export OPENAI_BASE_URL="https://api.moonshot.cn/v1"
875
936
  omk bench run --executor openai-api --model moonshot-v1-8k \
876
- --judge-model moonshot-v1-8k
937
+ --judge-models openai-api:moonshot-v1-8k
877
938
  ```
878
939
 
879
940
  **Ollama 本地模型:**
@@ -883,12 +944,12 @@ omk bench run --executor "python examples/custom-executor/ollama-executor.py" \
883
944
  --model llama3 --no-judge
884
945
  ```
885
946
 
886
- **关于评委模型:**
947
+ **关于评委:**
887
948
 
888
- - `--judge-model` 指定 LLM 评委使用的模型,默认 `haiku`
889
- - `--judge-executor` 指定评委使用的执行器(默认与 `--executor` 相同)
890
- - 如果你没有 Claude,用 `--judge-executor` 和 `--judge-model` 指向你可用的模型
891
- - 加 `--no-judge` 可跳过 LLM 评委,仅使用断言评分
949
+ - `--judge-models <list>` 指定评委,格式 `executor:model[,executor:model]`。默认 `${executor}:haiku`(没设 `--executor` 时为 claude:haiku)
950
+ - 1 条 = 单评委;≥ 2 条 = 多评委 ensemble + inter-judge agreement
951
+ - 没有 Claude 时把 `--judge-models` 指向你可用的模型,例如 `--judge-models openai-api:glm-4-plus`
952
+ - 加 `--no-judge` 可跳过 LLM 评委,仅使用断言评分
892
953
 
893
954
  ## 环境变量
894
955
 
@@ -920,4 +981,4 @@ omk bench run --executor "python examples/custom-executor/ollama-executor.py" \
920
981
 
921
982
  ---
922
983
 
923
- 版本变更记录见 [CHANGELOG](./CHANGELOG.md)。欢迎贡献 — 详见 [CONTRIBUTING](./CONTRIBUTING.md)。
984
+ 版本变更记录见 [GitHub Releases](https://github.com/lizhiyao/oh-my-knowledge/releases)。欢迎贡献 — 详见 [CONTRIBUTING](./CONTRIBUTING.md)。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-analysis: detect patterns and generate insights from evaluation results.
3
3
  */
4
- import type { Report, AnalysisResult, Sample, SampleQualityAggregate } from '../types/index.js';
4
+ import type { Report, AnalysisResult, Sample, SampleQualityAggregate, Lang } from '../types/index.js';
5
5
  /** opts for `analyzeResults`. Optional because most older callers don't have
6
6
  * samples in scope; new callers (evaluation-pipeline / evolver) pass them in to
7
7
  * populate `analysis.sampleQuality`. */
@@ -10,7 +10,7 @@ export interface AnalyzeResultsOptions {
10
10
  samples?: Sample[];
11
11
  }
12
12
  /**
13
- * Analyze an evaluation report and produce insights + suggestions.
13
+ * Analyze an evaluation report and produce structured insights.
14
14
  */
15
15
  export declare function analyzeResults(report: Report, opts?: AnalyzeResultsOptions): AnalysisResult;
16
16
  /**
@@ -30,4 +30,5 @@ export declare function analyzeResults(report: Report, opts?: AnalyzeResultsOpti
30
30
  * in grading / judge / verdict. See docs/sample-design-spec.md.
31
31
  */
32
32
  export declare function buildSampleQualityAggregate(samples: Sample[]): SampleQualityAggregate;
33
+ export declare function generateAnalysisSummary(report: Report, lang?: Lang): string | undefined;
33
34
  //# sourceMappingURL=report-diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/analysis/report-diagnostics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAwB,cAAc,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGtH;;yCAEyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,cAAc,CAkD/F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAuErF"}
1
+ {"version":3,"file":"report-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/analysis/report-diagnostics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAwB,cAAc,EAAE,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG5H;;yCAEyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,cAAc,CAkD/F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAuErF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,IAAW,GAAG,MAAM,GAAG,SAAS,CA+O7F"}