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,35 @@
1
+ import { type CompetitionExecuteFailureContext, type CompetitionFailurePolicy, type CompetitionPreparationResult } from "./core.js";
2
+ type Awaitable<T> = Promise<T> | T;
3
+ /**
4
+ * Shared command adapter contract for competition-core orchestration.
5
+ *
6
+ * Lifecycle order:
7
+ * 1. `queueCandidate` (per input candidate)
8
+ * 2. `prepareCandidates`
9
+ * 3. `onPreparationFailure` (per preparation failure result)
10
+ * 4. `onCandidatePrepared` (per prepared candidate)
11
+ * 5. execution phase (`onCandidateRunning` -> `executeCandidate` -> `onCandidateCompleted`)
12
+ * 6. `cleanupPreparedCandidate` (once per prepared candidate, including abort/error paths)
13
+ * 7. `finalizeCompetition` (exactly once, including error paths)
14
+ */
15
+ export interface CompetitionCommandAdapter<TCandidate, TPrepared, TResult> {
16
+ readonly failurePolicy?: CompetitionFailurePolicy;
17
+ readonly queueCandidate?: (candidate: TCandidate, index: number) => Awaitable<void>;
18
+ readonly prepareCandidates: (candidates: readonly TCandidate[]) => Awaitable<CompetitionPreparationResult<TPrepared, TResult>>;
19
+ readonly onPreparationFailure?: (result: TResult, index: number) => Awaitable<void>;
20
+ readonly onCandidatePrepared?: (prepared: TPrepared, index: number) => Awaitable<void>;
21
+ readonly executeCandidate: (prepared: TPrepared, index: number) => Awaitable<TResult>;
22
+ readonly onCandidateRunning?: (prepared: TPrepared, index: number) => Awaitable<void>;
23
+ readonly onCandidateCompleted?: (prepared: TPrepared, result: TResult, index: number) => Awaitable<void>;
24
+ readonly captureExecutionFailure?: (context: CompetitionExecuteFailureContext<TPrepared>) => Awaitable<TResult | undefined>;
25
+ readonly cleanupPreparedCandidate?: (prepared: TPrepared, index: number) => Awaitable<void>;
26
+ readonly finalizeCompetition?: () => Awaitable<void>;
27
+ readonly sortResults?: (left: TResult, right: TResult) => number;
28
+ }
29
+ export interface ExecuteCompetitionCommandInput<TCandidate, TPrepared, TResult> {
30
+ readonly candidates: readonly TCandidate[];
31
+ readonly maxParallel: number;
32
+ readonly adapter: CompetitionCommandAdapter<TCandidate, TPrepared, TResult>;
33
+ }
34
+ export declare function executeCompetitionWithAdapter<TCandidate, TPrepared, TResult>(input: ExecuteCompetitionCommandInput<TCandidate, TPrepared, TResult>): Promise<TResult[]>;
35
+ export type { CompetitionExecuteFailureContext, CompetitionFailurePolicy, CompetitionPreparationResult, };
@@ -0,0 +1,20 @@
1
+ import { executeCompetition, } from "./core.js";
2
+ export async function executeCompetitionWithAdapter(input) {
3
+ const { candidates, maxParallel, adapter } = input;
4
+ return await executeCompetition({
5
+ candidates,
6
+ maxParallel,
7
+ queueCandidate: adapter.queueCandidate,
8
+ prepareCandidates: adapter.prepareCandidates,
9
+ onPreparationFailure: adapter.onPreparationFailure,
10
+ onPreparedCandidate: adapter.onCandidatePrepared,
11
+ executePreparedCandidate: adapter.executeCandidate,
12
+ onCandidateRunning: adapter.onCandidateRunning,
13
+ onCandidateCompleted: adapter.onCandidateCompleted,
14
+ captureExecutionFailure: adapter.captureExecutionFailure,
15
+ cleanupPreparedCandidate: adapter.cleanupPreparedCandidate,
16
+ finalizeCompetition: adapter.finalizeCompetition,
17
+ sortResults: adapter.sortResults,
18
+ failurePolicy: adapter.failurePolicy,
19
+ });
20
+ }
@@ -0,0 +1,41 @@
1
+ type Awaitable<T> = Promise<T> | T;
2
+ export type CompetitionFailurePolicy = "abort" | "continue";
3
+ export interface CompetitionPreparationResult<TPrepared, TResult> {
4
+ readonly ready: readonly TPrepared[];
5
+ readonly failures: readonly TResult[];
6
+ }
7
+ export interface CompetitionExecuteFailureContext<TPrepared> {
8
+ readonly stage: "execute";
9
+ readonly prepared: TPrepared;
10
+ readonly index: number;
11
+ readonly error: unknown;
12
+ }
13
+ export interface BoundedCompetitionExecutionInput<TPrepared, TResult> {
14
+ readonly prepared: readonly TPrepared[];
15
+ readonly maxParallel: number;
16
+ readonly executePrepared: (prepared: TPrepared, index: number) => Awaitable<TResult>;
17
+ readonly onPreparedRunning?: (prepared: TPrepared, index: number) => Awaitable<void>;
18
+ readonly onPreparedCompleted?: (prepared: TPrepared, result: TResult, index: number) => Awaitable<void>;
19
+ readonly onExecutionFailure?: (context: CompetitionExecuteFailureContext<TPrepared>) => Awaitable<TResult | undefined>;
20
+ readonly cleanupPrepared?: (prepared: TPrepared, index: number) => Awaitable<void>;
21
+ readonly failurePolicy?: CompetitionFailurePolicy;
22
+ }
23
+ export interface CompetitionExecutionInput<TCandidate, TPrepared, TResult> {
24
+ readonly candidates: readonly TCandidate[];
25
+ readonly maxParallel: number;
26
+ readonly queueCandidate?: (candidate: TCandidate, index: number) => Awaitable<void>;
27
+ readonly prepareCandidates: (candidates: readonly TCandidate[]) => Awaitable<CompetitionPreparationResult<TPrepared, TResult>>;
28
+ readonly onPreparationFailure?: (result: TResult, index: number) => Awaitable<void>;
29
+ readonly onPreparedCandidate?: (prepared: TPrepared, index: number) => Awaitable<void>;
30
+ readonly executePreparedCandidate: (prepared: TPrepared, index: number) => Awaitable<TResult>;
31
+ readonly onCandidateRunning?: (prepared: TPrepared, index: number) => Awaitable<void>;
32
+ readonly onCandidateCompleted?: (prepared: TPrepared, result: TResult, index: number) => Awaitable<void>;
33
+ readonly captureExecutionFailure?: (context: CompetitionExecuteFailureContext<TPrepared>) => Awaitable<TResult | undefined>;
34
+ readonly cleanupPreparedCandidate?: (prepared: TPrepared, index: number) => Awaitable<void>;
35
+ readonly finalizeCompetition?: () => Awaitable<void>;
36
+ readonly sortResults?: (left: TResult, right: TResult) => number;
37
+ readonly failurePolicy?: CompetitionFailurePolicy;
38
+ }
39
+ export declare function runPreparedWithLimit<TPrepared, TResult>(input: BoundedCompetitionExecutionInput<TPrepared, TResult>): Promise<TResult[]>;
40
+ export declare function executeCompetition<TCandidate, TPrepared, TResult>(input: CompetitionExecutionInput<TCandidate, TPrepared, TResult>): Promise<TResult[]>;
41
+ export {};
@@ -0,0 +1,181 @@
1
+ function toError(error) {
2
+ return error instanceof Error ? error : new Error(String(error));
3
+ }
4
+ function pushError(state, error) {
5
+ const normalized = toError(error);
6
+ if (!state.primary) {
7
+ state.primary = normalized;
8
+ return;
9
+ }
10
+ state.secondary.push(normalized);
11
+ }
12
+ function throwCollectedErrors(state) {
13
+ if (state.primary && state.secondary.length > 0) {
14
+ throw new AggregateError([state.primary, ...state.secondary], state.primary.message);
15
+ }
16
+ if (state.primary) {
17
+ throw state.primary;
18
+ }
19
+ throw new Error("Competition execution failed without a captured error");
20
+ }
21
+ export async function runPreparedWithLimit(input) {
22
+ const { prepared, maxParallel, executePrepared, onPreparedRunning, onPreparedCompleted, onExecutionFailure, cleanupPrepared, failurePolicy = "abort", } = input;
23
+ if (prepared.length === 0) {
24
+ return [];
25
+ }
26
+ if (maxParallel <= 0) {
27
+ return [];
28
+ }
29
+ const workerCount = Math.max(1, Math.min(maxParallel, prepared.length));
30
+ const results = new Array(prepared.length);
31
+ const started = new Set();
32
+ const cleaned = new Set();
33
+ const errors = {
34
+ primary: undefined,
35
+ secondary: [],
36
+ };
37
+ let nextIndex = 0;
38
+ let shouldStop = false;
39
+ async function runCleanup(index) {
40
+ if (cleaned.has(index)) {
41
+ return;
42
+ }
43
+ cleaned.add(index);
44
+ if (!cleanupPrepared) {
45
+ return;
46
+ }
47
+ await cleanupPrepared(prepared[index], index);
48
+ }
49
+ async function worker() {
50
+ while (true) {
51
+ if (shouldStop && failurePolicy === "abort") {
52
+ return;
53
+ }
54
+ const current = nextIndex++;
55
+ if (current >= prepared.length) {
56
+ return;
57
+ }
58
+ started.add(current);
59
+ const entry = prepared[current];
60
+ try {
61
+ if (onPreparedRunning) {
62
+ await onPreparedRunning(entry, current);
63
+ }
64
+ const result = await executePrepared(entry, current);
65
+ results[current] = result;
66
+ if (onPreparedCompleted) {
67
+ await onPreparedCompleted(entry, result, current);
68
+ }
69
+ }
70
+ catch (error) {
71
+ const context = {
72
+ stage: "execute",
73
+ prepared: entry,
74
+ index: current,
75
+ error,
76
+ };
77
+ let captured;
78
+ if (onExecutionFailure) {
79
+ captured = await onExecutionFailure(context);
80
+ }
81
+ if (captured !== undefined) {
82
+ results[current] = captured;
83
+ }
84
+ else if (failurePolicy === "continue") {
85
+ pushError(errors, error);
86
+ }
87
+ else {
88
+ shouldStop = true;
89
+ pushError(errors, error);
90
+ }
91
+ }
92
+ finally {
93
+ try {
94
+ await runCleanup(current);
95
+ }
96
+ catch (error) {
97
+ pushError(errors, error);
98
+ if (failurePolicy === "abort") {
99
+ shouldStop = true;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+ const workers = new Array(workerCount);
106
+ for (let index = 0; index < workerCount; index += 1) {
107
+ workers[index] = worker();
108
+ }
109
+ await Promise.all(workers);
110
+ for (let index = 0; index < prepared.length; index += 1) {
111
+ if (!started.has(index) || !cleaned.has(index)) {
112
+ try {
113
+ await runCleanup(index);
114
+ }
115
+ catch (error) {
116
+ pushError(errors, error);
117
+ }
118
+ }
119
+ }
120
+ if (errors.primary) {
121
+ throwCollectedErrors(errors);
122
+ }
123
+ return results.filter((result) => result !== undefined);
124
+ }
125
+ export async function executeCompetition(input) {
126
+ const { candidates, maxParallel, queueCandidate, prepareCandidates, onPreparationFailure, onPreparedCandidate, executePreparedCandidate, onCandidateRunning, onCandidateCompleted, captureExecutionFailure, cleanupPreparedCandidate, finalizeCompetition, sortResults, failurePolicy = "abort", } = input;
127
+ const errors = {
128
+ primary: undefined,
129
+ secondary: [],
130
+ };
131
+ let results = [];
132
+ try {
133
+ for (const [index, candidate] of candidates.entries()) {
134
+ if (queueCandidate) {
135
+ await queueCandidate(candidate, index);
136
+ }
137
+ }
138
+ const preparation = await prepareCandidates(candidates);
139
+ for (const [index, failure] of preparation.failures.entries()) {
140
+ if (onPreparationFailure) {
141
+ await onPreparationFailure(failure, index);
142
+ }
143
+ }
144
+ for (const [index, preparedCandidate] of preparation.ready.entries()) {
145
+ if (onPreparedCandidate) {
146
+ await onPreparedCandidate(preparedCandidate, index);
147
+ }
148
+ }
149
+ const executionResults = await runPreparedWithLimit({
150
+ prepared: preparation.ready,
151
+ maxParallel,
152
+ executePrepared: executePreparedCandidate,
153
+ onPreparedRunning: onCandidateRunning,
154
+ onPreparedCompleted: onCandidateCompleted,
155
+ onExecutionFailure: captureExecutionFailure,
156
+ cleanupPrepared: cleanupPreparedCandidate,
157
+ failurePolicy,
158
+ });
159
+ results = [...preparation.failures, ...executionResults];
160
+ if (sortResults) {
161
+ results = [...results].sort(sortResults);
162
+ }
163
+ }
164
+ catch (error) {
165
+ pushError(errors, error);
166
+ }
167
+ finally {
168
+ if (finalizeCompetition) {
169
+ try {
170
+ await finalizeCompetition();
171
+ }
172
+ catch (error) {
173
+ pushError(errors, error);
174
+ }
175
+ }
176
+ }
177
+ if (errors.primary) {
178
+ throwCollectedErrors(errors);
179
+ }
180
+ return results;
181
+ }
@@ -0,0 +1,14 @@
1
+ export interface ResolvedExtraContextFile {
2
+ readonly absolutePath: string;
3
+ readonly displayPath: string;
4
+ readonly stagedRelativePath: string;
5
+ }
6
+ export declare function resolveExtraContextFiles(options: {
7
+ root: string;
8
+ paths?: readonly string[];
9
+ }): Promise<ResolvedExtraContextFile[]>;
10
+ export declare function stageExtraContextFiles(options: {
11
+ contextPath: string;
12
+ files: readonly ResolvedExtraContextFile[];
13
+ }): Promise<void>;
14
+ export declare function appendExtraContextPromptSection(lines: string[], files: readonly ResolvedExtraContextFile[]): void;
@@ -0,0 +1,100 @@
1
+ import { constants as fsConstants } from "node:fs";
2
+ import { access, copyFile, mkdir, stat } from "node:fs/promises";
3
+ import { basename, dirname, extname, join } from "node:path";
4
+ import { isAbsolute } from "node:path";
5
+ import { CliError } from "../../cli/errors.js";
6
+ import { EXTRA_CONTEXT_STAGED_PREFIX, toExtraContextContextSubpath, } from "../../extra-context/contract.js";
7
+ import { isFileSystemError } from "../../utils/fs.js";
8
+ import { assertPathWithinRoot, normalizePathForDisplay, relativeToRoot, resolvePath, } from "../../utils/path.js";
9
+ export async function resolveExtraContextFiles(options) {
10
+ const { root, paths } = options;
11
+ if (!paths || paths.length === 0) {
12
+ return [];
13
+ }
14
+ const resolved = [];
15
+ const allocatedBasenames = new Map();
16
+ for (const rawPath of paths) {
17
+ const trimmed = rawPath.trim();
18
+ if (trimmed.length === 0) {
19
+ throw new CliError("`--extra-context` paths must not be empty.");
20
+ }
21
+ const absolutePath = isAbsolute(trimmed)
22
+ ? trimmed
23
+ : resolvePath(root, trimmed);
24
+ let fileStat;
25
+ try {
26
+ fileStat = await stat(absolutePath);
27
+ }
28
+ catch (error) {
29
+ if (isFileSystemError(error) &&
30
+ ["EACCES", "EPERM"].includes(error.code)) {
31
+ throw new CliError(`Extra context file \`${trimmed}\` is not accessible.`, [`Resolved path: \`${absolutePath}\`.`], ["Ensure the file exists and is readable by the current user."]);
32
+ }
33
+ throw new CliError(`Extra context file \`${trimmed}\` not found.`, [], ["Pass a readable file path to `--extra-context`."]);
34
+ }
35
+ if (!fileStat.isFile()) {
36
+ throw new CliError(`Extra context path \`${trimmed}\` is not a file.`, [], ["Pass a readable file path to `--extra-context`."]);
37
+ }
38
+ try {
39
+ await access(absolutePath, fsConstants.R_OK);
40
+ }
41
+ catch (error) {
42
+ if (isFileSystemError(error) &&
43
+ ["EACCES", "EPERM"].includes(error.code)) {
44
+ throw new CliError(`Extra context file \`${trimmed}\` is not readable.`, [`Resolved path: \`${absolutePath}\`.`], ["Fix file permissions and re-run with `--extra-context`."]);
45
+ }
46
+ throw error;
47
+ }
48
+ const displayPath = resolveExtraContextDisplayPath(root, absolutePath);
49
+ const originalBasename = basename(absolutePath);
50
+ const allocatedBasename = allocateContextBasename(originalBasename, allocatedBasenames);
51
+ resolved.push({
52
+ absolutePath,
53
+ displayPath,
54
+ stagedRelativePath: `${EXTRA_CONTEXT_STAGED_PREFIX}${allocatedBasename}`,
55
+ });
56
+ }
57
+ return resolved;
58
+ }
59
+ export async function stageExtraContextFiles(options) {
60
+ const { contextPath, files } = options;
61
+ for (const file of files) {
62
+ const destination = resolveStagedDestinationPath({
63
+ contextPath,
64
+ stagedRelativePath: file.stagedRelativePath,
65
+ });
66
+ await mkdir(dirname(destination), { recursive: true });
67
+ await copyFile(file.absolutePath, destination);
68
+ }
69
+ }
70
+ export function appendExtraContextPromptSection(lines, files) {
71
+ if (files.length === 0) {
72
+ return;
73
+ }
74
+ lines.push("", "Extra context files (staged alongside the workspace):", ...files.map((file) => `- \`${file.stagedRelativePath}\` (source: \`${file.displayPath}\`)`), "- Treat these files as supplemental context for this invocation.");
75
+ }
76
+ function allocateContextBasename(originalBasename, allocations) {
77
+ const nextCount = (allocations.get(originalBasename) ?? 0) + 1;
78
+ allocations.set(originalBasename, nextCount);
79
+ if (nextCount === 1) {
80
+ return originalBasename;
81
+ }
82
+ const extension = extname(originalBasename);
83
+ const stem = extension.length > 0
84
+ ? originalBasename.slice(0, -extension.length)
85
+ : originalBasename;
86
+ return `${stem}-${nextCount}${extension}`;
87
+ }
88
+ function resolveStagedDestinationPath(options) {
89
+ const { contextPath, stagedRelativePath } = options;
90
+ return join(contextPath, toExtraContextContextSubpath(stagedRelativePath));
91
+ }
92
+ function resolveExtraContextDisplayPath(root, absolutePath) {
93
+ try {
94
+ assertPathWithinRoot(root, absolutePath);
95
+ return normalizePathForDisplay(relativeToRoot(root, absolutePath));
96
+ }
97
+ catch {
98
+ return normalizePathForDisplay(absolutePath);
99
+ }
100
+ }
@@ -0,0 +1,11 @@
1
+ export interface PreflightIssue {
2
+ readonly agentId: string;
3
+ readonly message: string;
4
+ }
5
+ export interface FormatPreflightIssueLinesOptions {
6
+ readonly maxChars?: number;
7
+ readonly unlabeledAgentIds?: readonly string[];
8
+ }
9
+ export declare const PREFLIGHT_SUMMARY_MAX_CHARS: 120;
10
+ export declare const PREFLIGHT_HINT: "Run `voratiq init` to configure the workspace.";
11
+ export declare function formatPreflightIssueLines(issues: readonly PreflightIssue[], options?: FormatPreflightIssueLinesOptions): string[];
@@ -0,0 +1,39 @@
1
+ export const PREFLIGHT_SUMMARY_MAX_CHARS = 120;
2
+ export const PREFLIGHT_HINT = "Run `voratiq init` to configure the workspace.";
3
+ export function formatPreflightIssueLines(issues, options = {}) {
4
+ const { maxChars = PREFLIGHT_SUMMARY_MAX_CHARS, unlabeledAgentIds = [] } = options;
5
+ const unlabeled = new Set(unlabeledAgentIds);
6
+ const lines = [];
7
+ for (const issue of issues) {
8
+ const messageLines = normalizeIssueMessage(issue.message);
9
+ for (const message of messageLines) {
10
+ const full = formatIssueLine(issue.agentId, message, unlabeled);
11
+ lines.push(truncateLine(full, maxChars));
12
+ }
13
+ }
14
+ return lines;
15
+ }
16
+ function formatIssueLine(agentId, message, unlabeledAgentIds) {
17
+ if (unlabeledAgentIds.has(agentId)) {
18
+ return `- ${message}`;
19
+ }
20
+ return `- ${agentId}: ${message}`;
21
+ }
22
+ function normalizeIssueMessage(message) {
23
+ const split = message
24
+ .split(/\r?\n/u)
25
+ .map((line) => line.replace(/\s+/gu, " ").trim())
26
+ .filter((line) => line.length > 0);
27
+ return split.length > 0 ? split : ["unknown error"];
28
+ }
29
+ function truncateLine(value, maxChars) {
30
+ if (value.length <= maxChars) {
31
+ return value;
32
+ }
33
+ const suffix = "...";
34
+ if (maxChars <= suffix.length) {
35
+ return suffix.slice(0, maxChars);
36
+ }
37
+ const sliceLength = maxChars - suffix.length;
38
+ return `${value.slice(0, sliceLength).trimEnd()}${suffix}`;
39
+ }
@@ -0,0 +1,16 @@
1
+ export interface AppendConstraintsOptions {
2
+ extra?: string[];
3
+ readAccess?: string;
4
+ writeAccess?: string;
5
+ }
6
+ export interface WorkspaceArtifactRequirement {
7
+ instruction: string;
8
+ path: string;
9
+ schema?: {
10
+ content: string | readonly string[];
11
+ leadIn: string;
12
+ };
13
+ }
14
+ export declare function appendConstraints(lines: string[], options?: AppendConstraintsOptions): void;
15
+ export declare function appendOutputRequirements(lines: string[], extra?: string[]): void;
16
+ export declare function buildWorkspaceArtifactRequirements(requirements: readonly WorkspaceArtifactRequirement[], extra?: readonly string[]): string[];
@@ -0,0 +1,27 @@
1
+ export function appendConstraints(lines, options = {}) {
2
+ const { extra, readAccess, writeAccess } = options;
3
+ const accessLines = [];
4
+ if (readAccess) {
5
+ accessLines.push(`- Read access: \`${readAccess}\`.`);
6
+ }
7
+ if (writeAccess) {
8
+ accessLines.push(`- Write access: \`${writeAccess}\`.`);
9
+ }
10
+ lines.push("", "Constraints:", ...accessLines, "- You are sandboxed. If an operation is blocked, skip it and continue.", "- You are running headlessly. Do not pause for user interaction.", ...(extra ?? []));
11
+ }
12
+ export function appendOutputRequirements(lines, extra) {
13
+ lines.push("", "Output requirements:", ...(extra ?? []), "- Do not write files outside the workspace.");
14
+ }
15
+ export function buildWorkspaceArtifactRequirements(requirements, extra = []) {
16
+ const lines = requirements.flatMap((requirement) => {
17
+ const instructionLine = `- ${requirement.instruction} to \`${requirement.path}\` in the workspace root${requirement.schema ? `, ${requirement.schema.leadIn}:` : "."}`;
18
+ if (!requirement.schema) {
19
+ return [instructionLine];
20
+ }
21
+ const schemaLines = Array.isArray(requirement.schema.content)
22
+ ? requirement.schema.content
23
+ : [requirement.schema.content];
24
+ return [instructionLine, ...schemaLines.map((line) => ` ${line}`)];
25
+ });
26
+ return [...lines, ...extra];
27
+ }
@@ -0,0 +1 @@
1
+ export declare function pruneWorkspace(workspacePath: string): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import { rm } from "node:fs/promises";
2
+ export async function pruneWorkspace(workspacePath) {
3
+ await rm(workspacePath, { recursive: true, force: true }).catch(() => { });
4
+ }
@@ -0,0 +1,9 @@
1
+ export interface ComposeStageSandboxPolicyInput {
2
+ stageWriteProtectedPaths?: readonly string[];
3
+ stageReadProtectedPaths?: readonly string[];
4
+ }
5
+ export interface StageSandboxPolicy {
6
+ extraWriteProtectedPaths: string[];
7
+ extraReadProtectedPaths: string[];
8
+ }
9
+ export declare function composeStageSandboxPolicy(input?: ComposeStageSandboxPolicyInput): StageSandboxPolicy;
@@ -0,0 +1,7 @@
1
+ export function composeStageSandboxPolicy(input = {}) {
2
+ const { stageWriteProtectedPaths = [], stageReadProtectedPaths = [] } = input;
3
+ return {
4
+ extraWriteProtectedPaths: [...stageWriteProtectedPaths],
5
+ extraReadProtectedPaths: [...stageReadProtectedPaths],
6
+ };
7
+ }
@@ -0,0 +1,36 @@
1
+ export interface TeardownDiagnostic {
2
+ readonly label: string;
3
+ readonly error: unknown;
4
+ }
5
+ export type TeardownResource = {
6
+ readonly kind: "path";
7
+ readonly path: string;
8
+ readonly label?: string;
9
+ } | {
10
+ readonly kind: "worktree";
11
+ readonly root: string;
12
+ readonly worktreePath: string;
13
+ readonly label?: string;
14
+ } | {
15
+ readonly kind: "action";
16
+ readonly key: string;
17
+ readonly label: string;
18
+ readonly cleanup: () => Promise<void>;
19
+ };
20
+ export interface TeardownController {
21
+ readonly label: string;
22
+ addPath(path: string, label?: string): void;
23
+ addWorktree(options: {
24
+ root: string;
25
+ worktreePath: string;
26
+ label?: string;
27
+ }): void;
28
+ addAction(options: {
29
+ key: string;
30
+ label: string;
31
+ cleanup: () => Promise<void>;
32
+ }): void;
33
+ listResources(): readonly TeardownResource[];
34
+ }
35
+ export declare function createTeardownController(label: string): TeardownController;
36
+ export declare function runTeardown(controller: TeardownController | undefined): Promise<readonly TeardownDiagnostic[]>;
@@ -0,0 +1,101 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { toErrorMessage } from "../../utils/errors.js";
3
+ import { getGitStderr, removeWorktree } from "../../utils/git.js";
4
+ export function createTeardownController(label) {
5
+ const resources = new Map();
6
+ return {
7
+ label,
8
+ addPath(path, resourceLabel) {
9
+ resources.set(`path:${path}`, {
10
+ kind: "path",
11
+ path,
12
+ ...(resourceLabel ? { label: resourceLabel } : {}),
13
+ });
14
+ },
15
+ addWorktree(options) {
16
+ const { root, worktreePath, label: resourceLabel } = options;
17
+ resources.set(`worktree:${root}:${worktreePath}`, {
18
+ kind: "worktree",
19
+ root,
20
+ worktreePath,
21
+ ...(resourceLabel ? { label: resourceLabel } : {}),
22
+ });
23
+ },
24
+ addAction(options) {
25
+ resources.set(`action:${options.key}`, {
26
+ kind: "action",
27
+ key: options.key,
28
+ label: options.label,
29
+ cleanup: options.cleanup,
30
+ });
31
+ },
32
+ listResources() {
33
+ return [...resources.values()];
34
+ },
35
+ };
36
+ }
37
+ export async function runTeardown(controller) {
38
+ if (!controller) {
39
+ return [];
40
+ }
41
+ const diagnostics = [];
42
+ for (const resource of controller.listResources()) {
43
+ try {
44
+ await cleanupTeardownResource(resource);
45
+ }
46
+ catch (error) {
47
+ const label = resourceLabel(resource);
48
+ diagnostics.push({ label, error });
49
+ console.warn(`[voratiq] Failed to teardown ${controller.label} ${label}: ${toErrorMessage(error)}`);
50
+ }
51
+ }
52
+ return diagnostics;
53
+ }
54
+ async function cleanupTeardownResource(resource) {
55
+ switch (resource.kind) {
56
+ case "path":
57
+ await rm(resource.path, { recursive: true, force: true });
58
+ return;
59
+ case "worktree":
60
+ await cleanupWorktree(resource);
61
+ return;
62
+ case "action":
63
+ await resource.cleanup();
64
+ return;
65
+ }
66
+ }
67
+ async function cleanupWorktree(resource) {
68
+ try {
69
+ await removeWorktree({
70
+ root: resource.root,
71
+ worktreePath: resource.worktreePath,
72
+ });
73
+ return;
74
+ }
75
+ catch (error) {
76
+ if (!isIgnorableMissingWorktreeError(error)) {
77
+ throw error;
78
+ }
79
+ }
80
+ await rm(resource.worktreePath, { recursive: true, force: true });
81
+ }
82
+ function isIgnorableMissingWorktreeError(error) {
83
+ const stderr = getGitStderr(error)?.toLowerCase() ?? "";
84
+ return (stderr.includes("is not a working tree") ||
85
+ stderr.includes("not a working tree") ||
86
+ stderr.includes("does not exist") ||
87
+ stderr.includes("no such file or directory"));
88
+ }
89
+ function resourceLabel(resource) {
90
+ if (resource.label) {
91
+ return `resource \`${resource.label}\``;
92
+ }
93
+ switch (resource.kind) {
94
+ case "path":
95
+ return `path \`${resource.path}\``;
96
+ case "worktree":
97
+ return `worktree \`${resource.worktreePath}\``;
98
+ case "action":
99
+ return `resource \`${resource.label}\``;
100
+ }
101
+ }