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,165 @@
1
+ import { z } from "zod";
2
+ function parseTimestamp(value) {
3
+ if (!value) {
4
+ return undefined;
5
+ }
6
+ const parsed = Date.parse(value);
7
+ return Number.isNaN(parsed) ? undefined : parsed;
8
+ }
9
+ function addIssue(ctx, path, message) {
10
+ ctx.addIssue({
11
+ code: z.ZodIssueCode.custom,
12
+ path: [path],
13
+ message,
14
+ });
15
+ }
16
+ function includesStatus(statuses, status) {
17
+ return statuses.includes(status);
18
+ }
19
+ export function resolveLifecycleExecutionDurationMs(lifecycle, options) {
20
+ const startedAtTime = parseTimestamp(lifecycle.startedAt);
21
+ if (startedAtTime === undefined) {
22
+ return undefined;
23
+ }
24
+ const { statusGroups } = options;
25
+ if (includesStatus(statusGroups.running, lifecycle.status)) {
26
+ const nowTime = options.now ?? Date.now();
27
+ if (!Number.isFinite(nowTime) || nowTime < startedAtTime) {
28
+ return undefined;
29
+ }
30
+ return nowTime - startedAtTime;
31
+ }
32
+ if (includesStatus(statusGroups.terminal, lifecycle.status)) {
33
+ const completedAtTime = parseTimestamp(lifecycle.completedAt);
34
+ if (completedAtTime === undefined || completedAtTime < startedAtTime) {
35
+ return undefined;
36
+ }
37
+ return completedAtTime - startedAtTime;
38
+ }
39
+ return undefined;
40
+ }
41
+ export function validateRecordLifecycleTimestamps(record, ctx, groups) {
42
+ const { createdAt, startedAt, completedAt, status } = record;
43
+ const isQueued = includesStatus(groups.queued, status);
44
+ const isRunning = includesStatus(groups.running, status);
45
+ const isTerminal = includesStatus(groups.terminal, status);
46
+ /**
47
+ * Canonical lifecycle timestamp contract:
48
+ * - queued: `startedAt` and `completedAt` MUST be omitted
49
+ * - running: `startedAt` is required; `completedAt` MUST be omitted
50
+ * - terminal: `startedAt` and `completedAt` are required
51
+ *
52
+ * Record-level invariants:
53
+ * - `startedAt` must be >= `createdAt`
54
+ * - `completedAt` must be >= `startedAt`
55
+ */
56
+ if (isQueued) {
57
+ if (startedAt) {
58
+ addIssue(ctx, "startedAt", "startedAt must be omitted while record status is queued");
59
+ }
60
+ if (completedAt) {
61
+ addIssue(ctx, "completedAt", "completedAt must be omitted while record status is queued");
62
+ }
63
+ return;
64
+ }
65
+ if (isRunning) {
66
+ if (!startedAt) {
67
+ addIssue(ctx, "startedAt", "startedAt is required once record status is running");
68
+ }
69
+ if (completedAt) {
70
+ addIssue(ctx, "completedAt", "completedAt must be omitted while record status is running");
71
+ }
72
+ }
73
+ if (isTerminal) {
74
+ if (!startedAt) {
75
+ addIssue(ctx, "startedAt", "startedAt is required once record status is terminal");
76
+ }
77
+ if (!completedAt) {
78
+ addIssue(ctx, "completedAt", "completedAt is required once record status is terminal");
79
+ }
80
+ }
81
+ const createdAtTime = parseTimestamp(createdAt);
82
+ const startedAtTime = parseTimestamp(startedAt);
83
+ const completedAtTime = parseTimestamp(completedAt);
84
+ if (createdAtTime !== undefined &&
85
+ startedAtTime !== undefined &&
86
+ startedAtTime < createdAtTime) {
87
+ addIssue(ctx, "startedAt", "startedAt must be greater than or equal to createdAt");
88
+ }
89
+ if (completedAtTime !== undefined &&
90
+ startedAtTime !== undefined &&
91
+ completedAtTime < startedAtTime) {
92
+ addIssue(ctx, "completedAt", "completedAt must be greater than or equal to startedAt");
93
+ }
94
+ }
95
+ export function validateOperationLifecycleTimestamps(record, ctx, groups) {
96
+ const { startedAt, completedAt, status } = record;
97
+ const isQueued = includesStatus(groups.queued, status);
98
+ const isRunning = includesStatus(groups.running, status);
99
+ const isTerminal = includesStatus(groups.terminal, status);
100
+ if (isQueued) {
101
+ if (startedAt) {
102
+ addIssue(ctx, "startedAt", "startedAt must be omitted while record status is queued");
103
+ }
104
+ if (completedAt) {
105
+ addIssue(ctx, "completedAt", "completedAt must be omitted while record status is queued");
106
+ }
107
+ return;
108
+ }
109
+ if (isRunning) {
110
+ if (!startedAt) {
111
+ addIssue(ctx, "startedAt", "startedAt is required once record status is running");
112
+ }
113
+ if (completedAt) {
114
+ addIssue(ctx, "completedAt", "completedAt must be omitted while record status is running");
115
+ }
116
+ }
117
+ if (isTerminal) {
118
+ if (!startedAt) {
119
+ addIssue(ctx, "startedAt", "startedAt is required once record status is terminal");
120
+ }
121
+ if (!completedAt) {
122
+ addIssue(ctx, "completedAt", "completedAt is required once record status is terminal");
123
+ }
124
+ }
125
+ const startedAtTime = parseTimestamp(startedAt);
126
+ const completedAtTime = parseTimestamp(completedAt);
127
+ if (completedAtTime !== undefined &&
128
+ startedAtTime !== undefined &&
129
+ completedAtTime < startedAtTime) {
130
+ addIssue(ctx, "completedAt", "completedAt must be greater than or equal to startedAt");
131
+ }
132
+ }
133
+ export function buildLifecycleStartFields(options) {
134
+ return {
135
+ startedAt: options.existingStartedAt ??
136
+ options.timestamp ??
137
+ new Date().toISOString(),
138
+ };
139
+ }
140
+ export function buildRecordLifecycleCompleteFields(options) {
141
+ const completedAt = options.completedAt ??
142
+ options.existing.completedAt ??
143
+ new Date().toISOString();
144
+ const startedAt = options.existing.startedAt ?? options.startedAt;
145
+ if (!startedAt) {
146
+ throw new Error("Record lifecycle completion requires canonical startedAt.");
147
+ }
148
+ return {
149
+ startedAt,
150
+ completedAt,
151
+ };
152
+ }
153
+ export function buildOperationLifecycleCompleteFields(options) {
154
+ const completedAt = options.completedAt ??
155
+ options.existing.completedAt ??
156
+ new Date().toISOString();
157
+ const startedAt = options.existing.startedAt ?? options.startedAt;
158
+ if (!startedAt) {
159
+ throw new Error("Operation lifecycle completion requires canonical startedAt.");
160
+ }
161
+ return {
162
+ startedAt,
163
+ completedAt,
164
+ };
165
+ }
@@ -0,0 +1,21 @@
1
+ import type { TokenUsageResult } from "../../workspace/chat/token-usage-result.js";
2
+ import type { ChatArtifactFormat } from "../../workspace/chat/types.js";
3
+ import type { ExtractedTokenUsage } from "../run/model/types.js";
4
+ export declare const DEFAULT_TOKEN_USAGE_UNAVAILABLE_MESSAGE = "Chat usage capture was not enabled or did not produce an artifact.";
5
+ export declare const UNKNOWN_TOKEN_USAGE_PROVIDER = "unknown";
6
+ export declare const UNKNOWN_TOKEN_USAGE_MODEL_ID = "unknown";
7
+ interface TokenUsageResultMetadata {
8
+ provider?: string;
9
+ modelId?: string;
10
+ artifactPath?: string;
11
+ format?: ChatArtifactFormat;
12
+ }
13
+ export declare function buildUnavailableTokenUsageResult(options: TokenUsageResultMetadata & {
14
+ message?: string;
15
+ }): TokenUsageResult;
16
+ export declare function resolveTokenUsage(result: TokenUsageResult): ExtractedTokenUsage | undefined;
17
+ export declare function reconstructTokenUsageResult(options: TokenUsageResultMetadata & {
18
+ tokenUsage?: ExtractedTokenUsage;
19
+ message?: string;
20
+ }): TokenUsageResult;
21
+ export {};
@@ -0,0 +1,38 @@
1
+ export const DEFAULT_TOKEN_USAGE_UNAVAILABLE_MESSAGE = "Chat usage capture was not enabled or did not produce an artifact.";
2
+ export const UNKNOWN_TOKEN_USAGE_PROVIDER = "unknown";
3
+ export const UNKNOWN_TOKEN_USAGE_MODEL_ID = "unknown";
4
+ export function buildUnavailableTokenUsageResult(options) {
5
+ const { provider = UNKNOWN_TOKEN_USAGE_PROVIDER, modelId = UNKNOWN_TOKEN_USAGE_MODEL_ID, artifactPath, format, message, } = options;
6
+ return {
7
+ status: "unavailable",
8
+ reason: "chat_not_captured",
9
+ provider,
10
+ modelId,
11
+ ...(artifactPath !== undefined ? { artifactPath } : {}),
12
+ ...(format !== undefined ? { format } : {}),
13
+ message: message ?? DEFAULT_TOKEN_USAGE_UNAVAILABLE_MESSAGE,
14
+ };
15
+ }
16
+ export function resolveTokenUsage(result) {
17
+ return result.status === "available" ? result.tokenUsage : undefined;
18
+ }
19
+ export function reconstructTokenUsageResult(options) {
20
+ const { tokenUsage, provider = UNKNOWN_TOKEN_USAGE_PROVIDER, modelId = UNKNOWN_TOKEN_USAGE_MODEL_ID, artifactPath, format, message, } = options;
21
+ if (!tokenUsage) {
22
+ return buildUnavailableTokenUsageResult({
23
+ provider,
24
+ modelId,
25
+ artifactPath,
26
+ format,
27
+ message,
28
+ });
29
+ }
30
+ return {
31
+ status: "available",
32
+ provider,
33
+ modelId,
34
+ ...(artifactPath !== undefined ? { artifactPath } : {}),
35
+ ...(format !== undefined ? { format } : {}),
36
+ tokenUsage,
37
+ };
38
+ }
@@ -0,0 +1,31 @@
1
+ import type { CompetitionCommandAdapter } from "../../../competition/command-adapter.js";
2
+ import { type ResolvedExtraContextFile } from "../../../competition/shared/extra-context.js";
3
+ import type { AgentDefinition } from "../../../configs/agents/types.js";
4
+ import type { EnvironmentConfig } from "../../../configs/environment/types.js";
5
+ import type { ExtractedTokenUsage } from "../../../domain/run/model/types.js";
6
+ import type { TokenUsageResult } from "../../../workspace/chat/token-usage-result.js";
7
+ import { type AgentWorkspacePaths } from "../../../workspace/layout.js";
8
+ export type SpecCompetitionCandidate = AgentDefinition;
9
+ export interface PreparedSpecCompetitionCandidate {
10
+ readonly candidate: SpecCompetitionCandidate;
11
+ readonly workspacePaths: AgentWorkspacePaths;
12
+ readonly prompt: string;
13
+ }
14
+ export interface SpecCompetitionExecution {
15
+ readonly agentId: string;
16
+ readonly outputPath?: string;
17
+ readonly dataPath?: string;
18
+ readonly status: "succeeded" | "failed";
19
+ readonly tokenUsage?: ExtractedTokenUsage;
20
+ readonly tokenUsageResult: TokenUsageResult;
21
+ readonly error?: string;
22
+ }
23
+ export interface CreateSpecCompetitionAdapterInput {
24
+ readonly root: string;
25
+ readonly sessionId: string;
26
+ readonly description: string;
27
+ readonly specTitle?: string;
28
+ readonly environment: EnvironmentConfig;
29
+ readonly extraContextFiles?: readonly ResolvedExtraContextFile[];
30
+ }
31
+ export declare function createSpecCompetitionAdapter(input: CreateSpecCompetitionAdapterInput): CompetitionCommandAdapter<SpecCompetitionCandidate, PreparedSpecCompetitionCandidate, SpecCompetitionExecution>;
@@ -0,0 +1,196 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { detectAgentProcessFailureDetail } from "../../../agents/runtime/failures.js";
4
+ import { runSandboxedAgent } from "../../../agents/runtime/harness.js";
5
+ import { teardownSessionAuth } from "../../../agents/runtime/registry.js";
6
+ import { stageExtraContextFiles, } from "../../../competition/shared/extra-context.js";
7
+ import { composeStageSandboxPolicy } from "../../../competition/shared/sandbox-policy.js";
8
+ import { createTeardownController, runTeardown, } from "../../../competition/shared/teardown.js";
9
+ import { buildUnavailableTokenUsageResult, resolveTokenUsage, } from "../../../domain/shared/token-usage.js";
10
+ import { buildSpecPrompt } from "../../../domain/spec/competition/prompt.js";
11
+ import { parseSpecData } from "../../../domain/spec/model/output.js";
12
+ import { toErrorMessage } from "../../../utils/errors.js";
13
+ import { normalizePathForDisplay, relativeToRoot, } from "../../../utils/path.js";
14
+ import { slugify } from "../../../utils/slug.js";
15
+ import { extractProviderNativeTokenUsageForSession } from "../../../workspace/chat/native-usage.js";
16
+ import { buildAgentSessionWorkspacePaths, scaffoldAgentWorkspace, } from "../../../workspace/layout.js";
17
+ import { promoteWorkspaceFile } from "../../../workspace/promotion.js";
18
+ import { VORATIQ_SPEC_DIR } from "../../../workspace/structure.js";
19
+ const SPEC_MARKDOWN_FILENAME = "spec.md";
20
+ const SPEC_DATA_FILENAME = "spec.json";
21
+ export function createSpecCompetitionAdapter(input) {
22
+ const { root, sessionId, description, specTitle, environment, extraContextFiles = [], } = input;
23
+ const teardown = createTeardownController(`spec \`${sessionId}\``);
24
+ teardown.addAction({
25
+ key: `spec-auth:${sessionId}`,
26
+ label: "session auth",
27
+ cleanup: async () => {
28
+ await teardownSessionAuth(sessionId);
29
+ },
30
+ });
31
+ return {
32
+ failurePolicy: "continue",
33
+ prepareCandidates: async (candidates) => {
34
+ const ready = [];
35
+ const failures = [];
36
+ for (const candidate of candidates) {
37
+ const workspacePaths = buildAgentSessionWorkspacePaths({
38
+ root,
39
+ domain: VORATIQ_SPEC_DIR,
40
+ sessionId,
41
+ agentId: candidate.id,
42
+ });
43
+ registerScratchWorkspaceTeardown(teardown, workspacePaths, candidate.id);
44
+ try {
45
+ await scaffoldAgentWorkspace(workspacePaths);
46
+ await stageExtraContextFiles({
47
+ contextPath: workspacePaths.contextPath,
48
+ files: extraContextFiles,
49
+ });
50
+ const prompt = buildSpecPrompt({
51
+ description,
52
+ title: specTitle,
53
+ markdownOutputPath: SPEC_MARKDOWN_FILENAME,
54
+ dataOutputPath: SPEC_DATA_FILENAME,
55
+ repoRootPath: root,
56
+ workspacePath: workspacePaths.workspacePath,
57
+ extraContextFiles,
58
+ });
59
+ ready.push({
60
+ candidate,
61
+ workspacePaths,
62
+ prompt,
63
+ });
64
+ }
65
+ catch (error) {
66
+ failures.push({
67
+ agentId: candidate.id,
68
+ status: "failed",
69
+ tokenUsageResult: buildUnavailableTokenUsageResult({
70
+ provider: candidate.provider,
71
+ modelId: candidate.model,
72
+ message: toErrorMessage(error),
73
+ }),
74
+ error: toErrorMessage(error),
75
+ });
76
+ }
77
+ }
78
+ return {
79
+ ready,
80
+ failures,
81
+ };
82
+ },
83
+ executeCandidate: async (prepared) => {
84
+ const { candidate, workspacePaths, prompt } = prepared;
85
+ try {
86
+ const result = await runSandboxedAgent({
87
+ root,
88
+ sessionId,
89
+ sandboxStageId: "spec",
90
+ agent: candidate,
91
+ prompt,
92
+ environment,
93
+ paths: {
94
+ agentRoot: workspacePaths.agentRoot,
95
+ workspacePath: workspacePaths.workspacePath,
96
+ sandboxHomePath: workspacePaths.sandboxHomePath,
97
+ runtimeManifestPath: workspacePaths.runtimeManifestPath,
98
+ sandboxSettingsPath: workspacePaths.sandboxSettingsPath,
99
+ runtimePath: workspacePaths.runtimePath,
100
+ artifactsPath: workspacePaths.artifactsPath,
101
+ stdoutPath: workspacePaths.stdoutPath,
102
+ stderrPath: workspacePaths.stderrPath,
103
+ },
104
+ captureChat: true,
105
+ teardownAuthOnExit: false,
106
+ ...composeStageSandboxPolicy(),
107
+ });
108
+ const tokenUsageResult = await extractProviderNativeTokenUsageForSession({
109
+ root,
110
+ domain: VORATIQ_SPEC_DIR,
111
+ sessionId,
112
+ agentId: candidate.id,
113
+ provider: candidate.provider,
114
+ modelId: candidate.model,
115
+ chatCaptured: result.chat?.captured === true,
116
+ format: result.chat?.format,
117
+ artifactPath: result.chat?.artifactPath,
118
+ });
119
+ const tokenUsage = resolveTokenUsage(tokenUsageResult);
120
+ if (result.exitCode !== 0 || result.errorMessage) {
121
+ const detectedDetail = result.watchdog?.trigger && result.errorMessage
122
+ ? result.errorMessage
123
+ : await detectAgentProcessFailureDetail({
124
+ provider: candidate.provider,
125
+ stdoutPath: workspacePaths.stdoutPath,
126
+ stderrPath: workspacePaths.stderrPath,
127
+ });
128
+ const detail = detectedDetail ??
129
+ result.errorMessage ??
130
+ `Agent exited with code ${result.exitCode ?? "unknown"}`;
131
+ return {
132
+ agentId: candidate.id,
133
+ status: "failed",
134
+ tokenUsage,
135
+ tokenUsageResult,
136
+ error: detail,
137
+ };
138
+ }
139
+ const stagedMarkdownPath = join(workspacePaths.workspacePath, SPEC_MARKDOWN_FILENAME);
140
+ const stagedDataPath = join(workspacePaths.workspacePath, SPEC_DATA_FILENAME);
141
+ await readFile(stagedMarkdownPath, "utf8");
142
+ const specData = parseSpecData(await readFile(stagedDataPath, "utf8"));
143
+ const artifactBasename = slugify(specData.title, "spec");
144
+ const artifactMarkdownFilename = `${artifactBasename}.md`;
145
+ const artifactDataFilename = `${artifactBasename}.json`;
146
+ const markdownPromoteResult = await promoteWorkspaceFile({
147
+ workspacePath: workspacePaths.workspacePath,
148
+ artifactsPath: workspacePaths.artifactsPath,
149
+ stagedRelativePath: SPEC_MARKDOWN_FILENAME,
150
+ artifactRelativePath: artifactMarkdownFilename,
151
+ deleteStaged: true,
152
+ });
153
+ const dataPromoteResult = await promoteWorkspaceFile({
154
+ workspacePath: workspacePaths.workspacePath,
155
+ artifactsPath: workspacePaths.artifactsPath,
156
+ stagedRelativePath: SPEC_DATA_FILENAME,
157
+ artifactRelativePath: artifactDataFilename,
158
+ deleteStaged: true,
159
+ });
160
+ return {
161
+ agentId: candidate.id,
162
+ outputPath: normalizePathForDisplay(relativeToRoot(root, markdownPromoteResult.artifactPath)),
163
+ dataPath: normalizePathForDisplay(relativeToRoot(root, dataPromoteResult.artifactPath)),
164
+ status: "succeeded",
165
+ tokenUsage,
166
+ tokenUsageResult,
167
+ };
168
+ }
169
+ catch (error) {
170
+ return {
171
+ agentId: candidate.id,
172
+ status: "failed",
173
+ tokenUsageResult: buildUnavailableTokenUsageResult({
174
+ provider: candidate.provider,
175
+ modelId: candidate.model,
176
+ message: toErrorMessage(error),
177
+ }),
178
+ error: toErrorMessage(error),
179
+ };
180
+ }
181
+ },
182
+ finalizeCompetition: async () => {
183
+ await runTeardown(teardown);
184
+ },
185
+ sortResults: compareSpecExecutionsByAgentId,
186
+ };
187
+ }
188
+ function registerScratchWorkspaceTeardown(teardown, workspacePaths, agentId) {
189
+ teardown.addPath(workspacePaths.workspacePath, `${agentId} workspace`);
190
+ teardown.addPath(workspacePaths.contextPath, `${agentId} context`);
191
+ teardown.addPath(workspacePaths.runtimePath, `${agentId} runtime`);
192
+ teardown.addPath(workspacePaths.sandboxPath, `${agentId} sandbox`);
193
+ }
194
+ function compareSpecExecutionsByAgentId(left, right) {
195
+ return left.agentId.localeCompare(right.agentId);
196
+ }
@@ -0,0 +1,11 @@
1
+ import { type ResolvedExtraContextFile } from "../../../competition/shared/extra-context.js";
2
+ export interface BuildSpecPromptOptions {
3
+ description: string;
4
+ title?: string;
5
+ markdownOutputPath: string;
6
+ dataOutputPath: string;
7
+ repoRootPath: string;
8
+ workspacePath: string;
9
+ extraContextFiles?: readonly ResolvedExtraContextFile[];
10
+ }
11
+ export declare function buildSpecPrompt(options: BuildSpecPromptOptions): string;
@@ -0,0 +1,44 @@
1
+ import { appendExtraContextPromptSection, } from "../../../competition/shared/extra-context.js";
2
+ import { appendConstraints, appendOutputRequirements, buildWorkspaceArtifactRequirements, } from "../../../competition/shared/prompt-helpers.js";
3
+ export function buildSpecPrompt(options) {
4
+ const { description, title, markdownOutputPath, dataOutputPath, repoRootPath, workspacePath, extraContextFiles = [], } = options;
5
+ const lines = [
6
+ "Write a spec for the task described below.",
7
+ "",
8
+ "A spec defines **what** to build and **why**, not **how**. Don't prescribe implementation details—agents choose the approach.",
9
+ ];
10
+ if (title) {
11
+ lines.push("", `Title: ${title}`);
12
+ }
13
+ lines.push("", "User description:", "```", description.trim(), "```", "", "Required spec structure:", "- **H1 title**", "- **## Objective** — concise prose stating the goal.", "- **## Scope** — flat bullet list.", "- **## Acceptance Criteria** — flat bullet list. Each item independently verifiable, focused on observable outcomes.", "- **## Constraints** — flat bullet list.", "- **## Exit Signal** — concise prose.", "- **## Out of Scope** (optional) — flat bullet list when useful to prevent scope creep.", "", "Authoring guidance:", "- State the goal explicitly and unambiguously.", "- Reference existing code for context, not to dictate where changes go.", "- Be direct, concrete, and executable.", "- Include needed external context inline—don't reference URLs that agents cannot access.", "- Do not embed runtime or execution environment details (sandbox constraints, headless mode, file-access rules) in the spec content. Those are agent instructions, not spec content.");
14
+ appendConstraints(lines, {
15
+ readAccess: repoRootPath,
16
+ writeAccess: workspacePath,
17
+ });
18
+ appendExtraContextPromptSection(lines, extraContextFiles);
19
+ appendOutputRequirements(lines, buildWorkspaceArtifactRequirements([
20
+ {
21
+ instruction: "Save the spec as markdown",
22
+ path: markdownOutputPath,
23
+ },
24
+ {
25
+ instruction: "Save the same spec as JSON",
26
+ path: dataOutputPath,
27
+ schema: {
28
+ leadIn: "with this shape",
29
+ content: [
30
+ "`{`",
31
+ "` title: string,`",
32
+ "` objective: string,`",
33
+ "` scope: string[],`",
34
+ "` acceptanceCriteria: string[],`",
35
+ "` constraints: string[],`",
36
+ "` exitSignal: string,`",
37
+ "` outOfScope?: string[],`",
38
+ "`}`",
39
+ ],
40
+ },
41
+ },
42
+ ], ["- Both files must describe the same spec."]));
43
+ return `${lines.join("\n")}\n`;
44
+ }
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ export declare const specDataSchema: z.ZodObject<{
3
+ title: z.ZodString;
4
+ objective: z.ZodString;
5
+ scope: z.ZodArray<z.ZodString>;
6
+ acceptanceCriteria: z.ZodArray<z.ZodString>;
7
+ constraints: z.ZodArray<z.ZodString>;
8
+ outOfScope: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ exitSignal: z.ZodString;
10
+ }, z.core.$strip>;
11
+ export type SpecData = z.infer<typeof specDataSchema>;
12
+ export declare function parseSpecData(rawSpecData: string): SpecData;
13
+ export declare function readSpecData(specDataPath: string): Promise<SpecData>;
@@ -0,0 +1,36 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { z } from "zod";
3
+ export const specDataSchema = z.object({
4
+ title: z.string().trim().min(1),
5
+ objective: z.string().trim().min(1),
6
+ scope: z.array(z.string().trim().min(1)).min(1),
7
+ acceptanceCriteria: z.array(z.string().trim().min(1)).min(1),
8
+ constraints: z.array(z.string().trim().min(1)).min(1),
9
+ outOfScope: z.array(z.string().trim().min(1)).optional(),
10
+ exitSignal: z.string().trim().min(1),
11
+ });
12
+ export function parseSpecData(rawSpecData) {
13
+ let parsed;
14
+ try {
15
+ parsed = JSON.parse(rawSpecData);
16
+ }
17
+ catch (error) {
18
+ const reason = error instanceof Error ? error.message : "invalid JSON syntax";
19
+ throw new Error(`Invalid JSON: ${reason}`);
20
+ }
21
+ const validation = specDataSchema.safeParse(parsed);
22
+ if (!validation.success) {
23
+ const detail = validation.error.issues
24
+ .map((issue) => {
25
+ const path = issue.path.length > 0 ? issue.path.map(String).join(".") : "root";
26
+ return `${path}: ${issue.message}`;
27
+ })
28
+ .join("; ");
29
+ throw new Error(`Schema validation failed: ${detail}`);
30
+ }
31
+ return validation.data;
32
+ }
33
+ export async function readSpecData(specDataPath) {
34
+ const rawSpecData = await readFile(specDataPath, "utf8");
35
+ return parseSpecData(rawSpecData);
36
+ }
@@ -0,0 +1,98 @@
1
+ import { z } from "zod";
2
+ import { type SpecAgentStatus, specAgentStatusSchema, type SpecRecordStatus, specRecordStatusSchema, TERMINAL_SPEC_AGENT_STATUSES, TERMINAL_SPEC_STATUSES } from "../../../status/index.js";
3
+ export type { SpecAgentStatus, SpecRecordStatus };
4
+ export { specAgentStatusSchema, specRecordStatusSchema, TERMINAL_SPEC_AGENT_STATUSES, TERMINAL_SPEC_STATUSES, };
5
+ export declare const specAgentEntrySchema: z.ZodObject<{
6
+ agentId: z.ZodString;
7
+ status: z.ZodEnum<{
8
+ queued: "queued";
9
+ running: "running";
10
+ succeeded: "succeeded";
11
+ failed: "failed";
12
+ }>;
13
+ startedAt: z.ZodOptional<z.ZodString>;
14
+ completedAt: z.ZodOptional<z.ZodString>;
15
+ outputPath: z.ZodOptional<z.ZodString>;
16
+ dataPath: z.ZodOptional<z.ZodString>;
17
+ tokenUsage: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
18
+ input_tokens: z.ZodOptional<z.ZodNumber>;
19
+ output_tokens: z.ZodOptional<z.ZodNumber>;
20
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
21
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strict>, z.ZodObject<{
23
+ input_tokens: z.ZodOptional<z.ZodNumber>;
24
+ cached_input_tokens: z.ZodOptional<z.ZodNumber>;
25
+ output_tokens: z.ZodOptional<z.ZodNumber>;
26
+ reasoning_output_tokens: z.ZodOptional<z.ZodNumber>;
27
+ total_tokens: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strict>, z.ZodObject<{
29
+ input: z.ZodOptional<z.ZodNumber>;
30
+ output: z.ZodOptional<z.ZodNumber>;
31
+ cached: z.ZodOptional<z.ZodNumber>;
32
+ thoughts: z.ZodOptional<z.ZodNumber>;
33
+ tool: z.ZodOptional<z.ZodNumber>;
34
+ total: z.ZodOptional<z.ZodNumber>;
35
+ }, z.core.$strict>]>>;
36
+ error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
37
+ }, z.core.$strip>;
38
+ export type SpecAgentEntry = z.infer<typeof specAgentEntrySchema>;
39
+ export declare const specRecordSchema: z.ZodObject<{
40
+ sessionId: z.ZodString;
41
+ createdAt: z.ZodString;
42
+ startedAt: z.ZodString;
43
+ completedAt: z.ZodOptional<z.ZodString>;
44
+ status: z.ZodEnum<{
45
+ running: "running";
46
+ succeeded: "succeeded";
47
+ failed: "failed";
48
+ aborted: "aborted";
49
+ }>;
50
+ baseRevisionSha: z.ZodOptional<z.ZodString>;
51
+ description: z.ZodString;
52
+ extraContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
53
+ extraContextMetadata: z.ZodOptional<z.ZodArray<z.ZodObject<{
54
+ stagedPath: z.ZodString;
55
+ sourcePath: z.ZodString;
56
+ }, z.core.$strip>>>;
57
+ agents: z.ZodArray<z.ZodObject<{
58
+ agentId: z.ZodString;
59
+ status: z.ZodEnum<{
60
+ queued: "queued";
61
+ running: "running";
62
+ succeeded: "succeeded";
63
+ failed: "failed";
64
+ }>;
65
+ startedAt: z.ZodOptional<z.ZodString>;
66
+ completedAt: z.ZodOptional<z.ZodString>;
67
+ outputPath: z.ZodOptional<z.ZodString>;
68
+ dataPath: z.ZodOptional<z.ZodString>;
69
+ tokenUsage: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
70
+ input_tokens: z.ZodOptional<z.ZodNumber>;
71
+ output_tokens: z.ZodOptional<z.ZodNumber>;
72
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
73
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
74
+ }, z.core.$strict>, z.ZodObject<{
75
+ input_tokens: z.ZodOptional<z.ZodNumber>;
76
+ cached_input_tokens: z.ZodOptional<z.ZodNumber>;
77
+ output_tokens: z.ZodOptional<z.ZodNumber>;
78
+ reasoning_output_tokens: z.ZodOptional<z.ZodNumber>;
79
+ total_tokens: z.ZodOptional<z.ZodNumber>;
80
+ }, z.core.$strict>, z.ZodObject<{
81
+ input: z.ZodOptional<z.ZodNumber>;
82
+ output: z.ZodOptional<z.ZodNumber>;
83
+ cached: z.ZodOptional<z.ZodNumber>;
84
+ thoughts: z.ZodOptional<z.ZodNumber>;
85
+ tool: z.ZodOptional<z.ZodNumber>;
86
+ total: z.ZodOptional<z.ZodNumber>;
87
+ }, z.core.$strict>]>>;
88
+ error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
89
+ }, z.core.$strip>>;
90
+ error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
91
+ }, z.core.$strip>;
92
+ export type SpecRecord = z.infer<typeof specRecordSchema>;
93
+ export type SpecIndexEntry = Pick<SpecRecord, "sessionId" | "createdAt" | "status">;
94
+ /**
95
+ * Derive the session-level spec status from per-agent outcomes.
96
+ * Returns "succeeded" when at least one agent succeeds; otherwise "failed".
97
+ */
98
+ export declare function deriveSpecStatusFromAgents(agentStatuses: readonly SpecAgentStatus[]): SpecRecordStatus;