niceeval 0.5.4 → 0.6.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 (342) hide show
  1. package/INDEX.md +55 -0
  2. package/dist/agents/types.d.ts +317 -0
  3. package/dist/context/types.d.ts +335 -0
  4. package/dist/i18n/core.d.ts +11 -0
  5. package/dist/i18n/en.d.ts +181 -0
  6. package/dist/i18n/index.d.ts +5 -0
  7. package/dist/i18n/zh-CN.d.ts +183 -0
  8. package/dist/o11y/execution-tree.d.ts +103 -0
  9. package/dist/o11y/otlp/parse.d.ts +3 -0
  10. package/dist/o11y/otlp/receiver.d.ts +21 -0
  11. package/dist/o11y/otlp/select.d.ts +22 -0
  12. package/dist/o11y/otlp/turn-otel.d.ts +43 -0
  13. package/dist/o11y/types.d.ts +190 -0
  14. package/dist/report/aggregate.d.ts +57 -0
  15. package/dist/report/aggregate.js +212 -0
  16. package/dist/report/built-ins/cost-pass-rate-comparison.d.ts +1 -0
  17. package/dist/report/built-ins/cost-pass-rate-comparison.js +17 -0
  18. package/dist/report/built-ins/index.d.ts +1 -0
  19. package/dist/report/built-ins/index.js +2 -0
  20. package/dist/report/components.d.ts +178 -0
  21. package/dist/report/components.js +132 -0
  22. package/dist/report/compute.d.ts +106 -0
  23. package/dist/report/compute.js +618 -0
  24. package/dist/report/flag.d.ts +6 -0
  25. package/dist/report/flag.js +8 -0
  26. package/dist/report/format.d.ts +32 -0
  27. package/dist/report/format.js +126 -0
  28. package/dist/report/index.d.ts +19 -0
  29. package/dist/report/index.js +30 -0
  30. package/dist/report/load.d.ts +12 -0
  31. package/dist/report/load.js +56 -0
  32. package/dist/report/locale.d.ts +83 -0
  33. package/dist/report/locale.js +160 -0
  34. package/dist/report/metrics.d.ts +21 -0
  35. package/dist/report/metrics.js +115 -0
  36. package/dist/report/primitives.d.ts +64 -0
  37. package/dist/report/primitives.js +113 -0
  38. package/dist/report/react/AttemptList.d.ts +23 -0
  39. package/dist/report/react/AttemptList.js +20 -0
  40. package/dist/report/react/DeltaTable.d.ts +8 -0
  41. package/dist/report/react/DeltaTable.js +24 -0
  42. package/dist/report/react/EvalList.d.ts +10 -0
  43. package/dist/report/react/EvalList.js +0 -0
  44. package/dist/report/react/ExperimentList.d.ts +10 -0
  45. package/dist/report/react/ExperimentList.js +15 -0
  46. package/dist/report/react/GroupSummary.d.ts +8 -0
  47. package/dist/report/react/GroupSummary.js +8 -0
  48. package/dist/report/react/MetricBars.d.ts +10 -0
  49. package/dist/report/react/MetricBars.js +48 -0
  50. package/dist/report/react/MetricLine.d.ts +9 -0
  51. package/dist/report/react/MetricLine.js +68 -0
  52. package/dist/report/react/MetricMatrix.d.ts +10 -0
  53. package/dist/report/react/MetricMatrix.js +23 -0
  54. package/dist/report/react/MetricScatter.d.ts +9 -0
  55. package/dist/report/react/MetricScatter.js +100 -0
  56. package/dist/report/react/MetricTable.d.ts +11 -0
  57. package/dist/report/react/MetricTable.js +26 -0
  58. package/dist/report/react/RunOverview.d.ts +8 -0
  59. package/dist/report/react/RunOverview.js +12 -0
  60. package/dist/report/react/Scoreboard.d.ts +8 -0
  61. package/dist/report/react/Scoreboard.js +26 -0
  62. package/dist/report/react/cell.d.ts +9 -0
  63. package/dist/report/react/cell.js +9 -0
  64. package/dist/report/react/chart-math.d.ts +14 -0
  65. package/dist/report/react/chart-math.js +68 -0
  66. package/dist/report/react/colors.d.ts +14 -0
  67. package/dist/report/react/colors.js +45 -0
  68. package/dist/report/react/fixtures.d.ts +19 -0
  69. package/dist/report/react/fixtures.js +393 -0
  70. package/dist/report/react/format.d.ts +3 -0
  71. package/dist/report/react/format.js +7 -0
  72. package/dist/report/react/index.d.ts +6 -0
  73. package/dist/report/react/index.js +14 -0
  74. package/dist/report/report.d.ts +24 -0
  75. package/dist/report/report.js +49 -0
  76. package/dist/report/text/faces.d.ts +29 -0
  77. package/dist/report/text/faces.js +503 -0
  78. package/dist/report/text/layout.d.ts +75 -0
  79. package/dist/report/text/layout.js +173 -0
  80. package/dist/report/text/plot.d.ts +37 -0
  81. package/dist/report/text/plot.js +81 -0
  82. package/dist/report/text/table.d.ts +8 -0
  83. package/dist/report/text/table.js +86 -0
  84. package/dist/report/tree.d.ts +99 -0
  85. package/dist/report/tree.js +228 -0
  86. package/dist/report/types.d.ts +420 -0
  87. package/dist/report/types.js +4 -0
  88. package/dist/report/web.d.ts +15 -0
  89. package/dist/report/web.js +37 -0
  90. package/dist/results/annotated-source.d.ts +61 -0
  91. package/dist/results/attempt-evidence.d.ts +69 -0
  92. package/dist/results/attempt-source.d.ts +15 -0
  93. package/dist/results/locator.d.ts +75 -0
  94. package/dist/results/locator.js +0 -0
  95. package/dist/results/select.d.ts +45 -0
  96. package/dist/results/select.js +230 -0
  97. package/dist/results/source-hash.d.ts +9 -0
  98. package/dist/results/types.d.ts +204 -0
  99. package/dist/runner/eval-source.d.ts +22 -0
  100. package/dist/runner/fingerprint.d.ts +23 -0
  101. package/dist/runner/types.d.ts +332 -0
  102. package/dist/sandbox/docker-stream.d.ts +24 -0
  103. package/dist/sandbox/docker.d.ts +84 -0
  104. package/dist/sandbox/e2b.d.ts +31 -0
  105. package/dist/sandbox/errors.d.ts +4 -0
  106. package/dist/sandbox/local-files.d.ts +6 -0
  107. package/dist/sandbox/paths.d.ts +4 -0
  108. package/dist/sandbox/registry.d.ts +13 -0
  109. package/dist/sandbox/resolve.d.ts +40 -0
  110. package/dist/sandbox/retry.d.ts +10 -0
  111. package/dist/sandbox/shell.d.ts +11 -0
  112. package/dist/sandbox/source-files.d.ts +13 -0
  113. package/dist/sandbox/types.d.ts +203 -0
  114. package/dist/sandbox/vercel.d.ts +37 -0
  115. package/dist/scoring/types.d.ts +70 -0
  116. package/dist/shared/aggregate.d.ts +29 -0
  117. package/dist/shared/aggregate.js +55 -0
  118. package/dist/shared/types.d.ts +27 -0
  119. package/dist/shared/verdict.d.ts +27 -0
  120. package/dist/shared/verdict.js +34 -0
  121. package/dist/tty-line.d.ts +6 -0
  122. package/dist/types.d.ts +7 -0
  123. package/dist/util.d.ts +22 -0
  124. package/docs-site/zh/concepts/adapter.mdx +5 -5
  125. package/docs-site/zh/concepts/assert.mdx +8 -8
  126. package/docs-site/zh/concepts/evals.mdx +5 -5
  127. package/docs-site/zh/concepts/experiment.mdx +2 -2
  128. package/docs-site/zh/concepts/judge.mdx +9 -9
  129. package/docs-site/zh/concepts/overview.mdx +2 -2
  130. package/docs-site/zh/concepts/tier.mdx +6 -6
  131. package/docs-site/zh/example/claude-code-codex-plugin.mdx +9 -5
  132. package/docs-site/zh/example/claude-code-codex-skill.mdx +12 -7
  133. package/docs-site/zh/guides/agent-feedback-loop.mdx +235 -78
  134. package/docs-site/zh/guides/connect-otel.mdx +3 -3
  135. package/docs-site/zh/guides/connect-your-agent.mdx +2 -2
  136. package/docs-site/zh/guides/custom-reports.mdx +196 -36
  137. package/docs-site/zh/guides/experiments.mdx +7 -1
  138. package/docs-site/zh/guides/fixtures.mdx +1 -1
  139. package/docs-site/zh/guides/official-adapters.mdx +31 -9
  140. package/docs-site/zh/guides/publish-report.mdx +3 -3
  141. package/docs-site/zh/guides/report-components.mdx +194 -55
  142. package/docs-site/zh/guides/reporters.mdx +2 -2
  143. package/docs-site/zh/guides/results-data.mdx +35 -34
  144. package/docs-site/zh/guides/runner.mdx +2 -2
  145. package/docs-site/zh/guides/sandbox-agent.mdx +2 -2
  146. package/docs-site/zh/guides/{sandbox-backends.mdx → sandbox-providers.mdx} +11 -11
  147. package/docs-site/zh/guides/viewing-results.mdx +199 -79
  148. package/docs-site/zh/guides/write-experiment.mdx +9 -1
  149. package/docs-site/zh/guides/write-send.mdx +2 -2
  150. package/docs-site/zh/index.mdx +4 -3
  151. package/docs-site/zh/introduction.mdx +2 -1
  152. package/docs-site/zh/quickstart.mdx +5 -3
  153. package/docs-site/zh/reference/builtin-agents.mdx +38 -13
  154. package/docs-site/zh/reference/capabilities.mdx +1 -1
  155. package/docs-site/zh/reference/cli.mdx +36 -13
  156. package/docs-site/zh/reference/define-agent.mdx +12 -12
  157. package/docs-site/zh/reference/define-config.mdx +1 -1
  158. package/docs-site/zh/reference/define-eval.mdx +3 -3
  159. package/docs-site/zh/reference/events.mdx +7 -1
  160. package/docs-site/zh/reference/expect.mdx +3 -3
  161. package/package.json +10 -6
  162. package/src/agents/bub.ts +129 -42
  163. package/src/agents/claude-code.test.ts +152 -0
  164. package/src/agents/claude-code.ts +127 -13
  165. package/src/agents/codex.test.ts +192 -0
  166. package/src/agents/codex.ts +151 -12
  167. package/src/agents/index.ts +9 -3
  168. package/src/agents/manifest.ts +41 -0
  169. package/src/agents/plugin-config.test.ts +94 -0
  170. package/src/agents/shared.ts +33 -2
  171. package/src/agents/skills.test.ts +214 -0
  172. package/src/agents/skills.ts +304 -0
  173. package/src/agents/streaming.ts +5 -5
  174. package/src/agents/types.ts +54 -2
  175. package/src/cli.ts +74 -47
  176. package/src/context/context.test.ts +20 -2
  177. package/src/context/control-flow.ts +1 -1
  178. package/src/context/session.test.ts +92 -1
  179. package/src/context/session.ts +23 -1
  180. package/src/context/types.ts +4 -4
  181. package/src/define.test.ts +8 -8
  182. package/src/define.ts +11 -11
  183. package/src/expect/index.ts +5 -5
  184. package/src/i18n/en.ts +34 -15
  185. package/src/i18n/zh-CN.ts +37 -21
  186. package/src/index.ts +1 -1
  187. package/src/o11y/execution-tree.test.ts +452 -0
  188. package/src/o11y/execution-tree.ts +367 -0
  189. package/src/o11y/otlp/receiver.ts +1 -1
  190. package/src/o11y/otlp/select.ts +7 -3
  191. package/src/o11y/parsers/claude-code.test.ts +175 -0
  192. package/src/o11y/parsers/claude-code.ts +32 -0
  193. package/src/o11y/types.ts +6 -1
  194. package/src/report/aggregate.ts +26 -20
  195. package/src/report/built-in-user-parity.test.tsx +643 -0
  196. package/src/report/built-ins/cost-pass-rate-comparison.tsx +23 -0
  197. package/src/report/built-ins/index.ts +2 -0
  198. package/src/report/components.tsx +223 -50
  199. package/src/report/compute.ts +358 -53
  200. package/src/report/dual-render.test.tsx +1125 -0
  201. package/src/report/flag.ts +1 -1
  202. package/src/report/format.ts +50 -2
  203. package/src/report/index.ts +48 -14
  204. package/src/report/load.ts +1 -1
  205. package/src/report/locale.ts +206 -0
  206. package/src/report/metrics.ts +39 -15
  207. package/src/report/primitives.tsx +100 -2
  208. package/src/report/react/AttemptList.tsx +115 -0
  209. package/src/report/react/DeltaTable.tsx +9 -6
  210. package/src/report/react/EvalList.tsx +0 -0
  211. package/src/report/react/ExperimentList.tsx +108 -0
  212. package/src/report/react/GroupSummary.tsx +66 -0
  213. package/src/report/react/MetricBars.tsx +24 -13
  214. package/src/report/react/MetricLine.tsx +21 -21
  215. package/src/report/react/MetricMatrix.tsx +8 -4
  216. package/src/report/react/MetricScatter.tsx +136 -96
  217. package/src/report/react/MetricTable.tsx +115 -15
  218. package/src/report/react/RunOverview.tsx +48 -26
  219. package/src/report/react/Scoreboard.tsx +15 -7
  220. package/src/report/react/cell.tsx +18 -9
  221. package/src/{view/app/lib/chart.ts → report/react/chart-math.ts} +2 -6
  222. package/src/report/react/colors.ts +24 -15
  223. package/src/report/react/enhance.js +129 -0
  224. package/src/report/react/fixtures.ts +163 -34
  225. package/src/report/react/format.ts +1 -1
  226. package/src/report/react/index.tsx +22 -6
  227. package/src/report/react/render.test.tsx +164 -31
  228. package/src/report/react/styles.css +405 -213
  229. package/src/report/report.test.ts +403 -94
  230. package/src/report/report.ts +29 -11
  231. package/src/report/text/faces.ts +303 -95
  232. package/src/report/text/layout.ts +76 -11
  233. package/src/report/text/table.ts +98 -0
  234. package/src/report/tree.ts +103 -20
  235. package/src/report/types.ts +196 -25
  236. package/src/report/web.ts +46 -19
  237. package/src/results/annotated-source.test.ts +146 -0
  238. package/src/results/annotated-source.ts +128 -0
  239. package/src/results/attempt-evidence.test.ts +158 -0
  240. package/src/results/attempt-evidence.ts +158 -0
  241. package/src/results/attempt-source.ts +48 -0
  242. package/src/results/copy.ts +154 -139
  243. package/src/results/format.ts +54 -47
  244. package/src/results/host-equivalence.test.ts +527 -0
  245. package/src/results/index.ts +56 -14
  246. package/src/results/locator.test.ts +198 -0
  247. package/src/results/locator.ts +0 -0
  248. package/src/results/open.ts +392 -175
  249. package/src/results/results.test.ts +943 -494
  250. package/src/results/select.ts +129 -23
  251. package/src/results/skipped-notice.ts +0 -0
  252. package/src/results/source-hash.ts +28 -0
  253. package/src/results/types.ts +98 -62
  254. package/src/results/writer.ts +304 -176
  255. package/src/runner/attempt.test.ts +170 -0
  256. package/src/runner/attempt.ts +48 -13
  257. package/src/runner/discover.test.ts +65 -0
  258. package/src/runner/discover.ts +6 -2
  259. package/src/runner/eval-source.test.ts +121 -0
  260. package/src/runner/eval-source.ts +45 -0
  261. package/src/runner/fingerprint.ts +54 -1
  262. package/src/runner/remote-sandbox.ts +1 -1
  263. package/src/runner/report.test.ts +6 -8
  264. package/src/runner/report.ts +5 -4
  265. package/src/runner/reporters/artifacts.ts +27 -41
  266. package/src/runner/reporters/braintrust.test.ts +3 -3
  267. package/src/runner/reporters/braintrust.ts +1 -1
  268. package/src/runner/reporters/console.ts +6 -6
  269. package/src/runner/reporters/json.ts +4 -4
  270. package/src/runner/reporters/live.test.ts +56 -0
  271. package/src/runner/reporters/live.ts +36 -10
  272. package/src/runner/reporters/quiet.test.ts +66 -0
  273. package/src/runner/reporters/quiet.ts +49 -0
  274. package/src/runner/reporters/shared.ts +5 -5
  275. package/src/runner/reporters/table.ts +17 -17
  276. package/src/runner/run.ts +61 -102
  277. package/src/runner/types.ts +43 -32
  278. package/src/sandbox/checkpoint.ts +1 -1
  279. package/src/sandbox/docker.ts +15 -2
  280. package/src/sandbox/e2b.ts +11 -5
  281. package/src/sandbox/errors.ts +13 -0
  282. package/src/sandbox/index.ts +3 -3
  283. package/src/sandbox/local-files.ts +1 -1
  284. package/src/sandbox/registry.ts +6 -5
  285. package/src/sandbox/resolve.ts +38 -23
  286. package/src/sandbox/retry.test.ts +68 -0
  287. package/src/sandbox/retry.ts +44 -0
  288. package/src/sandbox/types.ts +24 -24
  289. package/src/sandbox/vercel.ts +17 -3
  290. package/src/scoring/collector.ts +3 -3
  291. package/src/scoring/judge.ts +2 -2
  292. package/src/scoring/scoped.ts +13 -1
  293. package/src/scoring/types.ts +7 -7
  294. package/src/scoring/verdict.ts +4 -4
  295. package/src/shared/aggregate.ts +23 -3
  296. package/src/shared/types.ts +2 -2
  297. package/src/shared/{outcome.ts → verdict.ts} +15 -15
  298. package/src/show/compose.ts +12 -132
  299. package/src/show/index.ts +125 -94
  300. package/src/show/render.ts +660 -160
  301. package/src/show/show.test.ts +472 -253
  302. package/src/source-loc.ts +1 -1
  303. package/src/tty-line.ts +32 -0
  304. package/src/types.ts +2 -2
  305. package/src/util.test.ts +21 -1
  306. package/src/util.ts +5 -1
  307. package/src/view/app/App.tsx +33 -198
  308. package/src/view/app/components/AttemptModal.tsx +6 -6
  309. package/src/view/app/components/CodeView.tsx +2 -2
  310. package/src/view/app/components/CopyControls.tsx +32 -36
  311. package/src/view/app/components/SkippedRunsBanner.tsx +140 -0
  312. package/src/view/app/components/ui/badge.tsx +1 -1
  313. package/src/view/app/components/ui/dialog.tsx +2 -2
  314. package/src/view/app/i18n.ts +40 -31
  315. package/src/view/app/lib/artifact-url.ts +1 -1
  316. package/src/view/app/lib/attempt-route.test.ts +37 -47
  317. package/src/view/app/lib/attempt-route.ts +26 -26
  318. package/src/view/app/lib/rows.ts +9 -112
  319. package/src/view/app/lib/verdict.ts +25 -0
  320. package/src/view/app/main.tsx +9 -12
  321. package/src/view/app/pages/RunsPage.tsx +4 -4
  322. package/src/view/app/pages/TracesPage.tsx +3 -3
  323. package/src/view/app/shared.ts +0 -1
  324. package/src/view/app/types.ts +6 -51
  325. package/src/view/artifact-serving.test.ts +136 -0
  326. package/src/view/client-dist/app.css +1 -1
  327. package/src/view/client-dist/app.js +21 -21
  328. package/src/view/data.test.ts +214 -143
  329. package/src/view/data.ts +166 -120
  330. package/src/view/index.ts +23 -11
  331. package/src/view/server.ts +52 -17
  332. package/src/view/shared/types.ts +22 -31
  333. package/src/view/styles.css +117 -327
  334. package/src/view/view-report.test.ts +146 -98
  335. package/src/report/default-report.tsx +0 -222
  336. package/src/report/dual-face.test.tsx +0 -527
  337. package/src/report/react/CaseList.tsx +0 -70
  338. package/src/view/app/components/CostScoreChart.tsx +0 -147
  339. package/src/view/app/components/ExperimentTable.tsx +0 -284
  340. package/src/view/app/components/GroupSelector.tsx +0 -61
  341. package/src/view/app/components/primitives.tsx +0 -43
  342. package/src/view/app/lib/outcome.ts +0 -82
package/INDEX.md ADDED
@@ -0,0 +1,55 @@
1
+ # NiceEval AI 文档索引
2
+
3
+ 这是 coding agent 读取 NiceEval 文档的稳定入口,随 npm 包发布,不属于公开文档站。不要根据训练数据、官网或 GitHub `main` 分支猜测 API。
4
+
5
+ 以下路径都相对于包根 `node_modules/niceeval/`。文档位于 `docs-site/zh/`,与当前安装的 NiceEval 版本一起发布。先按任务读取对应页面;页面再引用其它概念或参考时,继续读取包内文件。
6
+
7
+ ## 开始接入
8
+
9
+ | 任务 | 读取 |
10
+ | --- | --- |
11
+ | 初始化并跑通第一条 Eval | `docs-site/zh/quickstart.mdx` |
12
+ | 理解 Adapter、Experiment、Eval 的分工 | `docs-site/zh/concepts/overview.mdx` |
13
+ | 接入自己的 Agent | `docs-site/zh/guides/connect-your-agent.mdx` |
14
+ | 选择官方 Adapter | `docs-site/zh/guides/official-adapters.mdx` |
15
+ | 接入 coding agent CLI | `docs-site/zh/guides/sandbox-agent.mdx` |
16
+ | 选择 Sandbox Provider | `docs-site/zh/guides/sandbox-providers.mdx` |
17
+
18
+ ## 编写配置与 Eval
19
+
20
+ | 任务 | 读取 |
21
+ | --- | --- |
22
+ | 编写 Adapter | `docs-site/zh/concepts/adapter.mdx`、`docs-site/zh/reference/define-agent.mdx` |
23
+ | 映射消息、工具调用和事件流 | `docs-site/zh/guides/write-send.mdx`、`docs-site/zh/reference/events.mdx` |
24
+ | 编写 Experiment | `docs-site/zh/guides/write-experiment.mdx` |
25
+ | 编写 Eval | `docs-site/zh/concepts/evals.mdx`、`docs-site/zh/reference/define-eval.mdx` |
26
+ | 编写断言和评分 | `docs-site/zh/guides/authoring.mdx`、`docs-site/zh/guides/scoring-guide.mdx`、`docs-site/zh/reference/expect.mdx` |
27
+ | 配置 Judge | `docs-site/zh/concepts/judge.mdx`、`docs-site/zh/reference/define-config.mdx` |
28
+ | 配置 OTel | `docs-site/zh/guides/connect-otel.mdx` |
29
+ | 查 CLI 命令与 flag | `docs-site/zh/reference/cli.mdx` |
30
+
31
+ ## 运行、调试与优化
32
+
33
+ | 任务 | 读取 |
34
+ | --- | --- |
35
+ | 让 AI 自主运行、观察、修改和重跑 | `docs-site/zh/guides/agent-feedback-loop.mdx` |
36
+ | 用 `show`、`view` 和 artifact 定位失败 | `docs-site/zh/guides/viewing-results.mdx` |
37
+ | 组织实验和对比 | `docs-site/zh/guides/experiments.mdx` |
38
+ | 编写自定义报告 | `docs-site/zh/guides/custom-reports.mdx`、`docs-site/zh/guides/report-components.mdx` |
39
+ | 读取或转换结构化结果 | `docs-site/zh/guides/results-data.mdx` |
40
+
41
+ ## 专项场景
42
+
43
+ | 任务 | 读取 |
44
+ | --- | --- |
45
+ | 评估 Claude Code / Codex Skill | `docs-site/zh/example/claude-code-codex-skill.mdx` |
46
+ | 评估 Plugin、Hook 或 MCP server | `docs-site/zh/example/claude-code-codex-plugin.mdx` |
47
+ | 编写多轮会话 | `docs-site/zh/concepts/adapter.mdx`、`docs-site/zh/guides/write-send.mdx` |
48
+ | 编写人工审批流(HITL) | `docs-site/zh/concepts/hitl.mdx` |
49
+ | 做 feature flag A/B 对比 | `docs-site/zh/concepts/tier.mdx`、`docs-site/zh/concepts/experiment.mdx` |
50
+
51
+ ## 版本规则
52
+
53
+ - 安装后只从本索引进入包内文档。官网适合安装前了解产品,不是安装版本的 API 事实源。
54
+ - 升级 `niceeval` 后重新运行 `niceeval init`,刷新项目里的托管指引。
55
+ - 如果某个路径不存在,先重新读取本文件。不要自行推测替代文件名或旧 API。
@@ -0,0 +1,317 @@
1
+ import type { Cleanup } from "../shared/types.ts";
2
+ import type { StreamEvent, TraceSpan, Usage } from "../o11y/types.ts";
3
+ import type { Sandbox } from "../sandbox/types.ts";
4
+ /**
5
+ * MCP server 描述符 —— 支持 MCP 的 adapter(Claude Code / Codex)共用的工具服务单元,
6
+ * 不是 native plugin 的一种。在 agent factory config 里声明,setup 阶段写进各自的配置文件。
7
+ * 见 docs/feature/adapters/architecture/coding-agent-extensions.md「类型边界」。
8
+ */
9
+ export interface McpServer {
10
+ /** 服务器唯一名(config key)。 */
11
+ name: string;
12
+ /** 启动命令(如 "npx"、"node"、"uvx")。 */
13
+ command: string;
14
+ /** 传给命令的参数。 */
15
+ args?: string[];
16
+ /** 注入服务器进程的环境变量。 */
17
+ env?: Record<string, string>;
18
+ }
19
+ /**
20
+ * Skill 的来源描述 —— Claude Code / Codex / Bub 共用的**数据类型**:只统一「从哪里取得
21
+ * 哪份 Skill」,安装位置、发现机制、要不要额外写 project instruction 由各 Adapter 决定。
22
+ * 见 docs/feature/adapters/architecture/coding-agent-extensions.md「类型边界」。
23
+ */
24
+ export type SkillSpec = {
25
+ kind: "local";
26
+ /** 相对项目根(跑 niceeval 的目录)的 Skill 文件或目录:`SKILL.md`、含 `SKILL.md` 的目录,或单个 `.md`。 */
27
+ path: string;
28
+ /** 展示名;省略时由文件或目录名推导(`<dir>/SKILL.md` → `<dir>`,`foo.md` → `foo`)。 */
29
+ name?: string;
30
+ } | {
31
+ kind: "repo";
32
+ /** GitHub `owner/repo` 或 Git URL。 */
33
+ source: string;
34
+ /** 多 Skill Repo 中要启用的 Skill;repo 只有一个 Skill 时可省略,多个时省略即 setup 失败。 */
35
+ skills?: string[];
36
+ /** Tag、Commit 或 Branch;省略表示 repo 默认 ref。 */
37
+ ref?: string;
38
+ };
39
+ /** Manifest 里的一条 Skill 安装记录:本地(带内容哈希)或 repo(带来源与 ref)。 */
40
+ export type AgentSetupSkill = {
41
+ kind: "local";
42
+ name: string;
43
+ path: string;
44
+ sha256: string;
45
+ } | {
46
+ kind: "repo";
47
+ source: string;
48
+ ref?: string;
49
+ skills: string[];
50
+ };
51
+ /**
52
+ * 一次 Agent setup 实际装了什么 —— 沙箱型 Coding Agent Adapter 在 setup 收尾写出的安装清单。
53
+ * 沙箱内落在 `__niceeval__/agent-setup.json`,运行器把它作为 attempt artifact 存成
54
+ * `agent-setup.json`(见 docs/feature/results/architecture.md)。不参与评分,只回答「这次实际
55
+ * 装了什么」;**环境变量值与 secret 不写进来**(所以 mcpServers 只记 name/command/args)。
56
+ */
57
+ export interface AgentSetupManifest {
58
+ /** 装进去的 Skill(按配置顺序;同名来自多个来源时逐条保留,不静默合并)。 */
59
+ skills: AgentSetupSkill[];
60
+ /** Agent 原生 Plugin(Claude Code / Codex 各自的 Marketplace 协议)。 */
61
+ nativePlugins?: Array<{
62
+ agent: "claude-code" | "codex";
63
+ marketplace: {
64
+ name: string;
65
+ source: string;
66
+ ref?: string;
67
+ };
68
+ name: string;
69
+ /** 安装后 CLI 报告的版本;取不到时省略。 */
70
+ resolvedVersion?: string;
71
+ }>;
72
+ /** 挂上的 MCP server(不含 env:secret 不进 manifest)。 */
73
+ mcpServers?: Array<{
74
+ name: string;
75
+ command: string;
76
+ args?: string[];
77
+ }>;
78
+ /** Bub 的 Python Plugin(规范化后的 package 串)。 */
79
+ pythonPlugins?: Array<{
80
+ package: string;
81
+ }>;
82
+ }
83
+ /** 随一轮消息附带的文件(图片等多模态输入)。 */
84
+ export interface InputFile {
85
+ /** 文件名(可选,供 adapter / 模型参考)。 */
86
+ readonly filename?: string;
87
+ /** MIME 类型,如 `image/png`、`image/jpeg`。 */
88
+ readonly mimeType: string;
89
+ /** base64 编码的文件内容(JSON 友好,remote adapter 可直接放进请求体)。 */
90
+ readonly dataBase64: string;
91
+ }
92
+ /**
93
+ * HITL 回答轮里,人的裁决以结构化形式随 `input.responses` 到达——adapter 不需要解析
94
+ * `text` 去猜哪句回答对应哪个请求、算不算批准。见 docs-site/zh/concepts/adapter.mdx
95
+ * 「不同回答的入参」一节的四种典型形态。
96
+ */
97
+ export interface InputResponse {
98
+ /** 对应哪条 input.requested 请求;多个请求并停时靠它对位。 */
99
+ readonly requestId: string;
100
+ /** 与 text 二选一:回答命中了请求 options 里的某个 id(approve / deny…)。 */
101
+ readonly optionId?: string;
102
+ /** 与 optionId 二选一:自由文本回答(请求没有选项,或回答不是任何选项)。 */
103
+ readonly text?: string;
104
+ }
105
+ export interface TurnInput {
106
+ readonly text: string;
107
+ /** 本轮附带的文件(图片等)。adapter 自行决定怎么投递;不支持多模态的 adapter 忽略它。 */
108
+ readonly files?: readonly InputFile[];
109
+ /** 仅回答轮(t.respond / t.respondAll):逐请求的结构化回答,按 requestId 对位。 */
110
+ readonly responses?: readonly InputResponse[];
111
+ }
112
+ /** adapter 的 send 返回值(事件流为核心)。 */
113
+ export interface Turn {
114
+ readonly events: StreamEvent[];
115
+ readonly data?: unknown;
116
+ readonly status: "completed" | "failed" | "waiting";
117
+ readonly usage?: Usage;
118
+ }
119
+ /**
120
+ * 本次运行的 OTLP traces 接收信息(仅当配置了 OTel 接入时有——agent 的 `tracing` 块 /
121
+ * config 的 telemetry 存在)。经 ctx.telemetry 交给 agent。span 只进瀑布图,不喂断言。
122
+ * 远程 HTTP 接入的 send 只需要 spread `headers`(每轮一个新 traceparent);接收端点是
123
+ * 启动期配置(`defineConfig({ telemetry: { port } } )`)固定的,不从这里传。
124
+ */
125
+ export interface Telemetry {
126
+ /** 接收端点(完整路径,形如 http://host.docker.internal:PORT/v1/traces)。 */
127
+ readonly endpoint: string;
128
+ /**
129
+ * env-based 导出的 env(= AgentTracing.env(endpoint) 的结果),ready-to-spread。
130
+ * adapter 的 send 直接 `{ ...ctx.telemetry?.env }` 注入,不必手搓 OTEL_* 拼装。
131
+ */
132
+ readonly env?: Readonly<Record<string, string>>;
133
+ /**
134
+ * 本轮的 W3C trace context(traceparent),每轮一个新值。send 把它 spread 进 HTTP 请求头
135
+ * (或注入子进程 env)——应用埋点支持 context 传播时,本轮 span 挂到我们给的 trace 下,
136
+ * 并发跑 eval 的 span 归属才精确;不带则回退时间窗口归属(该 agent 自动降为串行)。
137
+ */
138
+ readonly headers?: Readonly<Record<string, string>>;
139
+ }
140
+ /**
141
+ * agent 的 OTLP 导出配置 —— 「沙箱里怎么让这个 CLI 把 trace 发到 endpoint」。
142
+ * 刻意从 setup 里拆出来:setup 管装 CLI / 写主配置,这里只管 otel 导出。两种投递方式
143
+ * (互不排斥,按 CLI 而定):
144
+ * · env-based(标准 OTEL_* 环境变量,如 bub/Python OTel SDK)—— 用 `env`;
145
+ * · file-based(CLI 自有配置文件,如 codex 的 config.toml [otel] 块)—— 用 `configure`。
146
+ */
147
+ export interface AgentTracing {
148
+ /**
149
+ * 线协议(codex 发 OTLP/JSON、bub 发 OTLP/protobuf)。接收器按 content-type 自动解码,
150
+ * 此字段仅作声明/日志用,也为将来按协议分流留口。
151
+ */
152
+ protocol?: "http/json" | "http/protobuf";
153
+ /**
154
+ * 接收器粒度(仅非沙箱 agent;沙箱型每沙箱一个,与此无关):
155
+ * · "attempt"(默认)—— 每个 attempt 一个接收器。适合每轮能切换导出端点的被测对象
156
+ * (进程内 adapter,如内置 aiSdkAgent 的可切换 exporter),attempt 间天然隔离、可全并发。
157
+ * · "run" —— 整个 run 共享一个接收器(每 agent 一个)。**长驻服务必选**:应用的 OTEL_*
158
+ * env 进程启动时读一次,per-attempt 端口会在第一个 attempt 结束时失效。span 逐轮归属
159
+ * (traceparent / 时间窗口 + 串行守卫),见 ctx.telemetry.headers。
160
+ * config 配了 `telemetry`(固定端口,无侵入接入的长驻服务场景)的非沙箱 agent 自动按 "run" 处理。
161
+ */
162
+ scope?: "attempt" | "run";
163
+ /**
164
+ * env-based 导出:给 endpoint → 返回要注入每轮 send 的 env(纯函数)。运行器把结果
165
+ * 放进 ctx.telemetry.env,send 直接 spread。
166
+ */
167
+ env?(endpoint: string): Record<string, string>;
168
+ /**
169
+ * file-based 导出:给 sandbox + ctx(ctx.telemetry.endpoint 必有),自己写 / 追加配置文件。
170
+ * 运行器在 agent.setup 之后、首次 send 之前调一次(仅当 tracing 开 + 有 endpoint)。
171
+ * 注:codex 的 [otel.trace_exporter.otlp-http] 是子表,configure 在 setup 写完主配置后
172
+ * 追加到 config.toml 末尾,天然满足「子表在所有上层表之后」。
173
+ */
174
+ configure?(sandbox: Sandbox, ctx: AgentContext): Promise<void> | void;
175
+ }
176
+ /**
177
+ * 一条会话线。核心承诺只有一句:**同一条会话线的每次 send 拿到同一个 `ctx.session`,
178
+ * 新会话线(eval 第一轮 / t.newSession() 之后)拿到一个全新的。**
179
+ * 会话续接(`id`/`capture`、`history`)和 HITL 停轮现场(`hold`/`take`)的存取器都在它上面,
180
+ * "第一轮"是新会话线的自然形态,没有要判断的分支;`state` 是这些存取器之外的逃生舱,
181
+ * 框架从不往里写数据。见 docs-site/zh/concepts/adapter.mdx「AgentContext」一节。
182
+ */
183
+ export interface AgentSession {
184
+ /** 会话续接:服务端记历史。本线记过的会话 id;新会话线是 undefined。 */
185
+ readonly id?: string;
186
+ /** 记回传的会话 id;只在还没记过时落地(first-writer-wins),空值忽略。 */
187
+ capture(id: string | undefined): void;
188
+ /** 会话续接:客户端带全量历史。返回本会话线的历史槽句柄;新线 get() 是空数组。 */
189
+ history<TMsg>(): {
190
+ get(): TMsg[];
191
+ commit(messages: TMsg[]): void;
192
+ };
193
+ /** HITL 停轮现场:存。 */
194
+ hold<T>(state: T): void;
195
+ /** HITL 停轮现场:取,取到即清除(一次消费)。 */
196
+ take<T>(): T | undefined;
197
+ /** 逃生舱:自由状态槽,起始 `{}`,框架从不写入。 */
198
+ readonly state: Record<string, unknown>;
199
+ }
200
+ export interface AgentContext {
201
+ /**
202
+ * 软取消信号:合并了 attempt 超时、run 级中断(用户 Ctrl+C)与 eval 自身的中断请求
203
+ * (见 src/runner/attempt.ts)。adapter 可以选择性检查它(或直接传给 `fetch`)以提前
204
+ * 优雅退出,但这不是唯一的硬边界——即便 adapter 完全忽略它,运行器也会用
205
+ * `Effect.timeoutTo` 兜底强制收尾(停沙箱容器)。
206
+ */
207
+ readonly signal: AbortSignal;
208
+ /** 本次 attempt 用的模型名,透传自 experiment 的 `model` 字段。sandbox 型 agent 通常在 setup 里用它写配置,remote 型通常在 send 里用它选模型。 */
209
+ readonly model?: string;
210
+ /** 模型推理努力程度;归属同 model——实验决定,省略时不覆盖 agent 原生默认。 */
211
+ readonly reasoningEffort?: string;
212
+ /**
213
+ * experiment 的 `flags` 字段原样透传,内容和结构完全由 experiment 作者自定义
214
+ * (如 `{ webResearch: true }`、`{ systemPrompt: "..." }`)。adapter 按自己的约定
215
+ * 读取其中的字段;框架本身不解释、不校验它的内容。命名特意避开 CLI 解析出的
216
+ * `flag`(跑法层面的 --timeout/--budget 等),两者是不相关的概念。
217
+ */
218
+ readonly flags: Readonly<Record<string, unknown>>;
219
+ /**
220
+ * 路径推导出的实验 id(与结果归属 `runWho` / `AgentRun.experimentId` 同源);不经
221
+ * experiment 跑(如脱离 CLI、直接构造 `AgentRun` 的场景)时为 undefined。典型用途:
222
+ * `SandboxSpec.setup` 钩子按实验隔离跨 attempt 的状态(缓存目录名、快照 tag 等按
223
+ * `ctx.experimentId` 分区),或 adapter 按实验切换鉴权 / 路由。与 `flags`(实验条件的
224
+ * 具体取值)是两个维度——这里只是「跑的是哪个实验」的稳定标识,不携带条件内容。
225
+ */
226
+ readonly experimentId?: string;
227
+ /** 仅沙箱型 agent 有(运行器按 --sandbox 备好)。 */
228
+ readonly sandbox: Sandbox;
229
+ readonly session: AgentSession;
230
+ /**
231
+ * 仅当配置了 OTel 接入时有(agent 的 `tracing` 块 / config 的 telemetry 存在):
232
+ * 本次运行的 OTLP traces 接收信息(endpoint + env-based 导出 env)。
233
+ * 怎么把它交给 CLI 由 agent 的 `tracing` 块声明:env-based 的把 ctx.telemetry.env
234
+ * spread 进 send;file-based 的在 tracing.configure 里写配置。远程 HTTP 接入的 send
235
+ * 只需要把 headers spread 进请求头(每轮一个新 traceparent);端点是启动期配置
236
+ * (defineConfig({ telemetry: { port } }))固定的,不从这里传。
237
+ */
238
+ readonly telemetry?: Telemetry;
239
+ /**
240
+ * 写一行进运行器自身的进度日志(落 stderr,或调用方传入的 `onProgress` 回调)。
241
+ * 超时失败时,最近若干行会并入结果的 error 信息,方便定位卡在哪一步。
242
+ * 与 `Sandbox.appendLog` 是两回事:那个是把一行写进容器自己的原生日志
243
+ * (`docker logs` 能看到),这里只是运行器的观测通道。
244
+ */
245
+ log(msg: string): void;
246
+ }
247
+ /**
248
+ * agent 自己的沙箱生命周期(每个沙箱一次,与「每轮 send」分开):
249
+ * `setup` 装 CLI、写配置(model/base/auth 等本轮内不变的东西),`send` 只管把一轮 prompt
250
+ * 跑起来(第一次 fresh / 后续 resume)+ 解析 transcript,`teardown` 清理。
251
+ * 运行器在备好沙箱(上传 / 基线 / eval.setup)后、第一次 send 前调一次 `setup`;
252
+ * `setup` 可返回 cleanup 闭包,与 `teardown` 都在 finally 跑。
253
+ */
254
+ export type AgentSetup = (sandbox: Sandbox, ctx: AgentContext) => Promise<void | Cleanup> | void | Cleanup;
255
+ export type AgentTeardown = (sandbox: Sandbox, ctx: AgentContext) => Promise<void> | void;
256
+ /**
257
+ * 本 agent 的原生 OTLP span → canonical GenAI semconv 的薄 mapper。
258
+ * 由 adapter 声明(和 tracing.env 一样属于「连到谁」的特殊性),core 只调接口——
259
+ * 省略时 core 走通用 heuristic 兜底,不按 agent 名字分支。
260
+ */
261
+ export type SpanMapper = (spans: TraceSpan[]) => TraceSpan[];
262
+ /** 注册表里的 agent(defineAgent / defineSandboxAgent 产出)。 */
263
+ export interface Agent {
264
+ readonly name: string;
265
+ /**
266
+ * 内部判别字段(用户不声明):`defineSandboxAgent` 恒设 "sandbox",`defineAgent` 恒设
267
+ * "remote"。t 上的能力不再是问卷式声明,而是构造证据——sandbox 型才解锁
268
+ * `t.sandbox`/`t.sandbox.fileChanged()` 等文件系统断言,见 docs-site「能力从哪来」一节。
269
+ */
270
+ readonly kind: "sandbox" | "remote";
271
+ setup?: AgentSetup;
272
+ /** OTLP 导出配置(仅当此字段存在时运行器才为该 agent 开 OTLP 接收);与 setup 分开,见 AgentTracing。 */
273
+ tracing?: AgentTracing;
274
+ /** 原生 span → canonical 的薄 mapper;省略走通用 heuristic。只影响瀑布图。 */
275
+ spanMapper?: SpanMapper;
276
+ send(input: TurnInput, ctx: AgentContext): Promise<Turn>;
277
+ teardown?: AgentTeardown;
278
+ }
279
+ /** `defineSandboxAgent()` 的入参形状(见 src/define.ts)——`kind: "sandbox"` 由 define 固定填入,不由用户声明。 */
280
+ export interface SandboxAgentDef {
281
+ /** agent 的显示名/标识,原样进入 `Agent.name`——不是注册表查找 key,只用于展示、结果归属与去重指纹。 */
282
+ name: string;
283
+ /**
284
+ * 每个沙箱一次(不是每轮一次):装 CLI、写 config.toml / 鉴权配置(model/base/auth 等
285
+ * 本轮内不变的东西)。运行器在沙箱备好(上传/基线/eval.setup 之后)、第一次 send 前
286
+ * 调用一次。可返回一个 cleanup 闭包,与 `teardown` 一起在 finally 里跑。
287
+ */
288
+ setup?: AgentSetup;
289
+ /** OTLP 导出配置:沙箱里怎么让 CLI 把 trace 发到 endpoint(env / 配置文件),从 setup 拆出。 */
290
+ tracing?: AgentTracing;
291
+ /** 原生 span → canonical 的薄 mapper;省略走通用 heuristic。只影响瀑布图。 */
292
+ spanMapper?: SpanMapper;
293
+ /** 每轮一次:跑 prompt(fresh / resume)+ 解析成 events。 */
294
+ send(input: TurnInput, ctx: AgentContext): Promise<Turn>;
295
+ /** 沙箱销毁前的清理(与 setup 返回的 cleanup 一起、都在 finally 里跑一次)。 */
296
+ teardown?: AgentTeardown;
297
+ }
298
+ /** `defineAgent()` 的入参形状(见 src/define.ts)——`kind: "remote"` 由 define 固定填入,不由用户声明。 */
299
+ export interface RemoteAgentDef {
300
+ /** agent 的显示名/标识,原样进入 `Agent.name`——不是注册表查找 key,只用于展示、结果归属与去重指纹。 */
301
+ name: string;
302
+ /**
303
+ * 每个 attempt 一次(remote agent 没有真实沙箱,运行器会传入一个仅含 `workdir`/`sandboxId`/
304
+ * `otlpHost`/`stop` 等元信息的 stub `Sandbox`,其余方法调用即抛错——不要在这里调用
305
+ * 文件/命令类沙箱方法)。常用于建立连接、鉴权等一次性准备。可返回一个 cleanup 闭包,
306
+ * 与 `teardown` 都在 finally 里跑。
307
+ */
308
+ setup?: AgentSetup;
309
+ /** OTLP 导出配置:远程被测对象怎么把 trace 发到 endpoint(env-based 注入 / file-based 配置)。 */
310
+ tracing?: AgentTracing;
311
+ /** 原生 span → canonical 的薄 mapper;省略走通用 heuristic。只影响瀑布图。 */
312
+ spanMapper?: SpanMapper;
313
+ /** 每轮一次:把一轮 prompt 发给远程被测对象(HTTP/SDK 等),解析响应成 events。 */
314
+ send(input: TurnInput, ctx: AgentContext): Promise<Turn>;
315
+ /** 运行结束前的清理(与 setup 返回的 cleanup 一起、都在 finally 里跑一次)。 */
316
+ teardown?: AgentTeardown;
317
+ }