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,233 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { CliError } from "../../cli/errors.js";
|
|
3
|
+
import { writeCommandOutput, } from "../../cli/output.js";
|
|
4
|
+
import { loadAgentCatalogDiagnostics } from "../../configs/agents/loader.js";
|
|
5
|
+
import { prepareNativeInteractiveSession, spawnPreparedInteractiveSession, } from "../../interactive/index.js";
|
|
6
|
+
import { resolveCliContext } from "../../preflight/index.js";
|
|
7
|
+
import { renderRootLauncherInvalidSelection, renderRootLauncherLaunchStart, renderRootLauncherMcpInstallStart, renderRootLauncherMcpInstallSuccess, renderRootLauncherSelectionScreen, renderRootLauncherSingleAgentScreen, } from "../../render/transcripts/root-launcher.js";
|
|
8
|
+
import { renderWorkspaceAutoInitializedNotice } from "../../render/transcripts/shared.js";
|
|
9
|
+
import { createEntrypointVoratiqCliTarget } from "../../utils/voratiq-cli-target.js";
|
|
10
|
+
export async function runRootLauncherCommand(options) {
|
|
11
|
+
const { resolveContext = resolveCliContext, loadDiagnostics = loadAgentCatalogDiagnostics, createWorkflow, prepareSession = prepareNativeInteractiveSession, spawnSession = spawnPreparedInteractiveSession, selfCliTarget = createEntrypointVoratiqCliTarget({
|
|
12
|
+
cliEntrypoint: process.argv[1],
|
|
13
|
+
}), writeOutput = writeCommandOutput, } = options;
|
|
14
|
+
const createRootLauncherWorkflow = createWorkflow ??
|
|
15
|
+
(() => {
|
|
16
|
+
throw new Error("Missing root launcher workflow factory.");
|
|
17
|
+
});
|
|
18
|
+
const setup = await setupRootLauncher({
|
|
19
|
+
resolveContext,
|
|
20
|
+
loadDiagnostics,
|
|
21
|
+
writeOutput,
|
|
22
|
+
});
|
|
23
|
+
const workflow = createRootLauncherWorkflow({
|
|
24
|
+
onUnavailable: () => {
|
|
25
|
+
throw new CliError("An interactive terminal is required to launch a native agent session.", [], [
|
|
26
|
+
"Run `voratiq` from an interactive terminal, or use an explicit subcommand instead.",
|
|
27
|
+
]);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
let workflowClosed = false;
|
|
31
|
+
const closeWorkflow = () => {
|
|
32
|
+
if (!workflowClosed) {
|
|
33
|
+
workflow.close();
|
|
34
|
+
workflowClosed = true;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
try {
|
|
38
|
+
const promptResult = await promptForLaunchPlan({
|
|
39
|
+
availability: setup.availability,
|
|
40
|
+
prompt: (promptOptions) => workflow.prompt(promptOptions),
|
|
41
|
+
writeOutput,
|
|
42
|
+
});
|
|
43
|
+
const qaInitialPrompt = resolveQaInitialPrompt();
|
|
44
|
+
let acceptedMcpInstallPrompt = false;
|
|
45
|
+
const prepared = await prepareFirstPartyInteractiveSession({
|
|
46
|
+
root: setup.root,
|
|
47
|
+
selected: promptResult.selected,
|
|
48
|
+
prepareSession,
|
|
49
|
+
selfCliTarget,
|
|
50
|
+
prompt: qaInitialPrompt,
|
|
51
|
+
promptForMcpInstall: async (promptOptions) => {
|
|
52
|
+
const accepted = await workflow.confirm({
|
|
53
|
+
message: promptOptions.message,
|
|
54
|
+
defaultValue: promptOptions.defaultValue,
|
|
55
|
+
prefaceLines: ["", ...(promptOptions.prefaceLines ?? [])],
|
|
56
|
+
});
|
|
57
|
+
if (accepted) {
|
|
58
|
+
acceptedMcpInstallPrompt = true;
|
|
59
|
+
writeLauncherNotice(writeOutput, renderRootLauncherMcpInstallStart());
|
|
60
|
+
}
|
|
61
|
+
return accepted;
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
if (!prepared.ok) {
|
|
65
|
+
throw new CliError(`Failed to launch ${formatAgentLabel(promptResult.selected.entry)}.`, [prepared.failure.message]);
|
|
66
|
+
}
|
|
67
|
+
if (acceptedMcpInstallPrompt) {
|
|
68
|
+
writeLauncherNotice(writeOutput, renderRootLauncherMcpInstallSuccess());
|
|
69
|
+
}
|
|
70
|
+
closeWorkflow();
|
|
71
|
+
const started = await launchFirstPartyInteractiveSession({
|
|
72
|
+
selected: promptResult.selected,
|
|
73
|
+
prepared: prepared.prepared,
|
|
74
|
+
spawnSession,
|
|
75
|
+
writeOutput,
|
|
76
|
+
});
|
|
77
|
+
await finalizeLaunchResult(started.selected, started.launchResult);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
closeWorkflow();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function setupRootLauncher(options) {
|
|
84
|
+
const { resolveContext, loadDiagnostics, writeOutput } = options;
|
|
85
|
+
const context = await resolveContext({
|
|
86
|
+
requireWorkspace: true,
|
|
87
|
+
workspaceAutoInitMode: "when-missing",
|
|
88
|
+
});
|
|
89
|
+
if (context.workspaceAutoInitialized) {
|
|
90
|
+
writeLauncherNotice(writeOutput, renderWorkspaceAutoInitializedNotice());
|
|
91
|
+
}
|
|
92
|
+
const diagnostics = loadDiagnostics({ root: context.root });
|
|
93
|
+
assertEnabledAgents(diagnostics);
|
|
94
|
+
const availability = buildLauncherAvailability(diagnostics);
|
|
95
|
+
if (availability.launchable.length === 0) {
|
|
96
|
+
throw buildNoLaunchableAgentsError(availability.unavailable);
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
root: context.root,
|
|
100
|
+
availability,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function assertEnabledAgents(diagnostics) {
|
|
104
|
+
if (diagnostics.enabledAgents.length > 0) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
throw new CliError("No enabled agents found.", [], [
|
|
108
|
+
"Add agents to `.voratiq/agents.yaml` or run `voratiq init` to set up your workspace.",
|
|
109
|
+
]);
|
|
110
|
+
}
|
|
111
|
+
function buildLauncherAvailability(diagnostics) {
|
|
112
|
+
const issuesByAgentId = new Map();
|
|
113
|
+
for (const issue of diagnostics.issues) {
|
|
114
|
+
const current = issuesByAgentId.get(issue.agentId) ?? [];
|
|
115
|
+
current.push(issue.message);
|
|
116
|
+
issuesByAgentId.set(issue.agentId, current);
|
|
117
|
+
}
|
|
118
|
+
const resolvableAgentIds = new Set(diagnostics.catalog.map((agent) => agent.id));
|
|
119
|
+
const launchable = [];
|
|
120
|
+
const unavailable = [];
|
|
121
|
+
for (const entry of diagnostics.enabledAgents) {
|
|
122
|
+
const reasons = issuesByAgentId.get(entry.id) ?? [];
|
|
123
|
+
if (reasons.length === 0 && resolvableAgentIds.has(entry.id)) {
|
|
124
|
+
launchable.push({ entry });
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
unavailable.push({
|
|
128
|
+
entry,
|
|
129
|
+
reasons: reasons.length > 0
|
|
130
|
+
? reasons
|
|
131
|
+
: ["agent definition could not be resolved"],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return { launchable, unavailable };
|
|
135
|
+
}
|
|
136
|
+
async function promptForLaunchPlan(options) {
|
|
137
|
+
const { availability, prompt, writeOutput } = options;
|
|
138
|
+
const selected = availability.launchable.length === 1
|
|
139
|
+
? availability.launchable[0]
|
|
140
|
+
: await promptForAgentSelection({
|
|
141
|
+
launchable: availability.launchable,
|
|
142
|
+
unavailable: availability.unavailable,
|
|
143
|
+
prompt: (promptOptions) => prompt(promptOptions),
|
|
144
|
+
writeOutput,
|
|
145
|
+
});
|
|
146
|
+
if (availability.launchable.length === 1) {
|
|
147
|
+
writeLauncherNotice(writeOutput, renderRootLauncherSingleAgentScreen({
|
|
148
|
+
selected: formatAgentLabel(selected.entry),
|
|
149
|
+
unavailable: availability.unavailable.map((agent) => ({
|
|
150
|
+
label: formatAgentLabel(agent.entry),
|
|
151
|
+
reasons: agent.reasons,
|
|
152
|
+
})),
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
return { selected };
|
|
156
|
+
}
|
|
157
|
+
async function promptForAgentSelection(options) {
|
|
158
|
+
const { launchable, unavailable, prompt, writeOutput } = options;
|
|
159
|
+
writeLauncherNotice(writeOutput, renderRootLauncherSelectionScreen({
|
|
160
|
+
launchable: launchable.map((agent) => ({
|
|
161
|
+
label: formatAgentLabel(agent.entry),
|
|
162
|
+
})),
|
|
163
|
+
unavailable: unavailable.map((agent) => ({
|
|
164
|
+
label: formatAgentLabel(agent.entry),
|
|
165
|
+
reasons: agent.reasons,
|
|
166
|
+
})),
|
|
167
|
+
}));
|
|
168
|
+
for (;;) {
|
|
169
|
+
const response = await prompt({ message: `[1-${launchable.length}]` });
|
|
170
|
+
const parsed = Number.parseInt(response.trim(), 10);
|
|
171
|
+
if (Number.isInteger(parsed) &&
|
|
172
|
+
parsed >= 1 &&
|
|
173
|
+
parsed <= launchable.length) {
|
|
174
|
+
return launchable[parsed - 1];
|
|
175
|
+
}
|
|
176
|
+
writeLauncherNotice(writeOutput, renderRootLauncherInvalidSelection(launchable.length));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function prepareFirstPartyInteractiveSession(options) {
|
|
180
|
+
const { root, selected, prepareSession, selfCliTarget, prompt, promptForMcpInstall, } = options;
|
|
181
|
+
return await prepareSession({
|
|
182
|
+
root,
|
|
183
|
+
cwd: root,
|
|
184
|
+
agentId: selected.entry.id,
|
|
185
|
+
launchMode: "first-party",
|
|
186
|
+
prompt,
|
|
187
|
+
...(selfCliTarget ? { voratiqCliTarget: selfCliTarget } : {}),
|
|
188
|
+
promptForMcpInstall: async (promptOptions) => await promptForMcpInstall({
|
|
189
|
+
message: promptOptions.message,
|
|
190
|
+
defaultValue: promptOptions.defaultValue,
|
|
191
|
+
prefaceLines: promptOptions.prefaceLines,
|
|
192
|
+
}),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
async function launchFirstPartyInteractiveSession(options) {
|
|
196
|
+
const { selected, prepared, spawnSession, writeOutput } = options;
|
|
197
|
+
writeLauncherNotice(writeOutput, renderRootLauncherLaunchStart(formatAgentLabel(selected.entry)), {
|
|
198
|
+
leadingNewline: true,
|
|
199
|
+
});
|
|
200
|
+
const launchResult = await spawnSession(prepared, { stdio: "inherit" });
|
|
201
|
+
return { selected, launchResult };
|
|
202
|
+
}
|
|
203
|
+
function writeLauncherNotice(writeOutput, message, options = {}) {
|
|
204
|
+
writeOutput({
|
|
205
|
+
alerts: [{ severity: "info", message: message.trimEnd() }],
|
|
206
|
+
leadingNewline: options.leadingNewline ?? false,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
async function finalizeLaunchResult(selected, launchResult) {
|
|
210
|
+
if (!launchResult.ok) {
|
|
211
|
+
throw new CliError(`Failed to launch ${formatAgentLabel(selected.entry)}.`, [launchResult.failure.message]);
|
|
212
|
+
}
|
|
213
|
+
const completedRecord = await launchResult.completion;
|
|
214
|
+
if (completedRecord.status === "failed") {
|
|
215
|
+
process.exitCode = 1;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function buildNoLaunchableAgentsError(unavailable) {
|
|
219
|
+
const detailLines = [
|
|
220
|
+
"Enabled agents with blocking issues:",
|
|
221
|
+
...unavailable.map((agent) => ` - ${formatAgentLabel(agent.entry)}: ${agent.reasons.join("; ")}`),
|
|
222
|
+
];
|
|
223
|
+
return new CliError("No enabled agents can be launched.", detailLines, [
|
|
224
|
+
"Fix the blocking agent configuration in `.voratiq/agents.yaml`, then retry.",
|
|
225
|
+
]);
|
|
226
|
+
}
|
|
227
|
+
function formatAgentLabel(agent) {
|
|
228
|
+
return `${agent.id} (${agent.provider} / ${agent.model})`;
|
|
229
|
+
}
|
|
230
|
+
function resolveQaInitialPrompt() {
|
|
231
|
+
const prompt = process.env.VORATIQ_QA_INITIAL_PROMPT?.trim();
|
|
232
|
+
return prompt && prompt.length > 0 ? prompt : undefined;
|
|
233
|
+
}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ResolvedExtraContextFile } from "../../competition/shared/extra-context.js";
|
|
2
|
+
import type { RunReport } from "../../domain/run/model/types.js";
|
|
2
3
|
import type { RunProgressRenderer } from "../../render/transcripts/run.js";
|
|
3
4
|
export interface RunCommandInput {
|
|
4
5
|
root: string;
|
|
5
6
|
runsFilePath: string;
|
|
6
7
|
specAbsolutePath: string;
|
|
7
8
|
specDisplayPath: string;
|
|
9
|
+
agentIds?: readonly string[];
|
|
10
|
+
agentOverrideFlag?: string;
|
|
11
|
+
profileName?: string;
|
|
8
12
|
maxParallel?: number;
|
|
13
|
+
extraContextFiles?: readonly ResolvedExtraContextFile[];
|
|
9
14
|
renderer?: RunProgressRenderer;
|
|
10
15
|
}
|
|
11
16
|
/**
|
|
@@ -1,33 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { teardownSessionAuth } from "../../agents/runtime/registry.js";
|
|
2
|
+
import { createTeardownController } from "../../competition/shared/teardown.js";
|
|
3
|
+
import { executeAgents } from "../../domain/run/competition/agent-execution.js";
|
|
4
|
+
import { RunCommandError, RunProcessStreamError, } from "../../domain/run/competition/errors.js";
|
|
5
|
+
import { toRunReport } from "../../domain/run/competition/reports.js";
|
|
6
|
+
import { generateRunId } from "../../domain/run/model/id.js";
|
|
7
|
+
import { createAgentRecordMutators, mergeAgentRecords, } from "../../domain/run/model/mutators.js";
|
|
8
|
+
import { flushRunRecordBuffer, rewriteRunRecord, } from "../../domain/run/persistence/adapter.js";
|
|
9
|
+
import { buildRecordLifecycleCompleteFields } from "../../domain/shared/lifecycle.js";
|
|
10
|
+
import { buildPersistedExtraContextFields } from "../../extra-context/contract.js";
|
|
11
|
+
import { deriveRunStatusFromAgents } from "../../status/index.js";
|
|
12
|
+
import { toErrorMessage } from "../../utils/errors.js";
|
|
4
13
|
import { normalizePathForDisplay, relativeToRoot } from "../../utils/path.js";
|
|
5
14
|
import { buildAgentWorkspacePaths, formatRunWorkspaceRelative, } from "../../workspace/layout.js";
|
|
6
15
|
import { prepareRunWorkspace } from "../../workspace/run.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { clearActiveRun, registerActiveRun } from "./lifecycle.js";
|
|
16
|
+
import { resolveStageCompetitors } from "../shared/resolve-stage-competitors.js";
|
|
17
|
+
import { finalizeActiveRun, registerActiveRun } from "./lifecycle.js";
|
|
10
18
|
import { initializeRunRecord } from "./record-init.js";
|
|
11
|
-
import { toRunReport } from "./reports.js";
|
|
12
|
-
import { teardownRunSandboxes } from "./sandbox-registry.js";
|
|
13
19
|
import { validateAndPrepare } from "./validation.js";
|
|
14
20
|
/**
|
|
15
21
|
* Execute a complete run: validate inputs, prepare workspace, execute agents, and finalize report.
|
|
16
22
|
*/
|
|
17
23
|
export async function executeRunCommand(input) {
|
|
18
|
-
const { root, runsFilePath, specAbsolutePath, specDisplayPath, maxParallel: requestedMaxParallel, renderer, } = input;
|
|
24
|
+
const { root, runsFilePath, specAbsolutePath, specDisplayPath, agentIds, agentOverrideFlag, profileName, maxParallel: requestedMaxParallel, extraContextFiles = [], renderer, } = input;
|
|
25
|
+
const resolution = resolveStageCompetitors({
|
|
26
|
+
root,
|
|
27
|
+
stageId: "run",
|
|
28
|
+
cliAgentIds: agentIds,
|
|
29
|
+
cliOverrideFlag: agentOverrideFlag,
|
|
30
|
+
profileName,
|
|
31
|
+
includeDefinitions: false,
|
|
32
|
+
});
|
|
19
33
|
const validation = await validateAndPrepare({
|
|
20
34
|
root,
|
|
21
35
|
specAbsolutePath,
|
|
36
|
+
resolvedAgentIds: resolution.agentIds,
|
|
22
37
|
maxParallel: requestedMaxParallel,
|
|
23
38
|
});
|
|
24
39
|
const runId = generateRunId();
|
|
25
|
-
const
|
|
40
|
+
const startedAt = new Date().toISOString();
|
|
41
|
+
const createdAt = startedAt;
|
|
26
42
|
const repoDisplayPath = normalizePathForDisplay(relativeToRoot(root, root));
|
|
27
43
|
const { runWorkspace } = await prepareRunWorkspace({
|
|
28
44
|
root,
|
|
29
45
|
runId,
|
|
30
|
-
prompt: validation.prompt,
|
|
31
46
|
});
|
|
32
47
|
const runRoot = runWorkspace.absolute;
|
|
33
48
|
const { recordPersisted } = await initializeRunRecord({
|
|
@@ -38,7 +53,17 @@ export async function executeRunCommand(input) {
|
|
|
38
53
|
baseRevisionSha: validation.baseRevisionSha,
|
|
39
54
|
repoDisplayPath,
|
|
40
55
|
createdAt,
|
|
56
|
+
startedAt,
|
|
41
57
|
runRoot,
|
|
58
|
+
...buildPersistedExtraContextFields(extraContextFiles),
|
|
59
|
+
});
|
|
60
|
+
const teardown = createTeardownController(`run \`${runId}\``);
|
|
61
|
+
teardown.addAction({
|
|
62
|
+
key: `run-auth:${runId}`,
|
|
63
|
+
label: "session auth",
|
|
64
|
+
cleanup: async () => {
|
|
65
|
+
await teardownSessionAuth(runId);
|
|
66
|
+
},
|
|
42
67
|
});
|
|
43
68
|
const agentAbortContexts = validation.agents.map((agent) => {
|
|
44
69
|
const workspacePaths = buildAgentWorkspacePaths({
|
|
@@ -46,6 +71,7 @@ export async function executeRunCommand(input) {
|
|
|
46
71
|
runId,
|
|
47
72
|
agentId: agent.id,
|
|
48
73
|
});
|
|
74
|
+
registerRunWorkspaceTeardown(teardown, workspacePaths, agent.id);
|
|
49
75
|
return {
|
|
50
76
|
agentId: agent.id,
|
|
51
77
|
providerId: agent.provider,
|
|
@@ -56,16 +82,16 @@ export async function executeRunCommand(input) {
|
|
|
56
82
|
root,
|
|
57
83
|
runsFilePath,
|
|
58
84
|
runId,
|
|
85
|
+
teardown,
|
|
59
86
|
agents: agentAbortContexts,
|
|
60
87
|
});
|
|
61
88
|
if (renderer) {
|
|
62
89
|
renderer.begin({
|
|
63
90
|
runId,
|
|
64
91
|
status: "running",
|
|
65
|
-
specPath: specDisplayPath,
|
|
66
92
|
workspacePath: formatRunWorkspaceRelative(runId),
|
|
67
93
|
createdAt,
|
|
68
|
-
|
|
94
|
+
startedAt,
|
|
69
95
|
});
|
|
70
96
|
}
|
|
71
97
|
const mutators = createAgentRecordMutators({
|
|
@@ -76,7 +102,6 @@ export async function executeRunCommand(input) {
|
|
|
76
102
|
});
|
|
77
103
|
let agentRecords = [];
|
|
78
104
|
let executionError;
|
|
79
|
-
let cleanupError;
|
|
80
105
|
let runReport;
|
|
81
106
|
try {
|
|
82
107
|
const executionResult = await executeAgents({
|
|
@@ -84,17 +109,14 @@ export async function executeRunCommand(input) {
|
|
|
84
109
|
baseRevisionSha: validation.baseRevisionSha,
|
|
85
110
|
runId,
|
|
86
111
|
root,
|
|
87
|
-
|
|
112
|
+
specContent: validation.specContent,
|
|
113
|
+
extraContextFiles,
|
|
88
114
|
effectiveMaxParallel: validation.effectiveMaxParallel,
|
|
89
115
|
environment: validation.environment,
|
|
90
116
|
mutators,
|
|
91
117
|
});
|
|
92
118
|
agentRecords = executionResult.agentRecords;
|
|
93
|
-
const derivedRunStatus = executionResult.
|
|
94
|
-
? "failed"
|
|
95
|
-
: executionResult.agentReports.some((report) => report.status === "errored")
|
|
96
|
-
? "errored"
|
|
97
|
-
: "succeeded";
|
|
119
|
+
const derivedRunStatus = deriveRunStatusFromAgents(executionResult.agentReports.map((report) => report.status));
|
|
98
120
|
const updatedRunRecord = await rewriteRunRecord({
|
|
99
121
|
root,
|
|
100
122
|
runsFilePath,
|
|
@@ -105,13 +127,14 @@ export async function executeRunCommand(input) {
|
|
|
105
127
|
}
|
|
106
128
|
return {
|
|
107
129
|
...existing,
|
|
108
|
-
agents: agentRecords,
|
|
130
|
+
agents: mergeFinalAgentRecords(existing.agents, agentRecords),
|
|
109
131
|
status: derivedRunStatus,
|
|
132
|
+
...buildRecordLifecycleCompleteFields({ existing }),
|
|
110
133
|
deletedAt: null,
|
|
111
134
|
};
|
|
112
135
|
},
|
|
113
136
|
});
|
|
114
|
-
runReport = toRunReport(updatedRunRecord, executionResult.agentReports, executionResult.hadAgentFailure
|
|
137
|
+
runReport = toRunReport(updatedRunRecord, executionResult.agentReports, executionResult.hadAgentFailure);
|
|
115
138
|
}
|
|
116
139
|
catch (error) {
|
|
117
140
|
executionError = error;
|
|
@@ -127,8 +150,11 @@ export async function executeRunCommand(input) {
|
|
|
127
150
|
}
|
|
128
151
|
return {
|
|
129
152
|
...existing,
|
|
130
|
-
agents: agentRecords.length > 0
|
|
153
|
+
agents: agentRecords.length > 0
|
|
154
|
+
? mergeFinalAgentRecords(existing.agents, agentRecords)
|
|
155
|
+
: existing.agents,
|
|
131
156
|
status: "errored",
|
|
157
|
+
...buildRecordLifecycleCompleteFields({ existing }),
|
|
132
158
|
deletedAt: null,
|
|
133
159
|
};
|
|
134
160
|
},
|
|
@@ -140,27 +166,16 @@ export async function executeRunCommand(input) {
|
|
|
140
166
|
}
|
|
141
167
|
}
|
|
142
168
|
finally {
|
|
143
|
-
|
|
144
|
-
await teardownRunSandboxes(runId);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
cleanupError = error;
|
|
148
|
-
}
|
|
149
|
-
finally {
|
|
150
|
-
clearActiveRun(runId);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (cleanupError) {
|
|
154
|
-
if (executionError) {
|
|
155
|
-
throw new AggregateError([executionError, cleanupError], `Sandbox teardown failed after run ${runId} error`);
|
|
156
|
-
}
|
|
157
|
-
throw toError(cleanupError);
|
|
169
|
+
await finalizeActiveRun(runId);
|
|
158
170
|
}
|
|
159
171
|
if (executionError) {
|
|
160
|
-
|
|
172
|
+
if (executionError instanceof RunCommandError) {
|
|
173
|
+
throw executionError;
|
|
174
|
+
}
|
|
175
|
+
throw new RunProcessStreamError(toErrorMessage(executionError));
|
|
161
176
|
}
|
|
162
177
|
if (!runReport) {
|
|
163
|
-
throw new
|
|
178
|
+
throw new RunProcessStreamError(`Run \`${runId}\` did not produce a report.`);
|
|
164
179
|
}
|
|
165
180
|
await flushRunRecordBuffer({
|
|
166
181
|
runsFilePath,
|
|
@@ -168,3 +183,18 @@ export async function executeRunCommand(input) {
|
|
|
168
183
|
});
|
|
169
184
|
return runReport;
|
|
170
185
|
}
|
|
186
|
+
function registerRunWorkspaceTeardown(teardown, workspacePaths, agentId) {
|
|
187
|
+
teardown.addPath(workspacePaths.contextPath, `${agentId} context`);
|
|
188
|
+
teardown.addPath(workspacePaths.runtimePath, `${agentId} runtime`);
|
|
189
|
+
teardown.addPath(workspacePaths.sandboxPath, `${agentId} sandbox`);
|
|
190
|
+
}
|
|
191
|
+
function mergeFinalAgentRecords(existing, incoming) {
|
|
192
|
+
const merged = new Map();
|
|
193
|
+
for (const agent of existing) {
|
|
194
|
+
merged.set(agent.agentId, agent);
|
|
195
|
+
}
|
|
196
|
+
for (const agent of incoming) {
|
|
197
|
+
merged.set(agent.agentId, mergeAgentRecords(merged.get(agent.agentId), agent));
|
|
198
|
+
}
|
|
199
|
+
return [...merged.values()];
|
|
200
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import type { TeardownController } from "../../competition/shared/teardown.js";
|
|
2
|
+
import { getActiveTerminationStatus, RUN_ABORT_WARNING } from "../../domain/run/competition/termination-state.js";
|
|
1
3
|
import type { RunStatus } from "../../status/index.js";
|
|
2
|
-
|
|
4
|
+
import { TERMINABLE_RUN_STATUSES } from "../../status/index.js";
|
|
3
5
|
interface ActiveRunContext {
|
|
4
6
|
root: string;
|
|
5
7
|
runsFilePath: string;
|
|
6
8
|
runId: string;
|
|
9
|
+
teardown?: TeardownController;
|
|
7
10
|
agents?: readonly ActiveRunAgentContext[];
|
|
8
11
|
}
|
|
9
12
|
interface ActiveRunAgentContext {
|
|
@@ -11,9 +14,8 @@ interface ActiveRunAgentContext {
|
|
|
11
14
|
providerId?: string;
|
|
12
15
|
agentRoot: string;
|
|
13
16
|
}
|
|
14
|
-
declare const TERMINABLE_STATUSES: readonly ["failed", "aborted"];
|
|
15
17
|
export declare function registerActiveRun(context: ActiveRunContext): void;
|
|
16
18
|
export declare function clearActiveRun(runId: string): void;
|
|
17
|
-
export
|
|
18
|
-
export declare function terminateActiveRun(status: Extract<RunStatus, (typeof
|
|
19
|
-
export
|
|
19
|
+
export { getActiveTerminationStatus, RUN_ABORT_WARNING };
|
|
20
|
+
export declare function terminateActiveRun(status: Extract<RunStatus, (typeof TERMINABLE_RUN_STATUSES)[number]>): Promise<void>;
|
|
21
|
+
export declare function finalizeActiveRun(runId: string): Promise<void>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { runTeardown } from "../../competition/shared/teardown.js";
|
|
2
|
+
import { getActiveTerminationStatus, RUN_ABORT_WARNING, setActiveTerminationStatus, } from "../../domain/run/competition/termination-state.js";
|
|
3
|
+
import { disposeRunRecordBuffer, getRunRecordSnapshot, rewriteRunRecord, } from "../../domain/run/persistence/adapter.js";
|
|
4
|
+
import { buildOperationLifecycleCompleteFields, buildRecordLifecycleCompleteFields, } from "../../domain/shared/lifecycle.js";
|
|
5
|
+
import { TERMINABLE_RUN_STATUSES } from "../../status/index.js";
|
|
2
6
|
import { toErrorMessage } from "../../utils/errors.js";
|
|
3
7
|
import { preserveProviderChatTranscripts } from "../../workspace/chat/artifacts.js";
|
|
4
|
-
import { teardownRunSandboxes } from "./sandbox-registry.js";
|
|
5
|
-
export const RUN_ABORT_WARNING = "Run aborted before agent completed.";
|
|
6
8
|
let activeRun;
|
|
7
9
|
let terminationInFlight = false;
|
|
8
|
-
let activeTerminationStatus;
|
|
9
|
-
const TERMINABLE_STATUSES = ["failed", "aborted"];
|
|
10
10
|
export function registerActiveRun(context) {
|
|
11
11
|
activeRun = context;
|
|
12
12
|
}
|
|
@@ -18,25 +18,17 @@ export function clearActiveRun(runId) {
|
|
|
18
18
|
activeRun = undefined;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
export
|
|
22
|
-
if (!terminationInFlight) {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
if (!activeRun || activeRun.runId !== runId) {
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
return activeTerminationStatus;
|
|
29
|
-
}
|
|
21
|
+
export { getActiveTerminationStatus, RUN_ABORT_WARNING };
|
|
30
22
|
export async function terminateActiveRun(status) {
|
|
31
|
-
if (!
|
|
23
|
+
if (!TERMINABLE_RUN_STATUSES.includes(status)) {
|
|
32
24
|
return;
|
|
33
25
|
}
|
|
34
26
|
if (!activeRun || terminationInFlight) {
|
|
35
27
|
return;
|
|
36
28
|
}
|
|
37
29
|
terminationInFlight = true;
|
|
38
|
-
activeTerminationStatus = status;
|
|
39
30
|
const context = activeRun;
|
|
31
|
+
setActiveTerminationStatus(context.runId, status);
|
|
40
32
|
let finalized = false;
|
|
41
33
|
const chatArtifactsByAgent = new Map();
|
|
42
34
|
let persistenceError;
|
|
@@ -47,12 +39,12 @@ export async function terminateActiveRun(status) {
|
|
|
47
39
|
await rewriteRunRecord({
|
|
48
40
|
...context,
|
|
49
41
|
mutate: (existing) => {
|
|
42
|
+
const completedAt = new Date().toISOString();
|
|
50
43
|
const runInProgress = existing.status === "running" || existing.status === "queued";
|
|
51
44
|
const runStatusNeedsUpdate = runInProgress && existing.status !== status;
|
|
52
45
|
let agentsChanged = false;
|
|
53
46
|
let agents = existing.agents;
|
|
54
47
|
if (status === "aborted") {
|
|
55
|
-
const abortedAt = new Date().toISOString();
|
|
56
48
|
const abortWarning = RUN_ABORT_WARNING;
|
|
57
49
|
agents = existing.agents.map((agent) => {
|
|
58
50
|
if (agent.status !== "running" && agent.status !== "queued") {
|
|
@@ -74,8 +66,11 @@ export async function terminateActiveRun(status) {
|
|
|
74
66
|
return {
|
|
75
67
|
...agent,
|
|
76
68
|
status: "aborted",
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
...buildOperationLifecycleCompleteFields({
|
|
70
|
+
existing: agent,
|
|
71
|
+
startedAt: agent.startedAt ?? completedAt,
|
|
72
|
+
completedAt,
|
|
73
|
+
}),
|
|
79
74
|
warnings: nextWarnings,
|
|
80
75
|
artifacts: nextArtifacts,
|
|
81
76
|
};
|
|
@@ -84,10 +79,21 @@ export async function terminateActiveRun(status) {
|
|
|
84
79
|
if (!runStatusNeedsUpdate && !agentsChanged) {
|
|
85
80
|
return existing;
|
|
86
81
|
}
|
|
82
|
+
if (runStatusNeedsUpdate) {
|
|
83
|
+
return {
|
|
84
|
+
...existing,
|
|
85
|
+
status,
|
|
86
|
+
...buildRecordLifecycleCompleteFields({
|
|
87
|
+
existing,
|
|
88
|
+
startedAt: existing.startedAt ?? completedAt,
|
|
89
|
+
completedAt,
|
|
90
|
+
}),
|
|
91
|
+
deletedAt: null,
|
|
92
|
+
agents,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
87
95
|
return {
|
|
88
96
|
...existing,
|
|
89
|
-
status: runStatusNeedsUpdate ? status : existing.status,
|
|
90
|
-
deletedAt: runStatusNeedsUpdate ? null : existing.deletedAt,
|
|
91
97
|
agents,
|
|
92
98
|
};
|
|
93
99
|
},
|
|
@@ -115,17 +121,30 @@ export async function terminateActiveRun(status) {
|
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
try {
|
|
118
|
-
await
|
|
124
|
+
await finalizeRegisteredRunTeardown(context);
|
|
119
125
|
}
|
|
120
126
|
finally {
|
|
121
127
|
terminationInFlight = false;
|
|
122
|
-
|
|
128
|
+
setActiveTerminationStatus(context.runId, undefined);
|
|
123
129
|
activeRun = undefined;
|
|
124
130
|
}
|
|
125
131
|
if (persistenceError) {
|
|
126
132
|
throw persistenceError;
|
|
127
133
|
}
|
|
128
134
|
}
|
|
135
|
+
export async function finalizeActiveRun(runId) {
|
|
136
|
+
if (!activeRun || activeRun.runId !== runId) {
|
|
137
|
+
clearActiveRun(runId);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const context = activeRun;
|
|
141
|
+
try {
|
|
142
|
+
await finalizeRegisteredRunTeardown(context);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
clearActiveRun(runId);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
129
148
|
async function captureChatArtifactsBeforeAbort(context, output) {
|
|
130
149
|
const agentContexts = context.agents ?? [];
|
|
131
150
|
if (agentContexts.length === 0) {
|
|
@@ -184,3 +203,6 @@ async function captureChatArtifactsBeforeAbort(context, output) {
|
|
|
184
203
|
}
|
|
185
204
|
}
|
|
186
205
|
}
|
|
206
|
+
async function finalizeRegisteredRunTeardown(context) {
|
|
207
|
+
await runTeardown(context.teardown);
|
|
208
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RunRecordInitResult } from "
|
|
1
|
+
import type { RunRecordInitResult } from "../../domain/run/competition/phases.js";
|
|
2
2
|
export interface RecordInitInput {
|
|
3
3
|
readonly root: string;
|
|
4
4
|
readonly runsFilePath: string;
|
|
@@ -7,7 +7,10 @@ export interface RecordInitInput {
|
|
|
7
7
|
readonly baseRevisionSha: string;
|
|
8
8
|
readonly repoDisplayPath: string;
|
|
9
9
|
readonly createdAt: string;
|
|
10
|
+
readonly startedAt: string;
|
|
10
11
|
readonly runRoot: string;
|
|
12
|
+
readonly extraContext?: string[];
|
|
13
|
+
readonly extraContextMetadata?: import("../../extra-context/contract.js").PersistedExtraContextMetadataEntry[];
|
|
11
14
|
}
|
|
12
15
|
/**
|
|
13
16
|
* Initialize and persist the initial run record.
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { appendRunRecord } from "../../
|
|
1
|
+
import { appendRunRecord } from "../../domain/run/persistence/adapter.js";
|
|
2
2
|
import { normalizePathForDisplay } from "../../utils/path.js";
|
|
3
3
|
import { cleanupRunWorkspace } from "../../workspace/cleanup.js";
|
|
4
4
|
/**
|
|
5
5
|
* Initialize and persist the initial run record.
|
|
6
6
|
*/
|
|
7
7
|
export async function initializeRunRecord(input) {
|
|
8
|
-
const { root, runsFilePath, runId, specDisplayPath, baseRevisionSha, repoDisplayPath, createdAt, runRoot, } = input;
|
|
8
|
+
const { root, runsFilePath, runId, specDisplayPath, baseRevisionSha, repoDisplayPath, createdAt, startedAt, runRoot, extraContext, extraContextMetadata, } = input;
|
|
9
9
|
const initialRecord = {
|
|
10
10
|
runId,
|
|
11
11
|
spec: {
|
|
12
12
|
path: normalizePathForDisplay(specDisplayPath),
|
|
13
13
|
},
|
|
14
|
+
extraContext,
|
|
15
|
+
extraContextMetadata,
|
|
14
16
|
createdAt,
|
|
17
|
+
startedAt,
|
|
15
18
|
baseRevisionSha,
|
|
16
19
|
rootPath: repoDisplayPath,
|
|
17
20
|
agents: [],
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { main } from "../../../agents/runtime/shim/run-agent-shim.js";
|
|
2
|
+
export { main };
|