niceeval 0.13.1 → 0.13.2

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 (548) hide show
  1. package/INDEX.md +25 -2
  2. package/README.md +9 -10
  3. package/README.zh.md +9 -10
  4. package/dist/agents/ai-sdk.cjs.map +1 -1
  5. package/dist/agents/ai-sdk.d.cts +1 -1
  6. package/dist/agents/ai-sdk.d.mts +1 -1
  7. package/dist/agents/ai-sdk.d.ts +1 -1
  8. package/dist/agents/bub-install-spec.cjs +19 -5
  9. package/dist/agents/bub-install-spec.cjs.map +1 -1
  10. package/dist/agents/bub-install-spec.d.cts +9 -2
  11. package/dist/agents/bub-install-spec.d.mts +9 -2
  12. package/dist/agents/bub-install-spec.d.ts +9 -2
  13. package/dist/agents/bub-install-spec.js +14 -12
  14. package/dist/agents/bub.cjs +10 -6
  15. package/dist/agents/bub.cjs.map +1 -1
  16. package/dist/agents/bub.d.cts +2 -2
  17. package/dist/agents/bub.d.mts +2 -2
  18. package/dist/agents/bub.d.ts +2 -2
  19. package/dist/agents/claude-code.cjs.map +1 -1
  20. package/dist/agents/claude-code.d.cts +2 -2
  21. package/dist/agents/claude-code.d.mts +2 -2
  22. package/dist/agents/claude-code.d.ts +2 -2
  23. package/dist/agents/codex.cjs +4 -4
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/codex.d.cts +3 -3
  26. package/dist/agents/codex.d.mts +3 -3
  27. package/dist/agents/codex.d.ts +3 -3
  28. package/dist/agents/coding-cli-versions.cjs +10 -1
  29. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  30. package/dist/agents/coding-cli-versions.d.cts +8 -3
  31. package/dist/agents/coding-cli-versions.d.mts +8 -3
  32. package/dist/agents/coding-cli-versions.d.ts +8 -3
  33. package/dist/agents/coding-cli-versions.js +18 -12
  34. package/dist/agents/deepseek-harness.cjs +151 -0
  35. package/dist/agents/deepseek-harness.cjs.map +1 -0
  36. package/dist/agents/deepseek-harness.d.cts +14 -0
  37. package/dist/agents/deepseek-harness.d.mts +14 -0
  38. package/dist/agents/deepseek-harness.d.ts +14 -0
  39. package/dist/agents/deepseek-harness.js +7 -0
  40. package/dist/agents/deepseek-harness.js.map +1 -0
  41. package/dist/agents/exact-npm-plugins.cjs +28 -0
  42. package/dist/agents/exact-npm-plugins.cjs.map +1 -0
  43. package/dist/agents/exact-npm-plugins.d.cts +10 -0
  44. package/dist/agents/exact-npm-plugins.d.mts +10 -0
  45. package/dist/agents/exact-npm-plugins.d.ts +10 -0
  46. package/dist/agents/exact-npm-plugins.js +8 -0
  47. package/dist/agents/exact-npm-plugins.js.map +1 -0
  48. package/dist/agents/index.cjs +5 -1
  49. package/dist/agents/index.cjs.map +1 -1
  50. package/dist/agents/index.d.cts +4 -0
  51. package/dist/agents/index.d.mts +4 -0
  52. package/dist/agents/index.d.ts +4 -0
  53. package/dist/agents/index.js +54 -50
  54. package/dist/agents/index.mjs +54 -50
  55. package/dist/agents/omp.cjs +170 -0
  56. package/dist/agents/omp.cjs.map +1 -0
  57. package/dist/agents/omp.d.cts +14 -0
  58. package/dist/agents/omp.d.mts +14 -0
  59. package/dist/agents/omp.d.ts +14 -0
  60. package/dist/agents/omp.js +7 -0
  61. package/dist/agents/omp.js.map +1 -0
  62. package/dist/agents/openclaw.cjs +51 -2
  63. package/dist/agents/openclaw.cjs.map +1 -1
  64. package/dist/agents/openclaw.d.cts +2 -0
  65. package/dist/agents/openclaw.d.mts +2 -0
  66. package/dist/agents/openclaw.d.ts +2 -0
  67. package/dist/agents/types.cjs.map +1 -1
  68. package/dist/agents/types.d.cts +4 -4
  69. package/dist/agents/types.d.mts +4 -4
  70. package/dist/agents/types.d.ts +4 -4
  71. package/dist/agents/ui-message-stream.cjs +24 -7
  72. package/dist/agents/ui-message-stream.cjs.map +1 -1
  73. package/dist/analysis/api.cjs +28 -2
  74. package/dist/analysis/api.cjs.map +1 -1
  75. package/dist/analysis/api.d.cts +22 -1
  76. package/dist/analysis/api.d.mts +22 -1
  77. package/dist/analysis/api.d.ts +22 -1
  78. package/dist/analysis/api.js +8 -6
  79. package/dist/analysis/bindings.cjs +11 -18
  80. package/dist/analysis/bindings.cjs.map +1 -1
  81. package/dist/analysis/bindings.d.cts +177 -49
  82. package/dist/analysis/bindings.d.mts +177 -49
  83. package/dist/analysis/bindings.d.ts +177 -49
  84. package/dist/analysis/contracts.cjs +1 -0
  85. package/dist/analysis/contracts.cjs.map +1 -1
  86. package/dist/analysis/contracts.d.cts +43 -3
  87. package/dist/analysis/contracts.d.mts +43 -3
  88. package/dist/analysis/contracts.d.ts +43 -3
  89. package/dist/analysis/cost-projection.cjs +2 -1
  90. package/dist/analysis/cost-projection.cjs.map +1 -1
  91. package/dist/analysis/cost-projection.d.cts +1 -1
  92. package/dist/analysis/cost-projection.d.mts +1 -1
  93. package/dist/analysis/cost-projection.d.ts +1 -1
  94. package/dist/analysis/cost.cjs +13 -3
  95. package/dist/analysis/cost.cjs.map +1 -1
  96. package/dist/analysis/cost.d.cts +10 -3
  97. package/dist/analysis/cost.d.mts +10 -3
  98. package/dist/analysis/cost.d.ts +10 -3
  99. package/dist/analysis/experiment-groups.cjs +96 -0
  100. package/dist/analysis/experiment-groups.cjs.map +1 -0
  101. package/dist/analysis/experiment-groups.d.cts +9 -0
  102. package/dist/analysis/experiment-groups.d.mts +9 -0
  103. package/dist/analysis/experiment-groups.d.ts +9 -0
  104. package/dist/analysis/experiment-groups.js +10 -0
  105. package/dist/analysis/experiment-groups.js.map +1 -0
  106. package/dist/analysis/index.cjs +4 -1
  107. package/dist/analysis/index.cjs.map +1 -1
  108. package/dist/analysis/index.d.cts +4 -2
  109. package/dist/analysis/index.d.mts +4 -2
  110. package/dist/analysis/index.d.ts +4 -2
  111. package/dist/analysis/index.js +40 -36
  112. package/dist/analysis/index.mjs +40 -36
  113. package/dist/assertions/limits.cjs +4 -0
  114. package/dist/assertions/limits.cjs.map +1 -1
  115. package/dist/assertions/limits.d.cts +4 -0
  116. package/dist/assertions/limits.d.mts +4 -0
  117. package/dist/assertions/limits.d.ts +4 -0
  118. package/dist/assertions/match.cjs +63 -25
  119. package/dist/assertions/match.cjs.map +1 -1
  120. package/dist/assertions/match.d.cts +7 -0
  121. package/dist/assertions/match.d.mts +7 -0
  122. package/dist/assertions/match.d.ts +7 -0
  123. package/dist/assertions/record/attachment.cjs +32 -4
  124. package/dist/assertions/record/attachment.cjs.map +1 -1
  125. package/dist/assertions/record/diff.cjs +10 -4
  126. package/dist/assertions/record/diff.cjs.map +1 -1
  127. package/dist/assertions/record/producer.cjs +101 -4
  128. package/dist/assertions/record/producer.cjs.map +1 -1
  129. package/dist/assertions/record/producer.d.cts +4 -1
  130. package/dist/assertions/record/producer.d.mts +4 -1
  131. package/dist/assertions/record/producer.d.ts +4 -1
  132. package/dist/assertions/runtime.cjs +45 -5
  133. package/dist/assertions/runtime.cjs.map +1 -1
  134. package/dist/cli/record.cjs +113 -8
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +20 -1
  137. package/dist/cli/record.d.mts +20 -1
  138. package/dist/cli/record.d.ts +20 -1
  139. package/dist/cli/record.js +4 -2
  140. package/dist/cli.cjs +386 -31
  141. package/dist/cli.cjs.map +1 -1
  142. package/dist/cli.d.cts +10 -2
  143. package/dist/cli.d.mts +10 -2
  144. package/dist/cli.d.ts +10 -2
  145. package/dist/context/send-retry.cjs +4 -4
  146. package/dist/context/send-retry.cjs.map +1 -1
  147. package/dist/coordination/host/runtime.cjs +8 -30
  148. package/dist/coordination/host/runtime.cjs.map +1 -1
  149. package/dist/coordination/host/runtime.d.cts +3 -3
  150. package/dist/coordination/host/runtime.d.mts +3 -3
  151. package/dist/coordination/host/runtime.d.ts +3 -3
  152. package/dist/coordination/host/types.cjs.map +1 -1
  153. package/dist/coordination/host/types.d.cts +0 -5
  154. package/dist/coordination/host/types.d.mts +0 -5
  155. package/dist/coordination/host/types.d.ts +0 -5
  156. package/dist/coordination/platform/node.cjs +90 -9
  157. package/dist/coordination/platform/node.cjs.map +1 -1
  158. package/dist/define.cjs +25 -1
  159. package/dist/define.cjs.map +1 -1
  160. package/dist/experiment/host/index.cjs +1 -0
  161. package/dist/experiment/host/index.cjs.map +1 -1
  162. package/dist/i18n/en.cjs +26 -8
  163. package/dist/i18n/en.cjs.map +1 -1
  164. package/dist/i18n/en.d.cts +19 -6
  165. package/dist/i18n/en.d.mts +19 -6
  166. package/dist/i18n/en.d.ts +19 -6
  167. package/dist/index.cjs.map +1 -1
  168. package/dist/index.d.cts +1 -1
  169. package/dist/index.d.mts +1 -1
  170. package/dist/index.d.ts +1 -1
  171. package/dist/o11y/parsers/hermes.cjs +1 -1
  172. package/dist/o11y/parsers/hermes.cjs.map +1 -1
  173. package/dist/o11y/prices.json +1 -1
  174. package/dist/o11y/record/families.cjs +12 -3
  175. package/dist/o11y/record/families.cjs.map +1 -1
  176. package/dist/o11y/record/families.d.cts +8 -8
  177. package/dist/o11y/record/families.d.mts +8 -8
  178. package/dist/o11y/record/families.d.ts +8 -8
  179. package/dist/o11y/record/family-projectors.d.cts +66 -18
  180. package/dist/o11y/record/family-projectors.d.mts +66 -18
  181. package/dist/o11y/record/family-projectors.d.ts +66 -18
  182. package/dist/o11y/record/family-writers.d.cts +11 -3
  183. package/dist/o11y/record/family-writers.d.mts +11 -3
  184. package/dist/o11y/record/family-writers.d.ts +11 -3
  185. package/dist/o11y/record/runner-producer.cjs +14 -4
  186. package/dist/o11y/record/runner-producer.cjs.map +1 -1
  187. package/dist/record/codec/core.d.cts +2 -2
  188. package/dist/record/codec/core.d.mts +2 -2
  189. package/dist/record/codec/core.d.ts +2 -2
  190. package/dist/record/family/catalog.d.cts +44 -12
  191. package/dist/record/family/catalog.d.mts +44 -12
  192. package/dist/record/family/catalog.d.ts +44 -12
  193. package/dist/record/family/index.js +128 -124
  194. package/dist/record/family/observability-v1.cjs +35 -0
  195. package/dist/record/family/observability-v1.cjs.map +1 -0
  196. package/dist/record/family/observability-v1.d.cts +3 -0
  197. package/dist/record/family/observability-v1.d.mts +3 -0
  198. package/dist/record/family/observability-v1.d.ts +3 -0
  199. package/dist/record/family/observability-v1.js +6 -0
  200. package/dist/record/family/observability-v1.js.map +1 -0
  201. package/dist/record/family/observability.cjs +58 -9
  202. package/dist/record/family/observability.cjs.map +1 -1
  203. package/dist/record/family/observability.d.cts +1014 -15
  204. package/dist/record/family/observability.d.mts +1014 -15
  205. package/dist/record/family/observability.d.ts +1014 -15
  206. package/dist/record/family/observability.js +22 -18
  207. package/dist/record/host/runtime.cjs +600 -31
  208. package/dist/record/host/runtime.cjs.map +1 -1
  209. package/dist/record/host/types.cjs.map +1 -1
  210. package/dist/record/host/types.d.cts +33 -9
  211. package/dist/record/host/types.d.mts +33 -9
  212. package/dist/record/host/types.d.ts +33 -9
  213. package/dist/record/maintenance/runtime.cjs +1 -2
  214. package/dist/record/maintenance/runtime.cjs.map +1 -1
  215. package/dist/record/model/core.cjs.map +1 -1
  216. package/dist/record/model/core.d.cts +1 -1
  217. package/dist/record/model/core.d.mts +1 -1
  218. package/dist/record/model/core.d.ts +1 -1
  219. package/dist/record/model/definition.d.cts +6 -6
  220. package/dist/record/model/definition.d.mts +6 -6
  221. package/dist/record/model/definition.d.ts +6 -6
  222. package/dist/record/model/identifiers.cjs +1 -1
  223. package/dist/record/model/identifiers.cjs.map +1 -1
  224. package/dist/record/model/identifiers.d.cts +1 -1
  225. package/dist/record/model/identifiers.d.mts +1 -1
  226. package/dist/record/model/identifiers.d.ts +1 -1
  227. package/dist/record/platform/node.cjs +159 -23
  228. package/dist/record/platform/node.cjs.map +1 -1
  229. package/dist/record/platform/services.cjs.map +1 -1
  230. package/dist/record/platform/services.d.cts +15 -2
  231. package/dist/record/platform/services.d.mts +15 -2
  232. package/dist/record/platform/services.d.ts +15 -2
  233. package/dist/record/reader/errors.cjs +37 -1
  234. package/dist/record/reader/errors.cjs.map +1 -1
  235. package/dist/record/reader/errors.d.cts +49 -1
  236. package/dist/record/reader/errors.d.mts +49 -1
  237. package/dist/record/reader/errors.d.ts +49 -1
  238. package/dist/record/reader/errors.js +22 -12
  239. package/dist/record/reader/format.cjs +76 -17
  240. package/dist/record/reader/format.cjs.map +1 -1
  241. package/dist/record/reader/format.d.cts +11 -4
  242. package/dist/record/reader/format.d.mts +11 -4
  243. package/dist/record/reader/format.d.ts +11 -4
  244. package/dist/record/reader/format.js +2 -0
  245. package/dist/record/reader/index.js +32 -18
  246. package/dist/record/reader/runtime.cjs +64 -0
  247. package/dist/record/reader/runtime.cjs.map +1 -1
  248. package/dist/record/reader/runtime.d.cts +15 -0
  249. package/dist/record/reader/runtime.d.mts +15 -0
  250. package/dist/record/reader/runtime.d.ts +15 -0
  251. package/dist/record/reader/runtime.js +2 -0
  252. package/dist/report/assets/styles.css +53 -29
  253. package/dist/report/built-in/analysis-values.cjs +21 -13
  254. package/dist/report/built-in/analysis-values.cjs.map +1 -1
  255. package/dist/report/built-in/analysis-values.d.cts +11 -22
  256. package/dist/report/built-in/analysis-values.d.mts +11 -22
  257. package/dist/report/built-in/analysis-values.d.ts +11 -22
  258. package/dist/report/built-in/analysis-values.js +4 -6
  259. package/dist/report/built-in/index.cjs +1 -3
  260. package/dist/report/built-in/index.cjs.map +1 -1
  261. package/dist/report/built-in/index.d.cts +1 -1
  262. package/dist/report/built-in/index.d.mts +1 -1
  263. package/dist/report/built-in/index.d.ts +1 -1
  264. package/dist/report/built-in/index.js +4 -8
  265. package/dist/report/built-in/index.mjs +4 -8
  266. package/dist/report/built-in/machine.cjs +0 -2
  267. package/dist/report/built-in/machine.cjs.map +1 -1
  268. package/dist/report/built-in/machine.d.cts +0 -2
  269. package/dist/report/built-in/machine.d.mts +0 -2
  270. package/dist/report/built-in/machine.d.ts +0 -2
  271. package/dist/report/built-in/result-components.cjs +49 -51
  272. package/dist/report/built-in/result-components.cjs.map +1 -1
  273. package/dist/report/built-in/result-components.d.cts +16 -17
  274. package/dist/report/built-in/result-components.d.mts +16 -17
  275. package/dist/report/built-in/result-components.d.ts +16 -17
  276. package/dist/report/built-in/result-components.js +0 -4
  277. package/dist/report/built-in/run-membership-overview.cjs +126 -17
  278. package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
  279. package/dist/report/built-in/run-membership-overview.d.cts +14 -0
  280. package/dist/report/built-in/run-membership-overview.d.mts +14 -0
  281. package/dist/report/built-in/run-membership-overview.d.ts +14 -0
  282. package/dist/report/built-in/run-membership-overview.js +4 -2
  283. package/dist/report/built-in/standard.cjs +80 -45
  284. package/dist/report/built-in/standard.cjs.map +1 -1
  285. package/dist/report/built-in/standard.d.cts +19 -41
  286. package/dist/report/built-in/standard.d.mts +19 -41
  287. package/dist/report/built-in/standard.d.ts +19 -41
  288. package/dist/report/built-in/standard.js +6 -6
  289. package/dist/report/components/attempt-detail/compute.cjs +78 -2
  290. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  291. package/dist/report/components/attempt-detail/compute.d.cts +1 -1
  292. package/dist/report/components/attempt-detail/compute.d.mts +1 -1
  293. package/dist/report/components/attempt-detail/compute.d.ts +1 -1
  294. package/dist/report/components/attempt-detail/content.cjs +1 -1
  295. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  296. package/dist/report/components/entity-lists/compute.cjs +42 -5
  297. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  298. package/dist/report/components/entity-lists/compute.d.cts +10 -8
  299. package/dist/report/components/entity-lists/compute.d.mts +10 -8
  300. package/dist/report/components/entity-lists/compute.d.ts +10 -8
  301. package/dist/report/components/entity-lists/content.cjs +31 -6
  302. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  303. package/dist/report/components/entity-lists/index.cjs +9 -4
  304. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  305. package/dist/report/components/entity-lists/index.d.cts +4 -7
  306. package/dist/report/components/entity-lists/index.d.mts +4 -7
  307. package/dist/report/components/entity-lists/index.d.ts +4 -7
  308. package/dist/report/components/summaries/compute.cjs +8 -1
  309. package/dist/report/components/summaries/compute.cjs.map +1 -1
  310. package/dist/report/components/summaries/compute.d.cts +9 -1
  311. package/dist/report/components/summaries/compute.d.mts +9 -1
  312. package/dist/report/components/summaries/compute.d.ts +9 -1
  313. package/dist/report/components/summaries/index.cjs +48 -4
  314. package/dist/report/components/summaries/index.cjs.map +1 -1
  315. package/dist/report/components/summaries/index.d.cts +7 -4
  316. package/dist/report/components/summaries/index.d.mts +7 -4
  317. package/dist/report/components/summaries/index.d.ts +7 -4
  318. package/dist/report/definition/cell.cjs +3 -0
  319. package/dist/report/definition/cell.cjs.map +1 -1
  320. package/dist/report/definition/cell.d.cts +2 -0
  321. package/dist/report/definition/cell.d.mts +2 -0
  322. package/dist/report/definition/cell.d.ts +2 -0
  323. package/dist/report/definition/primitives/chart.cjs +8 -5
  324. package/dist/report/definition/primitives/chart.cjs.map +1 -1
  325. package/dist/report/definition/primitives/points-dataset.cjs +1 -0
  326. package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
  327. package/dist/report/definition/primitives.cjs +15 -2
  328. package/dist/report/definition/primitives.cjs.map +1 -1
  329. package/dist/report/definition/report.cjs +27 -3
  330. package/dist/report/definition/report.cjs.map +1 -1
  331. package/dist/report/definition/report.d.cts +8 -0
  332. package/dist/report/definition/report.d.mts +8 -0
  333. package/dist/report/definition/report.d.ts +8 -0
  334. package/dist/report/execution/machine.cjs +30 -14
  335. package/dist/report/execution/machine.cjs.map +1 -1
  336. package/dist/report/execution/machine.d.cts +20 -10
  337. package/dist/report/execution/machine.d.mts +20 -10
  338. package/dist/report/execution/machine.d.ts +20 -10
  339. package/dist/report/execution/machine.js +6 -6
  340. package/dist/report/host/execute.cjs +25 -16
  341. package/dist/report/host/execute.cjs.map +1 -1
  342. package/dist/report/host/execute.d.cts +4 -0
  343. package/dist/report/host/execute.d.mts +4 -0
  344. package/dist/report/host/execute.d.ts +4 -0
  345. package/dist/report/host/from-record.cjs +22 -5
  346. package/dist/report/host/from-record.cjs.map +1 -1
  347. package/dist/report/host/machine.cjs +53 -11
  348. package/dist/report/host/machine.cjs.map +1 -1
  349. package/dist/report/host/site-runtime.cjs +9 -8
  350. package/dist/report/host/site-runtime.cjs.map +1 -1
  351. package/dist/report/host/site-runtime.d.cts +1 -1
  352. package/dist/report/host/site-runtime.d.mts +1 -1
  353. package/dist/report/host/site-runtime.d.ts +1 -1
  354. package/dist/report/host/static.cjs +56 -9
  355. package/dist/report/host/static.cjs.map +1 -1
  356. package/dist/report/index.cjs.map +1 -1
  357. package/dist/report/index.d.cts +1 -1
  358. package/dist/report/index.d.mts +1 -1
  359. package/dist/report/index.d.ts +1 -1
  360. package/dist/report/model/dataset.cjs +7 -2
  361. package/dist/report/model/dataset.cjs.map +1 -1
  362. package/dist/report/model/locale.cjs +2 -0
  363. package/dist/report/model/locale.cjs.map +1 -1
  364. package/dist/report/model/locale.d.cts +1 -0
  365. package/dist/report/model/locale.d.mts +1 -0
  366. package/dist/report/model/locale.d.ts +1 -0
  367. package/dist/report/model/metrics.cjs +3 -1
  368. package/dist/report/model/metrics.cjs.map +1 -1
  369. package/dist/report/model/pricing.cjs +16 -11
  370. package/dist/report/model/pricing.cjs.map +1 -1
  371. package/dist/report/react/styles.css +53 -29
  372. package/dist/runner/adoption.cjs +1 -0
  373. package/dist/runner/adoption.cjs.map +1 -1
  374. package/dist/runner/attempt.cjs +44 -5
  375. package/dist/runner/attempt.cjs.map +1 -1
  376. package/dist/runner/attempt.d.cts +13 -1
  377. package/dist/runner/attempt.d.mts +13 -1
  378. package/dist/runner/attempt.d.ts +13 -1
  379. package/dist/runner/config-identity.cjs +10 -2
  380. package/dist/runner/config-identity.cjs.map +1 -1
  381. package/dist/runner/config-identity.d.cts +4 -2
  382. package/dist/runner/config-identity.d.mts +4 -2
  383. package/dist/runner/config-identity.d.ts +4 -2
  384. package/dist/runner/feedback/human.cjs +298 -59
  385. package/dist/runner/feedback/human.cjs.map +1 -1
  386. package/dist/runner/feedback/json.cjs +14 -6
  387. package/dist/runner/feedback/json.cjs.map +1 -1
  388. package/dist/runner/feedback/json.d.cts +3 -2
  389. package/dist/runner/feedback/json.d.mts +3 -2
  390. package/dist/runner/feedback/json.d.ts +3 -2
  391. package/dist/runner/feedback/reducer.cjs +2 -0
  392. package/dist/runner/feedback/reducer.cjs.map +1 -1
  393. package/dist/runner/judge-config.cjs +1 -1
  394. package/dist/runner/judge-config.cjs.map +1 -1
  395. package/dist/runner/ledger.cjs +124 -12
  396. package/dist/runner/ledger.cjs.map +1 -1
  397. package/dist/runner/project-current.cjs +13 -5
  398. package/dist/runner/project-current.cjs.map +1 -1
  399. package/dist/runner/run.cjs +564 -256
  400. package/dist/runner/run.cjs.map +1 -1
  401. package/dist/runner/sandbox-pool.cjs +161 -30
  402. package/dist/runner/sandbox-pool.cjs.map +1 -1
  403. package/dist/runner/sandbox-pool.d.cts +34 -2
  404. package/dist/runner/sandbox-pool.d.mts +34 -2
  405. package/dist/runner/sandbox-pool.d.ts +34 -2
  406. package/dist/runner/shared-state-lease.cjs +803 -0
  407. package/dist/runner/shared-state-lease.cjs.map +1 -0
  408. package/dist/runner/shared-state-lease.d.cts +121 -0
  409. package/dist/runner/shared-state-lease.d.mts +121 -0
  410. package/dist/runner/shared-state-lease.d.ts +121 -0
  411. package/dist/runner/shared-state-lease.js +24 -0
  412. package/dist/runner/shared-state-lease.js.map +1 -0
  413. package/dist/runner/teardown-registry.cjs +97 -34
  414. package/dist/runner/teardown-registry.cjs.map +1 -1
  415. package/dist/runner/teardown-registry.d.cts +27 -1
  416. package/dist/runner/teardown-registry.d.mts +27 -1
  417. package/dist/runner/teardown-registry.d.ts +27 -1
  418. package/dist/runner/teardown-registry.js +20 -16
  419. package/dist/runner/types.cjs.map +1 -1
  420. package/dist/runner/types.d.cts +31 -5
  421. package/dist/runner/types.d.mts +31 -5
  422. package/dist/runner/types.d.ts +31 -5
  423. package/dist/sample/analysis.cjs +249 -459
  424. package/dist/sample/analysis.cjs.map +1 -1
  425. package/dist/sample/capability.cjs +138 -7
  426. package/dist/sample/capability.cjs.map +1 -1
  427. package/dist/sample/capability.d.cts +3 -1
  428. package/dist/sample/capability.d.mts +3 -1
  429. package/dist/sample/capability.d.ts +3 -1
  430. package/dist/sample/capability.js +8 -6
  431. package/dist/sandbox/docker-agent-image.cjs +5 -1
  432. package/dist/sandbox/docker-agent-image.cjs.map +1 -1
  433. package/dist/sandbox/docker-agent-image.d.cts +2 -0
  434. package/dist/sandbox/docker-agent-image.d.mts +2 -0
  435. package/dist/sandbox/docker-agent-image.d.ts +2 -0
  436. package/dist/sandbox/docker-agent-image.js +14 -10
  437. package/dist/sandbox/docker-profile/schema.cjs +283 -534
  438. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  439. package/dist/sandbox/docker-profile/schema.d.cts +10 -27
  440. package/dist/sandbox/docker-profile/schema.d.mts +10 -27
  441. package/dist/sandbox/docker-profile/schema.d.ts +10 -27
  442. package/dist/sandbox/e2b-agent-template.cjs +5 -2
  443. package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
  444. package/dist/sandbox/index.cjs +4 -2
  445. package/dist/sandbox/index.cjs.map +1 -1
  446. package/dist/sandbox/index.d.cts +1 -1
  447. package/dist/sandbox/index.d.mts +1 -1
  448. package/dist/sandbox/index.d.ts +1 -1
  449. package/dist/sandbox/index.js +120 -116
  450. package/dist/sandbox/index.mjs +120 -116
  451. package/dist/sandbox/keep-registry.cjs +28 -66
  452. package/dist/sandbox/keep-registry.cjs.map +1 -1
  453. package/dist/sandbox/types.cjs.map +1 -1
  454. package/dist/sandbox/types.d.cts +1 -1
  455. package/dist/sandbox/types.d.mts +1 -1
  456. package/dist/sandbox/types.d.ts +1 -1
  457. package/dist/shared/aggregate.cjs +16 -6
  458. package/dist/shared/aggregate.cjs.map +1 -1
  459. package/dist/shared/aggregate.d.cts +12 -4
  460. package/dist/shared/aggregate.d.mts +12 -4
  461. package/dist/shared/aggregate.d.ts +12 -4
  462. package/dist/shared/turn-label.cjs +20 -2
  463. package/dist/shared/turn-label.cjs.map +1 -1
  464. package/dist/shared/turn-label.d.cts +2 -0
  465. package/dist/shared/turn-label.d.mts +2 -0
  466. package/dist/shared/turn-label.d.ts +2 -0
  467. package/dist/shared/turn-label.js +4 -2
  468. package/dist/vendor/remark/remark-gfm.cjs +7 -7
  469. package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
  470. package/dist/vendor/remark/remark-parse.cjs +12 -12
  471. package/dist/vendor/remark/remark-parse.cjs.map +1 -1
  472. package/dist/vendor/remark/remark.cjs +13 -13
  473. package/dist/vendor/remark/remark.cjs.map +1 -1
  474. package/dist/view/server.cjs +6 -0
  475. package/dist/view/server.cjs.map +1 -1
  476. package/docs-site/images/hitl-handshake-zh.svg +3 -3
  477. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  478. package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
  479. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
  480. package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
  481. package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
  482. package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
  483. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  484. package/docs-site/zh/explanation/adapter.mdx +5 -5
  485. package/docs-site/zh/explanation/assert.mdx +7 -7
  486. package/docs-site/zh/explanation/drive.mdx +4 -2
  487. package/docs-site/zh/explanation/evals.mdx +10 -8
  488. package/docs-site/zh/explanation/experiment.mdx +2 -2
  489. package/docs-site/zh/explanation/hitl.mdx +9 -9
  490. package/docs-site/zh/explanation/judge.mdx +5 -5
  491. package/docs-site/zh/explanation/overview.mdx +3 -3
  492. package/docs-site/zh/explanation/runner.mdx +1 -1
  493. package/docs-site/zh/index.mdx +3 -3
  494. package/docs-site/zh/reference/builtin-agents.mdx +13 -13
  495. package/docs-site/zh/reference/capabilities.mdx +1 -1
  496. package/docs-site/zh/reference/cli.mdx +18 -12
  497. package/docs-site/zh/reference/define-agent.mdx +130 -5
  498. package/docs-site/zh/reference/define-config.mdx +2 -2
  499. package/docs-site/zh/reference/define-eval.mdx +4 -4
  500. package/docs-site/zh/reference/events.mdx +11 -11
  501. package/docs-site/zh/reference/official-adapters.mdx +6 -6
  502. package/docs-site/zh/reference/results-data.mdx +6 -0
  503. package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
  504. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
  505. package/docs-site/zh/tutorials/accept-results.mdx +72 -0
  506. package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
  507. package/docs-site/zh/tutorials/authoring.mdx +9 -13
  508. package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
  509. package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
  510. package/docs-site/zh/tutorials/concurrency.mdx +13 -12
  511. package/docs-site/zh/tutorials/configuration.mdx +4 -6
  512. package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
  513. package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
  514. package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
  515. package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
  516. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
  517. package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
  518. package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
  519. package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
  520. package/docs-site/zh/tutorials/experiments.mdx +2 -3
  521. package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
  522. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
  523. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
  524. package/docs-site/zh/tutorials/plugins.mdx +14 -0
  525. package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
  526. package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
  527. package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
  528. package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
  529. package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
  530. package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
  531. package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
  532. package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
  533. package/docs-site/zh/tutorials/write-send.mdx +9 -8
  534. package/package.json +9 -5
  535. package/dist/report/built-in/overview.cjs +0 -44
  536. package/dist/report/built-in/overview.cjs.map +0 -1
  537. package/dist/report/built-in/overview.d.cts +0 -6
  538. package/dist/report/built-in/overview.d.mts +0 -6
  539. package/dist/report/built-in/overview.d.ts +0 -6
  540. package/dist/report/built-in/overview.js +0 -9
  541. package/dist/report/built-in/overview.js.map +0 -1
  542. package/dist/runner/gate-lease.cjs +0 -283
  543. package/dist/runner/gate-lease.cjs.map +0 -1
  544. package/dist/runner/gate-lease.d.cts +0 -62
  545. package/dist/runner/gate-lease.d.mts +0 -62
  546. package/dist/runner/gate-lease.d.ts +0 -62
  547. package/dist/runner/gate-lease.js +0 -22
  548. package/dist/runner/gate-lease.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["content.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content 投影:compute 领域结果 → 原语 Content 形状。\n// 输入全部是当前闭合 DomainView 派生的普通值。\nimport { Text, TurnTrace } from \"../../definition/primitives.tsx\";\nimport type { ReportNode } from \"../../definition/tree.ts\";\nimport type { CalloutGroup, CalloutItem } from \"../../definition/primitives/callouts-logic.ts\";\nimport type { CopyBlockContent } from \"../../definition/primitives/copy-block.tsx\";\nimport type { CommandEvidenceContent, ConversationContent, ConversationEntry, ConversationTurn } from \"../../definition/primitives/conversation.tsx\";\nimport { ToolEvidence } from \"../../definition/primitives/tool-evidence.tsx\";\nimport type { DiffContent } from \"../../definition/primitives/diff-lines.ts\";\nimport type { SourceBlockContent, SourceContent, SourceLine, SourceLineTone, } from \"../../definition/primitives/source-view.tsx\";\nimport type { WaterfallContent, WaterfallNode } from \"../../definition/primitives/waterfall.tsx\";\nimport type { TableContent, TableContentRow } from \"../../definition/cell.ts\";\nimport type { ClosedTimingInterval } from \"../../../analysis/index.ts\";\nimport { formatDurationMs, formatPointsSuffix } from \"../../model/format.ts\";\nimport { localizedMessage } from \"../../model/locale.ts\";\nimport { normalizeTurnLabel } from \"../../../shared/turn-label.ts\";\nimport type { AttemptAssertionsData, AttemptAssertionView, AttemptCommandEvidenceData, AttemptConversationData, AttemptConversationReply, AttemptDiagnosticsData, AttemptDiffData, AttemptErrorData, AttemptFixPromptData, AttemptSourceData, AttemptSourceItemView, AttemptTimelineData, AttemptTraceData, } from \"./compute.ts\";\n// ───────────────────────── AttemptSource ─────────────────────────\n/** 该行 assertion 的判定摘要行 tone:与源码行状态同一套色。 */\nfunction assertionToneClass(assertion: AttemptAssertionView): string {\n if (assertion.outcome === \"unavailable\")\n return \"niceeval-tone-na\";\n if (assertion.outcome === \"passed\")\n return \"niceeval-tone-good\";\n return assertion.severity === \"gate\" ? \"niceeval-tone-bad\" : \"niceeval-tone-warn\";\n}\n/**\n * 一条 assertion 在展开区里的呈现:一行判定摘要,再接一段详情正文\n * (docs/feature/reports/library.md「源码行展开区里有什么」)。\n */\nfunction assertionNodes(assertion: AttemptAssertionView, key: string): ReportNode[] {\n const points = assertion.outcome !== \"unavailable\" && assertion.score !== undefined\n ? ` ${formatPointsSuffix(assertion.score.state === \"earned\" ? assertion.score.earned ?? 0 : 0)}`\n : \"\";\n const head = `${assertion.name} · ${assertion.severity} ${assertion.outcome}${points}`;\n const nodes: ReportNode[] = [\n <Text key={`${key}:head`} className={`niceeval-source-assertion ${assertionToneClass(assertion)}`}>\n {head}\n </Text>,\n ];\n if (assertion.detail.length > 0) {\n nodes.push(<Text key={`${key}:body`} className=\"niceeval-source-assertion-body\">\n {assertion.detail}\n </Text>);\n }\n return nodes;\n}\nfunction lineToneOf(assertions: readonly AttemptAssertionView[]): SourceLineTone | undefined {\n if (assertions.some((assertion) => assertion.outcome === \"failed\" && assertion.severity === \"gate\"))\n return \"gate-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"failed\"))\n return \"soft-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"unavailable\"))\n return \"unavailable\";\n if (assertions.some((assertion) => assertion.outcome === \"passed\"))\n return \"passed\";\n return undefined;\n}\ninterface SiteLineBinding {\n readonly entry: AttemptAssertionView;\n readonly role: string;\n readonly line: number;\n}\n/** sourceSites → 每行注解绑定:detail 落在起始行,tone 覆盖整个行区间。 */\nfunction siteBindingsOf(data: AttemptSourceData): ReadonlyMap<string, readonly SiteLineBinding[]> {\n const entriesById = new Map(data.entries.map((entry) => [entry.entryId, entry] as const));\n const bindings = new Map<string, SiteLineBinding[]>();\n for (const site of data.sites) {\n const entry = entriesById.get(site.entryId);\n if (entry === undefined)\n continue;\n for (let line = site.startLine; line <= site.endLine; line += 1) {\n const bucket = bindings.get(`${site.sourceItemId}:${line}`) ?? [];\n bucket.push({ entry, role: site.role, line: site.startLine });\n bindings.set(`${site.sourceItemId}:${line}`, bucket);\n }\n }\n return bindings;\n}\nfunction sourceItemBlock(item: AttemptSourceItemView, data: AttemptSourceData, bindings: ReadonlyMap<string, readonly SiteLineBinding[]>): SourceBlockContent {\n const lines: SourceLine[] = item.lines.map((text, index): SourceLine => {\n const line = index + 1;\n const bound = bindings.get(`${item.sourceItemId}:${line}`) ?? [];\n const assertions = bound.filter((binding) => binding.role !== \"score\").map((binding) => binding.entry);\n const details = bound\n .filter((binding) => binding.line === line && binding.role !== \"score\")\n .map((binding, detailIndex) => assertionNodes(binding.entry, `${item.path}:${line}:${detailIndex}`))\n .flat();\n const points = bound\n .filter((binding) => binding.role === \"score\")\n .reduce((sum, binding) => sum + (binding.entry.score?.state === \"earned\" ? binding.entry.score.earned ?? 0 : 0), 0);\n const hasPoints = bound.some((binding) => binding.role === \"score\" && binding.entry.score !== undefined);\n const tone = lineToneOf(assertions);\n const turnIds = (data.navigation?.rows ?? [])\n .filter((row) => row.source.state === \"mapped\" &&\n row.source.sourceItemId === item.sourceItemId &&\n row.source.sha256 === item.sha256 &&\n row.source.start.line === line)\n .sort((left, right) => (left.sourceOrder ?? Number.MAX_SAFE_INTEGER) - (right.sourceOrder ?? Number.MAX_SAFE_INTEGER) ||\n (left.turnId < right.turnId ? -1 : left.turnId > right.turnId ? 1 : 0))\n .map((row) => row.turnId);\n return {\n number: line,\n text,\n ...(turnIds.length > 0 ? { interaction: \"send\" as const, turnIds } : {}),\n ...(tone !== undefined ? { tone } : {}),\n ...(hasPoints ? { pill: formatPointsSuffix(points) } : {}),\n ...(details.length > 0 ? { details } : {}),\n };\n });\n return { path: item.path, lines };\n}\n/**\n * 闭合 Sources + sourceSites → SourceView Content。spine 是第一个 source item,\n * 其余是 detached;没有 sourceSite 的 attention 断言进 unmapped 区,不丢弃。\n */\nexport function projectedSourceContent(data: AttemptSourceData | null, locator?: AttemptSourceData[\"locator\"]): SourceContent | null {\n if (data === null)\n return null;\n const bindings = siteBindingsOf(data);\n const referenced = new Set(data.sites.map((site) => site.entryId));\n const unmapped: ReportNode[] = data.entries\n .filter((entry) => !referenced.has(entry.entryId))\n .flatMap((entry, index) => assertionNodes(entry, `unmapped:${index}`));\n const spine = sourceItemBlock(data.items[0]!, data, bindings);\n const detached = data.items.slice(1).map((item) => sourceItemBlock(item, data, bindings));\n return {\n spine,\n detached,\n ...(unmapped.length > 0 ? { unmapped } : {}),\n ...(locator !== undefined ? { locator } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport function attemptAssertionsContent(data: AttemptAssertionsData | null): TableContent | null {\n if (data === null || (data.attention.length === 0 && data.passedGroups.length === 0))\n return null;\n const rows: TableContentRow[] = [];\n for (const assertion of data.attention) {\n rows.push({\n key: assertion.entryId,\n cells: {\n name: { kind: \"text\", text: assertion.name },\n severity: { kind: \"text\", text: assertion.severity },\n outcome: { kind: \"verdict\", verdict: assertion.outcome === \"unavailable\" ? \"skipped\" : assertion.outcome },\n detail: assertion.detail.length > 0\n ? { kind: \"text\", text: assertion.detail }\n : { kind: \"notApplicable\" },\n },\n });\n }\n return {\n columns: [\n { key: \"name\", header: localizedMessage(\"attemptAssertions.name\") },\n { key: \"severity\", header: localizedMessage(\"attemptAssertions.severity\") },\n { key: \"outcome\", header: localizedMessage(\"attemptAssertions.outcome\") },\n { key: \"detail\", header: localizedMessage(\"attemptAssertions.detail\") },\n ],\n rows,\n };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nfunction timingTree(intervals: readonly ClosedTimingInterval[]): readonly WaterfallNode[] {\n const children = new Map<string | null, ClosedTimingInterval[]>();\n for (const interval of intervals) {\n const siblings = children.get(interval.parentIntervalId) ?? [];\n siblings.push(interval);\n children.set(interval.parentIntervalId, siblings);\n }\n const build = (parent: string | null): WaterfallNode[] => (children.get(parent) ?? [])\n .sort(compareIntervals)\n .map((interval) => {\n const phase = interval.phase;\n return {\n key: interval.intervalId,\n label: phase === \"agent.send\" ? normalizeTurnLabel(interval.label) : interval.label,\n kind: phase,\n startOffsetMs: interval.startOffsetMs,\n durationMs: interval.durationMs,\n ...(interval.outcome === \"failed\" || interval.outcome === \"interrupted\" ? { failed: true as const } : {}),\n // 主干默认展开:直接看到 eval.run 与 agent.send 内部活动。\n ...(phase === \"eval.run\" || phase === \"agent.send\" ? { open: true as const } : {}),\n ...(build(interval.intervalId).length > 0 ? { children: build(interval.intervalId) } : {}),\n };\n });\n return build(null);\n}\nfunction compareIntervals(left: ClosedTimingInterval, right: ClosedTimingInterval): number {\n return left.startOffsetMs - right.startOffsetMs || compareText(left.intervalId, right.intervalId);\n}\nfunction timingSpan(intervals: readonly ClosedTimingInterval[]): number | null {\n if (intervals.length === 0)\n return null;\n const start = Math.min(...intervals.map((interval) => interval.startOffsetMs));\n const end = Math.max(...intervals.map((interval) => interval.startOffsetMs + interval.durationMs));\n return Math.max(0, end - start);\n}\n/** 执行时间树:root 区间是 phase 主链,children 是采集侧层级。 */\nexport function attemptTimelineContent(data: AttemptTimelineData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\nexport function attemptTraceContent(data: AttemptTraceData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\n/** 工具出入参等结构化值:JSON 化后交原语收口成单行预览(Conversation 的 preview 契约)。 */\nfunction jsonPreview(value: string | undefined): string {\n return value === undefined ? \"\" : value;\n}\nfunction conversationEntryOf(reply: AttemptConversationReply): ConversationEntry {\n switch (reply.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n return { kind: reply.kind, preview: reply.text, failed: reply.kind === \"error\" };\n case \"context\":\n return { kind: \"context\", preview: reply.text };\n case \"tool\": {\n const finished = reply.outputSummary !== undefined;\n const raw = finished ? reply.outputSummary : reply.inputSummary;\n return {\n kind: \"tool\",\n preview: finished\n ? `${reply.name} result`\n : `${reply.name}(${jsonPreview(reply.inputSummary)})`,\n raw,\n callId: reply.callId,\n callPhase: finished ? \"finished\" : \"started\",\n ...(reply.failed === true ? { failed: true } : {}),\n detail: (<ToolEvidence content={{\n phase: finished ? \"finished\" : \"started\",\n tool: reply.name,\n callId: reply.callId,\n inputSummary: reply.inputSummary,\n ...(reply.outputSummary === undefined ? {} : { outputSummary: reply.outputSummary }),\n ...(reply.outcome === undefined ? {} : { outcome: reply.outcome }),\n }}/>),\n };\n }\n case \"subagent\":\n return {\n kind: \"subagent\",\n preview: reply.name,\n ...(reply.failed === true ? { failed: true } : {}),\n ...(reply.summary ? { detail: <Text>{reply.summary}</Text> } : {}),\n };\n case \"skill\":\n return { kind: \"skill\", preview: reply.text ? `${reply.skill}: ${reply.text}` : reply.skill };\n case \"input\":\n return {\n kind: \"input\",\n preview: `${reply.request.state} · ${reply.request.promptSummary}`,\n ...(reply.request.responseSummary !== null\n ? { detail: <Text>{reply.request.responseSummary}</Text> }\n : {}),\n };\n case \"compaction\":\n return { kind: \"compaction\", preview: reply.text || \"context compacted\" };\n }\n}\nfunction turnVerdictOf(outcome: AttemptConversationData[\"rounds\"][number][\"outcome\"]): ConversationTurn[\"verdict\"] {\n switch (outcome) {\n case \"completed\":\n return undefined;\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n return \"skipped\";\n case \"interrupted\":\n return \"errored\";\n }\n}\nexport function attemptConversationContent(data: AttemptConversationData | null): ConversationContent | null {\n if (data === null || data.rounds.length === 0)\n return null;\n const turns: ConversationTurn[] = data.rounds.map((round) => ({\n key: round.turnId,\n label: `Turn ${round.sequence}`,\n ...(round.durationMs === undefined ? {} : { durationMs: round.durationMs }),\n verdict: turnVerdictOf(round.outcome),\n entries: round.replies.map(conversationEntryOf),\n }));\n return { turns, locator: data.locator };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function attemptCommandEvidenceContent(data: AttemptCommandEvidenceData | null): CommandEvidenceContent | null {\n if (data === null || data.commands.length === 0)\n return null;\n return { locator: data.locator, commands: data.commands };\n}\n// ───────────────────────── AttemptDiagnostics / AttemptError ─────────────────────────\nexport const executionEvidenceUnavailableCallouts: readonly CalloutGroup[] = [\n {\n title: \"Execution evidence unavailable\",\n items: [\n {\n level: \"warning\",\n message: \"The events artifact is missing or was not published.\",\n },\n ],\n },\n];\nexport function attemptDiagnosticsContent(data: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return data.groups.map((group) => ({\n title: group.phase,\n items: group.items.map((diagnostic): CalloutItem => ({\n level: diagnostic.level,\n message: `${diagnostic.code}: ${diagnostic.summary}`,\n })),\n }));\n}\nexport function attemptErrorContent(data: AttemptErrorData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return [\n {\n title: data.phase,\n items: [{ level: \"error\", message: `${data.code}: ${data.message}` }],\n },\n ];\n}\nexport function attemptFixPromptContent(data: AttemptFixPromptData | null): CopyBlockContent | null {\n if (data === null)\n return null;\n return { title: { en: \"Fix prompt\", \"zh-CN\": \"修复 prompt\" }, text: data.prompt };\n}\n/** 投影已经是 `DiffFile[]`,这里只把「没有证据」与「没有改动」都收成组件的零输出。 */\nexport function attemptDiffContent(data: AttemptDiffData | null): DiffContent | null {\n if (data === null || data.files.length === 0)\n return null;\n return data.files.map((file) => ({\n ...file,\n windows: file.windows.map((window) => ({\n ...window,\n window: normalizeTurnLabel(window.window),\n })),\n }));\n}\nexport function attemptNoticesContent(error: AttemptErrorData | null, diagnostics: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n const groups = [...(attemptErrorContent(error) ?? []), ...(attemptDiagnosticsContent(diagnostics) ?? [])];\n return groups.length > 0 ? groups : null;\n}\n// ───────────────────────── Conversation 嵌入源码 ─────────────────────────\n/**\n * 只按已验证的 navigation turnId 将 Conversation 轮嵌入源码 send 行;没有\n * mapped row 的轮留在页尾。这里禁止按标签、源码顺序或数组位置补配。\n */\nexport function embedConversationInSource(source: SourceContent | null, conversation: ConversationContent | null): {\n source: SourceContent | null;\n conversation: ConversationContent | null;\n} {\n const turns = conversation?.turns ?? [];\n const turnById = new Map(turns.map((turn) => [turn.key, turn] as const));\n const mappedTurnIds = new Set<string>();\n const cloneLine = (line: SourceLine): SourceLine => {\n const lineTurns = (line.turnIds ?? []).flatMap((turnId) => {\n const turn = turnById.get(turnId);\n if (turn === undefined)\n return [];\n mappedTurnIds.add(turnId);\n return [turn];\n });\n const details = line.details === undefined && lineTurns.length === 0\n ? undefined\n : [\n ...(line.details ?? []),\n ...(lineTurns.length === 0 ? [] : [<TurnTrace data={{ turns: lineTurns }}/>]),\n ];\n return {\n ...line,\n ...(details === undefined ? {} : { details }),\n };\n };\n const cloneBlock = (block: SourceBlockContent): SourceBlockContent => ({\n ...block,\n lines: block.lines.map(cloneLine),\n });\n const embeddedSource = source === null\n ? null\n : {\n ...source,\n spine: cloneBlock(source.spine),\n detached: source.detached.map(cloneBlock),\n };\n const remainingTurns = turns.filter((turn) => !mappedTurnIds.has(turn.key));\n const remainingConversation = conversation === null || remainingTurns.length === 0\n ? null\n : { ...conversation, turns: remainingTurns };\n return { source: embeddedSource, conversation: remainingConversation };\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["content.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content 投影:compute 领域结果 → 原语 Content 形状。\n// 输入全部是当前闭合 DomainView 派生的普通值。\nimport { Text, TurnTrace } from \"../../definition/primitives.tsx\";\nimport type { ReportNode } from \"../../definition/tree.ts\";\nimport type { CalloutGroup, CalloutItem } from \"../../definition/primitives/callouts-logic.ts\";\nimport type { CopyBlockContent } from \"../../definition/primitives/copy-block.tsx\";\nimport type { CommandEvidenceContent, ConversationContent, ConversationEntry, ConversationTurn } from \"../../definition/primitives/conversation.tsx\";\nimport { ToolEvidence } from \"../../definition/primitives/tool-evidence.tsx\";\nimport type { DiffContent } from \"../../definition/primitives/diff-lines.ts\";\nimport type { SourceBlockContent, SourceContent, SourceLine, SourceLineTone, } from \"../../definition/primitives/source-view.tsx\";\nimport type { WaterfallContent, WaterfallNode } from \"../../definition/primitives/waterfall.tsx\";\nimport type { TableContent, TableContentRow } from \"../../definition/cell.ts\";\nimport type { ClosedTimingInterval } from \"../../../analysis/index.ts\";\nimport { formatDurationMs, formatPointsSuffix } from \"../../model/format.ts\";\nimport { localizedMessage } from \"../../model/locale.ts\";\nimport { normalizeTurnLabel } from \"../../../shared/turn-label.ts\";\nimport type { AttemptAssertionsData, AttemptAssertionView, AttemptCommandEvidenceData, AttemptConversationData, AttemptConversationReply, AttemptDiagnosticsData, AttemptDiffData, AttemptErrorData, AttemptFixPromptData, AttemptSourceData, AttemptSourceItemView, AttemptTimelineData, AttemptTraceData, } from \"./compute.ts\";\n// ───────────────────────── AttemptSource ─────────────────────────\n/** 该行 assertion 的判定摘要行 tone:与源码行状态同一套色。 */\nfunction assertionToneClass(assertion: AttemptAssertionView): string {\n if (assertion.outcome === \"unavailable\")\n return \"niceeval-tone-na\";\n if (assertion.outcome === \"passed\")\n return \"niceeval-tone-good\";\n return assertion.severity === \"gate\" ? \"niceeval-tone-bad\" : \"niceeval-tone-warn\";\n}\n/**\n * 一条 assertion 在展开区里的呈现:一行判定摘要,再接一段详情正文\n * (docs/feature/reports/library.md「源码行展开区里有什么」)。\n */\nfunction assertionNodes(assertion: AttemptAssertionView, key: string): ReportNode[] {\n const points = assertion.outcome !== \"unavailable\" && assertion.score !== undefined\n ? ` ${formatPointsSuffix(assertion.score.state === \"earned\" ? assertion.score.earned ?? 0 : 0)}`\n : \"\";\n const head = `${assertion.name} · ${assertion.severity} ${assertion.outcome}${points}`;\n const nodes: ReportNode[] = [\n <Text key={`${key}:head`} className={`niceeval-source-assertion ${assertionToneClass(assertion)}`}>\n {head}\n </Text>,\n ];\n if (assertion.detail.length > 0) {\n nodes.push(<Text key={`${key}:body`} className=\"niceeval-source-assertion-body\">\n {assertion.detail}\n </Text>);\n }\n return nodes;\n}\nfunction lineToneOf(assertions: readonly AttemptAssertionView[]): SourceLineTone | undefined {\n if (assertions.some((assertion) => assertion.outcome === \"failed\" && assertion.severity === \"gate\"))\n return \"gate-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"failed\"))\n return \"soft-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"unavailable\"))\n return \"unavailable\";\n if (assertions.some((assertion) => assertion.outcome === \"passed\"))\n return \"passed\";\n return undefined;\n}\ninterface SiteLineBinding {\n readonly entry: AttemptAssertionView;\n readonly role: string;\n readonly line: number;\n}\n/** sourceSites → 每行注解绑定:detail 落在起始行,tone 覆盖整个行区间。 */\nfunction siteBindingsOf(data: AttemptSourceData): ReadonlyMap<string, readonly SiteLineBinding[]> {\n const entriesById = new Map(data.entries.map((entry) => [entry.entryId, entry] as const));\n const bindings = new Map<string, SiteLineBinding[]>();\n for (const site of data.sites) {\n const entry = entriesById.get(site.entryId);\n if (entry === undefined)\n continue;\n for (let line = site.startLine; line <= site.endLine; line += 1) {\n const bucket = bindings.get(`${site.sourceItemId}:${line}`) ?? [];\n bucket.push({ entry, role: site.role, line: site.startLine });\n bindings.set(`${site.sourceItemId}:${line}`, bucket);\n }\n }\n return bindings;\n}\nfunction sourceItemBlock(item: AttemptSourceItemView, data: AttemptSourceData, bindings: ReadonlyMap<string, readonly SiteLineBinding[]>): SourceBlockContent {\n const lines: SourceLine[] = item.lines.map((text, index): SourceLine => {\n const line = index + 1;\n const bound = bindings.get(`${item.sourceItemId}:${line}`) ?? [];\n const assertions = bound.filter((binding) => binding.role !== \"score\").map((binding) => binding.entry);\n const details = bound\n .filter((binding) => binding.line === line && binding.role !== \"score\")\n .map((binding, detailIndex) => assertionNodes(binding.entry, `${item.path}:${line}:${detailIndex}`))\n .flat();\n const points = bound\n .filter((binding) => binding.role === \"score\")\n .reduce((sum, binding) => sum + (binding.entry.score?.state === \"earned\" ? binding.entry.score.earned ?? 0 : 0), 0);\n const hasPoints = bound.some((binding) => binding.role === \"score\" && binding.entry.score !== undefined);\n const tone = lineToneOf(assertions);\n const turnIds = (data.navigation?.rows ?? [])\n .filter((row) => row.source.state === \"mapped\" &&\n row.source.sourceItemId === item.sourceItemId &&\n row.source.sha256 === item.sha256 &&\n row.source.start.line === line)\n .sort((left, right) => (left.sourceOrder ?? Number.MAX_SAFE_INTEGER) - (right.sourceOrder ?? Number.MAX_SAFE_INTEGER) ||\n (left.turnId < right.turnId ? -1 : left.turnId > right.turnId ? 1 : 0))\n .map((row) => row.turnId);\n return {\n number: line,\n text,\n ...(turnIds.length > 0 ? { interaction: \"send\" as const, turnIds } : {}),\n ...(tone !== undefined ? { tone } : {}),\n ...(hasPoints ? { pill: formatPointsSuffix(points) } : {}),\n ...(details.length > 0 ? { details } : {}),\n };\n });\n return { path: item.path, lines };\n}\n/**\n * 闭合 Sources + sourceSites → SourceView Content。spine 是第一个 source item,\n * 其余是 detached;没有 sourceSite 的 attention 断言进 unmapped 区,不丢弃。\n */\nexport function projectedSourceContent(data: AttemptSourceData | null, locator?: AttemptSourceData[\"locator\"]): SourceContent | null {\n if (data === null)\n return null;\n const bindings = siteBindingsOf(data);\n const referenced = new Set(data.sites.map((site) => site.entryId));\n const unmapped: ReportNode[] = data.entries\n .filter((entry) => !referenced.has(entry.entryId))\n .flatMap((entry, index) => assertionNodes(entry, `unmapped:${index}`));\n const spine = sourceItemBlock(data.items[0]!, data, bindings);\n const detached = data.items.slice(1).map((item) => sourceItemBlock(item, data, bindings));\n return {\n spine,\n detached,\n ...(unmapped.length > 0 ? { unmapped } : {}),\n ...(locator !== undefined ? { locator } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport function attemptAssertionsContent(data: AttemptAssertionsData | null): TableContent | null {\n if (data === null || (data.attention.length === 0 && data.passedGroups.length === 0))\n return null;\n const rows: TableContentRow[] = [];\n for (const assertion of data.attention) {\n rows.push({\n key: assertion.entryId,\n cells: {\n name: { kind: \"text\", text: assertion.name },\n severity: { kind: \"text\", text: assertion.severity },\n outcome: { kind: \"verdict\", verdict: assertion.outcome === \"unavailable\" ? \"skipped\" : assertion.outcome },\n detail: assertion.detail.length > 0\n ? { kind: \"text\", text: assertion.detail }\n : { kind: \"notApplicable\" },\n },\n });\n }\n return {\n columns: [\n { key: \"name\", header: localizedMessage(\"attemptAssertions.name\") },\n { key: \"severity\", header: localizedMessage(\"attemptAssertions.severity\") },\n { key: \"outcome\", header: localizedMessage(\"attemptAssertions.outcome\") },\n { key: \"detail\", header: localizedMessage(\"attemptAssertions.detail\") },\n ],\n rows,\n };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nfunction timingTree(intervals: readonly ClosedTimingInterval[]): readonly WaterfallNode[] {\n const children = new Map<string | null, ClosedTimingInterval[]>();\n for (const interval of intervals) {\n const siblings = children.get(interval.parentIntervalId) ?? [];\n siblings.push(interval);\n children.set(interval.parentIntervalId, siblings);\n }\n const build = (parent: string | null): WaterfallNode[] => (children.get(parent) ?? [])\n .sort(compareIntervals)\n .map((interval) => {\n const phase = interval.phase;\n return {\n key: interval.intervalId,\n label: interval.label,\n kind: phase,\n startOffsetMs: interval.startOffsetMs,\n durationMs: interval.durationMs,\n ...(interval.outcome === \"failed\" || interval.outcome === \"interrupted\" ? { failed: true as const } : {}),\n // 主干默认展开:直接看到 eval.run 与 agent.send 内部活动。\n ...(phase === \"eval.run\" || phase === \"agent.send\" ? { open: true as const } : {}),\n ...(build(interval.intervalId).length > 0 ? { children: build(interval.intervalId) } : {}),\n };\n });\n return build(null);\n}\nfunction compareIntervals(left: ClosedTimingInterval, right: ClosedTimingInterval): number {\n return left.startOffsetMs - right.startOffsetMs || compareText(left.intervalId, right.intervalId);\n}\nfunction timingSpan(intervals: readonly ClosedTimingInterval[]): number | null {\n if (intervals.length === 0)\n return null;\n const start = Math.min(...intervals.map((interval) => interval.startOffsetMs));\n const end = Math.max(...intervals.map((interval) => interval.startOffsetMs + interval.durationMs));\n return Math.max(0, end - start);\n}\n/** 执行时间树:root 区间是 phase 主链,children 是采集侧层级。 */\nexport function attemptTimelineContent(data: AttemptTimelineData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\nexport function attemptTraceContent(data: AttemptTraceData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\n/** 工具出入参等结构化值:JSON 化后交原语收口成单行预览(Conversation 的 preview 契约)。 */\nfunction jsonPreview(value: string | undefined): string {\n return value === undefined ? \"\" : value;\n}\nfunction conversationEntryOf(reply: AttemptConversationReply): ConversationEntry {\n switch (reply.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n return { kind: reply.kind, preview: reply.text, failed: reply.kind === \"error\" };\n case \"context\":\n return { kind: \"context\", preview: reply.text };\n case \"tool\": {\n const finished = reply.outputSummary !== undefined;\n const raw = finished ? reply.outputSummary : reply.inputSummary;\n return {\n kind: \"tool\",\n preview: finished\n ? `${reply.name} result`\n : `${reply.name}(${jsonPreview(reply.inputSummary)})`,\n raw,\n callId: reply.callId,\n callPhase: finished ? \"finished\" : \"started\",\n ...(reply.failed === true ? { failed: true } : {}),\n detail: (<ToolEvidence content={{\n phase: finished ? \"finished\" : \"started\",\n tool: reply.name,\n callId: reply.callId,\n inputSummary: reply.inputSummary,\n ...(reply.outputSummary === undefined ? {} : { outputSummary: reply.outputSummary }),\n ...(reply.outcome === undefined ? {} : { outcome: reply.outcome }),\n }}/>),\n };\n }\n case \"subagent\":\n return {\n kind: \"subagent\",\n preview: reply.name,\n ...(reply.failed === true ? { failed: true } : {}),\n ...(reply.summary ? { detail: <Text>{reply.summary}</Text> } : {}),\n };\n case \"skill\":\n return { kind: \"skill\", preview: reply.text ? `${reply.skill}: ${reply.text}` : reply.skill };\n case \"input\":\n return {\n kind: \"input\",\n preview: `${reply.request.state} · ${reply.request.promptSummary}`,\n ...(reply.request.responseSummary !== null\n ? { detail: <Text>{reply.request.responseSummary}</Text> }\n : {}),\n };\n case \"compaction\":\n return { kind: \"compaction\", preview: reply.text || \"context compacted\" };\n }\n}\nfunction turnVerdictOf(outcome: AttemptConversationData[\"rounds\"][number][\"outcome\"]): ConversationTurn[\"verdict\"] {\n switch (outcome) {\n case \"completed\":\n return undefined;\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n return \"skipped\";\n case \"interrupted\":\n return \"errored\";\n }\n}\nexport function attemptConversationContent(data: AttemptConversationData | null): ConversationContent | null {\n if (data === null || data.rounds.length === 0)\n return null;\n const turns: ConversationTurn[] = data.rounds.map((round) => ({\n key: round.turnId,\n label: `Turn ${round.sequence}`,\n ...(round.durationMs === undefined ? {} : { durationMs: round.durationMs }),\n verdict: turnVerdictOf(round.outcome),\n entries: round.replies.map(conversationEntryOf),\n }));\n return { turns, locator: data.locator };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function attemptCommandEvidenceContent(data: AttemptCommandEvidenceData | null): CommandEvidenceContent | null {\n if (data === null || data.commands.length === 0)\n return null;\n return { locator: data.locator, commands: data.commands };\n}\n// ───────────────────────── AttemptDiagnostics / AttemptError ─────────────────────────\nexport const executionEvidenceUnavailableCallouts: readonly CalloutGroup[] = [\n {\n title: \"Execution evidence unavailable\",\n items: [\n {\n level: \"warning\",\n message: \"The events artifact is missing or was not published.\",\n },\n ],\n },\n];\nexport function attemptDiagnosticsContent(data: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return data.groups.map((group) => ({\n title: group.phase,\n items: group.items.map((diagnostic): CalloutItem => ({\n level: diagnostic.level,\n message: `${diagnostic.code}: ${diagnostic.summary}`,\n })),\n }));\n}\nexport function attemptErrorContent(data: AttemptErrorData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return [\n {\n title: data.phase,\n items: [{ level: \"error\", message: `${data.code}: ${data.message}` }],\n },\n ];\n}\nexport function attemptFixPromptContent(data: AttemptFixPromptData | null): CopyBlockContent | null {\n if (data === null)\n return null;\n return { title: { en: \"Fix prompt\", \"zh-CN\": \"修复 prompt\" }, text: data.prompt };\n}\n/** 投影已经是 `DiffFile[]`,这里只把「没有证据」与「没有改动」都收成组件的零输出。 */\nexport function attemptDiffContent(data: AttemptDiffData | null): DiffContent | null {\n if (data === null || data.files.length === 0)\n return null;\n return data.files.map((file) => ({\n ...file,\n windows: file.windows.map((window) => ({\n ...window,\n window: normalizeTurnLabel(window.window),\n })),\n }));\n}\nexport function attemptNoticesContent(error: AttemptErrorData | null, diagnostics: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n const groups = [...(attemptErrorContent(error) ?? []), ...(attemptDiagnosticsContent(diagnostics) ?? [])];\n return groups.length > 0 ? groups : null;\n}\n// ───────────────────────── Conversation 嵌入源码 ─────────────────────────\n/**\n * 只按已验证的 navigation turnId 将 Conversation 轮嵌入源码 send 行;没有\n * mapped row 的轮留在页尾。这里禁止按标签、源码顺序或数组位置补配。\n */\nexport function embedConversationInSource(source: SourceContent | null, conversation: ConversationContent | null): {\n source: SourceContent | null;\n conversation: ConversationContent | null;\n} {\n const turns = conversation?.turns ?? [];\n const turnById = new Map(turns.map((turn) => [turn.key, turn] as const));\n const mappedTurnIds = new Set<string>();\n const cloneLine = (line: SourceLine): SourceLine => {\n const lineTurns = (line.turnIds ?? []).flatMap((turnId) => {\n const turn = turnById.get(turnId);\n if (turn === undefined)\n return [];\n mappedTurnIds.add(turnId);\n return [turn];\n });\n const details = line.details === undefined && lineTurns.length === 0\n ? undefined\n : [\n ...(line.details ?? []),\n ...(lineTurns.length === 0 ? [] : [<TurnTrace data={{ turns: lineTurns }}/>]),\n ];\n return {\n ...line,\n ...(details === undefined ? {} : { details }),\n };\n };\n const cloneBlock = (block: SourceBlockContent): SourceBlockContent => ({\n ...block,\n lines: block.lines.map(cloneLine),\n });\n const embeddedSource = source === null\n ? null\n : {\n ...source,\n spine: cloneBlock(source.spine),\n detached: source.detached.map(cloneBlock),\n };\n const remainingTurns = turns.filter((turn) => !mappedTurnIds.has(turn.key));\n const remainingConversation = conversation === null || remainingTurns.length === 0\n ? null\n : { ...conversation, turns: remainingTurns };\n return { source: embeddedSource, conversation: remainingConversation };\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
@@ -8,6 +8,7 @@ const aggregate_ts_1 = require("../../model/aggregate.cjs");
8
8
  const metrics_ts_1 = require("../../model/metrics.cjs");
9
9
  const conversions_ts_1 = require("../../model/conversions.cjs");
10
10
  const details_ts_1 = require("../../library/details.cjs");
11
+ const compute_ts_1 = require("../attempt-detail/compute.cjs");
11
12
  /** 相对已表达前缀的剩余路径;无前缀时是完整 evalId。 */
12
13
  function relativeEvalLabel(evalIdValue, labelPrefix) {
13
14
  if (!labelPrefix)
@@ -100,9 +101,21 @@ async function evidenceFacts(sample) {
100
101
  const facts = new Map();
101
102
  for (const entry of view.entries) {
102
103
  const locator = entry.attempt.locator;
104
+ const assertions = entry.state === "available"
105
+ ? entry.detail.entries.map(compute_ts_1.assertionEntryViewOf).filter((item) => item !== undefined)
106
+ : [];
107
+ const scoreContributions = assertions
108
+ .map((item) => item.result.score)
109
+ .filter((score) => score.state !== "not-scored");
110
+ const completeScore = scoreContributions.length > 0 &&
111
+ scoreContributions.every((score) => score.state === "earned" && score.earned !== undefined)
112
+ ? scoreContributions.reduce((sum, score) => sum + (score.earned ?? 0), 0)
113
+ : undefined;
103
114
  facts.set(locator, Object.freeze({
104
115
  verdict: entry.state === "available" ? entry.detail.verdict : null,
105
116
  failureSummary: closedFailureSummary(entry),
117
+ evaluationKind: scoreContributions.length > 0 ? "points" : "pass",
118
+ ...(completeScore === undefined ? {} : { totalScore: completeScore }),
106
119
  }));
107
120
  }
108
121
  return facts;
@@ -279,7 +292,11 @@ async function attemptListData(sample, pricing = null) {
279
292
  ]);
280
293
  const selections = selectedSlots(sample);
281
294
  return Object.freeze(selections.map((selection) => {
282
- const fact = facts.get(selection.locator) ?? Object.freeze({ verdict: null, failureSummary: null });
295
+ const fact = facts.get(selection.locator) ?? Object.freeze({
296
+ verdict: null,
297
+ failureSummary: null,
298
+ evaluationKind: "pass",
299
+ });
283
300
  const metric = requireMetrics(metrics.get(metricsKey(selection.experimentId, selection.evalId, selection.locator)), `attempt ${JSON.stringify(selection.locator)}`);
284
301
  const item = Object.freeze({
285
302
  locator: selection.locator,
@@ -288,6 +305,8 @@ async function attemptListData(sample, pricing = null) {
288
305
  attemptOrdinal: selection.attemptOrdinal,
289
306
  verdict: fact.verdict,
290
307
  failureSummary: fact.failureSummary,
308
+ evaluationKind: fact.evaluationKind,
309
+ ...(fact.totalScore === undefined ? {} : { totalScore: fact.totalScore }),
291
310
  passRate: metric.passRate,
292
311
  durationMs: metric.durationMs,
293
312
  ...(metric.costUSD === undefined ? {} : { costUSD: metric.costUSD }),
@@ -300,8 +319,8 @@ async function attemptListData(sample, pricing = null) {
300
319
  }
301
320
  /**
302
321
  * `experimentListData(sample)`:每个 experiment 一项,展开到每道 Eval;初始排序按
303
- * 这份列表自身的题型构成选择主读数——当前 facade 只有通过制读数,恒为
304
- * endToEndPassRate 降序(缺数据沉底,同值按 experimentId 字典序收口)。
322
+ * 这份列表自身的题型构成选择主读数:纯通过制按 endToEndPassRate,含分数制
323
+ * 时按 totalScore 降序(缺数据沉底,同值按 experimentId 字典序收口)。
305
324
  */
306
325
  async function experimentListData(sample, pricing = null) {
307
326
  const snapshot = sample.snapshot;
@@ -367,8 +386,14 @@ async function experimentListData(sample, pricing = null) {
367
386
  const list = attemptsByEval.get(metricsKey(experimentId, evalIdValue)) ?? [];
368
387
  const sorted = [...list].sort((left, right) => left.attemptOrdinal - right.attemptOrdinal || left.locator.localeCompare(right.locator));
369
388
  const metrics = requireMetrics(evalMetrics.get(metricsKey(experimentId, evalIdValue)), `experiment/eval ${JSON.stringify(experimentId)}/${JSON.stringify(evalIdValue)}`);
389
+ const evaluationKind = sorted.some((attempt) => attempt.evaluationKind === "points") ? "points" : "pass";
390
+ const completeScores = sorted.flatMap((attempt) => attempt.totalScore === undefined ? [] : [attempt.totalScore]);
370
391
  evalRows.push(Object.freeze({
371
392
  evalId: evalIdValue,
393
+ evaluationKind,
394
+ ...(completeScores.length === 0
395
+ ? {}
396
+ : { totalScore: completeScores.reduce((sum, score) => sum + score, 0) / completeScores.length }),
372
397
  endToEndPassRate: metrics.passRate,
373
398
  durationMs: metrics.durationMs,
374
399
  ...(metrics.costUSD === undefined ? {} : { costUSD: metrics.costUSD }),
@@ -385,12 +410,19 @@ async function experimentListData(sample, pricing = null) {
385
410
  if (metric !== undefined)
386
411
  groupMetricsForItem.set(prefix, metric);
387
412
  }
413
+ const evaluationKind = evalRows.some((row) => row.evaluationKind === "points")
414
+ ? evalRows.some((row) => row.evaluationKind === "pass") ? "mixed" : "points"
415
+ : "pass";
416
+ const completeEvalScores = evalRows.flatMap((row) => row.totalScore === undefined ? [] : [row.totalScore]);
388
417
  items.push(Object.freeze({
389
418
  experimentId,
390
419
  agent: watermark?.agent ?? null,
391
420
  model: watermark?.model ?? null,
392
421
  flags: watermark?.flags ?? null,
393
- evaluationKind: "pass",
422
+ evaluationKind,
423
+ ...(completeEvalScores.length === 0
424
+ ? {}
425
+ : { totalScore: completeEvalScores.reduce((sum, score) => sum + score, 0) }),
394
426
  endToEndPassRate: experimentMetric.passRate,
395
427
  durationMs: experimentMetric.durationMs,
396
428
  ...(experimentMetric.costUSD === undefined ? {} : { costUSD: experimentMetric.costUSD }),
@@ -401,7 +433,12 @@ async function experimentListData(sample, pricing = null) {
401
433
  href: experimentHref(experimentId),
402
434
  }));
403
435
  }
404
- items.sort(byMetricDescThenId((item) => item.endToEndPassRate.value));
436
+ const composition = items.some((item) => item.evaluationKind !== "pass")
437
+ ? items.some((item) => item.evaluationKind !== "points") ? "mixed" : "points"
438
+ : "pass";
439
+ items.sort(byMetricDescThenId((item) => composition !== "pass"
440
+ ? item.totalScore ?? null
441
+ : item.endToEndPassRate.value));
405
442
  return Object.freeze(items);
406
443
  }
407
444
  function evalIdsUnder(node) {
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","sourceRoot":"","sources":["compute.ts"],"names":[],"mappings":"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","sourcesContent":["// 实体列表计算函数(*Data):固定 Sample → 闭合组件数据。\n// ExperimentTable / AttemptList / FailureList 的 *Data 都住在这里。\n//\n// 共同约定见 docs/feature/reports/architecture.md 与 calculations.md:\n// - 第一参只收 Report Sample;issues 与 Evidence 留在 Analysis-owned MetricValue 里;\n// - 指标一律来自 `aggregate()` facade,判定来自公开 attempt-evidence DomainView,\n// 身份与覆盖事实来自 closed SampleSnapshot——这里不实现任何统计算法;\n// - null ≠ 0:缺数据不编数,覆盖率经 samples/total 如实暴露;\n// - 详情 href 一律经 `libraryDetailRoute()` + `attemptDetailTarget()` /\n// `experimentDetailTarget()` 建立,不自行编码 locator / experiment id 路径。\nimport type { AttemptEvidenceDomainView, CostMetricValue, JsonValue, MetricValue, PricingProfile, Sample, } from \"../../../analysis/index.ts\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport type { EvalId, ExperimentId } from \"../../../analysis/index.ts\";\nimport type { Verdict } from \"../../../shared/types.ts\";\nimport { aggregate, attempt, evalId, experiment, type AggregationSubject, } from \"../../model/aggregate.ts\";\nimport { costUSD, durationMs, passRate, tokens } from \"../../model/metrics.ts\";\nimport { toAttemptEvidence } from \"../../model/conversions.ts\";\nimport { attemptDetailTarget, experimentDetailTarget, libraryDetailRoute, } from \"../../library/details.ts\";\ntype UtcMillis = Sample[\"snapshot\"][\"runs\"][number][\"startedAt\"];\ntype ClosedAttemptEvidenceEntry = AttemptEvidenceDomainView[\"entries\"][number];\n/**\n * 当前 Analysis 只发布通过制读数(没有总分 Measure),题型构成恒为\n * \"pass\"。未来 Analysis 发布计分制 Measure 时,这里与 content.ts 的列集一起按\n * 同一构成判据扩展。\n */\nexport type EvaluationKindComposition = \"pass\" | \"points\" | \"mixed\";\n/** 一个层级共用的四枚 Analysis-owned 读数。 */\nexport interface ExperimentMetrics {\n readonly passRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n /** Present only when the owning Report declares a PricingProfile. */\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n}\n/** 一次 attempt 的闭合行。 */\nexport interface AttemptListItem {\n readonly locator: AttemptLocator;\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n /** 来自公开 attempt-evidence DomainView;证据读取失败时为 null(不伪造判定)。 */\n readonly verdict: Verdict | null;\n /**\n * 闭合失败摘要:errored 取 outcome 词,failed 取首条 mismatched 断言条目的\n * display 标签;closed 数据没有可读摘录时为 null(渲染成 \"—\",不发明文案)。\n */\n readonly failureSummary: string | null;\n readonly passRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n /** Present only when the owning Report declares a PricingProfile. */\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n /** 所属 selected Run 的 startedAt(attempt 级起点不进 closed snapshot)。 */\n readonly startedAt: UtcMillis | null;\n /** 详情 href,经 libraryDetailRoute(attemptDetailTarget(locator)) 建立。 */\n readonly href: string;\n}\n/** experiment 层级表里一道 Eval 的闭合行;attempts 是它的可见子行。 */\nexport interface ExperimentListEvalRow {\n readonly evalId: EvalId;\n readonly endToEndPassRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n readonly attempts: readonly AttemptListItem[];\n}\n/** 一个 experiment 的闭合行。 */\nexport interface ExperimentListItem {\n readonly experimentId: ExperimentId;\n /** 来自实验水位 Run 的 closed context;Run context 缺席时如实为 null。 */\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n /** 占位默认值,见 EvaluationKindComposition 注释。 */\n readonly evaluationKind: EvaluationKindComposition;\n readonly endToEndPassRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n /** 当前口径下没有 attempt 的题(active slot 为 not-recorded / core-invalid)。 */\n readonly missingEvalIds: readonly EvalId[];\n /**\n * 路径段组行的 Analysis-owned 读数,key 是完整组前缀(如 \"downshift/basic\")。\n * 组行不手写聚合:每个组前缀是 facade GroupFunction 的一个坐标,\n * 分母 / 状态 / Evidence 全部留在 Analysis。\n */\n readonly groupMetrics: ReadonlyMap<string, ExperimentMetrics>;\n readonly evalRows: readonly ExperimentListEvalRow[];\n /** 详情 href,经 libraryDetailRoute(experimentDetailTarget(id)) 建立。 */\n readonly href: string;\n}\n/** Eval 路径层级布局:叶子 / 路径段组。 */\nexport type EvalLayoutNode = {\n readonly kind: \"leaf\";\n readonly evalId: EvalId;\n} | {\n readonly kind: \"group\";\n readonly segment: string;\n readonly prefix: string;\n readonly children: readonly EvalLayoutNode[];\n};\n/** 相对已表达前缀的剩余路径;无前缀时是完整 evalId。 */\nexport function relativeEvalLabel(evalIdValue: EvalId, labelPrefix: string): string {\n if (!labelPrefix)\n return evalIdValue;\n const prefix = `${labelPrefix}/`;\n return evalIdValue.startsWith(prefix) ? evalIdValue.slice(prefix.length) : evalIdValue;\n}\nfunction joinEvalPath(prefix: string, segment: string): string {\n return prefix ? `${prefix}/${segment}` : segment;\n}\n/**\n * Eval 路径段 → 层级布局。两条收起条件在每一层兄弟之间各自判定\n * (docs/feature/reports/library.md「身份格与行数」):\n * 唯一组且无叶时剥壳前进,不插组行;组全为单成员或本层只有叶时全部放平。\n * 纯字符串投影,不读任何指标。\n */\nexport function experimentEvalLayout(evalIdValues: readonly EvalId[]): readonly EvalLayoutNode[] {\n return layoutLevel(evalIdValues, \"\");\n}\nfunction layoutLevel(members: readonly EvalId[], dirPrefix: string): readonly EvalLayoutNode[] {\n if (members.length === 0)\n return [];\n const leaves: EvalId[] = [];\n const groups = new Map<string, EvalId[]>();\n for (const member of members) {\n const remaining = relativeEvalLabel(member, dirPrefix).split(\"/\").filter(Boolean);\n if (remaining.length <= 1) {\n leaves.push(member);\n continue;\n }\n const head = remaining[0]!;\n const list = groups.get(head);\n if (list)\n list.push(member);\n else\n groups.set(head, [member]);\n }\n const collapse = groups.size === 0 ||\n (groups.size === 1 && leaves.length === 0) ||\n [...groups.values()].every((group) => group.length === 1);\n if (collapse) {\n if (groups.size === 1 && leaves.length === 0) {\n const head = [...groups.keys()][0]!;\n return layoutLevel(members, joinEvalPath(dirPrefix, head));\n }\n return [...leaves]\n .sort((left, right) => left.localeCompare(right))\n .map((member): EvalLayoutNode => ({ kind: \"leaf\", evalId: member }));\n }\n const groupNodes: EvalLayoutNode[] = [...groups.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([segment, groupMembers]) => ({\n kind: \"group\" as const,\n segment,\n prefix: joinEvalPath(dirPrefix, segment),\n children: layoutLevel(groupMembers, joinEvalPath(dirPrefix, segment)),\n }));\n const leafNodes: EvalLayoutNode[] = [...leaves]\n .sort((left, right) => left.localeCompare(right))\n .map((member): EvalLayoutNode => ({ kind: \"leaf\", evalId: member }));\n return [...groupNodes, ...leafNodes];\n}\ninterface AttemptFact {\n readonly verdict: Verdict | null;\n readonly failureSummary: string | null;\n}\ninterface SlotSelection {\n readonly locator: AttemptLocator;\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n readonly startedAt: UtcMillis | null;\n}\n/** 一次 attempt 的闭合失败摘要(只读公开 DomainView,不重算断言展示)。 */\nfunction closedFailureSummary(entry: ClosedAttemptEvidenceEntry | undefined): string | null {\n if (entry === undefined || entry.state !== \"available\")\n return null;\n const detail = entry.detail;\n if (detail.verdict === \"errored\")\n return detail.outcome;\n if (detail.verdict !== \"failed\")\n return null;\n for (const item of detail.entries) {\n const result = item.result;\n if (typeof result !== \"object\" || result === null || Array.isArray(result))\n continue;\n if ((result as Readonly<Record<string, unknown>>).state !== \"mismatched\")\n continue;\n const display = item.display;\n if (typeof display === \"object\" && display !== null && !Array.isArray(display)) {\n const label = (display as Readonly<Record<string, unknown>>).label;\n if (typeof label === \"string\" && label.length > 0)\n return label;\n }\n return \"assertion\";\n }\n return null;\n}\nasync function evidenceFacts(sample: Sample): Promise<ReadonlyMap<AttemptLocator, AttemptFact>> {\n const view = await toAttemptEvidence(sample);\n const facts = new Map<AttemptLocator, AttemptFact>();\n for (const entry of view.entries) {\n const locator = entry.attempt.locator;\n facts.set(locator, Object.freeze({\n verdict: entry.state === \"available\" ? (entry.detail.verdict as Verdict) : null,\n failureSummary: closedFailureSummary(entry),\n }));\n }\n return facts;\n}\nasync function attemptMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment, evalId, attempt },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n if (typeof row.attempt !== \"string\")\n continue;\n byKey.set(metricsKey(row.experiment as string, row.evalId as string, row.attempt), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nfunction metricsKey(experimentId: string, evalIdValue: string, locator?: string): string {\n return locator === undefined\n ? `${experimentId}\\u0000${evalIdValue}`\n : `${experimentId}\\u0000${evalIdValue}\\u0000${locator}`;\n}\n/**\n * Included Analysis subjects always have an aggregate row, even when every\n * measure in that row is empty. Treat an omitted row as a broken Analysis\n * contract instead of manufacturing a Report-owned MetricValue.\n */\nfunction requireMetrics(metrics: ExperimentMetrics | undefined, subject: string): ExperimentMetrics {\n if (metrics === undefined) {\n throw new Error(`Analysis aggregate omitted the required ${subject} row.`);\n }\n return metrics;\n}\n/** 每个 experiment 每道 Eval 一行,按 evalId 升序返回(不重排 attempt 语义)。 */\nasync function evalMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment, evalId },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n byKey.set(metricsKey(row.experiment as string, row.evalId as string), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nasync function experimentMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<ExperimentId, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byId = new Map<ExperimentId, ExperimentMetrics>();\n for (const row of rows) {\n byId.set(row.experiment as ExperimentId, Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byId;\n}\n/**\n * 组行读数的 facade 聚合:每个路径段组前缀是一个 GroupFunction 坐标,\n * 分母 / 状态 / Evidence 全部由 Analysis 按 logical slots 计算。\n */\nasync function groupMetricRows(sample: Sample, prefixByExperiment: ReadonlyMap<ExperimentId, ReadonlyMap<EvalId, string>>, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const groupPrefix = (subject: AggregationSubject): string => prefixByExperiment.get(subject.experimentId)?.get(subject.evalId) ?? \"\";\n const rows = await aggregate(sample, {\n by: { experiment, prefix: groupPrefix },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n const prefix = row.prefix;\n if (typeof prefix !== \"string\" || prefix.length === 0)\n continue;\n byKey.set(metricsKey(row.experiment as string, prefix), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nfunction attemptHref(locator: AttemptLocator): string {\n return libraryDetailRoute(attemptDetailTarget(locator));\n}\nfunction experimentHref(experimentId: ExperimentId): string {\n return libraryDetailRoute(experimentDetailTarget(experimentId));\n}\n/** SampleSnapshot → 每个 experiment 的身份水位(最新 startedAt 的 Run)。 */\nfunction watermarksByExperiment(sample: Sample): ReadonlyMap<ExperimentId, {\n readonly startedAt: UtcMillis;\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n}> {\n const runsByExperiment = new Map<ExperimentId, typeof sample.snapshot.runs[number][]>();\n for (const run of sample.snapshot.runs) {\n const list = runsByExperiment.get(run.experimentId);\n if (list)\n list.push(run);\n else\n runsByExperiment.set(run.experimentId, [run]);\n }\n const byExperiment = new Map<ExperimentId, {\n readonly startedAt: UtcMillis;\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n }>();\n for (const [experimentId, runs] of runsByExperiment) {\n const newest = runs.reduce((best, run) => run.startedAt > best.startedAt ? run : best, runs[0]!);\n const context = newest.context;\n byExperiment.set(experimentId, Object.freeze({\n startedAt: newest.startedAt,\n agent: context?.execution.agentId ?? null,\n model: context?.execution.model ?? null,\n flags: context ? Object.freeze({ ...context.execution.flags }) : null,\n }));\n }\n return byExperiment;\n}\nfunction runStartedAtByRunId(sample: Sample): ReadonlyMap<string, UtcMillis> {\n const byRunId = new Map<string, UtcMillis>();\n for (const run of sample.snapshot.runs)\n byRunId.set(run.runId, run.startedAt);\n return byRunId;\n}\n/**\n * 按 locator 去重的 included slot 选择:同一 locator 出现多份(跨 Run 携带)时\n * 取 startedAt 最新的一份作展示行。Member 的 action / relation 是 Run provenance,\n * 不在质量列表里折成额外的时效状态。\n */\nfunction selectedSlots(sample: Sample): readonly SlotSelection[] {\n const runStartedAt = runStartedAtByRunId(sample);\n const byLocator = new Map<AttemptLocator, SlotSelection>();\n for (const slot of sample.snapshot.slots) {\n if (slot.state !== \"included\")\n continue;\n const locator = slot.attempt.locator;\n const startedAt = runStartedAt.get(slot.runId) ?? null;\n const existing = byLocator.get(locator);\n if (existing === undefined ||\n (startedAt !== null && (existing.startedAt === null || startedAt > existing.startedAt))) {\n byLocator.set(locator, Object.freeze({\n locator,\n experimentId: slot.experimentId,\n evalId: slot.evalId,\n attemptOrdinal: slot.attemptOrdinal,\n startedAt,\n }));\n }\n }\n return Object.freeze([...byLocator.values()]);\n}\n/**\n * `attemptListData(sample)`:每个 included attempt 一项,顺序取自 Sample 展平顺序\n * (按 locator 去重后保持首次出现序,不重排)。\n */\nexport async function attemptListData(sample: Sample, pricing: PricingProfile | null = null): Promise<readonly AttemptListItem[]> {\n const [facts, metrics] = await Promise.all([\n evidenceFacts(sample),\n attemptMetricRows(sample, pricing),\n ]);\n const selections = selectedSlots(sample);\n return Object.freeze(selections.map((selection): AttemptListItem => {\n const fact = facts.get(selection.locator) ?? Object.freeze({ verdict: null, failureSummary: null });\n const metric = requireMetrics(metrics.get(metricsKey(selection.experimentId, selection.evalId, selection.locator)), `attempt ${JSON.stringify(selection.locator)}`);\n const item: AttemptListItem = Object.freeze({\n locator: selection.locator,\n experimentId: selection.experimentId,\n evalId: selection.evalId,\n attemptOrdinal: selection.attemptOrdinal,\n verdict: fact.verdict,\n failureSummary: fact.failureSummary,\n passRate: metric.passRate,\n durationMs: metric.durationMs,\n ...(metric.costUSD === undefined ? {} : { costUSD: metric.costUSD }),\n tokens: metric.tokens,\n startedAt: selection.startedAt,\n href: attemptHref(selection.locator),\n });\n return item;\n }));\n}\n/**\n * `experimentListData(sample)`:每个 experiment 一项,展开到每道 Eval;初始排序按\n * 这份列表自身的题型构成选择主读数——当前 facade 只有通过制读数,恒为\n * endToEndPassRate 降序(缺数据沉底,同值按 experimentId 字典序收口)。\n */\nexport async function experimentListData(sample: Sample, pricing: PricingProfile | null = null): Promise<readonly ExperimentListItem[]> {\n const snapshot = sample.snapshot;\n const attempts = await attemptListData(sample, pricing);\n const [experimentMetrics, evalMetrics] = await Promise.all([\n experimentMetricRows(sample, pricing),\n evalMetricRows(sample, pricing),\n ]);\n const attemptsByEval = new Map<string, AttemptListItem[]>();\n for (const item of attempts) {\n const key = metricsKey(item.experimentId, item.evalId);\n const list = attemptsByEval.get(key);\n if (list)\n list.push(item);\n else\n attemptsByEval.set(key, [item]);\n }\n const activeSlots = snapshot.slots.filter((slot) => slot.state !== \"excluded\");\n const experiments = new Map<ExperimentId, {\n evalIds: Set<EvalId>;\n included: Set<EvalId>;\n }>();\n for (const slot of activeSlots) {\n const entry = experiments.get(slot.experimentId);\n if (entry === undefined) {\n experiments.set(slot.experimentId, {\n evalIds: new Set([slot.evalId]),\n included: slot.state === \"included\" ? new Set([slot.evalId]) : new Set(),\n });\n continue;\n }\n entry.evalIds.add(slot.evalId);\n if (slot.state === \"included\")\n entry.included.add(slot.evalId);\n }\n // 组前缀布局(纯字符串)与 facade GroupFunction 坐标先于指标聚合固定。\n const prefixByExperiment = new Map<ExperimentId, ReadonlyMap<EvalId, string>>();\n for (const [experimentId, entry] of experiments) {\n const layout = experimentEvalLayout([...entry.evalIds]);\n const prefixFor = new Map<EvalId, string>();\n const walk = (nodes: readonly EvalLayoutNode[]): void => {\n for (const node of nodes) {\n if (node.kind === \"leaf\")\n continue;\n for (const evalIdValue of evalIdsUnder(node))\n prefixFor.set(evalIdValue, node.prefix);\n walk(node.children);\n }\n };\n walk(layout);\n prefixByExperiment.set(experimentId, prefixFor);\n }\n const hasGroups = [...prefixByExperiment.values()].some((prefixFor) => prefixFor.size > 0);\n const groupMetrics = hasGroups\n ? await groupMetricRows(sample, prefixByExperiment, pricing)\n : new Map<string, ExperimentMetrics>();\n const watermarks = watermarksByExperiment(sample);\n const items: ExperimentListItem[] = [];\n for (const [experimentId, entry] of experiments) {\n const evalIds = [...entry.evalIds];\n const missing = [...evalIds].filter((evalIdValue) => !entry.included.has(evalIdValue));\n const evalRows: ExperimentListEvalRow[] = [];\n for (const evalIdValue of evalIds) {\n if (!entry.included.has(evalIdValue))\n continue;\n const list = attemptsByEval.get(metricsKey(experimentId, evalIdValue)) ?? [];\n const sorted = [...list].sort((left, right) => left.attemptOrdinal - right.attemptOrdinal || left.locator.localeCompare(right.locator));\n const metrics = requireMetrics(evalMetrics.get(metricsKey(experimentId, evalIdValue)), `experiment/eval ${JSON.stringify(experimentId)}/${JSON.stringify(evalIdValue)}`);\n evalRows.push(Object.freeze({\n evalId: evalIdValue,\n endToEndPassRate: metrics.passRate,\n durationMs: metrics.durationMs,\n ...(metrics.costUSD === undefined ? {} : { costUSD: metrics.costUSD }),\n tokens: metrics.tokens,\n attempts: Object.freeze(sorted),\n }));\n }\n const watermark = watermarks.get(experimentId);\n const experimentMetric = requireMetrics(experimentMetrics.get(experimentId), `experiment ${JSON.stringify(experimentId)}`);\n const groupMetricsForItem = new Map<string, ExperimentMetrics>();\n const prefixes = [...new Set(prefixByExperiment.get(experimentId)?.values() ?? [])];\n for (const prefix of prefixes) {\n const metric = groupMetrics.get(metricsKey(experimentId, prefix));\n if (metric !== undefined)\n groupMetricsForItem.set(prefix, metric);\n }\n items.push(Object.freeze({\n experimentId,\n agent: watermark?.agent ?? null,\n model: watermark?.model ?? null,\n flags: watermark?.flags ?? null,\n evaluationKind: \"pass\",\n endToEndPassRate: experimentMetric.passRate,\n durationMs: experimentMetric.durationMs,\n ...(experimentMetric.costUSD === undefined ? {} : { costUSD: experimentMetric.costUSD }),\n tokens: experimentMetric.tokens,\n missingEvalIds: Object.freeze(missing.sort((left, right) => left.localeCompare(right))),\n groupMetrics: groupMetricsForItem,\n evalRows: Object.freeze(evalRows),\n href: experimentHref(experimentId),\n }));\n }\n items.sort(byMetricDescThenId((item) => item.endToEndPassRate.value));\n return Object.freeze(items);\n}\nfunction evalIdsUnder(node: EvalLayoutNode): readonly EvalId[] {\n if (node.kind === \"leaf\")\n return [node.evalId];\n return node.children.flatMap(evalIdsUnder);\n}\nfunction byMetricDescThenId(valueOf: (item: ExperimentListItem) => number | null): (left: ExperimentListItem, right: ExperimentListItem) => number {\n return (left, right) => {\n const leftValue = valueOf(left);\n const rightValue = valueOf(right);\n if (leftValue === null && rightValue === null) {\n return left.experimentId.localeCompare(right.experimentId);\n }\n if (leftValue === null)\n return 1;\n if (rightValue === null)\n return -1;\n return rightValue - leftValue || left.experimentId.localeCompare(right.experimentId);\n };\n}\n"]}
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["compute.ts"],"names":[],"mappings":"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","sourcesContent":["// 实体列表计算函数(*Data):固定 Sample → 闭合组件数据。\n// ExperimentTable / AttemptList / FailureList 的 *Data 都住在这里。\n//\n// 共同约定见 docs/feature/reports/architecture.md 与 calculations.md:\n// - 第一参只收 Report Sample;issues 与 Evidence 留在 Analysis-owned MetricValue 里;\n// - 指标一律来自 `aggregate()` facade,判定来自公开 attempt-evidence DomainView,\n// 身份与覆盖事实来自 closed SampleSnapshot——这里不实现任何统计算法;\n// - null ≠ 0:缺数据不编数,覆盖率经 samples/total 如实暴露;\n// - 详情 href 一律经 `libraryDetailRoute()` + `attemptDetailTarget()` /\n// `experimentDetailTarget()` 建立,不自行编码 locator / experiment id 路径。\nimport type { AttemptEvidenceDomainView, CostMetricValue, JsonValue, MetricValue, PricingProfile, Sample, } from \"../../../analysis/index.ts\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport type { EvalId, ExperimentId } from \"../../../analysis/index.ts\";\nimport type { Verdict } from \"../../../shared/types.ts\";\nimport { aggregate, attempt, evalId, experiment, type AggregationSubject, } from \"../../model/aggregate.ts\";\nimport { costUSD, durationMs, passRate, tokens } from \"../../model/metrics.ts\";\nimport { toAttemptEvidence } from \"../../model/conversions.ts\";\nimport { attemptDetailTarget, experimentDetailTarget, libraryDetailRoute, } from \"../../library/details.ts\";\nimport { assertionEntryViewOf } from \"../attempt-detail/compute.ts\";\ntype UtcMillis = Sample[\"snapshot\"][\"runs\"][number][\"startedAt\"];\ntype ClosedAttemptEvidenceEntry = AttemptEvidenceDomainView[\"entries\"][number];\nexport type EvaluationKindComposition = \"pass\" | \"points\" | \"mixed\";\n/** 一个层级共用的四枚 Analysis-owned 读数。 */\nexport interface ExperimentMetrics {\n readonly passRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n /** Present only when the owning Report declares a PricingProfile. */\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n}\n/** 一次 attempt 的闭合行。 */\nexport interface AttemptListItem {\n readonly locator: AttemptLocator;\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n /** 来自公开 attempt-evidence DomainView;证据读取失败时为 null(不伪造判定)。 */\n readonly verdict: Verdict | null;\n /**\n * 闭合失败摘要:errored 取 outcome 词,failed 取首条 mismatched 断言条目的\n * display 标签;closed 数据没有可读摘录时为 null(渲染成 \"—\",不发明文案)。\n */\n readonly failureSummary: string | null;\n readonly evaluationKind: \"pass\" | \"points\";\n /** Complete earned score for this Attempt; absent for pass or incomplete score evidence. */\n readonly totalScore?: number;\n readonly passRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n /** Present only when the owning Report declares a PricingProfile. */\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n /** 所属 selected Run 的 startedAt(attempt 级起点不进 closed snapshot)。 */\n readonly startedAt: UtcMillis | null;\n /** 详情 href,经 libraryDetailRoute(attemptDetailTarget(locator)) 建立。 */\n readonly href: string;\n}\n/** experiment 层级表里一道 Eval 的闭合行;attempts 是它的可见子行。 */\nexport interface ExperimentListEvalRow {\n readonly evalId: EvalId;\n readonly evaluationKind: \"pass\" | \"points\";\n /** Mean of complete Attempt scores for this Eval. */\n readonly totalScore?: number;\n readonly endToEndPassRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n readonly attempts: readonly AttemptListItem[];\n}\n/** 一个 experiment 的闭合行。 */\nexport interface ExperimentListItem {\n readonly experimentId: ExperimentId;\n /** 来自实验水位 Run 的 closed context;Run context 缺席时如实为 null。 */\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n readonly evaluationKind: EvaluationKindComposition;\n /** Sum of the visible per-Eval score cells; absent when no complete Score Eval exists. */\n readonly totalScore?: number;\n readonly endToEndPassRate: MetricValue<number>;\n readonly durationMs: MetricValue<number>;\n readonly costUSD?: CostMetricValue;\n readonly tokens: MetricValue<number>;\n /** 当前口径下没有 attempt 的题(active slot 为 not-recorded / core-invalid)。 */\n readonly missingEvalIds: readonly EvalId[];\n /**\n * 路径段组行的 Analysis-owned 读数,key 是完整组前缀(如 \"downshift/basic\")。\n * 组行不手写聚合:每个组前缀是 facade GroupFunction 的一个坐标,\n * 分母 / 状态 / Evidence 全部留在 Analysis。\n */\n readonly groupMetrics: ReadonlyMap<string, ExperimentMetrics>;\n readonly evalRows: readonly ExperimentListEvalRow[];\n /** 详情 href,经 libraryDetailRoute(experimentDetailTarget(id)) 建立。 */\n readonly href: string;\n}\n/** Eval 路径层级布局:叶子 / 路径段组。 */\nexport type EvalLayoutNode = {\n readonly kind: \"leaf\";\n readonly evalId: EvalId;\n} | {\n readonly kind: \"group\";\n readonly segment: string;\n readonly prefix: string;\n readonly children: readonly EvalLayoutNode[];\n};\n/** 相对已表达前缀的剩余路径;无前缀时是完整 evalId。 */\nexport function relativeEvalLabel(evalIdValue: EvalId, labelPrefix: string): string {\n if (!labelPrefix)\n return evalIdValue;\n const prefix = `${labelPrefix}/`;\n return evalIdValue.startsWith(prefix) ? evalIdValue.slice(prefix.length) : evalIdValue;\n}\nfunction joinEvalPath(prefix: string, segment: string): string {\n return prefix ? `${prefix}/${segment}` : segment;\n}\n/**\n * Eval 路径段 → 层级布局。两条收起条件在每一层兄弟之间各自判定\n * (docs/feature/reports/library.md「身份格与行数」):\n * 唯一组且无叶时剥壳前进,不插组行;组全为单成员或本层只有叶时全部放平。\n * 纯字符串投影,不读任何指标。\n */\nexport function experimentEvalLayout(evalIdValues: readonly EvalId[]): readonly EvalLayoutNode[] {\n return layoutLevel(evalIdValues, \"\");\n}\nfunction layoutLevel(members: readonly EvalId[], dirPrefix: string): readonly EvalLayoutNode[] {\n if (members.length === 0)\n return [];\n const leaves: EvalId[] = [];\n const groups = new Map<string, EvalId[]>();\n for (const member of members) {\n const remaining = relativeEvalLabel(member, dirPrefix).split(\"/\").filter(Boolean);\n if (remaining.length <= 1) {\n leaves.push(member);\n continue;\n }\n const head = remaining[0]!;\n const list = groups.get(head);\n if (list)\n list.push(member);\n else\n groups.set(head, [member]);\n }\n const collapse = groups.size === 0 ||\n (groups.size === 1 && leaves.length === 0) ||\n [...groups.values()].every((group) => group.length === 1);\n if (collapse) {\n if (groups.size === 1 && leaves.length === 0) {\n const head = [...groups.keys()][0]!;\n return layoutLevel(members, joinEvalPath(dirPrefix, head));\n }\n return [...leaves]\n .sort((left, right) => left.localeCompare(right))\n .map((member): EvalLayoutNode => ({ kind: \"leaf\", evalId: member }));\n }\n const groupNodes: EvalLayoutNode[] = [...groups.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([segment, groupMembers]) => ({\n kind: \"group\" as const,\n segment,\n prefix: joinEvalPath(dirPrefix, segment),\n children: layoutLevel(groupMembers, joinEvalPath(dirPrefix, segment)),\n }));\n const leafNodes: EvalLayoutNode[] = [...leaves]\n .sort((left, right) => left.localeCompare(right))\n .map((member): EvalLayoutNode => ({ kind: \"leaf\", evalId: member }));\n return [...groupNodes, ...leafNodes];\n}\ninterface AttemptFact {\n readonly verdict: Verdict | null;\n readonly failureSummary: string | null;\n readonly evaluationKind: \"pass\" | \"points\";\n readonly totalScore?: number;\n}\ninterface SlotSelection {\n readonly locator: AttemptLocator;\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n readonly startedAt: UtcMillis | null;\n}\n/** 一次 attempt 的闭合失败摘要(只读公开 DomainView,不重算断言展示)。 */\nfunction closedFailureSummary(entry: ClosedAttemptEvidenceEntry | undefined): string | null {\n if (entry === undefined || entry.state !== \"available\")\n return null;\n const detail = entry.detail;\n if (detail.verdict === \"errored\")\n return detail.outcome;\n if (detail.verdict !== \"failed\")\n return null;\n for (const item of detail.entries) {\n const result = item.result;\n if (typeof result !== \"object\" || result === null || Array.isArray(result))\n continue;\n if ((result as Readonly<Record<string, unknown>>).state !== \"mismatched\")\n continue;\n const display = item.display;\n if (typeof display === \"object\" && display !== null && !Array.isArray(display)) {\n const label = (display as Readonly<Record<string, unknown>>).label;\n if (typeof label === \"string\" && label.length > 0)\n return label;\n }\n return \"assertion\";\n }\n return null;\n}\nasync function evidenceFacts(sample: Sample): Promise<ReadonlyMap<AttemptLocator, AttemptFact>> {\n const view = await toAttemptEvidence(sample);\n const facts = new Map<AttemptLocator, AttemptFact>();\n for (const entry of view.entries) {\n const locator = entry.attempt.locator;\n const assertions = entry.state === \"available\"\n ? entry.detail.entries.map(assertionEntryViewOf).filter((item) => item !== undefined)\n : [];\n const scoreContributions = assertions\n .map((item) => item.result.score)\n .filter((score) => score.state !== \"not-scored\");\n const completeScore = scoreContributions.length > 0 &&\n scoreContributions.every((score) => score.state === \"earned\" && score.earned !== undefined)\n ? scoreContributions.reduce((sum, score) => sum + (score.earned ?? 0), 0)\n : undefined;\n facts.set(locator, Object.freeze({\n verdict: entry.state === \"available\" ? (entry.detail.verdict as Verdict) : null,\n failureSummary: closedFailureSummary(entry),\n evaluationKind: scoreContributions.length > 0 ? \"points\" : \"pass\",\n ...(completeScore === undefined ? {} : { totalScore: completeScore }),\n }));\n }\n return facts;\n}\nasync function attemptMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment, evalId, attempt },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n if (typeof row.attempt !== \"string\")\n continue;\n byKey.set(metricsKey(row.experiment as string, row.evalId as string, row.attempt), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nfunction metricsKey(experimentId: string, evalIdValue: string, locator?: string): string {\n return locator === undefined\n ? `${experimentId}\\u0000${evalIdValue}`\n : `${experimentId}\\u0000${evalIdValue}\\u0000${locator}`;\n}\n/**\n * Included Analysis subjects always have an aggregate row, even when every\n * measure in that row is empty. Treat an omitted row as a broken Analysis\n * contract instead of manufacturing a Report-owned MetricValue.\n */\nfunction requireMetrics(metrics: ExperimentMetrics | undefined, subject: string): ExperimentMetrics {\n if (metrics === undefined) {\n throw new Error(`Analysis aggregate omitted the required ${subject} row.`);\n }\n return metrics;\n}\n/** 每个 experiment 每道 Eval 一行,按 evalId 升序返回(不重排 attempt 语义)。 */\nasync function evalMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment, evalId },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n byKey.set(metricsKey(row.experiment as string, row.evalId as string), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nasync function experimentMetricRows(sample: Sample, pricing: PricingProfile | null): Promise<ReadonlyMap<ExperimentId, ExperimentMetrics>> {\n const rows = await aggregate(sample, {\n by: { experiment },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byId = new Map<ExperimentId, ExperimentMetrics>();\n for (const row of rows) {\n byId.set(row.experiment as ExperimentId, Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byId;\n}\n/**\n * 组行读数的 facade 聚合:每个路径段组前缀是一个 GroupFunction 坐标,\n * 分母 / 状态 / Evidence 全部由 Analysis 按 logical slots 计算。\n */\nasync function groupMetricRows(sample: Sample, prefixByExperiment: ReadonlyMap<ExperimentId, ReadonlyMap<EvalId, string>>, pricing: PricingProfile | null): Promise<ReadonlyMap<string, ExperimentMetrics>> {\n const groupPrefix = (subject: AggregationSubject): string => prefixByExperiment.get(subject.experimentId)?.get(subject.evalId) ?? \"\";\n const rows = await aggregate(sample, {\n by: { experiment, prefix: groupPrefix },\n values: pricing === null\n ? { passRate, durationMs, tokens }\n : { passRate, durationMs, costUSD: costUSD(pricing), tokens },\n });\n const byKey = new Map<string, ExperimentMetrics>();\n for (const row of rows) {\n const prefix = row.prefix;\n if (typeof prefix !== \"string\" || prefix.length === 0)\n continue;\n byKey.set(metricsKey(row.experiment as string, prefix), Object.freeze({\n passRate: row.passRate,\n durationMs: row.durationMs,\n ...(pricing === null ? {} : { costUSD: (row as unknown as {\n readonly costUSD: CostMetricValue;\n }).costUSD }),\n tokens: row.tokens,\n }));\n }\n return byKey;\n}\nfunction attemptHref(locator: AttemptLocator): string {\n return libraryDetailRoute(attemptDetailTarget(locator));\n}\nfunction experimentHref(experimentId: ExperimentId): string {\n return libraryDetailRoute(experimentDetailTarget(experimentId));\n}\n/** SampleSnapshot → 每个 experiment 的身份水位(最新 startedAt 的 Run)。 */\nfunction watermarksByExperiment(sample: Sample): ReadonlyMap<ExperimentId, {\n readonly startedAt: UtcMillis;\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n}> {\n const runsByExperiment = new Map<ExperimentId, typeof sample.snapshot.runs[number][]>();\n for (const run of sample.snapshot.runs) {\n const list = runsByExperiment.get(run.experimentId);\n if (list)\n list.push(run);\n else\n runsByExperiment.set(run.experimentId, [run]);\n }\n const byExperiment = new Map<ExperimentId, {\n readonly startedAt: UtcMillis;\n readonly agent: string | null;\n readonly model: string | null;\n readonly flags: Readonly<Record<string, JsonValue>> | null;\n }>();\n for (const [experimentId, runs] of runsByExperiment) {\n const newest = runs.reduce((best, run) => run.startedAt > best.startedAt ? run : best, runs[0]!);\n const context = newest.context;\n byExperiment.set(experimentId, Object.freeze({\n startedAt: newest.startedAt,\n agent: context?.execution.agentId ?? null,\n model: context?.execution.model ?? null,\n flags: context ? Object.freeze({ ...context.execution.flags }) : null,\n }));\n }\n return byExperiment;\n}\nfunction runStartedAtByRunId(sample: Sample): ReadonlyMap<string, UtcMillis> {\n const byRunId = new Map<string, UtcMillis>();\n for (const run of sample.snapshot.runs)\n byRunId.set(run.runId, run.startedAt);\n return byRunId;\n}\n/**\n * 按 locator 去重的 included slot 选择:同一 locator 出现多份(跨 Run 携带)时\n * 取 startedAt 最新的一份作展示行。Member 的 action / relation 是 Run provenance,\n * 不在质量列表里折成额外的时效状态。\n */\nfunction selectedSlots(sample: Sample): readonly SlotSelection[] {\n const runStartedAt = runStartedAtByRunId(sample);\n const byLocator = new Map<AttemptLocator, SlotSelection>();\n for (const slot of sample.snapshot.slots) {\n if (slot.state !== \"included\")\n continue;\n const locator = slot.attempt.locator;\n const startedAt = runStartedAt.get(slot.runId) ?? null;\n const existing = byLocator.get(locator);\n if (existing === undefined ||\n (startedAt !== null && (existing.startedAt === null || startedAt > existing.startedAt))) {\n byLocator.set(locator, Object.freeze({\n locator,\n experimentId: slot.experimentId,\n evalId: slot.evalId,\n attemptOrdinal: slot.attemptOrdinal,\n startedAt,\n }));\n }\n }\n return Object.freeze([...byLocator.values()]);\n}\n/**\n * `attemptListData(sample)`:每个 included attempt 一项,顺序取自 Sample 展平顺序\n * (按 locator 去重后保持首次出现序,不重排)。\n */\nexport async function attemptListData(sample: Sample, pricing: PricingProfile | null = null): Promise<readonly AttemptListItem[]> {\n const [facts, metrics] = await Promise.all([\n evidenceFacts(sample),\n attemptMetricRows(sample, pricing),\n ]);\n const selections = selectedSlots(sample);\n return Object.freeze(selections.map((selection): AttemptListItem => {\n const fact: AttemptFact = facts.get(selection.locator) ?? Object.freeze({\n verdict: null,\n failureSummary: null,\n evaluationKind: \"pass\" as const,\n });\n const metric = requireMetrics(metrics.get(metricsKey(selection.experimentId, selection.evalId, selection.locator)), `attempt ${JSON.stringify(selection.locator)}`);\n const item: AttemptListItem = Object.freeze({\n locator: selection.locator,\n experimentId: selection.experimentId,\n evalId: selection.evalId,\n attemptOrdinal: selection.attemptOrdinal,\n verdict: fact.verdict,\n failureSummary: fact.failureSummary,\n evaluationKind: fact.evaluationKind,\n ...(fact.totalScore === undefined ? {} : { totalScore: fact.totalScore }),\n passRate: metric.passRate,\n durationMs: metric.durationMs,\n ...(metric.costUSD === undefined ? {} : { costUSD: metric.costUSD }),\n tokens: metric.tokens,\n startedAt: selection.startedAt,\n href: attemptHref(selection.locator),\n });\n return item;\n }));\n}\n/**\n * `experimentListData(sample)`:每个 experiment 一项,展开到每道 Eval;初始排序按\n * 这份列表自身的题型构成选择主读数:纯通过制按 endToEndPassRate,含分数制\n * 时按 totalScore 降序(缺数据沉底,同值按 experimentId 字典序收口)。\n */\nexport async function experimentListData(sample: Sample, pricing: PricingProfile | null = null): Promise<readonly ExperimentListItem[]> {\n const snapshot = sample.snapshot;\n const attempts = await attemptListData(sample, pricing);\n const [experimentMetrics, evalMetrics] = await Promise.all([\n experimentMetricRows(sample, pricing),\n evalMetricRows(sample, pricing),\n ]);\n const attemptsByEval = new Map<string, AttemptListItem[]>();\n for (const item of attempts) {\n const key = metricsKey(item.experimentId, item.evalId);\n const list = attemptsByEval.get(key);\n if (list)\n list.push(item);\n else\n attemptsByEval.set(key, [item]);\n }\n const activeSlots = snapshot.slots.filter((slot) => slot.state !== \"excluded\");\n const experiments = new Map<ExperimentId, {\n evalIds: Set<EvalId>;\n included: Set<EvalId>;\n }>();\n for (const slot of activeSlots) {\n const entry = experiments.get(slot.experimentId);\n if (entry === undefined) {\n experiments.set(slot.experimentId, {\n evalIds: new Set([slot.evalId]),\n included: slot.state === \"included\" ? new Set([slot.evalId]) : new Set(),\n });\n continue;\n }\n entry.evalIds.add(slot.evalId);\n if (slot.state === \"included\")\n entry.included.add(slot.evalId);\n }\n // 组前缀布局(纯字符串)与 facade GroupFunction 坐标先于指标聚合固定。\n const prefixByExperiment = new Map<ExperimentId, ReadonlyMap<EvalId, string>>();\n for (const [experimentId, entry] of experiments) {\n const layout = experimentEvalLayout([...entry.evalIds]);\n const prefixFor = new Map<EvalId, string>();\n const walk = (nodes: readonly EvalLayoutNode[]): void => {\n for (const node of nodes) {\n if (node.kind === \"leaf\")\n continue;\n for (const evalIdValue of evalIdsUnder(node))\n prefixFor.set(evalIdValue, node.prefix);\n walk(node.children);\n }\n };\n walk(layout);\n prefixByExperiment.set(experimentId, prefixFor);\n }\n const hasGroups = [...prefixByExperiment.values()].some((prefixFor) => prefixFor.size > 0);\n const groupMetrics = hasGroups\n ? await groupMetricRows(sample, prefixByExperiment, pricing)\n : new Map<string, ExperimentMetrics>();\n const watermarks = watermarksByExperiment(sample);\n const items: ExperimentListItem[] = [];\n for (const [experimentId, entry] of experiments) {\n const evalIds = [...entry.evalIds];\n const missing = [...evalIds].filter((evalIdValue) => !entry.included.has(evalIdValue));\n const evalRows: ExperimentListEvalRow[] = [];\n for (const evalIdValue of evalIds) {\n if (!entry.included.has(evalIdValue))\n continue;\n const list = attemptsByEval.get(metricsKey(experimentId, evalIdValue)) ?? [];\n const sorted = [...list].sort((left, right) => left.attemptOrdinal - right.attemptOrdinal || left.locator.localeCompare(right.locator));\n const metrics = requireMetrics(evalMetrics.get(metricsKey(experimentId, evalIdValue)), `experiment/eval ${JSON.stringify(experimentId)}/${JSON.stringify(evalIdValue)}`);\n const evaluationKind = sorted.some((attempt) => attempt.evaluationKind === \"points\") ? \"points\" : \"pass\";\n const completeScores = sorted.flatMap((attempt) => attempt.totalScore === undefined ? [] : [attempt.totalScore]);\n evalRows.push(Object.freeze({\n evalId: evalIdValue,\n evaluationKind,\n ...(completeScores.length === 0\n ? {}\n : { totalScore: completeScores.reduce((sum, score) => sum + score, 0) / completeScores.length }),\n endToEndPassRate: metrics.passRate,\n durationMs: metrics.durationMs,\n ...(metrics.costUSD === undefined ? {} : { costUSD: metrics.costUSD }),\n tokens: metrics.tokens,\n attempts: Object.freeze(sorted),\n }));\n }\n const watermark = watermarks.get(experimentId);\n const experimentMetric = requireMetrics(experimentMetrics.get(experimentId), `experiment ${JSON.stringify(experimentId)}`);\n const groupMetricsForItem = new Map<string, ExperimentMetrics>();\n const prefixes = [...new Set(prefixByExperiment.get(experimentId)?.values() ?? [])];\n for (const prefix of prefixes) {\n const metric = groupMetrics.get(metricsKey(experimentId, prefix));\n if (metric !== undefined)\n groupMetricsForItem.set(prefix, metric);\n }\n const evaluationKind = evalRows.some((row) => row.evaluationKind === \"points\")\n ? evalRows.some((row) => row.evaluationKind === \"pass\") ? \"mixed\" : \"points\"\n : \"pass\";\n const completeEvalScores = evalRows.flatMap((row) => row.totalScore === undefined ? [] : [row.totalScore]);\n items.push(Object.freeze({\n experimentId,\n agent: watermark?.agent ?? null,\n model: watermark?.model ?? null,\n flags: watermark?.flags ?? null,\n evaluationKind,\n ...(completeEvalScores.length === 0\n ? {}\n : { totalScore: completeEvalScores.reduce((sum, score) => sum + score, 0) }),\n endToEndPassRate: experimentMetric.passRate,\n durationMs: experimentMetric.durationMs,\n ...(experimentMetric.costUSD === undefined ? {} : { costUSD: experimentMetric.costUSD }),\n tokens: experimentMetric.tokens,\n missingEvalIds: Object.freeze(missing.sort((left, right) => left.localeCompare(right))),\n groupMetrics: groupMetricsForItem,\n evalRows: Object.freeze(evalRows),\n href: experimentHref(experimentId),\n }));\n }\n const composition = items.some((item) => item.evaluationKind !== \"pass\")\n ? items.some((item) => item.evaluationKind !== \"points\") ? \"mixed\" : \"points\"\n : \"pass\";\n items.sort(byMetricDescThenId((item) => composition !== \"pass\"\n ? item.totalScore ?? null\n : item.endToEndPassRate.value));\n return Object.freeze(items);\n}\nfunction evalIdsUnder(node: EvalLayoutNode): readonly EvalId[] {\n if (node.kind === \"leaf\")\n return [node.evalId];\n return node.children.flatMap(evalIdsUnder);\n}\nfunction byMetricDescThenId(valueOf: (item: ExperimentListItem) => number | null): (left: ExperimentListItem, right: ExperimentListItem) => number {\n return (left, right) => {\n const leftValue = valueOf(left);\n const rightValue = valueOf(right);\n if (leftValue === null && rightValue === null) {\n return left.experimentId.localeCompare(right.experimentId);\n }\n if (leftValue === null)\n return 1;\n if (rightValue === null)\n return -1;\n return rightValue - leftValue || left.experimentId.localeCompare(right.experimentId);\n };\n}\n"]}
@@ -3,11 +3,6 @@ import type { AttemptLocator } from "../../../attempt-locator.cjs";
3
3
  import type { EvalId, ExperimentId } from "../../../analysis/index.cjs";
4
4
  import type { Verdict } from "../../../shared/types.cjs";
5
5
  type UtcMillis = Sample["snapshot"]["runs"][number]["startedAt"];
6
- /**
7
- * 当前 Analysis 只发布通过制读数(没有总分 Measure),题型构成恒为
8
- * "pass"。未来 Analysis 发布计分制 Measure 时,这里与 content.ts 的列集一起按
9
- * 同一构成判据扩展。
10
- */
11
6
  export type EvaluationKindComposition = "pass" | "points" | "mixed";
12
7
  /** 一个层级共用的四枚 Analysis-owned 读数。 */
13
8
  export interface ExperimentMetrics {
@@ -30,6 +25,9 @@ export interface AttemptListItem {
30
25
  * display 标签;closed 数据没有可读摘录时为 null(渲染成 "—",不发明文案)。
31
26
  */
32
27
  readonly failureSummary: string | null;
28
+ readonly evaluationKind: "pass" | "points";
29
+ /** Complete earned score for this Attempt; absent for pass or incomplete score evidence. */
30
+ readonly totalScore?: number;
33
31
  readonly passRate: MetricValue<number>;
34
32
  readonly durationMs: MetricValue<number>;
35
33
  /** Present only when the owning Report declares a PricingProfile. */
@@ -43,6 +41,9 @@ export interface AttemptListItem {
43
41
  /** experiment 层级表里一道 Eval 的闭合行;attempts 是它的可见子行。 */
44
42
  export interface ExperimentListEvalRow {
45
43
  readonly evalId: EvalId;
44
+ readonly evaluationKind: "pass" | "points";
45
+ /** Mean of complete Attempt scores for this Eval. */
46
+ readonly totalScore?: number;
46
47
  readonly endToEndPassRate: MetricValue<number>;
47
48
  readonly durationMs: MetricValue<number>;
48
49
  readonly costUSD?: CostMetricValue;
@@ -56,8 +57,9 @@ export interface ExperimentListItem {
56
57
  readonly agent: string | null;
57
58
  readonly model: string | null;
58
59
  readonly flags: Readonly<Record<string, JsonValue>> | null;
59
- /** 占位默认值,见 EvaluationKindComposition 注释。 */
60
60
  readonly evaluationKind: EvaluationKindComposition;
61
+ /** Sum of the visible per-Eval score cells; absent when no complete Score Eval exists. */
62
+ readonly totalScore?: number;
61
63
  readonly endToEndPassRate: MetricValue<number>;
62
64
  readonly durationMs: MetricValue<number>;
63
65
  readonly costUSD?: CostMetricValue;
@@ -100,8 +102,8 @@ export declare function experimentEvalLayout(evalIdValues: readonly EvalId[]): r
100
102
  export declare function attemptListData(sample: Sample, pricing?: PricingProfile | null): Promise<readonly AttemptListItem[]>;
101
103
  /**
102
104
  * `experimentListData(sample)`:每个 experiment 一项,展开到每道 Eval;初始排序按
103
- * 这份列表自身的题型构成选择主读数——当前 facade 只有通过制读数,恒为
104
- * endToEndPassRate 降序(缺数据沉底,同值按 experimentId 字典序收口)。
105
+ * 这份列表自身的题型构成选择主读数:纯通过制按 endToEndPassRate,含分数制
106
+ * 时按 totalScore 降序(缺数据沉底,同值按 experimentId 字典序收口)。
105
107
  */
106
108
  export declare function experimentListData(sample: Sample, pricing?: PricingProfile | null): Promise<readonly ExperimentListItem[]>;
107
109
  export {};