niceeval 0.6.1 → 0.7.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 (378) hide show
  1. package/INDEX.md +23 -23
  2. package/README.zh.md +6 -6
  3. package/dist/agents/types.d.ts +69 -7
  4. package/dist/context/types.d.ts +32 -12
  5. package/dist/i18n/en.d.ts +54 -0
  6. package/dist/i18n/zh-CN.d.ts +57 -3
  7. package/dist/o11y/types.d.ts +16 -2
  8. package/dist/report/aggregate.d.ts +32 -24
  9. package/dist/report/aggregate.js +158 -50
  10. package/dist/report/built-in/index.d.ts +2 -0
  11. package/dist/report/built-in/index.js +8 -0
  12. package/dist/report/components.d.ts +93 -160
  13. package/dist/report/components.js +377 -114
  14. package/dist/report/compute.d.ts +87 -81
  15. package/dist/report/compute.js +597 -417
  16. package/dist/report/flag.d.ts +32 -6
  17. package/dist/report/flag.js +92 -4
  18. package/dist/report/format.d.ts +19 -11
  19. package/dist/report/format.js +30 -13
  20. package/dist/report/index.d.ts +16 -16
  21. package/dist/report/index.js +20 -21
  22. package/dist/report/load.js +3 -2
  23. package/dist/report/locale.d.ts +57 -33
  24. package/dist/report/locale.js +122 -56
  25. package/dist/report/metrics.d.ts +23 -4
  26. package/dist/report/metrics.js +110 -25
  27. package/dist/report/primitives.d.ts +48 -15
  28. package/dist/report/primitives.js +135 -26
  29. package/dist/report/react/AttemptList.d.ts +9 -7
  30. package/dist/report/react/AttemptList.js +17 -10
  31. package/dist/report/react/DeltaTable.js +19 -18
  32. package/dist/report/react/EvalList.d.ts +4 -4
  33. package/dist/report/react/EvalList.js +0 -0
  34. package/dist/report/react/ExperimentComparison.d.ts +10 -0
  35. package/dist/report/react/ExperimentComparison.js +12 -0
  36. package/dist/report/react/ExperimentList.d.ts +4 -3
  37. package/dist/report/react/ExperimentList.js +17 -18
  38. package/dist/report/react/MetricBars.js +5 -4
  39. package/dist/report/react/MetricLine.js +12 -5
  40. package/dist/report/react/MetricMatrix.js +1 -1
  41. package/dist/report/react/MetricScatter.js +59 -28
  42. package/dist/report/react/MetricTable.js +2 -12
  43. package/dist/report/react/ScopeSummary.d.ts +10 -0
  44. package/dist/report/react/ScopeSummary.js +17 -0
  45. package/dist/report/react/Scoreboard.js +6 -6
  46. package/dist/report/react/cell.js +2 -2
  47. package/dist/report/react/chart-math.d.ts +23 -6
  48. package/dist/report/react/chart-math.js +71 -19
  49. package/dist/report/react/fixtures.d.ts +5 -9
  50. package/dist/report/react/fixtures.js +110 -147
  51. package/dist/report/react/index.d.ts +15 -5
  52. package/dist/report/react/index.js +18 -7
  53. package/dist/report/report.d.ts +137 -16
  54. package/dist/report/report.js +259 -28
  55. package/dist/report/text/faces.d.ts +17 -19
  56. package/dist/report/text/faces.js +253 -184
  57. package/dist/report/text/plot.js +1 -1
  58. package/dist/report/text/table.js +38 -7
  59. package/dist/report/tree.d.ts +90 -40
  60. package/dist/report/tree.js +252 -94
  61. package/dist/report/types.d.ts +247 -284
  62. package/dist/report/types.js +4 -3
  63. package/dist/report/web.d.ts +21 -5
  64. package/dist/report/web.js +42 -16
  65. package/dist/results/select.d.ts +38 -16
  66. package/dist/results/select.js +73 -25
  67. package/dist/results/types.d.ts +49 -14
  68. package/dist/runner/feedback/sink.d.ts +110 -0
  69. package/dist/runner/types.d.ts +513 -22
  70. package/dist/sandbox/docker.d.ts +23 -2
  71. package/dist/sandbox/e2b.d.ts +15 -1
  72. package/dist/sandbox/errors.d.ts +30 -3
  73. package/dist/sandbox/io-retry.d.ts +17 -0
  74. package/dist/sandbox/registry.d.ts +2 -0
  75. package/dist/sandbox/resolve.d.ts +18 -5
  76. package/dist/sandbox/retry.d.ts +11 -1
  77. package/dist/sandbox/types.d.ts +39 -5
  78. package/dist/sandbox/vercel.d.ts +7 -1
  79. package/dist/scoring/coverage.d.ts +30 -0
  80. package/dist/scoring/display.d.ts +21 -0
  81. package/dist/scoring/display.js +120 -0
  82. package/dist/scoring/types.d.ts +103 -20
  83. package/dist/shared/aggregate.d.ts +4 -2
  84. package/dist/shared/aggregate.js +8 -7
  85. package/dist/shared/types.d.ts +28 -0
  86. package/dist/tty-line.d.ts +0 -4
  87. package/dist/util.d.ts +23 -0
  88. package/docs-site/zh/README.md +44 -0
  89. package/docs-site/zh/examples/ai-agent-application.mdx +63 -0
  90. package/docs-site/zh/examples/coding-agent-extensions.mdx +57 -0
  91. package/docs-site/zh/examples/index.mdx +50 -0
  92. package/docs-site/zh/{concepts → explanation}/adapter.mdx +31 -13
  93. package/docs-site/zh/{concepts → explanation}/assert.mdx +7 -7
  94. package/docs-site/zh/{concepts → explanation}/drive.mdx +8 -8
  95. package/docs-site/zh/{concepts → explanation}/evals.mdx +4 -4
  96. package/docs-site/zh/{concepts → explanation}/experiment.mdx +8 -8
  97. package/docs-site/zh/{concepts → explanation}/hitl.mdx +8 -8
  98. package/docs-site/zh/{concepts → explanation}/judge.mdx +5 -5
  99. package/docs-site/zh/{concepts → explanation}/overview.mdx +11 -11
  100. package/docs-site/zh/{guides → explanation}/runner.mdx +18 -8
  101. package/docs-site/zh/{concepts → explanation}/tier.mdx +6 -6
  102. package/docs-site/zh/{guides → how-to}/agent-feedback-loop.mdx +35 -33
  103. package/docs-site/zh/{guides → how-to}/authoring.mdx +35 -2
  104. package/docs-site/zh/{guides → how-to}/ci-integration.mdx +23 -12
  105. package/docs-site/zh/{guides → how-to}/connect-otel.mdx +6 -6
  106. package/docs-site/zh/{guides → how-to}/connect-your-agent.mdx +47 -21
  107. package/docs-site/zh/{guides → how-to}/custom-reports.mdx +34 -39
  108. package/docs-site/zh/{guides → how-to}/dataset-fanout.mdx +25 -3
  109. package/docs-site/zh/{guides → how-to}/experiments.mdx +12 -5
  110. package/docs-site/zh/how-to/publish-report.mdx +105 -0
  111. package/docs-site/zh/{guides → how-to}/reporters.mdx +2 -2
  112. package/docs-site/zh/{guides → how-to}/sandbox-agent.mdx +56 -7
  113. package/docs-site/zh/how-to/sandbox-providers.mdx +350 -0
  114. package/docs-site/zh/{guides → how-to}/scoring-guide.mdx +4 -4
  115. package/docs-site/zh/{guides → how-to}/viewing-results.mdx +82 -39
  116. package/docs-site/zh/{guides → how-to}/write-experiment.mdx +6 -4
  117. package/docs-site/zh/{guides → how-to}/write-send.mdx +30 -14
  118. package/docs-site/zh/index.mdx +24 -26
  119. package/docs-site/zh/introduction.mdx +8 -8
  120. package/docs-site/zh/reference/builtin-agents.mdx +32 -5
  121. package/docs-site/zh/reference/capabilities.mdx +8 -8
  122. package/docs-site/zh/reference/cli.mdx +40 -12
  123. package/docs-site/zh/reference/define-agent.mdx +58 -5
  124. package/docs-site/zh/reference/define-config.mdx +1 -1
  125. package/docs-site/zh/reference/define-eval.mdx +42 -9
  126. package/docs-site/zh/reference/events.mdx +3 -3
  127. package/docs-site/zh/reference/expect.mdx +26 -1
  128. package/docs-site/zh/{guides → reference}/official-adapters.mdx +32 -8
  129. package/docs-site/zh/{guides → reference}/report-components.mdx +45 -33
  130. package/docs-site/zh/{guides → reference}/results-data.mdx +21 -13
  131. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +57 -0
  132. package/docs-site/zh/troubleshooting/debugging.mdx +212 -0
  133. package/docs-site/zh/{quickstart.mdx → tutorials/quickstart.mdx} +5 -17
  134. package/package.json +10 -2
  135. package/src/agents/ai-sdk-otel.test.ts +1 -0
  136. package/src/agents/ai-sdk.test.ts +3 -0
  137. package/src/agents/ai-sdk.ts +3 -0
  138. package/src/agents/bub-install-spec.test.ts +34 -0
  139. package/src/agents/bub-install-spec.ts +32 -0
  140. package/src/agents/bub.ts +31 -32
  141. package/src/agents/claude-code.test.ts +130 -9
  142. package/src/agents/claude-code.ts +76 -4
  143. package/src/agents/codex.test.ts +189 -40
  144. package/src/agents/codex.ts +155 -14
  145. package/src/agents/coding-cli-versions.test.ts +15 -0
  146. package/src/agents/coding-cli-versions.ts +3 -0
  147. package/src/agents/index.ts +13 -2
  148. package/src/agents/langgraph.test.ts +204 -0
  149. package/src/agents/langgraph.ts +495 -0
  150. package/src/agents/marketplace.ts +85 -0
  151. package/src/agents/native-config.test.ts +179 -0
  152. package/src/agents/native-config.ts +267 -0
  153. package/src/agents/openai-compat.test.ts +1 -0
  154. package/src/agents/openai-compat.ts +1 -1
  155. package/src/agents/openclaw.test.ts +31 -0
  156. package/src/agents/openclaw.ts +171 -0
  157. package/src/agents/plugin-config.test.ts +1 -0
  158. package/src/agents/sdk-streams.test.ts +79 -0
  159. package/src/agents/sdk-streams.ts +55 -10
  160. package/src/agents/skills.test.ts +1 -0
  161. package/src/agents/streaming.test.ts +3 -9
  162. package/src/agents/streaming.ts +2 -2
  163. package/src/agents/types.ts +71 -8
  164. package/src/agents/ui-message-stream.test.ts +3 -0
  165. package/src/cli.ts +446 -124
  166. package/src/context/context.test.ts +51 -12
  167. package/src/context/context.ts +162 -30
  168. package/src/context/session.test.ts +2 -1
  169. package/src/context/session.ts +115 -7
  170. package/src/context/types.ts +30 -12
  171. package/src/define.test.ts +13 -8
  172. package/src/define.ts +25 -4
  173. package/src/expect/index.ts +53 -23
  174. package/src/i18n/en.ts +81 -17
  175. package/src/i18n/zh-CN.ts +80 -17
  176. package/src/o11y/cost.test.ts +1 -0
  177. package/src/o11y/execution-tree.test.ts +1 -20
  178. package/src/o11y/otlp/mappers/claude-code.test.ts +1 -0
  179. package/src/o11y/otlp/parse.test.ts +1 -0
  180. package/src/o11y/otlp/turn-otel.test.ts +1 -0
  181. package/src/o11y/parsers/bub.test.ts +1 -0
  182. package/src/o11y/parsers/claude-code.test.ts +1 -34
  183. package/src/o11y/parsers/openclaw.test.ts +154 -0
  184. package/src/o11y/parsers/openclaw.ts +310 -0
  185. package/src/o11y/prices.json +746 -311
  186. package/src/o11y/tool-names.test.ts +1 -0
  187. package/src/o11y/types.ts +16 -2
  188. package/src/report/aggregate.ts +178 -61
  189. package/src/report/built-in/index.tsx +9 -0
  190. package/src/report/components.tsx +625 -279
  191. package/src/report/compute.ts +723 -491
  192. package/src/report/dual-render.test.tsx +741 -1024
  193. package/src/report/flag.ts +104 -12
  194. package/src/report/format.ts +32 -12
  195. package/src/report/index.ts +119 -46
  196. package/src/report/load.ts +3 -2
  197. package/src/report/locale.ts +136 -65
  198. package/src/report/metrics.ts +108 -25
  199. package/src/report/primitives.tsx +196 -45
  200. package/src/report/react/AttemptList.tsx +30 -43
  201. package/src/report/react/DeltaTable.tsx +63 -45
  202. package/src/report/react/EvalList.tsx +0 -0
  203. package/src/report/react/ExperimentComparison.tsx +73 -0
  204. package/src/report/react/ExperimentList.tsx +50 -32
  205. package/src/report/react/MetricBars.tsx +5 -4
  206. package/src/report/react/MetricLine.tsx +13 -8
  207. package/src/report/react/MetricMatrix.tsx +2 -2
  208. package/src/report/react/MetricScatter.tsx +86 -34
  209. package/src/report/react/MetricTable.tsx +4 -76
  210. package/src/report/react/ScopeSummary.tsx +86 -0
  211. package/src/report/react/Scoreboard.tsx +28 -10
  212. package/src/report/react/cell.tsx +2 -2
  213. package/src/report/react/chart-math.test.ts +85 -0
  214. package/src/report/react/chart-math.ts +101 -22
  215. package/src/report/react/enhance.js +89 -5
  216. package/src/report/react/fixtures.ts +114 -154
  217. package/src/report/react/index.tsx +24 -39
  218. package/src/report/react/render.test.tsx +138 -158
  219. package/src/report/react/styles.css +243 -82
  220. package/src/report/report.test.ts +779 -841
  221. package/src/report/report.ts +423 -41
  222. package/src/report/text/faces.ts +290 -193
  223. package/src/report/text/plot.ts +1 -1
  224. package/src/report/text/table.ts +44 -7
  225. package/src/report/tree.ts +362 -104
  226. package/src/report/types.ts +261 -271
  227. package/src/report/web.ts +63 -20
  228. package/src/results/annotated-source.test.ts +62 -9
  229. package/src/results/annotated-source.ts +64 -6
  230. package/src/results/attempt-evidence.test.ts +13 -11
  231. package/src/results/attempt-evidence.ts +20 -13
  232. package/src/results/attempt-source.ts +6 -3
  233. package/src/results/copy.ts +150 -60
  234. package/src/results/host-equivalence.test.ts +34 -20
  235. package/src/results/index.ts +12 -4
  236. package/src/results/locator.test.ts +1 -22
  237. package/src/results/open.ts +15 -5
  238. package/src/results/publish.ts +149 -0
  239. package/src/results/results.test.ts +89 -54
  240. package/src/results/select.ts +104 -34
  241. package/src/results/truncate.ts +90 -0
  242. package/src/results/types.ts +43 -14
  243. package/src/results/writer.ts +31 -13
  244. package/src/runner/attempt.test.ts +138 -7
  245. package/src/runner/attempt.ts +603 -104
  246. package/src/runner/discover.test.ts +47 -0
  247. package/src/runner/discover.ts +36 -2
  248. package/src/runner/eval-source.test.ts +1 -27
  249. package/src/runner/feedback/agent.test.ts +504 -0
  250. package/src/runner/feedback/agent.ts +409 -0
  251. package/src/runner/feedback/ci.test.ts +562 -0
  252. package/src/runner/feedback/ci.ts +401 -0
  253. package/src/runner/feedback/coordinator.test.ts +317 -0
  254. package/src/runner/feedback/coordinator.ts +397 -0
  255. package/src/runner/feedback/failure.ts +40 -0
  256. package/src/runner/feedback/human.test.ts +616 -0
  257. package/src/runner/feedback/human.ts +535 -0
  258. package/src/runner/feedback/index.ts +66 -0
  259. package/src/runner/feedback/io.ts +78 -0
  260. package/src/runner/feedback/profile.test.ts +50 -0
  261. package/src/runner/feedback/profile.ts +58 -0
  262. package/src/runner/feedback/reducer.test.ts +395 -0
  263. package/src/runner/feedback/reducer.ts +260 -0
  264. package/src/runner/feedback/renderer.ts +82 -0
  265. package/src/runner/feedback/sink.ts +203 -0
  266. package/src/runner/feedback/testing.ts +106 -0
  267. package/src/runner/ledger.test.ts +230 -0
  268. package/src/runner/ledger.ts +329 -0
  269. package/src/runner/report.test.ts +128 -3
  270. package/src/runner/report.ts +33 -9
  271. package/src/runner/reporters/artifacts.ts +8 -2
  272. package/src/runner/reporters/braintrust.test.ts +8 -7
  273. package/src/runner/reporters/braintrust.ts +9 -2
  274. package/src/runner/reporters/index.ts +2 -2
  275. package/src/runner/reporters/json.test.ts +162 -0
  276. package/src/runner/reporters/json.ts +35 -8
  277. package/src/runner/reporters/shared.ts +1 -5
  278. package/src/runner/run.test.ts +760 -3
  279. package/src/runner/run.ts +243 -37
  280. package/src/runner/sandbox-prep.ts +3 -42
  281. package/src/runner/timing.ts +158 -0
  282. package/src/runner/types.ts +518 -22
  283. package/src/sandbox/checkpoint.test.ts +55 -0
  284. package/src/sandbox/checkpoint.ts +29 -8
  285. package/src/sandbox/cli-commands.ts +407 -0
  286. package/src/sandbox/docker.ts +115 -16
  287. package/src/sandbox/e2b-agent-template.test.ts +56 -0
  288. package/src/sandbox/e2b-agent-template.ts +94 -0
  289. package/src/sandbox/e2b.ts +74 -9
  290. package/src/sandbox/errors.ts +111 -4
  291. package/src/sandbox/index.ts +2 -0
  292. package/src/sandbox/io-retry.test.ts +58 -0
  293. package/src/sandbox/io-retry.ts +45 -0
  294. package/src/sandbox/keep-registry.test.ts +86 -0
  295. package/src/sandbox/keep-registry.ts +142 -0
  296. package/src/sandbox/keep.ts +178 -0
  297. package/src/sandbox/paths.test.ts +1 -0
  298. package/src/sandbox/paths.ts +19 -8
  299. package/src/sandbox/registry.ts +20 -3
  300. package/src/sandbox/resolve.ts +76 -11
  301. package/src/sandbox/retry.test.ts +70 -0
  302. package/src/sandbox/retry.ts +46 -4
  303. package/src/sandbox/types.ts +44 -6
  304. package/src/sandbox/vercel.ts +43 -20
  305. package/src/scoring/collector.ts +60 -17
  306. package/src/scoring/coverage.ts +95 -0
  307. package/src/scoring/diff.ts +81 -0
  308. package/src/scoring/display.test.ts +121 -0
  309. package/src/scoring/display.ts +133 -0
  310. package/src/scoring/evidence.test.ts +189 -0
  311. package/src/scoring/judge.test.ts +142 -0
  312. package/src/scoring/judge.ts +15 -18
  313. package/src/scoring/scoped.ts +217 -50
  314. package/src/scoring/types.ts +117 -20
  315. package/src/scoring/verdict.ts +16 -4
  316. package/src/shared/aggregate.ts +8 -6
  317. package/src/shared/types.ts +31 -0
  318. package/src/show/compose.ts +50 -67
  319. package/src/show/index.ts +127 -56
  320. package/src/show/render.ts +662 -131
  321. package/src/show/report-host.test.ts +188 -0
  322. package/src/show/report-host.ts +375 -0
  323. package/src/show/show.test.ts +320 -54
  324. package/src/tty-line.ts +8 -26
  325. package/src/util.test.ts +1 -0
  326. package/src/util.ts +41 -0
  327. package/src/view/app/App.test.tsx +69 -0
  328. package/src/view/app/App.tsx +144 -48
  329. package/src/view/app/components/AttemptModal.tsx +423 -11
  330. package/src/view/app/components/CodeView.tsx +41 -14
  331. package/src/view/app/components/CopyControls.tsx +2 -2
  332. package/src/view/app/i18n.ts +37 -17
  333. package/src/view/app/lib/attempt-route.test.ts +1 -0
  334. package/src/view/app/lib/verdict.ts +7 -9
  335. package/src/view/app/main.tsx +13 -8
  336. package/src/view/app/pages/{RunsPage.tsx → AttemptsPage.tsx} +6 -6
  337. package/src/view/app/types.ts +4 -1
  338. package/src/view/artifact-serving.test.ts +2 -1
  339. package/src/view/client-dist/app.css +1 -1
  340. package/src/view/client-dist/app.js +17 -17
  341. package/src/view/data.test.ts +10 -3
  342. package/src/view/data.ts +155 -49
  343. package/src/view/index.ts +56 -41
  344. package/src/view/server.ts +37 -15
  345. package/src/view/shared/types.ts +34 -5
  346. package/src/view/styles.css +227 -0
  347. package/src/view/view-report.test.ts +167 -62
  348. package/dist/report/built-ins/experiment-comparison.d.ts +0 -1
  349. package/dist/report/built-ins/experiment-comparison.js +0 -13
  350. package/dist/report/built-ins/index.d.ts +0 -1
  351. package/dist/report/built-ins/index.js +0 -2
  352. package/dist/report/react/GroupSummary.d.ts +0 -8
  353. package/dist/report/react/GroupSummary.js +0 -8
  354. package/dist/report/react/RunOverview.d.ts +0 -8
  355. package/dist/report/react/RunOverview.js +0 -12
  356. package/docs-site/zh/example/ai-agent-application.mdx +0 -152
  357. package/docs-site/zh/example/claude-code-codex-plugin.mdx +0 -167
  358. package/docs-site/zh/example/claude-code-codex-skill.mdx +0 -152
  359. package/docs-site/zh/example/showcase.mdx +0 -39
  360. package/docs-site/zh/guides/publish-report.mdx +0 -91
  361. package/docs-site/zh/guides/sandbox-providers.mdx +0 -102
  362. package/src/report/built-in-user-parity.test.tsx +0 -640
  363. package/src/report/built-ins/experiment-comparison.tsx +0 -19
  364. package/src/report/built-ins/index.ts +0 -2
  365. package/src/report/react/GroupSummary.tsx +0 -66
  366. package/src/report/react/RunOverview.tsx +0 -109
  367. package/src/runner/reporters/console.ts +0 -70
  368. package/src/runner/reporters/live.test.ts +0 -56
  369. package/src/runner/reporters/live.ts +0 -247
  370. package/src/runner/reporters/quiet.test.ts +0 -66
  371. package/src/runner/reporters/quiet.ts +0 -49
  372. package/src/runner/reporters/table.ts +0 -277
  373. /package/docs-site/zh/{example/tier1-ai-sdk-v7.mdx → examples/integrations/ai-sdk-v7.mdx} +0 -0
  374. /package/docs-site/zh/{example/tier1-claude-sdk.mdx → examples/integrations/claude-sdk.mdx} +0 -0
  375. /package/docs-site/zh/{example/tier1-codex-sdk.mdx → examples/integrations/codex-sdk.mdx} +0 -0
  376. /package/docs-site/zh/{example/tier1-langgraph.mdx → examples/integrations/langgraph.mdx} +0 -0
  377. /package/docs-site/zh/{example/tier1-pi-sdk.mdx → examples/integrations/pi-sdk.mdx} +0 -0
  378. /package/docs-site/zh/{guides → how-to}/fixtures.mdx +0 -0
@@ -1,65 +1,32 @@
1
- // 手工 fixture:模拟计算函数(MetricTable.data / MetricMatrix.data / …)的产物。
1
+ // 手工 fixture:模拟计算函数(metricTableData / metricMatrixData / …)的产物。
2
2
  // 仅供渲染测试与 scripts/report-react-demo.tsx 使用,不从入口导出。
3
3
  // 数字刻意覆盖诚实细节:coverage 角标(samples<total)、全 null 格子、
4
4
  // 稀疏矩阵、缺数据的散点、delta 的 null 不硬算、truncated 计数。
5
5
  const locator = (s) => s;
6
- export const passRateColumn = { key: "pass-rate", label: "pass rate", unit: "%", better: "higher" };
6
+ export const passRateColumn = { key: "task-pass-rate", label: "pass rate", unit: "%", better: "higher" };
7
7
  export const codeLinesColumn = { key: "code-lines", label: "code lines", unit: "lines", better: "lower" };
8
8
  export const costColumn = { key: "cost", label: "cost", unit: "$", better: "lower" };
9
- export const overviewData = {
10
- snapshots: [
11
- { experimentId: "compare/bub", agent: "bub", model: "gpt-5.4", startedAt: "2026-07-01T10:00:00Z" },
12
- { experimentId: "compare/codex", agent: "codex", startedAt: "2026-07-01T11:30:00Z" },
13
- ],
14
- totals: {
15
- evals: 12,
16
- attempts: 48,
17
- passed: 36,
18
- failed: 8,
19
- errored: 2,
20
- skipped: 2,
21
- // 两级聚合口径(computeCell)刻意不等于 36/(36+8+2)≈78% 的 attempt 原始占比:
22
- // 组件必须原样渲染这个字段,不得从上面四个 verdict 计票现场重算。
23
- passRate: { value: 0.7, display: "70%", samples: 46, total: 48, refs: [] },
24
- costUSD: null, // 全部 attempt 都没报成本:null,组件必须显示缺数据而不是 $0
25
- durationMs: 261_000,
26
- },
27
- warnings: [
28
- {
29
- kind: "partial-coverage",
30
- experimentId: "compare/bub",
31
- covered: 9,
32
- total: 12,
33
- message: "snapshot covers 9 of 12 evals seen in history; re-run `niceeval exp compare/bub` for a full snapshot",
34
- },
35
- ],
36
- };
37
- export const overviewWithCost = {
38
- ...overviewData,
39
- totals: { ...overviewData.totals, costUSD: 1.234 },
40
- warnings: [],
41
- };
42
- /** GroupSummary.data 的产物形态:eval 级折叠计票 + 旧 GroupSelector 口径的通过率(包成 MetricCell)。 */
43
- export const groupSummaryData = {
9
+ /** scopeSummaryData 的产物形态:两级计票恒随行,成功率与总成本是官方 MetricCell。 */
10
+ export const scopeSummaryData = {
11
+ range: { earliestStartedAt: "2026-07-01T10:00:00Z", latestStartedAt: "2026-07-01T11:30:00Z" },
44
12
  experiments: 2,
45
- // evals = 全部 verdicts 之和(3+1+1+1=6);passRate 分母只数非 skipped 的 5 道
46
13
  evals: 6,
47
14
  attempts: 9,
48
- verdicts: { passed: 3, failed: 1, errored: 1, skipped: 1 },
49
- // 3 passed / (3 + 1 + 1) = 60%;samples=ran=5 < total=evals=6:1 道 skipped 未计入分母的覆盖率角标
50
- passRate: { value: 0.6, display: "60%", samples: 5, total: 6, refs: [] },
51
- totalCostUSD: 1.5,
52
- lastRunAt: "2026-07-01T11:30:00Z",
15
+ evalVerdicts: { passed: 3, failed: 1, errored: 1, skipped: 1 },
16
+ attemptVerdicts: { passed: 4, failed: 3, errored: 1, skipped: 1 },
17
+ // 两级聚合口径,刻意不等于任一计票的比例:组件必须原样渲染,不重算
18
+ endToEndPassRate: { value: 0.6, display: "60%", samples: 8, total: 9, refs: [] },
19
+ totalCostUSD: { value: 1.5, display: "$1.50", samples: 8, total: 9, refs: [] },
53
20
  };
54
21
  export const tableData = {
55
- dimension: "agent",
22
+ rowDimension: "agent",
56
23
  // 行顺序故意不按 passRate 排:组件必须按传入顺序渲染,不重排
57
24
  columns: [passRateColumn, codeLinesColumn],
58
25
  rows: [
59
26
  {
60
27
  key: "codex",
61
28
  cells: {
62
- "pass-rate": { value: 0.5, display: "50%", samples: 6, total: 6, refs: [] },
29
+ "task-pass-rate": { value: 0.5, display: "50%", samples: 6, total: 6, refs: [] },
63
30
  // 全 null:一个有效样本都没有 → 缺数据文案,绝不画 0
64
31
  "code-lines": { value: null, display: "—", samples: 0, total: 6, refs: [] },
65
32
  },
@@ -67,12 +34,12 @@ export const tableData = {
67
34
  {
68
35
  key: "bub",
69
36
  cells: {
70
- "pass-rate": {
37
+ "task-pass-rate": {
71
38
  value: 0.87,
72
39
  display: "87%",
73
40
  samples: 6,
74
41
  total: 6,
75
- refs: [locator("@1a0a0a0")],
42
+ refs: [locator("@1a0a0a0a")],
76
43
  },
77
44
  // samples < total:有 attempt 测不了 → 覆盖率角标 5/6
78
45
  "code-lines": { value: 120, display: "120 lines", samples: 5, total: 6, refs: [] },
@@ -80,33 +47,9 @@ export const tableData = {
80
47
  },
81
48
  ],
82
49
  };
83
- /** rows: "experiment" 的榜单形态:行携带 agent/model 元信息与 eval 级折叠计票。 */
84
- export const tableDataWithMeta = {
85
- dimension: "experiment",
86
- columns: [passRateColumn],
87
- rows: [
88
- {
89
- key: "compare/bub",
90
- cells: { "pass-rate": { value: 0.5, display: "50%", samples: 2, total: 2, refs: [] } },
91
- meta: {
92
- agent: "bub",
93
- model: "gpt-5.4",
94
- verdicts: { passed: 1, failed: 1, errored: 0, skipped: 0 },
95
- },
96
- },
97
- {
98
- key: "compare/codex",
99
- cells: { "pass-rate": { value: 1, display: "100%", samples: 2, total: 2, refs: [] } },
100
- meta: {
101
- agent: "codex",
102
- verdicts: { passed: 2, failed: 0, errored: 0, skipped: 0 },
103
- },
104
- },
105
- ],
106
- };
107
50
  export const matrixData = {
108
- rows: "eval",
109
- columns: "agent",
51
+ rowDimension: "eval",
52
+ columnDimension: "agent",
110
53
  metric: passRateColumn,
111
54
  // 稀疏:geometry/angles × codex 没有样本,数据里不出现 → 格子空着
112
55
  cells: [
@@ -118,7 +61,7 @@ export const matrixData = {
118
61
  display: "100%",
119
62
  samples: 2,
120
63
  total: 2,
121
- refs: [locator("@1b3b3b3"), locator("@1b7b7b7")],
64
+ refs: [locator("@1b3b3b3b"), locator("@1b7b7b7b")],
122
65
  },
123
66
  },
124
67
  {
@@ -134,33 +77,40 @@ export const matrixData = {
134
77
  ],
135
78
  };
136
79
  export const scoreboardData = {
137
- dimension: "agent",
80
+ rowDimension: "agent",
81
+ questions: [
82
+ "algebra/quadratic",
83
+ "algebra/simple",
84
+ "geometry/angles",
85
+ "geometry/area",
86
+ ],
138
87
  fullMarks: 100,
139
88
  weights: [{ prefix: "algebra/", weight: 2 }],
89
+ ignoredEvals: 1,
140
90
  rows: [
141
91
  {
142
92
  key: "bub",
143
- total: { value: 78.5, display: "78.5" },
93
+ // notRun 1:一题没跑、按 0 计;unscorable 0 —— 两种 0 分分开计数
94
+ total: { value: 78.5, display: "78.5", notRun: 1, unscorable: 0, refs: [locator("@1a0a0a0a")] },
144
95
  subjects: [
145
- // missing 1:一题没跑、按 0 计——固定分母的如实注脚
146
- { key: "algebra", earned: 14, possible: 16, evals: 8, missing: 1 },
147
- { key: "geometry", earned: 3, possible: 4, evals: 4, missing: 0 },
96
+ { key: "algebra", earned: 14, possible: 16, questions: 8, notRun: 1, unscorable: 0, display: "14/16 (87.5%)", refs: [] },
97
+ { key: "geometry", earned: 3, possible: 4, questions: 4, notRun: 0, unscorable: 0, display: "3/4 (75%)", refs: [] },
148
98
  ],
149
99
  },
150
100
  {
151
101
  key: "codex",
152
- total: { value: 52, display: "52" },
102
+ total: { value: 52, display: "52", notRun: 0, unscorable: 2, refs: [] },
153
103
  subjects: [
154
- { key: "algebra", earned: 9, possible: 16, evals: 8, missing: 0 },
155
- { key: "geometry", earned: 1.4, possible: 4, evals: 4, missing: 2 },
104
+ { key: "algebra", earned: 9, possible: 16, questions: 8, notRun: 0, unscorable: 0, display: "9/16 (56.3%)", refs: [] },
105
+ { key: "geometry", earned: 1.4, possible: 4, questions: 4, notRun: 0, unscorable: 2, display: "1.4/4 (35%)", refs: [] },
156
106
  ],
157
107
  },
158
108
  ],
159
109
  };
160
110
  export const scatterData = {
161
- points: "experiment",
162
- series: "agent",
163
- x: costColumn, // better: "lower" → 轴反向,便宜的一端在右
111
+ pointDimension: "experiment",
112
+ seriesDimension: "agent",
113
+ x: costColumn, // better: "lower" → 轴反向(贵在左、便宜在右);两轴都有 better → 提示「越靠右上越好」
164
114
  y: passRateColumn,
165
115
  rows: [
166
116
  {
@@ -192,81 +142,87 @@ export const scatterData = {
192
142
  };
193
143
  export const lineData = {
194
144
  x: { key: "latencyMs", label: "Simulated latency", unit: "ms" },
195
- series: "agents",
145
+ seriesDimension: "agents",
196
146
  y: passRateColumn,
197
147
  rows: [
198
148
  {
199
- key: "ultra/agents-1-lat-100",
149
+ key: "100",
200
150
  series: "1 agents",
201
151
  x: 100,
202
152
  xDisplay: "100ms",
203
153
  y: { value: 0.4, display: "40%", samples: 6, total: 6, refs: [] },
204
154
  },
205
155
  {
206
- key: "ultra/agents-1-lat-300",
156
+ key: "300",
207
157
  series: "1 agents",
208
158
  x: 300,
209
159
  xDisplay: "300ms",
210
160
  y: { value: 0.3, display: "30%", samples: 6, total: 6, refs: [] },
211
161
  },
212
162
  {
213
- key: "ultra/agents-16-lat-100",
163
+ key: "100",
214
164
  series: "16 agents",
215
165
  x: 100,
216
166
  xDisplay: "100ms",
217
167
  y: { value: 0.8, display: "80%", samples: 6, total: 6, refs: [] },
218
168
  },
219
169
  {
220
- key: "ultra/agents-16-lat-300",
170
+ key: "300",
221
171
  series: "16 agents",
222
172
  x: 300,
223
173
  xDisplay: "300ms",
224
174
  y: { value: 0.7, display: "70%", samples: 6, total: 6, refs: [] },
225
175
  },
226
176
  {
227
- // 未声明 flag 的 experiment:作轴不画点,注脚报数
228
- key: "ultra/legacy",
177
+ // 未声明数值 flag 的 attempt:不伪造 x 值,注脚报数
178
+ key: "null",
229
179
  series: "1 agents",
230
180
  x: null,
231
- xDisplay: "",
181
+ xDisplay: "",
232
182
  y: { value: 0.5, display: "50%", samples: 6, total: 6, refs: [] },
233
183
  },
234
184
  ],
235
185
  };
236
186
  export const deltaData = {
187
+ byDimension: "experiment",
237
188
  columns: [passRateColumn, costColumn],
238
189
  rows: [
239
190
  {
240
- key: "bub",
241
- a: { experimentId: "compare/bub" },
242
- b: { experimentId: "compare/bub--agents-md" },
191
+ key: "compare/bub → compare/bub--agents-md",
192
+ label: "bub",
193
+ a: { key: "compare/bub" },
194
+ b: { key: "compare/bub--agents-md" },
243
195
  cells: {
244
- // 通过率 +12pp:better higher → (绿)
245
- "pass-rate": {
196
+ // 通过率 +12pp:better higher → improved(绿)
197
+ "task-pass-rate": {
246
198
  a: { value: 0.5, display: "50%", samples: 6, total: 6, refs: [] },
247
199
  b: { value: 0.62, display: "62%", samples: 6, total: 6, refs: [] },
248
200
  delta: 0.12,
249
201
  display: "+12pp",
202
+ outcome: "improved",
250
203
  },
251
- // 成本 +$0.15:better lower → (红)
204
+ // 成本 +$0.15:better lower → regressed(红)
252
205
  cost: {
253
206
  a: { value: 0.2, display: "$0.20", samples: 6, total: 6, refs: [] },
254
207
  b: { value: 0.35, display: "$0.35", samples: 6, total: 6, refs: [] },
255
208
  delta: 0.15,
256
209
  display: "+$0.15",
210
+ outcome: "regressed",
257
211
  },
258
212
  },
259
213
  },
260
214
  {
261
- key: "codex",
262
- a: { experimentId: "compare/codex" },
263
- b: { experimentId: "compare/codex--agents-md" },
215
+ key: "compare/codex → compare/codex--agents-md",
216
+ label: "codex",
217
+ a: { key: "compare/codex" },
218
+ b: { key: "compare/codex--agents-md" },
264
219
  cells: {
265
- "pass-rate": {
220
+ "task-pass-rate": {
266
221
  a: { value: 0.4, display: "40%", samples: 6, total: 6, refs: [] },
267
222
  b: { value: 0.4, display: "40%", samples: 6, total: 6, refs: [] },
268
223
  delta: 0,
269
224
  display: "±0",
225
+ outcome: "unchanged",
270
226
  },
271
227
  // A 侧缺数据 → delta null:显示缺,不硬算
272
228
  cost: {
@@ -274,6 +230,7 @@ export const deltaData = {
274
230
  b: { value: 0.3, display: "$0.30", samples: 6, total: 6, refs: [] },
275
231
  delta: null,
276
232
  display: "—",
233
+ outcome: "unavailable",
277
234
  },
278
235
  },
279
236
  },
@@ -282,62 +239,70 @@ export const deltaData = {
282
239
  // ───────────────────────── 实体列表(ExperimentList / EvalList / AttemptList)─────────────────────────
283
240
  /** algebra/quadratic 在 compare/bub 上失败的那次 attempt——两条子失败夹具共用同一条。 */
284
241
  const failedAttempt = {
285
- evalId: "algebra/quadratic",
286
242
  experimentId: "compare/bub",
243
+ evalId: "algebra/quadratic",
287
244
  attempt: 3,
288
245
  agent: "bub",
289
246
  verdict: "failed",
290
- assertions: [
291
- {
292
- name: "roots-correct",
293
- severity: "gate",
294
- score: 0,
295
- passed: false,
296
- detail: "expected x=2, got x=3",
297
- evidence: "judge: sign flipped when substituting into the quadratic formula",
298
- },
299
- ],
247
+ // 已按 Scoring display 契约折好的单行摘要;渲染面只做宽度截断,不重算
248
+ failureSummary: "gate: roots-correct · expected x=2 · received x=3",
249
+ moreFailures: 1,
250
+ examScore: { value: 0, display: "0%", samples: 1, total: 1, refs: [locator("@1a4a4a4a")] },
300
251
  durationMs: 32_000,
301
252
  costUSD: 0.12,
302
- locator: locator("@1a4a4a4"),
253
+ locator: locator("@1a4a4a4a"),
303
254
  };
304
255
  const erroredAttempt = {
305
- evalId: "geometry/angles",
306
256
  experimentId: "compare/codex",
257
+ evalId: "geometry/angles",
307
258
  attempt: 0,
308
259
  agent: "codex",
309
260
  verdict: "errored",
310
- error: "TypeError: cannot read properties of undefined (reading 'foo')",
311
- assertions: [],
261
+ // errored:结构化 error 的一层摘要(phase · code · message)
262
+ failureSummary: "eval.run · unexpected-error · TypeError: cannot read properties of undefined (reading 'foo')",
263
+ moreFailures: 0,
264
+ examScore: { value: 0, display: "0%", samples: 1, total: 1, refs: [locator("@1c1c1c1c")] },
312
265
  durationMs: 4_500,
313
- locator: locator("@1c1c1c1"),
266
+ costUSD: null,
267
+ locator: locator("@1c1c1c1c"),
314
268
  };
315
269
  const failedRetryAttempt = {
316
270
  ...failedAttempt,
317
271
  attempt: 4,
318
272
  durationMs: 35_000,
319
- locator: locator("@1b5b5b5"),
273
+ locator: locator("@1b5b5b5b"),
274
+ };
275
+ const passedAttempt = {
276
+ experimentId: "compare/bub",
277
+ evalId: "algebra/simple",
278
+ attempt: 0,
279
+ agent: "bub",
280
+ verdict: "passed",
281
+ failureSummary: null,
282
+ moreFailures: 0,
283
+ examScore: { value: 1, display: "100%", samples: 1, total: 1, refs: [locator("@1d2d2d2d")] },
284
+ durationMs: 5_000,
285
+ costUSD: 0.02,
286
+ locator: locator("@1d2d2d2d"),
320
287
  };
321
288
  export const attemptListItems = [failedAttempt, erroredAttempt];
322
289
  export const evalListItems = [
323
290
  {
324
- evalId: "algebra/quadratic",
325
291
  experimentId: "compare/bub",
292
+ evalId: "algebra/quadratic",
326
293
  verdict: "failed",
327
- reason: "roots-correct: expected x=2, got x=3",
328
- score: { value: 0, display: "0%", samples: 1, total: 1, refs: [failedAttempt.locator] },
329
- duration: { value: 32_000, display: "32.0s", samples: 1, total: 1, refs: [failedAttempt.locator] },
330
- cost: { value: 0.12, display: "$0.12", samples: 1, total: 1, refs: [failedAttempt.locator] },
294
+ examScore: { value: 0, display: "0%", samples: 1, total: 1, refs: [failedAttempt.locator] },
295
+ durationMs: { value: 32_000, display: "32.0s", samples: 1, total: 1, refs: [failedAttempt.locator] },
296
+ costUSD: { value: 0.12, display: "$0.12", samples: 1, total: 1, refs: [failedAttempt.locator] },
331
297
  attempts: [failedAttempt],
332
298
  },
333
299
  {
334
- evalId: "geometry/angles",
335
300
  experimentId: "compare/codex",
301
+ evalId: "geometry/angles",
336
302
  verdict: "errored",
337
- reason: erroredAttempt.error,
338
- score: { value: 0, display: "0%", samples: 1, total: 1, refs: [erroredAttempt.locator] },
339
- duration: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [erroredAttempt.locator] },
340
- cost: { value: null, display: "—", samples: 0, total: 1, refs: [] },
303
+ examScore: { value: 0, display: "0%", samples: 1, total: 1, refs: [erroredAttempt.locator] },
304
+ durationMs: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [erroredAttempt.locator] },
305
+ costUSD: { value: null, display: "", samples: 0, total: 1, refs: [] },
341
306
  attempts: [erroredAttempt],
342
307
  },
343
308
  ];
@@ -347,10 +312,10 @@ export const experimentListItems = [
347
312
  agent: "bub",
348
313
  model: "gpt-5.4",
349
314
  flags: { memory: true },
350
- verdicts: { passed: 1, failed: 1, errored: 0, skipped: 0 },
351
- passRate: { value: 0.5, display: "50%", samples: 2, total: 2, refs: [] },
352
- cost: { value: 0.12, display: "$0.12", samples: 1, total: 2, refs: [failedAttempt.locator] },
353
- duration: { value: 32_000, display: "32.0s", samples: 2, total: 2, refs: [] },
315
+ evalVerdicts: { passed: 1, failed: 1, errored: 0, skipped: 0 },
316
+ endToEndPassRate: { value: 0.5, display: "50%", samples: 2, total: 2, refs: [] },
317
+ costUSD: { value: 0.12, display: "$0.12", samples: 1, total: 2, refs: [failedAttempt.locator] },
318
+ durationMs: { value: 32_000, display: "32.0s", samples: 2, total: 2, refs: [] },
354
319
  tokens: { value: null, display: "—", samples: 0, total: 2, refs: [] },
355
320
  evals: 2,
356
321
  attempts: 3,
@@ -359,27 +324,26 @@ export const experimentListItems = [
359
324
  {
360
325
  evalId: "algebra/quadratic",
361
326
  verdict: "failed",
362
- reason: "roots-correct: expected x=2, got x=3",
363
- duration: { value: 32_000, display: "32.0s", samples: 1, total: 1, refs: [failedAttempt.locator] },
364
- cost: { value: 0.12, display: "$0.12", samples: 1, total: 1, refs: [failedAttempt.locator] },
327
+ durationMs: { value: 32_000, display: "32.0s", samples: 1, total: 1, refs: [failedAttempt.locator] },
328
+ costUSD: { value: 0.12, display: "$0.12", samples: 1, total: 1, refs: [failedAttempt.locator] },
365
329
  attempts: [failedAttempt, failedRetryAttempt],
366
330
  },
367
331
  {
368
332
  evalId: "algebra/simple",
369
333
  verdict: "passed",
370
- duration: { value: 5_000, display: "5.0s", samples: 1, total: 1, refs: [] },
371
- cost: { value: 0.02, display: "$0.02", samples: 1, total: 1, refs: [] },
372
- attempts: [],
334
+ durationMs: { value: 5_000, display: "5.0s", samples: 1, total: 1, refs: [] },
335
+ costUSD: { value: 0.02, display: "$0.02", samples: 1, total: 1, refs: [] },
336
+ attempts: [passedAttempt],
373
337
  },
374
338
  ],
375
339
  },
376
340
  {
377
341
  experimentId: "compare/codex",
378
342
  agent: "codex",
379
- verdicts: { passed: 0, failed: 0, errored: 1, skipped: 0 },
380
- passRate: { value: 0, display: "0%", samples: 1, total: 1, refs: [] },
381
- cost: { value: null, display: "—", samples: 0, total: 1, refs: [] },
382
- duration: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [] },
343
+ evalVerdicts: { passed: 0, failed: 0, errored: 1, skipped: 0 },
344
+ endToEndPassRate: { value: 0, display: "0%", samples: 1, total: 1, refs: [] },
345
+ costUSD: { value: null, display: "—", samples: 0, total: 1, refs: [] },
346
+ durationMs: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [] },
383
347
  tokens: { value: null, display: "—", samples: 0, total: 1, refs: [] },
384
348
  evals: 1,
385
349
  attempts: 1,
@@ -388,9 +352,8 @@ export const experimentListItems = [
388
352
  {
389
353
  evalId: "geometry/angles",
390
354
  verdict: "errored",
391
- reason: erroredAttempt.error,
392
- duration: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [erroredAttempt.locator] },
393
- cost: { value: null, display: "—", samples: 0, total: 1, refs: [] },
355
+ durationMs: { value: 4_500, display: "4.5s", samples: 1, total: 1, refs: [erroredAttempt.locator] },
356
+ costUSD: { value: null, display: "", samples: 0, total: 1, refs: [] },
394
357
  attempts: [erroredAttempt],
395
358
  },
396
359
  ],
@@ -1,6 +1,16 @@
1
- export { AttemptList, DeltaTable, EvalList, ExperimentList, GroupSummary, MetricBars, MetricLine, MetricMatrix, MetricScatter, MetricTable, RunOverview, Scoreboard, } from "../components.tsx";
2
- export type { AttemptListProps, DeltaTableProps, EvalListProps, ExperimentListProps, GroupSummaryProps, MetricLineProps, MetricMatrixProps, MetricScatterProps, MetricTableProps, RunOverviewProps, ScoreboardProps, } from "../components.tsx";
3
- export type { AttemptListItem, AttemptLocator, DeltaData, EvalListItem, ExperimentListEvalRow, ExperimentListItem, GroupSummaryData, LineAxis, LineData, MatrixData, MetricCell, MetricColumn, OverviewData, ScatterData, ScoreboardData, SelectionWarning, TableData, TableRowMeta, } from "../types.ts";
4
- export { DEFAULT_REPORT_LOCALE, resolveMetricLabel } from "../locale.ts";
5
- export type { LocalizedLabel, ReportLocale } from "../locale.ts";
1
+ export { AttemptList } from "./AttemptList.tsx";
2
+ export { EvalList } from "./EvalList.tsx";
3
+ export { ExperimentList } from "./ExperimentList.tsx";
4
+ export { ScopeSummary } from "./ScopeSummary.tsx";
5
+ export { ExperimentComparisonView as ExperimentComparison } from "./ExperimentComparison.tsx";
6
+ export { MetricTable } from "./MetricTable.tsx";
7
+ export { MetricMatrix } from "./MetricMatrix.tsx";
8
+ export { MetricBars } from "./MetricBars.tsx";
9
+ export { MetricScatter } from "./MetricScatter.tsx";
10
+ export { MetricLine } from "./MetricLine.tsx";
11
+ export { DeltaTable } from "./DeltaTable.tsx";
12
+ export { Scoreboard } from "./Scoreboard.tsx";
13
+ export type { AttemptListItem, AttemptLocator, DeltaData, EvalListItem, ExperimentComparisonData, ExperimentComparisonGroupData, ExperimentListEvalRow, ExperimentListItem, LineData, MatrixData, MetricCell, MetricColumn, ScatterData, ScopeSummaryData, ScopeWarning, ScoreboardData, TableData, VerdictTally, } from "../types.ts";
14
+ export { DEFAULT_REPORT_LOCALE, resolveLocalizedText, resolveMetricLabel } from "../locale.ts";
15
+ export type { LocalizedText, ReportLocale } from "../locale.ts";
6
16
  export { NRE_PALETTE, colorClassForKey, colorHexForKey, colorIndexForKey, seriesClassForKey } from "./colors.ts";
@@ -1,14 +1,25 @@
1
- // niceeval/report/react —— 零件复用的导出点:把某一块指标表嵌进已有内部面板时从这里
2
- // import。导出的组件与 niceeval/report 是同一批双面组件(web 面即 React 渲染,零 IO、
3
- // 可进 "use client",不 hydrate 也完整),都带自己的 data 计算函数;那是零件的复用,
4
- // 不是另一套报告系统 —— 报告的家在官方宿主(--report)。
1
+ // niceeval/report/react —— 纯 web 渲染面的导出点:把某一块指标表嵌进已有 React 页面时
2
+ // 从这里 import。组件只收算好的可序列化 `data`(data 形态),不含任何读盘 / artifact
3
+ // 计算代码;计算函数、spec 形态与组合组件只住在 niceeval/report。
5
4
  //
6
5
  // 契约:
7
6
  // - 组件只认「算好的可序列化数据」:零 hooks、零数据操作;
8
7
  // - 样式随包发布:配套 ./styles.css(nre-* 稳定类名),使用者在其后加载覆盖即可;
8
+ // - 渐进增强脚本 ./enhance.js 可选加载,初始静态 HTML 无 JS 完整可读;
9
9
  // - 跨块配色一致:维度键 → 稳定散列 → 固定调色板下标(colors.ts)。
10
- export { AttemptList, DeltaTable, EvalList, ExperimentList, GroupSummary, MetricBars, MetricLine, MetricMatrix, MetricScatter, MetricTable, RunOverview, Scoreboard, } from "../components.js";
11
- // locale(官方组件 chrome 文案;指标 label 的按 locale 字典也用它解析)
12
- export { DEFAULT_REPORT_LOCALE, resolveMetricLabel } from "../locale.js";
10
+ export { AttemptList } from "./AttemptList.js";
11
+ export { EvalList } from "./EvalList.js";
12
+ export { ExperimentList } from "./ExperimentList.js";
13
+ export { ScopeSummary } from "./ScopeSummary.js";
14
+ export { ExperimentComparisonView as ExperimentComparison } from "./ExperimentComparison.js";
15
+ export { MetricTable } from "./MetricTable.js";
16
+ export { MetricMatrix } from "./MetricMatrix.js";
17
+ export { MetricBars } from "./MetricBars.js";
18
+ export { MetricScatter } from "./MetricScatter.js";
19
+ export { MetricLine } from "./MetricLine.js";
20
+ export { DeltaTable } from "./DeltaTable.js";
21
+ export { Scoreboard } from "./Scoreboard.js";
22
+ // locale(官方组件 chrome 文案;LocalizedText 的按 locale 解析也用它)
23
+ export { DEFAULT_REPORT_LOCALE, resolveLocalizedText, resolveMetricLabel } from "../locale.js";
13
24
  // 稳定配色(自定义组件想与官方组件同键同色时用;seriesClassForKey 配 CSS 的 --nre-series)
14
25
  export { NRE_PALETTE, colorClassForKey, colorHexForKey, colorIndexForKey, seriesClassForKey } from "./colors.js";