voratiq 0.1.0-beta.2 → 0.1.0-beta.21

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 (527) hide show
  1. package/README.md +41 -29
  2. package/dist/agents/launch/chat.d.ts +23 -0
  3. package/dist/agents/launch/chat.js +44 -0
  4. package/dist/agents/launch/environment.d.ts +8 -0
  5. package/dist/{commands/run/agents/workspace-prep.js → agents/launch/environment.js} +5 -27
  6. package/dist/agents/launch/prompt.d.ts +6 -0
  7. package/dist/agents/launch/prompt.js +12 -0
  8. package/dist/agents/launch/provider-state.d.ts +39 -0
  9. package/dist/agents/launch/provider-state.js +103 -0
  10. package/dist/agents/runtime/auth.d.ts +27 -0
  11. package/dist/agents/runtime/auth.js +72 -0
  12. package/dist/agents/runtime/chat.d.ts +5 -0
  13. package/dist/agents/runtime/chat.js +7 -0
  14. package/dist/agents/runtime/errors.d.ts +27 -0
  15. package/dist/agents/runtime/errors.js +51 -0
  16. package/dist/{commands/run/agents → agents/runtime}/failures.d.ts +0 -1
  17. package/dist/agents/runtime/failures.js +136 -0
  18. package/dist/agents/runtime/harness.d.ts +2 -0
  19. package/dist/agents/runtime/harness.js +119 -0
  20. package/dist/{commands/run/agents/sandbox-launcher.d.ts → agents/runtime/launcher.d.ts} +18 -6
  21. package/dist/{commands/run/agents/sandbox-launcher.js → agents/runtime/launcher.js} +17 -39
  22. package/dist/{commands/run/agents/workspace-prep.d.ts → agents/runtime/manifest.d.ts} +6 -6
  23. package/dist/agents/runtime/manifest.js +34 -0
  24. package/dist/agents/runtime/policy.d.ts +32 -0
  25. package/dist/agents/runtime/policy.js +240 -0
  26. package/dist/agents/runtime/registry.d.ts +4 -0
  27. package/dist/agents/runtime/registry.js +54 -0
  28. package/dist/{commands/run → agents/runtime}/sandbox.d.ts +8 -2
  29. package/dist/{commands/run → agents/runtime}/sandbox.js +28 -67
  30. package/dist/agents/runtime/shim/run-agent-shim.d.ts +1 -0
  31. package/dist/agents/runtime/shim/run-agent-shim.js +276 -0
  32. package/dist/agents/runtime/types.d.ts +91 -0
  33. package/dist/{commands/run/agents → agents/runtime}/watchdog.d.ts +4 -3
  34. package/dist/{commands/run/agents → agents/runtime}/watchdog.js +155 -26
  35. package/dist/auth/providers/codex.js +7 -2
  36. package/dist/auth/providers/gemini.js +14 -6
  37. package/dist/auth/providers/types.d.ts +1 -0
  38. package/dist/auth/providers/utils.d.ts +0 -1
  39. package/dist/auth/providers/utils.js +1 -49
  40. package/dist/bin.js +369 -71
  41. package/dist/cli/apply.d.ts +4 -0
  42. package/dist/cli/apply.js +28 -9
  43. package/dist/cli/auto.d.ts +32 -0
  44. package/dist/cli/auto.js +232 -0
  45. package/dist/cli/contract.d.ts +328 -0
  46. package/dist/cli/contract.js +480 -0
  47. package/dist/cli/errors.d.ts +3 -0
  48. package/dist/cli/errors.js +21 -3
  49. package/dist/cli/init.d.ts +5 -0
  50. package/dist/cli/init.js +34 -6
  51. package/dist/cli/list.d.ts +6 -4
  52. package/dist/cli/list.js +39 -16
  53. package/dist/cli/mcp.d.ts +2 -0
  54. package/dist/cli/mcp.js +16 -0
  55. package/dist/cli/message.d.ts +28 -0
  56. package/dist/cli/message.js +147 -0
  57. package/dist/cli/operator-envelope.d.ts +180 -0
  58. package/dist/cli/operator-envelope.js +425 -0
  59. package/dist/cli/output.d.ts +15 -1
  60. package/dist/cli/output.js +153 -5
  61. package/dist/cli/prune.d.ts +7 -3
  62. package/dist/cli/prune.js +57 -12
  63. package/dist/cli/reduce.d.ts +29 -0
  64. package/dist/cli/reduce.js +211 -0
  65. package/dist/cli/root-launcher.d.ts +4 -0
  66. package/dist/cli/root-launcher.js +15 -0
  67. package/dist/cli/run.d.ts +27 -1
  68. package/dist/cli/run.js +108 -16
  69. package/dist/cli/spec.d.ts +31 -0
  70. package/dist/cli/spec.js +180 -0
  71. package/dist/cli/verify.d.ts +35 -0
  72. package/dist/cli/verify.js +297 -0
  73. package/dist/commands/apply/command.d.ts +2 -0
  74. package/dist/commands/apply/command.js +145 -6
  75. package/dist/commands/apply/errors.d.ts +43 -4
  76. package/dist/commands/apply/errors.js +100 -22
  77. package/dist/commands/apply/types.d.ts +2 -1
  78. package/dist/commands/auto/command.d.ts +145 -0
  79. package/dist/commands/auto/command.js +433 -0
  80. package/dist/commands/auto/errors.d.ts +19 -0
  81. package/dist/commands/auto/errors.js +19 -0
  82. package/dist/commands/auto/validation.d.ts +14 -0
  83. package/dist/commands/auto/validation.js +90 -0
  84. package/dist/commands/fetch.d.ts +2 -2
  85. package/dist/commands/fetch.js +4 -4
  86. package/dist/commands/init/agents.d.ts +2 -1
  87. package/dist/commands/init/agents.js +66 -63
  88. package/dist/commands/init/command.js +300 -16
  89. package/dist/commands/init/types.d.ts +18 -7
  90. package/dist/commands/interactive/lifecycle.d.ts +15 -0
  91. package/dist/commands/interactive/lifecycle.js +141 -0
  92. package/dist/commands/list/command.d.ts +10 -3
  93. package/dist/commands/list/command.js +597 -40
  94. package/dist/commands/message/command.d.ts +23 -0
  95. package/dist/commands/message/command.js +215 -0
  96. package/dist/commands/message/errors.d.ts +9 -0
  97. package/dist/commands/message/errors.js +20 -0
  98. package/dist/commands/message/lifecycle.d.ts +14 -0
  99. package/dist/commands/message/lifecycle.js +128 -0
  100. package/dist/commands/prune/command.d.ts +2 -1
  101. package/dist/commands/prune/command.js +61 -10
  102. package/dist/commands/prune/errors.d.ts +1 -1
  103. package/dist/commands/prune/errors.js +5 -5
  104. package/dist/commands/prune/types.d.ts +21 -0
  105. package/dist/commands/reduce/command.d.ts +26 -0
  106. package/dist/commands/reduce/command.js +145 -0
  107. package/dist/commands/reduce/errors.d.ts +17 -0
  108. package/dist/commands/reduce/errors.js +32 -0
  109. package/dist/commands/reduce/targets.d.ts +11 -0
  110. package/dist/commands/reduce/targets.js +271 -0
  111. package/dist/commands/root-launcher/command.d.ts +31 -0
  112. package/dist/commands/root-launcher/command.js +233 -0
  113. package/dist/commands/run/command.d.ts +6 -1
  114. package/dist/commands/run/command.js +70 -40
  115. package/dist/commands/run/lifecycle.d.ts +7 -5
  116. package/dist/commands/run/lifecycle.js +45 -23
  117. package/dist/commands/run/record-init.d.ts +4 -1
  118. package/dist/commands/run/record-init.js +5 -2
  119. package/dist/commands/run/shim/run-agent-shim.d.ts +2 -1
  120. package/dist/commands/run/shim/run-agent-shim.js +4 -219
  121. package/dist/commands/run/validation.d.ts +2 -3
  122. package/dist/commands/run/validation.js +54 -25
  123. package/dist/commands/shared/max-parallel.d.ts +5 -0
  124. package/dist/commands/shared/max-parallel.js +15 -0
  125. package/dist/commands/shared/preview.d.ts +10 -0
  126. package/dist/commands/shared/preview.js +60 -0
  127. package/dist/commands/shared/resolve-reduction-competitors.d.ts +15 -0
  128. package/dist/commands/shared/resolve-reduction-competitors.js +13 -0
  129. package/dist/commands/shared/resolve-stage-competitors.d.ts +19 -0
  130. package/dist/commands/shared/resolve-stage-competitors.js +171 -0
  131. package/dist/commands/shared/session-id.d.ts +1 -0
  132. package/dist/commands/shared/session-id.js +1 -0
  133. package/dist/commands/spec/command.d.ts +22 -0
  134. package/dist/commands/spec/command.js +330 -0
  135. package/dist/commands/spec/errors.d.ts +11 -0
  136. package/dist/commands/spec/errors.js +23 -0
  137. package/dist/commands/verify/agents.d.ts +8 -0
  138. package/dist/commands/verify/agents.js +29 -0
  139. package/dist/commands/verify/command.d.ts +23 -0
  140. package/dist/commands/verify/command.js +168 -0
  141. package/dist/commands/verify/lifecycle.d.ts +14 -0
  142. package/dist/commands/verify/lifecycle.js +229 -0
  143. package/dist/commands/verify/max-parallel.d.ts +7 -0
  144. package/dist/commands/verify/max-parallel.js +15 -0
  145. package/dist/commands/verify/targets.d.ts +18 -0
  146. package/dist/commands/verify/targets.js +420 -0
  147. package/dist/competition/command-adapter.d.ts +35 -0
  148. package/dist/competition/command-adapter.js +20 -0
  149. package/dist/competition/core.d.ts +41 -0
  150. package/dist/competition/core.js +181 -0
  151. package/dist/competition/shared/extra-context.d.ts +14 -0
  152. package/dist/competition/shared/extra-context.js +100 -0
  153. package/dist/competition/shared/preflight.d.ts +11 -0
  154. package/dist/competition/shared/preflight.js +39 -0
  155. package/dist/competition/shared/prompt-helpers.d.ts +16 -0
  156. package/dist/competition/shared/prompt-helpers.js +27 -0
  157. package/dist/competition/shared/prune.d.ts +1 -0
  158. package/dist/competition/shared/prune.js +4 -0
  159. package/dist/competition/shared/sandbox-policy.d.ts +9 -0
  160. package/dist/competition/shared/sandbox-policy.js +7 -0
  161. package/dist/competition/shared/teardown.d.ts +36 -0
  162. package/dist/competition/shared/teardown.js +101 -0
  163. package/dist/configs/agents/defaults.d.ts +31 -2
  164. package/dist/configs/agents/defaults.js +346 -30
  165. package/dist/configs/agents/errors.js +14 -11
  166. package/dist/configs/agents/loader.d.ts +11 -1
  167. package/dist/configs/agents/loader.js +71 -4
  168. package/dist/configs/agents/types.js +2 -2
  169. package/dist/configs/environment/detect.js +9 -4
  170. package/dist/configs/environment/errors.js +4 -4
  171. package/dist/configs/environment/loader.d.ts +1 -1
  172. package/dist/configs/environment/loader.js +3 -3
  173. package/dist/configs/orchestration/bootstrap.d.ts +16 -0
  174. package/dist/configs/orchestration/bootstrap.js +122 -0
  175. package/dist/configs/orchestration/errors.d.ts +15 -0
  176. package/dist/configs/orchestration/errors.js +28 -0
  177. package/dist/configs/orchestration/loader.d.ts +9 -0
  178. package/dist/configs/orchestration/loader.js +148 -0
  179. package/dist/configs/orchestration/types.d.ts +102 -0
  180. package/dist/configs/orchestration/types.js +65 -0
  181. package/dist/configs/sandbox/defaults.js +14 -4
  182. package/dist/configs/sandbox/errors.d.ts +1 -1
  183. package/dist/configs/sandbox/errors.js +1 -1
  184. package/dist/configs/sandbox/loader.js +6 -4
  185. package/dist/configs/sandbox/schemas.js +4 -2
  186. package/dist/configs/settings/loader.d.ts +7 -0
  187. package/dist/configs/settings/loader.js +81 -0
  188. package/dist/configs/settings/types.d.ts +47 -0
  189. package/dist/configs/settings/types.js +23 -0
  190. package/dist/configs/verification/errors.d.ts +11 -0
  191. package/dist/configs/verification/errors.js +21 -0
  192. package/dist/configs/verification/loader.d.ts +8 -0
  193. package/dist/configs/verification/loader.js +43 -0
  194. package/dist/configs/verification/methods.d.ts +35 -0
  195. package/dist/configs/verification/methods.js +41 -0
  196. package/dist/configs/verification/programmatic-defaults.d.ts +10 -0
  197. package/dist/configs/verification/programmatic-defaults.js +42 -0
  198. package/dist/configs/verification/programmatic-detect.d.ts +10 -0
  199. package/dist/configs/{evals/detect.js → verification/programmatic-detect.js} +22 -33
  200. package/dist/configs/verification/types.d.ts +49 -0
  201. package/dist/configs/verification/types.js +45 -0
  202. package/dist/contracts/list.d.ts +207 -0
  203. package/dist/contracts/list.js +154 -0
  204. package/dist/domain/interactive/model/types.d.ts +104 -0
  205. package/dist/domain/interactive/model/types.js +83 -0
  206. package/dist/domain/interactive/persistence/adapter.d.ts +39 -0
  207. package/dist/domain/interactive/persistence/adapter.js +144 -0
  208. package/dist/domain/interactive/prompt.d.ts +3 -0
  209. package/dist/domain/interactive/prompt.js +7 -0
  210. package/dist/domain/message/competition/adapter.d.ts +36 -0
  211. package/dist/domain/message/competition/adapter.js +197 -0
  212. package/dist/domain/message/competition/prompt.d.ts +8 -0
  213. package/dist/domain/message/competition/prompt.js +29 -0
  214. package/dist/domain/message/model/mutators.d.ts +17 -0
  215. package/dist/domain/message/model/mutators.js +107 -0
  216. package/dist/domain/message/model/types.d.ts +100 -0
  217. package/dist/domain/message/model/types.js +87 -0
  218. package/dist/domain/message/persistence/adapter.d.ts +43 -0
  219. package/dist/domain/message/persistence/adapter.js +124 -0
  220. package/dist/domain/reduce/competition/adapter.d.ts +42 -0
  221. package/dist/domain/reduce/competition/adapter.js +826 -0
  222. package/dist/domain/reduce/competition/output-validation.d.ts +4 -0
  223. package/dist/domain/reduce/competition/output-validation.js +18 -0
  224. package/dist/domain/reduce/competition/prompt.d.ts +10 -0
  225. package/dist/domain/reduce/competition/prompt.js +96 -0
  226. package/dist/domain/reduce/competition/reduction.d.ts +9 -0
  227. package/dist/domain/reduce/competition/reduction.js +32 -0
  228. package/dist/domain/reduce/model/types.d.ts +122 -0
  229. package/dist/domain/reduce/model/types.js +84 -0
  230. package/dist/domain/reduce/persistence/adapter.d.ts +43 -0
  231. package/dist/domain/reduce/persistence/adapter.js +126 -0
  232. package/dist/domain/run/competition/adapter.d.ts +30 -0
  233. package/dist/domain/run/competition/adapter.js +39 -0
  234. package/dist/domain/run/competition/agent-execution.d.ts +20 -0
  235. package/dist/domain/run/competition/agent-execution.js +45 -0
  236. package/dist/domain/run/competition/agent-preparation.d.ts +12 -0
  237. package/dist/domain/run/competition/agent-preparation.js +24 -0
  238. package/dist/domain/run/competition/agents/artifacts.d.ts +17 -0
  239. package/dist/domain/run/competition/agents/artifacts.js +173 -0
  240. package/dist/{commands/run → domain/run/competition}/agents/lifecycle.d.ts +3 -3
  241. package/dist/{commands/run → domain/run/competition}/agents/lifecycle.js +84 -64
  242. package/dist/domain/run/competition/agents/post-processing.d.ts +12 -0
  243. package/dist/domain/run/competition/agents/post-processing.js +4 -0
  244. package/dist/domain/run/competition/agents/preparation.js +64 -0
  245. package/dist/{commands/run → domain/run/competition}/agents/run-context.d.ts +9 -16
  246. package/dist/{commands/run → domain/run/competition}/agents/run-context.js +22 -70
  247. package/dist/{commands/run → domain/run/competition}/agents/types.d.ts +10 -13
  248. package/dist/domain/run/competition/agents/workspace.d.ts +21 -0
  249. package/dist/domain/run/competition/agents/workspace.js +47 -0
  250. package/dist/{commands/run → domain/run/competition}/errors.d.ts +8 -1
  251. package/dist/{commands/run → domain/run/competition}/errors.js +39 -9
  252. package/dist/{commands/run → domain/run/competition}/phases.d.ts +1 -2
  253. package/dist/domain/run/competition/phases.js +1 -0
  254. package/dist/domain/run/competition/prompt.d.ts +7 -0
  255. package/dist/domain/run/competition/prompt.js +27 -0
  256. package/dist/{commands/run → domain/run/competition}/reports.d.ts +5 -3
  257. package/dist/{commands/run → domain/run/competition}/reports.js +7 -19
  258. package/dist/domain/run/competition/termination-state.d.ts +4 -0
  259. package/dist/domain/run/competition/termination-state.js +12 -0
  260. package/dist/{records → domain/run/model}/enhanced.d.ts +6 -7
  261. package/dist/{records → domain/run/model}/enhanced.js +11 -11
  262. package/dist/{records → domain/run/model}/errors.d.ts +1 -1
  263. package/dist/{records → domain/run/model}/errors.js +5 -5
  264. package/dist/{records → domain/run/model}/mutators.d.ts +4 -3
  265. package/dist/{records → domain/run/model}/mutators.js +58 -36
  266. package/dist/domain/run/model/types.d.ts +376 -0
  267. package/dist/domain/run/model/types.js +192 -0
  268. package/dist/{records/persistence.d.ts → domain/run/persistence/adapter.d.ts} +9 -3
  269. package/dist/domain/run/persistence/adapter.js +340 -0
  270. package/dist/domain/run/persistence/error-mapping.d.ts +2 -0
  271. package/dist/domain/run/persistence/error-mapping.js +17 -0
  272. package/dist/domain/shared/lifecycle.d.ts +54 -0
  273. package/dist/domain/shared/lifecycle.js +165 -0
  274. package/dist/domain/shared/token-usage.d.ts +21 -0
  275. package/dist/domain/shared/token-usage.js +38 -0
  276. package/dist/domain/spec/competition/adapter.d.ts +31 -0
  277. package/dist/domain/spec/competition/adapter.js +196 -0
  278. package/dist/domain/spec/competition/prompt.d.ts +11 -0
  279. package/dist/domain/spec/competition/prompt.js +44 -0
  280. package/dist/domain/spec/model/output.d.ts +13 -0
  281. package/dist/domain/spec/model/output.js +36 -0
  282. package/dist/domain/spec/model/types.d.ts +98 -0
  283. package/dist/domain/spec/model/types.js +84 -0
  284. package/dist/domain/spec/persistence/adapter.d.ts +51 -0
  285. package/dist/domain/spec/persistence/adapter.js +140 -0
  286. package/dist/domain/verify/blinding/aliases.d.ts +7 -0
  287. package/dist/domain/verify/blinding/aliases.js +23 -0
  288. package/dist/domain/verify/competition/adapter.d.ts +54 -0
  289. package/dist/domain/verify/competition/adapter.js +444 -0
  290. package/dist/domain/verify/competition/artifacts.d.ts +6 -0
  291. package/dist/domain/verify/competition/artifacts.js +7 -0
  292. package/dist/domain/verify/competition/blinding.d.ts +24 -0
  293. package/dist/domain/verify/competition/blinding.js +109 -0
  294. package/dist/domain/verify/competition/finalize.d.ts +11 -0
  295. package/dist/domain/verify/competition/finalize.js +65 -0
  296. package/dist/domain/verify/competition/programmatic.d.ts +15 -0
  297. package/dist/domain/verify/competition/programmatic.js +352 -0
  298. package/dist/domain/verify/competition/prompt.d.ts +19 -0
  299. package/dist/domain/verify/competition/prompt.js +63 -0
  300. package/dist/domain/verify/competition/rubric.d.ts +23 -0
  301. package/dist/domain/verify/competition/rubric.js +77 -0
  302. package/dist/domain/verify/competition/shared-layout.d.ts +121 -0
  303. package/dist/domain/verify/competition/shared-layout.js +365 -0
  304. package/dist/domain/verify/competition/target.d.ts +47 -0
  305. package/dist/domain/verify/competition/target.js +1 -0
  306. package/dist/domain/verify/model/mutators.d.ts +16 -0
  307. package/dist/domain/verify/model/mutators.js +126 -0
  308. package/dist/domain/verify/model/types.d.ts +408 -0
  309. package/dist/domain/verify/model/types.js +289 -0
  310. package/dist/domain/verify/persistence/adapter.d.ts +43 -0
  311. package/dist/domain/verify/persistence/adapter.js +126 -0
  312. package/dist/domain/verify/programmatic/runner.d.ts +22 -0
  313. package/dist/domain/verify/programmatic/runner.js +209 -0
  314. package/dist/domain/verify/rubric-result.d.ts +28 -0
  315. package/dist/domain/verify/rubric-result.js +121 -0
  316. package/dist/extra-context/contract.d.ts +17 -0
  317. package/dist/extra-context/contract.js +60 -0
  318. package/dist/interactive/index.d.ts +2 -0
  319. package/dist/interactive/index.js +1 -0
  320. package/dist/interactive/providers/launch.d.ts +23 -0
  321. package/dist/interactive/providers/launch.js +203 -0
  322. package/dist/interactive/providers/mcp.d.ts +13 -0
  323. package/dist/interactive/providers/mcp.js +547 -0
  324. package/dist/interactive/providers/shared.d.ts +2 -0
  325. package/dist/interactive/providers/shared.js +1 -0
  326. package/dist/interactive/providers.d.ts +3 -0
  327. package/dist/interactive/providers.js +3 -0
  328. package/dist/interactive/records.d.ts +2 -0
  329. package/dist/interactive/records.js +1 -0
  330. package/dist/interactive/substrate.d.ts +21 -0
  331. package/dist/interactive/substrate.js +522 -0
  332. package/dist/interactive/types.d.ts +101 -0
  333. package/dist/interactive/types.js +1 -0
  334. package/dist/mcp/server.d.ts +88 -0
  335. package/dist/mcp/server.js +790 -0
  336. package/dist/persistence/error-mapping.d.ts +19 -0
  337. package/dist/persistence/error-mapping.js +44 -0
  338. package/dist/persistence/errors.d.ts +26 -0
  339. package/dist/persistence/errors.js +49 -0
  340. package/dist/persistence/extra-context.d.ts +9 -0
  341. package/dist/persistence/extra-context.js +60 -0
  342. package/dist/{records → persistence}/history-lock.js +2 -2
  343. package/dist/persistence/record-path-schema.d.ts +3 -0
  344. package/dist/persistence/record-path-schema.js +16 -0
  345. package/dist/persistence/session-store.d.ts +92 -0
  346. package/dist/persistence/session-store.js +412 -0
  347. package/dist/policy/auto.d.ts +13 -0
  348. package/dist/policy/auto.js +22 -0
  349. package/dist/policy/index.d.ts +5 -0
  350. package/dist/policy/index.js +5 -0
  351. package/dist/policy/resolution.d.ts +6 -0
  352. package/dist/policy/resolution.js +23 -0
  353. package/dist/policy/result.d.ts +53 -0
  354. package/dist/policy/result.js +15 -0
  355. package/dist/policy/selector.d.ts +11 -0
  356. package/dist/policy/selector.js +57 -0
  357. package/dist/policy/verification.d.ts +77 -0
  358. package/dist/policy/verification.js +365 -0
  359. package/dist/policy/verifier-selection.d.ts +13 -0
  360. package/dist/policy/verifier-selection.js +78 -0
  361. package/dist/preflight/branch.d.ts +9 -0
  362. package/dist/preflight/branch.js +48 -0
  363. package/dist/preflight/errors.d.ts +3 -0
  364. package/dist/preflight/errors.js +10 -3
  365. package/dist/preflight/index.d.ts +13 -0
  366. package/dist/preflight/index.js +43 -8
  367. package/dist/render/interactions/confirmation.js +4 -2
  368. package/dist/render/transcripts/apply.js +9 -10
  369. package/dist/render/transcripts/auto.d.ts +27 -0
  370. package/dist/render/transcripts/auto.js +21 -0
  371. package/dist/render/transcripts/init.d.ts +4 -15
  372. package/dist/render/transcripts/init.js +71 -72
  373. package/dist/render/transcripts/list.d.ts +10 -1
  374. package/dist/render/transcripts/list.js +121 -15
  375. package/dist/render/transcripts/message.d.ts +72 -0
  376. package/dist/render/transcripts/message.js +362 -0
  377. package/dist/render/transcripts/prune.d.ts +7 -2
  378. package/dist/render/transcripts/prune.js +64 -17
  379. package/dist/render/transcripts/reduce.d.ts +74 -0
  380. package/dist/render/transcripts/reduce.js +395 -0
  381. package/dist/render/transcripts/root-launcher.d.ts +19 -0
  382. package/dist/render/transcripts/root-launcher.js +40 -0
  383. package/dist/render/transcripts/run.d.ts +35 -6
  384. package/dist/render/transcripts/run.js +241 -165
  385. package/dist/render/transcripts/shared.d.ts +2 -0
  386. package/dist/render/transcripts/shared.js +11 -4
  387. package/dist/render/transcripts/spec.d.ts +74 -0
  388. package/dist/render/transcripts/spec.js +394 -0
  389. package/dist/render/transcripts/stage-progress.d.ts +22 -0
  390. package/dist/render/transcripts/stage-progress.js +6 -0
  391. package/dist/render/transcripts/update-check.d.ts +2 -0
  392. package/dist/render/transcripts/update-check.js +22 -0
  393. package/dist/render/transcripts/verify.d.ts +74 -0
  394. package/dist/render/transcripts/verify.js +409 -0
  395. package/dist/render/utils/agents.d.ts +10 -9
  396. package/dist/render/utils/agents.js +30 -82
  397. package/dist/render/utils/badges.d.ts +3 -20
  398. package/dist/render/utils/badges.js +3 -36
  399. package/dist/render/utils/duration.d.ts +12 -0
  400. package/dist/render/utils/duration.js +37 -0
  401. package/dist/render/utils/interactive-frame.d.ts +6 -0
  402. package/dist/render/utils/interactive-frame.js +38 -0
  403. package/dist/render/utils/records.js +4 -4
  404. package/dist/render/utils/runs.d.ts +3 -9
  405. package/dist/render/utils/runs.js +16 -48
  406. package/dist/render/utils/stage-output.d.ts +20 -0
  407. package/dist/render/utils/stage-output.js +44 -0
  408. package/dist/render/utils/timezone.d.ts +2 -0
  409. package/dist/render/utils/timezone.js +42 -0
  410. package/dist/render/utils/transcript-shell.d.ts +66 -0
  411. package/dist/render/utils/transcript-shell.js +155 -0
  412. package/dist/render/utils/transcript.d.ts +7 -1
  413. package/dist/render/utils/transcript.js +12 -2
  414. package/dist/render/utils/wrap.d.ts +1 -0
  415. package/dist/render/utils/wrap.js +20 -0
  416. package/dist/status/colors.d.ts +2 -3
  417. package/dist/status/colors.js +3 -3
  418. package/dist/status/index.d.ts +108 -8
  419. package/dist/status/index.js +164 -5
  420. package/dist/update-check/checker.d.ts +24 -0
  421. package/dist/update-check/checker.js +130 -0
  422. package/dist/update-check/prompt.d.ts +25 -0
  423. package/dist/update-check/prompt.js +62 -0
  424. package/dist/update-check/semver.d.ts +17 -0
  425. package/dist/update-check/semver.js +36 -0
  426. package/dist/update-check/state-path.d.ts +8 -0
  427. package/dist/update-check/state-path.js +18 -0
  428. package/dist/utils/binaries.js +14 -8
  429. package/dist/utils/errors.d.ts +3 -1
  430. package/dist/utils/errors.js +3 -1
  431. package/dist/utils/git.d.ts +10 -0
  432. package/dist/utils/git.js +15 -3
  433. package/dist/utils/output.d.ts +5 -1
  434. package/dist/utils/output.js +4 -2
  435. package/dist/utils/process.d.ts +2 -1
  436. package/dist/utils/process.js +7 -3
  437. package/dist/utils/session-id.d.ts +1 -0
  438. package/dist/utils/session-id.js +22 -0
  439. package/dist/utils/slug.d.ts +2 -0
  440. package/dist/utils/slug.js +15 -0
  441. package/dist/utils/voratiq-cli-target.d.ts +9 -0
  442. package/dist/utils/voratiq-cli-target.js +58 -0
  443. package/dist/workspace/agents.d.ts +13 -16
  444. package/dist/workspace/agents.js +22 -147
  445. package/dist/workspace/chat/artifacts.d.ts +9 -0
  446. package/dist/workspace/chat/artifacts.js +82 -12
  447. package/dist/workspace/chat/native-usage.d.ts +13 -0
  448. package/dist/workspace/chat/native-usage.js +60 -0
  449. package/dist/workspace/chat/sources.d.ts +9 -5
  450. package/dist/workspace/chat/sources.js +89 -23
  451. package/dist/workspace/chat/token-usage-result.d.ts +23 -0
  452. package/dist/workspace/chat/token-usage-result.js +7 -0
  453. package/dist/workspace/chat/usage-extractor.d.ts +30 -0
  454. package/dist/workspace/chat/usage-extractor.js +461 -0
  455. package/dist/workspace/chat/usage-mappings.d.ts +20 -0
  456. package/dist/workspace/chat/usage-mappings.js +136 -0
  457. package/dist/workspace/credential-guard.js +1 -1
  458. package/dist/workspace/dependencies.js +4 -4
  459. package/dist/workspace/errors.d.ts +5 -0
  460. package/dist/workspace/errors.js +13 -3
  461. package/dist/workspace/layout.d.ts +17 -6
  462. package/dist/workspace/layout.js +51 -32
  463. package/dist/workspace/promotion.d.ts +32 -0
  464. package/dist/workspace/promotion.js +34 -0
  465. package/dist/workspace/prune.d.ts +1 -1
  466. package/dist/workspace/run.d.ts +1 -3
  467. package/dist/workspace/run.js +6 -15
  468. package/dist/workspace/setup.d.ts +8 -0
  469. package/dist/workspace/setup.js +359 -56
  470. package/dist/workspace/shim.js +1 -1
  471. package/dist/workspace/structure.d.ts +91 -26
  472. package/dist/workspace/structure.js +227 -43
  473. package/dist/workspace/templates.d.ts +9 -3
  474. package/dist/workspace/templates.js +26 -15
  475. package/dist/workspace/verification-defaults.d.ts +12 -0
  476. package/dist/workspace/verification-defaults.js +1017 -0
  477. package/package.json +30 -24
  478. package/dist/cli/review.d.ts +0 -12
  479. package/dist/cli/review.js +0 -33
  480. package/dist/commands/errors.d.ts +0 -4
  481. package/dist/commands/errors.js +0 -7
  482. package/dist/commands/init/evals.d.ts +0 -4
  483. package/dist/commands/init/evals.js +0 -219
  484. package/dist/commands/review/command.d.ts +0 -10
  485. package/dist/commands/review/command.js +0 -26
  486. package/dist/commands/run/agent-execution.d.ts +0 -19
  487. package/dist/commands/run/agent-execution.js +0 -63
  488. package/dist/commands/run/agents/auth-stage.d.ts +0 -23
  489. package/dist/commands/run/agents/auth-stage.js +0 -108
  490. package/dist/commands/run/agents/chat-preserver.d.ts +0 -9
  491. package/dist/commands/run/agents/chat-preserver.js +0 -35
  492. package/dist/commands/run/agents/eval-runner.d.ts +0 -19
  493. package/dist/commands/run/agents/eval-runner.js +0 -27
  494. package/dist/commands/run/agents/failures.js +0 -32
  495. package/dist/commands/run/agents/preparation.js +0 -123
  496. package/dist/commands/run/agents.d.ts +0 -14
  497. package/dist/commands/run/agents.js +0 -47
  498. package/dist/commands/run/prompts.d.ts +0 -4
  499. package/dist/commands/run/prompts.js +0 -16
  500. package/dist/commands/run/sandbox-registry.d.ts +0 -4
  501. package/dist/commands/run/sandbox-registry.js +0 -54
  502. package/dist/configs/evals/defaults.d.ts +0 -8
  503. package/dist/configs/evals/defaults.js +0 -28
  504. package/dist/configs/evals/detect.d.ts +0 -10
  505. package/dist/configs/evals/errors.d.ts +0 -16
  506. package/dist/configs/evals/errors.js +0 -29
  507. package/dist/configs/evals/loader.d.ts +0 -9
  508. package/dist/configs/evals/loader.js +0 -46
  509. package/dist/configs/evals/types.d.ts +0 -42
  510. package/dist/configs/evals/types.js +0 -74
  511. package/dist/evals/runner.d.ts +0 -16
  512. package/dist/evals/runner.js +0 -132
  513. package/dist/records/persistence.js +0 -469
  514. package/dist/records/types.d.ts +0 -255
  515. package/dist/records/types.js +0 -160
  516. package/dist/render/transcripts/review.d.ts +0 -2
  517. package/dist/render/transcripts/review.js +0 -36
  518. /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.d.ts +0 -0
  519. /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.js +0 -0
  520. /package/dist/{commands/run → agents/runtime/shim}/argv.d.ts +0 -0
  521. /package/dist/{commands/run → agents/runtime/shim}/argv.js +0 -0
  522. /package/dist/{commands/run/agents → agents/runtime}/types.js +0 -0
  523. /package/dist/{commands/run → domain/run/competition}/agents/preparation.d.ts +0 -0
  524. /package/dist/{commands/run/phases.js → domain/run/competition/agents/types.js} +0 -0
  525. /package/dist/{commands/run → domain/run/model}/id.d.ts +0 -0
  526. /package/dist/{commands/run → domain/run/model}/id.js +0 -0
  527. /package/dist/{records → persistence}/history-lock.d.ts +0 -0
@@ -1,132 +0,0 @@
1
- import { createWriteStream } from "node:fs";
2
- import { mkdir } from "node:fs/promises";
3
- import { getNodeDependencyRoots, getPythonEnvironmentPath, } from "../configs/environment/types.js";
4
- import { sanitizeSlugForFilename } from "../configs/evals/types.js";
5
- import { toErrorMessage } from "../utils/errors.js";
6
- import { normalizePathForDisplay, relativeToRoot, resolvePath, } from "../utils/path.js";
7
- import { spawnStreamingProcess } from "../utils/process.js";
8
- export async function executeEvaluations(options) {
9
- const { evaluations, cwd, root, logsDirectory, env, environment } = options;
10
- const results = [];
11
- const warnings = [];
12
- await mkdir(logsDirectory, { recursive: true });
13
- const evalEnvironment = composeEvalEnvironment(env);
14
- for (const evaluation of evaluations) {
15
- const { slug, command } = evaluation;
16
- if (!command) {
17
- results.push({
18
- slug,
19
- status: "skipped",
20
- });
21
- continue;
22
- }
23
- const logFileName = `${sanitizeSlugForFilename(slug)}.log`;
24
- const logPath = resolvePath(logsDirectory, logFileName);
25
- const logStream = createWriteStream(logPath, { flags: "w" });
26
- let exitCode = null;
27
- let status = "succeeded";
28
- let errorMessage;
29
- const missingStacks = detectMissingStacks(command, environment);
30
- if (missingStacks.length > 0) {
31
- const warningMessage = buildMissingStackWarning(slug, command, missingStacks);
32
- logStream.write(`${warningMessage}\n`);
33
- warnings.push(warningMessage);
34
- }
35
- try {
36
- logStream.write("[voratiq] Injecting VORATIQ_WORKSPACE_TESTS=1 for workspace evals\n");
37
- const { exitCode: code, signal } = await spawnStreamingProcess({
38
- command,
39
- cwd,
40
- env: evalEnvironment,
41
- shell: true,
42
- stdout: { writable: logStream, endOnClose: false },
43
- stderr: { writable: logStream, endOnClose: false },
44
- });
45
- if (signal) {
46
- status = "errored";
47
- exitCode = null;
48
- errorMessage = `Process terminated by signal ${signal}`;
49
- }
50
- else {
51
- exitCode = code;
52
- status = code === 0 ? "succeeded" : "failed";
53
- }
54
- }
55
- catch (error) {
56
- status = "errored";
57
- exitCode = null;
58
- errorMessage = toErrorMessage(error);
59
- }
60
- finally {
61
- logStream.end();
62
- }
63
- results.push({
64
- slug,
65
- status,
66
- command,
67
- exitCode,
68
- logPath: normalizePathForDisplay(relativeToRoot(root, logPath)),
69
- error: errorMessage,
70
- });
71
- }
72
- return { results, warnings };
73
- }
74
- function composeEvalEnvironment(overrides) {
75
- return {
76
- ...overrides,
77
- VORATIQ_WORKSPACE_TESTS: "1",
78
- };
79
- }
80
- function detectMissingStacks(command, environment) {
81
- const lower = command.toLowerCase();
82
- const required = new Set();
83
- if (requiresNodeStack(lower)) {
84
- required.add("node");
85
- }
86
- if (requiresPythonStack(lower)) {
87
- required.add("python");
88
- }
89
- const missing = [];
90
- if (required.has("node") &&
91
- getNodeDependencyRoots(environment).length === 0) {
92
- missing.push("node");
93
- }
94
- if (required.has("python") && !getPythonEnvironmentPath(environment)) {
95
- missing.push("python");
96
- }
97
- return missing;
98
- }
99
- function requiresNodeStack(source) {
100
- const markers = [
101
- "npm ",
102
- "npm:",
103
- "npx ",
104
- "pnpm ",
105
- "yarn ",
106
- " node",
107
- "node ",
108
- "tsc",
109
- "jest",
110
- ];
111
- return markers.some((marker) => source.includes(marker));
112
- }
113
- function requiresPythonStack(source) {
114
- const markers = [
115
- "python",
116
- "pytest",
117
- "ruff",
118
- "uv ",
119
- " uv",
120
- "pipenv",
121
- "pip ",
122
- " pip",
123
- "poetry",
124
- "pyright",
125
- "conda",
126
- ];
127
- return markers.some((marker) => source.includes(marker));
128
- }
129
- function buildMissingStackWarning(slug, command, stacks) {
130
- const stackLabel = stacks.join(" and ");
131
- return `[voratiq] Warning: "${slug}" command requires ${stackLabel} tooling, but .voratiq/environment.yaml is missing the corresponding configuration. Command: ${command}`;
132
- }
@@ -1,469 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
- import { dirname, join } from "node:path";
4
- import { assertTestHookRegistrationEnabled } from "../testing/test-hooks.js";
5
- import { isFileSystemError, pathExists } from "../utils/fs.js";
6
- import { relativeToRoot } from "../utils/path.js";
7
- import { RunOptionValidationError, RunRecordMutationError, RunRecordNotFoundError, RunRecordParseError, } from "./errors.js";
8
- import { acquireHistoryLock } from "./history-lock.js";
9
- import { runRecordSchema } from "./types.js";
10
- export { HISTORY_LOCK_STALE_GRACE_MS } from "./history-lock.js";
11
- const RUN_INDEX_VERSION = 2;
12
- export const RUN_RECORD_FILENAME = "record.json";
13
- const HISTORY_LOCK_FILENAME = "history.lock";
14
- const BUFFER_FLUSH_DELAY_MS = 250;
15
- const runRecordBuffers = new Map();
16
- const readRunRecordsInternal = async (options) => {
17
- const { root, runsFilePath, limit, predicate, onWarning } = options;
18
- if (limit !== undefined && (!Number.isInteger(limit) || limit <= 0)) {
19
- throw new RunOptionValidationError("limit", "must be a positive integer");
20
- }
21
- const sessionsDir = getSessionsDirectory(runsFilePath);
22
- let index;
23
- try {
24
- index = await readRunIndex(runsFilePath);
25
- }
26
- catch (error) {
27
- if (error instanceof RunRecordParseError) {
28
- const displayPath = relativeToRoot(root, runsFilePath);
29
- throw new RunRecordParseError(displayPath, error.details);
30
- }
31
- throw error;
32
- }
33
- const matches = [];
34
- for (let i = index.sessions.length - 1; i >= 0; i -= 1) {
35
- const entry = index.sessions[i];
36
- if (!entry) {
37
- continue;
38
- }
39
- const recordPath = join(sessionsDir, entry.runId, RUN_RECORD_FILENAME);
40
- try {
41
- const record = await readRunRecordFromDisk(recordPath);
42
- if (predicate && !predicate(record)) {
43
- continue;
44
- }
45
- matches.push(record);
46
- if (limit !== undefined && matches.length >= limit) {
47
- break;
48
- }
49
- }
50
- catch (error) {
51
- if (error instanceof RunRecordParseError) {
52
- const warning = {
53
- kind: "parse-error",
54
- runId: entry.runId,
55
- recordPath,
56
- displayPath: relativeToRoot(root, recordPath),
57
- details: error.details,
58
- };
59
- onWarning?.(warning);
60
- continue;
61
- }
62
- if (error instanceof RunRecordNotFoundError) {
63
- const warning = {
64
- kind: "missing-record",
65
- runId: entry.runId,
66
- recordPath,
67
- displayPath: relativeToRoot(root, recordPath),
68
- };
69
- onWarning?.(warning);
70
- continue;
71
- }
72
- throw error;
73
- }
74
- }
75
- return matches;
76
- };
77
- let readRunRecordsImpl = readRunRecordsInternal;
78
- function setReadRunRecordsImplementation(implementation) {
79
- readRunRecordsImpl = implementation;
80
- }
81
- function resetReadRunRecordsImplementation() {
82
- readRunRecordsImpl = readRunRecordsInternal;
83
- }
84
- export async function readRunRecords(options) {
85
- return readRunRecordsImpl(options);
86
- }
87
- export async function appendRunRecord(options) {
88
- const { root, runsFilePath, record } = options;
89
- const runsRoot = getRunsDirectory(runsFilePath);
90
- const sessionsDir = getSessionsDirectory(runsFilePath);
91
- const recordDir = join(sessionsDir, record.runId);
92
- const recordPath = join(recordDir, RUN_RECORD_FILENAME);
93
- const displayPath = relativeToRoot(root, recordPath);
94
- const lockPath = join(runsRoot, HISTORY_LOCK_FILENAME);
95
- await mkdir(recordDir, { recursive: true });
96
- const releaseLock = await acquireHistoryLock(lockPath);
97
- try {
98
- if (await pathExists(recordPath)) {
99
- throw new RunRecordMutationError(`Run ${record.runId} already exists at ${displayPath}.`);
100
- }
101
- await atomicWriteJson(recordPath, record);
102
- await upsertRunIndexEntry(runsFilePath, {
103
- runId: record.runId,
104
- createdAt: record.createdAt,
105
- status: record.status,
106
- });
107
- registerBufferEntry({
108
- key: recordPath,
109
- runId: record.runId,
110
- recordPath,
111
- lockPath,
112
- runsDir: runsRoot,
113
- runsFilePath,
114
- root,
115
- record,
116
- lastPersistedStatus: record.status,
117
- dirty: false,
118
- });
119
- }
120
- catch (error) {
121
- if (error instanceof RunRecordMutationError) {
122
- throw error;
123
- }
124
- if (isFileSystemError(error)) {
125
- throw new RunRecordMutationError(`Failed to initialize run history at ${displayPath}: ${error.message}`);
126
- }
127
- throw error;
128
- }
129
- finally {
130
- await releaseLock();
131
- }
132
- }
133
- export async function rewriteRunRecord(options) {
134
- const { root, runsFilePath, runId, mutate } = options;
135
- const runsRoot = getRunsDirectory(runsFilePath);
136
- const sessionsDir = getSessionsDirectory(runsFilePath);
137
- const recordPath = join(sessionsDir, runId, RUN_RECORD_FILENAME);
138
- const lockPath = join(runsRoot, HISTORY_LOCK_FILENAME);
139
- const entry = await getOrLoadBufferEntry({
140
- key: recordPath,
141
- runId,
142
- recordPath,
143
- lockPath,
144
- runsDir: runsRoot,
145
- runsFilePath,
146
- root,
147
- });
148
- const mutated = mutate(entry.record);
149
- if (mutated.runId !== runId) {
150
- throw new RunRecordMutationError(`Refusing to change run identifier while rewriting history for ${runId}.`);
151
- }
152
- entry.record = mutated;
153
- entry.dirty = true;
154
- const shouldFlushImmediately = shouldForceFlush(entry.record.status);
155
- if (shouldFlushImmediately) {
156
- await flushBufferEntry(entry, { force: true });
157
- await disposeBufferEntry(entry);
158
- }
159
- else {
160
- scheduleBufferFlush(entry);
161
- }
162
- return mutated;
163
- }
164
- export async function getRunRecordSnapshot(options) {
165
- const { runsFilePath, runId } = options;
166
- const sessionsDir = getSessionsDirectory(runsFilePath);
167
- const recordPath = join(sessionsDir, runId, RUN_RECORD_FILENAME);
168
- const buffered = runRecordBuffers.get(recordPath);
169
- if (buffered) {
170
- return structuredClone(buffered.record);
171
- }
172
- try {
173
- return await readRunRecordFromDisk(recordPath);
174
- }
175
- catch (error) {
176
- if (error instanceof RunRecordNotFoundError) {
177
- return undefined;
178
- }
179
- throw error;
180
- }
181
- }
182
- function shouldForceFlush(status) {
183
- return status !== "running" && status !== "queued";
184
- }
185
- export async function flushAllRunRecordBuffers() {
186
- const entries = Array.from(runRecordBuffers.values());
187
- for (const entry of entries) {
188
- await flushBufferEntry(entry, { force: true });
189
- await disposeBufferEntry(entry);
190
- }
191
- }
192
- export async function disposeRunRecordBuffer(options) {
193
- const { runsFilePath, runId } = options;
194
- const recordPath = join(getSessionsDirectory(runsFilePath), runId, RUN_RECORD_FILENAME);
195
- const entry = runRecordBuffers.get(recordPath);
196
- if (!entry) {
197
- return;
198
- }
199
- await disposeBufferEntry(entry);
200
- }
201
- export async function flushRunRecordBuffer(options) {
202
- const { runsFilePath, runId } = options;
203
- const recordPath = join(getSessionsDirectory(runsFilePath), runId, RUN_RECORD_FILENAME);
204
- const entry = runRecordBuffers.get(recordPath);
205
- if (!entry) {
206
- return;
207
- }
208
- await flushBufferEntry(entry, { force: true });
209
- await disposeBufferEntry(entry);
210
- }
211
- function registerBufferEntry(entry) {
212
- runRecordBuffers.set(entry.key, entry);
213
- }
214
- async function getOrLoadBufferEntry(template) {
215
- const existing = runRecordBuffers.get(template.key);
216
- if (existing) {
217
- return existing;
218
- }
219
- const record = await readRunRecordFromDisk(template.recordPath);
220
- const entry = {
221
- ...template,
222
- record,
223
- lastPersistedStatus: record.status,
224
- dirty: false,
225
- };
226
- runRecordBuffers.set(template.key, entry);
227
- return entry;
228
- }
229
- function scheduleBufferFlush(entry) {
230
- if (entry.flushTimer) {
231
- return;
232
- }
233
- const timer = setTimeout(() => {
234
- entry.flushTimer = undefined;
235
- void flushBufferEntry(entry).catch((error) => {
236
- console.warn(`[voratiq] Failed to flush run ${entry.runId} history: ${error.message}`);
237
- });
238
- }, BUFFER_FLUSH_DELAY_MS);
239
- if (typeof timer.unref === "function") {
240
- timer.unref();
241
- }
242
- entry.flushTimer = timer;
243
- }
244
- async function flushBufferEntry(entry, options = {}) {
245
- const { force = false } = options;
246
- if (!entry.dirty && !force) {
247
- return;
248
- }
249
- if (entry.flushPromise) {
250
- await entry.flushPromise;
251
- return;
252
- }
253
- if (entry.flushTimer) {
254
- clearTimeout(entry.flushTimer);
255
- entry.flushTimer = undefined;
256
- }
257
- await mkdir(entry.runsDir, { recursive: true });
258
- await mkdir(dirname(entry.recordPath), { recursive: true });
259
- const promise = (async () => {
260
- const release = await acquireHistoryLock(entry.lockPath);
261
- try {
262
- await atomicWriteJson(entry.recordPath, entry.record);
263
- entry.dirty = false;
264
- if (entry.lastPersistedStatus !== entry.record.status) {
265
- await upsertRunIndexEntry(entry.runsFilePath, {
266
- runId: entry.runId,
267
- createdAt: entry.record.createdAt,
268
- status: entry.record.status,
269
- });
270
- entry.lastPersistedStatus = entry.record.status;
271
- }
272
- }
273
- finally {
274
- await release();
275
- }
276
- })();
277
- entry.flushPromise = promise;
278
- try {
279
- await promise;
280
- }
281
- finally {
282
- entry.flushPromise = undefined;
283
- }
284
- }
285
- async function disposeBufferEntry(entry) {
286
- const current = runRecordBuffers.get(entry.key);
287
- if (!current || current !== entry) {
288
- return;
289
- }
290
- if (entry.flushTimer) {
291
- clearTimeout(entry.flushTimer);
292
- entry.flushTimer = undefined;
293
- }
294
- if (entry.flushPromise) {
295
- await entry.flushPromise;
296
- }
297
- runRecordBuffers.delete(entry.key);
298
- }
299
- export function buildRunPredicate(filters = {}) {
300
- const predicates = [];
301
- if (filters.runId) {
302
- const runId = filters.runId;
303
- predicates.push((record) => record.runId === runId);
304
- }
305
- if (filters.agentId) {
306
- const agentId = filters.agentId;
307
- predicates.push((record) => record.agents.some((agent) => agent.agentId === agentId));
308
- }
309
- if (filters.specPath) {
310
- const specPath = filters.specPath;
311
- predicates.push((record) => record.spec.path === specPath);
312
- }
313
- if (filters.activeOnly || !filters.includeDeleted) {
314
- predicates.push((record) => record.status !== "pruned");
315
- }
316
- return (record) => predicates.every((predicate) => predicate(record));
317
- }
318
- export async function fetchRuns(input) {
319
- const warnings = [];
320
- const predicate = buildRunPredicate(input.filters ?? {});
321
- const records = await readRunRecords({
322
- root: input.root,
323
- runsFilePath: input.runsFilePath,
324
- limit: input.limit,
325
- predicate,
326
- onWarning: (warning) => warnings.push(warning),
327
- });
328
- return { records, warnings };
329
- }
330
- export async function fetchRunsSafely(input) {
331
- const { runId, filters, ...rest } = input;
332
- const augmentedFilters = { ...(filters ?? {}), ...(runId ? { runId } : {}) };
333
- const result = await fetchRuns({
334
- ...rest,
335
- filters: augmentedFilters,
336
- }).catch((error) => {
337
- if (runId && isFileSystemError(error) && error.code === "ENOENT") {
338
- throw new RunRecordNotFoundError(runId);
339
- }
340
- throw error;
341
- });
342
- if (runId) {
343
- const warning = result.warnings.find((entry) => entry.runId === runId);
344
- if (warning) {
345
- if (warning.kind === "parse-error") {
346
- throw new RunRecordParseError(warning.displayPath, warning.details);
347
- }
348
- throw new RunRecordNotFoundError(runId);
349
- }
350
- if (result.records.length === 0) {
351
- throw new RunRecordNotFoundError(runId);
352
- }
353
- }
354
- return result;
355
- }
356
- async function readRunRecordFromDisk(path) {
357
- try {
358
- const raw = await readFile(path, "utf8");
359
- const parsed = JSON.parse(raw);
360
- const result = runRecordSchema.safeParse(parsed);
361
- if (!result.success) {
362
- const issues = result.error.issues
363
- .map((issue) => issue.message)
364
- .join(", ");
365
- throw new RunRecordParseError(path, issues);
366
- }
367
- return result.data;
368
- }
369
- catch (error) {
370
- if (isFileSystemError(error) && error.code === "ENOENT") {
371
- const runId = extractRunIdFromPath(path);
372
- throw new RunRecordNotFoundError(runId);
373
- }
374
- if (error instanceof SyntaxError) {
375
- throw new RunRecordParseError(path, error.message);
376
- }
377
- throw error;
378
- }
379
- }
380
- function extractRunIdFromPath(path) {
381
- const segments = path.split(/[/\\]/);
382
- const runIdIndex = segments.length - 2;
383
- return segments[runIdIndex] ?? "unknown";
384
- }
385
- async function atomicWriteJson(path, payload) {
386
- const dir = dirname(path);
387
- const tempPath = join(dir, `${randomBytes(8).toString("hex")}.tmp`);
388
- const serialized = `${JSON.stringify(payload, null, 2)}\n`;
389
- await writeFile(tempPath, serialized, { encoding: "utf8" });
390
- await rename(tempPath, path);
391
- }
392
- function getRunsDirectory(runsFilePath) {
393
- return dirname(runsFilePath);
394
- }
395
- function getSessionsDirectory(runsFilePath) {
396
- return join(getRunsDirectory(runsFilePath), "sessions");
397
- }
398
- async function readRunIndex(path) {
399
- try {
400
- const raw = await readFile(path, "utf8");
401
- const trimmed = raw.trim();
402
- if (!trimmed) {
403
- return { version: RUN_INDEX_VERSION, sessions: [] };
404
- }
405
- const parsed = JSON.parse(trimmed);
406
- const sessions = Array.isArray(parsed.sessions)
407
- ? parsed.sessions
408
- : Array.isArray(parsed.runs)
409
- ? parsed.runs
410
- : [];
411
- return {
412
- version: parsed.version ?? RUN_INDEX_VERSION,
413
- sessions,
414
- };
415
- }
416
- catch (error) {
417
- if (isFileSystemError(error) && error.code === "ENOENT") {
418
- return { version: RUN_INDEX_VERSION, sessions: [] };
419
- }
420
- if (error instanceof SyntaxError) {
421
- throw new RunRecordParseError(path, error.message);
422
- }
423
- throw error;
424
- }
425
- }
426
- async function upsertRunIndexEntry(indexPath, entry) {
427
- const payload = await readRunIndex(indexPath);
428
- const existingIndex = payload.sessions.findIndex((run) => run.runId === entry.runId);
429
- if (existingIndex >= 0) {
430
- payload.sessions[existingIndex] = {
431
- ...payload.sessions[existingIndex],
432
- ...entry,
433
- };
434
- }
435
- else {
436
- payload.sessions.push(entry);
437
- }
438
- payload.version = RUN_INDEX_VERSION;
439
- await atomicWriteJson(indexPath, payload);
440
- }
441
- const RUN_RECORDS_TEST_HOOKS = Symbol.for("voratiq.records.persistence.testHooks");
442
- function registerRunRecordsTestHooks() {
443
- const registry = globalThis;
444
- registry[RUN_RECORDS_TEST_HOOKS] = {
445
- setImplementation: setReadRunRecordsImplementation,
446
- resetImplementation: resetReadRunRecordsImplementation,
447
- getBufferSnapshot: snapshotRunRecordBuffers,
448
- };
449
- }
450
- function snapshotRunRecordBuffers() {
451
- return Array.from(runRecordBuffers.values()).map((entry) => ({
452
- key: entry.key,
453
- runId: entry.runId,
454
- hasFlushTimer: Boolean(entry.flushTimer),
455
- }));
456
- }
457
- let runRecordsTestHooksRegistered = false;
458
- export function enableRunRecordsTestHooks() {
459
- assertTestHookRegistrationEnabled("records persistence");
460
- if (runRecordsTestHooksRegistered) {
461
- return;
462
- }
463
- registerRunRecordsTestHooks();
464
- runRecordsTestHooksRegistered = true;
465
- }
466
- export function areRunRecordsTestHooksRegistered() {
467
- return runRecordsTestHooksRegistered;
468
- }
469
- export { RUN_RECORDS_TEST_HOOKS };