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,192 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { agentIdSchema } from "../../../configs/agents/types.js";
|
|
3
|
+
import { extraContextMetadataEntrySchema, persistedExtraContextPathSchema, } from "../../../persistence/extra-context.js";
|
|
4
|
+
import { repoRelativeRecordPathSchema } from "../../../persistence/record-path-schema.js";
|
|
5
|
+
import { agentStatusSchema, applyStatusSchema as applyStatusValueSchema, IN_PROGRESS_AGENT_STATUSES, runStatusSchema, TERMINAL_AGENT_STATUSES, TERMINAL_RUN_STATUSES, } from "../../../status/index.js";
|
|
6
|
+
import { validateOperationLifecycleTimestamps, validateRecordLifecycleTimestamps, } from "../../shared/lifecycle.js";
|
|
7
|
+
export { agentStatusSchema, IN_PROGRESS_AGENT_STATUSES, TERMINAL_AGENT_STATUSES, };
|
|
8
|
+
export const runSpecDescriptorSchema = z.object({
|
|
9
|
+
path: repoRelativeRecordPathSchema,
|
|
10
|
+
});
|
|
11
|
+
const CHAT_ARTIFACT_FORMATS = [
|
|
12
|
+
"json",
|
|
13
|
+
"jsonl",
|
|
14
|
+
];
|
|
15
|
+
export const CHAT_USAGE_PROVIDER_IDS = ["claude", "codex", "gemini"];
|
|
16
|
+
const WATCHDOG_TRIGGERS = [
|
|
17
|
+
"silence",
|
|
18
|
+
"wall-clock",
|
|
19
|
+
"fatal-pattern",
|
|
20
|
+
"sandbox-denial",
|
|
21
|
+
];
|
|
22
|
+
const FAIL_FAST_OPERATIONS = [
|
|
23
|
+
"network-connect",
|
|
24
|
+
"file-read",
|
|
25
|
+
"file-write",
|
|
26
|
+
];
|
|
27
|
+
const QUEUED_RUN_STATUSES = ["queued"];
|
|
28
|
+
const RUNNING_RUN_STATUSES = ["running"];
|
|
29
|
+
export const watchdogMetadataSchema = z.object({
|
|
30
|
+
/** Silence timeout in milliseconds that was enforced. */
|
|
31
|
+
silenceTimeoutMs: z.number(),
|
|
32
|
+
/** Wall-clock cap in milliseconds that was enforced. */
|
|
33
|
+
wallClockCapMs: z.number(),
|
|
34
|
+
/** Which watchdog trigger caused termination, if any. */
|
|
35
|
+
trigger: z.enum(WATCHDOG_TRIGGERS).optional(),
|
|
36
|
+
});
|
|
37
|
+
export const chatUsageProviderIdSchema = z.enum(CHAT_USAGE_PROVIDER_IDS);
|
|
38
|
+
const billingTokenCountSchema = z.number().int().nonnegative();
|
|
39
|
+
const AT_LEAST_ONE_USAGE_FIELD_MESSAGE = "At least one billing-relevant usage field is required.";
|
|
40
|
+
function withAtLeastOneUsageField(shape) {
|
|
41
|
+
return z
|
|
42
|
+
.object(shape)
|
|
43
|
+
.strict()
|
|
44
|
+
.refine((value) => Object.values(value).some((field) => field !== undefined), {
|
|
45
|
+
message: AT_LEAST_ONE_USAGE_FIELD_MESSAGE,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export const claudeExtractedTokenUsageSchema = withAtLeastOneUsageField({
|
|
49
|
+
input_tokens: billingTokenCountSchema.optional(),
|
|
50
|
+
output_tokens: billingTokenCountSchema.optional(),
|
|
51
|
+
cache_read_input_tokens: billingTokenCountSchema.optional(),
|
|
52
|
+
cache_creation_input_tokens: billingTokenCountSchema.optional(),
|
|
53
|
+
});
|
|
54
|
+
export const codexExtractedTokenUsageSchema = withAtLeastOneUsageField({
|
|
55
|
+
input_tokens: billingTokenCountSchema.optional(),
|
|
56
|
+
cached_input_tokens: billingTokenCountSchema.optional(),
|
|
57
|
+
output_tokens: billingTokenCountSchema.optional(),
|
|
58
|
+
reasoning_output_tokens: billingTokenCountSchema.optional(),
|
|
59
|
+
total_tokens: billingTokenCountSchema.optional(),
|
|
60
|
+
});
|
|
61
|
+
export const geminiExtractedTokenUsageSchema = withAtLeastOneUsageField({
|
|
62
|
+
input: billingTokenCountSchema.optional(),
|
|
63
|
+
output: billingTokenCountSchema.optional(),
|
|
64
|
+
cached: billingTokenCountSchema.optional(),
|
|
65
|
+
thoughts: billingTokenCountSchema.optional(),
|
|
66
|
+
tool: billingTokenCountSchema.optional(),
|
|
67
|
+
total: billingTokenCountSchema.optional(),
|
|
68
|
+
});
|
|
69
|
+
export const extractedTokenUsageSchemaByProvider = {
|
|
70
|
+
claude: claudeExtractedTokenUsageSchema,
|
|
71
|
+
codex: codexExtractedTokenUsageSchema,
|
|
72
|
+
gemini: geminiExtractedTokenUsageSchema,
|
|
73
|
+
};
|
|
74
|
+
export const extractedTokenUsageSchema = z.union([
|
|
75
|
+
claudeExtractedTokenUsageSchema,
|
|
76
|
+
codexExtractedTokenUsageSchema,
|
|
77
|
+
geminiExtractedTokenUsageSchema,
|
|
78
|
+
]);
|
|
79
|
+
export const agentArtifactStateSchema = z.object({
|
|
80
|
+
diffAttempted: z.boolean().optional(),
|
|
81
|
+
diffCaptured: z.boolean().optional(),
|
|
82
|
+
stdoutCaptured: z.boolean().optional(),
|
|
83
|
+
stderrCaptured: z.boolean().optional(),
|
|
84
|
+
summaryCaptured: z.boolean().optional(),
|
|
85
|
+
chatCaptured: z.boolean().optional(),
|
|
86
|
+
chatFormat: z.enum(CHAT_ARTIFACT_FORMATS).optional(),
|
|
87
|
+
});
|
|
88
|
+
export const agentInvocationRecordSchema = z
|
|
89
|
+
.object({
|
|
90
|
+
agentId: agentIdSchema,
|
|
91
|
+
model: z.string(),
|
|
92
|
+
status: agentStatusSchema,
|
|
93
|
+
startedAt: z.string().optional(),
|
|
94
|
+
completedAt: z.string().optional(),
|
|
95
|
+
commitSha: z.string().optional(),
|
|
96
|
+
artifacts: agentArtifactStateSchema.optional(),
|
|
97
|
+
error: z.string().optional(),
|
|
98
|
+
warnings: z.array(z.string()).optional(),
|
|
99
|
+
diffStatistics: z.string().optional(),
|
|
100
|
+
tokenUsage: extractedTokenUsageSchema.optional(),
|
|
101
|
+
watchdog: watchdogMetadataSchema.optional(),
|
|
102
|
+
failFastTriggered: z.boolean().optional(),
|
|
103
|
+
failFastTarget: z.string().optional(),
|
|
104
|
+
failFastOperation: z.enum(FAIL_FAST_OPERATIONS).optional(),
|
|
105
|
+
})
|
|
106
|
+
.superRefine((data, ctx) => {
|
|
107
|
+
validateOperationLifecycleTimestamps({
|
|
108
|
+
status: data.status,
|
|
109
|
+
startedAt: data.startedAt,
|
|
110
|
+
completedAt: data.completedAt,
|
|
111
|
+
}, ctx, {
|
|
112
|
+
queued: ["queued"],
|
|
113
|
+
running: ["running"],
|
|
114
|
+
terminal: TERMINAL_AGENT_STATUSES,
|
|
115
|
+
});
|
|
116
|
+
if (data.failFastTriggered) {
|
|
117
|
+
if (!data.failFastTarget) {
|
|
118
|
+
ctx.addIssue({
|
|
119
|
+
code: z.ZodIssueCode.custom,
|
|
120
|
+
path: ["failFastTarget"],
|
|
121
|
+
message: "failFastTarget is required when failFastTriggered is true",
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (!data.failFastOperation) {
|
|
125
|
+
ctx.addIssue({
|
|
126
|
+
code: z.ZodIssueCode.custom,
|
|
127
|
+
path: ["failFastOperation"],
|
|
128
|
+
message: "failFastOperation is required when failFastTriggered is true",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
export const applyStatusSchema = z.object({
|
|
134
|
+
agentId: agentIdSchema,
|
|
135
|
+
status: applyStatusValueSchema,
|
|
136
|
+
appliedAt: z.string(),
|
|
137
|
+
ignoredBaseMismatch: z.boolean(),
|
|
138
|
+
appliedCommitSha: z.string().min(1).optional(),
|
|
139
|
+
detail: z.string().max(256).nullable().optional(),
|
|
140
|
+
});
|
|
141
|
+
export const AUTO_TERMINAL_STATUS_VALUES = [
|
|
142
|
+
"succeeded",
|
|
143
|
+
"failed",
|
|
144
|
+
"action_required",
|
|
145
|
+
];
|
|
146
|
+
export const autoTerminalStatusSchema = z.enum(AUTO_TERMINAL_STATUS_VALUES);
|
|
147
|
+
export const AUTO_APPLY_STATUS_VALUES = [
|
|
148
|
+
"succeeded",
|
|
149
|
+
"failed",
|
|
150
|
+
"skipped",
|
|
151
|
+
];
|
|
152
|
+
export const autoApplyStatusSchema = z.enum(AUTO_APPLY_STATUS_VALUES);
|
|
153
|
+
export const autoOutcomeSchema = z.object({
|
|
154
|
+
status: autoTerminalStatusSchema,
|
|
155
|
+
completedAt: z.string(),
|
|
156
|
+
detail: z.string().max(256).nullable().optional(),
|
|
157
|
+
apply: z.object({
|
|
158
|
+
status: autoApplyStatusSchema,
|
|
159
|
+
agentId: agentIdSchema.optional(),
|
|
160
|
+
detail: z.string().max(256).nullable().optional(),
|
|
161
|
+
}),
|
|
162
|
+
});
|
|
163
|
+
export const runRecordSchema = z
|
|
164
|
+
.object({
|
|
165
|
+
runId: z.string(),
|
|
166
|
+
baseRevisionSha: z.string(),
|
|
167
|
+
rootPath: repoRelativeRecordPathSchema,
|
|
168
|
+
spec: runSpecDescriptorSchema,
|
|
169
|
+
extraContext: z.array(persistedExtraContextPathSchema).optional(),
|
|
170
|
+
extraContextMetadata: z.array(extraContextMetadataEntrySchema).optional(),
|
|
171
|
+
status: runStatusSchema,
|
|
172
|
+
createdAt: z.string(),
|
|
173
|
+
startedAt: z.string().optional(),
|
|
174
|
+
completedAt: z.string().optional(),
|
|
175
|
+
agents: z.array(agentInvocationRecordSchema),
|
|
176
|
+
applyStatus: applyStatusSchema.optional(),
|
|
177
|
+
auto: autoOutcomeSchema.optional(),
|
|
178
|
+
deletedAt: z.string().nullable().optional(),
|
|
179
|
+
})
|
|
180
|
+
.superRefine((record, ctx) => {
|
|
181
|
+
// Enforce the canonical queued/running/terminal timestamp contract.
|
|
182
|
+
validateRecordLifecycleTimestamps({
|
|
183
|
+
status: record.status,
|
|
184
|
+
createdAt: record.createdAt,
|
|
185
|
+
startedAt: record.startedAt,
|
|
186
|
+
completedAt: record.completedAt,
|
|
187
|
+
}, ctx, {
|
|
188
|
+
queued: QUEUED_RUN_STATUSES,
|
|
189
|
+
running: RUNNING_RUN_STATUSES,
|
|
190
|
+
terminal: TERMINAL_RUN_STATUSES,
|
|
191
|
+
});
|
|
192
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type RunRecord } from "
|
|
2
|
-
export { HISTORY_LOCK_STALE_GRACE_MS } from "
|
|
1
|
+
import { type RunRecord } from "../model/types.js";
|
|
2
|
+
export { HISTORY_LOCK_STALE_GRACE_MS } from "../../../persistence/history-lock.js";
|
|
3
3
|
export type RunRecordPredicate = (record: RunRecord) => boolean;
|
|
4
4
|
export interface RunRecordWarningMissing {
|
|
5
5
|
kind: "missing-record";
|
|
@@ -27,6 +27,12 @@ export interface RewriteRunRecordOptions {
|
|
|
27
27
|
runsFilePath: string;
|
|
28
28
|
runId: string;
|
|
29
29
|
mutate: (record: RunRecord) => RunRecord;
|
|
30
|
+
/**
|
|
31
|
+
* When true, forces an immediate flush of the rewritten record even if the
|
|
32
|
+
* run is still active. This is useful for callers (like apply) that must
|
|
33
|
+
* persist state before the process exits.
|
|
34
|
+
*/
|
|
35
|
+
forceFlush?: boolean;
|
|
30
36
|
}
|
|
31
37
|
export interface RunQueryFilters {
|
|
32
38
|
runId?: string;
|
|
@@ -56,12 +62,12 @@ export interface RunIndexPayload {
|
|
|
56
62
|
version: number;
|
|
57
63
|
sessions: RunIndexEntry[];
|
|
58
64
|
}
|
|
59
|
-
export declare const RUN_RECORD_FILENAME = "record.json";
|
|
60
65
|
export type RunRecordBufferSnapshotEntry = {
|
|
61
66
|
key: string;
|
|
62
67
|
runId: string;
|
|
63
68
|
hasFlushTimer: boolean;
|
|
64
69
|
};
|
|
70
|
+
export declare const RUN_RECORD_FILENAME = "record.json";
|
|
65
71
|
export declare function readRunRecords(options: ReadRunRecordsOptions): Promise<RunRecord[]>;
|
|
66
72
|
export declare function appendRunRecord(options: AppendRunRecordOptions): Promise<void>;
|
|
67
73
|
export declare function rewriteRunRecord(options: RewriteRunRecordOptions): Promise<RunRecord>;
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { dirname, join } from "node:path";
|
|
2
|
+
import { mapSessionStoreError } from "../../../persistence/error-mapping.js";
|
|
3
|
+
import { SessionRecordParseError } from "../../../persistence/errors.js";
|
|
4
|
+
import { acquireHistoryLock } from "../../../persistence/history-lock.js";
|
|
5
|
+
import { createSessionStore, } from "../../../persistence/session-store.js";
|
|
6
|
+
import { assertTestHookRegistrationEnabled } from "../../../testing/test-hooks.js";
|
|
7
|
+
import { isFileSystemError } from "../../../utils/fs.js";
|
|
8
|
+
import { RunRecordNotFoundError, RunRecordParseError, } from "../model/errors.js";
|
|
9
|
+
import { runRecordSchema, } from "../model/types.js";
|
|
10
|
+
import { runStoreErrorMapper } from "./error-mapping.js";
|
|
11
|
+
export { HISTORY_LOCK_STALE_GRACE_MS } from "../../../persistence/history-lock.js";
|
|
12
|
+
const RUN_INDEX_VERSION = 2;
|
|
13
|
+
export const RUN_RECORD_FILENAME = "record.json";
|
|
14
|
+
const HISTORY_LOCK_FILENAME = "history.lock";
|
|
15
|
+
const runPersistence = createSessionStore({
|
|
16
|
+
recordFilename: RUN_RECORD_FILENAME,
|
|
17
|
+
indexVersion: RUN_INDEX_VERSION,
|
|
18
|
+
acquireLock: acquireHistoryLock,
|
|
19
|
+
parseRecord: ({ path, raw }) => {
|
|
20
|
+
const parsed = JSON.parse(raw);
|
|
21
|
+
const result = runRecordSchema.safeParse(parsed);
|
|
22
|
+
if (!result.success) {
|
|
23
|
+
const issues = result.error.issues
|
|
24
|
+
.map((issue) => issue.message)
|
|
25
|
+
.join(", ");
|
|
26
|
+
throw new SessionRecordParseError(path, issues);
|
|
27
|
+
}
|
|
28
|
+
return result.data;
|
|
29
|
+
},
|
|
30
|
+
mergeRecordOnFlush: (buffered, disk) => mergeRunMetaStatus(buffered, disk),
|
|
31
|
+
buildIndexEntry: (record) => ({
|
|
32
|
+
runId: record.runId,
|
|
33
|
+
createdAt: record.createdAt,
|
|
34
|
+
status: record.status,
|
|
35
|
+
}),
|
|
36
|
+
getIndexEntryId: (entry) => entry.runId,
|
|
37
|
+
shouldForceFlush: (record) => shouldForceFlush(record.status),
|
|
38
|
+
getRecordId: (record) => record.runId,
|
|
39
|
+
getRecordStatus: (record) => record.status,
|
|
40
|
+
readIndexEntries: (parsed) => {
|
|
41
|
+
const payload = parsed;
|
|
42
|
+
return Array.isArray(payload.sessions) ? payload.sessions : [];
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const readRunRecordsInternal = async (options) => {
|
|
46
|
+
const { root, runsFilePath, limit, predicate, onWarning } = options;
|
|
47
|
+
const paths = buildRunPaths(root, runsFilePath);
|
|
48
|
+
try {
|
|
49
|
+
return await runPersistence.readRecords({
|
|
50
|
+
paths,
|
|
51
|
+
limit,
|
|
52
|
+
predicate,
|
|
53
|
+
onWarning: onWarning
|
|
54
|
+
? (warning) => onWarning(mapWarning(warning))
|
|
55
|
+
: undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw mapSessionStoreError(error, runStoreErrorMapper);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
let readRunRecordsImpl = readRunRecordsInternal;
|
|
63
|
+
function setReadRunRecordsImplementation(implementation) {
|
|
64
|
+
readRunRecordsImpl = implementation;
|
|
65
|
+
}
|
|
66
|
+
function resetReadRunRecordsImplementation() {
|
|
67
|
+
readRunRecordsImpl = readRunRecordsInternal;
|
|
68
|
+
}
|
|
69
|
+
export async function readRunRecords(options) {
|
|
70
|
+
return readRunRecordsImpl(options);
|
|
71
|
+
}
|
|
72
|
+
export async function appendRunRecord(options) {
|
|
73
|
+
const { root, runsFilePath, record } = options;
|
|
74
|
+
const paths = buildRunPaths(root, runsFilePath);
|
|
75
|
+
try {
|
|
76
|
+
await runPersistence.appendRecord({ paths, record });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw mapSessionStoreError(error, runStoreErrorMapper);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function rewriteRunRecord(options) {
|
|
83
|
+
const { root, runsFilePath, runId, mutate, forceFlush = false } = options;
|
|
84
|
+
const paths = buildRunPaths(root, runsFilePath);
|
|
85
|
+
try {
|
|
86
|
+
return await runPersistence.rewriteRecord({
|
|
87
|
+
paths,
|
|
88
|
+
sessionId: runId,
|
|
89
|
+
mutate,
|
|
90
|
+
forceFlush,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
throw mapSessionStoreError(error, runStoreErrorMapper);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export async function getRunRecordSnapshot(options) {
|
|
98
|
+
const { runsFilePath, runId } = options;
|
|
99
|
+
const paths = buildRunPaths("", runsFilePath);
|
|
100
|
+
try {
|
|
101
|
+
return await runPersistence.getRecordSnapshot({
|
|
102
|
+
paths,
|
|
103
|
+
sessionId: runId,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw mapSessionStoreError(error, runStoreErrorMapper);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export async function flushAllRunRecordBuffers() {
|
|
111
|
+
await runPersistence.flushAllRecordBuffers();
|
|
112
|
+
}
|
|
113
|
+
export async function disposeRunRecordBuffer(options) {
|
|
114
|
+
const { runsFilePath, runId } = options;
|
|
115
|
+
const paths = buildRunPaths("", runsFilePath);
|
|
116
|
+
await runPersistence.disposeRecordBuffer({ paths, sessionId: runId });
|
|
117
|
+
}
|
|
118
|
+
export async function flushRunRecordBuffer(options) {
|
|
119
|
+
const { runsFilePath, runId } = options;
|
|
120
|
+
const paths = buildRunPaths("", runsFilePath);
|
|
121
|
+
await runPersistence.flushRecordBuffer({ paths, sessionId: runId });
|
|
122
|
+
}
|
|
123
|
+
export function buildRunPredicate(filters = {}) {
|
|
124
|
+
const predicates = [];
|
|
125
|
+
if (filters.runId) {
|
|
126
|
+
const runId = filters.runId;
|
|
127
|
+
predicates.push((record) => record.runId === runId);
|
|
128
|
+
}
|
|
129
|
+
if (filters.agentId) {
|
|
130
|
+
const agentId = filters.agentId;
|
|
131
|
+
predicates.push((record) => record.agents.some((agent) => agent.agentId === agentId));
|
|
132
|
+
}
|
|
133
|
+
if (filters.specPath) {
|
|
134
|
+
const specPath = filters.specPath;
|
|
135
|
+
predicates.push((record) => record.spec.path === specPath);
|
|
136
|
+
}
|
|
137
|
+
if (filters.activeOnly || !filters.includeDeleted) {
|
|
138
|
+
predicates.push((record) => record.status !== "pruned");
|
|
139
|
+
}
|
|
140
|
+
return (record) => predicates.every((predicate) => predicate(record));
|
|
141
|
+
}
|
|
142
|
+
export async function fetchRuns(input) {
|
|
143
|
+
const warnings = [];
|
|
144
|
+
const predicate = buildRunPredicate(input.filters ?? {});
|
|
145
|
+
const records = await readRunRecords({
|
|
146
|
+
root: input.root,
|
|
147
|
+
runsFilePath: input.runsFilePath,
|
|
148
|
+
limit: input.limit,
|
|
149
|
+
predicate,
|
|
150
|
+
onWarning: (warning) => warnings.push(warning),
|
|
151
|
+
});
|
|
152
|
+
return { records, warnings };
|
|
153
|
+
}
|
|
154
|
+
export async function fetchRunsSafely(input) {
|
|
155
|
+
const { runId, filters, ...rest } = input;
|
|
156
|
+
const augmentedFilters = { ...(filters ?? {}), ...(runId ? { runId } : {}) };
|
|
157
|
+
const result = await fetchRuns({
|
|
158
|
+
...rest,
|
|
159
|
+
filters: augmentedFilters,
|
|
160
|
+
}).catch((error) => {
|
|
161
|
+
if (runId && isFileSystemError(error) && error.code === "ENOENT") {
|
|
162
|
+
throw new RunRecordNotFoundError(runId);
|
|
163
|
+
}
|
|
164
|
+
throw error;
|
|
165
|
+
});
|
|
166
|
+
if (runId) {
|
|
167
|
+
const warning = result.warnings.find((entry) => entry.runId === runId);
|
|
168
|
+
if (warning) {
|
|
169
|
+
if (warning.kind === "parse-error") {
|
|
170
|
+
throw new RunRecordParseError(warning.displayPath, warning.details);
|
|
171
|
+
}
|
|
172
|
+
throw new RunRecordNotFoundError(runId);
|
|
173
|
+
}
|
|
174
|
+
if (result.records.length === 0) {
|
|
175
|
+
throw new RunRecordNotFoundError(runId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
function shouldForceFlush(status) {
|
|
181
|
+
return status !== "running" && status !== "queued";
|
|
182
|
+
}
|
|
183
|
+
function mergeRunMetaStatus(buffered, disk) {
|
|
184
|
+
const latest = pickLatestApplyStatus(buffered.applyStatus, disk?.applyStatus);
|
|
185
|
+
const latestAuto = pickLatestAutoOutcome(buffered.auto, disk?.auto);
|
|
186
|
+
let merged = buffered;
|
|
187
|
+
if (latest) {
|
|
188
|
+
const bufferedStatus = buffered.applyStatus;
|
|
189
|
+
if (!bufferedStatus || !areSameApplyStatus(bufferedStatus, latest)) {
|
|
190
|
+
merged = {
|
|
191
|
+
...merged,
|
|
192
|
+
applyStatus: { ...latest },
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (latestAuto) {
|
|
197
|
+
const bufferedAuto = merged.auto;
|
|
198
|
+
if (!bufferedAuto || !areSameAutoOutcome(bufferedAuto, latestAuto)) {
|
|
199
|
+
merged = {
|
|
200
|
+
...merged,
|
|
201
|
+
auto: {
|
|
202
|
+
...latestAuto,
|
|
203
|
+
apply: {
|
|
204
|
+
...latestAuto.apply,
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return merged;
|
|
211
|
+
}
|
|
212
|
+
function pickLatestApplyStatus(buffered, disk) {
|
|
213
|
+
if (!buffered) {
|
|
214
|
+
return disk;
|
|
215
|
+
}
|
|
216
|
+
if (!disk) {
|
|
217
|
+
return buffered;
|
|
218
|
+
}
|
|
219
|
+
return compareApplyStatus(buffered, disk) >= 0 ? buffered : disk;
|
|
220
|
+
}
|
|
221
|
+
function compareApplyStatus(a, b) {
|
|
222
|
+
const aTime = Date.parse(a.appliedAt);
|
|
223
|
+
const bTime = Date.parse(b.appliedAt);
|
|
224
|
+
const aValid = Number.isFinite(aTime);
|
|
225
|
+
const bValid = Number.isFinite(bTime);
|
|
226
|
+
if (aValid && bValid) {
|
|
227
|
+
return aTime - bTime;
|
|
228
|
+
}
|
|
229
|
+
if (aValid) {
|
|
230
|
+
return 1;
|
|
231
|
+
}
|
|
232
|
+
if (bValid) {
|
|
233
|
+
return -1;
|
|
234
|
+
}
|
|
235
|
+
return a.appliedAt.localeCompare(b.appliedAt);
|
|
236
|
+
}
|
|
237
|
+
function areSameApplyStatus(a, b) {
|
|
238
|
+
return (a.agentId === b.agentId &&
|
|
239
|
+
a.status === b.status &&
|
|
240
|
+
a.appliedAt === b.appliedAt &&
|
|
241
|
+
a.ignoredBaseMismatch === b.ignoredBaseMismatch &&
|
|
242
|
+
a.appliedCommitSha === b.appliedCommitSha &&
|
|
243
|
+
(a.detail ?? undefined) === (b.detail ?? undefined));
|
|
244
|
+
}
|
|
245
|
+
function pickLatestAutoOutcome(buffered, disk) {
|
|
246
|
+
if (!buffered) {
|
|
247
|
+
return disk;
|
|
248
|
+
}
|
|
249
|
+
if (!disk) {
|
|
250
|
+
return buffered;
|
|
251
|
+
}
|
|
252
|
+
return compareAutoOutcome(buffered, disk) >= 0 ? buffered : disk;
|
|
253
|
+
}
|
|
254
|
+
function compareAutoOutcome(a, b) {
|
|
255
|
+
const aTime = Date.parse(a.completedAt);
|
|
256
|
+
const bTime = Date.parse(b.completedAt);
|
|
257
|
+
const aValid = Number.isFinite(aTime);
|
|
258
|
+
const bValid = Number.isFinite(bTime);
|
|
259
|
+
if (aValid && bValid) {
|
|
260
|
+
return aTime - bTime;
|
|
261
|
+
}
|
|
262
|
+
if (aValid) {
|
|
263
|
+
return 1;
|
|
264
|
+
}
|
|
265
|
+
if (bValid) {
|
|
266
|
+
return -1;
|
|
267
|
+
}
|
|
268
|
+
return a.completedAt.localeCompare(b.completedAt);
|
|
269
|
+
}
|
|
270
|
+
function areSameAutoOutcome(a, b) {
|
|
271
|
+
return (a.status === b.status &&
|
|
272
|
+
a.completedAt === b.completedAt &&
|
|
273
|
+
(a.detail ?? undefined) === (b.detail ?? undefined) &&
|
|
274
|
+
a.apply.status === b.apply.status &&
|
|
275
|
+
(a.apply.agentId ?? undefined) === (b.apply.agentId ?? undefined) &&
|
|
276
|
+
(a.apply.detail ?? undefined) === (b.apply.detail ?? undefined));
|
|
277
|
+
}
|
|
278
|
+
function buildRunPaths(root, runsFilePath) {
|
|
279
|
+
const runsRoot = getRunsDirectory(runsFilePath);
|
|
280
|
+
return {
|
|
281
|
+
root,
|
|
282
|
+
indexPath: runsFilePath,
|
|
283
|
+
sessionsDir: getSessionsDirectory(runsFilePath),
|
|
284
|
+
lockPath: join(runsRoot, HISTORY_LOCK_FILENAME),
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
function getRunsDirectory(runsFilePath) {
|
|
288
|
+
return dirname(runsFilePath);
|
|
289
|
+
}
|
|
290
|
+
function getSessionsDirectory(runsFilePath) {
|
|
291
|
+
return join(getRunsDirectory(runsFilePath), "sessions");
|
|
292
|
+
}
|
|
293
|
+
function mapWarning(warning) {
|
|
294
|
+
if (warning.kind === "parse-error") {
|
|
295
|
+
const parseWarning = warning;
|
|
296
|
+
return {
|
|
297
|
+
kind: "parse-error",
|
|
298
|
+
runId: parseWarning.sessionId,
|
|
299
|
+
recordPath: parseWarning.recordPath,
|
|
300
|
+
displayPath: parseWarning.displayPath,
|
|
301
|
+
details: parseWarning.details,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
const missingWarning = warning;
|
|
305
|
+
return {
|
|
306
|
+
kind: "missing-record",
|
|
307
|
+
runId: missingWarning.sessionId,
|
|
308
|
+
recordPath: missingWarning.recordPath,
|
|
309
|
+
displayPath: missingWarning.displayPath,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
const RUN_RECORDS_TEST_HOOKS = Symbol.for("voratiq.records.persistence.testHooks");
|
|
313
|
+
function registerRunRecordsTestHooks() {
|
|
314
|
+
const registry = globalThis;
|
|
315
|
+
registry[RUN_RECORDS_TEST_HOOKS] = {
|
|
316
|
+
setImplementation: setReadRunRecordsImplementation,
|
|
317
|
+
resetImplementation: resetReadRunRecordsImplementation,
|
|
318
|
+
getBufferSnapshot: snapshotRunRecordBuffers,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function snapshotRunRecordBuffers() {
|
|
322
|
+
return runPersistence.snapshotRecordBuffers().map((entry) => ({
|
|
323
|
+
key: entry.key,
|
|
324
|
+
runId: entry.sessionId,
|
|
325
|
+
hasFlushTimer: entry.hasFlushTimer,
|
|
326
|
+
}));
|
|
327
|
+
}
|
|
328
|
+
let runRecordsTestHooksRegistered = false;
|
|
329
|
+
export function enableRunRecordsTestHooks() {
|
|
330
|
+
assertTestHookRegistrationEnabled("records persistence");
|
|
331
|
+
if (runRecordsTestHooksRegistered) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
registerRunRecordsTestHooks();
|
|
335
|
+
runRecordsTestHooksRegistered = true;
|
|
336
|
+
}
|
|
337
|
+
export function areRunRecordsTestHooksRegistered() {
|
|
338
|
+
return runRecordsTestHooksRegistered;
|
|
339
|
+
}
|
|
340
|
+
export { RUN_RECORDS_TEST_HOOKS };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { toErrorMessage } from "../../../utils/errors.js";
|
|
2
|
+
import { RunHistoryLockTimeoutError, RunOptionValidationError, RunRecordMutationError, RunRecordNotFoundError, RunRecordParseError, } from "../model/errors.js";
|
|
3
|
+
export const runStoreErrorMapper = {
|
|
4
|
+
optionValidation: (error) => new RunOptionValidationError(error.option, error.detail),
|
|
5
|
+
recordParse: (error) => new RunRecordParseError(error.displayPath, error.details),
|
|
6
|
+
recordNotFound: (error) => new RunRecordNotFoundError(error.sessionId),
|
|
7
|
+
recordMutation: (error) => new RunRecordMutationError(error.detail),
|
|
8
|
+
historyLockTimeout: (error) => {
|
|
9
|
+
if (error instanceof RunHistoryLockTimeoutError) {
|
|
10
|
+
return error;
|
|
11
|
+
}
|
|
12
|
+
return new RunHistoryLockTimeoutError(error.lockPath);
|
|
13
|
+
},
|
|
14
|
+
fileSystem: (error) => new RunRecordMutationError(toErrorMessage(error)),
|
|
15
|
+
error: (error) => error,
|
|
16
|
+
unknown: (error) => new Error(toErrorMessage(error)),
|
|
17
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export interface LifecycleStatusGroups<TStatus extends string> {
|
|
3
|
+
queued: readonly TStatus[];
|
|
4
|
+
running: readonly TStatus[];
|
|
5
|
+
terminal: readonly TStatus[];
|
|
6
|
+
}
|
|
7
|
+
interface TimestampLifecycleRecord<TStatus extends string> {
|
|
8
|
+
status: TStatus;
|
|
9
|
+
startedAt?: string;
|
|
10
|
+
completedAt?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface LifecycleExecutionDurationInput<TStatus extends string> {
|
|
13
|
+
status: TStatus;
|
|
14
|
+
startedAt?: string;
|
|
15
|
+
completedAt?: string;
|
|
16
|
+
}
|
|
17
|
+
interface RecordTimestampLifecycle<TStatus extends string> extends TimestampLifecycleRecord<TStatus> {
|
|
18
|
+
createdAt: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function resolveLifecycleExecutionDurationMs<TStatus extends string>(lifecycle: LifecycleExecutionDurationInput<TStatus>, options: {
|
|
21
|
+
statusGroups: Pick<LifecycleStatusGroups<TStatus>, "running" | "terminal">;
|
|
22
|
+
now?: number;
|
|
23
|
+
}): number | undefined;
|
|
24
|
+
export declare function validateRecordLifecycleTimestamps<TStatus extends string>(record: RecordTimestampLifecycle<TStatus>, ctx: z.RefinementCtx, groups: LifecycleStatusGroups<TStatus>): void;
|
|
25
|
+
export declare function validateOperationLifecycleTimestamps<TStatus extends string>(record: TimestampLifecycleRecord<TStatus>, ctx: z.RefinementCtx, groups: LifecycleStatusGroups<TStatus>): void;
|
|
26
|
+
export declare function buildLifecycleStartFields(options: {
|
|
27
|
+
existingStartedAt: string | undefined;
|
|
28
|
+
timestamp?: string;
|
|
29
|
+
}): {
|
|
30
|
+
startedAt: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function buildRecordLifecycleCompleteFields(options: {
|
|
33
|
+
existing: {
|
|
34
|
+
startedAt?: string;
|
|
35
|
+
completedAt?: string;
|
|
36
|
+
};
|
|
37
|
+
startedAt?: string;
|
|
38
|
+
completedAt?: string;
|
|
39
|
+
}): {
|
|
40
|
+
startedAt: string;
|
|
41
|
+
completedAt: string;
|
|
42
|
+
};
|
|
43
|
+
export declare function buildOperationLifecycleCompleteFields(options: {
|
|
44
|
+
existing: {
|
|
45
|
+
startedAt?: string;
|
|
46
|
+
completedAt?: string;
|
|
47
|
+
};
|
|
48
|
+
startedAt?: string;
|
|
49
|
+
completedAt?: string;
|
|
50
|
+
}): {
|
|
51
|
+
startedAt: string;
|
|
52
|
+
completedAt: string;
|
|
53
|
+
};
|
|
54
|
+
export {};
|