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,215 @@
|
|
|
1
|
+
import { verifyAgentProviders } from "../../agents/runtime/auth.js";
|
|
2
|
+
import { executeCompetitionWithAdapter } from "../../competition/command-adapter.js";
|
|
3
|
+
import { createTeardownController } from "../../competition/shared/teardown.js";
|
|
4
|
+
import { AgentNotFoundError } from "../../configs/agents/errors.js";
|
|
5
|
+
import { loadEnvironmentConfig } from "../../configs/environment/loader.js";
|
|
6
|
+
import { createMessageCompetitionAdapter, } from "../../domain/message/competition/adapter.js";
|
|
7
|
+
import { createMessageRecordMutators } from "../../domain/message/model/mutators.js";
|
|
8
|
+
import { deriveMessageStatusFromRecipients, } from "../../domain/message/model/types.js";
|
|
9
|
+
import { appendMessageRecord, flushMessageRecordBuffer, } from "../../domain/message/persistence/adapter.js";
|
|
10
|
+
import { buildPersistedExtraContextFields } from "../../extra-context/contract.js";
|
|
11
|
+
import { toErrorMessage } from "../../utils/errors.js";
|
|
12
|
+
import { getHeadRevision } from "../../utils/git.js";
|
|
13
|
+
import { VORATIQ_MESSAGE_DIR, VORATIQ_REDUCTION_DIR, VORATIQ_RUN_DIR, VORATIQ_SPEC_DIR, VORATIQ_VERIFICATION_DIR, } from "../../workspace/structure.js";
|
|
14
|
+
import { resolveEffectiveMaxParallel } from "../shared/max-parallel.js";
|
|
15
|
+
import { resolveStageCompetitors } from "../shared/resolve-stage-competitors.js";
|
|
16
|
+
import { generateSessionId } from "../shared/session-id.js";
|
|
17
|
+
import { MessageAgentNotFoundError, MessageGenerationFailedError, MessageInvocationContextError, } from "./errors.js";
|
|
18
|
+
import { finalizeActiveMessage, registerActiveMessage } from "./lifecycle.js";
|
|
19
|
+
export async function executeMessageCommand(input) {
|
|
20
|
+
assertMessageInvocationContext();
|
|
21
|
+
const { root, messagesFilePath, prompt, agentIds, agentOverrideFlag, profileName, maxParallel: requestedMaxParallel, extraContextFiles = [], sourceInteractiveSessionId, renderer, } = input;
|
|
22
|
+
let competitors;
|
|
23
|
+
try {
|
|
24
|
+
const resolution = resolveStageCompetitors({
|
|
25
|
+
root,
|
|
26
|
+
stageId: "message",
|
|
27
|
+
cliAgentIds: agentIds,
|
|
28
|
+
cliOverrideFlag: agentOverrideFlag,
|
|
29
|
+
profileName,
|
|
30
|
+
});
|
|
31
|
+
competitors = resolution.competitors;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof AgentNotFoundError) {
|
|
35
|
+
throw new MessageAgentNotFoundError(error.agentId);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
await assertMessagePreflight(competitors);
|
|
40
|
+
const environment = loadEnvironmentConfig({ root });
|
|
41
|
+
const baseRevisionSha = await getHeadRevision(root);
|
|
42
|
+
const messageId = generateSessionId();
|
|
43
|
+
const createdAt = new Date().toISOString();
|
|
44
|
+
const startedAt = createdAt;
|
|
45
|
+
const effectiveMaxParallel = resolveEffectiveMaxParallel({
|
|
46
|
+
competitorCount: competitors.length,
|
|
47
|
+
requestedMaxParallel,
|
|
48
|
+
});
|
|
49
|
+
const initialRecipients = competitors.map((agent) => ({
|
|
50
|
+
agentId: agent.id,
|
|
51
|
+
status: "queued",
|
|
52
|
+
}));
|
|
53
|
+
await appendMessageRecord({
|
|
54
|
+
root,
|
|
55
|
+
messagesFilePath,
|
|
56
|
+
record: {
|
|
57
|
+
sessionId: messageId,
|
|
58
|
+
createdAt,
|
|
59
|
+
startedAt,
|
|
60
|
+
status: "running",
|
|
61
|
+
baseRevisionSha,
|
|
62
|
+
prompt,
|
|
63
|
+
recipients: initialRecipients,
|
|
64
|
+
...buildPersistedExtraContextFields(extraContextFiles),
|
|
65
|
+
...(sourceInteractiveSessionId ? { sourceInteractiveSessionId } : {}),
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
renderer?.begin({
|
|
69
|
+
messageId,
|
|
70
|
+
createdAt,
|
|
71
|
+
startedAt,
|
|
72
|
+
workspacePath: `.voratiq/message/sessions/${messageId}`,
|
|
73
|
+
status: "running",
|
|
74
|
+
});
|
|
75
|
+
const teardown = createTeardownController(`message \`${messageId}\``);
|
|
76
|
+
registerActiveMessage({
|
|
77
|
+
root,
|
|
78
|
+
messagesFilePath,
|
|
79
|
+
messageId,
|
|
80
|
+
teardown,
|
|
81
|
+
});
|
|
82
|
+
const mutators = createMessageRecordMutators({
|
|
83
|
+
root,
|
|
84
|
+
messagesFilePath,
|
|
85
|
+
messageId,
|
|
86
|
+
});
|
|
87
|
+
let executions;
|
|
88
|
+
try {
|
|
89
|
+
const baseAdapter = createMessageCompetitionAdapter({
|
|
90
|
+
root,
|
|
91
|
+
messageId,
|
|
92
|
+
prompt,
|
|
93
|
+
environment,
|
|
94
|
+
extraContextFiles,
|
|
95
|
+
teardown,
|
|
96
|
+
});
|
|
97
|
+
executions = await executeCompetitionWithAdapter({
|
|
98
|
+
candidates: [...competitors],
|
|
99
|
+
maxParallel: effectiveMaxParallel,
|
|
100
|
+
adapter: {
|
|
101
|
+
...baseAdapter,
|
|
102
|
+
onPreparationFailure: async (result) => {
|
|
103
|
+
const recipient = toRecipientEntry(result);
|
|
104
|
+
await mutators.recordRecipientSnapshot(recipient);
|
|
105
|
+
renderer?.update(recipient);
|
|
106
|
+
},
|
|
107
|
+
onCandidateRunning: async (prepared) => {
|
|
108
|
+
const runningAt = new Date().toISOString();
|
|
109
|
+
const recipient = {
|
|
110
|
+
agentId: prepared.candidate.id,
|
|
111
|
+
status: "running",
|
|
112
|
+
startedAt: runningAt,
|
|
113
|
+
};
|
|
114
|
+
await mutators.recordRecipientRunning(recipient);
|
|
115
|
+
renderer?.update(recipient);
|
|
116
|
+
},
|
|
117
|
+
onCandidateCompleted: async (_prepared, result) => {
|
|
118
|
+
const recipient = toRecipientEntry(result);
|
|
119
|
+
await mutators.recordRecipientSnapshot(recipient);
|
|
120
|
+
renderer?.update(recipient);
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
const persistedRecord = await mutators.readRecord();
|
|
125
|
+
if (!persistedRecord) {
|
|
126
|
+
throw new MessageGenerationFailedError([
|
|
127
|
+
`Message session \`${messageId}\` record not found after execution.`,
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
const status = deriveMessageStatusFromRecipients(persistedRecord.recipients.map((recipient) => recipient.status));
|
|
131
|
+
const completedRecord = await mutators.completeMessage({
|
|
132
|
+
status,
|
|
133
|
+
error: status === "failed"
|
|
134
|
+
? collectRecipientErrors(persistedRecord.recipients)
|
|
135
|
+
: undefined,
|
|
136
|
+
});
|
|
137
|
+
await flushMessageRecordBuffer({
|
|
138
|
+
messagesFilePath,
|
|
139
|
+
sessionId: messageId,
|
|
140
|
+
});
|
|
141
|
+
renderer?.complete(completedRecord.status, {
|
|
142
|
+
startedAt: completedRecord.startedAt,
|
|
143
|
+
completedAt: completedRecord.completedAt,
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
messageId,
|
|
147
|
+
record: completedRecord,
|
|
148
|
+
recipients: completedRecord.recipients,
|
|
149
|
+
executions,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
await mutators
|
|
154
|
+
.completeMessage({
|
|
155
|
+
status: "failed",
|
|
156
|
+
error: toErrorMessage(error),
|
|
157
|
+
})
|
|
158
|
+
.then((failedRecord) => {
|
|
159
|
+
renderer?.complete(failedRecord.status, {
|
|
160
|
+
startedAt: failedRecord.startedAt,
|
|
161
|
+
completedAt: failedRecord.completedAt,
|
|
162
|
+
});
|
|
163
|
+
})
|
|
164
|
+
.catch(() => {
|
|
165
|
+
renderer?.complete("failed");
|
|
166
|
+
});
|
|
167
|
+
await flushMessageRecordBuffer({
|
|
168
|
+
messagesFilePath,
|
|
169
|
+
sessionId: messageId,
|
|
170
|
+
}).catch(() => { });
|
|
171
|
+
throw new MessageGenerationFailedError([toErrorMessage(error)]);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
await finalizeActiveMessage(messageId);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function toRecipientEntry(execution) {
|
|
178
|
+
return {
|
|
179
|
+
agentId: execution.agentId,
|
|
180
|
+
status: execution.status,
|
|
181
|
+
startedAt: execution.startedAt,
|
|
182
|
+
completedAt: execution.completedAt,
|
|
183
|
+
outputPath: execution.outputPath,
|
|
184
|
+
stdoutPath: execution.stdoutPath,
|
|
185
|
+
stderrPath: execution.stderrPath,
|
|
186
|
+
tokenUsage: execution.tokenUsage,
|
|
187
|
+
error: execution.error ?? null,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
async function assertMessagePreflight(agents) {
|
|
191
|
+
const providerIssues = await verifyAgentProviders(agents.map((agent) => ({ id: agent.id, provider: agent.provider })));
|
|
192
|
+
if (providerIssues.length > 0) {
|
|
193
|
+
throw new MessageGenerationFailedError(providerIssues.map((issue) => `${issue.agentId}: ${issue.message}`));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function assertMessageInvocationContext() {
|
|
197
|
+
const cwd = process.cwd().replace(/\\/gu, "/");
|
|
198
|
+
const batchDomains = [
|
|
199
|
+
VORATIQ_SPEC_DIR,
|
|
200
|
+
VORATIQ_RUN_DIR,
|
|
201
|
+
VORATIQ_REDUCTION_DIR,
|
|
202
|
+
VORATIQ_VERIFICATION_DIR,
|
|
203
|
+
VORATIQ_MESSAGE_DIR,
|
|
204
|
+
];
|
|
205
|
+
const batchWorkspacePattern = new RegExp(`/\\.voratiq/(?:${batchDomains.join("|")})/sessions/[^/]+/[^/]+/workspace(?:/|$)`, "u");
|
|
206
|
+
if (batchWorkspacePattern.test(cwd)) {
|
|
207
|
+
throw new MessageInvocationContextError();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function collectRecipientErrors(recipients) {
|
|
211
|
+
const details = recipients
|
|
212
|
+
.filter((recipient) => recipient.error)
|
|
213
|
+
.map((recipient) => `${recipient.agentId}: ${recipient.error}`);
|
|
214
|
+
return details.length > 0 ? details.join("; ") : undefined;
|
|
215
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class MessageAgentNotFoundError extends Error {
|
|
2
|
+
constructor(agentId: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class MessageGenerationFailedError extends Error {
|
|
5
|
+
constructor(details: readonly string[]);
|
|
6
|
+
}
|
|
7
|
+
export declare class MessageInvocationContextError extends Error {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class MessageAgentNotFoundError extends Error {
|
|
2
|
+
constructor(agentId) {
|
|
3
|
+
super(`Message agent not found: ${agentId}`);
|
|
4
|
+
this.name = "MessageAgentNotFoundError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class MessageGenerationFailedError extends Error {
|
|
8
|
+
constructor(details) {
|
|
9
|
+
super(details.length > 0
|
|
10
|
+
? `Message execution failed: ${details.join("; ")}`
|
|
11
|
+
: "Message execution failed.");
|
|
12
|
+
this.name = "MessageGenerationFailedError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class MessageInvocationContextError extends Error {
|
|
16
|
+
constructor() {
|
|
17
|
+
super("`message` cannot be invoked from inside a batch agent workspace.");
|
|
18
|
+
this.name = "MessageInvocationContextError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TeardownController } from "../../competition/shared/teardown.js";
|
|
2
|
+
export declare const MESSAGE_ABORT_DETAIL = "Message generation aborted before completion.";
|
|
3
|
+
export declare const MESSAGE_FAILURE_DETAIL = "Message generation failed.";
|
|
4
|
+
interface ActiveMessageContext {
|
|
5
|
+
root: string;
|
|
6
|
+
messagesFilePath: string;
|
|
7
|
+
messageId: string;
|
|
8
|
+
teardown?: TeardownController;
|
|
9
|
+
}
|
|
10
|
+
export declare function registerActiveMessage(context: ActiveMessageContext): void;
|
|
11
|
+
export declare function clearActiveMessage(messageId: string): void;
|
|
12
|
+
export declare function terminateActiveMessage(status: "failed" | "aborted"): Promise<void>;
|
|
13
|
+
export declare function finalizeActiveMessage(messageId: string): Promise<void>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { runTeardown } from "../../competition/shared/teardown.js";
|
|
2
|
+
import { flushMessageRecordBuffer, readMessageRecords, rewriteMessageRecord, } from "../../domain/message/persistence/adapter.js";
|
|
3
|
+
import { buildOperationLifecycleCompleteFields, buildRecordLifecycleCompleteFields, } from "../../domain/shared/lifecycle.js";
|
|
4
|
+
import { toErrorMessage } from "../../utils/errors.js";
|
|
5
|
+
export const MESSAGE_ABORT_DETAIL = "Message generation aborted before completion.";
|
|
6
|
+
export const MESSAGE_FAILURE_DETAIL = "Message generation failed.";
|
|
7
|
+
let activeMessage;
|
|
8
|
+
let terminationInFlight = false;
|
|
9
|
+
export function registerActiveMessage(context) {
|
|
10
|
+
activeMessage = context;
|
|
11
|
+
}
|
|
12
|
+
export function clearActiveMessage(messageId) {
|
|
13
|
+
if (activeMessage?.messageId !== messageId) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (!terminationInFlight) {
|
|
17
|
+
activeMessage = undefined;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function terminateActiveMessage(status) {
|
|
21
|
+
if (!activeMessage || terminationInFlight) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
terminationInFlight = true;
|
|
25
|
+
const context = activeMessage;
|
|
26
|
+
let persistenceError;
|
|
27
|
+
try {
|
|
28
|
+
const existingRecord = await readMessageRecords({
|
|
29
|
+
root: context.root,
|
|
30
|
+
messagesFilePath: context.messagesFilePath,
|
|
31
|
+
limit: 1,
|
|
32
|
+
predicate: (record) => record.sessionId === context.messageId,
|
|
33
|
+
}).then((records) => records[0]);
|
|
34
|
+
if (!existingRecord) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const completedAt = new Date().toISOString();
|
|
38
|
+
const detail = status === "aborted" ? MESSAGE_ABORT_DETAIL : MESSAGE_FAILURE_DETAIL;
|
|
39
|
+
await rewriteMessageRecord({
|
|
40
|
+
root: context.root,
|
|
41
|
+
messagesFilePath: context.messagesFilePath,
|
|
42
|
+
sessionId: context.messageId,
|
|
43
|
+
mutate: (existing) => {
|
|
44
|
+
const recipients = existing.recipients.map((recipient) => finalizeMessageRecipient({
|
|
45
|
+
recipient,
|
|
46
|
+
status,
|
|
47
|
+
completedAt,
|
|
48
|
+
detail,
|
|
49
|
+
}));
|
|
50
|
+
const inProgress = existing.status === "queued" || existing.status === "running";
|
|
51
|
+
if (!inProgress) {
|
|
52
|
+
if (recipients.every((recipient, index) => recipient === existing.recipients[index])) {
|
|
53
|
+
return existing;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
...existing,
|
|
57
|
+
recipients,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
...existing,
|
|
62
|
+
status,
|
|
63
|
+
recipients,
|
|
64
|
+
...buildRecordLifecycleCompleteFields({
|
|
65
|
+
existing,
|
|
66
|
+
startedAt: existing.startedAt ?? completedAt,
|
|
67
|
+
completedAt,
|
|
68
|
+
}),
|
|
69
|
+
error: existing.error ?? detail,
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
forceFlush: true,
|
|
73
|
+
});
|
|
74
|
+
await flushMessageRecordBuffer({
|
|
75
|
+
messagesFilePath: context.messagesFilePath,
|
|
76
|
+
sessionId: context.messageId,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
persistenceError =
|
|
81
|
+
error instanceof Error ? error : new Error(toErrorMessage(error));
|
|
82
|
+
console.error(`[voratiq] Failed to finalize message ${context.messageId}: ${toErrorMessage(error)}`);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
await finalizeRegisteredMessageTeardown(context);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
terminationInFlight = false;
|
|
90
|
+
activeMessage = undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (persistenceError) {
|
|
94
|
+
throw persistenceError;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export async function finalizeActiveMessage(messageId) {
|
|
98
|
+
if (!activeMessage || activeMessage.messageId !== messageId) {
|
|
99
|
+
clearActiveMessage(messageId);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const context = activeMessage;
|
|
103
|
+
try {
|
|
104
|
+
await finalizeRegisteredMessageTeardown(context);
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
clearActiveMessage(messageId);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function finalizeMessageRecipient(options) {
|
|
111
|
+
const { recipient, status, completedAt, detail } = options;
|
|
112
|
+
if (recipient.status !== "queued" && recipient.status !== "running") {
|
|
113
|
+
return recipient;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
...recipient,
|
|
117
|
+
status,
|
|
118
|
+
...buildOperationLifecycleCompleteFields({
|
|
119
|
+
existing: recipient,
|
|
120
|
+
startedAt: recipient.startedAt ?? completedAt,
|
|
121
|
+
completedAt,
|
|
122
|
+
}),
|
|
123
|
+
error: recipient.error ?? detail,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async function finalizeRegisteredMessageTeardown(context) {
|
|
127
|
+
await runTeardown(context.teardown);
|
|
128
|
+
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import type { PruneCommandInput, PruneResult } from "./types.js";
|
|
1
|
+
import type { PruneAllCommandInput, PruneAllResult, PruneCommandInput, PruneResult } from "./types.js";
|
|
2
2
|
export declare function executePruneCommand(input: PruneCommandInput): Promise<PruneResult>;
|
|
3
|
+
export declare function executePruneAllCommand(input: PruneAllCommandInput): Promise<PruneAllResult>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
2
|
import { NonInteractiveShellError } from "../../cli/errors.js";
|
|
3
|
-
import { RunRecordNotFoundError, RunRecordParseError, } from "../../
|
|
4
|
-
import { rewriteRunRecord, RUN_RECORD_FILENAME, } from "../../
|
|
5
|
-
import { buildPruneConfirmationPreface } from "../../render/transcripts/prune.js";
|
|
3
|
+
import { RunRecordNotFoundError, RunRecordParseError, } from "../../domain/run/model/errors.js";
|
|
4
|
+
import { fetchRunsSafely, rewriteRunRecord, RUN_RECORD_FILENAME, } from "../../domain/run/persistence/adapter.js";
|
|
5
|
+
import { buildPruneAllConfirmationPreface, buildPruneConfirmationPreface, } from "../../render/transcripts/prune.js";
|
|
6
6
|
import { toErrorMessage } from "../../utils/errors.js";
|
|
7
7
|
import { pathExists } from "../../utils/fs.js";
|
|
8
8
|
import { getGitStderr, runGitCommand } from "../../utils/git.js";
|
|
9
9
|
import { normalizePathForDisplay, resolveDisplayPath, resolvePath, } from "../../utils/path.js";
|
|
10
10
|
import { deriveAgentBranches, removeRunDirectory, removeWorkspaceEntry, } from "../../workspace/prune.js";
|
|
11
|
-
import { buildAgentArtifactPaths, getAgentDirectoryPath,
|
|
11
|
+
import { buildAgentArtifactPaths, getAgentDirectoryPath, getAgentWorkspaceDirectoryPath, getRunDirectoryPath, resolveWorkspacePath, VORATIQ_RUN_SESSIONS_DIR, } from "../../workspace/structure.js";
|
|
12
12
|
import { fetchRunSafely } from "../fetch.js";
|
|
13
13
|
import { PruneBranchDeletionError, PruneRunDeletedError, RunMetadataMissingError, } from "./errors.js";
|
|
14
14
|
export async function executePruneCommand(input) {
|
|
@@ -40,7 +40,6 @@ export async function executePruneCommand(input) {
|
|
|
40
40
|
defaultValue: false,
|
|
41
41
|
prefaceLines: buildPruneConfirmationPreface({
|
|
42
42
|
runId: runRecord.runId,
|
|
43
|
-
specPath: runRecord.spec.path,
|
|
44
43
|
workspaces: workspaceTargets.map((target) => target.displayPath),
|
|
45
44
|
directories: agentDirectories,
|
|
46
45
|
branches,
|
|
@@ -103,6 +102,52 @@ export async function executePruneCommand(input) {
|
|
|
103
102
|
branches: branchSummary,
|
|
104
103
|
};
|
|
105
104
|
}
|
|
105
|
+
export async function executePruneAllCommand(input) {
|
|
106
|
+
const { root, runsFilePath, confirm, clock, purge: purgeInput } = input;
|
|
107
|
+
const purge = purgeInput ?? false;
|
|
108
|
+
if (!confirm) {
|
|
109
|
+
throw new NonInteractiveShellError();
|
|
110
|
+
}
|
|
111
|
+
if (!(await pathExists(runsFilePath))) {
|
|
112
|
+
return { status: "noop", runIds: [] };
|
|
113
|
+
}
|
|
114
|
+
const { records, warnings } = await fetchRunsSafely({
|
|
115
|
+
root,
|
|
116
|
+
runsFilePath,
|
|
117
|
+
});
|
|
118
|
+
const firstWarning = warnings[0];
|
|
119
|
+
if (firstWarning) {
|
|
120
|
+
if (firstWarning.kind === "parse-error") {
|
|
121
|
+
throw new RunRecordParseError(firstWarning.displayPath, firstWarning.details);
|
|
122
|
+
}
|
|
123
|
+
throw new RunMetadataMissingError(firstWarning.runId);
|
|
124
|
+
}
|
|
125
|
+
if (records.length === 0) {
|
|
126
|
+
return { status: "noop", runIds: [] };
|
|
127
|
+
}
|
|
128
|
+
const eligibleRuns = sortRunRecordsByCreatedAt(records);
|
|
129
|
+
const runIds = eligibleRuns.map((record) => record.runId);
|
|
130
|
+
const confirmationAccepted = await confirm({
|
|
131
|
+
message: "Proceed?",
|
|
132
|
+
defaultValue: false,
|
|
133
|
+
prefaceLines: buildPruneAllConfirmationPreface({
|
|
134
|
+
records: eligibleRuns,
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
if (!confirmationAccepted) {
|
|
138
|
+
return { status: "aborted", runIds };
|
|
139
|
+
}
|
|
140
|
+
for (const runId of runIds) {
|
|
141
|
+
await executePruneCommand({
|
|
142
|
+
...input,
|
|
143
|
+
runId,
|
|
144
|
+
confirm: () => Promise.resolve(true),
|
|
145
|
+
purge,
|
|
146
|
+
clock,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return { status: "pruned", runIds };
|
|
150
|
+
}
|
|
106
151
|
function buildAgentDirectoryDisplayPaths(options) {
|
|
107
152
|
const { runRecord } = options;
|
|
108
153
|
const unique = new Set();
|
|
@@ -174,10 +219,6 @@ function buildArtifactTargets(options) {
|
|
|
174
219
|
register(artifactPaths.diffPath, "file");
|
|
175
220
|
register(artifactPaths.summaryPath, "file");
|
|
176
221
|
register(artifactPaths.chatPath, "file");
|
|
177
|
-
const hasEvalLogs = (agent.evals ?? []).some((evaluation) => evaluation.hasLog);
|
|
178
|
-
if (hasEvalLogs) {
|
|
179
|
-
register(getAgentEvalsDirectoryPath(runRecord.runId, agent.agentId), "directory");
|
|
180
|
-
}
|
|
181
222
|
}
|
|
182
223
|
return Array.from(entries.values()).sort((a, b) => a.displayPath.localeCompare(b.displayPath));
|
|
183
224
|
}
|
|
@@ -264,7 +305,7 @@ async function pruneArtifacts(options) {
|
|
|
264
305
|
}
|
|
265
306
|
async function purgeRunDirectoryExceptRecord(options) {
|
|
266
307
|
const { root, runRecord } = options;
|
|
267
|
-
const runDir = resolveWorkspacePath(root,
|
|
308
|
+
const runDir = resolveWorkspacePath(root, VORATIQ_RUN_SESSIONS_DIR, runRecord.runId);
|
|
268
309
|
if (!(await pathExists(runDir))) {
|
|
269
310
|
return;
|
|
270
311
|
}
|
|
@@ -311,6 +352,16 @@ async function branchExists(root, branch) {
|
|
|
311
352
|
});
|
|
312
353
|
return output.length > 0;
|
|
313
354
|
}
|
|
355
|
+
function sortRunRecordsByCreatedAt(records) {
|
|
356
|
+
return Array.from(records).sort((a, b) => {
|
|
357
|
+
const aTimestamp = Date.parse(a.createdAt);
|
|
358
|
+
const bTimestamp = Date.parse(b.createdAt);
|
|
359
|
+
if (Number.isNaN(aTimestamp) || Number.isNaN(bTimestamp)) {
|
|
360
|
+
return a.createdAt.localeCompare(b.createdAt);
|
|
361
|
+
}
|
|
362
|
+
return aTimestamp - bTimestamp;
|
|
363
|
+
});
|
|
364
|
+
}
|
|
314
365
|
async function rewriteHistory(options) {
|
|
315
366
|
const { root, runsFilePath, runId, deletedAt } = options;
|
|
316
367
|
try {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CliError } from "../../cli/errors.js";
|
|
2
2
|
export declare class PruneError extends CliError {
|
|
3
|
-
constructor(
|
|
3
|
+
constructor(headline: string, detailLines?: readonly string[], hintLines?: readonly string[]);
|
|
4
4
|
}
|
|
5
5
|
export declare class RunMetadataMissingError extends PruneError {
|
|
6
6
|
readonly runId: string;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CliError } from "../../cli/errors.js";
|
|
2
2
|
export class PruneError extends CliError {
|
|
3
|
-
constructor(
|
|
4
|
-
super(
|
|
3
|
+
constructor(headline, detailLines = [], hintLines = []) {
|
|
4
|
+
super(headline, detailLines, hintLines);
|
|
5
5
|
this.name = "PruneError";
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
export class RunMetadataMissingError extends PruneError {
|
|
9
9
|
runId;
|
|
10
10
|
constructor(runId) {
|
|
11
|
-
super(`Run metadata for
|
|
11
|
+
super(`Run metadata for \`${runId}\` is missing.`, [`Expected \`record.json\` under \`run/sessions/${runId}/\`.`], ["Re-run the spec to regenerate this run before pruning."]);
|
|
12
12
|
this.runId = runId;
|
|
13
13
|
this.name = "RunMetadataMissingError";
|
|
14
14
|
}
|
|
@@ -17,7 +17,7 @@ export class PruneBranchDeletionError extends PruneError {
|
|
|
17
17
|
branch;
|
|
18
18
|
detail;
|
|
19
19
|
constructor(branch, detail) {
|
|
20
|
-
super(`Failed to delete branch
|
|
20
|
+
super(`Failed to delete branch \`${branch}\`.`, [detail], ["Delete the branch manually, then retry prune."]);
|
|
21
21
|
this.branch = branch;
|
|
22
22
|
this.detail = detail;
|
|
23
23
|
this.name = "PruneBranchDeletionError";
|
|
@@ -26,7 +26,7 @@ export class PruneBranchDeletionError extends PruneError {
|
|
|
26
26
|
export class PruneRunDeletedError extends PruneError {
|
|
27
27
|
runId;
|
|
28
28
|
constructor(runId) {
|
|
29
|
-
super(`Run
|
|
29
|
+
super(`Run \`${runId}\` has been deleted.`, [], ["Select a different run to prune."]);
|
|
30
30
|
this.runId = runId;
|
|
31
31
|
this.name = "PruneRunDeletedError";
|
|
32
32
|
}
|
|
@@ -9,6 +9,14 @@ export interface PruneCommandInput {
|
|
|
9
9
|
purge?: boolean;
|
|
10
10
|
clock?: () => Date;
|
|
11
11
|
}
|
|
12
|
+
export interface PruneAllCommandInput {
|
|
13
|
+
root: string;
|
|
14
|
+
runsDir: string;
|
|
15
|
+
runsFilePath: string;
|
|
16
|
+
confirm: PruneConfirmationHandler;
|
|
17
|
+
purge?: boolean;
|
|
18
|
+
clock?: () => Date;
|
|
19
|
+
}
|
|
12
20
|
export interface PruneBranchSummary {
|
|
13
21
|
deleted: string[];
|
|
14
22
|
skipped: string[];
|
|
@@ -40,3 +48,16 @@ export interface PruneAbortedResult {
|
|
|
40
48
|
runPath: string;
|
|
41
49
|
}
|
|
42
50
|
export type PruneResult = PruneSuccessResult | PruneAbortedResult;
|
|
51
|
+
export interface PruneAllSuccessResult {
|
|
52
|
+
status: "pruned";
|
|
53
|
+
runIds: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface PruneAllNoopResult {
|
|
56
|
+
status: "noop";
|
|
57
|
+
runIds: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface PruneAllAbortedResult {
|
|
60
|
+
status: "aborted";
|
|
61
|
+
runIds: string[];
|
|
62
|
+
}
|
|
63
|
+
export type PruneAllResult = PruneAllSuccessResult | PruneAllNoopResult | PruneAllAbortedResult;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ResolvedExtraContextFile } from "../../competition/shared/extra-context.js";
|
|
2
|
+
import { type ReductionCompetitionExecution } from "../../domain/reduce/competition/adapter.js";
|
|
3
|
+
import type { ReductionTarget } from "../../domain/reduce/model/types.js";
|
|
4
|
+
import type { ReduceProgressRenderer } from "../../render/transcripts/reduce.js";
|
|
5
|
+
export interface ReduceCommandInput {
|
|
6
|
+
root: string;
|
|
7
|
+
specsFilePath: string;
|
|
8
|
+
runsFilePath: string;
|
|
9
|
+
reductionsFilePath: string;
|
|
10
|
+
messagesFilePath: string;
|
|
11
|
+
verificationsFilePath: string;
|
|
12
|
+
target: ReductionTarget;
|
|
13
|
+
agentIds?: readonly string[];
|
|
14
|
+
agentOverrideFlag?: string;
|
|
15
|
+
profileName?: string;
|
|
16
|
+
maxParallel?: number;
|
|
17
|
+
extraContextFiles?: readonly ResolvedExtraContextFile[];
|
|
18
|
+
renderer?: ReduceProgressRenderer;
|
|
19
|
+
}
|
|
20
|
+
export interface ReduceCommandResult {
|
|
21
|
+
reductionId: string;
|
|
22
|
+
target: ReductionTarget;
|
|
23
|
+
reducerAgentIds: readonly string[];
|
|
24
|
+
reductions: readonly ReductionCompetitionExecution[];
|
|
25
|
+
}
|
|
26
|
+
export declare function executeReduceCommand(input: ReduceCommandInput): Promise<ReduceCommandResult>;
|