niceeval 0.15.1-canary.76 → 0.16.1

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 (714) hide show
  1. package/INDEX.md +45 -40
  2. package/dist/adapter-execution-trace.cjs.map +1 -1
  3. package/dist/adapter-execution-trace.d.cts +26 -0
  4. package/dist/adapter-execution-trace.d.mts +26 -0
  5. package/dist/adapter-execution-trace.d.ts +26 -0
  6. package/dist/adapter-usage.cjs.map +1 -1
  7. package/dist/adapter-usage.d.cts +9 -0
  8. package/dist/adapter-usage.d.mts +9 -0
  9. package/dist/adapter-usage.d.ts +9 -0
  10. package/dist/adapter.cjs +19 -4
  11. package/dist/adapter.cjs.map +1 -1
  12. package/dist/adapter.d.cts +37 -12
  13. package/dist/adapter.d.mts +37 -12
  14. package/dist/adapter.d.ts +37 -12
  15. package/dist/agents/ai-sdk.cjs +3 -0
  16. package/dist/agents/ai-sdk.cjs.map +1 -1
  17. package/dist/agents/bub.cjs +3 -0
  18. package/dist/agents/bub.cjs.map +1 -1
  19. package/dist/agents/claude-code-native.cjs +28 -2
  20. package/dist/agents/claude-code-native.cjs.map +1 -1
  21. package/dist/agents/claude-code.cjs +3 -0
  22. package/dist/agents/claude-code.cjs.map +1 -1
  23. package/dist/agents/codex.cjs +3 -0
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/coding-cli-versions.cjs +9 -10
  26. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  27. package/dist/agents/coding-cli-versions.d.cts +1 -1
  28. package/dist/agents/coding-cli-versions.d.mts +1 -1
  29. package/dist/agents/coding-cli-versions.d.ts +1 -1
  30. package/dist/agents/deepseek-harness.cjs +3 -0
  31. package/dist/agents/deepseek-harness.cjs.map +1 -1
  32. package/dist/agents/hermes.cjs +3 -0
  33. package/dist/agents/hermes.cjs.map +1 -1
  34. package/dist/agents/index.cjs.map +1 -1
  35. package/dist/agents/index.d.cts +3 -2
  36. package/dist/agents/index.d.mts +3 -2
  37. package/dist/agents/index.d.ts +3 -2
  38. package/dist/agents/omp.cjs +3 -0
  39. package/dist/agents/omp.cjs.map +1 -1
  40. package/dist/agents/openai-compat.cjs +6 -0
  41. package/dist/agents/openai-compat.cjs.map +1 -1
  42. package/dist/agents/openclaw.cjs +3 -0
  43. package/dist/agents/openclaw.cjs.map +1 -1
  44. package/dist/agents/opencode.cjs +3 -0
  45. package/dist/agents/opencode.cjs.map +1 -1
  46. package/dist/agents/sdk-streams.cjs +9 -0
  47. package/dist/agents/sdk-streams.cjs.map +1 -1
  48. package/dist/agents/ui-message-stream.cjs +3 -0
  49. package/dist/agents/ui-message-stream.cjs.map +1 -1
  50. package/dist/assertions/api.cjs.map +1 -1
  51. package/dist/assertions/api.d.cts +27 -5
  52. package/dist/assertions/api.d.mts +27 -5
  53. package/dist/assertions/api.d.ts +27 -5
  54. package/dist/assertions/collection.cjs +6 -0
  55. package/dist/assertions/collection.cjs.map +1 -1
  56. package/dist/assertions/collection.d.cts +4 -2
  57. package/dist/assertions/collection.d.mts +4 -2
  58. package/dist/assertions/collection.d.ts +4 -2
  59. package/dist/assertions/collection.js +12 -8
  60. package/dist/assertions/context-match.cjs +70 -0
  61. package/dist/assertions/context-match.cjs.map +1 -0
  62. package/dist/assertions/context-match.d.cts +107 -0
  63. package/dist/assertions/context-match.d.mts +107 -0
  64. package/dist/assertions/context-match.d.ts +107 -0
  65. package/dist/assertions/context-match.js +12 -0
  66. package/dist/assertions/context-match.js.map +1 -0
  67. package/dist/assertions/full-content.cjs +109 -0
  68. package/dist/assertions/full-content.cjs.map +1 -0
  69. package/dist/assertions/full-content.d.cts +6 -0
  70. package/dist/assertions/full-content.d.mts +6 -0
  71. package/dist/assertions/full-content.d.ts +6 -0
  72. package/dist/assertions/full-content.js +12 -0
  73. package/dist/assertions/full-content.js.map +1 -0
  74. package/dist/assertions/judge-presets.cjs +2 -34
  75. package/dist/assertions/judge-presets.cjs.map +1 -1
  76. package/dist/assertions/judge-presets.d.cts +6 -9
  77. package/dist/assertions/judge-presets.d.mts +6 -9
  78. package/dist/assertions/judge-presets.d.ts +6 -9
  79. package/dist/assertions/judge-presets.js +8 -8
  80. package/dist/assertions/judge.cjs +107 -29
  81. package/dist/assertions/judge.cjs.map +1 -1
  82. package/dist/assertions/judge.d.cts +2 -0
  83. package/dist/assertions/judge.d.mts +2 -0
  84. package/dist/assertions/judge.d.ts +2 -0
  85. package/dist/assertions/match.cjs +244 -5
  86. package/dist/assertions/match.cjs.map +1 -1
  87. package/dist/assertions/match.d.cts +43 -3
  88. package/dist/assertions/match.d.mts +43 -3
  89. package/dist/assertions/match.d.ts +43 -3
  90. package/dist/assertions/match.js +88 -78
  91. package/dist/assertions/material.cjs +520 -0
  92. package/dist/assertions/material.cjs.map +1 -0
  93. package/dist/assertions/material.d.cts +56 -0
  94. package/dist/assertions/material.d.mts +56 -0
  95. package/dist/assertions/material.d.ts +56 -0
  96. package/dist/assertions/material.js +20 -0
  97. package/dist/assertions/material.js.map +1 -0
  98. package/dist/assertions/record/attachment.cjs +5 -2
  99. package/dist/assertions/record/attachment.cjs.map +1 -1
  100. package/dist/assertions/record/codec.cjs +2 -1
  101. package/dist/assertions/record/codec.cjs.map +1 -1
  102. package/dist/assertions/record/model.cjs.map +1 -1
  103. package/dist/assertions/record/model.d.cts +6 -1
  104. package/dist/assertions/record/model.d.mts +6 -1
  105. package/dist/assertions/record/model.d.ts +6 -1
  106. package/dist/assertions/runtime.cjs +207 -14
  107. package/dist/assertions/runtime.cjs.map +1 -1
  108. package/dist/assertions/runtime.d.cts +9 -0
  109. package/dist/assertions/runtime.d.mts +9 -0
  110. package/dist/assertions/runtime.d.ts +9 -0
  111. package/dist/assertions/runtime.js +14 -8
  112. package/dist/assertions/score-match-audit.cjs +18 -8
  113. package/dist/assertions/score-match-audit.cjs.map +1 -1
  114. package/dist/assertions/score-match-gateway.cjs +83 -25
  115. package/dist/assertions/score-match-gateway.cjs.map +1 -1
  116. package/dist/assertions/score-match-gateway.d.cts +2 -0
  117. package/dist/assertions/score-match-gateway.d.mts +2 -0
  118. package/dist/assertions/score-match-gateway.d.ts +2 -0
  119. package/dist/assertions/value-composition.test-d.cjs +77 -0
  120. package/dist/assertions/value-composition.test-d.cjs.map +1 -0
  121. package/dist/assertions/value-composition.test-d.d.cts +1 -0
  122. package/dist/assertions/value-composition.test-d.d.mts +1 -0
  123. package/dist/assertions/value-composition.test-d.d.ts +1 -0
  124. package/dist/assertions/value-composition.test-d.js +4 -0
  125. package/dist/assertions/value-composition.test-d.js.map +1 -0
  126. package/dist/context/assert-first.cjs +207 -213
  127. package/dist/context/assert-first.cjs.map +1 -1
  128. package/dist/context/assert-first.d.cts +49 -23
  129. package/dist/context/assert-first.d.mts +49 -23
  130. package/dist/context/assert-first.d.ts +49 -23
  131. package/dist/context/session.cjs +111 -9
  132. package/dist/context/session.cjs.map +1 -1
  133. package/dist/context/session.d.cts +18 -0
  134. package/dist/context/session.d.mts +18 -0
  135. package/dist/context/session.d.ts +18 -0
  136. package/dist/define.cjs +17 -1
  137. package/dist/define.cjs.map +1 -1
  138. package/dist/eval/cli/contribution.cjs +2 -0
  139. package/dist/eval/cli/contribution.cjs.map +1 -1
  140. package/dist/eval/host/index.cjs +2 -0
  141. package/dist/eval/host/index.cjs.map +1 -1
  142. package/dist/eval/record/evaluation.cjs +3 -0
  143. package/dist/eval/record/evaluation.cjs.map +1 -1
  144. package/dist/eval/record/membership-provenance.d.cts +15 -15
  145. package/dist/eval/record/membership-provenance.d.mts +15 -15
  146. package/dist/eval/record/membership-provenance.d.ts +15 -15
  147. package/dist/eval/record/score.cjs +7 -0
  148. package/dist/eval/record/score.cjs.map +1 -1
  149. package/dist/eval/record/sealed-assertion.cjs +3 -0
  150. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  151. package/dist/eval/record/verdict.cjs +7 -0
  152. package/dist/eval/record/verdict.cjs.map +1 -1
  153. package/dist/expect/index.cjs +8 -2
  154. package/dist/expect/index.cjs.map +1 -1
  155. package/dist/expect/index.d.cts +9 -4
  156. package/dist/expect/index.d.mts +9 -4
  157. package/dist/expect/index.d.ts +9 -4
  158. package/dist/expect/index.js +72 -62
  159. package/dist/expect/index.mjs +72 -62
  160. package/dist/experiment/host/cli/contribution.cjs +37 -23
  161. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  162. package/dist/experiment/host/cli/contribution.d.cts +9 -1
  163. package/dist/experiment/host/cli/contribution.d.mts +9 -1
  164. package/dist/experiment/host/cli/contribution.d.ts +9 -1
  165. package/dist/experiment/host/current.cjs +74 -0
  166. package/dist/experiment/host/current.cjs.map +1 -0
  167. package/dist/experiment/host/current.d.cts +33 -0
  168. package/dist/experiment/host/current.d.mts +33 -0
  169. package/dist/experiment/host/current.d.ts +33 -0
  170. package/dist/experiment/host/current.js +10 -0
  171. package/dist/experiment/host/current.js.map +1 -0
  172. package/dist/experiment/host/index.cjs +17 -174
  173. package/dist/experiment/host/index.cjs.map +1 -1
  174. package/dist/experiment/host/index.d.cts +8 -54
  175. package/dist/experiment/host/index.d.mts +8 -54
  176. package/dist/experiment/host/index.d.ts +8 -54
  177. package/dist/experiment/host/operations.cjs +33 -10
  178. package/dist/experiment/host/operations.cjs.map +1 -1
  179. package/dist/experiment/host/operations.d.cts +29 -1
  180. package/dist/experiment/host/operations.d.mts +29 -1
  181. package/dist/experiment/host/operations.d.ts +29 -1
  182. package/dist/experiment/host/operations.js +6 -4
  183. package/dist/experiment/host/requirements.cjs +3 -0
  184. package/dist/experiment/host/requirements.cjs.map +1 -0
  185. package/dist/experiment/host/requirements.d.cts +3 -0
  186. package/dist/experiment/host/requirements.d.mts +3 -0
  187. package/dist/experiment/host/requirements.d.ts +3 -0
  188. package/dist/experiment/host/requirements.js +4 -0
  189. package/dist/experiment/host/requirements.js.map +1 -0
  190. package/dist/experiment/host/runtime.cjs +179 -0
  191. package/dist/experiment/host/runtime.cjs.map +1 -0
  192. package/dist/experiment/host/runtime.d.cts +79 -0
  193. package/dist/experiment/host/runtime.d.mts +79 -0
  194. package/dist/experiment/host/runtime.d.ts +79 -0
  195. package/dist/experiment/host/runtime.js +6 -0
  196. package/dist/experiment/host/runtime.js.map +1 -0
  197. package/dist/experiment/host/types.cjs.map +1 -1
  198. package/dist/experiment/host/types.d.cts +17 -16
  199. package/dist/experiment/host/types.d.mts +17 -16
  200. package/dist/experiment/host/types.d.ts +17 -16
  201. package/dist/fresh-import.cjs +2 -1
  202. package/dist/fresh-import.cjs.map +1 -1
  203. package/dist/index.cjs +4 -2
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +12 -6
  206. package/dist/index.d.mts +12 -6
  207. package/dist/index.d.ts +12 -6
  208. package/dist/index.js +32 -30
  209. package/dist/index.mjs +32 -30
  210. package/dist/inspection/artifacts.cjs +83 -54
  211. package/dist/inspection/artifacts.cjs.map +1 -1
  212. package/dist/inspection/artifacts.d.cts +8 -0
  213. package/dist/inspection/artifacts.d.mts +8 -0
  214. package/dist/inspection/artifacts.d.ts +8 -0
  215. package/dist/inspection/artifacts.js +2 -0
  216. package/dist/inspection/assertions.cjs +4 -1
  217. package/dist/inspection/assertions.cjs.map +1 -1
  218. package/dist/inspection/cli/contribution.cjs +27 -4
  219. package/dist/inspection/cli/contribution.cjs.map +1 -1
  220. package/dist/inspection/cli/contribution.d.cts +2 -1
  221. package/dist/inspection/cli/contribution.d.mts +2 -1
  222. package/dist/inspection/cli/contribution.d.ts +2 -1
  223. package/dist/inspection/execution-traces.cjs +114 -8
  224. package/dist/inspection/execution-traces.cjs.map +1 -1
  225. package/dist/inspection/execution-traces.d.cts +38 -0
  226. package/dist/inspection/execution-traces.d.mts +38 -0
  227. package/dist/inspection/execution-traces.d.ts +38 -0
  228. package/dist/inspection/facts.cjs +12 -0
  229. package/dist/inspection/facts.cjs.map +1 -1
  230. package/dist/inspection/limits.cjs +5 -1
  231. package/dist/inspection/limits.cjs.map +1 -1
  232. package/dist/inspection/limits.d.cts +4 -0
  233. package/dist/inspection/limits.d.mts +4 -0
  234. package/dist/inspection/limits.d.ts +4 -0
  235. package/dist/inspection/limits.js +6 -2
  236. package/dist/inspection/overview.cjs +74 -33
  237. package/dist/inspection/overview.cjs.map +1 -1
  238. package/dist/inspection/overview.d.cts +19 -1
  239. package/dist/inspection/overview.d.mts +19 -1
  240. package/dist/inspection/overview.d.ts +19 -1
  241. package/dist/inspection/overview.js +4 -2
  242. package/dist/inspection/project-input.cjs +9 -0
  243. package/dist/inspection/project-input.cjs.map +1 -0
  244. package/dist/inspection/project-input.d.cts +20 -0
  245. package/dist/inspection/project-input.d.mts +20 -0
  246. package/dist/inspection/project-input.d.ts +20 -0
  247. package/dist/inspection/project-input.js +8 -0
  248. package/dist/inspection/project-input.js.map +1 -0
  249. package/dist/inspection/project-result.cjs +60 -0
  250. package/dist/inspection/project-result.cjs.map +1 -0
  251. package/dist/inspection/project-result.d.cts +1264 -0
  252. package/dist/inspection/project-result.d.mts +1264 -0
  253. package/dist/inspection/project-result.d.ts +1264 -0
  254. package/dist/inspection/project-result.js +10 -0
  255. package/dist/inspection/project-result.js.map +1 -0
  256. package/dist/inspection/project-source.cjs +109 -0
  257. package/dist/inspection/project-source.cjs.map +1 -0
  258. package/dist/inspection/project-source.d.cts +10 -0
  259. package/dist/inspection/project-source.d.mts +10 -0
  260. package/dist/inspection/project-source.d.ts +10 -0
  261. package/dist/inspection/project-source.js +6 -0
  262. package/dist/inspection/project-source.js.map +1 -0
  263. package/dist/inspection/project.cjs +100 -0
  264. package/dist/inspection/project.cjs.map +1 -0
  265. package/dist/inspection/project.d.cts +3 -0
  266. package/dist/inspection/project.d.mts +3 -0
  267. package/dist/inspection/project.d.ts +3 -0
  268. package/dist/inspection/project.js +6 -0
  269. package/dist/inspection/project.js.map +1 -0
  270. package/dist/inspection/protocol.cjs +19 -9
  271. package/dist/inspection/protocol.cjs.map +1 -1
  272. package/dist/inspection/protocol.d.cts +5506 -38189
  273. package/dist/inspection/protocol.d.mts +5506 -38189
  274. package/dist/inspection/protocol.d.ts +5506 -38189
  275. package/dist/inspection/public.mjs +896 -84
  276. package/dist/inspection/query.cjs +2 -0
  277. package/dist/inspection/query.cjs.map +1 -1
  278. package/dist/inspection/results.cjs +234 -29
  279. package/dist/inspection/results.cjs.map +1 -1
  280. package/dist/inspection/results.d.cts +870 -13
  281. package/dist/inspection/results.d.mts +870 -13
  282. package/dist/inspection/results.d.ts +870 -13
  283. package/dist/inspection/results.js +36 -34
  284. package/dist/inspection/select.cjs +126 -14
  285. package/dist/inspection/select.cjs.map +1 -1
  286. package/dist/inspection/select.d.cts +1 -1
  287. package/dist/inspection/select.d.mts +1 -1
  288. package/dist/inspection/select.d.ts +1 -1
  289. package/dist/inspection/source.cjs +4 -0
  290. package/dist/inspection/source.cjs.map +1 -1
  291. package/dist/inspection/sources.cjs +5 -0
  292. package/dist/inspection/sources.cjs.map +1 -1
  293. package/dist/inspection/trace.cjs +82 -84
  294. package/dist/inspection/trace.cjs.map +1 -1
  295. package/dist/inspection/trace.d.cts +7 -2
  296. package/dist/inspection/trace.d.mts +7 -2
  297. package/dist/inspection/trace.d.ts +7 -2
  298. package/dist/model-slots.cjs +35 -0
  299. package/dist/model-slots.cjs.map +1 -0
  300. package/dist/model-slots.d.cts +19 -0
  301. package/dist/model-slots.d.mts +19 -0
  302. package/dist/model-slots.d.ts +19 -0
  303. package/dist/model-slots.js +8 -0
  304. package/dist/model-slots.js.map +1 -0
  305. package/dist/o11y/adapter-call-price.cjs +4 -0
  306. package/dist/o11y/adapter-call-price.cjs.map +1 -1
  307. package/dist/o11y/adapter-call-price.d.cts +24 -0
  308. package/dist/o11y/adapter-call-price.d.mts +24 -0
  309. package/dist/o11y/adapter-call-price.d.ts +24 -0
  310. package/dist/o11y/adapter-call-price.js +6 -2
  311. package/dist/o11y/adapter-usage-projection.cjs +158 -0
  312. package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
  313. package/dist/o11y/adapter-usage-projection.d.cts +141 -0
  314. package/dist/o11y/adapter-usage-projection.d.mts +141 -0
  315. package/dist/o11y/adapter-usage-projection.d.ts +141 -0
  316. package/dist/o11y/adapter-usage-projection.js +20 -0
  317. package/dist/o11y/adapter-usage-projection.js.map +1 -0
  318. package/dist/o11y/eval-usage.cjs +149 -0
  319. package/dist/o11y/eval-usage.cjs.map +1 -0
  320. package/dist/o11y/eval-usage.d.cts +46 -0
  321. package/dist/o11y/eval-usage.d.mts +46 -0
  322. package/dist/o11y/eval-usage.d.ts +46 -0
  323. package/dist/o11y/eval-usage.js +8 -0
  324. package/dist/o11y/eval-usage.js.map +1 -0
  325. package/dist/o11y/judge-call-price.cjs +62 -0
  326. package/dist/o11y/judge-call-price.cjs.map +1 -0
  327. package/dist/o11y/judge-call-price.d.cts +3 -0
  328. package/dist/o11y/judge-call-price.d.mts +3 -0
  329. package/dist/o11y/judge-call-price.d.ts +3 -0
  330. package/dist/o11y/judge-call-price.js +6 -0
  331. package/dist/o11y/judge-call-price.js.map +1 -0
  332. package/dist/o11y/judge-usage-projection.cjs +134 -0
  333. package/dist/o11y/judge-usage-projection.cjs.map +1 -0
  334. package/dist/o11y/judge-usage-projection.d.cts +18 -0
  335. package/dist/o11y/judge-usage-projection.d.mts +18 -0
  336. package/dist/o11y/judge-usage-projection.d.ts +18 -0
  337. package/dist/o11y/judge-usage-projection.js +20 -0
  338. package/dist/o11y/judge-usage-projection.js.map +1 -0
  339. package/dist/o11y/judge-usage-receipt.cjs +135 -0
  340. package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
  341. package/dist/o11y/judge-usage-receipt.d.cts +5 -0
  342. package/dist/o11y/judge-usage-receipt.d.mts +5 -0
  343. package/dist/o11y/judge-usage-receipt.d.ts +5 -0
  344. package/dist/o11y/judge-usage-receipt.js +6 -0
  345. package/dist/o11y/judge-usage-receipt.js.map +1 -0
  346. package/dist/o11y/judge-usage.cjs +171 -0
  347. package/dist/o11y/judge-usage.cjs.map +1 -0
  348. package/dist/o11y/judge-usage.d.cts +35 -0
  349. package/dist/o11y/judge-usage.d.mts +35 -0
  350. package/dist/o11y/judge-usage.d.ts +35 -0
  351. package/dist/o11y/judge-usage.js +6 -0
  352. package/dist/o11y/judge-usage.js.map +1 -0
  353. package/dist/plugin/contracts.cjs +2 -0
  354. package/dist/plugin/contracts.cjs.map +1 -1
  355. package/dist/plugin/link.cjs +7 -0
  356. package/dist/plugin/link.cjs.map +1 -1
  357. package/dist/record/attachment/protocol.cjs +8 -6
  358. package/dist/record/attachment/protocol.cjs.map +1 -1
  359. package/dist/record/attachment/protocol.d.cts +10 -0
  360. package/dist/record/attachment/protocol.d.mts +10 -0
  361. package/dist/record/attachment/protocol.d.ts +10 -0
  362. package/dist/record/attachment/protocol.js +38 -36
  363. package/dist/record/codec/seal-manifest.d.cts +3 -3
  364. package/dist/record/codec/seal-manifest.d.mts +3 -3
  365. package/dist/record/codec/seal-manifest.d.ts +3 -3
  366. package/dist/record/family/adapter-usage/definition.d.cts +1 -0
  367. package/dist/record/family/adapter-usage/definition.d.mts +1 -0
  368. package/dist/record/family/adapter-usage/definition.d.ts +1 -0
  369. package/dist/record/family/adapter-usage/persistence.cjs +1 -1
  370. package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
  371. package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
  372. package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
  373. package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
  374. package/dist/record/family/adapter-usage/schema.cjs +21 -2
  375. package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
  376. package/dist/record/family/adapter-usage/schema.d.cts +85 -0
  377. package/dist/record/family/adapter-usage/schema.d.mts +85 -0
  378. package/dist/record/family/adapter-usage/schema.d.ts +85 -0
  379. package/dist/record/family/adapter-usage/schema.js +18 -12
  380. package/dist/record/family/catalog.cjs +31 -27
  381. package/dist/record/family/catalog.cjs.map +1 -1
  382. package/dist/record/family/catalog.d.cts +94 -3
  383. package/dist/record/family/catalog.d.mts +94 -3
  384. package/dist/record/family/catalog.d.ts +94 -3
  385. package/dist/record/family/current.cjs +45 -42
  386. package/dist/record/family/current.cjs.map +1 -1
  387. package/dist/record/family/current.d.cts +240 -1
  388. package/dist/record/family/current.d.mts +240 -1
  389. package/dist/record/family/current.d.ts +240 -1
  390. package/dist/record/family/execution-traces/definition.d.cts +26 -0
  391. package/dist/record/family/execution-traces/definition.d.mts +26 -0
  392. package/dist/record/family/execution-traces/definition.d.ts +26 -0
  393. package/dist/record/family/execution-traces/definition.js +20 -14
  394. package/dist/record/family/execution-traces/schema.cjs +57 -1
  395. package/dist/record/family/execution-traces/schema.cjs.map +1 -1
  396. package/dist/record/family/execution-traces/schema.d.cts +114 -0
  397. package/dist/record/family/execution-traces/schema.d.mts +114 -0
  398. package/dist/record/family/execution-traces/schema.d.ts +114 -0
  399. package/dist/record/family/execution-traces/schema.js +18 -12
  400. package/dist/record/family/judge-usage/definition.cjs +12 -0
  401. package/dist/record/family/judge-usage/definition.cjs.map +1 -0
  402. package/dist/record/family/judge-usage/definition.d.cts +91 -0
  403. package/dist/record/family/judge-usage/definition.d.mts +91 -0
  404. package/dist/record/family/judge-usage/definition.d.ts +91 -0
  405. package/dist/record/family/judge-usage/definition.js +6 -0
  406. package/dist/record/family/judge-usage/definition.js.map +1 -0
  407. package/dist/record/family/judge-usage/persistence.cjs +10 -0
  408. package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
  409. package/dist/record/family/judge-usage/persistence.d.cts +91 -0
  410. package/dist/record/family/judge-usage/persistence.d.mts +91 -0
  411. package/dist/record/family/judge-usage/persistence.d.ts +91 -0
  412. package/dist/record/family/judge-usage/persistence.js +6 -0
  413. package/dist/record/family/judge-usage/persistence.js.map +1 -0
  414. package/dist/record/family/judge-usage/schema.cjs +307 -0
  415. package/dist/record/family/judge-usage/schema.cjs.map +1 -0
  416. package/dist/record/family/judge-usage/schema.d.cts +351 -0
  417. package/dist/record/family/judge-usage/schema.d.mts +351 -0
  418. package/dist/record/family/judge-usage/schema.d.ts +351 -0
  419. package/dist/record/family/judge-usage/schema.js +18 -0
  420. package/dist/record/family/judge-usage/schema.js.map +1 -0
  421. package/dist/record/host/sqlite-host.cjs +55 -9
  422. package/dist/record/host/sqlite-host.cjs.map +1 -1
  423. package/dist/record/host/types.cjs.map +1 -1
  424. package/dist/record/host/types.d.cts +7 -0
  425. package/dist/record/host/types.d.mts +7 -0
  426. package/dist/record/host/types.d.ts +7 -0
  427. package/dist/record/model/run-context.cjs +7 -1
  428. package/dist/record/model/run-context.cjs.map +1 -1
  429. package/dist/record/model/run-context.d.cts +4 -0
  430. package/dist/record/model/run-context.d.mts +4 -0
  431. package/dist/record/model/run-context.d.ts +4 -0
  432. package/dist/record/model/seal-manifest.d.cts +1 -1
  433. package/dist/record/model/seal-manifest.d.mts +1 -1
  434. package/dist/record/model/seal-manifest.d.ts +1 -1
  435. package/dist/record/sqlite/client.cjs +18 -5
  436. package/dist/record/sqlite/client.cjs.map +1 -1
  437. package/dist/record/sqlite/client.d.cts +1 -1
  438. package/dist/record/sqlite/client.d.mts +1 -1
  439. package/dist/record/sqlite/client.d.ts +1 -1
  440. package/dist/record/sqlite/project-state-database.cjs +29 -8
  441. package/dist/record/sqlite/project-state-database.cjs.map +1 -1
  442. package/dist/run/host/runtime.cjs +4 -0
  443. package/dist/run/host/runtime.cjs.map +1 -1
  444. package/dist/run/storage/sqlite.cjs +20 -0
  445. package/dist/run/storage/sqlite.cjs.map +1 -1
  446. package/dist/runner/adapter-execution-trace.cjs +125 -2
  447. package/dist/runner/adapter-execution-trace.cjs.map +1 -1
  448. package/dist/runner/adapter-execution-trace.d.cts +1 -1
  449. package/dist/runner/adapter-execution-trace.d.mts +1 -1
  450. package/dist/runner/adapter-execution-trace.d.ts +1 -1
  451. package/dist/runner/adapter-usage.cjs +55 -7
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +9 -2
  454. package/dist/runner/adapter-usage.d.mts +9 -2
  455. package/dist/runner/adapter-usage.d.ts +9 -2
  456. package/dist/runner/adoption.cjs +9 -0
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-cancellation.cjs +12 -0
  459. package/dist/runner/attempt-cancellation.cjs.map +1 -0
  460. package/dist/runner/attempt-cancellation.d.cts +6 -0
  461. package/dist/runner/attempt-cancellation.d.mts +6 -0
  462. package/dist/runner/attempt-cancellation.d.ts +6 -0
  463. package/dist/runner/attempt-cancellation.js +6 -0
  464. package/dist/runner/attempt-cancellation.js.map +1 -0
  465. package/dist/runner/attempt-resources.cjs +10 -4
  466. package/dist/runner/attempt-resources.cjs.map +1 -1
  467. package/dist/runner/attempt-resources.d.cts +2 -1
  468. package/dist/runner/attempt-resources.d.mts +2 -1
  469. package/dist/runner/attempt-resources.d.ts +2 -1
  470. package/dist/runner/attempt.cjs +1177 -1139
  471. package/dist/runner/attempt.cjs.map +1 -1
  472. package/dist/runner/config-identity.cjs +20 -1
  473. package/dist/runner/config-identity.cjs.map +1 -1
  474. package/dist/runner/config-identity.d.cts +5 -0
  475. package/dist/runner/config-identity.d.mts +5 -0
  476. package/dist/runner/config-identity.d.ts +5 -0
  477. package/dist/runner/discover.cjs +14 -0
  478. package/dist/runner/discover.cjs.map +1 -1
  479. package/dist/runner/discover.d.cts +3 -0
  480. package/dist/runner/discover.d.mts +3 -0
  481. package/dist/runner/discover.d.ts +3 -0
  482. package/dist/runner/feedback/human.cjs +9 -4
  483. package/dist/runner/feedback/human.cjs.map +1 -1
  484. package/dist/runner/fingerprint.cjs +1 -0
  485. package/dist/runner/fingerprint.cjs.map +1 -1
  486. package/dist/runner/judge-usage.cjs +18 -0
  487. package/dist/runner/judge-usage.cjs.map +1 -0
  488. package/dist/runner/judge-usage.d.cts +5 -0
  489. package/dist/runner/judge-usage.d.mts +5 -0
  490. package/dist/runner/judge-usage.d.ts +5 -0
  491. package/dist/runner/judge-usage.js +8 -0
  492. package/dist/runner/judge-usage.js.map +1 -0
  493. package/dist/runner/project-target.cjs.map +1 -1
  494. package/dist/runner/project-target.d.cts +2 -0
  495. package/dist/runner/project-target.d.mts +2 -0
  496. package/dist/runner/project-target.d.ts +2 -0
  497. package/dist/runner/record/planning.cjs +1 -0
  498. package/dist/runner/record/planning.cjs.map +1 -1
  499. package/dist/runner/record.cjs +4 -0
  500. package/dist/runner/record.cjs.map +1 -1
  501. package/dist/runner/reporters/braintrust.cjs +2 -0
  502. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  503. package/dist/runner/reuse-diagnostics.cjs +9 -10
  504. package/dist/runner/reuse-diagnostics.cjs.map +1 -1
  505. package/dist/runner/reuse-diagnostics.d.cts +5 -6
  506. package/dist/runner/reuse-diagnostics.d.mts +5 -6
  507. package/dist/runner/reuse-diagnostics.d.ts +5 -6
  508. package/dist/runner/reuse-diagnostics.js +4 -4
  509. package/dist/runner/reuse-plan.cjs +100 -48
  510. package/dist/runner/reuse-plan.cjs.map +1 -1
  511. package/dist/runner/reuse-plan.d.cts +60 -3
  512. package/dist/runner/reuse-plan.d.mts +60 -3
  513. package/dist/runner/reuse-plan.d.ts +60 -3
  514. package/dist/runner/reuse-plan.js +14 -10
  515. package/dist/runner/run.cjs +8 -6
  516. package/dist/runner/run.cjs.map +1 -1
  517. package/dist/runner/session.cjs +1 -1
  518. package/dist/runner/session.cjs.map +1 -1
  519. package/dist/runner/session.d.cts +1 -1
  520. package/dist/runner/session.d.mts +1 -1
  521. package/dist/runner/session.d.ts +1 -1
  522. package/dist/runner/source-producer.cjs +3 -1
  523. package/dist/runner/source-producer.cjs.map +1 -1
  524. package/dist/runner/types.cjs.map +1 -1
  525. package/dist/runner/types.d.cts +26 -5
  526. package/dist/runner/types.d.mts +26 -5
  527. package/dist/runner/types.d.ts +26 -5
  528. package/dist/sandbox/action.cjs +3 -0
  529. package/dist/sandbox/action.cjs.map +1 -1
  530. package/dist/sandbox/commands.cjs +3 -0
  531. package/dist/sandbox/commands.cjs.map +1 -1
  532. package/dist/sandbox/compose.cjs +6 -0
  533. package/dist/sandbox/compose.cjs.map +1 -1
  534. package/dist/sandbox/docker-profile/registry.cjs +7 -0
  535. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  536. package/dist/sandbox/docker-profile/runtime.cjs +3 -0
  537. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  538. package/dist/sandbox/docker-profile/schema.cjs +7 -0
  539. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  540. package/dist/sandbox/incus.cjs +7 -0
  541. package/dist/sandbox/incus.cjs.map +1 -1
  542. package/dist/sandbox/layer.cjs +12 -0
  543. package/dist/sandbox/layer.cjs.map +1 -1
  544. package/dist/shared/adapter-cleanup.cjs +18 -0
  545. package/dist/shared/adapter-cleanup.cjs.map +1 -0
  546. package/dist/shared/adapter-cleanup.d.cts +4 -0
  547. package/dist/shared/adapter-cleanup.d.mts +4 -0
  548. package/dist/shared/adapter-cleanup.d.ts +4 -0
  549. package/dist/shared/adapter-cleanup.js +10 -0
  550. package/dist/shared/adapter-cleanup.js.map +1 -0
  551. package/dist/shared/attempt-lifecycle.cjs +3 -0
  552. package/dist/shared/attempt-lifecycle.cjs.map +1 -0
  553. package/dist/shared/attempt-lifecycle.d.cts +13 -0
  554. package/dist/shared/attempt-lifecycle.d.mts +13 -0
  555. package/dist/shared/attempt-lifecycle.d.ts +13 -0
  556. package/dist/shared/attempt-lifecycle.js +4 -0
  557. package/dist/shared/attempt-lifecycle.js.map +1 -0
  558. package/dist/show/contribution.cjs +52 -14
  559. package/dist/show/contribution.cjs.map +1 -1
  560. package/dist/show/contribution.d.cts +23 -1
  561. package/dist/show/contribution.d.mts +23 -1
  562. package/dist/show/contribution.d.ts +23 -1
  563. package/dist/show/model.cjs +8 -1
  564. package/dist/show/model.cjs.map +1 -1
  565. package/dist/show/model.d.cts +10 -1
  566. package/dist/show/model.d.mts +10 -1
  567. package/dist/show/model.d.ts +10 -1
  568. package/dist/show/render.cjs +287 -49
  569. package/dist/show/render.cjs.map +1 -1
  570. package/dist/show/render.d.cts +3 -0
  571. package/dist/show/render.d.mts +3 -0
  572. package/dist/show/render.d.ts +3 -0
  573. package/dist/sources/projector.cjs +3 -0
  574. package/dist/sources/projector.cjs.map +1 -1
  575. package/dist/types.cjs.map +1 -1
  576. package/dist/types.d.cts +1 -1
  577. package/dist/types.d.mts +1 -1
  578. package/dist/types.d.ts +1 -1
  579. package/dist/view/app-dist/.vite/manifest.json +2 -2
  580. package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
  581. package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
  582. package/dist/view/app-dist/index.html +1 -1
  583. package/dist/view/cli/contribution.cjs +54 -21
  584. package/dist/view/cli/contribution.cjs.map +1 -1
  585. package/dist/view/cli/contribution.d.cts +2 -1
  586. package/dist/view/cli/contribution.d.mts +2 -1
  587. package/dist/view/cli/contribution.d.ts +2 -1
  588. package/dist/view/function-runtime.mjs +13231 -11647
  589. package/dist/view/http-protocol.cjs +3 -0
  590. package/dist/view/http-protocol.cjs.map +1 -1
  591. package/dist/view/http-protocol.d.cts +8 -0
  592. package/dist/view/http-protocol.d.mts +8 -0
  593. package/dist/view/http-protocol.d.ts +8 -0
  594. package/dist/view/inspection-host.cjs +17 -1
  595. package/dist/view/inspection-host.cjs.map +1 -1
  596. package/dist/view/render.cjs +1 -0
  597. package/dist/view/render.cjs.map +1 -1
  598. package/dist/view/render.d.cts +2 -1
  599. package/dist/view/render.d.mts +2 -1
  600. package/dist/view/render.d.ts +2 -1
  601. package/dist/view/revision.cjs.map +1 -1
  602. package/dist/view/revision.d.cts +12 -0
  603. package/dist/view/revision.d.mts +12 -0
  604. package/dist/view/revision.d.ts +12 -0
  605. package/dist/view/server.cjs +10 -9
  606. package/dist/view/server.cjs.map +1 -1
  607. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  608. package/docs-site/zh/explanation/adapter.mdx +2 -2
  609. package/docs-site/zh/explanation/assert.mdx +60 -24
  610. package/docs-site/zh/explanation/drive.mdx +1 -1
  611. package/docs-site/zh/explanation/evals.mdx +31 -29
  612. package/docs-site/zh/explanation/experiment.mdx +15 -15
  613. package/docs-site/zh/explanation/judge.mdx +23 -15
  614. package/docs-site/zh/explanation/overview.mdx +44 -21
  615. package/docs-site/zh/explanation/record.mdx +28 -13
  616. package/docs-site/zh/explanation/results-flow.mdx +37 -0
  617. package/docs-site/zh/explanation/runner.mdx +27 -6
  618. package/docs-site/zh/index.mdx +22 -115
  619. package/docs-site/zh/introduction.mdx +89 -61
  620. package/docs-site/zh/reference/cli.mdx +50 -26
  621. package/docs-site/zh/reference/define-agent.mdx +37 -5
  622. package/docs-site/zh/reference/define-eval.mdx +130 -29
  623. package/docs-site/zh/reference/define-experiment.mdx +251 -0
  624. package/docs-site/zh/reference/events.mdx +34 -30
  625. package/docs-site/zh/reference/expect.mdx +77 -2
  626. package/docs-site/zh/reference/official-adapters.mdx +2 -2
  627. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
  628. package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
  629. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
  630. package/docs-site/zh/tutorials/accept-results.mdx +34 -24
  631. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
  632. package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
  633. package/docs-site/zh/tutorials/authoring.mdx +138 -121
  634. package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
  635. package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
  636. package/docs-site/zh/tutorials/concurrency.mdx +66 -62
  637. package/docs-site/zh/tutorials/configuration.mdx +17 -17
  638. package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
  639. package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
  640. package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
  641. package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
  642. package/docs-site/zh/tutorials/custom-application.mdx +75 -55
  643. package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
  644. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
  645. package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
  646. package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
  647. package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
  648. package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
  649. package/docs-site/zh/tutorials/fixtures.mdx +42 -26
  650. package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
  651. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
  652. package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
  653. package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
  654. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
  655. package/docs-site/zh/tutorials/plugins.mdx +55 -31
  656. package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
  657. package/docs-site/zh/tutorials/quickstart.mdx +91 -47
  658. package/docs-site/zh/tutorials/reporters.mdx +45 -30
  659. package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
  660. package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
  661. package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
  662. package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
  663. package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
  664. package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
  665. package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
  666. package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
  667. package/docs-site/zh/tutorials/write-send.mdx +53 -52
  668. package/node_modules/undici/docs/docs/api/Agent.md +8 -8
  669. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
  670. package/node_modules/undici/docs/docs/api/Errors.md +25 -0
  671. package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
  672. package/node_modules/undici/docs/docs/api/Pool.md +5 -6
  673. package/node_modules/undici/lib/api/readable.js +1 -2
  674. package/node_modules/undici/lib/core/request.js +23 -2
  675. package/node_modules/undici/lib/core/util.js +0 -39
  676. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  677. package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
  678. package/node_modules/undici/lib/dispatcher/client.js +1 -1
  679. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
  680. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
  681. package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
  682. package/node_modules/undici/lib/dispatcher/pool.js +90 -7
  683. package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
  684. package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
  685. package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
  686. package/node_modules/undici/lib/handler/retry-handler.js +72 -13
  687. package/node_modules/undici/lib/interceptor/cache.js +4 -1
  688. package/node_modules/undici/lib/interceptor/decompress.js +236 -69
  689. package/node_modules/undici/lib/web/cache/cache.js +17 -8
  690. package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
  691. package/node_modules/undici/lib/web/cookies/index.js +19 -7
  692. package/node_modules/undici/lib/web/cookies/util.js +3 -1
  693. package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
  694. package/node_modules/undici/lib/web/fetch/body.js +22 -15
  695. package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
  696. package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
  697. package/node_modules/undici/lib/web/fetch/headers.js +34 -31
  698. package/node_modules/undici/lib/web/fetch/index.js +38 -14
  699. package/node_modules/undici/lib/web/fetch/request.js +74 -79
  700. package/node_modules/undici/lib/web/fetch/response.js +43 -44
  701. package/node_modules/undici/lib/web/fetch/util.js +7 -7
  702. package/node_modules/undici/lib/web/infra/index.js +16 -1
  703. package/node_modules/undici/lib/web/webidl/index.js +2 -14
  704. package/node_modules/undici/lib/web/websocket/events.js +43 -26
  705. package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
  706. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
  707. package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
  708. package/node_modules/undici/package.json +1 -1
  709. package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
  710. package/node_modules/undici/types/interceptors.d.ts +1 -1
  711. package/node_modules/undici/types/webidl.d.ts +13 -7
  712. package/package.json +4 -4
  713. package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
  714. package/docs-site/zh/tutorials/experiments.mdx +0 -101
@@ -609,7 +609,7 @@ function ageLabel(iso, nowMs) {
609
609
  }
610
610
  function renderExperimentLine(experiment, published) {
611
611
  if (published) {
612
- return ` ${experiment.experimentId} niceeval view --run ${experiment.runId}`;
612
+ return ` ${experiment.experimentId} niceeval show --run ${experiment.runId}`;
613
613
  }
614
614
  const counters = [
615
615
  experiment.running ? `${experiment.running} running` : "",
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["session.ts"],"names":[],"mappings":"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","sourcesContent":["// Experiment Invocation 的轻量 Session 索引。\n//\n// Session 只回答「哪一批 Run 由同一次 exp 调度、当前是否仍活跃」;完整的\n// Attempt / verdict / artifact 继续由 Run 记录保存。所有写入都走逐条目原子\n// 文件原语,Session 不参与用例锁或实验级闸的判定。\nimport { randomUUID } from \"node:crypto\";\nimport { Cause, Deferred, Effect, Exit, Fiber, Queue, Scope } from \"effect\";\nimport { type FencedOwner, type InvocationRunInput, type InvocationSessionRecord, } from \"../coordination/platform/sqlite-coordination.ts\";\nimport { ProjectStateDatabase, type ProjectStateDatabaseService } from \"../record/sqlite/project-state-database.ts\";\nimport type { CompletionStatus, AttemptQueueReason, AttemptRef, InvocationCompletion, InvocationReceipt, RunFeedbackEvent, RunFeedbackState, } from \"./types.ts\";\nimport type { AgentRun } from \"./types.ts\";\nimport { currentProcessOwnerIdentity } from \"./node-process-identity.ts\";\nexport const SESSION_HEARTBEAT_INTERVAL_MS = 10000;\nexport const SESSION_EXPIRY_MS = 30000;\nexport type SessionExperimentState = \"setup\" | \"running\" | \"waiting\" | \"teardown\";\nexport type SessionStatus = \"active\" | \"completed\" | \"incomplete\" | \"interrupted\";\nexport interface SessionExperimentRecord {\n experimentId: string;\n runId: string;\n /** The Record v1 receipt confirmed that this draft reached a complete marker. */\n published?: boolean;\n state?: SessionExperimentState;\n running?: number;\n queued?: number;\n elsewhere?: number;\n /** Only currently queued Attempts with an actionable, stable reason are expanded. */\n attempts?: SessionQueuedAttemptRecord[];\n}\nexport interface SessionQueuedAttemptRecord {\n evalId: string;\n attempt: number;\n state: \"queued\";\n reason: AttemptQueueReason;\n}\nexport interface SessionRecord {\n sessionId: string;\n pid: number;\n startedAt: string;\n status: SessionStatus;\n experiments: SessionExperimentRecord[];\n heartbeatAt?: string;\n completedAt?: string;\n completion?: InvocationCompletion;\n}\nexport interface ExpiredSessionRecord {\n sessionId: string;\n pid: number;\n startedAt: string;\n heartbeatAt?: string;\n}\nexport interface SessionListDocument {\n format: \"niceeval.sessions\";\n sessions: SessionRecord[];\n expired: ExpiredSessionRecord[];\n}\nexport interface SessionShowDocument {\n format: \"niceeval.session\";\n session: SessionRecord | ExpiredSessionRecord;\n expired?: boolean;\n}\nexport interface SessionStartInput {\n runIds: ReadonlyMap<string, string>;\n agentRuns: readonly AgentRun[];\n /** 已规划、可携入的 attempt 数;用于创建记录时准确初始化 queued。 */\n carriedAttemptsByKey?: ReadonlyMap<string, ReadonlySet<number>>;\n startedAt?: string;\n pid?: number;\n /** Complete canonical Run resources created atomically with this Invocation. */\n invocationRuns: readonly InvocationRunInput[];\n}\nexport interface SessionCloseInput {\n status?: CompletionStatus | SessionStatus;\n completion?: InvocationCompletion;\n /** Only IDs in this receipt are safe targets for `niceeval view --run`. */\n receipt?: InvocationReceipt;\n completedAt?: string;\n}\n/**\n * Narrow transient event bridge owned by the Experiment Host. Session data is\n * an invocation-local index, so this intentionally excludes Record facts and\n * every feedback event that cannot change its small progress projection.\n */\nexport type SessionInvocationEvent = {\n readonly type: \"attempt:queued\";\n readonly identity?: AttemptRef;\n readonly reason: AttemptQueueReason;\n} | {\n readonly type: \"attempt:start\" | \"attempt:complete\" | \"attempt:early-exit\";\n readonly identity?: AttemptRef;\n} | {\n readonly type: \"lock-wait\";\n readonly experimentId: string;\n readonly status: \"started\" | \"resolved\";\n readonly attempts?: number;\n readonly carried?: number;\n readonly dispatched?: number;\n} | {\n readonly type: \"experiment-hook\";\n readonly experimentId: string;\n readonly hook: \"setup\" | \"teardown\";\n readonly status: \"started\" | \"done\" | \"failed\";\n};\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\nfunction isTimestamp(value: unknown): value is string {\n return typeof value === \"string\" && Number.isFinite(Date.parse(value));\n}\nfunction isPositiveInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\nfunction decodeExperiment(value: unknown): SessionExperimentRecord | undefined {\n const raw = asRecord(value);\n if (raw === undefined || typeof raw.experimentId !== \"string\" || typeof raw.runId !== \"string\")\n return undefined;\n if (raw.published !== undefined && typeof raw.published !== \"boolean\")\n return undefined;\n const state = raw.state;\n if (state !== undefined && state !== \"setup\" && state !== \"running\" && state !== \"waiting\" && state !== \"teardown\") {\n return undefined;\n }\n for (const key of [\"running\", \"queued\", \"elsewhere\"] as const) {\n if (raw[key] !== undefined && !isNonNegativeInteger(raw[key]))\n return undefined;\n }\n const running = raw.running;\n const queued = raw.queued;\n const elsewhere = raw.elsewhere;\n const attempts = raw.attempts === undefined\n ? undefined\n : Array.isArray(raw.attempts)\n ? raw.attempts.map((value): SessionQueuedAttemptRecord | undefined => {\n const attempt = asRecord(value);\n if (attempt === undefined ||\n typeof attempt.evalId !== \"string\" ||\n !isNonNegativeInteger(attempt.attempt) ||\n attempt.state !== \"queued\" ||\n attempt.reason !== \"provider-capacity\")\n return undefined;\n return {\n evalId: attempt.evalId,\n attempt: attempt.attempt,\n state: \"queued\",\n reason: attempt.reason,\n };\n })\n : undefined;\n if (raw.attempts !== undefined && (attempts === undefined || attempts.some((item) => item === undefined))) {\n return undefined;\n }\n return {\n experimentId: raw.experimentId,\n runId: raw.runId,\n ...(raw.published === true ? { published: true } : {}),\n ...(state !== undefined ? { state } : {}),\n ...(running !== undefined ? { running: running as number } : {}),\n ...(queued !== undefined ? { queued: queued as number } : {}),\n ...(elsewhere !== undefined ? { elsewhere: elsewhere as number } : {}),\n ...(attempts === undefined ? {} : { attempts: attempts as SessionQueuedAttemptRecord[] }),\n };\n}\n/** 完整读取边界:损坏/未知格式条目从查询中跳过,不拖垮整个目录。 */\nexport function decodeSession(value: unknown): SessionRecord | undefined {\n const raw = asRecord(value);\n if (raw === undefined ||\n typeof raw.sessionId !== \"string\" ||\n !isPositiveInteger(raw.pid) ||\n !isTimestamp(raw.startedAt) ||\n (raw.status !== \"active\" && raw.status !== \"completed\" && raw.status !== \"incomplete\" && raw.status !== \"interrupted\") ||\n !Array.isArray(raw.experiments))\n return undefined;\n if (raw.heartbeatAt !== undefined && !isTimestamp(raw.heartbeatAt))\n return undefined;\n if (raw.completedAt !== undefined && !isTimestamp(raw.completedAt))\n return undefined;\n const experiments = raw.experiments.map(decodeExperiment);\n if (experiments.some((item) => item === undefined))\n return undefined;\n return {\n sessionId: raw.sessionId,\n pid: raw.pid,\n startedAt: raw.startedAt,\n status: raw.status,\n experiments: experiments as SessionExperimentRecord[],\n ...(raw.heartbeatAt !== undefined ? { heartbeatAt: raw.heartbeatAt } : {}),\n ...(raw.completedAt !== undefined ? { completedAt: raw.completedAt } : {}),\n ...(raw.completion !== undefined && asRecord(raw.completion) !== undefined\n ? { completion: raw.completion as InvocationCompletion }\n : {}),\n };\n}\nfunction keyOf(experimentId: string, evalId: string): string {\n // 与 runner/sandbox-selection.ts 的 runPairKey 保持同形,但避免运行时依赖造成循环导入。\n return experimentId.includes(\"|\") || evalId.includes(\"|\")\n ? JSON.stringify([experimentId, evalId])\n : `${experimentId}|${evalId}`;\n}\nfunction sessionStatusOf(status: CompletionStatus | SessionStatus | undefined): SessionStatus {\n if (status === \"complete\" || status === \"completed\" || status === undefined)\n return \"completed\";\n if (status === \"interrupted\")\n return \"interrupted\";\n return \"incomplete\";\n}\nfunction cloneRecord(record: SessionRecord): SessionRecord {\n return {\n ...record,\n experiments: record.experiments.map((experiment) => ({\n ...experiment,\n ...(experiment.attempts === undefined\n ? {}\n : { attempts: experiment.attempts.map((attempt) => ({ ...attempt })) }),\n })),\n ...(record.completion ? { completion: { ...record.completion, reporterErrors: [...record.completion.reporterErrors] } } : {}),\n };\n}\nfunction encodeSession(record: SessionRecord): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(record));\n}\nfunction decodeSessionBytes(bytes: Uint8Array): SessionRecord | undefined {\n try {\n return decodeSession(JSON.parse(new TextDecoder().decode(bytes)));\n }\n catch {\n return undefined;\n }\n}\ntype SessionPersistenceRequest = {\n readonly _tag: \"write\";\n readonly snapshot: SessionRecord;\n /** 缺席时是反馈索引的尽力写;失败不影响 attempt 判定。 */\n readonly completion?: Deferred.Deferred<void, unknown>;\n} | {\n readonly _tag: \"barrier\";\n readonly completion: Deferred.Deferred<void, unknown>;\n};\n/**\n * Session 的 Effect 资源组刻意不绑定 `start()` 调用点的 Scope:`runEvals()` 自己会\n * 在 dispatch 完成时关闭内部 Scope,但 CLI 仍要在随后拿到 receipt 后再写最终 completed\n * Session。调用方的 `close()`(CLI 已有的 finalizer)才是这一组 worker/timer 的唯一\n * 释放边界。\n */\ninterface SessionPersistence {\n readonly scope: Scope.Closeable;\n readonly requests: Queue.Queue<SessionPersistenceRequest>;\n readonly worker: Fiber.Fiber<void, never>;\n heartbeat?: Fiber.Fiber<never, never>;\n accepting: boolean;\n stopped: boolean;\n}\n/**\n * 在 Effect 中等一段不会让 Node 进程仅因 Session 心跳而存活的时间。中断会清掉当前 timer;\n * 这保留旧 `setInterval(...).unref()` 的进程退出语义,同时不会把定时器生命周期漏到 Effect\n * 之外。\n */\nfunction unrefDelayEffect(milliseconds: number): Effect.Effect<void> {\n return Effect.callback<void>((resume) => {\n const timer = setTimeout(() => resume(Effect.void), milliseconds);\n timer.unref?.();\n return Effect.sync(() => clearTimeout(timer));\n });\n}\n/** 可持久化的 Session 生命周期;所有磁盘 I/O 由一个 Effect worker 按入队顺序串行化。 */\nexport class SessionTracker {\n readonly niceevalRoot: string;\n readonly sessionId: string;\n private record: SessionRecord | undefined;\n private persistence: SessionPersistence | undefined;\n private started = false;\n private closed = false;\n private owner: FencedOwner | undefined;\n private readonly database: ProjectStateDatabaseService;\n constructor(niceevalRoot: string, database: ProjectStateDatabaseService, sessionId = `s_${randomUUID()}`) {\n this.niceevalRoot = niceevalRoot;\n this.database = database;\n this.sessionId = sessionId;\n }\n private invocationEffect<A extends import(\"../record/sqlite/worker-protocol.ts\").StorageWorkerResult>(command: import(\"../record/sqlite/worker-protocol.ts\").InvocationCommand): Effect.Effect<A, unknown> {\n return Effect.flatMap(this.database.bind(this.niceevalRoot), (facets) => Effect.tryPromise({\n try: () => facets.invocation.execute<A>(command),\n catch: (cause) => cause,\n }));\n }\n get current(): SessionRecord | undefined {\n return this.record === undefined ? undefined : cloneRecord(this.record);\n }\n /**\n * Effect 主入口:先完成第一份 durable snapshot,再开始心跳。持久化 Scope 跨过\n * `runEvals()` 的内部 Scope,由 closeEffect 关闭,因而最终 receipt 不会被抢先截断。\n */\n start(input: SessionStartInput): Effect.Effect<SessionRecord, unknown> {\n let persistence: SessionPersistence | undefined;\n return Effect.gen({ self: this }, function* () {\n if (this.started)\n return yield* Effect.fail(new Error(\"SessionTracker.start() called more than once.\"));\n const scope = yield* Scope.make();\n const requests = yield* Queue.unbounded<SessionPersistenceRequest>();\n const worker = yield* Effect.forkIn(this.persistenceWorkerEffect(requests), scope);\n persistence = { scope, requests, worker, accepting: true, stopped: false };\n this.persistence = persistence;\n this.started = true;\n const startedAt = input.startedAt ?? new Date().toISOString();\n const carried = input.carriedAttemptsByKey;\n const experiments: SessionExperimentRecord[] = [];\n for (const run of input.agentRuns) {\n if (run.experimentId === undefined)\n continue;\n const runId = input.runIds.get(run.experimentId);\n if (runId === undefined)\n continue;\n const planned = run.selectedEvalIds.length * run.attempts;\n const carriedCount = run.selectedEvalIds.reduce((count, evalId) => count + (carried?.get(keyOf(run.experimentId!, evalId))?.size ?? 0), 0);\n const queued = Math.max(0, planned - carriedCount);\n experiments.push({\n experimentId: run.experimentId,\n runId,\n state: run.setup && queued > 0 ? \"setup\" : \"running\",\n running: 0,\n queued,\n elsewhere: 0,\n });\n }\n const now = new Date().toISOString();\n this.record = {\n sessionId: this.sessionId,\n pid: input.pid ?? process.pid,\n startedAt,\n status: \"active\",\n heartbeatAt: now,\n experiments,\n };\n const owner = currentProcessOwnerIdentity(this.sessionId);\n this.owner = (yield* this.invocationEffect<InvocationSessionRecord>({ _tag: \"invocation-create\", input: {\n invocationId: this.sessionId,\n owner,\n startedAt,\n runs: input.invocationRuns,\n deadlineEpochMs: Date.now() + 30000,\n } })).owner;\n // Unlike feedback snapshots, the initial entry is a durable boundary:\n // dispatch must not start until it has either reached disk or failed.\n yield* this.flush();\n persistence.heartbeat = yield* Effect.forkIn(this.heartbeatLoopEffect(), scope);\n return this.current!;\n }).pipe(\n // A failed first write must not leave the manually held Scope (or its\n // queue worker) alive. Preserve the original failure after cleanup.\n Effect.onError((cause) => persistence === undefined\n ? Effect.void\n : this.stopPersistenceEffect(persistence, Exit.failCause(cause)).pipe(Effect.ignore)));\n }\n /** coordinator 的同步事件回调;只更新最小索引并把 snapshot 交给 Effect-owned serial worker。 */\n onFeedback(event: RunFeedbackEvent, _state?: RunFeedbackState): void {\n if (event.type === \"attempt:start\" ||\n event.type === \"attempt:queued\" ||\n event.type === \"attempt:complete\" ||\n event.type === \"attempt:early-exit\" ||\n event.type === \"lock-wait\" ||\n event.type === \"experiment-hook\") {\n this.onInvocationEvent(event);\n }\n }\n /** Applies the frozen carry decision before dispatch without inventing lifecycle events. */\n applyCarriedAttempts(agentRuns: readonly AgentRun[], carried: ReadonlyMap<string, ReadonlySet<number>>): Effect.Effect<void, unknown> {\n if (this.record === undefined || this.record.status !== \"active\")\n return Effect.void;\n for (const experiment of this.record.experiments) {\n const run = agentRuns.find((candidate) => candidate.experimentId === experiment.experimentId);\n const count = run?.selectedEvalIds.reduce((total, evalId) => total + (carried.get(keyOf(experiment.experimentId, evalId))?.size ?? 0), 0) ?? 0;\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - count);\n this.refreshState(experiment);\n }\n return this.flush();\n }\n /** Host-side observer bridge; no runtime is started from a synchronous callback. */\n onInvocationEvent(event: SessionInvocationEvent): void {\n if (!this.started || this.closed || this.record === undefined || this.record.status !== \"active\")\n return;\n const identity = \"identity\" in event && event.identity !== undefined ? event.identity : undefined;\n const experimentId = identity\n ? identity.experimentId\n : \"experimentId\" in event\n ? event.experimentId\n : undefined;\n const experiment = experimentId === undefined\n ? undefined\n : this.record.experiments.find((item) => item.experimentId === experimentId);\n let changed = false;\n const removeQueuedAttempt = (): boolean => {\n if (experiment === undefined || identity?.evalId === undefined || identity.attempt === undefined)\n return false;\n const attempts = experiment.attempts ?? [];\n const index = attempts.findIndex((attempt) => attempt.evalId === identity.evalId && attempt.attempt === identity.attempt);\n if (index < 0)\n return false;\n attempts.splice(index, 1);\n if (attempts.length === 0)\n delete experiment.attempts;\n else\n experiment.attempts = attempts;\n return true;\n };\n if (event.type === \"attempt:queued\" && experiment && identity) {\n removeQueuedAttempt();\n experiment.attempts = [\n ...(experiment.attempts ?? []),\n { evalId: identity.evalId, attempt: identity.attempt, state: \"queued\", reason: event.reason },\n ];\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"attempt:start\" && experiment) {\n removeQueuedAttempt();\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n experiment.running = (experiment.running ?? 0) + 1;\n experiment.state = \"running\";\n changed = true;\n }\n else if (event.type === \"attempt:complete\" && experiment) {\n const completedWhileQueued = removeQueuedAttempt();\n if (completedWhileQueued)\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n else\n experiment.running = Math.max(0, (experiment.running ?? 0) - 1);\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"attempt:early-exit\" && experiment) {\n removeQueuedAttempt();\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"lock-wait\" && experiment) {\n if (event.status === \"started\") {\n const attempts = event.attempts ?? 1;\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - attempts);\n experiment.elsewhere = (experiment.elsewhere ?? 0) + attempts;\n experiment.state = \"waiting\";\n changed = true;\n }\n else {\n const moved = (event.carried ?? 0) + (event.dispatched ?? 0);\n experiment.elsewhere = Math.max(0, (experiment.elsewhere ?? 0) - moved);\n experiment.queued = (experiment.queued ?? 0) + (event.dispatched ?? 0);\n this.refreshState(experiment);\n changed = true;\n }\n }\n else if (event.type === \"experiment-hook\" && experiment) {\n if (event.status === \"started\")\n experiment.state = event.hook === \"setup\" ? \"setup\" : \"teardown\";\n else\n this.refreshState(experiment);\n changed = true;\n }\n if (changed)\n this.enqueuePersist();\n }\n private refreshState(experiment: SessionExperimentRecord): void {\n if ((experiment.elsewhere ?? 0) > 0 && (experiment.running ?? 0) === 0) {\n experiment.state = \"waiting\";\n }\n else if ((experiment.running ?? 0) > 0 || (experiment.queued ?? 0) > 0) {\n experiment.state = \"running\";\n }\n else {\n experiment.state = \"teardown\";\n }\n }\n /** 一次可观察的 heartbeat;显式调用者会收到本次 flush 的真实 I/O failure。 */\n heartbeat(): Effect.Effect<void, unknown> {\n return Effect.suspend(() => {\n if (!this.started || this.closed || this.record === undefined || this.record.status !== \"active\")\n return Effect.void;\n this.record.heartbeatAt = new Date().toISOString();\n return this.flush();\n });\n }\n /**\n * 完成最终 Session:先停止 heartbeat,再把完成 snapshot 排在所有既有反馈写之后。该收尾\n * 区域不可中断,避免 interruption 留下 active 条目或后台 Fiber。\n */\n close(input: SessionCloseInput = {}): Effect.Effect<SessionRecord | undefined, unknown> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (!this.started || this.record === undefined || this.closed)\n return Effect.succeed(this.current);\n this.closed = true;\n const now = new Date().toISOString();\n this.record.status = sessionStatusOf(input.status);\n this.record.completedAt = input.completedAt ?? now;\n delete this.record.heartbeatAt;\n if (input.completion !== undefined)\n this.record.completion = input.completion;\n const publishedRunIds = new Set(input.receipt?.createdRunIds ?? []);\n for (const experiment of this.record.experiments) {\n if (publishedRunIds.has(experiment.runId))\n experiment.published = true;\n else\n delete experiment.published;\n delete experiment.state;\n delete experiment.running;\n delete experiment.queued;\n delete experiment.elsewhere;\n delete experiment.attempts;\n }\n const snapshot = cloneRecord(this.record);\n const persistence = this.persistence;\n const persist = (persistence === undefined\n ? Effect.void\n : this.stopPersistenceEffect(persistence, Exit.void)).pipe(Effect.andThen(this.persistTerminal(snapshot)));\n return persist.pipe(Effect.as(this.current));\n }));\n }\n /** 按入队顺序强制写出当前 snapshot;worker 已关闭后退化为同一条 *Effect 原语的直接写。 */\n private flush(): Effect.Effect<void, unknown> {\n return Effect.suspend(() => {\n if (this.record === undefined)\n return Effect.void;\n const snapshot = cloneRecord(this.record);\n const persistence = this.persistence;\n return persistence !== undefined && persistence.accepting && !persistence.stopped\n ? this.offerWriteEffect(persistence, snapshot)\n : this.persistActive(snapshot);\n });\n }\n private enqueuePersist(): void {\n const persistence = this.persistence;\n if (this.record === undefined ||\n persistence === undefined ||\n !persistence.accepting ||\n persistence.stopped)\n return;\n const snapshot = cloneRecord(this.record);\n // 反馈 API 受 coordinator 的同步 callback 契约限制,不能在这里启动 runtime。Queue 是\n // Effect worker 的同步入口;false 只会发生在 close 已关闭队列的竞态,此时最终 flush\n // 已覆盖当前 record。\n Queue.offerUnsafe(persistence.requests, { _tag: \"write\", snapshot });\n }\n private persistenceWorkerEffect(requests: Queue.Queue<SessionPersistenceRequest>): Effect.Effect<void> {\n const handle = (request: SessionPersistenceRequest): Effect.Effect<void> => {\n if (request._tag === \"barrier\") {\n return Deferred.succeed(request.completion, undefined).pipe(Effect.asVoid);\n }\n // Each request owns a frozen snapshot. Capture the full Exit before\n // settling its waiter so a failed heartbeat cannot kill the serial\n // worker; a later state change is still allowed to retry the index write.\n return this.persistActive(request.snapshot).pipe(Effect.exit, Effect.flatMap((exit) => request.completion === undefined\n ? Effect.void\n : Deferred.done(request.completion, exit).pipe(Effect.asVoid)));\n };\n return Effect.forever(Queue.take(requests).pipe(Effect.flatMap(handle))).pipe(\n // Queue shutdown interrupts its pending take. A different cause is a\n // broken worker invariant and stays a defect instead of being erased.\n Effect.catchCause((cause) => Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.die(cause)));\n }\n private persistActive(snapshot: SessionRecord): Effect.Effect<void, unknown> {\n const owner = this.owner;\n if (owner === undefined)\n return Effect.fail(new Error(\"Session owner is unavailable.\"));\n const at = snapshot.heartbeatAt ?? new Date().toISOString();\n return this.invocationEffect<undefined>({ _tag: \"invocation-update-projection\",\n invocationId: this.sessionId, owner, at, projection: encodeSession(snapshot), deadlineEpochMs: Date.now() + 30000 });\n }\n private persistTerminal(snapshot: SessionRecord): Effect.Effect<void, unknown> {\n const owner = this.owner;\n if (owner === undefined)\n return Effect.fail(new Error(\"Session owner is unavailable.\"));\n const state = snapshot.status === \"completed\" ? \"completed\" : snapshot.status === \"interrupted\" ? \"interrupted\" : \"failed\";\n return this.invocationEffect<undefined>({ _tag: \"invocation-close\", invocationId: this.sessionId,\n owner, state, at: snapshot.completedAt ?? new Date().toISOString(), projection: encodeSession(snapshot), deadlineEpochMs: Date.now() + 30000 });\n }\n private heartbeatLoopEffect(): Effect.Effect<never> {\n return Effect.forever(unrefDelayEffect(SESSION_HEARTBEAT_INTERVAL_MS).pipe(\n // Heartbeats are observability only. Explicit heartbeat callers\n // receive failures; the background loop deliberately retries later.\n Effect.andThen(this.heartbeat().pipe(Effect.ignore))));\n }\n private offerWriteEffect(persistence: SessionPersistence, snapshot: SessionRecord): Effect.Effect<void, unknown> {\n return Effect.gen(function* () {\n const completion = yield* Deferred.make<void, unknown>();\n const accepted = yield* Effect.sync(() => Queue.offerUnsafe(persistence.requests, { _tag: \"write\", snapshot, completion }));\n if (!accepted)\n return yield* Effect.fail(new Error(\"Session persistence queue closed before flush.\"));\n yield* Deferred.await(completion);\n });\n }\n private barrierEffect(persistence: SessionPersistence): Effect.Effect<void, unknown> {\n return Effect.gen(function* () {\n const completion = yield* Deferred.make<void, unknown>();\n const accepted = yield* Effect.sync(() => Queue.offerUnsafe(persistence.requests, { _tag: \"barrier\", completion }));\n if (!accepted)\n return yield* Effect.fail(new Error(\"Session persistence queue closed before drain.\"));\n yield* Deferred.await(completion);\n });\n }\n /**\n * 停止顺序固定为:拒绝新反馈 → 等 heartbeat 停稳 → FIFO flush/barrier → shutdown queue →\n * close Scope。因而 final snapshot 不会被较早的后台写覆盖,且任一路径都会终结两条 Fiber。\n */\n private stopPersistenceEffect(persistence: SessionPersistence, exit: Exit.Exit<unknown, unknown>, finalSnapshot?: SessionRecord): Effect.Effect<void, unknown> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (persistence.stopped)\n return Effect.void;\n persistence.accepting = false;\n const stopHeartbeat = persistence.heartbeat === undefined\n ? Effect.void\n : Fiber.interrupt(persistence.heartbeat).pipe(Effect.asVoid);\n const drain = finalSnapshot === undefined\n ? this.barrierEffect(persistence)\n : this.offerWriteEffect(persistence, finalSnapshot);\n return stopHeartbeat.pipe(Effect.andThen(drain), Effect.ensuring(this.releasePersistenceEffect(persistence, exit)));\n }));\n }\n private releasePersistenceEffect(persistence: SessionPersistence, exit: Exit.Exit<unknown, unknown>): Effect.Effect<void> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (persistence.stopped)\n return Effect.void;\n persistence.stopped = true;\n if (this.persistence === persistence)\n this.persistence = undefined;\n return Queue.shutdown(persistence.requests).pipe(Effect.andThen(Scope.close(persistence.scope, exit)));\n }));\n }\n}\nexport function isSessionExpired(record: SessionRecord, nowMs = Date.now()): boolean {\n if (record.status !== \"active\")\n return false;\n const heartbeatMs = Date.parse(record.heartbeatAt ?? \"\");\n return !Number.isFinite(heartbeatMs) || nowMs - heartbeatMs > SESSION_EXPIRY_MS;\n}\nfunction expiredProjection(record: SessionRecord): ExpiredSessionRecord {\n return {\n sessionId: record.sessionId,\n pid: record.pid,\n startedAt: record.startedAt,\n ...(record.heartbeatAt !== undefined ? { heartbeatAt: record.heartbeatAt } : {}),\n };\n}\n/** 完整读取边界跳过无法解码的 durable projections,不拖垮整个 ProjectDatabase 查询。 */\nexport function readSessions(niceevalRoot: string): Effect.Effect<SessionRecord[], unknown, ProjectStateDatabase> {\n return Effect.flatMap(ProjectStateDatabase, (database) => Effect.flatMap(database.bind(niceevalRoot), (facets) => Effect.tryPromise({\n try: () => facets.invocation.execute<readonly InvocationSessionRecord[]>({ _tag: \"invocation-list\" }),\n catch: (cause) => cause,\n }))).pipe(Effect.map((sessions) => sessions.flatMap((session) => {\n const bytes = session.terminalProjection ?? session.activeProjection;\n if (bytes === undefined)\n return [];\n const decoded = decodeSessionBytes(bytes);\n return decoded === undefined ? [] : [decoded];\n }).sort((a, b) => a.startedAt.localeCompare(b.startedAt))));\n}\nexport function sessionListDocument(records: readonly SessionRecord[], options: {\n all?: boolean;\n selector?: string;\n nowMs?: number;\n} = {}): SessionListDocument {\n const selector = options.selector;\n const matches = (record: SessionRecord): boolean => selector === undefined || record.experiments.some((experiment) => experiment.experimentId.startsWith(selector));\n const sessions: SessionRecord[] = [];\n const expired: ExpiredSessionRecord[] = [];\n for (const record of records) {\n if (!matches(record))\n continue;\n if (isSessionExpired(record, options.nowMs)) {\n expired.push(expiredProjection(record));\n }\n else if (record.status === \"active\" || options.all === true) {\n sessions.push(cloneRecord(record));\n }\n }\n return { format: \"niceeval.sessions\", sessions, expired };\n}\nexport function listSessions(niceevalRoot: string, options: {\n all?: boolean;\n selector?: string;\n nowMs?: number;\n} = {}): Effect.Effect<SessionListDocument, unknown, ProjectStateDatabase> {\n return readSessions(niceevalRoot).pipe(Effect.map((records) => sessionListDocument(records, options)));\n}\nexport function resolveSessionPrefix(records: readonly SessionRecord[], prefix: string): SessionRecord {\n const matches = records.filter((record) => record.sessionId === prefix || record.sessionId.startsWith(prefix));\n if (matches.length === 0)\n throw new Error(`No session matched: ${prefix}`);\n if (matches.length > 1) {\n throw new Error(`Ambiguous session prefix ${prefix}. Candidates: ${matches.map((record) => record.sessionId).join(\", \")}`);\n }\n return cloneRecord(matches[0]!);\n}\nexport function showSession(niceevalRoot: string, prefix: string, nowMs = Date.now()): Effect.Effect<SessionShowDocument, unknown, ProjectStateDatabase> {\n return readSessions(niceevalRoot).pipe(Effect.map((records) => {\n const record = resolveSessionPrefix(records, prefix);\n const expired = isSessionExpired(record, nowMs);\n return {\n format: \"niceeval.session\",\n session: expired ? expiredProjection(record) : record,\n ...(expired ? { expired: true } : {}),\n };\n }));\n}\nfunction shortRunId(runId: string): string {\n return runId.slice(0, 8);\n}\nfunction ageLabel(iso: string, nowMs: number): string {\n const elapsed = Math.max(0, nowMs - Date.parse(iso));\n if (elapsed < 1000)\n return \"now\";\n if (elapsed < 60000)\n return `${Math.floor(elapsed / 1000)}s ago`;\n if (elapsed < 3600000)\n return `${Math.floor(elapsed / 60000)}m ago`;\n return `${Math.floor(elapsed / 3600000)}h ago`;\n}\nfunction renderExperimentLine(experiment: SessionExperimentRecord, published: boolean): string {\n if (published) {\n return ` ${experiment.experimentId} niceeval view --run ${experiment.runId}`;\n }\n const counters = [\n experiment.running ? `${experiment.running} running` : \"\",\n experiment.queued ? `${experiment.queued} queued` : \"\",\n experiment.elsewhere ? `${experiment.elsewhere} elsewhere` : \"\",\n ].filter(Boolean);\n return ` ${experiment.experimentId} @run:${shortRunId(experiment.runId)} ${experiment.state ?? \"running\"}${counters.length ? ` · ${counters.join(\" · \")}` : \"\"}`;\n}\nfunction publishedForSession(experiment: SessionExperimentRecord, status: SessionStatus): boolean {\n // Older session entries have no receipt marker. Preserve their established\n // completed/interrupted behavior while new entries rely on the exact receipt.\n return experiment.published ?? (status === \"completed\" || status === \"interrupted\");\n}\nexport function renderSessionListText(document: SessionListDocument, nowMs = Date.now(), all = false): string {\n const lines: string[] = [`ACTIVE SESSIONS (${document.sessions.filter((session) => session.status === \"active\").length})`];\n const active = document.sessions.filter((session) => session.status === \"active\");\n if (active.length === 0)\n lines.push(\"(none)\");\n for (const session of active) {\n lines.push(`${session.sessionId} · pid ${session.pid} · ${ageLabel(session.startedAt, nowMs)} · heartbeat ${ageLabel(session.heartbeatAt ?? session.startedAt, nowMs)}`);\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, false)));\n }\n if (all) {\n const completed = document.sessions.filter((session) => session.status !== \"active\");\n lines.push(`COMPLETED SESSIONS (${completed.length})`);\n if (completed.length === 0)\n lines.push(\"(none)\");\n for (const session of completed) {\n lines.push(`${session.sessionId} · pid ${session.pid} · ${session.status} · completed ${session.completedAt ?? \"—\"}`);\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, publishedForSession(experiment, session.status))));\n }\n if (document.expired.length > 0) {\n lines.push(`EXPIRED SESSIONS (${document.expired.length})`);\n for (const expired of document.expired) {\n lines.push(`${expired.sessionId} · pid ${expired.pid} · heartbeat ${expired.heartbeatAt ?? \"unknown\"} · ${`rerun the original command`}`);\n }\n }\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\nexport function renderSessionShowText(document: SessionShowDocument): string {\n const session = document.session;\n const lines = [`SESSION ${session.sessionId}${document.expired ? \" · EXPIRED\" : \"\"}`, `pid ${session.pid} · started ${session.startedAt}`];\n if (\"status\" in session)\n lines.push(`status ${session.status}${session.completedAt ? ` · completed ${session.completedAt}` : \"\"}`);\n if (\"experiments\" in session) {\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, publishedForSession(experiment, session.status))));\n }\n if (document.expired)\n lines.push(`NEXT rerun the original command`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["session.ts"],"names":[],"mappings":"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","sourcesContent":["// Experiment Invocation 的轻量 Session 索引。\n//\n// Session 只回答「哪一批 Run 由同一次 exp 调度、当前是否仍活跃」;完整的\n// Attempt / verdict / artifact 继续由 Run 记录保存。所有写入都走逐条目原子\n// 文件原语,Session 不参与用例锁或实验级闸的判定。\nimport { randomUUID } from \"node:crypto\";\nimport { Cause, Deferred, Effect, Exit, Fiber, Queue, Scope } from \"effect\";\nimport { type FencedOwner, type InvocationRunInput, type InvocationSessionRecord, } from \"../coordination/platform/sqlite-coordination.ts\";\nimport { ProjectStateDatabase, type ProjectStateDatabaseService } from \"../record/sqlite/project-state-database.ts\";\nimport type { CompletionStatus, AttemptQueueReason, AttemptRef, InvocationCompletion, InvocationReceipt, RunFeedbackEvent, RunFeedbackState, } from \"./types.ts\";\nimport type { AgentRun } from \"./types.ts\";\nimport { currentProcessOwnerIdentity } from \"./node-process-identity.ts\";\nexport const SESSION_HEARTBEAT_INTERVAL_MS = 10000;\nexport const SESSION_EXPIRY_MS = 30000;\nexport type SessionExperimentState = \"setup\" | \"running\" | \"waiting\" | \"teardown\";\nexport type SessionStatus = \"active\" | \"completed\" | \"incomplete\" | \"interrupted\";\nexport interface SessionExperimentRecord {\n experimentId: string;\n runId: string;\n /** The Record v1 receipt confirmed that this draft reached a complete marker. */\n published?: boolean;\n state?: SessionExperimentState;\n running?: number;\n queued?: number;\n elsewhere?: number;\n /** Only currently queued Attempts with an actionable, stable reason are expanded. */\n attempts?: SessionQueuedAttemptRecord[];\n}\nexport interface SessionQueuedAttemptRecord {\n evalId: string;\n attempt: number;\n state: \"queued\";\n reason: AttemptQueueReason;\n}\nexport interface SessionRecord {\n sessionId: string;\n pid: number;\n startedAt: string;\n status: SessionStatus;\n experiments: SessionExperimentRecord[];\n heartbeatAt?: string;\n completedAt?: string;\n completion?: InvocationCompletion;\n}\nexport interface ExpiredSessionRecord {\n sessionId: string;\n pid: number;\n startedAt: string;\n heartbeatAt?: string;\n}\nexport interface SessionListDocument {\n format: \"niceeval.sessions\";\n sessions: SessionRecord[];\n expired: ExpiredSessionRecord[];\n}\nexport interface SessionShowDocument {\n format: \"niceeval.session\";\n session: SessionRecord | ExpiredSessionRecord;\n expired?: boolean;\n}\nexport interface SessionStartInput {\n runIds: ReadonlyMap<string, string>;\n agentRuns: readonly AgentRun[];\n /** 已规划、可携入的 attempt 数;用于创建记录时准确初始化 queued。 */\n carriedAttemptsByKey?: ReadonlyMap<string, ReadonlySet<number>>;\n startedAt?: string;\n pid?: number;\n /** Complete canonical Run resources created atomically with this Invocation. */\n invocationRuns: readonly InvocationRunInput[];\n}\nexport interface SessionCloseInput {\n status?: CompletionStatus | SessionStatus;\n completion?: InvocationCompletion;\n /** Only IDs in this receipt are safe targets for `niceeval show --run`. */\n receipt?: InvocationReceipt;\n completedAt?: string;\n}\n/**\n * Narrow transient event bridge owned by the Experiment Host. Session data is\n * an invocation-local index, so this intentionally excludes Record facts and\n * every feedback event that cannot change its small progress projection.\n */\nexport type SessionInvocationEvent = {\n readonly type: \"attempt:queued\";\n readonly identity?: AttemptRef;\n readonly reason: AttemptQueueReason;\n} | {\n readonly type: \"attempt:start\" | \"attempt:complete\" | \"attempt:early-exit\";\n readonly identity?: AttemptRef;\n} | {\n readonly type: \"lock-wait\";\n readonly experimentId: string;\n readonly status: \"started\" | \"resolved\";\n readonly attempts?: number;\n readonly carried?: number;\n readonly dispatched?: number;\n} | {\n readonly type: \"experiment-hook\";\n readonly experimentId: string;\n readonly hook: \"setup\" | \"teardown\";\n readonly status: \"started\" | \"done\" | \"failed\";\n};\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\nfunction isTimestamp(value: unknown): value is string {\n return typeof value === \"string\" && Number.isFinite(Date.parse(value));\n}\nfunction isPositiveInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\nfunction decodeExperiment(value: unknown): SessionExperimentRecord | undefined {\n const raw = asRecord(value);\n if (raw === undefined || typeof raw.experimentId !== \"string\" || typeof raw.runId !== \"string\")\n return undefined;\n if (raw.published !== undefined && typeof raw.published !== \"boolean\")\n return undefined;\n const state = raw.state;\n if (state !== undefined && state !== \"setup\" && state !== \"running\" && state !== \"waiting\" && state !== \"teardown\") {\n return undefined;\n }\n for (const key of [\"running\", \"queued\", \"elsewhere\"] as const) {\n if (raw[key] !== undefined && !isNonNegativeInteger(raw[key]))\n return undefined;\n }\n const running = raw.running;\n const queued = raw.queued;\n const elsewhere = raw.elsewhere;\n const attempts = raw.attempts === undefined\n ? undefined\n : Array.isArray(raw.attempts)\n ? raw.attempts.map((value): SessionQueuedAttemptRecord | undefined => {\n const attempt = asRecord(value);\n if (attempt === undefined ||\n typeof attempt.evalId !== \"string\" ||\n !isNonNegativeInteger(attempt.attempt) ||\n attempt.state !== \"queued\" ||\n attempt.reason !== \"provider-capacity\")\n return undefined;\n return {\n evalId: attempt.evalId,\n attempt: attempt.attempt,\n state: \"queued\",\n reason: attempt.reason,\n };\n })\n : undefined;\n if (raw.attempts !== undefined && (attempts === undefined || attempts.some((item) => item === undefined))) {\n return undefined;\n }\n return {\n experimentId: raw.experimentId,\n runId: raw.runId,\n ...(raw.published === true ? { published: true } : {}),\n ...(state !== undefined ? { state } : {}),\n ...(running !== undefined ? { running: running as number } : {}),\n ...(queued !== undefined ? { queued: queued as number } : {}),\n ...(elsewhere !== undefined ? { elsewhere: elsewhere as number } : {}),\n ...(attempts === undefined ? {} : { attempts: attempts as SessionQueuedAttemptRecord[] }),\n };\n}\n/** 完整读取边界:损坏/未知格式条目从查询中跳过,不拖垮整个目录。 */\nexport function decodeSession(value: unknown): SessionRecord | undefined {\n const raw = asRecord(value);\n if (raw === undefined ||\n typeof raw.sessionId !== \"string\" ||\n !isPositiveInteger(raw.pid) ||\n !isTimestamp(raw.startedAt) ||\n (raw.status !== \"active\" && raw.status !== \"completed\" && raw.status !== \"incomplete\" && raw.status !== \"interrupted\") ||\n !Array.isArray(raw.experiments))\n return undefined;\n if (raw.heartbeatAt !== undefined && !isTimestamp(raw.heartbeatAt))\n return undefined;\n if (raw.completedAt !== undefined && !isTimestamp(raw.completedAt))\n return undefined;\n const experiments = raw.experiments.map(decodeExperiment);\n if (experiments.some((item) => item === undefined))\n return undefined;\n return {\n sessionId: raw.sessionId,\n pid: raw.pid,\n startedAt: raw.startedAt,\n status: raw.status,\n experiments: experiments as SessionExperimentRecord[],\n ...(raw.heartbeatAt !== undefined ? { heartbeatAt: raw.heartbeatAt } : {}),\n ...(raw.completedAt !== undefined ? { completedAt: raw.completedAt } : {}),\n ...(raw.completion !== undefined && asRecord(raw.completion) !== undefined\n ? { completion: raw.completion as InvocationCompletion }\n : {}),\n };\n}\nfunction keyOf(experimentId: string, evalId: string): string {\n // 与 runner/sandbox-selection.ts 的 runPairKey 保持同形,但避免运行时依赖造成循环导入。\n return experimentId.includes(\"|\") || evalId.includes(\"|\")\n ? JSON.stringify([experimentId, evalId])\n : `${experimentId}|${evalId}`;\n}\nfunction sessionStatusOf(status: CompletionStatus | SessionStatus | undefined): SessionStatus {\n if (status === \"complete\" || status === \"completed\" || status === undefined)\n return \"completed\";\n if (status === \"interrupted\")\n return \"interrupted\";\n return \"incomplete\";\n}\nfunction cloneRecord(record: SessionRecord): SessionRecord {\n return {\n ...record,\n experiments: record.experiments.map((experiment) => ({\n ...experiment,\n ...(experiment.attempts === undefined\n ? {}\n : { attempts: experiment.attempts.map((attempt) => ({ ...attempt })) }),\n })),\n ...(record.completion ? { completion: { ...record.completion, reporterErrors: [...record.completion.reporterErrors] } } : {}),\n };\n}\nfunction encodeSession(record: SessionRecord): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(record));\n}\nfunction decodeSessionBytes(bytes: Uint8Array): SessionRecord | undefined {\n try {\n return decodeSession(JSON.parse(new TextDecoder().decode(bytes)));\n }\n catch {\n return undefined;\n }\n}\ntype SessionPersistenceRequest = {\n readonly _tag: \"write\";\n readonly snapshot: SessionRecord;\n /** 缺席时是反馈索引的尽力写;失败不影响 attempt 判定。 */\n readonly completion?: Deferred.Deferred<void, unknown>;\n} | {\n readonly _tag: \"barrier\";\n readonly completion: Deferred.Deferred<void, unknown>;\n};\n/**\n * Session 的 Effect 资源组刻意不绑定 `start()` 调用点的 Scope:`runEvals()` 自己会\n * 在 dispatch 完成时关闭内部 Scope,但 CLI 仍要在随后拿到 receipt 后再写最终 completed\n * Session。调用方的 `close()`(CLI 已有的 finalizer)才是这一组 worker/timer 的唯一\n * 释放边界。\n */\ninterface SessionPersistence {\n readonly scope: Scope.Closeable;\n readonly requests: Queue.Queue<SessionPersistenceRequest>;\n readonly worker: Fiber.Fiber<void, never>;\n heartbeat?: Fiber.Fiber<never, never>;\n accepting: boolean;\n stopped: boolean;\n}\n/**\n * 在 Effect 中等一段不会让 Node 进程仅因 Session 心跳而存活的时间。中断会清掉当前 timer;\n * 这保留旧 `setInterval(...).unref()` 的进程退出语义,同时不会把定时器生命周期漏到 Effect\n * 之外。\n */\nfunction unrefDelayEffect(milliseconds: number): Effect.Effect<void> {\n return Effect.callback<void>((resume) => {\n const timer = setTimeout(() => resume(Effect.void), milliseconds);\n timer.unref?.();\n return Effect.sync(() => clearTimeout(timer));\n });\n}\n/** 可持久化的 Session 生命周期;所有磁盘 I/O 由一个 Effect worker 按入队顺序串行化。 */\nexport class SessionTracker {\n readonly niceevalRoot: string;\n readonly sessionId: string;\n private record: SessionRecord | undefined;\n private persistence: SessionPersistence | undefined;\n private started = false;\n private closed = false;\n private owner: FencedOwner | undefined;\n private readonly database: ProjectStateDatabaseService;\n constructor(niceevalRoot: string, database: ProjectStateDatabaseService, sessionId = `s_${randomUUID()}`) {\n this.niceevalRoot = niceevalRoot;\n this.database = database;\n this.sessionId = sessionId;\n }\n private invocationEffect<A extends import(\"../record/sqlite/worker-protocol.ts\").StorageWorkerResult>(command: import(\"../record/sqlite/worker-protocol.ts\").InvocationCommand): Effect.Effect<A, unknown> {\n return Effect.flatMap(this.database.bind(this.niceevalRoot), (facets) => Effect.tryPromise({\n try: () => facets.invocation.execute<A>(command),\n catch: (cause) => cause,\n }));\n }\n get current(): SessionRecord | undefined {\n return this.record === undefined ? undefined : cloneRecord(this.record);\n }\n /**\n * Effect 主入口:先完成第一份 durable snapshot,再开始心跳。持久化 Scope 跨过\n * `runEvals()` 的内部 Scope,由 closeEffect 关闭,因而最终 receipt 不会被抢先截断。\n */\n start(input: SessionStartInput): Effect.Effect<SessionRecord, unknown> {\n let persistence: SessionPersistence | undefined;\n return Effect.gen({ self: this }, function* () {\n if (this.started)\n return yield* Effect.fail(new Error(\"SessionTracker.start() called more than once.\"));\n const scope = yield* Scope.make();\n const requests = yield* Queue.unbounded<SessionPersistenceRequest>();\n const worker = yield* Effect.forkIn(this.persistenceWorkerEffect(requests), scope);\n persistence = { scope, requests, worker, accepting: true, stopped: false };\n this.persistence = persistence;\n this.started = true;\n const startedAt = input.startedAt ?? new Date().toISOString();\n const carried = input.carriedAttemptsByKey;\n const experiments: SessionExperimentRecord[] = [];\n for (const run of input.agentRuns) {\n if (run.experimentId === undefined)\n continue;\n const runId = input.runIds.get(run.experimentId);\n if (runId === undefined)\n continue;\n const planned = run.selectedEvalIds.length * run.attempts;\n const carriedCount = run.selectedEvalIds.reduce((count, evalId) => count + (carried?.get(keyOf(run.experimentId!, evalId))?.size ?? 0), 0);\n const queued = Math.max(0, planned - carriedCount);\n experiments.push({\n experimentId: run.experimentId,\n runId,\n state: run.setup && queued > 0 ? \"setup\" : \"running\",\n running: 0,\n queued,\n elsewhere: 0,\n });\n }\n const now = new Date().toISOString();\n this.record = {\n sessionId: this.sessionId,\n pid: input.pid ?? process.pid,\n startedAt,\n status: \"active\",\n heartbeatAt: now,\n experiments,\n };\n const owner = currentProcessOwnerIdentity(this.sessionId);\n this.owner = (yield* this.invocationEffect<InvocationSessionRecord>({ _tag: \"invocation-create\", input: {\n invocationId: this.sessionId,\n owner,\n startedAt,\n runs: input.invocationRuns,\n deadlineEpochMs: Date.now() + 30000,\n } })).owner;\n // Unlike feedback snapshots, the initial entry is a durable boundary:\n // dispatch must not start until it has either reached disk or failed.\n yield* this.flush();\n persistence.heartbeat = yield* Effect.forkIn(this.heartbeatLoopEffect(), scope);\n return this.current!;\n }).pipe(\n // A failed first write must not leave the manually held Scope (or its\n // queue worker) alive. Preserve the original failure after cleanup.\n Effect.onError((cause) => persistence === undefined\n ? Effect.void\n : this.stopPersistenceEffect(persistence, Exit.failCause(cause)).pipe(Effect.ignore)));\n }\n /** coordinator 的同步事件回调;只更新最小索引并把 snapshot 交给 Effect-owned serial worker。 */\n onFeedback(event: RunFeedbackEvent, _state?: RunFeedbackState): void {\n if (event.type === \"attempt:start\" ||\n event.type === \"attempt:queued\" ||\n event.type === \"attempt:complete\" ||\n event.type === \"attempt:early-exit\" ||\n event.type === \"lock-wait\" ||\n event.type === \"experiment-hook\") {\n this.onInvocationEvent(event);\n }\n }\n /** Applies the frozen carry decision before dispatch without inventing lifecycle events. */\n applyCarriedAttempts(agentRuns: readonly AgentRun[], carried: ReadonlyMap<string, ReadonlySet<number>>): Effect.Effect<void, unknown> {\n if (this.record === undefined || this.record.status !== \"active\")\n return Effect.void;\n for (const experiment of this.record.experiments) {\n const run = agentRuns.find((candidate) => candidate.experimentId === experiment.experimentId);\n const count = run?.selectedEvalIds.reduce((total, evalId) => total + (carried.get(keyOf(experiment.experimentId, evalId))?.size ?? 0), 0) ?? 0;\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - count);\n this.refreshState(experiment);\n }\n return this.flush();\n }\n /** Host-side observer bridge; no runtime is started from a synchronous callback. */\n onInvocationEvent(event: SessionInvocationEvent): void {\n if (!this.started || this.closed || this.record === undefined || this.record.status !== \"active\")\n return;\n const identity = \"identity\" in event && event.identity !== undefined ? event.identity : undefined;\n const experimentId = identity\n ? identity.experimentId\n : \"experimentId\" in event\n ? event.experimentId\n : undefined;\n const experiment = experimentId === undefined\n ? undefined\n : this.record.experiments.find((item) => item.experimentId === experimentId);\n let changed = false;\n const removeQueuedAttempt = (): boolean => {\n if (experiment === undefined || identity?.evalId === undefined || identity.attempt === undefined)\n return false;\n const attempts = experiment.attempts ?? [];\n const index = attempts.findIndex((attempt) => attempt.evalId === identity.evalId && attempt.attempt === identity.attempt);\n if (index < 0)\n return false;\n attempts.splice(index, 1);\n if (attempts.length === 0)\n delete experiment.attempts;\n else\n experiment.attempts = attempts;\n return true;\n };\n if (event.type === \"attempt:queued\" && experiment && identity) {\n removeQueuedAttempt();\n experiment.attempts = [\n ...(experiment.attempts ?? []),\n { evalId: identity.evalId, attempt: identity.attempt, state: \"queued\", reason: event.reason },\n ];\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"attempt:start\" && experiment) {\n removeQueuedAttempt();\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n experiment.running = (experiment.running ?? 0) + 1;\n experiment.state = \"running\";\n changed = true;\n }\n else if (event.type === \"attempt:complete\" && experiment) {\n const completedWhileQueued = removeQueuedAttempt();\n if (completedWhileQueued)\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n else\n experiment.running = Math.max(0, (experiment.running ?? 0) - 1);\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"attempt:early-exit\" && experiment) {\n removeQueuedAttempt();\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - 1);\n this.refreshState(experiment);\n changed = true;\n }\n else if (event.type === \"lock-wait\" && experiment) {\n if (event.status === \"started\") {\n const attempts = event.attempts ?? 1;\n experiment.queued = Math.max(0, (experiment.queued ?? 0) - attempts);\n experiment.elsewhere = (experiment.elsewhere ?? 0) + attempts;\n experiment.state = \"waiting\";\n changed = true;\n }\n else {\n const moved = (event.carried ?? 0) + (event.dispatched ?? 0);\n experiment.elsewhere = Math.max(0, (experiment.elsewhere ?? 0) - moved);\n experiment.queued = (experiment.queued ?? 0) + (event.dispatched ?? 0);\n this.refreshState(experiment);\n changed = true;\n }\n }\n else if (event.type === \"experiment-hook\" && experiment) {\n if (event.status === \"started\")\n experiment.state = event.hook === \"setup\" ? \"setup\" : \"teardown\";\n else\n this.refreshState(experiment);\n changed = true;\n }\n if (changed)\n this.enqueuePersist();\n }\n private refreshState(experiment: SessionExperimentRecord): void {\n if ((experiment.elsewhere ?? 0) > 0 && (experiment.running ?? 0) === 0) {\n experiment.state = \"waiting\";\n }\n else if ((experiment.running ?? 0) > 0 || (experiment.queued ?? 0) > 0) {\n experiment.state = \"running\";\n }\n else {\n experiment.state = \"teardown\";\n }\n }\n /** 一次可观察的 heartbeat;显式调用者会收到本次 flush 的真实 I/O failure。 */\n heartbeat(): Effect.Effect<void, unknown> {\n return Effect.suspend(() => {\n if (!this.started || this.closed || this.record === undefined || this.record.status !== \"active\")\n return Effect.void;\n this.record.heartbeatAt = new Date().toISOString();\n return this.flush();\n });\n }\n /**\n * 完成最终 Session:先停止 heartbeat,再把完成 snapshot 排在所有既有反馈写之后。该收尾\n * 区域不可中断,避免 interruption 留下 active 条目或后台 Fiber。\n */\n close(input: SessionCloseInput = {}): Effect.Effect<SessionRecord | undefined, unknown> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (!this.started || this.record === undefined || this.closed)\n return Effect.succeed(this.current);\n this.closed = true;\n const now = new Date().toISOString();\n this.record.status = sessionStatusOf(input.status);\n this.record.completedAt = input.completedAt ?? now;\n delete this.record.heartbeatAt;\n if (input.completion !== undefined)\n this.record.completion = input.completion;\n const publishedRunIds = new Set(input.receipt?.createdRunIds ?? []);\n for (const experiment of this.record.experiments) {\n if (publishedRunIds.has(experiment.runId))\n experiment.published = true;\n else\n delete experiment.published;\n delete experiment.state;\n delete experiment.running;\n delete experiment.queued;\n delete experiment.elsewhere;\n delete experiment.attempts;\n }\n const snapshot = cloneRecord(this.record);\n const persistence = this.persistence;\n const persist = (persistence === undefined\n ? Effect.void\n : this.stopPersistenceEffect(persistence, Exit.void)).pipe(Effect.andThen(this.persistTerminal(snapshot)));\n return persist.pipe(Effect.as(this.current));\n }));\n }\n /** 按入队顺序强制写出当前 snapshot;worker 已关闭后退化为同一条 *Effect 原语的直接写。 */\n private flush(): Effect.Effect<void, unknown> {\n return Effect.suspend(() => {\n if (this.record === undefined)\n return Effect.void;\n const snapshot = cloneRecord(this.record);\n const persistence = this.persistence;\n return persistence !== undefined && persistence.accepting && !persistence.stopped\n ? this.offerWriteEffect(persistence, snapshot)\n : this.persistActive(snapshot);\n });\n }\n private enqueuePersist(): void {\n const persistence = this.persistence;\n if (this.record === undefined ||\n persistence === undefined ||\n !persistence.accepting ||\n persistence.stopped)\n return;\n const snapshot = cloneRecord(this.record);\n // 反馈 API 受 coordinator 的同步 callback 契约限制,不能在这里启动 runtime。Queue 是\n // Effect worker 的同步入口;false 只会发生在 close 已关闭队列的竞态,此时最终 flush\n // 已覆盖当前 record。\n Queue.offerUnsafe(persistence.requests, { _tag: \"write\", snapshot });\n }\n private persistenceWorkerEffect(requests: Queue.Queue<SessionPersistenceRequest>): Effect.Effect<void> {\n const handle = (request: SessionPersistenceRequest): Effect.Effect<void> => {\n if (request._tag === \"barrier\") {\n return Deferred.succeed(request.completion, undefined).pipe(Effect.asVoid);\n }\n // Each request owns a frozen snapshot. Capture the full Exit before\n // settling its waiter so a failed heartbeat cannot kill the serial\n // worker; a later state change is still allowed to retry the index write.\n return this.persistActive(request.snapshot).pipe(Effect.exit, Effect.flatMap((exit) => request.completion === undefined\n ? Effect.void\n : Deferred.done(request.completion, exit).pipe(Effect.asVoid)));\n };\n return Effect.forever(Queue.take(requests).pipe(Effect.flatMap(handle))).pipe(\n // Queue shutdown interrupts its pending take. A different cause is a\n // broken worker invariant and stays a defect instead of being erased.\n Effect.catchCause((cause) => Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.die(cause)));\n }\n private persistActive(snapshot: SessionRecord): Effect.Effect<void, unknown> {\n const owner = this.owner;\n if (owner === undefined)\n return Effect.fail(new Error(\"Session owner is unavailable.\"));\n const at = snapshot.heartbeatAt ?? new Date().toISOString();\n return this.invocationEffect<undefined>({ _tag: \"invocation-update-projection\",\n invocationId: this.sessionId, owner, at, projection: encodeSession(snapshot), deadlineEpochMs: Date.now() + 30000 });\n }\n private persistTerminal(snapshot: SessionRecord): Effect.Effect<void, unknown> {\n const owner = this.owner;\n if (owner === undefined)\n return Effect.fail(new Error(\"Session owner is unavailable.\"));\n const state = snapshot.status === \"completed\" ? \"completed\" : snapshot.status === \"interrupted\" ? \"interrupted\" : \"failed\";\n return this.invocationEffect<undefined>({ _tag: \"invocation-close\", invocationId: this.sessionId,\n owner, state, at: snapshot.completedAt ?? new Date().toISOString(), projection: encodeSession(snapshot), deadlineEpochMs: Date.now() + 30000 });\n }\n private heartbeatLoopEffect(): Effect.Effect<never> {\n return Effect.forever(unrefDelayEffect(SESSION_HEARTBEAT_INTERVAL_MS).pipe(\n // Heartbeats are observability only. Explicit heartbeat callers\n // receive failures; the background loop deliberately retries later.\n Effect.andThen(this.heartbeat().pipe(Effect.ignore))));\n }\n private offerWriteEffect(persistence: SessionPersistence, snapshot: SessionRecord): Effect.Effect<void, unknown> {\n return Effect.gen(function* () {\n const completion = yield* Deferred.make<void, unknown>();\n const accepted = yield* Effect.sync(() => Queue.offerUnsafe(persistence.requests, { _tag: \"write\", snapshot, completion }));\n if (!accepted)\n return yield* Effect.fail(new Error(\"Session persistence queue closed before flush.\"));\n yield* Deferred.await(completion);\n });\n }\n private barrierEffect(persistence: SessionPersistence): Effect.Effect<void, unknown> {\n return Effect.gen(function* () {\n const completion = yield* Deferred.make<void, unknown>();\n const accepted = yield* Effect.sync(() => Queue.offerUnsafe(persistence.requests, { _tag: \"barrier\", completion }));\n if (!accepted)\n return yield* Effect.fail(new Error(\"Session persistence queue closed before drain.\"));\n yield* Deferred.await(completion);\n });\n }\n /**\n * 停止顺序固定为:拒绝新反馈 → 等 heartbeat 停稳 → FIFO flush/barrier → shutdown queue →\n * close Scope。因而 final snapshot 不会被较早的后台写覆盖,且任一路径都会终结两条 Fiber。\n */\n private stopPersistenceEffect(persistence: SessionPersistence, exit: Exit.Exit<unknown, unknown>, finalSnapshot?: SessionRecord): Effect.Effect<void, unknown> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (persistence.stopped)\n return Effect.void;\n persistence.accepting = false;\n const stopHeartbeat = persistence.heartbeat === undefined\n ? Effect.void\n : Fiber.interrupt(persistence.heartbeat).pipe(Effect.asVoid);\n const drain = finalSnapshot === undefined\n ? this.barrierEffect(persistence)\n : this.offerWriteEffect(persistence, finalSnapshot);\n return stopHeartbeat.pipe(Effect.andThen(drain), Effect.ensuring(this.releasePersistenceEffect(persistence, exit)));\n }));\n }\n private releasePersistenceEffect(persistence: SessionPersistence, exit: Exit.Exit<unknown, unknown>): Effect.Effect<void> {\n return Effect.uninterruptible(Effect.suspend(() => {\n if (persistence.stopped)\n return Effect.void;\n persistence.stopped = true;\n if (this.persistence === persistence)\n this.persistence = undefined;\n return Queue.shutdown(persistence.requests).pipe(Effect.andThen(Scope.close(persistence.scope, exit)));\n }));\n }\n}\nexport function isSessionExpired(record: SessionRecord, nowMs = Date.now()): boolean {\n if (record.status !== \"active\")\n return false;\n const heartbeatMs = Date.parse(record.heartbeatAt ?? \"\");\n return !Number.isFinite(heartbeatMs) || nowMs - heartbeatMs > SESSION_EXPIRY_MS;\n}\nfunction expiredProjection(record: SessionRecord): ExpiredSessionRecord {\n return {\n sessionId: record.sessionId,\n pid: record.pid,\n startedAt: record.startedAt,\n ...(record.heartbeatAt !== undefined ? { heartbeatAt: record.heartbeatAt } : {}),\n };\n}\n/** 完整读取边界跳过无法解码的 durable projections,不拖垮整个 ProjectDatabase 查询。 */\nexport function readSessions(niceevalRoot: string): Effect.Effect<SessionRecord[], unknown, ProjectStateDatabase> {\n return Effect.flatMap(ProjectStateDatabase, (database) => Effect.flatMap(database.bind(niceevalRoot), (facets) => Effect.tryPromise({\n try: () => facets.invocation.execute<readonly InvocationSessionRecord[]>({ _tag: \"invocation-list\" }),\n catch: (cause) => cause,\n }))).pipe(Effect.map((sessions) => sessions.flatMap((session) => {\n const bytes = session.terminalProjection ?? session.activeProjection;\n if (bytes === undefined)\n return [];\n const decoded = decodeSessionBytes(bytes);\n return decoded === undefined ? [] : [decoded];\n }).sort((a, b) => a.startedAt.localeCompare(b.startedAt))));\n}\nexport function sessionListDocument(records: readonly SessionRecord[], options: {\n all?: boolean;\n selector?: string;\n nowMs?: number;\n} = {}): SessionListDocument {\n const selector = options.selector;\n const matches = (record: SessionRecord): boolean => selector === undefined || record.experiments.some((experiment) => experiment.experimentId.startsWith(selector));\n const sessions: SessionRecord[] = [];\n const expired: ExpiredSessionRecord[] = [];\n for (const record of records) {\n if (!matches(record))\n continue;\n if (isSessionExpired(record, options.nowMs)) {\n expired.push(expiredProjection(record));\n }\n else if (record.status === \"active\" || options.all === true) {\n sessions.push(cloneRecord(record));\n }\n }\n return { format: \"niceeval.sessions\", sessions, expired };\n}\nexport function listSessions(niceevalRoot: string, options: {\n all?: boolean;\n selector?: string;\n nowMs?: number;\n} = {}): Effect.Effect<SessionListDocument, unknown, ProjectStateDatabase> {\n return readSessions(niceevalRoot).pipe(Effect.map((records) => sessionListDocument(records, options)));\n}\nexport function resolveSessionPrefix(records: readonly SessionRecord[], prefix: string): SessionRecord {\n const matches = records.filter((record) => record.sessionId === prefix || record.sessionId.startsWith(prefix));\n if (matches.length === 0)\n throw new Error(`No session matched: ${prefix}`);\n if (matches.length > 1) {\n throw new Error(`Ambiguous session prefix ${prefix}. Candidates: ${matches.map((record) => record.sessionId).join(\", \")}`);\n }\n return cloneRecord(matches[0]!);\n}\nexport function showSession(niceevalRoot: string, prefix: string, nowMs = Date.now()): Effect.Effect<SessionShowDocument, unknown, ProjectStateDatabase> {\n return readSessions(niceevalRoot).pipe(Effect.map((records) => {\n const record = resolveSessionPrefix(records, prefix);\n const expired = isSessionExpired(record, nowMs);\n return {\n format: \"niceeval.session\",\n session: expired ? expiredProjection(record) : record,\n ...(expired ? { expired: true } : {}),\n };\n }));\n}\nfunction shortRunId(runId: string): string {\n return runId.slice(0, 8);\n}\nfunction ageLabel(iso: string, nowMs: number): string {\n const elapsed = Math.max(0, nowMs - Date.parse(iso));\n if (elapsed < 1000)\n return \"now\";\n if (elapsed < 60000)\n return `${Math.floor(elapsed / 1000)}s ago`;\n if (elapsed < 3600000)\n return `${Math.floor(elapsed / 60000)}m ago`;\n return `${Math.floor(elapsed / 3600000)}h ago`;\n}\nfunction renderExperimentLine(experiment: SessionExperimentRecord, published: boolean): string {\n if (published) {\n return ` ${experiment.experimentId} niceeval show --run ${experiment.runId}`;\n }\n const counters = [\n experiment.running ? `${experiment.running} running` : \"\",\n experiment.queued ? `${experiment.queued} queued` : \"\",\n experiment.elsewhere ? `${experiment.elsewhere} elsewhere` : \"\",\n ].filter(Boolean);\n return ` ${experiment.experimentId} @run:${shortRunId(experiment.runId)} ${experiment.state ?? \"running\"}${counters.length ? ` · ${counters.join(\" · \")}` : \"\"}`;\n}\nfunction publishedForSession(experiment: SessionExperimentRecord, status: SessionStatus): boolean {\n // Older session entries have no receipt marker. Preserve their established\n // completed/interrupted behavior while new entries rely on the exact receipt.\n return experiment.published ?? (status === \"completed\" || status === \"interrupted\");\n}\nexport function renderSessionListText(document: SessionListDocument, nowMs = Date.now(), all = false): string {\n const lines: string[] = [`ACTIVE SESSIONS (${document.sessions.filter((session) => session.status === \"active\").length})`];\n const active = document.sessions.filter((session) => session.status === \"active\");\n if (active.length === 0)\n lines.push(\"(none)\");\n for (const session of active) {\n lines.push(`${session.sessionId} · pid ${session.pid} · ${ageLabel(session.startedAt, nowMs)} · heartbeat ${ageLabel(session.heartbeatAt ?? session.startedAt, nowMs)}`);\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, false)));\n }\n if (all) {\n const completed = document.sessions.filter((session) => session.status !== \"active\");\n lines.push(`COMPLETED SESSIONS (${completed.length})`);\n if (completed.length === 0)\n lines.push(\"(none)\");\n for (const session of completed) {\n lines.push(`${session.sessionId} · pid ${session.pid} · ${session.status} · completed ${session.completedAt ?? \"—\"}`);\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, publishedForSession(experiment, session.status))));\n }\n if (document.expired.length > 0) {\n lines.push(`EXPIRED SESSIONS (${document.expired.length})`);\n for (const expired of document.expired) {\n lines.push(`${expired.sessionId} · pid ${expired.pid} · heartbeat ${expired.heartbeatAt ?? \"unknown\"} · ${`rerun the original command`}`);\n }\n }\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\nexport function renderSessionShowText(document: SessionShowDocument): string {\n const session = document.session;\n const lines = [`SESSION ${session.sessionId}${document.expired ? \" · EXPIRED\" : \"\"}`, `pid ${session.pid} · started ${session.startedAt}`];\n if (\"status\" in session)\n lines.push(`status ${session.status}${session.completedAt ? ` · completed ${session.completedAt}` : \"\"}`);\n if (\"experiments\" in session) {\n lines.push(...session.experiments.map((experiment) => renderExperimentLine(experiment, publishedForSession(experiment, session.status))));\n }\n if (document.expired)\n lines.push(`NEXT rerun the original command`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n"]}
@@ -64,7 +64,7 @@ export interface SessionStartInput {
64
64
  export interface SessionCloseInput {
65
65
  status?: CompletionStatus | SessionStatus;
66
66
  completion?: InvocationCompletion;
67
- /** Only IDs in this receipt are safe targets for `niceeval view --run`. */
67
+ /** Only IDs in this receipt are safe targets for `niceeval show --run`. */
68
68
  receipt?: InvocationReceipt;
69
69
  completedAt?: string;
70
70
  }
@@ -64,7 +64,7 @@ export interface SessionStartInput {
64
64
  export interface SessionCloseInput {
65
65
  status?: CompletionStatus | SessionStatus;
66
66
  completion?: InvocationCompletion;
67
- /** Only IDs in this receipt are safe targets for `niceeval view --run`. */
67
+ /** Only IDs in this receipt are safe targets for `niceeval show --run`. */
68
68
  receipt?: InvocationReceipt;
69
69
  completedAt?: string;
70
70
  }
@@ -64,7 +64,7 @@ export interface SessionStartInput {
64
64
  export interface SessionCloseInput {
65
65
  status?: CompletionStatus | SessionStatus;
66
66
  completion?: InvocationCompletion;
67
- /** Only IDs in this receipt are safe targets for `niceeval view --run`. */
67
+ /** Only IDs in this receipt are safe targets for `niceeval show --run`. */
68
68
  receipt?: InvocationReceipt;
69
69
  completedAt?: string;
70
70
  }
@@ -329,7 +329,9 @@ function createRunnerTurnContextsAttachment(input) {
329
329
  if (sources === undefined)
330
330
  return effect_1.Result.fail(invalid("sources-closure-invalid"));
331
331
  const local = localSourceTexts(input.result);
332
- const segments = capture.sends.map((captured, index) => Object.freeze({
332
+ // The family is ordered by session and physical turn, while sourceOrder
333
+ // retains author invocation order when sends interleave across sessions.
334
+ const segments = capture.sends.toSorted((left, right) => left.sessionIndex - right.sessionIndex || left.turnIndex - right.turnIndex).map((captured, index) => Object.freeze({
333
335
  segmentId: captured.segmentId,
334
336
  sequence: index + 1,
335
337
  turnId: captured.turnId,
@@ -1 +1 @@
1
- {"version":3,"file":"source-producer.js","sourceRoot":"","sources":["source-producer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport { Result, Schema } from \"effect\";\nimport { CanonicalProjectRelativePathSchema, SourceItemIdSchema, } from \"../record/codec/identifiers.ts\";\nimport { RecordExactParseOptions } from \"../record/codec/core.ts\";\nimport type { CanonicalProjectRelativePath, Sha256Digest, SlotId, SourceItemId, } from \"../record/model/identifiers.ts\";\nimport { AssertionSourceSiteSchema, type AssertionSourceSite, } from \"../record/family/assertions/definition.ts\";\nimport { sourcesRecordAttachment } from \"../record/family/sources/definition.ts\";\nimport { TurnContextsAttachmentSchema, type TurnContextsAttachment, } from \"../record/family/turn-contexts/definition.ts\";\nimport type { SourceReceiptLimitation } from \"../record/family/source-receipt/index.ts\";\nimport type { RecordAttachmentSessionBuilder } from \"../record/writer/current-attachment.ts\";\nimport { assertionsRuntimeSourceCaptureSnapshot, attachAssertionsRuntimeSourceCapture, markAssertionsRuntimeSourceCaptureInterrupted, type AssertionRuntimeSourceSite, type AssertionsRuntimeSourceCaptureSnapshot, } from \"../assertions/runtime.ts\";\nimport type { AssertionsRuntime } from \"../assertions/api.ts\";\nimport type { AssertionEntryId } from \"../assertions/identity.ts\";\nimport type { TurnId } from \"../record/family/source-receipt/model.ts\";\nimport { makeSafeIdentifier } from \"../record/family/source-receipt/model.ts\";\nimport { captureLoc, type SourceRegistry } from \"../source-loc.ts\";\nimport type { SourceArtifact, SourceLoc, SourcePathFrame } from \"../shared/types.ts\";\nimport { createSourcesAttachment, type SourcesAttachmentBuild, type SourcesAttachmentPlan, } from \"../sources/attachment.ts\";\nimport { canonicalizeSourceText, isStrictUnicodeText, } from \"../sources/codec.ts\";\nimport type { EvalResult } from \"./types.ts\";\ninterface CapturedSend {\n readonly segmentId: string;\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly sourceOrder: number | null;\n readonly location: SourceLoc | undefined;\n}\n/** Package-internal runtime facts retained outside the public sealed value. */\nexport interface RunnerAttemptSourceCaptureSnapshot {\n readonly entries: AssertionsRuntimeSourceCaptureSnapshot[\"entries\"];\n readonly sends: readonly CapturedSend[];\n readonly captureFailed: boolean;\n}\nexport interface RunnerAttemptSourceCapture {\n /** One Attempt-wide allocator shared by Assert-first registrations and sends. */\n readonly nextSourceOrder: () => number;\n /** Binds the original Assert-first runtime to its private source journal. */\n readonly attachAssertions: (runtime: AssertionsRuntime<\"pass\" | \"score\">) => void;\n /** Captures SessionManager context synchronously before Adapter invocation. */\n readonly onTurnStart: (input: {\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly loc?: SourceLoc;\n readonly sourceOrder?: number;\n }) => void;\n /** Called only from the Attempt interruption boundary. */\n readonly markInterrupted: () => void;\n readonly snapshot: () => RunnerAttemptSourceCaptureSnapshot;\n}\nconst sourceCaptureByResult = new WeakMap<object, RunnerAttemptSourceCaptureSnapshot>();\n/** The sealed EvalResult is the package-internal capability bridge into the Record producer. */\nexport function retainRunnerAttemptSourceCapture(result: EvalResult, snapshot: RunnerAttemptSourceCaptureSnapshot): EvalResult {\n sourceCaptureByResult.set(result, snapshot);\n return result;\n}\nfunction sourceCaptureForResult(result: EvalResult): RunnerAttemptSourceCaptureSnapshot | undefined {\n return sourceCaptureByResult.get(result);\n}\nfunction cloneLocation(value: SourceLoc): SourceLoc {\n const callers: SourcePathFrame[] | undefined = value.callers?.map((frame) => frame.kind === \"project\"\n ? {\n kind: \"project\" as const,\n file: frame.file,\n line: frame.line,\n ...(frame.column === undefined ? {} : { column: frame.column }),\n }\n : { kind: \"package\" as const, package: frame.package });\n return {\n file: value.file,\n line: value.line,\n ...(value.column === undefined ? {} : { column: value.column }),\n ...(callers === undefined ? {} : { callers }),\n };\n}\nfunction sourceCaptureFrom(registry: SourceRegistry, nextSourceOrder: () => number): AssertionRuntimeSourceSite | undefined {\n const location = captureLoc({ registry });\n if (location === undefined)\n return undefined;\n return Object.freeze({ location: cloneLocation(location), sourceOrder: nextSourceOrder() });\n}\n/**\n * Holds only Attempt-owned package-internal joins. Assert-first owns entry\n * registration/modifier facts; SessionManager owns user-event locations and\n * turn terminals. No author-facing Context value is wrapped or replaced.\n */\nexport function createRunnerAttemptSourceCapture(registry: SourceRegistry): RunnerAttemptSourceCapture {\n let sourceOrder = 0;\n const sends: CapturedSend[] = [];\n let captureFailed = false;\n let assertionsRuntime: AssertionsRuntime<\"pass\" | \"score\"> | undefined;\n const nextSourceOrder = (): number => ++sourceOrder;\n return Object.freeze({\n nextSourceOrder,\n attachAssertions(runtime: AssertionsRuntime<\"pass\" | \"score\">) {\n if (assertionsRuntime !== undefined && assertionsRuntime !== runtime) {\n throw new Error(\"Runner source capture cannot observe two Assertions runtimes\");\n }\n if (assertionsRuntime === runtime)\n return;\n attachAssertionsRuntimeSourceCapture(runtime, () => sourceCaptureFrom(registry, nextSourceOrder));\n assertionsRuntime = runtime;\n },\n onTurnStart(input: {\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly loc?: SourceLoc;\n readonly sourceOrder?: number;\n }) {\n let segmentId: string | undefined;\n try {\n segmentId = makeSafeIdentifier(`seg.${randomBytes(16).toString(\"hex\")}`);\n }\n catch {\n segmentId = undefined;\n }\n if (segmentId === undefined) {\n captureFailed = true;\n return;\n }\n sends.push(Object.freeze({\n segmentId,\n turnId: input.turnId,\n sessionIndex: input.sessionIndex,\n turnIndex: input.turnIndex,\n sourceOrder: input.sourceOrder ?? null,\n location: input.loc === undefined ? undefined : cloneLocation(input.loc),\n }));\n },\n markInterrupted() {\n if (assertionsRuntime !== undefined) {\n markAssertionsRuntimeSourceCaptureInterrupted(assertionsRuntime);\n }\n },\n snapshot() {\n const assertions = assertionsRuntime === undefined\n ? undefined\n : assertionsRuntimeSourceCaptureSnapshot(assertionsRuntime);\n return Object.freeze({\n entries: assertions?.entries ?? Object.freeze([]),\n sends: Object.freeze(sends.map((send) => Object.freeze({ ...send }))),\n captureFailed,\n });\n },\n });\n}\nexport interface RunnerSourceOriginInput {\n readonly slotId: SlotId;\n readonly result: EvalResult;\n /** Minted by the same Assertions producer that will write this Attempt. */\n readonly assertionEntryIds: readonly AssertionEntryId[];\n}\nexport interface RunnerSourceWritePlan {\n /** Exact current Sources value constructor for the Run owner session. */\n readonly sources: SourcesAttachmentBuild;\n readonly sourceSitesBySlot: ReadonlyMap<SlotId, RunnerAssertionSourceSitesBuild>;\n}\nexport type RunnerAssertionSourceSitesBuild = (build: RecordAttachmentSessionBuilder) => readonly AssertionSourceSite[];\nexport type RunnerTurnContextsAttachmentBuild = (build: RecordAttachmentSessionBuilder) => TurnContextsAttachment;\nexport interface RunnerSourceProducerInvalid {\n readonly code: \"runner-source-producer-invalid\";\n readonly reason: \"origin-slot-duplicate\" | \"sources-write-invalid\" | \"sources-closure-invalid\" | \"source-sites-invalid\" | \"turn-contexts-invalid\";\n}\nfunction invalid(reason: RunnerSourceProducerInvalid[\"reason\"]): RunnerSourceProducerInvalid {\n return Object.freeze({ code: \"runner-source-producer-invalid\" as const, reason });\n}\nfunction canonicalPath(path: string): CanonicalProjectRelativePath | undefined {\n const decoded = Schema.decodeUnknownResult(CanonicalProjectRelativePathSchema, RecordExactParseOptions)(path);\n return Result.isSuccess(decoded) ? decoded.success : undefined;\n}\ninterface SourceSnapshot {\n readonly path: CanonicalProjectRelativePath;\n readonly text: string;\n}\nfunction sourceSnapshot(value: SourceArtifact): SourceSnapshot | undefined {\n const path = canonicalPath(value.path);\n if (path === undefined || !isStrictUnicodeText(value.content))\n return undefined;\n return Object.freeze({ path, text: canonicalizeSourceText(value.content) });\n}\nfunction sourceItemId(path: CanonicalProjectRelativePath, text: string): SourceItemId {\n // An Attempt may publish before its Run is terminal. Its assertion joins and\n // the later Run-wide Sources attachment must therefore mint the same identity\n // for the same immutable source, independent of plan membership or ordering.\n const digest = createHash(\"sha256\").update(path, \"utf8\").update(\"\\0\", \"utf8\").update(text, \"utf8\").digest(\"hex\");\n const candidate = `src_${digest}`;\n const decoded = Schema.decodeUnknownResult(SourceItemIdSchema, RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner generated an invalid Sources item identity\");\n }\n return decoded.success;\n}\nfunction coordinateFor(text: string, line: number, column: number | undefined): {\n readonly line: number;\n readonly column: number;\n} | undefined {\n if (!Number.isSafeInteger(line) || line < 1 || column === undefined || !Number.isSafeInteger(column) || column < 1) {\n return undefined;\n }\n const row = text.split(\"\\n\")[line - 1];\n if (row === undefined || column > row.length + 1)\n return undefined;\n const before = row.slice(0, column - 1);\n const last = before.charCodeAt(before.length - 1);\n if (last >= 0xd800 && last <= 0xdbff)\n return undefined;\n return Object.freeze({ line, column: new TextEncoder().encode(before).byteLength + 1 });\n}\ninterface SourceItemLookup {\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly text: string;\n}\ninterface SourceManifestLookup {\n readonly files: Map<CanonicalProjectRelativePath, SourceItemLookup>;\n}\nconst sourceManifestByPlan = new WeakMap<RunnerSourceWritePlan, SourceManifestLookup>();\nfunction manifestLookup(document: SourcesAttachmentPlan): SourceManifestLookup {\n const files = new Map<CanonicalProjectRelativePath, SourceItemLookup>();\n for (const item of document.items) {\n files.set(item.path, {\n sourceItemId: item.sourceItemId,\n sha256: item.sha256,\n text: item.text,\n });\n }\n return Object.freeze({ files });\n}\ninterface PendingAssertionSourceSite {\n readonly entryId: AssertionEntryId;\n readonly sourceOrder: number;\n readonly role: AssertionSourceSite[\"role\"];\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly start: AssertionSourceSite[\"start\"];\n readonly end: AssertionSourceSite[\"end\"];\n}\nfunction sourceSite(input: {\n readonly entryId: AssertionEntryId;\n readonly sourceOrder: number;\n readonly role: AssertionSourceSite[\"role\"];\n readonly location: SourceLoc;\n}, localFiles: ReadonlyMap<CanonicalProjectRelativePath, string>, lookup: SourceManifestLookup): PendingAssertionSourceSite | undefined {\n const path = canonicalPath(input.location.file);\n if (path === undefined)\n return undefined;\n const local = localFiles.get(path);\n const source = lookup.files.get(path);\n if (local === undefined || source === undefined || source.text !== local)\n return undefined;\n const coordinate = coordinateFor(local, input.location.line, input.location.column);\n if (coordinate === undefined)\n return undefined;\n return Object.freeze({\n entryId: input.entryId,\n sourceOrder: input.sourceOrder,\n role: input.role,\n sourceItemId: source.sourceItemId,\n sha256: source.sha256,\n start: coordinate,\n end: coordinate,\n });\n}\nfunction sourceSiteOrder(left: PendingAssertionSourceSite, right: PendingAssertionSourceSite): number {\n const byEntry = left.entryId.localeCompare(right.entryId);\n return byEntry === 0 ? left.sourceOrder - right.sourceOrder : byEntry;\n}\nfunction sourceSitesForOrigin(origin: RunnerSourceOriginInput, localFiles: ReadonlyMap<CanonicalProjectRelativePath, string>, lookup: SourceManifestLookup): Result.Result<readonly PendingAssertionSourceSite[], RunnerSourceProducerInvalid> {\n const capture = sourceCaptureForResult(origin.result);\n if (capture === undefined || capture.entries.length !== origin.assertionEntryIds.length) {\n return Result.succeed(Object.freeze([]));\n }\n const sourceSites: PendingAssertionSourceSite[] = [];\n const orders = new Set<number>();\n for (const [index, entryCapture] of capture.entries.entries()) {\n const entryId = origin.assertionEntryIds[index];\n if (entryId === undefined)\n return Result.fail(invalid(\"source-sites-invalid\"));\n for (const occurrence of entryCapture.occurrences) {\n if (occurrence.site === undefined)\n continue;\n if (orders.has(occurrence.site.sourceOrder)) {\n return Result.fail(invalid(\"source-sites-invalid\"));\n }\n orders.add(occurrence.site.sourceOrder);\n const site = sourceSite({\n entryId,\n sourceOrder: occurrence.site.sourceOrder,\n role: occurrence.role,\n location: occurrence.site.location,\n }, localFiles, lookup);\n if (site !== undefined)\n sourceSites.push(site);\n }\n }\n sourceSites.sort(sourceSiteOrder);\n return Result.succeed(Object.freeze(sourceSites));\n}\n/**\n * Builds one flat Run Sources closure plus semantic source-site joins for\n * each fresh origin. It uses only bytes retained by the actual Attempt; it\n * never reopens today's worktree or a legacy result/Report surface.\n */\nexport function createRunnerSourceWritePlan(origins: readonly RunnerSourceOriginInput[]): Result.Result<RunnerSourceWritePlan, RunnerSourceProducerInvalid> {\n const textsByPath = new Map<CanonicalProjectRelativePath, string>();\n const localBySlot = new Map<SlotId, ReadonlyMap<CanonicalProjectRelativePath, string>>();\n for (const origin of origins) {\n if (localBySlot.has(origin.slotId)) {\n return Result.fail(invalid(\"origin-slot-duplicate\"));\n }\n const local = new Map<CanonicalProjectRelativePath, string>();\n for (const artifact of origin.result.sources ?? []) {\n const snapshot = sourceSnapshot(artifact);\n if (snapshot === undefined)\n continue;\n if (!local.has(snapshot.path))\n local.set(snapshot.path, snapshot.text);\n if (!textsByPath.has(snapshot.path))\n textsByPath.set(snapshot.path, snapshot.text);\n }\n localBySlot.set(origin.slotId, local);\n }\n const sourcesAttachment = createSourcesAttachment({\n items: Object.freeze([...textsByPath.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([path, text]) => Object.freeze({ sourceItemId: sourceItemId(path, text), path, text }))),\n });\n if (Result.isFailure(sourcesAttachment))\n return Result.fail(invalid(\"sources-write-invalid\"));\n const lookup = manifestLookup(sourcesAttachment.success);\n const sourceSitesBySlot = new Map<SlotId, RunnerAssertionSourceSitesBuild>();\n for (const origin of origins) {\n const local = localBySlot.get(origin.slotId);\n if (local === undefined)\n return Result.fail(invalid(\"origin-slot-duplicate\"));\n const sites = sourceSitesForOrigin(origin, local, lookup);\n if (Result.isFailure(sites))\n return Result.fail(sites.failure);\n sourceSitesBySlot.set(origin.slotId, (build) => {\n const candidate = Object.freeze(sites.success.map((site) => Object.freeze({\n entryId: site.entryId,\n sourceOrder: site.sourceOrder,\n role: site.role,\n source: build.reference.to(sourcesRecordAttachment, {\n sourceItemId: site.sourceItemId,\n sha256: site.sha256,\n }),\n start: site.start,\n end: site.end,\n })));\n const decoded = Schema.decodeResult(Schema.toType(Schema.Array(AssertionSourceSiteSchema)), RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner source-site capture violated its current schema\");\n }\n return Object.freeze(decoded.success);\n });\n }\n const plan = Object.freeze({\n sources: sourcesAttachment.success.value,\n sourceSitesBySlot: new Map(sourceSitesBySlot),\n });\n sourceManifestByPlan.set(plan, lookup);\n return Result.succeed(plan);\n}\nfunction localSourceTexts(result: EvalResult): ReadonlyMap<CanonicalProjectRelativePath, string> {\n const files = new Map<CanonicalProjectRelativePath, string>();\n for (const artifact of result.sources ?? []) {\n const snapshot = sourceSnapshot(artifact);\n if (snapshot !== undefined && !files.has(snapshot.path))\n files.set(snapshot.path, snapshot.text);\n }\n return files;\n}\ntype PendingTurnContextSource = {\n readonly state: \"unmapped\";\n readonly reason: \"location-not-captured\" | \"source-snapshot-not-recorded\" | \"position-unrepresentable\";\n} | {\n readonly state: \"mapped\";\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly start: {\n readonly line: number;\n readonly column: number;\n };\n readonly end: {\n readonly line: number;\n readonly column: number;\n };\n};\nfunction turnContextSource(input: {\n readonly capture: CapturedSend;\n readonly local: ReadonlyMap<CanonicalProjectRelativePath, string>;\n readonly sources: SourceManifestLookup;\n}): PendingTurnContextSource {\n if (input.capture.location === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"location-not-captured\" as const });\n }\n const path = canonicalPath(input.capture.location.file);\n if (path === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"position-unrepresentable\" as const });\n }\n const text = input.local.get(path);\n const item = input.sources.files.get(path);\n if (text === undefined || item === undefined || item.text !== text) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"source-snapshot-not-recorded\" as const });\n }\n const position = coordinateFor(text, input.capture.location.line, input.capture.location.column);\n if (position === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"position-unrepresentable\" as const });\n }\n return Object.freeze({\n state: \"mapped\" as const,\n sourceItemId: item.sourceItemId,\n sha256: item.sha256,\n start: position,\n end: position,\n });\n}\n/**\n * Assembles the Attempt-owned storage-neutral context receipt from SessionManager's\n * physical-send capture and the same-seal immutable Sources closure.\n */\nexport function createRunnerTurnContextsAttachment(input: {\n readonly result: EvalResult;\n readonly sourcePlan: RunnerSourceWritePlan;\n}): Result.Result<RunnerTurnContextsAttachmentBuild | undefined, RunnerSourceProducerInvalid> {\n const capture = sourceCaptureForResult(input.result);\n if (capture === undefined) {\n return Result.fail(invalid(\"turn-contexts-invalid\"));\n }\n if (capture.sends.length === 0 && !capture.captureFailed) {\n return Result.succeed(undefined);\n }\n const sources = sourceManifestByPlan.get(input.sourcePlan);\n if (sources === undefined)\n return Result.fail(invalid(\"sources-closure-invalid\"));\n const local = localSourceTexts(input.result);\n const segments = capture.sends.map((captured, index) => Object.freeze({\n segmentId: captured.segmentId,\n sequence: index + 1,\n turnId: captured.turnId,\n sessionIndex: captured.sessionIndex,\n turnIndex: captured.turnIndex,\n sourceOrder: captured.sourceOrder,\n source: turnContextSource({ capture: captured, local, sources }),\n }));\n const collection = capture.captureFailed\n ? (() => {\n const first: SourceReceiptLimitation = Object.freeze({\n code: \"capture-failed\" as const,\n stage: \"session-manager\" as const,\n target: \"turn-context\" as const,\n });\n const limitations: readonly [\n SourceReceiptLimitation,\n ...SourceReceiptLimitation[]\n ] = [first];\n return Object.freeze({ state: \"partial\" as const, limitations });\n })()\n : Object.freeze({ state: \"complete\" as const, limitations: [] as const });\n return Result.succeed((build) => {\n const candidate = Object.freeze({\n collection,\n segments: Object.freeze(segments.map((segment) => Object.freeze({\n ...segment,\n source: segment.source.state === \"unmapped\"\n ? segment.source\n : build.reference.to(sourcesRecordAttachment, segment.source),\n }))),\n });\n const decoded = Schema.decodeResult(Schema.toType(TurnContextsAttachmentSchema), RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner Turn Context capture violated its current schema\");\n }\n return decoded.success;\n });\n}\n"]}
1
+ {"version":3,"file":"source-producer.js","sourceRoot":"","sources":["source-producer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport { Result, Schema } from \"effect\";\nimport { CanonicalProjectRelativePathSchema, SourceItemIdSchema, } from \"../record/codec/identifiers.ts\";\nimport { RecordExactParseOptions } from \"../record/codec/core.ts\";\nimport type { CanonicalProjectRelativePath, Sha256Digest, SlotId, SourceItemId, } from \"../record/model/identifiers.ts\";\nimport { AssertionSourceSiteSchema, type AssertionSourceSite, } from \"../record/family/assertions/definition.ts\";\nimport { sourcesRecordAttachment } from \"../record/family/sources/definition.ts\";\nimport { TurnContextsAttachmentSchema, type TurnContextsAttachment, } from \"../record/family/turn-contexts/definition.ts\";\nimport type { SourceReceiptLimitation } from \"../record/family/source-receipt/index.ts\";\nimport type { RecordAttachmentSessionBuilder } from \"../record/writer/current-attachment.ts\";\nimport { assertionsRuntimeSourceCaptureSnapshot, attachAssertionsRuntimeSourceCapture, markAssertionsRuntimeSourceCaptureInterrupted, type AssertionRuntimeSourceSite, type AssertionsRuntimeSourceCaptureSnapshot, } from \"../assertions/runtime.ts\";\nimport type { AssertionsRuntime } from \"../assertions/api.ts\";\nimport type { AssertionEntryId } from \"../assertions/identity.ts\";\nimport type { TurnId } from \"../record/family/source-receipt/model.ts\";\nimport { makeSafeIdentifier } from \"../record/family/source-receipt/model.ts\";\nimport { captureLoc, type SourceRegistry } from \"../source-loc.ts\";\nimport type { SourceArtifact, SourceLoc, SourcePathFrame } from \"../shared/types.ts\";\nimport { createSourcesAttachment, type SourcesAttachmentBuild, type SourcesAttachmentPlan, } from \"../sources/attachment.ts\";\nimport { canonicalizeSourceText, isStrictUnicodeText, } from \"../sources/codec.ts\";\nimport type { EvalResult } from \"./types.ts\";\ninterface CapturedSend {\n readonly segmentId: string;\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly sourceOrder: number | null;\n readonly location: SourceLoc | undefined;\n}\n/** Package-internal runtime facts retained outside the public sealed value. */\nexport interface RunnerAttemptSourceCaptureSnapshot {\n readonly entries: AssertionsRuntimeSourceCaptureSnapshot[\"entries\"];\n readonly sends: readonly CapturedSend[];\n readonly captureFailed: boolean;\n}\nexport interface RunnerAttemptSourceCapture {\n /** One Attempt-wide allocator shared by Assert-first registrations and sends. */\n readonly nextSourceOrder: () => number;\n /** Binds the original Assert-first runtime to its private source journal. */\n readonly attachAssertions: (runtime: AssertionsRuntime<\"pass\" | \"score\">) => void;\n /** Captures SessionManager context synchronously before Adapter invocation. */\n readonly onTurnStart: (input: {\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly loc?: SourceLoc;\n readonly sourceOrder?: number;\n }) => void;\n /** Called only from the Attempt interruption boundary. */\n readonly markInterrupted: () => void;\n readonly snapshot: () => RunnerAttemptSourceCaptureSnapshot;\n}\nconst sourceCaptureByResult = new WeakMap<object, RunnerAttemptSourceCaptureSnapshot>();\n/** The sealed EvalResult is the package-internal capability bridge into the Record producer. */\nexport function retainRunnerAttemptSourceCapture(result: EvalResult, snapshot: RunnerAttemptSourceCaptureSnapshot): EvalResult {\n sourceCaptureByResult.set(result, snapshot);\n return result;\n}\nfunction sourceCaptureForResult(result: EvalResult): RunnerAttemptSourceCaptureSnapshot | undefined {\n return sourceCaptureByResult.get(result);\n}\nfunction cloneLocation(value: SourceLoc): SourceLoc {\n const callers: SourcePathFrame[] | undefined = value.callers?.map((frame) => frame.kind === \"project\"\n ? {\n kind: \"project\" as const,\n file: frame.file,\n line: frame.line,\n ...(frame.column === undefined ? {} : { column: frame.column }),\n }\n : { kind: \"package\" as const, package: frame.package });\n return {\n file: value.file,\n line: value.line,\n ...(value.column === undefined ? {} : { column: value.column }),\n ...(callers === undefined ? {} : { callers }),\n };\n}\nfunction sourceCaptureFrom(registry: SourceRegistry, nextSourceOrder: () => number): AssertionRuntimeSourceSite | undefined {\n const location = captureLoc({ registry });\n if (location === undefined)\n return undefined;\n return Object.freeze({ location: cloneLocation(location), sourceOrder: nextSourceOrder() });\n}\n/**\n * Holds only Attempt-owned package-internal joins. Assert-first owns entry\n * registration/modifier facts; SessionManager owns user-event locations and\n * turn terminals. No author-facing Context value is wrapped or replaced.\n */\nexport function createRunnerAttemptSourceCapture(registry: SourceRegistry): RunnerAttemptSourceCapture {\n let sourceOrder = 0;\n const sends: CapturedSend[] = [];\n let captureFailed = false;\n let assertionsRuntime: AssertionsRuntime<\"pass\" | \"score\"> | undefined;\n const nextSourceOrder = (): number => ++sourceOrder;\n return Object.freeze({\n nextSourceOrder,\n attachAssertions(runtime: AssertionsRuntime<\"pass\" | \"score\">) {\n if (assertionsRuntime !== undefined && assertionsRuntime !== runtime) {\n throw new Error(\"Runner source capture cannot observe two Assertions runtimes\");\n }\n if (assertionsRuntime === runtime)\n return;\n attachAssertionsRuntimeSourceCapture(runtime, () => sourceCaptureFrom(registry, nextSourceOrder));\n assertionsRuntime = runtime;\n },\n onTurnStart(input: {\n readonly turnId: TurnId;\n readonly sessionIndex: number;\n readonly turnIndex: number;\n readonly loc?: SourceLoc;\n readonly sourceOrder?: number;\n }) {\n let segmentId: string | undefined;\n try {\n segmentId = makeSafeIdentifier(`seg.${randomBytes(16).toString(\"hex\")}`);\n }\n catch {\n segmentId = undefined;\n }\n if (segmentId === undefined) {\n captureFailed = true;\n return;\n }\n sends.push(Object.freeze({\n segmentId,\n turnId: input.turnId,\n sessionIndex: input.sessionIndex,\n turnIndex: input.turnIndex,\n sourceOrder: input.sourceOrder ?? null,\n location: input.loc === undefined ? undefined : cloneLocation(input.loc),\n }));\n },\n markInterrupted() {\n if (assertionsRuntime !== undefined) {\n markAssertionsRuntimeSourceCaptureInterrupted(assertionsRuntime);\n }\n },\n snapshot() {\n const assertions = assertionsRuntime === undefined\n ? undefined\n : assertionsRuntimeSourceCaptureSnapshot(assertionsRuntime);\n return Object.freeze({\n entries: assertions?.entries ?? Object.freeze([]),\n sends: Object.freeze(sends.map((send) => Object.freeze({ ...send }))),\n captureFailed,\n });\n },\n });\n}\nexport interface RunnerSourceOriginInput {\n readonly slotId: SlotId;\n readonly result: EvalResult;\n /** Minted by the same Assertions producer that will write this Attempt. */\n readonly assertionEntryIds: readonly AssertionEntryId[];\n}\nexport interface RunnerSourceWritePlan {\n /** Exact current Sources value constructor for the Run owner session. */\n readonly sources: SourcesAttachmentBuild;\n readonly sourceSitesBySlot: ReadonlyMap<SlotId, RunnerAssertionSourceSitesBuild>;\n}\nexport type RunnerAssertionSourceSitesBuild = (build: RecordAttachmentSessionBuilder) => readonly AssertionSourceSite[];\nexport type RunnerTurnContextsAttachmentBuild = (build: RecordAttachmentSessionBuilder) => TurnContextsAttachment;\nexport interface RunnerSourceProducerInvalid {\n readonly code: \"runner-source-producer-invalid\";\n readonly reason: \"origin-slot-duplicate\" | \"sources-write-invalid\" | \"sources-closure-invalid\" | \"source-sites-invalid\" | \"turn-contexts-invalid\";\n}\nfunction invalid(reason: RunnerSourceProducerInvalid[\"reason\"]): RunnerSourceProducerInvalid {\n return Object.freeze({ code: \"runner-source-producer-invalid\" as const, reason });\n}\nfunction canonicalPath(path: string): CanonicalProjectRelativePath | undefined {\n const decoded = Schema.decodeUnknownResult(CanonicalProjectRelativePathSchema, RecordExactParseOptions)(path);\n return Result.isSuccess(decoded) ? decoded.success : undefined;\n}\ninterface SourceSnapshot {\n readonly path: CanonicalProjectRelativePath;\n readonly text: string;\n}\nfunction sourceSnapshot(value: SourceArtifact): SourceSnapshot | undefined {\n const path = canonicalPath(value.path);\n if (path === undefined || !isStrictUnicodeText(value.content))\n return undefined;\n return Object.freeze({ path, text: canonicalizeSourceText(value.content) });\n}\nfunction sourceItemId(path: CanonicalProjectRelativePath, text: string): SourceItemId {\n // An Attempt may publish before its Run is terminal. Its assertion joins and\n // the later Run-wide Sources attachment must therefore mint the same identity\n // for the same immutable source, independent of plan membership or ordering.\n const digest = createHash(\"sha256\").update(path, \"utf8\").update(\"\\0\", \"utf8\").update(text, \"utf8\").digest(\"hex\");\n const candidate = `src_${digest}`;\n const decoded = Schema.decodeUnknownResult(SourceItemIdSchema, RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner generated an invalid Sources item identity\");\n }\n return decoded.success;\n}\nfunction coordinateFor(text: string, line: number, column: number | undefined): {\n readonly line: number;\n readonly column: number;\n} | undefined {\n if (!Number.isSafeInteger(line) || line < 1 || column === undefined || !Number.isSafeInteger(column) || column < 1) {\n return undefined;\n }\n const row = text.split(\"\\n\")[line - 1];\n if (row === undefined || column > row.length + 1)\n return undefined;\n const before = row.slice(0, column - 1);\n const last = before.charCodeAt(before.length - 1);\n if (last >= 0xd800 && last <= 0xdbff)\n return undefined;\n return Object.freeze({ line, column: new TextEncoder().encode(before).byteLength + 1 });\n}\ninterface SourceItemLookup {\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly text: string;\n}\ninterface SourceManifestLookup {\n readonly files: Map<CanonicalProjectRelativePath, SourceItemLookup>;\n}\nconst sourceManifestByPlan = new WeakMap<RunnerSourceWritePlan, SourceManifestLookup>();\nfunction manifestLookup(document: SourcesAttachmentPlan): SourceManifestLookup {\n const files = new Map<CanonicalProjectRelativePath, SourceItemLookup>();\n for (const item of document.items) {\n files.set(item.path, {\n sourceItemId: item.sourceItemId,\n sha256: item.sha256,\n text: item.text,\n });\n }\n return Object.freeze({ files });\n}\ninterface PendingAssertionSourceSite {\n readonly entryId: AssertionEntryId;\n readonly sourceOrder: number;\n readonly role: AssertionSourceSite[\"role\"];\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly start: AssertionSourceSite[\"start\"];\n readonly end: AssertionSourceSite[\"end\"];\n}\nfunction sourceSite(input: {\n readonly entryId: AssertionEntryId;\n readonly sourceOrder: number;\n readonly role: AssertionSourceSite[\"role\"];\n readonly location: SourceLoc;\n}, localFiles: ReadonlyMap<CanonicalProjectRelativePath, string>, lookup: SourceManifestLookup): PendingAssertionSourceSite | undefined {\n const path = canonicalPath(input.location.file);\n if (path === undefined)\n return undefined;\n const local = localFiles.get(path);\n const source = lookup.files.get(path);\n if (local === undefined || source === undefined || source.text !== local)\n return undefined;\n const coordinate = coordinateFor(local, input.location.line, input.location.column);\n if (coordinate === undefined)\n return undefined;\n return Object.freeze({\n entryId: input.entryId,\n sourceOrder: input.sourceOrder,\n role: input.role,\n sourceItemId: source.sourceItemId,\n sha256: source.sha256,\n start: coordinate,\n end: coordinate,\n });\n}\nfunction sourceSiteOrder(left: PendingAssertionSourceSite, right: PendingAssertionSourceSite): number {\n const byEntry = left.entryId.localeCompare(right.entryId);\n return byEntry === 0 ? left.sourceOrder - right.sourceOrder : byEntry;\n}\nfunction sourceSitesForOrigin(origin: RunnerSourceOriginInput, localFiles: ReadonlyMap<CanonicalProjectRelativePath, string>, lookup: SourceManifestLookup): Result.Result<readonly PendingAssertionSourceSite[], RunnerSourceProducerInvalid> {\n const capture = sourceCaptureForResult(origin.result);\n if (capture === undefined || capture.entries.length !== origin.assertionEntryIds.length) {\n return Result.succeed(Object.freeze([]));\n }\n const sourceSites: PendingAssertionSourceSite[] = [];\n const orders = new Set<number>();\n for (const [index, entryCapture] of capture.entries.entries()) {\n const entryId = origin.assertionEntryIds[index];\n if (entryId === undefined)\n return Result.fail(invalid(\"source-sites-invalid\"));\n for (const occurrence of entryCapture.occurrences) {\n if (occurrence.site === undefined)\n continue;\n if (orders.has(occurrence.site.sourceOrder)) {\n return Result.fail(invalid(\"source-sites-invalid\"));\n }\n orders.add(occurrence.site.sourceOrder);\n const site = sourceSite({\n entryId,\n sourceOrder: occurrence.site.sourceOrder,\n role: occurrence.role,\n location: occurrence.site.location,\n }, localFiles, lookup);\n if (site !== undefined)\n sourceSites.push(site);\n }\n }\n sourceSites.sort(sourceSiteOrder);\n return Result.succeed(Object.freeze(sourceSites));\n}\n/**\n * Builds one flat Run Sources closure plus semantic source-site joins for\n * each fresh origin. It uses only bytes retained by the actual Attempt; it\n * never reopens today's worktree or a legacy result/Report surface.\n */\nexport function createRunnerSourceWritePlan(origins: readonly RunnerSourceOriginInput[]): Result.Result<RunnerSourceWritePlan, RunnerSourceProducerInvalid> {\n const textsByPath = new Map<CanonicalProjectRelativePath, string>();\n const localBySlot = new Map<SlotId, ReadonlyMap<CanonicalProjectRelativePath, string>>();\n for (const origin of origins) {\n if (localBySlot.has(origin.slotId)) {\n return Result.fail(invalid(\"origin-slot-duplicate\"));\n }\n const local = new Map<CanonicalProjectRelativePath, string>();\n for (const artifact of origin.result.sources ?? []) {\n const snapshot = sourceSnapshot(artifact);\n if (snapshot === undefined)\n continue;\n if (!local.has(snapshot.path))\n local.set(snapshot.path, snapshot.text);\n if (!textsByPath.has(snapshot.path))\n textsByPath.set(snapshot.path, snapshot.text);\n }\n localBySlot.set(origin.slotId, local);\n }\n const sourcesAttachment = createSourcesAttachment({\n items: Object.freeze([...textsByPath.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([path, text]) => Object.freeze({ sourceItemId: sourceItemId(path, text), path, text }))),\n });\n if (Result.isFailure(sourcesAttachment))\n return Result.fail(invalid(\"sources-write-invalid\"));\n const lookup = manifestLookup(sourcesAttachment.success);\n const sourceSitesBySlot = new Map<SlotId, RunnerAssertionSourceSitesBuild>();\n for (const origin of origins) {\n const local = localBySlot.get(origin.slotId);\n if (local === undefined)\n return Result.fail(invalid(\"origin-slot-duplicate\"));\n const sites = sourceSitesForOrigin(origin, local, lookup);\n if (Result.isFailure(sites))\n return Result.fail(sites.failure);\n sourceSitesBySlot.set(origin.slotId, (build) => {\n const candidate = Object.freeze(sites.success.map((site) => Object.freeze({\n entryId: site.entryId,\n sourceOrder: site.sourceOrder,\n role: site.role,\n source: build.reference.to(sourcesRecordAttachment, {\n sourceItemId: site.sourceItemId,\n sha256: site.sha256,\n }),\n start: site.start,\n end: site.end,\n })));\n const decoded = Schema.decodeResult(Schema.toType(Schema.Array(AssertionSourceSiteSchema)), RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner source-site capture violated its current schema\");\n }\n return Object.freeze(decoded.success);\n });\n }\n const plan = Object.freeze({\n sources: sourcesAttachment.success.value,\n sourceSitesBySlot: new Map(sourceSitesBySlot),\n });\n sourceManifestByPlan.set(plan, lookup);\n return Result.succeed(plan);\n}\nfunction localSourceTexts(result: EvalResult): ReadonlyMap<CanonicalProjectRelativePath, string> {\n const files = new Map<CanonicalProjectRelativePath, string>();\n for (const artifact of result.sources ?? []) {\n const snapshot = sourceSnapshot(artifact);\n if (snapshot !== undefined && !files.has(snapshot.path))\n files.set(snapshot.path, snapshot.text);\n }\n return files;\n}\ntype PendingTurnContextSource = {\n readonly state: \"unmapped\";\n readonly reason: \"location-not-captured\" | \"source-snapshot-not-recorded\" | \"position-unrepresentable\";\n} | {\n readonly state: \"mapped\";\n readonly sourceItemId: SourceItemId;\n readonly sha256: Sha256Digest;\n readonly start: {\n readonly line: number;\n readonly column: number;\n };\n readonly end: {\n readonly line: number;\n readonly column: number;\n };\n};\nfunction turnContextSource(input: {\n readonly capture: CapturedSend;\n readonly local: ReadonlyMap<CanonicalProjectRelativePath, string>;\n readonly sources: SourceManifestLookup;\n}): PendingTurnContextSource {\n if (input.capture.location === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"location-not-captured\" as const });\n }\n const path = canonicalPath(input.capture.location.file);\n if (path === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"position-unrepresentable\" as const });\n }\n const text = input.local.get(path);\n const item = input.sources.files.get(path);\n if (text === undefined || item === undefined || item.text !== text) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"source-snapshot-not-recorded\" as const });\n }\n const position = coordinateFor(text, input.capture.location.line, input.capture.location.column);\n if (position === undefined) {\n return Object.freeze({ state: \"unmapped\" as const, reason: \"position-unrepresentable\" as const });\n }\n return Object.freeze({\n state: \"mapped\" as const,\n sourceItemId: item.sourceItemId,\n sha256: item.sha256,\n start: position,\n end: position,\n });\n}\n/**\n * Assembles the Attempt-owned storage-neutral context receipt from SessionManager's\n * physical-send capture and the same-seal immutable Sources closure.\n */\nexport function createRunnerTurnContextsAttachment(input: {\n readonly result: EvalResult;\n readonly sourcePlan: RunnerSourceWritePlan;\n}): Result.Result<RunnerTurnContextsAttachmentBuild | undefined, RunnerSourceProducerInvalid> {\n const capture = sourceCaptureForResult(input.result);\n if (capture === undefined) {\n return Result.fail(invalid(\"turn-contexts-invalid\"));\n }\n if (capture.sends.length === 0 && !capture.captureFailed) {\n return Result.succeed(undefined);\n }\n const sources = sourceManifestByPlan.get(input.sourcePlan);\n if (sources === undefined)\n return Result.fail(invalid(\"sources-closure-invalid\"));\n const local = localSourceTexts(input.result);\n // The family is ordered by session and physical turn, while sourceOrder\n // retains author invocation order when sends interleave across sessions.\n const segments = capture.sends.toSorted((left, right) => left.sessionIndex - right.sessionIndex || left.turnIndex - right.turnIndex).map((captured, index) => Object.freeze({\n segmentId: captured.segmentId,\n sequence: index + 1,\n turnId: captured.turnId,\n sessionIndex: captured.sessionIndex,\n turnIndex: captured.turnIndex,\n sourceOrder: captured.sourceOrder,\n source: turnContextSource({ capture: captured, local, sources }),\n }));\n const collection = capture.captureFailed\n ? (() => {\n const first: SourceReceiptLimitation = Object.freeze({\n code: \"capture-failed\" as const,\n stage: \"session-manager\" as const,\n target: \"turn-context\" as const,\n });\n const limitations: readonly [\n SourceReceiptLimitation,\n ...SourceReceiptLimitation[]\n ] = [first];\n return Object.freeze({ state: \"partial\" as const, limitations });\n })()\n : Object.freeze({ state: \"complete\" as const, limitations: [] as const });\n return Result.succeed((build) => {\n const candidate = Object.freeze({\n collection,\n segments: Object.freeze(segments.map((segment) => Object.freeze({\n ...segment,\n source: segment.source.state === \"unmapped\"\n ? segment.source\n : build.reference.to(sourcesRecordAttachment, segment.source),\n }))),\n });\n const decoded = Schema.decodeResult(Schema.toType(TurnContextsAttachmentSchema), RecordExactParseOptions)(candidate);\n if (Result.isFailure(decoded)) {\n throw new Error(\"Runner Turn Context capture violated its current schema\");\n }\n return decoded.success;\n });\n}\n"]}