niceeval 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/claude-code-native.cjs +213 -0
  7. package/dist/agents/claude-code-native.cjs.map +1 -0
  8. package/dist/agents/claude-code-native.d.cts +5 -0
  9. package/dist/agents/claude-code-native.d.mts +5 -0
  10. package/dist/agents/claude-code-native.d.ts +5 -0
  11. package/dist/agents/claude-code-native.js +6 -0
  12. package/dist/agents/claude-code-native.js.map +1 -0
  13. package/dist/agents/claude-code.cjs +26 -80
  14. package/dist/agents/claude-code.cjs.map +1 -1
  15. package/dist/agents/codex-app-server.cjs +314 -0
  16. package/dist/agents/codex-app-server.cjs.map +1 -0
  17. package/dist/agents/codex-app-server.d.cts +9 -0
  18. package/dist/agents/codex-app-server.d.mts +9 -0
  19. package/dist/agents/codex-app-server.d.ts +9 -0
  20. package/dist/agents/codex-app-server.js +6 -0
  21. package/dist/agents/codex-app-server.js.map +1 -0
  22. package/dist/agents/codex.cjs +19 -68
  23. package/dist/agents/codex.cjs.map +1 -1
  24. package/dist/agents/codex.d.cts +3 -3
  25. package/dist/agents/codex.d.mts +3 -3
  26. package/dist/agents/codex.d.ts +3 -3
  27. package/dist/agents/index.cjs +3 -1
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +1 -0
  30. package/dist/agents/index.d.mts +1 -0
  31. package/dist/agents/index.d.ts +1 -0
  32. package/dist/agents/index.js +84 -82
  33. package/dist/agents/index.mjs +84 -82
  34. package/dist/agents/managed-jsonl.cjs +207 -0
  35. package/dist/agents/managed-jsonl.cjs.map +1 -0
  36. package/dist/agents/managed-jsonl.d.cts +39 -0
  37. package/dist/agents/managed-jsonl.d.mts +39 -0
  38. package/dist/agents/managed-jsonl.d.ts +39 -0
  39. package/dist/agents/managed-jsonl.js +6 -0
  40. package/dist/agents/managed-jsonl.js.map +1 -0
  41. package/dist/agents/managed-process.cjs +31 -0
  42. package/dist/agents/managed-process.cjs.map +1 -0
  43. package/dist/agents/managed-process.d.cts +3 -0
  44. package/dist/agents/managed-process.d.mts +3 -0
  45. package/dist/agents/managed-process.d.ts +3 -0
  46. package/dist/agents/managed-process.js +6 -0
  47. package/dist/agents/managed-process.js.map +1 -0
  48. package/dist/agents/omp.cjs +18 -1
  49. package/dist/agents/omp.cjs.map +1 -1
  50. package/dist/agents/sdk-streams.cjs +11 -4
  51. package/dist/agents/sdk-streams.cjs.map +1 -1
  52. package/dist/agents/types.cjs.map +1 -1
  53. package/dist/agents/types.d.cts +8 -0
  54. package/dist/agents/types.d.mts +8 -0
  55. package/dist/agents/types.d.ts +8 -0
  56. package/dist/analysis/bindings.cjs +74 -19
  57. package/dist/analysis/bindings.cjs.map +1 -1
  58. package/dist/analysis/bindings.d.cts +534 -156
  59. package/dist/analysis/bindings.d.mts +534 -156
  60. package/dist/analysis/bindings.d.ts +534 -156
  61. package/dist/analysis/domain-view.cjs.map +1 -1
  62. package/dist/analysis/domain-view.d.cts +137 -8
  63. package/dist/analysis/domain-view.d.mts +137 -8
  64. package/dist/analysis/domain-view.d.ts +137 -8
  65. package/dist/analysis/index.cjs.map +1 -1
  66. package/dist/analysis/index.d.cts +1 -1
  67. package/dist/analysis/index.d.mts +1 -1
  68. package/dist/analysis/index.d.ts +1 -1
  69. package/dist/assertions/api.cjs.map +1 -1
  70. package/dist/assertions/api.d.cts +62 -0
  71. package/dist/assertions/api.d.mts +62 -0
  72. package/dist/assertions/api.d.ts +62 -0
  73. package/dist/assertions/judge.cjs +56 -5
  74. package/dist/assertions/judge.cjs.map +1 -1
  75. package/dist/assertions/match.cjs +66 -42
  76. package/dist/assertions/match.cjs.map +1 -1
  77. package/dist/assertions/match.d.cts +13 -0
  78. package/dist/assertions/match.d.mts +13 -0
  79. package/dist/assertions/match.d.ts +13 -0
  80. package/dist/assertions/record/attachment.cjs +104 -33
  81. package/dist/assertions/record/attachment.cjs.map +1 -1
  82. package/dist/assertions/record/attachment.d.cts +294 -57
  83. package/dist/assertions/record/attachment.d.mts +294 -57
  84. package/dist/assertions/record/attachment.d.ts +294 -57
  85. package/dist/assertions/record/codec.cjs +91 -17
  86. package/dist/assertions/record/codec.cjs.map +1 -1
  87. package/dist/assertions/record/codec.d.cts +280 -52
  88. package/dist/assertions/record/codec.d.mts +280 -52
  89. package/dist/assertions/record/codec.d.ts +280 -52
  90. package/dist/assertions/record/index.js +2 -0
  91. package/dist/assertions/record/model.cjs +16 -0
  92. package/dist/assertions/record/model.cjs.map +1 -1
  93. package/dist/assertions/record/model.d.cts +120 -13
  94. package/dist/assertions/record/model.d.mts +120 -13
  95. package/dist/assertions/record/model.d.ts +120 -13
  96. package/dist/assertions/record/model.js +2 -0
  97. package/dist/assertions/record/producer.cjs +70 -50
  98. package/dist/assertions/record/producer.cjs.map +1 -1
  99. package/dist/assertions/record/producer.d.cts +8 -7
  100. package/dist/assertions/record/producer.d.mts +8 -7
  101. package/dist/assertions/record/producer.d.ts +8 -7
  102. package/dist/assertions/runtime.cjs +49 -7
  103. package/dist/assertions/runtime.cjs.map +1 -1
  104. package/dist/cli/application.cjs +40 -0
  105. package/dist/cli/application.cjs.map +1 -0
  106. package/dist/cli/application.d.cts +129 -0
  107. package/dist/cli/application.d.mts +129 -0
  108. package/dist/cli/application.d.ts +129 -0
  109. package/dist/cli/application.js +24 -0
  110. package/dist/cli/application.js.map +1 -0
  111. package/dist/cli/bootstrap.cjs +10 -4
  112. package/dist/cli/bootstrap.cjs.map +1 -1
  113. package/dist/cli/node-application.cjs +123 -0
  114. package/dist/cli/node-application.cjs.map +1 -0
  115. package/dist/cli/node-application.d.cts +14 -0
  116. package/dist/cli/node-application.d.mts +14 -0
  117. package/dist/cli/node-application.d.ts +14 -0
  118. package/dist/cli/node-application.js +26 -0
  119. package/dist/cli/node-application.js.map +1 -0
  120. package/dist/cli/program.cjs +2807 -0
  121. package/dist/cli/program.cjs.map +1 -0
  122. package/dist/cli/program.d.cts +352 -0
  123. package/dist/cli/program.d.mts +352 -0
  124. package/dist/cli/program.d.ts +352 -0
  125. package/dist/cli/program.js +36 -0
  126. package/dist/cli/program.js.map +1 -0
  127. package/dist/cli/project-configuration.cjs +134 -0
  128. package/dist/cli/project-configuration.cjs.map +1 -0
  129. package/dist/cli/project-configuration.d.cts +64 -0
  130. package/dist/cli/project-configuration.d.mts +64 -0
  131. package/dist/cli/project-configuration.d.ts +64 -0
  132. package/dist/cli/project-configuration.js +22 -0
  133. package/dist/cli/project-configuration.js.map +1 -0
  134. package/dist/cli/record.cjs +20 -4
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +3 -3
  137. package/dist/cli/record.d.mts +3 -3
  138. package/dist/cli/record.d.ts +3 -3
  139. package/dist/cli.cjs +19 -3130
  140. package/dist/cli.cjs.map +1 -1
  141. package/dist/cli.d.cts +2 -148
  142. package/dist/cli.d.mts +2 -148
  143. package/dist/cli.d.ts +2 -148
  144. package/dist/cli.js +22 -30
  145. package/dist/context/assert-first.cjs +21 -15
  146. package/dist/context/assert-first.cjs.map +1 -1
  147. package/dist/context/assert-first.d.cts +1 -0
  148. package/dist/context/assert-first.d.mts +1 -0
  149. package/dist/context/assert-first.d.ts +1 -0
  150. package/dist/context/attempt-resources.cjs +13 -0
  151. package/dist/context/attempt-resources.cjs.map +1 -0
  152. package/dist/context/attempt-resources.d.cts +3 -0
  153. package/dist/context/attempt-resources.d.mts +3 -0
  154. package/dist/context/attempt-resources.d.ts +3 -0
  155. package/dist/context/attempt-resources.js +8 -0
  156. package/dist/context/attempt-resources.js.map +1 -0
  157. package/dist/context/session.cjs +4 -3
  158. package/dist/context/session.cjs.map +1 -1
  159. package/dist/context/session.d.cts +1 -0
  160. package/dist/context/session.d.mts +1 -0
  161. package/dist/context/session.d.ts +1 -0
  162. package/dist/eval/record/verdict.cjs +3 -2
  163. package/dist/eval/record/verdict.cjs.map +1 -1
  164. package/dist/experiment/host/index.cjs +1 -6
  165. package/dist/experiment/host/index.cjs.map +1 -1
  166. package/dist/experiment/host/index.d.cts +1 -0
  167. package/dist/experiment/host/index.d.mts +1 -0
  168. package/dist/experiment/host/index.d.ts +1 -0
  169. package/dist/load-config.cjs +13 -4
  170. package/dist/load-config.cjs.map +1 -1
  171. package/dist/load-config.d.cts +4 -3
  172. package/dist/load-config.d.mts +4 -3
  173. package/dist/load-config.d.ts +4 -3
  174. package/dist/load-config.js +4 -2
  175. package/dist/o11y/parsers/codex.cjs +29 -7
  176. package/dist/o11y/parsers/codex.cjs.map +1 -1
  177. package/dist/record/codec/core.d.cts +0 -2
  178. package/dist/record/codec/core.d.mts +0 -2
  179. package/dist/record/codec/core.d.ts +0 -2
  180. package/dist/record/codec/identifiers.cjs +2 -3
  181. package/dist/record/codec/identifiers.cjs.map +1 -1
  182. package/dist/record/codec/identifiers.d.cts +1 -2
  183. package/dist/record/codec/identifiers.d.mts +1 -2
  184. package/dist/record/codec/identifiers.d.ts +1 -2
  185. package/dist/record/codec/identifiers.js +10 -12
  186. package/dist/record/codec/index.js +42 -44
  187. package/dist/record/definition/attachment.cjs +1 -0
  188. package/dist/record/definition/attachment.cjs.map +1 -1
  189. package/dist/record/definition/attachment.d.cts +14 -0
  190. package/dist/record/definition/attachment.d.mts +14 -0
  191. package/dist/record/definition/attachment.d.ts +14 -0
  192. package/dist/record/family/assertions-v1.cjs +104 -0
  193. package/dist/record/family/assertions-v1.cjs.map +1 -0
  194. package/dist/record/family/assertions-v1.d.cts +2 -0
  195. package/dist/record/family/assertions-v1.d.mts +2 -0
  196. package/dist/record/family/assertions-v1.d.ts +2 -0
  197. package/dist/record/family/assertions-v1.js +6 -0
  198. package/dist/record/family/assertions-v1.js.map +1 -0
  199. package/dist/record/family/assertions.cjs +16 -5
  200. package/dist/record/family/assertions.cjs.map +1 -1
  201. package/dist/record/family/assertions.d.cts +510 -56
  202. package/dist/record/family/assertions.d.mts +510 -56
  203. package/dist/record/family/assertions.d.ts +510 -56
  204. package/dist/record/family/assertions.js +14 -10
  205. package/dist/record/family/catalog.cjs +17 -1
  206. package/dist/record/family/catalog.cjs.map +1 -1
  207. package/dist/record/family/catalog.d.cts +1292 -104
  208. package/dist/record/family/catalog.d.mts +1292 -104
  209. package/dist/record/family/catalog.d.ts +1292 -104
  210. package/dist/record/family/catalog.js +22 -20
  211. package/dist/record/family/index.js +144 -138
  212. package/dist/record/family/observability-v1.cjs +5 -0
  213. package/dist/record/family/observability-v1.cjs.map +1 -1
  214. package/dist/record/family/observability.cjs +1 -1
  215. package/dist/record/family/observability.cjs.map +1 -1
  216. package/dist/record/host/runtime.cjs +323 -173
  217. package/dist/record/host/runtime.cjs.map +1 -1
  218. package/dist/record/host/types.cjs.map +1 -1
  219. package/dist/record/host/types.d.cts +9 -7
  220. package/dist/record/host/types.d.mts +9 -7
  221. package/dist/record/host/types.d.ts +9 -7
  222. package/dist/record/model/core.cjs.map +1 -1
  223. package/dist/record/model/core.d.cts +1 -2
  224. package/dist/record/model/core.d.mts +1 -2
  225. package/dist/record/model/core.d.ts +1 -2
  226. package/dist/record/model/definition.cjs +1 -2
  227. package/dist/record/model/definition.cjs.map +1 -1
  228. package/dist/record/model/definition.d.cts +1 -7
  229. package/dist/record/model/definition.d.mts +1 -7
  230. package/dist/record/model/definition.d.ts +1 -7
  231. package/dist/record/model/identifiers.cjs +2 -3
  232. package/dist/record/model/identifiers.cjs.map +1 -1
  233. package/dist/record/model/identifiers.d.cts +1 -3
  234. package/dist/record/model/identifiers.d.mts +1 -3
  235. package/dist/record/model/identifiers.d.ts +1 -3
  236. package/dist/record/model/identifiers.js +36 -38
  237. package/dist/record/model/index.js +60 -62
  238. package/dist/record/platform/node.cjs +17 -7
  239. package/dist/record/platform/node.cjs.map +1 -1
  240. package/dist/record/platform/services.cjs.map +1 -1
  241. package/dist/record/platform/services.d.cts +8 -3
  242. package/dist/record/platform/services.d.mts +8 -3
  243. package/dist/record/platform/services.d.ts +8 -3
  244. package/dist/record/reader/format.cjs +16 -65
  245. package/dist/record/reader/format.cjs.map +1 -1
  246. package/dist/record/reader/format.d.cts +5 -9
  247. package/dist/record/reader/format.d.mts +5 -9
  248. package/dist/record/reader/format.d.ts +5 -9
  249. package/dist/record/reader/index.js +10 -8
  250. package/dist/record/reader/runtime.cjs +63 -32
  251. package/dist/record/reader/runtime.cjs.map +1 -1
  252. package/dist/record/reader/runtime.d.cts +40 -4
  253. package/dist/record/reader/runtime.d.mts +40 -4
  254. package/dist/record/reader/runtime.d.ts +40 -4
  255. package/dist/record/reader/runtime.js +6 -4
  256. package/dist/report/assets/enhance.js +5 -5
  257. package/dist/report/assets/styles.css +190 -24
  258. package/dist/report/built-in/result-components.cjs +8 -5
  259. package/dist/report/built-in/result-components.cjs.map +1 -1
  260. package/dist/report/built-in/standard.cjs +3 -0
  261. package/dist/report/built-in/standard.cjs.map +1 -1
  262. package/dist/report/built-in/standard.d.cts +2 -0
  263. package/dist/report/built-in/standard.d.mts +2 -0
  264. package/dist/report/built-in/standard.d.ts +2 -0
  265. package/dist/report/client-dist/app.js +53 -0
  266. package/dist/report/components/attempt-detail/compute.cjs +108 -231
  267. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  268. package/dist/report/components/attempt-detail/compute.d.cts +11 -45
  269. package/dist/report/components/attempt-detail/compute.d.mts +11 -45
  270. package/dist/report/components/attempt-detail/compute.d.ts +11 -45
  271. package/dist/report/components/attempt-detail/compute.js +2 -4
  272. package/dist/report/components/attempt-detail/content.cjs +4 -4
  273. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  274. package/dist/report/components/attempt-detail/validate.cjs +47 -4
  275. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  276. package/dist/report/components/entity-lists/compute.cjs +9 -15
  277. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  278. package/dist/report/components/entity-lists/content.cjs +53 -40
  279. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  280. package/dist/report/components/entity-lists/index.cjs +1 -3
  281. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  282. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  283. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  284. package/dist/report/components/summaries/index.cjs +5 -1
  285. package/dist/report/components/summaries/index.cjs.map +1 -1
  286. package/dist/report/definition/cell.cjs +14 -7
  287. package/dist/report/definition/cell.cjs.map +1 -1
  288. package/dist/report/definition/cell.d.cts +4 -0
  289. package/dist/report/definition/cell.d.mts +4 -0
  290. package/dist/report/definition/cell.d.ts +4 -0
  291. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  292. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  293. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  294. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  295. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  296. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  297. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  298. package/dist/report/definition/primitives/conversation.cjs +7 -0
  299. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  300. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  301. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  302. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  303. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  304. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  305. package/dist/report/definition/primitives.cjs +14 -1
  306. package/dist/report/definition/primitives.cjs.map +1 -1
  307. package/dist/report/definition/report.cjs +16 -8
  308. package/dist/report/definition/report.cjs.map +1 -1
  309. package/dist/report/definition/report.d.cts +6 -0
  310. package/dist/report/definition/report.d.mts +6 -0
  311. package/dist/report/definition/report.d.ts +6 -0
  312. package/dist/report/definition/table-text.cjs +12 -3
  313. package/dist/report/definition/table-text.cjs.map +1 -1
  314. package/dist/report/definition/table-text.d.cts +6 -1
  315. package/dist/report/definition/table-text.d.mts +6 -1
  316. package/dist/report/definition/table-text.d.ts +6 -1
  317. package/dist/report/execution/model.cjs +6 -14
  318. package/dist/report/execution/model.cjs.map +1 -1
  319. package/dist/report/execution/model.d.cts +5 -10
  320. package/dist/report/execution/model.d.mts +5 -10
  321. package/dist/report/execution/model.d.ts +5 -10
  322. package/dist/report/execution/model.js +6 -6
  323. package/dist/report/execution/paths.cjs +0 -11
  324. package/dist/report/execution/paths.cjs.map +1 -1
  325. package/dist/report/execution/paths.d.cts +0 -1
  326. package/dist/report/execution/paths.d.mts +0 -1
  327. package/dist/report/execution/paths.d.ts +0 -1
  328. package/dist/report/execution/paths.js +6 -8
  329. package/dist/report/host/execute.cjs +13 -22
  330. package/dist/report/host/execute.cjs.map +1 -1
  331. package/dist/report/host/execute.d.cts +1 -4
  332. package/dist/report/host/execute.d.mts +1 -4
  333. package/dist/report/host/execute.d.ts +1 -4
  334. package/dist/report/host/from-record.cjs +3 -0
  335. package/dist/report/host/from-record.cjs.map +1 -1
  336. package/dist/report/host/from-record.d.cts +4 -1
  337. package/dist/report/host/from-record.d.mts +4 -1
  338. package/dist/report/host/from-record.d.ts +4 -1
  339. package/dist/report/host/site-assets.cjs +1 -2
  340. package/dist/report/host/site-assets.cjs.map +1 -1
  341. package/dist/report/host/site-assets.d.cts +0 -1
  342. package/dist/report/host/site-assets.d.mts +0 -1
  343. package/dist/report/host/site-assets.d.ts +0 -1
  344. package/dist/report/host/site-assets.js +2 -4
  345. package/dist/report/host/static.cjs +71 -346
  346. package/dist/report/host/static.cjs.map +1 -1
  347. package/dist/report/host/static.d.cts +1 -3
  348. package/dist/report/host/static.d.mts +1 -3
  349. package/dist/report/host/static.d.ts +1 -3
  350. package/dist/report/host/static.js +2 -2
  351. package/dist/report/host/view-session.cjs.map +1 -1
  352. package/dist/report/host/view-session.d.cts +1 -1
  353. package/dist/report/host/view-session.d.mts +1 -1
  354. package/dist/report/host/view-session.d.ts +1 -1
  355. package/dist/report/model/locale.cjs +1 -1
  356. package/dist/report/model/locale.cjs.map +1 -1
  357. package/dist/report/model/locale.d.cts +1 -1
  358. package/dist/report/model/locale.d.mts +1 -1
  359. package/dist/report/model/locale.d.ts +1 -1
  360. package/dist/report/model/pricing.cjs +2 -2
  361. package/dist/report/model/pricing.cjs.map +1 -1
  362. package/dist/report/react/enhance.js +5 -5
  363. package/dist/report/react/styles.css +190 -24
  364. package/dist/runner/adoption.cjs +4 -7
  365. package/dist/runner/adoption.cjs.map +1 -1
  366. package/dist/runner/attempt-resources.cjs +60 -0
  367. package/dist/runner/attempt-resources.cjs.map +1 -0
  368. package/dist/runner/attempt-resources.d.cts +13 -0
  369. package/dist/runner/attempt-resources.d.mts +13 -0
  370. package/dist/runner/attempt-resources.d.ts +13 -0
  371. package/dist/runner/attempt-resources.js +6 -0
  372. package/dist/runner/attempt-resources.js.map +1 -0
  373. package/dist/runner/attempt.cjs +37 -3
  374. package/dist/runner/attempt.cjs.map +1 -1
  375. package/dist/runner/feedback/failure.cjs +77 -2
  376. package/dist/runner/feedback/failure.cjs.map +1 -1
  377. package/dist/runner/feedback/failure.d.cts +2 -1
  378. package/dist/runner/feedback/failure.d.mts +2 -1
  379. package/dist/runner/feedback/failure.d.ts +2 -1
  380. package/dist/runner/project-current.cjs +2 -13
  381. package/dist/runner/project-current.cjs.map +1 -1
  382. package/dist/runner/project-current.d.cts +4 -2
  383. package/dist/runner/project-current.d.mts +4 -2
  384. package/dist/runner/project-current.d.ts +4 -2
  385. package/dist/runner/reporters/braintrust.cjs +7 -7
  386. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  387. package/dist/runner/reuse-readback.cjs +3 -4
  388. package/dist/runner/reuse-readback.cjs.map +1 -1
  389. package/dist/runner/run.cjs +5 -2
  390. package/dist/runner/run.cjs.map +1 -1
  391. package/dist/sandbox/backend.cjs +32 -2
  392. package/dist/sandbox/backend.cjs.map +1 -1
  393. package/dist/sandbox/backend.d.cts +12 -1
  394. package/dist/sandbox/backend.d.mts +12 -1
  395. package/dist/sandbox/backend.d.ts +12 -1
  396. package/dist/sandbox/backend.js +28 -22
  397. package/dist/sandbox/docker.cjs +140 -0
  398. package/dist/sandbox/docker.cjs.map +1 -1
  399. package/dist/sandbox/docker.d.cts +3 -1
  400. package/dist/sandbox/docker.d.mts +3 -1
  401. package/dist/sandbox/docker.d.ts +3 -1
  402. package/dist/sandbox/e2b.cjs +42 -0
  403. package/dist/sandbox/e2b.cjs.map +1 -1
  404. package/dist/sandbox/e2b.d.cts +2 -0
  405. package/dist/sandbox/e2b.d.mts +2 -0
  406. package/dist/sandbox/e2b.d.ts +2 -0
  407. package/dist/sandbox/local.cjs +64 -0
  408. package/dist/sandbox/local.cjs.map +1 -1
  409. package/dist/sandbox/local.d.cts +3 -1
  410. package/dist/sandbox/local.d.mts +3 -1
  411. package/dist/sandbox/local.d.ts +3 -1
  412. package/dist/sandbox/managed-process.cjs +49 -0
  413. package/dist/sandbox/managed-process.cjs.map +1 -0
  414. package/dist/sandbox/managed-process.d.cts +11 -0
  415. package/dist/sandbox/managed-process.d.mts +11 -0
  416. package/dist/sandbox/managed-process.d.ts +11 -0
  417. package/dist/sandbox/managed-process.js +6 -0
  418. package/dist/sandbox/managed-process.js.map +1 -0
  419. package/dist/sandbox/types.cjs.map +1 -1
  420. package/dist/sandbox/types.d.cts +24 -0
  421. package/dist/sandbox/types.d.mts +24 -0
  422. package/dist/sandbox/types.d.ts +24 -0
  423. package/dist/sandbox/vercel.cjs +1 -0
  424. package/dist/sandbox/vercel.cjs.map +1 -1
  425. package/dist/sandbox/vercel.d.cts +1 -0
  426. package/dist/sandbox/vercel.d.mts +1 -0
  427. package/dist/sandbox/vercel.d.ts +1 -0
  428. package/dist/view/server.cjs +2 -37
  429. package/dist/view/server.cjs.map +1 -1
  430. package/dist/view/server.d.cts +0 -3
  431. package/dist/view/server.d.mts +0 -3
  432. package/dist/view/server.d.ts +0 -3
  433. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  434. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  435. package/docs-site/zh/reference/report-components.mdx +2 -2
  436. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  437. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  438. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  439. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  440. package/docs-site/zh/tutorials/theming.mdx +2 -2
  441. package/package.json +4 -6
  442. package/dist/record/migration/index.cjs +0 -5
  443. package/dist/record/migration/index.cjs.map +0 -1
  444. package/dist/record/migration/index.d.cts +0 -11
  445. package/dist/record/migration/index.d.mts +0 -11
  446. package/dist/record/migration/index.d.ts +0 -11
  447. package/dist/record/migration/index.js +0 -6
  448. package/dist/record/migration/index.js.map +0 -1
  449. package/dist/report/host/site-runtime.cjs +0 -92
  450. package/dist/report/host/site-runtime.cjs.map +0 -1
  451. package/dist/report/host/site-runtime.d.cts +0 -9
  452. package/dist/report/host/site-runtime.d.mts +0 -9
  453. package/dist/report/host/site-runtime.d.ts +0 -9
  454. package/dist/report/host/site-runtime.js +0 -10
  455. package/dist/report/host/site-runtime.js.map +0 -1
  456. package/dist/view/client-dist/app.css +0 -2
  457. package/dist/view/client-dist/app.js +0 -49
  458. package/dist/view/data.cjs +0 -3
  459. package/dist/view/data.cjs.map +0 -1
  460. package/dist/view/data.d.cts +0 -9
  461. package/dist/view/data.d.mts +0 -9
  462. package/dist/view/data.d.ts +0 -9
  463. package/dist/view/data.js +0 -4
  464. package/dist/view/data.js.map +0 -1
  465. package/dist/view/index.cjs +0 -24
  466. package/dist/view/index.cjs.map +0 -1
  467. package/dist/view/index.d.cts +0 -9
  468. package/dist/view/index.d.mts +0 -9
  469. package/dist/view/index.d.ts +0 -9
  470. package/dist/view/index.js +0 -28
  471. package/dist/view/index.js.map +0 -1
  472. package/dist/view/report-view-cache.cjs +0 -200
  473. package/dist/view/report-view-cache.cjs.map +0 -1
  474. package/dist/view/report-view-cache.d.cts +0 -67
  475. package/dist/view/report-view-cache.d.mts +0 -67
  476. package/dist/view/report-view-cache.d.ts +0 -67
  477. package/dist/view/report-view-cache.js +0 -8
  478. package/dist/view/report-view-cache.js.map +0 -1
  479. package/dist/view/shared/types.cjs +0 -3
  480. package/dist/view/shared/types.cjs.map +0 -1
  481. package/dist/view/shared/types.d.cts +0 -51
  482. package/dist/view/shared/types.d.mts +0 -51
  483. package/dist/view/shared/types.d.ts +0 -51
  484. package/dist/view/shared/types.js +0 -4
  485. package/dist/view/shared/types.js.map +0 -1
  486. package/dist/view/site.cjs +0 -32
  487. package/dist/view/site.cjs.map +0 -1
  488. package/dist/view/site.d.cts +0 -24
  489. package/dist/view/site.d.mts +0 -24
  490. package/dist/view/site.d.ts +0 -24
  491. package/dist/view/site.js +0 -8
  492. package/dist/view/site.js.map +0 -1
  493. package/dist/view/styles.css +0 -170
  494. package/dist/view/template.html +0 -17
@@ -47,6 +47,7 @@ export interface AssertFirstContextDeps {
47
47
  readonly experimentClassifier?: import("./session.cjs").SessionDeps["experimentClassifier"];
48
48
  /** Attempt-owned source snapshot registry; never inferred from an Effect fiber. */
49
49
  readonly sourceRegistry?: SourceRegistry;
50
+ readonly resources: import("../types.cjs").AttemptResourceRegistry;
50
51
  /** Shared ordering with Assertion runtime source facts and Session user events. */
51
52
  readonly nextSourceOrder?: () => number;
52
53
  readonly judge: ResolvedJudgeConfig | undefined;
@@ -47,6 +47,7 @@ export interface AssertFirstContextDeps {
47
47
  readonly experimentClassifier?: import("./session.mjs").SessionDeps["experimentClassifier"];
48
48
  /** Attempt-owned source snapshot registry; never inferred from an Effect fiber. */
49
49
  readonly sourceRegistry?: SourceRegistry;
50
+ readonly resources: import("../types.mjs").AttemptResourceRegistry;
50
51
  /** Shared ordering with Assertion runtime source facts and Session user events. */
51
52
  readonly nextSourceOrder?: () => number;
52
53
  readonly judge: ResolvedJudgeConfig | undefined;
@@ -47,6 +47,7 @@ export interface AssertFirstContextDeps {
47
47
  readonly experimentClassifier?: import("./session.js").SessionDeps["experimentClassifier"];
48
48
  /** Attempt-owned source snapshot registry; never inferred from an Effect fiber. */
49
49
  readonly sourceRegistry?: SourceRegistry;
50
+ readonly resources: import("../types.js").AttemptResourceRegistry;
50
51
  /** Shared ordering with Assertion runtime source facts and Session user events. */
51
52
  readonly nextSourceOrder?: () => number;
52
53
  readonly judge: ResolvedJudgeConfig | undefined;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bindAttemptResources = bindAttemptResources;
4
+ exports.attemptResources = attemptResources;
5
+ const ATTEMPT_RESOURCES = new WeakMap();
6
+ function bindAttemptResources(ctx, resources) {
7
+ ATTEMPT_RESOURCES.set(ctx, resources);
8
+ return ctx;
9
+ }
10
+ function attemptResources(ctx) {
11
+ return ATTEMPT_RESOURCES.get(ctx);
12
+ }
13
+ //# sourceMappingURL=attempt-resources.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt-resources.js","sourceRoot":"","sources":["attempt-resources.ts"],"names":[],"mappings":";;AAEA,oDAGC;AACD,4CAEC;AAPD,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAyC,CAAC;AAC/E,SAAgB,oBAAoB,CAAyB,GAAM,EAAE,SAAkC;IACnG,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACf,CAAC;AACD,SAAgB,gBAAgB,CAAC,GAAiB;IAC9C,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import type { AgentContext, AttemptResourceRegistry } from \"../types.ts\";\nconst ATTEMPT_RESOURCES = new WeakMap<AgentContext, AttemptResourceRegistry>();\nexport function bindAttemptResources<T extends AgentContext>(ctx: T, resources: AttemptResourceRegistry): T {\n ATTEMPT_RESOURCES.set(ctx, resources);\n return ctx;\n}\nexport function attemptResources(ctx: AgentContext): AttemptResourceRegistry | undefined {\n return ATTEMPT_RESOURCES.get(ctx);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentContext, AttemptResourceRegistry } from "../types.cjs";
2
+ export declare function bindAttemptResources<T extends AgentContext>(ctx: T, resources: AttemptResourceRegistry): T;
3
+ export declare function attemptResources(ctx: AgentContext): AttemptResourceRegistry | undefined;
@@ -0,0 +1,3 @@
1
+ import type { AgentContext, AttemptResourceRegistry } from "../types.mjs";
2
+ export declare function bindAttemptResources<T extends AgentContext>(ctx: T, resources: AttemptResourceRegistry): T;
3
+ export declare function attemptResources(ctx: AgentContext): AttemptResourceRegistry | undefined;
@@ -0,0 +1,3 @@
1
+ import type { AgentContext, AttemptResourceRegistry } from "../types.js";
2
+ export declare function bindAttemptResources<T extends AgentContext>(ctx: T, resources: AttemptResourceRegistry): T;
3
+ export declare function attemptResources(ctx: AgentContext): AttemptResourceRegistry | undefined;
@@ -0,0 +1,8 @@
1
+ import { createRequire as __niceevalCreateRequire } from "node:module";
2
+ const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
+ const __niceevalCanonical = __niceevalRequire("./attempt-resources.cjs");
4
+ const __niceevalExport0 = __niceevalCanonical["attemptResources"];
5
+ export { __niceevalExport0 as attemptResources };
6
+ const __niceevalExport1 = __niceevalCanonical["bindAttemptResources"];
7
+ export { __niceevalExport1 as bindAttemptResources };
8
+ //# sourceMappingURL=attempt-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt-resources.js","sources":[],"names":[],"mappings":""}
@@ -12,6 +12,7 @@ const index_ts_1 = require("../i18n/index.cjs");
12
12
  const send_retry_ts_1 = require("./send-retry.cjs");
13
13
  const send_failures_ts_1 = require("./send-failures.cjs");
14
14
  const turn_label_ts_1 = require("../shared/turn-label.cjs");
15
+ const attempt_resources_ts_1 = require("./attempt-resources.cjs");
15
16
  /**
16
17
  * 一条会话线的存取器实现。slot 值只按 factory 创建的 symbol 身份存取;
17
18
  * 从异构 Map 取出后立即依 typed slot 恢复 `T`,不让擦除后的值流入领域逻辑。
@@ -167,7 +168,7 @@ class SessionManager {
167
168
  }
168
169
  sendSerializedEffect(session, text, loc, files, responses) {
169
170
  return effect_1.Effect.suspend(() => {
170
- const ctx = {
171
+ const ctx = (0, attempt_resources_ts_1.bindAttemptResources)({
171
172
  signal: this.deps.signal,
172
173
  evalId: this.deps.evalId,
173
174
  attempt: this.deps.attempt,
@@ -184,7 +185,7 @@ class SessionManager {
184
185
  diagnostic: (d) => this.deps.feedback?.diagnostic(d),
185
186
  // log 是 progress({ message }) 的别名(见 AgentContext.log)。
186
187
  log: this.deps.log,
187
- };
188
+ }, this.deps.resources);
188
189
  const n = ++this.turnCount;
189
190
  const attach = files?.length ? ` 📎${files.length}` : "";
190
191
  const preview = (text.replace(/\s+/g, " ").slice(0, 36) || (files?.[0]?.filename ?? (0, index_ts_1.t)("session.fileFallback"))) + attach;
@@ -441,7 +442,7 @@ class SessionManager {
441
442
  sendAgent(input, ctx) {
442
443
  const agent = this.deps.agent;
443
444
  if (agent.kind === "sandbox") {
444
- const sandboxCtx = { ...ctx, sandbox: this.deps.sandbox };
445
+ const sandboxCtx = (0, attempt_resources_ts_1.bindAttemptResources)({ ...ctx, sandbox: this.deps.sandbox }, this.deps.resources);
445
446
  return agent.send(input, sandboxCtx);
446
447
  }
447
448
  return agent.send(input, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["session.ts"],"names":[],"mappings":"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","sourcesContent":["// 会话驱动:把 t.send(text) 翻成 agent.send(input, ctx),在同一沙箱里多轮 resume /\n// newSession,并把每轮的标准事件流与用量累加进整次运行(供作用域断言 / o11y)。\nimport { Cause, Effect, Exit, Option } from \"effect\";\nimport type { Agent, AgentContext, AgentSession, InputFile, InputRequest, InputResponse, JsonValue, Sandbox, SandboxAgentContext, SessionSlot, StreamEvent, Telemetry, TraceSpan, Turn, TurnInput, Usage } from \"../types.ts\";\nimport type { AgentOtelChannel, TurnSpans } from \"../o11y/otlp/turn-otel.ts\";\nimport { downgradeEvidenceCoverage, worstEvidenceCoverage, type ResolvedEvidenceCoverage, } from \"../assertions/coverage.ts\";\nimport { captureLoc, type SourceRegistry } from \"../source-loc.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { createAttemptRetryBudget, sendWithTurnRetry, type AttemptRetryBudget, type ConcurrencySlot, type SendRetryDeps, } from \"./send-retry.ts\";\nimport type { AttemptFailureClassifier } from \"../shared/failure-class.ts\";\nimport { isSendFailure, normalizeSendFailure, sendFailureText } from \"./send-failures.ts\";\nimport type { RetryAttemptRecord, TimingActivity } from \"../runner/types.ts\";\nimport { formatTurnLabel } from \"../shared/turn-label.ts\";\ninterface PhysicalSendResult {\n readonly turn: Turn;\n readonly traceId?: string;\n readonly attribution?: \"traceparent\" | \"window\" | \"none\";\n readonly window?: TurnSpans[\"window\"];\n}\n/**\n * 一条会话线的存取器实现。slot 值只按 factory 创建的 symbol 身份存取;\n * 从异构 Map 取出后立即依 typed slot 恢复 `T`,不让擦除后的值流入领域逻辑。\n */\nabstract class StoredSessionSlotValue {\n declare private readonly storedSessionSlotValue: void;\n}\nclass StoredSessionSlotValueOf<T> extends StoredSessionSlotValue {\n constructor(readonly value: T) {\n super();\n }\n}\nfunction valueFromStoredSlot<T>(stored: StoredSessionSlotValue): T {\n return (stored as StoredSessionSlotValueOf<T>).value;\n}\nexport function createAgentSession(): AgentSession {\n let capturedId: string | undefined;\n const slots = new Map<symbol, StoredSessionSlotValue>();\n return {\n get id() {\n return capturedId;\n },\n capture(id) {\n if (!id || capturedId !== undefined)\n return; // 空值忽略;first-writer-wins\n capturedId = id;\n },\n get<T>(slot: SessionSlot<T>): T | undefined {\n const stored = slots.get(slot.key);\n return stored === undefined ? undefined : valueFromStoredSlot<T>(stored);\n },\n set<T>(slot: SessionSlot<T>, value: T): void {\n slots.set(slot.key, new StoredSessionSlotValueOf(value));\n },\n take<T>(slot: SessionSlot<T>): T | undefined {\n const stored = slots.get(slot.key);\n if (stored === undefined)\n return undefined;\n slots.delete(slot.key);\n return valueFromStoredSlot<T>(stored);\n },\n };\n}\n/**\n * 一条会话线的可变状态。存取器(id/capture/get/set/take)委托给\n * `createAgentSession()`;index/lastMessage/… 是运行器自己的会话簿记,不属于公开契约。\n */\nexport class RunSession implements AgentSession {\n private readonly session = createAgentSession();\n get id(): string | undefined {\n return this.session.id;\n }\n capture(id: string | undefined): void {\n this.session.capture(id);\n }\n get<T>(slot: SessionSlot<T>): T | undefined {\n return this.session.get(slot);\n }\n set<T>(slot: SessionSlot<T>, value: T): void {\n this.session.set(slot, value);\n }\n take<T>(slot: SessionSlot<T>): T | undefined {\n return this.session.take(slot);\n }\n index = 1;\n lastMessage = \"\";\n lastStatus: \"completed\" | \"failed\" | \"waiting\" = \"completed\";\n readonly events: StreamEvent[] = [];\n readonly pendingInputRequests: InputRequest[] = [];\n readonly usage: Usage = {};\n /** 本会话累计的证据覆盖(初值 = Agent 级默认,逐轮按 Turn.evidenceCoverage 降级折叠)。 */\n evidenceCoverage!: ResolvedEvidenceCoverage;\n /** 本会话内的轮次计数(turn 时间树 / 展示标签 turn<N> 用)。 */\n turnCount = 0;\n}\nexport interface SessionDeps {\n agent: Agent;\n sandbox: Sandbox;\n /** 当前 Attempt 的 Eval 身份;Runner 路径必填,测试/第三方直构可省略。 */\n evalId?: string;\n /** 当前 Attempt 引用;与 setup/teardown 拿到的 AgentContext 保持同一身份。 */\n attempt?: AgentContext[\"attempt\"];\n /** 当前 Eval Group 身份;未分组 Eval 省略。 */\n evalGroup?: AgentContext[\"evalGroup\"];\n model?: string;\n reasoningEffort?: string;\n flags: globalThis.Record<string, JsonValue>;\n signal: AbortSignal;\n /**\n * The only Promise facade for the active Assert-first author surface. It\n * executes this SessionManager's Effect graph in the owning Attempt Scope.\n */\n requestEffect?: <Value, Error>(effect: Effect.Effect<Value, Error, never>) => Promise<Value>;\n log(msg: string): void;\n /** runner 绑定的作用域反馈(adapter ctx.progress/diagnostic);省略时 progress 退回 log。 */\n feedback?: import(\"../types.ts\").ScopedFeedback;\n /** adapter send 在飞时通知 runner(errored 归因到嵌套的 `agent.run` 阶段用)。 */\n onSendActive?: (active: boolean) => void;\n /**\n * 变更分类账的 send 窗口钩子(仅沙箱型 agent):`beforeSend` 在 adapter send 前落 eval 归因\n * commit,`afterSend` 在返回后落 agent 归因 commit;label 是 `turn<N>` 或\n * `session<K>/turn<N>` 窗口标签。\n * 提供钩子时 send 自动串行(同一 workdir 上重叠的 send 是写入竞争,窗口不重叠)。\n */\n ledgerHooks?: {\n beforeSend(label: string): Promise<void>;\n afterSend(label: string): Promise<void>;\n };\n /** attempt 单调时钟域的当前 offset;runner 注入,测试直调缺省使用 performance.now()。 */\n timingNow?: () => number;\n /**\n * 每轮 send 结束后回报单调时钟包络(runner 挂成 eval.run 下的 turn 时间树节点)。`usage` 是该轮\n * `Turn.usage` 落盘原样(有记录才传;`--execution`/`--timing` 的 turn 头行读 TimingNode.usage)。\n */\n onTurn?: (info: {\n sessionIndex: number;\n turnIndex: number;\n /** Exact terminal label allocated by this SessionManager. */\n label: string;\n /** One physical public send is sealed with this exact terminal outcome. */\n outcome: \"completed\" | \"failed\" | \"interrupted\";\n /** The exact user event plus terminal provider events for this send only. */\n events: readonly StreamEvent[];\n startOffsetMs: number;\n durationMs: number;\n failed?: boolean;\n /** The real user-event source location, when stack capture succeeded. */\n loc?: ReturnType<typeof captureLoc>;\n /** Shared author-fact order; absent when there is no durable source site. */\n sourceOrder?: number;\n traceId?: string;\n traceAttribution?: \"traceparent\" | \"window\" | \"none\";\n otelWindow?: TurnSpans[\"window\"];\n usage?: Usage;\n }) => TimingActivity | undefined;\n /** 路径推导出的实验 id(经 send ctx 透给 adapter,见 AgentContext.experimentId)。 */\n experimentId?: string;\n /** tracing agent 的 OTLP 端点(经 send ctx 透给 adapter,用于注入导出 env)。 */\n telemetry?: Telemetry;\n /** 非沙箱 tracing agent 的共享 OTLP 通道(runner 从 run 级池取,经它做逐轮 span 归属)。 */\n otel?: AgentOtelChannel;\n /**\n * turn 级重试退避期间释放/收回的全局并发槽位(见 docs/feature/error-classification/\n * architecture.md「退避与槽位」)。省略时退避不释放槽位(测试 / 无并发闸场景)。\n */\n concurrencySlot?: ConcurrencySlot;\n /**\n * 实验声明的失败分类器(`ExperimentDef.classifyFailure`):turn 链上排在 adapter 分类器\n * 之前询问(决议序见 docs/feature/error-classification/architecture.md「分类链」)。\n */\n experimentClassifier?: AttemptFailureClassifier;\n /** 与 Fact collector 共用的 attempt 级源码事实序号分配器。 */\n nextSourceOrder?: () => number;\n /** Attempt-owned source snapshot registry; Runner injects it explicitly. */\n sourceRegistry?: SourceRegistry;\n}\n/** A successful agent send whose post-send ledger checkpoint could not be recorded. */\nexport interface LedgerCaptureFailure {\n readonly state: \"capture-failed\";\n readonly label: string;\n readonly error: unknown;\n}\nexport class SessionManager {\n /** 整次运行(所有会话、所有轮)累计的标准事件流。 */\n readonly allEvents: StreamEvent[] = [];\n readonly usage: Usage = {};\n lastStatus: \"completed\" | \"failed\" | \"waiting\" = \"completed\";\n /** Agent 级默认覆盖(六通道在 factory 构造期已验证)。 */\n readonly agentEvidenceCoverage: ResolvedEvidenceCoverage;\n /** attempt 级累计覆盖:各轮解析后覆盖的最差值,随每次 send 折叠。 */\n evidenceCoverage: ResolvedEvidenceCoverage;\n /** 自动重试吸收的物理 send 失败;不混进 allEvents。 */\n readonly retryAttempts: RetryAttemptRecord[] = [];\n /** 归属到本 attempt 的 span(逐轮攒;attempt 末尾连同 sweep 的迟到 span 一起挂 trace)。 */\n readonly otelSpans: TraceSpan[] = [];\n /** 本 attempt 各轮的 traceId(attempt 末尾按它 sweep 迟到 span)。 */\n readonly otelTraceIds = new Set<string>();\n private readonly otelTurnRecords: Array<{\n window: TurnSpans[\"window\"];\n activity?: TimingActivity;\n hasSpans: boolean;\n }> = [];\n /** 已完成轮次的离散宿主时间窗口;共享 receiver sweep 只用这些窗口补迟到 span。 */\n get otelTurnWindows(): readonly TurnSpans[\"window\"][] {\n return this.otelTurnRecords.map((record) => record.window);\n }\n private warnedWindowAttribution = false;\n private warnedNoSpans = false;\n readonly primary: RunSession;\n private readonly sessions: RunSession[] = [];\n private turnCount = 0;\n private sessionCount = 0;\n /** 沙箱型 send 的 Effect 串行闸(见 SessionDeps.ledgerHooks):窗口不重叠。 */\n private readonly sendSemaphore = Effect.unsafeMakeSemaphore(1);\n /** First failed post-send checkpoint makes the entire later diff producer unavailable. */\n private ledgerCaptureFailureValue: LedgerCaptureFailure | undefined;\n /** attempt 级 turn 重试预算,跨该 attempt 全部 send(全部 session)持续扣减,不随单次 send 重置。 */\n private readonly retryBudget: AttemptRetryBudget = createAttemptRetryBudget();\n private localSourceOrder = 0;\n private readonly nextSourceOrder: () => number;\n constructor(private readonly deps: SessionDeps) {\n this.nextSourceOrder = deps.nextSourceOrder ?? (() => ++this.localSourceOrder);\n this.agentEvidenceCoverage = deps.agent.evidenceCoverage;\n this.evidenceCoverage = this.agentEvidenceCoverage;\n this.primary = this.newSession();\n }\n /** A ledger checkpoint failure is attempt state, not a synthetic empty diff. */\n get ledgerCaptureFailure(): LedgerCaptureFailure | undefined {\n return this.ledgerCaptureFailureValue;\n }\n newSession(): RunSession {\n const s = new RunSession();\n s.index = ++this.sessionCount;\n s.evidenceCoverage = this.agentEvidenceCoverage;\n this.sessions.push(s);\n return s;\n }\n /** 一轮的解析后覆盖:Agent 默认按 Turn.evidenceCoverage 降级(只降不升)。 */\n resolveTurnEvidenceCoverage(turn: Turn): ResolvedEvidenceCoverage {\n return downgradeEvidenceCoverage(this.agentEvidenceCoverage, turn.evidenceCoverage);\n }\n send(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[]): Promise<Turn> {\n const requestEffect = this.deps.requestEffect;\n if (requestEffect === undefined) {\n throw new Error(\"SessionManager requires the Attempt Effect bridge\");\n }\n return requestEffect(this.sendEffect(session, text, files, responses));\n }\n /**\n * The entire logical send is one Effect. The public Promise facade above is\n * deliberately only available through AssertFirstAttemptBridge.requestEffect.\n */\n sendEffect(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[], loc?: ReturnType<typeof captureLoc>): Effect.Effect<Turn, unknown> {\n const send = this.sendSerializedEffect(session, text, loc ?? captureLoc({ registry: this.deps.sourceRegistry }), files, responses);\n // Sandbox sends share one workdir, so their attribution windows cannot\n // overlap. Direct Agent sends retain their existing unconstrained behavior.\n return this.deps.ledgerHooks === undefined\n ? send\n : this.sendSemaphore.withPermits(1)(send);\n }\n private sendSerializedEffect(session: RunSession, text: string, loc: ReturnType<typeof captureLoc>, files?: readonly InputFile[], responses?: readonly InputResponse[]): Effect.Effect<Turn, unknown> {\n return Effect.suspend(() => {\n const ctx: AgentContext = {\n signal: this.deps.signal,\n evalId: this.deps.evalId,\n attempt: this.deps.attempt,\n evalGroup: this.deps.evalGroup,\n model: this.deps.model,\n reasoningEffort: this.deps.reasoningEffort,\n flags: this.deps.flags,\n experimentId: this.deps.experimentId,\n session,\n telemetry: this.deps.telemetry,\n progress: (u) => this.deps.feedback\n ? this.deps.feedback.progress(u)\n : this.deps.log(u.current !== undefined && u.total !== undefined ? `${u.message} (${u.current}/${u.total})` : u.message),\n diagnostic: (d) => this.deps.feedback?.diagnostic(d),\n // log 是 progress({ message }) 的别名(见 AgentContext.log)。\n log: this.deps.log,\n };\n const n = ++this.turnCount;\n const attach = files?.length ? ` 📎${files.length}` : \"\";\n const preview = (text.replace(/\\s+/g, \" \").slice(0, 36) || (files?.[0]?.filename ?? t(\"session.fileFallback\"))) + attach;\n const turnLabel = session.index === 1\n ? t(\"session.turn.primary\", { turn: n })\n : t(\"session.turn.secondary\", { session: session.index, turn: n });\n this.deps.log(`${turnLabel} → \"${preview}…\"`);\n const timingNow = this.deps.timingNow ?? (() => performance.now());\n const startOffsetMs = timingNow();\n // A source order belongs only to a user event that can become an\n // Attempt source-site. Do not consume the shared sequence for a failed\n // stack capture.\n const sourceOrder = loc === undefined ? undefined : this.nextSourceOrder();\n const userEvent: StreamEvent = {\n type: \"message\",\n role: \"user\",\n text,\n loc,\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n };\n this.allEvents.push(userEvent);\n session.events.push(userEvent);\n session.pendingInputRequests.length = 0;\n const turnIndex = ++session.turnCount;\n const windowLabel = formatTurnLabel(session.index, turnIndex);\n const beforeSend = this.deps.ledgerHooks === undefined\n ? Effect.void\n : Effect.tryPromise({\n try: () => this.deps.ledgerHooks!.beforeSend(windowLabel),\n catch: (error) => error,\n });\n const afterSend = this.deps.ledgerHooks === undefined\n ? Effect.void\n : Effect.tryPromise({\n try: () => this.deps.ledgerHooks!.afterSend(windowLabel),\n catch: (error) => error,\n }).pipe(Effect.catchAll((error) => Effect.sync(() => {\n // The agent turn itself did complete. Preserve that success for\n // the author, but retain the failed checkpoint so freeze cannot\n // turn an incomplete capture into a convincing empty document.\n if (this.ledgerCaptureFailureValue === undefined) {\n this.ledgerCaptureFailureValue = Object.freeze({\n state: \"capture-failed\" as const,\n label: windowLabel,\n error,\n });\n }\n })));\n // turn 级重试只包这一次物理 agent send。SDK Promise 在这两个\n // Effect.tryPromise 边界适配;retry 本身不再包含手写 Promise / timeout。\n const sendOnce: Effect.Effect<PhysicalSendResult, unknown> = this.deps.otel\n ? this.sendWithOtelEffect(this.deps.otel, { text, files, responses }, ctx)\n : this.sendAgentEffect({ text, files, responses }, ctx).pipe(Effect.map((turn) => ({ turn })));\n const retryDeps: SendRetryDeps = {\n classifier: this.deps.agent.classifySendFailure,\n experimentClassifier: this.deps.experimentClassifier,\n onRetryAttempt: ({ sendAttempt, startedAt, durationMs, failure, classification }) => {\n const process = failure.process;\n this.retryAttempts.push({\n sessionIndex: session.index,\n turnIndex,\n sendAttempt,\n startedAt,\n durationMs,\n failure: {\n type: \"agent-send-failed\",\n acceptance: \"rejected\",\n message: sendFailureText(failure),\n ...(process?.exitCode !== undefined || process?.signal !== undefined\n ? { process: { ...(process.exitCode !== undefined ? { exitCode: process.exitCode } : {}), ...(process.signal !== undefined ? { signal: process.signal } : {}) } }\n : {}),\n },\n classification: {\n retryable: true,\n scope: classification.scope ?? \"attempt\",\n reason: classification.reason,\n },\n events: failure.events ? [...failure.events] : [],\n ...(failure.usage !== undefined ? { usage: { ...failure.usage } } : {}),\n });\n if (failure.usage) {\n accumulateUsage(this.usage, failure.usage);\n accumulateUsage(session.usage, failure.usage);\n }\n },\n budget: this.retryBudget,\n slot: this.deps.concurrencySlot,\n reportRetry: (message: string) => ctx.progress({ message }),\n signal: ctx.signal,\n };\n const send = Effect.uninterruptibleMask((restore) => Effect.flatMap(Effect.exit(restore(sendWithTurnRetry(sendOnce, retryDeps))), (exit) => Effect.flatMap(Effect.sync(() => {\n const durationMs = Math.max(0, timingNow() - startOffsetMs);\n if (Exit.isSuccess(exit)) {\n const { turn, traceId, attribution, window } = exit.value;\n const traceAttribution = attribution ?? \"none\";\n const terminalEvents = Object.freeze([userEvent, ...turn.events]);\n const timingActivity = this.deps.onTurn?.({\n sessionIndex: session.index,\n turnIndex,\n label: windowLabel,\n outcome: turn.status === \"failed\" ? \"failed\" : \"completed\",\n events: terminalEvents,\n startOffsetMs,\n durationMs,\n failed: turn.status === \"failed\" ? true : undefined,\n ...(loc === undefined ? {} : { loc }),\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n ...(traceAttribution !== \"none\" && traceId !== undefined ? { traceId } : {}),\n traceAttribution,\n otelWindow: window,\n usage: turn.usage,\n });\n if (window !== undefined) {\n this.otelTurnRecords.push({\n window,\n activity: timingActivity,\n hasSpans: traceAttribution !== \"none\",\n });\n }\n return;\n }\n const failure = Option.getOrUndefined(Cause.failureOption(exit.cause));\n const sendFailure = failure !== undefined && isSendFailure(failure) ? failure : undefined;\n if (sendFailure?.usage !== undefined) {\n accumulateUsage(this.usage, sendFailure.usage);\n accumulateUsage(session.usage, sendFailure.usage);\n }\n this.deps.onTurn?.({\n sessionIndex: session.index,\n turnIndex,\n label: windowLabel,\n outcome: Cause.isInterruptedOnly(exit.cause) ? \"interrupted\" : \"failed\",\n events: Object.freeze([userEvent, ...(sendFailure?.events ?? [])]),\n startOffsetMs,\n durationMs,\n failed: true,\n ...(loc === undefined ? {} : { loc }),\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n ...(sendFailure?.usage !== undefined ? { usage: sendFailure.usage } : {}),\n });\n }), () => Exit.isSuccess(exit)\n ? Effect.succeed(exit.value)\n : Effect.failCause(exit.cause)))).pipe(Effect.flatMap(({ turn }) => Effect.sync(() => {\n this.allEvents.push(...turn.events);\n session.events.push(...turn.events);\n session.pendingInputRequests.push(...turn.events\n .filter((e): e is Extract<StreamEvent, {\n type: \"input.requested\";\n }> => e.type === \"input.requested\")\n .map((e) => e.request));\n if (turn.usage) {\n accumulateUsage(this.usage, turn.usage);\n accumulateUsage(session.usage, turn.usage);\n }\n // 证据覆盖:attempt / session 级聚合取各轮最差值(见 assertions/coverage.ts)。\n const turnEvidenceCoverage = this.resolveTurnEvidenceCoverage(turn);\n this.evidenceCoverage = worstEvidenceCoverage([this.evidenceCoverage, turnEvidenceCoverage]);\n session.evidenceCoverage = worstEvidenceCoverage([session.evidenceCoverage, turnEvidenceCoverage]);\n session.lastStatus = turn.status;\n this.lastStatus = turn.status;\n const reply = lastAssistantText(turn.events);\n if (reply !== undefined)\n session.lastMessage = reply;\n const tok = (turn.usage?.inputTokens ?? 0) + (turn.usage?.outputTokens ?? 0);\n const tools = turn.events.filter((event) => event.type === \"operation.started\" && event.operation.kind === \"tool\").length;\n const reason = turn.status === \"failed\" ? failureReason(turn.events) : undefined;\n this.deps.log(`${turnLabel} ← ${turn.status} · ${t(\"session.tools\", { count: tools })} · ${tok} tok · ${Math.round(Math.max(0, timingNow() - startOffsetMs) / 1000)}s${reason ? ` · ${reason}` : \"\"}`);\n return turn;\n })));\n return beforeSend.pipe(Effect.zipRight(Effect.sync(() => this.deps.onSendActive?.(true)).pipe(Effect.zipRight(send), Effect.ensuring(Effect.sync(() => this.deps.onSendActive?.(false))), \n // send 返回后:这个 send 窗口内的全部 workspace 变化落 agent 归因。\n Effect.ensuring(afterSend))));\n });\n }\n private sendAgentEffect(input: TurnInput, ctx: AgentContext): Effect.Effect<Turn, ReturnType<typeof normalizeSendFailure>> {\n return Effect.tryPromise({\n try: (signal) => this.sendAgent(input, this.withFiberSignal(ctx, signal)),\n catch: normalizeSendFailure,\n });\n }\n /**\n * 经共享 OTLP 通道跑一轮:本轮的 traceparent 经 ctx.telemetry.headers 交给 adapter,\n * 返回后按 traceId / 时间窗口把本轮 span 归属进瀑布图。span 只进瀑布图,不进事件流、\n * 不喂断言——断言依据全部来自 send 返回的 Turn。\n */\n private sendWithOtelEffect(otel: AgentOtelChannel, input: {\n text: string;\n files?: readonly InputFile[];\n responses?: readonly InputResponse[];\n }, ctx: AgentContext): Effect.Effect<PhysicalSendResult, ReturnType<typeof normalizeSendFailure>> {\n return otel.runTurnEffect((headers) => {\n const turnCtx: AgentContext = ctx.telemetry\n ? { ...ctx, telemetry: { ...ctx.telemetry, headers } }\n : ctx;\n return this.sendAgentEffect(input, turnCtx);\n }).pipe(Effect.map((result) => {\n this.otelSpans.push(...result.spans);\n if (result.spans.length > 0)\n this.otelTraceIds.add(result.traceId);\n if (result.attribution === \"window\" && result.spans.length > 0 && !this.warnedWindowAttribution) {\n this.warnedWindowAttribution = true;\n this.deps.log(t(\"otel.windowAttribution\"));\n }\n if (result.spans.length === 0 && !this.warnedNoSpans) {\n this.warnedNoSpans = true;\n this.deps.log(t(\"otel.noSpans\"));\n }\n return {\n turn: result.result,\n traceId: result.traceId,\n attribution: result.spans.length === 0 ? \"none\" : result.attribution,\n window: result.window,\n };\n }));\n }\n private withFiberSignal(ctx: AgentContext, fiberSignal: AbortSignal): AgentContext {\n if (ctx.signal === fiberSignal)\n return ctx;\n return { ...ctx, signal: AbortSignal.any([ctx.signal, fiberSignal]) };\n }\n /** telemetry.collect 收到 BatchSpanProcessor 迟到导出后,回写尚无 span 的 turn。 */\n attributeDeferredOtel(spans: readonly TraceSpan[]): TraceSpan[] {\n const attributed: TraceSpan[] = [];\n const remaining = new Set(spans);\n for (const record of this.otelTurnRecords) {\n if (record.hasSpans || record.activity === undefined)\n continue;\n const candidates = [...remaining].filter((span) => span.endMs >= record.window.startMs && span.startMs <= record.window.endMs);\n const byTrace = new Map<string, TraceSpan[]>();\n for (const span of candidates) {\n const group = byTrace.get(span.traceId);\n if (group === undefined)\n byTrace.set(span.traceId, [span]);\n else\n group.push(span);\n }\n const selected = [...byTrace.entries()]\n .map(([traceId, traceSpans]) => {\n const latestEndMs = Math.max(...traceSpans.map((span) => span.endMs));\n const coversEnd = traceSpans.some((span) => span.startMs <= record.window.endMs && span.endMs >= record.window.endMs);\n return { traceId, traceSpans, latestEndMs, coversEnd };\n })\n .sort((a, b) => Number(b.coversEnd) - Number(a.coversEnd) ||\n Math.abs(record.window.endMs - a.latestEndMs) - Math.abs(record.window.endMs - b.latestEndMs) ||\n b.latestEndMs - a.latestEndMs ||\n a.traceId.localeCompare(b.traceId))[0];\n if (selected === undefined)\n continue;\n record.activity.traceId = selected.traceId;\n record.activity.traceAttribution = \"window\";\n record.hasSpans = true;\n this.otelTraceIds.add(selected.traceId);\n for (const span of selected.traceSpans) {\n remaining.delete(span);\n attributed.push(span);\n }\n }\n return attributed;\n }\n private sendAgent(input: TurnInput, ctx: AgentContext): Promise<Turn> {\n const agent = this.deps.agent;\n if (agent.kind === \"sandbox\") {\n const sandboxCtx: SandboxAgentContext = { ...ctx, sandbox: this.deps.sandbox };\n return agent.send(input, sandboxCtx);\n }\n return agent.send(input, ctx);\n }\n}\n/**\n * 失败轮的进度行原因摘要:取本轮事件流里最后一个 `type: \"error\"` 事件的 message\n * (与 src/agents/shared.ts 的 diagnoseFailure 同一口径——\n * 都认「最后一条 error 事件」为本轮失败的权威原因),压成单行并截断,避免 402/超时\n * 这类关键信息只能事后翻落盘的 result.json 才看得到。提不到时返回 undefined,调用方不补空后缀。\n */\nfunction failureReason(events: readonly StreamEvent[]): string | undefined {\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"error\")\n return truncateOneLine(e.message, 120);\n }\n return undefined;\n}\n/** 单行截断:折叠空白 + 120 字符上限。 */\nfunction truncateOneLine(s: string, width: number): string {\n const clean = s.replace(/\\s+/g, \" \").trim();\n if (clean.length <= width)\n return clean;\n return `${clean.slice(0, width - 1)}…`;\n}\nexport function lastAssistantText(events: readonly StreamEvent[]): string | undefined {\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"message\" && e.role === \"assistant\" && e.text.trim())\n return e.text;\n }\n return undefined;\n}\n/**\n * 每个字段只在某一轮真的带回该值时才累加,协议不提供就保持省略(见\n * docs/feature/record/architecture.md「Usage」:「每个字段只在协议真实提供该值时存在……\n * 不存在『默认 0』或『默认 1』的字段」)。此前 `requests` 用 `add.requests ?? 1` 累加,会让\n * 转录解析型 adapter(整个 attempt 只在末尾解析一次 transcript、天然不报每轮请求数)的一轮\n * send 被硬算成 1 个请求,一个内部发起了 21 次工具调用的 codex session 因此落盘\n * `requests: 1`——不是真值,是轮数的误代理(见 memory 的 show-scope-slice-json-ruling 条目)。\n * `inputTokens`/`outputTokens` 此前是 Usage 的必填字段、始终累加(缺省视同 0);现在两者也\n * 可选化,同一条纪律统一适用:任何字段缺席就保持缺席,不拿「大概率是 0」去凑。\n */\nfunction accumulateUsage(acc: Usage, add: Usage): void {\n if (add.inputTokens !== undefined)\n acc.inputTokens = (acc.inputTokens ?? 0) + add.inputTokens;\n if (add.outputTokens !== undefined)\n acc.outputTokens = (acc.outputTokens ?? 0) + add.outputTokens;\n if (add.cacheReadTokens !== undefined)\n acc.cacheReadTokens = (acc.cacheReadTokens ?? 0) + add.cacheReadTokens;\n if (add.cacheCreationTokens !== undefined)\n acc.cacheCreationTokens = (acc.cacheCreationTokens ?? 0) + add.cacheCreationTokens;\n if (add.reasoningTokens !== undefined)\n acc.reasoningTokens = (acc.reasoningTokens ?? 0) + add.reasoningTokens;\n if (add.requests !== undefined)\n acc.requests = (acc.requests ?? 0) + add.requests;\n if (add.costUSD !== undefined) {\n acc.costUSD = acc.costUSD === undefined ? add.costUSD : acc.costUSD + add.costUSD;\n }\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["session.ts"],"names":[],"mappings":"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","sourcesContent":["// 会话驱动:把 t.send(text) 翻成 agent.send(input, ctx),在同一沙箱里多轮 resume /\n// newSession,并把每轮的标准事件流与用量累加进整次运行(供作用域断言 / o11y)。\nimport { Cause, Effect, Exit, Option } from \"effect\";\nimport type { Agent, AgentContext, AgentSession, InputFile, InputRequest, InputResponse, JsonValue, Sandbox, SandboxAgentContext, SessionSlot, StreamEvent, Telemetry, TraceSpan, Turn, TurnInput, Usage } from \"../types.ts\";\nimport type { AgentOtelChannel, TurnSpans } from \"../o11y/otlp/turn-otel.ts\";\nimport { downgradeEvidenceCoverage, worstEvidenceCoverage, type ResolvedEvidenceCoverage, } from \"../assertions/coverage.ts\";\nimport { captureLoc, type SourceRegistry } from \"../source-loc.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { createAttemptRetryBudget, sendWithTurnRetry, type AttemptRetryBudget, type ConcurrencySlot, type SendRetryDeps, } from \"./send-retry.ts\";\nimport type { AttemptFailureClassifier } from \"../shared/failure-class.ts\";\nimport { isSendFailure, normalizeSendFailure, sendFailureText } from \"./send-failures.ts\";\nimport type { RetryAttemptRecord, TimingActivity } from \"../runner/types.ts\";\nimport { formatTurnLabel } from \"../shared/turn-label.ts\";\nimport { bindAttemptResources } from \"./attempt-resources.ts\";\ninterface PhysicalSendResult {\n readonly turn: Turn;\n readonly traceId?: string;\n readonly attribution?: \"traceparent\" | \"window\" | \"none\";\n readonly window?: TurnSpans[\"window\"];\n}\n/**\n * 一条会话线的存取器实现。slot 值只按 factory 创建的 symbol 身份存取;\n * 从异构 Map 取出后立即依 typed slot 恢复 `T`,不让擦除后的值流入领域逻辑。\n */\nabstract class StoredSessionSlotValue {\n declare private readonly storedSessionSlotValue: void;\n}\nclass StoredSessionSlotValueOf<T> extends StoredSessionSlotValue {\n constructor(readonly value: T) {\n super();\n }\n}\nfunction valueFromStoredSlot<T>(stored: StoredSessionSlotValue): T {\n return (stored as StoredSessionSlotValueOf<T>).value;\n}\nexport function createAgentSession(): AgentSession {\n let capturedId: string | undefined;\n const slots = new Map<symbol, StoredSessionSlotValue>();\n return {\n get id() {\n return capturedId;\n },\n capture(id) {\n if (!id || capturedId !== undefined)\n return; // 空值忽略;first-writer-wins\n capturedId = id;\n },\n get<T>(slot: SessionSlot<T>): T | undefined {\n const stored = slots.get(slot.key);\n return stored === undefined ? undefined : valueFromStoredSlot<T>(stored);\n },\n set<T>(slot: SessionSlot<T>, value: T): void {\n slots.set(slot.key, new StoredSessionSlotValueOf(value));\n },\n take<T>(slot: SessionSlot<T>): T | undefined {\n const stored = slots.get(slot.key);\n if (stored === undefined)\n return undefined;\n slots.delete(slot.key);\n return valueFromStoredSlot<T>(stored);\n },\n };\n}\n/**\n * 一条会话线的可变状态。存取器(id/capture/get/set/take)委托给\n * `createAgentSession()`;index/lastMessage/… 是运行器自己的会话簿记,不属于公开契约。\n */\nexport class RunSession implements AgentSession {\n private readonly session = createAgentSession();\n get id(): string | undefined {\n return this.session.id;\n }\n capture(id: string | undefined): void {\n this.session.capture(id);\n }\n get<T>(slot: SessionSlot<T>): T | undefined {\n return this.session.get(slot);\n }\n set<T>(slot: SessionSlot<T>, value: T): void {\n this.session.set(slot, value);\n }\n take<T>(slot: SessionSlot<T>): T | undefined {\n return this.session.take(slot);\n }\n index = 1;\n lastMessage = \"\";\n lastStatus: \"completed\" | \"failed\" | \"waiting\" = \"completed\";\n readonly events: StreamEvent[] = [];\n readonly pendingInputRequests: InputRequest[] = [];\n readonly usage: Usage = {};\n /** 本会话累计的证据覆盖(初值 = Agent 级默认,逐轮按 Turn.evidenceCoverage 降级折叠)。 */\n evidenceCoverage!: ResolvedEvidenceCoverage;\n /** 本会话内的轮次计数(turn 时间树 / 展示标签 turn<N> 用)。 */\n turnCount = 0;\n}\nexport interface SessionDeps {\n agent: Agent;\n sandbox: Sandbox;\n /** 当前 Attempt 的 Eval 身份;Runner 路径必填,测试/第三方直构可省略。 */\n evalId?: string;\n /** 当前 Attempt 引用;与 setup/teardown 拿到的 AgentContext 保持同一身份。 */\n attempt?: AgentContext[\"attempt\"];\n /** 当前 Eval Group 身份;未分组 Eval 省略。 */\n evalGroup?: AgentContext[\"evalGroup\"];\n model?: string;\n reasoningEffort?: string;\n flags: globalThis.Record<string, JsonValue>;\n signal: AbortSignal;\n /**\n * The only Promise facade for the active Assert-first author surface. It\n * executes this SessionManager's Effect graph in the owning Attempt Scope.\n */\n requestEffect?: <Value, Error>(effect: Effect.Effect<Value, Error, never>) => Promise<Value>;\n log(msg: string): void;\n /** runner 绑定的作用域反馈(adapter ctx.progress/diagnostic);省略时 progress 退回 log。 */\n feedback?: import(\"../types.ts\").ScopedFeedback;\n /** adapter send 在飞时通知 runner(errored 归因到嵌套的 `agent.run` 阶段用)。 */\n onSendActive?: (active: boolean) => void;\n /**\n * 变更分类账的 send 窗口钩子(仅沙箱型 agent):`beforeSend` 在 adapter send 前落 eval 归因\n * commit,`afterSend` 在返回后落 agent 归因 commit;label 是 `turn<N>` 或\n * `session<K>/turn<N>` 窗口标签。\n * 提供钩子时 send 自动串行(同一 workdir 上重叠的 send 是写入竞争,窗口不重叠)。\n */\n ledgerHooks?: {\n beforeSend(label: string): Promise<void>;\n afterSend(label: string): Promise<void>;\n };\n /** attempt 单调时钟域的当前 offset;runner 注入,测试直调缺省使用 performance.now()。 */\n timingNow?: () => number;\n /**\n * 每轮 send 结束后回报单调时钟包络(runner 挂成 eval.run 下的 turn 时间树节点)。`usage` 是该轮\n * `Turn.usage` 落盘原样(有记录才传;`--execution`/`--timing` 的 turn 头行读 TimingNode.usage)。\n */\n onTurn?: (info: {\n sessionIndex: number;\n turnIndex: number;\n /** Exact terminal label allocated by this SessionManager. */\n label: string;\n /** One physical public send is sealed with this exact terminal outcome. */\n outcome: \"completed\" | \"failed\" | \"interrupted\";\n /** The exact user event plus terminal provider events for this send only. */\n events: readonly StreamEvent[];\n startOffsetMs: number;\n durationMs: number;\n failed?: boolean;\n /** The real user-event source location, when stack capture succeeded. */\n loc?: ReturnType<typeof captureLoc>;\n /** Shared author-fact order; absent when there is no durable source site. */\n sourceOrder?: number;\n traceId?: string;\n traceAttribution?: \"traceparent\" | \"window\" | \"none\";\n otelWindow?: TurnSpans[\"window\"];\n usage?: Usage;\n }) => TimingActivity | undefined;\n /** 路径推导出的实验 id(经 send ctx 透给 adapter,见 AgentContext.experimentId)。 */\n experimentId?: string;\n /** tracing agent 的 OTLP 端点(经 send ctx 透给 adapter,用于注入导出 env)。 */\n telemetry?: Telemetry;\n /** 非沙箱 tracing agent 的共享 OTLP 通道(runner 从 run 级池取,经它做逐轮 span 归属)。 */\n otel?: AgentOtelChannel;\n /**\n * turn 级重试退避期间释放/收回的全局并发槽位(见 docs/feature/error-classification/\n * architecture.md「退避与槽位」)。省略时退避不释放槽位(测试 / 无并发闸场景)。\n */\n concurrencySlot?: ConcurrencySlot;\n /**\n * 实验声明的失败分类器(`ExperimentDef.classifyFailure`):turn 链上排在 adapter 分类器\n * 之前询问(决议序见 docs/feature/error-classification/architecture.md「分类链」)。\n */\n experimentClassifier?: AttemptFailureClassifier;\n /** 与 Fact collector 共用的 attempt 级源码事实序号分配器。 */\n nextSourceOrder?: () => number;\n /** Attempt-owned source snapshot registry; Runner injects it explicitly. */\n sourceRegistry?: SourceRegistry;\n resources: import(\"../types.ts\").AttemptResourceRegistry;\n}\n/** A successful agent send whose post-send ledger checkpoint could not be recorded. */\nexport interface LedgerCaptureFailure {\n readonly state: \"capture-failed\";\n readonly label: string;\n readonly error: unknown;\n}\nexport class SessionManager {\n /** 整次运行(所有会话、所有轮)累计的标准事件流。 */\n readonly allEvents: StreamEvent[] = [];\n readonly usage: Usage = {};\n lastStatus: \"completed\" | \"failed\" | \"waiting\" = \"completed\";\n /** Agent 级默认覆盖(六通道在 factory 构造期已验证)。 */\n readonly agentEvidenceCoverage: ResolvedEvidenceCoverage;\n /** attempt 级累计覆盖:各轮解析后覆盖的最差值,随每次 send 折叠。 */\n evidenceCoverage: ResolvedEvidenceCoverage;\n /** 自动重试吸收的物理 send 失败;不混进 allEvents。 */\n readonly retryAttempts: RetryAttemptRecord[] = [];\n /** 归属到本 attempt 的 span(逐轮攒;attempt 末尾连同 sweep 的迟到 span 一起挂 trace)。 */\n readonly otelSpans: TraceSpan[] = [];\n /** 本 attempt 各轮的 traceId(attempt 末尾按它 sweep 迟到 span)。 */\n readonly otelTraceIds = new Set<string>();\n private readonly otelTurnRecords: Array<{\n window: TurnSpans[\"window\"];\n activity?: TimingActivity;\n hasSpans: boolean;\n }> = [];\n /** 已完成轮次的离散宿主时间窗口;共享 receiver sweep 只用这些窗口补迟到 span。 */\n get otelTurnWindows(): readonly TurnSpans[\"window\"][] {\n return this.otelTurnRecords.map((record) => record.window);\n }\n private warnedWindowAttribution = false;\n private warnedNoSpans = false;\n readonly primary: RunSession;\n private readonly sessions: RunSession[] = [];\n private turnCount = 0;\n private sessionCount = 0;\n /** 沙箱型 send 的 Effect 串行闸(见 SessionDeps.ledgerHooks):窗口不重叠。 */\n private readonly sendSemaphore = Effect.unsafeMakeSemaphore(1);\n /** First failed post-send checkpoint makes the entire later diff producer unavailable. */\n private ledgerCaptureFailureValue: LedgerCaptureFailure | undefined;\n /** attempt 级 turn 重试预算,跨该 attempt 全部 send(全部 session)持续扣减,不随单次 send 重置。 */\n private readonly retryBudget: AttemptRetryBudget = createAttemptRetryBudget();\n private localSourceOrder = 0;\n private readonly nextSourceOrder: () => number;\n constructor(private readonly deps: SessionDeps) {\n this.nextSourceOrder = deps.nextSourceOrder ?? (() => ++this.localSourceOrder);\n this.agentEvidenceCoverage = deps.agent.evidenceCoverage;\n this.evidenceCoverage = this.agentEvidenceCoverage;\n this.primary = this.newSession();\n }\n /** A ledger checkpoint failure is attempt state, not a synthetic empty diff. */\n get ledgerCaptureFailure(): LedgerCaptureFailure | undefined {\n return this.ledgerCaptureFailureValue;\n }\n newSession(): RunSession {\n const s = new RunSession();\n s.index = ++this.sessionCount;\n s.evidenceCoverage = this.agentEvidenceCoverage;\n this.sessions.push(s);\n return s;\n }\n /** 一轮的解析后覆盖:Agent 默认按 Turn.evidenceCoverage 降级(只降不升)。 */\n resolveTurnEvidenceCoverage(turn: Turn): ResolvedEvidenceCoverage {\n return downgradeEvidenceCoverage(this.agentEvidenceCoverage, turn.evidenceCoverage);\n }\n send(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[]): Promise<Turn> {\n const requestEffect = this.deps.requestEffect;\n if (requestEffect === undefined) {\n throw new Error(\"SessionManager requires the Attempt Effect bridge\");\n }\n return requestEffect(this.sendEffect(session, text, files, responses));\n }\n /**\n * The entire logical send is one Effect. The public Promise facade above is\n * deliberately only available through AssertFirstAttemptBridge.requestEffect.\n */\n sendEffect(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[], loc?: ReturnType<typeof captureLoc>): Effect.Effect<Turn, unknown> {\n const send = this.sendSerializedEffect(session, text, loc ?? captureLoc({ registry: this.deps.sourceRegistry }), files, responses);\n // Sandbox sends share one workdir, so their attribution windows cannot\n // overlap. Direct Agent sends retain their existing unconstrained behavior.\n return this.deps.ledgerHooks === undefined\n ? send\n : this.sendSemaphore.withPermits(1)(send);\n }\n private sendSerializedEffect(session: RunSession, text: string, loc: ReturnType<typeof captureLoc>, files?: readonly InputFile[], responses?: readonly InputResponse[]): Effect.Effect<Turn, unknown> {\n return Effect.suspend(() => {\n const ctx: AgentContext = bindAttemptResources({\n signal: this.deps.signal,\n evalId: this.deps.evalId,\n attempt: this.deps.attempt,\n evalGroup: this.deps.evalGroup,\n model: this.deps.model,\n reasoningEffort: this.deps.reasoningEffort,\n flags: this.deps.flags,\n experimentId: this.deps.experimentId,\n session,\n telemetry: this.deps.telemetry,\n progress: (u) => this.deps.feedback\n ? this.deps.feedback.progress(u)\n : this.deps.log(u.current !== undefined && u.total !== undefined ? `${u.message} (${u.current}/${u.total})` : u.message),\n diagnostic: (d) => this.deps.feedback?.diagnostic(d),\n // log 是 progress({ message }) 的别名(见 AgentContext.log)。\n log: this.deps.log,\n }, this.deps.resources);\n const n = ++this.turnCount;\n const attach = files?.length ? ` 📎${files.length}` : \"\";\n const preview = (text.replace(/\\s+/g, \" \").slice(0, 36) || (files?.[0]?.filename ?? t(\"session.fileFallback\"))) + attach;\n const turnLabel = session.index === 1\n ? t(\"session.turn.primary\", { turn: n })\n : t(\"session.turn.secondary\", { session: session.index, turn: n });\n this.deps.log(`${turnLabel} → \"${preview}…\"`);\n const timingNow = this.deps.timingNow ?? (() => performance.now());\n const startOffsetMs = timingNow();\n // A source order belongs only to a user event that can become an\n // Attempt source-site. Do not consume the shared sequence for a failed\n // stack capture.\n const sourceOrder = loc === undefined ? undefined : this.nextSourceOrder();\n const userEvent: StreamEvent = {\n type: \"message\",\n role: \"user\",\n text,\n loc,\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n };\n this.allEvents.push(userEvent);\n session.events.push(userEvent);\n session.pendingInputRequests.length = 0;\n const turnIndex = ++session.turnCount;\n const windowLabel = formatTurnLabel(session.index, turnIndex);\n const beforeSend = this.deps.ledgerHooks === undefined\n ? Effect.void\n : Effect.tryPromise({\n try: () => this.deps.ledgerHooks!.beforeSend(windowLabel),\n catch: (error) => error,\n });\n const afterSend = this.deps.ledgerHooks === undefined\n ? Effect.void\n : Effect.tryPromise({\n try: () => this.deps.ledgerHooks!.afterSend(windowLabel),\n catch: (error) => error,\n }).pipe(Effect.catchAll((error) => Effect.sync(() => {\n // The agent turn itself did complete. Preserve that success for\n // the author, but retain the failed checkpoint so freeze cannot\n // turn an incomplete capture into a convincing empty document.\n if (this.ledgerCaptureFailureValue === undefined) {\n this.ledgerCaptureFailureValue = Object.freeze({\n state: \"capture-failed\" as const,\n label: windowLabel,\n error,\n });\n }\n })));\n // turn 级重试只包这一次物理 agent send。SDK Promise 在这两个\n // Effect.tryPromise 边界适配;retry 本身不再包含手写 Promise / timeout。\n const sendOnce: Effect.Effect<PhysicalSendResult, unknown> = this.deps.otel\n ? this.sendWithOtelEffect(this.deps.otel, { text, files, responses }, ctx)\n : this.sendAgentEffect({ text, files, responses }, ctx).pipe(Effect.map((turn) => ({ turn })));\n const retryDeps: SendRetryDeps = {\n classifier: this.deps.agent.classifySendFailure,\n experimentClassifier: this.deps.experimentClassifier,\n onRetryAttempt: ({ sendAttempt, startedAt, durationMs, failure, classification }) => {\n const process = failure.process;\n this.retryAttempts.push({\n sessionIndex: session.index,\n turnIndex,\n sendAttempt,\n startedAt,\n durationMs,\n failure: {\n type: \"agent-send-failed\",\n acceptance: \"rejected\",\n message: sendFailureText(failure),\n ...(process?.exitCode !== undefined || process?.signal !== undefined\n ? { process: { ...(process.exitCode !== undefined ? { exitCode: process.exitCode } : {}), ...(process.signal !== undefined ? { signal: process.signal } : {}) } }\n : {}),\n },\n classification: {\n retryable: true,\n scope: classification.scope ?? \"attempt\",\n reason: classification.reason,\n },\n events: failure.events ? [...failure.events] : [],\n ...(failure.usage !== undefined ? { usage: { ...failure.usage } } : {}),\n });\n if (failure.usage) {\n accumulateUsage(this.usage, failure.usage);\n accumulateUsage(session.usage, failure.usage);\n }\n },\n budget: this.retryBudget,\n slot: this.deps.concurrencySlot,\n reportRetry: (message: string) => ctx.progress({ message }),\n signal: ctx.signal,\n };\n const send = Effect.uninterruptibleMask((restore) => Effect.flatMap(Effect.exit(restore(sendWithTurnRetry(sendOnce, retryDeps))), (exit) => Effect.flatMap(Effect.sync(() => {\n const durationMs = Math.max(0, timingNow() - startOffsetMs);\n if (Exit.isSuccess(exit)) {\n const { turn, traceId, attribution, window } = exit.value;\n const traceAttribution = attribution ?? \"none\";\n const terminalEvents = Object.freeze([userEvent, ...turn.events]);\n const timingActivity = this.deps.onTurn?.({\n sessionIndex: session.index,\n turnIndex,\n label: windowLabel,\n outcome: turn.status === \"failed\" ? \"failed\" : \"completed\",\n events: terminalEvents,\n startOffsetMs,\n durationMs,\n failed: turn.status === \"failed\" ? true : undefined,\n ...(loc === undefined ? {} : { loc }),\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n ...(traceAttribution !== \"none\" && traceId !== undefined ? { traceId } : {}),\n traceAttribution,\n otelWindow: window,\n usage: turn.usage,\n });\n if (window !== undefined) {\n this.otelTurnRecords.push({\n window,\n activity: timingActivity,\n hasSpans: traceAttribution !== \"none\",\n });\n }\n return;\n }\n const failure = Option.getOrUndefined(Cause.failureOption(exit.cause));\n const sendFailure = failure !== undefined && isSendFailure(failure) ? failure : undefined;\n if (sendFailure?.usage !== undefined) {\n accumulateUsage(this.usage, sendFailure.usage);\n accumulateUsage(session.usage, sendFailure.usage);\n }\n this.deps.onTurn?.({\n sessionIndex: session.index,\n turnIndex,\n label: windowLabel,\n outcome: Cause.isInterruptedOnly(exit.cause) ? \"interrupted\" : \"failed\",\n events: Object.freeze([userEvent, ...(sendFailure?.events ?? [])]),\n startOffsetMs,\n durationMs,\n failed: true,\n ...(loc === undefined ? {} : { loc }),\n ...(sourceOrder === undefined ? {} : { sourceOrder }),\n ...(sendFailure?.usage !== undefined ? { usage: sendFailure.usage } : {}),\n });\n }), () => Exit.isSuccess(exit)\n ? Effect.succeed(exit.value)\n : Effect.failCause(exit.cause)))).pipe(Effect.flatMap(({ turn }) => Effect.sync(() => {\n this.allEvents.push(...turn.events);\n session.events.push(...turn.events);\n session.pendingInputRequests.push(...turn.events\n .filter((e): e is Extract<StreamEvent, {\n type: \"input.requested\";\n }> => e.type === \"input.requested\")\n .map((e) => e.request));\n if (turn.usage) {\n accumulateUsage(this.usage, turn.usage);\n accumulateUsage(session.usage, turn.usage);\n }\n // 证据覆盖:attempt / session 级聚合取各轮最差值(见 assertions/coverage.ts)。\n const turnEvidenceCoverage = this.resolveTurnEvidenceCoverage(turn);\n this.evidenceCoverage = worstEvidenceCoverage([this.evidenceCoverage, turnEvidenceCoverage]);\n session.evidenceCoverage = worstEvidenceCoverage([session.evidenceCoverage, turnEvidenceCoverage]);\n session.lastStatus = turn.status;\n this.lastStatus = turn.status;\n const reply = lastAssistantText(turn.events);\n if (reply !== undefined)\n session.lastMessage = reply;\n const tok = (turn.usage?.inputTokens ?? 0) + (turn.usage?.outputTokens ?? 0);\n const tools = turn.events.filter((event) => event.type === \"operation.started\" && event.operation.kind === \"tool\").length;\n const reason = turn.status === \"failed\" ? failureReason(turn.events) : undefined;\n this.deps.log(`${turnLabel} ← ${turn.status} · ${t(\"session.tools\", { count: tools })} · ${tok} tok · ${Math.round(Math.max(0, timingNow() - startOffsetMs) / 1000)}s${reason ? ` · ${reason}` : \"\"}`);\n return turn;\n })));\n return beforeSend.pipe(Effect.zipRight(Effect.sync(() => this.deps.onSendActive?.(true)).pipe(Effect.zipRight(send), Effect.ensuring(Effect.sync(() => this.deps.onSendActive?.(false))), \n // send 返回后:这个 send 窗口内的全部 workspace 变化落 agent 归因。\n Effect.ensuring(afterSend))));\n });\n }\n private sendAgentEffect(input: TurnInput, ctx: AgentContext): Effect.Effect<Turn, ReturnType<typeof normalizeSendFailure>> {\n return Effect.tryPromise({\n try: (signal) => this.sendAgent(input, this.withFiberSignal(ctx, signal)),\n catch: normalizeSendFailure,\n });\n }\n /**\n * 经共享 OTLP 通道跑一轮:本轮的 traceparent 经 ctx.telemetry.headers 交给 adapter,\n * 返回后按 traceId / 时间窗口把本轮 span 归属进瀑布图。span 只进瀑布图,不进事件流、\n * 不喂断言——断言依据全部来自 send 返回的 Turn。\n */\n private sendWithOtelEffect(otel: AgentOtelChannel, input: {\n text: string;\n files?: readonly InputFile[];\n responses?: readonly InputResponse[];\n }, ctx: AgentContext): Effect.Effect<PhysicalSendResult, ReturnType<typeof normalizeSendFailure>> {\n return otel.runTurnEffect((headers) => {\n const turnCtx: AgentContext = ctx.telemetry\n ? { ...ctx, telemetry: { ...ctx.telemetry, headers } }\n : ctx;\n return this.sendAgentEffect(input, turnCtx);\n }).pipe(Effect.map((result) => {\n this.otelSpans.push(...result.spans);\n if (result.spans.length > 0)\n this.otelTraceIds.add(result.traceId);\n if (result.attribution === \"window\" && result.spans.length > 0 && !this.warnedWindowAttribution) {\n this.warnedWindowAttribution = true;\n this.deps.log(t(\"otel.windowAttribution\"));\n }\n if (result.spans.length === 0 && !this.warnedNoSpans) {\n this.warnedNoSpans = true;\n this.deps.log(t(\"otel.noSpans\"));\n }\n return {\n turn: result.result,\n traceId: result.traceId,\n attribution: result.spans.length === 0 ? \"none\" : result.attribution,\n window: result.window,\n };\n }));\n }\n private withFiberSignal(ctx: AgentContext, fiberSignal: AbortSignal): AgentContext {\n if (ctx.signal === fiberSignal)\n return ctx;\n return { ...ctx, signal: AbortSignal.any([ctx.signal, fiberSignal]) };\n }\n /** telemetry.collect 收到 BatchSpanProcessor 迟到导出后,回写尚无 span 的 turn。 */\n attributeDeferredOtel(spans: readonly TraceSpan[]): TraceSpan[] {\n const attributed: TraceSpan[] = [];\n const remaining = new Set(spans);\n for (const record of this.otelTurnRecords) {\n if (record.hasSpans || record.activity === undefined)\n continue;\n const candidates = [...remaining].filter((span) => span.endMs >= record.window.startMs && span.startMs <= record.window.endMs);\n const byTrace = new Map<string, TraceSpan[]>();\n for (const span of candidates) {\n const group = byTrace.get(span.traceId);\n if (group === undefined)\n byTrace.set(span.traceId, [span]);\n else\n group.push(span);\n }\n const selected = [...byTrace.entries()]\n .map(([traceId, traceSpans]) => {\n const latestEndMs = Math.max(...traceSpans.map((span) => span.endMs));\n const coversEnd = traceSpans.some((span) => span.startMs <= record.window.endMs && span.endMs >= record.window.endMs);\n return { traceId, traceSpans, latestEndMs, coversEnd };\n })\n .sort((a, b) => Number(b.coversEnd) - Number(a.coversEnd) ||\n Math.abs(record.window.endMs - a.latestEndMs) - Math.abs(record.window.endMs - b.latestEndMs) ||\n b.latestEndMs - a.latestEndMs ||\n a.traceId.localeCompare(b.traceId))[0];\n if (selected === undefined)\n continue;\n record.activity.traceId = selected.traceId;\n record.activity.traceAttribution = \"window\";\n record.hasSpans = true;\n this.otelTraceIds.add(selected.traceId);\n for (const span of selected.traceSpans) {\n remaining.delete(span);\n attributed.push(span);\n }\n }\n return attributed;\n }\n private sendAgent(input: TurnInput, ctx: AgentContext): Promise<Turn> {\n const agent = this.deps.agent;\n if (agent.kind === \"sandbox\") {\n const sandboxCtx: SandboxAgentContext = bindAttemptResources({ ...ctx, sandbox: this.deps.sandbox }, this.deps.resources);\n return agent.send(input, sandboxCtx);\n }\n return agent.send(input, ctx);\n }\n}\n/**\n * 失败轮的进度行原因摘要:取本轮事件流里最后一个 `type: \"error\"` 事件的 message\n * (与 src/agents/shared.ts 的 diagnoseFailure 同一口径——\n * 都认「最后一条 error 事件」为本轮失败的权威原因),压成单行并截断,避免 402/超时\n * 这类关键信息只能事后翻落盘的 result.json 才看得到。提不到时返回 undefined,调用方不补空后缀。\n */\nfunction failureReason(events: readonly StreamEvent[]): string | undefined {\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"error\")\n return truncateOneLine(e.message, 120);\n }\n return undefined;\n}\n/** 单行截断:折叠空白 + 120 字符上限。 */\nfunction truncateOneLine(s: string, width: number): string {\n const clean = s.replace(/\\s+/g, \" \").trim();\n if (clean.length <= width)\n return clean;\n return `${clean.slice(0, width - 1)}…`;\n}\nexport function lastAssistantText(events: readonly StreamEvent[]): string | undefined {\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"message\" && e.role === \"assistant\" && e.text.trim())\n return e.text;\n }\n return undefined;\n}\n/**\n * 每个字段只在某一轮真的带回该值时才累加,协议不提供就保持省略(见\n * docs/feature/record/architecture.md「Usage」:「每个字段只在协议真实提供该值时存在……\n * 不存在『默认 0』或『默认 1』的字段」)。此前 `requests` 用 `add.requests ?? 1` 累加,会让\n * 转录解析型 adapter(整个 attempt 只在末尾解析一次 transcript、天然不报每轮请求数)的一轮\n * send 被硬算成 1 个请求,一个内部发起了 21 次工具调用的 codex session 因此落盘\n * `requests: 1`——不是真值,是轮数的误代理(见 memory 的 show-scope-slice-json-ruling 条目)。\n * `inputTokens`/`outputTokens` 此前是 Usage 的必填字段、始终累加(缺省视同 0);现在两者也\n * 可选化,同一条纪律统一适用:任何字段缺席就保持缺席,不拿「大概率是 0」去凑。\n */\nfunction accumulateUsage(acc: Usage, add: Usage): void {\n if (add.inputTokens !== undefined)\n acc.inputTokens = (acc.inputTokens ?? 0) + add.inputTokens;\n if (add.outputTokens !== undefined)\n acc.outputTokens = (acc.outputTokens ?? 0) + add.outputTokens;\n if (add.cacheReadTokens !== undefined)\n acc.cacheReadTokens = (acc.cacheReadTokens ?? 0) + add.cacheReadTokens;\n if (add.cacheCreationTokens !== undefined)\n acc.cacheCreationTokens = (acc.cacheCreationTokens ?? 0) + add.cacheCreationTokens;\n if (add.reasoningTokens !== undefined)\n acc.reasoningTokens = (acc.reasoningTokens ?? 0) + add.reasoningTokens;\n if (add.requests !== undefined)\n acc.requests = (acc.requests ?? 0) + add.requests;\n if (add.costUSD !== undefined) {\n acc.costUSD = acc.costUSD === undefined ? add.costUSD : acc.costUSD + add.costUSD;\n }\n}\n"]}
@@ -109,6 +109,7 @@ export interface SessionDeps {
109
109
  nextSourceOrder?: () => number;
110
110
  /** Attempt-owned source snapshot registry; Runner injects it explicitly. */
111
111
  sourceRegistry?: SourceRegistry;
112
+ resources: import("../types.cjs").AttemptResourceRegistry;
112
113
  }
113
114
  /** A successful agent send whose post-send ledger checkpoint could not be recorded. */
114
115
  export interface LedgerCaptureFailure {
@@ -109,6 +109,7 @@ export interface SessionDeps {
109
109
  nextSourceOrder?: () => number;
110
110
  /** Attempt-owned source snapshot registry; Runner injects it explicitly. */
111
111
  sourceRegistry?: SourceRegistry;
112
+ resources: import("../types.mjs").AttemptResourceRegistry;
112
113
  }
113
114
  /** A successful agent send whose post-send ledger checkpoint could not be recorded. */
114
115
  export interface LedgerCaptureFailure {
@@ -109,6 +109,7 @@ export interface SessionDeps {
109
109
  nextSourceOrder?: () => number;
110
110
  /** Attempt-owned source snapshot registry; Runner injects it explicitly. */
111
111
  sourceRegistry?: SourceRegistry;
112
+ resources: import("../types.js").AttemptResourceRegistry;
112
113
  }
113
114
  /** A successful agent send whose post-send ledger checkpoint could not be recorded. */
114
115
  export interface LedgerCaptureFailure {
@@ -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
  }