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,5 +1,7 @@
1
+ export type GitRepositoryErrorReason = "no_repository" | "not_repository_root";
1
2
  export declare class GitRepositoryError extends Error {
2
- constructor(message: string);
3
+ readonly reason: GitRepositoryErrorReason;
4
+ constructor(message: string, reason: GitRepositoryErrorReason);
3
5
  }
4
6
  export declare class ValidationError extends Error {
5
7
  constructor(message: string);
@@ -1,7 +1,9 @@
1
1
  export class GitRepositoryError extends Error {
2
- constructor(message) {
2
+ reason;
3
+ constructor(message, reason) {
3
4
  super(message);
4
5
  this.name = "GitRepositoryError";
6
+ this.reason = reason;
5
7
  }
6
8
  }
7
9
  export class ValidationError extends Error {
@@ -21,6 +21,16 @@ export interface CreateWorktreeOptions {
21
21
  baseRevision: string;
22
22
  }
23
23
  export declare function createWorktree(options: CreateWorktreeOptions): Promise<void>;
24
+ export interface CreateDetachedWorktreeOptions {
25
+ root: string;
26
+ worktreePath: string;
27
+ baseRevision: string;
28
+ }
29
+ export declare function createDetachedWorktree(options: CreateDetachedWorktreeOptions): Promise<void>;
30
+ export declare function removeWorktree(options: {
31
+ root: string;
32
+ worktreePath: string;
33
+ }): Promise<void>;
24
34
  export declare function gitAddAll(cwd: string): Promise<void>;
25
35
  export declare function gitHasStagedChanges(cwd: string): Promise<boolean>;
26
36
  export interface GitCommitOptions {
package/dist/utils/git.js CHANGED
@@ -20,10 +20,10 @@ export async function assertGitRepository(root) {
20
20
  const repoRoot = await getGitRepositoryRoot(root);
21
21
  if (repoRoot !== null) {
22
22
  // We're in a repo but not at the root
23
- throw new GitRepositoryError("Run `voratiq init` from the repository root.");
23
+ throw new GitRepositoryError("Run `voratiq init` from the repository root.", "not_repository_root");
24
24
  }
25
25
  // No git repository exists at all
26
- throw new GitRepositoryError("No git repository found. Run `git init` or switch to an existing repository.");
26
+ throw new GitRepositoryError("No git repository found. Run `git init` or switch to an existing repository.", "no_repository");
27
27
  }
28
28
  }
29
29
  /**
@@ -68,6 +68,18 @@ export async function createWorktree(options) {
68
68
  const { root, worktreePath, branch, baseRevision } = options;
69
69
  await runGitCommand(["worktree", "add", "-b", branch, worktreePath, baseRevision], { cwd: root });
70
70
  }
71
+ export async function createDetachedWorktree(options) {
72
+ const { root, worktreePath, baseRevision } = options;
73
+ await runGitCommand(["worktree", "add", "--detach", worktreePath, baseRevision], {
74
+ cwd: root,
75
+ });
76
+ }
77
+ export async function removeWorktree(options) {
78
+ const { root, worktreePath } = options;
79
+ await runGitCommand(["worktree", "remove", "--force", worktreePath], {
80
+ cwd: root,
81
+ });
82
+ }
71
83
  export async function gitAddAll(cwd) {
72
84
  await runGitCommand(["add", "-A"], { cwd });
73
85
  }
@@ -107,7 +119,7 @@ export async function gitDiffShortStat(options) {
107
119
  }
108
120
  export async function gitDiff(options) {
109
121
  const { cwd, baseRevision, targetRevision } = options;
110
- return runGitCommand(["diff", "--no-color", baseRevision, targetRevision], {
122
+ return runGitCommand(["diff", "--binary", "--no-color", baseRevision, targetRevision], {
111
123
  cwd,
112
124
  trim: false,
113
125
  });
@@ -1,4 +1,8 @@
1
1
  import { type TerminalColor } from "./colors.js";
2
- export declare function formatCliOutput(value: string): string;
2
+ export interface FormatCliOutputOptions {
3
+ leadingNewline?: boolean;
4
+ trailingNewline?: boolean;
5
+ }
6
+ export declare function formatCliOutput(value: string, options?: FormatCliOutputOptions): string;
3
7
  export declare function formatAlertMessage(label: string, color: TerminalColor, message: string): string;
4
8
  export declare function formatErrorMessage(message: string): string;
@@ -1,7 +1,9 @@
1
1
  import { colorize } from "./colors.js";
2
- export function formatCliOutput(value) {
2
+ export function formatCliOutput(value, options = {}) {
3
3
  const trimmedEnd = value.trimEnd();
4
- return `\n${trimmedEnd}\n\n`;
4
+ const leading = options.leadingNewline === false ? "" : "\n";
5
+ const trailing = options.trailingNewline === false ? "\n" : "\n\n";
6
+ return `${leading}${trimmedEnd}${trailing}`;
5
7
  }
6
8
  export function formatAlertMessage(label, color, message) {
7
9
  const prefix = colorize(`${label}:`, color);
@@ -3,6 +3,7 @@ export interface StreamTarget {
3
3
  writable: Writable;
4
4
  endOnClose?: boolean;
5
5
  }
6
+ export type ProcessOutputSource = "stdout" | "stderr";
6
7
  export interface SpawnStreamingProcessOptions {
7
8
  command: string;
8
9
  args?: string[];
@@ -13,7 +14,7 @@ export interface SpawnStreamingProcessOptions {
13
14
  stdout: StreamTarget;
14
15
  stderr: StreamTarget;
15
16
  /** Optional callback invoked for each chunk of stdout/stderr data. */
16
- onData?: (chunk: Buffer) => void;
17
+ onData?: (chunk: Buffer, source: ProcessOutputSource) => void;
17
18
  /** Optional callback invoked when the process is spawned, providing the child process. */
18
19
  onSpawn?: (child: import("node:child_process").ChildProcess) => void;
19
20
  /**
@@ -1,5 +1,5 @@
1
1
  import { spawn } from "node:child_process";
2
- import { RunProcessStreamError } from "../commands/run/errors.js";
2
+ import { RunProcessStreamError } from "../domain/run/competition/errors.js";
3
3
  import { composeRestrictedEnvironment } from "./env.js";
4
4
  export async function spawnStreamingProcess(options) {
5
5
  const { command, args = [], cwd, env, shell = false, stdin, stdout, stderr, onData, onSpawn, abortSignal, detached = false, } = options;
@@ -24,8 +24,12 @@ export async function spawnStreamingProcess(options) {
24
24
  return;
25
25
  }
26
26
  if (onData) {
27
- childStdout.on("data", onData);
28
- childStderr.on("data", onData);
27
+ childStdout.on("data", (chunk) => {
28
+ onData(chunk, "stdout");
29
+ });
30
+ childStderr.on("data", (chunk) => {
31
+ onData(chunk, "stderr");
32
+ });
29
33
  }
30
34
  childStdout.pipe(stdout.writable, { end: false });
31
35
  childStderr.pipe(stderr.writable, { end: false });
@@ -0,0 +1 @@
1
+ export declare function generateSessionId(now?: Date): string;
@@ -0,0 +1,22 @@
1
+ import { randomBytes } from "node:crypto";
2
+ function generateSlug(length) {
3
+ const alphabet = "abcdefghijklmnopqrstuvwxyz";
4
+ const bytes = randomBytes(length);
5
+ let slug = "";
6
+ for (let index = 0; index < length; index += 1) {
7
+ const value = bytes[index] ?? 0;
8
+ slug += alphabet[value % alphabet.length];
9
+ }
10
+ return slug;
11
+ }
12
+ export function generateSessionId(now = new Date()) {
13
+ const pad = (value) => value.toString().padStart(2, "0");
14
+ const year = now.getUTCFullYear();
15
+ const month = pad(now.getUTCMonth() + 1);
16
+ const day = pad(now.getUTCDate());
17
+ const hours = pad(now.getUTCHours());
18
+ const minutes = pad(now.getUTCMinutes());
19
+ const seconds = pad(now.getUTCSeconds());
20
+ const slug = generateSlug(5);
21
+ return `${year}${month}${day}-${hours}${minutes}${seconds}-${slug}`;
22
+ }
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeSlug(value: string): string;
2
+ export declare function slugify(value: string, fallback: string): string;
@@ -0,0 +1,15 @@
1
+ export function sanitizeSlug(value) {
2
+ const withoutLinks = value.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
3
+ const normalized = withoutLinks
4
+ .toLowerCase()
5
+ .replace(/[`*~]/g, "")
6
+ .replace(/[^a-z0-9]+/g, "-")
7
+ .replace(/-+/g, "-")
8
+ .replace(/^-+/u, "")
9
+ .replace(/-+$/u, "");
10
+ return normalized;
11
+ }
12
+ export function slugify(value, fallback) {
13
+ const normalized = sanitizeSlug(value);
14
+ return normalized.length > 0 ? normalized : fallback;
15
+ }
@@ -0,0 +1,9 @@
1
+ export interface VoratiqCliTarget {
2
+ command: string;
3
+ argsPrefix: string[];
4
+ }
5
+ export declare function createEntrypointVoratiqCliTarget(input: {
6
+ cliEntrypoint: string | undefined;
7
+ nodeExecutable?: string;
8
+ }): VoratiqCliTarget | undefined;
9
+ export declare function resolveVoratiqCliTarget(): VoratiqCliTarget;
@@ -0,0 +1,58 @@
1
+ import { realpathSync } from "node:fs";
2
+ import process from "node:process";
3
+ import { detectBinary } from "./binaries.js";
4
+ export function createEntrypointVoratiqCliTarget(input) {
5
+ const { cliEntrypoint, nodeExecutable = process.execPath } = input;
6
+ if (!cliEntrypoint || cliEntrypoint.length === 0) {
7
+ return undefined;
8
+ }
9
+ const executableScriptEntrypoint = resolveNodeScriptEntrypoint(cliEntrypoint);
10
+ if (!executableScriptEntrypoint) {
11
+ return {
12
+ command: cliEntrypoint,
13
+ argsPrefix: [],
14
+ };
15
+ }
16
+ return {
17
+ command: nodeExecutable,
18
+ argsPrefix: [executableScriptEntrypoint],
19
+ };
20
+ }
21
+ export function resolveVoratiqCliTarget() {
22
+ const installedBinary = detectBinary("voratiq");
23
+ if (installedBinary) {
24
+ const executableScriptEntrypoint = resolveNodeScriptEntrypoint(installedBinary);
25
+ if (executableScriptEntrypoint) {
26
+ return {
27
+ command: process.execPath,
28
+ argsPrefix: [executableScriptEntrypoint],
29
+ };
30
+ }
31
+ return {
32
+ command: installedBinary,
33
+ argsPrefix: [],
34
+ };
35
+ }
36
+ return {
37
+ command: "voratiq",
38
+ argsPrefix: [],
39
+ };
40
+ }
41
+ function isNodeScriptEntrypoint(path) {
42
+ return path.endsWith(".js") || path.endsWith(".mjs") || path.endsWith(".cjs");
43
+ }
44
+ function resolveNodeScriptEntrypoint(path) {
45
+ if (isNodeScriptEntrypoint(path)) {
46
+ return path;
47
+ }
48
+ try {
49
+ const resolved = realpathSync(path);
50
+ if (isNodeScriptEntrypoint(resolved)) {
51
+ return resolved;
52
+ }
53
+ }
54
+ catch {
55
+ return undefined;
56
+ }
57
+ return undefined;
58
+ }
@@ -1,33 +1,30 @@
1
- import { WorkspaceSetupRunError } from "../commands/run/errors.js";
1
+ import type { SandboxStageId } from "../agents/runtime/policy.js";
2
2
  import type { AgentId } from "../configs/agents/types.js";
3
3
  import type { EnvironmentConfig } from "../configs/environment/types.js";
4
+ import { WorkspaceSetupRunError } from "../domain/run/competition/errors.js";
4
5
  import { type AgentWorkspacePaths } from "./layout.js";
5
- export interface ArtifactCollectionResult {
6
- summaryCaptured: boolean;
7
- diffStatistics?: string;
8
- commitSha?: string;
9
- diffAttempted: boolean;
10
- diffCaptured: boolean;
11
- }
12
6
  export interface SandboxPersona {
13
7
  authorName: string;
14
8
  authorEmail: string;
15
9
  }
16
- export declare function prepareAgentWorkspace(options: {
10
+ export declare function prepareScratchAgentWorkspace(options: {
11
+ paths: AgentWorkspacePaths;
12
+ }): Promise<void>;
13
+ export declare function prepareStageAgentWorkspace(options: {
17
14
  paths: AgentWorkspacePaths;
18
15
  baseRevisionSha: string;
19
16
  root: string;
20
17
  agentId: AgentId;
21
- runId: string;
18
+ sessionId: string;
19
+ stageId: SandboxStageId;
22
20
  environment: EnvironmentConfig;
23
21
  }): Promise<void>;
24
- export declare function collectAgentArtifacts(options: {
22
+ export declare function prepareAgentWorkspace(options: {
23
+ paths: AgentWorkspacePaths;
25
24
  baseRevisionSha: string;
26
- workspacePath: string;
27
- summaryPath: string;
28
- diffPath: string;
29
25
  root: string;
26
+ agentId: AgentId;
27
+ runId: string;
30
28
  environment: EnvironmentConfig;
31
- persona: SandboxPersona;
32
- }): Promise<ArtifactCollectionResult>;
29
+ }): Promise<void>;
33
30
  export declare function ensureWorkspaceError(error: unknown): WorkspaceSetupRunError;
@@ -1,15 +1,14 @@
1
- import { readFile, rm, writeFile } from "node:fs/promises";
2
- import { AgentProcessError, GitOperationError, WorkspaceSetupRunError, } from "../commands/run/errors.js";
1
+ import { rm } from "node:fs/promises";
2
+ import { WorkspaceSetupRunError } from "../domain/run/competition/errors.js";
3
3
  import { toErrorMessage } from "../utils/errors.js";
4
- import { createWorktree, gitAddAll, gitCommitAll, gitDiff, gitDiffShortStat, gitHasStagedChanges, runGitCommand, } from "../utils/git.js";
4
+ import { createWorktree } from "../utils/git.js";
5
5
  import { resolvePath } from "../utils/path.js";
6
- import { enforceCredentialExclusion } from "./credential-guard.js";
7
- import { cleanupWorkspaceDependencies, ensureWorkspaceDependencies, WorkspaceDependencyCleanupError, } from "./dependencies.js";
6
+ import { ensureWorkspaceDependencies } from "./dependencies.js";
8
7
  import { WorkspaceSetupError } from "./errors.js";
9
- import { scaffoldAgentWorkspace, WORKSPACE_SUMMARY_FILENAME, } from "./layout.js";
8
+ import { scaffoldAgentWorkspace } from "./layout.js";
10
9
  import { ensureWorkspaceShim } from "./shim.js";
11
- export async function prepareAgentWorkspace(options) {
12
- const { paths, baseRevisionSha, root, agentId, runId, environment } = options;
10
+ export async function prepareScratchAgentWorkspace(options) {
11
+ const { paths } = options;
13
12
  try {
14
13
  await scaffoldAgentWorkspace(paths);
15
14
  await rm(resolvePath(paths.agentRoot, "tmp"), {
@@ -20,11 +19,15 @@ export async function prepareAgentWorkspace(options) {
20
19
  catch (error) {
21
20
  throw ensureWorkspaceError(error);
22
21
  }
22
+ }
23
+ export async function prepareStageAgentWorkspace(options) {
24
+ const { paths, baseRevisionSha, root, agentId, sessionId, stageId, environment, } = options;
25
+ await prepareScratchAgentWorkspace({ paths });
23
26
  try {
24
27
  await createWorktree({
25
28
  root,
26
29
  worktreePath: paths.workspacePath,
27
- branch: `voratiq/run/${runId}/${agentId}`,
30
+ branch: `voratiq/${stageId}/${sessionId}/${agentId}`,
28
31
  baseRevision: baseRevisionSha,
29
32
  });
30
33
  await ensureWorkspaceDependencies({
@@ -40,111 +43,16 @@ export async function prepareAgentWorkspace(options) {
40
43
  throw ensureWorkspaceError(error);
41
44
  }
42
45
  }
43
- export async function collectAgentArtifacts(options) {
44
- const { baseRevisionSha, workspacePath, summaryPath, diffPath, root, environment, persona, } = options;
45
- let dependenciesCleanup = {
46
- nodeRemoved: false,
47
- pythonRemoved: false,
48
- };
49
- let cleanupFailed = false;
50
- try {
51
- dependenciesCleanup = await cleanupWorkspaceDependencies({
52
- root,
53
- workspacePath,
54
- environment,
55
- });
56
- }
57
- catch (error) {
58
- cleanupFailed = true;
59
- if (error instanceof WorkspaceDependencyCleanupError) {
60
- dependenciesCleanup = error.cleanup;
61
- }
62
- }
63
- let runFailed = true;
64
- let artifactResult;
65
- let dependencyRestoreError;
66
- try {
67
- await runGitStep("Git add failed", async () => gitAddAll(workspacePath));
68
- const hasChangesBeforeSummary = await gitHasStagedChanges(workspacePath);
69
- if (!hasChangesBeforeSummary) {
70
- throw new AgentProcessError({
71
- detail: "Agent process failed. No workspace changes detected.",
72
- });
73
- }
74
- const { summary } = await harvestSummary({
75
- workspacePath,
76
- summaryPath,
77
- });
78
- await runGitStep("Git add failed", async () => gitAddAll(workspacePath));
79
- const hasChanges = await gitHasStagedChanges(workspacePath);
80
- if (!hasChanges) {
81
- throw new AgentProcessError({
82
- detail: "Agent process failed. No workspace changes detected.",
83
- });
84
- }
85
- let diffStatistics;
86
- let commitSha;
87
- await runGitStep("Git commit failed", async () => gitCommitAll({
88
- cwd: workspacePath,
89
- message: summary,
90
- authorName: persona.authorName,
91
- authorEmail: persona.authorEmail,
92
- bypassHooks: true,
93
- }));
94
- commitSha = await runGitStep("Git rev-parse failed", async () => runGitCommand(["rev-parse", "HEAD"], { cwd: workspacePath }));
95
- const diffContent = await runGitStep("Git diff failed", async () => gitDiff({
96
- cwd: workspacePath,
97
- baseRevision: baseRevisionSha,
98
- targetRevision: "HEAD",
99
- }));
100
- await enforceCredentialExclusion({
101
- workspacePath,
102
- diffContent,
103
- });
104
- await writeFile(diffPath, diffContent, { encoding: "utf8" });
105
- diffStatistics = await runGitStep("Git diff --shortstat failed", async () => gitDiffShortStat({
106
- cwd: workspacePath,
107
- baseRevision: baseRevisionSha,
108
- targetRevision: "HEAD",
109
- }));
110
- runFailed = false;
111
- artifactResult = {
112
- summaryCaptured: true,
113
- diffStatistics,
114
- commitSha,
115
- diffAttempted: true,
116
- diffCaptured: true,
117
- };
118
- }
119
- finally {
120
- const cleanupTouched = dependenciesCleanup.nodeRemoved || dependenciesCleanup.pythonRemoved;
121
- const shouldRestoreDependencies = cleanupTouched || cleanupFailed;
122
- if (shouldRestoreDependencies) {
123
- try {
124
- await ensureWorkspaceDependencies({
125
- root,
126
- workspacePath,
127
- environment,
128
- });
129
- }
130
- catch (error) {
131
- if (!runFailed) {
132
- dependencyRestoreError = new AgentProcessError({
133
- detail: `[voratiq] Failed to restore workspace dependencies after export: ${toErrorMessage(error)}`,
134
- });
135
- }
136
- }
137
- }
138
- }
139
- if (dependencyRestoreError) {
140
- throw dependencyRestoreError;
141
- }
142
- if (!artifactResult) {
143
- throw new AgentProcessError({
144
- detail: "Agent process failed before artifacts were collected.",
145
- });
146
- }
147
- return artifactResult;
46
+ export async function prepareAgentWorkspace(options) {
47
+ return await prepareStageAgentWorkspace({
48
+ paths: options.paths,
49
+ baseRevisionSha: options.baseRevisionSha,
50
+ root: options.root,
51
+ agentId: options.agentId,
52
+ sessionId: options.runId,
53
+ stageId: "run",
54
+ environment: options.environment,
55
+ });
148
56
  }
149
57
  export function ensureWorkspaceError(error) {
150
58
  if (error instanceof WorkspaceSetupError) {
@@ -155,36 +63,3 @@ export function ensureWorkspaceError(error) {
155
63
  }
156
64
  return new WorkspaceSetupRunError(toErrorMessage(error));
157
65
  }
158
- async function harvestSummary(options) {
159
- const { workspacePath, summaryPath } = options;
160
- const workspaceSummaryPath = resolvePath(workspacePath, WORKSPACE_SUMMARY_FILENAME);
161
- let raw;
162
- try {
163
- raw = await readFile(workspaceSummaryPath, "utf8");
164
- }
165
- catch (error) {
166
- throw new AgentProcessError({ detail: toErrorMessage(error) });
167
- }
168
- const trimmed = raw.trim();
169
- if (!trimmed) {
170
- throw new AgentProcessError({
171
- detail: "Agent process failed. Summary is empty.",
172
- });
173
- }
174
- await writeFile(summaryPath, `${trimmed}\n`, { encoding: "utf8" });
175
- await rm(workspaceSummaryPath, { force: true });
176
- return {
177
- summary: trimmed,
178
- };
179
- }
180
- async function runGitStep(operationMessage, step) {
181
- try {
182
- return await step();
183
- }
184
- catch (error) {
185
- throw new GitOperationError({
186
- operation: operationMessage,
187
- detail: toErrorMessage(error),
188
- });
189
- }
190
- }
@@ -10,5 +10,14 @@ export interface ChatArtifactCaptureResult {
10
10
  export interface PreserveChatArtifactsOptions {
11
11
  providerId: string;
12
12
  agentRoot: string;
13
+ searchEnv?: NodeJS.ProcessEnv;
14
+ baseline?: ProviderTranscriptBaseline;
13
15
  }
16
+ export interface ProviderTranscriptSnapshotEntry {
17
+ path: string;
18
+ size: number;
19
+ mtimeMs: number;
20
+ }
21
+ export type ProviderTranscriptBaseline = readonly ProviderTranscriptSnapshotEntry[];
22
+ export declare function snapshotProviderTranscripts(options: Omit<PreserveChatArtifactsOptions, "baseline">): Promise<ProviderTranscriptBaseline>;
14
23
  export declare function preserveProviderChatTranscripts(options: PreserveChatArtifactsOptions): Promise<ChatArtifactCaptureResult>;
@@ -1,28 +1,39 @@
1
1
  import { once } from "node:events";
2
2
  import { createReadStream, createWriteStream } from "node:fs";
3
- import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
4
4
  import { dirname, relative, resolve } from "node:path";
5
5
  import { finished } from "node:stream/promises";
6
6
  import { pathExists } from "../../utils/fs.js";
7
7
  import { ARTIFACTS_DIRNAME, CHAT_JSON_FILENAME, CHAT_JSONL_FILENAME, } from "../structure.js";
8
8
  import { findProviderTranscripts } from "./sources.js";
9
+ export async function snapshotProviderTranscripts(options) {
10
+ const transcriptPaths = await findProviderTranscripts(options.providerId, {
11
+ agentRoot: options.agentRoot,
12
+ env: options.searchEnv,
13
+ });
14
+ return await collectTranscriptSnapshot(transcriptPaths);
15
+ }
9
16
  export async function preserveProviderChatTranscripts(options) {
10
17
  const { providerId, agentRoot } = options;
11
18
  if (!providerId) {
12
19
  return { status: "not-found" };
13
20
  }
14
- const existing = await locateExistingChatArtifact(agentRoot);
15
- if (existing !== undefined) {
16
- const { path, format } = existing;
21
+ let transcriptPaths;
22
+ try {
23
+ transcriptPaths = await findProviderTranscripts(providerId, {
24
+ agentRoot,
25
+ env: options.searchEnv,
26
+ });
27
+ }
28
+ catch (error) {
17
29
  return {
18
- status: "already-exists",
19
- artifactPath: path,
20
- format,
30
+ status: "error",
31
+ error: error instanceof Error ? error : new Error(String(error)),
21
32
  };
22
33
  }
23
- let transcriptPaths;
34
+ let candidatePaths;
24
35
  try {
25
- transcriptPaths = await findProviderTranscripts(providerId, agentRoot);
36
+ candidatePaths = await filterTranscriptPathsAgainstBaseline(transcriptPaths, options.baseline);
26
37
  }
27
38
  catch (error) {
28
39
  return {
@@ -30,8 +41,16 @@ export async function preserveProviderChatTranscripts(options) {
30
41
  error: error instanceof Error ? error : new Error(String(error)),
31
42
  };
32
43
  }
33
- const selection = selectTranscriptFiles(transcriptPaths);
44
+ const existing = await locateExistingChatArtifact(agentRoot);
45
+ const selection = selectTranscriptFiles(candidatePaths);
34
46
  if (!selection) {
47
+ if (existing !== undefined) {
48
+ return {
49
+ status: "already-exists",
50
+ artifactPath: existing.path,
51
+ format: existing.format,
52
+ };
53
+ }
35
54
  return { status: "not-found" };
36
55
  }
37
56
  const { format: selectionFormat, files } = selection;
@@ -50,7 +69,7 @@ export async function preserveProviderChatTranscripts(options) {
50
69
  await concatenateJsonlTranscripts(files, artifactPath);
51
70
  }
52
71
  return {
53
- status: "captured",
72
+ status: existing ? "already-exists" : "captured",
54
73
  artifactPath,
55
74
  format: selectionFormat,
56
75
  sourceCount: files.length,
@@ -104,7 +123,7 @@ async function bundleJsonTranscripts(options) {
104
123
  for (const file of files) {
105
124
  const raw = await readFile(file, "utf8");
106
125
  transcripts.push({
107
- source: relative(agentRoot, file),
126
+ source: toArtifactSourcePath(agentRoot, file),
108
127
  payload: parseJsonOrString(raw),
109
128
  });
110
129
  }
@@ -155,3 +174,54 @@ function parseJsonOrString(content) {
155
174
  return content;
156
175
  }
157
176
  }
177
+ async function collectTranscriptSnapshot(transcriptPaths) {
178
+ const snapshots = [];
179
+ for (const path of transcriptPaths) {
180
+ try {
181
+ const details = await stat(path);
182
+ if (!details.isFile()) {
183
+ continue;
184
+ }
185
+ snapshots.push({
186
+ path,
187
+ size: details.size,
188
+ mtimeMs: details.mtimeMs,
189
+ });
190
+ }
191
+ catch {
192
+ continue;
193
+ }
194
+ }
195
+ snapshots.sort((left, right) => left.path.localeCompare(right.path));
196
+ return snapshots;
197
+ }
198
+ async function filterTranscriptPathsAgainstBaseline(transcriptPaths, baseline) {
199
+ if (!baseline || baseline.length === 0) {
200
+ return transcriptPaths;
201
+ }
202
+ const baselineByPath = new Map(baseline.map((entry) => [entry.path, entry]));
203
+ const freshPaths = [];
204
+ for (const path of transcriptPaths) {
205
+ const prior = baselineByPath.get(path);
206
+ if (!prior) {
207
+ freshPaths.push(path);
208
+ continue;
209
+ }
210
+ try {
211
+ const current = await stat(path);
212
+ if (!current.isFile() ||
213
+ current.size !== prior.size ||
214
+ current.mtimeMs !== prior.mtimeMs) {
215
+ freshPaths.push(path);
216
+ }
217
+ }
218
+ catch {
219
+ continue;
220
+ }
221
+ }
222
+ return freshPaths.sort();
223
+ }
224
+ function toArtifactSourcePath(agentRoot, file) {
225
+ const source = relative(agentRoot, file);
226
+ return source.startsWith("..") ? file : source;
227
+ }