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,229 @@
1
+ import { runTeardown } from "../../competition/shared/teardown.js";
2
+ import { buildOperationLifecycleCompleteFields, buildRecordLifecycleCompleteFields, } from "../../domain/shared/lifecycle.js";
3
+ import { writeVerificationArtifact } from "../../domain/verify/competition/artifacts.js";
4
+ import { flushVerificationRecordBuffer, readVerificationRecords, rewriteVerificationRecord, } from "../../domain/verify/persistence/adapter.js";
5
+ import { toErrorMessage } from "../../utils/errors.js";
6
+ import { getVerificationProgrammaticResultPath, getVerificationRubricResultPath, } from "../../workspace/structure.js";
7
+ export const VERIFY_ABORT_DETAIL = "Verification aborted before completion.";
8
+ let activeVerification;
9
+ let terminationInFlight = false;
10
+ export function registerActiveVerification(context) {
11
+ activeVerification = context;
12
+ }
13
+ export function clearActiveVerification(verificationId) {
14
+ if (activeVerification?.verificationId !== verificationId) {
15
+ return;
16
+ }
17
+ if (!terminationInFlight) {
18
+ activeVerification = undefined;
19
+ }
20
+ }
21
+ export async function terminateActiveVerification(status) {
22
+ if (!activeVerification || terminationInFlight) {
23
+ return;
24
+ }
25
+ terminationInFlight = true;
26
+ const context = activeVerification;
27
+ let persistenceError;
28
+ try {
29
+ const existingRecord = await readVerificationRecords({
30
+ root: context.root,
31
+ verificationsFilePath: context.verificationsFilePath,
32
+ limit: 1,
33
+ predicate: (record) => record.sessionId === context.verificationId,
34
+ }).then((records) => records[0]);
35
+ if (!existingRecord) {
36
+ return;
37
+ }
38
+ const completedAt = new Date().toISOString();
39
+ const detail = status === "aborted" ? VERIFY_ABORT_DETAIL : "Verification failed.";
40
+ await materializeTerminalVerificationArtifacts({
41
+ root: context.root,
42
+ verificationId: context.verificationId,
43
+ record: existingRecord,
44
+ status,
45
+ completedAt,
46
+ detail,
47
+ });
48
+ await rewriteVerificationRecord({
49
+ root: context.root,
50
+ verificationsFilePath: context.verificationsFilePath,
51
+ sessionId: context.verificationId,
52
+ mutate: (existing) => {
53
+ const methods = existing.methods.map((method) => finalizeVerificationMethodRef({
54
+ verificationId: context.verificationId,
55
+ method,
56
+ target: existing.target,
57
+ status,
58
+ completedAt,
59
+ detail,
60
+ }));
61
+ const inProgress = existing.status === "queued" || existing.status === "running";
62
+ if (!inProgress) {
63
+ if (methods.every((method, index) => method === existing.methods[index])) {
64
+ return existing;
65
+ }
66
+ return {
67
+ ...existing,
68
+ methods,
69
+ };
70
+ }
71
+ return {
72
+ ...existing,
73
+ status,
74
+ methods,
75
+ ...buildRecordLifecycleCompleteFields({
76
+ existing,
77
+ startedAt: existing.startedAt ?? completedAt,
78
+ completedAt,
79
+ }),
80
+ error: existing.error ?? detail,
81
+ };
82
+ },
83
+ forceFlush: true,
84
+ });
85
+ await flushVerificationRecordBuffer({
86
+ verificationsFilePath: context.verificationsFilePath,
87
+ sessionId: context.verificationId,
88
+ });
89
+ }
90
+ catch (error) {
91
+ persistenceError =
92
+ error instanceof Error ? error : new Error(toErrorMessage(error));
93
+ console.error(`[voratiq] Failed to finalize verification ${context.verificationId}: ${toErrorMessage(error)}`);
94
+ }
95
+ finally {
96
+ try {
97
+ await finalizeRegisteredVerificationTeardown(context);
98
+ }
99
+ finally {
100
+ terminationInFlight = false;
101
+ activeVerification = undefined;
102
+ }
103
+ }
104
+ if (persistenceError) {
105
+ throw persistenceError;
106
+ }
107
+ }
108
+ export async function finalizeActiveVerification(verificationId) {
109
+ if (!activeVerification ||
110
+ activeVerification.verificationId !== verificationId) {
111
+ clearActiveVerification(verificationId);
112
+ return;
113
+ }
114
+ const context = activeVerification;
115
+ try {
116
+ await finalizeRegisteredVerificationTeardown(context);
117
+ }
118
+ finally {
119
+ clearActiveVerification(verificationId);
120
+ }
121
+ }
122
+ function finalizeVerificationMethodRef(options) {
123
+ const { verificationId, method, target, status, completedAt, detail } = options;
124
+ if (method.status !== "queued" && method.status !== "running") {
125
+ return method;
126
+ }
127
+ const artifactPath = method.artifactPath ??
128
+ buildVerificationMethodArtifactPath({
129
+ verificationId,
130
+ method,
131
+ });
132
+ return {
133
+ ...method,
134
+ status,
135
+ artifactPath,
136
+ ...buildOperationLifecycleCompleteFields({
137
+ existing: method,
138
+ startedAt: method.startedAt ?? completedAt,
139
+ completedAt,
140
+ }),
141
+ error: method.error ?? detail,
142
+ ...(method.method === "programmatic" &&
143
+ target.kind !== "run" &&
144
+ method.scope.kind === "run"
145
+ ? { scope: { kind: "target" } }
146
+ : {}),
147
+ };
148
+ }
149
+ async function materializeTerminalVerificationArtifacts(options) {
150
+ const { root, verificationId, record, status, completedAt, detail } = options;
151
+ for (const method of record.methods) {
152
+ if (method.status !== "queued" && method.status !== "running") {
153
+ continue;
154
+ }
155
+ const artifactPath = buildVerificationMethodArtifactPath({
156
+ verificationId,
157
+ method,
158
+ });
159
+ if (!artifactPath) {
160
+ continue;
161
+ }
162
+ if (method.method === "rubric") {
163
+ const { template, verifierId } = method;
164
+ if (!template || !verifierId) {
165
+ continue;
166
+ }
167
+ await writeVerificationArtifact({
168
+ root,
169
+ artifactPath,
170
+ artifact: {
171
+ method: "rubric",
172
+ template,
173
+ verifierId,
174
+ generatedAt: completedAt,
175
+ status,
176
+ result: {},
177
+ error: detail,
178
+ },
179
+ });
180
+ continue;
181
+ }
182
+ if (record.target.kind === "run") {
183
+ await writeVerificationArtifact({
184
+ root,
185
+ artifactPath,
186
+ artifact: {
187
+ method: "programmatic",
188
+ generatedAt: completedAt,
189
+ status,
190
+ error: detail,
191
+ target: record.target,
192
+ scope: "run",
193
+ candidates: [],
194
+ },
195
+ });
196
+ continue;
197
+ }
198
+ await writeVerificationArtifact({
199
+ root,
200
+ artifactPath,
201
+ artifact: {
202
+ method: "programmatic",
203
+ generatedAt: completedAt,
204
+ status,
205
+ error: detail,
206
+ target: record.target,
207
+ scope: "target",
208
+ results: [],
209
+ },
210
+ });
211
+ }
212
+ }
213
+ async function finalizeRegisteredVerificationTeardown(context) {
214
+ await runTeardown(context.teardown);
215
+ }
216
+ function buildVerificationMethodArtifactPath(options) {
217
+ const { verificationId, method } = options;
218
+ if (method.method === "programmatic") {
219
+ return getVerificationProgrammaticResultPath(verificationId);
220
+ }
221
+ if (!method.verifierId || !method.template) {
222
+ return undefined;
223
+ }
224
+ return getVerificationRubricResultPath({
225
+ sessionId: verificationId,
226
+ verifierId: method.verifierId,
227
+ template: method.template,
228
+ });
229
+ }
@@ -0,0 +1,7 @@
1
+ import type { VerificationConfig } from "../../configs/verification/types.js";
2
+ export declare function resolveVerifyRubricMaxParallel(options: {
3
+ targetKind: "spec" | "run" | "reduce" | "message";
4
+ verificationConfig: VerificationConfig;
5
+ verifierAgentCount: number;
6
+ requestedMaxParallel?: number;
7
+ }): number;
@@ -0,0 +1,15 @@
1
+ import { resolveEffectiveMaxParallel } from "../shared/max-parallel.js";
2
+ export function resolveVerifyRubricMaxParallel(options) {
3
+ const { targetKind, verificationConfig, verifierAgentCount, requestedMaxParallel, } = options;
4
+ const rubricTemplateCount = targetKind === "spec"
5
+ ? verificationConfig.spec.rubric.length
6
+ : targetKind === "run"
7
+ ? verificationConfig.run.rubric.length
8
+ : targetKind === "reduce"
9
+ ? verificationConfig.reduce.rubric.length
10
+ : verificationConfig.message.rubric.length;
11
+ return resolveEffectiveMaxParallel({
12
+ competitorCount: verifierAgentCount * rubricTemplateCount,
13
+ requestedMaxParallel,
14
+ });
15
+ }
@@ -0,0 +1,18 @@
1
+ import type { ResolvedVerificationTarget, VerificationCompetitiveCandidate } from "../../domain/verify/competition/target.js";
2
+ export type VerifyTargetKind = "spec" | "run" | "reduce" | "message";
3
+ export interface VerifyTargetSelection {
4
+ kind: VerifyTargetKind;
5
+ sessionId: string;
6
+ }
7
+ export interface ResolveVerifyTargetInput {
8
+ root: string;
9
+ specsFilePath: string;
10
+ runsFilePath: string;
11
+ reductionsFilePath: string;
12
+ messagesFilePath: string;
13
+ verificationsFilePath: string;
14
+ target: VerifyTargetSelection;
15
+ }
16
+ export type VerifyCompetitiveCandidate = VerificationCompetitiveCandidate;
17
+ export type ResolvedVerifyTarget = ResolvedVerificationTarget;
18
+ export declare function resolveVerifyTarget(input: ResolveVerifyTargetInput): Promise<ResolvedVerifyTarget>;
@@ -0,0 +1,420 @@
1
+ import { basename } from "node:path";
2
+ import { CliError, RunNotFoundCliError } from "../../cli/errors.js";
3
+ import { TERMINAL_MESSAGE_STATUSES } from "../../domain/message/model/types.js";
4
+ import { readMessageRecords } from "../../domain/message/persistence/adapter.js";
5
+ import { TERMINAL_REDUCTION_STATUSES } from "../../domain/reduce/model/types.js";
6
+ import { readReductionRecords } from "../../domain/reduce/persistence/adapter.js";
7
+ import { RunRecordNotFoundError } from "../../domain/run/model/errors.js";
8
+ import { fetchRunsSafely } from "../../domain/run/persistence/adapter.js";
9
+ import { TERMINAL_SPEC_STATUSES } from "../../domain/spec/model/types.js";
10
+ import { readSpecRecords } from "../../domain/spec/persistence/adapter.js";
11
+ import { readVerificationRecords } from "../../domain/verify/persistence/adapter.js";
12
+ import { TERMINAL_RUN_STATUSES } from "../../status/index.js";
13
+ import { MESSAGE_RESPONSE_FILENAME } from "../../workspace/structure.js";
14
+ export async function resolveVerifyTarget(input) {
15
+ const { target } = input;
16
+ switch (target.kind) {
17
+ case "spec":
18
+ return resolveSpecVerifyTarget(input);
19
+ case "run":
20
+ return resolveRunVerifyTarget(input);
21
+ case "reduce":
22
+ return resolveReductionVerifyTarget(input);
23
+ case "message":
24
+ return resolveMessageVerifyTarget(input);
25
+ }
26
+ }
27
+ async function resolveSpecVerifyTarget(input) {
28
+ const { root, specsFilePath, target } = input;
29
+ const [record] = await readSpecRecords({
30
+ root,
31
+ specsFilePath,
32
+ limit: 1,
33
+ predicate: (entry) => entry.sessionId === target.sessionId,
34
+ });
35
+ if (!record) {
36
+ throw new CliError(`Spec session \`${target.sessionId}\` not found.`, [], [
37
+ "Re-run `voratiq spec` or confirm the session id in `.voratiq/spec/index.json`.",
38
+ ]);
39
+ }
40
+ if (!TERMINAL_SPEC_STATUSES.includes(record.status)) {
41
+ throw new CliError(`Spec session \`${target.sessionId}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the spec to finish before running `voratiq verify`."]);
42
+ }
43
+ return {
44
+ baseRevisionSha: resolveSpecBaseRevisionSha(record),
45
+ competitiveCandidates: record.agents
46
+ .filter((agent) => agent.status === "succeeded" && agent.outputPath)
47
+ .map((agent) => ({
48
+ canonicalId: agent.agentId,
49
+ forbiddenIdentityTokens: [agent.agentId],
50
+ })),
51
+ target: {
52
+ kind: "spec",
53
+ sessionId: record.sessionId,
54
+ },
55
+ specRecord: record,
56
+ };
57
+ }
58
+ async function resolveRunVerifyTarget(input) {
59
+ const { root, runsFilePath, target } = input;
60
+ const { records } = await fetchRunsSafely({
61
+ root,
62
+ runsFilePath,
63
+ runId: target.sessionId,
64
+ filters: { includeDeleted: true },
65
+ }).catch((error) => {
66
+ if (error instanceof RunRecordNotFoundError) {
67
+ throw new RunNotFoundCliError(target.sessionId);
68
+ }
69
+ throw error;
70
+ });
71
+ const record = records[0];
72
+ if (!record) {
73
+ throw new RunNotFoundCliError(target.sessionId);
74
+ }
75
+ if (!isRunStatusCompleteForVerification(record.status)) {
76
+ throw new CliError(`Run \`${target.sessionId}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the run to finish before running `voratiq verify`."]);
77
+ }
78
+ const candidateIds = [
79
+ ...new Set(record.agents.map((agent) => agent.agentId)),
80
+ ].sort((left, right) => left.localeCompare(right));
81
+ if (candidateIds.length === 0) {
82
+ throw new CliError(`Run \`${target.sessionId}\` has no candidate agents to verify.`, [], ["Re-run `voratiq run` to generate verifiable candidates."]);
83
+ }
84
+ return {
85
+ baseRevisionSha: record.baseRevisionSha,
86
+ competitiveCandidates: candidateIds.map((candidateId) => ({
87
+ canonicalId: candidateId,
88
+ forbiddenIdentityTokens: collectRunCandidateIdentityTokens({
89
+ runRecord: record,
90
+ candidateId,
91
+ }),
92
+ })),
93
+ target: {
94
+ kind: "run",
95
+ sessionId: record.runId,
96
+ candidateIds,
97
+ },
98
+ runRecord: record,
99
+ };
100
+ }
101
+ function isRunStatusCompleteForVerification(status) {
102
+ return status === "pruned" || TERMINAL_RUN_STATUSES.includes(status);
103
+ }
104
+ async function resolveReductionVerifyTarget(input) {
105
+ const { root, reductionsFilePath, target } = input;
106
+ const [record] = await readReductionRecords({
107
+ root,
108
+ reductionsFilePath,
109
+ limit: 1,
110
+ predicate: (entry) => entry.sessionId === target.sessionId,
111
+ });
112
+ if (!record) {
113
+ throw new CliError(`Reduction session \`${target.sessionId}\` not found.`, [], [
114
+ "Re-run `voratiq reduce` or confirm the session id in `.voratiq/reduce/index.json`.",
115
+ ]);
116
+ }
117
+ if (!TERMINAL_REDUCTION_STATUSES.includes(record.status)) {
118
+ throw new CliError(`Reduction session \`${target.sessionId}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the reduction to finish before running `voratiq verify`."]);
119
+ }
120
+ const referenceRepo = await resolveReductionReferenceRepo({
121
+ ...input,
122
+ reductionRecord: record,
123
+ });
124
+ const competitiveCandidates = record.reducers
125
+ .filter((reducer) => reducer.status === "succeeded" && reducer.outputPath)
126
+ .map((reducer) => ({
127
+ canonicalId: reducer.agentId,
128
+ forbiddenIdentityTokens: [reducer.agentId],
129
+ }));
130
+ if (referenceRepo.kind === "git") {
131
+ return {
132
+ baseRevisionSha: referenceRepo.baseRevisionSha,
133
+ competitiveCandidates,
134
+ target: {
135
+ kind: "reduce",
136
+ sessionId: record.sessionId,
137
+ },
138
+ reductionRecord: record,
139
+ };
140
+ }
141
+ return {
142
+ competitiveCandidates,
143
+ target: {
144
+ kind: "reduce",
145
+ sessionId: record.sessionId,
146
+ },
147
+ reductionRecord: record,
148
+ referenceRepoUnavailable: {
149
+ reason: "message-lineage",
150
+ messageSessionId: referenceRepo.messageSessionId,
151
+ },
152
+ };
153
+ }
154
+ async function resolveMessageVerifyTarget(input) {
155
+ const { root, messagesFilePath, target } = input;
156
+ const [record] = await readMessageRecords({
157
+ root,
158
+ messagesFilePath,
159
+ limit: 1,
160
+ predicate: (entry) => entry.sessionId === target.sessionId,
161
+ });
162
+ if (!record) {
163
+ throw new CliError(`Message session \`${target.sessionId}\` not found.`, [], [
164
+ "Re-run `voratiq message` or confirm the session id in `.voratiq/message/index.json`.",
165
+ ]);
166
+ }
167
+ if (!TERMINAL_MESSAGE_STATUSES.includes(record.status)) {
168
+ throw new CliError(`Message session \`${target.sessionId}\` is not complete.`, [`Status: \`${record.status}\`.`], [
169
+ "Wait for the message session to finish before running `voratiq verify`.",
170
+ ]);
171
+ }
172
+ const recipients = resolveVerifiableMessageRecipients(record);
173
+ if (recipients.length === 0) {
174
+ throw new CliError(`Message session \`${target.sessionId}\` has no verifiable message responses.`, [
175
+ "Verification requires at least one succeeded recipient with a durable `response.md` artifact.",
176
+ ], [
177
+ "Re-run `voratiq message` to capture at least one succeeded response before running `voratiq verify`.",
178
+ ]);
179
+ }
180
+ return {
181
+ competitiveCandidates: recipients.map((recipient) => ({
182
+ canonicalId: recipient.agentId,
183
+ forbiddenIdentityTokens: [recipient.agentId],
184
+ })),
185
+ target: {
186
+ kind: "message",
187
+ sessionId: record.sessionId,
188
+ },
189
+ messageRecord: record,
190
+ };
191
+ }
192
+ function collectRunCandidateIdentityTokens(options) {
193
+ const { runRecord, candidateId } = options;
194
+ const tokens = new Set();
195
+ tokens.add(candidateId);
196
+ for (const agent of runRecord.agents) {
197
+ if (agent.agentId !== candidateId) {
198
+ continue;
199
+ }
200
+ tokens.add(agent.agentId);
201
+ if (agent.model.trim().length > 0) {
202
+ tokens.add(agent.model);
203
+ }
204
+ }
205
+ return Array.from(tokens);
206
+ }
207
+ async function resolveReductionReferenceRepo(options) {
208
+ const { root, specsFilePath, runsFilePath, reductionsFilePath, messagesFilePath, verificationsFilePath, reductionRecord, seenReductionIds = new Set(), } = options;
209
+ if (seenReductionIds.has(reductionRecord.sessionId)) {
210
+ throw new CliError(`Reduction session \`${reductionRecord.sessionId}\` has a recursive target chain.`, [], [
211
+ "Inspect `.voratiq/reduce/index.json` and repair the reduction target metadata.",
212
+ ]);
213
+ }
214
+ seenReductionIds.add(reductionRecord.sessionId);
215
+ switch (reductionRecord.target.type) {
216
+ case "spec": {
217
+ const [record] = await readSpecRecords({
218
+ root,
219
+ specsFilePath,
220
+ limit: 1,
221
+ predicate: (entry) => entry.sessionId === reductionRecord.target.id,
222
+ });
223
+ if (!record) {
224
+ throw new CliError(`Spec session \`${reductionRecord.target.id}\` referenced by reduction \`${reductionRecord.sessionId}\` was not found.`);
225
+ }
226
+ return {
227
+ kind: "git",
228
+ baseRevisionSha: resolveSpecBaseRevisionSha(record, {
229
+ ownerLabel: `reduction \`${reductionRecord.sessionId}\``,
230
+ }),
231
+ };
232
+ }
233
+ case "run": {
234
+ const { records } = await fetchRunsSafely({
235
+ root,
236
+ runsFilePath,
237
+ runId: reductionRecord.target.id,
238
+ filters: { includeDeleted: true },
239
+ }).catch((error) => {
240
+ if (error instanceof RunRecordNotFoundError) {
241
+ throw new RunNotFoundCliError(reductionRecord.target.id);
242
+ }
243
+ throw error;
244
+ });
245
+ const runRecord = records[0];
246
+ if (!runRecord) {
247
+ throw new RunNotFoundCliError(reductionRecord.target.id);
248
+ }
249
+ return {
250
+ kind: "git",
251
+ baseRevisionSha: runRecord.baseRevisionSha,
252
+ };
253
+ }
254
+ case "verify": {
255
+ const [verificationRecord] = await readVerificationRecords({
256
+ root,
257
+ verificationsFilePath,
258
+ limit: 1,
259
+ predicate: (entry) => entry.sessionId === reductionRecord.target.id,
260
+ });
261
+ if (!verificationRecord) {
262
+ throw new CliError(`Verification session \`${reductionRecord.target.id}\` referenced by reduction \`${reductionRecord.sessionId}\` was not found.`);
263
+ }
264
+ switch (verificationRecord.target.kind) {
265
+ case "run": {
266
+ const { records } = await fetchRunsSafely({
267
+ root,
268
+ runsFilePath,
269
+ runId: verificationRecord.target.sessionId,
270
+ filters: { includeDeleted: true },
271
+ }).catch((error) => {
272
+ if (error instanceof RunRecordNotFoundError) {
273
+ throw new RunNotFoundCliError(verificationRecord.target.sessionId);
274
+ }
275
+ throw error;
276
+ });
277
+ const runRecord = records[0];
278
+ if (!runRecord) {
279
+ throw new RunNotFoundCliError(verificationRecord.target.sessionId);
280
+ }
281
+ return {
282
+ kind: "git",
283
+ baseRevisionSha: runRecord.baseRevisionSha,
284
+ };
285
+ }
286
+ case "spec": {
287
+ const [record] = await readSpecRecords({
288
+ root,
289
+ specsFilePath,
290
+ limit: 1,
291
+ predicate: (entry) => entry.sessionId === verificationRecord.target.sessionId,
292
+ });
293
+ if (!record) {
294
+ throw new CliError(`Spec session \`${verificationRecord.target.sessionId}\` referenced by verification \`${verificationRecord.sessionId}\` was not found.`);
295
+ }
296
+ return {
297
+ kind: "git",
298
+ baseRevisionSha: resolveSpecBaseRevisionSha(record, {
299
+ ownerLabel: `verification \`${verificationRecord.sessionId}\``,
300
+ }),
301
+ };
302
+ }
303
+ case "reduce": {
304
+ const [parentReduction] = await readReductionRecords({
305
+ root,
306
+ reductionsFilePath,
307
+ limit: 1,
308
+ predicate: (entry) => entry.sessionId === verificationRecord.target.sessionId,
309
+ });
310
+ if (!parentReduction) {
311
+ throw new CliError(`Reduction session \`${verificationRecord.target.sessionId}\` referenced by verification \`${verificationRecord.sessionId}\` was not found.`);
312
+ }
313
+ return await resolveReductionReferenceRepo({
314
+ root,
315
+ specsFilePath,
316
+ runsFilePath,
317
+ reductionsFilePath,
318
+ messagesFilePath,
319
+ verificationsFilePath,
320
+ reductionRecord: parentReduction,
321
+ seenReductionIds,
322
+ });
323
+ }
324
+ case "message": {
325
+ const [messageRecord] = await readMessageRecords({
326
+ root,
327
+ messagesFilePath,
328
+ limit: 1,
329
+ predicate: (entry) => entry.sessionId === verificationRecord.target.sessionId,
330
+ });
331
+ if (!messageRecord) {
332
+ throw new CliError(`Message session \`${verificationRecord.target.sessionId}\` referenced by verification \`${verificationRecord.sessionId}\` was not found.`);
333
+ }
334
+ return messageRecord.baseRevisionSha
335
+ ? {
336
+ kind: "git",
337
+ baseRevisionSha: messageRecord.baseRevisionSha,
338
+ }
339
+ : {
340
+ kind: "none",
341
+ messageSessionId: messageRecord.sessionId,
342
+ };
343
+ }
344
+ }
345
+ throw new CliError(`Verification session \`${verificationRecord.sessionId}\` references an unsupported target kind.`);
346
+ }
347
+ case "reduce": {
348
+ const [parentReduction] = await readReductionRecords({
349
+ root,
350
+ reductionsFilePath,
351
+ limit: 1,
352
+ predicate: (entry) => entry.sessionId === reductionRecord.target.id,
353
+ });
354
+ if (!parentReduction) {
355
+ throw new CliError(`Reduction session \`${reductionRecord.target.id}\` referenced by reduction \`${reductionRecord.sessionId}\` was not found.`);
356
+ }
357
+ return await resolveReductionReferenceRepo({
358
+ root,
359
+ specsFilePath,
360
+ runsFilePath,
361
+ reductionsFilePath,
362
+ messagesFilePath,
363
+ verificationsFilePath,
364
+ reductionRecord: parentReduction,
365
+ seenReductionIds,
366
+ });
367
+ }
368
+ case "message": {
369
+ const [messageRecord] = await readMessageRecords({
370
+ root,
371
+ messagesFilePath,
372
+ limit: 1,
373
+ predicate: (entry) => entry.sessionId === reductionRecord.target.id,
374
+ });
375
+ if (!messageRecord) {
376
+ throw new CliError(`Message session \`${reductionRecord.target.id}\` referenced by reduction \`${reductionRecord.sessionId}\` was not found.`);
377
+ }
378
+ return messageRecord.baseRevisionSha
379
+ ? {
380
+ kind: "git",
381
+ baseRevisionSha: messageRecord.baseRevisionSha,
382
+ }
383
+ : {
384
+ kind: "none",
385
+ messageSessionId: messageRecord.sessionId,
386
+ };
387
+ }
388
+ }
389
+ }
390
+ function resolveVerifiableMessageRecipients(record) {
391
+ return record.recipients.flatMap((recipient) => {
392
+ if (recipient.status !== "succeeded" ||
393
+ typeof recipient.outputPath !== "string" ||
394
+ !isCanonicalMessageResponseArtifact(recipient.outputPath)) {
395
+ return [];
396
+ }
397
+ return [
398
+ {
399
+ agentId: recipient.agentId,
400
+ outputPath: recipient.outputPath,
401
+ },
402
+ ];
403
+ });
404
+ }
405
+ function isCanonicalMessageResponseArtifact(outputPath) {
406
+ return basename(outputPath) === MESSAGE_RESPONSE_FILENAME;
407
+ }
408
+ function resolveSpecBaseRevisionSha(record, options = {}) {
409
+ if (record.baseRevisionSha) {
410
+ return record.baseRevisionSha;
411
+ }
412
+ const ownerLabel = options.ownerLabel
413
+ ? `${options.ownerLabel} targets legacy spec session \`${record.sessionId}\``
414
+ : `Spec session \`${record.sessionId}\``;
415
+ throw new CliError(`${ownerLabel} is missing \`baseRevisionSha\`.`, [
416
+ "This spec record was created before base revisions were persisted for spec sessions.",
417
+ ], [
418
+ "Re-run `voratiq spec` to regenerate the spec session before running `voratiq verify`.",
419
+ ]);
420
+ }