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.
- package/README.md +41 -29
- package/dist/agents/launch/chat.d.ts +23 -0
- package/dist/agents/launch/chat.js +44 -0
- package/dist/agents/launch/environment.d.ts +8 -0
- package/dist/{commands/run/agents/workspace-prep.js → agents/launch/environment.js} +5 -27
- package/dist/agents/launch/prompt.d.ts +6 -0
- package/dist/agents/launch/prompt.js +12 -0
- package/dist/agents/launch/provider-state.d.ts +39 -0
- package/dist/agents/launch/provider-state.js +103 -0
- package/dist/agents/runtime/auth.d.ts +27 -0
- package/dist/agents/runtime/auth.js +72 -0
- package/dist/agents/runtime/chat.d.ts +5 -0
- package/dist/agents/runtime/chat.js +7 -0
- package/dist/agents/runtime/errors.d.ts +27 -0
- package/dist/agents/runtime/errors.js +51 -0
- package/dist/{commands/run/agents → agents/runtime}/failures.d.ts +0 -1
- package/dist/agents/runtime/failures.js +136 -0
- package/dist/agents/runtime/harness.d.ts +2 -0
- package/dist/agents/runtime/harness.js +119 -0
- package/dist/{commands/run/agents/sandbox-launcher.d.ts → agents/runtime/launcher.d.ts} +18 -6
- package/dist/{commands/run/agents/sandbox-launcher.js → agents/runtime/launcher.js} +17 -39
- package/dist/{commands/run/agents/workspace-prep.d.ts → agents/runtime/manifest.d.ts} +6 -6
- package/dist/agents/runtime/manifest.js +34 -0
- package/dist/agents/runtime/policy.d.ts +32 -0
- package/dist/agents/runtime/policy.js +240 -0
- package/dist/agents/runtime/registry.d.ts +4 -0
- package/dist/agents/runtime/registry.js +54 -0
- package/dist/{commands/run → agents/runtime}/sandbox.d.ts +8 -2
- package/dist/{commands/run → agents/runtime}/sandbox.js +28 -67
- package/dist/agents/runtime/shim/run-agent-shim.d.ts +1 -0
- package/dist/agents/runtime/shim/run-agent-shim.js +276 -0
- package/dist/agents/runtime/types.d.ts +91 -0
- package/dist/{commands/run/agents → agents/runtime}/watchdog.d.ts +4 -3
- package/dist/{commands/run/agents → agents/runtime}/watchdog.js +155 -26
- package/dist/auth/providers/codex.js +7 -2
- package/dist/auth/providers/gemini.js +14 -6
- package/dist/auth/providers/types.d.ts +1 -0
- package/dist/auth/providers/utils.d.ts +0 -1
- package/dist/auth/providers/utils.js +1 -49
- package/dist/bin.js +369 -71
- package/dist/cli/apply.d.ts +4 -0
- package/dist/cli/apply.js +28 -9
- package/dist/cli/auto.d.ts +32 -0
- package/dist/cli/auto.js +232 -0
- package/dist/cli/contract.d.ts +328 -0
- package/dist/cli/contract.js +480 -0
- package/dist/cli/errors.d.ts +3 -0
- package/dist/cli/errors.js +21 -3
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.js +34 -6
- package/dist/cli/list.d.ts +6 -4
- package/dist/cli/list.js +39 -16
- package/dist/cli/mcp.d.ts +2 -0
- package/dist/cli/mcp.js +16 -0
- package/dist/cli/message.d.ts +28 -0
- package/dist/cli/message.js +147 -0
- package/dist/cli/operator-envelope.d.ts +180 -0
- package/dist/cli/operator-envelope.js +425 -0
- package/dist/cli/output.d.ts +15 -1
- package/dist/cli/output.js +153 -5
- package/dist/cli/prune.d.ts +7 -3
- package/dist/cli/prune.js +57 -12
- package/dist/cli/reduce.d.ts +29 -0
- package/dist/cli/reduce.js +211 -0
- package/dist/cli/root-launcher.d.ts +4 -0
- package/dist/cli/root-launcher.js +15 -0
- package/dist/cli/run.d.ts +27 -1
- package/dist/cli/run.js +108 -16
- package/dist/cli/spec.d.ts +31 -0
- package/dist/cli/spec.js +180 -0
- package/dist/cli/verify.d.ts +35 -0
- package/dist/cli/verify.js +297 -0
- package/dist/commands/apply/command.d.ts +2 -0
- package/dist/commands/apply/command.js +145 -6
- package/dist/commands/apply/errors.d.ts +43 -4
- package/dist/commands/apply/errors.js +100 -22
- package/dist/commands/apply/types.d.ts +2 -1
- package/dist/commands/auto/command.d.ts +145 -0
- package/dist/commands/auto/command.js +433 -0
- package/dist/commands/auto/errors.d.ts +19 -0
- package/dist/commands/auto/errors.js +19 -0
- package/dist/commands/auto/validation.d.ts +14 -0
- package/dist/commands/auto/validation.js +90 -0
- package/dist/commands/fetch.d.ts +2 -2
- package/dist/commands/fetch.js +4 -4
- package/dist/commands/init/agents.d.ts +2 -1
- package/dist/commands/init/agents.js +66 -63
- package/dist/commands/init/command.js +300 -16
- package/dist/commands/init/types.d.ts +18 -7
- package/dist/commands/interactive/lifecycle.d.ts +15 -0
- package/dist/commands/interactive/lifecycle.js +141 -0
- package/dist/commands/list/command.d.ts +10 -3
- package/dist/commands/list/command.js +597 -40
- package/dist/commands/message/command.d.ts +23 -0
- package/dist/commands/message/command.js +215 -0
- package/dist/commands/message/errors.d.ts +9 -0
- package/dist/commands/message/errors.js +20 -0
- package/dist/commands/message/lifecycle.d.ts +14 -0
- package/dist/commands/message/lifecycle.js +128 -0
- package/dist/commands/prune/command.d.ts +2 -1
- package/dist/commands/prune/command.js +61 -10
- package/dist/commands/prune/errors.d.ts +1 -1
- package/dist/commands/prune/errors.js +5 -5
- package/dist/commands/prune/types.d.ts +21 -0
- package/dist/commands/reduce/command.d.ts +26 -0
- package/dist/commands/reduce/command.js +145 -0
- package/dist/commands/reduce/errors.d.ts +17 -0
- package/dist/commands/reduce/errors.js +32 -0
- package/dist/commands/reduce/targets.d.ts +11 -0
- package/dist/commands/reduce/targets.js +271 -0
- package/dist/commands/root-launcher/command.d.ts +31 -0
- package/dist/commands/root-launcher/command.js +233 -0
- package/dist/commands/run/command.d.ts +6 -1
- package/dist/commands/run/command.js +70 -40
- package/dist/commands/run/lifecycle.d.ts +7 -5
- package/dist/commands/run/lifecycle.js +45 -23
- package/dist/commands/run/record-init.d.ts +4 -1
- package/dist/commands/run/record-init.js +5 -2
- package/dist/commands/run/shim/run-agent-shim.d.ts +2 -1
- package/dist/commands/run/shim/run-agent-shim.js +4 -219
- package/dist/commands/run/validation.d.ts +2 -3
- package/dist/commands/run/validation.js +54 -25
- package/dist/commands/shared/max-parallel.d.ts +5 -0
- package/dist/commands/shared/max-parallel.js +15 -0
- package/dist/commands/shared/preview.d.ts +10 -0
- package/dist/commands/shared/preview.js +60 -0
- package/dist/commands/shared/resolve-reduction-competitors.d.ts +15 -0
- package/dist/commands/shared/resolve-reduction-competitors.js +13 -0
- package/dist/commands/shared/resolve-stage-competitors.d.ts +19 -0
- package/dist/commands/shared/resolve-stage-competitors.js +171 -0
- package/dist/commands/shared/session-id.d.ts +1 -0
- package/dist/commands/shared/session-id.js +1 -0
- package/dist/commands/spec/command.d.ts +22 -0
- package/dist/commands/spec/command.js +330 -0
- package/dist/commands/spec/errors.d.ts +11 -0
- package/dist/commands/spec/errors.js +23 -0
- package/dist/commands/verify/agents.d.ts +8 -0
- package/dist/commands/verify/agents.js +29 -0
- package/dist/commands/verify/command.d.ts +23 -0
- package/dist/commands/verify/command.js +168 -0
- package/dist/commands/verify/lifecycle.d.ts +14 -0
- package/dist/commands/verify/lifecycle.js +229 -0
- package/dist/commands/verify/max-parallel.d.ts +7 -0
- package/dist/commands/verify/max-parallel.js +15 -0
- package/dist/commands/verify/targets.d.ts +18 -0
- package/dist/commands/verify/targets.js +420 -0
- package/dist/competition/command-adapter.d.ts +35 -0
- package/dist/competition/command-adapter.js +20 -0
- package/dist/competition/core.d.ts +41 -0
- package/dist/competition/core.js +181 -0
- package/dist/competition/shared/extra-context.d.ts +14 -0
- package/dist/competition/shared/extra-context.js +100 -0
- package/dist/competition/shared/preflight.d.ts +11 -0
- package/dist/competition/shared/preflight.js +39 -0
- package/dist/competition/shared/prompt-helpers.d.ts +16 -0
- package/dist/competition/shared/prompt-helpers.js +27 -0
- package/dist/competition/shared/prune.d.ts +1 -0
- package/dist/competition/shared/prune.js +4 -0
- package/dist/competition/shared/sandbox-policy.d.ts +9 -0
- package/dist/competition/shared/sandbox-policy.js +7 -0
- package/dist/competition/shared/teardown.d.ts +36 -0
- package/dist/competition/shared/teardown.js +101 -0
- package/dist/configs/agents/defaults.d.ts +31 -2
- package/dist/configs/agents/defaults.js +346 -30
- package/dist/configs/agents/errors.js +14 -11
- package/dist/configs/agents/loader.d.ts +11 -1
- package/dist/configs/agents/loader.js +71 -4
- package/dist/configs/agents/types.js +2 -2
- package/dist/configs/environment/detect.js +9 -4
- package/dist/configs/environment/errors.js +4 -4
- package/dist/configs/environment/loader.d.ts +1 -1
- package/dist/configs/environment/loader.js +3 -3
- package/dist/configs/orchestration/bootstrap.d.ts +16 -0
- package/dist/configs/orchestration/bootstrap.js +122 -0
- package/dist/configs/orchestration/errors.d.ts +15 -0
- package/dist/configs/orchestration/errors.js +28 -0
- package/dist/configs/orchestration/loader.d.ts +9 -0
- package/dist/configs/orchestration/loader.js +148 -0
- package/dist/configs/orchestration/types.d.ts +102 -0
- package/dist/configs/orchestration/types.js +65 -0
- package/dist/configs/sandbox/defaults.js +14 -4
- package/dist/configs/sandbox/errors.d.ts +1 -1
- package/dist/configs/sandbox/errors.js +1 -1
- package/dist/configs/sandbox/loader.js +6 -4
- package/dist/configs/sandbox/schemas.js +4 -2
- package/dist/configs/settings/loader.d.ts +7 -0
- package/dist/configs/settings/loader.js +81 -0
- package/dist/configs/settings/types.d.ts +47 -0
- package/dist/configs/settings/types.js +23 -0
- package/dist/configs/verification/errors.d.ts +11 -0
- package/dist/configs/verification/errors.js +21 -0
- package/dist/configs/verification/loader.d.ts +8 -0
- package/dist/configs/verification/loader.js +43 -0
- package/dist/configs/verification/methods.d.ts +35 -0
- package/dist/configs/verification/methods.js +41 -0
- package/dist/configs/verification/programmatic-defaults.d.ts +10 -0
- package/dist/configs/verification/programmatic-defaults.js +42 -0
- package/dist/configs/verification/programmatic-detect.d.ts +10 -0
- package/dist/configs/{evals/detect.js → verification/programmatic-detect.js} +22 -33
- package/dist/configs/verification/types.d.ts +49 -0
- package/dist/configs/verification/types.js +45 -0
- package/dist/contracts/list.d.ts +207 -0
- package/dist/contracts/list.js +154 -0
- package/dist/domain/interactive/model/types.d.ts +104 -0
- package/dist/domain/interactive/model/types.js +83 -0
- package/dist/domain/interactive/persistence/adapter.d.ts +39 -0
- package/dist/domain/interactive/persistence/adapter.js +144 -0
- package/dist/domain/interactive/prompt.d.ts +3 -0
- package/dist/domain/interactive/prompt.js +7 -0
- package/dist/domain/message/competition/adapter.d.ts +36 -0
- package/dist/domain/message/competition/adapter.js +197 -0
- package/dist/domain/message/competition/prompt.d.ts +8 -0
- package/dist/domain/message/competition/prompt.js +29 -0
- package/dist/domain/message/model/mutators.d.ts +17 -0
- package/dist/domain/message/model/mutators.js +107 -0
- package/dist/domain/message/model/types.d.ts +100 -0
- package/dist/domain/message/model/types.js +87 -0
- package/dist/domain/message/persistence/adapter.d.ts +43 -0
- package/dist/domain/message/persistence/adapter.js +124 -0
- package/dist/domain/reduce/competition/adapter.d.ts +42 -0
- package/dist/domain/reduce/competition/adapter.js +826 -0
- package/dist/domain/reduce/competition/output-validation.d.ts +4 -0
- package/dist/domain/reduce/competition/output-validation.js +18 -0
- package/dist/domain/reduce/competition/prompt.d.ts +10 -0
- package/dist/domain/reduce/competition/prompt.js +96 -0
- package/dist/domain/reduce/competition/reduction.d.ts +9 -0
- package/dist/domain/reduce/competition/reduction.js +32 -0
- package/dist/domain/reduce/model/types.d.ts +122 -0
- package/dist/domain/reduce/model/types.js +84 -0
- package/dist/domain/reduce/persistence/adapter.d.ts +43 -0
- package/dist/domain/reduce/persistence/adapter.js +126 -0
- package/dist/domain/run/competition/adapter.d.ts +30 -0
- package/dist/domain/run/competition/adapter.js +39 -0
- package/dist/domain/run/competition/agent-execution.d.ts +20 -0
- package/dist/domain/run/competition/agent-execution.js +45 -0
- package/dist/domain/run/competition/agent-preparation.d.ts +12 -0
- package/dist/domain/run/competition/agent-preparation.js +24 -0
- package/dist/domain/run/competition/agents/artifacts.d.ts +17 -0
- package/dist/domain/run/competition/agents/artifacts.js +173 -0
- package/dist/{commands/run → domain/run/competition}/agents/lifecycle.d.ts +3 -3
- package/dist/{commands/run → domain/run/competition}/agents/lifecycle.js +84 -64
- package/dist/domain/run/competition/agents/post-processing.d.ts +12 -0
- package/dist/domain/run/competition/agents/post-processing.js +4 -0
- package/dist/domain/run/competition/agents/preparation.js +64 -0
- package/dist/{commands/run → domain/run/competition}/agents/run-context.d.ts +9 -16
- package/dist/{commands/run → domain/run/competition}/agents/run-context.js +22 -70
- package/dist/{commands/run → domain/run/competition}/agents/types.d.ts +10 -13
- package/dist/domain/run/competition/agents/workspace.d.ts +21 -0
- package/dist/domain/run/competition/agents/workspace.js +47 -0
- package/dist/{commands/run → domain/run/competition}/errors.d.ts +8 -1
- package/dist/{commands/run → domain/run/competition}/errors.js +39 -9
- package/dist/{commands/run → domain/run/competition}/phases.d.ts +1 -2
- package/dist/domain/run/competition/phases.js +1 -0
- package/dist/domain/run/competition/prompt.d.ts +7 -0
- package/dist/domain/run/competition/prompt.js +27 -0
- package/dist/{commands/run → domain/run/competition}/reports.d.ts +5 -3
- package/dist/{commands/run → domain/run/competition}/reports.js +7 -19
- package/dist/domain/run/competition/termination-state.d.ts +4 -0
- package/dist/domain/run/competition/termination-state.js +12 -0
- package/dist/{records → domain/run/model}/enhanced.d.ts +6 -7
- package/dist/{records → domain/run/model}/enhanced.js +11 -11
- package/dist/{records → domain/run/model}/errors.d.ts +1 -1
- package/dist/{records → domain/run/model}/errors.js +5 -5
- package/dist/{records → domain/run/model}/mutators.d.ts +4 -3
- package/dist/{records → domain/run/model}/mutators.js +58 -36
- package/dist/domain/run/model/types.d.ts +376 -0
- package/dist/domain/run/model/types.js +192 -0
- package/dist/{records/persistence.d.ts → domain/run/persistence/adapter.d.ts} +9 -3
- package/dist/domain/run/persistence/adapter.js +340 -0
- package/dist/domain/run/persistence/error-mapping.d.ts +2 -0
- package/dist/domain/run/persistence/error-mapping.js +17 -0
- package/dist/domain/shared/lifecycle.d.ts +54 -0
- package/dist/domain/shared/lifecycle.js +165 -0
- package/dist/domain/shared/token-usage.d.ts +21 -0
- package/dist/domain/shared/token-usage.js +38 -0
- package/dist/domain/spec/competition/adapter.d.ts +31 -0
- package/dist/domain/spec/competition/adapter.js +196 -0
- package/dist/domain/spec/competition/prompt.d.ts +11 -0
- package/dist/domain/spec/competition/prompt.js +44 -0
- package/dist/domain/spec/model/output.d.ts +13 -0
- package/dist/domain/spec/model/output.js +36 -0
- package/dist/domain/spec/model/types.d.ts +98 -0
- package/dist/domain/spec/model/types.js +84 -0
- package/dist/domain/spec/persistence/adapter.d.ts +51 -0
- package/dist/domain/spec/persistence/adapter.js +140 -0
- package/dist/domain/verify/blinding/aliases.d.ts +7 -0
- package/dist/domain/verify/blinding/aliases.js +23 -0
- package/dist/domain/verify/competition/adapter.d.ts +54 -0
- package/dist/domain/verify/competition/adapter.js +444 -0
- package/dist/domain/verify/competition/artifacts.d.ts +6 -0
- package/dist/domain/verify/competition/artifacts.js +7 -0
- package/dist/domain/verify/competition/blinding.d.ts +24 -0
- package/dist/domain/verify/competition/blinding.js +109 -0
- package/dist/domain/verify/competition/finalize.d.ts +11 -0
- package/dist/domain/verify/competition/finalize.js +65 -0
- package/dist/domain/verify/competition/programmatic.d.ts +15 -0
- package/dist/domain/verify/competition/programmatic.js +352 -0
- package/dist/domain/verify/competition/prompt.d.ts +19 -0
- package/dist/domain/verify/competition/prompt.js +63 -0
- package/dist/domain/verify/competition/rubric.d.ts +23 -0
- package/dist/domain/verify/competition/rubric.js +77 -0
- package/dist/domain/verify/competition/shared-layout.d.ts +121 -0
- package/dist/domain/verify/competition/shared-layout.js +365 -0
- package/dist/domain/verify/competition/target.d.ts +47 -0
- package/dist/domain/verify/competition/target.js +1 -0
- package/dist/domain/verify/model/mutators.d.ts +16 -0
- package/dist/domain/verify/model/mutators.js +126 -0
- package/dist/domain/verify/model/types.d.ts +408 -0
- package/dist/domain/verify/model/types.js +289 -0
- package/dist/domain/verify/persistence/adapter.d.ts +43 -0
- package/dist/domain/verify/persistence/adapter.js +126 -0
- package/dist/domain/verify/programmatic/runner.d.ts +22 -0
- package/dist/domain/verify/programmatic/runner.js +209 -0
- package/dist/domain/verify/rubric-result.d.ts +28 -0
- package/dist/domain/verify/rubric-result.js +121 -0
- package/dist/extra-context/contract.d.ts +17 -0
- package/dist/extra-context/contract.js +60 -0
- package/dist/interactive/index.d.ts +2 -0
- package/dist/interactive/index.js +1 -0
- package/dist/interactive/providers/launch.d.ts +23 -0
- package/dist/interactive/providers/launch.js +203 -0
- package/dist/interactive/providers/mcp.d.ts +13 -0
- package/dist/interactive/providers/mcp.js +547 -0
- package/dist/interactive/providers/shared.d.ts +2 -0
- package/dist/interactive/providers/shared.js +1 -0
- package/dist/interactive/providers.d.ts +3 -0
- package/dist/interactive/providers.js +3 -0
- package/dist/interactive/records.d.ts +2 -0
- package/dist/interactive/records.js +1 -0
- package/dist/interactive/substrate.d.ts +21 -0
- package/dist/interactive/substrate.js +522 -0
- package/dist/interactive/types.d.ts +101 -0
- package/dist/interactive/types.js +1 -0
- package/dist/mcp/server.d.ts +88 -0
- package/dist/mcp/server.js +790 -0
- package/dist/persistence/error-mapping.d.ts +19 -0
- package/dist/persistence/error-mapping.js +44 -0
- package/dist/persistence/errors.d.ts +26 -0
- package/dist/persistence/errors.js +49 -0
- package/dist/persistence/extra-context.d.ts +9 -0
- package/dist/persistence/extra-context.js +60 -0
- package/dist/{records → persistence}/history-lock.js +2 -2
- package/dist/persistence/record-path-schema.d.ts +3 -0
- package/dist/persistence/record-path-schema.js +16 -0
- package/dist/persistence/session-store.d.ts +92 -0
- package/dist/persistence/session-store.js +412 -0
- package/dist/policy/auto.d.ts +13 -0
- package/dist/policy/auto.js +22 -0
- package/dist/policy/index.d.ts +5 -0
- package/dist/policy/index.js +5 -0
- package/dist/policy/resolution.d.ts +6 -0
- package/dist/policy/resolution.js +23 -0
- package/dist/policy/result.d.ts +53 -0
- package/dist/policy/result.js +15 -0
- package/dist/policy/selector.d.ts +11 -0
- package/dist/policy/selector.js +57 -0
- package/dist/policy/verification.d.ts +77 -0
- package/dist/policy/verification.js +365 -0
- package/dist/policy/verifier-selection.d.ts +13 -0
- package/dist/policy/verifier-selection.js +78 -0
- package/dist/preflight/branch.d.ts +9 -0
- package/dist/preflight/branch.js +48 -0
- package/dist/preflight/errors.d.ts +3 -0
- package/dist/preflight/errors.js +10 -3
- package/dist/preflight/index.d.ts +13 -0
- package/dist/preflight/index.js +43 -8
- package/dist/render/interactions/confirmation.js +4 -2
- package/dist/render/transcripts/apply.js +9 -10
- package/dist/render/transcripts/auto.d.ts +27 -0
- package/dist/render/transcripts/auto.js +21 -0
- package/dist/render/transcripts/init.d.ts +4 -15
- package/dist/render/transcripts/init.js +71 -72
- package/dist/render/transcripts/list.d.ts +10 -1
- package/dist/render/transcripts/list.js +121 -15
- package/dist/render/transcripts/message.d.ts +72 -0
- package/dist/render/transcripts/message.js +362 -0
- package/dist/render/transcripts/prune.d.ts +7 -2
- package/dist/render/transcripts/prune.js +64 -17
- package/dist/render/transcripts/reduce.d.ts +74 -0
- package/dist/render/transcripts/reduce.js +395 -0
- package/dist/render/transcripts/root-launcher.d.ts +19 -0
- package/dist/render/transcripts/root-launcher.js +40 -0
- package/dist/render/transcripts/run.d.ts +35 -6
- package/dist/render/transcripts/run.js +241 -165
- package/dist/render/transcripts/shared.d.ts +2 -0
- package/dist/render/transcripts/shared.js +11 -4
- package/dist/render/transcripts/spec.d.ts +74 -0
- package/dist/render/transcripts/spec.js +394 -0
- package/dist/render/transcripts/stage-progress.d.ts +22 -0
- package/dist/render/transcripts/stage-progress.js +6 -0
- package/dist/render/transcripts/update-check.d.ts +2 -0
- package/dist/render/transcripts/update-check.js +22 -0
- package/dist/render/transcripts/verify.d.ts +74 -0
- package/dist/render/transcripts/verify.js +409 -0
- package/dist/render/utils/agents.d.ts +10 -9
- package/dist/render/utils/agents.js +30 -82
- package/dist/render/utils/badges.d.ts +3 -20
- package/dist/render/utils/badges.js +3 -36
- package/dist/render/utils/duration.d.ts +12 -0
- package/dist/render/utils/duration.js +37 -0
- package/dist/render/utils/interactive-frame.d.ts +6 -0
- package/dist/render/utils/interactive-frame.js +38 -0
- package/dist/render/utils/records.js +4 -4
- package/dist/render/utils/runs.d.ts +3 -9
- package/dist/render/utils/runs.js +16 -48
- package/dist/render/utils/stage-output.d.ts +20 -0
- package/dist/render/utils/stage-output.js +44 -0
- package/dist/render/utils/timezone.d.ts +2 -0
- package/dist/render/utils/timezone.js +42 -0
- package/dist/render/utils/transcript-shell.d.ts +66 -0
- package/dist/render/utils/transcript-shell.js +155 -0
- package/dist/render/utils/transcript.d.ts +7 -1
- package/dist/render/utils/transcript.js +12 -2
- package/dist/render/utils/wrap.d.ts +1 -0
- package/dist/render/utils/wrap.js +20 -0
- package/dist/status/colors.d.ts +2 -3
- package/dist/status/colors.js +3 -3
- package/dist/status/index.d.ts +108 -8
- package/dist/status/index.js +164 -5
- package/dist/update-check/checker.d.ts +24 -0
- package/dist/update-check/checker.js +130 -0
- package/dist/update-check/prompt.d.ts +25 -0
- package/dist/update-check/prompt.js +62 -0
- package/dist/update-check/semver.d.ts +17 -0
- package/dist/update-check/semver.js +36 -0
- package/dist/update-check/state-path.d.ts +8 -0
- package/dist/update-check/state-path.js +18 -0
- package/dist/utils/binaries.js +14 -8
- package/dist/utils/errors.d.ts +3 -1
- package/dist/utils/errors.js +3 -1
- package/dist/utils/git.d.ts +10 -0
- package/dist/utils/git.js +15 -3
- package/dist/utils/output.d.ts +5 -1
- package/dist/utils/output.js +4 -2
- package/dist/utils/process.d.ts +2 -1
- package/dist/utils/process.js +7 -3
- package/dist/utils/session-id.d.ts +1 -0
- package/dist/utils/session-id.js +22 -0
- package/dist/utils/slug.d.ts +2 -0
- package/dist/utils/slug.js +15 -0
- package/dist/utils/voratiq-cli-target.d.ts +9 -0
- package/dist/utils/voratiq-cli-target.js +58 -0
- package/dist/workspace/agents.d.ts +13 -16
- package/dist/workspace/agents.js +22 -147
- package/dist/workspace/chat/artifacts.d.ts +9 -0
- package/dist/workspace/chat/artifacts.js +82 -12
- package/dist/workspace/chat/native-usage.d.ts +13 -0
- package/dist/workspace/chat/native-usage.js +60 -0
- package/dist/workspace/chat/sources.d.ts +9 -5
- package/dist/workspace/chat/sources.js +89 -23
- package/dist/workspace/chat/token-usage-result.d.ts +23 -0
- package/dist/workspace/chat/token-usage-result.js +7 -0
- package/dist/workspace/chat/usage-extractor.d.ts +30 -0
- package/dist/workspace/chat/usage-extractor.js +461 -0
- package/dist/workspace/chat/usage-mappings.d.ts +20 -0
- package/dist/workspace/chat/usage-mappings.js +136 -0
- package/dist/workspace/credential-guard.js +1 -1
- package/dist/workspace/dependencies.js +4 -4
- package/dist/workspace/errors.d.ts +5 -0
- package/dist/workspace/errors.js +13 -3
- package/dist/workspace/layout.d.ts +17 -6
- package/dist/workspace/layout.js +51 -32
- package/dist/workspace/promotion.d.ts +32 -0
- package/dist/workspace/promotion.js +34 -0
- package/dist/workspace/prune.d.ts +1 -1
- package/dist/workspace/run.d.ts +1 -3
- package/dist/workspace/run.js +6 -15
- package/dist/workspace/setup.d.ts +8 -0
- package/dist/workspace/setup.js +359 -56
- package/dist/workspace/shim.js +1 -1
- package/dist/workspace/structure.d.ts +91 -26
- package/dist/workspace/structure.js +227 -43
- package/dist/workspace/templates.d.ts +9 -3
- package/dist/workspace/templates.js +26 -15
- package/dist/workspace/verification-defaults.d.ts +12 -0
- package/dist/workspace/verification-defaults.js +1017 -0
- package/package.json +30 -24
- package/dist/cli/review.d.ts +0 -12
- package/dist/cli/review.js +0 -33
- package/dist/commands/errors.d.ts +0 -4
- package/dist/commands/errors.js +0 -7
- package/dist/commands/init/evals.d.ts +0 -4
- package/dist/commands/init/evals.js +0 -219
- package/dist/commands/review/command.d.ts +0 -10
- package/dist/commands/review/command.js +0 -26
- package/dist/commands/run/agent-execution.d.ts +0 -19
- package/dist/commands/run/agent-execution.js +0 -63
- package/dist/commands/run/agents/auth-stage.d.ts +0 -23
- package/dist/commands/run/agents/auth-stage.js +0 -108
- package/dist/commands/run/agents/chat-preserver.d.ts +0 -9
- package/dist/commands/run/agents/chat-preserver.js +0 -35
- package/dist/commands/run/agents/eval-runner.d.ts +0 -19
- package/dist/commands/run/agents/eval-runner.js +0 -27
- package/dist/commands/run/agents/failures.js +0 -32
- package/dist/commands/run/agents/preparation.js +0 -123
- package/dist/commands/run/agents.d.ts +0 -14
- package/dist/commands/run/agents.js +0 -47
- package/dist/commands/run/prompts.d.ts +0 -4
- package/dist/commands/run/prompts.js +0 -16
- package/dist/commands/run/sandbox-registry.d.ts +0 -4
- package/dist/commands/run/sandbox-registry.js +0 -54
- package/dist/configs/evals/defaults.d.ts +0 -8
- package/dist/configs/evals/defaults.js +0 -28
- package/dist/configs/evals/detect.d.ts +0 -10
- package/dist/configs/evals/errors.d.ts +0 -16
- package/dist/configs/evals/errors.js +0 -29
- package/dist/configs/evals/loader.d.ts +0 -9
- package/dist/configs/evals/loader.js +0 -46
- package/dist/configs/evals/types.d.ts +0 -42
- package/dist/configs/evals/types.js +0 -74
- package/dist/evals/runner.d.ts +0 -16
- package/dist/evals/runner.js +0 -132
- package/dist/records/persistence.js +0 -469
- package/dist/records/types.d.ts +0 -255
- package/dist/records/types.js +0 -160
- package/dist/render/transcripts/review.d.ts +0 -2
- package/dist/render/transcripts/review.js +0 -36
- /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.d.ts +0 -0
- /package/dist/{commands/run → agents/runtime}/shim/agent-manifest.js +0 -0
- /package/dist/{commands/run → agents/runtime/shim}/argv.d.ts +0 -0
- /package/dist/{commands/run → agents/runtime/shim}/argv.js +0 -0
- /package/dist/{commands/run/agents → agents/runtime}/types.js +0 -0
- /package/dist/{commands/run → domain/run/competition}/agents/preparation.d.ts +0 -0
- /package/dist/{commands/run/phases.js → domain/run/competition/agents/types.js} +0 -0
- /package/dist/{commands/run → domain/run/model}/id.d.ts +0 -0
- /package/dist/{commands/run → domain/run/model}/id.js +0 -0
- /package/dist/{records → persistence}/history-lock.d.ts +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { verifyAgentProviders } from "../../agents/runtime/auth.js";
|
|
2
|
+
import { executeCompetitionWithAdapter } from "../../competition/command-adapter.js";
|
|
3
|
+
import { AgentNotFoundError } from "../../configs/agents/errors.js";
|
|
4
|
+
import { loadEnvironmentConfig } from "../../configs/environment/loader.js";
|
|
5
|
+
import { createReduceCompetitionAdapter, } from "../../domain/reduce/competition/adapter.js";
|
|
6
|
+
import { flushReductionRecordBuffer, readReductionRecords, } from "../../domain/reduce/persistence/adapter.js";
|
|
7
|
+
import { toErrorMessage } from "../../utils/errors.js";
|
|
8
|
+
import { resolveEffectiveMaxParallel } from "../shared/max-parallel.js";
|
|
9
|
+
import { resolveReductionCompetitors } from "../shared/resolve-reduction-competitors.js";
|
|
10
|
+
import { generateSessionId } from "../shared/session-id.js";
|
|
11
|
+
import { ReduceAgentNotFoundError, ReduceGenerationFailedError, ReducePreflightError, } from "./errors.js";
|
|
12
|
+
import { assertReductionTargetEligible } from "./targets.js";
|
|
13
|
+
export async function executeReduceCommand(input) {
|
|
14
|
+
const { root, specsFilePath, runsFilePath, reductionsFilePath, messagesFilePath, verificationsFilePath, target, agentIds, agentOverrideFlag, profileName, maxParallel: requestedMaxParallel, extraContextFiles = [], renderer, } = input;
|
|
15
|
+
await assertReductionTargetEligible({
|
|
16
|
+
root,
|
|
17
|
+
specsFilePath,
|
|
18
|
+
runsFilePath,
|
|
19
|
+
reductionsFilePath,
|
|
20
|
+
messagesFilePath,
|
|
21
|
+
verificationsFilePath,
|
|
22
|
+
target,
|
|
23
|
+
});
|
|
24
|
+
const reducers = resolveReduceAgents({
|
|
25
|
+
root,
|
|
26
|
+
agentIds,
|
|
27
|
+
agentOverrideFlag,
|
|
28
|
+
profileName,
|
|
29
|
+
});
|
|
30
|
+
await assertReducePreflight(reducers);
|
|
31
|
+
const environment = loadEnvironmentConfig({ root });
|
|
32
|
+
const reductionId = generateSessionId();
|
|
33
|
+
const createdAt = new Date().toISOString();
|
|
34
|
+
const effectiveMaxParallel = resolveEffectiveMaxParallel({
|
|
35
|
+
competitorCount: reducers.length,
|
|
36
|
+
requestedMaxParallel,
|
|
37
|
+
});
|
|
38
|
+
renderer?.begin({
|
|
39
|
+
reductionId,
|
|
40
|
+
createdAt,
|
|
41
|
+
workspacePath: `.voratiq/reduce/sessions/${reductionId}`,
|
|
42
|
+
status: "running",
|
|
43
|
+
});
|
|
44
|
+
let executionError;
|
|
45
|
+
let reductionResults;
|
|
46
|
+
try {
|
|
47
|
+
reductionResults = await executeCompetitionWithAdapter({
|
|
48
|
+
candidates: reducers,
|
|
49
|
+
maxParallel: effectiveMaxParallel,
|
|
50
|
+
adapter: createReduceCompetitionAdapter({
|
|
51
|
+
root,
|
|
52
|
+
reductionId,
|
|
53
|
+
createdAt,
|
|
54
|
+
reductionsFilePath,
|
|
55
|
+
specsFilePath,
|
|
56
|
+
runsFilePath,
|
|
57
|
+
messagesFilePath,
|
|
58
|
+
verificationsFilePath,
|
|
59
|
+
target,
|
|
60
|
+
environment,
|
|
61
|
+
extraContextFiles,
|
|
62
|
+
renderer,
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
executionError = error;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
await flushReductionRecordBuffer({
|
|
71
|
+
reductionsFilePath,
|
|
72
|
+
sessionId: reductionId,
|
|
73
|
+
}).catch(() => { });
|
|
74
|
+
}
|
|
75
|
+
if (executionError) {
|
|
76
|
+
renderer?.complete("failed");
|
|
77
|
+
throw new ReduceGenerationFailedError([
|
|
78
|
+
`Reduction session \`${reductionId}\` failed: ${toErrorMessage(executionError)}`,
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
if (!reductionResults || reductionResults.length === 0) {
|
|
82
|
+
renderer?.complete("failed");
|
|
83
|
+
throw new ReduceGenerationFailedError([
|
|
84
|
+
`Reduction session \`${reductionId}\` did not produce any result.`,
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
const persistedRecord = await readReductionSessionRecord({
|
|
88
|
+
root,
|
|
89
|
+
reductionsFilePath,
|
|
90
|
+
reductionId,
|
|
91
|
+
});
|
|
92
|
+
if (!persistedRecord) {
|
|
93
|
+
renderer?.complete("failed");
|
|
94
|
+
throw new ReduceGenerationFailedError([
|
|
95
|
+
`Reduction session \`${reductionId}\` record not found after execution.`,
|
|
96
|
+
]);
|
|
97
|
+
}
|
|
98
|
+
renderer?.complete(persistedRecord.status, {
|
|
99
|
+
startedAt: persistedRecord.startedAt,
|
|
100
|
+
completedAt: persistedRecord.completedAt,
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
reductionId,
|
|
104
|
+
target,
|
|
105
|
+
reducerAgentIds: reducers.map((reducer) => reducer.id),
|
|
106
|
+
reductions: reductionResults,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function resolveReduceAgents(options) {
|
|
110
|
+
const { agentIds, root, agentOverrideFlag, profileName } = options;
|
|
111
|
+
try {
|
|
112
|
+
const resolution = resolveReductionCompetitors({
|
|
113
|
+
root,
|
|
114
|
+
cliAgentIds: agentIds,
|
|
115
|
+
cliOverrideFlag: agentOverrideFlag,
|
|
116
|
+
profileName,
|
|
117
|
+
});
|
|
118
|
+
return [...resolution.competitors];
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (error instanceof AgentNotFoundError) {
|
|
122
|
+
throw new ReduceAgentNotFoundError(error.agentId);
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function assertReducePreflight(agents) {
|
|
128
|
+
const providerIssues = await verifyAgentProviders(agents.map((agent) => ({
|
|
129
|
+
id: agent.id,
|
|
130
|
+
provider: agent.provider,
|
|
131
|
+
})));
|
|
132
|
+
if (providerIssues.length > 0) {
|
|
133
|
+
throw new ReducePreflightError(providerIssues, []);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function readReductionSessionRecord(options) {
|
|
137
|
+
const { root, reductionsFilePath, reductionId } = options;
|
|
138
|
+
const records = await readReductionRecords({
|
|
139
|
+
root,
|
|
140
|
+
reductionsFilePath,
|
|
141
|
+
limit: 1,
|
|
142
|
+
predicate: (record) => record.sessionId === reductionId,
|
|
143
|
+
});
|
|
144
|
+
return records[0];
|
|
145
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CliError } from "../../cli/errors.js";
|
|
2
|
+
import { type PreflightIssue } from "../../competition/shared/preflight.js";
|
|
3
|
+
export type ReducePreflightIssue = PreflightIssue;
|
|
4
|
+
export declare class ReduceError extends CliError {
|
|
5
|
+
constructor(headline: string, detailLines?: readonly string[], hintLines?: readonly string[]);
|
|
6
|
+
}
|
|
7
|
+
export declare class ReduceAgentNotFoundError extends ReduceError {
|
|
8
|
+
readonly agentId: string;
|
|
9
|
+
constructor(agentId: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class ReducePreflightError extends ReduceError {
|
|
12
|
+
readonly issues: readonly ReducePreflightIssue[];
|
|
13
|
+
constructor(issues: readonly ReducePreflightIssue[], hintLines?: readonly string[]);
|
|
14
|
+
}
|
|
15
|
+
export declare class ReduceGenerationFailedError extends ReduceError {
|
|
16
|
+
constructor(detailLines?: readonly string[]);
|
|
17
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CliError } from "../../cli/errors.js";
|
|
2
|
+
import { formatPreflightIssueLines, PREFLIGHT_HINT, } from "../../competition/shared/preflight.js";
|
|
3
|
+
export class ReduceError extends CliError {
|
|
4
|
+
constructor(headline, detailLines = [], hintLines) {
|
|
5
|
+
super(headline, detailLines, hintLines);
|
|
6
|
+
this.name = "ReduceError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class ReduceAgentNotFoundError extends ReduceError {
|
|
10
|
+
agentId;
|
|
11
|
+
constructor(agentId) {
|
|
12
|
+
super(`Agent \`${agentId}\` not found in \`agents.yaml\`.`, [], ["Add this agent to `agents.yaml`."]);
|
|
13
|
+
this.agentId = agentId;
|
|
14
|
+
this.name = "ReduceAgentNotFoundError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ReducePreflightError extends ReduceError {
|
|
18
|
+
issues;
|
|
19
|
+
constructor(issues, hintLines = [PREFLIGHT_HINT]) {
|
|
20
|
+
super("Preflight failed. Aborting reduction.", formatPreflightIssueLines(issues), hintLines);
|
|
21
|
+
this.issues = Array.from(issues);
|
|
22
|
+
this.name = "ReducePreflightError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ReduceGenerationFailedError extends ReduceError {
|
|
26
|
+
constructor(detailLines = []) {
|
|
27
|
+
super("Reduction failed.", detailLines, [
|
|
28
|
+
"Inspect reducer stderr logs to diagnose the failure.",
|
|
29
|
+
]);
|
|
30
|
+
this.name = "ReduceGenerationFailedError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReductionTarget } from "../../domain/reduce/model/types.js";
|
|
2
|
+
export interface ReductionTargetValidationInput {
|
|
3
|
+
root: string;
|
|
4
|
+
specsFilePath: string;
|
|
5
|
+
runsFilePath: string;
|
|
6
|
+
reductionsFilePath: string;
|
|
7
|
+
messagesFilePath: string;
|
|
8
|
+
verificationsFilePath: string;
|
|
9
|
+
target: ReductionTarget;
|
|
10
|
+
}
|
|
11
|
+
export declare function assertReductionTargetEligible(input: ReductionTargetValidationInput): Promise<void>;
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { CliError } from "../../cli/errors.js";
|
|
3
|
+
import { RunNotFoundCliError } from "../../cli/errors.js";
|
|
4
|
+
import { TERMINAL_MESSAGE_STATUSES } from "../../domain/message/model/types.js";
|
|
5
|
+
import { readMessageRecords } from "../../domain/message/persistence/adapter.js";
|
|
6
|
+
import { TERMINAL_REDUCTION_STATUSES, } from "../../domain/reduce/model/types.js";
|
|
7
|
+
import { readReductionRecords } from "../../domain/reduce/persistence/adapter.js";
|
|
8
|
+
import { buildRunRecordView } from "../../domain/run/model/enhanced.js";
|
|
9
|
+
import { RunRecordNotFoundError } from "../../domain/run/model/errors.js";
|
|
10
|
+
import { fetchRunsSafely } from "../../domain/run/persistence/adapter.js";
|
|
11
|
+
import { TERMINAL_SPEC_STATUSES } from "../../domain/spec/model/types.js";
|
|
12
|
+
import { readSpecRecords } from "../../domain/spec/persistence/adapter.js";
|
|
13
|
+
import { TERMINAL_VERIFICATION_STATUSES } from "../../domain/verify/model/types.js";
|
|
14
|
+
import { readVerificationRecords } from "../../domain/verify/persistence/adapter.js";
|
|
15
|
+
import { TERMINAL_RUN_STATUSES } from "../../status/index.js";
|
|
16
|
+
import { pathExists } from "../../utils/fs.js";
|
|
17
|
+
import { normalizePathForDisplay, relativeToRoot, resolvePath, } from "../../utils/path.js";
|
|
18
|
+
import { REDUCTION_DATA_FILENAME } from "../../workspace/structure.js";
|
|
19
|
+
export async function assertReductionTargetEligible(input) {
|
|
20
|
+
const { target } = input;
|
|
21
|
+
switch (target.type) {
|
|
22
|
+
case "spec":
|
|
23
|
+
await assertSpecTargetEligible(input);
|
|
24
|
+
return;
|
|
25
|
+
case "run":
|
|
26
|
+
await assertRunTargetEligible(input);
|
|
27
|
+
return;
|
|
28
|
+
case "reduce":
|
|
29
|
+
await assertReductionTargetEligibleInternal(input);
|
|
30
|
+
return;
|
|
31
|
+
case "verify":
|
|
32
|
+
await assertVerificationTargetEligible(input);
|
|
33
|
+
return;
|
|
34
|
+
case "message":
|
|
35
|
+
await assertMessageTargetEligible(input);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function assertSpecTargetEligible(input) {
|
|
40
|
+
const { root, specsFilePath, target } = input;
|
|
41
|
+
const [record] = await readSpecRecords({
|
|
42
|
+
root,
|
|
43
|
+
specsFilePath,
|
|
44
|
+
limit: 1,
|
|
45
|
+
predicate: (entry) => entry.sessionId === target.id,
|
|
46
|
+
});
|
|
47
|
+
if (!record) {
|
|
48
|
+
throw new CliError(`Spec session \`${target.id}\` not found.`, [], [
|
|
49
|
+
"Re-run `voratiq spec` or confirm the session id in `.voratiq/spec/index.json`.",
|
|
50
|
+
]);
|
|
51
|
+
}
|
|
52
|
+
if (!TERMINAL_SPEC_STATUSES.includes(record.status)) {
|
|
53
|
+
throw new CliError(`Spec session \`${target.id}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the spec to finish or re-run `voratiq spec`."]);
|
|
54
|
+
}
|
|
55
|
+
if (record.status !== "succeeded") {
|
|
56
|
+
throw new CliError(`Spec session \`${target.id}\` did not succeed.`, [`Status: \`${record.status}\`.`], ["Re-run `voratiq spec` to generate a complete spec artifact."]);
|
|
57
|
+
}
|
|
58
|
+
const generatedAgents = record.agents.filter((agent) => agent.status === "succeeded" && agent.outputPath && agent.dataPath);
|
|
59
|
+
if (generatedAgents.length === 0) {
|
|
60
|
+
throw new CliError(`Spec session \`${target.id}\` has no complete generated artifacts.`, [], ["Re-run `voratiq spec` to regenerate the spec artifacts."]);
|
|
61
|
+
}
|
|
62
|
+
const missing = [];
|
|
63
|
+
for (const agent of generatedAgents) {
|
|
64
|
+
if (!agent.outputPath || !agent.dataPath)
|
|
65
|
+
continue;
|
|
66
|
+
const markdownAbsolute = resolvePath(root, agent.outputPath);
|
|
67
|
+
if (!(await pathExists(markdownAbsolute))) {
|
|
68
|
+
missing.push(normalizePathForDisplay(agent.outputPath));
|
|
69
|
+
}
|
|
70
|
+
const dataAbsolute = resolvePath(root, agent.dataPath);
|
|
71
|
+
if (!(await pathExists(dataAbsolute))) {
|
|
72
|
+
missing.push(normalizePathForDisplay(agent.dataPath));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (missing.length > 0) {
|
|
76
|
+
throw new CliError(`Spec session \`${target.id}\` is missing artifact files.`, missing.map((path) => `Missing: \`${path}\`.`), ["Re-run `voratiq spec` to regenerate the spec artifacts."]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async function assertRunTargetEligible(input) {
|
|
80
|
+
const { root, runsFilePath, target } = input;
|
|
81
|
+
const { records } = await fetchRunsSafely({
|
|
82
|
+
root,
|
|
83
|
+
runsFilePath,
|
|
84
|
+
runId: target.id,
|
|
85
|
+
filters: { includeDeleted: true },
|
|
86
|
+
}).catch((error) => {
|
|
87
|
+
if (error instanceof RunRecordNotFoundError) {
|
|
88
|
+
throw new RunNotFoundCliError(target.id);
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
});
|
|
92
|
+
const record = records[0];
|
|
93
|
+
if (!record) {
|
|
94
|
+
throw new RunNotFoundCliError(target.id);
|
|
95
|
+
}
|
|
96
|
+
if (!isRunStatusCompleteForReduction(record.status)) {
|
|
97
|
+
throw new CliError(`Run \`${target.id}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the run to finish before reducing."]);
|
|
98
|
+
}
|
|
99
|
+
if (record.status === "aborted") {
|
|
100
|
+
throw new CliError(`Run \`${target.id}\` did not complete.`, [`Status: \`${record.status}\`.`], ["Re-run `voratiq run` to generate a complete artifact set."]);
|
|
101
|
+
}
|
|
102
|
+
assertRunArtifactsPresent(record.status, target.id);
|
|
103
|
+
const enhanced = await buildRunRecordView(record, { workspaceRoot: root });
|
|
104
|
+
const missing = await findMissingRunArtifacts(root, enhanced);
|
|
105
|
+
if (missing.length > 0) {
|
|
106
|
+
throw new CliError(`Run \`${target.id}\` is missing required artifacts.`, missing.map((path) => `Missing: \`${path}\`.`), ["Re-run `voratiq run` to regenerate the run artifacts."]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function isRunStatusCompleteForReduction(status) {
|
|
110
|
+
return status === "pruned" || TERMINAL_RUN_STATUSES.includes(status);
|
|
111
|
+
}
|
|
112
|
+
function assertRunArtifactsPresent(status, runId) {
|
|
113
|
+
if (status === "succeeded" ||
|
|
114
|
+
status === "failed" ||
|
|
115
|
+
status === "errored" ||
|
|
116
|
+
status === "pruned") {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
throw new CliError(`Run \`${runId}\` is not eligible for reduction.`, [`Status: \`${status}\`.`], ["Re-run `voratiq run` to generate a complete artifact set."]);
|
|
120
|
+
}
|
|
121
|
+
async function assertVerificationTargetEligible(input) {
|
|
122
|
+
const { root, verificationsFilePath, target } = input;
|
|
123
|
+
const [record] = await readVerificationRecords({
|
|
124
|
+
root,
|
|
125
|
+
verificationsFilePath,
|
|
126
|
+
limit: 1,
|
|
127
|
+
predicate: (entry) => entry.sessionId === target.id,
|
|
128
|
+
});
|
|
129
|
+
if (!record) {
|
|
130
|
+
throw new CliError(`Verification session \`${target.id}\` not found.`, [], [
|
|
131
|
+
"Re-run `voratiq verify` or confirm the session id in `.voratiq/verify/index.json`.",
|
|
132
|
+
]);
|
|
133
|
+
}
|
|
134
|
+
if (!TERMINAL_VERIFICATION_STATUSES.includes(record.status)) {
|
|
135
|
+
throw new CliError(`Verification session \`${target.id}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the verification to finish or re-run `voratiq verify`."]);
|
|
136
|
+
}
|
|
137
|
+
if (record.status === "aborted") {
|
|
138
|
+
throw new CliError(`Verification session \`${target.id}\` did not complete.`, [`Status: \`${record.status}\`.`], ["Re-run `voratiq verify` to generate a complete artifact set."]);
|
|
139
|
+
}
|
|
140
|
+
const missing = await findMissingVerificationArtifacts(root, record.methods);
|
|
141
|
+
if (missing.length > 0) {
|
|
142
|
+
throw new CliError(`Verification session \`${target.id}\` is missing required artifacts.`, missing.map((path) => `Missing: \`${path}\`.`), ["Re-run `voratiq verify` to regenerate verification artifacts."]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async function assertReductionTargetEligibleInternal(input) {
|
|
146
|
+
const { root, reductionsFilePath, target } = input;
|
|
147
|
+
if (!(await pathExists(reductionsFilePath))) {
|
|
148
|
+
throw new CliError(`Reduction session \`${target.id}\` not found.`, [], ["Confirm the session id in `.voratiq/reduce/index.json`."]);
|
|
149
|
+
}
|
|
150
|
+
const [record] = await readReductionRecords({
|
|
151
|
+
root,
|
|
152
|
+
reductionsFilePath,
|
|
153
|
+
limit: 1,
|
|
154
|
+
predicate: (entry) => entry.sessionId === target.id,
|
|
155
|
+
});
|
|
156
|
+
if (!record) {
|
|
157
|
+
throw new CliError(`Reduction session \`${target.id}\` not found.`, [], ["Confirm the session id in `.voratiq/reduce/index.json`."]);
|
|
158
|
+
}
|
|
159
|
+
if (!TERMINAL_REDUCTION_STATUSES.includes(record.status)) {
|
|
160
|
+
throw new CliError(`Reduction session \`${target.id}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the reduction to finish before reducing."]);
|
|
161
|
+
}
|
|
162
|
+
if (record.status !== "succeeded") {
|
|
163
|
+
throw new CliError(`Reduction session \`${target.id}\` did not complete.`, [`Status: \`${record.status}\`.`], ["Re-run `voratiq reduce` to generate a complete artifact set."]);
|
|
164
|
+
}
|
|
165
|
+
const missing = await findMissingReductionArtifacts(root, record.reducers);
|
|
166
|
+
if (missing.length > 0) {
|
|
167
|
+
throw new CliError(`Reduction session \`${target.id}\` is missing required artifacts.`, missing.map((path) => `Missing: \`${path}\`.`), ["Re-run `voratiq reduce` to regenerate reduction artifacts."]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function assertMessageTargetEligible(input) {
|
|
171
|
+
const { root, messagesFilePath, target } = input;
|
|
172
|
+
const [record] = await readMessageRecords({
|
|
173
|
+
root,
|
|
174
|
+
messagesFilePath,
|
|
175
|
+
limit: 1,
|
|
176
|
+
predicate: (entry) => entry.sessionId === target.id,
|
|
177
|
+
});
|
|
178
|
+
if (!record) {
|
|
179
|
+
throw new CliError(`Message session \`${target.id}\` not found.`, [], [
|
|
180
|
+
"Re-run `voratiq message` or confirm the session id in `.voratiq/message/index.json`.",
|
|
181
|
+
]);
|
|
182
|
+
}
|
|
183
|
+
if (!TERMINAL_MESSAGE_STATUSES.includes(record.status)) {
|
|
184
|
+
throw new CliError(`Message session \`${target.id}\` is not complete.`, [`Status: \`${record.status}\`.`], ["Wait for the message to finish before reducing."]);
|
|
185
|
+
}
|
|
186
|
+
if (record.status !== "succeeded") {
|
|
187
|
+
throw new CliError(`Message session \`${target.id}\` did not complete.`, [`Status: \`${record.status}\`.`], ["Re-run `voratiq message` to generate a complete artifact set."]);
|
|
188
|
+
}
|
|
189
|
+
const generatedRecipients = record.recipients.filter((recipient) => recipient.status === "succeeded" &&
|
|
190
|
+
typeof recipient.outputPath === "string");
|
|
191
|
+
if (generatedRecipients.length === 0) {
|
|
192
|
+
throw new CliError(`Message session \`${target.id}\` has no generated artifacts.`, [], ["Re-run `voratiq message` to regenerate the message artifacts."]);
|
|
193
|
+
}
|
|
194
|
+
const missing = await findMissingMessageArtifacts(root, generatedRecipients);
|
|
195
|
+
if (missing.length > 0) {
|
|
196
|
+
throw new CliError(`Message session \`${target.id}\` is missing required artifacts.`, missing.map((path) => `Missing: \`${path}\`.`), ["Re-run `voratiq message` to regenerate the message artifacts."]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async function findMissingVerificationArtifacts(root, methods) {
|
|
200
|
+
const missing = [];
|
|
201
|
+
const seen = new Set();
|
|
202
|
+
for (const method of methods) {
|
|
203
|
+
if (!method.artifactPath) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const artifactPath = normalizePathForDisplay(method.artifactPath);
|
|
207
|
+
const artifactAbsolute = resolvePath(root, artifactPath);
|
|
208
|
+
if (!(await pathExists(artifactAbsolute))) {
|
|
209
|
+
registerMissing(missing, seen, artifactPath);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return missing;
|
|
213
|
+
}
|
|
214
|
+
async function findMissingReductionArtifacts(root, reducers) {
|
|
215
|
+
const missing = [];
|
|
216
|
+
const seen = new Set();
|
|
217
|
+
for (const reducer of reducers) {
|
|
218
|
+
const outputPath = reducer.outputPath;
|
|
219
|
+
const outputAbsolute = resolvePath(root, outputPath);
|
|
220
|
+
if (!(await pathExists(outputAbsolute))) {
|
|
221
|
+
registerMissing(missing, seen, outputPath);
|
|
222
|
+
}
|
|
223
|
+
const dataPath = reducer.dataPath ??
|
|
224
|
+
normalizePathForDisplay(relativeToRoot(root, resolvePath(root, dirname(outputPath), REDUCTION_DATA_FILENAME)));
|
|
225
|
+
const dataAbsolute = resolvePath(root, dataPath);
|
|
226
|
+
if (!(await pathExists(dataAbsolute))) {
|
|
227
|
+
registerMissing(missing, seen, dataPath);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return missing;
|
|
231
|
+
}
|
|
232
|
+
async function findMissingMessageArtifacts(root, recipients) {
|
|
233
|
+
const missing = [];
|
|
234
|
+
const seen = new Set();
|
|
235
|
+
for (const recipient of recipients) {
|
|
236
|
+
const outputPath = recipient.outputPath;
|
|
237
|
+
const outputAbsolute = resolvePath(root, outputPath);
|
|
238
|
+
if (!(await pathExists(outputAbsolute))) {
|
|
239
|
+
registerMissing(missing, seen, outputPath);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return missing;
|
|
243
|
+
}
|
|
244
|
+
async function findMissingRunArtifacts(root, run) {
|
|
245
|
+
const missing = [];
|
|
246
|
+
const seen = new Set();
|
|
247
|
+
const specAbsolute = resolvePath(root, run.spec.path);
|
|
248
|
+
if (!(await pathExists(specAbsolute))) {
|
|
249
|
+
registerMissing(missing, seen, normalizePathForDisplay(run.spec.path));
|
|
250
|
+
}
|
|
251
|
+
for (const agent of run.agents) {
|
|
252
|
+
const candidatePaths = [agent.assets.diffPath, agent.assets.summaryPath];
|
|
253
|
+
for (const candidatePath of candidatePaths) {
|
|
254
|
+
if (!candidatePath) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const absolute = resolvePath(root, candidatePath);
|
|
258
|
+
if (!(await pathExists(absolute))) {
|
|
259
|
+
registerMissing(missing, seen, normalizePathForDisplay(candidatePath));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return missing;
|
|
264
|
+
}
|
|
265
|
+
function registerMissing(missing, seen, path) {
|
|
266
|
+
if (seen.has(path)) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
seen.add(path);
|
|
270
|
+
missing.push(path);
|
|
271
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type CommandOutputWriter } from "../../cli/output.js";
|
|
2
|
+
import { loadAgentCatalogDiagnostics } from "../../configs/agents/loader.js";
|
|
3
|
+
import { prepareNativeInteractiveSession, spawnPreparedInteractiveSession } from "../../interactive/index.js";
|
|
4
|
+
import { resolveCliContext } from "../../preflight/index.js";
|
|
5
|
+
import type { VoratiqCliTarget } from "../../utils/voratiq-cli-target.js";
|
|
6
|
+
export interface RootLauncherPromptOptions {
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RootLauncherConfirmOptions {
|
|
10
|
+
message: string;
|
|
11
|
+
defaultValue?: boolean;
|
|
12
|
+
prefaceLines?: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface RootLauncherWorkflow {
|
|
15
|
+
prompt(options: RootLauncherPromptOptions): Promise<string>;
|
|
16
|
+
confirm(options: RootLauncherConfirmOptions): Promise<boolean>;
|
|
17
|
+
close(): void;
|
|
18
|
+
}
|
|
19
|
+
export interface RootLauncherWorkflowFactoryOptions {
|
|
20
|
+
onUnavailable: () => never;
|
|
21
|
+
}
|
|
22
|
+
export interface RootLauncherCommandOptions {
|
|
23
|
+
resolveContext?: typeof resolveCliContext;
|
|
24
|
+
loadDiagnostics?: typeof loadAgentCatalogDiagnostics;
|
|
25
|
+
createWorkflow?: (options: RootLauncherWorkflowFactoryOptions) => RootLauncherWorkflow;
|
|
26
|
+
prepareSession?: (options: Parameters<typeof prepareNativeInteractiveSession>[0]) => ReturnType<typeof prepareNativeInteractiveSession>;
|
|
27
|
+
spawnSession?: (prepared: Parameters<typeof spawnPreparedInteractiveSession>[0], options: Parameters<typeof spawnPreparedInteractiveSession>[1]) => ReturnType<typeof spawnPreparedInteractiveSession>;
|
|
28
|
+
selfCliTarget?: VoratiqCliTarget;
|
|
29
|
+
writeOutput?: CommandOutputWriter;
|
|
30
|
+
}
|
|
31
|
+
export declare function runRootLauncherCommand(options: RootLauncherCommandOptions): Promise<void>;
|