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
@@ -11,6 +11,7 @@ class ProjectStateDatabase extends effect_1.Context.Service()("@niceeval/record/
11
11
  exports.ProjectStateDatabase = ProjectStateDatabase;
12
12
  function makeProjectStateResource() {
13
13
  let invocationPortableClosed = false;
14
+ let closing;
14
15
  let state = { kind: "unbound" };
15
16
  const currentState = () => state;
16
17
  const open = async (portableRoot) => {
@@ -68,10 +69,14 @@ function makeProjectStateResource() {
68
69
  if (state.kind === "open")
69
70
  return facets(state.client);
70
71
  if (state.kind === "opening") {
71
- return facets(await state.client);
72
+ const client = await state.client;
73
+ if (currentState().kind === "closed")
74
+ throw new Error("ProjectStateDatabase is closed");
75
+ return facets(client);
72
76
  }
73
- const pending = (0, client_ts_1.makeStorageWorkerClient)(portableRoot);
74
- state = { kind: "opening", root: portableRoot, client: pending };
77
+ const initialization = new AbortController();
78
+ const pending = (0, client_ts_1.makeStorageWorkerClient)(portableRoot, undefined, undefined, initialization.signal);
79
+ state = { kind: "opening", root: portableRoot, client: pending, initialization };
75
80
  try {
76
81
  const client = await pending;
77
82
  if (currentState().kind === "closed") {
@@ -87,16 +92,32 @@ function makeProjectStateResource() {
87
92
  throw cause;
88
93
  }
89
94
  };
90
- const close = async (expectedRoot) => {
95
+ const close = (expectedRoot) => {
91
96
  const current = state;
92
97
  if (expectedRoot !== undefined && current.kind !== "unbound" && current.kind !== "closed" && current.root !== expectedRoot) {
93
- throw new Error("ProjectStateDatabase is bound to another canonical root");
98
+ return Promise.reject(new Error("ProjectStateDatabase is bound to another canonical root"));
94
99
  }
100
+ if (closing !== undefined)
101
+ return closing;
95
102
  state = { kind: "closed" };
96
- if (current.kind === "open")
97
- await current.client.close();
103
+ const reason = new Error("ProjectStateDatabase closed while its storage worker was opening");
98
104
  if (current.kind === "opening")
99
- await (await current.client).close();
105
+ current.initialization.abort(reason);
106
+ closing = (async () => {
107
+ if (current.kind === "open")
108
+ await current.client.close();
109
+ if (current.kind === "opening") {
110
+ try {
111
+ await (await current.client).close();
112
+ }
113
+ catch (cause) {
114
+ // Only our initialization cancellation is expected during release.
115
+ if (cause !== reason)
116
+ throw cause;
117
+ }
118
+ }
119
+ })();
120
+ return closing;
100
121
  };
101
122
  return {
102
123
  service: ProjectStateDatabase.of({
@@ -1 +1 @@
1
- {"version":3,"file":"project-state-database.js","sourceRoot":"","sources":["project-state-database.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport { SqliteRecordError } from \"./errors.ts\";\nimport { makeStorageWorkerClient, type StorageWorkerClient } from \"./client.ts\";\nimport { finalizeInvocationPortable, recordSqlitePath } from \"./database.ts\";\nimport type { KeptSandboxLeaseRow, KeptSandboxRow, SharedStateGenerationRow, TeardownObligationRow, } from \"./registry-repository.ts\";\nconst OPERATION_DEADLINE_MS = 5000;\ntype CommandInput<Tag extends string, Input extends object = object> = Input & {\n readonly _tag: Tag;\n};\nexport interface TeardownFacet {\n readonly put: (input: CommandInput<\"teardown-put\", {\n readonly id: string;\n readonly experimentId: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly payload: Uint8Array;\n }>) => Promise<void>;\n readonly get: (id: string) => Promise<TeardownObligationRow | undefined>;\n readonly list: () => Promise<readonly TeardownObligationRow[]>;\n readonly claim: (id: string) => Promise<boolean>;\n}\nexport interface SharedStateFacet {\n readonly list: (key: string) => Promise<readonly SharedStateGenerationRow[]>;\n readonly append: (input: CommandInput<\"shared-append\", {\n readonly key: string;\n readonly expectedGeneration: number;\n readonly generation: number;\n readonly parentGeneration: number;\n readonly kind: \"active\" | \"recovering\" | \"free\";\n readonly ownerToken: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n readonly heartbeatAt: string;\n readonly payload: Uint8Array;\n }>) => Promise<boolean>;\n readonly heartbeat: (input: CommandInput<\"shared-heartbeat\", {\n readonly key: string;\n readonly generation: number;\n readonly ownerToken: string;\n readonly heartbeatAt: string;\n }>) => Promise<boolean>;\n}\nexport interface KeepFacet {\n readonly put: (input: CommandInput<\"keep-put\", {\n readonly id: string;\n readonly provider: string;\n readonly sandboxId: string;\n readonly keptAt: string;\n readonly payload: Uint8Array;\n }>) => Promise<void>;\n readonly get: (id: string) => Promise<KeptSandboxRow | undefined>;\n readonly list: () => Promise<readonly KeptSandboxRow[]>;\n readonly update: (id: string, payload: Uint8Array) => Promise<boolean>;\n readonly delete: (id: string) => Promise<void>;\n readonly getLease: (id: string) => Promise<KeptSandboxLeaseRow | undefined>;\n readonly acquireLease: (input: CommandInput<\"keep-lease-acquire\", {\n readonly id: string;\n readonly token: string;\n readonly holder: string;\n readonly operation: string;\n readonly acquiredAt: string;\n readonly ttlMs: number;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n }>) => Promise<{\n readonly acquired: true;\n readonly generation: number;\n } | {\n readonly acquired: false;\n readonly lease: KeptSandboxLeaseRow;\n }>;\n readonly releaseLease: (input: CommandInput<\"keep-lease-release\", {\n readonly id: string;\n readonly generation: number;\n readonly token: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n }>) => Promise<boolean>;\n}\nexport interface CaseCoordinationFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").CaseCoordinationCommand) => Promise<A>;\n}\nexport interface InvocationFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").InvocationCommand) => Promise<A>;\n}\nexport interface RunFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RunCommand) => Promise<A>;\n}\nexport interface AdmissionFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"../../coordination/platform/node-record-admission-protocol.ts\").AdmissionInput) => Promise<A>;\n}\nexport interface ProjectStateFacets {\n readonly record: StorageWorkerClient;\n readonly teardown: TeardownFacet;\n readonly sharedState: SharedStateFacet;\n readonly keep: KeepFacet;\n readonly caseCoordination: CaseCoordinationFacet;\n readonly invocation: InvocationFacet;\n readonly run: RunFacet;\n readonly admission: AdmissionFacet;\n}\nexport interface ProjectStateDatabaseService {\n /** Bind this composition's single storage worker to its one canonical root. */\n readonly bind: (portableRoot: string) => Effect.Effect<ProjectStateFacets, SqliteRecordError>;\n /** Invocation owner only: stop operational commands before its portable gate. */\n readonly closeOperational: (portableRoot: string) => Effect.Effect<void, SqliteRecordError>;\n /** Invocation outer owner only: operational shutdown followed by the unique portable gate. */\n readonly closeInvocationPortable: (portableRoot: string) => Effect.Effect<void, SqliteRecordError>;\n}\nexport class ProjectStateDatabase extends Context.Service<ProjectStateDatabase, ProjectStateDatabaseService>()(\"@niceeval/record/ProjectStateDatabase\") {\n}\ninterface ProjectStateResource {\n readonly service: ProjectStateDatabaseService;\n readonly close: () => Promise<void>;\n}\nfunction makeProjectStateResource(): ProjectStateResource {\n let invocationPortableClosed = false;\n let state: {\n readonly kind: \"unbound\";\n } | {\n readonly kind: \"opening\";\n readonly root: string;\n readonly client: Promise<StorageWorkerClient>;\n } | {\n readonly kind: \"open\";\n readonly root: string;\n readonly client: StorageWorkerClient;\n } | {\n readonly kind: \"closed\";\n } = { kind: \"unbound\" };\n const currentState = () => state;\n const open = async (portableRoot: string): Promise<ProjectStateFacets> => {\n if (state.kind === \"closed\")\n throw new Error(\"ProjectStateDatabase is closed\");\n if (state.kind !== \"unbound\" && state.root !== portableRoot) {\n throw new Error(\"ProjectStateDatabase is already bound to another canonical root\");\n }\n const facets = (client: StorageWorkerClient): ProjectStateFacets => {\n const execute = <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RegistryCommand) => client.registry<A>(command, Date.now() + OPERATION_DEADLINE_MS);\n const teardown: TeardownFacet = Object.freeze({\n put: (input: Parameters<TeardownFacet[\"put\"]>[0]) => execute<undefined>(input),\n get: (id: string) => execute<TeardownObligationRow | undefined>({ _tag: \"teardown-get\", id }),\n list: () => execute<readonly TeardownObligationRow[]>({ _tag: \"teardown-list\" }),\n claim: (id: string) => execute<boolean>({ _tag: \"teardown-claim\", id }),\n });\n const sharedState: SharedStateFacet = Object.freeze({\n list: (key: string) => execute<readonly SharedStateGenerationRow[]>({ _tag: \"shared-list\", key }),\n append: (input: Parameters<SharedStateFacet[\"append\"]>[0]) => execute<boolean>(input),\n heartbeat: (input: Parameters<SharedStateFacet[\"heartbeat\"]>[0]) => execute<boolean>(input),\n });\n const keep: KeepFacet = Object.freeze({\n put: (input: Parameters<KeepFacet[\"put\"]>[0]) => execute<undefined>(input),\n get: (id: string) => execute<KeptSandboxRow | undefined>({ _tag: \"keep-get\", id }),\n list: () => execute<readonly KeptSandboxRow[]>({ _tag: \"keep-list\" }),\n update: (id: string, payload: Uint8Array) => execute<boolean>({ _tag: \"keep-update\", id, payload }),\n delete: (id: string) => execute<undefined>({ _tag: \"keep-delete\", id }),\n getLease: (id: string) => execute<KeptSandboxLeaseRow | undefined>({ _tag: \"keep-lease-get\", id }),\n acquireLease: (input: Parameters<KeepFacet[\"acquireLease\"]>[0]) => execute<{\n readonly acquired: true;\n readonly generation: number;\n } | {\n readonly acquired: false;\n readonly lease: KeptSandboxLeaseRow;\n }>(input),\n releaseLease: (input: Parameters<KeepFacet[\"releaseLease\"]>[0]) => execute<boolean>(input),\n });\n const caseCoordination: CaseCoordinationFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").CaseCoordinationCommand) => client.caseCoordination<A>(command),\n });\n const invocation: InvocationFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").InvocationCommand) => client.invocation<A>(command),\n });\n const run: RunFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RunCommand) => client.run<A>(command),\n });\n const admission: AdmissionFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"../../coordination/platform/node-record-admission-protocol.ts\").AdmissionInput) => client.admission<A>(command),\n });\n return Object.freeze({\n record: client,\n teardown,\n sharedState,\n keep,\n caseCoordination,\n invocation,\n run,\n admission,\n });\n };\n if (state.kind === \"open\")\n return facets(state.client);\n if (state.kind === \"opening\") {\n return facets(await state.client);\n }\n const pending = makeStorageWorkerClient(portableRoot);\n state = { kind: \"opening\", root: portableRoot, client: pending };\n try {\n const client = await pending;\n if (currentState().kind === \"closed\") {\n await client.close();\n throw new Error(\"ProjectStateDatabase closed while its storage worker was opening\");\n }\n state = { kind: \"open\", root: portableRoot, client };\n return facets(client);\n }\n catch (cause) {\n if (currentState().kind !== \"closed\")\n state = { kind: \"unbound\" };\n throw cause;\n }\n };\n const close = async (expectedRoot?: string): Promise<void> => {\n const current = state;\n if (expectedRoot !== undefined && current.kind !== \"unbound\" && current.kind !== \"closed\" && current.root !== expectedRoot) {\n throw new Error(\"ProjectStateDatabase is bound to another canonical root\");\n }\n state = { kind: \"closed\" };\n if (current.kind === \"open\")\n await current.client.close();\n if (current.kind === \"opening\")\n await (await current.client).close();\n };\n return {\n service: ProjectStateDatabase.of({\n bind: (portableRoot) => Effect.tryPromise({\n try: () => open(portableRoot),\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"bind-project-state\", \"failed to bind ProjectStateDatabase\", { cause }),\n }),\n closeOperational: (portableRoot) => Effect.tryPromise({\n try: () => close(portableRoot),\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"close-project-state\", \"failed to close ProjectStateDatabase operational worker\", { cause }),\n }),\n closeInvocationPortable: (portableRoot) => Effect.tryPromise({\n try: async () => {\n if (invocationPortableClosed)\n return;\n await close(portableRoot);\n // Another Invocation may still own project-local work. In that case\n // the gate atomically restores `open`; the last Invocation to close\n // will retry portability after its own terminal writes.\n finalizeInvocationPortable(recordSqlitePath(portableRoot));\n invocationPortableClosed = true;\n },\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"close-invocation-portable\", \"failed to close the Invocation ProjectDatabase portable gate\", { cause }),\n }),\n }),\n close,\n };\n}\nexport const ProjectStateDatabaseLive = Layer.effect(ProjectStateDatabase, Effect.acquireRelease(Effect.sync(makeProjectStateResource), (resource) => Effect.promise(() => resource.close().catch(() => undefined))).pipe(Effect.map((resource) => resource.service)));\n"]}
1
+ {"version":3,"file":"project-state-database.js","sourceRoot":"","sources":["project-state-database.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport { SqliteRecordError } from \"./errors.ts\";\nimport { makeStorageWorkerClient, type StorageWorkerClient } from \"./client.ts\";\nimport { finalizeInvocationPortable, recordSqlitePath } from \"./database.ts\";\nimport type { KeptSandboxLeaseRow, KeptSandboxRow, SharedStateGenerationRow, TeardownObligationRow, } from \"./registry-repository.ts\";\nconst OPERATION_DEADLINE_MS = 5000;\ntype CommandInput<Tag extends string, Input extends object = object> = Input & {\n readonly _tag: Tag;\n};\nexport interface TeardownFacet {\n readonly put: (input: CommandInput<\"teardown-put\", {\n readonly id: string;\n readonly experimentId: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly payload: Uint8Array;\n }>) => Promise<void>;\n readonly get: (id: string) => Promise<TeardownObligationRow | undefined>;\n readonly list: () => Promise<readonly TeardownObligationRow[]>;\n readonly claim: (id: string) => Promise<boolean>;\n}\nexport interface SharedStateFacet {\n readonly list: (key: string) => Promise<readonly SharedStateGenerationRow[]>;\n readonly append: (input: CommandInput<\"shared-append\", {\n readonly key: string;\n readonly expectedGeneration: number;\n readonly generation: number;\n readonly parentGeneration: number;\n readonly kind: \"active\" | \"recovering\" | \"free\";\n readonly ownerToken: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n readonly heartbeatAt: string;\n readonly payload: Uint8Array;\n }>) => Promise<boolean>;\n readonly heartbeat: (input: CommandInput<\"shared-heartbeat\", {\n readonly key: string;\n readonly generation: number;\n readonly ownerToken: string;\n readonly heartbeatAt: string;\n }>) => Promise<boolean>;\n}\nexport interface KeepFacet {\n readonly put: (input: CommandInput<\"keep-put\", {\n readonly id: string;\n readonly provider: string;\n readonly sandboxId: string;\n readonly keptAt: string;\n readonly payload: Uint8Array;\n }>) => Promise<void>;\n readonly get: (id: string) => Promise<KeptSandboxRow | undefined>;\n readonly list: () => Promise<readonly KeptSandboxRow[]>;\n readonly update: (id: string, payload: Uint8Array) => Promise<boolean>;\n readonly delete: (id: string) => Promise<void>;\n readonly getLease: (id: string) => Promise<KeptSandboxLeaseRow | undefined>;\n readonly acquireLease: (input: CommandInput<\"keep-lease-acquire\", {\n readonly id: string;\n readonly token: string;\n readonly holder: string;\n readonly operation: string;\n readonly acquiredAt: string;\n readonly ttlMs: number;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n }>) => Promise<{\n readonly acquired: true;\n readonly generation: number;\n } | {\n readonly acquired: false;\n readonly lease: KeptSandboxLeaseRow;\n }>;\n readonly releaseLease: (input: CommandInput<\"keep-lease-release\", {\n readonly id: string;\n readonly generation: number;\n readonly token: string;\n readonly ownerPid: number;\n readonly ownerHost: string;\n readonly ownerProcessIdentity: string;\n }>) => Promise<boolean>;\n}\nexport interface CaseCoordinationFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").CaseCoordinationCommand) => Promise<A>;\n}\nexport interface InvocationFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").InvocationCommand) => Promise<A>;\n}\nexport interface RunFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RunCommand) => Promise<A>;\n}\nexport interface AdmissionFacet {\n readonly execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"../../coordination/platform/node-record-admission-protocol.ts\").AdmissionInput) => Promise<A>;\n}\nexport interface ProjectStateFacets {\n readonly record: StorageWorkerClient;\n readonly teardown: TeardownFacet;\n readonly sharedState: SharedStateFacet;\n readonly keep: KeepFacet;\n readonly caseCoordination: CaseCoordinationFacet;\n readonly invocation: InvocationFacet;\n readonly run: RunFacet;\n readonly admission: AdmissionFacet;\n}\nexport interface ProjectStateDatabaseService {\n /** Bind this composition's single storage worker to its one canonical root. */\n readonly bind: (portableRoot: string) => Effect.Effect<ProjectStateFacets, SqliteRecordError>;\n /** Invocation owner only: stop operational commands before its portable gate. */\n readonly closeOperational: (portableRoot: string) => Effect.Effect<void, SqliteRecordError>;\n /** Invocation outer owner only: operational shutdown followed by the unique portable gate. */\n readonly closeInvocationPortable: (portableRoot: string) => Effect.Effect<void, SqliteRecordError>;\n}\nexport class ProjectStateDatabase extends Context.Service<ProjectStateDatabase, ProjectStateDatabaseService>()(\"@niceeval/record/ProjectStateDatabase\") {\n}\ninterface ProjectStateResource {\n readonly service: ProjectStateDatabaseService;\n readonly close: () => Promise<void>;\n}\nfunction makeProjectStateResource(): ProjectStateResource {\n let invocationPortableClosed = false;\n let closing: Promise<void> | undefined;\n let state: {\n readonly kind: \"unbound\";\n } | {\n readonly kind: \"opening\";\n readonly root: string;\n readonly client: Promise<StorageWorkerClient>;\n readonly initialization: AbortController;\n } | {\n readonly kind: \"open\";\n readonly root: string;\n readonly client: StorageWorkerClient;\n } | {\n readonly kind: \"closed\";\n } = { kind: \"unbound\" };\n const currentState = () => state;\n const open = async (portableRoot: string): Promise<ProjectStateFacets> => {\n if (state.kind === \"closed\")\n throw new Error(\"ProjectStateDatabase is closed\");\n if (state.kind !== \"unbound\" && state.root !== portableRoot) {\n throw new Error(\"ProjectStateDatabase is already bound to another canonical root\");\n }\n const facets = (client: StorageWorkerClient): ProjectStateFacets => {\n const execute = <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RegistryCommand) => client.registry<A>(command, Date.now() + OPERATION_DEADLINE_MS);\n const teardown: TeardownFacet = Object.freeze({\n put: (input: Parameters<TeardownFacet[\"put\"]>[0]) => execute<undefined>(input),\n get: (id: string) => execute<TeardownObligationRow | undefined>({ _tag: \"teardown-get\", id }),\n list: () => execute<readonly TeardownObligationRow[]>({ _tag: \"teardown-list\" }),\n claim: (id: string) => execute<boolean>({ _tag: \"teardown-claim\", id }),\n });\n const sharedState: SharedStateFacet = Object.freeze({\n list: (key: string) => execute<readonly SharedStateGenerationRow[]>({ _tag: \"shared-list\", key }),\n append: (input: Parameters<SharedStateFacet[\"append\"]>[0]) => execute<boolean>(input),\n heartbeat: (input: Parameters<SharedStateFacet[\"heartbeat\"]>[0]) => execute<boolean>(input),\n });\n const keep: KeepFacet = Object.freeze({\n put: (input: Parameters<KeepFacet[\"put\"]>[0]) => execute<undefined>(input),\n get: (id: string) => execute<KeptSandboxRow | undefined>({ _tag: \"keep-get\", id }),\n list: () => execute<readonly KeptSandboxRow[]>({ _tag: \"keep-list\" }),\n update: (id: string, payload: Uint8Array) => execute<boolean>({ _tag: \"keep-update\", id, payload }),\n delete: (id: string) => execute<undefined>({ _tag: \"keep-delete\", id }),\n getLease: (id: string) => execute<KeptSandboxLeaseRow | undefined>({ _tag: \"keep-lease-get\", id }),\n acquireLease: (input: Parameters<KeepFacet[\"acquireLease\"]>[0]) => execute<{\n readonly acquired: true;\n readonly generation: number;\n } | {\n readonly acquired: false;\n readonly lease: KeptSandboxLeaseRow;\n }>(input),\n releaseLease: (input: Parameters<KeepFacet[\"releaseLease\"]>[0]) => execute<boolean>(input),\n });\n const caseCoordination: CaseCoordinationFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").CaseCoordinationCommand) => client.caseCoordination<A>(command),\n });\n const invocation: InvocationFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").InvocationCommand) => client.invocation<A>(command),\n });\n const run: RunFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"./worker-protocol.ts\").RunCommand) => client.run<A>(command),\n });\n const admission: AdmissionFacet = Object.freeze({\n execute: <A extends import(\"./worker-protocol.ts\").StorageWorkerResult>(command: import(\"../../coordination/platform/node-record-admission-protocol.ts\").AdmissionInput) => client.admission<A>(command),\n });\n return Object.freeze({\n record: client,\n teardown,\n sharedState,\n keep,\n caseCoordination,\n invocation,\n run,\n admission,\n });\n };\n if (state.kind === \"open\")\n return facets(state.client);\n if (state.kind === \"opening\") {\n const client = await state.client;\n if (currentState().kind === \"closed\")\n throw new Error(\"ProjectStateDatabase is closed\");\n return facets(client);\n }\n const initialization = new AbortController();\n const pending = makeStorageWorkerClient(portableRoot, undefined, undefined, initialization.signal);\n state = { kind: \"opening\", root: portableRoot, client: pending, initialization };\n try {\n const client = await pending;\n if (currentState().kind === \"closed\") {\n await client.close();\n throw new Error(\"ProjectStateDatabase closed while its storage worker was opening\");\n }\n state = { kind: \"open\", root: portableRoot, client };\n return facets(client);\n }\n catch (cause) {\n if (currentState().kind !== \"closed\")\n state = { kind: \"unbound\" };\n throw cause;\n }\n };\n const close = (expectedRoot?: string): Promise<void> => {\n const current = state;\n if (expectedRoot !== undefined && current.kind !== \"unbound\" && current.kind !== \"closed\" && current.root !== expectedRoot) {\n return Promise.reject(new Error(\"ProjectStateDatabase is bound to another canonical root\"));\n }\n if (closing !== undefined)\n return closing;\n state = { kind: \"closed\" };\n const reason = new Error(\"ProjectStateDatabase closed while its storage worker was opening\");\n if (current.kind === \"opening\")\n current.initialization.abort(reason);\n closing = (async () => {\n if (current.kind === \"open\")\n await current.client.close();\n if (current.kind === \"opening\") {\n try {\n await (await current.client).close();\n }\n catch (cause) {\n // Only our initialization cancellation is expected during release.\n if (cause !== reason)\n throw cause;\n }\n }\n })();\n return closing;\n };\n return {\n service: ProjectStateDatabase.of({\n bind: (portableRoot) => Effect.tryPromise({\n try: () => open(portableRoot),\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"bind-project-state\", \"failed to bind ProjectStateDatabase\", { cause }),\n }),\n closeOperational: (portableRoot) => Effect.tryPromise({\n try: () => close(portableRoot),\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"close-project-state\", \"failed to close ProjectStateDatabase operational worker\", { cause }),\n }),\n closeInvocationPortable: (portableRoot) => Effect.tryPromise({\n try: async () => {\n if (invocationPortableClosed)\n return;\n await close(portableRoot);\n // Another Invocation may still own project-local work. In that case\n // the gate atomically restores `open`; the last Invocation to close\n // will retry portability after its own terminal writes.\n finalizeInvocationPortable(recordSqlitePath(portableRoot));\n invocationPortableClosed = true;\n },\n catch: (cause) => cause instanceof SqliteRecordError\n ? cause\n : new SqliteRecordError(\"record-sqlite-error\", \"close-invocation-portable\", \"failed to close the Invocation ProjectDatabase portable gate\", { cause }),\n }),\n }),\n close,\n };\n}\nexport const ProjectStateDatabaseLive = Layer.effect(ProjectStateDatabase, Effect.acquireRelease(Effect.sync(makeProjectStateResource), (resource) => Effect.promise(() => resource.close().catch(() => undefined))).pipe(Effect.map((resource) => resource.service)));\n"]}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rawRunHost = void 0;
4
+ // @concord-file ne-run-host-runtime
5
+ // @concord-implements docs/feature/run/library.md
6
+ // @concord-implements docs/feature/run/cli.md
7
+ // @concord-implements docs/feature/inspection/architecture.md
4
8
  const node_fs_1 = require("node:fs");
5
9
  const node_path_1 = require("node:path");
6
10
  const effect_1 = require("effect");
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Effect, Result, Schema } from \"effect\";\nimport { RunIdSchema } from \"../../record/codec/identifiers.ts\";\nimport type { ProjectStateDatabase } from \"../../record/sqlite/project-state-database.ts\";\nimport { acquireProjectRecordReadSession } from \"../../record/sqlite/index.ts\";\nimport { EMPTY_PUBLICATION_CUTOFF_IDENTITY } from \"../protocol.ts\";\nimport { publicationCutoffIdentity, type PublicationCutoff, type ReadableRunResource, } from \"../storage/index.ts\";\nimport { sqliteRunLifecycleAdapter, type RunLifecycleAdapter, } from \"./lifecycle-adapter.ts\";\nimport { RunDeleteError, RunReadError, RunRecoverError, type RunDeleteReceipt, type RunDetail, type RunDeleteRequest, type RunGetRequest, type RunListRequest, type RunListResult, type RunRecoverReceipt, type RunRecoverRequest, type RunResult, type RunSummary, } from \"./types.ts\";\nconst CONTINUATION_PROTOCOL = \"niceeval.run-continuation/v1\";\nconst EMPTY_CUTOFF = Object.freeze({\n identity: EMPTY_PUBLICATION_CUTOFF_IDENTITY,\n revision: 0,\n});\nfunction readFailure(operation: \"list\" | \"get\", cause: unknown): RunReadError {\n const message = cause instanceof Error\n ? cause.message\n : `Run ${operation} failed.`;\n return new RunReadError({\n operation,\n code: \"run-read-failed\",\n message,\n cause,\n });\n}\nfunction recordStorageRoot(cwd: string): string {\n return resolve(cwd, \".niceeval\");\n}\nfunction recordDatabaseExists(cwd: string): boolean {\n return existsSync(resolve(recordStorageRoot(cwd), \"record.sqlite\"));\n}\ninterface RawRunHost {\n readonly list: (request: RunListRequest) => Effect.Effect<RunListResult, RunReadError, ProjectStateDatabase>;\n readonly get: (request: RunGetRequest) => Effect.Effect<RunResult, RunReadError, ProjectStateDatabase>;\n readonly delete: (request: RunDeleteRequest) => Effect.Effect<RunDeleteReceipt, RunDeleteError, ProjectStateDatabase>;\n readonly recover: (request: RunRecoverRequest) => Effect.Effect<RunRecoverReceipt, RunRecoverError, ProjectStateDatabase>;\n}\nfunction publicCutoff(cutoff: PublicationCutoff) {\n return Object.freeze({\n identity: publicationCutoffIdentity(cutoff),\n revision: cutoff.revision,\n });\n}\nfunction projectSummary(run: ReadableRunResource): RunSummary {\n return Object.freeze({\n runId: run.runId,\n invocationId: run.invocationId,\n experimentId: run.experimentId,\n state: run.state,\n startedAt: run.startedAt,\n ...(run.completedAt === undefined ? {} : { completedAt: run.completedAt }),\n coverage: Object.freeze({\n published: run.published,\n expected: run.expected,\n missing: run.missing,\n }),\n });\n}\nfunction projectDetail(run: ReadableRunResource): RunDetail {\n return Object.freeze({\n ...projectSummary(run),\n slots: Object.freeze(run.slots.map((slot) => Object.freeze({\n slotId: slot.slotId,\n evalId: slot.evalId,\n attemptOrdinal: slot.attemptOrdinal,\n executionIdentityDigest: slot.executionIdentityDigest,\n publication: slot.publication.state === \"published\"\n ? Object.freeze({\n state: \"published\" as const,\n action: slot.publication.action,\n attemptId: slot.publication.attemptId,\n attemptLocator: slot.publication.attemptLocator,\n originRunId: slot.publication.originRunId,\n originSlotId: slot.publication.originSlotId,\n })\n : slot.publication.state === \"absent\"\n ? Object.freeze({ state: \"absent\" as const, reason: slot.publication.reason })\n : Object.freeze({ state: \"pending\" as const }),\n }))),\n });\n}\nfunction encodeContinuation(cutoff: PublicationCutoff, afterRunId: string, invocationId: string | undefined): string {\n return Buffer.from(JSON.stringify([\n CONTINUATION_PROTOCOL,\n cutoff.storeGeneration,\n cutoff.revision,\n afterRunId,\n invocationId ?? null,\n ]), \"utf8\").toString(\"base64url\");\n}\nfunction decodeContinuation(token: string, invocationId: string | undefined): Effect.Effect<{\n readonly cutoff: PublicationCutoff;\n readonly afterRunId: string;\n}, RunReadError> {\n return Effect.try({\n try: () => {\n const value = JSON.parse(Buffer.from(token, \"base64url\").toString(\"utf8\")) as unknown;\n if (!Array.isArray(value) || value.length !== 5 || value[0] !== CONTINUATION_PROTOCOL ||\n typeof value[1] !== \"string\" || !Number.isSafeInteger(value[2]) || Number(value[2]) < 0 ||\n typeof value[3] !== \"string\" || (value[4] !== null && typeof value[4] !== \"string\") ||\n value[4] !== (invocationId ?? null)) {\n throw new Error(\"Run continuation binding is invalid.\");\n }\n return Object.freeze({\n cutoff: Object.freeze({ storeGeneration: value[1], revision: Number(value[2]) }),\n afterRunId: value[3],\n });\n },\n catch: (cause) => new RunReadError({\n operation: \"list\",\n code: \"run-continuation-invalid\",\n message: \"Run continuation is invalid or belongs to a different filter.\",\n cause,\n }),\n });\n}\nfunction decodeRunId(value: string): Result.Result<Schema.Schema.Type<typeof RunIdSchema>, string> {\n const decoded = Schema.decodeUnknownResult(RunIdSchema)(value);\n return Result.isFailure(decoded)\n ? Result.fail(`Invalid exact Run ID ${JSON.stringify(value)}.`)\n : Result.succeed(decoded.success);\n}\nfunction makeRunHost(lifecycle: RunLifecycleAdapter): RawRunHost {\n const list: RawRunHost[\"list\"] = (request) => {\n if (!recordDatabaseExists(request.cwd)) {\n return Effect.succeed(Object.freeze({\n operation: \"run.list\" as const,\n publicationCutoff: EMPTY_CUTOFF,\n runs: Object.freeze([]),\n }));\n }\n return Effect.gen(function* () {\n const continuation = request.continuation === undefined\n ? undefined\n : yield* decodeContinuation(request.continuation, request.invocationId);\n const session = yield* acquireProjectRecordReadSession(recordStorageRoot(request.cwd));\n const page = yield* Effect.try({ try: () => session.listRunResources({\n ...(continuation === undefined ? {} : {\n cutoff: continuation.cutoff,\n afterRunId: continuation.afterRunId,\n }),\n ...(request.invocationId === undefined ? {} : { invocationId: request.invocationId }),\n }), catch: (cause) => cause });\n return Object.freeze({\n operation: \"run.list\" as const,\n publicationCutoff: publicCutoff(page.cutoff),\n runs: Object.freeze(page.runs.map(projectSummary)),\n ...(page.nextAfterRunId === null ? {} : {\n continuation: encodeContinuation(page.cutoff, page.nextAfterRunId, request.invocationId),\n }),\n });\n }).pipe(Effect.scoped, Effect.mapError((cause) => cause instanceof RunReadError ? cause : readFailure(\"list\", cause)));\n };\n const get: RawRunHost[\"get\"] = (request) => {\n const runId = decodeRunId(request.runId);\n if (Result.isFailure(runId)) {\n return Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }));\n }\n if (!recordDatabaseExists(request.cwd)) {\n return Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-not-found\",\n message: `Run ${runId.success} was not found.`,\n }));\n }\n return Effect.gen(function* () {\n const root = recordStorageRoot(request.cwd);\n const session = yield* acquireProjectRecordReadSession(root);\n const cutoff = yield* Effect.try({ try: () => session.publicationCutoff(), catch: (cause) => cause });\n const run = yield* Effect.try({ try: () => session.readRunResource(runId.success), catch: (cause) => cause });\n if (run === undefined) {\n return yield* Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-not-found\",\n message: `Run ${runId.success} was not found.`,\n }));\n }\n return Object.freeze({\n operation: \"run.get\" as const,\n publicationCutoff: publicCutoff(cutoff),\n run: projectDetail(run),\n });\n }).pipe(Effect.scoped, Effect.mapError((cause) => cause instanceof RunReadError ? cause : readFailure(\"get\", cause)));\n };\n const deleteRun: RawRunHost[\"delete\"] = (request) => {\n const runId = decodeRunId(request.runId);\n return Result.isFailure(runId)\n ? Effect.fail(new RunDeleteError({\n operation: \"delete\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }))\n : lifecycle.delete({ cwd: request.cwd, runId: runId.success });\n };\n const recover: RawRunHost[\"recover\"] = (request) => {\n const runId = decodeRunId(request.runId);\n return Result.isFailure(runId)\n ? Effect.fail(new RunRecoverError({\n operation: \"recover\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }))\n : lifecycle.recover({ cwd: request.cwd, runId: runId.success });\n };\n return Object.freeze({ list, get, delete: deleteRun, recover });\n}\nexport const rawRunHost: RawRunHost = makeRunHost(sqliteRunLifecycleAdapter);\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-run-host-runtime\n// @concord-implements docs/feature/run/library.md\n// @concord-implements docs/feature/run/cli.md\n// @concord-implements docs/feature/inspection/architecture.md\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Effect, Result, Schema } from \"effect\";\nimport { RunIdSchema } from \"../../record/codec/identifiers.ts\";\nimport type { ProjectStateDatabase } from \"../../record/sqlite/project-state-database.ts\";\nimport { acquireProjectRecordReadSession } from \"../../record/sqlite/index.ts\";\nimport { EMPTY_PUBLICATION_CUTOFF_IDENTITY } from \"../protocol.ts\";\nimport { publicationCutoffIdentity, type PublicationCutoff, type ReadableRunResource, } from \"../storage/index.ts\";\nimport { sqliteRunLifecycleAdapter, type RunLifecycleAdapter, } from \"./lifecycle-adapter.ts\";\nimport { RunDeleteError, RunReadError, RunRecoverError, type RunDeleteReceipt, type RunDetail, type RunDeleteRequest, type RunGetRequest, type RunListRequest, type RunListResult, type RunRecoverReceipt, type RunRecoverRequest, type RunResult, type RunSummary, } from \"./types.ts\";\nconst CONTINUATION_PROTOCOL = \"niceeval.run-continuation/v1\";\nconst EMPTY_CUTOFF = Object.freeze({\n identity: EMPTY_PUBLICATION_CUTOFF_IDENTITY,\n revision: 0,\n});\nfunction readFailure(operation: \"list\" | \"get\", cause: unknown): RunReadError {\n const message = cause instanceof Error\n ? cause.message\n : `Run ${operation} failed.`;\n return new RunReadError({\n operation,\n code: \"run-read-failed\",\n message,\n cause,\n });\n}\nfunction recordStorageRoot(cwd: string): string {\n return resolve(cwd, \".niceeval\");\n}\nfunction recordDatabaseExists(cwd: string): boolean {\n return existsSync(resolve(recordStorageRoot(cwd), \"record.sqlite\"));\n}\ninterface RawRunHost {\n readonly list: (request: RunListRequest) => Effect.Effect<RunListResult, RunReadError, ProjectStateDatabase>;\n readonly get: (request: RunGetRequest) => Effect.Effect<RunResult, RunReadError, ProjectStateDatabase>;\n readonly delete: (request: RunDeleteRequest) => Effect.Effect<RunDeleteReceipt, RunDeleteError, ProjectStateDatabase>;\n readonly recover: (request: RunRecoverRequest) => Effect.Effect<RunRecoverReceipt, RunRecoverError, ProjectStateDatabase>;\n}\nfunction publicCutoff(cutoff: PublicationCutoff) {\n return Object.freeze({\n identity: publicationCutoffIdentity(cutoff),\n revision: cutoff.revision,\n });\n}\nfunction projectSummary(run: ReadableRunResource): RunSummary {\n return Object.freeze({\n runId: run.runId,\n invocationId: run.invocationId,\n experimentId: run.experimentId,\n state: run.state,\n startedAt: run.startedAt,\n ...(run.completedAt === undefined ? {} : { completedAt: run.completedAt }),\n coverage: Object.freeze({\n published: run.published,\n expected: run.expected,\n missing: run.missing,\n }),\n });\n}\nfunction projectDetail(run: ReadableRunResource): RunDetail {\n return Object.freeze({\n ...projectSummary(run),\n slots: Object.freeze(run.slots.map((slot) => Object.freeze({\n slotId: slot.slotId,\n evalId: slot.evalId,\n attemptOrdinal: slot.attemptOrdinal,\n executionIdentityDigest: slot.executionIdentityDigest,\n publication: slot.publication.state === \"published\"\n ? Object.freeze({\n state: \"published\" as const,\n action: slot.publication.action,\n attemptId: slot.publication.attemptId,\n attemptLocator: slot.publication.attemptLocator,\n originRunId: slot.publication.originRunId,\n originSlotId: slot.publication.originSlotId,\n })\n : slot.publication.state === \"absent\"\n ? Object.freeze({ state: \"absent\" as const, reason: slot.publication.reason })\n : Object.freeze({ state: \"pending\" as const }),\n }))),\n });\n}\nfunction encodeContinuation(cutoff: PublicationCutoff, afterRunId: string, invocationId: string | undefined): string {\n return Buffer.from(JSON.stringify([\n CONTINUATION_PROTOCOL,\n cutoff.storeGeneration,\n cutoff.revision,\n afterRunId,\n invocationId ?? null,\n ]), \"utf8\").toString(\"base64url\");\n}\nfunction decodeContinuation(token: string, invocationId: string | undefined): Effect.Effect<{\n readonly cutoff: PublicationCutoff;\n readonly afterRunId: string;\n}, RunReadError> {\n return Effect.try({\n try: () => {\n const value = JSON.parse(Buffer.from(token, \"base64url\").toString(\"utf8\")) as unknown;\n if (!Array.isArray(value) || value.length !== 5 || value[0] !== CONTINUATION_PROTOCOL ||\n typeof value[1] !== \"string\" || !Number.isSafeInteger(value[2]) || Number(value[2]) < 0 ||\n typeof value[3] !== \"string\" || (value[4] !== null && typeof value[4] !== \"string\") ||\n value[4] !== (invocationId ?? null)) {\n throw new Error(\"Run continuation binding is invalid.\");\n }\n return Object.freeze({\n cutoff: Object.freeze({ storeGeneration: value[1], revision: Number(value[2]) }),\n afterRunId: value[3],\n });\n },\n catch: (cause) => new RunReadError({\n operation: \"list\",\n code: \"run-continuation-invalid\",\n message: \"Run continuation is invalid or belongs to a different filter.\",\n cause,\n }),\n });\n}\nfunction decodeRunId(value: string): Result.Result<Schema.Schema.Type<typeof RunIdSchema>, string> {\n const decoded = Schema.decodeUnknownResult(RunIdSchema)(value);\n return Result.isFailure(decoded)\n ? Result.fail(`Invalid exact Run ID ${JSON.stringify(value)}.`)\n : Result.succeed(decoded.success);\n}\nfunction makeRunHost(lifecycle: RunLifecycleAdapter): RawRunHost {\n const list: RawRunHost[\"list\"] = (request) => {\n if (!recordDatabaseExists(request.cwd)) {\n return Effect.succeed(Object.freeze({\n operation: \"run.list\" as const,\n publicationCutoff: EMPTY_CUTOFF,\n runs: Object.freeze([]),\n }));\n }\n return Effect.gen(function* () {\n const continuation = request.continuation === undefined\n ? undefined\n : yield* decodeContinuation(request.continuation, request.invocationId);\n const session = yield* acquireProjectRecordReadSession(recordStorageRoot(request.cwd));\n const page = yield* Effect.try({ try: () => session.listRunResources({\n ...(continuation === undefined ? {} : {\n cutoff: continuation.cutoff,\n afterRunId: continuation.afterRunId,\n }),\n ...(request.invocationId === undefined ? {} : { invocationId: request.invocationId }),\n }), catch: (cause) => cause });\n return Object.freeze({\n operation: \"run.list\" as const,\n publicationCutoff: publicCutoff(page.cutoff),\n runs: Object.freeze(page.runs.map(projectSummary)),\n ...(page.nextAfterRunId === null ? {} : {\n continuation: encodeContinuation(page.cutoff, page.nextAfterRunId, request.invocationId),\n }),\n });\n }).pipe(Effect.scoped, Effect.mapError((cause) => cause instanceof RunReadError ? cause : readFailure(\"list\", cause)));\n };\n const get: RawRunHost[\"get\"] = (request) => {\n const runId = decodeRunId(request.runId);\n if (Result.isFailure(runId)) {\n return Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }));\n }\n if (!recordDatabaseExists(request.cwd)) {\n return Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-not-found\",\n message: `Run ${runId.success} was not found.`,\n }));\n }\n return Effect.gen(function* () {\n const root = recordStorageRoot(request.cwd);\n const session = yield* acquireProjectRecordReadSession(root);\n const cutoff = yield* Effect.try({ try: () => session.publicationCutoff(), catch: (cause) => cause });\n const run = yield* Effect.try({ try: () => session.readRunResource(runId.success), catch: (cause) => cause });\n if (run === undefined) {\n return yield* Effect.fail(new RunReadError({\n operation: \"get\",\n code: \"run-not-found\",\n message: `Run ${runId.success} was not found.`,\n }));\n }\n return Object.freeze({\n operation: \"run.get\" as const,\n publicationCutoff: publicCutoff(cutoff),\n run: projectDetail(run),\n });\n }).pipe(Effect.scoped, Effect.mapError((cause) => cause instanceof RunReadError ? cause : readFailure(\"get\", cause)));\n };\n const deleteRun: RawRunHost[\"delete\"] = (request) => {\n const runId = decodeRunId(request.runId);\n return Result.isFailure(runId)\n ? Effect.fail(new RunDeleteError({\n operation: \"delete\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }))\n : lifecycle.delete({ cwd: request.cwd, runId: runId.success });\n };\n const recover: RawRunHost[\"recover\"] = (request) => {\n const runId = decodeRunId(request.runId);\n return Result.isFailure(runId)\n ? Effect.fail(new RunRecoverError({\n operation: \"recover\",\n code: \"run-id-invalid\",\n message: runId.failure,\n }))\n : lifecycle.recover({ cwd: request.cwd, runId: runId.success });\n };\n return Object.freeze({ list, get, delete: deleteRun, recover });\n}\nexport const rawRunHost: RawRunHost = makeRunHost(sqliteRunLifecycleAdapter);\n"]}
@@ -21,6 +21,10 @@ exports.readRunResource = readRunResource;
21
21
  exports.listRunResources = listRunResources;
22
22
  exports.readPublishedAttempt = readPublishedAttempt;
23
23
  exports.asRunStorageError = asRunStorageError;
24
+ // @concord-file ne-run-storage-sqlite
25
+ // @concord-implements docs/feature/run/architecture.md
26
+ // @concord-implements docs/feature/run/lifecycle.md
27
+ // @concord-implements docs/feature/run-inspection/README.md
24
28
  const node_crypto_1 = require("node:crypto");
25
29
  const effect_1 = require("effect");
26
30
  const locator_ts_1 = require("../../record/locator.cjs");
@@ -186,6 +190,9 @@ function validateExpectedSlots(slots) {
186
190
  function currentPublicationCutoffOnConnection(connection) {
187
191
  return requireCutoff(connection);
188
192
  }
193
+ // @concord-code ne-run-create-resource
194
+ // @concord-implements docs/feature/run/architecture.md
195
+ // @concord-implements docs/feature/run/lifecycle.md
189
196
  function createRunResourceOnConnection(connection, input) {
190
197
  requireIdentity(input.runId, "runId");
191
198
  requireIdentity(input.invocationId, "invocationId");
@@ -211,6 +218,9 @@ function createRunResourceOnConnection(connection, input) {
211
218
  return Object.freeze({ runId: input.runId, cutoff: cutoffAt(connection, revision) });
212
219
  });
213
220
  }
221
+ // @concord-code ne-run-publish-origin-attempt
222
+ // @concord-implements docs/feature/run/architecture.md
223
+ // @concord-implements docs/feature/run/lifecycle.md
214
224
  function publishOriginAttemptOnConnection(connection, input) {
215
225
  requireIdentity(input.runId, "runId");
216
226
  requireIdentity(input.writerGeneration, "writerGeneration");
@@ -275,6 +285,8 @@ function publishOriginAttemptOnConnection(connection, input) {
275
285
  });
276
286
  });
277
287
  }
288
+ // @concord-code ne-run-bind-attempt-reference
289
+ // @concord-implements docs/feature/run/architecture.md
278
290
  function bindAttemptReferenceOnConnection(connection, input) {
279
291
  requireIdentity(input.runId, "runId");
280
292
  requireIdentity(input.writerGeneration, "writerGeneration");
@@ -339,6 +351,9 @@ function insertAbsences(connection, runId, revision, absences) {
339
351
  for (const absence of absences)
340
352
  insert.run(runId, absence.slotId, absence.reason, revision);
341
353
  }
354
+ // @concord-code ne-run-close-resource
355
+ // @concord-implements docs/feature/run/architecture.md
356
+ // @concord-implements docs/feature/run/lifecycle.md
342
357
  function closeRunResourceOnConnection(connection, input) {
343
358
  requireTerminalState(input.state);
344
359
  requireIsoInstant(input.completedAt, "completedAt");
@@ -364,6 +379,8 @@ function closeRunResourceOnConnection(connection, input) {
364
379
  return Object.freeze({ runId: input.runId, cutoff: cutoffAt(connection, revision) });
365
380
  });
366
381
  }
382
+ // @concord-code ne-run-recover-resource
383
+ // @concord-implements docs/feature/run/lifecycle.md
367
384
  function recoverRunResourceOnConnection(connection, input) {
368
385
  requireIdentity(input.runId, "runId");
369
386
  requireIdentity(input.expectedWriterGeneration, "expectedWriterGeneration");
@@ -423,6 +440,9 @@ function incomingReferences(connection, originRunId) {
423
440
  attemptLocator: text(row, "attempt_locator"),
424
441
  })));
425
442
  }
443
+ // @concord-code ne-run-delete-resource
444
+ // @concord-implements docs/feature/run/architecture.md
445
+ // @concord-implements docs/feature/run/lifecycle.md
426
446
  function deleteRunResourceOnConnection(connection, input) {
427
447
  requireIdentity(input.runId, "runId");
428
448
  requireTerminalState(input.expectedState);