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
package/dist/utils/errors.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export type GitRepositoryErrorReason = "no_repository" | "not_repository_root";
|
|
1
2
|
export declare class GitRepositoryError extends Error {
|
|
2
|
-
|
|
3
|
+
readonly reason: GitRepositoryErrorReason;
|
|
4
|
+
constructor(message: string, reason: GitRepositoryErrorReason);
|
|
3
5
|
}
|
|
4
6
|
export declare class ValidationError extends Error {
|
|
5
7
|
constructor(message: string);
|
package/dist/utils/errors.js
CHANGED
package/dist/utils/git.d.ts
CHANGED
|
@@ -21,6 +21,16 @@ export interface CreateWorktreeOptions {
|
|
|
21
21
|
baseRevision: string;
|
|
22
22
|
}
|
|
23
23
|
export declare function createWorktree(options: CreateWorktreeOptions): Promise<void>;
|
|
24
|
+
export interface CreateDetachedWorktreeOptions {
|
|
25
|
+
root: string;
|
|
26
|
+
worktreePath: string;
|
|
27
|
+
baseRevision: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function createDetachedWorktree(options: CreateDetachedWorktreeOptions): Promise<void>;
|
|
30
|
+
export declare function removeWorktree(options: {
|
|
31
|
+
root: string;
|
|
32
|
+
worktreePath: string;
|
|
33
|
+
}): Promise<void>;
|
|
24
34
|
export declare function gitAddAll(cwd: string): Promise<void>;
|
|
25
35
|
export declare function gitHasStagedChanges(cwd: string): Promise<boolean>;
|
|
26
36
|
export interface GitCommitOptions {
|
package/dist/utils/git.js
CHANGED
|
@@ -20,10 +20,10 @@ export async function assertGitRepository(root) {
|
|
|
20
20
|
const repoRoot = await getGitRepositoryRoot(root);
|
|
21
21
|
if (repoRoot !== null) {
|
|
22
22
|
// We're in a repo but not at the root
|
|
23
|
-
throw new GitRepositoryError("Run `voratiq init` from the repository root.");
|
|
23
|
+
throw new GitRepositoryError("Run `voratiq init` from the repository root.", "not_repository_root");
|
|
24
24
|
}
|
|
25
25
|
// No git repository exists at all
|
|
26
|
-
throw new GitRepositoryError("No git repository found. Run `git init` or switch to an existing repository.");
|
|
26
|
+
throw new GitRepositoryError("No git repository found. Run `git init` or switch to an existing repository.", "no_repository");
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
@@ -68,6 +68,18 @@ export async function createWorktree(options) {
|
|
|
68
68
|
const { root, worktreePath, branch, baseRevision } = options;
|
|
69
69
|
await runGitCommand(["worktree", "add", "-b", branch, worktreePath, baseRevision], { cwd: root });
|
|
70
70
|
}
|
|
71
|
+
export async function createDetachedWorktree(options) {
|
|
72
|
+
const { root, worktreePath, baseRevision } = options;
|
|
73
|
+
await runGitCommand(["worktree", "add", "--detach", worktreePath, baseRevision], {
|
|
74
|
+
cwd: root,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export async function removeWorktree(options) {
|
|
78
|
+
const { root, worktreePath } = options;
|
|
79
|
+
await runGitCommand(["worktree", "remove", "--force", worktreePath], {
|
|
80
|
+
cwd: root,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
71
83
|
export async function gitAddAll(cwd) {
|
|
72
84
|
await runGitCommand(["add", "-A"], { cwd });
|
|
73
85
|
}
|
|
@@ -107,7 +119,7 @@ export async function gitDiffShortStat(options) {
|
|
|
107
119
|
}
|
|
108
120
|
export async function gitDiff(options) {
|
|
109
121
|
const { cwd, baseRevision, targetRevision } = options;
|
|
110
|
-
return runGitCommand(["diff", "--no-color", baseRevision, targetRevision], {
|
|
122
|
+
return runGitCommand(["diff", "--binary", "--no-color", baseRevision, targetRevision], {
|
|
111
123
|
cwd,
|
|
112
124
|
trim: false,
|
|
113
125
|
});
|
package/dist/utils/output.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { type TerminalColor } from "./colors.js";
|
|
2
|
-
export
|
|
2
|
+
export interface FormatCliOutputOptions {
|
|
3
|
+
leadingNewline?: boolean;
|
|
4
|
+
trailingNewline?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function formatCliOutput(value: string, options?: FormatCliOutputOptions): string;
|
|
3
7
|
export declare function formatAlertMessage(label: string, color: TerminalColor, message: string): string;
|
|
4
8
|
export declare function formatErrorMessage(message: string): string;
|
package/dist/utils/output.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { colorize } from "./colors.js";
|
|
2
|
-
export function formatCliOutput(value) {
|
|
2
|
+
export function formatCliOutput(value, options = {}) {
|
|
3
3
|
const trimmedEnd = value.trimEnd();
|
|
4
|
-
|
|
4
|
+
const leading = options.leadingNewline === false ? "" : "\n";
|
|
5
|
+
const trailing = options.trailingNewline === false ? "\n" : "\n\n";
|
|
6
|
+
return `${leading}${trimmedEnd}${trailing}`;
|
|
5
7
|
}
|
|
6
8
|
export function formatAlertMessage(label, color, message) {
|
|
7
9
|
const prefix = colorize(`${label}:`, color);
|
package/dist/utils/process.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export interface StreamTarget {
|
|
|
3
3
|
writable: Writable;
|
|
4
4
|
endOnClose?: boolean;
|
|
5
5
|
}
|
|
6
|
+
export type ProcessOutputSource = "stdout" | "stderr";
|
|
6
7
|
export interface SpawnStreamingProcessOptions {
|
|
7
8
|
command: string;
|
|
8
9
|
args?: string[];
|
|
@@ -13,7 +14,7 @@ export interface SpawnStreamingProcessOptions {
|
|
|
13
14
|
stdout: StreamTarget;
|
|
14
15
|
stderr: StreamTarget;
|
|
15
16
|
/** Optional callback invoked for each chunk of stdout/stderr data. */
|
|
16
|
-
onData?: (chunk: Buffer) => void;
|
|
17
|
+
onData?: (chunk: Buffer, source: ProcessOutputSource) => void;
|
|
17
18
|
/** Optional callback invoked when the process is spawned, providing the child process. */
|
|
18
19
|
onSpawn?: (child: import("node:child_process").ChildProcess) => void;
|
|
19
20
|
/**
|
package/dist/utils/process.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { RunProcessStreamError } from "../
|
|
2
|
+
import { RunProcessStreamError } from "../domain/run/competition/errors.js";
|
|
3
3
|
import { composeRestrictedEnvironment } from "./env.js";
|
|
4
4
|
export async function spawnStreamingProcess(options) {
|
|
5
5
|
const { command, args = [], cwd, env, shell = false, stdin, stdout, stderr, onData, onSpawn, abortSignal, detached = false, } = options;
|
|
@@ -24,8 +24,12 @@ export async function spawnStreamingProcess(options) {
|
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
if (onData) {
|
|
27
|
-
childStdout.on("data",
|
|
28
|
-
|
|
27
|
+
childStdout.on("data", (chunk) => {
|
|
28
|
+
onData(chunk, "stdout");
|
|
29
|
+
});
|
|
30
|
+
childStderr.on("data", (chunk) => {
|
|
31
|
+
onData(chunk, "stderr");
|
|
32
|
+
});
|
|
29
33
|
}
|
|
30
34
|
childStdout.pipe(stdout.writable, { end: false });
|
|
31
35
|
childStderr.pipe(stderr.writable, { end: false });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateSessionId(now?: Date): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
function generateSlug(length) {
|
|
3
|
+
const alphabet = "abcdefghijklmnopqrstuvwxyz";
|
|
4
|
+
const bytes = randomBytes(length);
|
|
5
|
+
let slug = "";
|
|
6
|
+
for (let index = 0; index < length; index += 1) {
|
|
7
|
+
const value = bytes[index] ?? 0;
|
|
8
|
+
slug += alphabet[value % alphabet.length];
|
|
9
|
+
}
|
|
10
|
+
return slug;
|
|
11
|
+
}
|
|
12
|
+
export function generateSessionId(now = new Date()) {
|
|
13
|
+
const pad = (value) => value.toString().padStart(2, "0");
|
|
14
|
+
const year = now.getUTCFullYear();
|
|
15
|
+
const month = pad(now.getUTCMonth() + 1);
|
|
16
|
+
const day = pad(now.getUTCDate());
|
|
17
|
+
const hours = pad(now.getUTCHours());
|
|
18
|
+
const minutes = pad(now.getUTCMinutes());
|
|
19
|
+
const seconds = pad(now.getUTCSeconds());
|
|
20
|
+
const slug = generateSlug(5);
|
|
21
|
+
return `${year}${month}${day}-${hours}${minutes}${seconds}-${slug}`;
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function sanitizeSlug(value) {
|
|
2
|
+
const withoutLinks = value.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
|
|
3
|
+
const normalized = withoutLinks
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/[`*~]/g, "")
|
|
6
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
7
|
+
.replace(/-+/g, "-")
|
|
8
|
+
.replace(/^-+/u, "")
|
|
9
|
+
.replace(/-+$/u, "");
|
|
10
|
+
return normalized;
|
|
11
|
+
}
|
|
12
|
+
export function slugify(value, fallback) {
|
|
13
|
+
const normalized = sanitizeSlug(value);
|
|
14
|
+
return normalized.length > 0 ? normalized : fallback;
|
|
15
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface VoratiqCliTarget {
|
|
2
|
+
command: string;
|
|
3
|
+
argsPrefix: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function createEntrypointVoratiqCliTarget(input: {
|
|
6
|
+
cliEntrypoint: string | undefined;
|
|
7
|
+
nodeExecutable?: string;
|
|
8
|
+
}): VoratiqCliTarget | undefined;
|
|
9
|
+
export declare function resolveVoratiqCliTarget(): VoratiqCliTarget;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { detectBinary } from "./binaries.js";
|
|
4
|
+
export function createEntrypointVoratiqCliTarget(input) {
|
|
5
|
+
const { cliEntrypoint, nodeExecutable = process.execPath } = input;
|
|
6
|
+
if (!cliEntrypoint || cliEntrypoint.length === 0) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const executableScriptEntrypoint = resolveNodeScriptEntrypoint(cliEntrypoint);
|
|
10
|
+
if (!executableScriptEntrypoint) {
|
|
11
|
+
return {
|
|
12
|
+
command: cliEntrypoint,
|
|
13
|
+
argsPrefix: [],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
command: nodeExecutable,
|
|
18
|
+
argsPrefix: [executableScriptEntrypoint],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function resolveVoratiqCliTarget() {
|
|
22
|
+
const installedBinary = detectBinary("voratiq");
|
|
23
|
+
if (installedBinary) {
|
|
24
|
+
const executableScriptEntrypoint = resolveNodeScriptEntrypoint(installedBinary);
|
|
25
|
+
if (executableScriptEntrypoint) {
|
|
26
|
+
return {
|
|
27
|
+
command: process.execPath,
|
|
28
|
+
argsPrefix: [executableScriptEntrypoint],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
command: installedBinary,
|
|
33
|
+
argsPrefix: [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
command: "voratiq",
|
|
38
|
+
argsPrefix: [],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function isNodeScriptEntrypoint(path) {
|
|
42
|
+
return path.endsWith(".js") || path.endsWith(".mjs") || path.endsWith(".cjs");
|
|
43
|
+
}
|
|
44
|
+
function resolveNodeScriptEntrypoint(path) {
|
|
45
|
+
if (isNodeScriptEntrypoint(path)) {
|
|
46
|
+
return path;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const resolved = realpathSync(path);
|
|
50
|
+
if (isNodeScriptEntrypoint(resolved)) {
|
|
51
|
+
return resolved;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SandboxStageId } from "../agents/runtime/policy.js";
|
|
2
2
|
import type { AgentId } from "../configs/agents/types.js";
|
|
3
3
|
import type { EnvironmentConfig } from "../configs/environment/types.js";
|
|
4
|
+
import { WorkspaceSetupRunError } from "../domain/run/competition/errors.js";
|
|
4
5
|
import { type AgentWorkspacePaths } from "./layout.js";
|
|
5
|
-
export interface ArtifactCollectionResult {
|
|
6
|
-
summaryCaptured: boolean;
|
|
7
|
-
diffStatistics?: string;
|
|
8
|
-
commitSha?: string;
|
|
9
|
-
diffAttempted: boolean;
|
|
10
|
-
diffCaptured: boolean;
|
|
11
|
-
}
|
|
12
6
|
export interface SandboxPersona {
|
|
13
7
|
authorName: string;
|
|
14
8
|
authorEmail: string;
|
|
15
9
|
}
|
|
16
|
-
export declare function
|
|
10
|
+
export declare function prepareScratchAgentWorkspace(options: {
|
|
11
|
+
paths: AgentWorkspacePaths;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function prepareStageAgentWorkspace(options: {
|
|
17
14
|
paths: AgentWorkspacePaths;
|
|
18
15
|
baseRevisionSha: string;
|
|
19
16
|
root: string;
|
|
20
17
|
agentId: AgentId;
|
|
21
|
-
|
|
18
|
+
sessionId: string;
|
|
19
|
+
stageId: SandboxStageId;
|
|
22
20
|
environment: EnvironmentConfig;
|
|
23
21
|
}): Promise<void>;
|
|
24
|
-
export declare function
|
|
22
|
+
export declare function prepareAgentWorkspace(options: {
|
|
23
|
+
paths: AgentWorkspacePaths;
|
|
25
24
|
baseRevisionSha: string;
|
|
26
|
-
workspacePath: string;
|
|
27
|
-
summaryPath: string;
|
|
28
|
-
diffPath: string;
|
|
29
25
|
root: string;
|
|
26
|
+
agentId: AgentId;
|
|
27
|
+
runId: string;
|
|
30
28
|
environment: EnvironmentConfig;
|
|
31
|
-
|
|
32
|
-
}): Promise<ArtifactCollectionResult>;
|
|
29
|
+
}): Promise<void>;
|
|
33
30
|
export declare function ensureWorkspaceError(error: unknown): WorkspaceSetupRunError;
|
package/dist/workspace/agents.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { rm } from "node:fs/promises";
|
|
2
|
+
import { WorkspaceSetupRunError } from "../domain/run/competition/errors.js";
|
|
3
3
|
import { toErrorMessage } from "../utils/errors.js";
|
|
4
|
-
import { createWorktree
|
|
4
|
+
import { createWorktree } from "../utils/git.js";
|
|
5
5
|
import { resolvePath } from "../utils/path.js";
|
|
6
|
-
import {
|
|
7
|
-
import { cleanupWorkspaceDependencies, ensureWorkspaceDependencies, WorkspaceDependencyCleanupError, } from "./dependencies.js";
|
|
6
|
+
import { ensureWorkspaceDependencies } from "./dependencies.js";
|
|
8
7
|
import { WorkspaceSetupError } from "./errors.js";
|
|
9
|
-
import { scaffoldAgentWorkspace
|
|
8
|
+
import { scaffoldAgentWorkspace } from "./layout.js";
|
|
10
9
|
import { ensureWorkspaceShim } from "./shim.js";
|
|
11
|
-
export async function
|
|
12
|
-
const { paths
|
|
10
|
+
export async function prepareScratchAgentWorkspace(options) {
|
|
11
|
+
const { paths } = options;
|
|
13
12
|
try {
|
|
14
13
|
await scaffoldAgentWorkspace(paths);
|
|
15
14
|
await rm(resolvePath(paths.agentRoot, "tmp"), {
|
|
@@ -20,11 +19,15 @@ export async function prepareAgentWorkspace(options) {
|
|
|
20
19
|
catch (error) {
|
|
21
20
|
throw ensureWorkspaceError(error);
|
|
22
21
|
}
|
|
22
|
+
}
|
|
23
|
+
export async function prepareStageAgentWorkspace(options) {
|
|
24
|
+
const { paths, baseRevisionSha, root, agentId, sessionId, stageId, environment, } = options;
|
|
25
|
+
await prepareScratchAgentWorkspace({ paths });
|
|
23
26
|
try {
|
|
24
27
|
await createWorktree({
|
|
25
28
|
root,
|
|
26
29
|
worktreePath: paths.workspacePath,
|
|
27
|
-
branch: `voratiq
|
|
30
|
+
branch: `voratiq/${stageId}/${sessionId}/${agentId}`,
|
|
28
31
|
baseRevision: baseRevisionSha,
|
|
29
32
|
});
|
|
30
33
|
await ensureWorkspaceDependencies({
|
|
@@ -40,111 +43,16 @@ export async function prepareAgentWorkspace(options) {
|
|
|
40
43
|
throw ensureWorkspaceError(error);
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
|
-
export async function
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
workspacePath,
|
|
54
|
-
environment,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
cleanupFailed = true;
|
|
59
|
-
if (error instanceof WorkspaceDependencyCleanupError) {
|
|
60
|
-
dependenciesCleanup = error.cleanup;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
let runFailed = true;
|
|
64
|
-
let artifactResult;
|
|
65
|
-
let dependencyRestoreError;
|
|
66
|
-
try {
|
|
67
|
-
await runGitStep("Git add failed", async () => gitAddAll(workspacePath));
|
|
68
|
-
const hasChangesBeforeSummary = await gitHasStagedChanges(workspacePath);
|
|
69
|
-
if (!hasChangesBeforeSummary) {
|
|
70
|
-
throw new AgentProcessError({
|
|
71
|
-
detail: "Agent process failed. No workspace changes detected.",
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
const { summary } = await harvestSummary({
|
|
75
|
-
workspacePath,
|
|
76
|
-
summaryPath,
|
|
77
|
-
});
|
|
78
|
-
await runGitStep("Git add failed", async () => gitAddAll(workspacePath));
|
|
79
|
-
const hasChanges = await gitHasStagedChanges(workspacePath);
|
|
80
|
-
if (!hasChanges) {
|
|
81
|
-
throw new AgentProcessError({
|
|
82
|
-
detail: "Agent process failed. No workspace changes detected.",
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
let diffStatistics;
|
|
86
|
-
let commitSha;
|
|
87
|
-
await runGitStep("Git commit failed", async () => gitCommitAll({
|
|
88
|
-
cwd: workspacePath,
|
|
89
|
-
message: summary,
|
|
90
|
-
authorName: persona.authorName,
|
|
91
|
-
authorEmail: persona.authorEmail,
|
|
92
|
-
bypassHooks: true,
|
|
93
|
-
}));
|
|
94
|
-
commitSha = await runGitStep("Git rev-parse failed", async () => runGitCommand(["rev-parse", "HEAD"], { cwd: workspacePath }));
|
|
95
|
-
const diffContent = await runGitStep("Git diff failed", async () => gitDiff({
|
|
96
|
-
cwd: workspacePath,
|
|
97
|
-
baseRevision: baseRevisionSha,
|
|
98
|
-
targetRevision: "HEAD",
|
|
99
|
-
}));
|
|
100
|
-
await enforceCredentialExclusion({
|
|
101
|
-
workspacePath,
|
|
102
|
-
diffContent,
|
|
103
|
-
});
|
|
104
|
-
await writeFile(diffPath, diffContent, { encoding: "utf8" });
|
|
105
|
-
diffStatistics = await runGitStep("Git diff --shortstat failed", async () => gitDiffShortStat({
|
|
106
|
-
cwd: workspacePath,
|
|
107
|
-
baseRevision: baseRevisionSha,
|
|
108
|
-
targetRevision: "HEAD",
|
|
109
|
-
}));
|
|
110
|
-
runFailed = false;
|
|
111
|
-
artifactResult = {
|
|
112
|
-
summaryCaptured: true,
|
|
113
|
-
diffStatistics,
|
|
114
|
-
commitSha,
|
|
115
|
-
diffAttempted: true,
|
|
116
|
-
diffCaptured: true,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
finally {
|
|
120
|
-
const cleanupTouched = dependenciesCleanup.nodeRemoved || dependenciesCleanup.pythonRemoved;
|
|
121
|
-
const shouldRestoreDependencies = cleanupTouched || cleanupFailed;
|
|
122
|
-
if (shouldRestoreDependencies) {
|
|
123
|
-
try {
|
|
124
|
-
await ensureWorkspaceDependencies({
|
|
125
|
-
root,
|
|
126
|
-
workspacePath,
|
|
127
|
-
environment,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
if (!runFailed) {
|
|
132
|
-
dependencyRestoreError = new AgentProcessError({
|
|
133
|
-
detail: `[voratiq] Failed to restore workspace dependencies after export: ${toErrorMessage(error)}`,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (dependencyRestoreError) {
|
|
140
|
-
throw dependencyRestoreError;
|
|
141
|
-
}
|
|
142
|
-
if (!artifactResult) {
|
|
143
|
-
throw new AgentProcessError({
|
|
144
|
-
detail: "Agent process failed before artifacts were collected.",
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
return artifactResult;
|
|
46
|
+
export async function prepareAgentWorkspace(options) {
|
|
47
|
+
return await prepareStageAgentWorkspace({
|
|
48
|
+
paths: options.paths,
|
|
49
|
+
baseRevisionSha: options.baseRevisionSha,
|
|
50
|
+
root: options.root,
|
|
51
|
+
agentId: options.agentId,
|
|
52
|
+
sessionId: options.runId,
|
|
53
|
+
stageId: "run",
|
|
54
|
+
environment: options.environment,
|
|
55
|
+
});
|
|
148
56
|
}
|
|
149
57
|
export function ensureWorkspaceError(error) {
|
|
150
58
|
if (error instanceof WorkspaceSetupError) {
|
|
@@ -155,36 +63,3 @@ export function ensureWorkspaceError(error) {
|
|
|
155
63
|
}
|
|
156
64
|
return new WorkspaceSetupRunError(toErrorMessage(error));
|
|
157
65
|
}
|
|
158
|
-
async function harvestSummary(options) {
|
|
159
|
-
const { workspacePath, summaryPath } = options;
|
|
160
|
-
const workspaceSummaryPath = resolvePath(workspacePath, WORKSPACE_SUMMARY_FILENAME);
|
|
161
|
-
let raw;
|
|
162
|
-
try {
|
|
163
|
-
raw = await readFile(workspaceSummaryPath, "utf8");
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
throw new AgentProcessError({ detail: toErrorMessage(error) });
|
|
167
|
-
}
|
|
168
|
-
const trimmed = raw.trim();
|
|
169
|
-
if (!trimmed) {
|
|
170
|
-
throw new AgentProcessError({
|
|
171
|
-
detail: "Agent process failed. Summary is empty.",
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
await writeFile(summaryPath, `${trimmed}\n`, { encoding: "utf8" });
|
|
175
|
-
await rm(workspaceSummaryPath, { force: true });
|
|
176
|
-
return {
|
|
177
|
-
summary: trimmed,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
async function runGitStep(operationMessage, step) {
|
|
181
|
-
try {
|
|
182
|
-
return await step();
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
throw new GitOperationError({
|
|
186
|
-
operation: operationMessage,
|
|
187
|
-
detail: toErrorMessage(error),
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
@@ -10,5 +10,14 @@ export interface ChatArtifactCaptureResult {
|
|
|
10
10
|
export interface PreserveChatArtifactsOptions {
|
|
11
11
|
providerId: string;
|
|
12
12
|
agentRoot: string;
|
|
13
|
+
searchEnv?: NodeJS.ProcessEnv;
|
|
14
|
+
baseline?: ProviderTranscriptBaseline;
|
|
13
15
|
}
|
|
16
|
+
export interface ProviderTranscriptSnapshotEntry {
|
|
17
|
+
path: string;
|
|
18
|
+
size: number;
|
|
19
|
+
mtimeMs: number;
|
|
20
|
+
}
|
|
21
|
+
export type ProviderTranscriptBaseline = readonly ProviderTranscriptSnapshotEntry[];
|
|
22
|
+
export declare function snapshotProviderTranscripts(options: Omit<PreserveChatArtifactsOptions, "baseline">): Promise<ProviderTranscriptBaseline>;
|
|
14
23
|
export declare function preserveProviderChatTranscripts(options: PreserveChatArtifactsOptions): Promise<ChatArtifactCaptureResult>;
|
|
@@ -1,28 +1,39 @@
|
|
|
1
1
|
import { once } from "node:events";
|
|
2
2
|
import { createReadStream, createWriteStream } from "node:fs";
|
|
3
|
-
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { dirname, relative, resolve } from "node:path";
|
|
5
5
|
import { finished } from "node:stream/promises";
|
|
6
6
|
import { pathExists } from "../../utils/fs.js";
|
|
7
7
|
import { ARTIFACTS_DIRNAME, CHAT_JSON_FILENAME, CHAT_JSONL_FILENAME, } from "../structure.js";
|
|
8
8
|
import { findProviderTranscripts } from "./sources.js";
|
|
9
|
+
export async function snapshotProviderTranscripts(options) {
|
|
10
|
+
const transcriptPaths = await findProviderTranscripts(options.providerId, {
|
|
11
|
+
agentRoot: options.agentRoot,
|
|
12
|
+
env: options.searchEnv,
|
|
13
|
+
});
|
|
14
|
+
return await collectTranscriptSnapshot(transcriptPaths);
|
|
15
|
+
}
|
|
9
16
|
export async function preserveProviderChatTranscripts(options) {
|
|
10
17
|
const { providerId, agentRoot } = options;
|
|
11
18
|
if (!providerId) {
|
|
12
19
|
return { status: "not-found" };
|
|
13
20
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
let transcriptPaths;
|
|
22
|
+
try {
|
|
23
|
+
transcriptPaths = await findProviderTranscripts(providerId, {
|
|
24
|
+
agentRoot,
|
|
25
|
+
env: options.searchEnv,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
17
29
|
return {
|
|
18
|
-
status: "
|
|
19
|
-
|
|
20
|
-
format,
|
|
30
|
+
status: "error",
|
|
31
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
21
32
|
};
|
|
22
33
|
}
|
|
23
|
-
let
|
|
34
|
+
let candidatePaths;
|
|
24
35
|
try {
|
|
25
|
-
|
|
36
|
+
candidatePaths = await filterTranscriptPathsAgainstBaseline(transcriptPaths, options.baseline);
|
|
26
37
|
}
|
|
27
38
|
catch (error) {
|
|
28
39
|
return {
|
|
@@ -30,8 +41,16 @@ export async function preserveProviderChatTranscripts(options) {
|
|
|
30
41
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
31
42
|
};
|
|
32
43
|
}
|
|
33
|
-
const
|
|
44
|
+
const existing = await locateExistingChatArtifact(agentRoot);
|
|
45
|
+
const selection = selectTranscriptFiles(candidatePaths);
|
|
34
46
|
if (!selection) {
|
|
47
|
+
if (existing !== undefined) {
|
|
48
|
+
return {
|
|
49
|
+
status: "already-exists",
|
|
50
|
+
artifactPath: existing.path,
|
|
51
|
+
format: existing.format,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
35
54
|
return { status: "not-found" };
|
|
36
55
|
}
|
|
37
56
|
const { format: selectionFormat, files } = selection;
|
|
@@ -50,7 +69,7 @@ export async function preserveProviderChatTranscripts(options) {
|
|
|
50
69
|
await concatenateJsonlTranscripts(files, artifactPath);
|
|
51
70
|
}
|
|
52
71
|
return {
|
|
53
|
-
status: "captured",
|
|
72
|
+
status: existing ? "already-exists" : "captured",
|
|
54
73
|
artifactPath,
|
|
55
74
|
format: selectionFormat,
|
|
56
75
|
sourceCount: files.length,
|
|
@@ -104,7 +123,7 @@ async function bundleJsonTranscripts(options) {
|
|
|
104
123
|
for (const file of files) {
|
|
105
124
|
const raw = await readFile(file, "utf8");
|
|
106
125
|
transcripts.push({
|
|
107
|
-
source:
|
|
126
|
+
source: toArtifactSourcePath(agentRoot, file),
|
|
108
127
|
payload: parseJsonOrString(raw),
|
|
109
128
|
});
|
|
110
129
|
}
|
|
@@ -155,3 +174,54 @@ function parseJsonOrString(content) {
|
|
|
155
174
|
return content;
|
|
156
175
|
}
|
|
157
176
|
}
|
|
177
|
+
async function collectTranscriptSnapshot(transcriptPaths) {
|
|
178
|
+
const snapshots = [];
|
|
179
|
+
for (const path of transcriptPaths) {
|
|
180
|
+
try {
|
|
181
|
+
const details = await stat(path);
|
|
182
|
+
if (!details.isFile()) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
snapshots.push({
|
|
186
|
+
path,
|
|
187
|
+
size: details.size,
|
|
188
|
+
mtimeMs: details.mtimeMs,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
snapshots.sort((left, right) => left.path.localeCompare(right.path));
|
|
196
|
+
return snapshots;
|
|
197
|
+
}
|
|
198
|
+
async function filterTranscriptPathsAgainstBaseline(transcriptPaths, baseline) {
|
|
199
|
+
if (!baseline || baseline.length === 0) {
|
|
200
|
+
return transcriptPaths;
|
|
201
|
+
}
|
|
202
|
+
const baselineByPath = new Map(baseline.map((entry) => [entry.path, entry]));
|
|
203
|
+
const freshPaths = [];
|
|
204
|
+
for (const path of transcriptPaths) {
|
|
205
|
+
const prior = baselineByPath.get(path);
|
|
206
|
+
if (!prior) {
|
|
207
|
+
freshPaths.push(path);
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const current = await stat(path);
|
|
212
|
+
if (!current.isFile() ||
|
|
213
|
+
current.size !== prior.size ||
|
|
214
|
+
current.mtimeMs !== prior.mtimeMs) {
|
|
215
|
+
freshPaths.push(path);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return freshPaths.sort();
|
|
223
|
+
}
|
|
224
|
+
function toArtifactSourcePath(agentRoot, file) {
|
|
225
|
+
const source = relative(agentRoot, file);
|
|
226
|
+
return source.startsWith("..") ? file : source;
|
|
227
|
+
}
|