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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-registry.js","sourceRoot":"","sources":["../../src/core/loop-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tLoopBudgetPolicy,\n\tLoopConnectorBinding,\n\tLoopDefinition,\n\tLoopDurableStatePolicy,\n\tLoopHumanGatePolicy,\n\tLoopLevel,\n\tLoopSafetyPolicy,\n\tLoopSchedulePolicy,\n\tLoopSkillBinding,\n\tLoopSubagentPolicy,\n\tLoopValidationDiagnostic,\n\tLoopWatchedScope,\n\tLoopWorktreeIsolationPolicy,\n} from \"./loop-types.ts\";\n\nexport type LoopPatternRisk = \"low\" | \"medium\" | \"high\";\n\nexport type LoopPatternTool = \"grok\" | \"claude-code\" | \"codex\" | \"github-actions\" | \"cursor\" | \"windsurf\" | \"aider\";\n\nexport type LoopPatternTokenCost = \"low\" | \"medium\" | \"high\" | \"very-high\";\n\nexport interface LoopPatternCost {\n\treadonly tokensNoop?: number;\n\treadonly tokensReport?: number;\n\treadonly tokensAction?: number;\n\treadonly suggestedDailyCap?: number;\n\treadonly earlyExitRequired?: boolean;\n\treadonly tokens_noop?: number;\n\treadonly tokens_report?: number;\n\treadonly tokens_action?: number;\n\treadonly suggested_daily_cap?: number;\n\treadonly early_exit_required?: boolean;\n}\n\nexport interface LoopPatternRegistryEntry {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly file: string;\n\treadonly goal: string;\n\treadonly cadence: string;\n\treadonly risk: LoopPatternRisk;\n\treadonly tools: readonly LoopPatternTool[];\n\treadonly skills: readonly string[];\n\treadonly state: string;\n\treadonly phases: readonly string[];\n\treadonly humanGates?: readonly string[];\n\treadonly human_gates?: readonly string[];\n\treadonly starter: string;\n\treadonly weekOneMode?: LoopLevel;\n\treadonly week_one_mode?: LoopLevel;\n\treadonly tokenCost?: LoopPatternTokenCost;\n\treadonly token_cost?: LoopPatternTokenCost;\n\treadonly cost: LoopPatternCost;\n\treadonly nonGoals?: readonly string[];\n\treadonly non_goals?: readonly string[];\n\treadonly triggerKeywords?: readonly string[];\n\treadonly trigger_keywords?: readonly string[];\n\treadonly skillTriggers?: Readonly<Record<string, readonly string[]>>;\n\treadonly skill_triggers?: Readonly<Record<string, readonly string[]>>;\n\treadonly connectors?: readonly LoopConnectorBinding[];\n\treadonly worktree?: Partial<LoopWorktreeIsolationPolicy>;\n\treadonly subagents?: Partial<LoopSubagentPolicy>;\n\treadonly durableState?: Partial<LoopDurableStatePolicy>;\n\treadonly durable_state?: Partial<LoopDurableStatePolicy>;\n\treadonly humanGatePolicy?: Partial<LoopHumanGatePolicy>;\n\treadonly human_gate_policy?: Partial<LoopHumanGatePolicy>;\n}\n\nexport interface LoopPatternRegistryValidationResult {\n\treadonly valid: boolean;\n\treadonly diagnostics: readonly LoopValidationDiagnostic[];\n}\n\nexport interface CompileLoopDefinitionOptions {\n\treadonly id?: string;\n\treadonly repo: string;\n\treadonly scope?: Partial<LoopWatchedScope>;\n\treadonly level?: LoopLevel;\n\treadonly statePath?: string;\n\treadonly runLogPath?: string;\n\treadonly allowedWriteScopes?: readonly string[];\n\treadonly deniedWriteScopes?: readonly string[];\n\treadonly budget?: Partial<LoopBudgetPolicy>;\n\treadonly safety?: Partial<LoopSafetyPolicy>;\n\treadonly schedule?: Partial<LoopSchedulePolicy>;\n\treadonly worktree?: Partial<LoopWorktreeIsolationPolicy>;\n\treadonly skills?: readonly LoopSkillBinding[];\n\treadonly connectors?: readonly LoopConnectorBinding[];\n\treadonly subagents?: Partial<LoopSubagentPolicy>;\n\treadonly durableState?: Partial<LoopDurableStatePolicy>;\n\treadonly humanGates?: Partial<LoopHumanGatePolicy>;\n}\n\ninterface NormalizedCost {\n\treadonly tokensNoop: number;\n\treadonly tokensReport: number;\n\treadonly tokensAction: number;\n\treadonly suggestedDailyCap: number;\n\treadonly earlyExitRequired: boolean;\n}\n\ninterface ParsedCadence {\n\treadonly shortestMinutes: number;\n}\n\nconst WARNING_DIAGNOSTIC_CODES = new Set([\"trigger-overlap\", \"ambiguous-skill-trigger\"]);\n\nconst DENIED_WRITE_SCOPES = [\"**/.env*\", \"**/*secret*\", \"**/*key*\"] as const;\nconst WORKTREE_ISOLATION_MODES: readonly string[] = [\"none\", \"per-run\", \"per-item\"];\nconst WORKTREE_CLEANUP_POLICIES: readonly string[] = [\"after-run\", \"after-merge\", \"manual\"];\nconst CONNECTOR_KINDS: readonly string[] = [\"mcp\", \"connector\"];\nconst CAPABILITY_ACCESS_MODES: readonly string[] = [\"required\", \"optional\"];\nconst SUBAGENT_ROLES: readonly string[] = [\"maker\", \"checker\", \"scout\", \"planner\"];\nconst WORK_ITEM_RISKS: readonly string[] = [\"low\", \"medium\", \"high\"];\n\nexport const OMK_LOOP_SKELETONS: readonly LoopPatternRegistryEntry[] = [\n\t{\n\t\tid: \"omk-daily-triage\",\n\t\tname: \"OMK Daily Triage\",\n\t\tfile: \"omk-daily-triage.md\",\n\t\tgoal: \"Scan CI, issues, PRs, and run state, then report prioritized loop work.\",\n\t\tcadence: \"1d\",\n\t\trisk: \"low\",\n\t\ttools: [\"codex\", \"github-actions\"],\n\t\tskills: [\"loop-triage\", \"evidence-summary\"],\n\t\tstate: \".omk/loops/omk-daily-triage/state.json\",\n\t\tphases: [\"scan\", \"rank\", \"report\", \"escalate\"],\n\t\thumanGates: [\"priority-change\", \"cross-repo-action\"],\n\t\tstarter: \"starters/omk-daily-triage\",\n\t\tweekOneMode: \"L1\",\n\t\ttokenCost: \"medium\",\n\t\tcost: {\n\t\t\ttokensNoop: 5_000,\n\t\t\ttokensReport: 40_000,\n\t\t\ttokensAction: 80_000,\n\t\t\tsuggestedDailyCap: 120_000,\n\t\t\tearlyExitRequired: true,\n\t\t},\n\t\tnonGoals: [\"write code\", \"open pull requests\", \"modify release state\"],\n\t\ttriggerKeywords: [\"daily triage\", \"morning scan\", \"status sweep\"],\n\t\tskillTriggers: {\n\t\t\t\"loop-triage\": [\"ci red\", \"stale pr\", \"untriaged issue\"],\n\t\t\t\"evidence-summary\": [\"run log\", \"state diff\"],\n\t\t},\n\t\tconnectors: [\n\t\t\t{\n\t\t\t\tid: \"github\",\n\t\t\t\tkind: \"connector\",\n\t\t\t\tpurpose: \"Read issues, pull requests, and workflow status.\",\n\t\t\t\taccess: \"required\",\n\t\t\t\ttools: [\"issues\", \"pull-requests\", \"actions\"],\n\t\t\t},\n\t\t],\n\t\tworktree: {\n\t\t\tmode: \"none\",\n\t\t\tcleanup: \"manual\",\n\t\t\trequireCleanCheckout: false,\n\t\t},\n\t\tsubagents: {\n\t\t\trequireMakerChecker: false,\n\t\t\tmakerRole: \"triage-reporter\",\n\t\t\tmaxParallel: 1,\n\t\t},\n\t\thumanGatePolicy: {\n\t\t\trequiredForRisks: [\"high\"],\n\t\t\tgates: [\"priority-change\", \"cross-repo-action\"],\n\t\t\tapprovalRefsRequired: true,\n\t\t},\n\t},\n\t{\n\t\tid: \"omk-isolated-fix\",\n\t\tname: \"OMK Isolated Fix\",\n\t\tfile: \"omk-isolated-fix.md\",\n\t\tgoal: \"Claim one bounded work item, isolate it in a worktree, implement, and verify with maker/checker roles.\",\n\t\tcadence: \"2h-6h\",\n\t\trisk: \"medium\",\n\t\ttools: [\"codex\", \"github-actions\"],\n\t\tskills: [\"focused-implementation\", \"test-debug-loop\", \"code-review\"],\n\t\tstate: \".omk/loops/omk-isolated-fix/state.json\",\n\t\tphases: [\"claim\", \"isolate\", \"implement\", \"check\", \"record\"],\n\t\thumanGates: [\"high-risk-change\", \"scope-expansion\", \"release-impact\"],\n\t\tstarter: \"starters/omk-isolated-fix\",\n\t\tweekOneMode: \"L2\",\n\t\ttokenCost: \"high\",\n\t\tcost: {\n\t\t\ttokensNoop: 8_000,\n\t\t\ttokensReport: 50_000,\n\t\t\ttokensAction: 180_000,\n\t\t\tsuggestedDailyCap: 400_000,\n\t\t\tearlyExitRequired: true,\n\t\t},\n\t\tnonGoals: [\"large refactors\", \"dependency upgrades\", \"release automation\"],\n\t\ttriggerKeywords: [\"bounded fix\", \"loop regression\", \"failing focused test\"],\n\t\tskillTriggers: {\n\t\t\t\"focused-implementation\": [\"implement\", \"fix\", \"migrate\"],\n\t\t\t\"test-debug-loop\": [\"failing test\", \"regression\"],\n\t\t\t\"code-review\": [\"checker\", \"review\"],\n\t\t},\n\t\tconnectors: [\n\t\t\t{\n\t\t\t\tid: \"github\",\n\t\t\t\tkind: \"connector\",\n\t\t\t\tpurpose: \"Read linked issues, PR context, and workflow status.\",\n\t\t\t\taccess: \"required\",\n\t\t\t\ttools: [\"issues\", \"pull-requests\", \"actions\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"context7\",\n\t\t\t\tkind: \"mcp\",\n\t\t\t\tpurpose: \"Fetch current library documentation when implementation touches external APIs.\",\n\t\t\t\taccess: \"optional\",\n\t\t\t\ttools: [\"resolve-library-id\", \"get-library-docs\"],\n\t\t\t},\n\t\t],\n\t\tworktree: {\n\t\t\tmode: \"per-item\",\n\t\t\tbranchPrefix: \"omk/loops/isolated-fix/\",\n\t\t\tcleanup: \"after-run\",\n\t\t\trequireCleanCheckout: true,\n\t\t\tmaxConcurrentWorktrees: 1,\n\t\t},\n\t\tsubagents: {\n\t\t\trequireMakerChecker: true,\n\t\t\tmakerRole: \"implementation-worker\",\n\t\t\tcheckerRole: \"independent-checker\",\n\t\t\tmaxParallel: 2,\n\t\t},\n\t\thumanGatePolicy: {\n\t\t\trequiredForRisks: [\"high\"],\n\t\t\tgates: [\"high-risk-change\", \"scope-expansion\", \"release-impact\"],\n\t\t\tapprovalRefsRequired: true,\n\t\t},\n\t},\n\t{\n\t\tid: \"omk-release-guardian\",\n\t\tname: \"OMK Release Guardian\",\n\t\tfile: \"omk-release-guardian.md\",\n\t\tgoal: \"Guard release readiness with durable run logs, budget ceilings, human approvals, and independent checks.\",\n\t\tcadence: \"6h-1d\",\n\t\trisk: \"high\",\n\t\ttools: [\"codex\", \"github-actions\"],\n\t\tskills: [\"release-audit\", \"security-review\", \"verification-gates\"],\n\t\tstate: \".omk/loops/omk-release-guardian/state.json\",\n\t\tphases: [\"snapshot\", \"audit\", \"gate\", \"escalate\", \"record\"],\n\t\thumanGates: [\"release-cut\", \"publish\", \"security-exception\"],\n\t\tstarter: \"starters/omk-release-guardian\",\n\t\tweekOneMode: \"L3\",\n\t\ttokenCost: \"very-high\",\n\t\tcost: {\n\t\t\ttokensNoop: 12_000,\n\t\t\ttokensReport: 90_000,\n\t\t\ttokensAction: 240_000,\n\t\t\tsuggestedDailyCap: 600_000,\n\t\t\tearlyExitRequired: true,\n\t\t},\n\t\tnonGoals: [\"publish without approval\", \"skip changelog audit\", \"bypass failing verification\"],\n\t\ttriggerKeywords: [\"release\", \"publish\", \"release gate\"],\n\t\tskillTriggers: {\n\t\t\t\"release-audit\": [\"changelog\", \"version\", \"publish\"],\n\t\t\t\"security-review\": [\"secret\", \"credential\", \"security\"],\n\t\t\t\"verification-gates\": [\"smoke test\", \"release blocker\"],\n\t\t},\n\t\tconnectors: [\n\t\t\t{\n\t\t\t\tid: \"github\",\n\t\t\t\tkind: \"connector\",\n\t\t\t\tpurpose: \"Read release branches, workflow status, tags, and pull request approvals.\",\n\t\t\t\taccess: \"required\",\n\t\t\t\ttools: [\"branches\", \"pull-requests\", \"actions\", \"releases\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"playwright\",\n\t\t\t\tkind: \"mcp\",\n\t\t\t\tpurpose: \"Collect browser smoke evidence for release readiness.\",\n\t\t\t\taccess: \"optional\",\n\t\t\t\ttools: [\"navigate\", \"screenshot\", \"assert\"],\n\t\t\t},\n\t\t],\n\t\tworktree: {\n\t\t\tmode: \"per-run\",\n\t\t\tbranchPrefix: \"omk/loops/release-guardian/\",\n\t\t\tcleanup: \"manual\",\n\t\t\trequireCleanCheckout: true,\n\t\t\tmaxConcurrentWorktrees: 1,\n\t\t},\n\t\tsubagents: {\n\t\t\trequireMakerChecker: true,\n\t\t\tmakerRole: \"release-auditor\",\n\t\t\tcheckerRole: \"release-checker\",\n\t\t\tmaxParallel: 3,\n\t\t},\n\t\thumanGatePolicy: {\n\t\t\trequiredForRisks: [\"medium\", \"high\"],\n\t\t\tgates: [\"release-cut\", \"publish\", \"security-exception\"],\n\t\t\tapprovalRefsRequired: true,\n\t\t},\n\t},\n];\n\nexport function validateLoopPatternRegistry(\n\tentries: readonly LoopPatternRegistryEntry[],\n): LoopPatternRegistryValidationResult {\n\tconst diagnostics: LoopValidationDiagnostic[] = [];\n\tconst ids = new Map<string, number>();\n\tconst triggerOwners = new Map<string, { readonly id: string; readonly index: number }>();\n\tconst skillTriggerOwners = new Map<\n\t\tstring,\n\t\t{ readonly id: string; readonly skill: string; readonly index: number }\n\t>();\n\n\tfor (const [index, entry] of entries.entries()) {\n\t\tconst priorIndex = ids.get(entry.id);\n\t\tif (priorIndex !== undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"duplicate-id\",\n\t\t\t\tmessage: `Duplicate loop pattern id '${entry.id}' also appears at index ${priorIndex}.`,\n\t\t\t\tpath: `[${index}].id`,\n\t\t\t});\n\t\t} else {\n\t\t\tids.set(entry.id, index);\n\t\t}\n\n\t\tif (!isSafeStarterPath(entry.starter)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"invalid-starter-path\",\n\t\t\t\tmessage: `Starter path for '${entry.id}' must be a relative, non-traversing path.`,\n\t\t\t\tpath: `[${index}].starter`,\n\t\t\t});\n\t\t}\n\n\t\tif (parseCadence(entry.cadence) === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"invalid-cadence\",\n\t\t\t\tmessage: `Cadence for '${entry.id}' must be a positive duration or duration range.`,\n\t\t\t\tpath: `[${index}].cadence`,\n\t\t\t});\n\t\t}\n\n\t\tconst normalizedCost = normalizeCost(entry.cost);\n\t\tif (normalizedCost === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"invalid-cost\",\n\t\t\t\tmessage: `Cost for '${entry.id}' must include positive integer noop/report/action token estimates.`,\n\t\t\t\tpath: `[${index}].cost`,\n\t\t\t});\n\t\t} else if (\n\t\t\tnormalizedCost.tokensNoop > normalizedCost.tokensReport ||\n\t\t\tnormalizedCost.tokensReport > normalizedCost.tokensAction\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"non-monotonic-cost\",\n\t\t\t\tmessage: `Cost for '${entry.id}' must satisfy noop <= report <= action.`,\n\t\t\t\tpath: `[${index}].cost`,\n\t\t\t});\n\t\t}\n\n\t\tdiagnostics.push(...validatePatternPrimitives(entry, index));\n\n\t\tfor (const trigger of normalizedTriggerKeywords(entry)) {\n\t\t\tconst priorOwner = triggerOwners.get(trigger);\n\t\t\tif (priorOwner !== undefined && priorOwner.id !== entry.id) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"trigger-overlap\",\n\t\t\t\t\tmessage: `Trigger '${trigger}' is shared by '${priorOwner.id}' and '${entry.id}'.`,\n\t\t\t\t\tpath: `[${index}].triggerKeywords`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttriggerOwners.set(trigger, { id: entry.id, index });\n\t\t\t}\n\t\t}\n\n\t\tfor (const trigger of normalizedSkillTriggers(entry)) {\n\t\t\tconst priorOwner = skillTriggerOwners.get(trigger.term);\n\t\t\tif (priorOwner !== undefined && (priorOwner.id !== entry.id || priorOwner.skill !== trigger.skill)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"ambiguous-skill-trigger\",\n\t\t\t\t\tmessage: `Skill trigger '${trigger.term}' is shared by '${priorOwner.id}/${priorOwner.skill}' and '${entry.id}/${trigger.skill}'.`,\n\t\t\t\t\tpath: `[${index}].skillTriggers.${trigger.skill}`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tskillTriggerOwners.set(trigger.term, { id: entry.id, skill: trigger.skill, index });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: diagnostics.every((diagnostic) => WARNING_DIAGNOSTIC_CODES.has(diagnostic.code)),\n\t\tdiagnostics,\n\t};\n}\n\nexport function compileLoopDefinitionFromPattern(\n\tentry: LoopPatternRegistryEntry,\n\toptions: CompileLoopDefinitionOptions,\n): LoopDefinition {\n\tconst validation = validateLoopPatternRegistry([entry]);\n\tconst errors = validation.diagnostics.filter((diagnostic) => !WARNING_DIAGNOSTIC_CODES.has(diagnostic.code));\n\tif (errors.length > 0) {\n\t\tthrow new Error(`Invalid loop pattern '${entry.id}': ${errors.map((diagnostic) => diagnostic.code).join(\", \")}`);\n\t}\n\n\tconst cost = requireNormalizedCost(entry);\n\tconst cadence = requireParsedCadence(entry);\n\tconst level = options.level ?? entry.weekOneMode ?? entry.week_one_mode ?? \"L1\";\n\tconst defaultBudget = budgetDefaultsForLevel(level, cost, cadence);\n\tconst allowedWriteScopes = level === \"L1\" ? [] : [...(options.allowedWriteScopes ?? [])];\n\tconst defaultSafety = safetyDefaultsForLevel(level, allowedWriteScopes, options.deniedWriteScopes);\n\tconst scope = options.scope ?? {};\n\tconst statePath = options.statePath ?? `.omk/loops/${entry.id}/state.json`;\n\tconst runLogPath = options.runLogPath ?? `.omk/loops/${entry.id}/run-log.ndjson`;\n\tconst schedule = {\n\t\t...scheduleDefaultsForPattern(entry, cadence),\n\t\t...options.schedule,\n\t};\n\tconst worktree = {\n\t\t...worktreeDefaultsForLevel(entry, level),\n\t\t...entry.worktree,\n\t\t...options.worktree,\n\t};\n\tconst skills = options.skills ?? skillBindingsForPattern(entry);\n\tconst connectors = options.connectors ?? [...(entry.connectors ?? [])];\n\tconst subagents = subagentDefaultsForLevel(entry, level, skills, connectors, {\n\t\t...entry.subagents,\n\t\t...options.subagents,\n\t});\n\tconst durableState = {\n\t\t...durableStateDefaultsForPattern(entry, statePath, runLogPath),\n\t\t...(entry.durableState ?? entry.durable_state),\n\t\t...options.durableState,\n\t};\n\tconst humanGates = {\n\t\t...humanGateDefaultsForPattern(entry),\n\t\t...(entry.humanGatePolicy ?? entry.human_gate_policy),\n\t\t...options.humanGates,\n\t};\n\n\treturn {\n\t\tid: options.id ?? entry.id,\n\t\tpattern: entry.id,\n\t\tobjective: entry.goal,\n\t\tnonGoals: entry.nonGoals ?? entry.non_goals ?? [],\n\t\tlevel,\n\t\twatchedScope: {\n\t\t\trepos: scope.repos?.length === undefined || scope.repos.length === 0 ? [options.repo] : scope.repos,\n\t\t\t...(scope.branches === undefined ? {} : { branches: scope.branches }),\n\t\t\t...(scope.paths === undefined ? {} : { paths: scope.paths }),\n\t\t\t...(scope.tickets === undefined ? {} : { tickets: scope.tickets }),\n\t\t},\n\t\tbudget: {\n\t\t\t...defaultBudget,\n\t\t\t...options.budget,\n\t\t},\n\t\tsafety: {\n\t\t\t...defaultSafety,\n\t\t\t...options.safety,\n\t\t\tallowedWriteScopes:\n\t\t\t\tlevel === \"L1\" ? [] : (options.safety?.allowedWriteScopes ?? defaultSafety.allowedWriteScopes),\n\t\t},\n\t\tstatePath,\n\t\trunLogPath,\n\t\tschedule,\n\t\tworktree,\n\t\tskills,\n\t\tconnectors,\n\t\tsubagents,\n\t\tdurableState,\n\t\thumanGates,\n\t};\n}\n\nexport function detectStarterDrift(\n\tentry: LoopPatternRegistryEntry,\n\tavailableStarterIds: readonly string[],\n): LoopPatternRegistryValidationResult {\n\tconst diagnostics: LoopValidationDiagnostic[] = [];\n\tif (!isSafeStarterPath(entry.starter)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"invalid-starter-path\",\n\t\t\tmessage: `Starter path for '${entry.id}' must be a relative, non-traversing path.`,\n\t\t\tpath: \"starter\",\n\t\t});\n\t\treturn { valid: false, diagnostics };\n\t}\n\n\tconst expected = normalizeStarterIdentifier(entry.starter);\n\tconst expectedId = lastPathSegment(expected);\n\tconst available = new Set(availableStarterIds.map(normalizeStarterIdentifier));\n\tif (!available.has(expected) && !available.has(expectedId)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"missing-starter\",\n\t\t\tmessage: `Starter '${entry.starter}' for '${entry.id}' is not present in the available starter inventory.`,\n\t\t\tpath: \"starter\",\n\t\t});\n\t}\n\n\treturn { valid: diagnostics.length === 0, diagnostics };\n}\n\nfunction validatePatternPrimitives(\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): readonly LoopValidationDiagnostic[] {\n\tconst diagnostics: LoopValidationDiagnostic[] = [];\n\n\tif (entry.skills.length === 0) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"skills-required\",\n\t\t\tmessage: `Loop pattern '${entry.id}' must declare at least one OMK skill.`,\n\t\t\tpath: `[${index}].skills`,\n\t\t});\n\t}\n\tpushNonEmptyUniqueDiagnostics(diagnostics, entry.skills, `[${index}].skills`, \"skill\");\n\tpushNonEmptyUniqueDiagnostics(diagnostics, entry.phases, `[${index}].phases`, \"phase\");\n\tpushNonEmptyUniqueDiagnostics(\n\t\tdiagnostics,\n\t\tentry.humanGates ?? entry.human_gates ?? [],\n\t\t`[${index}].humanGates`,\n\t\t\"human-gate\",\n\t);\n\tpushConnectorDiagnostics(diagnostics, entry, index);\n\tpushWorktreeDiagnostics(diagnostics, entry, index);\n\tpushSubagentDiagnostics(diagnostics, entry, index);\n\tpushDurableStateDiagnostics(diagnostics, entry, index);\n\tpushHumanGatePolicyDiagnostics(diagnostics, entry, index);\n\n\treturn diagnostics;\n}\n\nfunction scheduleDefaultsForPattern(entry: LoopPatternRegistryEntry, cadence: ParsedCadence): LoopSchedulePolicy {\n\treturn {\n\t\tmode: \"interval\",\n\t\tcadence: entry.cadence,\n\t\tshortestIntervalMinutes: cadence.shortestMinutes,\n\t\trunOn: [\"schedule\"],\n\t\tjitterMinutes: Math.min(15, Math.max(1, Math.floor(cadence.shortestMinutes * 0.1))),\n\t};\n}\n\nfunction worktreeDefaultsForLevel(entry: LoopPatternRegistryEntry, level: LoopLevel): LoopWorktreeIsolationPolicy {\n\tif (level === \"L1\") {\n\t\treturn {\n\t\t\tmode: \"none\",\n\t\t\tcleanup: \"manual\",\n\t\t\trequireCleanCheckout: false,\n\t\t};\n\t}\n\n\treturn {\n\t\tmode: level === \"L2\" ? \"per-item\" : \"per-run\",\n\t\tbranchPrefix: `omk/loops/${entry.id}/`,\n\t\tcleanup: level === \"L2\" ? \"after-run\" : \"manual\",\n\t\trequireCleanCheckout: true,\n\t\tmaxConcurrentWorktrees: 1,\n\t};\n}\n\nfunction skillBindingsForPattern(entry: LoopPatternRegistryEntry): readonly LoopSkillBinding[] {\n\tconst triggerMap = entry.skillTriggers ?? entry.skill_triggers ?? {};\n\treturn uniqueTrimmedStrings(entry.skills).map((id) => {\n\t\tconst triggerKeywords = uniqueNormalizedTerms(triggerMap[id] ?? []);\n\t\treturn {\n\t\t\tid,\n\t\t\tpurpose: `Enable ${id} for ${entry.id}.`,\n\t\t\taccess: \"required\",\n\t\t\t...(triggerKeywords.length === 0 ? {} : { triggerKeywords }),\n\t\t};\n\t});\n}\n\nfunction subagentDefaultsForLevel(\n\tentry: LoopPatternRegistryEntry,\n\tlevel: LoopLevel,\n\tskills: readonly LoopSkillBinding[],\n\tconnectors: readonly LoopConnectorBinding[],\n\toverrides: Partial<LoopSubagentPolicy>,\n): LoopSubagentPolicy {\n\tconst requireMakerChecker = overrides.requireMakerChecker ?? level !== \"L1\";\n\tconst makerRole = nonEmptyString(overrides.makerRole) ?? `${entry.id}-maker`;\n\tconst checkerRole =\n\t\tnonEmptyString(overrides.checkerRole) ?? (requireMakerChecker ? `${entry.id}-checker` : undefined);\n\tconst skillIds = skills.map((skill) => skill.id);\n\tconst connectorIds = connectors.map((connector) => connector.id);\n\tconst roles = overrides.roles ?? [\n\t\t{\n\t\t\tid: makerRole,\n\t\t\trole: \"maker\" as const,\n\t\t\tskills: skillIds,\n\t\t\tconnectors: connectorIds,\n\t\t},\n\t\t...(checkerRole === undefined\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: checkerRole,\n\t\t\t\t\t\trole: \"checker\" as const,\n\t\t\t\t\t\tskills: skillIds,\n\t\t\t\t\t\tconnectors: connectorIds,\n\t\t\t\t\t\tindependentFrom: [makerRole],\n\t\t\t\t\t},\n\t\t\t\t]),\n\t];\n\n\treturn {\n\t\tmaxParallel: overrides.maxParallel ?? (level === \"L3\" ? 3 : level === \"L2\" ? 2 : 1),\n\t\trequireMakerChecker,\n\t\tmakerRole,\n\t\t...(checkerRole === undefined ? {} : { checkerRole }),\n\t\troles,\n\t};\n}\n\nfunction durableStateDefaultsForPattern(\n\tentry: LoopPatternRegistryEntry,\n\tstatePath: string,\n\trunLogPath: string,\n): LoopDurableStatePolicy {\n\treturn {\n\t\tstatePath,\n\t\trunLogPath,\n\t\tbudgetLedgerPath: `.omk/loops/${entry.id}/budget-ledger.ndjson`,\n\t\tretentionDays: 30,\n\t\trequireReplayableEvidence: true,\n\t};\n}\n\nfunction humanGateDefaultsForPattern(entry: LoopPatternRegistryEntry): LoopHumanGatePolicy {\n\tconst gates = normalizedHumanGateIds(entry);\n\treturn {\n\t\tgates: gates.length === 0 ? [\"high-risk-change\"] : gates,\n\t\trequiredForRisks: [\"high\"],\n\t\tapprovalRefsRequired: true,\n\t};\n}\n\nfunction pushNonEmptyUniqueDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tvalues: readonly string[],\n\tpath: string,\n\tlabel: string,\n): void {\n\tconst seen = new Set<string>();\n\tfor (const [valueIndex, value] of values.entries()) {\n\t\tconst normalized = normalizeTerm(value);\n\t\tif (normalized.length === 0) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: `${label}-id-required`,\n\t\t\t\tmessage: `${label} id must be non-empty.`,\n\t\t\t\tpath: `${path}[${valueIndex}]`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.has(normalized)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: `${label}-duplicate`,\n\t\t\t\tmessage: `${label} id '${value}' is declared more than once.`,\n\t\t\t\tpath: `${path}[${valueIndex}]`,\n\t\t\t});\n\t\t}\n\t\tseen.add(normalized);\n\t}\n}\n\nfunction pushConnectorDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): void {\n\tconst connectors = entry.connectors ?? [];\n\tconst seen = new Set<string>();\n\tfor (const [connectorIndex, connector] of connectors.entries()) {\n\t\tconst basePath = `[${index}].connectors[${connectorIndex}]`;\n\t\tconst id = normalizeTerm(connector.id);\n\t\tif (!id) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-id-required\",\n\t\t\t\tmessage: `Connector id for '${entry.id}' must be non-empty.`,\n\t\t\t\tpath: `${basePath}.id`,\n\t\t\t});\n\t\t} else if (seen.has(id)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-duplicate\",\n\t\t\t\tmessage: `Connector '${connector.id}' is declared more than once for '${entry.id}'.`,\n\t\t\t\tpath: `${basePath}.id`,\n\t\t\t});\n\t\t}\n\t\tseen.add(id);\n\n\t\tif (!CONNECTOR_KINDS.includes(connector.kind)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-kind-invalid\",\n\t\t\t\tmessage: `Connector '${connector.id}' has invalid kind '${connector.kind}'.`,\n\t\t\t\tpath: `${basePath}.kind`,\n\t\t\t});\n\t\t}\n\t\tif (!CAPABILITY_ACCESS_MODES.includes(connector.access)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-access-invalid\",\n\t\t\t\tmessage: `Connector '${connector.id}' has invalid access '${connector.access}'.`,\n\t\t\t\tpath: `${basePath}.access`,\n\t\t\t});\n\t\t}\n\t\tif (!nonEmptyString(connector.purpose)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-purpose-required\",\n\t\t\t\tmessage: `Connector '${connector.id}' must declare a purpose.`,\n\t\t\t\tpath: `${basePath}.purpose`,\n\t\t\t});\n\t\t}\n\t\tif (connector.tools?.some((tool) => tool.trim().length === 0)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"connector-tool-required\",\n\t\t\t\tmessage: `Connector '${connector.id}' has an empty tool id.`,\n\t\t\t\tpath: `${basePath}.tools`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction pushWorktreeDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): void {\n\tconst worktree = entry.worktree;\n\tif (worktree === undefined) {\n\t\treturn;\n\t}\n\n\tif (worktree.mode !== undefined && !WORKTREE_ISOLATION_MODES.includes(worktree.mode)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"worktree-mode-invalid\",\n\t\t\tmessage: `Worktree mode '${worktree.mode}' is not supported.`,\n\t\t\tpath: `[${index}].worktree.mode`,\n\t\t});\n\t}\n\tif (worktree.cleanup !== undefined && !WORKTREE_CLEANUP_POLICIES.includes(worktree.cleanup)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"worktree-cleanup-invalid\",\n\t\t\tmessage: `Worktree cleanup '${worktree.cleanup}' is not supported.`,\n\t\t\tpath: `[${index}].worktree.cleanup`,\n\t\t});\n\t}\n\tif (worktree.branchPrefix !== undefined && !isSafeBranchPrefix(worktree.branchPrefix)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"worktree-branch-prefix-invalid\",\n\t\t\tmessage: `Worktree branchPrefix for '${entry.id}' must be relative and non-empty.`,\n\t\t\tpath: `[${index}].worktree.branchPrefix`,\n\t\t});\n\t}\n\tif (worktree.maxConcurrentWorktrees !== undefined && !isPositiveInteger(worktree.maxConcurrentWorktrees)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"worktree-concurrency-invalid\",\n\t\t\tmessage: `Worktree maxConcurrentWorktrees for '${entry.id}' must be a positive integer.`,\n\t\t\tpath: `[${index}].worktree.maxConcurrentWorktrees`,\n\t\t});\n\t}\n}\n\nfunction pushSubagentDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): void {\n\tconst subagents = entry.subagents;\n\tif (subagents === undefined) {\n\t\treturn;\n\t}\n\n\tif (subagents.maxParallel !== undefined && !isPositiveInteger(subagents.maxParallel)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"subagent-max-parallel-invalid\",\n\t\t\tmessage: `Subagent maxParallel for '${entry.id}' must be a positive integer.`,\n\t\t\tpath: `[${index}].subagents.maxParallel`,\n\t\t});\n\t}\n\tif (subagents.makerRole !== undefined && !nonEmptyString(subagents.makerRole)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"subagent-maker-required\",\n\t\t\tmessage: `Subagent makerRole for '${entry.id}' must be non-empty.`,\n\t\t\tpath: `[${index}].subagents.makerRole`,\n\t\t});\n\t}\n\tif (subagents.requireMakerChecker === true && !nonEmptyString(subagents.checkerRole)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"subagent-checker-required\",\n\t\t\tmessage: `Maker/checker loop '${entry.id}' must declare a checkerRole.`,\n\t\t\tpath: `[${index}].subagents.checkerRole`,\n\t\t});\n\t}\n\n\tfor (const [roleIndex, role] of (subagents.roles ?? []).entries()) {\n\t\tconst basePath = `[${index}].subagents.roles[${roleIndex}]`;\n\t\tif (!nonEmptyString(role.id)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"subagent-role-id-required\",\n\t\t\t\tmessage: `Subagent role id for '${entry.id}' must be non-empty.`,\n\t\t\t\tpath: `${basePath}.id`,\n\t\t\t});\n\t\t}\n\t\tif (!SUBAGENT_ROLES.includes(role.role)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"subagent-role-invalid\",\n\t\t\t\tmessage: `Subagent role '${role.role}' is not supported.`,\n\t\t\t\tpath: `${basePath}.role`,\n\t\t\t});\n\t\t}\n\t\tpushNonEmptyUniqueDiagnostics(diagnostics, role.skills, `${basePath}.skills`, \"subagent-skill\");\n\t\tpushNonEmptyUniqueDiagnostics(diagnostics, role.connectors, `${basePath}.connectors`, \"subagent-connector\");\n\t}\n}\n\nfunction pushDurableStateDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): void {\n\tconst durableState = entry.durableState ?? entry.durable_state;\n\tif (durableState === undefined) {\n\t\treturn;\n\t}\n\n\tpushSafeRelativePathDiagnostic(diagnostics, durableState.statePath, `[${index}].durableState.statePath`);\n\tpushSafeRelativePathDiagnostic(diagnostics, durableState.runLogPath, `[${index}].durableState.runLogPath`);\n\tpushSafeRelativePathDiagnostic(\n\t\tdiagnostics,\n\t\tdurableState.budgetLedgerPath,\n\t\t`[${index}].durableState.budgetLedgerPath`,\n\t);\n\tpushSafeRelativePathDiagnostic(diagnostics, durableState.checkpointPath, `[${index}].durableState.checkpointPath`);\n\tif (durableState.retentionDays !== undefined && !isPositiveInteger(durableState.retentionDays)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"durable-state-retention-invalid\",\n\t\t\tmessage: `Durable state retentionDays for '${entry.id}' must be a positive integer.`,\n\t\t\tpath: `[${index}].durableState.retentionDays`,\n\t\t});\n\t}\n}\n\nfunction pushHumanGatePolicyDiagnostics(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tentry: LoopPatternRegistryEntry,\n\tindex: number,\n): void {\n\tconst policy = entry.humanGatePolicy ?? entry.human_gate_policy;\n\tif (policy === undefined) {\n\t\treturn;\n\t}\n\n\tpushNonEmptyUniqueDiagnostics(diagnostics, policy.gates ?? [], `[${index}].humanGatePolicy.gates`, \"human-gate\");\n\tfor (const [riskIndex, risk] of (policy.requiredForRisks ?? []).entries()) {\n\t\tif (!WORK_ITEM_RISKS.includes(risk)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"human-gate-risk-invalid\",\n\t\t\t\tmessage: `Human gate risk '${risk}' is not supported.`,\n\t\t\t\tpath: `[${index}].humanGatePolicy.requiredForRisks[${riskIndex}]`,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction pushSafeRelativePathDiagnostic(\n\tdiagnostics: LoopValidationDiagnostic[],\n\tvalue: string | undefined,\n\tpath: string,\n): void {\n\tif (value !== undefined && !isSafeStarterPath(value)) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"invalid-durable-state-path\",\n\t\t\tmessage: `${path} must be a relative, non-traversing path.`,\n\t\t\tpath,\n\t\t});\n\t}\n}\n\nfunction budgetDefaultsForLevel(level: LoopLevel, cost: NormalizedCost, cadence: ParsedCadence): LoopBudgetPolicy {\n\tconst maxRunsPerDay = Math.max(1, Math.ceil(1440 / cadence.shortestMinutes));\n\tif (level === \"L1\") {\n\t\treturn {\n\t\t\tmaxRunsPerDay,\n\t\t\tmaxTokensPerDay: cost.suggestedDailyCap,\n\t\t\tmaxSubagentsPerRun: 1,\n\t\t\tmaxAttemptsPerItem: 1,\n\t\t\tmaxAutoPrsPerDay: 0,\n\t\t\tslowDownAtRatio: cost.earlyExitRequired ? 0.75 : 0.9,\n\t\t};\n\t}\n\tif (level === \"L2\") {\n\t\treturn {\n\t\t\tmaxRunsPerDay,\n\t\t\tmaxTokensPerDay: cost.suggestedDailyCap,\n\t\t\tmaxSubagentsPerRun: 3,\n\t\t\tmaxAttemptsPerItem: 2,\n\t\t\tmaxAutoPrsPerDay: 0,\n\t\t\tslowDownAtRatio: cost.earlyExitRequired ? 0.75 : 0.9,\n\t\t};\n\t}\n\treturn {\n\t\tmaxRunsPerDay,\n\t\tmaxTokensPerDay: cost.suggestedDailyCap,\n\t\tmaxSubagentsPerRun: 5,\n\t\tmaxAttemptsPerItem: 3,\n\t\tmaxAutoPrsPerDay: 1,\n\t\tslowDownAtRatio: cost.earlyExitRequired ? 0.75 : 0.9,\n\t};\n}\n\nfunction safetyDefaultsForLevel(\n\tlevel: LoopLevel,\n\tallowedWriteScopes: readonly string[],\n\tdeniedWriteScopes: readonly string[] | undefined,\n): LoopSafetyPolicy {\n\treturn {\n\t\trequireIndependentVerifier: level !== \"L1\",\n\t\trequireHumanGateForHighRisk: true,\n\t\tallowedWriteScopes,\n\t\tdeniedWriteScopes: deniedWriteScopes ?? DENIED_WRITE_SCOPES,\n\t\tmaxWriteScopeCount: allowedWriteScopes.length,\n\t};\n}\n\nfunction isSafeStarterPath(starter: string): boolean {\n\tconst normalized = normalizeSlashes(starter).trim();\n\tif (normalized.length === 0) return false;\n\tif (normalized.startsWith(\"/\")) return false;\n\tif (/^[A-Za-z]:\\//.test(normalized)) return false;\n\treturn !normalized.split(\"/\").some((segment) => segment === \"..\");\n}\n\nfunction parseCadence(cadence: string): ParsedCadence | undefined {\n\tconst parts = cadence.split(\"-\");\n\tif (parts.length === 0 || parts.length > 2) return undefined;\n\tconst minutes = parts.map(parseDurationMinutes);\n\tif (minutes.some((value) => value === undefined)) return undefined;\n\tconst concreteMinutes = minutes.filter((value): value is number => value !== undefined);\n\treturn { shortestMinutes: Math.min(...concreteMinutes) };\n}\n\nfunction parseDurationMinutes(value: string): number | undefined {\n\tconst match = /^(?<amount>[1-9][0-9]*)(?<unit>[mhd])$/.exec(value);\n\tif (match?.groups === undefined) return undefined;\n\tconst amount = Number(match.groups.amount);\n\tif (!Number.isSafeInteger(amount) || amount <= 0) return undefined;\n\tconst unit = match.groups.unit;\n\tif (unit === \"m\") return amount;\n\tif (unit === \"h\") return amount * 60;\n\treturn amount * 1440;\n}\n\nfunction normalizeCost(cost: LoopPatternCost): NormalizedCost | undefined {\n\tconst tokensNoop = cost.tokensNoop ?? cost.tokens_noop;\n\tconst tokensReport = cost.tokensReport ?? cost.tokens_report;\n\tconst tokensAction = cost.tokensAction ?? cost.tokens_action;\n\tconst suggestedDailyCap = cost.suggestedDailyCap ?? cost.suggested_daily_cap;\n\tconst earlyExitRequired = cost.earlyExitRequired ?? cost.early_exit_required;\n\tif (\n\t\t!isPositiveInteger(tokensNoop) ||\n\t\t!isPositiveInteger(tokensReport) ||\n\t\t!isPositiveInteger(tokensAction) ||\n\t\t!isPositiveInteger(suggestedDailyCap) ||\n\t\ttypeof earlyExitRequired !== \"boolean\"\n\t) {\n\t\treturn undefined;\n\t}\n\treturn { tokensNoop, tokensReport, tokensAction, suggestedDailyCap, earlyExitRequired };\n}\n\nfunction requireNormalizedCost(entry: LoopPatternRegistryEntry): NormalizedCost {\n\tconst cost = normalizeCost(entry.cost);\n\tif (cost === undefined) throw new Error(`Invalid loop pattern '${entry.id}': invalid-cost`);\n\treturn cost;\n}\n\nfunction requireParsedCadence(entry: LoopPatternRegistryEntry): ParsedCadence {\n\tconst cadence = parseCadence(entry.cadence);\n\tif (cadence === undefined) throw new Error(`Invalid loop pattern '${entry.id}': invalid-cadence`);\n\treturn cadence;\n}\n\nfunction isPositiveInteger(value: number | undefined): value is number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction normalizedTriggerKeywords(entry: LoopPatternRegistryEntry): readonly string[] {\n\treturn uniqueNormalizedTerms(entry.triggerKeywords ?? entry.trigger_keywords ?? []);\n}\n\nfunction normalizedSkillTriggers(\n\tentry: LoopPatternRegistryEntry,\n): readonly { readonly skill: string; readonly term: string }[] {\n\tconst triggerMap = entry.skillTriggers ?? entry.skill_triggers ?? {};\n\tconst triggers: { readonly skill: string; readonly term: string }[] = [];\n\tfor (const [skill, terms] of Object.entries(triggerMap)) {\n\t\tfor (const term of uniqueNormalizedTerms(terms)) {\n\t\t\ttriggers.push({ skill, term });\n\t\t}\n\t}\n\treturn triggers;\n}\n\nfunction normalizedHumanGateIds(entry: LoopPatternRegistryEntry): readonly string[] {\n\treturn uniqueTrimmedStrings(entry.humanGates ?? entry.human_gates ?? []);\n}\n\nfunction uniqueNormalizedTerms(terms: readonly string[]): readonly string[] {\n\tconst normalized = terms.map(normalizeTerm).filter((term) => term.length > 0);\n\treturn [...new Set(normalized)];\n}\n\nfunction uniqueTrimmedStrings(values: readonly string[]): readonly string[] {\n\tconst seen = new Set<string>();\n\tconst unique: string[] = [];\n\tfor (const value of values) {\n\t\tconst trimmed = value.trim();\n\t\tconst normalized = normalizeTerm(trimmed);\n\t\tif (trimmed.length === 0 || seen.has(normalized)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(normalized);\n\t\tunique.push(trimmed);\n\t}\n\treturn unique;\n}\n\nfunction normalizeTerm(term: string): string {\n\treturn term.toLowerCase().trim().replace(/\\s+/g, \" \");\n}\n\nfunction nonEmptyString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction normalizeStarterIdentifier(starter: string): string {\n\tconst normalized = normalizeSlashes(starter).trim().replace(/^\\.\\//, \"\").replace(/\\/+$/g, \"\");\n\treturn normalized.length === 0 ? starter : normalized;\n}\n\nfunction normalizeSlashes(value: string): string {\n\treturn value.replace(/\\\\/g, \"/\");\n}\n\nfunction isSafeBranchPrefix(branchPrefix: string): boolean {\n\tconst normalized = normalizeSlashes(branchPrefix).trim();\n\tif (normalized.length === 0) return false;\n\tif (normalized.startsWith(\"/\") || normalized.includes(\"..\")) return false;\n\treturn !/\\s/.test(normalized);\n}\n\nfunction lastPathSegment(value: string): string {\n\tconst parts = value.split(\"/\").filter((part) => part.length > 0);\n\treturn parts.at(-1) ?? value;\n}\n"]}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
export type LoopLevel = "L1" | "L2" | "L3";
|
|
2
|
+
export type LoopStatus = "ready" | "active" | "paused" | "retired";
|
|
3
|
+
export type LoopRunCause = "schedule" | "manual" | "event";
|
|
4
|
+
export type LoopScheduleMode = "manual" | "interval" | "event";
|
|
5
|
+
export type LoopWorktreeIsolationMode = "none" | "per-run" | "per-item";
|
|
6
|
+
export type LoopWorktreeCleanupPolicy = "after-run" | "after-merge" | "manual";
|
|
7
|
+
export type LoopCapabilityAccess = "required" | "optional";
|
|
8
|
+
export type LoopConnectorKind = "mcp" | "connector";
|
|
9
|
+
export type LoopSubagentRoleKind = "maker" | "checker" | "scout" | "planner";
|
|
10
|
+
export type LoopRunOutcome = "report-only" | "fix-proposed" | "no-op" | "escalated" | "budget-blocked" | "collision-skipped" | "verifier-failed" | "killed";
|
|
11
|
+
export type LoopWorkItemStatus = "new" | "watch" | "reported" | "claimed" | "executing" | "verifying" | "accepted" | "escalated" | "closed";
|
|
12
|
+
export type LoopWorkItemRisk = "low" | "medium" | "high";
|
|
13
|
+
export type LoopWorkItemSource = "ci" | "pr" | "issue" | "state" | "manual" | "docs";
|
|
14
|
+
export interface LoopWatchedScope {
|
|
15
|
+
readonly repos: readonly string[];
|
|
16
|
+
readonly branches?: readonly string[];
|
|
17
|
+
readonly paths?: readonly string[];
|
|
18
|
+
readonly tickets?: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
export interface LoopBudgetPolicy {
|
|
21
|
+
readonly maxRunsPerDay: number;
|
|
22
|
+
readonly maxTokensPerDay: number;
|
|
23
|
+
readonly maxSubagentsPerRun: number;
|
|
24
|
+
readonly maxAttemptsPerItem: number;
|
|
25
|
+
readonly maxAutoPrsPerDay?: number;
|
|
26
|
+
readonly slowDownAtRatio?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface LoopSafetyPolicy {
|
|
29
|
+
readonly requireIndependentVerifier: boolean;
|
|
30
|
+
readonly requireHumanGateForHighRisk: boolean;
|
|
31
|
+
readonly allowedWriteScopes: readonly string[];
|
|
32
|
+
readonly deniedWriteScopes?: readonly string[];
|
|
33
|
+
readonly maxWriteScopeCount?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface LoopSchedulePolicy {
|
|
36
|
+
readonly mode: LoopScheduleMode;
|
|
37
|
+
readonly cadence: string;
|
|
38
|
+
readonly shortestIntervalMinutes: number;
|
|
39
|
+
readonly runOn: readonly LoopRunCause[];
|
|
40
|
+
readonly jitterMinutes?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface LoopWorktreeIsolationPolicy {
|
|
43
|
+
readonly mode: LoopWorktreeIsolationMode;
|
|
44
|
+
readonly branchPrefix?: string;
|
|
45
|
+
readonly baseRef?: string;
|
|
46
|
+
readonly cleanup: LoopWorktreeCleanupPolicy;
|
|
47
|
+
readonly requireCleanCheckout: boolean;
|
|
48
|
+
readonly maxConcurrentWorktrees?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface LoopSkillBinding {
|
|
51
|
+
readonly id: string;
|
|
52
|
+
readonly purpose: string;
|
|
53
|
+
readonly access: LoopCapabilityAccess;
|
|
54
|
+
readonly triggerKeywords?: readonly string[];
|
|
55
|
+
}
|
|
56
|
+
export interface LoopConnectorBinding {
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly kind: LoopConnectorKind;
|
|
59
|
+
readonly purpose: string;
|
|
60
|
+
readonly access: LoopCapabilityAccess;
|
|
61
|
+
readonly tools?: readonly string[];
|
|
62
|
+
}
|
|
63
|
+
export interface LoopSubagentRole {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly role: LoopSubagentRoleKind;
|
|
66
|
+
readonly skills: readonly string[];
|
|
67
|
+
readonly connectors: readonly string[];
|
|
68
|
+
readonly independentFrom?: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
export interface LoopSubagentPolicy {
|
|
71
|
+
readonly maxParallel: number;
|
|
72
|
+
readonly requireMakerChecker: boolean;
|
|
73
|
+
readonly makerRole: string;
|
|
74
|
+
readonly checkerRole?: string;
|
|
75
|
+
readonly roles: readonly LoopSubagentRole[];
|
|
76
|
+
}
|
|
77
|
+
export interface LoopDurableStatePolicy {
|
|
78
|
+
readonly statePath: string;
|
|
79
|
+
readonly runLogPath: string;
|
|
80
|
+
readonly budgetLedgerPath: string;
|
|
81
|
+
readonly checkpointPath?: string;
|
|
82
|
+
readonly retentionDays: number;
|
|
83
|
+
readonly requireReplayableEvidence: boolean;
|
|
84
|
+
}
|
|
85
|
+
export interface LoopHumanGatePolicy {
|
|
86
|
+
readonly gates: readonly string[];
|
|
87
|
+
readonly requiredForRisks: readonly LoopWorkItemRisk[];
|
|
88
|
+
readonly approvalRefsRequired: boolean;
|
|
89
|
+
readonly escalationTargets?: readonly string[];
|
|
90
|
+
}
|
|
91
|
+
export interface LoopDefinition {
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly pattern: string;
|
|
94
|
+
readonly objective: string;
|
|
95
|
+
readonly nonGoals: readonly string[];
|
|
96
|
+
readonly level: LoopLevel;
|
|
97
|
+
readonly watchedScope: LoopWatchedScope;
|
|
98
|
+
readonly budget: LoopBudgetPolicy;
|
|
99
|
+
readonly safety: LoopSafetyPolicy;
|
|
100
|
+
readonly statePath: string;
|
|
101
|
+
readonly runLogPath: string;
|
|
102
|
+
readonly schedule?: LoopSchedulePolicy;
|
|
103
|
+
readonly worktree?: LoopWorktreeIsolationPolicy;
|
|
104
|
+
readonly skills?: readonly LoopSkillBinding[];
|
|
105
|
+
readonly connectors?: readonly LoopConnectorBinding[];
|
|
106
|
+
readonly subagents?: LoopSubagentPolicy;
|
|
107
|
+
readonly durableState?: LoopDurableStatePolicy;
|
|
108
|
+
readonly humanGates?: LoopHumanGatePolicy;
|
|
109
|
+
}
|
|
110
|
+
export interface LoopBudgetUsage {
|
|
111
|
+
readonly runs: number;
|
|
112
|
+
readonly tokensEstimate: number;
|
|
113
|
+
readonly subagentSpawns: number;
|
|
114
|
+
readonly autoPrs: number;
|
|
115
|
+
}
|
|
116
|
+
export interface LoopWorkItem {
|
|
117
|
+
readonly id: string;
|
|
118
|
+
readonly source: LoopWorkItemSource;
|
|
119
|
+
readonly sourceRef: string;
|
|
120
|
+
readonly title: string;
|
|
121
|
+
readonly status: LoopWorkItemStatus;
|
|
122
|
+
readonly risk: LoopWorkItemRisk;
|
|
123
|
+
readonly actingOn: string;
|
|
124
|
+
readonly firstSeenAt: string;
|
|
125
|
+
readonly lastSeenAt: string;
|
|
126
|
+
readonly attemptCount: number;
|
|
127
|
+
readonly evidenceRefs: readonly string[];
|
|
128
|
+
readonly lastFailureFingerprint?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface LoopLease {
|
|
131
|
+
readonly workItemId: string;
|
|
132
|
+
readonly actingOn: string;
|
|
133
|
+
readonly ownerRunId: string;
|
|
134
|
+
readonly leaseExpiresAt: string;
|
|
135
|
+
}
|
|
136
|
+
export interface LoopState {
|
|
137
|
+
readonly loopId: string;
|
|
138
|
+
readonly status: LoopStatus;
|
|
139
|
+
readonly lastRunAt?: string;
|
|
140
|
+
readonly killSwitch?: boolean;
|
|
141
|
+
readonly highPriority: readonly LoopWorkItem[];
|
|
142
|
+
readonly watchList: readonly LoopWorkItem[];
|
|
143
|
+
readonly humanInbox: readonly LoopWorkItem[];
|
|
144
|
+
readonly recentNoise: readonly string[];
|
|
145
|
+
readonly leases: readonly LoopLease[];
|
|
146
|
+
readonly budgetUsedToday: LoopBudgetUsage;
|
|
147
|
+
}
|
|
148
|
+
export interface LoopBudgetEstimate {
|
|
149
|
+
readonly runs: number;
|
|
150
|
+
readonly tokensEstimate: number;
|
|
151
|
+
readonly subagentSpawns: number;
|
|
152
|
+
readonly autoPrs?: number;
|
|
153
|
+
}
|
|
154
|
+
export interface LoopBudgetReservation {
|
|
155
|
+
readonly loopId: string;
|
|
156
|
+
readonly reservationId: string;
|
|
157
|
+
readonly estimate: LoopBudgetEstimate;
|
|
158
|
+
readonly reservedAt: string;
|
|
159
|
+
}
|
|
160
|
+
export interface LoopRunLogEntry {
|
|
161
|
+
readonly runId: string;
|
|
162
|
+
readonly loopId: string;
|
|
163
|
+
readonly pattern: string;
|
|
164
|
+
readonly level: LoopLevel;
|
|
165
|
+
readonly startedAt: string;
|
|
166
|
+
readonly durationMs: number;
|
|
167
|
+
readonly itemsFound: number;
|
|
168
|
+
readonly actionsTaken: number;
|
|
169
|
+
readonly escalations: number;
|
|
170
|
+
readonly tokensEstimate: number;
|
|
171
|
+
readonly budgetDelta: LoopBudgetUsage;
|
|
172
|
+
readonly outcome: LoopRunOutcome;
|
|
173
|
+
readonly stateRevision: string;
|
|
174
|
+
readonly evidenceRefs: readonly string[];
|
|
175
|
+
readonly inputSnapshotHash: string;
|
|
176
|
+
readonly promptHash: string;
|
|
177
|
+
readonly toolVersions: Readonly<Record<string, string>>;
|
|
178
|
+
}
|
|
179
|
+
export interface LoopStatePatch {
|
|
180
|
+
readonly highPriority?: readonly LoopWorkItem[];
|
|
181
|
+
readonly watchList?: readonly LoopWorkItem[];
|
|
182
|
+
readonly humanInbox?: readonly LoopWorkItem[];
|
|
183
|
+
readonly recentNoise?: readonly string[];
|
|
184
|
+
readonly leases?: readonly LoopLease[];
|
|
185
|
+
readonly budgetUsedToday?: LoopBudgetUsage;
|
|
186
|
+
readonly lastRunAt?: string;
|
|
187
|
+
readonly status?: LoopStatus;
|
|
188
|
+
}
|
|
189
|
+
export interface LoopValidationDiagnostic {
|
|
190
|
+
readonly code: string;
|
|
191
|
+
readonly message: string;
|
|
192
|
+
readonly path?: string;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=loop-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-types.d.ts","sourceRoot":"","sources":["../../src/core/loop-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,WAAW,CAAC;AAEpD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,cAAc,GACvB,aAAa,GACb,cAAc,GACd,OAAO,GACP,WAAW,GACX,gBAAgB,GAChB,mBAAmB,GACnB,iBAAiB,GACjB,QAAQ,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAC3B,KAAK,GACL,OAAO,GACP,UAAU,GACV,SAAS,GACT,WAAW,GACX,WAAW,GACX,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACvD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB","sourcesContent":["export type LoopLevel = \"L1\" | \"L2\" | \"L3\";\n\nexport type LoopStatus = \"ready\" | \"active\" | \"paused\" | \"retired\";\n\nexport type LoopRunCause = \"schedule\" | \"manual\" | \"event\";\n\nexport type LoopScheduleMode = \"manual\" | \"interval\" | \"event\";\n\nexport type LoopWorktreeIsolationMode = \"none\" | \"per-run\" | \"per-item\";\n\nexport type LoopWorktreeCleanupPolicy = \"after-run\" | \"after-merge\" | \"manual\";\n\nexport type LoopCapabilityAccess = \"required\" | \"optional\";\n\nexport type LoopConnectorKind = \"mcp\" | \"connector\";\n\nexport type LoopSubagentRoleKind = \"maker\" | \"checker\" | \"scout\" | \"planner\";\n\nexport type LoopRunOutcome =\n\t| \"report-only\"\n\t| \"fix-proposed\"\n\t| \"no-op\"\n\t| \"escalated\"\n\t| \"budget-blocked\"\n\t| \"collision-skipped\"\n\t| \"verifier-failed\"\n\t| \"killed\";\n\nexport type LoopWorkItemStatus =\n\t| \"new\"\n\t| \"watch\"\n\t| \"reported\"\n\t| \"claimed\"\n\t| \"executing\"\n\t| \"verifying\"\n\t| \"accepted\"\n\t| \"escalated\"\n\t| \"closed\";\n\nexport type LoopWorkItemRisk = \"low\" | \"medium\" | \"high\";\n\nexport type LoopWorkItemSource = \"ci\" | \"pr\" | \"issue\" | \"state\" | \"manual\" | \"docs\";\n\nexport interface LoopWatchedScope {\n\treadonly repos: readonly string[];\n\treadonly branches?: readonly string[];\n\treadonly paths?: readonly string[];\n\treadonly tickets?: readonly string[];\n}\n\nexport interface LoopBudgetPolicy {\n\treadonly maxRunsPerDay: number;\n\treadonly maxTokensPerDay: number;\n\treadonly maxSubagentsPerRun: number;\n\treadonly maxAttemptsPerItem: number;\n\treadonly maxAutoPrsPerDay?: number;\n\treadonly slowDownAtRatio?: number;\n}\n\nexport interface LoopSafetyPolicy {\n\treadonly requireIndependentVerifier: boolean;\n\treadonly requireHumanGateForHighRisk: boolean;\n\treadonly allowedWriteScopes: readonly string[];\n\treadonly deniedWriteScopes?: readonly string[];\n\treadonly maxWriteScopeCount?: number;\n}\n\nexport interface LoopSchedulePolicy {\n\treadonly mode: LoopScheduleMode;\n\treadonly cadence: string;\n\treadonly shortestIntervalMinutes: number;\n\treadonly runOn: readonly LoopRunCause[];\n\treadonly jitterMinutes?: number;\n}\n\nexport interface LoopWorktreeIsolationPolicy {\n\treadonly mode: LoopWorktreeIsolationMode;\n\treadonly branchPrefix?: string;\n\treadonly baseRef?: string;\n\treadonly cleanup: LoopWorktreeCleanupPolicy;\n\treadonly requireCleanCheckout: boolean;\n\treadonly maxConcurrentWorktrees?: number;\n}\n\nexport interface LoopSkillBinding {\n\treadonly id: string;\n\treadonly purpose: string;\n\treadonly access: LoopCapabilityAccess;\n\treadonly triggerKeywords?: readonly string[];\n}\n\nexport interface LoopConnectorBinding {\n\treadonly id: string;\n\treadonly kind: LoopConnectorKind;\n\treadonly purpose: string;\n\treadonly access: LoopCapabilityAccess;\n\treadonly tools?: readonly string[];\n}\n\nexport interface LoopSubagentRole {\n\treadonly id: string;\n\treadonly role: LoopSubagentRoleKind;\n\treadonly skills: readonly string[];\n\treadonly connectors: readonly string[];\n\treadonly independentFrom?: readonly string[];\n}\n\nexport interface LoopSubagentPolicy {\n\treadonly maxParallel: number;\n\treadonly requireMakerChecker: boolean;\n\treadonly makerRole: string;\n\treadonly checkerRole?: string;\n\treadonly roles: readonly LoopSubagentRole[];\n}\n\nexport interface LoopDurableStatePolicy {\n\treadonly statePath: string;\n\treadonly runLogPath: string;\n\treadonly budgetLedgerPath: string;\n\treadonly checkpointPath?: string;\n\treadonly retentionDays: number;\n\treadonly requireReplayableEvidence: boolean;\n}\n\nexport interface LoopHumanGatePolicy {\n\treadonly gates: readonly string[];\n\treadonly requiredForRisks: readonly LoopWorkItemRisk[];\n\treadonly approvalRefsRequired: boolean;\n\treadonly escalationTargets?: readonly string[];\n}\n\nexport interface LoopDefinition {\n\treadonly id: string;\n\treadonly pattern: string;\n\treadonly objective: string;\n\treadonly nonGoals: readonly string[];\n\treadonly level: LoopLevel;\n\treadonly watchedScope: LoopWatchedScope;\n\treadonly budget: LoopBudgetPolicy;\n\treadonly safety: LoopSafetyPolicy;\n\treadonly statePath: string;\n\treadonly runLogPath: string;\n\treadonly schedule?: LoopSchedulePolicy;\n\treadonly worktree?: LoopWorktreeIsolationPolicy;\n\treadonly skills?: readonly LoopSkillBinding[];\n\treadonly connectors?: readonly LoopConnectorBinding[];\n\treadonly subagents?: LoopSubagentPolicy;\n\treadonly durableState?: LoopDurableStatePolicy;\n\treadonly humanGates?: LoopHumanGatePolicy;\n}\n\nexport interface LoopBudgetUsage {\n\treadonly runs: number;\n\treadonly tokensEstimate: number;\n\treadonly subagentSpawns: number;\n\treadonly autoPrs: number;\n}\n\nexport interface LoopWorkItem {\n\treadonly id: string;\n\treadonly source: LoopWorkItemSource;\n\treadonly sourceRef: string;\n\treadonly title: string;\n\treadonly status: LoopWorkItemStatus;\n\treadonly risk: LoopWorkItemRisk;\n\treadonly actingOn: string;\n\treadonly firstSeenAt: string;\n\treadonly lastSeenAt: string;\n\treadonly attemptCount: number;\n\treadonly evidenceRefs: readonly string[];\n\treadonly lastFailureFingerprint?: string;\n}\n\nexport interface LoopLease {\n\treadonly workItemId: string;\n\treadonly actingOn: string;\n\treadonly ownerRunId: string;\n\treadonly leaseExpiresAt: string;\n}\n\nexport interface LoopState {\n\treadonly loopId: string;\n\treadonly status: LoopStatus;\n\treadonly lastRunAt?: string;\n\treadonly killSwitch?: boolean;\n\treadonly highPriority: readonly LoopWorkItem[];\n\treadonly watchList: readonly LoopWorkItem[];\n\treadonly humanInbox: readonly LoopWorkItem[];\n\treadonly recentNoise: readonly string[];\n\treadonly leases: readonly LoopLease[];\n\treadonly budgetUsedToday: LoopBudgetUsage;\n}\n\nexport interface LoopBudgetEstimate {\n\treadonly runs: number;\n\treadonly tokensEstimate: number;\n\treadonly subagentSpawns: number;\n\treadonly autoPrs?: number;\n}\n\nexport interface LoopBudgetReservation {\n\treadonly loopId: string;\n\treadonly reservationId: string;\n\treadonly estimate: LoopBudgetEstimate;\n\treadonly reservedAt: string;\n}\n\nexport interface LoopRunLogEntry {\n\treadonly runId: string;\n\treadonly loopId: string;\n\treadonly pattern: string;\n\treadonly level: LoopLevel;\n\treadonly startedAt: string;\n\treadonly durationMs: number;\n\treadonly itemsFound: number;\n\treadonly actionsTaken: number;\n\treadonly escalations: number;\n\treadonly tokensEstimate: number;\n\treadonly budgetDelta: LoopBudgetUsage;\n\treadonly outcome: LoopRunOutcome;\n\treadonly stateRevision: string;\n\treadonly evidenceRefs: readonly string[];\n\treadonly inputSnapshotHash: string;\n\treadonly promptHash: string;\n\treadonly toolVersions: Readonly<Record<string, string>>;\n}\n\nexport interface LoopStatePatch {\n\treadonly highPriority?: readonly LoopWorkItem[];\n\treadonly watchList?: readonly LoopWorkItem[];\n\treadonly humanInbox?: readonly LoopWorkItem[];\n\treadonly recentNoise?: readonly string[];\n\treadonly leases?: readonly LoopLease[];\n\treadonly budgetUsedToday?: LoopBudgetUsage;\n\treadonly lastRunAt?: string;\n\treadonly status?: LoopStatus;\n}\n\nexport interface LoopValidationDiagnostic {\n\treadonly code: string;\n\treadonly message: string;\n\treadonly path?: string;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-types.js","sourceRoot":"","sources":["../../src/core/loop-types.ts"],"names":[],"mappings":"","sourcesContent":["export type LoopLevel = \"L1\" | \"L2\" | \"L3\";\n\nexport type LoopStatus = \"ready\" | \"active\" | \"paused\" | \"retired\";\n\nexport type LoopRunCause = \"schedule\" | \"manual\" | \"event\";\n\nexport type LoopScheduleMode = \"manual\" | \"interval\" | \"event\";\n\nexport type LoopWorktreeIsolationMode = \"none\" | \"per-run\" | \"per-item\";\n\nexport type LoopWorktreeCleanupPolicy = \"after-run\" | \"after-merge\" | \"manual\";\n\nexport type LoopCapabilityAccess = \"required\" | \"optional\";\n\nexport type LoopConnectorKind = \"mcp\" | \"connector\";\n\nexport type LoopSubagentRoleKind = \"maker\" | \"checker\" | \"scout\" | \"planner\";\n\nexport type LoopRunOutcome =\n\t| \"report-only\"\n\t| \"fix-proposed\"\n\t| \"no-op\"\n\t| \"escalated\"\n\t| \"budget-blocked\"\n\t| \"collision-skipped\"\n\t| \"verifier-failed\"\n\t| \"killed\";\n\nexport type LoopWorkItemStatus =\n\t| \"new\"\n\t| \"watch\"\n\t| \"reported\"\n\t| \"claimed\"\n\t| \"executing\"\n\t| \"verifying\"\n\t| \"accepted\"\n\t| \"escalated\"\n\t| \"closed\";\n\nexport type LoopWorkItemRisk = \"low\" | \"medium\" | \"high\";\n\nexport type LoopWorkItemSource = \"ci\" | \"pr\" | \"issue\" | \"state\" | \"manual\" | \"docs\";\n\nexport interface LoopWatchedScope {\n\treadonly repos: readonly string[];\n\treadonly branches?: readonly string[];\n\treadonly paths?: readonly string[];\n\treadonly tickets?: readonly string[];\n}\n\nexport interface LoopBudgetPolicy {\n\treadonly maxRunsPerDay: number;\n\treadonly maxTokensPerDay: number;\n\treadonly maxSubagentsPerRun: number;\n\treadonly maxAttemptsPerItem: number;\n\treadonly maxAutoPrsPerDay?: number;\n\treadonly slowDownAtRatio?: number;\n}\n\nexport interface LoopSafetyPolicy {\n\treadonly requireIndependentVerifier: boolean;\n\treadonly requireHumanGateForHighRisk: boolean;\n\treadonly allowedWriteScopes: readonly string[];\n\treadonly deniedWriteScopes?: readonly string[];\n\treadonly maxWriteScopeCount?: number;\n}\n\nexport interface LoopSchedulePolicy {\n\treadonly mode: LoopScheduleMode;\n\treadonly cadence: string;\n\treadonly shortestIntervalMinutes: number;\n\treadonly runOn: readonly LoopRunCause[];\n\treadonly jitterMinutes?: number;\n}\n\nexport interface LoopWorktreeIsolationPolicy {\n\treadonly mode: LoopWorktreeIsolationMode;\n\treadonly branchPrefix?: string;\n\treadonly baseRef?: string;\n\treadonly cleanup: LoopWorktreeCleanupPolicy;\n\treadonly requireCleanCheckout: boolean;\n\treadonly maxConcurrentWorktrees?: number;\n}\n\nexport interface LoopSkillBinding {\n\treadonly id: string;\n\treadonly purpose: string;\n\treadonly access: LoopCapabilityAccess;\n\treadonly triggerKeywords?: readonly string[];\n}\n\nexport interface LoopConnectorBinding {\n\treadonly id: string;\n\treadonly kind: LoopConnectorKind;\n\treadonly purpose: string;\n\treadonly access: LoopCapabilityAccess;\n\treadonly tools?: readonly string[];\n}\n\nexport interface LoopSubagentRole {\n\treadonly id: string;\n\treadonly role: LoopSubagentRoleKind;\n\treadonly skills: readonly string[];\n\treadonly connectors: readonly string[];\n\treadonly independentFrom?: readonly string[];\n}\n\nexport interface LoopSubagentPolicy {\n\treadonly maxParallel: number;\n\treadonly requireMakerChecker: boolean;\n\treadonly makerRole: string;\n\treadonly checkerRole?: string;\n\treadonly roles: readonly LoopSubagentRole[];\n}\n\nexport interface LoopDurableStatePolicy {\n\treadonly statePath: string;\n\treadonly runLogPath: string;\n\treadonly budgetLedgerPath: string;\n\treadonly checkpointPath?: string;\n\treadonly retentionDays: number;\n\treadonly requireReplayableEvidence: boolean;\n}\n\nexport interface LoopHumanGatePolicy {\n\treadonly gates: readonly string[];\n\treadonly requiredForRisks: readonly LoopWorkItemRisk[];\n\treadonly approvalRefsRequired: boolean;\n\treadonly escalationTargets?: readonly string[];\n}\n\nexport interface LoopDefinition {\n\treadonly id: string;\n\treadonly pattern: string;\n\treadonly objective: string;\n\treadonly nonGoals: readonly string[];\n\treadonly level: LoopLevel;\n\treadonly watchedScope: LoopWatchedScope;\n\treadonly budget: LoopBudgetPolicy;\n\treadonly safety: LoopSafetyPolicy;\n\treadonly statePath: string;\n\treadonly runLogPath: string;\n\treadonly schedule?: LoopSchedulePolicy;\n\treadonly worktree?: LoopWorktreeIsolationPolicy;\n\treadonly skills?: readonly LoopSkillBinding[];\n\treadonly connectors?: readonly LoopConnectorBinding[];\n\treadonly subagents?: LoopSubagentPolicy;\n\treadonly durableState?: LoopDurableStatePolicy;\n\treadonly humanGates?: LoopHumanGatePolicy;\n}\n\nexport interface LoopBudgetUsage {\n\treadonly runs: number;\n\treadonly tokensEstimate: number;\n\treadonly subagentSpawns: number;\n\treadonly autoPrs: number;\n}\n\nexport interface LoopWorkItem {\n\treadonly id: string;\n\treadonly source: LoopWorkItemSource;\n\treadonly sourceRef: string;\n\treadonly title: string;\n\treadonly status: LoopWorkItemStatus;\n\treadonly risk: LoopWorkItemRisk;\n\treadonly actingOn: string;\n\treadonly firstSeenAt: string;\n\treadonly lastSeenAt: string;\n\treadonly attemptCount: number;\n\treadonly evidenceRefs: readonly string[];\n\treadonly lastFailureFingerprint?: string;\n}\n\nexport interface LoopLease {\n\treadonly workItemId: string;\n\treadonly actingOn: string;\n\treadonly ownerRunId: string;\n\treadonly leaseExpiresAt: string;\n}\n\nexport interface LoopState {\n\treadonly loopId: string;\n\treadonly status: LoopStatus;\n\treadonly lastRunAt?: string;\n\treadonly killSwitch?: boolean;\n\treadonly highPriority: readonly LoopWorkItem[];\n\treadonly watchList: readonly LoopWorkItem[];\n\treadonly humanInbox: readonly LoopWorkItem[];\n\treadonly recentNoise: readonly string[];\n\treadonly leases: readonly LoopLease[];\n\treadonly budgetUsedToday: LoopBudgetUsage;\n}\n\nexport interface LoopBudgetEstimate {\n\treadonly runs: number;\n\treadonly tokensEstimate: number;\n\treadonly subagentSpawns: number;\n\treadonly autoPrs?: number;\n}\n\nexport interface LoopBudgetReservation {\n\treadonly loopId: string;\n\treadonly reservationId: string;\n\treadonly estimate: LoopBudgetEstimate;\n\treadonly reservedAt: string;\n}\n\nexport interface LoopRunLogEntry {\n\treadonly runId: string;\n\treadonly loopId: string;\n\treadonly pattern: string;\n\treadonly level: LoopLevel;\n\treadonly startedAt: string;\n\treadonly durationMs: number;\n\treadonly itemsFound: number;\n\treadonly actionsTaken: number;\n\treadonly escalations: number;\n\treadonly tokensEstimate: number;\n\treadonly budgetDelta: LoopBudgetUsage;\n\treadonly outcome: LoopRunOutcome;\n\treadonly stateRevision: string;\n\treadonly evidenceRefs: readonly string[];\n\treadonly inputSnapshotHash: string;\n\treadonly promptHash: string;\n\treadonly toolVersions: Readonly<Record<string, string>>;\n}\n\nexport interface LoopStatePatch {\n\treadonly highPriority?: readonly LoopWorkItem[];\n\treadonly watchList?: readonly LoopWorkItem[];\n\treadonly humanInbox?: readonly LoopWorkItem[];\n\treadonly recentNoise?: readonly string[];\n\treadonly leases?: readonly LoopLease[];\n\treadonly budgetUsedToday?: LoopBudgetUsage;\n\treadonly lastRunAt?: string;\n\treadonly status?: LoopStatus;\n}\n\nexport interface LoopValidationDiagnostic {\n\treadonly code: string;\n\treadonly message: string;\n\treadonly path?: string;\n}\n"]}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* 2. ~/.omk/mcp.json (global, omk)
|
|
11
11
|
* 3. <cwd>/.omk/mcp.json (project, highest priority)
|
|
12
12
|
*/
|
|
13
|
+
import { type McpAuthDecision, type McpCapabilityDecision, type McpSamplingDecision } from "./mcp-presets.ts";
|
|
13
14
|
export type McpInventoryNetworkMode = "none" | "loopback" | "domain-allowlist" | "all-explicit";
|
|
14
15
|
export interface McpInventoryNetworkDecision {
|
|
15
16
|
allowed: boolean;
|
|
@@ -28,6 +29,9 @@ export interface McpServerEntry {
|
|
|
28
29
|
argsCount: number;
|
|
29
30
|
autoApproveCount: number;
|
|
30
31
|
networkDecision: McpInventoryNetworkDecision;
|
|
32
|
+
capabilityDecision: McpCapabilityDecision;
|
|
33
|
+
samplingDecision: McpSamplingDecision;
|
|
34
|
+
authDecision: McpAuthDecision;
|
|
31
35
|
startupTimeoutSec?: number;
|
|
32
36
|
overriddenBy?: string;
|
|
33
37
|
}
|
|
@@ -48,6 +52,9 @@ export interface McpBuiltinPresetEntry {
|
|
|
48
52
|
startupTimeoutSec: number;
|
|
49
53
|
autoApproveCount: number;
|
|
50
54
|
networkDecision: McpInventoryNetworkDecision;
|
|
55
|
+
capabilityDecision: McpCapabilityDecision;
|
|
56
|
+
samplingDecision: McpSamplingDecision;
|
|
57
|
+
authDecision: McpAuthDecision;
|
|
51
58
|
installHint: string;
|
|
52
59
|
notes: string[];
|
|
53
60
|
configured: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-inventory.d.ts","sourceRoot":"","sources":["../../src/core/mcp-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAEhG,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,2BAA2B,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,2BAA2B,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C;AAoID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,MAAqB,GAAG,YAAY,CA8CvG","sourcesContent":["/**\n * Read-only MCP inventory reader.\n *\n * Aggregates MCP server configuration from up to three on-disk sources without\n * starting, stopping, or modifying any server. Secret values from `env` are\n * never exposed — only the key names are returned to callers.\n *\n * Source precedence (later wins on name collision):\n * 1. ~/.kimi/mcp.json (global, legacy/kimi)\n * 2. ~/.omk/mcp.json (global, omk)\n * 3. <cwd>/.omk/mcp.json (project, highest priority)\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { listBuiltinMcpPresets, summarizeBuiltinMcpPreset } from \"./mcp-presets.ts\";\n\nexport type McpInventoryNetworkMode = \"none\" | \"loopback\" | \"domain-allowlist\" | \"all-explicit\";\n\nexport interface McpInventoryNetworkDecision {\n\tallowed: boolean;\n\tmode: McpInventoryNetworkMode;\n\trule: string;\n\treason: string;\n\tallowedDomains: string[];\n\tdeniedDomains: string[];\n\tallowUnixSockets: string[];\n}\n\nexport interface McpServerEntry {\n\tname: string;\n\tsource: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\targsCount: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tstartupTimeoutSec?: number;\n\toverriddenBy?: string;\n}\n\nexport interface McpBuiltinPresetEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\thomepage: string;\n\trepository: string;\n\tlicense: string;\n\texactPackageSpec: string;\n\tgitTag: string;\n\tgitCommit: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\trequiredEnvKeys: string[];\n\toptionalEnvKeys: string[];\n\tstartupTimeoutSec: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tinstallHint: string;\n\tnotes: string[];\n\tconfigured: boolean;\n\tconfiguredBy?: string;\n}\n\nexport interface McpInventory {\n\tentries: McpServerEntry[];\n\tpresets: McpBuiltinPresetEntry[];\n\tsources: { path: string; exists: boolean; serverCount: number }[];\n\terrors: { path: string; message: string }[];\n}\n\ninterface RawServer {\n\tcommand?: unknown;\n\targs?: unknown;\n\tenv?: unknown;\n\tautoApprove?: unknown;\n\tstartup_timeout_sec?: unknown;\n\tnetwork?: unknown;\n}\n\nfunction readJsonSafe(filePath: string): { value: unknown; error?: string } {\n\ttry {\n\t\tconst raw = fs.readFileSync(filePath, \"utf8\");\n\t\treturn { value: JSON.parse(raw) };\n\t} catch (err) {\n\t\tif ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n\t\t\treturn { value: null };\n\t\t}\n\t\treturn { value: null, error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nfunction summarizeCommand(server: RawServer): string {\n\tif (typeof server.command !== \"string\" || !server.command) {\n\t\treturn \"<unknown>\";\n\t}\n\tconst base = path.basename(server.command);\n\tif (Array.isArray(server.args) && server.args.length > 0) {\n\t\tconst first = server.args.find((a) => typeof a === \"string\" && !a.startsWith(\"-\")) as string | undefined;\n\t\tif (first) {\n\t\t\treturn `${base} ${first}`.trim();\n\t\t}\n\t}\n\treturn base;\n}\n\nfunction isMcpInventoryNetworkMode(value: unknown): value is McpInventoryNetworkMode {\n\treturn value === \"none\" || value === \"loopback\" || value === \"domain-allowlist\" || value === \"all-explicit\";\n}\n\nfunction stringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) return [];\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nfunction mcpNetworkDecision(\n\tallowed: boolean,\n\tmode: McpInventoryNetworkMode,\n\trule: string,\n\treason: string,\n\tmetadata: Pick<McpInventoryNetworkDecision, \"allowedDomains\" | \"deniedDomains\" | \"allowUnixSockets\"> = {\n\t\tallowedDomains: [],\n\t\tdeniedDomains: [],\n\t\tallowUnixSockets: [],\n\t},\n): McpInventoryNetworkDecision {\n\treturn { allowed, mode, rule, reason, ...metadata };\n}\n\nfunction decideMcpInventoryNetwork(rawNetwork: unknown): McpInventoryNetworkDecision {\n\tif (!rawNetwork || typeof rawNetwork !== \"object\" || Array.isArray(rawNetwork)) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\t\"none\",\n\t\t\t\"mcp.network.unspecified\",\n\t\t\t\"MCP server network access is denied until an explicit network policy is present.\",\n\t\t);\n\t}\n\n\tconst network = rawNetwork as Record<string, unknown>;\n\tconst mode = network.mode;\n\tconst allowedDomains = stringList(network.allowedDomains);\n\tconst deniedDomains = stringList(network.deniedDomains);\n\tconst allowUnixSockets = stringList(network.allowUnixSockets);\n\tconst metadata = { allowedDomains, deniedDomains, allowUnixSockets };\n\n\tif (!isMcpInventoryNetworkMode(mode)) {\n\t\treturn mcpNetworkDecision(false, \"none\", \"mcp.network.invalid_mode\", \"MCP network mode is invalid.\", metadata);\n\t}\n\tif (mode === \"none\") {\n\t\treturn mcpNetworkDecision(false, mode, \"mcp.network.none\", \"MCP server network access is disabled.\", metadata);\n\t}\n\tif (mode === \"domain-allowlist\" && allowedDomains.length === 0) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\tmode,\n\t\t\t\"mcp.network.empty_allowlist\",\n\t\t\t\"MCP domain allowlist mode requires at least one allowed domain.\",\n\t\t\tmetadata,\n\t\t);\n\t}\n\treturn mcpNetworkDecision(\n\t\ttrue,\n\t\tmode,\n\t\t`mcp.network.${mode}`,\n\t\t\"MCP server network access is explicitly configured.\",\n\t\tmetadata,\n\t);\n}\n\nfunction toEntry(name: string, server: RawServer, source: string): McpServerEntry {\n\tconst envKeys =\n\t\tserver.env && typeof server.env === \"object\" && !Array.isArray(server.env)\n\t\t\t? Object.keys(server.env as Record<string, unknown>)\n\t\t\t: [];\n\tconst argsCount = Array.isArray(server.args) ? server.args.length : 0;\n\tconst autoApproveCount = Array.isArray(server.autoApprove) ? server.autoApprove.length : 0;\n\tconst startupTimeoutSec = typeof server.startup_timeout_sec === \"number\" ? server.startup_timeout_sec : undefined;\n\treturn {\n\t\tname,\n\t\tsource,\n\t\tcommandSummary: summarizeCommand(server),\n\t\tenvKeys,\n\t\targsCount,\n\t\tautoApproveCount,\n\t\tnetworkDecision: decideMcpInventoryNetwork(server.network),\n\t\tstartupTimeoutSec,\n\t};\n}\n\nfunction extractServers(raw: unknown): Record<string, RawServer> {\n\tif (!raw || typeof raw !== \"object\") return {};\n\tconst root = raw as Record<string, unknown>;\n\tconst candidate = root.mcpServers ?? root.servers ?? root.mcp_servers;\n\tif (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) return {};\n\treturn candidate as Record<string, RawServer>;\n}\n\n/**\n * Build the MCP inventory by merging all configured sources.\n * The returned object is safe to render in the UI — env values are never included.\n */\nexport function loadMcpInventory(cwd: string = process.cwd(), home: string = os.homedir()): McpInventory {\n\tconst candidatePaths = [\n\t\tpath.join(home, \".kimi\", \"mcp.json\"),\n\t\tpath.join(home, \".omk\", \"mcp.json\"),\n\t\tpath.join(cwd, \".omk\", \"mcp.json\"),\n\t];\n\n\tconst sources: McpInventory[\"sources\"] = [];\n\tconst errors: McpInventory[\"errors\"] = [];\n\tconst merged = new Map<string, McpServerEntry>();\n\n\tfor (const filePath of candidatePaths) {\n\t\tconst exists = fs.existsSync(filePath);\n\t\tconst { value, error } = readJsonSafe(filePath);\n\t\tif (error) {\n\t\t\terrors.push({ path: filePath, message: error });\n\t\t}\n\t\tconst servers = extractServers(value);\n\t\tconst names = Object.keys(servers).sort();\n\t\tsources.push({ path: filePath, exists, serverCount: names.length });\n\n\t\tfor (const name of names) {\n\t\t\tconst server = servers[name];\n\t\t\tif (!server || typeof server !== \"object\") continue;\n\t\t\tconst entry = toEntry(name, server as RawServer, filePath);\n\t\t\tconst previous = merged.get(name);\n\t\t\tif (previous) {\n\t\t\t\tprevious.overriddenBy = filePath;\n\t\t\t}\n\t\t\tmerged.set(name, entry);\n\t\t}\n\t}\n\n\tconst entries = Array.from(merged.values()).sort((a, b) => a.name.localeCompare(b.name));\n\tconst presets = listBuiltinMcpPresets()\n\t\t.map((preset): McpBuiltinPresetEntry => {\n\t\t\tconst configuredEntry = merged.get(preset.name);\n\t\t\treturn {\n\t\t\t\t...summarizeBuiltinMcpPreset(preset),\n\t\t\t\tnetworkDecision: configuredEntry?.networkDecision ?? decideMcpInventoryNetwork(undefined),\n\t\t\t\tconfigured: configuredEntry !== undefined,\n\t\t\t\t...(configuredEntry ? { configuredBy: configuredEntry.source } : {}),\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\treturn { entries, presets, sources, errors };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mcp-inventory.d.ts","sourceRoot":"","sources":["../../src/core/mcp-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAKN,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAExB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAEhG,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,2BAA2B,CAAC;IAC7C,kBAAkB,EAAE,qBAAqB,CAAC;IAC1C,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,YAAY,EAAE,eAAe,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,2BAA2B,CAAC;IAC7C,kBAAkB,EAAE,qBAAqB,CAAC;IAC1C,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C;AA6ID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,MAAqB,GAAG,YAAY,CA8CvG","sourcesContent":["/**\n * Read-only MCP inventory reader.\n *\n * Aggregates MCP server configuration from up to three on-disk sources without\n * starting, stopping, or modifying any server. Secret values from `env` are\n * never exposed — only the key names are returned to callers.\n *\n * Source precedence (later wins on name collision):\n * 1. ~/.kimi/mcp.json (global, legacy/kimi)\n * 2. ~/.omk/mcp.json (global, omk)\n * 3. <cwd>/.omk/mcp.json (project, highest priority)\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport {\n\tdecideMcpAuth,\n\tdecideMcpCapabilities,\n\tdecideMcpSampling,\n\tlistBuiltinMcpPresets,\n\ttype McpAuthDecision,\n\ttype McpCapabilityDecision,\n\ttype McpSamplingDecision,\n\tsummarizeBuiltinMcpPreset,\n} from \"./mcp-presets.ts\";\n\nexport type McpInventoryNetworkMode = \"none\" | \"loopback\" | \"domain-allowlist\" | \"all-explicit\";\n\nexport interface McpInventoryNetworkDecision {\n\tallowed: boolean;\n\tmode: McpInventoryNetworkMode;\n\trule: string;\n\treason: string;\n\tallowedDomains: string[];\n\tdeniedDomains: string[];\n\tallowUnixSockets: string[];\n}\n\nexport interface McpServerEntry {\n\tname: string;\n\tsource: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\targsCount: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tcapabilityDecision: McpCapabilityDecision;\n\tsamplingDecision: McpSamplingDecision;\n\tauthDecision: McpAuthDecision;\n\tstartupTimeoutSec?: number;\n\toverriddenBy?: string;\n}\n\nexport interface McpBuiltinPresetEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\thomepage: string;\n\trepository: string;\n\tlicense: string;\n\texactPackageSpec: string;\n\tgitTag: string;\n\tgitCommit: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\trequiredEnvKeys: string[];\n\toptionalEnvKeys: string[];\n\tstartupTimeoutSec: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tcapabilityDecision: McpCapabilityDecision;\n\tsamplingDecision: McpSamplingDecision;\n\tauthDecision: McpAuthDecision;\n\tinstallHint: string;\n\tnotes: string[];\n\tconfigured: boolean;\n\tconfiguredBy?: string;\n}\n\nexport interface McpInventory {\n\tentries: McpServerEntry[];\n\tpresets: McpBuiltinPresetEntry[];\n\tsources: { path: string; exists: boolean; serverCount: number }[];\n\terrors: { path: string; message: string }[];\n}\n\ninterface RawServer {\n\tcommand?: unknown;\n\targs?: unknown;\n\tenv?: unknown;\n\tautoApprove?: unknown;\n\tstartup_timeout_sec?: unknown;\n\tnetwork?: unknown;\n\tcapabilities?: unknown;\n\tsampling?: unknown;\n\tsamplingPolicy?: unknown;\n\tauth?: unknown;\n\tauthPolicy?: unknown;\n}\n\nfunction readJsonSafe(filePath: string): { value: unknown; error?: string } {\n\ttry {\n\t\tconst raw = fs.readFileSync(filePath, \"utf8\");\n\t\treturn { value: JSON.parse(raw) };\n\t} catch (err) {\n\t\tif ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n\t\t\treturn { value: null };\n\t\t}\n\t\treturn { value: null, error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nfunction summarizeCommand(server: RawServer): string {\n\tif (typeof server.command !== \"string\" || !server.command) {\n\t\treturn \"<unknown>\";\n\t}\n\tconst base = path.basename(server.command);\n\tif (Array.isArray(server.args) && server.args.length > 0) {\n\t\tconst first = server.args.find((a) => typeof a === \"string\" && !a.startsWith(\"-\")) as string | undefined;\n\t\tif (first) {\n\t\t\treturn `${base} ${first}`.trim();\n\t\t}\n\t}\n\treturn base;\n}\n\nfunction isMcpInventoryNetworkMode(value: unknown): value is McpInventoryNetworkMode {\n\treturn value === \"none\" || value === \"loopback\" || value === \"domain-allowlist\" || value === \"all-explicit\";\n}\n\nfunction stringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) return [];\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nfunction mcpNetworkDecision(\n\tallowed: boolean,\n\tmode: McpInventoryNetworkMode,\n\trule: string,\n\treason: string,\n\tmetadata: Pick<McpInventoryNetworkDecision, \"allowedDomains\" | \"deniedDomains\" | \"allowUnixSockets\"> = {\n\t\tallowedDomains: [],\n\t\tdeniedDomains: [],\n\t\tallowUnixSockets: [],\n\t},\n): McpInventoryNetworkDecision {\n\treturn { allowed, mode, rule, reason, ...metadata };\n}\n\nfunction decideMcpInventoryNetwork(rawNetwork: unknown): McpInventoryNetworkDecision {\n\tif (!rawNetwork || typeof rawNetwork !== \"object\" || Array.isArray(rawNetwork)) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\t\"none\",\n\t\t\t\"mcp.network.unspecified\",\n\t\t\t\"MCP server network access is denied until an explicit network policy is present.\",\n\t\t);\n\t}\n\n\tconst network = rawNetwork as Record<string, unknown>;\n\tconst mode = network.mode;\n\tconst allowedDomains = stringList(network.allowedDomains);\n\tconst deniedDomains = stringList(network.deniedDomains);\n\tconst allowUnixSockets = stringList(network.allowUnixSockets);\n\tconst metadata = { allowedDomains, deniedDomains, allowUnixSockets };\n\n\tif (!isMcpInventoryNetworkMode(mode)) {\n\t\treturn mcpNetworkDecision(false, \"none\", \"mcp.network.invalid_mode\", \"MCP network mode is invalid.\", metadata);\n\t}\n\tif (mode === \"none\") {\n\t\treturn mcpNetworkDecision(false, mode, \"mcp.network.none\", \"MCP server network access is disabled.\", metadata);\n\t}\n\tif (mode === \"domain-allowlist\" && allowedDomains.length === 0) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\tmode,\n\t\t\t\"mcp.network.empty_allowlist\",\n\t\t\t\"MCP domain allowlist mode requires at least one allowed domain.\",\n\t\t\tmetadata,\n\t\t);\n\t}\n\treturn mcpNetworkDecision(\n\t\ttrue,\n\t\tmode,\n\t\t`mcp.network.${mode}`,\n\t\t\"MCP server network access is explicitly configured.\",\n\t\tmetadata,\n\t);\n}\n\nfunction toEntry(name: string, server: RawServer, source: string): McpServerEntry {\n\tconst envKeys =\n\t\tserver.env && typeof server.env === \"object\" && !Array.isArray(server.env)\n\t\t\t? Object.keys(server.env as Record<string, unknown>)\n\t\t\t: [];\n\tconst argsCount = Array.isArray(server.args) ? server.args.length : 0;\n\tconst autoApproveCount = Array.isArray(server.autoApprove) ? server.autoApprove.length : 0;\n\tconst startupTimeoutSec = typeof server.startup_timeout_sec === \"number\" ? server.startup_timeout_sec : undefined;\n\tconst capabilityDecision = decideMcpCapabilities(server.capabilities);\n\treturn {\n\t\tname,\n\t\tsource,\n\t\tcommandSummary: summarizeCommand(server),\n\t\tenvKeys,\n\t\targsCount,\n\t\tautoApproveCount,\n\t\tnetworkDecision: decideMcpInventoryNetwork(server.network),\n\t\tcapabilityDecision,\n\t\tsamplingDecision: decideMcpSampling(capabilityDecision, server.samplingPolicy ?? server.sampling),\n\t\tauthDecision: decideMcpAuth(server.authPolicy ?? server.auth, envKeys),\n\t\tstartupTimeoutSec,\n\t};\n}\n\nfunction extractServers(raw: unknown): Record<string, RawServer> {\n\tif (!raw || typeof raw !== \"object\") return {};\n\tconst root = raw as Record<string, unknown>;\n\tconst candidate = root.mcpServers ?? root.servers ?? root.mcp_servers;\n\tif (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) return {};\n\treturn candidate as Record<string, RawServer>;\n}\n\n/**\n * Build the MCP inventory by merging all configured sources.\n * The returned object is safe to render in the UI — env values are never included.\n */\nexport function loadMcpInventory(cwd: string = process.cwd(), home: string = os.homedir()): McpInventory {\n\tconst candidatePaths = [\n\t\tpath.join(home, \".kimi\", \"mcp.json\"),\n\t\tpath.join(home, \".omk\", \"mcp.json\"),\n\t\tpath.join(cwd, \".omk\", \"mcp.json\"),\n\t];\n\n\tconst sources: McpInventory[\"sources\"] = [];\n\tconst errors: McpInventory[\"errors\"] = [];\n\tconst merged = new Map<string, McpServerEntry>();\n\n\tfor (const filePath of candidatePaths) {\n\t\tconst exists = fs.existsSync(filePath);\n\t\tconst { value, error } = readJsonSafe(filePath);\n\t\tif (error) {\n\t\t\terrors.push({ path: filePath, message: error });\n\t\t}\n\t\tconst servers = extractServers(value);\n\t\tconst names = Object.keys(servers).sort();\n\t\tsources.push({ path: filePath, exists, serverCount: names.length });\n\n\t\tfor (const name of names) {\n\t\t\tconst server = servers[name];\n\t\t\tif (!server || typeof server !== \"object\") continue;\n\t\t\tconst entry = toEntry(name, server as RawServer, filePath);\n\t\t\tconst previous = merged.get(name);\n\t\t\tif (previous) {\n\t\t\t\tprevious.overriddenBy = filePath;\n\t\t\t}\n\t\t\tmerged.set(name, entry);\n\t\t}\n\t}\n\n\tconst entries = Array.from(merged.values()).sort((a, b) => a.name.localeCompare(b.name));\n\tconst presets = listBuiltinMcpPresets()\n\t\t.map((preset): McpBuiltinPresetEntry => {\n\t\t\tconst configuredEntry = merged.get(preset.name);\n\t\t\treturn {\n\t\t\t\t...summarizeBuiltinMcpPreset(preset),\n\t\t\t\tnetworkDecision: configuredEntry?.networkDecision ?? decideMcpInventoryNetwork(undefined),\n\t\t\t\tconfigured: configuredEntry !== undefined,\n\t\t\t\t...(configuredEntry ? { configuredBy: configuredEntry.source } : {}),\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\treturn { entries, presets, sources, errors };\n}\n"]}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import fs from "node:fs";
|
|
14
14
|
import os from "node:os";
|
|
15
15
|
import path from "node:path";
|
|
16
|
-
import { listBuiltinMcpPresets, summarizeBuiltinMcpPreset } from "./mcp-presets.js";
|
|
16
|
+
import { decideMcpAuth, decideMcpCapabilities, decideMcpSampling, listBuiltinMcpPresets, summarizeBuiltinMcpPreset, } from "./mcp-presets.js";
|
|
17
17
|
function readJsonSafe(filePath) {
|
|
18
18
|
try {
|
|
19
19
|
const raw = fs.readFileSync(filePath, "utf8");
|
|
@@ -85,6 +85,7 @@ function toEntry(name, server, source) {
|
|
|
85
85
|
const argsCount = Array.isArray(server.args) ? server.args.length : 0;
|
|
86
86
|
const autoApproveCount = Array.isArray(server.autoApprove) ? server.autoApprove.length : 0;
|
|
87
87
|
const startupTimeoutSec = typeof server.startup_timeout_sec === "number" ? server.startup_timeout_sec : undefined;
|
|
88
|
+
const capabilityDecision = decideMcpCapabilities(server.capabilities);
|
|
88
89
|
return {
|
|
89
90
|
name,
|
|
90
91
|
source,
|
|
@@ -93,6 +94,9 @@ function toEntry(name, server, source) {
|
|
|
93
94
|
argsCount,
|
|
94
95
|
autoApproveCount,
|
|
95
96
|
networkDecision: decideMcpInventoryNetwork(server.network),
|
|
97
|
+
capabilityDecision,
|
|
98
|
+
samplingDecision: decideMcpSampling(capabilityDecision, server.samplingPolicy ?? server.sampling),
|
|
99
|
+
authDecision: decideMcpAuth(server.authPolicy ?? server.auth, envKeys),
|
|
96
100
|
startupTimeoutSec,
|
|
97
101
|
};
|
|
98
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-inventory.js","sourceRoot":"","sources":["../../src/core/mcp-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAiEpF,SAAS,YAAY,CAAC,QAAgB,EAAsC;IAC3E,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;AAAA,CACD;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAU;IACpD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,OAAO,WAAW,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAuB,CAAC;QACzG,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,yBAAyB,CAAC,KAAc,EAAoC;IACpF,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,cAAc,CAAC;AAAA,CAC5G;AAED,SAAS,UAAU,CAAC,KAAc,EAAY;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK;SACV,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;SAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,CACtC;AAED,SAAS,kBAAkB,CAC1B,OAAgB,EAChB,IAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,QAAQ,GAA+F;IACtG,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,EAAE;CACpB,EAC6B;IAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AAAA,CACpD;AAED,SAAS,yBAAyB,CAAC,UAAmB,EAA+B;IACpF,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,OAAO,kBAAkB,CACxB,KAAK,EACL,MAAM,EACN,yBAAyB,EACzB,kFAAkF,CAClF,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAqC,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAErE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,QAAQ,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,wCAAwC,EAAE,QAAQ,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,IAAI,KAAK,kBAAkB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,kBAAkB,CACxB,KAAK,EACL,IAAI,EACJ,6BAA6B,EAC7B,iEAAiE,EACjE,QAAQ,CACR,CAAC;IACH,CAAC;IACD,OAAO,kBAAkB,CACxB,IAAI,EACJ,IAAI,EACJ,eAAe,IAAI,EAAE,EACrB,qDAAqD,EACrD,QAAQ,CACR,CAAC;AAAA,CACF;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,MAAiB,EAAE,MAAc,EAAkB;IACjF,MAAM,OAAO,GACZ,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACzE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAA8B,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAAG,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,OAAO;QACN,IAAI;QACJ,MAAM;QACN,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACxC,OAAO;QACP,SAAS;QACT,gBAAgB;QAChB,eAAe,EAAE,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1D,iBAAiB;KACjB,CAAC;AAAA,CACF;AAED,SAAS,cAAc,CAAC,GAAY,EAA6B;IAChE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAA8B,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC;IACtE,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACvF,OAAO,SAAsC,CAAC;AAAA,CAC9C;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,GAAW,EAAE,CAAC,OAAO,EAAE,EAAgB;IACxG,MAAM,cAAc,GAAG;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;KAClC,CAAC;IAEF,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEjD,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,MAAmB,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC;YAClC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,qBAAqB,EAAE;SACrC,GAAG,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;YACN,GAAG,yBAAyB,CAAC,MAAM,CAAC;YACpC,eAAe,EAAE,eAAe,EAAE,eAAe,IAAI,yBAAyB,CAAC,SAAS,CAAC;YACzF,UAAU,EAAE,eAAe,KAAK,SAAS;YACzC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IAAA,CACF,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAAA,CAC7C","sourcesContent":["/**\n * Read-only MCP inventory reader.\n *\n * Aggregates MCP server configuration from up to three on-disk sources without\n * starting, stopping, or modifying any server. Secret values from `env` are\n * never exposed — only the key names are returned to callers.\n *\n * Source precedence (later wins on name collision):\n * 1. ~/.kimi/mcp.json (global, legacy/kimi)\n * 2. ~/.omk/mcp.json (global, omk)\n * 3. <cwd>/.omk/mcp.json (project, highest priority)\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { listBuiltinMcpPresets, summarizeBuiltinMcpPreset } from \"./mcp-presets.ts\";\n\nexport type McpInventoryNetworkMode = \"none\" | \"loopback\" | \"domain-allowlist\" | \"all-explicit\";\n\nexport interface McpInventoryNetworkDecision {\n\tallowed: boolean;\n\tmode: McpInventoryNetworkMode;\n\trule: string;\n\treason: string;\n\tallowedDomains: string[];\n\tdeniedDomains: string[];\n\tallowUnixSockets: string[];\n}\n\nexport interface McpServerEntry {\n\tname: string;\n\tsource: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\targsCount: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tstartupTimeoutSec?: number;\n\toverriddenBy?: string;\n}\n\nexport interface McpBuiltinPresetEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\thomepage: string;\n\trepository: string;\n\tlicense: string;\n\texactPackageSpec: string;\n\tgitTag: string;\n\tgitCommit: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\trequiredEnvKeys: string[];\n\toptionalEnvKeys: string[];\n\tstartupTimeoutSec: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tinstallHint: string;\n\tnotes: string[];\n\tconfigured: boolean;\n\tconfiguredBy?: string;\n}\n\nexport interface McpInventory {\n\tentries: McpServerEntry[];\n\tpresets: McpBuiltinPresetEntry[];\n\tsources: { path: string; exists: boolean; serverCount: number }[];\n\terrors: { path: string; message: string }[];\n}\n\ninterface RawServer {\n\tcommand?: unknown;\n\targs?: unknown;\n\tenv?: unknown;\n\tautoApprove?: unknown;\n\tstartup_timeout_sec?: unknown;\n\tnetwork?: unknown;\n}\n\nfunction readJsonSafe(filePath: string): { value: unknown; error?: string } {\n\ttry {\n\t\tconst raw = fs.readFileSync(filePath, \"utf8\");\n\t\treturn { value: JSON.parse(raw) };\n\t} catch (err) {\n\t\tif ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n\t\t\treturn { value: null };\n\t\t}\n\t\treturn { value: null, error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nfunction summarizeCommand(server: RawServer): string {\n\tif (typeof server.command !== \"string\" || !server.command) {\n\t\treturn \"<unknown>\";\n\t}\n\tconst base = path.basename(server.command);\n\tif (Array.isArray(server.args) && server.args.length > 0) {\n\t\tconst first = server.args.find((a) => typeof a === \"string\" && !a.startsWith(\"-\")) as string | undefined;\n\t\tif (first) {\n\t\t\treturn `${base} ${first}`.trim();\n\t\t}\n\t}\n\treturn base;\n}\n\nfunction isMcpInventoryNetworkMode(value: unknown): value is McpInventoryNetworkMode {\n\treturn value === \"none\" || value === \"loopback\" || value === \"domain-allowlist\" || value === \"all-explicit\";\n}\n\nfunction stringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) return [];\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nfunction mcpNetworkDecision(\n\tallowed: boolean,\n\tmode: McpInventoryNetworkMode,\n\trule: string,\n\treason: string,\n\tmetadata: Pick<McpInventoryNetworkDecision, \"allowedDomains\" | \"deniedDomains\" | \"allowUnixSockets\"> = {\n\t\tallowedDomains: [],\n\t\tdeniedDomains: [],\n\t\tallowUnixSockets: [],\n\t},\n): McpInventoryNetworkDecision {\n\treturn { allowed, mode, rule, reason, ...metadata };\n}\n\nfunction decideMcpInventoryNetwork(rawNetwork: unknown): McpInventoryNetworkDecision {\n\tif (!rawNetwork || typeof rawNetwork !== \"object\" || Array.isArray(rawNetwork)) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\t\"none\",\n\t\t\t\"mcp.network.unspecified\",\n\t\t\t\"MCP server network access is denied until an explicit network policy is present.\",\n\t\t);\n\t}\n\n\tconst network = rawNetwork as Record<string, unknown>;\n\tconst mode = network.mode;\n\tconst allowedDomains = stringList(network.allowedDomains);\n\tconst deniedDomains = stringList(network.deniedDomains);\n\tconst allowUnixSockets = stringList(network.allowUnixSockets);\n\tconst metadata = { allowedDomains, deniedDomains, allowUnixSockets };\n\n\tif (!isMcpInventoryNetworkMode(mode)) {\n\t\treturn mcpNetworkDecision(false, \"none\", \"mcp.network.invalid_mode\", \"MCP network mode is invalid.\", metadata);\n\t}\n\tif (mode === \"none\") {\n\t\treturn mcpNetworkDecision(false, mode, \"mcp.network.none\", \"MCP server network access is disabled.\", metadata);\n\t}\n\tif (mode === \"domain-allowlist\" && allowedDomains.length === 0) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\tmode,\n\t\t\t\"mcp.network.empty_allowlist\",\n\t\t\t\"MCP domain allowlist mode requires at least one allowed domain.\",\n\t\t\tmetadata,\n\t\t);\n\t}\n\treturn mcpNetworkDecision(\n\t\ttrue,\n\t\tmode,\n\t\t`mcp.network.${mode}`,\n\t\t\"MCP server network access is explicitly configured.\",\n\t\tmetadata,\n\t);\n}\n\nfunction toEntry(name: string, server: RawServer, source: string): McpServerEntry {\n\tconst envKeys =\n\t\tserver.env && typeof server.env === \"object\" && !Array.isArray(server.env)\n\t\t\t? Object.keys(server.env as Record<string, unknown>)\n\t\t\t: [];\n\tconst argsCount = Array.isArray(server.args) ? server.args.length : 0;\n\tconst autoApproveCount = Array.isArray(server.autoApprove) ? server.autoApprove.length : 0;\n\tconst startupTimeoutSec = typeof server.startup_timeout_sec === \"number\" ? server.startup_timeout_sec : undefined;\n\treturn {\n\t\tname,\n\t\tsource,\n\t\tcommandSummary: summarizeCommand(server),\n\t\tenvKeys,\n\t\targsCount,\n\t\tautoApproveCount,\n\t\tnetworkDecision: decideMcpInventoryNetwork(server.network),\n\t\tstartupTimeoutSec,\n\t};\n}\n\nfunction extractServers(raw: unknown): Record<string, RawServer> {\n\tif (!raw || typeof raw !== \"object\") return {};\n\tconst root = raw as Record<string, unknown>;\n\tconst candidate = root.mcpServers ?? root.servers ?? root.mcp_servers;\n\tif (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) return {};\n\treturn candidate as Record<string, RawServer>;\n}\n\n/**\n * Build the MCP inventory by merging all configured sources.\n * The returned object is safe to render in the UI — env values are never included.\n */\nexport function loadMcpInventory(cwd: string = process.cwd(), home: string = os.homedir()): McpInventory {\n\tconst candidatePaths = [\n\t\tpath.join(home, \".kimi\", \"mcp.json\"),\n\t\tpath.join(home, \".omk\", \"mcp.json\"),\n\t\tpath.join(cwd, \".omk\", \"mcp.json\"),\n\t];\n\n\tconst sources: McpInventory[\"sources\"] = [];\n\tconst errors: McpInventory[\"errors\"] = [];\n\tconst merged = new Map<string, McpServerEntry>();\n\n\tfor (const filePath of candidatePaths) {\n\t\tconst exists = fs.existsSync(filePath);\n\t\tconst { value, error } = readJsonSafe(filePath);\n\t\tif (error) {\n\t\t\terrors.push({ path: filePath, message: error });\n\t\t}\n\t\tconst servers = extractServers(value);\n\t\tconst names = Object.keys(servers).sort();\n\t\tsources.push({ path: filePath, exists, serverCount: names.length });\n\n\t\tfor (const name of names) {\n\t\t\tconst server = servers[name];\n\t\t\tif (!server || typeof server !== \"object\") continue;\n\t\t\tconst entry = toEntry(name, server as RawServer, filePath);\n\t\t\tconst previous = merged.get(name);\n\t\t\tif (previous) {\n\t\t\t\tprevious.overriddenBy = filePath;\n\t\t\t}\n\t\t\tmerged.set(name, entry);\n\t\t}\n\t}\n\n\tconst entries = Array.from(merged.values()).sort((a, b) => a.name.localeCompare(b.name));\n\tconst presets = listBuiltinMcpPresets()\n\t\t.map((preset): McpBuiltinPresetEntry => {\n\t\t\tconst configuredEntry = merged.get(preset.name);\n\t\t\treturn {\n\t\t\t\t...summarizeBuiltinMcpPreset(preset),\n\t\t\t\tnetworkDecision: configuredEntry?.networkDecision ?? decideMcpInventoryNetwork(undefined),\n\t\t\t\tconfigured: configuredEntry !== undefined,\n\t\t\t\t...(configuredEntry ? { configuredBy: configuredEntry.source } : {}),\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\treturn { entries, presets, sources, errors };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mcp-inventory.js","sourceRoot":"","sources":["../../src/core/mcp-inventory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Read-only MCP inventory reader.\n *\n * Aggregates MCP server configuration from up to three on-disk sources without\n * starting, stopping, or modifying any server. Secret values from `env` are\n * never exposed — only the key names are returned to callers.\n *\n * Source precedence (later wins on name collision):\n * 1. ~/.kimi/mcp.json (global, legacy/kimi)\n * 2. ~/.omk/mcp.json (global, omk)\n * 3. <cwd>/.omk/mcp.json (project, highest priority)\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport {\n\tdecideMcpAuth,\n\tdecideMcpCapabilities,\n\tdecideMcpSampling,\n\tlistBuiltinMcpPresets,\n\ttype McpAuthDecision,\n\ttype McpCapabilityDecision,\n\ttype McpSamplingDecision,\n\tsummarizeBuiltinMcpPreset,\n} from \"./mcp-presets.ts\";\n\nexport type McpInventoryNetworkMode = \"none\" | \"loopback\" | \"domain-allowlist\" | \"all-explicit\";\n\nexport interface McpInventoryNetworkDecision {\n\tallowed: boolean;\n\tmode: McpInventoryNetworkMode;\n\trule: string;\n\treason: string;\n\tallowedDomains: string[];\n\tdeniedDomains: string[];\n\tallowUnixSockets: string[];\n}\n\nexport interface McpServerEntry {\n\tname: string;\n\tsource: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\targsCount: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tcapabilityDecision: McpCapabilityDecision;\n\tsamplingDecision: McpSamplingDecision;\n\tauthDecision: McpAuthDecision;\n\tstartupTimeoutSec?: number;\n\toverriddenBy?: string;\n}\n\nexport interface McpBuiltinPresetEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\thomepage: string;\n\trepository: string;\n\tlicense: string;\n\texactPackageSpec: string;\n\tgitTag: string;\n\tgitCommit: string;\n\tcommandSummary: string;\n\tenvKeys: string[];\n\trequiredEnvKeys: string[];\n\toptionalEnvKeys: string[];\n\tstartupTimeoutSec: number;\n\tautoApproveCount: number;\n\tnetworkDecision: McpInventoryNetworkDecision;\n\tcapabilityDecision: McpCapabilityDecision;\n\tsamplingDecision: McpSamplingDecision;\n\tauthDecision: McpAuthDecision;\n\tinstallHint: string;\n\tnotes: string[];\n\tconfigured: boolean;\n\tconfiguredBy?: string;\n}\n\nexport interface McpInventory {\n\tentries: McpServerEntry[];\n\tpresets: McpBuiltinPresetEntry[];\n\tsources: { path: string; exists: boolean; serverCount: number }[];\n\terrors: { path: string; message: string }[];\n}\n\ninterface RawServer {\n\tcommand?: unknown;\n\targs?: unknown;\n\tenv?: unknown;\n\tautoApprove?: unknown;\n\tstartup_timeout_sec?: unknown;\n\tnetwork?: unknown;\n\tcapabilities?: unknown;\n\tsampling?: unknown;\n\tsamplingPolicy?: unknown;\n\tauth?: unknown;\n\tauthPolicy?: unknown;\n}\n\nfunction readJsonSafe(filePath: string): { value: unknown; error?: string } {\n\ttry {\n\t\tconst raw = fs.readFileSync(filePath, \"utf8\");\n\t\treturn { value: JSON.parse(raw) };\n\t} catch (err) {\n\t\tif ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n\t\t\treturn { value: null };\n\t\t}\n\t\treturn { value: null, error: err instanceof Error ? err.message : String(err) };\n\t}\n}\n\nfunction summarizeCommand(server: RawServer): string {\n\tif (typeof server.command !== \"string\" || !server.command) {\n\t\treturn \"<unknown>\";\n\t}\n\tconst base = path.basename(server.command);\n\tif (Array.isArray(server.args) && server.args.length > 0) {\n\t\tconst first = server.args.find((a) => typeof a === \"string\" && !a.startsWith(\"-\")) as string | undefined;\n\t\tif (first) {\n\t\t\treturn `${base} ${first}`.trim();\n\t\t}\n\t}\n\treturn base;\n}\n\nfunction isMcpInventoryNetworkMode(value: unknown): value is McpInventoryNetworkMode {\n\treturn value === \"none\" || value === \"loopback\" || value === \"domain-allowlist\" || value === \"all-explicit\";\n}\n\nfunction stringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) return [];\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nfunction mcpNetworkDecision(\n\tallowed: boolean,\n\tmode: McpInventoryNetworkMode,\n\trule: string,\n\treason: string,\n\tmetadata: Pick<McpInventoryNetworkDecision, \"allowedDomains\" | \"deniedDomains\" | \"allowUnixSockets\"> = {\n\t\tallowedDomains: [],\n\t\tdeniedDomains: [],\n\t\tallowUnixSockets: [],\n\t},\n): McpInventoryNetworkDecision {\n\treturn { allowed, mode, rule, reason, ...metadata };\n}\n\nfunction decideMcpInventoryNetwork(rawNetwork: unknown): McpInventoryNetworkDecision {\n\tif (!rawNetwork || typeof rawNetwork !== \"object\" || Array.isArray(rawNetwork)) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\t\"none\",\n\t\t\t\"mcp.network.unspecified\",\n\t\t\t\"MCP server network access is denied until an explicit network policy is present.\",\n\t\t);\n\t}\n\n\tconst network = rawNetwork as Record<string, unknown>;\n\tconst mode = network.mode;\n\tconst allowedDomains = stringList(network.allowedDomains);\n\tconst deniedDomains = stringList(network.deniedDomains);\n\tconst allowUnixSockets = stringList(network.allowUnixSockets);\n\tconst metadata = { allowedDomains, deniedDomains, allowUnixSockets };\n\n\tif (!isMcpInventoryNetworkMode(mode)) {\n\t\treturn mcpNetworkDecision(false, \"none\", \"mcp.network.invalid_mode\", \"MCP network mode is invalid.\", metadata);\n\t}\n\tif (mode === \"none\") {\n\t\treturn mcpNetworkDecision(false, mode, \"mcp.network.none\", \"MCP server network access is disabled.\", metadata);\n\t}\n\tif (mode === \"domain-allowlist\" && allowedDomains.length === 0) {\n\t\treturn mcpNetworkDecision(\n\t\t\tfalse,\n\t\t\tmode,\n\t\t\t\"mcp.network.empty_allowlist\",\n\t\t\t\"MCP domain allowlist mode requires at least one allowed domain.\",\n\t\t\tmetadata,\n\t\t);\n\t}\n\treturn mcpNetworkDecision(\n\t\ttrue,\n\t\tmode,\n\t\t`mcp.network.${mode}`,\n\t\t\"MCP server network access is explicitly configured.\",\n\t\tmetadata,\n\t);\n}\n\nfunction toEntry(name: string, server: RawServer, source: string): McpServerEntry {\n\tconst envKeys =\n\t\tserver.env && typeof server.env === \"object\" && !Array.isArray(server.env)\n\t\t\t? Object.keys(server.env as Record<string, unknown>)\n\t\t\t: [];\n\tconst argsCount = Array.isArray(server.args) ? server.args.length : 0;\n\tconst autoApproveCount = Array.isArray(server.autoApprove) ? server.autoApprove.length : 0;\n\tconst startupTimeoutSec = typeof server.startup_timeout_sec === \"number\" ? server.startup_timeout_sec : undefined;\n\tconst capabilityDecision = decideMcpCapabilities(server.capabilities);\n\treturn {\n\t\tname,\n\t\tsource,\n\t\tcommandSummary: summarizeCommand(server),\n\t\tenvKeys,\n\t\targsCount,\n\t\tautoApproveCount,\n\t\tnetworkDecision: decideMcpInventoryNetwork(server.network),\n\t\tcapabilityDecision,\n\t\tsamplingDecision: decideMcpSampling(capabilityDecision, server.samplingPolicy ?? server.sampling),\n\t\tauthDecision: decideMcpAuth(server.authPolicy ?? server.auth, envKeys),\n\t\tstartupTimeoutSec,\n\t};\n}\n\nfunction extractServers(raw: unknown): Record<string, RawServer> {\n\tif (!raw || typeof raw !== \"object\") return {};\n\tconst root = raw as Record<string, unknown>;\n\tconst candidate = root.mcpServers ?? root.servers ?? root.mcp_servers;\n\tif (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) return {};\n\treturn candidate as Record<string, RawServer>;\n}\n\n/**\n * Build the MCP inventory by merging all configured sources.\n * The returned object is safe to render in the UI — env values are never included.\n */\nexport function loadMcpInventory(cwd: string = process.cwd(), home: string = os.homedir()): McpInventory {\n\tconst candidatePaths = [\n\t\tpath.join(home, \".kimi\", \"mcp.json\"),\n\t\tpath.join(home, \".omk\", \"mcp.json\"),\n\t\tpath.join(cwd, \".omk\", \"mcp.json\"),\n\t];\n\n\tconst sources: McpInventory[\"sources\"] = [];\n\tconst errors: McpInventory[\"errors\"] = [];\n\tconst merged = new Map<string, McpServerEntry>();\n\n\tfor (const filePath of candidatePaths) {\n\t\tconst exists = fs.existsSync(filePath);\n\t\tconst { value, error } = readJsonSafe(filePath);\n\t\tif (error) {\n\t\t\terrors.push({ path: filePath, message: error });\n\t\t}\n\t\tconst servers = extractServers(value);\n\t\tconst names = Object.keys(servers).sort();\n\t\tsources.push({ path: filePath, exists, serverCount: names.length });\n\n\t\tfor (const name of names) {\n\t\t\tconst server = servers[name];\n\t\t\tif (!server || typeof server !== \"object\") continue;\n\t\t\tconst entry = toEntry(name, server as RawServer, filePath);\n\t\t\tconst previous = merged.get(name);\n\t\t\tif (previous) {\n\t\t\t\tprevious.overriddenBy = filePath;\n\t\t\t}\n\t\t\tmerged.set(name, entry);\n\t\t}\n\t}\n\n\tconst entries = Array.from(merged.values()).sort((a, b) => a.name.localeCompare(b.name));\n\tconst presets = listBuiltinMcpPresets()\n\t\t.map((preset): McpBuiltinPresetEntry => {\n\t\t\tconst configuredEntry = merged.get(preset.name);\n\t\t\treturn {\n\t\t\t\t...summarizeBuiltinMcpPreset(preset),\n\t\t\t\tnetworkDecision: configuredEntry?.networkDecision ?? decideMcpInventoryNetwork(undefined),\n\t\t\t\tconfigured: configuredEntry !== undefined,\n\t\t\t\t...(configuredEntry ? { configuredBy: configuredEntry.source } : {}),\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\treturn { entries, presets, sources, errors };\n}\n"]}
|