niceeval 0.13.2 → 0.13.3

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 (494) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/claude-code-native.cjs +213 -0
  7. package/dist/agents/claude-code-native.cjs.map +1 -0
  8. package/dist/agents/claude-code-native.d.cts +5 -0
  9. package/dist/agents/claude-code-native.d.mts +5 -0
  10. package/dist/agents/claude-code-native.d.ts +5 -0
  11. package/dist/agents/claude-code-native.js +6 -0
  12. package/dist/agents/claude-code-native.js.map +1 -0
  13. package/dist/agents/claude-code.cjs +26 -80
  14. package/dist/agents/claude-code.cjs.map +1 -1
  15. package/dist/agents/codex-app-server.cjs +314 -0
  16. package/dist/agents/codex-app-server.cjs.map +1 -0
  17. package/dist/agents/codex-app-server.d.cts +9 -0
  18. package/dist/agents/codex-app-server.d.mts +9 -0
  19. package/dist/agents/codex-app-server.d.ts +9 -0
  20. package/dist/agents/codex-app-server.js +6 -0
  21. package/dist/agents/codex-app-server.js.map +1 -0
  22. package/dist/agents/codex.cjs +19 -68
  23. package/dist/agents/codex.cjs.map +1 -1
  24. package/dist/agents/codex.d.cts +3 -3
  25. package/dist/agents/codex.d.mts +3 -3
  26. package/dist/agents/codex.d.ts +3 -3
  27. package/dist/agents/index.cjs +3 -1
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +1 -0
  30. package/dist/agents/index.d.mts +1 -0
  31. package/dist/agents/index.d.ts +1 -0
  32. package/dist/agents/index.js +84 -82
  33. package/dist/agents/index.mjs +84 -82
  34. package/dist/agents/managed-jsonl.cjs +207 -0
  35. package/dist/agents/managed-jsonl.cjs.map +1 -0
  36. package/dist/agents/managed-jsonl.d.cts +39 -0
  37. package/dist/agents/managed-jsonl.d.mts +39 -0
  38. package/dist/agents/managed-jsonl.d.ts +39 -0
  39. package/dist/agents/managed-jsonl.js +6 -0
  40. package/dist/agents/managed-jsonl.js.map +1 -0
  41. package/dist/agents/managed-process.cjs +31 -0
  42. package/dist/agents/managed-process.cjs.map +1 -0
  43. package/dist/agents/managed-process.d.cts +3 -0
  44. package/dist/agents/managed-process.d.mts +3 -0
  45. package/dist/agents/managed-process.d.ts +3 -0
  46. package/dist/agents/managed-process.js +6 -0
  47. package/dist/agents/managed-process.js.map +1 -0
  48. package/dist/agents/omp.cjs +18 -1
  49. package/dist/agents/omp.cjs.map +1 -1
  50. package/dist/agents/sdk-streams.cjs +11 -4
  51. package/dist/agents/sdk-streams.cjs.map +1 -1
  52. package/dist/agents/types.cjs.map +1 -1
  53. package/dist/agents/types.d.cts +8 -0
  54. package/dist/agents/types.d.mts +8 -0
  55. package/dist/agents/types.d.ts +8 -0
  56. package/dist/analysis/bindings.cjs +74 -19
  57. package/dist/analysis/bindings.cjs.map +1 -1
  58. package/dist/analysis/bindings.d.cts +534 -156
  59. package/dist/analysis/bindings.d.mts +534 -156
  60. package/dist/analysis/bindings.d.ts +534 -156
  61. package/dist/analysis/domain-view.cjs.map +1 -1
  62. package/dist/analysis/domain-view.d.cts +137 -8
  63. package/dist/analysis/domain-view.d.mts +137 -8
  64. package/dist/analysis/domain-view.d.ts +137 -8
  65. package/dist/analysis/index.cjs.map +1 -1
  66. package/dist/analysis/index.d.cts +1 -1
  67. package/dist/analysis/index.d.mts +1 -1
  68. package/dist/analysis/index.d.ts +1 -1
  69. package/dist/assertions/api.cjs.map +1 -1
  70. package/dist/assertions/api.d.cts +62 -0
  71. package/dist/assertions/api.d.mts +62 -0
  72. package/dist/assertions/api.d.ts +62 -0
  73. package/dist/assertions/judge.cjs +56 -5
  74. package/dist/assertions/judge.cjs.map +1 -1
  75. package/dist/assertions/match.cjs +66 -42
  76. package/dist/assertions/match.cjs.map +1 -1
  77. package/dist/assertions/match.d.cts +13 -0
  78. package/dist/assertions/match.d.mts +13 -0
  79. package/dist/assertions/match.d.ts +13 -0
  80. package/dist/assertions/record/attachment.cjs +104 -33
  81. package/dist/assertions/record/attachment.cjs.map +1 -1
  82. package/dist/assertions/record/attachment.d.cts +294 -57
  83. package/dist/assertions/record/attachment.d.mts +294 -57
  84. package/dist/assertions/record/attachment.d.ts +294 -57
  85. package/dist/assertions/record/codec.cjs +91 -17
  86. package/dist/assertions/record/codec.cjs.map +1 -1
  87. package/dist/assertions/record/codec.d.cts +280 -52
  88. package/dist/assertions/record/codec.d.mts +280 -52
  89. package/dist/assertions/record/codec.d.ts +280 -52
  90. package/dist/assertions/record/index.js +2 -0
  91. package/dist/assertions/record/model.cjs +16 -0
  92. package/dist/assertions/record/model.cjs.map +1 -1
  93. package/dist/assertions/record/model.d.cts +120 -13
  94. package/dist/assertions/record/model.d.mts +120 -13
  95. package/dist/assertions/record/model.d.ts +120 -13
  96. package/dist/assertions/record/model.js +2 -0
  97. package/dist/assertions/record/producer.cjs +70 -50
  98. package/dist/assertions/record/producer.cjs.map +1 -1
  99. package/dist/assertions/record/producer.d.cts +8 -7
  100. package/dist/assertions/record/producer.d.mts +8 -7
  101. package/dist/assertions/record/producer.d.ts +8 -7
  102. package/dist/assertions/runtime.cjs +49 -7
  103. package/dist/assertions/runtime.cjs.map +1 -1
  104. package/dist/cli/application.cjs +40 -0
  105. package/dist/cli/application.cjs.map +1 -0
  106. package/dist/cli/application.d.cts +129 -0
  107. package/dist/cli/application.d.mts +129 -0
  108. package/dist/cli/application.d.ts +129 -0
  109. package/dist/cli/application.js +24 -0
  110. package/dist/cli/application.js.map +1 -0
  111. package/dist/cli/bootstrap.cjs +10 -4
  112. package/dist/cli/bootstrap.cjs.map +1 -1
  113. package/dist/cli/node-application.cjs +123 -0
  114. package/dist/cli/node-application.cjs.map +1 -0
  115. package/dist/cli/node-application.d.cts +14 -0
  116. package/dist/cli/node-application.d.mts +14 -0
  117. package/dist/cli/node-application.d.ts +14 -0
  118. package/dist/cli/node-application.js +26 -0
  119. package/dist/cli/node-application.js.map +1 -0
  120. package/dist/cli/program.cjs +2807 -0
  121. package/dist/cli/program.cjs.map +1 -0
  122. package/dist/cli/program.d.cts +352 -0
  123. package/dist/cli/program.d.mts +352 -0
  124. package/dist/cli/program.d.ts +352 -0
  125. package/dist/cli/program.js +36 -0
  126. package/dist/cli/program.js.map +1 -0
  127. package/dist/cli/project-configuration.cjs +134 -0
  128. package/dist/cli/project-configuration.cjs.map +1 -0
  129. package/dist/cli/project-configuration.d.cts +64 -0
  130. package/dist/cli/project-configuration.d.mts +64 -0
  131. package/dist/cli/project-configuration.d.ts +64 -0
  132. package/dist/cli/project-configuration.js +22 -0
  133. package/dist/cli/project-configuration.js.map +1 -0
  134. package/dist/cli/record.cjs +20 -4
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +3 -3
  137. package/dist/cli/record.d.mts +3 -3
  138. package/dist/cli/record.d.ts +3 -3
  139. package/dist/cli.cjs +19 -3130
  140. package/dist/cli.cjs.map +1 -1
  141. package/dist/cli.d.cts +2 -148
  142. package/dist/cli.d.mts +2 -148
  143. package/dist/cli.d.ts +2 -148
  144. package/dist/cli.js +22 -30
  145. package/dist/context/assert-first.cjs +21 -15
  146. package/dist/context/assert-first.cjs.map +1 -1
  147. package/dist/context/assert-first.d.cts +1 -0
  148. package/dist/context/assert-first.d.mts +1 -0
  149. package/dist/context/assert-first.d.ts +1 -0
  150. package/dist/context/attempt-resources.cjs +13 -0
  151. package/dist/context/attempt-resources.cjs.map +1 -0
  152. package/dist/context/attempt-resources.d.cts +3 -0
  153. package/dist/context/attempt-resources.d.mts +3 -0
  154. package/dist/context/attempt-resources.d.ts +3 -0
  155. package/dist/context/attempt-resources.js +8 -0
  156. package/dist/context/attempt-resources.js.map +1 -0
  157. package/dist/context/session.cjs +4 -3
  158. package/dist/context/session.cjs.map +1 -1
  159. package/dist/context/session.d.cts +1 -0
  160. package/dist/context/session.d.mts +1 -0
  161. package/dist/context/session.d.ts +1 -0
  162. package/dist/eval/record/verdict.cjs +3 -2
  163. package/dist/eval/record/verdict.cjs.map +1 -1
  164. package/dist/experiment/host/index.cjs +1 -6
  165. package/dist/experiment/host/index.cjs.map +1 -1
  166. package/dist/experiment/host/index.d.cts +1 -0
  167. package/dist/experiment/host/index.d.mts +1 -0
  168. package/dist/experiment/host/index.d.ts +1 -0
  169. package/dist/load-config.cjs +13 -4
  170. package/dist/load-config.cjs.map +1 -1
  171. package/dist/load-config.d.cts +4 -3
  172. package/dist/load-config.d.mts +4 -3
  173. package/dist/load-config.d.ts +4 -3
  174. package/dist/load-config.js +4 -2
  175. package/dist/o11y/parsers/codex.cjs +29 -7
  176. package/dist/o11y/parsers/codex.cjs.map +1 -1
  177. package/dist/record/codec/core.d.cts +0 -2
  178. package/dist/record/codec/core.d.mts +0 -2
  179. package/dist/record/codec/core.d.ts +0 -2
  180. package/dist/record/codec/identifiers.cjs +2 -3
  181. package/dist/record/codec/identifiers.cjs.map +1 -1
  182. package/dist/record/codec/identifiers.d.cts +1 -2
  183. package/dist/record/codec/identifiers.d.mts +1 -2
  184. package/dist/record/codec/identifiers.d.ts +1 -2
  185. package/dist/record/codec/identifiers.js +10 -12
  186. package/dist/record/codec/index.js +42 -44
  187. package/dist/record/definition/attachment.cjs +1 -0
  188. package/dist/record/definition/attachment.cjs.map +1 -1
  189. package/dist/record/definition/attachment.d.cts +14 -0
  190. package/dist/record/definition/attachment.d.mts +14 -0
  191. package/dist/record/definition/attachment.d.ts +14 -0
  192. package/dist/record/family/assertions-v1.cjs +104 -0
  193. package/dist/record/family/assertions-v1.cjs.map +1 -0
  194. package/dist/record/family/assertions-v1.d.cts +2 -0
  195. package/dist/record/family/assertions-v1.d.mts +2 -0
  196. package/dist/record/family/assertions-v1.d.ts +2 -0
  197. package/dist/record/family/assertions-v1.js +6 -0
  198. package/dist/record/family/assertions-v1.js.map +1 -0
  199. package/dist/record/family/assertions.cjs +16 -5
  200. package/dist/record/family/assertions.cjs.map +1 -1
  201. package/dist/record/family/assertions.d.cts +510 -56
  202. package/dist/record/family/assertions.d.mts +510 -56
  203. package/dist/record/family/assertions.d.ts +510 -56
  204. package/dist/record/family/assertions.js +14 -10
  205. package/dist/record/family/catalog.cjs +17 -1
  206. package/dist/record/family/catalog.cjs.map +1 -1
  207. package/dist/record/family/catalog.d.cts +1292 -104
  208. package/dist/record/family/catalog.d.mts +1292 -104
  209. package/dist/record/family/catalog.d.ts +1292 -104
  210. package/dist/record/family/catalog.js +22 -20
  211. package/dist/record/family/index.js +144 -138
  212. package/dist/record/family/observability-v1.cjs +5 -0
  213. package/dist/record/family/observability-v1.cjs.map +1 -1
  214. package/dist/record/family/observability.cjs +1 -1
  215. package/dist/record/family/observability.cjs.map +1 -1
  216. package/dist/record/host/runtime.cjs +323 -173
  217. package/dist/record/host/runtime.cjs.map +1 -1
  218. package/dist/record/host/types.cjs.map +1 -1
  219. package/dist/record/host/types.d.cts +9 -7
  220. package/dist/record/host/types.d.mts +9 -7
  221. package/dist/record/host/types.d.ts +9 -7
  222. package/dist/record/model/core.cjs.map +1 -1
  223. package/dist/record/model/core.d.cts +1 -2
  224. package/dist/record/model/core.d.mts +1 -2
  225. package/dist/record/model/core.d.ts +1 -2
  226. package/dist/record/model/definition.cjs +1 -2
  227. package/dist/record/model/definition.cjs.map +1 -1
  228. package/dist/record/model/definition.d.cts +1 -7
  229. package/dist/record/model/definition.d.mts +1 -7
  230. package/dist/record/model/definition.d.ts +1 -7
  231. package/dist/record/model/identifiers.cjs +2 -3
  232. package/dist/record/model/identifiers.cjs.map +1 -1
  233. package/dist/record/model/identifiers.d.cts +1 -3
  234. package/dist/record/model/identifiers.d.mts +1 -3
  235. package/dist/record/model/identifiers.d.ts +1 -3
  236. package/dist/record/model/identifiers.js +36 -38
  237. package/dist/record/model/index.js +60 -62
  238. package/dist/record/platform/node.cjs +17 -7
  239. package/dist/record/platform/node.cjs.map +1 -1
  240. package/dist/record/platform/services.cjs.map +1 -1
  241. package/dist/record/platform/services.d.cts +8 -3
  242. package/dist/record/platform/services.d.mts +8 -3
  243. package/dist/record/platform/services.d.ts +8 -3
  244. package/dist/record/reader/format.cjs +16 -65
  245. package/dist/record/reader/format.cjs.map +1 -1
  246. package/dist/record/reader/format.d.cts +5 -9
  247. package/dist/record/reader/format.d.mts +5 -9
  248. package/dist/record/reader/format.d.ts +5 -9
  249. package/dist/record/reader/index.js +10 -8
  250. package/dist/record/reader/runtime.cjs +63 -32
  251. package/dist/record/reader/runtime.cjs.map +1 -1
  252. package/dist/record/reader/runtime.d.cts +40 -4
  253. package/dist/record/reader/runtime.d.mts +40 -4
  254. package/dist/record/reader/runtime.d.ts +40 -4
  255. package/dist/record/reader/runtime.js +6 -4
  256. package/dist/report/assets/enhance.js +5 -5
  257. package/dist/report/assets/styles.css +190 -24
  258. package/dist/report/built-in/result-components.cjs +8 -5
  259. package/dist/report/built-in/result-components.cjs.map +1 -1
  260. package/dist/report/built-in/standard.cjs +3 -0
  261. package/dist/report/built-in/standard.cjs.map +1 -1
  262. package/dist/report/built-in/standard.d.cts +2 -0
  263. package/dist/report/built-in/standard.d.mts +2 -0
  264. package/dist/report/built-in/standard.d.ts +2 -0
  265. package/dist/report/client-dist/app.js +53 -0
  266. package/dist/report/components/attempt-detail/compute.cjs +108 -231
  267. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  268. package/dist/report/components/attempt-detail/compute.d.cts +11 -45
  269. package/dist/report/components/attempt-detail/compute.d.mts +11 -45
  270. package/dist/report/components/attempt-detail/compute.d.ts +11 -45
  271. package/dist/report/components/attempt-detail/compute.js +2 -4
  272. package/dist/report/components/attempt-detail/content.cjs +4 -4
  273. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  274. package/dist/report/components/attempt-detail/validate.cjs +47 -4
  275. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  276. package/dist/report/components/entity-lists/compute.cjs +9 -15
  277. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  278. package/dist/report/components/entity-lists/content.cjs +53 -40
  279. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  280. package/dist/report/components/entity-lists/index.cjs +1 -3
  281. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  282. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  283. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  284. package/dist/report/components/summaries/index.cjs +5 -1
  285. package/dist/report/components/summaries/index.cjs.map +1 -1
  286. package/dist/report/definition/cell.cjs +14 -7
  287. package/dist/report/definition/cell.cjs.map +1 -1
  288. package/dist/report/definition/cell.d.cts +4 -0
  289. package/dist/report/definition/cell.d.mts +4 -0
  290. package/dist/report/definition/cell.d.ts +4 -0
  291. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  292. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  293. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  294. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  295. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  296. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  297. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  298. package/dist/report/definition/primitives/conversation.cjs +7 -0
  299. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  300. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  301. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  302. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  303. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  304. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  305. package/dist/report/definition/primitives.cjs +14 -1
  306. package/dist/report/definition/primitives.cjs.map +1 -1
  307. package/dist/report/definition/report.cjs +16 -8
  308. package/dist/report/definition/report.cjs.map +1 -1
  309. package/dist/report/definition/report.d.cts +6 -0
  310. package/dist/report/definition/report.d.mts +6 -0
  311. package/dist/report/definition/report.d.ts +6 -0
  312. package/dist/report/definition/table-text.cjs +12 -3
  313. package/dist/report/definition/table-text.cjs.map +1 -1
  314. package/dist/report/definition/table-text.d.cts +6 -1
  315. package/dist/report/definition/table-text.d.mts +6 -1
  316. package/dist/report/definition/table-text.d.ts +6 -1
  317. package/dist/report/execution/model.cjs +6 -14
  318. package/dist/report/execution/model.cjs.map +1 -1
  319. package/dist/report/execution/model.d.cts +5 -10
  320. package/dist/report/execution/model.d.mts +5 -10
  321. package/dist/report/execution/model.d.ts +5 -10
  322. package/dist/report/execution/model.js +6 -6
  323. package/dist/report/execution/paths.cjs +0 -11
  324. package/dist/report/execution/paths.cjs.map +1 -1
  325. package/dist/report/execution/paths.d.cts +0 -1
  326. package/dist/report/execution/paths.d.mts +0 -1
  327. package/dist/report/execution/paths.d.ts +0 -1
  328. package/dist/report/execution/paths.js +6 -8
  329. package/dist/report/host/execute.cjs +13 -22
  330. package/dist/report/host/execute.cjs.map +1 -1
  331. package/dist/report/host/execute.d.cts +1 -4
  332. package/dist/report/host/execute.d.mts +1 -4
  333. package/dist/report/host/execute.d.ts +1 -4
  334. package/dist/report/host/from-record.cjs +3 -0
  335. package/dist/report/host/from-record.cjs.map +1 -1
  336. package/dist/report/host/from-record.d.cts +4 -1
  337. package/dist/report/host/from-record.d.mts +4 -1
  338. package/dist/report/host/from-record.d.ts +4 -1
  339. package/dist/report/host/site-assets.cjs +1 -2
  340. package/dist/report/host/site-assets.cjs.map +1 -1
  341. package/dist/report/host/site-assets.d.cts +0 -1
  342. package/dist/report/host/site-assets.d.mts +0 -1
  343. package/dist/report/host/site-assets.d.ts +0 -1
  344. package/dist/report/host/site-assets.js +2 -4
  345. package/dist/report/host/static.cjs +71 -346
  346. package/dist/report/host/static.cjs.map +1 -1
  347. package/dist/report/host/static.d.cts +1 -3
  348. package/dist/report/host/static.d.mts +1 -3
  349. package/dist/report/host/static.d.ts +1 -3
  350. package/dist/report/host/static.js +2 -2
  351. package/dist/report/host/view-session.cjs.map +1 -1
  352. package/dist/report/host/view-session.d.cts +1 -1
  353. package/dist/report/host/view-session.d.mts +1 -1
  354. package/dist/report/host/view-session.d.ts +1 -1
  355. package/dist/report/model/locale.cjs +1 -1
  356. package/dist/report/model/locale.cjs.map +1 -1
  357. package/dist/report/model/locale.d.cts +1 -1
  358. package/dist/report/model/locale.d.mts +1 -1
  359. package/dist/report/model/locale.d.ts +1 -1
  360. package/dist/report/model/pricing.cjs +2 -2
  361. package/dist/report/model/pricing.cjs.map +1 -1
  362. package/dist/report/react/enhance.js +5 -5
  363. package/dist/report/react/styles.css +190 -24
  364. package/dist/runner/adoption.cjs +4 -7
  365. package/dist/runner/adoption.cjs.map +1 -1
  366. package/dist/runner/attempt-resources.cjs +60 -0
  367. package/dist/runner/attempt-resources.cjs.map +1 -0
  368. package/dist/runner/attempt-resources.d.cts +13 -0
  369. package/dist/runner/attempt-resources.d.mts +13 -0
  370. package/dist/runner/attempt-resources.d.ts +13 -0
  371. package/dist/runner/attempt-resources.js +6 -0
  372. package/dist/runner/attempt-resources.js.map +1 -0
  373. package/dist/runner/attempt.cjs +37 -3
  374. package/dist/runner/attempt.cjs.map +1 -1
  375. package/dist/runner/feedback/failure.cjs +77 -2
  376. package/dist/runner/feedback/failure.cjs.map +1 -1
  377. package/dist/runner/feedback/failure.d.cts +2 -1
  378. package/dist/runner/feedback/failure.d.mts +2 -1
  379. package/dist/runner/feedback/failure.d.ts +2 -1
  380. package/dist/runner/project-current.cjs +2 -13
  381. package/dist/runner/project-current.cjs.map +1 -1
  382. package/dist/runner/project-current.d.cts +4 -2
  383. package/dist/runner/project-current.d.mts +4 -2
  384. package/dist/runner/project-current.d.ts +4 -2
  385. package/dist/runner/reporters/braintrust.cjs +7 -7
  386. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  387. package/dist/runner/reuse-readback.cjs +3 -4
  388. package/dist/runner/reuse-readback.cjs.map +1 -1
  389. package/dist/runner/run.cjs +5 -2
  390. package/dist/runner/run.cjs.map +1 -1
  391. package/dist/sandbox/backend.cjs +32 -2
  392. package/dist/sandbox/backend.cjs.map +1 -1
  393. package/dist/sandbox/backend.d.cts +12 -1
  394. package/dist/sandbox/backend.d.mts +12 -1
  395. package/dist/sandbox/backend.d.ts +12 -1
  396. package/dist/sandbox/backend.js +28 -22
  397. package/dist/sandbox/docker.cjs +140 -0
  398. package/dist/sandbox/docker.cjs.map +1 -1
  399. package/dist/sandbox/docker.d.cts +3 -1
  400. package/dist/sandbox/docker.d.mts +3 -1
  401. package/dist/sandbox/docker.d.ts +3 -1
  402. package/dist/sandbox/e2b.cjs +42 -0
  403. package/dist/sandbox/e2b.cjs.map +1 -1
  404. package/dist/sandbox/e2b.d.cts +2 -0
  405. package/dist/sandbox/e2b.d.mts +2 -0
  406. package/dist/sandbox/e2b.d.ts +2 -0
  407. package/dist/sandbox/local.cjs +64 -0
  408. package/dist/sandbox/local.cjs.map +1 -1
  409. package/dist/sandbox/local.d.cts +3 -1
  410. package/dist/sandbox/local.d.mts +3 -1
  411. package/dist/sandbox/local.d.ts +3 -1
  412. package/dist/sandbox/managed-process.cjs +49 -0
  413. package/dist/sandbox/managed-process.cjs.map +1 -0
  414. package/dist/sandbox/managed-process.d.cts +11 -0
  415. package/dist/sandbox/managed-process.d.mts +11 -0
  416. package/dist/sandbox/managed-process.d.ts +11 -0
  417. package/dist/sandbox/managed-process.js +6 -0
  418. package/dist/sandbox/managed-process.js.map +1 -0
  419. package/dist/sandbox/types.cjs.map +1 -1
  420. package/dist/sandbox/types.d.cts +24 -0
  421. package/dist/sandbox/types.d.mts +24 -0
  422. package/dist/sandbox/types.d.ts +24 -0
  423. package/dist/sandbox/vercel.cjs +1 -0
  424. package/dist/sandbox/vercel.cjs.map +1 -1
  425. package/dist/sandbox/vercel.d.cts +1 -0
  426. package/dist/sandbox/vercel.d.mts +1 -0
  427. package/dist/sandbox/vercel.d.ts +1 -0
  428. package/dist/view/server.cjs +2 -37
  429. package/dist/view/server.cjs.map +1 -1
  430. package/dist/view/server.d.cts +0 -3
  431. package/dist/view/server.d.mts +0 -3
  432. package/dist/view/server.d.ts +0 -3
  433. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  434. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  435. package/docs-site/zh/reference/report-components.mdx +2 -2
  436. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  437. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  438. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  439. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  440. package/docs-site/zh/tutorials/theming.mdx +2 -2
  441. package/package.json +4 -6
  442. package/dist/record/migration/index.cjs +0 -5
  443. package/dist/record/migration/index.cjs.map +0 -1
  444. package/dist/record/migration/index.d.cts +0 -11
  445. package/dist/record/migration/index.d.mts +0 -11
  446. package/dist/record/migration/index.d.ts +0 -11
  447. package/dist/record/migration/index.js +0 -6
  448. package/dist/record/migration/index.js.map +0 -1
  449. package/dist/report/host/site-runtime.cjs +0 -92
  450. package/dist/report/host/site-runtime.cjs.map +0 -1
  451. package/dist/report/host/site-runtime.d.cts +0 -9
  452. package/dist/report/host/site-runtime.d.mts +0 -9
  453. package/dist/report/host/site-runtime.d.ts +0 -9
  454. package/dist/report/host/site-runtime.js +0 -10
  455. package/dist/report/host/site-runtime.js.map +0 -1
  456. package/dist/view/client-dist/app.css +0 -2
  457. package/dist/view/client-dist/app.js +0 -49
  458. package/dist/view/data.cjs +0 -3
  459. package/dist/view/data.cjs.map +0 -1
  460. package/dist/view/data.d.cts +0 -9
  461. package/dist/view/data.d.mts +0 -9
  462. package/dist/view/data.d.ts +0 -9
  463. package/dist/view/data.js +0 -4
  464. package/dist/view/data.js.map +0 -1
  465. package/dist/view/index.cjs +0 -24
  466. package/dist/view/index.cjs.map +0 -1
  467. package/dist/view/index.d.cts +0 -9
  468. package/dist/view/index.d.mts +0 -9
  469. package/dist/view/index.d.ts +0 -9
  470. package/dist/view/index.js +0 -28
  471. package/dist/view/index.js.map +0 -1
  472. package/dist/view/report-view-cache.cjs +0 -200
  473. package/dist/view/report-view-cache.cjs.map +0 -1
  474. package/dist/view/report-view-cache.d.cts +0 -67
  475. package/dist/view/report-view-cache.d.mts +0 -67
  476. package/dist/view/report-view-cache.d.ts +0 -67
  477. package/dist/view/report-view-cache.js +0 -8
  478. package/dist/view/report-view-cache.js.map +0 -1
  479. package/dist/view/shared/types.cjs +0 -3
  480. package/dist/view/shared/types.cjs.map +0 -1
  481. package/dist/view/shared/types.d.cts +0 -51
  482. package/dist/view/shared/types.d.mts +0 -51
  483. package/dist/view/shared/types.d.ts +0 -51
  484. package/dist/view/shared/types.js +0 -4
  485. package/dist/view/shared/types.js.map +0 -1
  486. package/dist/view/site.cjs +0 -32
  487. package/dist/view/site.cjs.map +0 -1
  488. package/dist/view/site.d.cts +0 -24
  489. package/dist/view/site.d.mts +0 -24
  490. package/dist/view/site.d.ts +0 -24
  491. package/dist/view/site.js +0 -8
  492. package/dist/view/site.js.map +0 -1
  493. package/dist/view/styles.css +0 -170
  494. package/dist/view/template.html +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["validate.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content / Data 形状校验。\n// 数据契约照 docs/feature/reports/library.md;这些不是持久化\n// 格式,没有 format / schemaVersion 信封,兼容性跟随 npm 版本(组件消费 data 时校验\n// 结构,不符按完整用户反馈报错并提示版本漂移)。\nimport { arrayProblem, isObject, type Validator } from \"../../definition/primitives/shared.ts\";\n// ───────────────────────── 跨叶子复用的字段路径校验 ─────────────────────────\n/** AttemptIdentityView(compute.ts):locator 派生自的不可变身份元组。 */\nfunction attemptIdentityProblem(value: unknown, path: string): string | null {\n if (!isObject(value)) {\n return `\"${path}\" must be an AttemptIdentityView { runId, evalId, attempt }`;\n }\n if (typeof value.runId !== \"string\")\n return `\"${path}.runId\" must be a string`;\n if (typeof value.evalId !== \"string\")\n return `\"${path}.evalId\" must be a string`;\n if (typeof value.attempt !== \"number\")\n return `\"${path}.attempt\" must be a number`;\n return null;\n}\n/** AttemptCapabilitiesView(compute.ts):四个证据切面开关。 */\nfunction capabilitiesProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { source, execution, timing, diff }`;\n for (const key of [\"source\", \"execution\", \"timing\", \"diff\"] as const) {\n if (typeof value[key] !== \"boolean\")\n return `\"${path}.${key}\" must be a boolean`;\n }\n return null;\n}\n/** AttemptAssertionView(compute.ts):sealed 断言 entry 的展示投影。 */\nfunction assertionViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptAssertionView object`;\n if (typeof value.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (value.severity !== \"gate\" && value.severity !== \"soft\")\n return `\"${path}.severity\" must be \"gate\" or \"soft\"`;\n if (value.outcome !== \"passed\" && value.outcome !== \"failed\" && value.outcome !== \"unavailable\") {\n return `\"${path}.outcome\" must be \"passed\" | \"failed\" | \"unavailable\"`;\n }\n if (typeof value.detail !== \"string\")\n return `\"${path}.detail\" must be a string`;\n if (!Array.isArray(value.groupPath) || !value.groupPath.every((segment: unknown) => typeof segment === \"string\")) {\n return `\"${path}.groupPath\" must be an array of strings`;\n }\n if (value.score !== undefined) {\n if (!isObject(value.score))\n return `\"${path}.score\" must be an AttemptScoreView object`;\n if (value.score.state !== \"earned\" && value.score.state !== \"unavailable\") {\n return `\"${path}.score.state\" must be \"earned\" | \"unavailable\"`;\n }\n if (typeof value.score.earned !== \"number\")\n return `\"${path}.score.earned\" must be a number`;\n if (typeof value.score.points !== \"number\")\n return `\"${path}.score.points\" must be a number`;\n }\n return null;\n}\n/** ClosedTraceCollection(src/analysis/domain-view.ts):collection 状态与限制清单。 */\nfunction traceCollectionProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTraceCollection object`;\n if (value.state !== \"complete\" && value.state !== \"partial\")\n return `\"${path}.state\" must be \"complete\" | \"partial\"`;\n if (!Array.isArray(value.limitations))\n return `\"${path}.limitations\" must be an array`;\n return null;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport function validateSummaryData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n const identityProblem = attemptIdentityProblem(data.identity, \"identity\");\n if (identityProblem !== null)\n return identityProblem;\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.startedAt !== undefined && typeof data.startedAt !== \"string\")\n return '\"startedAt\" must be a string';\n if (!(data.durationMs === null || typeof data.durationMs === \"number\"))\n return '\"durationMs\" must be a number or null';\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n return capabilitiesProblem(data.capabilities, \"capabilities\");\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport function validateErrorData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.code !== \"string\")\n return '\"code\" must be a string';\n if (typeof data.message !== \"string\")\n return '\"message\" must be a string';\n if (typeof data.phase !== \"string\")\n return '\"phase\" must be a string';\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (data.commandEvidenceHint !== undefined && data.commandEvidenceHint !== true) {\n return '\"commandEvidenceHint\" must be true or omitted';\n }\n return null;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/** `{ group, items: AttemptAssertionView[] }[]` 分组结构。 */\nfunction assertionGroupsProblem(value: unknown, path: string): string | null {\n return arrayProblem(value, path, (group, groupPath) => {\n if (!isObject(group) || typeof group.group !== \"string\") {\n return `\"${groupPath}\" must be an object with a string \"group\"`;\n }\n return arrayProblem(group.items, `${groupPath}.items`, assertionViewProblem);\n });\n}\n/** AttemptAssertionsData 的得分点挣满计数。 */\nfunction scorePointsEarnedProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { earned, total }`;\n if (typeof value.earned !== \"number\")\n return `\"${path}.earned\" must be a number`;\n if (typeof value.total !== \"number\")\n return `\"${path}.total\" must be a number`;\n return null;\n}\nexport function validateAssertionsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const attentionProblem = arrayProblem(data.attention, \"attention\", assertionViewProblem);\n if (attentionProblem !== null)\n return attentionProblem;\n const passedGroupsProblem = assertionGroupsProblem(data.passedGroups, \"passedGroups\");\n if (passedGroupsProblem !== null)\n return passedGroupsProblem;\n if (data.scorePointsEarned !== undefined) {\n const problem = scorePointsEarnedProblem(data.scorePointsEarned, \"scorePointsEarned\");\n if (problem !== null)\n return problem;\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n if (data.evaluationKind !== \"pass\" && data.evaluationKind !== \"points\") {\n return '\"evaluationKind\" must be \"pass\" | \"points\"';\n }\n return null;\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport function validateFixPromptData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.prompt !== \"string\")\n return 'missing \"prompt\" (string)';\n return null;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** ClosedTimingInterval(src/analysis/domain-view.ts):闭合 timing 区间。 */\nfunction timingIntervalProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTimingInterval object`;\n if (typeof value.intervalId !== \"string\")\n return `\"${path}.intervalId\" must be a string`;\n if (value.parentIntervalId !== null && typeof value.parentIntervalId !== \"string\") {\n return `\"${path}.parentIntervalId\" must be a string or null`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.label !== \"string\")\n return `\"${path}.label\" must be a string`;\n if (typeof value.startOffsetMs !== \"number\")\n return `\"${path}.startOffsetMs\" must be a number`;\n if (typeof value.durationMs !== \"number\")\n return `\"${path}.durationMs\" must be a number`;\n if (typeof value.outcome !== \"string\")\n return `\"${path}.outcome\" must be a string`;\n return null;\n}\nfunction validateTimelineShape(data: unknown, kind: string): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.intervals, kind, timingIntervalProblem);\n}\nexport function validateTimelineData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\nexport function validateTraceData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nconst CONVERSATION_REPLY_KINDS = [\n \"assistant\",\n \"user\",\n \"thinking\",\n \"error\",\n \"tool\",\n \"skill\",\n \"context\",\n \"subagent\",\n \"input\",\n \"compaction\",\n];\n/** AttemptConversationReply(compute.ts):按 `kind` 判别的联合,每支自己的必填字段各自校验。 */\nfunction conversationReplyProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationReply object`;\n switch (value.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n case \"compaction\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"context\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"tool\":\n if (typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.inputSummary !== \"string\")\n return `\"${path}.inputSummary\" must be a string`;\n if (value.outputSummary !== undefined && typeof value.outputSummary !== \"string\") {\n return `\"${path}.outputSummary\" must be a string`;\n }\n if (value.failed !== undefined && typeof value.failed !== \"boolean\")\n return `\"${path}.failed\" must be a boolean`;\n return null;\n case \"skill\":\n if (typeof value.skill !== \"string\")\n return `\"${path}.skill\" must be a string`;\n if (value.text !== undefined && typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"subagent\":\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n return null;\n case \"input\":\n if (!isObject(value.request))\n return `\"${path}.request\" must be an AttemptInputRequestView object`;\n if (typeof value.request.promptSummary !== \"string\")\n return `\"${path}.request.promptSummary\" must be a string`;\n return null;\n default:\n return `\"${path}.kind\" must be one of ${JSON.stringify(CONVERSATION_REPLY_KINDS)}`;\n }\n}\nfunction conversationRoundProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationRound object`;\n if (typeof value.turnId !== \"string\")\n return `\"${path}.turnId\" must be a string`;\n if (typeof value.sequence !== \"number\")\n return `\"${path}.sequence\" must be a number`;\n if (value.outcome !== \"completed\" && value.outcome !== \"failed\" &&\n value.outcome !== \"cancelled\" && value.outcome !== \"interrupted\") {\n return `\"${path}.outcome\" must be completed | failed | cancelled | interrupted`;\n }\n return arrayProblem(value.replies, `${path}.replies`, conversationReplyProblem);\n}\nexport function validateConversationData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.rounds, \"rounds\", conversationRoundProblem);\n}\n/** AttemptCommandCard(compute.ts):闭合命令证据的展示卡。 */\nfunction commandCardProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptCommandCard object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (typeof value.timingNodeId !== \"string\")\n return `\"${path}.timingNodeId\" must be a string`;\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.display !== \"string\")\n return `\"${path}.display\" must be a string`;\n if (typeof value.exitCode !== \"number\")\n return `\"${path}.exitCode\" must be a number`;\n if (value.classification !== \"succeeded\" && value.classification !== \"observed\" && value.classification !== \"failed\") {\n return `\"${path}.classification\" must be succeeded | observed | failed`;\n }\n if (value.stdout !== undefined && typeof value.stdout !== \"string\")\n return `\"${path}.stdout\" must be a string`;\n if (value.stderr !== undefined && typeof value.stderr !== \"string\")\n return `\"${path}.stderr\" must be a string`;\n return null;\n}\nexport function validateCommandEvidenceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.commands, \"commands\", commandCardProblem);\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nfunction diagnosticViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptDiagnosticView object`;\n if (typeof value.code !== \"string\")\n return `\"${path}.code\" must be a string`;\n if (value.kind !== \"advisory\" && value.kind !== \"execution-error\") {\n return `\"${path}.kind\" must be \"advisory\" | \"execution-error\"`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n if (value.level !== \"warning\" && value.level !== \"error\")\n return `\"${path}.level\" must be \"warning\" | \"error\"`;\n return null;\n}\nexport function validateDiagnosticsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.groups, \"groups\", (group, path) => {\n if (!isObject(group) || typeof group.phase !== \"string\") {\n return `\"${path}\" must be an object with a string \"phase\"`;\n }\n return arrayProblem(group.items, `${path}.items`, diagnosticViewProblem);\n });\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport function validateUsageData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n if (typeof data.evalId !== \"string\")\n return 'missing \"evalId\" (string)';\n if (typeof data.attempt !== \"number\")\n return '\"attempt\" must be a number';\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.turns !== undefined && typeof data.turns !== \"number\")\n return '\"turns\" must be a number';\n if (data.toolCalls !== undefined && typeof data.toolCalls !== \"number\")\n return '\"toolCalls\" must be a number';\n if (data.observations !== undefined) {\n const problem = arrayProblem(data.observations, \"observations\", (observation, path) => {\n if (!isObject(observation) || typeof observation.provider !== \"string\" || typeof observation.kind !== \"string\") {\n return `\"${path}\" must be a ClosedUsageObservation object`;\n }\n return null;\n });\n if (problem !== null)\n return problem;\n }\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n return null;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nconst DIFF_FILE_CHANGE = [\"added\", \"modified\", \"deleted\"];\n/** DiffFile(src/report/definition/primitives/diff-lines.ts):净无变化的文件不进这份列表。 */\nfunction diffFileEntryProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a DiffFile { path, change, added, removed, windows }`;\n if (typeof value.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof value.change !== \"string\" || !DIFF_FILE_CHANGE.includes(value.change)) {\n return `\"${path}.change\" must be one of ${JSON.stringify(DIFF_FILE_CHANGE)}`;\n }\n if (typeof value.added !== \"number\" || typeof value.removed !== \"number\") {\n return `\"${path}.added\" and \"${path}.removed\" must be numbers`;\n }\n if (!Array.isArray(value.windows))\n return `\"${path}.windows\" must be an array`;\n for (let i = 0; i < value.windows.length; i += 1) {\n const window = value.windows[i];\n if (!isObject(window) || typeof window.window !== \"string\") {\n return `\"${path}.windows[${i}].window\" must be a string`;\n }\n if (window.patch !== undefined && typeof window.patch !== \"string\") {\n return `\"${path}.windows[${i}].patch\" must be a string`;\n }\n }\n return null;\n}\nexport function validateDiffData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (!isObject(data.collection) || typeof data.collection.state !== \"string\") {\n return '\"collection\" must be a ClosedFileChangesCollection object';\n }\n return arrayProblem(data.files, \"files\", diffFileEntryProblem);\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport function validateSourceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const itemsProblem = arrayProblem(data.items, \"items\", (item, path) => {\n if (!isObject(item))\n return `\"${path}\" must be an AttemptSourceItemView object`;\n if (typeof item.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof item.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof item.sha256 !== \"string\")\n return `\"${path}.sha256\" must be a string`;\n if (!Array.isArray(item.lines) || !item.lines.every((line: unknown) => typeof line === \"string\")) {\n return `\"${path}.lines\" must be an array of strings`;\n }\n if (item.unavailable !== undefined && item.unavailable !== \"unavailable\" && item.unavailable !== \"binary\") {\n return `\"${path}.unavailable\" must be \"unavailable\" | \"binary\"`;\n }\n return null;\n });\n if (itemsProblem !== null)\n return itemsProblem;\n const sitesProblem = arrayProblem(data.sites, \"sites\", (site, path) => {\n if (!isObject(site))\n return `\"${path}\" must be an AttemptSourceSiteView object`;\n if (typeof site.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof site.role !== \"string\")\n return `\"${path}.role\" must be a string`;\n if (typeof site.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof site.startLine !== \"number\")\n return `\"${path}.startLine\" must be a number`;\n if (typeof site.endLine !== \"number\")\n return `\"${path}.endLine\" must be a number`;\n return null;\n });\n if (sitesProblem !== null)\n return sitesProblem;\n return arrayProblem(data.entries, \"entries\", assertionViewProblem);\n}\nexport const attemptDetailValidators: Readonly<Record<string, Validator>> = Object.freeze({\n summary: validateSummaryData,\n error: validateErrorData,\n assertions: validateAssertionsData,\n fixPrompt: validateFixPromptData,\n timeline: validateTimelineData,\n trace: validateTraceData,\n conversation: validateConversationData,\n commandEvidence: validateCommandEvidenceData,\n diagnostics: validateDiagnosticsData,\n usage: validateUsageData,\n diff: validateDiffData,\n source: validateSourceData,\n});\n"]}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["validate.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content / Data 形状校验。\n// 数据契约照 docs/feature/reports/library.md;这些不是持久化\n// 格式,没有 format / schemaVersion 信封,兼容性跟随 npm 版本(组件消费 data 时校验\n// 结构,不符按完整用户反馈报错并提示版本漂移)。\nimport { arrayProblem, isObject, type Validator } from \"../../definition/primitives/shared.ts\";\n// ───────────────────────── 跨叶子复用的字段路径校验 ─────────────────────────\n/** AttemptIdentityView(compute.ts):locator 派生自的不可变身份元组。 */\nfunction attemptIdentityProblem(value: unknown, path: string): string | null {\n if (!isObject(value)) {\n return `\"${path}\" must be an AttemptIdentityView { runId, evalId, attempt }`;\n }\n if (typeof value.runId !== \"string\")\n return `\"${path}.runId\" must be a string`;\n if (typeof value.evalId !== \"string\")\n return `\"${path}.evalId\" must be a string`;\n if (typeof value.attempt !== \"number\")\n return `\"${path}.attempt\" must be a number`;\n return null;\n}\n/** AttemptCapabilitiesView(compute.ts):四个证据切面开关。 */\nfunction capabilitiesProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { source, execution, timing, diff }`;\n for (const key of [\"source\", \"execution\", \"timing\", \"diff\"] as const) {\n if (typeof value[key] !== \"boolean\")\n return `\"${path}.${key}\" must be a boolean`;\n }\n return null;\n}\nfunction assertionFactProblem(value: unknown, path: string): string | null {\n if (!isObject(value) || typeof value.kind !== \"string\")\n return `\"${path}\" must be a closed assertion fact`;\n switch (value.kind) {\n case \"unavailable\":\n return typeof value.reason === \"string\" ? null : `\"${path}.reason\" must be a string`;\n case \"value\":\n return value.value === null || typeof value.value === \"string\" || typeof value.value === \"number\" ||\n typeof value.value === \"boolean\"\n ? null\n : `\"${path}.value\" must be a JSON scalar`;\n case \"text\":\n return typeof value.text === \"string\" ? null : `\"${path}.text\" must be a string`;\n case \"list\":\n return arrayProblem(value.items, `${path}.items`, assertionFactProblem);\n case \"fields\":\n return arrayProblem(value.fields, `${path}.fields`, (field, fieldPath) => {\n if (!isObject(field) || typeof field.label !== \"string\")\n return `\"${fieldPath}.label\" must be a string`;\n return assertionFactProblem(field.value, `${fieldPath}.value`);\n });\n default:\n return `\"${path}.kind\" is unsupported`;\n }\n}\nfunction assertionEvidenceProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AssertionEvidenceContent object`;\n for (const key of [\"source\", \"check\", \"observed\", \"expected\", \"explanation\"] as const) {\n const problem = assertionFactProblem(value[key], `${path}.${key}`);\n if (problem !== null)\n return problem;\n }\n return null;\n}\n/** AttemptAssertionView(compute.ts):sealed 断言 entry 的展示投影。 */\nfunction assertionViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptAssertionView object`;\n if (typeof value.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (value.severity !== \"gate\" && value.severity !== \"recorded\" && value.severity !== \"soft\") {\n return `\"${path}.severity\" must be \"gate\" | \"recorded\" | \"soft\"`;\n }\n if (value.outcome !== \"passed\" && value.outcome !== \"failed\" && value.outcome !== \"unavailable\") {\n return `\"${path}.outcome\" must be \"passed\" | \"failed\" | \"unavailable\"`;\n }\n if (typeof value.detail !== \"string\")\n return `\"${path}.detail\" must be a string`;\n const evidenceProblem = assertionEvidenceProblem(value.evidence, `${path}.evidence`);\n if (evidenceProblem !== null)\n return evidenceProblem;\n if (!Array.isArray(value.groupPath) || !value.groupPath.every((segment: unknown) => typeof segment === \"string\")) {\n return `\"${path}.groupPath\" must be an array of strings`;\n }\n if (value.score !== undefined) {\n if (!isObject(value.score))\n return `\"${path}.score\" must be an AttemptScoreView object`;\n if (value.score.state !== \"earned\" && value.score.state !== \"unavailable\") {\n return `\"${path}.score.state\" must be \"earned\" | \"unavailable\"`;\n }\n if (typeof value.score.points !== \"number\")\n return `\"${path}.score.points\" must be a number`;\n if (value.score.state === \"earned\" && typeof value.score.earned !== \"number\") {\n return `\"${path}.score.earned\" must be a number for an earned contribution`;\n }\n if (value.score.state === \"unavailable\" && value.score.earned !== undefined) {\n return `\"${path}.score.earned\" must be omitted for an unavailable contribution`;\n }\n }\n return null;\n}\n/** ClosedTraceCollection(src/analysis/domain-view.ts):collection 状态与限制清单。 */\nfunction traceCollectionProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTraceCollection object`;\n if (value.state !== \"complete\" && value.state !== \"partial\")\n return `\"${path}.state\" must be \"complete\" | \"partial\"`;\n if (!Array.isArray(value.limitations))\n return `\"${path}.limitations\" must be an array`;\n return null;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport function validateSummaryData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n const identityProblem = attemptIdentityProblem(data.identity, \"identity\");\n if (identityProblem !== null)\n return identityProblem;\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.startedAt !== undefined && typeof data.startedAt !== \"string\")\n return '\"startedAt\" must be a string';\n if (!(data.durationMs === null || typeof data.durationMs === \"number\"))\n return '\"durationMs\" must be a number or null';\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n return capabilitiesProblem(data.capabilities, \"capabilities\");\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport function validateErrorData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.code !== \"string\")\n return '\"code\" must be a string';\n if (typeof data.message !== \"string\")\n return '\"message\" must be a string';\n if (typeof data.phase !== \"string\")\n return '\"phase\" must be a string';\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (data.commandEvidenceHint !== undefined && data.commandEvidenceHint !== true) {\n return '\"commandEvidenceHint\" must be true or omitted';\n }\n return null;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/** `{ group, items: AttemptAssertionView[] }[]` 分组结构。 */\nfunction assertionGroupsProblem(value: unknown, path: string): string | null {\n return arrayProblem(value, path, (group, groupPath) => {\n if (!isObject(group) || typeof group.group !== \"string\") {\n return `\"${groupPath}\" must be an object with a string \"group\"`;\n }\n return arrayProblem(group.items, `${groupPath}.items`, assertionViewProblem);\n });\n}\n/** AttemptAssertionsData 的得分点挣满计数。 */\nfunction scorePointsEarnedProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { earned, total }`;\n if (typeof value.earned !== \"number\")\n return `\"${path}.earned\" must be a number`;\n if (typeof value.total !== \"number\")\n return `\"${path}.total\" must be a number`;\n return null;\n}\nexport function validateAssertionsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const attentionProblem = arrayProblem(data.attention, \"attention\", assertionViewProblem);\n if (attentionProblem !== null)\n return attentionProblem;\n const passedGroupsProblem = assertionGroupsProblem(data.passedGroups, \"passedGroups\");\n if (passedGroupsProblem !== null)\n return passedGroupsProblem;\n if (data.scorePointsEarned !== undefined) {\n const problem = scorePointsEarnedProblem(data.scorePointsEarned, \"scorePointsEarned\");\n if (problem !== null)\n return problem;\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n if (data.evaluationKind !== \"pass\" && data.evaluationKind !== \"points\") {\n return '\"evaluationKind\" must be \"pass\" | \"points\"';\n }\n return null;\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport function validateFixPromptData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.prompt !== \"string\")\n return 'missing \"prompt\" (string)';\n return null;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** ClosedTimingInterval(src/analysis/domain-view.ts):闭合 timing 区间。 */\nfunction timingIntervalProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTimingInterval object`;\n if (typeof value.intervalId !== \"string\")\n return `\"${path}.intervalId\" must be a string`;\n if (value.parentIntervalId !== null && typeof value.parentIntervalId !== \"string\") {\n return `\"${path}.parentIntervalId\" must be a string or null`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.label !== \"string\")\n return `\"${path}.label\" must be a string`;\n if (typeof value.startOffsetMs !== \"number\")\n return `\"${path}.startOffsetMs\" must be a number`;\n if (typeof value.durationMs !== \"number\")\n return `\"${path}.durationMs\" must be a number`;\n if (typeof value.outcome !== \"string\")\n return `\"${path}.outcome\" must be a string`;\n return null;\n}\nfunction validateTimelineShape(data: unknown, kind: string): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.intervals, kind, timingIntervalProblem);\n}\nexport function validateTimelineData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\nexport function validateTraceData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nconst CONVERSATION_REPLY_KINDS = [\n \"assistant\",\n \"user\",\n \"thinking\",\n \"error\",\n \"tool\",\n \"skill\",\n \"context\",\n \"subagent\",\n \"input\",\n \"compaction\",\n];\n/** AttemptConversationReply(compute.ts):按 `kind` 判别的联合,每支自己的必填字段各自校验。 */\nfunction conversationReplyProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationReply object`;\n switch (value.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n case \"compaction\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"context\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"tool\":\n if (typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.inputSummary !== \"string\")\n return `\"${path}.inputSummary\" must be a string`;\n if (value.outputSummary !== undefined && typeof value.outputSummary !== \"string\") {\n return `\"${path}.outputSummary\" must be a string`;\n }\n if (value.failed !== undefined && typeof value.failed !== \"boolean\")\n return `\"${path}.failed\" must be a boolean`;\n return null;\n case \"skill\":\n if (typeof value.skill !== \"string\")\n return `\"${path}.skill\" must be a string`;\n if (value.text !== undefined && typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"subagent\":\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n return null;\n case \"input\":\n if (!isObject(value.request))\n return `\"${path}.request\" must be an AttemptInputRequestView object`;\n if (typeof value.request.promptSummary !== \"string\")\n return `\"${path}.request.promptSummary\" must be a string`;\n return null;\n default:\n return `\"${path}.kind\" must be one of ${JSON.stringify(CONVERSATION_REPLY_KINDS)}`;\n }\n}\nfunction conversationRoundProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationRound object`;\n if (typeof value.turnId !== \"string\")\n return `\"${path}.turnId\" must be a string`;\n if (typeof value.sequence !== \"number\")\n return `\"${path}.sequence\" must be a number`;\n if (value.outcome !== \"completed\" && value.outcome !== \"failed\" &&\n value.outcome !== \"cancelled\" && value.outcome !== \"interrupted\") {\n return `\"${path}.outcome\" must be completed | failed | cancelled | interrupted`;\n }\n return arrayProblem(value.replies, `${path}.replies`, conversationReplyProblem);\n}\nexport function validateConversationData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.rounds, \"rounds\", conversationRoundProblem);\n}\n/** AttemptCommandCard(compute.ts):闭合命令证据的展示卡。 */\nfunction commandCardProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptCommandCard object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (typeof value.timingNodeId !== \"string\")\n return `\"${path}.timingNodeId\" must be a string`;\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.display !== \"string\")\n return `\"${path}.display\" must be a string`;\n if (typeof value.exitCode !== \"number\")\n return `\"${path}.exitCode\" must be a number`;\n if (value.classification !== \"succeeded\" && value.classification !== \"observed\" && value.classification !== \"failed\") {\n return `\"${path}.classification\" must be succeeded | observed | failed`;\n }\n if (value.stdout !== undefined && typeof value.stdout !== \"string\")\n return `\"${path}.stdout\" must be a string`;\n if (value.stderr !== undefined && typeof value.stderr !== \"string\")\n return `\"${path}.stderr\" must be a string`;\n return null;\n}\nexport function validateCommandEvidenceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.commands, \"commands\", commandCardProblem);\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nfunction diagnosticViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptDiagnosticView object`;\n if (typeof value.code !== \"string\")\n return `\"${path}.code\" must be a string`;\n if (value.kind !== \"advisory\" && value.kind !== \"execution-error\") {\n return `\"${path}.kind\" must be \"advisory\" | \"execution-error\"`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n if (value.level !== \"warning\" && value.level !== \"error\")\n return `\"${path}.level\" must be \"warning\" | \"error\"`;\n return null;\n}\nexport function validateDiagnosticsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.groups, \"groups\", (group, path) => {\n if (!isObject(group) || typeof group.phase !== \"string\") {\n return `\"${path}\" must be an object with a string \"phase\"`;\n }\n return arrayProblem(group.items, `${path}.items`, diagnosticViewProblem);\n });\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport function validateUsageData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n if (typeof data.evalId !== \"string\")\n return 'missing \"evalId\" (string)';\n if (typeof data.attempt !== \"number\")\n return '\"attempt\" must be a number';\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.turns !== undefined && typeof data.turns !== \"number\")\n return '\"turns\" must be a number';\n if (data.toolCalls !== undefined && typeof data.toolCalls !== \"number\")\n return '\"toolCalls\" must be a number';\n if (data.observations !== undefined) {\n const problem = arrayProblem(data.observations, \"observations\", (observation, path) => {\n if (!isObject(observation) || typeof observation.provider !== \"string\" || typeof observation.kind !== \"string\") {\n return `\"${path}\" must be a ClosedUsageObservation object`;\n }\n return null;\n });\n if (problem !== null)\n return problem;\n }\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n return null;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nconst DIFF_FILE_CHANGE = [\"added\", \"modified\", \"deleted\"];\n/** DiffFile(src/report/definition/primitives/diff-lines.ts):净无变化的文件不进这份列表。 */\nfunction diffFileEntryProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a DiffFile { path, change, added, removed, windows }`;\n if (typeof value.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof value.change !== \"string\" || !DIFF_FILE_CHANGE.includes(value.change)) {\n return `\"${path}.change\" must be one of ${JSON.stringify(DIFF_FILE_CHANGE)}`;\n }\n if (typeof value.added !== \"number\" || typeof value.removed !== \"number\") {\n return `\"${path}.added\" and \"${path}.removed\" must be numbers`;\n }\n if (!Array.isArray(value.windows))\n return `\"${path}.windows\" must be an array`;\n for (let i = 0; i < value.windows.length; i += 1) {\n const window = value.windows[i];\n if (!isObject(window) || typeof window.window !== \"string\") {\n return `\"${path}.windows[${i}].window\" must be a string`;\n }\n if (window.patch !== undefined && typeof window.patch !== \"string\") {\n return `\"${path}.windows[${i}].patch\" must be a string`;\n }\n }\n return null;\n}\nexport function validateDiffData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (!isObject(data.collection) || typeof data.collection.state !== \"string\") {\n return '\"collection\" must be a ClosedFileChangesCollection object';\n }\n return arrayProblem(data.files, \"files\", diffFileEntryProblem);\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport function validateSourceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const itemsProblem = arrayProblem(data.items, \"items\", (item, path) => {\n if (!isObject(item))\n return `\"${path}\" must be an AttemptSourceItemView object`;\n if (typeof item.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof item.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof item.sha256 !== \"string\")\n return `\"${path}.sha256\" must be a string`;\n if (!Array.isArray(item.lines) || !item.lines.every((line: unknown) => typeof line === \"string\")) {\n return `\"${path}.lines\" must be an array of strings`;\n }\n if (item.unavailable !== undefined && item.unavailable !== \"unavailable\" && item.unavailable !== \"binary\") {\n return `\"${path}.unavailable\" must be \"unavailable\" | \"binary\"`;\n }\n return null;\n });\n if (itemsProblem !== null)\n return itemsProblem;\n const sitesProblem = arrayProblem(data.sites, \"sites\", (site, path) => {\n if (!isObject(site))\n return `\"${path}\" must be an AttemptSourceSiteView object`;\n if (typeof site.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof site.role !== \"string\")\n return `\"${path}.role\" must be a string`;\n if (typeof site.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof site.startLine !== \"number\")\n return `\"${path}.startLine\" must be a number`;\n if (typeof site.endLine !== \"number\")\n return `\"${path}.endLine\" must be a number`;\n return null;\n });\n if (sitesProblem !== null)\n return sitesProblem;\n return arrayProblem(data.entries, \"entries\", assertionViewProblem);\n}\nexport const attemptDetailValidators: Readonly<Record<string, Validator>> = Object.freeze({\n summary: validateSummaryData,\n error: validateErrorData,\n assertions: validateAssertionsData,\n fixPrompt: validateFixPromptData,\n timeline: validateTimelineData,\n trace: validateTraceData,\n conversation: validateConversationData,\n commandEvidence: validateCommandEvidenceData,\n diagnostics: validateDiagnosticsData,\n usage: validateUsageData,\n diff: validateDiffData,\n source: validateSourceData,\n});\n"]}
@@ -81,17 +81,11 @@ function closedFailureSummary(entry) {
81
81
  if (detail.verdict !== "failed")
82
82
  return null;
83
83
  for (const item of detail.entries) {
84
- const result = item.result;
85
- if (typeof result !== "object" || result === null || Array.isArray(result))
84
+ if (item.decision.result !== "mismatched")
86
85
  continue;
87
- if (result.state !== "mismatched")
88
- continue;
89
- const display = item.display;
90
- if (typeof display === "object" && display !== null && !Array.isArray(display)) {
91
- const label = display.label;
92
- if (typeof label === "string" && label.length > 0)
93
- return label;
94
- }
86
+ const label = item.display.label ?? item.display.key;
87
+ if (label !== undefined && label.length > 0)
88
+ return label;
95
89
  return "assertion";
96
90
  }
97
91
  return null;
@@ -102,14 +96,14 @@ async function evidenceFacts(sample) {
102
96
  for (const entry of view.entries) {
103
97
  const locator = entry.attempt.locator;
104
98
  const assertions = entry.state === "available"
105
- ? entry.detail.entries.map(compute_ts_1.assertionEntryViewOf).filter((item) => item !== undefined)
99
+ ? entry.detail.entries.map(compute_ts_1.assertionEntryViewOf)
106
100
  : [];
107
101
  const scoreContributions = assertions
108
- .map((item) => item.result.score)
102
+ .map((item) => item.decision.contribution)
109
103
  .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)
104
+ const earned = scoreContributions.filter((score) => score.state === "earned");
105
+ const completeScore = scoreContributions.length > 0 && earned.length === scoreContributions.length
106
+ ? earned.reduce((sum, score) => sum + score.earned, 0)
113
107
  : undefined;
114
108
  facts.set(locator, Object.freeze({
115
109
  verdict: entry.state === "available" ? entry.detail.verdict : null,
@@ -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\";\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"]}
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 if (item.decision.result !== \"mismatched\")\n continue;\n const label = item.display.label ?? item.display.key;\n if (label !== undefined && label.length > 0)\n return label;\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)\n : [];\n const scoreContributions = assertions\n .map((item) => item.decision.contribution)\n .filter((score) => score.state !== \"not-scored\");\n const earned = scoreContributions.filter((score): score is Extract<typeof score, {\n readonly state: \"earned\";\n }> => score.state === \"earned\");\n const completeScore = scoreContributions.length > 0 && earned.length === scoreContributions.length\n ? earned.reduce((sum, score) => sum + score.earned, 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"]}