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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/README.md +41 -29
  2. package/dist/agents/launch/chat.d.ts +23 -0
  3. package/dist/agents/launch/chat.js +44 -0
  4. package/dist/agents/launch/environment.d.ts +8 -0
  5. package/dist/{commands/run/agents/workspace-prep.js → agents/launch/environment.js} +5 -27
  6. package/dist/agents/launch/prompt.d.ts +6 -0
  7. package/dist/agents/launch/prompt.js +12 -0
  8. package/dist/agents/launch/provider-state.d.ts +39 -0
  9. package/dist/agents/launch/provider-state.js +103 -0
  10. package/dist/agents/runtime/auth.d.ts +27 -0
  11. package/dist/agents/runtime/auth.js +72 -0
  12. package/dist/agents/runtime/chat.d.ts +5 -0
  13. package/dist/agents/runtime/chat.js +7 -0
  14. package/dist/agents/runtime/errors.d.ts +27 -0
  15. package/dist/agents/runtime/errors.js +51 -0
  16. package/dist/{commands/run/agents → agents/runtime}/failures.d.ts +0 -1
  17. package/dist/agents/runtime/failures.js +136 -0
  18. package/dist/agents/runtime/harness.d.ts +2 -0
  19. package/dist/agents/runtime/harness.js +119 -0
  20. package/dist/{commands/run/agents/sandbox-launcher.d.ts → agents/runtime/launcher.d.ts} +18 -6
  21. package/dist/{commands/run/agents/sandbox-launcher.js → agents/runtime/launcher.js} +17 -39
  22. package/dist/{commands/run/agents/workspace-prep.d.ts → agents/runtime/manifest.d.ts} +6 -6
  23. package/dist/agents/runtime/manifest.js +34 -0
  24. package/dist/agents/runtime/policy.d.ts +32 -0
  25. package/dist/agents/runtime/policy.js +240 -0
  26. package/dist/agents/runtime/registry.d.ts +4 -0
  27. package/dist/agents/runtime/registry.js +54 -0
  28. package/dist/{commands/run → agents/runtime}/sandbox.d.ts +8 -2
  29. package/dist/{commands/run → agents/runtime}/sandbox.js +28 -67
  30. package/dist/agents/runtime/shim/run-agent-shim.d.ts +1 -0
  31. package/dist/agents/runtime/shim/run-agent-shim.js +276 -0
  32. package/dist/agents/runtime/types.d.ts +91 -0
  33. package/dist/{commands/run/agents → agents/runtime}/watchdog.d.ts +4 -3
  34. package/dist/{commands/run/agents → agents/runtime}/watchdog.js +155 -26
  35. package/dist/auth/providers/codex.js +7 -2
  36. package/dist/auth/providers/gemini.js +14 -6
  37. package/dist/auth/providers/types.d.ts +1 -0
  38. package/dist/auth/providers/utils.d.ts +0 -1
  39. package/dist/auth/providers/utils.js +1 -49
  40. package/dist/bin.js +369 -71
  41. package/dist/cli/apply.d.ts +4 -0
  42. package/dist/cli/apply.js +28 -9
  43. package/dist/cli/auto.d.ts +32 -0
  44. package/dist/cli/auto.js +232 -0
  45. package/dist/cli/contract.d.ts +328 -0
  46. package/dist/cli/contract.js +480 -0
  47. package/dist/cli/errors.d.ts +3 -0
  48. package/dist/cli/errors.js +21 -3
  49. package/dist/cli/init.d.ts +5 -0
  50. package/dist/cli/init.js +34 -6
  51. package/dist/cli/list.d.ts +6 -4
  52. package/dist/cli/list.js +39 -16
  53. package/dist/cli/mcp.d.ts +2 -0
  54. package/dist/cli/mcp.js +16 -0
  55. package/dist/cli/message.d.ts +28 -0
  56. package/dist/cli/message.js +147 -0
  57. package/dist/cli/operator-envelope.d.ts +180 -0
  58. package/dist/cli/operator-envelope.js +425 -0
  59. package/dist/cli/output.d.ts +15 -1
  60. package/dist/cli/output.js +153 -5
  61. package/dist/cli/prune.d.ts +7 -3
  62. package/dist/cli/prune.js +57 -12
  63. package/dist/cli/reduce.d.ts +29 -0
  64. package/dist/cli/reduce.js +211 -0
  65. package/dist/cli/root-launcher.d.ts +4 -0
  66. package/dist/cli/root-launcher.js +15 -0
  67. package/dist/cli/run.d.ts +27 -1
  68. package/dist/cli/run.js +108 -16
  69. package/dist/cli/spec.d.ts +31 -0
  70. package/dist/cli/spec.js +180 -0
  71. package/dist/cli/verify.d.ts +35 -0
  72. package/dist/cli/verify.js +297 -0
  73. package/dist/commands/apply/command.d.ts +2 -0
  74. package/dist/commands/apply/command.js +145 -6
  75. package/dist/commands/apply/errors.d.ts +43 -4
  76. package/dist/commands/apply/errors.js +100 -22
  77. package/dist/commands/apply/types.d.ts +2 -1
  78. package/dist/commands/auto/command.d.ts +145 -0
  79. package/dist/commands/auto/command.js +433 -0
  80. package/dist/commands/auto/errors.d.ts +19 -0
  81. package/dist/commands/auto/errors.js +19 -0
  82. package/dist/commands/auto/validation.d.ts +14 -0
  83. package/dist/commands/auto/validation.js +90 -0
  84. package/dist/commands/fetch.d.ts +2 -2
  85. package/dist/commands/fetch.js +4 -4
  86. package/dist/commands/init/agents.d.ts +2 -1
  87. package/dist/commands/init/agents.js +66 -63
  88. package/dist/commands/init/command.js +300 -16
  89. package/dist/commands/init/types.d.ts +18 -7
  90. package/dist/commands/interactive/lifecycle.d.ts +15 -0
  91. package/dist/commands/interactive/lifecycle.js +141 -0
  92. package/dist/commands/list/command.d.ts +10 -3
  93. package/dist/commands/list/command.js +597 -40
  94. package/dist/commands/message/command.d.ts +23 -0
  95. package/dist/commands/message/command.js +215 -0
  96. package/dist/commands/message/errors.d.ts +9 -0
  97. package/dist/commands/message/errors.js +20 -0
  98. package/dist/commands/message/lifecycle.d.ts +14 -0
  99. package/dist/commands/message/lifecycle.js +128 -0
  100. package/dist/commands/prune/command.d.ts +2 -1
  101. package/dist/commands/prune/command.js +61 -10
  102. package/dist/commands/prune/errors.d.ts +1 -1
  103. package/dist/commands/prune/errors.js +5 -5
  104. package/dist/commands/prune/types.d.ts +21 -0
  105. package/dist/commands/reduce/command.d.ts +26 -0
  106. package/dist/commands/reduce/command.js +145 -0
  107. package/dist/commands/reduce/errors.d.ts +17 -0
  108. package/dist/commands/reduce/errors.js +32 -0
  109. package/dist/commands/reduce/targets.d.ts +11 -0
  110. package/dist/commands/reduce/targets.js +271 -0
  111. package/dist/commands/root-launcher/command.d.ts +31 -0
  112. package/dist/commands/root-launcher/command.js +233 -0
  113. package/dist/commands/run/command.d.ts +6 -1
  114. package/dist/commands/run/command.js +70 -40
  115. package/dist/commands/run/lifecycle.d.ts +7 -5
  116. package/dist/commands/run/lifecycle.js +45 -23
  117. package/dist/commands/run/record-init.d.ts +4 -1
  118. package/dist/commands/run/record-init.js +5 -2
  119. package/dist/commands/run/shim/run-agent-shim.d.ts +2 -1
  120. package/dist/commands/run/shim/run-agent-shim.js +4 -219
  121. package/dist/commands/run/validation.d.ts +2 -3
  122. package/dist/commands/run/validation.js +54 -25
  123. package/dist/commands/shared/max-parallel.d.ts +5 -0
  124. package/dist/commands/shared/max-parallel.js +15 -0
  125. package/dist/commands/shared/preview.d.ts +10 -0
  126. package/dist/commands/shared/preview.js +60 -0
  127. package/dist/commands/shared/resolve-reduction-competitors.d.ts +15 -0
  128. package/dist/commands/shared/resolve-reduction-competitors.js +13 -0
  129. package/dist/commands/shared/resolve-stage-competitors.d.ts +19 -0
  130. package/dist/commands/shared/resolve-stage-competitors.js +171 -0
  131. package/dist/commands/shared/session-id.d.ts +1 -0
  132. package/dist/commands/shared/session-id.js +1 -0
  133. package/dist/commands/spec/command.d.ts +22 -0
  134. package/dist/commands/spec/command.js +330 -0
  135. package/dist/commands/spec/errors.d.ts +11 -0
  136. package/dist/commands/spec/errors.js +23 -0
  137. package/dist/commands/verify/agents.d.ts +8 -0
  138. package/dist/commands/verify/agents.js +29 -0
  139. package/dist/commands/verify/command.d.ts +23 -0
  140. package/dist/commands/verify/command.js +168 -0
  141. package/dist/commands/verify/lifecycle.d.ts +14 -0
  142. package/dist/commands/verify/lifecycle.js +229 -0
  143. package/dist/commands/verify/max-parallel.d.ts +7 -0
  144. package/dist/commands/verify/max-parallel.js +15 -0
  145. package/dist/commands/verify/targets.d.ts +18 -0
  146. package/dist/commands/verify/targets.js +420 -0
  147. package/dist/competition/command-adapter.d.ts +35 -0
  148. package/dist/competition/command-adapter.js +20 -0
  149. package/dist/competition/core.d.ts +41 -0
  150. package/dist/competition/core.js +181 -0
  151. package/dist/competition/shared/extra-context.d.ts +14 -0
  152. package/dist/competition/shared/extra-context.js +100 -0
  153. package/dist/competition/shared/preflight.d.ts +11 -0
  154. package/dist/competition/shared/preflight.js +39 -0
  155. package/dist/competition/shared/prompt-helpers.d.ts +16 -0
  156. package/dist/competition/shared/prompt-helpers.js +27 -0
  157. package/dist/competition/shared/prune.d.ts +1 -0
  158. package/dist/competition/shared/prune.js +4 -0
  159. package/dist/competition/shared/sandbox-policy.d.ts +9 -0
  160. package/dist/competition/shared/sandbox-policy.js +7 -0
  161. package/dist/competition/shared/teardown.d.ts +36 -0
  162. package/dist/competition/shared/teardown.js +101 -0
  163. package/dist/configs/agents/defaults.d.ts +31 -2
  164. package/dist/configs/agents/defaults.js +346 -30
  165. package/dist/configs/agents/errors.js +14 -11
  166. package/dist/configs/agents/loader.d.ts +11 -1
  167. package/dist/configs/agents/loader.js +71 -4
  168. package/dist/configs/agents/types.js +2 -2
  169. package/dist/configs/environment/detect.js +9 -4
  170. package/dist/configs/environment/errors.js +4 -4
  171. package/dist/configs/environment/loader.d.ts +1 -1
  172. package/dist/configs/environment/loader.js +3 -3
  173. package/dist/configs/orchestration/bootstrap.d.ts +16 -0
  174. package/dist/configs/orchestration/bootstrap.js +122 -0
  175. package/dist/configs/orchestration/errors.d.ts +15 -0
  176. package/dist/configs/orchestration/errors.js +28 -0
  177. package/dist/configs/orchestration/loader.d.ts +9 -0
  178. package/dist/configs/orchestration/loader.js +148 -0
  179. package/dist/configs/orchestration/types.d.ts +102 -0
  180. package/dist/configs/orchestration/types.js +65 -0
  181. package/dist/configs/sandbox/defaults.js +14 -4
  182. package/dist/configs/sandbox/errors.d.ts +1 -1
  183. package/dist/configs/sandbox/errors.js +1 -1
  184. package/dist/configs/sandbox/loader.js +6 -4
  185. package/dist/configs/sandbox/schemas.js +4 -2
  186. package/dist/configs/settings/loader.d.ts +7 -0
  187. package/dist/configs/settings/loader.js +81 -0
  188. package/dist/configs/settings/types.d.ts +47 -0
  189. package/dist/configs/settings/types.js +23 -0
  190. package/dist/configs/verification/errors.d.ts +11 -0
  191. package/dist/configs/verification/errors.js +21 -0
  192. package/dist/configs/verification/loader.d.ts +8 -0
  193. package/dist/configs/verification/loader.js +43 -0
  194. package/dist/configs/verification/methods.d.ts +35 -0
  195. package/dist/configs/verification/methods.js +41 -0
  196. package/dist/configs/verification/programmatic-defaults.d.ts +10 -0
  197. package/dist/configs/verification/programmatic-defaults.js +42 -0
  198. package/dist/configs/verification/programmatic-detect.d.ts +10 -0
  199. package/dist/configs/{evals/detect.js → verification/programmatic-detect.js} +22 -33
  200. package/dist/configs/verification/types.d.ts +49 -0
  201. package/dist/configs/verification/types.js +45 -0
  202. package/dist/contracts/list.d.ts +207 -0
  203. package/dist/contracts/list.js +154 -0
  204. package/dist/domain/interactive/model/types.d.ts +104 -0
  205. package/dist/domain/interactive/model/types.js +83 -0
  206. package/dist/domain/interactive/persistence/adapter.d.ts +39 -0
  207. package/dist/domain/interactive/persistence/adapter.js +144 -0
  208. package/dist/domain/interactive/prompt.d.ts +3 -0
  209. package/dist/domain/interactive/prompt.js +7 -0
  210. package/dist/domain/message/competition/adapter.d.ts +36 -0
  211. package/dist/domain/message/competition/adapter.js +197 -0
  212. package/dist/domain/message/competition/prompt.d.ts +8 -0
  213. package/dist/domain/message/competition/prompt.js +29 -0
  214. package/dist/domain/message/model/mutators.d.ts +17 -0
  215. package/dist/domain/message/model/mutators.js +107 -0
  216. package/dist/domain/message/model/types.d.ts +100 -0
  217. package/dist/domain/message/model/types.js +87 -0
  218. package/dist/domain/message/persistence/adapter.d.ts +43 -0
  219. package/dist/domain/message/persistence/adapter.js +124 -0
  220. package/dist/domain/reduce/competition/adapter.d.ts +42 -0
  221. package/dist/domain/reduce/competition/adapter.js +826 -0
  222. package/dist/domain/reduce/competition/output-validation.d.ts +4 -0
  223. package/dist/domain/reduce/competition/output-validation.js +18 -0
  224. package/dist/domain/reduce/competition/prompt.d.ts +10 -0
  225. package/dist/domain/reduce/competition/prompt.js +96 -0
  226. package/dist/domain/reduce/competition/reduction.d.ts +9 -0
  227. package/dist/domain/reduce/competition/reduction.js +32 -0
  228. package/dist/domain/reduce/model/types.d.ts +122 -0
  229. package/dist/domain/reduce/model/types.js +84 -0
  230. package/dist/domain/reduce/persistence/adapter.d.ts +43 -0
  231. package/dist/domain/reduce/persistence/adapter.js +126 -0
  232. package/dist/domain/run/competition/adapter.d.ts +30 -0
  233. package/dist/domain/run/competition/adapter.js +39 -0
  234. package/dist/domain/run/competition/agent-execution.d.ts +20 -0
  235. package/dist/domain/run/competition/agent-execution.js +45 -0
  236. package/dist/domain/run/competition/agent-preparation.d.ts +12 -0
  237. package/dist/domain/run/competition/agent-preparation.js +24 -0
  238. package/dist/domain/run/competition/agents/artifacts.d.ts +17 -0
  239. package/dist/domain/run/competition/agents/artifacts.js +173 -0
  240. package/dist/{commands/run → domain/run/competition}/agents/lifecycle.d.ts +3 -3
  241. package/dist/{commands/run → domain/run/competition}/agents/lifecycle.js +84 -64
  242. package/dist/domain/run/competition/agents/post-processing.d.ts +12 -0
  243. package/dist/domain/run/competition/agents/post-processing.js +4 -0
  244. package/dist/domain/run/competition/agents/preparation.js +64 -0
  245. package/dist/{commands/run → domain/run/competition}/agents/run-context.d.ts +9 -16
  246. package/dist/{commands/run → domain/run/competition}/agents/run-context.js +22 -70
  247. package/dist/{commands/run → domain/run/competition}/agents/types.d.ts +10 -13
  248. package/dist/domain/run/competition/agents/workspace.d.ts +21 -0
  249. package/dist/domain/run/competition/agents/workspace.js +47 -0
  250. package/dist/{commands/run → domain/run/competition}/errors.d.ts +8 -1
  251. package/dist/{commands/run → domain/run/competition}/errors.js +39 -9
  252. package/dist/{commands/run → domain/run/competition}/phases.d.ts +1 -2
  253. package/dist/domain/run/competition/phases.js +1 -0
  254. package/dist/domain/run/competition/prompt.d.ts +7 -0
  255. package/dist/domain/run/competition/prompt.js +27 -0
  256. package/dist/{commands/run → domain/run/competition}/reports.d.ts +5 -3
  257. package/dist/{commands/run → domain/run/competition}/reports.js +7 -19
  258. package/dist/domain/run/competition/termination-state.d.ts +4 -0
  259. package/dist/domain/run/competition/termination-state.js +12 -0
  260. package/dist/{records → domain/run/model}/enhanced.d.ts +6 -7
  261. package/dist/{records → domain/run/model}/enhanced.js +11 -11
  262. package/dist/{records → domain/run/model}/errors.d.ts +1 -1
  263. package/dist/{records → domain/run/model}/errors.js +5 -5
  264. package/dist/{records → domain/run/model}/mutators.d.ts +4 -3
  265. package/dist/{records → domain/run/model}/mutators.js +58 -36
  266. package/dist/domain/run/model/types.d.ts +376 -0
  267. package/dist/domain/run/model/types.js +192 -0
  268. package/dist/{records/persistence.d.ts → domain/run/persistence/adapter.d.ts} +9 -3
  269. package/dist/domain/run/persistence/adapter.js +340 -0
  270. package/dist/domain/run/persistence/error-mapping.d.ts +2 -0
  271. package/dist/domain/run/persistence/error-mapping.js +17 -0
  272. package/dist/domain/shared/lifecycle.d.ts +54 -0
  273. package/dist/domain/shared/lifecycle.js +165 -0
  274. package/dist/domain/shared/token-usage.d.ts +21 -0
  275. package/dist/domain/shared/token-usage.js +38 -0
  276. package/dist/domain/spec/competition/adapter.d.ts +31 -0
  277. package/dist/domain/spec/competition/adapter.js +196 -0
  278. package/dist/domain/spec/competition/prompt.d.ts +11 -0
  279. package/dist/domain/spec/competition/prompt.js +44 -0
  280. package/dist/domain/spec/model/output.d.ts +13 -0
  281. package/dist/domain/spec/model/output.js +36 -0
  282. package/dist/domain/spec/model/types.d.ts +98 -0
  283. package/dist/domain/spec/model/types.js +84 -0
  284. package/dist/domain/spec/persistence/adapter.d.ts +51 -0
  285. package/dist/domain/spec/persistence/adapter.js +140 -0
  286. package/dist/domain/verify/blinding/aliases.d.ts +7 -0
  287. package/dist/domain/verify/blinding/aliases.js +23 -0
  288. package/dist/domain/verify/competition/adapter.d.ts +54 -0
  289. package/dist/domain/verify/competition/adapter.js +444 -0
  290. package/dist/domain/verify/competition/artifacts.d.ts +6 -0
  291. package/dist/domain/verify/competition/artifacts.js +7 -0
  292. package/dist/domain/verify/competition/blinding.d.ts +24 -0
  293. package/dist/domain/verify/competition/blinding.js +109 -0
  294. package/dist/domain/verify/competition/finalize.d.ts +11 -0
  295. package/dist/domain/verify/competition/finalize.js +65 -0
  296. package/dist/domain/verify/competition/programmatic.d.ts +15 -0
  297. package/dist/domain/verify/competition/programmatic.js +352 -0
  298. package/dist/domain/verify/competition/prompt.d.ts +19 -0
  299. package/dist/domain/verify/competition/prompt.js +63 -0
  300. package/dist/domain/verify/competition/rubric.d.ts +23 -0
  301. package/dist/domain/verify/competition/rubric.js +77 -0
  302. package/dist/domain/verify/competition/shared-layout.d.ts +121 -0
  303. package/dist/domain/verify/competition/shared-layout.js +365 -0
  304. package/dist/domain/verify/competition/target.d.ts +47 -0
  305. package/dist/domain/verify/competition/target.js +1 -0
  306. package/dist/domain/verify/model/mutators.d.ts +16 -0
  307. package/dist/domain/verify/model/mutators.js +126 -0
  308. package/dist/domain/verify/model/types.d.ts +408 -0
  309. package/dist/domain/verify/model/types.js +289 -0
  310. package/dist/domain/verify/persistence/adapter.d.ts +43 -0
  311. package/dist/domain/verify/persistence/adapter.js +126 -0
  312. package/dist/domain/verify/programmatic/runner.d.ts +22 -0
  313. package/dist/domain/verify/programmatic/runner.js +209 -0
  314. package/dist/domain/verify/rubric-result.d.ts +28 -0
  315. package/dist/domain/verify/rubric-result.js +121 -0
  316. package/dist/extra-context/contract.d.ts +17 -0
  317. package/dist/extra-context/contract.js +60 -0
  318. package/dist/interactive/index.d.ts +2 -0
  319. package/dist/interactive/index.js +1 -0
  320. package/dist/interactive/providers/launch.d.ts +23 -0
  321. package/dist/interactive/providers/launch.js +203 -0
  322. package/dist/interactive/providers/mcp.d.ts +13 -0
  323. package/dist/interactive/providers/mcp.js +547 -0
  324. package/dist/interactive/providers/shared.d.ts +2 -0
  325. package/dist/interactive/providers/shared.js +1 -0
  326. package/dist/interactive/providers.d.ts +3 -0
  327. package/dist/interactive/providers.js +3 -0
  328. package/dist/interactive/records.d.ts +2 -0
  329. package/dist/interactive/records.js +1 -0
  330. package/dist/interactive/substrate.d.ts +21 -0
  331. package/dist/interactive/substrate.js +522 -0
  332. package/dist/interactive/types.d.ts +101 -0
  333. package/dist/interactive/types.js +1 -0
  334. package/dist/mcp/server.d.ts +88 -0
  335. package/dist/mcp/server.js +790 -0
  336. package/dist/persistence/error-mapping.d.ts +19 -0
  337. package/dist/persistence/error-mapping.js +44 -0
  338. package/dist/persistence/errors.d.ts +26 -0
  339. package/dist/persistence/errors.js +49 -0
  340. package/dist/persistence/extra-context.d.ts +9 -0
  341. package/dist/persistence/extra-context.js +60 -0
  342. package/dist/{records → persistence}/history-lock.js +2 -2
  343. package/dist/persistence/record-path-schema.d.ts +3 -0
  344. package/dist/persistence/record-path-schema.js +16 -0
  345. package/dist/persistence/session-store.d.ts +92 -0
  346. package/dist/persistence/session-store.js +412 -0
  347. package/dist/policy/auto.d.ts +13 -0
  348. package/dist/policy/auto.js +22 -0
  349. package/dist/policy/index.d.ts +5 -0
  350. package/dist/policy/index.js +5 -0
  351. package/dist/policy/resolution.d.ts +6 -0
  352. package/dist/policy/resolution.js +23 -0
  353. package/dist/policy/result.d.ts +53 -0
  354. package/dist/policy/result.js +15 -0
  355. package/dist/policy/selector.d.ts +11 -0
  356. package/dist/policy/selector.js +57 -0
  357. package/dist/policy/verification.d.ts +77 -0
  358. package/dist/policy/verification.js +365 -0
  359. package/dist/policy/verifier-selection.d.ts +13 -0
  360. package/dist/policy/verifier-selection.js +78 -0
  361. package/dist/preflight/branch.d.ts +9 -0
  362. package/dist/preflight/branch.js +48 -0
  363. package/dist/preflight/errors.d.ts +3 -0
  364. package/dist/preflight/errors.js +10 -3
  365. package/dist/preflight/index.d.ts +13 -0
  366. package/dist/preflight/index.js +43 -8
  367. package/dist/render/interactions/confirmation.js +4 -2
  368. package/dist/render/transcripts/apply.js +9 -10
  369. package/dist/render/transcripts/auto.d.ts +27 -0
  370. package/dist/render/transcripts/auto.js +21 -0
  371. package/dist/render/transcripts/init.d.ts +4 -15
  372. package/dist/render/transcripts/init.js +71 -72
  373. package/dist/render/transcripts/list.d.ts +10 -1
  374. package/dist/render/transcripts/list.js +121 -15
  375. package/dist/render/transcripts/message.d.ts +72 -0
  376. package/dist/render/transcripts/message.js +362 -0
  377. package/dist/render/transcripts/prune.d.ts +7 -2
  378. package/dist/render/transcripts/prune.js +64 -17
  379. package/dist/render/transcripts/reduce.d.ts +74 -0
  380. package/dist/render/transcripts/reduce.js +395 -0
  381. package/dist/render/transcripts/root-launcher.d.ts +19 -0
  382. package/dist/render/transcripts/root-launcher.js +40 -0
  383. package/dist/render/transcripts/run.d.ts +35 -6
  384. package/dist/render/transcripts/run.js +241 -165
  385. package/dist/render/transcripts/shared.d.ts +2 -0
  386. package/dist/render/transcripts/shared.js +11 -4
  387. package/dist/render/transcripts/spec.d.ts +74 -0
  388. package/dist/render/transcripts/spec.js +394 -0
  389. package/dist/render/transcripts/stage-progress.d.ts +22 -0
  390. package/dist/render/transcripts/stage-progress.js +6 -0
  391. package/dist/render/transcripts/update-check.d.ts +2 -0
  392. package/dist/render/transcripts/update-check.js +22 -0
  393. package/dist/render/transcripts/verify.d.ts +74 -0
  394. package/dist/render/transcripts/verify.js +409 -0
  395. package/dist/render/utils/agents.d.ts +10 -9
  396. package/dist/render/utils/agents.js +30 -82
  397. package/dist/render/utils/badges.d.ts +3 -20
  398. package/dist/render/utils/badges.js +3 -36
  399. package/dist/render/utils/duration.d.ts +12 -0
  400. package/dist/render/utils/duration.js +37 -0
  401. package/dist/render/utils/interactive-frame.d.ts +6 -0
  402. package/dist/render/utils/interactive-frame.js +38 -0
  403. package/dist/render/utils/records.js +4 -4
  404. package/dist/render/utils/runs.d.ts +3 -9
  405. package/dist/render/utils/runs.js +16 -48
  406. package/dist/render/utils/stage-output.d.ts +20 -0
  407. package/dist/render/utils/stage-output.js +44 -0
  408. package/dist/render/utils/timezone.d.ts +2 -0
  409. package/dist/render/utils/timezone.js +42 -0
  410. package/dist/render/utils/transcript-shell.d.ts +66 -0
  411. package/dist/render/utils/transcript-shell.js +155 -0
  412. package/dist/render/utils/transcript.d.ts +7 -1
  413. package/dist/render/utils/transcript.js +12 -2
  414. package/dist/render/utils/wrap.d.ts +1 -0
  415. package/dist/render/utils/wrap.js +20 -0
  416. package/dist/status/colors.d.ts +2 -3
  417. package/dist/status/colors.js +3 -3
  418. package/dist/status/index.d.ts +108 -8
  419. package/dist/status/index.js +164 -5
  420. package/dist/update-check/checker.d.ts +24 -0
  421. package/dist/update-check/checker.js +130 -0
  422. package/dist/update-check/prompt.d.ts +25 -0
  423. package/dist/update-check/prompt.js +62 -0
  424. package/dist/update-check/semver.d.ts +17 -0
  425. package/dist/update-check/semver.js +36 -0
  426. package/dist/update-check/state-path.d.ts +8 -0
  427. package/dist/update-check/state-path.js +18 -0
  428. package/dist/utils/binaries.js +14 -8
  429. package/dist/utils/errors.d.ts +3 -1
  430. package/dist/utils/errors.js +3 -1
  431. package/dist/utils/git.d.ts +10 -0
  432. package/dist/utils/git.js +15 -3
  433. package/dist/utils/output.d.ts +5 -1
  434. package/dist/utils/output.js +4 -2
  435. package/dist/utils/process.d.ts +2 -1
  436. package/dist/utils/process.js +7 -3
  437. package/dist/utils/session-id.d.ts +1 -0
  438. package/dist/utils/session-id.js +22 -0
  439. package/dist/utils/slug.d.ts +2 -0
  440. package/dist/utils/slug.js +15 -0
  441. package/dist/utils/voratiq-cli-target.d.ts +9 -0
  442. package/dist/utils/voratiq-cli-target.js +58 -0
  443. package/dist/workspace/agents.d.ts +13 -16
  444. package/dist/workspace/agents.js +22 -147
  445. package/dist/workspace/chat/artifacts.d.ts +9 -0
  446. package/dist/workspace/chat/artifacts.js +82 -12
  447. package/dist/workspace/chat/native-usage.d.ts +13 -0
  448. package/dist/workspace/chat/native-usage.js +60 -0
  449. package/dist/workspace/chat/sources.d.ts +9 -5
  450. package/dist/workspace/chat/sources.js +89 -23
  451. package/dist/workspace/chat/token-usage-result.d.ts +23 -0
  452. package/dist/workspace/chat/token-usage-result.js +7 -0
  453. package/dist/workspace/chat/usage-extractor.d.ts +30 -0
  454. package/dist/workspace/chat/usage-extractor.js +461 -0
  455. package/dist/workspace/chat/usage-mappings.d.ts +20 -0
  456. package/dist/workspace/chat/usage-mappings.js +136 -0
  457. package/dist/workspace/credential-guard.js +1 -1
  458. package/dist/workspace/dependencies.js +4 -4
  459. package/dist/workspace/errors.d.ts +5 -0
  460. package/dist/workspace/errors.js +13 -3
  461. package/dist/workspace/layout.d.ts +17 -6
  462. package/dist/workspace/layout.js +51 -32
  463. package/dist/workspace/promotion.d.ts +32 -0
  464. package/dist/workspace/promotion.js +34 -0
  465. package/dist/workspace/prune.d.ts +1 -1
  466. package/dist/workspace/run.d.ts +1 -3
  467. package/dist/workspace/run.js +6 -15
  468. package/dist/workspace/setup.d.ts +8 -0
  469. package/dist/workspace/setup.js +359 -56
  470. package/dist/workspace/shim.js +1 -1
  471. package/dist/workspace/structure.d.ts +91 -26
  472. package/dist/workspace/structure.js +227 -43
  473. package/dist/workspace/templates.d.ts +9 -3
  474. package/dist/workspace/templates.js +26 -15
  475. package/dist/workspace/verification-defaults.d.ts +12 -0
  476. package/dist/workspace/verification-defaults.js +1017 -0
  477. package/package.json +30 -24
  478. package/dist/cli/review.d.ts +0 -12
  479. package/dist/cli/review.js +0 -33
  480. package/dist/commands/errors.d.ts +0 -4
  481. package/dist/commands/errors.js +0 -7
  482. package/dist/commands/init/evals.d.ts +0 -4
  483. package/dist/commands/init/evals.js +0 -219
  484. package/dist/commands/review/command.d.ts +0 -10
  485. package/dist/commands/review/command.js +0 -26
  486. package/dist/commands/run/agent-execution.d.ts +0 -19
  487. package/dist/commands/run/agent-execution.js +0 -63
  488. package/dist/commands/run/agents/auth-stage.d.ts +0 -23
  489. package/dist/commands/run/agents/auth-stage.js +0 -108
  490. package/dist/commands/run/agents/chat-preserver.d.ts +0 -9
  491. package/dist/commands/run/agents/chat-preserver.js +0 -35
  492. package/dist/commands/run/agents/eval-runner.d.ts +0 -19
  493. package/dist/commands/run/agents/eval-runner.js +0 -27
  494. package/dist/commands/run/agents/failures.js +0 -32
  495. package/dist/commands/run/agents/preparation.js +0 -123
  496. package/dist/commands/run/agents.d.ts +0 -14
  497. package/dist/commands/run/agents.js +0 -47
  498. package/dist/commands/run/prompts.d.ts +0 -4
  499. package/dist/commands/run/prompts.js +0 -16
  500. package/dist/commands/run/sandbox-registry.d.ts +0 -4
  501. package/dist/commands/run/sandbox-registry.js +0 -54
  502. package/dist/configs/evals/defaults.d.ts +0 -8
  503. package/dist/configs/evals/defaults.js +0 -28
  504. package/dist/configs/evals/detect.d.ts +0 -10
  505. package/dist/configs/evals/errors.d.ts +0 -16
  506. package/dist/configs/evals/errors.js +0 -29
  507. package/dist/configs/evals/loader.d.ts +0 -9
  508. package/dist/configs/evals/loader.js +0 -46
  509. package/dist/configs/evals/types.d.ts +0 -42
  510. package/dist/configs/evals/types.js +0 -74
  511. package/dist/evals/runner.d.ts +0 -16
  512. package/dist/evals/runner.js +0 -132
  513. package/dist/records/persistence.js +0 -469
  514. package/dist/records/types.d.ts +0 -255
  515. package/dist/records/types.js +0 -160
  516. package/dist/render/transcripts/review.d.ts +0 -2
  517. package/dist/render/transcripts/review.js +0 -36
  518. /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.d.ts +0 -0
  519. /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.js +0 -0
  520. /package/dist/{commands/run → agents/runtime/shim}/argv.d.ts +0 -0
  521. /package/dist/{commands/run → agents/runtime/shim}/argv.js +0 -0
  522. /package/dist/{commands/run/agents → agents/runtime}/types.js +0 -0
  523. /package/dist/{commands/run → domain/run/competition}/agents/preparation.d.ts +0 -0
  524. /package/dist/{commands/run/phases.js → domain/run/competition/agents/types.js} +0 -0
  525. /package/dist/{commands/run → domain/run/model}/id.d.ts +0 -0
  526. /package/dist/{commands/run → domain/run/model}/id.js +0 -0
  527. /package/dist/{records → persistence}/history-lock.d.ts +0 -0
@@ -1,222 +1,7 @@
1
- import { spawn } from "node:child_process";
2
- import { readFile } from "node:fs/promises";
3
- import { dirname, isAbsolute, resolve as resolvePath } from "node:path";
1
+ import { resolve as resolvePath } from "node:path";
4
2
  import { fileURLToPath } from "node:url";
5
- import { composeRestrictedEnvironment } from "../../../utils/env.js";
6
- import { GIT_AUTHOR_EMAIL, GIT_AUTHOR_NAME, GIT_COMMITTER_EMAIL, GIT_COMMITTER_NAME, } from "../../../utils/git.js";
7
- import { injectPromptArg } from "../argv.js";
8
- class ShimError extends Error {
9
- exitCode;
10
- constructor(message, exitCode = 1) {
11
- super(message);
12
- this.name = "ShimError";
13
- this.exitCode = exitCode;
14
- }
15
- }
16
- export async function main(argv = process.argv.slice(2)) {
17
- try {
18
- const { configPath } = parseArguments(argv);
19
- const resolvedConfigPath = resolvePath(process.cwd(), configPath);
20
- const manifest = await loadManifest(resolvedConfigPath);
21
- const agentRoot = resolveAgentRoot(resolvedConfigPath);
22
- const prompt = await loadPrompt(agentRoot, manifest.promptPath, resolvedConfigPath);
23
- let agentArgv;
24
- try {
25
- agentArgv = injectPromptArg(manifest.argv, prompt);
26
- }
27
- catch (error) {
28
- throw new ShimError(`Failed to inject prompt into argv: ${error instanceof Error ? error.message : String(error)}`);
29
- }
30
- const exitCode = await launchAgent({
31
- manifest,
32
- agentRoot,
33
- argv: agentArgv,
34
- });
35
- return exitCode;
36
- }
37
- catch (error) {
38
- if (error instanceof ShimError) {
39
- logError(error.message);
40
- return error.exitCode;
41
- }
42
- const message = error instanceof Error ? error.message : String(error);
43
- logError(`Unexpected error: ${message}`);
44
- return 1;
45
- }
46
- }
47
- function parseArguments(args) {
48
- let configPath;
49
- for (let index = 0; index < args.length; index += 1) {
50
- const token = args[index];
51
- if (token === "--config") {
52
- const next = args[index + 1];
53
- if (!next) {
54
- throw new ShimError("Missing value for --config option");
55
- }
56
- configPath = next;
57
- index += 1;
58
- continue;
59
- }
60
- throw new ShimError(`Unknown argument: ${token}`);
61
- }
62
- if (!configPath) {
63
- throw new ShimError("Missing required --config <path> argument");
64
- }
65
- return { configPath };
66
- }
67
- async function loadManifest(configPath) {
68
- let raw;
69
- try {
70
- raw = await readFile(configPath, "utf8");
71
- }
72
- catch (error) {
73
- const detail = error instanceof Error ? error.message : String(error);
74
- throw new ShimError(`Failed to read manifest at "${configPath}": ${detail}`);
75
- }
76
- let parsed;
77
- try {
78
- parsed = JSON.parse(raw);
79
- }
80
- catch (error) {
81
- const detail = error instanceof Error ? error.message : String(error);
82
- throw new ShimError(`Manifest JSON at "${configPath}" is invalid: ${detail}`);
83
- }
84
- return validateManifest(parsed, configPath);
85
- }
86
- function validateManifest(data, configPath) {
87
- if (typeof data !== "object" || data === null) {
88
- throw new ShimError(`Manifest at "${configPath}" must be a JSON object`);
89
- }
90
- const record = data;
91
- const { binary, argv, promptPath, workspace, env } = record;
92
- if (typeof binary !== "string" || binary.trim() === "") {
93
- throw new ShimError(`Manifest at "${configPath}" is missing required string field "binary"`);
94
- }
95
- const manifestArgv = ensureStringArray({
96
- value: argv,
97
- field: "argv",
98
- configPath,
99
- });
100
- if (typeof promptPath !== "string" || promptPath.trim() === "") {
101
- throw new ShimError(`Manifest at "${configPath}" is missing required string field "promptPath"`);
102
- }
103
- if (typeof workspace !== "string" || workspace.trim() === "") {
104
- throw new ShimError(`Manifest at "${configPath}" is missing required string field "workspace"`);
105
- }
106
- const manifestEnv = ensureEnvRecord({
107
- value: env,
108
- configPath,
109
- });
110
- return {
111
- binary,
112
- argv: manifestArgv,
113
- promptPath,
114
- workspace,
115
- env: manifestEnv,
116
- };
117
- }
118
- function ensureStringArray(options) {
119
- const { value, field, configPath } = options;
120
- if (!Array.isArray(value)) {
121
- throw new ShimError(`Manifest at "${configPath}" must provide "${field}" as an array of strings`);
122
- }
123
- const result = [];
124
- for (const token of value) {
125
- if (typeof token !== "string") {
126
- throw new ShimError(`Manifest at "${configPath}" must provide "${field}" as an array of strings`);
127
- }
128
- result.push(token);
129
- }
130
- return result;
131
- }
132
- function ensureEnvRecord(options) {
133
- const { value, configPath } = options;
134
- if (value === undefined) {
135
- return {};
136
- }
137
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
138
- throw new ShimError(`Manifest at "${configPath}" must provide "env" as an object of string values`);
139
- }
140
- const result = {};
141
- for (const [key, entry] of Object.entries(value)) {
142
- if (typeof entry !== "string") {
143
- throw new ShimError(`Manifest at "${configPath}" must provide "env" as an object of string values`);
144
- }
145
- result[key] = entry;
146
- }
147
- return result;
148
- }
149
- function resolveAgentRoot(configPath) {
150
- return dirname(configPath);
151
- }
152
- async function loadPrompt(agentRoot, manifestPromptPath, configPath) {
153
- const promptAbsolute = isAbsolute(manifestPromptPath)
154
- ? manifestPromptPath
155
- : resolvePath(agentRoot, manifestPromptPath);
156
- try {
157
- return await readFile(promptAbsolute, "utf8");
158
- }
159
- catch (error) {
160
- const detail = error instanceof Error ? error.message : String(error);
161
- throw new ShimError(`Failed to read prompt from "${promptAbsolute}" (manifest: "${configPath}", agentRoot: "${agentRoot}", promptPath: "${manifestPromptPath}"): ${detail}`);
162
- }
163
- }
164
- async function launchAgent(options) {
165
- const { manifest, agentRoot, argv } = options;
166
- const binaryPath = isAbsolute(manifest.binary)
167
- ? manifest.binary
168
- : resolvePath(agentRoot, manifest.binary);
169
- const workspacePath = isAbsolute(manifest.workspace)
170
- ? manifest.workspace
171
- : resolvePath(agentRoot, manifest.workspace);
172
- const launchEnv = composeRestrictedEnvironment(manifest.env);
173
- // Agent commits generated outside the sandbox reuse this persona via
174
- // resolveSandboxPersona in src/commands/run/agents/lifecycle.ts.
175
- const personaEnv = {
176
- GIT_AUTHOR_NAME,
177
- GIT_AUTHOR_EMAIL,
178
- GIT_COMMITTER_NAME,
179
- GIT_COMMITTER_EMAIL,
180
- GIT_TERMINAL_PROMPT: "0",
181
- };
182
- for (const [key, value] of Object.entries(personaEnv)) {
183
- if (launchEnv[key] === undefined) {
184
- launchEnv[key] = value;
185
- }
186
- }
187
- return await new Promise((resolve) => {
188
- let resolved = false;
189
- const child = spawn(binaryPath, argv, {
190
- cwd: workspacePath,
191
- env: launchEnv,
192
- stdio: "inherit",
193
- });
194
- child.once("error", (error) => {
195
- if (resolved) {
196
- return;
197
- }
198
- resolved = true;
199
- const detail = error instanceof Error ? error.message : String(error);
200
- logError(`Failed to launch agent binary at "${binaryPath}": ${detail}`);
201
- resolve(1);
202
- });
203
- child.once("exit", (code, signal) => {
204
- if (resolved) {
205
- return;
206
- }
207
- resolved = true;
208
- if (signal) {
209
- logError(`Agent terminated by signal ${signal}`);
210
- resolve(1);
211
- return;
212
- }
213
- resolve(code ?? 0);
214
- });
215
- });
216
- }
217
- function logError(message) {
218
- console.error(`[voratiq] ${message}`);
219
- }
3
+ import { main } from "../../../agents/runtime/shim/run-agent-shim.js";
4
+ export { main };
220
5
  const modulePath = fileURLToPath(import.meta.url);
221
6
  const invokedScript = process.argv[1]
222
7
  ? resolvePath(process.argv[1])
@@ -226,7 +11,7 @@ if (invokedScript && modulePath === invokedScript) {
226
11
  process.exit(exitCode);
227
12
  }, (error) => {
228
13
  const detail = error instanceof Error ? error.message : String(error);
229
- logError(`Unexpected error: ${detail}`);
14
+ console.error(`[voratiq] Unexpected error: ${detail}`);
230
15
  process.exit(1);
231
16
  });
232
17
  }
@@ -1,16 +1,15 @@
1
1
  import type { AgentDefinition } from "../../configs/agents/types.js";
2
2
  import type { EnvironmentConfig } from "../../configs/environment/types.js";
3
- import type { EvalDefinition } from "../../configs/evals/types.js";
4
3
  export interface ValidationInput {
5
4
  readonly root: string;
6
5
  readonly specAbsolutePath: string;
6
+ readonly resolvedAgentIds?: readonly string[];
7
7
  readonly maxParallel?: number;
8
8
  }
9
9
  export interface ValidationResult {
10
- readonly prompt: string;
10
+ readonly specContent: string;
11
11
  readonly baseRevisionSha: string;
12
12
  readonly agents: readonly AgentDefinition[];
13
- readonly evalPlan: readonly EvalDefinition[];
14
13
  readonly effectiveMaxParallel: number;
15
14
  readonly environment: EnvironmentConfig;
16
15
  }
@@ -1,31 +1,68 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { loadAgentCatalog } from "../../configs/agents/loader.js";
2
+ import { verifyAgentProviders } from "../../agents/runtime/auth.js";
3
+ import { loadAgentCatalogDiagnostics } from "../../configs/agents/loader.js";
3
4
  import { EnvironmentConfigParseError, MissingEnvironmentConfigError, } from "../../configs/environment/errors.js";
4
5
  import { DEFAULT_ENVIRONMENT_FILE_DISPLAY, loadEnvironmentConfig, } from "../../configs/environment/loader.js";
5
- import { buildEvalDefinitions, loadEvalConfig, } from "../../configs/evals/loader.js";
6
- import { RunOptionValidationError } from "../../records/errors.js";
6
+ import { loadRepoSettings } from "../../configs/settings/loader.js";
7
+ import { NoAgentsEnabledError, RunPreflightError, } from "../../domain/run/competition/errors.js";
8
+ import { RunOptionValidationError } from "../../domain/run/model/errors.js";
9
+ import { toErrorMessage } from "../../utils/errors.js";
7
10
  import { getHeadRevision } from "../../utils/git.js";
8
11
  import { WorkspaceMissingEntryError } from "../../workspace/errors.js";
9
- import { verifyAgentProviders } from "./agents/auth-stage.js";
10
- import { NoAgentsEnabledError } from "./errors.js";
11
- import { buildAgentPrompt } from "./prompts.js";
12
+ import { resolveEffectiveMaxParallel } from "../shared/max-parallel.js";
12
13
  /**
13
14
  * Validate command parameters, load spec, and prepare execution prerequisites.
14
15
  */
15
16
  export async function validateAndPrepare(input) {
16
- const { root, specAbsolutePath, maxParallel: requestedMaxParallel } = input;
17
+ const { root, specAbsolutePath, resolvedAgentIds, maxParallel: requestedMaxParallel, } = input;
17
18
  if (requestedMaxParallel !== undefined &&
18
19
  (!Number.isInteger(requestedMaxParallel) || requestedMaxParallel <= 0)) {
19
20
  throw new RunOptionValidationError("maxParallel", "must be a positive integer");
20
21
  }
21
22
  const specContent = await readFile(specAbsolutePath, "utf8");
22
- const prompt = buildAgentPrompt({ specContent });
23
23
  const baseRevisionSha = await getHeadRevision(root);
24
- const agents = loadAgentCatalog({ root });
25
- if (agents.length === 0) {
26
- throw new NoAgentsEnabledError();
24
+ const preflightIssues = [];
25
+ let agents;
26
+ if (resolvedAgentIds) {
27
+ if (resolvedAgentIds.length === 0) {
28
+ throw new NoAgentsEnabledError();
29
+ }
30
+ const selectedAgentIds = new Set(resolvedAgentIds);
31
+ const agentDiagnostics = loadAgentCatalogDiagnostics({ root });
32
+ preflightIssues.push(...agentDiagnostics.issues.filter((issue) => selectedAgentIds.has(issue.agentId)));
33
+ const catalogById = new Map(agentDiagnostics.catalog.map((agent) => [agent.id, agent]));
34
+ agents = resolvedAgentIds.flatMap((agentId) => {
35
+ const agent = catalogById.get(agentId);
36
+ return agent ? [agent] : [];
37
+ });
38
+ }
39
+ else {
40
+ const agentDiagnostics = loadAgentCatalogDiagnostics({ root });
41
+ const enabledAgents = agentDiagnostics.enabledAgents;
42
+ if (enabledAgents.length === 0) {
43
+ throw new NoAgentsEnabledError();
44
+ }
45
+ preflightIssues.push(...agentDiagnostics.issues);
46
+ agents = agentDiagnostics.catalog;
47
+ }
48
+ try {
49
+ loadRepoSettings({ root });
50
+ }
51
+ catch (error) {
52
+ preflightIssues.push({
53
+ agentId: "settings",
54
+ message: toErrorMessage(error),
55
+ });
56
+ }
57
+ const preProviderIssueCount = preflightIssues.length;
58
+ const providerIssues = await verifyAgentProviders(agents.map((agent) => ({
59
+ id: agent.id,
60
+ provider: agent.provider,
61
+ })));
62
+ preflightIssues.push(...providerIssues);
63
+ if (preflightIssues.length > 0) {
64
+ throw new RunPreflightError(preflightIssues, preProviderIssueCount === 0 ? [] : undefined);
27
65
  }
28
- await verifyAgentProviders(agents);
29
66
  const environment = (() => {
30
67
  try {
31
68
  return loadEnvironmentConfig({ root });
@@ -38,23 +75,15 @@ export async function validateAndPrepare(input) {
38
75
  throw error;
39
76
  }
40
77
  })();
41
- const evalConfig = loadEvalConfig({ root });
42
- const evalPlan = buildEvalDefinitions(evalConfig);
43
- const effectiveMaxParallel = resolveMaxParallel(agents, requestedMaxParallel);
78
+ const effectiveMaxParallel = resolveEffectiveMaxParallel({
79
+ competitorCount: agents.length,
80
+ requestedMaxParallel,
81
+ });
44
82
  return {
45
- prompt,
83
+ specContent,
46
84
  baseRevisionSha,
47
85
  agents,
48
- evalPlan,
49
86
  effectiveMaxParallel,
50
87
  environment,
51
88
  };
52
89
  }
53
- function resolveMaxParallel(agents, requestedMaxParallel) {
54
- const agentCount = agents.length;
55
- if (agentCount === 0) {
56
- return 0;
57
- }
58
- const resolvedInput = requestedMaxParallel !== undefined ? requestedMaxParallel : agentCount;
59
- return Math.min(agentCount, Math.max(1, resolvedInput));
60
- }
@@ -0,0 +1,5 @@
1
+ export interface ResolveEffectiveMaxParallelOptions {
2
+ competitorCount: number;
3
+ requestedMaxParallel?: number;
4
+ }
5
+ export declare function resolveEffectiveMaxParallel(options: ResolveEffectiveMaxParallelOptions): number;
@@ -0,0 +1,15 @@
1
+ export function resolveEffectiveMaxParallel(options) {
2
+ const { competitorCount, requestedMaxParallel } = options;
3
+ if (!Number.isInteger(competitorCount) || competitorCount < 0) {
4
+ throw new Error("competitorCount must be a non-negative integer");
5
+ }
6
+ if (competitorCount === 0) {
7
+ return 0;
8
+ }
9
+ if (requestedMaxParallel !== undefined &&
10
+ (!Number.isInteger(requestedMaxParallel) || requestedMaxParallel <= 0)) {
11
+ throw new Error("requestedMaxParallel must be a positive integer");
12
+ }
13
+ const resolved = requestedMaxParallel !== undefined ? requestedMaxParallel : competitorCount;
14
+ return Math.min(competitorCount, Math.max(1, resolved));
15
+ }
@@ -0,0 +1,10 @@
1
+ export interface MarkdownPreviewOptions {
2
+ language?: string;
3
+ pad?: boolean;
4
+ }
5
+ export interface MarkdownSectionOptions {
6
+ heading: string;
7
+ level?: number;
8
+ }
9
+ export declare function buildMarkdownPreviewLines(content: string, options?: MarkdownPreviewOptions): string[];
10
+ export declare function extractMarkdownSection(content: string, options: MarkdownSectionOptions): string | undefined;
@@ -0,0 +1,60 @@
1
+ export function buildMarkdownPreviewLines(content, options = {}) {
2
+ const { language = "markdown", pad = false } = options;
3
+ const normalizedContent = content.replace(/(?:\r?\n)+$/g, "");
4
+ const lines = normalizedContent.split(/\r?\n/);
5
+ const fence = buildFence(normalizedContent);
6
+ const output = [];
7
+ if (pad) {
8
+ output.push("");
9
+ }
10
+ output.push(`${fence}${language}`, ...lines, fence);
11
+ if (pad) {
12
+ output.push("");
13
+ }
14
+ return output;
15
+ }
16
+ export function extractMarkdownSection(content, options) {
17
+ const { heading, level = 2 } = options;
18
+ const normalizedContent = content.replace(/\r\n/g, "\n");
19
+ const lines = normalizedContent.split("\n");
20
+ const headingPrefix = `${"#".repeat(level)} `;
21
+ const headingPattern = new RegExp(`^${escapeRegExp(headingPrefix)}${escapeRegExp(heading)}\\s*$`, "iu");
22
+ const nextHeadingPattern = new RegExp(`^${escapeRegExp(headingPrefix)}`, "u");
23
+ const startIndex = lines.findIndex((line) => headingPattern.test(line.trim()));
24
+ if (startIndex < 0) {
25
+ return undefined;
26
+ }
27
+ let endIndex = lines.length;
28
+ for (let index = startIndex + 1; index < lines.length; index += 1) {
29
+ if (nextHeadingPattern.test(lines[index]?.trim() ?? "")) {
30
+ endIndex = index;
31
+ break;
32
+ }
33
+ }
34
+ const sectionLines = lines.slice(startIndex, endIndex);
35
+ while (sectionLines.length > 0 &&
36
+ sectionLines[sectionLines.length - 1]?.trim() === "") {
37
+ sectionLines.pop();
38
+ }
39
+ return sectionLines.join("\n");
40
+ }
41
+ function buildFence(content) {
42
+ let maxRun = 0;
43
+ let current = 0;
44
+ for (const ch of content) {
45
+ if (ch === "`") {
46
+ current += 1;
47
+ if (current > maxRun) {
48
+ maxRun = current;
49
+ }
50
+ }
51
+ else {
52
+ current = 0;
53
+ }
54
+ }
55
+ const fenceLength = Math.max(3, maxRun + 1);
56
+ return "`".repeat(fenceLength);
57
+ }
58
+ function escapeRegExp(value) {
59
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
60
+ }
@@ -0,0 +1,15 @@
1
+ import type { AgentDefinition } from "../../configs/agents/types.js";
2
+ export interface ResolveReductionCompetitorsInput {
3
+ root: string;
4
+ cliAgentIds?: readonly string[];
5
+ cliOverrideFlag?: string;
6
+ profileName?: string;
7
+ profileFlag?: string;
8
+ includeDefinitions?: boolean;
9
+ }
10
+ export interface ReductionCompetitionPlan {
11
+ source: "cli" | "orchestration";
12
+ agentIds: readonly string[];
13
+ competitors: readonly AgentDefinition[];
14
+ }
15
+ export declare function resolveReductionCompetitors(input: ResolveReductionCompetitorsInput): ReductionCompetitionPlan;
@@ -0,0 +1,13 @@
1
+ import { resolveStageCompetitors } from "./resolve-stage-competitors.js";
2
+ export function resolveReductionCompetitors(input) {
3
+ const plan = resolveStageCompetitors({
4
+ root: input.root,
5
+ stageId: "reduce",
6
+ cliAgentIds: input.cliAgentIds,
7
+ cliOverrideFlag: input.cliOverrideFlag,
8
+ profileName: input.profileName,
9
+ profileFlag: input.profileFlag,
10
+ includeDefinitions: input.includeDefinitions,
11
+ });
12
+ return plan;
13
+ }
@@ -0,0 +1,19 @@
1
+ import type { AgentDefinition } from "../../configs/agents/types.js";
2
+ import type { OrchestrationStageId } from "../../configs/orchestration/types.js";
3
+ export interface ResolveStageCompetitorsInput {
4
+ root: string;
5
+ stageId: OrchestrationStageId;
6
+ cliAgentIds?: readonly string[];
7
+ cliOverrideFlag?: string;
8
+ profileName?: string;
9
+ profileFlag?: string;
10
+ enforceSingleCompetitor?: boolean;
11
+ includeDefinitions?: boolean;
12
+ }
13
+ export interface CompetitionPlan {
14
+ source: "cli" | "orchestration";
15
+ agentIds: readonly string[];
16
+ competitors: readonly AgentDefinition[];
17
+ }
18
+ export type StageCompetitorResolution = CompetitionPlan;
19
+ export declare function resolveStageCompetitors(input: ResolveStageCompetitorsInput): CompetitionPlan;
@@ -0,0 +1,171 @@
1
+ import { AgentDisabledError, AgentNotFoundError, } from "../../configs/agents/errors.js";
2
+ import { readAgentsConfig } from "../../configs/agents/loader.js";
3
+ import { loadAgentById } from "../../configs/agents/loader.js";
4
+ import { loadOrchestrationConfig } from "../../configs/orchestration/loader.js";
5
+ import { HintedError } from "../../utils/errors.js";
6
+ import { readUtf8File } from "../../utils/fs.js";
7
+ import { resolveWorkspacePath, VORATIQ_AGENTS_FILE, VORATIQ_ORCHESTRATION_FILE, } from "../../workspace/structure.js";
8
+ const ORCHESTRATION_CONFIG_DISPLAY_PATH = VORATIQ_ORCHESTRATION_FILE;
9
+ const DEFAULT_PROFILE_NAME = "default";
10
+ export function resolveStageCompetitors(input) {
11
+ const { root, stageId, cliAgentIds, cliOverrideFlag = "--agent", profileName, profileFlag = "--profile", enforceSingleCompetitor = false, includeDefinitions = true, } = input;
12
+ const normalizedCliAgentIds = normalizeAgentIds(cliAgentIds);
13
+ assertNoDuplicateCliAgentIds(stageId, normalizedCliAgentIds, cliOverrideFlag);
14
+ const source = normalizedCliAgentIds.length > 0 ? "cli" : "orchestration";
15
+ const selectedProfileName = profileName === undefined ? DEFAULT_PROFILE_NAME : profileName.trim();
16
+ let selectedProfile;
17
+ if (source === "orchestration" || profileName !== undefined) {
18
+ const orchestrationConfig = loadOrchestrationConfig({ root });
19
+ selectedProfile = resolveOrchestrationProfile({
20
+ config: orchestrationConfig,
21
+ profileName: selectedProfileName,
22
+ profileFlag,
23
+ });
24
+ }
25
+ const resolvedAgentIds = source === "cli"
26
+ ? normalizedCliAgentIds
27
+ : getProfileAgentIds(selectedProfile, stageId);
28
+ assertResolvedAgentCount({
29
+ stageId,
30
+ agentIds: resolvedAgentIds,
31
+ selectedProfileName,
32
+ enforceSingleCompetitor,
33
+ });
34
+ if (!includeDefinitions) {
35
+ validateResolvedAgentIds({ root, agentIds: resolvedAgentIds });
36
+ }
37
+ const competitors = includeDefinitions
38
+ ? resolvedAgentIds.map((agentId) => loadAgentById(agentId, { root }))
39
+ : [];
40
+ return {
41
+ source,
42
+ agentIds: [...resolvedAgentIds],
43
+ competitors,
44
+ };
45
+ }
46
+ function resolveOrchestrationProfile(options) {
47
+ const { config, profileName, profileFlag } = options;
48
+ const selectedProfile = config.profiles[profileName];
49
+ if (selectedProfile) {
50
+ return selectedProfile;
51
+ }
52
+ const availableProfileNames = Object.keys(config.profiles).sort();
53
+ const availableDisplay = availableProfileNames.map((name) => `\`${name}\``);
54
+ throw new HintedError(`Unknown orchestration profile \`${profileName}\`.`, {
55
+ detailLines: availableDisplay.length > 0
56
+ ? [`Available profiles: ${availableDisplay.join(", ")}.`]
57
+ : [],
58
+ hintLines: [
59
+ `Review \`${profileFlag}\` and update \`${ORCHESTRATION_CONFIG_DISPLAY_PATH}\` if needed.`,
60
+ ],
61
+ });
62
+ }
63
+ function normalizeAgentIds(agentIds) {
64
+ if (!agentIds || agentIds.length === 0) {
65
+ return [];
66
+ }
67
+ return agentIds
68
+ .map((agentId) => agentId.trim())
69
+ .filter((agentId) => agentId.length > 0);
70
+ }
71
+ function assertNoDuplicateCliAgentIds(stageId, cliAgentIds, cliOverrideFlag) {
72
+ if (cliAgentIds.length < 2) {
73
+ return;
74
+ }
75
+ const seen = new Set();
76
+ const duplicates = new Set();
77
+ for (const agentId of cliAgentIds) {
78
+ if (seen.has(agentId)) {
79
+ duplicates.add(agentId);
80
+ continue;
81
+ }
82
+ seen.add(agentId);
83
+ }
84
+ if (duplicates.size === 0) {
85
+ return;
86
+ }
87
+ const duplicateList = Array.from(duplicates)
88
+ .sort((left, right) => left.localeCompare(right))
89
+ .map((agentId) => `\`${agentId}\``)
90
+ .join(", ");
91
+ throw new HintedError(duplicateAgentHeadline(stageId, cliOverrideFlag), {
92
+ detailLines: [`Duplicate agent ids: ${duplicateList}.`],
93
+ hintLines: [`Pass each \`${cliOverrideFlag}\` value once.`],
94
+ });
95
+ }
96
+ function validateResolvedAgentIds(options) {
97
+ const { root, agentIds } = options;
98
+ const agentsPath = resolveWorkspacePath(root, VORATIQ_AGENTS_FILE);
99
+ const config = readAgentsConfig(readUtf8File(agentsPath, "utf8"));
100
+ const entriesById = new Map(config.agents.map((entry) => [entry.id, entry]));
101
+ const enabledAgentIds = config.agents
102
+ .filter((entry) => entry.enabled !== false)
103
+ .map((entry) => entry.id);
104
+ for (const agentId of agentIds) {
105
+ const entry = entriesById.get(agentId);
106
+ if (!entry) {
107
+ throw new AgentNotFoundError(agentId, enabledAgentIds);
108
+ }
109
+ if (entry.enabled === false) {
110
+ throw new AgentDisabledError(agentId);
111
+ }
112
+ }
113
+ }
114
+ function assertResolvedAgentCount(options) {
115
+ const { stageId, agentIds, selectedProfileName, enforceSingleCompetitor } = options;
116
+ const stageAgentsPath = profileAgentPath(selectedProfileName, stageId);
117
+ if (agentIds.length === 0) {
118
+ const configInstruction = enforceSingleCompetitor
119
+ ? `Configure exactly one agent under \`${stageAgentsPath}\` in \`${ORCHESTRATION_CONFIG_DISPLAY_PATH}\`.`
120
+ : `Configure at least one agent under \`${stageAgentsPath}\` in \`${ORCHESTRATION_CONFIG_DISPLAY_PATH}\`.`;
121
+ const overrideInstruction = enforceSingleCompetitor || stageId === "reduce"
122
+ ? []
123
+ : ["Or pass one or more `--agent` overrides."];
124
+ throw new HintedError(missingAgentsHeadline(stageId), {
125
+ detailLines: stageId === "reduce"
126
+ ? []
127
+ : [
128
+ `Checked \`${stageAgentsPath}\` in \`${ORCHESTRATION_CONFIG_DISPLAY_PATH}\`.`,
129
+ ],
130
+ hintLines: stageId === "reduce"
131
+ ? [configInstruction, "Or pass one or more `--agent` overrides."]
132
+ : [configInstruction, ...overrideInstruction],
133
+ });
134
+ }
135
+ if (!enforceSingleCompetitor || agentIds.length === 1) {
136
+ return;
137
+ }
138
+ throw new HintedError(multipleAgentsHeadline(stageId), {
139
+ detailLines: [`This command supports one agent for ${stageNoun(stageId)}.`],
140
+ hintLines: [
141
+ `Configure exactly one agent under \`${stageAgentsPath}\` in \`${ORCHESTRATION_CONFIG_DISPLAY_PATH}\`.`,
142
+ ],
143
+ });
144
+ }
145
+ function getProfileAgentIds(profile, stageId) {
146
+ if (!profile) {
147
+ return [];
148
+ }
149
+ return profile[stageId].agents.map((agent) => agent.id);
150
+ }
151
+ function profileAgentPath(profileName, stageId) {
152
+ return `profiles.${profileName}.${stageId}.agents`;
153
+ }
154
+ function stageNoun(stageId) {
155
+ return stageId === "reduce" ? "reduce" : `stage \`${stageId}\``;
156
+ }
157
+ function duplicateAgentHeadline(stageId, cliOverrideFlag) {
158
+ return stageId === "reduce"
159
+ ? `Duplicate \`${cliOverrideFlag}\` values for reduce.`
160
+ : `Duplicate \`${cliOverrideFlag}\` values for stage \`${stageId}\`.`;
161
+ }
162
+ function missingAgentsHeadline(stageId) {
163
+ return stageId === "reduce"
164
+ ? "No reducer agents configured."
165
+ : `No agents configured for stage \`${stageId}\`.`;
166
+ }
167
+ function multipleAgentsHeadline(stageId) {
168
+ return stageId === "reduce"
169
+ ? "Multiple agents configured for reduce."
170
+ : `Multiple agents configured for stage \`${stageId}\`.`;
171
+ }