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,826 @@
1
+ import { copyFile, mkdir, readFile } from "node:fs/promises";
2
+ import { dirname, 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 { RunNotFoundCliError } from "../../../cli/errors.js";
7
+ import { stageExtraContextFiles, } from "../../../competition/shared/extra-context.js";
8
+ import { composeStageSandboxPolicy } from "../../../competition/shared/sandbox-policy.js";
9
+ import { createTeardownController, runTeardown, } from "../../../competition/shared/teardown.js";
10
+ import { readMessageRecords } from "../../../domain/message/persistence/adapter.js";
11
+ import { validateReductionOutputContract } from "../../../domain/reduce/competition/output-validation.js";
12
+ import { buildReducePrompt } from "../../../domain/reduce/competition/prompt.js";
13
+ import { parseReductionArtifact } from "../../../domain/reduce/competition/reduction.js";
14
+ import { readReductionRecords, rewriteReductionRecord, } from "../../../domain/reduce/persistence/adapter.js";
15
+ import { buildRunRecordView } from "../../../domain/run/model/enhanced.js";
16
+ import { RunRecordNotFoundError } from "../../../domain/run/model/errors.js";
17
+ import { fetchRunsSafely } from "../../../domain/run/persistence/adapter.js";
18
+ import { buildLifecycleStartFields, buildOperationLifecycleCompleteFields, buildRecordLifecycleCompleteFields, } from "../../../domain/shared/lifecycle.js";
19
+ import { buildUnavailableTokenUsageResult, reconstructTokenUsageResult, resolveTokenUsage, } from "../../../domain/shared/token-usage.js";
20
+ import { readSpecRecords } from "../../../domain/spec/persistence/adapter.js";
21
+ import { readVerificationRecords } from "../../../domain/verify/persistence/adapter.js";
22
+ import { buildPersistedExtraContextFields } from "../../../extra-context/contract.js";
23
+ import { emitStageProgressEvent } from "../../../render/transcripts/stage-progress.js";
24
+ import { toErrorMessage } from "../../../utils/errors.js";
25
+ import { normalizePathForDisplay, relativeToRoot, resolvePath, } from "../../../utils/path.js";
26
+ import { extractProviderNativeTokenUsageForSession } from "../../../workspace/chat/native-usage.js";
27
+ import { scaffoldAgentSessionWorkspace, } from "../../../workspace/layout.js";
28
+ import { promoteWorkspaceFile } from "../../../workspace/promotion.js";
29
+ import { MESSAGE_RESPONSE_FILENAME, REDUCTION_ARTIFACT_INFO_FILENAME, REDUCTION_DATA_FILENAME, REDUCTION_FILENAME, VORATIQ_REDUCTION_DIR, } from "../../../workspace/structure.js";
30
+ export function createReduceCompetitionAdapter(input) {
31
+ const { root, reductionId, createdAt, reductionsFilePath, specsFilePath, runsFilePath, messagesFilePath, verificationsFilePath, target, environment, extraContextFiles = [], renderer, } = input;
32
+ let failure;
33
+ const teardown = createTeardownController(`reduce \`${reductionId}\``);
34
+ teardown.addAction({
35
+ key: `reduce-auth:${reductionId}`,
36
+ label: "session auth",
37
+ cleanup: async () => {
38
+ await teardownSessionAuth(reductionId);
39
+ },
40
+ });
41
+ const tokenUsageResultByReducerAgentId = new Map();
42
+ const tokenUsageIdentityByReducerAgentId = new Map();
43
+ return {
44
+ queueCandidate: (candidate) => {
45
+ emitStageProgressEvent(renderer, {
46
+ type: "stage.candidate",
47
+ stage: "reduce",
48
+ candidate: {
49
+ reducerAgentId: candidate.id,
50
+ status: "queued",
51
+ },
52
+ });
53
+ },
54
+ prepareCandidates: async (candidates) => {
55
+ const targetContext = await prepareReductionTargetContext({
56
+ root,
57
+ specsFilePath,
58
+ runsFilePath,
59
+ messagesFilePath,
60
+ verificationsFilePath,
61
+ reductionsFilePath,
62
+ target,
63
+ });
64
+ const record = {
65
+ sessionId: reductionId,
66
+ target,
67
+ createdAt,
68
+ status: "queued",
69
+ reducers: candidates.map((candidate) => ({
70
+ agentId: candidate.id,
71
+ status: "queued",
72
+ outputPath: buildReductionOutputPath({
73
+ root,
74
+ reductionId,
75
+ reducerAgentId: candidate.id,
76
+ }),
77
+ dataPath: buildReductionDataPath({
78
+ root,
79
+ reductionId,
80
+ reducerAgentId: candidate.id,
81
+ }),
82
+ })),
83
+ ...buildPersistedExtraContextFields(extraContextFiles),
84
+ };
85
+ await rewriteOrAppendReductionRecord({
86
+ root,
87
+ reductionsFilePath,
88
+ record,
89
+ });
90
+ const prepared = [];
91
+ for (const candidate of candidates) {
92
+ tokenUsageIdentityByReducerAgentId.set(candidate.id, {
93
+ provider: candidate.provider,
94
+ modelId: candidate.model,
95
+ });
96
+ const workspacePaths = await scaffoldAgentSessionWorkspace({
97
+ root,
98
+ domain: VORATIQ_REDUCTION_DIR,
99
+ sessionId: reductionId,
100
+ agentId: candidate.id,
101
+ });
102
+ registerScratchWorkspaceTeardown(teardown, workspacePaths, candidate.id);
103
+ await stageReductionTargetContext({
104
+ workspacePath: workspacePaths.workspacePath,
105
+ targetContext,
106
+ });
107
+ await stageExtraContextFiles({
108
+ contextPath: workspacePaths.contextPath,
109
+ files: extraContextFiles,
110
+ });
111
+ const prompt = buildReducePrompt({
112
+ targetOperator: target.type,
113
+ targetId: target.id,
114
+ artifactInfoPath: REDUCTION_ARTIFACT_INFO_FILENAME,
115
+ repoRootPath: workspacePaths.workspacePath,
116
+ workspacePath: workspacePaths.workspacePath,
117
+ extraContextFiles,
118
+ });
119
+ prepared.push({
120
+ candidate,
121
+ workspacePaths,
122
+ outputPath: buildReductionOutputPath({
123
+ root,
124
+ reductionId,
125
+ reducerAgentId: candidate.id,
126
+ }),
127
+ dataPath: buildReductionDataPath({
128
+ root,
129
+ reductionId,
130
+ reducerAgentId: candidate.id,
131
+ }),
132
+ prompt,
133
+ });
134
+ }
135
+ return { ready: prepared, failures: [] };
136
+ },
137
+ onCandidateRunning: async (prepared) => {
138
+ const startedAt = new Date().toISOString();
139
+ await rewriteReductionRecord({
140
+ root,
141
+ reductionsFilePath,
142
+ sessionId: reductionId,
143
+ mutate: (record) => ({
144
+ ...mutateReducerRecord(record, {
145
+ reducerAgentId: prepared.candidate.id,
146
+ status: "running",
147
+ startedAt,
148
+ error: null,
149
+ }),
150
+ status: record.status === "queued" ? "running" : record.status,
151
+ ...buildLifecycleStartFields({
152
+ existingStartedAt: record.startedAt,
153
+ timestamp: startedAt,
154
+ }),
155
+ }),
156
+ });
157
+ emitStageProgressEvent(renderer, {
158
+ type: "stage.status",
159
+ stage: "reduce",
160
+ status: "running",
161
+ });
162
+ emitStageProgressEvent(renderer, {
163
+ type: "stage.candidate",
164
+ stage: "reduce",
165
+ candidate: {
166
+ reducerAgentId: prepared.candidate.id,
167
+ status: "running",
168
+ startedAt,
169
+ },
170
+ });
171
+ },
172
+ executeCandidate: async (prepared) => {
173
+ const { candidate, workspacePaths, prompt, outputPath, dataPath } = prepared;
174
+ const sandboxPolicy = composeStageSandboxPolicy({
175
+ stageWriteProtectedPaths: [],
176
+ stageReadProtectedPaths: [],
177
+ });
178
+ const result = await runSandboxedAgent({
179
+ root,
180
+ sessionId: reductionId,
181
+ sandboxStageId: "reduce",
182
+ agent: candidate,
183
+ prompt,
184
+ environment,
185
+ teardownAuthOnExit: false,
186
+ paths: {
187
+ agentRoot: workspacePaths.agentRoot,
188
+ workspacePath: workspacePaths.workspacePath,
189
+ sandboxHomePath: workspacePaths.sandboxHomePath,
190
+ runtimeManifestPath: workspacePaths.runtimeManifestPath,
191
+ sandboxSettingsPath: workspacePaths.sandboxSettingsPath,
192
+ runtimePath: workspacePaths.runtimePath,
193
+ artifactsPath: workspacePaths.artifactsPath,
194
+ stdoutPath: workspacePaths.stdoutPath,
195
+ stderrPath: workspacePaths.stderrPath,
196
+ },
197
+ captureChat: true,
198
+ extraWriteProtectedPaths: sandboxPolicy.extraWriteProtectedPaths,
199
+ extraReadProtectedPaths: sandboxPolicy.extraReadProtectedPaths,
200
+ });
201
+ const tokenUsageResult = await extractProviderNativeTokenUsageForSession({
202
+ root,
203
+ domain: VORATIQ_REDUCTION_DIR,
204
+ sessionId: reductionId,
205
+ agentId: candidate.id,
206
+ provider: candidate.provider,
207
+ modelId: candidate.model,
208
+ chatCaptured: result.chat?.captured === true,
209
+ format: result.chat?.format,
210
+ artifactPath: result.chat?.artifactPath,
211
+ });
212
+ tokenUsageResultByReducerAgentId.set(candidate.id, tokenUsageResult);
213
+ const tokenUsage = resolveTokenUsage(tokenUsageResult);
214
+ if (result.exitCode !== 0 || result.errorMessage) {
215
+ const detectedDetail = result.watchdog?.trigger && result.errorMessage
216
+ ? result.errorMessage
217
+ : await detectAgentProcessFailureDetail({
218
+ provider: candidate.provider,
219
+ stdoutPath: workspacePaths.stdoutPath,
220
+ stderrPath: workspacePaths.stderrPath,
221
+ });
222
+ const detail = detectedDetail ??
223
+ result.errorMessage ??
224
+ `Agent exited with code ${result.exitCode ?? "unknown"}`;
225
+ throw new Error(detail);
226
+ }
227
+ await assertReductionOutputExists(root, workspacePaths);
228
+ await promoteWorkspaceFile({
229
+ workspacePath: workspacePaths.workspacePath,
230
+ artifactsPath: workspacePaths.artifactsPath,
231
+ stagedRelativePath: REDUCTION_FILENAME,
232
+ artifactRelativePath: REDUCTION_FILENAME,
233
+ deleteStaged: true,
234
+ });
235
+ await promoteWorkspaceFile({
236
+ workspacePath: workspacePaths.workspacePath,
237
+ artifactsPath: workspacePaths.artifactsPath,
238
+ stagedRelativePath: REDUCTION_DATA_FILENAME,
239
+ artifactRelativePath: REDUCTION_DATA_FILENAME,
240
+ deleteStaged: true,
241
+ });
242
+ return {
243
+ agentId: candidate.id,
244
+ outputPath,
245
+ dataPath,
246
+ status: "succeeded",
247
+ tokenUsage,
248
+ tokenUsageResult,
249
+ };
250
+ },
251
+ onCandidateCompleted: async (prepared, result) => {
252
+ const completedAt = new Date().toISOString();
253
+ await rewriteReductionRecord({
254
+ root,
255
+ reductionsFilePath,
256
+ sessionId: reductionId,
257
+ mutate: (record) => mutateReducerRecord(record, {
258
+ reducerAgentId: prepared.candidate.id,
259
+ status: "succeeded",
260
+ completedAt,
261
+ error: null,
262
+ tokenUsage: result.tokenUsage,
263
+ }),
264
+ });
265
+ emitStageProgressEvent(renderer, {
266
+ type: "stage.candidate",
267
+ stage: "reduce",
268
+ candidate: {
269
+ reducerAgentId: prepared.candidate.id,
270
+ status: "succeeded",
271
+ completedAt,
272
+ tokenUsage: result.tokenUsage,
273
+ tokenUsageResult: result.tokenUsageResult,
274
+ },
275
+ });
276
+ },
277
+ captureExecutionFailure: async ({ prepared, error }) => {
278
+ failure = failure ?? error;
279
+ const detail = toErrorMessage(error);
280
+ const completedAt = new Date().toISOString();
281
+ const tokenUsageResult = tokenUsageResultByReducerAgentId.get(prepared.candidate.id) ??
282
+ buildUnavailableTokenUsageResult({
283
+ provider: prepared.candidate.provider,
284
+ modelId: prepared.candidate.model,
285
+ });
286
+ const tokenUsage = resolveTokenUsage(tokenUsageResult);
287
+ try {
288
+ await rewriteReductionRecord({
289
+ root,
290
+ reductionsFilePath,
291
+ sessionId: reductionId,
292
+ mutate: (record) => mutateReducerRecord(record, {
293
+ reducerAgentId: prepared.candidate.id,
294
+ status: "failed",
295
+ completedAt,
296
+ error: detail,
297
+ tokenUsage,
298
+ }),
299
+ });
300
+ }
301
+ catch {
302
+ // Preserve the execution error.
303
+ }
304
+ emitStageProgressEvent(renderer, {
305
+ type: "stage.candidate",
306
+ stage: "reduce",
307
+ candidate: {
308
+ reducerAgentId: prepared.candidate.id,
309
+ status: "failed",
310
+ completedAt,
311
+ tokenUsage,
312
+ tokenUsageResult,
313
+ },
314
+ });
315
+ return {
316
+ agentId: prepared.candidate.id,
317
+ outputPath: prepared.outputPath,
318
+ dataPath: prepared.dataPath,
319
+ status: "failed",
320
+ tokenUsage,
321
+ tokenUsageResult,
322
+ error: detail,
323
+ };
324
+ },
325
+ finalizeCompetition: async () => {
326
+ const failed = failure !== undefined;
327
+ const completedAt = new Date().toISOString();
328
+ await rewriteReductionRecord({
329
+ root,
330
+ reductionsFilePath,
331
+ sessionId: reductionId,
332
+ mutate: (record) => {
333
+ const recordComplete = buildRecordLifecycleCompleteFields({
334
+ existing: record,
335
+ startedAt: record.startedAt ?? completedAt,
336
+ completedAt,
337
+ });
338
+ const status = failed ? "failed" : "succeeded";
339
+ return {
340
+ ...record,
341
+ status,
342
+ ...recordComplete,
343
+ error: failed ? toErrorMessage(failure) : null,
344
+ reducers: record.reducers.map((reducer) => {
345
+ if (reducer.status !== "running" && reducer.status !== "queued") {
346
+ return reducer;
347
+ }
348
+ return {
349
+ ...reducer,
350
+ status,
351
+ ...buildOperationLifecycleCompleteFields({
352
+ existing: reducer,
353
+ startedAt: reducer.startedAt ?? recordComplete.completedAt,
354
+ completedAt: recordComplete.completedAt,
355
+ }),
356
+ error: failed ? toErrorMessage(failure) : null,
357
+ };
358
+ }),
359
+ };
360
+ },
361
+ forceFlush: true,
362
+ }).catch(() => { });
363
+ const finalizedRecord = await readReductionRecords({
364
+ root,
365
+ reductionsFilePath,
366
+ limit: 1,
367
+ predicate: (record) => record.sessionId === reductionId,
368
+ })
369
+ .then((records) => records[0])
370
+ .catch(() => undefined);
371
+ if (finalizedRecord) {
372
+ for (const reducer of finalizedRecord.reducers) {
373
+ const tokenUsageIdentity = tokenUsageIdentityByReducerAgentId.get(reducer.agentId);
374
+ emitStageProgressEvent(renderer, {
375
+ type: "stage.candidate",
376
+ stage: "reduce",
377
+ candidate: {
378
+ reducerAgentId: reducer.agentId,
379
+ status: reducer.status,
380
+ startedAt: reducer.startedAt,
381
+ completedAt: reducer.completedAt,
382
+ tokenUsage: reducer.tokenUsage,
383
+ tokenUsageResult: tokenUsageResultByReducerAgentId.get(reducer.agentId) ??
384
+ reconstructTokenUsageResult({
385
+ tokenUsage: reducer.tokenUsage,
386
+ provider: tokenUsageIdentity?.provider,
387
+ modelId: tokenUsageIdentity?.modelId,
388
+ }),
389
+ },
390
+ });
391
+ }
392
+ emitStageProgressEvent(renderer, {
393
+ type: "stage.status",
394
+ stage: "reduce",
395
+ status: finalizedRecord.status,
396
+ });
397
+ }
398
+ else {
399
+ emitStageProgressEvent(renderer, {
400
+ type: "stage.status",
401
+ stage: "reduce",
402
+ status: failed ? "failed" : "succeeded",
403
+ });
404
+ }
405
+ await runTeardown(teardown);
406
+ },
407
+ sortResults: (left, right) => {
408
+ if (left.status !== right.status) {
409
+ return left.status === "succeeded" ? -1 : 1;
410
+ }
411
+ return left.agentId.localeCompare(right.agentId);
412
+ },
413
+ };
414
+ }
415
+ function registerScratchWorkspaceTeardown(teardown, workspacePaths, agentId) {
416
+ teardown.addPath(workspacePaths.workspacePath, `${agentId} workspace`);
417
+ teardown.addPath(workspacePaths.contextPath, `${agentId} context`);
418
+ teardown.addPath(workspacePaths.runtimePath, `${agentId} runtime`);
419
+ teardown.addPath(workspacePaths.sandboxPath, `${agentId} sandbox`);
420
+ }
421
+ async function rewriteOrAppendReductionRecord(options) {
422
+ const { root, reductionsFilePath, record } = options;
423
+ const existing = await readReductionRecords({
424
+ root,
425
+ reductionsFilePath,
426
+ limit: 1,
427
+ predicate: (entry) => entry.sessionId === record.sessionId,
428
+ });
429
+ if (existing.length > 0) {
430
+ await rewriteReductionRecord({
431
+ root,
432
+ reductionsFilePath,
433
+ sessionId: record.sessionId,
434
+ mutate: () => record,
435
+ });
436
+ return;
437
+ }
438
+ const { appendReductionRecord } = await import("../persistence/adapter.js");
439
+ await appendReductionRecord({ root, reductionsFilePath, record });
440
+ }
441
+ async function prepareReductionTargetContext(options) {
442
+ const { target } = options;
443
+ switch (target.type) {
444
+ case "spec":
445
+ return await prepareSpecTargetContext(options);
446
+ case "run":
447
+ return await prepareRunTargetContext(options);
448
+ case "reduce":
449
+ return await prepareReductionTargetContextInternal(options);
450
+ case "verify":
451
+ return await prepareVerificationTargetContext(options);
452
+ case "message":
453
+ return await prepareMessageTargetContext(options);
454
+ }
455
+ }
456
+ async function prepareSpecTargetContext(options) {
457
+ const { root, specsFilePath, target } = options;
458
+ const [record] = await readSpecRecords({
459
+ root,
460
+ specsFilePath,
461
+ limit: 1,
462
+ predicate: (entry) => entry.sessionId === target.id,
463
+ });
464
+ if (!record) {
465
+ throw new Error(`Spec session \`${target.id}\` not found.`);
466
+ }
467
+ const generatedAgents = record.agents.filter((agent) => agent.status === "succeeded" &&
468
+ typeof agent.outputPath === "string" &&
469
+ typeof agent.dataPath === "string");
470
+ if (generatedAgents.length === 0) {
471
+ throw new Error(`Spec session \`${target.id}\` has no generated artifacts.`);
472
+ }
473
+ const stagedFiles = [];
474
+ const artifacts = [];
475
+ for (const agent of generatedAgents) {
476
+ const markdownRelative = `inputs/spec/${agent.agentId}/spec.md`;
477
+ const dataRelative = `inputs/spec/${agent.agentId}/spec.json`;
478
+ stagedFiles.push({
479
+ sourceAbsolutePath: resolvePath(root, agent.outputPath),
480
+ stagedRelativePath: markdownRelative,
481
+ });
482
+ stagedFiles.push({
483
+ sourceAbsolutePath: resolvePath(root, agent.dataPath),
484
+ stagedRelativePath: dataRelative,
485
+ });
486
+ artifacts.push({
487
+ artifactId: `spec:${agent.agentId}`,
488
+ kind: "spec",
489
+ agentId: agent.agentId,
490
+ markdownPath: markdownRelative,
491
+ dataPath: dataRelative,
492
+ ...(agent.tokenUsage ? { tokenUsage: agent.tokenUsage } : {}),
493
+ });
494
+ }
495
+ return {
496
+ target,
497
+ displayPath: `.voratiq/spec/sessions/${record.sessionId}`,
498
+ stagedFiles,
499
+ manifest: {
500
+ target: {
501
+ operator: "spec",
502
+ id: record.sessionId,
503
+ path: `.voratiq/spec/sessions/${record.sessionId}`,
504
+ },
505
+ artifacts,
506
+ },
507
+ };
508
+ }
509
+ async function prepareRunTargetContext(options) {
510
+ const { root, runsFilePath, target } = options;
511
+ const { records } = await fetchRunsSafely({
512
+ root,
513
+ runsFilePath,
514
+ runId: target.id,
515
+ filters: { includeDeleted: true },
516
+ }).catch((error) => {
517
+ if (error instanceof RunRecordNotFoundError) {
518
+ throw new RunNotFoundCliError(target.id);
519
+ }
520
+ throw error;
521
+ });
522
+ const record = records[0];
523
+ if (!record) {
524
+ throw new RunNotFoundCliError(target.id);
525
+ }
526
+ const run = await buildRunRecordView(record, { workspaceRoot: root });
527
+ const stagedFiles = [
528
+ {
529
+ sourceAbsolutePath: resolvePath(root, run.spec.path),
530
+ stagedRelativePath: "inputs/spec.md",
531
+ },
532
+ ];
533
+ const artifacts = [
534
+ {
535
+ artifactId: "run-spec",
536
+ kind: "spec",
537
+ path: "inputs/spec.md",
538
+ },
539
+ ];
540
+ for (const agent of run.agents) {
541
+ const entry = {
542
+ artifactId: `run-agent:${agent.agentId}`,
543
+ kind: "run-agent",
544
+ agentId: agent.agentId,
545
+ status: agent.status,
546
+ model: agent.model,
547
+ ...(agent.tokenUsage ? { tokenUsage: agent.tokenUsage } : {}),
548
+ };
549
+ if (agent.assets.diffPath) {
550
+ stagedFiles.push({
551
+ sourceAbsolutePath: resolvePath(root, agent.assets.diffPath),
552
+ stagedRelativePath: `inputs/agents/${agent.agentId}/diff.patch`,
553
+ });
554
+ entry.diffPath = `inputs/agents/${agent.agentId}/diff.patch`;
555
+ entry.diffArtifactId = `run-agent:${agent.agentId}:diff`;
556
+ }
557
+ if (agent.assets.summaryPath) {
558
+ stagedFiles.push({
559
+ sourceAbsolutePath: resolvePath(root, agent.assets.summaryPath),
560
+ stagedRelativePath: `inputs/agents/${agent.agentId}/summary.txt`,
561
+ });
562
+ entry.summaryPath = `inputs/agents/${agent.agentId}/summary.txt`;
563
+ entry.summaryArtifactId = `run-agent:${agent.agentId}:summary`;
564
+ }
565
+ artifacts.push(entry);
566
+ }
567
+ return {
568
+ target,
569
+ displayPath: normalizePathForDisplay(`.voratiq/run/sessions/${run.runId}`),
570
+ stagedFiles,
571
+ manifest: {
572
+ target: {
573
+ operator: "run",
574
+ id: run.runId,
575
+ path: `.voratiq/run/sessions/${run.runId}`,
576
+ specPath: "inputs/spec.md",
577
+ status: run.status,
578
+ },
579
+ artifacts,
580
+ },
581
+ };
582
+ }
583
+ async function prepareVerificationTargetContext(options) {
584
+ const { root, verificationsFilePath, target } = options;
585
+ const [record] = await readVerificationRecords({
586
+ root,
587
+ verificationsFilePath,
588
+ limit: 1,
589
+ predicate: (entry) => entry.sessionId === target.id,
590
+ });
591
+ if (!record) {
592
+ throw new Error(`Verification session \`${target.id}\` not found.`);
593
+ }
594
+ const stagedFiles = [];
595
+ const artifacts = [];
596
+ for (const method of record.methods) {
597
+ if (!method.artifactPath) {
598
+ continue;
599
+ }
600
+ const methodActor = method.verifierId ?? method.slug ?? "unknown";
601
+ const templateSegment = method.template ?? "programmatic";
602
+ const stagedRelativePath = `inputs/methods/${method.method}/${method.scope.kind}/${methodActor}/${templateSegment}/result.json`;
603
+ stagedFiles.push({
604
+ sourceAbsolutePath: resolvePath(root, method.artifactPath),
605
+ stagedRelativePath,
606
+ });
607
+ artifacts.push({
608
+ artifactId: `verification-method:${method.method}:${method.scope.kind}:${method.verifierId ?? method.slug ?? "unknown"}`,
609
+ kind: "verification-method",
610
+ method: method.method,
611
+ scope: method.scope,
612
+ status: method.status,
613
+ ...(method.verifierId ? { verifierId: method.verifierId } : {}),
614
+ ...(method.template ? { template: method.template } : {}),
615
+ artifactPath: stagedRelativePath,
616
+ ...(method.tokenUsage ? { tokenUsage: method.tokenUsage } : {}),
617
+ ...(method.error ? { error: method.error } : {}),
618
+ });
619
+ }
620
+ return {
621
+ target,
622
+ displayPath: `.voratiq/verify/sessions/${record.sessionId}`,
623
+ stagedFiles,
624
+ manifest: {
625
+ target: {
626
+ operator: "verify",
627
+ id: record.sessionId,
628
+ path: `.voratiq/verify/sessions/${record.sessionId}`,
629
+ target: record.target,
630
+ blinded: record.blinded,
631
+ status: record.status,
632
+ },
633
+ artifacts,
634
+ },
635
+ };
636
+ }
637
+ async function prepareReductionTargetContextInternal(options) {
638
+ const { root, reductionsFilePath, target } = options;
639
+ const [record] = await readReductionRecords({
640
+ root,
641
+ reductionsFilePath,
642
+ limit: 1,
643
+ predicate: (entry) => entry.sessionId === target.id,
644
+ });
645
+ if (!record) {
646
+ throw new Error(`Reduction session \`${target.id}\` not found.`);
647
+ }
648
+ const stagedFiles = [];
649
+ const artifacts = [];
650
+ for (const reducer of record.reducers) {
651
+ const reductionRelative = `inputs/reducers/${reducer.agentId}/reduction.md`;
652
+ stagedFiles.push({
653
+ sourceAbsolutePath: resolvePath(root, reducer.outputPath),
654
+ stagedRelativePath: reductionRelative,
655
+ });
656
+ const dataAbsolute = reducer.dataPath
657
+ ? resolvePath(root, reducer.dataPath)
658
+ : resolveStoredReductionDataPath(root, reducer.outputPath);
659
+ const dataRelative = `inputs/reducers/${reducer.agentId}/reduction.json`;
660
+ stagedFiles.push({
661
+ sourceAbsolutePath: dataAbsolute,
662
+ stagedRelativePath: dataRelative,
663
+ });
664
+ artifacts.push({
665
+ artifactId: `reducer:${reducer.agentId}`,
666
+ kind: "reducer",
667
+ agentId: reducer.agentId,
668
+ status: reducer.status,
669
+ reductionPath: reductionRelative,
670
+ reductionDataPath: dataRelative,
671
+ ...(reducer.tokenUsage ? { tokenUsage: reducer.tokenUsage } : {}),
672
+ });
673
+ }
674
+ return {
675
+ target,
676
+ displayPath: `.voratiq/reduce/sessions/${record.sessionId}`,
677
+ stagedFiles,
678
+ manifest: {
679
+ target: {
680
+ operator: "reduce",
681
+ id: record.sessionId,
682
+ path: `.voratiq/reduce/sessions/${record.sessionId}`,
683
+ sourceTarget: record.target,
684
+ },
685
+ artifacts,
686
+ },
687
+ };
688
+ }
689
+ async function prepareMessageTargetContext(options) {
690
+ const { root, messagesFilePath, target } = options;
691
+ const [record] = await readMessageRecords({
692
+ root,
693
+ messagesFilePath,
694
+ limit: 1,
695
+ predicate: (entry) => entry.sessionId === target.id,
696
+ });
697
+ if (!record) {
698
+ throw new Error(`Message session \`${target.id}\` not found.`);
699
+ }
700
+ const succeededRecipients = record.recipients.filter((recipient) => recipient.status === "succeeded" &&
701
+ typeof recipient.outputPath === "string");
702
+ if (succeededRecipients.length === 0) {
703
+ throw new Error(`Message session \`${target.id}\` has no generated artifacts.`);
704
+ }
705
+ const stagedFiles = [];
706
+ const artifacts = [];
707
+ for (const recipient of succeededRecipients) {
708
+ const outputRelative = `inputs/recipients/${recipient.agentId}/${MESSAGE_RESPONSE_FILENAME}`;
709
+ stagedFiles.push({
710
+ sourceAbsolutePath: resolvePath(root, recipient.outputPath),
711
+ stagedRelativePath: outputRelative,
712
+ });
713
+ artifacts.push({
714
+ artifactId: `message:${recipient.agentId}`,
715
+ kind: "message-output",
716
+ agentId: recipient.agentId,
717
+ status: recipient.status,
718
+ outputPath: outputRelative,
719
+ ...(recipient.tokenUsage ? { tokenUsage: recipient.tokenUsage } : {}),
720
+ });
721
+ }
722
+ return {
723
+ target,
724
+ displayPath: `.voratiq/message/sessions/${record.sessionId}`,
725
+ stagedFiles,
726
+ manifest: {
727
+ target: {
728
+ operator: "message",
729
+ id: record.sessionId,
730
+ path: `.voratiq/message/sessions/${record.sessionId}`,
731
+ status: record.status,
732
+ prompt: record.prompt,
733
+ },
734
+ artifacts,
735
+ },
736
+ };
737
+ }
738
+ async function stageReductionTargetContext(options) {
739
+ const { workspacePath, targetContext } = options;
740
+ for (const stagedFile of targetContext.stagedFiles) {
741
+ const destination = join(workspacePath, stagedFile.stagedRelativePath);
742
+ await mkdir(dirname(destination), { recursive: true });
743
+ await copyFile(stagedFile.sourceAbsolutePath, destination);
744
+ }
745
+ const artifactInfoAbsolute = join(workspacePath, REDUCTION_ARTIFACT_INFO_FILENAME);
746
+ await mkdir(dirname(artifactInfoAbsolute), { recursive: true });
747
+ await writeJsonFile(artifactInfoAbsolute, targetContext.manifest);
748
+ }
749
+ async function writeJsonFile(path, value) {
750
+ await mkdir(dirname(path), { recursive: true });
751
+ await import("node:fs/promises").then(({ writeFile }) => writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8"));
752
+ }
753
+ function buildReductionOutputPath(options) {
754
+ const { root, reductionId, reducerAgentId } = options;
755
+ return normalizePathForDisplay(relativeToRoot(root, resolvePath(root, `.voratiq/reduce/sessions/${reductionId}/${reducerAgentId}/artifacts/${REDUCTION_FILENAME}`)));
756
+ }
757
+ function buildReductionDataPath(options) {
758
+ const { root, reductionId, reducerAgentId } = options;
759
+ return normalizePathForDisplay(relativeToRoot(root, resolvePath(root, `.voratiq/reduce/sessions/${reductionId}/${reducerAgentId}/artifacts/${REDUCTION_DATA_FILENAME}`)));
760
+ }
761
+ function mutateReducerRecord(record, options) {
762
+ const { reducerAgentId, status, startedAt, completedAt, error, tokenUsage } = options;
763
+ let found = false;
764
+ const reducers = record.reducers.map((reducer) => {
765
+ if (reducer.agentId !== reducerAgentId) {
766
+ return reducer;
767
+ }
768
+ found = true;
769
+ const lifecycleFields = completedAt
770
+ ? buildOperationLifecycleCompleteFields({
771
+ existing: reducer,
772
+ startedAt: reducer.startedAt ?? completedAt,
773
+ completedAt,
774
+ })
775
+ : startedAt
776
+ ? buildLifecycleStartFields({
777
+ existingStartedAt: reducer.startedAt,
778
+ timestamp: startedAt,
779
+ })
780
+ : {};
781
+ return {
782
+ ...reducer,
783
+ status,
784
+ ...lifecycleFields,
785
+ error,
786
+ ...(tokenUsage ? { tokenUsage } : {}),
787
+ };
788
+ });
789
+ if (!found) {
790
+ throw new Error(`Reduction record ${record.sessionId} is missing reducer ${reducerAgentId}.`);
791
+ }
792
+ return {
793
+ ...record,
794
+ reducers,
795
+ };
796
+ }
797
+ async function assertReductionOutputExists(root, workspacePaths) {
798
+ const reductionStagedPath = join(workspacePaths.workspacePath, REDUCTION_FILENAME);
799
+ const reductionDataStagedPath = join(workspacePaths.workspacePath, REDUCTION_DATA_FILENAME);
800
+ let reductionContent;
801
+ try {
802
+ reductionContent = await readFile(reductionStagedPath, "utf8");
803
+ }
804
+ catch (error) {
805
+ throw new Error(`Required reducer artifact is missing: \`${REDUCTION_FILENAME}\`. ${toErrorMessage(error)}`);
806
+ }
807
+ let reductionDataContent;
808
+ try {
809
+ reductionDataContent = await readFile(reductionDataStagedPath, "utf8");
810
+ }
811
+ catch (error) {
812
+ throw new Error(`Required reducer artifact is missing: \`${REDUCTION_DATA_FILENAME}\`. ${toErrorMessage(error)}`);
813
+ }
814
+ validateReductionOutputContract({
815
+ reductionMarkdown: reductionContent,
816
+ });
817
+ parseReductionArtifact(reductionDataContent);
818
+ const stderrDisplay = normalizePathForDisplay(relativeToRoot(root, workspacePaths.stderrPath));
819
+ if (reductionContent.trim().length === 0 ||
820
+ reductionDataContent.trim().length === 0) {
821
+ throw new Error(`Reducer output is empty. Inspect \`${stderrDisplay}\` to diagnose the reducer failure.`);
822
+ }
823
+ }
824
+ function resolveStoredReductionDataPath(root, outputPath) {
825
+ return resolvePath(root, dirname(outputPath), REDUCTION_DATA_FILENAME);
826
+ }