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
@@ -0,0 +1,233 @@
1
+ import process from "node:process";
2
+ import { CliError } from "../../cli/errors.js";
3
+ import { writeCommandOutput, } from "../../cli/output.js";
4
+ import { loadAgentCatalogDiagnostics } from "../../configs/agents/loader.js";
5
+ import { prepareNativeInteractiveSession, spawnPreparedInteractiveSession, } from "../../interactive/index.js";
6
+ import { resolveCliContext } from "../../preflight/index.js";
7
+ import { renderRootLauncherInvalidSelection, renderRootLauncherLaunchStart, renderRootLauncherMcpInstallStart, renderRootLauncherMcpInstallSuccess, renderRootLauncherSelectionScreen, renderRootLauncherSingleAgentScreen, } from "../../render/transcripts/root-launcher.js";
8
+ import { renderWorkspaceAutoInitializedNotice } from "../../render/transcripts/shared.js";
9
+ import { createEntrypointVoratiqCliTarget } from "../../utils/voratiq-cli-target.js";
10
+ export async function runRootLauncherCommand(options) {
11
+ const { resolveContext = resolveCliContext, loadDiagnostics = loadAgentCatalogDiagnostics, createWorkflow, prepareSession = prepareNativeInteractiveSession, spawnSession = spawnPreparedInteractiveSession, selfCliTarget = createEntrypointVoratiqCliTarget({
12
+ cliEntrypoint: process.argv[1],
13
+ }), writeOutput = writeCommandOutput, } = options;
14
+ const createRootLauncherWorkflow = createWorkflow ??
15
+ (() => {
16
+ throw new Error("Missing root launcher workflow factory.");
17
+ });
18
+ const setup = await setupRootLauncher({
19
+ resolveContext,
20
+ loadDiagnostics,
21
+ writeOutput,
22
+ });
23
+ const workflow = createRootLauncherWorkflow({
24
+ onUnavailable: () => {
25
+ throw new CliError("An interactive terminal is required to launch a native agent session.", [], [
26
+ "Run `voratiq` from an interactive terminal, or use an explicit subcommand instead.",
27
+ ]);
28
+ },
29
+ });
30
+ let workflowClosed = false;
31
+ const closeWorkflow = () => {
32
+ if (!workflowClosed) {
33
+ workflow.close();
34
+ workflowClosed = true;
35
+ }
36
+ };
37
+ try {
38
+ const promptResult = await promptForLaunchPlan({
39
+ availability: setup.availability,
40
+ prompt: (promptOptions) => workflow.prompt(promptOptions),
41
+ writeOutput,
42
+ });
43
+ const qaInitialPrompt = resolveQaInitialPrompt();
44
+ let acceptedMcpInstallPrompt = false;
45
+ const prepared = await prepareFirstPartyInteractiveSession({
46
+ root: setup.root,
47
+ selected: promptResult.selected,
48
+ prepareSession,
49
+ selfCliTarget,
50
+ prompt: qaInitialPrompt,
51
+ promptForMcpInstall: async (promptOptions) => {
52
+ const accepted = await workflow.confirm({
53
+ message: promptOptions.message,
54
+ defaultValue: promptOptions.defaultValue,
55
+ prefaceLines: ["", ...(promptOptions.prefaceLines ?? [])],
56
+ });
57
+ if (accepted) {
58
+ acceptedMcpInstallPrompt = true;
59
+ writeLauncherNotice(writeOutput, renderRootLauncherMcpInstallStart());
60
+ }
61
+ return accepted;
62
+ },
63
+ });
64
+ if (!prepared.ok) {
65
+ throw new CliError(`Failed to launch ${formatAgentLabel(promptResult.selected.entry)}.`, [prepared.failure.message]);
66
+ }
67
+ if (acceptedMcpInstallPrompt) {
68
+ writeLauncherNotice(writeOutput, renderRootLauncherMcpInstallSuccess());
69
+ }
70
+ closeWorkflow();
71
+ const started = await launchFirstPartyInteractiveSession({
72
+ selected: promptResult.selected,
73
+ prepared: prepared.prepared,
74
+ spawnSession,
75
+ writeOutput,
76
+ });
77
+ await finalizeLaunchResult(started.selected, started.launchResult);
78
+ }
79
+ finally {
80
+ closeWorkflow();
81
+ }
82
+ }
83
+ async function setupRootLauncher(options) {
84
+ const { resolveContext, loadDiagnostics, writeOutput } = options;
85
+ const context = await resolveContext({
86
+ requireWorkspace: true,
87
+ workspaceAutoInitMode: "when-missing",
88
+ });
89
+ if (context.workspaceAutoInitialized) {
90
+ writeLauncherNotice(writeOutput, renderWorkspaceAutoInitializedNotice());
91
+ }
92
+ const diagnostics = loadDiagnostics({ root: context.root });
93
+ assertEnabledAgents(diagnostics);
94
+ const availability = buildLauncherAvailability(diagnostics);
95
+ if (availability.launchable.length === 0) {
96
+ throw buildNoLaunchableAgentsError(availability.unavailable);
97
+ }
98
+ return {
99
+ root: context.root,
100
+ availability,
101
+ };
102
+ }
103
+ function assertEnabledAgents(diagnostics) {
104
+ if (diagnostics.enabledAgents.length > 0) {
105
+ return;
106
+ }
107
+ throw new CliError("No enabled agents found.", [], [
108
+ "Add agents to `.voratiq/agents.yaml` or run `voratiq init` to set up your workspace.",
109
+ ]);
110
+ }
111
+ function buildLauncherAvailability(diagnostics) {
112
+ const issuesByAgentId = new Map();
113
+ for (const issue of diagnostics.issues) {
114
+ const current = issuesByAgentId.get(issue.agentId) ?? [];
115
+ current.push(issue.message);
116
+ issuesByAgentId.set(issue.agentId, current);
117
+ }
118
+ const resolvableAgentIds = new Set(diagnostics.catalog.map((agent) => agent.id));
119
+ const launchable = [];
120
+ const unavailable = [];
121
+ for (const entry of diagnostics.enabledAgents) {
122
+ const reasons = issuesByAgentId.get(entry.id) ?? [];
123
+ if (reasons.length === 0 && resolvableAgentIds.has(entry.id)) {
124
+ launchable.push({ entry });
125
+ continue;
126
+ }
127
+ unavailable.push({
128
+ entry,
129
+ reasons: reasons.length > 0
130
+ ? reasons
131
+ : ["agent definition could not be resolved"],
132
+ });
133
+ }
134
+ return { launchable, unavailable };
135
+ }
136
+ async function promptForLaunchPlan(options) {
137
+ const { availability, prompt, writeOutput } = options;
138
+ const selected = availability.launchable.length === 1
139
+ ? availability.launchable[0]
140
+ : await promptForAgentSelection({
141
+ launchable: availability.launchable,
142
+ unavailable: availability.unavailable,
143
+ prompt: (promptOptions) => prompt(promptOptions),
144
+ writeOutput,
145
+ });
146
+ if (availability.launchable.length === 1) {
147
+ writeLauncherNotice(writeOutput, renderRootLauncherSingleAgentScreen({
148
+ selected: formatAgentLabel(selected.entry),
149
+ unavailable: availability.unavailable.map((agent) => ({
150
+ label: formatAgentLabel(agent.entry),
151
+ reasons: agent.reasons,
152
+ })),
153
+ }));
154
+ }
155
+ return { selected };
156
+ }
157
+ async function promptForAgentSelection(options) {
158
+ const { launchable, unavailable, prompt, writeOutput } = options;
159
+ writeLauncherNotice(writeOutput, renderRootLauncherSelectionScreen({
160
+ launchable: launchable.map((agent) => ({
161
+ label: formatAgentLabel(agent.entry),
162
+ })),
163
+ unavailable: unavailable.map((agent) => ({
164
+ label: formatAgentLabel(agent.entry),
165
+ reasons: agent.reasons,
166
+ })),
167
+ }));
168
+ for (;;) {
169
+ const response = await prompt({ message: `[1-${launchable.length}]` });
170
+ const parsed = Number.parseInt(response.trim(), 10);
171
+ if (Number.isInteger(parsed) &&
172
+ parsed >= 1 &&
173
+ parsed <= launchable.length) {
174
+ return launchable[parsed - 1];
175
+ }
176
+ writeLauncherNotice(writeOutput, renderRootLauncherInvalidSelection(launchable.length));
177
+ }
178
+ }
179
+ async function prepareFirstPartyInteractiveSession(options) {
180
+ const { root, selected, prepareSession, selfCliTarget, prompt, promptForMcpInstall, } = options;
181
+ return await prepareSession({
182
+ root,
183
+ cwd: root,
184
+ agentId: selected.entry.id,
185
+ launchMode: "first-party",
186
+ prompt,
187
+ ...(selfCliTarget ? { voratiqCliTarget: selfCliTarget } : {}),
188
+ promptForMcpInstall: async (promptOptions) => await promptForMcpInstall({
189
+ message: promptOptions.message,
190
+ defaultValue: promptOptions.defaultValue,
191
+ prefaceLines: promptOptions.prefaceLines,
192
+ }),
193
+ });
194
+ }
195
+ async function launchFirstPartyInteractiveSession(options) {
196
+ const { selected, prepared, spawnSession, writeOutput } = options;
197
+ writeLauncherNotice(writeOutput, renderRootLauncherLaunchStart(formatAgentLabel(selected.entry)), {
198
+ leadingNewline: true,
199
+ });
200
+ const launchResult = await spawnSession(prepared, { stdio: "inherit" });
201
+ return { selected, launchResult };
202
+ }
203
+ function writeLauncherNotice(writeOutput, message, options = {}) {
204
+ writeOutput({
205
+ alerts: [{ severity: "info", message: message.trimEnd() }],
206
+ leadingNewline: options.leadingNewline ?? false,
207
+ });
208
+ }
209
+ async function finalizeLaunchResult(selected, launchResult) {
210
+ if (!launchResult.ok) {
211
+ throw new CliError(`Failed to launch ${formatAgentLabel(selected.entry)}.`, [launchResult.failure.message]);
212
+ }
213
+ const completedRecord = await launchResult.completion;
214
+ if (completedRecord.status === "failed") {
215
+ process.exitCode = 1;
216
+ }
217
+ }
218
+ function buildNoLaunchableAgentsError(unavailable) {
219
+ const detailLines = [
220
+ "Enabled agents with blocking issues:",
221
+ ...unavailable.map((agent) => ` - ${formatAgentLabel(agent.entry)}: ${agent.reasons.join("; ")}`),
222
+ ];
223
+ return new CliError("No enabled agents can be launched.", detailLines, [
224
+ "Fix the blocking agent configuration in `.voratiq/agents.yaml`, then retry.",
225
+ ]);
226
+ }
227
+ function formatAgentLabel(agent) {
228
+ return `${agent.id} (${agent.provider} / ${agent.model})`;
229
+ }
230
+ function resolveQaInitialPrompt() {
231
+ const prompt = process.env.VORATIQ_QA_INITIAL_PROMPT?.trim();
232
+ return prompt && prompt.length > 0 ? prompt : undefined;
233
+ }
@@ -1,11 +1,16 @@
1
- import type { RunReport } from "../../records/types.js";
1
+ import type { ResolvedExtraContextFile } from "../../competition/shared/extra-context.js";
2
+ import type { RunReport } from "../../domain/run/model/types.js";
2
3
  import type { RunProgressRenderer } from "../../render/transcripts/run.js";
3
4
  export interface RunCommandInput {
4
5
  root: string;
5
6
  runsFilePath: string;
6
7
  specAbsolutePath: string;
7
8
  specDisplayPath: string;
9
+ agentIds?: readonly string[];
10
+ agentOverrideFlag?: string;
11
+ profileName?: string;
8
12
  maxParallel?: number;
13
+ extraContextFiles?: readonly ResolvedExtraContextFile[];
9
14
  renderer?: RunProgressRenderer;
10
15
  }
11
16
  /**
@@ -1,33 +1,48 @@
1
- import { createAgentRecordMutators } from "../../records/mutators.js";
2
- import { flushRunRecordBuffer, rewriteRunRecord, } from "../../records/persistence.js";
3
- import { toError } from "../../utils/errors.js";
1
+ import { teardownSessionAuth } from "../../agents/runtime/registry.js";
2
+ import { createTeardownController } from "../../competition/shared/teardown.js";
3
+ import { executeAgents } from "../../domain/run/competition/agent-execution.js";
4
+ import { RunCommandError, RunProcessStreamError, } from "../../domain/run/competition/errors.js";
5
+ import { toRunReport } from "../../domain/run/competition/reports.js";
6
+ import { generateRunId } from "../../domain/run/model/id.js";
7
+ import { createAgentRecordMutators, mergeAgentRecords, } from "../../domain/run/model/mutators.js";
8
+ import { flushRunRecordBuffer, rewriteRunRecord, } from "../../domain/run/persistence/adapter.js";
9
+ import { buildRecordLifecycleCompleteFields } from "../../domain/shared/lifecycle.js";
10
+ import { buildPersistedExtraContextFields } from "../../extra-context/contract.js";
11
+ import { deriveRunStatusFromAgents } from "../../status/index.js";
12
+ import { toErrorMessage } from "../../utils/errors.js";
4
13
  import { normalizePathForDisplay, relativeToRoot } from "../../utils/path.js";
5
14
  import { buildAgentWorkspacePaths, formatRunWorkspaceRelative, } from "../../workspace/layout.js";
6
15
  import { prepareRunWorkspace } from "../../workspace/run.js";
7
- import { executeAgents } from "./agent-execution.js";
8
- import { generateRunId } from "./id.js";
9
- import { clearActiveRun, registerActiveRun } from "./lifecycle.js";
16
+ import { resolveStageCompetitors } from "../shared/resolve-stage-competitors.js";
17
+ import { finalizeActiveRun, registerActiveRun } from "./lifecycle.js";
10
18
  import { initializeRunRecord } from "./record-init.js";
11
- import { toRunReport } from "./reports.js";
12
- import { teardownRunSandboxes } from "./sandbox-registry.js";
13
19
  import { validateAndPrepare } from "./validation.js";
14
20
  /**
15
21
  * Execute a complete run: validate inputs, prepare workspace, execute agents, and finalize report.
16
22
  */
17
23
  export async function executeRunCommand(input) {
18
- const { root, runsFilePath, specAbsolutePath, specDisplayPath, maxParallel: requestedMaxParallel, renderer, } = input;
24
+ const { root, runsFilePath, specAbsolutePath, specDisplayPath, agentIds, agentOverrideFlag, profileName, maxParallel: requestedMaxParallel, extraContextFiles = [], renderer, } = input;
25
+ const resolution = resolveStageCompetitors({
26
+ root,
27
+ stageId: "run",
28
+ cliAgentIds: agentIds,
29
+ cliOverrideFlag: agentOverrideFlag,
30
+ profileName,
31
+ includeDefinitions: false,
32
+ });
19
33
  const validation = await validateAndPrepare({
20
34
  root,
21
35
  specAbsolutePath,
36
+ resolvedAgentIds: resolution.agentIds,
22
37
  maxParallel: requestedMaxParallel,
23
38
  });
24
39
  const runId = generateRunId();
25
- const createdAt = new Date().toISOString();
40
+ const startedAt = new Date().toISOString();
41
+ const createdAt = startedAt;
26
42
  const repoDisplayPath = normalizePathForDisplay(relativeToRoot(root, root));
27
43
  const { runWorkspace } = await prepareRunWorkspace({
28
44
  root,
29
45
  runId,
30
- prompt: validation.prompt,
31
46
  });
32
47
  const runRoot = runWorkspace.absolute;
33
48
  const { recordPersisted } = await initializeRunRecord({
@@ -38,7 +53,17 @@ export async function executeRunCommand(input) {
38
53
  baseRevisionSha: validation.baseRevisionSha,
39
54
  repoDisplayPath,
40
55
  createdAt,
56
+ startedAt,
41
57
  runRoot,
58
+ ...buildPersistedExtraContextFields(extraContextFiles),
59
+ });
60
+ const teardown = createTeardownController(`run \`${runId}\``);
61
+ teardown.addAction({
62
+ key: `run-auth:${runId}`,
63
+ label: "session auth",
64
+ cleanup: async () => {
65
+ await teardownSessionAuth(runId);
66
+ },
42
67
  });
43
68
  const agentAbortContexts = validation.agents.map((agent) => {
44
69
  const workspacePaths = buildAgentWorkspacePaths({
@@ -46,6 +71,7 @@ export async function executeRunCommand(input) {
46
71
  runId,
47
72
  agentId: agent.id,
48
73
  });
74
+ registerRunWorkspaceTeardown(teardown, workspacePaths, agent.id);
49
75
  return {
50
76
  agentId: agent.id,
51
77
  providerId: agent.provider,
@@ -56,16 +82,16 @@ export async function executeRunCommand(input) {
56
82
  root,
57
83
  runsFilePath,
58
84
  runId,
85
+ teardown,
59
86
  agents: agentAbortContexts,
60
87
  });
61
88
  if (renderer) {
62
89
  renderer.begin({
63
90
  runId,
64
91
  status: "running",
65
- specPath: specDisplayPath,
66
92
  workspacePath: formatRunWorkspaceRelative(runId),
67
93
  createdAt,
68
- baseRevisionSha: validation.baseRevisionSha,
94
+ startedAt,
69
95
  });
70
96
  }
71
97
  const mutators = createAgentRecordMutators({
@@ -76,7 +102,6 @@ export async function executeRunCommand(input) {
76
102
  });
77
103
  let agentRecords = [];
78
104
  let executionError;
79
- let cleanupError;
80
105
  let runReport;
81
106
  try {
82
107
  const executionResult = await executeAgents({
@@ -84,17 +109,14 @@ export async function executeRunCommand(input) {
84
109
  baseRevisionSha: validation.baseRevisionSha,
85
110
  runId,
86
111
  root,
87
- evalPlan: validation.evalPlan,
112
+ specContent: validation.specContent,
113
+ extraContextFiles,
88
114
  effectiveMaxParallel: validation.effectiveMaxParallel,
89
115
  environment: validation.environment,
90
116
  mutators,
91
117
  });
92
118
  agentRecords = executionResult.agentRecords;
93
- const derivedRunStatus = executionResult.hadAgentFailure || executionResult.hadEvalFailure
94
- ? "failed"
95
- : executionResult.agentReports.some((report) => report.status === "errored")
96
- ? "errored"
97
- : "succeeded";
119
+ const derivedRunStatus = deriveRunStatusFromAgents(executionResult.agentReports.map((report) => report.status));
98
120
  const updatedRunRecord = await rewriteRunRecord({
99
121
  root,
100
122
  runsFilePath,
@@ -105,13 +127,14 @@ export async function executeRunCommand(input) {
105
127
  }
106
128
  return {
107
129
  ...existing,
108
- agents: agentRecords,
130
+ agents: mergeFinalAgentRecords(existing.agents, agentRecords),
109
131
  status: derivedRunStatus,
132
+ ...buildRecordLifecycleCompleteFields({ existing }),
110
133
  deletedAt: null,
111
134
  };
112
135
  },
113
136
  });
114
- runReport = toRunReport(updatedRunRecord, executionResult.agentReports, executionResult.hadAgentFailure, executionResult.hadEvalFailure);
137
+ runReport = toRunReport(updatedRunRecord, executionResult.agentReports, executionResult.hadAgentFailure);
115
138
  }
116
139
  catch (error) {
117
140
  executionError = error;
@@ -127,8 +150,11 @@ export async function executeRunCommand(input) {
127
150
  }
128
151
  return {
129
152
  ...existing,
130
- agents: agentRecords.length > 0 ? agentRecords : existing.agents,
153
+ agents: agentRecords.length > 0
154
+ ? mergeFinalAgentRecords(existing.agents, agentRecords)
155
+ : existing.agents,
131
156
  status: "errored",
157
+ ...buildRecordLifecycleCompleteFields({ existing }),
132
158
  deletedAt: null,
133
159
  };
134
160
  },
@@ -140,27 +166,16 @@ export async function executeRunCommand(input) {
140
166
  }
141
167
  }
142
168
  finally {
143
- try {
144
- await teardownRunSandboxes(runId);
145
- }
146
- catch (error) {
147
- cleanupError = error;
148
- }
149
- finally {
150
- clearActiveRun(runId);
151
- }
152
- }
153
- if (cleanupError) {
154
- if (executionError) {
155
- throw new AggregateError([executionError, cleanupError], `Sandbox teardown failed after run ${runId} error`);
156
- }
157
- throw toError(cleanupError);
169
+ await finalizeActiveRun(runId);
158
170
  }
159
171
  if (executionError) {
160
- throw toError(executionError);
172
+ if (executionError instanceof RunCommandError) {
173
+ throw executionError;
174
+ }
175
+ throw new RunProcessStreamError(toErrorMessage(executionError));
161
176
  }
162
177
  if (!runReport) {
163
- throw new Error(`Run ${runId} did not produce a report`);
178
+ throw new RunProcessStreamError(`Run \`${runId}\` did not produce a report.`);
164
179
  }
165
180
  await flushRunRecordBuffer({
166
181
  runsFilePath,
@@ -168,3 +183,18 @@ export async function executeRunCommand(input) {
168
183
  });
169
184
  return runReport;
170
185
  }
186
+ function registerRunWorkspaceTeardown(teardown, workspacePaths, agentId) {
187
+ teardown.addPath(workspacePaths.contextPath, `${agentId} context`);
188
+ teardown.addPath(workspacePaths.runtimePath, `${agentId} runtime`);
189
+ teardown.addPath(workspacePaths.sandboxPath, `${agentId} sandbox`);
190
+ }
191
+ function mergeFinalAgentRecords(existing, incoming) {
192
+ const merged = new Map();
193
+ for (const agent of existing) {
194
+ merged.set(agent.agentId, agent);
195
+ }
196
+ for (const agent of incoming) {
197
+ merged.set(agent.agentId, mergeAgentRecords(merged.get(agent.agentId), agent));
198
+ }
199
+ return [...merged.values()];
200
+ }
@@ -1,9 +1,12 @@
1
+ import type { TeardownController } from "../../competition/shared/teardown.js";
2
+ import { getActiveTerminationStatus, RUN_ABORT_WARNING } from "../../domain/run/competition/termination-state.js";
1
3
  import type { RunStatus } from "../../status/index.js";
2
- export declare const RUN_ABORT_WARNING = "Run aborted before agent completed.";
4
+ import { TERMINABLE_RUN_STATUSES } from "../../status/index.js";
3
5
  interface ActiveRunContext {
4
6
  root: string;
5
7
  runsFilePath: string;
6
8
  runId: string;
9
+ teardown?: TeardownController;
7
10
  agents?: readonly ActiveRunAgentContext[];
8
11
  }
9
12
  interface ActiveRunAgentContext {
@@ -11,9 +14,8 @@ interface ActiveRunAgentContext {
11
14
  providerId?: string;
12
15
  agentRoot: string;
13
16
  }
14
- declare const TERMINABLE_STATUSES: readonly ["failed", "aborted"];
15
17
  export declare function registerActiveRun(context: ActiveRunContext): void;
16
18
  export declare function clearActiveRun(runId: string): void;
17
- export declare function getActiveTerminationStatus(runId: string): RunStatus | undefined;
18
- export declare function terminateActiveRun(status: Extract<RunStatus, (typeof TERMINABLE_STATUSES)[number]>): Promise<void>;
19
- export {};
19
+ export { getActiveTerminationStatus, RUN_ABORT_WARNING };
20
+ export declare function terminateActiveRun(status: Extract<RunStatus, (typeof TERMINABLE_RUN_STATUSES)[number]>): Promise<void>;
21
+ export declare function finalizeActiveRun(runId: string): Promise<void>;
@@ -1,12 +1,12 @@
1
- import { disposeRunRecordBuffer, getRunRecordSnapshot, rewriteRunRecord, } from "../../records/persistence.js";
1
+ import { runTeardown } from "../../competition/shared/teardown.js";
2
+ import { getActiveTerminationStatus, RUN_ABORT_WARNING, setActiveTerminationStatus, } from "../../domain/run/competition/termination-state.js";
3
+ import { disposeRunRecordBuffer, getRunRecordSnapshot, rewriteRunRecord, } from "../../domain/run/persistence/adapter.js";
4
+ import { buildOperationLifecycleCompleteFields, buildRecordLifecycleCompleteFields, } from "../../domain/shared/lifecycle.js";
5
+ import { TERMINABLE_RUN_STATUSES } from "../../status/index.js";
2
6
  import { toErrorMessage } from "../../utils/errors.js";
3
7
  import { preserveProviderChatTranscripts } from "../../workspace/chat/artifacts.js";
4
- import { teardownRunSandboxes } from "./sandbox-registry.js";
5
- export const RUN_ABORT_WARNING = "Run aborted before agent completed.";
6
8
  let activeRun;
7
9
  let terminationInFlight = false;
8
- let activeTerminationStatus;
9
- const TERMINABLE_STATUSES = ["failed", "aborted"];
10
10
  export function registerActiveRun(context) {
11
11
  activeRun = context;
12
12
  }
@@ -18,25 +18,17 @@ export function clearActiveRun(runId) {
18
18
  activeRun = undefined;
19
19
  }
20
20
  }
21
- export function getActiveTerminationStatus(runId) {
22
- if (!terminationInFlight) {
23
- return undefined;
24
- }
25
- if (!activeRun || activeRun.runId !== runId) {
26
- return undefined;
27
- }
28
- return activeTerminationStatus;
29
- }
21
+ export { getActiveTerminationStatus, RUN_ABORT_WARNING };
30
22
  export async function terminateActiveRun(status) {
31
- if (!TERMINABLE_STATUSES.includes(status)) {
23
+ if (!TERMINABLE_RUN_STATUSES.includes(status)) {
32
24
  return;
33
25
  }
34
26
  if (!activeRun || terminationInFlight) {
35
27
  return;
36
28
  }
37
29
  terminationInFlight = true;
38
- activeTerminationStatus = status;
39
30
  const context = activeRun;
31
+ setActiveTerminationStatus(context.runId, status);
40
32
  let finalized = false;
41
33
  const chatArtifactsByAgent = new Map();
42
34
  let persistenceError;
@@ -47,12 +39,12 @@ export async function terminateActiveRun(status) {
47
39
  await rewriteRunRecord({
48
40
  ...context,
49
41
  mutate: (existing) => {
42
+ const completedAt = new Date().toISOString();
50
43
  const runInProgress = existing.status === "running" || existing.status === "queued";
51
44
  const runStatusNeedsUpdate = runInProgress && existing.status !== status;
52
45
  let agentsChanged = false;
53
46
  let agents = existing.agents;
54
47
  if (status === "aborted") {
55
- const abortedAt = new Date().toISOString();
56
48
  const abortWarning = RUN_ABORT_WARNING;
57
49
  agents = existing.agents.map((agent) => {
58
50
  if (agent.status !== "running" && agent.status !== "queued") {
@@ -74,8 +66,11 @@ export async function terminateActiveRun(status) {
74
66
  return {
75
67
  ...agent,
76
68
  status: "aborted",
77
- startedAt: agent.startedAt ?? abortedAt,
78
- completedAt: abortedAt,
69
+ ...buildOperationLifecycleCompleteFields({
70
+ existing: agent,
71
+ startedAt: agent.startedAt ?? completedAt,
72
+ completedAt,
73
+ }),
79
74
  warnings: nextWarnings,
80
75
  artifacts: nextArtifacts,
81
76
  };
@@ -84,10 +79,21 @@ export async function terminateActiveRun(status) {
84
79
  if (!runStatusNeedsUpdate && !agentsChanged) {
85
80
  return existing;
86
81
  }
82
+ if (runStatusNeedsUpdate) {
83
+ return {
84
+ ...existing,
85
+ status,
86
+ ...buildRecordLifecycleCompleteFields({
87
+ existing,
88
+ startedAt: existing.startedAt ?? completedAt,
89
+ completedAt,
90
+ }),
91
+ deletedAt: null,
92
+ agents,
93
+ };
94
+ }
87
95
  return {
88
96
  ...existing,
89
- status: runStatusNeedsUpdate ? status : existing.status,
90
- deletedAt: runStatusNeedsUpdate ? null : existing.deletedAt,
91
97
  agents,
92
98
  };
93
99
  },
@@ -115,17 +121,30 @@ export async function terminateActiveRun(status) {
115
121
  }
116
122
  }
117
123
  try {
118
- await teardownRunSandboxes(context.runId);
124
+ await finalizeRegisteredRunTeardown(context);
119
125
  }
120
126
  finally {
121
127
  terminationInFlight = false;
122
- activeTerminationStatus = undefined;
128
+ setActiveTerminationStatus(context.runId, undefined);
123
129
  activeRun = undefined;
124
130
  }
125
131
  if (persistenceError) {
126
132
  throw persistenceError;
127
133
  }
128
134
  }
135
+ export async function finalizeActiveRun(runId) {
136
+ if (!activeRun || activeRun.runId !== runId) {
137
+ clearActiveRun(runId);
138
+ return;
139
+ }
140
+ const context = activeRun;
141
+ try {
142
+ await finalizeRegisteredRunTeardown(context);
143
+ }
144
+ finally {
145
+ clearActiveRun(runId);
146
+ }
147
+ }
129
148
  async function captureChatArtifactsBeforeAbort(context, output) {
130
149
  const agentContexts = context.agents ?? [];
131
150
  if (agentContexts.length === 0) {
@@ -184,3 +203,6 @@ async function captureChatArtifactsBeforeAbort(context, output) {
184
203
  }
185
204
  }
186
205
  }
206
+ async function finalizeRegisteredRunTeardown(context) {
207
+ await runTeardown(context.teardown);
208
+ }
@@ -1,4 +1,4 @@
1
- import type { RunRecordInitResult } from "./phases.js";
1
+ import type { RunRecordInitResult } from "../../domain/run/competition/phases.js";
2
2
  export interface RecordInitInput {
3
3
  readonly root: string;
4
4
  readonly runsFilePath: string;
@@ -7,7 +7,10 @@ export interface RecordInitInput {
7
7
  readonly baseRevisionSha: string;
8
8
  readonly repoDisplayPath: string;
9
9
  readonly createdAt: string;
10
+ readonly startedAt: string;
10
11
  readonly runRoot: string;
12
+ readonly extraContext?: string[];
13
+ readonly extraContextMetadata?: import("../../extra-context/contract.js").PersistedExtraContextMetadataEntry[];
11
14
  }
12
15
  /**
13
16
  * Initialize and persist the initial run record.
@@ -1,17 +1,20 @@
1
- import { appendRunRecord } from "../../records/persistence.js";
1
+ import { appendRunRecord } from "../../domain/run/persistence/adapter.js";
2
2
  import { normalizePathForDisplay } from "../../utils/path.js";
3
3
  import { cleanupRunWorkspace } from "../../workspace/cleanup.js";
4
4
  /**
5
5
  * Initialize and persist the initial run record.
6
6
  */
7
7
  export async function initializeRunRecord(input) {
8
- const { root, runsFilePath, runId, specDisplayPath, baseRevisionSha, repoDisplayPath, createdAt, runRoot, } = input;
8
+ const { root, runsFilePath, runId, specDisplayPath, baseRevisionSha, repoDisplayPath, createdAt, startedAt, runRoot, extraContext, extraContextMetadata, } = input;
9
9
  const initialRecord = {
10
10
  runId,
11
11
  spec: {
12
12
  path: normalizePathForDisplay(specDisplayPath),
13
13
  },
14
+ extraContext,
15
+ extraContextMetadata,
14
16
  createdAt,
17
+ startedAt,
15
18
  baseRevisionSha,
16
19
  rootPath: repoDisplayPath,
17
20
  agents: [],
@@ -1 +1,2 @@
1
- export declare function main(argv?: string[]): Promise<number>;
1
+ import { main } from "../../../agents/runtime/shim/run-agent-shim.js";
2
+ export { main };