niceeval 0.13.3-canary.37 → 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 (383) 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/codex-app-server.cjs +2 -3
  7. package/dist/agents/codex-app-server.cjs.map +1 -1
  8. package/dist/agents/codex.cjs +4 -4
  9. package/dist/agents/codex.cjs.map +1 -1
  10. package/dist/agents/codex.d.cts +3 -3
  11. package/dist/agents/codex.d.mts +3 -3
  12. package/dist/agents/codex.d.ts +3 -3
  13. package/dist/agents/sdk-streams.cjs +11 -4
  14. package/dist/agents/sdk-streams.cjs.map +1 -1
  15. package/dist/analysis/bindings.cjs +74 -19
  16. package/dist/analysis/bindings.cjs.map +1 -1
  17. package/dist/analysis/bindings.d.cts +534 -156
  18. package/dist/analysis/bindings.d.mts +534 -156
  19. package/dist/analysis/bindings.d.ts +534 -156
  20. package/dist/analysis/domain-view.cjs.map +1 -1
  21. package/dist/analysis/domain-view.d.cts +137 -8
  22. package/dist/analysis/domain-view.d.mts +137 -8
  23. package/dist/analysis/domain-view.d.ts +137 -8
  24. package/dist/analysis/index.cjs.map +1 -1
  25. package/dist/analysis/index.d.cts +1 -1
  26. package/dist/analysis/index.d.mts +1 -1
  27. package/dist/analysis/index.d.ts +1 -1
  28. package/dist/assertions/api.cjs.map +1 -1
  29. package/dist/assertions/api.d.cts +62 -0
  30. package/dist/assertions/api.d.mts +62 -0
  31. package/dist/assertions/api.d.ts +62 -0
  32. package/dist/assertions/judge.cjs +56 -5
  33. package/dist/assertions/judge.cjs.map +1 -1
  34. package/dist/assertions/match.cjs +66 -42
  35. package/dist/assertions/match.cjs.map +1 -1
  36. package/dist/assertions/match.d.cts +13 -0
  37. package/dist/assertions/match.d.mts +13 -0
  38. package/dist/assertions/match.d.ts +13 -0
  39. package/dist/assertions/record/attachment.cjs +104 -33
  40. package/dist/assertions/record/attachment.cjs.map +1 -1
  41. package/dist/assertions/record/attachment.d.cts +294 -57
  42. package/dist/assertions/record/attachment.d.mts +294 -57
  43. package/dist/assertions/record/attachment.d.ts +294 -57
  44. package/dist/assertions/record/codec.cjs +91 -17
  45. package/dist/assertions/record/codec.cjs.map +1 -1
  46. package/dist/assertions/record/codec.d.cts +280 -52
  47. package/dist/assertions/record/codec.d.mts +280 -52
  48. package/dist/assertions/record/codec.d.ts +280 -52
  49. package/dist/assertions/record/index.js +2 -0
  50. package/dist/assertions/record/model.cjs +16 -0
  51. package/dist/assertions/record/model.cjs.map +1 -1
  52. package/dist/assertions/record/model.d.cts +120 -13
  53. package/dist/assertions/record/model.d.mts +120 -13
  54. package/dist/assertions/record/model.d.ts +120 -13
  55. package/dist/assertions/record/model.js +2 -0
  56. package/dist/assertions/record/producer.cjs +70 -50
  57. package/dist/assertions/record/producer.cjs.map +1 -1
  58. package/dist/assertions/record/producer.d.cts +8 -7
  59. package/dist/assertions/record/producer.d.mts +8 -7
  60. package/dist/assertions/record/producer.d.ts +8 -7
  61. package/dist/assertions/runtime.cjs +49 -7
  62. package/dist/assertions/runtime.cjs.map +1 -1
  63. package/dist/cli/application.cjs +40 -0
  64. package/dist/cli/application.cjs.map +1 -0
  65. package/dist/cli/application.d.cts +129 -0
  66. package/dist/cli/application.d.mts +129 -0
  67. package/dist/cli/application.d.ts +129 -0
  68. package/dist/cli/application.js +24 -0
  69. package/dist/cli/application.js.map +1 -0
  70. package/dist/cli/bootstrap.cjs +10 -4
  71. package/dist/cli/bootstrap.cjs.map +1 -1
  72. package/dist/cli/node-application.cjs +123 -0
  73. package/dist/cli/node-application.cjs.map +1 -0
  74. package/dist/cli/node-application.d.cts +14 -0
  75. package/dist/cli/node-application.d.mts +14 -0
  76. package/dist/cli/node-application.d.ts +14 -0
  77. package/dist/cli/node-application.js +26 -0
  78. package/dist/cli/node-application.js.map +1 -0
  79. package/dist/cli/program.cjs +2807 -0
  80. package/dist/cli/program.cjs.map +1 -0
  81. package/dist/cli/program.d.cts +352 -0
  82. package/dist/cli/program.d.mts +352 -0
  83. package/dist/cli/program.d.ts +352 -0
  84. package/dist/cli/program.js +36 -0
  85. package/dist/cli/program.js.map +1 -0
  86. package/dist/cli/project-configuration.cjs +134 -0
  87. package/dist/cli/project-configuration.cjs.map +1 -0
  88. package/dist/cli/project-configuration.d.cts +64 -0
  89. package/dist/cli/project-configuration.d.mts +64 -0
  90. package/dist/cli/project-configuration.d.ts +64 -0
  91. package/dist/cli/project-configuration.js +22 -0
  92. package/dist/cli/project-configuration.js.map +1 -0
  93. package/dist/cli/record.cjs +20 -4
  94. package/dist/cli/record.cjs.map +1 -1
  95. package/dist/cli/record.d.cts +3 -3
  96. package/dist/cli/record.d.mts +3 -3
  97. package/dist/cli/record.d.ts +3 -3
  98. package/dist/cli.cjs +19 -3130
  99. package/dist/cli.cjs.map +1 -1
  100. package/dist/cli.d.cts +2 -148
  101. package/dist/cli.d.mts +2 -148
  102. package/dist/cli.d.ts +2 -148
  103. package/dist/cli.js +22 -30
  104. package/dist/context/assert-first.cjs +20 -15
  105. package/dist/context/assert-first.cjs.map +1 -1
  106. package/dist/eval/record/verdict.cjs +3 -2
  107. package/dist/eval/record/verdict.cjs.map +1 -1
  108. package/dist/experiment/host/index.cjs +1 -6
  109. package/dist/experiment/host/index.cjs.map +1 -1
  110. package/dist/experiment/host/index.d.cts +1 -0
  111. package/dist/experiment/host/index.d.mts +1 -0
  112. package/dist/experiment/host/index.d.ts +1 -0
  113. package/dist/load-config.cjs +13 -4
  114. package/dist/load-config.cjs.map +1 -1
  115. package/dist/load-config.d.cts +4 -3
  116. package/dist/load-config.d.mts +4 -3
  117. package/dist/load-config.d.ts +4 -3
  118. package/dist/load-config.js +4 -2
  119. package/dist/o11y/parsers/codex.cjs +29 -7
  120. package/dist/o11y/parsers/codex.cjs.map +1 -1
  121. package/dist/record/codec/core.d.cts +0 -2
  122. package/dist/record/codec/core.d.mts +0 -2
  123. package/dist/record/codec/core.d.ts +0 -2
  124. package/dist/record/codec/identifiers.cjs +2 -3
  125. package/dist/record/codec/identifiers.cjs.map +1 -1
  126. package/dist/record/codec/identifiers.d.cts +1 -2
  127. package/dist/record/codec/identifiers.d.mts +1 -2
  128. package/dist/record/codec/identifiers.d.ts +1 -2
  129. package/dist/record/codec/identifiers.js +10 -12
  130. package/dist/record/codec/index.js +42 -44
  131. package/dist/record/definition/attachment.cjs +1 -0
  132. package/dist/record/definition/attachment.cjs.map +1 -1
  133. package/dist/record/definition/attachment.d.cts +14 -0
  134. package/dist/record/definition/attachment.d.mts +14 -0
  135. package/dist/record/definition/attachment.d.ts +14 -0
  136. package/dist/record/family/assertions-v1.cjs +104 -0
  137. package/dist/record/family/assertions-v1.cjs.map +1 -0
  138. package/dist/record/family/assertions-v1.d.cts +2 -0
  139. package/dist/record/family/assertions-v1.d.mts +2 -0
  140. package/dist/record/family/assertions-v1.d.ts +2 -0
  141. package/dist/record/family/assertions-v1.js +6 -0
  142. package/dist/record/family/assertions-v1.js.map +1 -0
  143. package/dist/record/family/assertions.cjs +16 -5
  144. package/dist/record/family/assertions.cjs.map +1 -1
  145. package/dist/record/family/assertions.d.cts +510 -56
  146. package/dist/record/family/assertions.d.mts +510 -56
  147. package/dist/record/family/assertions.d.ts +510 -56
  148. package/dist/record/family/assertions.js +14 -10
  149. package/dist/record/family/catalog.cjs +17 -1
  150. package/dist/record/family/catalog.cjs.map +1 -1
  151. package/dist/record/family/catalog.d.cts +1292 -104
  152. package/dist/record/family/catalog.d.mts +1292 -104
  153. package/dist/record/family/catalog.d.ts +1292 -104
  154. package/dist/record/family/catalog.js +22 -20
  155. package/dist/record/family/index.js +144 -138
  156. package/dist/record/family/observability-v1.cjs +5 -0
  157. package/dist/record/family/observability-v1.cjs.map +1 -1
  158. package/dist/record/family/observability.cjs +1 -1
  159. package/dist/record/family/observability.cjs.map +1 -1
  160. package/dist/record/host/runtime.cjs +323 -173
  161. package/dist/record/host/runtime.cjs.map +1 -1
  162. package/dist/record/host/types.cjs.map +1 -1
  163. package/dist/record/host/types.d.cts +9 -7
  164. package/dist/record/host/types.d.mts +9 -7
  165. package/dist/record/host/types.d.ts +9 -7
  166. package/dist/record/model/core.cjs.map +1 -1
  167. package/dist/record/model/core.d.cts +1 -2
  168. package/dist/record/model/core.d.mts +1 -2
  169. package/dist/record/model/core.d.ts +1 -2
  170. package/dist/record/model/definition.cjs +1 -2
  171. package/dist/record/model/definition.cjs.map +1 -1
  172. package/dist/record/model/definition.d.cts +1 -7
  173. package/dist/record/model/definition.d.mts +1 -7
  174. package/dist/record/model/definition.d.ts +1 -7
  175. package/dist/record/model/identifiers.cjs +2 -3
  176. package/dist/record/model/identifiers.cjs.map +1 -1
  177. package/dist/record/model/identifiers.d.cts +1 -3
  178. package/dist/record/model/identifiers.d.mts +1 -3
  179. package/dist/record/model/identifiers.d.ts +1 -3
  180. package/dist/record/model/identifiers.js +36 -38
  181. package/dist/record/model/index.js +60 -62
  182. package/dist/record/platform/node.cjs +17 -7
  183. package/dist/record/platform/node.cjs.map +1 -1
  184. package/dist/record/platform/services.cjs.map +1 -1
  185. package/dist/record/platform/services.d.cts +8 -3
  186. package/dist/record/platform/services.d.mts +8 -3
  187. package/dist/record/platform/services.d.ts +8 -3
  188. package/dist/record/reader/format.cjs +16 -65
  189. package/dist/record/reader/format.cjs.map +1 -1
  190. package/dist/record/reader/format.d.cts +5 -9
  191. package/dist/record/reader/format.d.mts +5 -9
  192. package/dist/record/reader/format.d.ts +5 -9
  193. package/dist/record/reader/index.js +10 -8
  194. package/dist/record/reader/runtime.cjs +63 -32
  195. package/dist/record/reader/runtime.cjs.map +1 -1
  196. package/dist/record/reader/runtime.d.cts +40 -4
  197. package/dist/record/reader/runtime.d.mts +40 -4
  198. package/dist/record/reader/runtime.d.ts +40 -4
  199. package/dist/record/reader/runtime.js +6 -4
  200. package/dist/report/assets/enhance.js +5 -5
  201. package/dist/report/assets/styles.css +186 -24
  202. package/dist/report/built-in/result-components.cjs +8 -5
  203. package/dist/report/built-in/result-components.cjs.map +1 -1
  204. package/dist/report/built-in/standard.cjs +3 -0
  205. package/dist/report/built-in/standard.cjs.map +1 -1
  206. package/dist/report/built-in/standard.d.cts +2 -0
  207. package/dist/report/built-in/standard.d.mts +2 -0
  208. package/dist/report/built-in/standard.d.ts +2 -0
  209. package/dist/report/client-dist/app.js +53 -0
  210. package/dist/report/components/attempt-detail/compute.cjs +106 -231
  211. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  212. package/dist/report/components/attempt-detail/compute.d.cts +9 -43
  213. package/dist/report/components/attempt-detail/compute.d.mts +9 -43
  214. package/dist/report/components/attempt-detail/compute.d.ts +9 -43
  215. package/dist/report/components/attempt-detail/compute.js +2 -4
  216. package/dist/report/components/attempt-detail/content.cjs +3 -4
  217. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  218. package/dist/report/components/attempt-detail/validate.cjs +44 -2
  219. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  220. package/dist/report/components/entity-lists/compute.cjs +9 -15
  221. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  222. package/dist/report/components/entity-lists/content.cjs +53 -40
  223. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  224. package/dist/report/components/entity-lists/index.cjs +1 -3
  225. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  226. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  227. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  228. package/dist/report/definition/cell.cjs +14 -7
  229. package/dist/report/definition/cell.cjs.map +1 -1
  230. package/dist/report/definition/cell.d.cts +4 -0
  231. package/dist/report/definition/cell.d.mts +4 -0
  232. package/dist/report/definition/cell.d.ts +4 -0
  233. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  234. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  235. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  236. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  237. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  238. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  239. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  240. package/dist/report/definition/primitives.cjs +14 -1
  241. package/dist/report/definition/primitives.cjs.map +1 -1
  242. package/dist/report/definition/report.cjs +16 -8
  243. package/dist/report/definition/report.cjs.map +1 -1
  244. package/dist/report/definition/report.d.cts +6 -0
  245. package/dist/report/definition/report.d.mts +6 -0
  246. package/dist/report/definition/report.d.ts +6 -0
  247. package/dist/report/definition/table-text.cjs +12 -3
  248. package/dist/report/definition/table-text.cjs.map +1 -1
  249. package/dist/report/definition/table-text.d.cts +6 -1
  250. package/dist/report/definition/table-text.d.mts +6 -1
  251. package/dist/report/definition/table-text.d.ts +6 -1
  252. package/dist/report/execution/model.cjs +6 -14
  253. package/dist/report/execution/model.cjs.map +1 -1
  254. package/dist/report/execution/model.d.cts +5 -10
  255. package/dist/report/execution/model.d.mts +5 -10
  256. package/dist/report/execution/model.d.ts +5 -10
  257. package/dist/report/execution/model.js +6 -6
  258. package/dist/report/execution/paths.cjs +0 -11
  259. package/dist/report/execution/paths.cjs.map +1 -1
  260. package/dist/report/execution/paths.d.cts +0 -1
  261. package/dist/report/execution/paths.d.mts +0 -1
  262. package/dist/report/execution/paths.d.ts +0 -1
  263. package/dist/report/execution/paths.js +6 -8
  264. package/dist/report/host/execute.cjs +13 -22
  265. package/dist/report/host/execute.cjs.map +1 -1
  266. package/dist/report/host/execute.d.cts +1 -4
  267. package/dist/report/host/execute.d.mts +1 -4
  268. package/dist/report/host/execute.d.ts +1 -4
  269. package/dist/report/host/from-record.cjs +3 -0
  270. package/dist/report/host/from-record.cjs.map +1 -1
  271. package/dist/report/host/from-record.d.cts +4 -1
  272. package/dist/report/host/from-record.d.mts +4 -1
  273. package/dist/report/host/from-record.d.ts +4 -1
  274. package/dist/report/host/site-assets.cjs +1 -2
  275. package/dist/report/host/site-assets.cjs.map +1 -1
  276. package/dist/report/host/site-assets.d.cts +0 -1
  277. package/dist/report/host/site-assets.d.mts +0 -1
  278. package/dist/report/host/site-assets.d.ts +0 -1
  279. package/dist/report/host/site-assets.js +2 -4
  280. package/dist/report/host/static.cjs +71 -346
  281. package/dist/report/host/static.cjs.map +1 -1
  282. package/dist/report/host/static.d.cts +1 -3
  283. package/dist/report/host/static.d.mts +1 -3
  284. package/dist/report/host/static.d.ts +1 -3
  285. package/dist/report/host/static.js +2 -2
  286. package/dist/report/host/view-session.cjs.map +1 -1
  287. package/dist/report/host/view-session.d.cts +1 -1
  288. package/dist/report/host/view-session.d.mts +1 -1
  289. package/dist/report/host/view-session.d.ts +1 -1
  290. package/dist/report/model/locale.cjs +1 -1
  291. package/dist/report/model/locale.cjs.map +1 -1
  292. package/dist/report/model/locale.d.cts +1 -1
  293. package/dist/report/model/locale.d.mts +1 -1
  294. package/dist/report/model/locale.d.ts +1 -1
  295. package/dist/report/model/pricing.cjs +2 -2
  296. package/dist/report/model/pricing.cjs.map +1 -1
  297. package/dist/report/react/enhance.js +5 -5
  298. package/dist/report/react/styles.css +186 -24
  299. package/dist/runner/adoption.cjs +4 -7
  300. package/dist/runner/adoption.cjs.map +1 -1
  301. package/dist/runner/feedback/failure.cjs +77 -2
  302. package/dist/runner/feedback/failure.cjs.map +1 -1
  303. package/dist/runner/feedback/failure.d.cts +2 -1
  304. package/dist/runner/feedback/failure.d.mts +2 -1
  305. package/dist/runner/feedback/failure.d.ts +2 -1
  306. package/dist/runner/project-current.cjs +2 -13
  307. package/dist/runner/project-current.cjs.map +1 -1
  308. package/dist/runner/project-current.d.cts +4 -2
  309. package/dist/runner/project-current.d.mts +4 -2
  310. package/dist/runner/project-current.d.ts +4 -2
  311. package/dist/runner/reporters/braintrust.cjs +7 -7
  312. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  313. package/dist/runner/reuse-readback.cjs +3 -4
  314. package/dist/runner/reuse-readback.cjs.map +1 -1
  315. package/dist/runner/run.cjs +5 -2
  316. package/dist/runner/run.cjs.map +1 -1
  317. package/dist/view/server.cjs +2 -37
  318. package/dist/view/server.cjs.map +1 -1
  319. package/dist/view/server.d.cts +0 -3
  320. package/dist/view/server.d.mts +0 -3
  321. package/dist/view/server.d.ts +0 -3
  322. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  323. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  324. package/docs-site/zh/reference/report-components.mdx +2 -2
  325. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  326. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  327. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  328. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  329. package/docs-site/zh/tutorials/theming.mdx +2 -2
  330. package/package.json +4 -6
  331. package/dist/record/migration/index.cjs +0 -5
  332. package/dist/record/migration/index.cjs.map +0 -1
  333. package/dist/record/migration/index.d.cts +0 -11
  334. package/dist/record/migration/index.d.mts +0 -11
  335. package/dist/record/migration/index.d.ts +0 -11
  336. package/dist/record/migration/index.js +0 -6
  337. package/dist/record/migration/index.js.map +0 -1
  338. package/dist/report/host/site-runtime.cjs +0 -92
  339. package/dist/report/host/site-runtime.cjs.map +0 -1
  340. package/dist/report/host/site-runtime.d.cts +0 -9
  341. package/dist/report/host/site-runtime.d.mts +0 -9
  342. package/dist/report/host/site-runtime.d.ts +0 -9
  343. package/dist/report/host/site-runtime.js +0 -10
  344. package/dist/report/host/site-runtime.js.map +0 -1
  345. package/dist/view/client-dist/app.css +0 -2
  346. package/dist/view/client-dist/app.js +0 -49
  347. package/dist/view/data.cjs +0 -3
  348. package/dist/view/data.cjs.map +0 -1
  349. package/dist/view/data.d.cts +0 -9
  350. package/dist/view/data.d.mts +0 -9
  351. package/dist/view/data.d.ts +0 -9
  352. package/dist/view/data.js +0 -4
  353. package/dist/view/data.js.map +0 -1
  354. package/dist/view/index.cjs +0 -24
  355. package/dist/view/index.cjs.map +0 -1
  356. package/dist/view/index.d.cts +0 -9
  357. package/dist/view/index.d.mts +0 -9
  358. package/dist/view/index.d.ts +0 -9
  359. package/dist/view/index.js +0 -28
  360. package/dist/view/index.js.map +0 -1
  361. package/dist/view/report-view-cache.cjs +0 -200
  362. package/dist/view/report-view-cache.cjs.map +0 -1
  363. package/dist/view/report-view-cache.d.cts +0 -67
  364. package/dist/view/report-view-cache.d.mts +0 -67
  365. package/dist/view/report-view-cache.d.ts +0 -67
  366. package/dist/view/report-view-cache.js +0 -8
  367. package/dist/view/report-view-cache.js.map +0 -1
  368. package/dist/view/shared/types.cjs +0 -3
  369. package/dist/view/shared/types.cjs.map +0 -1
  370. package/dist/view/shared/types.d.cts +0 -51
  371. package/dist/view/shared/types.d.mts +0 -51
  372. package/dist/view/shared/types.d.ts +0 -51
  373. package/dist/view/shared/types.js +0 -4
  374. package/dist/view/shared/types.js.map +0 -1
  375. package/dist/view/site.cjs +0 -32
  376. package/dist/view/site.cjs.map +0 -1
  377. package/dist/view/site.d.cts +0 -24
  378. package/dist/view/site.d.mts +0 -24
  379. package/dist/view/site.d.ts +0 -24
  380. package/dist/view/site.js +0 -8
  381. package/dist/view/site.js.map +0 -1
  382. package/dist/view/styles.css +0 -170
  383. package/dist/view/template.html +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-streams.js","sourceRoot":"","sources":["sdk-streams.ts"],"names":[],"mappings":"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","sourcesContent":["// SDK 原生事件流 → 标准 StreamEvent 的官方转换器(+ 通用 SSE 读帧器)。\n//\n// 定位:各 agent SDK 的流式协议(Claude Agent SDK 的 `SDKMessage`、pi-agent-core 的\n// `AgentEvent`、Codex SDK 的 `ThreadEvent`)是 SDK 定义的通用协议,不是某个应用的私有格式——\n// 这层映射知识属于 niceeval 官方包,adapter 里只该剩传输粘合(应用把流放在哪个端点、\n// 审批走什么端点)。类型全部用结构化的 *Like 声明(同 turnFromAiSdk 的先例),不依赖任何 SDK 包。\n//\n// 用法(以 Claude Agent SDK 为例):\n//\n// ```typescript\n// import { sseJsonFrames, createClaudeSdkEventStream } from \"niceeval/adapter\";\n//\n// const frames = sseJsonFrames<SDKMessage>(res.body);\n// const stream = createClaudeSdkEventStream();\n// for (;;) {\n// const frame = await frames.next();\n// if (frame === null) break;\n// events.push(...stream.add(frame)); // 逐帧翻译;认不出的帧返回 []\n// }\n// return { status: stream.failed ? \"failed\" : \"completed\", events, usage: stream.usage };\n// ```\nimport type { CommandProjection, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { CODEX_TOOL_ALIASES } from \"../o11y/parsers/codex.ts\";\nimport { CLAUDE_TOOL_ALIASES } from \"../o11y/parsers/claude-code.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\n// ───────────────────────── 通用 SSE 读帧器 ─────────────────────────\nexport interface SseFrameCursor<T> {\n /** 下一个 `data:` JSON 帧;流结束返回 null。`data: [DONE]` 哨兵帧自动跳过。 */\n next(): Promise<T | null>;\n}\n/** 标准 SSE(`data: {...}\\n\\n`)→ 逐帧 JSON。各 adapter 不用再手写 buffer 状态机。 */\nexport function sseJsonFrames<T>(body: ReadableStream<Uint8Array>): SseFrameCursor<T> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n async function next(): Promise<T | null> {\n for (;;) {\n const sepIndex = buffer.indexOf(\"\\n\\n\");\n if (sepIndex !== -1) {\n const rawEvent = buffer.slice(0, sepIndex);\n buffer = buffer.slice(sepIndex + 2);\n const line = rawEvent.split(\"\\n\").find((l) => l.startsWith(\"data: \"));\n if (!line)\n continue;\n const payload = line.slice(\"data: \".length);\n if (payload === \"[DONE]\")\n continue;\n return JSON.parse(payload) as T;\n }\n const { value, done } = await reader.read();\n if (done)\n return null;\n buffer += decoder.decode(value, { stream: true });\n }\n }\n return { next };\n}\nfunction isRecord(v: unknown): v is globalThis.Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n/** Claude Agent SDK 的原生 Bash tool 只交付 shell source,不交付 argv。 */\nfunction commandProjectionForClaudeSdkTool(name: string): CommandProjection | undefined {\n return name === \"Bash\" ? opaqueCommandProjection(\"unsupported-protocol\") : undefined;\n}\n// ───────────────────────── Claude Agent SDK:SDKMessage ─────────────────────────\n/** 只声明转换器要读的字段;真实的 SDKMessage 直接喂进来即可。 */\nexport interface ClaudeSdkMessageLike {\n type: string;\n subtype?: string;\n session_id?: string;\n tool_use_id?: string;\n is_error?: boolean;\n num_turns?: number;\n total_cost_usd?: number;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cache_read_input_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n };\n message?: {\n content?: unknown;\n };\n [key: string]: unknown;\n}\nexport interface ClaudeSdkStream {\n /** 逐帧喂 `SDKMessage`,返回这一帧派生的标准事件;认不出的帧(stream_event 等)返回 []。 */\n add(message: ClaudeSdkMessageLike): StreamEvent[];\n /** `system`/`init` 帧带回的 session_id(首帧之后可读),回写 `ctx.session.id` 用。 */\n readonly sessionId: string | undefined;\n /** `result` 帧的聚合用量。 */\n readonly usage: Usage | undefined;\n /** `result` 帧报了 is_error。 */\n readonly failed: boolean;\n /**\n * 拒绝审批后续读前登记:该 tool_use 的 `tool_result` / `permission_denied` 落成\n * `status: \"rejected\"`(而不是 failed),且两种帧只产一条 operation.finished。\n */\n markRejected(toolUseId: string): void;\n}\n/**\n * Claude Agent SDK 消息流(`system` / `assistant` / `user` / `result`)→ 标准事件。\n * `assistant` 的 text/thinking/tool_use 块 → message / thinking / operation.started;`user` 的\n * tool_result 块 → operation.finished;`system`/`permission_denied` → rejected;`stream_event`\n * (逐 token 渲染)整个忽略。HITL 的停轮判定(哪个工具被门控)是应用侧的知识,不在这里——\n * 扫描 add() 返回的 operation.started 自行决定。\n */\nexport function createClaudeSdkEventStream(): ClaudeSdkStream {\n let sessionId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n const resolvedCallIds = new Set<string>();\n const rejected = new Set<string>();\n const toolResultText = (content: unknown): string | undefined => {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n return content\n .filter((b): b is {\n type: \"text\";\n text: string;\n } => isRecord(b) && b.type === \"text\" && typeof b.text === \"string\")\n .map((b) => b.text)\n .join(\"\");\n }\n return undefined;\n };\n return {\n get sessionId() {\n return sessionId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolUseId) {\n rejected.add(toolUseId);\n },\n add(frame) {\n const events: StreamEvent[] = [];\n switch (frame.type) {\n case \"system\": {\n if (frame.subtype === \"init\" && typeof frame.session_id === \"string\") {\n sessionId ??= frame.session_id;\n }\n else if (frame.subtype === \"permission_denied\" && typeof frame.tool_use_id === \"string\") {\n if (!resolvedCallIds.has(frame.tool_use_id)) {\n resolvedCallIds.add(frame.tool_use_id);\n events.push({ type: \"operation.finished\", operationId: frame.tool_use_id, kind: \"tool\", status: \"rejected\" });\n }\n }\n break;\n }\n case \"assistant\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block))\n continue;\n if (block.type === \"text\" && typeof block.text === \"string\" && block.text) {\n events.push({ type: \"message\", role: \"assistant\", text: block.text });\n }\n else if (block.type === \"thinking\" && typeof block.thinking === \"string\" && block.thinking) {\n events.push({ type: \"thinking\", text: block.thinking });\n }\n else if (block.type === \"tool_use\" && typeof block.id === \"string\" && typeof block.name === \"string\") {\n const command = commandProjectionForClaudeSdkTool(block.name);\n events.push({\n type: \"operation.started\",\n operationId: block.id,\n operation: {\n kind: \"tool\",\n name: block.name,\n input: block.input as JsonValue,\n tool: normalizeToolName(block.name, CLAUDE_TOOL_ALIASES),\n ...(command === undefined ? {} : { command }),\n },\n });\n }\n }\n break;\n }\n case \"user\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block) || block.type !== \"tool_result\" || typeof block.tool_use_id !== \"string\")\n continue;\n if (resolvedCallIds.has(block.tool_use_id))\n continue;\n resolvedCallIds.add(block.tool_use_id);\n events.push({\n type: \"operation.finished\",\n operationId: block.tool_use_id,\n kind: \"tool\",\n output: toolResultText(block.content) as JsonValue,\n status: rejected.has(block.tool_use_id) ? \"rejected\" : block.is_error ? \"failed\" : \"completed\",\n });\n }\n break;\n }\n case \"result\": {\n failed = frame.is_error === true;\n if (frame.usage) {\n usage = {\n inputTokens: frame.usage.input_tokens,\n outputTokens: frame.usage.output_tokens,\n cacheReadTokens: frame.usage.cache_read_input_tokens ?? undefined,\n cacheCreationTokens: frame.usage.cache_creation_input_tokens ?? undefined,\n requests: frame.num_turns,\n costUSD: frame.total_cost_usd,\n };\n }\n break;\n }\n // stream_event(逐 token 渲染)与其它系统/生命周期消息:无对应 StreamEvent。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── pi-agent-core:AgentEvent ─────────────────────────\nexport interface PiAgentEventLike {\n type: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n /** content 在 user 消息上是 string、assistant 消息上是 parts 数组——按 unknown 收,防御式解析。 */\n message?: {\n role?: string;\n content?: unknown;\n /** assistant 消息的收尾原因;\"error\" / \"aborted\" 表示这条消息以失败告终。 */\n stopReason?: string;\n /** stopReason 为 \"error\" 时的错误说明。 */\n errorMessage?: string;\n usage?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: {\n total: number;\n };\n };\n };\n /** `message_update` 帧携带的增量事件(text_delta / thinking_delta 等)——只读 type/delta,防御式解析。 */\n assistantMessageEvent?: {\n type?: string;\n delta?: unknown;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\nexport interface PiAgentStream {\n /** 逐帧喂 `AgentEvent`,返回这一帧派生的标准事件;生命周期帧(turn_start 等)返回 []。 */\n add(event: PiAgentEventLike): StreamEvent[];\n /** assistant `message_end` 逐条累加的用量。 */\n readonly usage: Usage | undefined;\n /** assistant 消息以 stopReason \"error\" / \"aborted\" 收尾过。 */\n readonly failed: boolean;\n /** 拒绝审批后续读前登记:该调用 `tool_execution_end` 的 isError 判成 \"rejected\" 而非 \"failed\"。 */\n markRejected(toolCallId: string): void;\n}\n/**\n * pi-agent-core 事件流(`message_start` / `message_update` / `message_end` /\n * `tool_execution_start` / `tool_execution_end`)→ 标准事件。消息三段式聚合成一条:\n * message_start 清空增量缓冲、message_update 的 text_delta / thinking_delta 逐段累加、\n * message_end 落地成 message / thinking(优先取 end 帧的完整 content,缺了用累加的增量兜底);\n * 只有 start/delta 的截断流不产出半条消息。message_end 同时累加 usage;assistant 消息以\n * stopReason \"error\" / \"aborted\" 收尾时记失败(`failed`)并发一条 error 事件。\n * tool_execution_start/end → operation.started / operation.finished。\n */\nexport function createPiAgentEventStream(): PiAgentStream {\n let usage: Usage | undefined;\n let failed = false;\n // message_start/update 累加的增量缓冲;message_end 落地后清空,截断流(无 end)不落地。\n let deltaText = \"\";\n let deltaThinking = \"\";\n const rejected = new Set<string>();\n const partText = (event: PiAgentEventLike, type: \"text\" | \"thinking\"): string => {\n if (event.message?.role !== \"assistant\" || !Array.isArray(event.message.content))\n return \"\";\n return event.message.content\n .filter((part): part is globalThis.Record<string, unknown> => isRecord(part) && part.type === type)\n .map((part) => {\n const v = type === \"text\" ? part.text : part.thinking;\n return typeof v === \"string\" ? v : \"\";\n })\n .join(\"\");\n };\n return {\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolCallId) {\n rejected.add(toolCallId);\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"message_start\": {\n // 新消息开始:上一条没等到 message_end 的增量作废(不落地半条消息)。\n deltaText = \"\";\n deltaThinking = \"\";\n break;\n }\n case \"message_update\": {\n const e = event.assistantMessageEvent;\n if (isRecord(e) && typeof e.delta === \"string\") {\n if (e.type === \"text_delta\")\n deltaText += e.delta;\n else if (e.type === \"thinking_delta\")\n deltaThinking += e.delta;\n }\n break;\n }\n case \"message_end\": {\n // 优先取 end 帧的完整 content;缺了(部分传输只带增量)用累加的 delta 兜底。\n const text = partText(event, \"text\") || (event.message?.role === \"assistant\" ? deltaText : \"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n const thinking = partText(event, \"thinking\") || (event.message?.role === \"assistant\" ? deltaThinking : \"\");\n if (thinking)\n events.push({ type: \"thinking\", text: thinking });\n deltaText = \"\";\n deltaThinking = \"\";\n if (event.message?.role === \"assistant\") {\n const stopReason = event.message.stopReason;\n if (stopReason === \"error\" || stopReason === \"aborted\") {\n failed = true;\n events.push({ type: \"error\", message: event.message.errorMessage ?? `pi agent stopReason=${stopReason}` });\n }\n }\n const u = event.message?.role === \"assistant\" ? event.message.usage : undefined;\n if (u) {\n // pi computes u.cost from its own model price table. That estimate\n // is not provider-observed billing and must not enter Usage.costUSD.\n usage = {\n inputTokens: (usage?.inputTokens ?? 0) + u.input,\n outputTokens: (usage?.outputTokens ?? 0) + u.output,\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + u.cacheRead,\n cacheCreationTokens: (usage?.cacheCreationTokens ?? 0) + u.cacheWrite,\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"tool_execution_start\": {\n if (typeof event.toolCallId === \"string\" && typeof event.toolName === \"string\") {\n events.push({\n type: \"operation.started\",\n operationId: event.toolCallId,\n operation: { kind: \"tool\", name: event.toolName, input: event.args as JsonValue },\n });\n }\n break;\n }\n case \"tool_execution_end\": {\n if (typeof event.toolCallId === \"string\") {\n const status = event.isError ? (rejected.has(event.toolCallId) ? \"rejected\" : \"failed\") : \"completed\";\n events.push({ type: \"operation.finished\", operationId: event.toolCallId, kind: \"tool\", output: event.result as JsonValue, status });\n }\n break;\n }\n // agent_start / turn_start / turn_end / tool_execution_update / agent_end:\n // 无对应 StreamEvent(消息文本统一在 message_end 落地)。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── Codex SDK:ThreadEvent ─────────────────────────\nexport interface CodexThreadEventLike {\n type: string;\n thread_id?: string;\n item?: {\n type?: string;\n text?: string;\n message?: string;\n [key: string]: unknown;\n };\n error?: {\n message: string;\n };\n [key: string]: unknown;\n}\nexport interface CodexThreadStream {\n /**\n * 逐帧喂 `ThreadEvent`,返回标准事件:消息类(agent_message → message、reasoning → thinking、\n * error item / turn.failed → error)+ 工具项(command_execution / mcp_tool_call / web_search /\n * file_change → operation.started + operation.finished,附规范工具名 `tool`,如 command_execution →\n * `\"shell\"`,供 `calledTool(\"shell\")` 这类跨 agent 断言命中)。usage 从 `turn.completed` 聚合,经 `usage` 读。\n * 断言依据全部来自这条流;codex CLI 的原生 OTLP span 只用于瀑布图(spanMapper: mapCodexSpans)。\n */\n add(event: CodexThreadEventLike): StreamEvent[];\n /** `thread.started` 带回的 thread_id,回写 `ctx.session.id` 用。 */\n readonly threadId: string | undefined;\n /** `turn.completed` 聚合的用量(input/cached/output tokens)。 */\n readonly usage: Usage | undefined;\n /** turn.failed / error item 出现过。 */\n readonly failed: boolean;\n}\n/** Codex SDK 线程事件流(`thread.started` / `item.*` / `turn.completed` / `turn.failed`)→ 标准事件。 */\nexport function createCodexThreadEventStream(): CodexThreadStream {\n let threadId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n // item.started 已发 operation.started 的 id;item.completed 时不重发,只补 result。\n const startedCallIds = new Set<string>();\n let synth = 0;\n const callIdOf = (item: globalThis.Record<string, unknown>, prefix: string): string => {\n const id = item.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : `${prefix}_${++synth}`;\n };\n // 工具项 → operation.started(+completed 时的 operation.finished)。与 o11y/parsers/codex.ts 的\n // transcript 映射保持同一套语义(字段名以 codex exec --json 的 ThreadItem 为准),\n // 包括规范工具名 tool:少了它 derive 只能落 name=\"unknown\",calledTool(\"shell\") 这类\n // 跨 agent 规范名断言在 SDK 流路径上会静默失配(2026-07-09 CI 实红)。\n const handleToolItem = (item: globalThis.Record<string, unknown>, isCompleted: boolean): StreamEvent[] => {\n const events: StreamEvent[] = [];\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n if (startedCallIds.has(callId))\n return;\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n switch (item.type) {\n case \"command_execution\": {\n const callId = callIdOf(item, \"cmd\");\n emitCall(callId, \"command_execution\", { command: item.command ?? null } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n if (isCompleted) {\n const exit = item.exit_code;\n const success = exit === 0 || (exit == null && item.status !== \"failed\" && item.status !== \"error\");\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: { output: (item.aggregated_output ?? null) as JsonValue, exit_code: (exit ?? null) as JsonValue },\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"mcp_tool_call\": {\n const callId = callIdOf(item, \"mcp\");\n const tool = String(item.tool ?? \"unknown\");\n const name = typeof item.server === \"string\" ? `${item.server}.${tool}` : tool;\n emitCall(callId, name, (item.arguments ?? null) as JsonValue, normalizeToolName(tool, CODEX_TOOL_ALIASES), notCommandProjection());\n if (isCompleted) {\n const success = !item.error && item.status !== \"failed\";\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (item.result ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"web_search\": {\n const callId = callIdOf(item, \"web\");\n emitCall(callId, \"web_search\", { query: item.query ?? null } as JsonValue, \"web_search\", notCommandProjection());\n if (isCompleted) {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: null, status: \"completed\" });\n }\n return events;\n }\n case \"file_change\": {\n // 补丁类只在 completed 落一次:changes 里每个文件一对 called/result。\n if (!isCompleted)\n return events;\n const baseId = callIdOf(item, \"patch\");\n const changes = Array.isArray(item.changes) ? item.changes : [];\n changes.forEach((ch, i) => {\n const callId = `${baseId}#${i}`;\n const change = isRecord(ch) ? { path: ch.path ?? null, kind: ch.kind ?? null } : {};\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: \"file_change\",\n input: change as JsonValue,\n tool: \"file_edit\",\n command: notCommandProjection(),\n },\n });\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: change as JsonValue, status: \"completed\" });\n });\n return events;\n }\n default:\n return events;\n }\n };\n return {\n get threadId() {\n return threadId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"thread.started\": {\n if (typeof event.thread_id === \"string\")\n threadId ??= event.thread_id;\n break;\n }\n case \"item.started\": {\n if (event.item)\n events.push(...handleToolItem(event.item, false));\n break;\n }\n case \"item.completed\": {\n const item = event.item;\n if (!item)\n break;\n if (item.type === \"agent_message\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"message\", role: \"assistant\", text: item.text });\n }\n else if (item.type === \"reasoning\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"thinking\", text: item.text });\n }\n else if (item.type === \"error\" && typeof item.message === \"string\") {\n failed = true;\n events.push({ type: \"error\", message: item.message });\n }\n else {\n events.push(...handleToolItem(item, true));\n }\n break;\n }\n case \"turn.completed\": {\n const u = event.usage;\n if (isRecord(u)) {\n const num = (v: unknown): number => (typeof v === \"number\" ? v : 0);\n usage = {\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/codex-sdk/cost.md)\n inputTokens: (usage?.inputTokens ?? 0) + Math.max(0, num(u.input_tokens) - num(u.cached_input_tokens)),\n outputTokens: (usage?.outputTokens ?? 0) + num(u.output_tokens),\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + num(u.cached_input_tokens),\n // codex-rs TokenUsage 结构体同一份字段(与 o11y/parsers/codex.ts 的\n // transcript 解析同源),只在这次 turn 真的带回时累加。\n ...(typeof u.reasoning_output_tokens === \"number\" || usage?.reasoningTokens !== undefined\n ? { reasoningTokens: (usage?.reasoningTokens ?? 0) + num(u.reasoning_output_tokens) }\n : {}),\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"turn.failed\": {\n failed = true;\n if (event.error?.message)\n events.push({ type: \"error\", message: event.error.message });\n break;\n }\n // item.updated(中间态)/ turn.started:忽略,等 completed。\n default:\n break;\n }\n return events;\n },\n };\n}\n"]}
1
+ {"version":3,"file":"sdk-streams.js","sourceRoot":"","sources":["sdk-streams.ts"],"names":[],"mappings":"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","sourcesContent":["// SDK 原生事件流 → 标准 StreamEvent 的官方转换器(+ 通用 SSE 读帧器)。\n//\n// 定位:各 agent SDK 的流式协议(Claude Agent SDK 的 `SDKMessage`、pi-agent-core 的\n// `AgentEvent`、Codex SDK 的 `ThreadEvent`)是 SDK 定义的通用协议,不是某个应用的私有格式——\n// 这层映射知识属于 niceeval 官方包,adapter 里只该剩传输粘合(应用把流放在哪个端点、\n// 审批走什么端点)。类型全部用结构化的 *Like 声明(同 turnFromAiSdk 的先例),不依赖任何 SDK 包。\n//\n// 用法(以 Claude Agent SDK 为例):\n//\n// ```typescript\n// import { sseJsonFrames, createClaudeSdkEventStream } from \"niceeval/adapter\";\n//\n// const frames = sseJsonFrames<SDKMessage>(res.body);\n// const stream = createClaudeSdkEventStream();\n// for (;;) {\n// const frame = await frames.next();\n// if (frame === null) break;\n// events.push(...stream.add(frame)); // 逐帧翻译;认不出的帧返回 []\n// }\n// return { status: stream.failed ? \"failed\" : \"completed\", events, usage: stream.usage };\n// ```\nimport type { CommandProjection, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { CODEX_TOOL_ALIASES } from \"../o11y/parsers/codex.ts\";\nimport { CLAUDE_TOOL_ALIASES } from \"../o11y/parsers/claude-code.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\n// ───────────────────────── 通用 SSE 读帧器 ─────────────────────────\nexport interface SseFrameCursor<T> {\n /** 下一个 `data:` JSON 帧;流结束返回 null。`data: [DONE]` 哨兵帧自动跳过。 */\n next(): Promise<T | null>;\n}\n/** 标准 SSE(`data: {...}\\n\\n`)→ 逐帧 JSON。各 adapter 不用再手写 buffer 状态机。 */\nexport function sseJsonFrames<T>(body: ReadableStream<Uint8Array>): SseFrameCursor<T> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n async function next(): Promise<T | null> {\n for (;;) {\n const sepIndex = buffer.indexOf(\"\\n\\n\");\n if (sepIndex !== -1) {\n const rawEvent = buffer.slice(0, sepIndex);\n buffer = buffer.slice(sepIndex + 2);\n const line = rawEvent.split(\"\\n\").find((l) => l.startsWith(\"data: \"));\n if (!line)\n continue;\n const payload = line.slice(\"data: \".length);\n if (payload === \"[DONE]\")\n continue;\n return JSON.parse(payload) as T;\n }\n const { value, done } = await reader.read();\n if (done)\n return null;\n buffer += decoder.decode(value, { stream: true });\n }\n }\n return { next };\n}\nfunction isRecord(v: unknown): v is globalThis.Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n/** Claude Agent SDK 的原生 Bash tool 只交付 shell source,不交付 argv。 */\nfunction commandProjectionForClaudeSdkTool(name: string): CommandProjection | undefined {\n return name === \"Bash\" ? opaqueCommandProjection(\"unsupported-protocol\") : undefined;\n}\n// ───────────────────────── Claude Agent SDK:SDKMessage ─────────────────────────\n/** 只声明转换器要读的字段;真实的 SDKMessage 直接喂进来即可。 */\nexport interface ClaudeSdkMessageLike {\n type: string;\n subtype?: string;\n session_id?: string;\n tool_use_id?: string;\n is_error?: boolean;\n num_turns?: number;\n total_cost_usd?: number;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cache_read_input_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n };\n message?: {\n content?: unknown;\n };\n [key: string]: unknown;\n}\nexport interface ClaudeSdkStream {\n /** 逐帧喂 `SDKMessage`,返回这一帧派生的标准事件;认不出的帧(stream_event 等)返回 []。 */\n add(message: ClaudeSdkMessageLike): StreamEvent[];\n /** `system`/`init` 帧带回的 session_id(首帧之后可读),回写 `ctx.session.id` 用。 */\n readonly sessionId: string | undefined;\n /** `result` 帧的聚合用量。 */\n readonly usage: Usage | undefined;\n /** `result` 帧报了 is_error。 */\n readonly failed: boolean;\n /**\n * 拒绝审批后续读前登记:该 tool_use 的 `tool_result` / `permission_denied` 落成\n * `status: \"rejected\"`(而不是 failed),且两种帧只产一条 operation.finished。\n */\n markRejected(toolUseId: string): void;\n}\n/**\n * Claude Agent SDK 消息流(`system` / `assistant` / `user` / `result`)→ 标准事件。\n * `assistant` 的 text/thinking/tool_use 块 → message / thinking / operation.started;`user` 的\n * tool_result 块 → operation.finished;`system`/`permission_denied` → rejected;`stream_event`\n * (逐 token 渲染)整个忽略。HITL 的停轮判定(哪个工具被门控)是应用侧的知识,不在这里——\n * 扫描 add() 返回的 operation.started 自行决定。\n */\nexport function createClaudeSdkEventStream(): ClaudeSdkStream {\n let sessionId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n const resolvedCallIds = new Set<string>();\n const rejected = new Set<string>();\n const toolResultText = (content: unknown): string | undefined => {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n return content\n .filter((b): b is {\n type: \"text\";\n text: string;\n } => isRecord(b) && b.type === \"text\" && typeof b.text === \"string\")\n .map((b) => b.text)\n .join(\"\");\n }\n return undefined;\n };\n return {\n get sessionId() {\n return sessionId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolUseId) {\n rejected.add(toolUseId);\n },\n add(frame) {\n const events: StreamEvent[] = [];\n switch (frame.type) {\n case \"system\": {\n if (frame.subtype === \"init\" && typeof frame.session_id === \"string\") {\n sessionId ??= frame.session_id;\n }\n else if (frame.subtype === \"permission_denied\" && typeof frame.tool_use_id === \"string\") {\n if (!resolvedCallIds.has(frame.tool_use_id)) {\n resolvedCallIds.add(frame.tool_use_id);\n events.push({ type: \"operation.finished\", operationId: frame.tool_use_id, kind: \"tool\", status: \"rejected\" });\n }\n }\n break;\n }\n case \"assistant\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block))\n continue;\n if (block.type === \"text\" && typeof block.text === \"string\" && block.text) {\n events.push({ type: \"message\", role: \"assistant\", text: block.text });\n }\n else if (block.type === \"thinking\" && typeof block.thinking === \"string\" && block.thinking) {\n events.push({ type: \"thinking\", text: block.thinking });\n }\n else if (block.type === \"tool_use\" && typeof block.id === \"string\" && typeof block.name === \"string\") {\n const command = commandProjectionForClaudeSdkTool(block.name);\n events.push({\n type: \"operation.started\",\n operationId: block.id,\n operation: {\n kind: \"tool\",\n name: block.name,\n input: block.input as JsonValue,\n tool: normalizeToolName(block.name, CLAUDE_TOOL_ALIASES),\n ...(command === undefined ? {} : { command }),\n },\n });\n }\n }\n break;\n }\n case \"user\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block) || block.type !== \"tool_result\" || typeof block.tool_use_id !== \"string\")\n continue;\n if (resolvedCallIds.has(block.tool_use_id))\n continue;\n resolvedCallIds.add(block.tool_use_id);\n events.push({\n type: \"operation.finished\",\n operationId: block.tool_use_id,\n kind: \"tool\",\n output: toolResultText(block.content) as JsonValue,\n status: rejected.has(block.tool_use_id) ? \"rejected\" : block.is_error ? \"failed\" : \"completed\",\n });\n }\n break;\n }\n case \"result\": {\n failed = frame.is_error === true;\n if (frame.usage) {\n usage = {\n inputTokens: frame.usage.input_tokens,\n outputTokens: frame.usage.output_tokens,\n cacheReadTokens: frame.usage.cache_read_input_tokens ?? undefined,\n cacheCreationTokens: frame.usage.cache_creation_input_tokens ?? undefined,\n requests: frame.num_turns,\n costUSD: frame.total_cost_usd,\n };\n }\n break;\n }\n // stream_event(逐 token 渲染)与其它系统/生命周期消息:无对应 StreamEvent。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── pi-agent-core:AgentEvent ─────────────────────────\nexport interface PiAgentEventLike {\n type: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n /** content 在 user 消息上是 string、assistant 消息上是 parts 数组——按 unknown 收,防御式解析。 */\n message?: {\n role?: string;\n content?: unknown;\n /** assistant 消息的收尾原因;\"error\" / \"aborted\" 表示这条消息以失败告终。 */\n stopReason?: string;\n /** stopReason 为 \"error\" 时的错误说明。 */\n errorMessage?: string;\n usage?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: {\n total: number;\n };\n };\n };\n /** `message_update` 帧携带的增量事件(text_delta / thinking_delta 等)——只读 type/delta,防御式解析。 */\n assistantMessageEvent?: {\n type?: string;\n delta?: unknown;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\nexport interface PiAgentStream {\n /** 逐帧喂 `AgentEvent`,返回这一帧派生的标准事件;生命周期帧(turn_start 等)返回 []。 */\n add(event: PiAgentEventLike): StreamEvent[];\n /** assistant `message_end` 逐条累加的用量。 */\n readonly usage: Usage | undefined;\n /** assistant 消息以 stopReason \"error\" / \"aborted\" 收尾过。 */\n readonly failed: boolean;\n /** 拒绝审批后续读前登记:该调用 `tool_execution_end` 的 isError 判成 \"rejected\" 而非 \"failed\"。 */\n markRejected(toolCallId: string): void;\n}\n/**\n * pi-agent-core 事件流(`message_start` / `message_update` / `message_end` /\n * `tool_execution_start` / `tool_execution_end`)→ 标准事件。消息三段式聚合成一条:\n * message_start 清空增量缓冲、message_update 的 text_delta / thinking_delta 逐段累加、\n * message_end 落地成 message / thinking(优先取 end 帧的完整 content,缺了用累加的增量兜底);\n * 只有 start/delta 的截断流不产出半条消息。message_end 同时累加 usage;assistant 消息以\n * stopReason \"error\" / \"aborted\" 收尾时记失败(`failed`)并发一条 error 事件。\n * tool_execution_start/end → operation.started / operation.finished。\n */\nexport function createPiAgentEventStream(): PiAgentStream {\n let usage: Usage | undefined;\n let failed = false;\n // message_start/update 累加的增量缓冲;message_end 落地后清空,截断流(无 end)不落地。\n let deltaText = \"\";\n let deltaThinking = \"\";\n const rejected = new Set<string>();\n const partText = (event: PiAgentEventLike, type: \"text\" | \"thinking\"): string => {\n if (event.message?.role !== \"assistant\" || !Array.isArray(event.message.content))\n return \"\";\n return event.message.content\n .filter((part): part is globalThis.Record<string, unknown> => isRecord(part) && part.type === type)\n .map((part) => {\n const v = type === \"text\" ? part.text : part.thinking;\n return typeof v === \"string\" ? v : \"\";\n })\n .join(\"\");\n };\n return {\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolCallId) {\n rejected.add(toolCallId);\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"message_start\": {\n // 新消息开始:上一条没等到 message_end 的增量作废(不落地半条消息)。\n deltaText = \"\";\n deltaThinking = \"\";\n break;\n }\n case \"message_update\": {\n const e = event.assistantMessageEvent;\n if (isRecord(e) && typeof e.delta === \"string\") {\n if (e.type === \"text_delta\")\n deltaText += e.delta;\n else if (e.type === \"thinking_delta\")\n deltaThinking += e.delta;\n }\n break;\n }\n case \"message_end\": {\n // 优先取 end 帧的完整 content;缺了(部分传输只带增量)用累加的 delta 兜底。\n const text = partText(event, \"text\") || (event.message?.role === \"assistant\" ? deltaText : \"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n const thinking = partText(event, \"thinking\") || (event.message?.role === \"assistant\" ? deltaThinking : \"\");\n if (thinking)\n events.push({ type: \"thinking\", text: thinking });\n deltaText = \"\";\n deltaThinking = \"\";\n if (event.message?.role === \"assistant\") {\n const stopReason = event.message.stopReason;\n if (stopReason === \"error\" || stopReason === \"aborted\") {\n failed = true;\n events.push({ type: \"error\", message: event.message.errorMessage ?? `pi agent stopReason=${stopReason}` });\n }\n }\n const u = event.message?.role === \"assistant\" ? event.message.usage : undefined;\n if (u) {\n // pi computes u.cost from its own model price table. That estimate\n // is not provider-observed billing and must not enter Usage.costUSD.\n usage = {\n inputTokens: (usage?.inputTokens ?? 0) + u.input,\n outputTokens: (usage?.outputTokens ?? 0) + u.output,\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + u.cacheRead,\n cacheCreationTokens: (usage?.cacheCreationTokens ?? 0) + u.cacheWrite,\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"tool_execution_start\": {\n if (typeof event.toolCallId === \"string\" && typeof event.toolName === \"string\") {\n events.push({\n type: \"operation.started\",\n operationId: event.toolCallId,\n operation: { kind: \"tool\", name: event.toolName, input: event.args as JsonValue },\n });\n }\n break;\n }\n case \"tool_execution_end\": {\n if (typeof event.toolCallId === \"string\") {\n const status = event.isError ? (rejected.has(event.toolCallId) ? \"rejected\" : \"failed\") : \"completed\";\n events.push({ type: \"operation.finished\", operationId: event.toolCallId, kind: \"tool\", output: event.result as JsonValue, status });\n }\n break;\n }\n // agent_start / turn_start / turn_end / tool_execution_update / agent_end:\n // 无对应 StreamEvent(消息文本统一在 message_end 落地)。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── Codex SDK:ThreadEvent ─────────────────────────\nexport interface CodexThreadEventLike {\n type: string;\n thread_id?: string;\n item?: {\n type?: string;\n text?: string;\n message?: string;\n [key: string]: unknown;\n };\n error?: {\n message: string;\n };\n [key: string]: unknown;\n}\nexport interface CodexThreadStream {\n /**\n * 逐帧喂 `ThreadEvent`,返回标准事件:消息类(agent_message → message、reasoning → thinking、\n * error item / turn.failed → error)+ 工具项(command_execution / mcp_tool_call / web_search /\n * file_change → operation.started + operation.finished,附规范工具名 `tool`,如 command_execution →\n * `\"shell\"`,供 `calledTool(\"shell\")` 这类跨 agent 断言命中)。usage 从 `turn.completed` 聚合,经 `usage` 读。\n * 断言依据全部来自这条流;codex CLI 的原生 OTLP span 只用于瀑布图(spanMapper: mapCodexSpans)。\n */\n add(event: CodexThreadEventLike): StreamEvent[];\n /** `thread.started` 带回的 thread_id,回写 `ctx.session.id` 用。 */\n readonly threadId: string | undefined;\n /** `turn.completed` 聚合的用量(input/cached/output tokens)。 */\n readonly usage: Usage | undefined;\n /** turn.failed / error item 出现过。 */\n readonly failed: boolean;\n}\n/** Codex SDK 线程事件流(`thread.started` / `item.*` / `turn.completed` / `turn.failed`)→ 标准事件。 */\nexport function createCodexThreadEventStream(): CodexThreadStream {\n let threadId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n // item.started 已发 operation.started 的 id;item.completed 时不重发,只补 result。\n const startedCallIds = new Set<string>();\n let synth = 0;\n const callIdOf = (item: globalThis.Record<string, unknown>, prefix: string): string => {\n const id = item.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : `${prefix}_${++synth}`;\n };\n // 工具项 → operation.started(+completed 时的 operation.finished)。与 o11y/parsers/codex.ts 的\n // transcript 映射保持同一套语义(字段名以 codex exec --json 的 ThreadItem 为准),\n // 包括规范工具名 tool:少了它 derive 只能落 name=\"unknown\",calledTool(\"shell\") 这类\n // 跨 agent 规范名断言在 SDK 流路径上会静默失配(2026-07-09 CI 实红)。\n const handleToolItem = (item: globalThis.Record<string, unknown>, isCompleted: boolean): StreamEvent[] => {\n const events: StreamEvent[] = [];\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n if (startedCallIds.has(callId))\n return;\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n switch (item.type) {\n case \"command_execution\": {\n const callId = callIdOf(item, \"cmd\");\n emitCall(callId, \"command_execution\", { command: item.command ?? null } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n if (isCompleted) {\n const exit = item.exit_code ?? item.exitCode;\n const output = item.aggregated_output ?? item.aggregatedOutput ?? item.output;\n const status = item.status === \"declined\" || item.status === \"rejected\"\n ? \"rejected\" as const\n : exit === 0 || (exit == null && item.status !== \"failed\" && item.status !== \"error\")\n ? \"completed\" as const\n : \"failed\" as const;\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n ...(output === undefined && exit === undefined\n ? {}\n : { output: { output: (output ?? null) as JsonValue, exit_code: (exit ?? null) as JsonValue } }),\n status,\n });\n }\n return events;\n }\n case \"mcp_tool_call\": {\n const callId = callIdOf(item, \"mcp\");\n const tool = String(item.tool ?? \"unknown\");\n const name = typeof item.server === \"string\" ? `${item.server}.${tool}` : tool;\n emitCall(callId, name, (item.arguments ?? null) as JsonValue, normalizeToolName(tool, CODEX_TOOL_ALIASES), notCommandProjection());\n if (isCompleted) {\n const success = !item.error && item.status !== \"failed\";\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (item.result ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"web_search\": {\n const callId = callIdOf(item, \"web\");\n emitCall(callId, \"web_search\", { query: item.query ?? null } as JsonValue, \"web_search\", notCommandProjection());\n if (isCompleted) {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: null, status: \"completed\" });\n }\n return events;\n }\n case \"file_change\": {\n // 补丁类只在 completed 落一次:changes 里每个文件一对 called/result。\n if (!isCompleted)\n return events;\n const baseId = callIdOf(item, \"patch\");\n const changes = Array.isArray(item.changes) ? item.changes : [];\n changes.forEach((ch, i) => {\n const callId = `${baseId}#${i}`;\n const change = isRecord(ch) ? { path: ch.path ?? null, kind: ch.kind ?? null } : {};\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: \"file_change\",\n input: change as JsonValue,\n tool: \"file_edit\",\n command: notCommandProjection(),\n },\n });\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: change as JsonValue, status: \"completed\" });\n });\n return events;\n }\n default:\n return events;\n }\n };\n return {\n get threadId() {\n return threadId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"thread.started\": {\n if (typeof event.thread_id === \"string\")\n threadId ??= event.thread_id;\n break;\n }\n case \"item.started\": {\n if (event.item)\n events.push(...handleToolItem(event.item, false));\n break;\n }\n case \"item.completed\": {\n const item = event.item;\n if (!item)\n break;\n if (item.type === \"agent_message\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"message\", role: \"assistant\", text: item.text });\n }\n else if (item.type === \"reasoning\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"thinking\", text: item.text });\n }\n else if (item.type === \"error\" && typeof item.message === \"string\") {\n failed = true;\n events.push({ type: \"error\", message: item.message });\n }\n else {\n events.push(...handleToolItem(item, true));\n }\n break;\n }\n case \"turn.completed\": {\n const u = event.usage;\n if (isRecord(u)) {\n const num = (v: unknown): number => (typeof v === \"number\" ? v : 0);\n usage = {\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/codex-sdk/cost.md)\n inputTokens: (usage?.inputTokens ?? 0) + Math.max(0, num(u.input_tokens) - num(u.cached_input_tokens)),\n outputTokens: (usage?.outputTokens ?? 0) + num(u.output_tokens),\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + num(u.cached_input_tokens),\n // codex-rs TokenUsage 结构体同一份字段(与 o11y/parsers/codex.ts 的\n // transcript 解析同源),只在这次 turn 真的带回时累加。\n ...(typeof u.reasoning_output_tokens === \"number\" || usage?.reasoningTokens !== undefined\n ? { reasoningTokens: (usage?.reasoningTokens ?? 0) + num(u.reasoning_output_tokens) }\n : {}),\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"turn.failed\": {\n failed = true;\n if (event.error?.message)\n events.push({ type: \"error\", message: event.error.message });\n break;\n }\n // item.updated(中间态)/ turn.started:忽略,等 completed。\n default:\n break;\n }\n return events;\n },\n };\n}\n"]}
@@ -41,13 +41,7 @@ exports.publishedAnalysisInputBindings = Object.freeze({
41
41
  family: assertionsFamily,
42
42
  project: ({ core, payload }) => {
43
43
  const verdict = (0, verdict_ts_1.foldRecordedAttemptVerdict)({ outcome: core.outcome, assertions: payload });
44
- if (verdict === "passed" || verdict === "failed") {
45
- return Object.freeze({ state: "value", value: verdict === "passed" });
46
- }
47
- return Object.freeze({
48
- state: "unsupported",
49
- message: `Attempt verdict ${verdict} has no pass/fail reading`,
50
- });
44
+ return Object.freeze({ state: "value", value: verdict === "passed" });
51
45
  },
52
46
  }),
53
47
  attemptLatencyMs: Object.freeze({
@@ -182,15 +176,51 @@ function closeAssertions(core, payload, _blobs) {
182
176
  verdict: (0, verdict_ts_1.foldRecordedAttemptVerdict)({ outcome: core.outcome, assertions: payload }),
183
177
  entries: Object.freeze(payload.entries.map((entry) => Object.freeze({
184
178
  entryId: entry.entryId,
185
- display: closeJson(entry.display),
186
- criterion: closeJson(entry.criterion),
187
- result: closeJson(entry.result),
188
- coverage: closeJson(entry.coverage),
189
- limitations: closeJson(entry.limitations),
190
- subject: closeAssertionMaterial(entry.subject),
191
- evidence: Object.freeze(entry.evidence.map(closeAssertionMaterial)),
179
+ display: Object.freeze({ ...entry.display, groupPath: Object.freeze([...entry.display.groupPath]) }),
180
+ source: Object.freeze({
181
+ kind: "fields",
182
+ fields: Object.freeze([Object.freeze({
183
+ label: "input",
184
+ value: assertionMaterialFact(entry.materials.source),
185
+ }), ...(entry.materials.evidence.length === 0 ? [] : [Object.freeze({
186
+ label: "evidence",
187
+ value: Object.freeze({
188
+ kind: "list",
189
+ items: Object.freeze(entry.materials.evidence.map(assertionMaterialFact)),
190
+ }),
191
+ })])]),
192
+ coverage: entry.materials.coverage,
193
+ limitations: entry.materials.limitations,
194
+ }),
195
+ check: entry.criterion.state === "available"
196
+ ? assertionFact(entry.criterion.value)
197
+ : Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
198
+ observed: Object.freeze({
199
+ kind: "fields",
200
+ fields: entry.evaluation.observed.kind === "fields"
201
+ ? entry.evaluation.observed.fields
202
+ : Object.freeze([Object.freeze({ label: "value", value: entry.evaluation.observed })]),
203
+ ...(entry.evaluation.receipt === undefined ? {} : { receipt: entry.evaluation.receipt }),
204
+ }),
205
+ expected: entry.policy.condition.state === "available"
206
+ ? assertionFact(entry.policy.condition.value)
207
+ : Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
208
+ explanation: entry.explanationRetention.state === "retained"
209
+ ? entry.explanationRetention.value
210
+ : Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
211
+ decision: Object.freeze({
212
+ result: entry.decision.result,
213
+ reason: entry.decision.reason,
214
+ gate: entry.decision.gate,
215
+ policy: entry.policy,
216
+ contribution: entry.contribution,
217
+ }),
218
+ }))),
219
+ sourceSites: Object.freeze(payload.sourceSites.map((site) => Object.freeze({
220
+ ...site,
221
+ start: Object.freeze({ ...site.start }),
222
+ end: Object.freeze({ ...site.end }),
192
223
  }))),
193
- sourceSites: Object.freeze(payload.sourceSites.map(closeJson)),
194
224
  });
195
225
  }
196
226
  function closeSourceNavigation(payload) {
@@ -571,12 +601,37 @@ function closeSources(payload, blobs) {
571
601
  }))),
572
602
  });
573
603
  }
574
- function closeAssertionMaterial(value) {
604
+ function assertionFact(value) {
605
+ if (value === null || typeof value === "string" || typeof value === "boolean") {
606
+ return Object.freeze({ kind: "value", value });
607
+ }
608
+ if (typeof value === "number") {
609
+ return Number.isFinite(value)
610
+ ? Object.freeze({ kind: "value", value })
611
+ : Object.freeze({ kind: "unavailable", reason: "source-unavailable" });
612
+ }
613
+ if (Array.isArray(value)) {
614
+ return Object.freeze({ kind: "list", items: Object.freeze(value.map(assertionFact)) });
615
+ }
616
+ if (typeof value === "object" && value !== null) {
617
+ return Object.freeze({
618
+ kind: "fields",
619
+ fields: Object.freeze(Object.entries(value).map(([label, item]) => Object.freeze({
620
+ label,
621
+ value: assertionFact(item),
622
+ }))),
623
+ });
624
+ }
625
+ return Object.freeze({ kind: "unavailable", reason: "source-unavailable" });
626
+ }
627
+ function assertionMaterialFact(value) {
575
628
  if (value.kind === "snapshot") {
576
- return Object.freeze({ kind: "snapshot", value: closeJson(value.value) });
629
+ return assertionFact(value.value);
630
+ }
631
+ if (value.kind === "unavailable") {
632
+ return Object.freeze({ kind: "unavailable", reason: "not-recorded" });
577
633
  }
578
- const blob = value;
579
- return Object.freeze({ kind: "blob", encoding: blob.encoding, byteLength: blob.byteLength, preview: blob.preview });
634
+ return assertionFact({ encoding: value.encoding, byteLength: value.byteLength, preview: value.preview });
580
635
  }
581
636
  function closeBlob(ref, blobs) {
582
637
  const bytes = blobs.bytes(ref);