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
@@ -7,6 +7,7 @@ exports.buildVerdictPayload = buildVerdictPayload;
7
7
  exports.validateVerdictCoherence = validateVerdictCoherence;
8
8
  exports.projectVerdictPayload = projectVerdictPayload;
9
9
  const effect_1 = require("effect");
10
+ const model_ts_1 = require("../../assertions/record/model.cjs");
10
11
  const sealed_assertion_ts_1 = require("./sealed-assertion.cjs");
11
12
  /**
12
13
  * A transient fold result. Verdict is derived from sealed Assertion facts and
@@ -40,8 +41,8 @@ function foldRecordedAttemptVerdict(input) {
40
41
  assertions: input.assertions.entries.map((entry) => Object.freeze({
41
42
  // `unavailable` is a required gate's sealed representation. Entries
42
43
  // marked `not-gate` stay optional and cannot invent an execution error.
43
- required: entry.result.gate !== "not-gate",
44
- result: entry.result,
44
+ required: entry.policy.requirement.state === "available" && entry.policy.requirement.value === "required",
45
+ result: (0, model_ts_1.sealedAssertionResult)(entry),
45
46
  })),
46
47
  });
47
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verdict.js","sourceRoot":"","sources":["verdict.ts"],"names":[],"mappings":";;;AAkBA,kCAQC;AAMD,gEAgBC;AACD,kDAEC;AAMD,4DAcC;AAED,sDAEC;AA3ED,mCAAgC;AAIhC,+DAA0J;AAC1J;;;GAGG;AACU,QAAA,kBAAkB,GAAG,eAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE9E,QAAA,oBAAoB,GAAG,eAAM,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,0BAAkB;CAC5B,CAAC,CAAC;AAIU,QAAA,sBAAsB,GAAG,kDAA4B,CAAC;AACnE,SAAgB,WAAW,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;WAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,6DAAuC,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kCAAY,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1D,CAAC;AACD;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,KAG1C;IACG,OAAO,WAAW,CAAC;QACf,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa;YACrE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW;QACjB,iBAAiB,EAAE,KAAK,CAAC,OAAO,KAAK,WAAW;QAChD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,oEAAoE;YACpE,wEAAwE;YACxE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;YAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC,CAAC;KACN,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,mBAAmB,CAAC,KAAuB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAMD,SAAgB,wBAAwB,CAAC,KAGxC;IACG,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC;gBACV,IAAI,EAAE,uBAAgC;gBACtC,QAAQ;gBACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;aAC9B,CAAC;SACL,CAAC,CAAC;AACX,CAAC;AACD,+EAA+E;AAC/E,SAAgB,qBAAqB,CAAC,OAAuB;IACzD,OAAO,OAAO,CAAC,KAAK,CAAC;AACzB,CAAC","sourcesContent":["import { Schema } from \"effect\";\nimport type { AssertionsAttachment } from \"../../record/family/assertions.ts\";\nimport type { AttemptOutcome } from \"../../record/model/core.ts\";\nimport type { Verdict } from \"../../shared/types.ts\";\nimport { EvaluationAttemptFactsSchema, isGateFailed, isRequiredAssertionUnavailableOrErrored, type EvaluationAttemptFacts, } from \"./sealed-assertion.ts\";\n/**\n * A transient fold result. Verdict is derived from sealed Assertion facts and\n * Attempt outcome; it is deliberately not a Record Attachment family.\n */\nexport const VerdictStateSchema = Schema.Literal(\"passed\", \"failed\", \"errored\", \"skipped\");\nexport type VerdictState = Schema.Schema.Type<typeof VerdictStateSchema>;\nexport const VerdictPayloadSchema = Schema.Struct({\n state: VerdictStateSchema,\n});\nexport type VerdictPayload = Schema.Schema.Type<typeof VerdictPayloadSchema>;\nexport type VerdictPayloadEncoded = Schema.Schema.Encoded<typeof VerdictPayloadSchema>;\nexport type VerdictFoldInput = EvaluationAttemptFacts;\nexport const VerdictFoldInputSchema = EvaluationAttemptFactsSchema;\nexport function foldVerdict(input: VerdictFoldInput): VerdictState {\n if (input.execution === \"errored\"\n || input.assertions.some(isRequiredAssertionUnavailableOrErrored)) {\n return \"errored\";\n }\n if (input.assertions.some(isGateFailed))\n return \"failed\";\n return input.explicitlySkipped ? \"skipped\" : \"passed\";\n}\n/**\n * Folds the public Verdict from the immutable Attempt outcome and verified\n * Assertions payload. This is the one adapter from Record's terminal Core\n * state into the verdict fold; consumers must not reproduce these rules.\n */\nexport function foldRecordedAttemptVerdict(input: {\n readonly outcome: AttemptOutcome;\n readonly assertions: AssertionsAttachment;\n}): VerdictState {\n return foldVerdict({\n execution: input.outcome === \"errored\" || input.outcome === \"interrupted\"\n ? \"errored\"\n : \"completed\",\n explicitlySkipped: input.outcome === \"cancelled\",\n assertions: input.assertions.entries.map((entry) => Object.freeze({\n // `unavailable` is a required gate's sealed representation. Entries\n // marked `not-gate` stay optional and cannot invent an execution error.\n required: entry.result.gate !== \"not-gate\",\n result: entry.result,\n })),\n });\n}\nexport function buildVerdictPayload(input: VerdictFoldInput): VerdictPayload {\n return Object.freeze({ state: foldVerdict(input) });\n}\nexport type VerdictCoherenceIssue = {\n readonly code: \"verdict-fold-mismatch\";\n readonly expected: VerdictState;\n readonly actual: VerdictState;\n};\nexport function validateVerdictCoherence(input: {\n readonly payload: VerdictPayload;\n readonly fold: VerdictFoldInput;\n}): readonly VerdictCoherenceIssue[] {\n const expected = foldVerdict(input.fold);\n return input.payload.state === expected\n ? Object.freeze([])\n : Object.freeze([\n Object.freeze({\n code: \"verdict-fold-mismatch\" as const,\n expected,\n actual: input.payload.state,\n }),\n ]);\n}\n/** Plain domain projection for callers that need NiceEval's public verdict. */\nexport function projectVerdictPayload(payload: VerdictPayload): Verdict {\n return payload.state;\n}\n"]}
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["verdict.ts"],"names":[],"mappings":";;;AAmBA,kCAQC;AAMD,gEAgBC;AACD,kDAEC;AAMD,4DAcC;AAED,sDAEC;AA5ED,mCAAgC;AAEhC,+DAAyE;AAGzE,+DAA0J;AAC1J;;;GAGG;AACU,QAAA,kBAAkB,GAAG,eAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE9E,QAAA,oBAAoB,GAAG,eAAM,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,0BAAkB;CAC5B,CAAC,CAAC;AAIU,QAAA,sBAAsB,GAAG,kDAA4B,CAAC;AACnE,SAAgB,WAAW,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;WAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,6DAAuC,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kCAAY,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1D,CAAC;AACD;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,KAG1C;IACG,OAAO,WAAW,CAAC;QACf,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa;YACrE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW;QACjB,iBAAiB,EAAE,KAAK,CAAC,OAAO,KAAK,WAAW;QAChD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,oEAAoE;YACpE,wEAAwE;YACxE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,UAAU;YACzG,MAAM,EAAE,IAAA,gCAAqB,EAAC,KAAK,CAAC;SACvC,CAAC,CAAC;KACN,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,mBAAmB,CAAC,KAAuB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAMD,SAAgB,wBAAwB,CAAC,KAGxC;IACG,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC;gBACV,IAAI,EAAE,uBAAgC;gBACtC,QAAQ;gBACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;aAC9B,CAAC;SACL,CAAC,CAAC;AACX,CAAC;AACD,+EAA+E;AAC/E,SAAgB,qBAAqB,CAAC,OAAuB;IACzD,OAAO,OAAO,CAAC,KAAK,CAAC;AACzB,CAAC","sourcesContent":["import { Schema } from \"effect\";\nimport type { AssertionsAttachment } from \"../../record/family/assertions.ts\";\nimport { sealedAssertionResult } from \"../../assertions/record/model.ts\";\nimport type { AttemptOutcome } from \"../../record/model/core.ts\";\nimport type { Verdict } from \"../../shared/types.ts\";\nimport { EvaluationAttemptFactsSchema, isGateFailed, isRequiredAssertionUnavailableOrErrored, type EvaluationAttemptFacts, } from \"./sealed-assertion.ts\";\n/**\n * A transient fold result. Verdict is derived from sealed Assertion facts and\n * Attempt outcome; it is deliberately not a Record Attachment family.\n */\nexport const VerdictStateSchema = Schema.Literal(\"passed\", \"failed\", \"errored\", \"skipped\");\nexport type VerdictState = Schema.Schema.Type<typeof VerdictStateSchema>;\nexport const VerdictPayloadSchema = Schema.Struct({\n state: VerdictStateSchema,\n});\nexport type VerdictPayload = Schema.Schema.Type<typeof VerdictPayloadSchema>;\nexport type VerdictPayloadEncoded = Schema.Schema.Encoded<typeof VerdictPayloadSchema>;\nexport type VerdictFoldInput = EvaluationAttemptFacts;\nexport const VerdictFoldInputSchema = EvaluationAttemptFactsSchema;\nexport function foldVerdict(input: VerdictFoldInput): VerdictState {\n if (input.execution === \"errored\"\n || input.assertions.some(isRequiredAssertionUnavailableOrErrored)) {\n return \"errored\";\n }\n if (input.assertions.some(isGateFailed))\n return \"failed\";\n return input.explicitlySkipped ? \"skipped\" : \"passed\";\n}\n/**\n * Folds the public Verdict from the immutable Attempt outcome and verified\n * Assertions payload. This is the one adapter from Record's terminal Core\n * state into the verdict fold; consumers must not reproduce these rules.\n */\nexport function foldRecordedAttemptVerdict(input: {\n readonly outcome: AttemptOutcome;\n readonly assertions: AssertionsAttachment;\n}): VerdictState {\n return foldVerdict({\n execution: input.outcome === \"errored\" || input.outcome === \"interrupted\"\n ? \"errored\"\n : \"completed\",\n explicitlySkipped: input.outcome === \"cancelled\",\n assertions: input.assertions.entries.map((entry) => Object.freeze({\n // `unavailable` is a required gate's sealed representation. Entries\n // marked `not-gate` stay optional and cannot invent an execution error.\n required: entry.policy.requirement.state === \"available\" && entry.policy.requirement.value === \"required\",\n result: sealedAssertionResult(entry),\n })),\n });\n}\nexport function buildVerdictPayload(input: VerdictFoldInput): VerdictPayload {\n return Object.freeze({ state: foldVerdict(input) });\n}\nexport type VerdictCoherenceIssue = {\n readonly code: \"verdict-fold-mismatch\";\n readonly expected: VerdictState;\n readonly actual: VerdictState;\n};\nexport function validateVerdictCoherence(input: {\n readonly payload: VerdictPayload;\n readonly fold: VerdictFoldInput;\n}): readonly VerdictCoherenceIssue[] {\n const expected = foldVerdict(input.fold);\n return input.payload.state === expected\n ? Object.freeze([])\n : Object.freeze([\n Object.freeze({\n code: \"verdict-fold-mismatch\" as const,\n expected,\n actual: input.payload.state,\n }),\n ]);\n}\n/** Plain domain projection for callers that need NiceEval's public verdict. */\nexport function projectVerdictPayload(payload: VerdictPayload): Verdict {\n return payload.state;\n}\n"]}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.experimentHost = void 0;
4
4
  const effect_1 = require("effect");
5
- const load_config_ts_1 = require("../../load-config.cjs");
6
5
  const command_plan_ts_1 = require("../../runner/command-plan.cjs");
7
6
  const discover_ts_1 = require("../../runner/discover.cjs");
8
7
  const fingerprint_ts_1 = require("../../runner/fingerprint.cjs");
@@ -90,10 +89,6 @@ function debugAgentRun(experiment, evalId) {
90
89
  */
91
90
  function debug(input) {
92
91
  return effect_1.Effect.gen(function* () {
93
- const config = yield* effect_1.Effect.tryPromise({
94
- try: () => (0, load_config_ts_1.loadConfigFile)(input.cwd),
95
- catch: (cause) => cause,
96
- });
97
92
  const listed = yield* list({ cwd: input.cwd });
98
93
  const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));
99
94
  if (selectedExperiments.length === 0) {
@@ -134,7 +129,7 @@ function debug(input) {
134
129
  }
135
130
  const evalDef = selectedEvals[0];
136
131
  const run = debugAgentRun(experiment, evalDef.id);
137
- const target = yield* (0, fingerprint_ts_1.planProjectTarget)(listed.evals, [run], config.timeoutMs, { configJudge: config.judge });
132
+ const target = yield* (0, fingerprint_ts_1.planProjectTarget)(listed.evals, [run], input.config.timeoutMs, { configJudge: input.config.judge });
138
133
  const commandPlan = (0, command_plan_ts_1.assembleCommandPlan)({
139
134
  rows: [{
140
135
  experimentId: experiment.id,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { loadConfigFile } from \"../../load-config.ts\";\nimport { assembleCommandPlan, type CommandPlan } from \"../../runner/command-plan.ts\";\nimport { discoverEvals, discoverExperiments } from \"../../runner/discover.ts\";\nimport { planProjectTarget } from \"../../runner/fingerprint.ts\";\nimport { resolveExperimentEvals } from \"../../runner/eval-selection.ts\";\nimport { prepareRunnerRecordReuse, withRunnerCurrentReusePreview, } from \"../../runner/record.ts\";\nimport { projectCurrentReuseReadback, } from \"../../runner/reuse-readback.ts\";\nimport { acceptLocators } from \"../../runner/accept.ts\";\nimport { runEvals } from \"../../runner/run.ts\";\nimport type { AcceptLocatorsOptions, } from \"../../runner/accept.ts\";\nimport type { ProjectTargetPlan } from \"../../runner/fingerprint.ts\";\nimport type { CurrentReuseReadbackSnapshot } from \"../../runner/reuse-readback.ts\";\nimport type { ExecutionReusePlanSlot } from \"../../runner/reuse-plan.ts\";\nimport { resolveRunTimeout } from \"../../runner/timeout.ts\";\nimport type { AgentRun, Config, DiscoveredEval, DiscoveredExperiment, RunOptions, } from \"../../runner/types.ts\";\nimport type { RecordRoot } from \"../../record/platform/root.ts\";\nimport { matchExperimentSelector } from \"../../shared/aggregate.ts\";\n/**\n * Public, supported high-level Host composition SDK for the NiceEval CLI,\n * replacement CLI/Web hosts, and deep application integrations. Eval authors\n * use `defineExperiment`; this entry deliberately exposes no Runner internals.\n */\n/** One discovered Experiment after its author selector and CLI prefixes close. */\nexport interface ExperimentHostSelection {\n readonly experiment: DiscoveredExperiment;\n readonly selectedEvalIds: readonly string[];\n /** The Experiment-owned set before CLI eval-prefix narrowing. */\n readonly selectorEvalIds: readonly string[];\n}\n/** Discovery result used by both `exp list` and execution planning. */\nexport interface ExperimentHostListResult {\n readonly evals: readonly DiscoveredEval[];\n readonly experimentIds: readonly string[];\n readonly selections: readonly ExperimentHostSelection[];\n}\n/**\n * Discovery and selection are owned here so consumers cannot invoke an\n * Experiment's predicate a second time while reconstructing an AgentRun.\n */\nfunction list(input: {\n readonly cwd: string;\n /** Keep the CLI's public `--tag` selection inside the Experiment boundary. */\n readonly tag?: string;\n readonly selector?: string;\n readonly evalPatterns?: readonly string[];\n}): Effect.Effect<ExperimentHostListResult, unknown> {\n return Effect.gen(function* () {\n const discoveredEvals = yield* discoverEvals(input.cwd);\n const evals = input.tag === undefined\n ? discoveredEvals\n : discoveredEvals.filter((evalDefinition) => evalDefinition.tags?.includes(input.tag!));\n const experiments = yield* discoverExperiments(input.cwd);\n const experimentIds = Object.freeze(experiments.map((experiment) => experiment.id));\n const selectedIds = input.selector === undefined\n ? undefined\n : new Set(matchExperimentSelector(experimentIds, input.selector));\n const selections = experiments\n .filter((experiment) => selectedIds === undefined || selectedIds.has(experiment.id))\n .map((experiment): ExperimentHostSelection => {\n const selected = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: input.evalPatterns ?? [],\n evals,\n });\n return Object.freeze({\n experiment,\n selectedEvalIds: Object.freeze([...selected.selectedEvalIds]),\n selectorEvalIds: Object.freeze(selected.selectorEvals.map((evalDefinition) => evalDefinition.id)),\n });\n });\n return Object.freeze({\n evals: Object.freeze([...evals]),\n experimentIds,\n selections: Object.freeze(selections),\n });\n });\n}\nexport interface ExperimentHostDebugPlanRequest {\n readonly cwd: string;\n readonly experimentSelector: string;\n readonly evalSelector: string;\n}\n/** A fully closed, read-only lifecycle plan for exactly one Experiment × Eval pair. */\nexport interface ExperimentHostDebugPlan {\n readonly status: \"planned\";\n readonly experimentId: string;\n readonly evalId: string;\n readonly commandPlan: CommandPlan;\n}\n/**\n * Selector outcomes are data, rather than CLI-owned selection logic or a\n * partially constructed plan. The caller can render them in its own surface.\n */\nexport type ExperimentHostDebugPlanResult = ExperimentHostDebugPlan | {\n readonly status: \"experiment-no-match\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"experiment-ambiguous\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-no-match\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-ambiguous\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n};\nfunction uniqueExactOrPrefix<T>(candidates: readonly T[], selector: string, id: (candidate: T) => string): readonly T[] {\n const exact = candidates.find((candidate) => id(candidate) === selector);\n return exact === undefined\n ? candidates.filter((candidate) => id(candidate).startsWith(selector))\n : [exact];\n}\nfunction debugAgentRun(experiment: DiscoveredExperiment, evalId: string): AgentRun {\n return {\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds: [evalId],\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n };\n}\n/**\n * Closes selector resolution, physical planning, and command-plan projection\n * inside the Experiment Host. It deliberately does not construct a Record\n * root, enter a lease, read history, or invoke an author callback.\n */\nfunction debug(input: ExperimentHostDebugPlanRequest): Effect.Effect<ExperimentHostDebugPlanResult, unknown> {\n return Effect.gen(function* () {\n const config = yield* Effect.tryPromise({\n try: () => loadConfigFile(input.cwd),\n catch: (cause) => cause,\n });\n const listed = yield* list({ cwd: input.cwd });\n const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));\n if (selectedExperiments.length === 0) {\n return Object.freeze({\n status: \"experiment-no-match\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze([...listed.experimentIds].sort()),\n });\n }\n if (selectedExperiments.length > 1) {\n return Object.freeze({\n status: \"experiment-ambiguous\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze(selectedExperiments.map(({ experiment }) => experiment.id)),\n });\n }\n const selection = selectedExperiments[0]!;\n const experiment = selection.experiment;\n const selectorEvalIds = new Set(selection.selectorEvalIds);\n const selectorEvals = listed.evals.filter((evalDef) => selectorEvalIds.has(evalDef.id));\n const selectedEvals = uniqueExactOrPrefix(selectorEvals, input.evalSelector, (evalDef) => evalDef.id)\n .slice().sort((left, right) => left.id.localeCompare(right.id));\n if (selectedEvals.length === 0) {\n return Object.freeze({\n status: \"eval-no-match\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectorEvals.map((evalDef) => evalDef.id).sort()),\n });\n }\n if (selectedEvals.length > 1) {\n return Object.freeze({\n status: \"eval-ambiguous\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectedEvals.map((evalDef) => evalDef.id)),\n });\n }\n const evalDef = selectedEvals[0]!;\n const run = debugAgentRun(experiment, evalDef.id);\n const target = yield* planProjectTarget(listed.evals, [run], config.timeoutMs, { configJudge: config.judge });\n const commandPlan = assembleCommandPlan({\n rows: [{\n experimentId: experiment.id,\n evalId: evalDef.id,\n ...(evalDef.evalGroup === undefined ? {} : { evalGroupId: evalDef.evalGroup.id }),\n attempts: run.attempts,\n dispatch: [{ attempts: Array.from({ length: run.attempts }, (_, attempt) => attempt) }],\n }],\n preparedPairsByKey: target.preparedPairsByKey,\n });\n return Object.freeze({\n status: \"planned\" as const,\n experimentId: experiment.id,\n evalId: evalDef.id,\n commandPlan,\n });\n });\n}\nexport interface ExperimentHostPlanRequest {\n readonly evals: readonly DiscoveredEval[];\n readonly agentRuns: readonly AgentRun[];\n readonly config: Config;\n readonly recordRoot: RecordRoot;\n readonly rerun?: \"failed\" | \"all\";\n readonly keepSandbox?: \"failed\" | \"all\";\n /** Omit for a dispatch plan; include only for the read-only `exp --dry` path. */\n readonly previewStartedAt?: number;\n}\nexport interface ExperimentHostCurrentPlan {\n readonly slots: readonly ExecutionReusePlanSlot[];\n readonly readbacks: readonly CurrentReuseReadbackSnapshot[];\n}\nexport interface ExperimentHostPlan {\n readonly target: ProjectTargetPlan;\n readonly current?: ExperimentHostCurrentPlan;\n}\n/**\n * Reuses the production physical planner and frozen Record reuse planner.\n * It never creates a Run; current history is read only when a dry preview was\n * explicitly requested.\n */\nfunction plan(input: ExperimentHostPlanRequest) {\n return Effect.gen(function* () {\n const target = yield* planProjectTarget(input.evals, input.agentRuns, input.config.timeoutMs, {\n configJudge: input.config.judge,\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const reuse = yield* prepareRunnerRecordReuse({\n evals: input.evals,\n runs: input.agentRuns,\n config: { timeoutMs: input.config.timeoutMs },\n plannedFingerprints: target.plannedFingerprints,\n plannedConfigHashes: target.plannedConfigHashes,\n ...(input.rerun === undefined ? {} : { rerun: input.rerun }),\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const current = input.previewStartedAt === undefined\n ? undefined\n : yield* withRunnerCurrentReusePreview({\n recordRoot: input.recordRoot,\n startedAt: input.previewStartedAt,\n evals: input.evals,\n runs: input.agentRuns,\n reuse,\n use: ({ reusePlan, readReadbacks }) => readReadbacks().pipe(Effect.map((readbacks): ExperimentHostCurrentPlan => Object.freeze({\n slots: Object.freeze([...reusePlan.slots]),\n readbacks: Object.freeze(readbacks.map(projectCurrentReuseReadback)),\n }))),\n });\n return Object.freeze({\n target,\n ...(current === undefined ? {} : { current }),\n });\n });\n}\n/** The existing Runner remains the one execution implementation. */\nfunction run<AttachmentError, AttachmentRequirements>(input: RunOptions<AttachmentError, AttachmentRequirements>) {\n return runEvals(input);\n}\n/** The existing adoption flow remains the one acceptance implementation. */\nfunction accept(input: AcceptLocatorsOptions) {\n return acceptLocators(input);\n}\nexport interface ExperimentHostSDK {\n readonly list: typeof list;\n readonly plan: typeof plan;\n readonly debug: typeof debug;\n readonly run: typeof run;\n readonly accept: typeof accept;\n}\n/** The fixed public Host surface; discovery, Runner, and adoption internals stay private. */\nexport const experimentHost: ExperimentHostSDK = Object.freeze({\n list,\n plan,\n debug,\n run,\n accept,\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { assembleCommandPlan, type CommandPlan } from \"../../runner/command-plan.ts\";\nimport { discoverEvals, discoverExperiments } from \"../../runner/discover.ts\";\nimport { planProjectTarget } from \"../../runner/fingerprint.ts\";\nimport { resolveExperimentEvals } from \"../../runner/eval-selection.ts\";\nimport { prepareRunnerRecordReuse, withRunnerCurrentReusePreview, } from \"../../runner/record.ts\";\nimport { projectCurrentReuseReadback, } from \"../../runner/reuse-readback.ts\";\nimport { acceptLocators } from \"../../runner/accept.ts\";\nimport { runEvals } from \"../../runner/run.ts\";\nimport type { AcceptLocatorsOptions, } from \"../../runner/accept.ts\";\nimport type { ProjectTargetPlan } from \"../../runner/fingerprint.ts\";\nimport type { CurrentReuseReadbackSnapshot } from \"../../runner/reuse-readback.ts\";\nimport type { ExecutionReusePlanSlot } from \"../../runner/reuse-plan.ts\";\nimport { resolveRunTimeout } from \"../../runner/timeout.ts\";\nimport type { AgentRun, Config, DiscoveredEval, DiscoveredExperiment, RunOptions, } from \"../../runner/types.ts\";\nimport type { RecordRoot } from \"../../record/platform/root.ts\";\nimport { matchExperimentSelector } from \"../../shared/aggregate.ts\";\n/**\n * Public, supported high-level Host composition SDK for the NiceEval CLI,\n * replacement CLI/Web hosts, and deep application integrations. Eval authors\n * use `defineExperiment`; this entry deliberately exposes no Runner internals.\n */\n/** One discovered Experiment after its author selector and CLI prefixes close. */\nexport interface ExperimentHostSelection {\n readonly experiment: DiscoveredExperiment;\n readonly selectedEvalIds: readonly string[];\n /** The Experiment-owned set before CLI eval-prefix narrowing. */\n readonly selectorEvalIds: readonly string[];\n}\n/** Discovery result used by both `exp list` and execution planning. */\nexport interface ExperimentHostListResult {\n readonly evals: readonly DiscoveredEval[];\n readonly experimentIds: readonly string[];\n readonly selections: readonly ExperimentHostSelection[];\n}\n/**\n * Discovery and selection are owned here so consumers cannot invoke an\n * Experiment's predicate a second time while reconstructing an AgentRun.\n */\nfunction list(input: {\n readonly cwd: string;\n /** Keep the CLI's public `--tag` selection inside the Experiment boundary. */\n readonly tag?: string;\n readonly selector?: string;\n readonly evalPatterns?: readonly string[];\n}): Effect.Effect<ExperimentHostListResult, unknown> {\n return Effect.gen(function* () {\n const discoveredEvals = yield* discoverEvals(input.cwd);\n const evals = input.tag === undefined\n ? discoveredEvals\n : discoveredEvals.filter((evalDefinition) => evalDefinition.tags?.includes(input.tag!));\n const experiments = yield* discoverExperiments(input.cwd);\n const experimentIds = Object.freeze(experiments.map((experiment) => experiment.id));\n const selectedIds = input.selector === undefined\n ? undefined\n : new Set(matchExperimentSelector(experimentIds, input.selector));\n const selections = experiments\n .filter((experiment) => selectedIds === undefined || selectedIds.has(experiment.id))\n .map((experiment): ExperimentHostSelection => {\n const selected = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: input.evalPatterns ?? [],\n evals,\n });\n return Object.freeze({\n experiment,\n selectedEvalIds: Object.freeze([...selected.selectedEvalIds]),\n selectorEvalIds: Object.freeze(selected.selectorEvals.map((evalDefinition) => evalDefinition.id)),\n });\n });\n return Object.freeze({\n evals: Object.freeze([...evals]),\n experimentIds,\n selections: Object.freeze(selections),\n });\n });\n}\nexport interface ExperimentHostDebugPlanRequest {\n readonly cwd: string;\n readonly config: Config;\n readonly experimentSelector: string;\n readonly evalSelector: string;\n}\n/** A fully closed, read-only lifecycle plan for exactly one Experiment × Eval pair. */\nexport interface ExperimentHostDebugPlan {\n readonly status: \"planned\";\n readonly experimentId: string;\n readonly evalId: string;\n readonly commandPlan: CommandPlan;\n}\n/**\n * Selector outcomes are data, rather than CLI-owned selection logic or a\n * partially constructed plan. The caller can render them in its own surface.\n */\nexport type ExperimentHostDebugPlanResult = ExperimentHostDebugPlan | {\n readonly status: \"experiment-no-match\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"experiment-ambiguous\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-no-match\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-ambiguous\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n};\nfunction uniqueExactOrPrefix<T>(candidates: readonly T[], selector: string, id: (candidate: T) => string): readonly T[] {\n const exact = candidates.find((candidate) => id(candidate) === selector);\n return exact === undefined\n ? candidates.filter((candidate) => id(candidate).startsWith(selector))\n : [exact];\n}\nfunction debugAgentRun(experiment: DiscoveredExperiment, evalId: string): AgentRun {\n return {\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds: [evalId],\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n };\n}\n/**\n * Closes selector resolution, physical planning, and command-plan projection\n * inside the Experiment Host. It deliberately does not construct a Record\n * root, enter a lease, read history, or invoke an author callback.\n */\nfunction debug(input: ExperimentHostDebugPlanRequest): Effect.Effect<ExperimentHostDebugPlanResult, unknown> {\n return Effect.gen(function* () {\n const listed = yield* list({ cwd: input.cwd });\n const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));\n if (selectedExperiments.length === 0) {\n return Object.freeze({\n status: \"experiment-no-match\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze([...listed.experimentIds].sort()),\n });\n }\n if (selectedExperiments.length > 1) {\n return Object.freeze({\n status: \"experiment-ambiguous\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze(selectedExperiments.map(({ experiment }) => experiment.id)),\n });\n }\n const selection = selectedExperiments[0]!;\n const experiment = selection.experiment;\n const selectorEvalIds = new Set(selection.selectorEvalIds);\n const selectorEvals = listed.evals.filter((evalDef) => selectorEvalIds.has(evalDef.id));\n const selectedEvals = uniqueExactOrPrefix(selectorEvals, input.evalSelector, (evalDef) => evalDef.id)\n .slice().sort((left, right) => left.id.localeCompare(right.id));\n if (selectedEvals.length === 0) {\n return Object.freeze({\n status: \"eval-no-match\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectorEvals.map((evalDef) => evalDef.id).sort()),\n });\n }\n if (selectedEvals.length > 1) {\n return Object.freeze({\n status: \"eval-ambiguous\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectedEvals.map((evalDef) => evalDef.id)),\n });\n }\n const evalDef = selectedEvals[0]!;\n const run = debugAgentRun(experiment, evalDef.id);\n const target = yield* planProjectTarget(listed.evals, [run], input.config.timeoutMs, { configJudge: input.config.judge });\n const commandPlan = assembleCommandPlan({\n rows: [{\n experimentId: experiment.id,\n evalId: evalDef.id,\n ...(evalDef.evalGroup === undefined ? {} : { evalGroupId: evalDef.evalGroup.id }),\n attempts: run.attempts,\n dispatch: [{ attempts: Array.from({ length: run.attempts }, (_, attempt) => attempt) }],\n }],\n preparedPairsByKey: target.preparedPairsByKey,\n });\n return Object.freeze({\n status: \"planned\" as const,\n experimentId: experiment.id,\n evalId: evalDef.id,\n commandPlan,\n });\n });\n}\nexport interface ExperimentHostPlanRequest {\n readonly evals: readonly DiscoveredEval[];\n readonly agentRuns: readonly AgentRun[];\n readonly config: Config;\n readonly recordRoot: RecordRoot;\n readonly rerun?: \"failed\" | \"all\";\n readonly keepSandbox?: \"failed\" | \"all\";\n /** Omit for a dispatch plan; include only for the read-only `exp --dry` path. */\n readonly previewStartedAt?: number;\n}\nexport interface ExperimentHostCurrentPlan {\n readonly slots: readonly ExecutionReusePlanSlot[];\n readonly readbacks: readonly CurrentReuseReadbackSnapshot[];\n}\nexport interface ExperimentHostPlan {\n readonly target: ProjectTargetPlan;\n readonly current?: ExperimentHostCurrentPlan;\n}\n/**\n * Reuses the production physical planner and frozen Record reuse planner.\n * It never creates a Run; current history is read only when a dry preview was\n * explicitly requested.\n */\nfunction plan(input: ExperimentHostPlanRequest) {\n return Effect.gen(function* () {\n const target = yield* planProjectTarget(input.evals, input.agentRuns, input.config.timeoutMs, {\n configJudge: input.config.judge,\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const reuse = yield* prepareRunnerRecordReuse({\n evals: input.evals,\n runs: input.agentRuns,\n config: { timeoutMs: input.config.timeoutMs },\n plannedFingerprints: target.plannedFingerprints,\n plannedConfigHashes: target.plannedConfigHashes,\n ...(input.rerun === undefined ? {} : { rerun: input.rerun }),\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const current = input.previewStartedAt === undefined\n ? undefined\n : yield* withRunnerCurrentReusePreview({\n recordRoot: input.recordRoot,\n startedAt: input.previewStartedAt,\n evals: input.evals,\n runs: input.agentRuns,\n reuse,\n use: ({ reusePlan, readReadbacks }) => readReadbacks().pipe(Effect.map((readbacks): ExperimentHostCurrentPlan => Object.freeze({\n slots: Object.freeze([...reusePlan.slots]),\n readbacks: Object.freeze(readbacks.map(projectCurrentReuseReadback)),\n }))),\n });\n return Object.freeze({\n target,\n ...(current === undefined ? {} : { current }),\n });\n });\n}\n/** The existing Runner remains the one execution implementation. */\nfunction run<AttachmentError, AttachmentRequirements>(input: RunOptions<AttachmentError, AttachmentRequirements>) {\n return runEvals(input);\n}\n/** The existing adoption flow remains the one acceptance implementation. */\nfunction accept(input: AcceptLocatorsOptions) {\n return acceptLocators(input);\n}\nexport interface ExperimentHostSDK {\n readonly list: typeof list;\n readonly plan: typeof plan;\n readonly debug: typeof debug;\n readonly run: typeof run;\n readonly accept: typeof accept;\n}\n/** The fixed public Host surface; discovery, Runner, and adoption internals stay private. */\nexport const experimentHost: ExperimentHostSDK = Object.freeze({\n list,\n plan,\n debug,\n run,\n accept,\n});\n"]}
@@ -37,6 +37,7 @@ declare function list(input: {
37
37
  }): Effect.Effect<ExperimentHostListResult, unknown>;
38
38
  export interface ExperimentHostDebugPlanRequest {
39
39
  readonly cwd: string;
40
+ readonly config: Config;
40
41
  readonly experimentSelector: string;
41
42
  readonly evalSelector: string;
42
43
  }
@@ -37,6 +37,7 @@ declare function list(input: {
37
37
  }): Effect.Effect<ExperimentHostListResult, unknown>;
38
38
  export interface ExperimentHostDebugPlanRequest {
39
39
  readonly cwd: string;
40
+ readonly config: Config;
40
41
  readonly experimentSelector: string;
41
42
  readonly evalSelector: string;
42
43
  }
@@ -37,6 +37,7 @@ declare function list(input: {
37
37
  }): Effect.Effect<ExperimentHostListResult, unknown>;
38
38
  export interface ExperimentHostDebugPlanRequest {
39
39
  readonly cwd: string;
40
+ readonly config: Config;
40
41
  readonly experimentSelector: string;
41
42
  readonly evalSelector: string;
42
43
  }
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  const __niceevalDynamicImport = (specifier) => import(specifier);
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.loadConfigFile = loadConfigFile;
4
+ exports.loadConfigModuleOnce = loadConfigModuleOnce;
5
+ exports.rebuildConfigModule = rebuildConfigModule;
5
6
  // niceeval.config.ts 装载:CLI 与 view 共用。view 本地模式每次重建传 freshImport,
6
7
  // 让 config.report / config.theme 及其整棵 import 图失效(docs/feature/reports/README.md)。
7
8
  const node_fs_1 = require("node:fs");
@@ -16,14 +17,14 @@ function needsAdditionalTsxLoader(error) {
16
17
  "code" in error &&
17
18
  error.code === "ERR_UNKNOWN_FILE_EXTENSION");
18
19
  }
19
- async function loadConfigFile(cwd, options) {
20
+ async function loadConfigModule(cwd, rebuild) {
20
21
  const path = (0, node_path_1.join)(cwd, "niceeval.config.ts");
21
22
  if (!(0, node_fs_1.existsSync)(path)) {
22
23
  throw new Error((0, index_ts_1.t)("cli.config.missing"));
23
24
  }
24
25
  let mod;
25
26
  try {
26
- mod = options?.freshImport
27
+ mod = rebuild
27
28
  ? (await (0, fresh_import_ts_1.freshImportModule)(path))
28
29
  : (await __niceevalDynamicImport((0, node_url_1.pathToFileURL)(path).href));
29
30
  }
@@ -33,7 +34,7 @@ async function loadConfigFile(cwd, options) {
33
34
  // ERR_UNKNOWN_FILE_EXTENSION。只对普通一次性装载的能力错误补一层 tsx hook
34
35
  // 重试,用户模块自己抛错时不重放副作用。fresh 装载不能退回 canonical URL:
35
36
  // 它可能已被 view 启动时缓存,从而用上一代成功配置掩盖当前损坏。
36
- if (!options?.freshImport && needsAdditionalTsxLoader(e)) {
37
+ if (!rebuild && needsAdditionalTsxLoader(e)) {
37
38
  const url = (0, node_url_1.pathToFileURL)(path).href;
38
39
  (0, api_1.register)();
39
40
  // 这是一次性 CLI 装载器:保留 hook 到进程结束。不用 namespace——
@@ -49,4 +50,12 @@ async function loadConfigFile(cwd, options) {
49
50
  throw new Error((0, index_ts_1.t)("cli.config.noDefault"));
50
51
  return mod.default;
51
52
  }
53
+ /** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
54
+ function loadConfigModuleOnce(cwd) {
55
+ return loadConfigModule(cwd, false);
56
+ }
57
+ /** Serial callers deliberately request a new module graph rather than a boolean mode. */
58
+ function rebuildConfigModule(cwd) {
59
+ return loadConfigModule(cwd, true);
60
+ }
52
61
  //# sourceMappingURL=load-config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-config.js","sourceRoot":"","sources":["load-config.ts"],"names":[],"mappings":";;AAiBA,wCA0CC;AA3DD,kEAAkE;AAClE,kFAAkF;AAClF,qCAAqC;AACrC,yCAAiC;AACjC,uCAAyC;AACzC,qCAAuC;AACvC,uDAAsD;AACtD,8CAAoC;AAEpC,SAAS,wBAAwB,CAAC,KAAc;IAC5C,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ;QAC7B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAEC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC;AAClD,CAAC;AACM,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAEjD;IACG,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAEH,CAAC;IACF,IAAI,CAAC;QACD,GAAG,GAAG,OAAO,EAAE,WAAW;YACtB,CAAC,CAAE,CAAC,MAAM,IAAA,mCAAiB,EAAC,IAAI,CAAC,CAE/B;YACF,CAAC,CAAE,CAAC,MAAM,uBAAuB,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAEzD,CAAC;IACX,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,sDAAsD;QACtD,uDAAuD;QACvD,wDAAwD;QACxD,iDAAiD;QACjD,qCAAqC;QACrC,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACrC,IAAA,cAAQ,GAAE,CAAC;YACX,6CAA6C;YAC7C,sEAAsE;YACtE,+CAA+C;YAC/C,GAAG,GAAG,CAAC,MAAM,uBAAuB,CAAC,GAAG,GAAG,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAE3E,CAAC;QACN,CAAC;aACI,CAAC;YACF,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,OAAO;QACZ,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,sBAAsB,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC;AACvB,CAAC","sourcesContent":["// niceeval.config.ts 装载:CLI 与 view 共用。view 本地模式每次重建传 freshImport,\n// 让 config.report / config.theme 及其整棵 import 图失效(docs/feature/reports/README.md)。\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { register } from \"tsx/esm/api\";\nimport { freshImportModule } from \"./fresh-import.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { Config } from \"./runner/types.ts\";\nfunction needsAdditionalTsxLoader(error: unknown): boolean {\n return (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as {\n code?: unknown;\n }).code === \"ERR_UNKNOWN_FILE_EXTENSION\");\n}\nexport async function loadConfigFile(cwd: string, options?: {\n freshImport?: boolean;\n}): Promise<Config> {\n const path = join(cwd, \"niceeval.config.ts\");\n if (!existsSync(path)) {\n throw new Error(t(\"cli.config.missing\"));\n }\n let mod: {\n default?: Config;\n };\n try {\n mod = options?.freshImport\n ? ((await freshImportModule(path)) as {\n default?: Config;\n })\n : ((await __niceevalDynamicImport(pathToFileURL(path).href)) as {\n default?: Config;\n });\n }\n catch (e) {\n // 全局 tsx hook 能装载 config.ts,但 Node ESM 在某些项目形态下会让它的静态\n // import 回落原生 loader;config 一旦 import 了 Report .tsx 就报\n // ERR_UNKNOWN_FILE_EXTENSION。只对普通一次性装载的能力错误补一层 tsx hook\n // 重试,用户模块自己抛错时不重放副作用。fresh 装载不能退回 canonical URL:\n // 它可能已被 view 启动时缓存,从而用上一代成功配置掩盖当前损坏。\n if (!options?.freshImport && needsAdditionalTsxLoader(e)) {\n const url = pathToFileURL(path).href;\n register();\n // 这是一次性 CLI 装载器:保留 hook 到进程结束。不用 namespace——\n // config 图可能进入 CJS package,tsx 在 Node builtin URL 上传播 namespace query\n // 会把 node:util 误当文件读取。query 只击穿上一次失败的入口 cache。\n mod = (await __niceevalDynamicImport(`${url}?niceeval-config=${Date.now()}`)) as {\n default?: Config;\n };\n }\n else {\n throw e;\n }\n }\n if (!mod.default)\n throw new Error(t(\"cli.config.noDefault\"));\n return mod.default;\n}\n"]}
1
+ {"version":3,"file":"load-config.js","sourceRoot":"","sources":["load-config.ts"],"names":[],"mappings":";;AA2DA,oDAEC;AAED,kDAEC;AAjED,kEAAkE;AAClE,kFAAkF;AAClF,qCAAqC;AACrC,yCAAiC;AACjC,uCAAyC;AACzC,qCAAuC;AACvC,uDAAsD;AACtD,8CAAoC;AAEpC,SAAS,wBAAwB,CAAC,KAAc;IAC5C,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ;QAC7B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAEC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC;AAClD,CAAC;AACD,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAgB;IACzD,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAEH,CAAC;IACF,IAAI,CAAC;QACD,GAAG,GAAG,OAAO;YACT,CAAC,CAAE,CAAC,MAAM,IAAA,mCAAiB,EAAC,IAAI,CAAC,CAE/B;YACF,CAAC,CAAE,CAAC,MAAM,uBAAuB,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAEzD,CAAC;IACX,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,sDAAsD;QACtD,uDAAuD;QACvD,wDAAwD;QACxD,iDAAiD;QACjD,qCAAqC;QACrC,IAAI,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACrC,IAAA,cAAQ,GAAE,CAAC;YACX,6CAA6C;YAC7C,sEAAsE;YACtE,+CAA+C;YAC/C,GAAG,GAAG,CAAC,MAAM,uBAAuB,CAAC,GAAG,GAAG,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAE3E,CAAC;QACN,CAAC;aACI,CAAC;YACF,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,OAAO;QACZ,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,sBAAsB,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC;AACvB,CAAC;AACD,qFAAqF;AACrF,SAAgB,oBAAoB,CAAC,GAAW;IAC5C,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AACD,yFAAyF;AACzF,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC","sourcesContent":["// niceeval.config.ts 装载:CLI 与 view 共用。view 本地模式每次重建传 freshImport,\n// 让 config.report / config.theme 及其整棵 import 图失效(docs/feature/reports/README.md)。\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { register } from \"tsx/esm/api\";\nimport { freshImportModule } from \"./fresh-import.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { Config } from \"./runner/types.ts\";\nfunction needsAdditionalTsxLoader(error: unknown): boolean {\n return (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as {\n code?: unknown;\n }).code === \"ERR_UNKNOWN_FILE_EXTENSION\");\n}\nasync function loadConfigModule(cwd: string, rebuild: boolean): Promise<Config> {\n const path = join(cwd, \"niceeval.config.ts\");\n if (!existsSync(path)) {\n throw new Error(t(\"cli.config.missing\"));\n }\n let mod: {\n default?: Config;\n };\n try {\n mod = rebuild\n ? ((await freshImportModule(path)) as {\n default?: Config;\n })\n : ((await __niceevalDynamicImport(pathToFileURL(path).href)) as {\n default?: Config;\n });\n }\n catch (e) {\n // 全局 tsx hook 能装载 config.ts,但 Node ESM 在某些项目形态下会让它的静态\n // import 回落原生 loader;config 一旦 import 了 Report .tsx 就报\n // ERR_UNKNOWN_FILE_EXTENSION。只对普通一次性装载的能力错误补一层 tsx hook\n // 重试,用户模块自己抛错时不重放副作用。fresh 装载不能退回 canonical URL:\n // 它可能已被 view 启动时缓存,从而用上一代成功配置掩盖当前损坏。\n if (!rebuild && needsAdditionalTsxLoader(e)) {\n const url = pathToFileURL(path).href;\n register();\n // 这是一次性 CLI 装载器:保留 hook 到进程结束。不用 namespace——\n // config 图可能进入 CJS package,tsx 在 Node builtin URL 上传播 namespace query\n // 会把 node:util 误当文件读取。query 只击穿上一次失败的入口 cache。\n mod = (await __niceevalDynamicImport(`${url}?niceeval-config=${Date.now()}`)) as {\n default?: Config;\n };\n }\n else {\n throw e;\n }\n }\n if (!mod.default)\n throw new Error(t(\"cli.config.noDefault\"));\n return mod.default;\n}\n/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */\nexport function loadConfigModuleOnce(cwd: string): Promise<Config> {\n return loadConfigModule(cwd, false);\n}\n/** Serial callers deliberately request a new module graph rather than a boolean mode. */\nexport function rebuildConfigModule(cwd: string): Promise<Config> {\n return loadConfigModule(cwd, true);\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Config } from "./runner/types.cjs";
2
- export declare function loadConfigFile(cwd: string, options?: {
3
- freshImport?: boolean;
4
- }): Promise<Config>;
2
+ /** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
3
+ export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
4
+ /** Serial callers deliberately request a new module graph rather than a boolean mode. */
5
+ export declare function rebuildConfigModule(cwd: string): Promise<Config>;
@@ -1,4 +1,5 @@
1
1
  import type { Config } from "./runner/types.mjs";
2
- export declare function loadConfigFile(cwd: string, options?: {
3
- freshImport?: boolean;
4
- }): Promise<Config>;
2
+ /** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
3
+ export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
4
+ /** Serial callers deliberately request a new module graph rather than a boolean mode. */
5
+ export declare function rebuildConfigModule(cwd: string): Promise<Config>;
@@ -1,4 +1,5 @@
1
1
  import type { Config } from "./runner/types.js";
2
- export declare function loadConfigFile(cwd: string, options?: {
3
- freshImport?: boolean;
4
- }): Promise<Config>;
2
+ /** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
3
+ export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
4
+ /** Serial callers deliberately request a new module graph rather than a boolean mode. */
5
+ export declare function rebuildConfigModule(cwd: string): Promise<Config>;
@@ -1,6 +1,8 @@
1
1
  import { createRequire as __niceevalCreateRequire } from "node:module";
2
2
  const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
3
  const __niceevalCanonical = __niceevalRequire("./load-config.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["loadConfigFile"];
5
- export { __niceevalExport0 as loadConfigFile };
4
+ const __niceevalExport0 = __niceevalCanonical["loadConfigModuleOnce"];
5
+ export { __niceevalExport0 as loadConfigModuleOnce };
6
+ const __niceevalExport1 = __niceevalCanonical["rebuildConfigModule"];
7
+ export { __niceevalExport1 as rebuildConfigModule };
6
8
  //# sourceMappingURL=load-config.js.map
@@ -191,13 +191,27 @@ function parseCodexTranscript(raw) {
191
191
  if (!startedCallIds.has(callId)) {
192
192
  emitCall(callId, "command_execution", { command }, "shell", (0, command_projection_ts_1.opaqueCommandProjection)("unsupported-protocol"));
193
193
  }
194
- const exit = get(item, "exit_code");
194
+ // `codex exec --json` uses snake_case while app-server v2 keeps the
195
+ // protocol's camelCase fields after normalizeItem() rewrites only the
196
+ // tagged-union type. Both are public Codex transports and must close
197
+ // to the same provider-neutral result.
198
+ const exit = get(item, "exit_code") ?? get(item, "exitCode");
199
+ const output = get(item, "aggregated_output") ??
200
+ get(item, "aggregatedOutput") ??
201
+ get(item, "output");
195
202
  const statusStr = get(item, "status");
196
- const success = exit === 0 || (exit == null && statusStr !== "failed" && statusStr !== "error");
197
- emitResult(callId, {
198
- output: (get(item, "aggregated_output") ?? get(item, "output") ?? null),
199
- exit_code: (exit ?? null),
200
- }, success ? "completed" : "failed");
203
+ const status = statusStr === "declined" || statusStr === "rejected"
204
+ ? "rejected"
205
+ : exit === 0 || (exit == null && statusStr !== "failed" && statusStr !== "error")
206
+ ? "completed"
207
+ : "failed";
208
+ const result = output === undefined && exit === undefined
209
+ ? undefined
210
+ : {
211
+ output: (output ?? null),
212
+ exit_code: (exit ?? null),
213
+ };
214
+ emitResult(callId, result, status);
201
215
  return;
202
216
  }
203
217
  case "mcp_tool_call": {
@@ -284,11 +298,19 @@ function parseCodexTranscript(raw) {
284
298
  case "thread.started":
285
299
  case "thread.completed":
286
300
  case "turn.started":
287
- case "turn.completed":
288
301
  case "response.created":
289
302
  case "response.completed":
290
303
  case "response.cancelled":
291
304
  break;
305
+ case "turn.completed": {
306
+ const turn = get(data, "turn");
307
+ if (get(turn, "status") !== "failed")
308
+ break;
309
+ const err = get(turn, "error");
310
+ const msg = get(err, "message") ?? get(data, "message") ?? "turn failed";
311
+ events.push({ type: "error", message: String(msg) });
312
+ break;
313
+ }
292
314
  case "turn.failed":
293
315
  case "response.failed": {
294
316
  const err = get(data, "error");
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI Codex CLI transcript 解析器(关键路径)。\n// 两类输入都吃:\n// 1. `codex exec --json` 打到 stdout 的事件 JSONL(thread.* / turn.* / item.* / response.*);\n// 2. 磁盘上 session rollout JSONL(ResponseItem:message / function_call / reasoning ...)。\n// 唯一硬活:把这堆五花八门的原始事件归一成 niceeval 的 StreamEvent[]。\nimport type { CommandProjection, StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n// ───────────────────────── 工具名归一 ─────────────────────────\n/** Codex 特有别名 + 裸动词(codex transcript 的工具名由 CLI 控制,裸动词安全);通用别名走基表。 */\nexport const CODEX_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n file_change: \"file_edit\",\n update_plan: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, CODEX_TOOL_ALIASES);\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 宽松取一个对象字段(原始 JSON 尚未验证,这里只做存在性收口)。 */\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\n/** 字符串则尝试 JSON.parse,失败原样返回;对象原样返回。 */\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\n/** 从 content(string | block[])里抠出纯文本。 */\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n continue;\n }\n const t = get(block, \"text\") ?? get(block, \"content\") ?? get(block, \"thinking\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n/** 从 reasoning item 抠文本(text / content / summary[].text)。 */\nfunction extractReasoning(item: unknown): string {\n const direct = get(item, \"text\") ?? get(item, \"content\");\n if (typeof direct === \"string\" && direct)\n return direct;\n const summary = get(item, \"summary\");\n if (Array.isArray(summary))\n return extractText(summary);\n return extractText(direct);\n}\n// ───────────────────────── usage 聚合 ─────────────────────────\n/** 从一个 usage-like 对象读出增量(支持 input/output_tokens 与 prompt/completion_tokens 两套命名)。 */\nfunction readUsage(u: unknown): {\n input: number;\n output: number;\n cacheRead: number;\n reasoning: number;\n} | null {\n if (!u || typeof u !== \"object\")\n return null;\n const o = u as globalThis.Record<string, unknown>;\n const num = (...keys: string[]): number => {\n for (const k of keys) {\n const v = o[k];\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n };\n const rawInput = num(\"input_tokens\", \"prompt_tokens\", \"inputTokens\", \"promptTokens\");\n const cacheRead = num(\"cached_input_tokens\", \"cache_read_input_tokens\", \"cache_read_tokens\", \"cacheReadTokens\");\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,落互斥桶前扣掉\n // (docs/feature/adapters/sdk/codex-cli/cost.md)\n const input = Math.max(0, rawInput - cacheRead);\n const output = num(\"output_tokens\", \"completion_tokens\", \"outputTokens\", \"completionTokens\");\n // codex-rs TokenUsage 结构体与 Responses API usage.output_tokens_details 都拆出这项:\n // 推理模型(o-series/gpt-5 系列)的思考 token,已计入 output 但值得单列展示。\n const reasoning = num(\"reasoning_output_tokens\", \"reasoning_tokens\", \"reasoningOutputTokens\", \"reasoningTokens\");\n if (input === 0 && output === 0 && cacheRead === 0 && reasoning === 0)\n return null;\n return { input, output, cacheRead, reasoning };\n}\n/** 防御式地从一行事件里找到第一处 usage(优先级顺序,每行至多取一次,避免重复计数)。 */\nfunction pickUsage(data: unknown): unknown {\n return (get(data, \"usage\") ??\n get(get(data, \"payload\"), \"usage\") ??\n get(get(data, \"item\"), \"usage\") ??\n get(get(data, \"turn\"), \"usage\") ??\n get(get(data, \"response\"), \"usage\") ??\n null);\n}\n// ───────────────────────── compaction 标记 ─────────────────────────\n/**\n * 仅在出现可信压缩标记时才认(保守):type / item.type / subtype 含 compact 或 context_truncat。\n * 不再匹配 \"summariz\"——任何名字带 summarize 的工具 / item(如 summarization_tool)都会被\n * 误判成压缩边界并整条吞掉,污染计数且丢事件。命中即吞整条事件,匹配面必须窄。\n */\nfunction isCompactionMarker(eventType: unknown, data: unknown): boolean {\n const candidates = [eventType, get(get(data, \"item\"), \"type\"), get(data, \"subtype\")];\n for (const c of candidates) {\n if (typeof c !== \"string\")\n continue;\n const s = c.toLowerCase();\n if (s.includes(\"compact\") || s.includes(\"context_truncat\"))\n return true;\n }\n return false;\n}\n// ───────────────────────── 主解析 ─────────────────────────\nexport function parseCodexTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let reasoningTokens = 0;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // 配对状态:已 started 的 callId(命令类工具的 started/completed 收口),\n // 以及无显式 call_id 时的 FIFO 兜底队列(老式 function_call_output 配对)。\n const startedCallIds = new Set<string>();\n const pendingCallIds: string[] = [];\n let synth = 0;\n const nextSynthId = (prefix: string): string => `${prefix}_${++synth}`;\n const addUsageFrom = (data: unknown): void => {\n const u = readUsage(pickUsage(data));\n if (!u)\n return;\n inputTokens += u.input;\n outputTokens += u.output;\n cacheReadTokens += u.cacheRead;\n reasoningTokens += u.reasoning;\n requests += 1;\n };\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n const emitResult = (callId: string, output: JsonValue | undefined, status: \"completed\" | \"failed\" | \"rejected\"): void => {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output, status });\n };\n // 处理 item.started / item.completed 里的 item。\n const handleItem = (item: unknown, isCompleted: boolean): void => {\n if (!item || typeof item !== \"object\")\n return;\n const itemType = get(item, \"type\");\n const idRaw = get(item, \"id\");\n const baseId = typeof idRaw === \"string\" || typeof idRaw === \"number\" ? String(idRaw) : \"\";\n switch (itemType) {\n case \"reasoning\":\n case \"thinking\": {\n // 思考只在 completed 落一次,避免 started/completed 重复。\n if (!isCompleted)\n return;\n const text = extractReasoning(item);\n if (text)\n events.push({ type: \"thinking\", text });\n return;\n }\n case \"agent_message\":\n case \"assistant_message\":\n case \"message\": {\n if (!isCompleted)\n return;\n const text = extractText(get(item, \"text\") ?? get(item, \"content\") ?? get(item, \"message\"));\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n return;\n }\n case \"command_execution\":\n case \"local_shell_call\": {\n const callId = baseId || nextSynthId(\"cmd\");\n const command = get(item, \"command\") ?? get(get(item, \"action\"), \"command\");\n if (!isCompleted) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n }\n const exit = get(item, \"exit_code\");\n const statusStr = get(item, \"status\");\n const success = exit === 0 || (exit == null && statusStr !== \"failed\" && statusStr !== \"error\");\n emitResult(callId, {\n output: (get(item, \"aggregated_output\") ?? get(item, \"output\") ?? null) as JsonValue,\n exit_code: (exit ?? null) as JsonValue,\n }, success ? \"completed\" : \"failed\");\n return;\n }\n case \"mcp_tool_call\": {\n const callId = baseId || nextSynthId(\"mcp\");\n const server = get(item, \"server\");\n const toolRaw = get(item, \"tool\") ?? get(item, \"name\") ?? \"unknown\";\n const originalName = typeof server === \"string\" ? `${server}.${String(toolRaw)}` : String(toolRaw);\n const input = coerceArgs(get(item, \"arguments\") ?? get(item, \"input\"));\n if (!isCompleted) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n }\n const statusStr = get(item, \"status\");\n const success = !get(item, \"error\") && statusStr !== \"failed\";\n emitResult(callId, (get(item, \"result\") ?? null) as JsonValue, success ? \"completed\" : \"failed\");\n return;\n }\n case \"web_search\": {\n const callId = baseId || nextSynthId(\"web\");\n const query = get(item, \"query\") ?? get(item, \"search\");\n if (!isCompleted) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n }\n emitResult(callId, (get(item, \"results\") ?? get(item, \"result\") ?? null) as JsonValue, \"completed\");\n return;\n }\n case \"file_change\":\n case \"patch\":\n case \"file_patch\": {\n if (!isCompleted)\n return;\n const changes = get(item, \"changes\");\n const list = Array.isArray(changes) ? changes : [{ path: get(item, \"path\") }];\n list.forEach((ch, i) => {\n const path = get(ch, \"path\") ?? get(ch, \"file\");\n const kindRaw = get(ch, \"kind\") ?? get(ch, \"type\") ?? get(item, \"kind\");\n const kind = typeof kindRaw === \"string\" ? kindRaw.toLowerCase() : \"update\";\n const tool: ToolName = kind === \"add\" || kind === \"delete\" ? \"file_write\" : \"file_edit\";\n const callId = `${baseId || \"patch\"}#${i}`;\n emitCall(callId, \"file_change\", { path, kind } as JsonValue, tool, notCommandProjection());\n emitResult(callId, { path, kind } as JsonValue, \"completed\");\n });\n return;\n }\n case \"error\": {\n const msg = get(item, \"message\") ?? get(item, \"text\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n return;\n }\n default:\n return; // todo_list / 其它 item 类型暂不映射\n }\n };\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let data: unknown;\n try {\n data = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n addUsageFrom(data);\n const eventType = (get(data, \"type\") ?? get(data, \"event\") ?? get(data, \"kind\")) as unknown;\n if (isCompactionMarker(eventType, data)) {\n events.push({ type: \"compaction\" });\n compactions += 1;\n continue;\n }\n switch (eventType) {\n // ── 控制流:仅在失败时落 error ──\n case \"thread.started\":\n case \"thread.completed\":\n case \"turn.started\":\n case \"turn.completed\":\n case \"response.created\":\n case \"response.completed\":\n case \"response.cancelled\":\n break;\n case \"turn.failed\":\n case \"response.failed\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // ── 主路径:item.* ──\n case \"item.started\":\n handleItem(get(data, \"item\"), false);\n break;\n case \"item.updated\":\n // 中间态忽略,等 completed\n break;\n case \"item.completed\":\n handleItem(get(data, \"item\"), true);\n break;\n // ── 老式 / session rollout ResponseItem ──\n case \"message\":\n case \"chat\": {\n const roleRaw = get(data, \"role\") ?? (get(data, \"from\") === \"assistant\" ? \"assistant\" : \"user\");\n const role = roleRaw === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(data, \"content\") ?? get(data, \"text\") ?? get(data, \"message\"));\n if (text)\n events.push({ type: \"message\", role, text });\n break;\n }\n case \"reasoning\":\n case \"thinking\":\n case \"thought\": {\n const text = extractReasoning(data);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"function_call\":\n case \"tool_call\":\n case \"tool_use\":\n case \"custom_tool_call\":\n case \"action\":\n case \"local_shell_call\": {\n const isShell = eventType === \"local_shell_call\";\n const nameRaw = isShell\n ? \"shell\"\n : (get(data, \"name\") ?? get(get(data, \"function\"), \"name\") ?? get(data, \"tool\") ?? get(data, \"action\") ?? \"unknown\");\n const name = String(nameRaw);\n const rawArgs = isShell\n ? (get(data, \"action\") ?? get(data, \"input\"))\n : (get(get(data, \"function\"), \"arguments\") ?? get(data, \"arguments\") ?? get(data, \"input\") ?? get(data, \"params\"));\n const input = coerceArgs(rawArgs);\n const explicit = get(data, \"call_id\") ?? get(data, \"id\") ?? get(data, \"tool_call_id\");\n const callId = explicit != null ? String(explicit) : nextSynthId(\"call\");\n if (explicit == null)\n pendingCallIds.push(callId);\n emitCall(callId, name, input, normalizeToolName(name), isShell ? opaqueCommandProjection(\"unsupported-protocol\") : notCommandProjection());\n break;\n }\n case \"function_call_output\":\n case \"tool_result\":\n case \"tool_response\":\n case \"action_result\":\n case \"local_shell_call_output\": {\n const explicit = get(data, \"call_id\") ?? get(data, \"tool_call_id\") ?? get(data, \"id\");\n const callId = explicit != null ? String(explicit) : pendingCallIds.shift() ?? nextSynthId(\"result\");\n const rawOut = get(data, \"output\") ?? get(data, \"result\") ?? get(data, \"content\");\n const { output, status } = interpretOutput(rawOut, data);\n emitResult(callId, output, status);\n break;\n }\n case \"error\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? get(data, \"content\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // output_text.delta / output_text.done 是同一条 assistant 文本的流式分片,\n // 最终文本会经 agent_message item / message ResponseItem 落地,这里直接丢弃避免重复。\n case \"output_text.delta\":\n case \"output_text.done\":\n break;\n default: {\n // 兜底:按结构猜。\n const role = get(data, \"role\");\n if (role === \"assistant\" || role === \"user\") {\n const text = extractText(get(data, \"content\") ?? get(data, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n }\n }\n }\n catch {\n // 单行处理异常不应拖垮整条 transcript。\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一行真的带回了 usage;整份 transcript 没有任何 usage 行时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (reasoningTokens > 0)\n usage.reasoningTokens = reasoningTokens;\n if (requests > 0)\n usage.requests = requests;\n return { events, usage, compactions, parseSuccess };\n}\n/**\n * 解读一条工具结果输出:显式 success/error → status 字符串 → exit_code,层层找成败证据。\n * 都没有才默认 completed —— 这是乐观兜底:codex 不带任何成败字段的结果会被记成成功,\n * noFailedActions() 这类负断言可能因此假通过。所以证据检查要尽量全,别轻易走到兜底。\n */\nfunction interpretOutput(rawOut: unknown, data: unknown): {\n output: JsonValue | undefined;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n // 显式 success / error 优先。\n const explicitSuccess = get(data, \"success\");\n if (explicitSuccess === false)\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n if (get(data, \"error\"))\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n // 事件自带 status 字符串(item/data 两层都看)。\n const statusStr = get(data, \"status\") ?? get(get(data, \"item\"), \"status\");\n if (statusStr === \"failed\" || statusStr === \"error\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n }\n if (statusStr === \"rejected\" || statusStr === \"declined\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"rejected\" };\n }\n // 字符串输出尝试解析 exit_code(codex shell 结果常见)。\n let parsed: unknown = rawOut;\n if (typeof rawOut === \"string\") {\n try {\n parsed = JSON.parse(rawOut);\n }\n catch {\n parsed = rawOut;\n }\n }\n const exit = get(parsed, \"exit_code\") ?? get(parsed, \"exitCode\") ?? get(get(parsed, \"metadata\"), \"exit_code\");\n if (typeof exit === \"number\") {\n return { output: (parsed ?? null) as JsonValue, status: exit === 0 ? \"completed\" : \"failed\" };\n }\n return { output: (parsed ?? null) as JsonValue, status: \"completed\" };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseCodex(raw: string | undefined): StreamEvent[] {\n return parseCodexTranscript(raw).events;\n}\n"]}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI Codex CLI transcript 解析器(关键路径)。\n// 两类输入都吃:\n// 1. `codex exec --json` 打到 stdout 的事件 JSONL(thread.* / turn.* / item.* / response.*);\n// 2. 磁盘上 session rollout JSONL(ResponseItem:message / function_call / reasoning ...)。\n// 唯一硬活:把这堆五花八门的原始事件归一成 niceeval 的 StreamEvent[]。\nimport type { CommandProjection, StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n// ───────────────────────── 工具名归一 ─────────────────────────\n/** Codex 特有别名 + 裸动词(codex transcript 的工具名由 CLI 控制,裸动词安全);通用别名走基表。 */\nexport const CODEX_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n file_change: \"file_edit\",\n update_plan: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, CODEX_TOOL_ALIASES);\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 宽松取一个对象字段(原始 JSON 尚未验证,这里只做存在性收口)。 */\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\n/** 字符串则尝试 JSON.parse,失败原样返回;对象原样返回。 */\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\n/** 从 content(string | block[])里抠出纯文本。 */\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n continue;\n }\n const t = get(block, \"text\") ?? get(block, \"content\") ?? get(block, \"thinking\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n/** 从 reasoning item 抠文本(text / content / summary[].text)。 */\nfunction extractReasoning(item: unknown): string {\n const direct = get(item, \"text\") ?? get(item, \"content\");\n if (typeof direct === \"string\" && direct)\n return direct;\n const summary = get(item, \"summary\");\n if (Array.isArray(summary))\n return extractText(summary);\n return extractText(direct);\n}\n// ───────────────────────── usage 聚合 ─────────────────────────\n/** 从一个 usage-like 对象读出增量(支持 input/output_tokens 与 prompt/completion_tokens 两套命名)。 */\nfunction readUsage(u: unknown): {\n input: number;\n output: number;\n cacheRead: number;\n reasoning: number;\n} | null {\n if (!u || typeof u !== \"object\")\n return null;\n const o = u as globalThis.Record<string, unknown>;\n const num = (...keys: string[]): number => {\n for (const k of keys) {\n const v = o[k];\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n };\n const rawInput = num(\"input_tokens\", \"prompt_tokens\", \"inputTokens\", \"promptTokens\");\n const cacheRead = num(\"cached_input_tokens\", \"cache_read_input_tokens\", \"cache_read_tokens\", \"cacheReadTokens\");\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,落互斥桶前扣掉\n // (docs/feature/adapters/sdk/codex-cli/cost.md)\n const input = Math.max(0, rawInput - cacheRead);\n const output = num(\"output_tokens\", \"completion_tokens\", \"outputTokens\", \"completionTokens\");\n // codex-rs TokenUsage 结构体与 Responses API usage.output_tokens_details 都拆出这项:\n // 推理模型(o-series/gpt-5 系列)的思考 token,已计入 output 但值得单列展示。\n const reasoning = num(\"reasoning_output_tokens\", \"reasoning_tokens\", \"reasoningOutputTokens\", \"reasoningTokens\");\n if (input === 0 && output === 0 && cacheRead === 0 && reasoning === 0)\n return null;\n return { input, output, cacheRead, reasoning };\n}\n/** 防御式地从一行事件里找到第一处 usage(优先级顺序,每行至多取一次,避免重复计数)。 */\nfunction pickUsage(data: unknown): unknown {\n return (get(data, \"usage\") ??\n get(get(data, \"payload\"), \"usage\") ??\n get(get(data, \"item\"), \"usage\") ??\n get(get(data, \"turn\"), \"usage\") ??\n get(get(data, \"response\"), \"usage\") ??\n null);\n}\n// ───────────────────────── compaction 标记 ─────────────────────────\n/**\n * 仅在出现可信压缩标记时才认(保守):type / item.type / subtype 含 compact 或 context_truncat。\n * 不再匹配 \"summariz\"——任何名字带 summarize 的工具 / item(如 summarization_tool)都会被\n * 误判成压缩边界并整条吞掉,污染计数且丢事件。命中即吞整条事件,匹配面必须窄。\n */\nfunction isCompactionMarker(eventType: unknown, data: unknown): boolean {\n const candidates = [eventType, get(get(data, \"item\"), \"type\"), get(data, \"subtype\")];\n for (const c of candidates) {\n if (typeof c !== \"string\")\n continue;\n const s = c.toLowerCase();\n if (s.includes(\"compact\") || s.includes(\"context_truncat\"))\n return true;\n }\n return false;\n}\n// ───────────────────────── 主解析 ─────────────────────────\nexport function parseCodexTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let reasoningTokens = 0;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // 配对状态:已 started 的 callId(命令类工具的 started/completed 收口),\n // 以及无显式 call_id 时的 FIFO 兜底队列(老式 function_call_output 配对)。\n const startedCallIds = new Set<string>();\n const pendingCallIds: string[] = [];\n let synth = 0;\n const nextSynthId = (prefix: string): string => `${prefix}_${++synth}`;\n const addUsageFrom = (data: unknown): void => {\n const u = readUsage(pickUsage(data));\n if (!u)\n return;\n inputTokens += u.input;\n outputTokens += u.output;\n cacheReadTokens += u.cacheRead;\n reasoningTokens += u.reasoning;\n requests += 1;\n };\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n const emitResult = (callId: string, output: JsonValue | undefined, status: \"completed\" | \"failed\" | \"rejected\"): void => {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output, status });\n };\n // 处理 item.started / item.completed 里的 item。\n const handleItem = (item: unknown, isCompleted: boolean): void => {\n if (!item || typeof item !== \"object\")\n return;\n const itemType = get(item, \"type\");\n const idRaw = get(item, \"id\");\n const baseId = typeof idRaw === \"string\" || typeof idRaw === \"number\" ? String(idRaw) : \"\";\n switch (itemType) {\n case \"reasoning\":\n case \"thinking\": {\n // 思考只在 completed 落一次,避免 started/completed 重复。\n if (!isCompleted)\n return;\n const text = extractReasoning(item);\n if (text)\n events.push({ type: \"thinking\", text });\n return;\n }\n case \"agent_message\":\n case \"assistant_message\":\n case \"message\": {\n if (!isCompleted)\n return;\n const text = extractText(get(item, \"text\") ?? get(item, \"content\") ?? get(item, \"message\"));\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n return;\n }\n case \"command_execution\":\n case \"local_shell_call\": {\n const callId = baseId || nextSynthId(\"cmd\");\n const command = get(item, \"command\") ?? get(get(item, \"action\"), \"command\");\n if (!isCompleted) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n }\n // `codex exec --json` uses snake_case while app-server v2 keeps the\n // protocol's camelCase fields after normalizeItem() rewrites only the\n // tagged-union type. Both are public Codex transports and must close\n // to the same provider-neutral result.\n const exit = get(item, \"exit_code\") ?? get(item, \"exitCode\");\n const output = get(item, \"aggregated_output\") ??\n get(item, \"aggregatedOutput\") ??\n get(item, \"output\");\n const statusStr = get(item, \"status\");\n const status = statusStr === \"declined\" || statusStr === \"rejected\"\n ? \"rejected\" as const\n : exit === 0 || (exit == null && statusStr !== \"failed\" && statusStr !== \"error\")\n ? \"completed\" as const\n : \"failed\" as const;\n const result = output === undefined && exit === undefined\n ? undefined\n : {\n output: (output ?? null) as JsonValue,\n exit_code: (exit ?? null) as JsonValue,\n };\n emitResult(callId, result, status);\n return;\n }\n case \"mcp_tool_call\": {\n const callId = baseId || nextSynthId(\"mcp\");\n const server = get(item, \"server\");\n const toolRaw = get(item, \"tool\") ?? get(item, \"name\") ?? \"unknown\";\n const originalName = typeof server === \"string\" ? `${server}.${String(toolRaw)}` : String(toolRaw);\n const input = coerceArgs(get(item, \"arguments\") ?? get(item, \"input\"));\n if (!isCompleted) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n }\n const statusStr = get(item, \"status\");\n const success = !get(item, \"error\") && statusStr !== \"failed\";\n emitResult(callId, (get(item, \"result\") ?? null) as JsonValue, success ? \"completed\" : \"failed\");\n return;\n }\n case \"web_search\": {\n const callId = baseId || nextSynthId(\"web\");\n const query = get(item, \"query\") ?? get(item, \"search\");\n if (!isCompleted) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n }\n emitResult(callId, (get(item, \"results\") ?? get(item, \"result\") ?? null) as JsonValue, \"completed\");\n return;\n }\n case \"file_change\":\n case \"patch\":\n case \"file_patch\": {\n if (!isCompleted)\n return;\n const changes = get(item, \"changes\");\n const list = Array.isArray(changes) ? changes : [{ path: get(item, \"path\") }];\n list.forEach((ch, i) => {\n const path = get(ch, \"path\") ?? get(ch, \"file\");\n const kindRaw = get(ch, \"kind\") ?? get(ch, \"type\") ?? get(item, \"kind\");\n const kind = typeof kindRaw === \"string\" ? kindRaw.toLowerCase() : \"update\";\n const tool: ToolName = kind === \"add\" || kind === \"delete\" ? \"file_write\" : \"file_edit\";\n const callId = `${baseId || \"patch\"}#${i}`;\n emitCall(callId, \"file_change\", { path, kind } as JsonValue, tool, notCommandProjection());\n emitResult(callId, { path, kind } as JsonValue, \"completed\");\n });\n return;\n }\n case \"error\": {\n const msg = get(item, \"message\") ?? get(item, \"text\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n return;\n }\n default:\n return; // todo_list / 其它 item 类型暂不映射\n }\n };\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let data: unknown;\n try {\n data = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n addUsageFrom(data);\n const eventType = (get(data, \"type\") ?? get(data, \"event\") ?? get(data, \"kind\")) as unknown;\n if (isCompactionMarker(eventType, data)) {\n events.push({ type: \"compaction\" });\n compactions += 1;\n continue;\n }\n switch (eventType) {\n // ── 控制流:仅在失败时落 error ──\n case \"thread.started\":\n case \"thread.completed\":\n case \"turn.started\":\n case \"response.created\":\n case \"response.completed\":\n case \"response.cancelled\":\n break;\n case \"turn.completed\": {\n const turn = get(data, \"turn\");\n if (get(turn, \"status\") !== \"failed\")\n break;\n const err = get(turn, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n case \"turn.failed\":\n case \"response.failed\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // ── 主路径:item.* ──\n case \"item.started\":\n handleItem(get(data, \"item\"), false);\n break;\n case \"item.updated\":\n // 中间态忽略,等 completed\n break;\n case \"item.completed\":\n handleItem(get(data, \"item\"), true);\n break;\n // ── 老式 / session rollout ResponseItem ──\n case \"message\":\n case \"chat\": {\n const roleRaw = get(data, \"role\") ?? (get(data, \"from\") === \"assistant\" ? \"assistant\" : \"user\");\n const role = roleRaw === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(data, \"content\") ?? get(data, \"text\") ?? get(data, \"message\"));\n if (text)\n events.push({ type: \"message\", role, text });\n break;\n }\n case \"reasoning\":\n case \"thinking\":\n case \"thought\": {\n const text = extractReasoning(data);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"function_call\":\n case \"tool_call\":\n case \"tool_use\":\n case \"custom_tool_call\":\n case \"action\":\n case \"local_shell_call\": {\n const isShell = eventType === \"local_shell_call\";\n const nameRaw = isShell\n ? \"shell\"\n : (get(data, \"name\") ?? get(get(data, \"function\"), \"name\") ?? get(data, \"tool\") ?? get(data, \"action\") ?? \"unknown\");\n const name = String(nameRaw);\n const rawArgs = isShell\n ? (get(data, \"action\") ?? get(data, \"input\"))\n : (get(get(data, \"function\"), \"arguments\") ?? get(data, \"arguments\") ?? get(data, \"input\") ?? get(data, \"params\"));\n const input = coerceArgs(rawArgs);\n const explicit = get(data, \"call_id\") ?? get(data, \"id\") ?? get(data, \"tool_call_id\");\n const callId = explicit != null ? String(explicit) : nextSynthId(\"call\");\n if (explicit == null)\n pendingCallIds.push(callId);\n emitCall(callId, name, input, normalizeToolName(name), isShell ? opaqueCommandProjection(\"unsupported-protocol\") : notCommandProjection());\n break;\n }\n case \"function_call_output\":\n case \"tool_result\":\n case \"tool_response\":\n case \"action_result\":\n case \"local_shell_call_output\": {\n const explicit = get(data, \"call_id\") ?? get(data, \"tool_call_id\") ?? get(data, \"id\");\n const callId = explicit != null ? String(explicit) : pendingCallIds.shift() ?? nextSynthId(\"result\");\n const rawOut = get(data, \"output\") ?? get(data, \"result\") ?? get(data, \"content\");\n const { output, status } = interpretOutput(rawOut, data);\n emitResult(callId, output, status);\n break;\n }\n case \"error\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? get(data, \"content\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // output_text.delta / output_text.done 是同一条 assistant 文本的流式分片,\n // 最终文本会经 agent_message item / message ResponseItem 落地,这里直接丢弃避免重复。\n case \"output_text.delta\":\n case \"output_text.done\":\n break;\n default: {\n // 兜底:按结构猜。\n const role = get(data, \"role\");\n if (role === \"assistant\" || role === \"user\") {\n const text = extractText(get(data, \"content\") ?? get(data, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n }\n }\n }\n catch {\n // 单行处理异常不应拖垮整条 transcript。\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一行真的带回了 usage;整份 transcript 没有任何 usage 行时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (reasoningTokens > 0)\n usage.reasoningTokens = reasoningTokens;\n if (requests > 0)\n usage.requests = requests;\n return { events, usage, compactions, parseSuccess };\n}\n/**\n * 解读一条工具结果输出:显式 success/error → status 字符串 → exit_code,层层找成败证据。\n * 都没有才默认 completed —— 这是乐观兜底:codex 不带任何成败字段的结果会被记成成功,\n * noFailedActions() 这类负断言可能因此假通过。所以证据检查要尽量全,别轻易走到兜底。\n */\nfunction interpretOutput(rawOut: unknown, data: unknown): {\n output: JsonValue | undefined;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n // 显式 success / error 优先。\n const explicitSuccess = get(data, \"success\");\n if (explicitSuccess === false)\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n if (get(data, \"error\"))\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n // 事件自带 status 字符串(item/data 两层都看)。\n const statusStr = get(data, \"status\") ?? get(get(data, \"item\"), \"status\");\n if (statusStr === \"failed\" || statusStr === \"error\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n }\n if (statusStr === \"rejected\" || statusStr === \"declined\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"rejected\" };\n }\n // 字符串输出尝试解析 exit_code(codex shell 结果常见)。\n let parsed: unknown = rawOut;\n if (typeof rawOut === \"string\") {\n try {\n parsed = JSON.parse(rawOut);\n }\n catch {\n parsed = rawOut;\n }\n }\n const exit = get(parsed, \"exit_code\") ?? get(parsed, \"exitCode\") ?? get(get(parsed, \"metadata\"), \"exit_code\");\n if (typeof exit === \"number\") {\n return { output: (parsed ?? null) as JsonValue, status: exit === 0 ? \"completed\" : \"failed\" };\n }\n return { output: (parsed ?? null) as JsonValue, status: \"completed\" };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseCodex(raw: string | undefined): StreamEvent[] {\n return parseCodexTranscript(raw).events;\n}\n"]}