open-multi-agent-kit 0.80.7 → 0.90.0
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/CHANGELOG.md +5 -27
- package/README.md +81 -38
- package/dist/agents/jailbreak/index.d.ts +7 -0
- package/dist/agents/jailbreak/index.d.ts.map +1 -0
- package/dist/agents/jailbreak/index.js +7 -0
- package/dist/agents/jailbreak/index.js.map +1 -0
- package/dist/agents/jailbreak/subagent-f.d.ts +44 -0
- package/dist/agents/jailbreak/subagent-f.d.ts.map +1 -0
- package/dist/agents/jailbreak/subagent-f.js +60 -0
- package/dist/agents/jailbreak/subagent-f.js.map +1 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/ci/verify-reporter.d.ts +22 -0
- package/dist/ci/verify-reporter.d.ts.map +1 -0
- package/dist/ci/verify-reporter.js +50 -0
- package/dist/ci/verify-reporter.js.map +1 -0
- package/dist/cli/args.d.ts +4 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +8 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/jailbreak-args.d.ts +26 -0
- package/dist/cli/jailbreak-args.d.ts.map +1 -0
- package/dist/cli/jailbreak-args.js +86 -0
- package/dist/cli/jailbreak-args.js.map +1 -0
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/commands/doctor-provider.d.ts +19 -0
- package/dist/commands/doctor-provider.d.ts.map +1 -0
- package/dist/commands/doctor-provider.js +123 -0
- package/dist/commands/doctor-provider.js.map +1 -0
- package/dist/commands/jailbreak.d.ts +49 -0
- package/dist/commands/jailbreak.d.ts.map +1 -0
- package/dist/commands/jailbreak.js +201 -0
- package/dist/commands/jailbreak.js.map +1 -0
- package/dist/config.d.ts +9 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +33 -52
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +16 -27
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +185 -89
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +3 -6
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +7 -7
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/automation/index.d.ts +359 -0
- package/dist/core/automation/index.d.ts.map +1 -0
- package/dist/core/automation/index.js +665 -0
- package/dist/core/automation/index.js.map +1 -0
- package/dist/core/bash-executor.d.ts +1 -0
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +1 -0
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/browser-use.d.ts +53 -0
- package/dist/core/browser-use.d.ts.map +1 -0
- package/dist/core/browser-use.js +108 -0
- package/dist/core/browser-use.js.map +1 -0
- package/dist/core/command-safety-parser.d.ts +77 -0
- package/dist/core/command-safety-parser.d.ts.map +1 -0
- package/dist/core/command-safety-parser.js +763 -0
- package/dist/core/command-safety-parser.js.map +1 -0
- package/dist/core/command-safety.d.ts.map +1 -1
- package/dist/core/command-safety.js +106 -3
- package/dist/core/command-safety.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +5 -21
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -101
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +21 -656
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/compactor.d.ts +42 -0
- package/dist/core/compactor.d.ts.map +1 -0
- package/dist/core/compactor.js +131 -0
- package/dist/core/compactor.js.map +1 -0
- package/dist/core/context-budget-compressors.d.ts +50 -0
- package/dist/core/context-budget-compressors.d.ts.map +1 -0
- package/dist/core/context-budget-compressors.js +166 -0
- package/dist/core/context-budget-compressors.js.map +1 -0
- package/dist/core/context-budget-governor-v2.d.ts +7 -0
- package/dist/core/context-budget-governor-v2.d.ts.map +1 -0
- package/dist/core/context-budget-governor-v2.js +7 -0
- package/dist/core/context-budget-governor-v2.js.map +1 -0
- package/dist/core/context-budget-governor.d.ts +67 -0
- package/dist/core/context-budget-governor.d.ts.map +1 -0
- package/dist/core/context-budget-governor.js +224 -0
- package/dist/core/context-budget-governor.js.map +1 -0
- package/dist/core/context-budget-headroom-candidates.d.ts +3 -0
- package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -0
- package/dist/core/context-budget-headroom-candidates.js +85 -0
- package/dist/core/context-budget-headroom-candidates.js.map +1 -0
- package/dist/core/context-budget-headroom-types.d.ts +67 -0
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -0
- package/dist/core/context-budget-headroom-types.js +46 -0
- package/dist/core/context-budget-headroom-types.js.map +1 -0
- package/dist/core/context-budget-headroom.d.ts +5 -0
- package/dist/core/context-budget-headroom.d.ts.map +1 -0
- package/dist/core/context-budget-headroom.js +123 -0
- package/dist/core/context-budget-headroom.js.map +1 -0
- package/dist/core/context-budget-relevance.d.ts +46 -0
- package/dist/core/context-budget-relevance.d.ts.map +1 -0
- package/dist/core/context-budget-relevance.js +329 -0
- package/dist/core/context-budget-relevance.js.map +1 -0
- package/dist/core/context-budget-system-prompt-items.d.ts +19 -0
- package/dist/core/context-budget-system-prompt-items.d.ts.map +1 -0
- package/dist/core/context-budget-system-prompt-items.js +143 -0
- package/dist/core/context-budget-system-prompt-items.js.map +1 -0
- package/dist/core/context-budget-system-prompt.d.ts +31 -0
- package/dist/core/context-budget-system-prompt.d.ts.map +1 -0
- package/dist/core/context-budget-system-prompt.js +87 -0
- package/dist/core/context-budget-system-prompt.js.map +1 -0
- package/dist/core/context-budget-token-counter.d.ts +34 -0
- package/dist/core/context-budget-token-counter.d.ts.map +1 -0
- package/dist/core/context-budget-token-counter.js +315 -0
- package/dist/core/context-budget-token-counter.js.map +1 -0
- package/dist/core/context-budget-v2-coverage.d.ts +5 -0
- package/dist/core/context-budget-v2-coverage.d.ts.map +1 -0
- package/dist/core/context-budget-v2-coverage.js +58 -0
- package/dist/core/context-budget-v2-coverage.js.map +1 -0
- package/dist/core/context-budget-v2-plan-hash.d.ts +12 -0
- package/dist/core/context-budget-v2-plan-hash.d.ts.map +1 -0
- package/dist/core/context-budget-v2-plan-hash.js +38 -0
- package/dist/core/context-budget-v2-plan-hash.js.map +1 -0
- package/dist/core/context-budget-v2-planner.d.ts +3 -0
- package/dist/core/context-budget-v2-planner.d.ts.map +1 -0
- package/dist/core/context-budget-v2-planner.js +143 -0
- package/dist/core/context-budget-v2-planner.js.map +1 -0
- package/dist/core/context-budget-v2-scoring.d.ts +14 -0
- package/dist/core/context-budget-v2-scoring.d.ts.map +1 -0
- package/dist/core/context-budget-v2-scoring.js +114 -0
- package/dist/core/context-budget-v2-scoring.js.map +1 -0
- package/dist/core/context-budget-v2-selection.d.ts +32 -0
- package/dist/core/context-budget-v2-selection.d.ts.map +1 -0
- package/dist/core/context-budget-v2-selection.js +158 -0
- package/dist/core/context-budget-v2-selection.js.map +1 -0
- package/dist/core/context-budget-v2-tiers.d.ts +15 -0
- package/dist/core/context-budget-v2-tiers.d.ts.map +1 -0
- package/dist/core/context-budget-v2-tiers.js +68 -0
- package/dist/core/context-budget-v2-tiers.js.map +1 -0
- package/dist/core/context-budget-v2-types.d.ts +92 -0
- package/dist/core/context-budget-v2-types.d.ts.map +1 -0
- package/dist/core/context-budget-v2-types.js +24 -0
- package/dist/core/context-budget-v2-types.js.map +1 -0
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/diagnostics.d.ts +6 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/domain-confidence.d.ts +9 -0
- package/dist/core/domain-confidence.d.ts.map +1 -0
- package/dist/core/domain-confidence.js +39 -0
- package/dist/core/domain-confidence.js.map +1 -0
- package/dist/core/domain-dispatch.d.ts +44 -0
- package/dist/core/domain-dispatch.d.ts.map +1 -0
- package/dist/core/domain-dispatch.js +118 -0
- package/dist/core/domain-dispatch.js.map +1 -0
- package/dist/core/domain-loadouts.d.ts +76 -0
- package/dist/core/domain-loadouts.d.ts.map +1 -0
- package/dist/core/domain-loadouts.js +981 -0
- package/dist/core/domain-loadouts.js.map +1 -0
- package/dist/core/domain-registry.d.ts +7 -0
- package/dist/core/domain-registry.d.ts.map +1 -0
- package/dist/core/domain-registry.js +11 -0
- package/dist/core/domain-registry.js.map +1 -0
- package/dist/core/domain-router.d.ts +16 -0
- package/dist/core/domain-router.d.ts.map +1 -0
- package/dist/core/domain-router.js +24 -0
- package/dist/core/domain-router.js.map +1 -0
- package/dist/core/domain-score.d.ts +13 -0
- package/dist/core/domain-score.d.ts.map +1 -0
- package/dist/core/domain-score.js +48 -0
- package/dist/core/domain-score.js.map +1 -0
- package/dist/core/domain-trigger-match.d.ts +14 -0
- package/dist/core/domain-trigger-match.d.ts.map +1 -0
- package/dist/core/domain-trigger-match.js +51 -0
- package/dist/core/domain-trigger-match.js.map +1 -0
- package/dist/core/domain-types.d.ts +30 -0
- package/dist/core/domain-types.d.ts.map +1 -0
- package/dist/core/domain-types.js +2 -0
- package/dist/core/domain-types.js.map +1 -0
- package/dist/core/exact-cache-policy.d.ts +8 -0
- package/dist/core/exact-cache-policy.d.ts.map +1 -1
- package/dist/core/exact-cache-policy.js +9 -0
- package/dist/core/exact-cache-policy.js.map +1 -1
- package/dist/core/exec.d.ts +0 -2
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +0 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/index.d.ts +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.js +1 -3
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/builtin/command-safety-gate.d.ts +3 -0
- package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -1
- package/dist/core/extensions/builtin/command-safety-gate.js +15 -3
- package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -1
- package/dist/core/extensions/builtin/todo-checklist.d.ts +20 -0
- package/dist/core/extensions/builtin/todo-checklist.d.ts.map +1 -0
- package/dist/core/extensions/builtin/todo-checklist.js +73 -0
- package/dist/core/extensions/builtin/todo-checklist.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +4 -4
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +57 -92
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +7 -35
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +3 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +4 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/headroom.d.ts +45 -0
- package/dist/core/headroom.d.ts.map +1 -0
- package/dist/core/headroom.js +171 -0
- package/dist/core/headroom.js.map +1 -0
- package/dist/core/hook-inventory.d.ts +4 -2
- package/dist/core/hook-inventory.d.ts.map +1 -1
- package/dist/core/hook-inventory.js +80 -11
- package/dist/core/hook-inventory.js.map +1 -1
- package/dist/core/hooks/fail-closed.d.ts +4 -1
- package/dist/core/hooks/fail-closed.d.ts.map +1 -1
- package/dist/core/hooks/fail-closed.js +79 -5
- package/dist/core/hooks/fail-closed.js.map +1 -1
- package/dist/core/hooks/index.d.ts +2 -2
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +1 -1
- package/dist/core/hooks/index.js.map +1 -1
- package/dist/core/hooks/types.d.ts +9 -0
- package/dist/core/hooks/types.d.ts.map +1 -1
- package/dist/core/hooks/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -14
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -31
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lean-ctx.d.ts +99 -0
- package/dist/core/lean-ctx.d.ts.map +1 -0
- package/dist/core/lean-ctx.js +225 -0
- package/dist/core/lean-ctx.js.map +1 -0
- package/dist/core/loadout-compose.d.ts +53 -0
- package/dist/core/loadout-compose.d.ts.map +1 -0
- package/dist/core/loadout-compose.js +172 -0
- package/dist/core/loadout-compose.js.map +1 -0
- package/dist/core/loadout-policy-bridge.d.ts +22 -0
- package/dist/core/loadout-policy-bridge.d.ts.map +1 -0
- package/dist/core/loadout-policy-bridge.js +52 -0
- package/dist/core/loadout-policy-bridge.js.map +1 -0
- package/dist/core/loadout-runtime.d.ts +22 -0
- package/dist/core/loadout-runtime.d.ts.map +1 -1
- package/dist/core/loadout-runtime.js +41 -5
- package/dist/core/loadout-runtime.js.map +1 -1
- package/dist/core/loadout-safety.d.ts +55 -0
- package/dist/core/loadout-safety.d.ts.map +1 -0
- package/dist/core/loadout-safety.js +213 -0
- package/dist/core/loadout-safety.js.map +1 -0
- package/dist/core/loadouts.d.ts +4 -2
- package/dist/core/loadouts.d.ts.map +1 -1
- package/dist/core/loadouts.js +116 -5
- package/dist/core/loadouts.js.map +1 -1
- package/dist/core/loop-gates.d.ts +48 -0
- package/dist/core/loop-gates.d.ts.map +1 -0
- package/dist/core/loop-gates.js +352 -0
- package/dist/core/loop-gates.js.map +1 -0
- package/dist/core/loop-registry.d.ts +77 -0
- package/dist/core/loop-registry.d.ts.map +1 -0
- package/dist/core/loop-registry.js +831 -0
- package/dist/core/loop-registry.js.map +1 -0
- package/dist/core/loop-types.d.ts +194 -0
- package/dist/core/loop-types.d.ts.map +1 -0
- package/dist/core/loop-types.js +2 -0
- package/dist/core/loop-types.js.map +1 -0
- package/dist/core/mcp-inventory.d.ts +7 -0
- package/dist/core/mcp-inventory.d.ts.map +1 -1
- package/dist/core/mcp-inventory.js +5 -1
- package/dist/core/mcp-inventory.js.map +1 -1
- package/dist/core/mcp-presets.d.ts +43 -2
- package/dist/core/mcp-presets.d.ts.map +1 -1
- package/dist/core/mcp-presets.js +298 -2
- package/dist/core/mcp-presets.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/metrics-sampler.d.ts +11 -0
- package/dist/core/metrics-sampler.d.ts.map +1 -1
- package/dist/core/metrics-sampler.js +52 -13
- package/dist/core/metrics-sampler.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -2
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +18 -41
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-gallery-identity.d.ts +7 -0
- package/dist/core/package-gallery-identity.d.ts.map +1 -0
- package/dist/core/package-gallery-identity.js +31 -0
- package/dist/core/package-gallery-identity.js.map +1 -0
- package/dist/core/package-gallery-install.d.ts +6 -0
- package/dist/core/package-gallery-install.d.ts.map +1 -0
- package/dist/core/package-gallery-install.js +59 -0
- package/dist/core/package-gallery-install.js.map +1 -0
- package/dist/core/package-gallery-manifest.d.ts +13 -0
- package/dist/core/package-gallery-manifest.d.ts.map +1 -0
- package/dist/core/package-gallery-manifest.js +183 -0
- package/dist/core/package-gallery-manifest.js.map +1 -0
- package/dist/core/package-gallery-trial.d.ts +4 -0
- package/dist/core/package-gallery-trial.d.ts.map +1 -0
- package/dist/core/package-gallery-trial.js +55 -0
- package/dist/core/package-gallery-trial.js.map +1 -0
- package/dist/core/package-gallery-types.d.ts +71 -0
- package/dist/core/package-gallery-types.d.ts.map +1 -0
- package/dist/core/package-gallery-types.js +2 -0
- package/dist/core/package-gallery-types.js.map +1 -0
- package/dist/core/package-gallery.d.ts +5 -123
- package/dist/core/package-gallery.d.ts.map +1 -1
- package/dist/core/package-gallery.js +5 -391
- package/dist/core/package-gallery.js.map +1 -1
- package/dist/core/package-manager.d.ts +0 -69
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +69 -367
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/package-procurement.d.ts +4 -4
- package/dist/core/package-procurement.d.ts.map +1 -1
- package/dist/core/package-procurement.js +29 -17
- package/dist/core/package-procurement.js.map +1 -1
- package/dist/core/pi-package-intake-candidates.d.ts +21 -0
- package/dist/core/pi-package-intake-candidates.d.ts.map +1 -0
- package/dist/core/pi-package-intake-candidates.js +109 -0
- package/dist/core/pi-package-intake-candidates.js.map +1 -0
- package/dist/core/pi-package-intake.d.ts +43 -0
- package/dist/core/pi-package-intake.d.ts.map +1 -0
- package/dist/core/pi-package-intake.js +122 -0
- package/dist/core/pi-package-intake.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/read-anchors.d.ts +1 -1
- package/dist/core/read-anchors.d.ts.map +1 -1
- package/dist/core/read-anchors.js +1 -1
- package/dist/core/read-anchors.js.map +1 -1
- package/dist/core/recovery-checkpoint.d.ts +2 -2
- package/dist/core/recovery-checkpoint.d.ts.map +1 -1
- package/dist/core/recovery-checkpoint.js +2 -2
- package/dist/core/recovery-checkpoint.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +2 -30
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +12 -20
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +67 -90
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sandbox-policy-v2.d.ts +49 -0
- package/dist/core/sandbox-policy-v2.d.ts.map +1 -0
- package/dist/core/sandbox-policy-v2.js +368 -0
- package/dist/core/sandbox-policy-v2.js.map +1 -0
- package/dist/core/sdk.d.ts +10 -78
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +97 -139
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/semantic-cache-policy.d.ts +7 -1
- package/dist/core/semantic-cache-policy.d.ts.map +1 -1
- package/dist/core/semantic-cache-policy.js +8 -0
- package/dist/core/semantic-cache-policy.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +5 -6
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -18
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -48
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +5 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +149 -36
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +0 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/subagent-orchestration.d.ts +73 -0
- package/dist/core/subagent-orchestration.d.ts.map +1 -0
- package/dist/core/subagent-orchestration.js +408 -0
- package/dist/core/subagent-orchestration.js.map +1 -0
- package/dist/core/system-prompt.d.ts +5 -4
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +57 -36
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/timings.d.ts +0 -4
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +0 -4
- package/dist/core/timings.js.map +1 -1
- package/dist/core/todo-runtime-state.d.ts +5 -0
- package/dist/core/todo-runtime-state.d.ts.map +1 -0
- package/dist/core/todo-runtime-state.js +12 -0
- package/dist/core/todo-runtime-state.js.map +1 -0
- package/dist/core/todo-state.d.ts +53 -0
- package/dist/core/todo-state.d.ts.map +1 -0
- package/dist/core/todo-state.js +87 -0
- package/dist/core/todo-state.js.map +1 -0
- package/dist/core/token-optimizer.d.ts +58 -0
- package/dist/core/token-optimizer.d.ts.map +1 -0
- package/dist/core/token-optimizer.js +179 -0
- package/dist/core/token-optimizer.js.map +1 -0
- package/dist/core/tools/bash.d.ts +8 -9
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +9 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -14
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +4 -25
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -4
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -4
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -4
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +2 -5
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +2 -2
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -4
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -4
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +2 -14
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +4 -28
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts +2 -4
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +4 -4
- package/dist/core/tools/write.js.map +1 -1
- package/dist/encoding/index.d.ts +6 -0
- package/dist/encoding/index.d.ts.map +1 -0
- package/dist/encoding/index.js +6 -0
- package/dist/encoding/index.js.map +1 -0
- package/dist/encoding/l4-encoder.d.ts +96 -0
- package/dist/encoding/l4-encoder.d.ts.map +1 -0
- package/dist/encoding/l4-encoder.js +474 -0
- package/dist/encoding/l4-encoder.js.map +1 -0
- package/dist/fuzzing/index.d.ts +6 -0
- package/dist/fuzzing/index.d.ts.map +1 -0
- package/dist/fuzzing/index.js +6 -0
- package/dist/fuzzing/index.js.map +1 -0
- package/dist/fuzzing/mutation-engine.d.ts +93 -0
- package/dist/fuzzing/mutation-engine.d.ts.map +1 -0
- package/dist/fuzzing/mutation-engine.js +244 -0
- package/dist/fuzzing/mutation-engine.js.map +1 -0
- package/dist/guardrails/audit-logger.d.ts +4 -0
- package/dist/guardrails/audit-logger.d.ts.map +1 -0
- package/dist/guardrails/audit-logger.js +28 -0
- package/dist/guardrails/audit-logger.js.map +1 -0
- package/dist/guardrails/evidence-system.d.ts +61 -0
- package/dist/guardrails/evidence-system.d.ts.map +1 -0
- package/dist/guardrails/evidence-system.js +302 -0
- package/dist/guardrails/evidence-system.js.map +1 -0
- package/dist/guardrails/freedomd-adapter.d.ts +16 -0
- package/dist/guardrails/freedomd-adapter.d.ts.map +1 -0
- package/dist/guardrails/freedomd-adapter.js +87 -0
- package/dist/guardrails/freedomd-adapter.js.map +1 -0
- package/dist/index.d.ts +5 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -17
- package/dist/index.js.map +1 -1
- package/dist/jailbreak-extension.d.ts +48 -0
- package/dist/jailbreak-extension.d.ts.map +1 -0
- package/dist/jailbreak-extension.js +47 -0
- package/dist/jailbreak-extension.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +0 -37
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +6 -414
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-box.d.ts +15 -0
- package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-box.js +55 -0
- package/dist/modes/interactive/components/control-panel-box.js.map +1 -0
- package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient-motion.js +2 -36
- package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient.d.ts +1 -0
- package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient.js +6 -5
- package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-layout.d.ts +30 -0
- package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-layout.js +197 -0
- package/dist/modes/interactive/components/control-panel-layout.js.map +1 -0
- package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +6 -0
- package/dist/modes/interactive/components/control-panel-runtime-status.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-runtime-status.js +29 -0
- package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -0
- package/dist/modes/interactive/components/control-panel.d.ts +9 -31
- package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel.js +49 -168
- package/dist/modes/interactive/components/control-panel.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +14 -22
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +7 -9
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +0 -2
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -2
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +13 -47
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +118 -193
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -2
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +2 -11
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +8 -7
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +48 -7
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/todo-checklist.d.ts +31 -0
- package/dist/modes/interactive/components/todo-checklist.d.ts.map +1 -0
- package/dist/modes/interactive/components/todo-checklist.js +121 -0
- package/dist/modes/interactive/components/todo-checklist.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -8
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +80 -232
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/omk-control-grid-dark.json +65 -77
- package/dist/modes/interactive/theme/omk-neon-control.json +90 -0
- package/dist/modes/interactive/theme/rust-forge.json +14 -24
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +25 -45
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +0 -4
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modules/index.d.ts +8 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +7 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/lrl-bypass.d.ts +40 -0
- package/dist/modules/lrl-bypass.d.ts.map +1 -0
- package/dist/modules/lrl-bypass.js +84 -0
- package/dist/modules/lrl-bypass.js.map +1 -0
- package/dist/modules/lrl-deps.d.ts +38 -0
- package/dist/modules/lrl-deps.d.ts.map +1 -0
- package/dist/modules/lrl-deps.js +128 -0
- package/dist/modules/lrl-deps.js.map +1 -0
- package/dist/multiturn/easl-chain.d.ts +113 -0
- package/dist/multiturn/easl-chain.d.ts.map +1 -0
- package/dist/multiturn/easl-chain.js +351 -0
- package/dist/multiturn/easl-chain.js.map +1 -0
- package/dist/multiturn/index.d.ts +6 -0
- package/dist/multiturn/index.d.ts.map +1 -0
- package/dist/multiturn/index.js +6 -0
- package/dist/multiturn/index.js.map +1 -0
- package/dist/orchestration/lane-grant-auditor.d.ts +4 -0
- package/dist/orchestration/lane-grant-auditor.d.ts.map +1 -0
- package/dist/orchestration/lane-grant-auditor.js +87 -0
- package/dist/orchestration/lane-grant-auditor.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +48 -113
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/routing/fallback-router.d.ts +123 -0
- package/dist/routing/fallback-router.d.ts.map +1 -0
- package/dist/routing/fallback-router.js +355 -0
- package/dist/routing/fallback-router.js.map +1 -0
- package/dist/routing/index.d.ts +6 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +6 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/types/evidence.d.ts +117 -0
- package/dist/types/evidence.d.ts.map +1 -0
- package/dist/types/evidence.js +8 -0
- package/dist/types/evidence.js.map +1 -0
- package/dist/types/guardrails.d.ts +61 -0
- package/dist/types/guardrails.d.ts.map +1 -0
- package/dist/types/guardrails.js +9 -0
- package/dist/types/guardrails.js.map +1 -0
- package/dist/types/jailbreak.d.ts +246 -0
- package/dist/types/jailbreak.d.ts.map +1 -0
- package/dist/types/jailbreak.js +8 -0
- package/dist/types/jailbreak.js.map +1 -0
- package/dist/types/lane-grant.d.ts +58 -0
- package/dist/types/lane-grant.d.ts.map +1 -0
- package/dist/types/lane-grant.js +9 -0
- package/dist/types/lane-grant.js.map +1 -0
- package/dist/utils/jailbreak/common.d.ts +63 -0
- package/dist/utils/jailbreak/common.d.ts.map +1 -0
- package/dist/utils/jailbreak/common.js +130 -0
- package/dist/utils/jailbreak/common.js.map +1 -0
- package/dist/utils/jailbreak/index.d.ts +7 -0
- package/dist/utils/jailbreak/index.d.ts.map +1 -0
- package/dist/utils/jailbreak/index.js +7 -0
- package/dist/utils/jailbreak/index.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/compaction.md +8 -21
- package/docs/custom-provider.md +2 -2
- package/docs/development.md +1 -1
- package/docs/extensions.md +11 -11
- package/docs/loadout-domains/README.md +70 -0
- package/docs/loadout-domains/ai-agent-ops.md +94 -0
- package/docs/loadout-domains/backend-api.md +116 -0
- package/docs/loadout-domains/data-science.md +100 -0
- package/docs/loadout-domains/devops-infra.md +85 -0
- package/docs/loadout-domains/docs-writing.md +92 -0
- package/docs/loadout-domains/frontend-ui.md +128 -0
- package/docs/loadout-domains/general.md +62 -0
- package/docs/loadout-domains/mobile.md +84 -0
- package/docs/loadout-domains/qa-testing.md +87 -0
- package/docs/loadout-domains/research.md +80 -0
- package/docs/loadout-domains/security-audit.md +97 -0
- package/docs/packages.md +7 -48
- package/docs/prompt-templates.md +0 -2
- package/docs/providers.md +12 -0
- package/docs/sdk.md +3 -3
- package/docs/security.md +145 -0
- package/docs/session-format.md +1 -1
- package/docs/themes.md +8 -7
- package/docs/tui.md +14 -14
- package/docs/usage.md +6 -16
- package/examples/extensions/README.md +2 -2
- package/examples/extensions/aside-computer-use/README.md +114 -0
- package/examples/extensions/aside-computer-use/action-scoring.ts +122 -0
- package/examples/extensions/aside-computer-use/assertions.ts +380 -0
- package/examples/extensions/aside-computer-use/controller.ts +491 -0
- package/examples/extensions/aside-computer-use/evidence.ts +229 -0
- package/examples/extensions/aside-computer-use/golden-trace.ts +141 -0
- package/examples/extensions/aside-computer-use/index.ts +76 -0
- package/examples/extensions/aside-computer-use/mcp-client.ts +381 -0
- package/examples/extensions/aside-computer-use/observation-snapshot.ts +121 -0
- package/examples/extensions/aside-computer-use/package.json +16 -0
- package/examples/extensions/aside-computer-use/policy.ts +257 -0
- package/examples/extensions/aside-computer-use/risk-authorize.ts +200 -0
- package/examples/extensions/aside-computer-use/risk-classifier.ts +205 -0
- package/examples/extensions/aside-computer-use/schema-fingerprint.ts +80 -0
- package/examples/extensions/aside-computer-use/session-binding.ts +161 -0
- package/examples/extensions/aside-computer-use/tools.ts +449 -0
- package/examples/extensions/aside-computer-use/types.ts +217 -0
- package/examples/extensions/aside-computer-use/url-origin.ts +132 -0
- package/examples/extensions/bash-spawn-hook.ts +1 -1
- package/examples/extensions/border-status-editor.ts +2 -2
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/custom-compaction.ts +1 -1
- package/examples/extensions/custom-footer.ts +2 -2
- package/examples/extensions/custom-header.ts +8 -8
- package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/doom-overlay/README.md +1 -2
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +4 -4
- package/examples/extensions/doom-overlay/doom/doomgeneric_omk.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +2 -2
- package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
- package/examples/extensions/git-merge-and-resolve.ts +1 -1
- package/examples/extensions/github-issue-autocomplete.ts +1 -6
- package/examples/extensions/gondolin/index.ts +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +1 -1
- package/examples/extensions/inline-bash.ts +1 -1
- package/examples/extensions/input-transform-streaming.ts +1 -1
- package/examples/extensions/input-transform.ts +2 -2
- package/examples/extensions/mac-system-theme.ts +1 -1
- package/examples/extensions/message-renderer.ts +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/modal-editor.ts +1 -1
- package/examples/extensions/overlay-qa-tests.ts +7 -7
- package/examples/extensions/overlay-test.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +3 -3
- package/examples/extensions/preset.ts +4 -4
- package/examples/extensions/provider-payload.ts +6 -3
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/question.ts +1 -1
- package/examples/extensions/questionnaire.ts +1 -1
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/shutdown-command.ts +5 -5
- package/examples/extensions/snake.ts +1 -1
- package/examples/extensions/space-invaders.ts +1 -1
- package/examples/extensions/structured-output.ts +1 -1
- package/examples/extensions/subagent/agents.ts +2 -2
- package/examples/extensions/subagent/index.ts +19 -51
- package/examples/extensions/summarize.ts +2 -2
- package/examples/extensions/tic-tac-toe.ts +2 -2
- package/examples/extensions/todo.ts +2 -2
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/extensions/tools.ts +1 -1
- package/examples/extensions/truncated-tool.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +3 -3
- package/examples/rpc-extension-ui.ts +1 -9
- package/examples/sdk/02-custom-model.ts +1 -1
- package/examples/sdk/07-context-files.ts +0 -2
- package/examples/sdk/12-full-control.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +1805 -0
- package/package.json +10 -32
- package/dist/core/compaction/pruner-policy.d.ts +0 -84
- package/dist/core/compaction/pruner-policy.d.ts.map +0 -1
- package/dist/core/compaction/pruner-policy.js +0 -273
- package/dist/core/compaction/pruner-policy.js.map +0 -1
- package/dist/core/context-graph-identity-resolution.d.ts +0 -114
- package/dist/core/context-graph-identity-resolution.d.ts.map +0 -1
- package/dist/core/context-graph-identity-resolution.js +0 -127
- package/dist/core/context-graph-identity-resolution.js.map +0 -1
- package/dist/core/context-graph-memory-store.d.ts +0 -153
- package/dist/core/context-graph-memory-store.d.ts.map +0 -1
- package/dist/core/context-graph-memory-store.js +0 -377
- package/dist/core/context-graph-memory-store.js.map +0 -1
- package/dist/core/context-graph-ontology-generation.d.ts +0 -104
- package/dist/core/context-graph-ontology-generation.d.ts.map +0 -1
- package/dist/core/context-graph-ontology-generation.js +0 -135
- package/dist/core/context-graph-ontology-generation.js.map +0 -1
- package/dist/core/context-graph-ontology-registry.d.ts +0 -766
- package/dist/core/context-graph-ontology-registry.d.ts.map +0 -1
- package/dist/core/context-graph-ontology-registry.js +0 -1133
- package/dist/core/context-graph-ontology-registry.js.map +0 -1
- package/dist/core/context-graph-policy.d.ts +0 -68
- package/dist/core/context-graph-policy.d.ts.map +0 -1
- package/dist/core/context-graph-policy.js +0 -221
- package/dist/core/context-graph-policy.js.map +0 -1
- package/dist/core/context-graph-reasoning.d.ts +0 -130
- package/dist/core/context-graph-reasoning.d.ts.map +0 -1
- package/dist/core/context-graph-reasoning.js +0 -442
- package/dist/core/context-graph-reasoning.js.map +0 -1
- package/dist/core/context-graph-retrieval.d.ts +0 -120
- package/dist/core/context-graph-retrieval.d.ts.map +0 -1
- package/dist/core/context-graph-retrieval.js +0 -288
- package/dist/core/context-graph-retrieval.js.map +0 -1
- package/dist/core/contract-verification.d.ts +0 -78
- package/dist/core/contract-verification.d.ts.map +0 -1
- package/dist/core/contract-verification.js +0 -110
- package/dist/core/contract-verification.js.map +0 -1
- package/dist/core/freedom/banner.d.ts +0 -14
- package/dist/core/freedom/banner.d.ts.map +0 -1
- package/dist/core/freedom/banner.js +0 -22
- package/dist/core/freedom/banner.js.map +0 -1
- package/dist/core/freedom/config.d.ts +0 -27
- package/dist/core/freedom/config.d.ts.map +0 -1
- package/dist/core/freedom/config.js +0 -216
- package/dist/core/freedom/config.js.map +0 -1
- package/dist/core/freedom/index.d.ts +0 -23
- package/dist/core/freedom/index.d.ts.map +0 -1
- package/dist/core/freedom/index.js +0 -19
- package/dist/core/freedom/index.js.map +0 -1
- package/dist/core/freedom/policy.d.ts +0 -42
- package/dist/core/freedom/policy.d.ts.map +0 -1
- package/dist/core/freedom/policy.js +0 -47
- package/dist/core/freedom/policy.js.map +0 -1
- package/dist/core/freedom/safety-floor.d.ts +0 -73
- package/dist/core/freedom/safety-floor.d.ts.map +0 -1
- package/dist/core/freedom/safety-floor.js +0 -275
- package/dist/core/freedom/safety-floor.js.map +0 -1
- package/dist/core/harness-control-events.d.ts +0 -91
- package/dist/core/harness-control-events.d.ts.map +0 -1
- package/dist/core/harness-control-events.js +0 -514
- package/dist/core/harness-control-events.js.map +0 -1
- package/dist/core/harness-control-replay.d.ts +0 -31
- package/dist/core/harness-control-replay.d.ts.map +0 -1
- package/dist/core/harness-control-replay.js +0 -187
- package/dist/core/harness-control-replay.js.map +0 -1
- package/dist/core/headroom-middleware.d.ts +0 -35
- package/dist/core/headroom-middleware.d.ts.map +0 -1
- package/dist/core/headroom-middleware.js +0 -166
- package/dist/core/headroom-middleware.js.map +0 -1
- package/dist/core/lean-context-middleware.d.ts +0 -12
- package/dist/core/lean-context-middleware.d.ts.map +0 -1
- package/dist/core/lean-context-middleware.js +0 -87
- package/dist/core/lean-context-middleware.js.map +0 -1
- package/dist/core/lean-context-policy.d.ts +0 -45
- package/dist/core/lean-context-policy.d.ts.map +0 -1
- package/dist/core/lean-context-policy.js +0 -108
- package/dist/core/lean-context-policy.js.map +0 -1
- package/dist/core/native-adoption-benchmark.d.ts +0 -166
- package/dist/core/native-adoption-benchmark.d.ts.map +0 -1
- package/dist/core/native-adoption-benchmark.js +0 -624
- package/dist/core/native-adoption-benchmark.js.map +0 -1
- package/dist/core/observability-trace.d.ts +0 -80
- package/dist/core/observability-trace.d.ts.map +0 -1
- package/dist/core/observability-trace.js +0 -140
- package/dist/core/observability-trace.js.map +0 -1
- package/dist/core/orchestration/checkpoint.d.ts +0 -83
- package/dist/core/orchestration/checkpoint.d.ts.map +0 -1
- package/dist/core/orchestration/checkpoint.js +0 -152
- package/dist/core/orchestration/checkpoint.js.map +0 -1
- package/dist/core/orchestration/errors.d.ts +0 -74
- package/dist/core/orchestration/errors.d.ts.map +0 -1
- package/dist/core/orchestration/errors.js +0 -52
- package/dist/core/orchestration/errors.js.map +0 -1
- package/dist/core/orchestration/merge-queue.d.ts +0 -121
- package/dist/core/orchestration/merge-queue.d.ts.map +0 -1
- package/dist/core/orchestration/merge-queue.js +0 -149
- package/dist/core/orchestration/merge-queue.js.map +0 -1
- package/dist/core/orchestration/recovery.d.ts +0 -106
- package/dist/core/orchestration/recovery.d.ts.map +0 -1
- package/dist/core/orchestration/recovery.js +0 -110
- package/dist/core/orchestration/recovery.js.map +0 -1
- package/dist/core/orchestration/replay-ledger.d.ts +0 -76
- package/dist/core/orchestration/replay-ledger.d.ts.map +0 -1
- package/dist/core/orchestration/replay-ledger.js +0 -395
- package/dist/core/orchestration/replay-ledger.js.map +0 -1
- package/dist/core/orchestration/scheduler-state.d.ts +0 -78
- package/dist/core/orchestration/scheduler-state.d.ts.map +0 -1
- package/dist/core/orchestration/scheduler-state.js +0 -185
- package/dist/core/orchestration/scheduler-state.js.map +0 -1
- package/dist/core/orchestration/scheduler-store.d.ts +0 -309
- package/dist/core/orchestration/scheduler-store.d.ts.map +0 -1
- package/dist/core/orchestration/scheduler-store.js +0 -368
- package/dist/core/orchestration/scheduler-store.js.map +0 -1
- package/dist/core/orchestration/sqlite-scheduler-store.d.ts +0 -57
- package/dist/core/orchestration/sqlite-scheduler-store.d.ts.map +0 -1
- package/dist/core/orchestration/sqlite-scheduler-store.js +0 -528
- package/dist/core/orchestration/sqlite-scheduler-store.js.map +0 -1
- package/dist/core/orchestration/transaction-coordinator.d.ts +0 -217
- package/dist/core/orchestration/transaction-coordinator.d.ts.map +0 -1
- package/dist/core/orchestration/transaction-coordinator.js +0 -281
- package/dist/core/orchestration/transaction-coordinator.js.map +0 -1
- package/dist/core/orchestration/verification-contract.d.ts +0 -197
- package/dist/core/orchestration/verification-contract.d.ts.map +0 -1
- package/dist/core/orchestration/verification-contract.js +0 -145
- package/dist/core/orchestration/verification-contract.js.map +0 -1
- package/dist/core/package-composition.d.ts +0 -68
- package/dist/core/package-composition.d.ts.map +0 -1
- package/dist/core/package-composition.js +0 -304
- package/dist/core/package-composition.js.map +0 -1
- package/dist/core/package-trial-runtime.d.ts +0 -75
- package/dist/core/package-trial-runtime.d.ts.map +0 -1
- package/dist/core/package-trial-runtime.js +0 -73
- package/dist/core/package-trial-runtime.js.map +0 -1
- package/dist/core/package-trial-sandbox.d.ts +0 -27
- package/dist/core/package-trial-sandbox.d.ts.map +0 -1
- package/dist/core/package-trial-sandbox.js +0 -102
- package/dist/core/package-trial-sandbox.js.map +0 -1
- package/dist/core/policy-overlays-runtime.d.ts +0 -141
- package/dist/core/policy-overlays-runtime.d.ts.map +0 -1
- package/dist/core/policy-overlays-runtime.js +0 -720
- package/dist/core/policy-overlays-runtime.js.map +0 -1
- package/dist/core/read-anchor-registry.d.ts +0 -27
- package/dist/core/read-anchor-registry.d.ts.map +0 -1
- package/dist/core/read-anchor-registry.js +0 -103
- package/dist/core/read-anchor-registry.js.map +0 -1
- package/dist/core/read-content-cache.d.ts +0 -22
- package/dist/core/read-content-cache.d.ts.map +0 -1
- package/dist/core/read-content-cache.js +0 -79
- package/dist/core/read-content-cache.js.map +0 -1
- package/dist/core/session-digest.d.ts +0 -57
- package/dist/core/session-digest.d.ts.map +0 -1
- package/dist/core/session-digest.js +0 -193
- package/dist/core/session-digest.js.map +0 -1
- package/dist/core/spec-kit/compiler.d.ts +0 -67
- package/dist/core/spec-kit/compiler.d.ts.map +0 -1
- package/dist/core/spec-kit/compiler.js +0 -268
- package/dist/core/spec-kit/compiler.js.map +0 -1
- package/dist/core/transaction-coordinator.d.ts +0 -30
- package/dist/core/transaction-coordinator.d.ts.map +0 -1
- package/dist/core/transaction-coordinator.js +0 -173
- package/dist/core/transaction-coordinator.js.map +0 -1
- package/dist/modes/interactive/components/mcp-selector.d.ts +0 -30
- package/dist/modes/interactive/components/mcp-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/mcp-selector.js +0 -155
- package/dist/modes/interactive/components/mcp-selector.js.map +0 -1
- package/dist/modes/interactive/components/model-selector-state.d.ts +0 -101
- package/dist/modes/interactive/components/model-selector-state.d.ts.map +0 -1
- package/dist/modes/interactive/components/model-selector-state.js +0 -261
- package/dist/modes/interactive/components/model-selector-state.js.map +0 -1
- package/dist/modes/interactive/components/skills-selector.d.ts +0 -32
- package/dist/modes/interactive/components/skills-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/skills-selector.js +0 -130
- package/dist/modes/interactive/components/skills-selector.js.map +0 -1
- package/dist/modes/interactive/theme/omk-blackboard.json +0 -91
- package/dist/modes/interactive/theme/omk-freedom-grid.json +0 -91
- package/dist/modes/interactive/theme/omk-neon-ops.json +0 -90
- package/dist/modes/interactive/theme/omk-slate-light.json +0 -91
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -72
- package/node_modules/@earendil-works/omk-agent-core/README.md +0 -488
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts +0 -24
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js +0 -553
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts +0 -118
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.js +0 -402
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts +0 -95
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js +0 -996
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts +0 -53
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js +0 -175
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts +0 -117
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js +0 -568
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts +0 -25
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js +0 -131
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts +0 -51
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js +0 -510
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts +0 -51
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js +0 -102
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts +0 -48
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js +0 -230
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts +0 -26
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js +0 -101
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts +0 -36
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js +0 -273
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts +0 -18
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js +0 -42
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts +0 -25
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js +0 -114
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts +0 -11
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js +0 -39
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts +0 -33
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js +0 -210
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts +0 -2
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js +0 -50
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts +0 -44
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js +0 -311
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts +0 -3
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js +0 -30
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts +0 -616
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js +0 -94
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts +0 -14
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js +0 -126
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts +0 -70
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js +0 -297
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts +0 -20
- package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/index.js +0 -25
- package/node_modules/@earendil-works/omk-agent-core/dist/index.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts +0 -3
- package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/node.js +0 -3
- package/node_modules/@earendil-works/omk-agent-core/dist/node.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts +0 -69
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js +0 -278
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts +0 -393
- package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/dist/types.js +0 -2
- package/node_modules/@earendil-works/omk-agent-core/dist/types.js.map +0 -1
- package/node_modules/@earendil-works/omk-agent-core/package.json +0 -60
- package/node_modules/@earendil-works/omk-ai/README.md +0 -1389
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts +0 -20
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.js +0 -44
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts +0 -5
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js +0 -6
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts +0 -3
- package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/cli.js +0 -130
- package/node_modules/@earendil-works/omk-ai/dist/cli.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts +0 -20
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js +0 -199
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts +0 -10
- package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts +0 -515
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js +0 -517
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/image-models.js +0 -23
- package/node_modules/@earendil-works/omk-ai/dist/image-models.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts +0 -14
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js +0 -22
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/images.d.ts +0 -4
- package/node_modules/@earendil-works/omk-ai/dist/images.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/images.js +0 -16
- package/node_modules/@earendil-works/omk-ai/dist/images.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/index.d.ts +0 -33
- package/node_modules/@earendil-works/omk-ai/dist/index.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/index.js +0 -21
- package/node_modules/@earendil-works/omk-ai/dist/index.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/models.d.ts +0 -18
- package/node_modules/@earendil-works/omk-ai/dist/models.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts +0 -18762
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.js +0 -17197
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/models.js +0 -78
- package/node_modules/@earendil-works/omk-ai/dist/models.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts +0 -2
- package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/oauth.js +0 -2
- package/node_modules/@earendil-works/omk-ai/dist/oauth.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts +0 -39
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.js +0 -170
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts +0 -38
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js +0 -826
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts +0 -77
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js +0 -1123
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts +0 -15
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js +0 -221
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts +0 -13
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js +0 -26
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts +0 -56
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js +0 -368
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts +0 -8
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js +0 -29
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts +0 -70
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js +0 -331
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts +0 -15
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js +0 -442
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts +0 -13
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.js +0 -402
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts +0 -3
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js +0 -128
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts +0 -4
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js +0 -34
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts +0 -25
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js +0 -534
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts +0 -30
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js +0 -1171
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts +0 -19
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js +0 -977
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts +0 -11
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js +0 -22
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts +0 -18
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js +0 -496
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts +0 -13
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js +0 -233
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts +0 -35
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js +0 -254
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts +0 -8
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js +0 -42
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts +0 -13
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js +0 -82
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts +0 -8
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js +0 -184
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts +0 -4
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.js +0 -22
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts +0 -8
- package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/stream.js +0 -77
- package/node_modules/@earendil-works/omk-ai/dist/stream.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/types.d.ts +0 -570
- package/node_modules/@earendil-works/omk-ai/dist/types.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/types.js +0 -2
- package/node_modules/@earendil-works/omk-ai/dist/types.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts +0 -6
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js +0 -34
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts +0 -19
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js +0 -25
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts +0 -21
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js +0 -81
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts +0 -3
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js +0 -14
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts +0 -2
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js +0 -8
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts +0 -16
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js +0 -113
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts +0 -10
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js +0 -97
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts +0 -25
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js +0 -335
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts +0 -21
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js +0 -56
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts +0 -30
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js +0 -280
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts +0 -58
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js +0 -122
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts +0 -3
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js +0 -105
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts +0 -43
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js +0 -487
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts +0 -13
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js +0 -31
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts +0 -64
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js +0 -2
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts +0 -57
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js +0 -154
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts +0 -22
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js +0 -26
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts +0 -17
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js +0 -21
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts +0 -18
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js +0 -281
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js.map +0 -1
- package/node_modules/@earendil-works/omk-ai/package.json +0 -106
- package/node_modules/@earendil-works/omk-tui/README.md +0 -791
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts +0 -54
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js +0 -632
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts +0 -22
- package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/box.js +0 -104
- package/node_modules/@earendil-works/omk-tui/dist/components/box.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts +0 -22
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js +0 -35
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts +0 -249
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.js +0 -1857
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts +0 -28
- package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/image.js +0 -89
- package/node_modules/@earendil-works/omk-tui/dist/components/image.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts +0 -37
- package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/input.js +0 -378
- package/node_modules/@earendil-works/omk-tui/dist/components/input.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts +0 -31
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.js +0 -69
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts +0 -96
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js +0 -644
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts +0 -50
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js +0 -159
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts +0 -50
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js +0 -185
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts +0 -12
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js +0 -23
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts +0 -19
- package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/text.js +0 -89
- package/node_modules/@earendil-works/omk-tui/dist/components/text.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts +0 -13
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js +0 -51
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts +0 -39
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.js +0 -2
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts +0 -16
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js +0 -110
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/index.d.ts +0 -23
- package/node_modules/@earendil-works/omk-tui/dist/index.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/index.js +0 -32
- package/node_modules/@earendil-works/omk-tui/dist/index.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts +0 -212
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.js +0 -252
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts +0 -184
- package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/keys.js +0 -1173
- package/node_modules/@earendil-works/omk-tui/dist/keys.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts +0 -28
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js +0 -44
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts +0 -3
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js +0 -53
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts +0 -50
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js +0 -361
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts +0 -90
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js +0 -366
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts +0 -113
- package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/terminal.js +0 -472
- package/node_modules/@earendil-works/omk-tui/dist/terminal.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts +0 -242
- package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/tui.js +0 -1221
- package/node_modules/@earendil-works/omk-tui/dist/tui.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts +0 -17
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js +0 -25
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts +0 -84
- package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/utils.js +0 -1032
- package/node_modules/@earendil-works/omk-tui/dist/utils.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts +0 -25
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts.map +0 -1
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js +0 -96
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js.map +0 -1
- package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/omk-tui/package.json +0 -47
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-queue.js","sourceRoot":"","sources":["../../../src/core/orchestration/merge-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CACnC,OAAmC,EACnC,gBAAqC,EACP;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AAAA,CAClB;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgC,EAAW;IAC1E,OAAO,CACN,QAAQ,CAAC,WAAW,KAAK,SAAS;QAClC,QAAQ,CAAC,kBAAkB,KAAK,IAAI;QACpC,QAAQ,CAAC,eAAe,KAAK,IAAI;QACjC,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAC3B,CAAC;AAAA,CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA4B,EAAoB;IACtF,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC7E,OAAO;QACN,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,eAAe;QACf,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC1B,CAAC;AAAA,CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACpC,YAAqB,EACrB,YAAqB,EACrB,qBAA8B,EACN;IACxB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED,SAAS,sBAAsB,CAAC,CAAkB,EAAE,CAAkB,EAAU;IAC/E,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC;IACD,MAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAC9E,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAAA,CAC3C;AAED,SAAS,mBAAmB,CAAC,CAAe,EAAE,CAAe,EAAU;IACtE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAAA,CACzC;AAED,SAAS,wBAAwB,CAAC,CAAgB,EAAE,CAAgB,EAAU;IAC7E,uEAAuE;IACvE,wDAAwD;IACxD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,CAC3B;AAED,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS,EAAU;IACpD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACV,CAAC;IACD,OAAO,CAAC,CAAC;AAAA,CACT","sourcesContent":["/**\n * Deterministic merge-queue pure algorithms for the OMK durable DAG scheduler.\n *\n * This module contains ONLY pure data transformations. It performs NO real git\n * execution and NO I/O. The durable SQLite scheduler (see foundation.md\n * `merge_queue` table) and the git worktree integration lane (see\n * worktree-merge.md) consume these helpers to decide ordering, promotion\n * gating, conflict recording, and orphan-worktree reclaim policy.\n *\n * Design contract (worktree-merge.md §3.1, §3.3, §4.2, §5):\n * - Merge is strictly serial: exactly one entry advances per selection.\n * - Selection order key is fully deterministic:\n * priority ASC, dagDepth ASC, leaseFinishedAt ASC, queueId ASC.\n * - Verify gate: a merge_queue entry can only advance from `pending` once its\n * owning node reached the completed state AND its VerificationContract passed.\n * This module trusts `completedNodeIds` (the scheduler supplies the verified\n * completed set); pure logic only enforces the membership check.\n * - Promotion gate: the canonical branch is promoted only when the entry is in\n * `merging`, verification passed, the target branch is unchanged, and no\n * conflict was detected.\n * - Worktree reclaim never removes outside `.omk/worktrees/`.\n */\n\nexport type MergeQueueStatus = \"pending\" | \"merging\" | \"merged\" | \"conflict\" | \"blocked\";\n\n/**\n * A single merge_queue row plus the ordering metadata derived from the owning\n * node and its lease. `leaseFinishedAt` mirrors the owning node's `finished_at`\n * (the moment its lease ended); it is `null` when the node has not finished.\n */\nexport interface MergeQueueEntry {\n\tqueueId: string;\n\trunId: string;\n\tnodeId: string;\n\tbranchName: string;\n\ttargetBranch: string;\n\tstatus: MergeQueueStatus;\n\tpriority: number;\n\tdagDepth: number;\n\tleaseFinishedAt: string | null;\n\tcreatedAt: string;\n}\n\n/**\n * Inputs to the canonical-branch promotion gate. The scheduler fills these from\n * the merge worktree preparation + re-verification step (worktree-merge.md §5).\n */\nexport interface MergePromotionDecision {\n\tqueueStatus: MergeQueueStatus;\n\tverificationPassed: boolean;\n\ttargetUnchanged: boolean;\n\tconflict: boolean;\n}\n\n/** One side of a path-level merge conflict (ours / theirs blob SHAs). */\nexport interface ConflictFile {\n\tpath: string;\n\tours: string;\n\ttheirs: string;\n}\n\n/** Deterministic conflict artifact persisted to the artifacts table. */\nexport interface ConflictArtifact {\n\ttype: \"merge-conflict\";\n\trunId: string;\n\tnodeId: string;\n\tbranch: string;\n\ttargetBranch: string;\n\tconflictedFiles: ConflictFile[];\n\tmergeBase: string;\n\tcreatedAt: string;\n}\n\n/** Caller-supplied raw conflict data; files may arrive in any order. */\nexport interface ConflictArtifactInput {\n\trunId: string;\n\tnodeId: string;\n\tbranch: string;\n\ttargetBranch: string;\n\tconflictedFiles: ConflictFile[];\n\tmergeBase: string;\n\tcreatedAt: string;\n}\n\n/** Worktree reclaim decision returned by {@link shouldReclaimWorktree}. */\nexport type WorktreeReclaimAction = \"preserve\" | \"remove\" | \"ignore\";\n\n/**\n * Choose exactly one pending merge_queue entry to advance next.\n *\n * Selection rules:\n * 1. Only `pending` entries are eligible.\n * 2. Verify gate: the owning node must be in `completedNodeIds` (the scheduler\n * only adds nodes that reached `completed` AND passed VerificationContract).\n * 3. Among eligible entries, order by priority ASC, dagDepth ASC,\n * leaseFinishedAt ASC (nulls last), queueId ASC. queueId is the unique\n * final tie-break, so the result is fully deterministic.\n *\n * Returns `undefined` when no entry is eligible.\n */\nexport function selectNextMergeEntry(\n\tentries: readonly MergeQueueEntry[],\n\tcompletedNodeIds: ReadonlySet<string>,\n): MergeQueueEntry | undefined {\n\tconst eligible = entries.filter((entry) => entry.status === \"pending\" && completedNodeIds.has(entry.nodeId));\n\tif (eligible.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (eligible.length === 1) {\n\t\treturn eligible[0];\n\t}\n\tconst ordered = [...eligible].sort(compareMergeEntryOrder);\n\treturn ordered[0];\n}\n\n/**\n * Promotion gate for the canonical (target) branch.\n *\n * Returns true only when every promotion precondition holds:\n * queue is `merging`, verification passed, the target branch is unchanged,\n * and no conflict was detected. Any failure leaves the target untouched.\n */\nexport function canPromoteMerge(decision: MergePromotionDecision): boolean {\n\treturn (\n\t\tdecision.queueStatus === \"merging\" &&\n\t\tdecision.verificationPassed === true &&\n\t\tdecision.targetUnchanged === true &&\n\t\tdecision.conflict === false\n\t);\n}\n\n/**\n * Build a deterministic conflict artifact. `conflictedFiles` are copied and\n * sorted by path (then ours, then theirs for total determinism); the input\n * array is never mutated.\n */\nexport function createConflictArtifact(input: ConflictArtifactInput): ConflictArtifact {\n\tconst conflictedFiles = [...input.conflictedFiles].sort(compareConflictFile);\n\treturn {\n\t\ttype: \"merge-conflict\",\n\t\trunId: input.runId,\n\t\tnodeId: input.nodeId,\n\t\tbranch: input.branch,\n\t\ttargetBranch: input.targetBranch,\n\t\tconflictedFiles,\n\t\tmergeBase: input.mergeBase,\n\t\tcreatedAt: input.createdAt,\n\t};\n}\n\n/**\n * Decide the reclaim fate of a worktree during startup recovery\n * (worktree-merge.md §2.3).\n *\n * - Outside `.omk/worktrees/`: always `ignore` (never remove user/foreign\n * worktrees).\n * - Terminal node (completed/merged/failed/rolled_back/cancelled) under prefix:\n * `remove` — the worktree is leftover and safe to clean up.\n * - Expired lease with a non-terminal node under prefix: `preserve` — orphan\n * recovery keeps the worktree and requeues the node.\n * - Otherwise (active, healthy): `ignore`.\n */\nexport function shouldReclaimWorktree(\n\tnodeTerminal: boolean,\n\tleaseExpired: boolean,\n\tpathUnderOmkWorktrees: boolean,\n): WorktreeReclaimAction {\n\tif (!pathUnderOmkWorktrees) {\n\t\treturn \"ignore\";\n\t}\n\tif (nodeTerminal) {\n\t\treturn \"remove\";\n\t}\n\tif (leaseExpired) {\n\t\treturn \"preserve\";\n\t}\n\treturn \"ignore\";\n}\n\nfunction compareMergeEntryOrder(a: MergeQueueEntry, b: MergeQueueEntry): number {\n\tif (a.priority !== b.priority) {\n\t\treturn a.priority - b.priority;\n\t}\n\tif (a.dagDepth !== b.dagDepth) {\n\t\treturn a.dagDepth - b.dagDepth;\n\t}\n\tconst byTime = compareNullableTimestamp(a.leaseFinishedAt, b.leaseFinishedAt);\n\tif (byTime !== 0) {\n\t\treturn byTime;\n\t}\n\treturn compareString(a.queueId, b.queueId);\n}\n\nfunction compareConflictFile(a: ConflictFile, b: ConflictFile): number {\n\tconst byPath = compareString(a.path, b.path);\n\tif (byPath !== 0) {\n\t\treturn byPath;\n\t}\n\tconst byOurs = compareString(a.ours, b.ours);\n\tif (byOurs !== 0) {\n\t\treturn byOurs;\n\t}\n\treturn compareString(a.theirs, b.theirs);\n}\n\nfunction compareNullableTimestamp(a: string | null, b: string | null): number {\n\t// ISO-8601 strings sort lexicographically in chronological order; null\n\t// (node never finished) sorts after any real timestamp.\n\tif (a === null && b === null) {\n\t\treturn 0;\n\t}\n\tif (a === null) {\n\t\treturn 1;\n\t}\n\tif (b === null) {\n\t\treturn -1;\n\t}\n\treturn compareString(a, b);\n}\n\nfunction compareString(a: string, b: string): number {\n\tif (a < b) {\n\t\treturn -1;\n\t}\n\tif (a > b) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n"]}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure recovery + compensation algorithms for the durable orchestration layer.
|
|
3
|
-
*
|
|
4
|
-
* These functions classify the state of a partially-executed durable operation
|
|
5
|
-
* (reconstructed from the ledger + scheduler store), plan idempotent
|
|
6
|
-
* compensator execution in reverse order, and enforce fail-closed audit
|
|
7
|
-
* semantics when the durable ledger cannot accept an event.
|
|
8
|
-
*
|
|
9
|
-
* Design principle: fail-closed. When the recorded state is ambiguous we
|
|
10
|
-
* prefer "in_doubt" (human intervention) over an unsafe resume or rollback.
|
|
11
|
-
*
|
|
12
|
-
* Reference: .omk/runs/omk-orchestration-upgrade-plan/transaction-recovery.md
|
|
13
|
-
*/
|
|
14
|
-
export type DurableStepStatus = "leased" | "prepared" | "started" | "applying" | "verifying" | "completed" | "rolled_back" | "in_doubt" | "failed" | "blocked";
|
|
15
|
-
export type RecoveryAction = "resume" | "rollback" | "in_doubt" | "ignore";
|
|
16
|
-
/**
|
|
17
|
-
* Snapshot of what was durably recorded for a single operation, reconstructed
|
|
18
|
-
* by replaying the harness-control ledger and reconciling with the scheduler
|
|
19
|
-
* node/lease/attempt tables. The classifier is pure logic over this struct.
|
|
20
|
-
*/
|
|
21
|
-
export interface PreparedOperationReceipt {
|
|
22
|
-
operationId: string;
|
|
23
|
-
/** Last durable step status observed in the ledger, or null if none. Informational. */
|
|
24
|
-
lastStatus: DurableStepStatus | null;
|
|
25
|
-
/** A "prepared" marker was durably recorded (S2). */
|
|
26
|
-
prepared: boolean;
|
|
27
|
-
/** A "started" marker was durably recorded (S3). */
|
|
28
|
-
started: boolean;
|
|
29
|
-
/** A terminal "completed" marker was durably recorded (S7). */
|
|
30
|
-
completed: boolean;
|
|
31
|
-
/** A compensator failure marker was recorded (compensation attempted and failed). */
|
|
32
|
-
compensatorFailure: boolean;
|
|
33
|
-
/** sha256 of the prepared state; required to resume or roll back deterministically. */
|
|
34
|
-
preparedStateHash: string | null;
|
|
35
|
-
/** Receipt ids the operation declares as required to resume safely. */
|
|
36
|
-
requiredReceipts: readonly string[];
|
|
37
|
-
/** Receipt ids actually present in the ledger (S5 step receipts). */
|
|
38
|
-
presentReceipts: readonly string[];
|
|
39
|
-
/** True when the lease expiration time is in the past at recovery time. */
|
|
40
|
-
leaseExpired: boolean;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* A single registered compensator and its execution status, as resolved from
|
|
44
|
-
* the compensators table at recovery time.
|
|
45
|
-
*/
|
|
46
|
-
export interface CompensatorStep {
|
|
47
|
-
id: string;
|
|
48
|
-
kind: string;
|
|
49
|
-
/** Forward execution sequence; higher means executed later. */
|
|
50
|
-
sequence: number;
|
|
51
|
-
/** Whether re-running the compensator is side-effect safe. */
|
|
52
|
-
idempotent: boolean;
|
|
53
|
-
/** Whether the forward step's side effect was already applied. */
|
|
54
|
-
applied: boolean;
|
|
55
|
-
/** sha256 of the prepared state the compensator restores from. */
|
|
56
|
-
preparedStateHash: string | null;
|
|
57
|
-
}
|
|
58
|
-
export interface CompensationPlan {
|
|
59
|
-
/** "rollback" runs the listed steps; "in_doubt" runs nothing and escalates. */
|
|
60
|
-
action: "rollback" | "in_doubt";
|
|
61
|
-
/** Idempotent steps in reverse execution order. Empty for in_doubt plans. */
|
|
62
|
-
steps: CompensatorStep[];
|
|
63
|
-
/** Human/machine-readable reason for the chosen action. */
|
|
64
|
-
reason: string;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Coarse stage classification for fail-closed audit. State-changing stages
|
|
68
|
-
* mutate durable node/lease/attempt/artifact state; read-only stages only
|
|
69
|
-
* observe.
|
|
70
|
-
*/
|
|
71
|
-
export type LedgerAuditStage = "prepare" | "apply" | "verify" | "read-only";
|
|
72
|
-
export declare function isStateChangingStage(stage: LedgerAuditStage): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Fail-closed audit gate. A state-changing stage MUST abort (and propagate the
|
|
75
|
-
* ledger error, rolling back any in-flight SQLite transaction) when the durable
|
|
76
|
-
* ledger could not accept its event. Read-only stages tolerate a ledger
|
|
77
|
-
* failure because their event is pure observability.
|
|
78
|
-
*/
|
|
79
|
-
export declare function shouldAbortForLedgerFailure(stage: LedgerAuditStage, ledgerAppendOk: boolean): boolean;
|
|
80
|
-
/**
|
|
81
|
-
* Classify the recovery action for a partially-executed durable operation.
|
|
82
|
-
*
|
|
83
|
-
* Precedence (fail-closed overrides first):
|
|
84
|
-
* 1. completed marker present -> ignore (definitive terminal success)
|
|
85
|
-
* 2. compensator failure marker -> in_doubt (state is untrustworthy)
|
|
86
|
-
* 3. prepared but no preparedStateHash -> in_doubt (cannot verify state to resume/rollback)
|
|
87
|
-
* 4. prepared + started + all required receipts -> resume (deterministic replay)
|
|
88
|
-
* 5. prepared + not started -> rollback (undo the prepared state)
|
|
89
|
-
* 6. expired lease + no receipts -> rollback (stale lease, nothing durable recorded)
|
|
90
|
-
* 7. prepared + started, partial receipts, live lease -> in_doubt (ambiguous apply)
|
|
91
|
-
* 8. otherwise (nothing durable, live lease) -> resume (clean re-dispatch)
|
|
92
|
-
*/
|
|
93
|
-
export declare function classifyRecoveryAction(receipt: PreparedOperationReceipt): RecoveryAction;
|
|
94
|
-
/**
|
|
95
|
-
* Build a compensation plan from registered compensator steps.
|
|
96
|
-
*
|
|
97
|
-
* - If any NON-idempotent step was already applied, its side effect may or may
|
|
98
|
-
* not have completed, so we cannot safely compensate: return an in_doubt
|
|
99
|
-
* plan with no executable steps (escalate instead of auto-compensating).
|
|
100
|
-
* - Otherwise, return only the idempotent steps in reverse execution order.
|
|
101
|
-
* Non-idempotent steps that were never applied are dropped.
|
|
102
|
-
*
|
|
103
|
-
* The input array is never mutated.
|
|
104
|
-
*/
|
|
105
|
-
export declare function planCompensation(steps: readonly CompensatorStep[]): CompensationPlan;
|
|
106
|
-
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,iBAAiB,GAC1B,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEb,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3E;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uEAAuE;IACvE,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,qEAAqE;IACrE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,2EAA2E;IAC3E,YAAY,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAChC,+EAA+E;IAC/E,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAI5E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAKrG;AAmBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,cAAc,CAuBxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,gBAAgB,CAkBpF","sourcesContent":["/**\n * Pure recovery + compensation algorithms for the durable orchestration layer.\n *\n * These functions classify the state of a partially-executed durable operation\n * (reconstructed from the ledger + scheduler store), plan idempotent\n * compensator execution in reverse order, and enforce fail-closed audit\n * semantics when the durable ledger cannot accept an event.\n *\n * Design principle: fail-closed. When the recorded state is ambiguous we\n * prefer \"in_doubt\" (human intervention) over an unsafe resume or rollback.\n *\n * Reference: .omk/runs/omk-orchestration-upgrade-plan/transaction-recovery.md\n */\n\nexport type DurableStepStatus =\n\t| \"leased\"\n\t| \"prepared\"\n\t| \"started\"\n\t| \"applying\"\n\t| \"verifying\"\n\t| \"completed\"\n\t| \"rolled_back\"\n\t| \"in_doubt\"\n\t| \"failed\"\n\t| \"blocked\";\n\nexport type RecoveryAction = \"resume\" | \"rollback\" | \"in_doubt\" | \"ignore\";\n\n/**\n * Snapshot of what was durably recorded for a single operation, reconstructed\n * by replaying the harness-control ledger and reconciling with the scheduler\n * node/lease/attempt tables. The classifier is pure logic over this struct.\n */\nexport interface PreparedOperationReceipt {\n\toperationId: string;\n\t/** Last durable step status observed in the ledger, or null if none. Informational. */\n\tlastStatus: DurableStepStatus | null;\n\t/** A \"prepared\" marker was durably recorded (S2). */\n\tprepared: boolean;\n\t/** A \"started\" marker was durably recorded (S3). */\n\tstarted: boolean;\n\t/** A terminal \"completed\" marker was durably recorded (S7). */\n\tcompleted: boolean;\n\t/** A compensator failure marker was recorded (compensation attempted and failed). */\n\tcompensatorFailure: boolean;\n\t/** sha256 of the prepared state; required to resume or roll back deterministically. */\n\tpreparedStateHash: string | null;\n\t/** Receipt ids the operation declares as required to resume safely. */\n\trequiredReceipts: readonly string[];\n\t/** Receipt ids actually present in the ledger (S5 step receipts). */\n\tpresentReceipts: readonly string[];\n\t/** True when the lease expiration time is in the past at recovery time. */\n\tleaseExpired: boolean;\n}\n\n/**\n * A single registered compensator and its execution status, as resolved from\n * the compensators table at recovery time.\n */\nexport interface CompensatorStep {\n\tid: string;\n\tkind: string;\n\t/** Forward execution sequence; higher means executed later. */\n\tsequence: number;\n\t/** Whether re-running the compensator is side-effect safe. */\n\tidempotent: boolean;\n\t/** Whether the forward step's side effect was already applied. */\n\tapplied: boolean;\n\t/** sha256 of the prepared state the compensator restores from. */\n\tpreparedStateHash: string | null;\n}\n\nexport interface CompensationPlan {\n\t/** \"rollback\" runs the listed steps; \"in_doubt\" runs nothing and escalates. */\n\taction: \"rollback\" | \"in_doubt\";\n\t/** Idempotent steps in reverse execution order. Empty for in_doubt plans. */\n\tsteps: CompensatorStep[];\n\t/** Human/machine-readable reason for the chosen action. */\n\treason: string;\n}\n\n/**\n * Coarse stage classification for fail-closed audit. State-changing stages\n * mutate durable node/lease/attempt/artifact state; read-only stages only\n * observe.\n */\nexport type LedgerAuditStage = \"prepare\" | \"apply\" | \"verify\" | \"read-only\";\n\nconst STATE_CHANGING_STAGES: ReadonlySet<LedgerAuditStage> = new Set<LedgerAuditStage>([\"prepare\", \"apply\", \"verify\"]);\n\nexport function isStateChangingStage(stage: LedgerAuditStage): boolean {\n\treturn STATE_CHANGING_STAGES.has(stage);\n}\n\n/**\n * Fail-closed audit gate. A state-changing stage MUST abort (and propagate the\n * ledger error, rolling back any in-flight SQLite transaction) when the durable\n * ledger could not accept its event. Read-only stages tolerate a ledger\n * failure because their event is pure observability.\n */\nexport function shouldAbortForLedgerFailure(stage: LedgerAuditStage, ledgerAppendOk: boolean): boolean {\n\tif (ledgerAppendOk) {\n\t\treturn false;\n\t}\n\treturn isStateChangingStage(stage);\n}\n\nfunction allRequiredReceiptsPresent(receipt: PreparedOperationReceipt): boolean {\n\tif (receipt.requiredReceipts.length === 0) {\n\t\treturn true;\n\t}\n\tconst present = new Set(receipt.presentReceipts);\n\tfor (const id of receipt.requiredReceipts) {\n\t\tif (!present.has(id)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction hasAnyReceipt(receipt: PreparedOperationReceipt): boolean {\n\treturn receipt.presentReceipts.length > 0;\n}\n\n/**\n * Classify the recovery action for a partially-executed durable operation.\n *\n * Precedence (fail-closed overrides first):\n * 1. completed marker present -> ignore (definitive terminal success)\n * 2. compensator failure marker -> in_doubt (state is untrustworthy)\n * 3. prepared but no preparedStateHash -> in_doubt (cannot verify state to resume/rollback)\n * 4. prepared + started + all required receipts -> resume (deterministic replay)\n * 5. prepared + not started -> rollback (undo the prepared state)\n * 6. expired lease + no receipts -> rollback (stale lease, nothing durable recorded)\n * 7. prepared + started, partial receipts, live lease -> in_doubt (ambiguous apply)\n * 8. otherwise (nothing durable, live lease) -> resume (clean re-dispatch)\n */\nexport function classifyRecoveryAction(receipt: PreparedOperationReceipt): RecoveryAction {\n\tif (receipt.completed) {\n\t\treturn \"ignore\";\n\t}\n\tif (receipt.compensatorFailure) {\n\t\treturn \"in_doubt\";\n\t}\n\tif (receipt.prepared && receipt.preparedStateHash === null) {\n\t\treturn \"in_doubt\";\n\t}\n\tif (receipt.prepared && receipt.started && allRequiredReceiptsPresent(receipt)) {\n\t\treturn \"resume\";\n\t}\n\tif (receipt.prepared && !receipt.started) {\n\t\treturn \"rollback\";\n\t}\n\tif (receipt.leaseExpired && !hasAnyReceipt(receipt)) {\n\t\treturn \"rollback\";\n\t}\n\tif (receipt.prepared && receipt.started) {\n\t\treturn \"in_doubt\";\n\t}\n\treturn \"resume\";\n}\n\n/**\n * Build a compensation plan from registered compensator steps.\n *\n * - If any NON-idempotent step was already applied, its side effect may or may\n * not have completed, so we cannot safely compensate: return an in_doubt\n * plan with no executable steps (escalate instead of auto-compensating).\n * - Otherwise, return only the idempotent steps in reverse execution order.\n * Non-idempotent steps that were never applied are dropped.\n *\n * The input array is never mutated.\n */\nexport function planCompensation(steps: readonly CompensatorStep[]): CompensationPlan {\n\tfor (const s of steps) {\n\t\tif (!s.idempotent && s.applied) {\n\t\t\treturn {\n\t\t\t\taction: \"in_doubt\",\n\t\t\t\tsteps: [],\n\t\t\t\treason: `non-idempotent step \"${s.id}\" was already applied; state is ambiguous`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst reversed = steps.filter((s) => s.idempotent).sort((a, b) => b.sequence - a.sequence);\n\n\treturn {\n\t\taction: \"rollback\",\n\t\tsteps: reversed,\n\t\treason: \"compensate idempotent steps in reverse execution order\",\n\t};\n}\n"]}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure recovery + compensation algorithms for the durable orchestration layer.
|
|
3
|
-
*
|
|
4
|
-
* These functions classify the state of a partially-executed durable operation
|
|
5
|
-
* (reconstructed from the ledger + scheduler store), plan idempotent
|
|
6
|
-
* compensator execution in reverse order, and enforce fail-closed audit
|
|
7
|
-
* semantics when the durable ledger cannot accept an event.
|
|
8
|
-
*
|
|
9
|
-
* Design principle: fail-closed. When the recorded state is ambiguous we
|
|
10
|
-
* prefer "in_doubt" (human intervention) over an unsafe resume or rollback.
|
|
11
|
-
*
|
|
12
|
-
* Reference: .omk/runs/omk-orchestration-upgrade-plan/transaction-recovery.md
|
|
13
|
-
*/
|
|
14
|
-
const STATE_CHANGING_STAGES = new Set(["prepare", "apply", "verify"]);
|
|
15
|
-
export function isStateChangingStage(stage) {
|
|
16
|
-
return STATE_CHANGING_STAGES.has(stage);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Fail-closed audit gate. A state-changing stage MUST abort (and propagate the
|
|
20
|
-
* ledger error, rolling back any in-flight SQLite transaction) when the durable
|
|
21
|
-
* ledger could not accept its event. Read-only stages tolerate a ledger
|
|
22
|
-
* failure because their event is pure observability.
|
|
23
|
-
*/
|
|
24
|
-
export function shouldAbortForLedgerFailure(stage, ledgerAppendOk) {
|
|
25
|
-
if (ledgerAppendOk) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
return isStateChangingStage(stage);
|
|
29
|
-
}
|
|
30
|
-
function allRequiredReceiptsPresent(receipt) {
|
|
31
|
-
if (receipt.requiredReceipts.length === 0) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
const present = new Set(receipt.presentReceipts);
|
|
35
|
-
for (const id of receipt.requiredReceipts) {
|
|
36
|
-
if (!present.has(id)) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
function hasAnyReceipt(receipt) {
|
|
43
|
-
return receipt.presentReceipts.length > 0;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Classify the recovery action for a partially-executed durable operation.
|
|
47
|
-
*
|
|
48
|
-
* Precedence (fail-closed overrides first):
|
|
49
|
-
* 1. completed marker present -> ignore (definitive terminal success)
|
|
50
|
-
* 2. compensator failure marker -> in_doubt (state is untrustworthy)
|
|
51
|
-
* 3. prepared but no preparedStateHash -> in_doubt (cannot verify state to resume/rollback)
|
|
52
|
-
* 4. prepared + started + all required receipts -> resume (deterministic replay)
|
|
53
|
-
* 5. prepared + not started -> rollback (undo the prepared state)
|
|
54
|
-
* 6. expired lease + no receipts -> rollback (stale lease, nothing durable recorded)
|
|
55
|
-
* 7. prepared + started, partial receipts, live lease -> in_doubt (ambiguous apply)
|
|
56
|
-
* 8. otherwise (nothing durable, live lease) -> resume (clean re-dispatch)
|
|
57
|
-
*/
|
|
58
|
-
export function classifyRecoveryAction(receipt) {
|
|
59
|
-
if (receipt.completed) {
|
|
60
|
-
return "ignore";
|
|
61
|
-
}
|
|
62
|
-
if (receipt.compensatorFailure) {
|
|
63
|
-
return "in_doubt";
|
|
64
|
-
}
|
|
65
|
-
if (receipt.prepared && receipt.preparedStateHash === null) {
|
|
66
|
-
return "in_doubt";
|
|
67
|
-
}
|
|
68
|
-
if (receipt.prepared && receipt.started && allRequiredReceiptsPresent(receipt)) {
|
|
69
|
-
return "resume";
|
|
70
|
-
}
|
|
71
|
-
if (receipt.prepared && !receipt.started) {
|
|
72
|
-
return "rollback";
|
|
73
|
-
}
|
|
74
|
-
if (receipt.leaseExpired && !hasAnyReceipt(receipt)) {
|
|
75
|
-
return "rollback";
|
|
76
|
-
}
|
|
77
|
-
if (receipt.prepared && receipt.started) {
|
|
78
|
-
return "in_doubt";
|
|
79
|
-
}
|
|
80
|
-
return "resume";
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Build a compensation plan from registered compensator steps.
|
|
84
|
-
*
|
|
85
|
-
* - If any NON-idempotent step was already applied, its side effect may or may
|
|
86
|
-
* not have completed, so we cannot safely compensate: return an in_doubt
|
|
87
|
-
* plan with no executable steps (escalate instead of auto-compensating).
|
|
88
|
-
* - Otherwise, return only the idempotent steps in reverse execution order.
|
|
89
|
-
* Non-idempotent steps that were never applied are dropped.
|
|
90
|
-
*
|
|
91
|
-
* The input array is never mutated.
|
|
92
|
-
*/
|
|
93
|
-
export function planCompensation(steps) {
|
|
94
|
-
for (const s of steps) {
|
|
95
|
-
if (!s.idempotent && s.applied) {
|
|
96
|
-
return {
|
|
97
|
-
action: "in_doubt",
|
|
98
|
-
steps: [],
|
|
99
|
-
reason: `non-idempotent step "${s.id}" was already applied; state is ambiguous`,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
const reversed = steps.filter((s) => s.idempotent).sort((a, b) => b.sequence - a.sequence);
|
|
104
|
-
return {
|
|
105
|
-
action: "rollback",
|
|
106
|
-
steps: reversed,
|
|
107
|
-
reason: "compensate idempotent steps in reverse execution order",
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=recovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../src/core/orchestration/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4EH,MAAM,qBAAqB,GAAkC,IAAI,GAAG,CAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvH,MAAM,UAAU,oBAAoB,CAAC,KAAuB,EAAW;IACtE,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,CACxC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAuB,EAAE,cAAuB,EAAW;IACtG,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAAA,CACnC;AAED,SAAS,0BAA0B,CAAC,OAAiC,EAAW;IAC/E,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,aAAa,CAAC,OAAiC,EAAW;IAClE,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAAA,CAC1C;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAiC,EAAkB;IACzF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAChF,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiC,EAAoB;IACrF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO;gBACN,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,wBAAwB,CAAC,CAAC,EAAE,2CAA2C;aAC/E,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE3F,OAAO;QACN,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,wDAAwD;KAChE,CAAC;AAAA,CACF","sourcesContent":["/**\n * Pure recovery + compensation algorithms for the durable orchestration layer.\n *\n * These functions classify the state of a partially-executed durable operation\n * (reconstructed from the ledger + scheduler store), plan idempotent\n * compensator execution in reverse order, and enforce fail-closed audit\n * semantics when the durable ledger cannot accept an event.\n *\n * Design principle: fail-closed. When the recorded state is ambiguous we\n * prefer \"in_doubt\" (human intervention) over an unsafe resume or rollback.\n *\n * Reference: .omk/runs/omk-orchestration-upgrade-plan/transaction-recovery.md\n */\n\nexport type DurableStepStatus =\n\t| \"leased\"\n\t| \"prepared\"\n\t| \"started\"\n\t| \"applying\"\n\t| \"verifying\"\n\t| \"completed\"\n\t| \"rolled_back\"\n\t| \"in_doubt\"\n\t| \"failed\"\n\t| \"blocked\";\n\nexport type RecoveryAction = \"resume\" | \"rollback\" | \"in_doubt\" | \"ignore\";\n\n/**\n * Snapshot of what was durably recorded for a single operation, reconstructed\n * by replaying the harness-control ledger and reconciling with the scheduler\n * node/lease/attempt tables. The classifier is pure logic over this struct.\n */\nexport interface PreparedOperationReceipt {\n\toperationId: string;\n\t/** Last durable step status observed in the ledger, or null if none. Informational. */\n\tlastStatus: DurableStepStatus | null;\n\t/** A \"prepared\" marker was durably recorded (S2). */\n\tprepared: boolean;\n\t/** A \"started\" marker was durably recorded (S3). */\n\tstarted: boolean;\n\t/** A terminal \"completed\" marker was durably recorded (S7). */\n\tcompleted: boolean;\n\t/** A compensator failure marker was recorded (compensation attempted and failed). */\n\tcompensatorFailure: boolean;\n\t/** sha256 of the prepared state; required to resume or roll back deterministically. */\n\tpreparedStateHash: string | null;\n\t/** Receipt ids the operation declares as required to resume safely. */\n\trequiredReceipts: readonly string[];\n\t/** Receipt ids actually present in the ledger (S5 step receipts). */\n\tpresentReceipts: readonly string[];\n\t/** True when the lease expiration time is in the past at recovery time. */\n\tleaseExpired: boolean;\n}\n\n/**\n * A single registered compensator and its execution status, as resolved from\n * the compensators table at recovery time.\n */\nexport interface CompensatorStep {\n\tid: string;\n\tkind: string;\n\t/** Forward execution sequence; higher means executed later. */\n\tsequence: number;\n\t/** Whether re-running the compensator is side-effect safe. */\n\tidempotent: boolean;\n\t/** Whether the forward step's side effect was already applied. */\n\tapplied: boolean;\n\t/** sha256 of the prepared state the compensator restores from. */\n\tpreparedStateHash: string | null;\n}\n\nexport interface CompensationPlan {\n\t/** \"rollback\" runs the listed steps; \"in_doubt\" runs nothing and escalates. */\n\taction: \"rollback\" | \"in_doubt\";\n\t/** Idempotent steps in reverse execution order. Empty for in_doubt plans. */\n\tsteps: CompensatorStep[];\n\t/** Human/machine-readable reason for the chosen action. */\n\treason: string;\n}\n\n/**\n * Coarse stage classification for fail-closed audit. State-changing stages\n * mutate durable node/lease/attempt/artifact state; read-only stages only\n * observe.\n */\nexport type LedgerAuditStage = \"prepare\" | \"apply\" | \"verify\" | \"read-only\";\n\nconst STATE_CHANGING_STAGES: ReadonlySet<LedgerAuditStage> = new Set<LedgerAuditStage>([\"prepare\", \"apply\", \"verify\"]);\n\nexport function isStateChangingStage(stage: LedgerAuditStage): boolean {\n\treturn STATE_CHANGING_STAGES.has(stage);\n}\n\n/**\n * Fail-closed audit gate. A state-changing stage MUST abort (and propagate the\n * ledger error, rolling back any in-flight SQLite transaction) when the durable\n * ledger could not accept its event. Read-only stages tolerate a ledger\n * failure because their event is pure observability.\n */\nexport function shouldAbortForLedgerFailure(stage: LedgerAuditStage, ledgerAppendOk: boolean): boolean {\n\tif (ledgerAppendOk) {\n\t\treturn false;\n\t}\n\treturn isStateChangingStage(stage);\n}\n\nfunction allRequiredReceiptsPresent(receipt: PreparedOperationReceipt): boolean {\n\tif (receipt.requiredReceipts.length === 0) {\n\t\treturn true;\n\t}\n\tconst present = new Set(receipt.presentReceipts);\n\tfor (const id of receipt.requiredReceipts) {\n\t\tif (!present.has(id)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction hasAnyReceipt(receipt: PreparedOperationReceipt): boolean {\n\treturn receipt.presentReceipts.length > 0;\n}\n\n/**\n * Classify the recovery action for a partially-executed durable operation.\n *\n * Precedence (fail-closed overrides first):\n * 1. completed marker present -> ignore (definitive terminal success)\n * 2. compensator failure marker -> in_doubt (state is untrustworthy)\n * 3. prepared but no preparedStateHash -> in_doubt (cannot verify state to resume/rollback)\n * 4. prepared + started + all required receipts -> resume (deterministic replay)\n * 5. prepared + not started -> rollback (undo the prepared state)\n * 6. expired lease + no receipts -> rollback (stale lease, nothing durable recorded)\n * 7. prepared + started, partial receipts, live lease -> in_doubt (ambiguous apply)\n * 8. otherwise (nothing durable, live lease) -> resume (clean re-dispatch)\n */\nexport function classifyRecoveryAction(receipt: PreparedOperationReceipt): RecoveryAction {\n\tif (receipt.completed) {\n\t\treturn \"ignore\";\n\t}\n\tif (receipt.compensatorFailure) {\n\t\treturn \"in_doubt\";\n\t}\n\tif (receipt.prepared && receipt.preparedStateHash === null) {\n\t\treturn \"in_doubt\";\n\t}\n\tif (receipt.prepared && receipt.started && allRequiredReceiptsPresent(receipt)) {\n\t\treturn \"resume\";\n\t}\n\tif (receipt.prepared && !receipt.started) {\n\t\treturn \"rollback\";\n\t}\n\tif (receipt.leaseExpired && !hasAnyReceipt(receipt)) {\n\t\treturn \"rollback\";\n\t}\n\tif (receipt.prepared && receipt.started) {\n\t\treturn \"in_doubt\";\n\t}\n\treturn \"resume\";\n}\n\n/**\n * Build a compensation plan from registered compensator steps.\n *\n * - If any NON-idempotent step was already applied, its side effect may or may\n * not have completed, so we cannot safely compensate: return an in_doubt\n * plan with no executable steps (escalate instead of auto-compensating).\n * - Otherwise, return only the idempotent steps in reverse execution order.\n * Non-idempotent steps that were never applied are dropped.\n *\n * The input array is never mutated.\n */\nexport function planCompensation(steps: readonly CompensatorStep[]): CompensationPlan {\n\tfor (const s of steps) {\n\t\tif (!s.idempotent && s.applied) {\n\t\t\treturn {\n\t\t\t\taction: \"in_doubt\",\n\t\t\t\tsteps: [],\n\t\t\t\treason: `non-idempotent step \"${s.id}\" was already applied; state is ambiguous`,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst reversed = steps.filter((s) => s.idempotent).sort((a, b) => b.sequence - a.sequence);\n\n\treturn {\n\t\taction: \"rollback\",\n\t\tsteps: reversed,\n\t\treason: \"compensate idempotent steps in reverse execution order\",\n\t};\n}\n"]}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export type JsonPrimitive = string | number | boolean | null;
|
|
2
|
-
export type JsonValue = JsonPrimitive | readonly JsonValue[] | {
|
|
3
|
-
readonly [key: string]: JsonValue;
|
|
4
|
-
};
|
|
5
|
-
export interface ReplayLedgerEventInput {
|
|
6
|
-
sequence: number;
|
|
7
|
-
type: string;
|
|
8
|
-
reducerVersion: number;
|
|
9
|
-
payload: JsonValue;
|
|
10
|
-
beforeStateHash: string;
|
|
11
|
-
afterStateHash: string;
|
|
12
|
-
prevEventHash: string | null;
|
|
13
|
-
}
|
|
14
|
-
export interface ReplayLedgerEvent extends ReplayLedgerEventInput {
|
|
15
|
-
eventHash: string;
|
|
16
|
-
}
|
|
17
|
-
export interface ReplayLedgerVerificationResult {
|
|
18
|
-
ok: boolean;
|
|
19
|
-
error?: string;
|
|
20
|
-
}
|
|
21
|
-
export interface ArtifactReference {
|
|
22
|
-
path: string;
|
|
23
|
-
repoRoot: string;
|
|
24
|
-
sha256: string;
|
|
25
|
-
}
|
|
26
|
-
export interface ResolvedArtifactReference {
|
|
27
|
-
realPath: string;
|
|
28
|
-
isFile: boolean;
|
|
29
|
-
sha256: string;
|
|
30
|
-
}
|
|
31
|
-
export type ArtifactReferenceResolver = (path: string) => ResolvedArtifactReference | undefined;
|
|
32
|
-
export declare function stableStringify(value: JsonValue): string;
|
|
33
|
-
export declare function sha256Hex(input: string): string;
|
|
34
|
-
export declare function computeEventHash(event: ReplayLedgerEventInput): string;
|
|
35
|
-
export declare function verifyReplayLedger(events: readonly ReplayLedgerEvent[]): ReplayLedgerVerificationResult;
|
|
36
|
-
export declare function verifyArtifactReference(ref: ArtifactReference, resolver: ArtifactReferenceResolver): ReplayLedgerVerificationResult;
|
|
37
|
-
export interface ReplayLedgerPersistOptions {
|
|
38
|
-
ledgerPath: string;
|
|
39
|
-
lockTimeoutMs?: number;
|
|
40
|
-
maxLedgerBytes?: number;
|
|
41
|
-
}
|
|
42
|
-
export interface ReplayLedgerWriteResult {
|
|
43
|
-
ok: boolean;
|
|
44
|
-
path?: string;
|
|
45
|
-
event?: ReplayLedgerEvent;
|
|
46
|
-
error?: string;
|
|
47
|
-
}
|
|
48
|
-
export interface ReplayLedgerQuarantineEntry {
|
|
49
|
-
lineNumber: number;
|
|
50
|
-
reason: string;
|
|
51
|
-
}
|
|
52
|
-
export interface ReplayLedgerFileVerificationResult {
|
|
53
|
-
ok: boolean;
|
|
54
|
-
events: ReplayLedgerEvent[];
|
|
55
|
-
errors: string[];
|
|
56
|
-
quarantinedLines: ReplayLedgerQuarantineEntry[];
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Persists a replay ledger event to disk with durable write (fsync),
|
|
60
|
-
* directory permissions 0o700, and file permissions 0o600. Uses advisory
|
|
61
|
-
* locking to serialize concurrent appends.
|
|
62
|
-
*/
|
|
63
|
-
export declare function recordReplayLedgerEvent(event: ReplayLedgerEvent, options: ReplayLedgerPersistOptions): ReplayLedgerWriteResult;
|
|
64
|
-
/**
|
|
65
|
-
* Reads a replay ledger file and verifies every record against:
|
|
66
|
-
* - Valid JSON (malformed lines are quarantined)
|
|
67
|
-
* - Required fields present and well-formed (truncated records quarantined)
|
|
68
|
-
* - Full hash-chain integrity (tampered records quarantined)
|
|
69
|
-
*
|
|
70
|
-
* Quarantined records are skipped so replay consumers only receive the
|
|
71
|
-
* deterministic verified prefix/chain. Any quarantine still makes ok=false.
|
|
72
|
-
*/
|
|
73
|
-
export declare function verifyReplayLedgerFromFile(ledgerPath: string): ReplayLedgerFileVerificationResult;
|
|
74
|
-
export declare function canonicalizeBaseDir(baseDir: string): string;
|
|
75
|
-
export declare function createFsArtifactResolver(baseDir: string): ArtifactReferenceResolver;
|
|
76
|
-
//# sourceMappingURL=replay-ledger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay-ledger.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/replay-ledger.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,SAAS,EAAE,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAErG,MAAM,WAAW,sBAAsB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAChE,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,yBAAyB,GAAG,SAAS,CAAC;AAEhG,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAiCxD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,GAAG,8BAA8B,CAyBvG;AAED,wBAAgB,uBAAuB,CACtC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,yBAAyB,GACjC,8BAA8B,CAehC;AAQD,MAAM,WAAW,0BAA0B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kCAAkC;IAClD,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,2BAA2B,EAAE,CAAC;CAChD;AAuED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,0BAA0B,GACjC,uBAAuB,CAwDzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,kCAAkC,CAsGjG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D;AAKD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,yBAAyB,CAsBnF","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n\tchmodSync,\n\tcloseSync,\n\texistsSync,\n\tfsyncSync,\n\tlstatSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\trealpathSync,\n\trenameSync,\n\trmSync,\n\tstatSync,\n\twriteSync,\n} from \"node:fs\";\nimport path, { dirname } from \"node:path\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | readonly JsonValue[] | { readonly [key: string]: JsonValue };\n\nexport interface ReplayLedgerEventInput {\n\tsequence: number;\n\ttype: string;\n\treducerVersion: number;\n\tpayload: JsonValue;\n\tbeforeStateHash: string;\n\tafterStateHash: string;\n\tprevEventHash: string | null;\n}\n\nexport interface ReplayLedgerEvent extends ReplayLedgerEventInput {\n\teventHash: string;\n}\n\nexport interface ReplayLedgerVerificationResult {\n\tok: boolean;\n\terror?: string;\n}\n\nexport interface ArtifactReference {\n\tpath: string;\n\trepoRoot: string;\n\tsha256: string;\n}\n\nexport interface ResolvedArtifactReference {\n\trealPath: string;\n\tisFile: boolean;\n\tsha256: string;\n}\n\nexport type ArtifactReferenceResolver = (path: string) => ResolvedArtifactReference | undefined;\n\nexport function stableStringify(value: JsonValue): string {\n\tif (value === null) {\n\t\treturn \"null\";\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn JSON.stringify(value);\n\t}\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tthrow new Error(\"Cannot stableStringify non-finite number\");\n\t\t}\n\t\treturn JSON.stringify(value);\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn value ? \"true\" : \"false\";\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n\t}\n\tif (!isPlainObject(value)) {\n\t\tthrow new Error(\"Cannot stableStringify unsupported object\");\n\t}\n\n\tconst record = value as { readonly [key: string]: JsonValue | undefined };\n\tconst parts: string[] = [];\n\tfor (const key of Object.keys(record).sort()) {\n\t\tconst entryValue = record[key];\n\t\tif (entryValue === undefined) {\n\t\t\tthrow new Error(`Cannot stableStringify undefined value at key ${key}`);\n\t\t}\n\t\tparts.push(`${JSON.stringify(key)}:${stableStringify(entryValue)}`);\n\t}\n\treturn `{${parts.join(\",\")}}`;\n}\n\nexport function sha256Hex(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nexport function computeEventHash(event: ReplayLedgerEventInput): string {\n\treturn sha256Hex(stableStringify(eventToJson(event)));\n}\n\nexport function verifyReplayLedger(events: readonly ReplayLedgerEvent[]): ReplayLedgerVerificationResult {\n\tlet previous: ReplayLedgerEvent | undefined;\n\tfor (let index = 0; index < events.length; index += 1) {\n\t\tconst current = events[index];\n\t\tif (current.sequence !== index + 1) {\n\t\t\treturn { ok: false, error: `sequence mismatch at index ${index}: expected ${index + 1}` };\n\t\t}\n\n\t\tconst expectedHash = computeEventHash(stripEventHash(current));\n\t\tif (current.eventHash !== expectedHash) {\n\t\t\treturn { ok: false, error: `eventHash mismatch at sequence ${current.sequence}` };\n\t\t}\n\n\t\tconst expectedPrevHash = previous?.eventHash ?? null;\n\t\tif (current.prevEventHash !== expectedPrevHash) {\n\t\t\treturn { ok: false, error: `prevEventHash mismatch at sequence ${current.sequence}` };\n\t\t}\n\n\t\tif (previous !== undefined && current.beforeStateHash !== previous.afterStateHash) {\n\t\t\treturn { ok: false, error: `beforeStateHash mismatch at sequence ${current.sequence}` };\n\t\t}\n\n\t\tprevious = current;\n\t}\n\treturn { ok: true };\n}\n\nexport function verifyArtifactReference(\n\tref: ArtifactReference,\n\tresolver: ArtifactReferenceResolver,\n): ReplayLedgerVerificationResult {\n\tconst resolved = resolver(ref.path);\n\tif (resolved === undefined) {\n\t\treturn { ok: false, error: `artifact not found: ${ref.path}` };\n\t}\n\tif (!resolved.isFile) {\n\t\treturn { ok: false, error: `artifact is not a file: ${ref.path}` };\n\t}\n\tif (!pathIsInside(ref.repoRoot, resolved.realPath)) {\n\t\treturn { ok: false, error: `artifact resolved outside repo root: ${resolved.realPath}` };\n\t}\n\tif (resolved.sha256 !== ref.sha256) {\n\t\treturn { ok: false, error: `artifact sha256 mismatch for ${ref.path}` };\n\t}\n\treturn { ok: true };\n}\n\n// Canonicalize a base directory through realpath so symlinked roots (for example\n// macOS /tmp -> /private/tmp) compare consistently against realpath'd artifacts.\n// ── Persistence ────────────────────────────────────────────────────────────\n\nconst LOCK_STALE_MS = 30000;\n\nexport interface ReplayLedgerPersistOptions {\n\tledgerPath: string;\n\tlockTimeoutMs?: number;\n\tmaxLedgerBytes?: number;\n}\n\nexport interface ReplayLedgerWriteResult {\n\tok: boolean;\n\tpath?: string;\n\tevent?: ReplayLedgerEvent;\n\terror?: string;\n}\n\nexport interface ReplayLedgerQuarantineEntry {\n\tlineNumber: number;\n\treason: string;\n}\n\nexport interface ReplayLedgerFileVerificationResult {\n\tok: boolean;\n\tevents: ReplayLedgerEvent[];\n\terrors: string[];\n\tquarantinedLines: ReplayLedgerQuarantineEntry[];\n}\n\n/**\n * Acquires an exclusive lock for the ledger file using O_CREAT|O_EXCL.\n * Stale locks (older than LOCK_STALE_MS) are removed before retry.\n */\nfunction acquireLock(lockPath: string, timeoutMs: number): number {\n\tconst start = Date.now();\n\twhile (true) {\n\t\ttry {\n\t\t\treturn openSync(lockPath, \"wx\", 0o600);\n\t\t} catch (error) {\n\t\t\tif (existsSync(lockPath)) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(lockPath);\n\t\t\t\t\tif (Date.now() - stats.mtimeMs > LOCK_STALE_MS) rmSync(lockPath, { force: true });\n\t\t\t\t} catch {\n\t\t\t\t\t/* stale check best-effort */\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Date.now() - start >= timeoutMs) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Appends a JSON line to the ledger file and fsyncs both the file and its\n * parent directory so the write is durable on crash.\n *\n * Platform fallback: some filesystems (e.g. tmpfs, NFS) do not support\n * directory fsync. In those cases the directory fsync is best-effort; the\n * file fsync remains mandatory.\n */\nfunction fsyncDirectory(dirPath: string): void {\n\ttry {\n\t\tconst dirFd = openSync(dirPath, \"r\");\n\t\ttry {\n\t\t\tfsyncSync(dirFd);\n\t\t} finally {\n\t\t\tcloseSync(dirFd);\n\t\t}\n\t} catch {\n\t\t// Directory fsync is not supported on all platforms/filesystems.\n\t\t// File fsync remains the mandatory durability guarantee.\n\t}\n}\n\nfunction enforcePrivateFilePermissions(filePath: string): void {\n\ttry {\n\t\tif (existsSync(filePath) && (statSync(filePath).mode & 0o777) !== 0o600) {\n\t\t\tchmodSync(filePath, 0o600);\n\t\t}\n\t} catch {\n\t\t/* best-effort permission enforcement */\n\t}\n}\n\nfunction appendJsonLineWithFsync(ledgerPath: string, line: string): void {\n\tconst fd = openSync(ledgerPath, \"a\", 0o600);\n\ttry {\n\t\tenforcePrivateFilePermissions(ledgerPath);\n\t\twriteSync(fd, `${line}\\n`, undefined, \"utf-8\");\n\t\tfsyncSync(fd);\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n\tfsyncDirectory(dirname(ledgerPath));\n}\n\n/**\n * Persists a replay ledger event to disk with durable write (fsync),\n * directory permissions 0o700, and file permissions 0o600. Uses advisory\n * locking to serialize concurrent appends.\n */\nexport function recordReplayLedgerEvent(\n\tevent: ReplayLedgerEvent,\n\toptions: ReplayLedgerPersistOptions,\n): ReplayLedgerWriteResult {\n\tconst { ledgerPath } = options;\n\tconst lockPath = `${ledgerPath}.lock`;\n\tlet lockFd: number | undefined;\n\ttry {\n\t\t// Create the ledger directory with owner-only permissions.\n\t\t// mode is applied to the deepest directory; recursive parents use umask-adjusted defaults.\n\t\tmkdirSync(dirname(ledgerPath), { recursive: true, mode: 0o700 });\n\n\t\t// On platforms where mkdirSync with mode over umask can produce\n\t\t// group/world-readable directories, re-apply the mode explicitly.\n\t\ttry {\n\t\t\tconst dirStats = statSync(dirname(ledgerPath));\n\t\t\tif ((dirStats.mode & 0o777) !== 0o700) {\n\t\t\t\tchmodSync(dirname(ledgerPath), 0o700);\n\t\t\t}\n\t\t} catch {\n\t\t\t/* best-effort permission enforcement */\n\t\t}\n\n\t\tlockFd = acquireLock(lockPath, options.lockTimeoutMs ?? 1000);\n\n\t\t// Rotate if the ledger exceeds the size threshold.\n\t\tif (Number.isFinite(options.maxLedgerBytes) && (options.maxLedgerBytes ?? 0) > 0 && existsSync(ledgerPath)) {\n\t\t\tenforcePrivateFilePermissions(ledgerPath);\n\t\t\tconst stats = statSync(ledgerPath);\n\t\t\tif (stats.size >= Math.floor(options.maxLedgerBytes!)) {\n\t\t\t\t// Simple rotation: rename current to .rotated, start fresh.\n\t\t\t\t// The new ledger will start from genesis since we don't carry\n\t\t\t\t// forward the previous hash chain across rotations for the\n\t\t\t\t// orchestration replay ledger (unlike harness-control which uses anchors).\n\t\t\t\tconst rotatedPath = `${ledgerPath}.${new Date().toISOString().replace(/[:.]/g, \"-\")}.rotated`;\n\t\t\t\trenameSync(ledgerPath, rotatedPath);\n\t\t\t\tenforcePrivateFilePermissions(rotatedPath);\n\t\t\t\tfsyncDirectory(dirname(ledgerPath));\n\t\t\t}\n\t\t}\n\n\t\tappendJsonLineWithFsync(ledgerPath, JSON.stringify(event));\n\t\treturn { ok: true, path: ledgerPath, event };\n\t} catch (error) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tpath: ledgerPath,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t};\n\t} finally {\n\t\tif (lockFd !== undefined) {\n\t\t\ttry {\n\t\t\t\tcloseSync(lockFd);\n\t\t\t} catch {\n\t\t\t\t/* fd may already be closed */\n\t\t\t}\n\t\t\trmSync(lockPath, { force: true });\n\t\t}\n\t}\n}\n\n/**\n * Reads a replay ledger file and verifies every record against:\n * - Valid JSON (malformed lines are quarantined)\n * - Required fields present and well-formed (truncated records quarantined)\n * - Full hash-chain integrity (tampered records quarantined)\n *\n * Quarantined records are skipped so replay consumers only receive the\n * deterministic verified prefix/chain. Any quarantine still makes ok=false.\n */\nexport function verifyReplayLedgerFromFile(ledgerPath: string): ReplayLedgerFileVerificationResult {\n\tconst errors: string[] = [];\n\tconst events: ReplayLedgerEvent[] = [];\n\tconst quarantinedLines: ReplayLedgerQuarantineEntry[] = [];\n\n\tif (!existsSync(ledgerPath)) return { ok: true, events, errors, quarantinedLines };\n\n\tconst content = readFileSync(ledgerPath, \"utf-8\");\n\tconst lines = content\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.trim())\n\t\t.filter((line) => line.length > 0);\n\n\tfunction quarantine(lineNumber: number, reason: string): void {\n\t\tquarantinedLines.push({ lineNumber, reason });\n\t\terrors.push(`line ${lineNumber}: quarantined — ${reason}`);\n\t}\n\n\tfor (let index = 0; index < lines.length; index++) {\n\t\tconst lineNumber = index + 1;\n\t\tlet parsed: Record<string, unknown>;\n\t\ttry {\n\t\t\tparsed = JSON.parse(lines[index]!);\n\t\t} catch (jsonError) {\n\t\t\tquarantine(\n\t\t\t\tlineNumber,\n\t\t\t\t`malformed JSON — ${jsonError instanceof Error ? jsonError.message : String(jsonError)}`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst requiredFields = [\n\t\t\t\"sequence\",\n\t\t\t\"type\",\n\t\t\t\"reducerVersion\",\n\t\t\t\"payload\",\n\t\t\t\"beforeStateHash\",\n\t\t\t\"afterStateHash\",\n\t\t\t\"prevEventHash\",\n\t\t\t\"eventHash\",\n\t\t] as const;\n\t\tconst missingFields = requiredFields.filter((field) => !(field in parsed));\n\t\tif (missingFields.length > 0) {\n\t\t\tquarantine(lineNumber, `truncated or incomplete record — missing fields: ${missingFields.join(\", \")}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof parsed.sequence !== \"number\" || !Number.isInteger(parsed.sequence) || parsed.sequence < 1) {\n\t\t\tquarantine(lineNumber, \"invalid sequence\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.eventHash !== \"string\" || !/^[a-f0-9]{64}$/.test(parsed.eventHash)) {\n\t\t\tquarantine(lineNumber, \"invalid eventHash\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.prevEventHash !== \"string\" && parsed.prevEventHash !== null) {\n\t\t\tquarantine(lineNumber, \"invalid prevEventHash\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.beforeStateHash !== \"string\") {\n\t\t\tquarantine(lineNumber, \"invalid beforeStateHash\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.afterStateHash !== \"string\") {\n\t\t\tquarantine(lineNumber, \"invalid afterStateHash\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.type !== \"string\") {\n\t\t\tquarantine(lineNumber, \"invalid type\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof parsed.reducerVersion !== \"number\" || !Number.isInteger(parsed.reducerVersion)) {\n\t\t\tquarantine(lineNumber, \"invalid reducerVersion\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst event = parsed as unknown as ReplayLedgerEvent;\n\t\tconst expectedSequence = events.length + 1;\n\t\tif (event.sequence !== expectedSequence) {\n\t\t\tquarantine(lineNumber, `sequence mismatch: expected ${expectedSequence}, got ${event.sequence}`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst expectedHash = computeEventHash(stripEventHash(event));\n\t\tif (event.eventHash !== expectedHash) {\n\t\t\tquarantine(lineNumber, `eventHash mismatch at sequence ${event.sequence}`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst previous = events.at(-1);\n\t\tconst expectedPrevHash = previous?.eventHash ?? null;\n\t\tif (event.prevEventHash !== expectedPrevHash) {\n\t\t\tquarantine(lineNumber, `prevEventHash mismatch at sequence ${event.sequence}`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (previous !== undefined && event.beforeStateHash !== previous.afterStateHash) {\n\t\t\tquarantine(lineNumber, `beforeStateHash mismatch at sequence ${event.sequence}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tevents.push(event);\n\t}\n\n\treturn { ok: errors.length === 0, events, errors, quarantinedLines };\n}\n\nexport function canonicalizeBaseDir(baseDir: string): string {\n\ttry {\n\t\treturn realpathSync(baseDir);\n\t} catch {\n\t\treturn path.resolve(baseDir);\n\t}\n}\n\n// Filesystem-backed resolver that follows symlinks via realpath and uses lstat to\n// detect existence without following. Symlink escapes are caught downstream by\n// verifyArtifactReference's realpath containment check.\nexport function createFsArtifactResolver(baseDir: string): ArtifactReferenceResolver {\n\treturn (artifactPath) => {\n\t\tconst resolved = path.resolve(baseDir, artifactPath);\n\t\ttry {\n\t\t\tlstatSync(resolved);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\tlet realPath: string;\n\t\ttry {\n\t\t\trealPath = realpathSync(resolved);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\tlet isFile = false;\n\t\ttry {\n\t\t\tisFile = statSync(realPath).isFile();\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { realPath, isFile, sha256: isFile ? sha256File(realPath) : \"\" };\n\t};\n}\n\nfunction sha256File(filePath: string): string {\n\treturn createHash(\"sha256\").update(readFileSync(filePath)).digest(\"hex\");\n}\n\nfunction isPlainObject(value: object): boolean {\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction stripEventHash(event: ReplayLedgerEvent): ReplayLedgerEventInput {\n\treturn {\n\t\tsequence: event.sequence,\n\t\ttype: event.type,\n\t\treducerVersion: event.reducerVersion,\n\t\tpayload: event.payload,\n\t\tbeforeStateHash: event.beforeStateHash,\n\t\tafterStateHash: event.afterStateHash,\n\t\tprevEventHash: event.prevEventHash,\n\t};\n}\n\nfunction eventToJson(event: ReplayLedgerEventInput): { readonly [key: string]: JsonValue } {\n\treturn {\n\t\tsequence: event.sequence,\n\t\ttype: event.type,\n\t\treducerVersion: event.reducerVersion,\n\t\tpayload: event.payload,\n\t\tbeforeStateHash: event.beforeStateHash,\n\t\tafterStateHash: event.afterStateHash,\n\t\tprevEventHash: event.prevEventHash,\n\t};\n}\n\nfunction normalizePath(value: string): string {\n\treturn path.resolve(value).replace(/\\\\/g, \"/\").replace(/\\/$/, \"\");\n}\n\nfunction pathIsInside(root: string, candidate: string): boolean {\n\tconst normalizedRoot = normalizePath(root);\n\tconst normalizedCandidate = normalizePath(candidate);\n\treturn normalizedCandidate === normalizedRoot || normalizedCandidate.startsWith(`${normalizedRoot}/`);\n}\n"]}
|