@provos/ironcurtain 0.10.0 → 0.11.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/README.md +60 -8
- package/dist/auth/oauth-provider.js +1 -4
- package/dist/auth/oauth-provider.js.map +1 -1
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.js +162 -7
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +61 -0
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +528 -161
- package/dist/config/generated/test-scenarios.json +4810 -170
- package/dist/config/generated/tool-annotations.json +34 -47
- package/dist/config/index.d.ts +58 -0
- package/dist/config/index.js +97 -15
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +2 -2
- package/dist/config/paths.d.ts +175 -0
- package/dist/config/paths.js +308 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +7 -1
- package/dist/config/user-config.d.ts +53 -5
- package/dist/config/user-config.js +96 -30
- package/dist/config/user-config.js.map +1 -1
- package/dist/config/validate-policy-dir.d.ts +10 -0
- package/dist/config/validate-policy-dir.js +59 -0
- package/dist/config/validate-policy-dir.js.map +1 -0
- package/dist/cron/job-commands.js +22 -2
- package/dist/cron/job-commands.js.map +1 -1
- package/dist/cron/types.d.ts +16 -2
- package/dist/cron/types.js +1 -3
- package/dist/cron/types.js.map +1 -1
- package/dist/daemon/daemon-command.js +16 -2
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +44 -1
- package/dist/daemon/ironcurtain-daemon.js +210 -8
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/docker/adapters/claude-code.js +194 -20
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/goose.d.ts +12 -11
- package/dist/docker/adapters/goose.js +80 -27
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +178 -4
- package/dist/docker/agent-adapter.js +14 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/code-mode-proxy.d.ts +27 -0
- package/dist/docker/code-mode-proxy.js +3 -0
- package/dist/docker/code-mode-proxy.js.map +1 -1
- package/dist/docker/docker-agent-session.d.ts +113 -62
- package/dist/docker/docker-agent-session.js +242 -294
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +246 -21
- package/dist/docker/docker-infrastructure.js +520 -29
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +36 -1
- package/dist/docker/docker-manager.js +135 -30
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-progress-sink.d.ts +43 -0
- package/dist/docker/docker-progress-sink.js +299 -0
- package/dist/docker/docker-progress-sink.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +84 -1
- package/dist/docker/mitm-proxy.js +380 -18
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +46 -3
- package/dist/docker/oauth-credentials.js +56 -14
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.js +2 -2
- package/dist/docker/oauth-token-manager.js.map +1 -1
- package/dist/docker/orientation.d.ts +1 -1
- package/dist/docker/provider-config.d.ts +49 -2
- package/dist/docker/provider-config.js +202 -28
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/proxy-tools.d.ts +0 -2
- package/dist/docker/proxy-tools.js +2 -7
- package/dist/docker/proxy-tools.js.map +1 -1
- package/dist/docker/pty-session.d.ts +49 -1
- package/dist/docker/pty-session.js +199 -69
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +0 -2
- package/dist/docker/pty-types.js +0 -2
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/resource-limits.d.ts +125 -0
- package/dist/docker/resource-limits.js +200 -0
- package/dist/docker/resource-limits.js.map +1 -0
- package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
- package/dist/docker/spawn-with-idle-timeout.js +152 -0
- package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
- package/dist/docker/sse-extractor.d.ts +51 -0
- package/dist/docker/sse-extractor.js +303 -0
- package/dist/docker/sse-extractor.js.map +1 -0
- package/dist/docker/token-stream-bus.d.ts +83 -0
- package/dist/docker/token-stream-bus.js +98 -0
- package/dist/docker/token-stream-bus.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +71 -0
- package/dist/docker/token-stream-types.js +8 -0
- package/dist/docker/token-stream-types.js.map +1 -0
- package/dist/docker/types.d.ts +53 -6
- package/dist/doctor/checks.d.ts +138 -0
- package/dist/doctor/checks.js +511 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/doctor-command.d.ts +29 -0
- package/dist/doctor/doctor-command.js +160 -0
- package/dist/doctor/doctor-command.js.map +1 -0
- package/dist/doctor/mcp-liveness.d.ts +28 -0
- package/dist/doctor/mcp-liveness.js +84 -0
- package/dist/doctor/mcp-liveness.js.map +1 -0
- package/dist/doctor/oauth-checks.d.ts +23 -0
- package/dist/doctor/oauth-checks.js +157 -0
- package/dist/doctor/oauth-checks.js.map +1 -0
- package/dist/doctor/output.d.ts +26 -0
- package/dist/doctor/output.js +82 -0
- package/dist/doctor/output.js.map +1 -0
- package/dist/escalation/listener-command.js +0 -3
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/event-bus/typed-event-bus.d.ts +26 -0
- package/dist/event-bus/typed-event-bus.js +35 -0
- package/dist/event-bus/typed-event-bus.js.map +1 -0
- package/dist/index.js +24 -9
- package/dist/index.js.map +1 -1
- package/dist/logger.js +31 -2
- package/dist/logger.js.map +1 -1
- package/dist/memory/auto-save.d.ts +18 -4
- package/dist/memory/auto-save.js +46 -6
- package/dist/memory/auto-save.js.map +1 -1
- package/dist/memory/memory-policy.d.ts +41 -0
- package/dist/memory/memory-policy.js +36 -0
- package/dist/memory/memory-policy.js.map +1 -0
- package/dist/mux/mux-command.d.ts +10 -1
- package/dist/mux/mux-command.js +56 -35
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-renderer.js +2 -12
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/session-scanner.js +1 -2
- package/dist/mux/session-scanner.js.map +1 -1
- package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
- package/dist/{pipeline → observability}/llm-logger.js +8 -3
- package/dist/observability/llm-logger.js.map +1 -0
- package/dist/observe/observe-command.d.ts +12 -0
- package/dist/observe/observe-command.js +298 -0
- package/dist/observe/observe-command.js.map +1 -0
- package/dist/observe/observe-renderer.d.ts +24 -0
- package/dist/observe/observe-renderer.js +87 -0
- package/dist/observe/observe-renderer.js.map +1 -0
- package/dist/observe/observe-tui-rain.d.ts +42 -0
- package/dist/observe/observe-tui-rain.js +531 -0
- package/dist/observe/observe-tui-rain.js.map +1 -0
- package/dist/observe/observe-tui-text-panel.d.ts +46 -0
- package/dist/observe/observe-tui-text-panel.js +525 -0
- package/dist/observe/observe-tui-text-panel.js.map +1 -0
- package/dist/observe/observe-tui-types.d.ts +270 -0
- package/dist/observe/observe-tui-types.js +200 -0
- package/dist/observe/observe-tui-types.js.map +1 -0
- package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
- package/dist/observe/observe-tui-word-scorer.js +572 -0
- package/dist/observe/observe-tui-word-scorer.js.map +1 -0
- package/dist/observe/observe-tui.d.ts +59 -0
- package/dist/observe/observe-tui.js +592 -0
- package/dist/observe/observe-tui.js.map +1 -0
- package/dist/persona/memory-gate.d.ts +19 -0
- package/dist/persona/memory-gate.js +33 -0
- package/dist/persona/memory-gate.js.map +1 -0
- package/dist/persona/persona-command.js +41 -6
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/resolve.d.ts +22 -0
- package/dist/persona/resolve.js +45 -2
- package/dist/persona/resolve.js.map +1 -1
- package/dist/persona/types.d.ts +16 -0
- package/dist/pipeline/constitution-compiler.d.ts +25 -14
- package/dist/pipeline/constitution-compiler.js +107 -38
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/dynamic-list-types.d.ts +3 -6
- package/dist/pipeline/dynamic-list-types.js +3 -16
- package/dist/pipeline/dynamic-list-types.js.map +1 -1
- package/dist/pipeline/pipeline-runner.js +89 -50
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +1 -1
- package/dist/pipeline/pipeline-shared.js +3 -11
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/policy-verifier.js +16 -3
- package/dist/pipeline/policy-verifier.js.map +1 -1
- package/dist/pipeline/proxy-mcp-connections.js +17 -2
- package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
- package/dist/pipeline/scenario-generator.d.ts +4 -8
- package/dist/pipeline/scenario-generator.js +13 -46
- package/dist/pipeline/scenario-generator.js.map +1 -1
- package/dist/sandbox/index.d.ts +14 -0
- package/dist/sandbox/index.js +335 -116
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
- package/dist/sandbox/ironcurtain-protocol.js +185 -0
- package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
- package/dist/session/agent-session.d.ts +6 -0
- package/dist/session/agent-session.js +16 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/cli-transport.js +0 -6
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.d.ts +35 -14
- package/dist/session/index.js +324 -130
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +50 -13
- package/dist/session/preflight.js +252 -80
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +2 -5
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/session-manager.d.ts +61 -6
- package/dist/session/session-manager.js +72 -10
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-metadata.d.ts +21 -5
- package/dist/session/session-metadata.js +34 -12
- package/dist/session/session-metadata.js.map +1 -1
- package/dist/session/types.d.ts +311 -5
- package/dist/session/types.js +57 -1
- package/dist/session/types.js.map +1 -1
- package/dist/signal/setup-signal.js +13 -21
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +16 -1
- package/dist/signal/signal-bot-daemon.js +39 -27
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.js +7 -1
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/skills/discovery.d.ts +77 -0
- package/dist/skills/discovery.js +206 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/staging.d.ts +28 -0
- package/dist/skills/staging.js +68 -0
- package/dist/skills/staging.js.map +1 -0
- package/dist/skills/types.d.ts +46 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/trusted-process/approval-whitelist.d.ts +0 -2
- package/dist/trusted-process/approval-whitelist.js +17 -17
- package/dist/trusted-process/approval-whitelist.js.map +1 -1
- package/dist/trusted-process/async-mutex.d.ts +32 -0
- package/dist/trusted-process/async-mutex.js +50 -0
- package/dist/trusted-process/async-mutex.js.map +1 -0
- package/dist/trusted-process/audit-log.d.ts +38 -1
- package/dist/trusted-process/audit-log.js +82 -13
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.js +2 -1
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
- package/dist/trusted-process/control-server.d.ts +101 -0
- package/dist/trusted-process/control-server.js +282 -0
- package/dist/trusted-process/control-server.js.map +1 -0
- package/dist/trusted-process/domain-utils.d.ts +6 -6
- package/dist/trusted-process/domain-utils.js +7 -23
- package/dist/trusted-process/domain-utils.js.map +1 -1
- package/dist/trusted-process/error-prefixes.d.ts +16 -0
- package/dist/trusted-process/error-prefixes.js +17 -0
- package/dist/trusted-process/error-prefixes.js.map +1 -0
- package/dist/trusted-process/index.d.ts +40 -23
- package/dist/trusted-process/index.js +131 -225
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/list-matcher.d.ts +17 -0
- package/dist/trusted-process/list-matcher.js +31 -0
- package/dist/trusted-process/list-matcher.js.map +1 -0
- package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
- package/dist/trusted-process/mcp-client-manager.js +40 -45
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
- package/dist/trusted-process/mcp-proxy-server.js +166 -657
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +16 -4
- package/dist/trusted-process/policy-engine.js +90 -45
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/policy-roots.d.ts +6 -0
- package/dist/trusted-process/policy-roots.js +20 -0
- package/dist/trusted-process/policy-roots.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +12 -0
- package/dist/trusted-process/sandbox-integration.js +18 -0
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/tool-call-coordinator.d.ts +269 -0
- package/dist/trusted-process/tool-call-coordinator.js +508 -0
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
- package/dist/trusted-process/tool-call-pipeline.d.ts +205 -0
- package/dist/trusted-process/tool-call-pipeline.js +798 -0
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
- package/dist/trusted-process/tool-description-hints.d.ts +1 -1
- package/dist/types/argument-roles.d.ts +1 -1
- package/dist/types/argument-roles.js +14 -1
- package/dist/types/argument-roles.js.map +1 -1
- package/dist/types/audit.d.ts +9 -0
- package/dist/{session → types}/errors.d.ts +8 -2
- package/dist/{session → types}/errors.js +8 -2
- package/dist/types/errors.js.map +1 -0
- package/dist/types/reserved-servers.d.ts +11 -0
- package/dist/types/reserved-servers.js +12 -0
- package/dist/types/reserved-servers.js.map +1 -0
- package/dist/types/server-listing.d.ts +14 -0
- package/dist/types/server-listing.js +2 -0
- package/dist/types/server-listing.js.map +1 -0
- package/dist/types/slug.d.ts +2 -0
- package/dist/types/slug.js +2 -0
- package/dist/types/slug.js.map +1 -1
- package/dist/types/url-normalize.d.ts +16 -0
- package/dist/types/url-normalize.js +33 -0
- package/dist/types/url-normalize.js.map +1 -0
- package/dist/utils/error-message.d.ts +8 -0
- package/dist/utils/error-message.js +11 -0
- package/dist/utils/error-message.js.map +1 -0
- package/dist/utils/exec-error.d.ts +19 -0
- package/dist/utils/exec-error.js +16 -0
- package/dist/utils/exec-error.js.map +1 -0
- package/dist/utils/is-plain-object.d.ts +7 -0
- package/dist/utils/is-plain-object.js +12 -0
- package/dist/utils/is-plain-object.js.map +1 -0
- package/dist/utils/preflight-checks.d.ts +16 -0
- package/dist/utils/preflight-checks.js +178 -0
- package/dist/utils/preflight-checks.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
- package/dist/web-ui/dispatch/job-dispatch.js +83 -0
- package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +6 -0
- package/dist/web-ui/dispatch/persona-dispatch.js +116 -0
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
- package/dist/web-ui/dispatch/session-dispatch.js +201 -0
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/types.d.ts +31 -0
- package/dist/web-ui/dispatch/types.js +68 -0
- package/dist/web-ui/dispatch/types.js.map +1 -0
- package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js +925 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
- package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
- package/dist/web-ui/json-rpc-dispatch.js +34 -0
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
- package/dist/web-ui/state-graph.d.ts +13 -0
- package/dist/web-ui/state-graph.js +82 -0
- package/dist/web-ui/state-graph.js.map +1 -0
- package/dist/web-ui/token-stream-bridge.d.ts +76 -0
- package/dist/web-ui/token-stream-bridge.js +265 -0
- package/dist/web-ui/token-stream-bridge.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +152 -0
- package/dist/web-ui/web-event-bus.js +19 -0
- package/dist/web-ui/web-event-bus.js.map +1 -0
- package/dist/web-ui/web-session-transport.d.ts +31 -0
- package/dist/web-ui/web-session-transport.js +109 -0
- package/dist/web-ui/web-session-transport.js.map +1 -0
- package/dist/web-ui/web-ui-server.d.ts +76 -0
- package/dist/web-ui/web-ui-server.js +461 -0
- package/dist/web-ui/web-ui-server.js.map +1 -0
- package/dist/web-ui/web-ui-types.d.ts +290 -0
- package/dist/web-ui/web-ui-types.js +32 -0
- package/dist/web-ui/web-ui-types.js.map +1 -0
- package/dist/web-ui/ws-utils.d.ts +5 -0
- package/dist/web-ui/ws-utils.js +12 -0
- package/dist/web-ui/ws-utils.js.map +1 -0
- package/dist/web-ui-static/assets/index-BFO5z1js.js +76 -0
- package/dist/web-ui-static/assets/index-CCUwrkIL.css +1 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
- package/dist/web-ui-static/index.html +14 -0
- package/dist/workflow/artifacts.d.ts +59 -0
- package/dist/workflow/artifacts.js +188 -0
- package/dist/workflow/artifacts.js.map +1 -0
- package/dist/workflow/checkpoint-selection.d.ts +34 -0
- package/dist/workflow/checkpoint-selection.js +48 -0
- package/dist/workflow/checkpoint-selection.js.map +1 -0
- package/dist/workflow/checkpoint.d.ts +35 -0
- package/dist/workflow/checkpoint.js +84 -0
- package/dist/workflow/checkpoint.js.map +1 -0
- package/dist/workflow/cli-support.d.ts +92 -0
- package/dist/workflow/cli-support.js +423 -0
- package/dist/workflow/cli-support.js.map +1 -0
- package/dist/workflow/definition-loader.d.ts +32 -0
- package/dist/workflow/definition-loader.js +56 -0
- package/dist/workflow/definition-loader.js.map +1 -0
- package/dist/workflow/discovery.d.ts +78 -0
- package/dist/workflow/discovery.js +203 -0
- package/dist/workflow/discovery.js.map +1 -0
- package/dist/workflow/errors.d.ts +66 -0
- package/dist/workflow/errors.js +49 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/guards.d.ts +8 -0
- package/dist/workflow/guards.js +38 -0
- package/dist/workflow/guards.js.map +1 -0
- package/dist/workflow/lint-integration.d.ts +64 -0
- package/dist/workflow/lint-integration.js +56 -0
- package/dist/workflow/lint-integration.js.map +1 -0
- package/dist/workflow/lint.d.ts +66 -0
- package/dist/workflow/lint.js +410 -0
- package/dist/workflow/lint.js.map +1 -0
- package/dist/workflow/machine-builder.d.ts +90 -0
- package/dist/workflow/machine-builder.js +485 -0
- package/dist/workflow/machine-builder.js.map +1 -0
- package/dist/workflow/message-log.d.ts +85 -0
- package/dist/workflow/message-log.js +40 -0
- package/dist/workflow/message-log.js.map +1 -0
- package/dist/workflow/orchestrator.d.ts +450 -0
- package/dist/workflow/orchestrator.js +1941 -0
- package/dist/workflow/orchestrator.js.map +1 -0
- package/dist/workflow/prompt-builder.d.ts +39 -0
- package/dist/workflow/prompt-builder.js +242 -0
- package/dist/workflow/prompt-builder.js.map +1 -0
- package/dist/workflow/run-state-command.d.ts +9 -0
- package/dist/workflow/run-state-command.js +414 -0
- package/dist/workflow/run-state-command.js.map +1 -0
- package/dist/workflow/run-state-debug-capture.d.ts +40 -0
- package/dist/workflow/run-state-debug-capture.js +101 -0
- package/dist/workflow/run-state-debug-capture.js.map +1 -0
- package/dist/workflow/status-parser.d.ts +68 -0
- package/dist/workflow/status-parser.js +259 -0
- package/dist/workflow/status-parser.js.map +1 -0
- package/dist/workflow/types.d.ts +498 -0
- package/dist/workflow/types.js +83 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validate.d.ts +58 -0
- package/dist/workflow/validate.js +499 -0
- package/dist/workflow/validate.js.map +1 -0
- package/dist/workflow/workflow-command.d.ts +26 -0
- package/dist/workflow/workflow-command.js +648 -0
- package/dist/workflow/workflow-command.js.map +1 -0
- package/dist/workflow/workflow-discovery.d.ts +25 -0
- package/dist/workflow/workflow-discovery.js +100 -0
- package/dist/workflow/workflow-discovery.js.map +1 -0
- package/dist/workflow/workflow-manager.d.ts +122 -0
- package/dist/workflow/workflow-manager.js +308 -0
- package/dist/workflow/workflow-manager.js.map +1 -0
- package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +89 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
- package/dist/workflow/worktree.d.ts +43 -0
- package/dist/workflow/worktree.js +106 -0
- package/dist/workflow/worktree.js.map +1 -0
- package/docker/Dockerfile.base +9 -0
- package/docker/Dockerfile.base.arm64 +9 -0
- package/docker/entrypoint-claude-code.sh +46 -0
- package/docker/entrypoint-goose.sh +25 -0
- package/package.json +19 -8
- package/packages/web-ui/README.md +113 -0
- package/packages/web-ui/docs/workflow-state-machine.png +0 -0
- package/src/config/generated/compiled-policy.json +528 -161
- package/src/config/generated/test-scenarios.json +4810 -170
- package/src/config/generated/tool-annotations.json +34 -47
- package/src/config/mcp-servers.json +2 -2
- package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +89 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
- package/dist/pipeline/llm-logger.js.map +0 -1
- package/dist/session/errors.js.map +0 -1
|
@@ -1,79 +1,117 @@
|
|
|
1
|
-
import { loadGeneratedPolicy, extractServerDomainAllowlists, checkConstitutionFreshness, getPackageGeneratedDir, } from '../config/index.js';
|
|
1
|
+
import { loadGeneratedPolicy, extractServerDomainAllowlists, checkConstitutionFreshness, checkAnnotationFreshness, getPackageGeneratedDir, } from '../config/index.js';
|
|
2
2
|
import { createLanguageModel } from '../config/model-provider.js';
|
|
3
|
-
import {
|
|
4
|
-
import { MCPClientManager } from './mcp-client-manager.js';
|
|
5
|
-
import { getPathRoles } from '../types/argument-roles.js';
|
|
6
|
-
import { AuditLog } from './audit-log.js';
|
|
3
|
+
import { MCPClientManager as McpClientManagerImpl } from './mcp-client-manager.js';
|
|
7
4
|
import { EscalationHandler } from './escalation.js';
|
|
8
|
-
import { autoApprove } from './auto-approver.js';
|
|
9
|
-
import { prepareToolArgs } from './path-utils.js';
|
|
10
|
-
import { extractPolicyRoots, toMcpRoots, directoryForPath } from './policy-roots.js';
|
|
11
5
|
import * as logger from '../logger.js';
|
|
12
|
-
import {
|
|
13
|
-
import { extractTextFromContent, buildAuditEntry } from './mcp-proxy-server.js';
|
|
14
|
-
import { updateServerContext, formatServerContext } from './server-context.js';
|
|
6
|
+
import { extractPolicyRoots, toMcpRoots } from './policy-roots.js';
|
|
15
7
|
import { buildTrustedServerSet } from '../memory/memory-annotations.js';
|
|
16
|
-
import {
|
|
8
|
+
import { ToolCallCoordinator } from './tool-call-coordinator.js';
|
|
9
|
+
import { checkSandboxAvailability, resolveSandboxConfigsForAudit } from './sandbox-integration.js';
|
|
17
10
|
/**
|
|
18
|
-
*
|
|
11
|
+
* In-process trusted process. Wraps `ToolCallCoordinator` for callers
|
|
12
|
+
* (integration tests, fallback direct-tool-call mode) that want a
|
|
13
|
+
* pre-wired object with a single `handleToolCall` entry point.
|
|
14
|
+
*
|
|
15
|
+
* After Step 1, both in-process and Code Mode paths share the same
|
|
16
|
+
* coordinator implementation for policy evaluation and audit logging.
|
|
17
|
+
*
|
|
18
|
+
* Lifecycle: `new TrustedProcess(config)` + `await initialize()`. The
|
|
19
|
+
* coordinator is constructed during `initialize()` (not the constructor)
|
|
20
|
+
* so the auto-approve model can be built first and threaded into
|
|
21
|
+
* construction-time invariants, rather than being attached after the
|
|
22
|
+
* fact.
|
|
19
23
|
*/
|
|
20
|
-
function getMissingEnvVars(args) {
|
|
21
|
-
const missing = [];
|
|
22
|
-
for (let i = 0; i < args.length; i++) {
|
|
23
|
-
if (args[i] === '-e' && i + 1 < args.length) {
|
|
24
|
-
const val = args[i + 1];
|
|
25
|
-
if (!val.includes('=') && !process.env[val]) {
|
|
26
|
-
missing.push(val);
|
|
27
|
-
}
|
|
28
|
-
i++;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return missing;
|
|
32
|
-
}
|
|
33
24
|
export class TrustedProcess {
|
|
34
25
|
config;
|
|
35
|
-
|
|
26
|
+
coordinator = null;
|
|
36
27
|
mcpManager;
|
|
37
|
-
mcpRoots;
|
|
38
|
-
auditLog;
|
|
28
|
+
mcpRoots = [];
|
|
39
29
|
escalation;
|
|
40
|
-
|
|
41
|
-
whitelist;
|
|
42
|
-
autoApproveModel = null;
|
|
43
|
-
lastUserMessage = null;
|
|
44
|
-
serverContextMap = new Map();
|
|
30
|
+
options;
|
|
45
31
|
constructor(config, options) {
|
|
46
32
|
this.config = config;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
checkConstitutionFreshness(compiledPolicy, config.constitutionPath);
|
|
53
|
-
const serverDomainAllowlists = extractServerDomainAllowlists(config.mcpServers);
|
|
54
|
-
const trustedServers = buildTrustedServerSet(config.mcpServers);
|
|
55
|
-
this.policyEngine = new PolicyEngine(compiledPolicy, toolAnnotations, config.protectedPaths, config.allowedDirectory, serverDomainAllowlists, dynamicLists, trustedServers);
|
|
56
|
-
const policyRoots = extractPolicyRoots(compiledPolicy, config.allowedDirectory);
|
|
57
|
-
this.mcpRoots = toMcpRoots(policyRoots);
|
|
58
|
-
this.mcpManager = new MCPClientManager();
|
|
59
|
-
this.auditLog = new AuditLog(config.auditLogPath, {
|
|
60
|
-
redact: config.userConfig.auditRedaction.enabled,
|
|
61
|
-
});
|
|
33
|
+
this.options = options ?? {};
|
|
34
|
+
// In-process mode uses its own MCPClientManager so each `connect`
|
|
35
|
+
// call spawns a real backend directly (no router subprocess). The
|
|
36
|
+
// coordinator wraps it for the policy gate.
|
|
37
|
+
this.mcpManager = new McpClientManagerImpl();
|
|
62
38
|
this.escalation = new EscalationHandler();
|
|
63
|
-
|
|
64
|
-
|
|
39
|
+
}
|
|
40
|
+
/** Internal accessor: throws if used before `initialize()`. */
|
|
41
|
+
requireCoordinator() {
|
|
42
|
+
if (!this.coordinator) {
|
|
43
|
+
throw new Error('TrustedProcess used before initialize() -- call initialize() first.');
|
|
44
|
+
}
|
|
45
|
+
return this.coordinator;
|
|
65
46
|
}
|
|
66
47
|
/**
|
|
67
48
|
* Sets the most recent user message for auto-approval context.
|
|
68
49
|
* Called by the session layer before each agent turn.
|
|
69
50
|
*/
|
|
70
51
|
setLastUserMessage(message) {
|
|
71
|
-
this.
|
|
52
|
+
this.requireCoordinator().setLastUserMessage(message);
|
|
72
53
|
}
|
|
73
54
|
async initialize() {
|
|
55
|
+
const { compiledPolicy, toolAnnotations, dynamicLists } = loadGeneratedPolicy({
|
|
56
|
+
policyDir: this.config.generatedDir,
|
|
57
|
+
toolAnnotationsDir: this.config.toolAnnotationsDir ?? this.config.generatedDir,
|
|
58
|
+
fallbackDir: getPackageGeneratedDir(),
|
|
59
|
+
});
|
|
60
|
+
checkConstitutionFreshness(compiledPolicy, this.config.constitutionPath);
|
|
61
|
+
checkAnnotationFreshness(toolAnnotations, this.config.mcpServers);
|
|
62
|
+
const serverDomainAllowlists = extractServerDomainAllowlists(this.config.mcpServers);
|
|
63
|
+
const trustedServers = buildTrustedServerSet(this.config.mcpServers);
|
|
64
|
+
// Build the auto-approve model BEFORE constructing the coordinator
|
|
65
|
+
// so it can be passed in as a construction-time invariant.
|
|
66
|
+
const autoApproveModel = await this.buildAutoApproveModel();
|
|
67
|
+
// Compute per-server sandbox disposition for audit annotation.
|
|
68
|
+
const { platformSupported } = checkSandboxAvailability();
|
|
69
|
+
const resolvedSandboxConfigs = resolveSandboxConfigsForAudit(this.config.mcpServers, this.config.allowedDirectory, platformSupported, this.config.sandboxPolicy ?? 'warn');
|
|
70
|
+
this.coordinator = new ToolCallCoordinator({
|
|
71
|
+
compiledPolicy,
|
|
72
|
+
toolAnnotations,
|
|
73
|
+
protectedPaths: this.config.protectedPaths,
|
|
74
|
+
allowedDirectory: this.config.allowedDirectory,
|
|
75
|
+
serverDomainAllowlists,
|
|
76
|
+
dynamicLists,
|
|
77
|
+
trustedServers,
|
|
78
|
+
auditLogPath: this.config.auditLogPath,
|
|
79
|
+
auditRedact: this.config.userConfig.auditRedaction.enabled,
|
|
80
|
+
escalationDir: this.config.escalationDir,
|
|
81
|
+
mcpManager: this.mcpManager,
|
|
82
|
+
onEscalation: this.options.onEscalation,
|
|
83
|
+
autoApproveModel,
|
|
84
|
+
resolvedSandboxConfigs,
|
|
85
|
+
});
|
|
86
|
+
const policyRoots = extractPolicyRoots(compiledPolicy, this.config.allowedDirectory);
|
|
87
|
+
this.mcpRoots = toMcpRoots(policyRoots);
|
|
88
|
+
await this.connectMcpServers();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Creates the auto-approve language model when enabled in user config.
|
|
92
|
+
* Returns `null` when auto-approve is disabled or model construction
|
|
93
|
+
* fails (non-fatal: the session continues with manual escalation).
|
|
94
|
+
*/
|
|
95
|
+
async buildAutoApproveModel() {
|
|
96
|
+
const autoApproveConfig = this.config.userConfig.autoApprove;
|
|
97
|
+
if (!autoApproveConfig.enabled)
|
|
98
|
+
return null;
|
|
99
|
+
try {
|
|
100
|
+
return await createLanguageModel(autoApproveConfig.modelId, this.config.userConfig);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
logger.warn('[auto-approve] Failed to create model; auto-approve disabled');
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Connects to every configured MCP server and registers its tools
|
|
109
|
+
* with the coordinator. Unavailable servers are logged and skipped.
|
|
110
|
+
*/
|
|
111
|
+
async connectMcpServers() {
|
|
112
|
+
const coordinator = this.requireCoordinator();
|
|
74
113
|
const failedServers = [];
|
|
75
114
|
for (const [name, serverConfig] of Object.entries(this.config.mcpServers)) {
|
|
76
|
-
// Skip servers whose args reference unset env vars (Docker -e VAR_NAME syntax)
|
|
77
115
|
const missingVars = getMissingEnvVars(serverConfig.args);
|
|
78
116
|
if (missingVars.length > 0) {
|
|
79
117
|
logger.warn(`Skipping MCP server '${name}': missing environment variable(s) ${missingVars.join(', ')}`);
|
|
@@ -84,6 +122,21 @@ export class TrustedProcess {
|
|
|
84
122
|
try {
|
|
85
123
|
await this.mcpManager.connect(name, serverConfig, this.mcpRoots);
|
|
86
124
|
logger.info(`Connected to MCP server: ${name}`);
|
|
125
|
+
// Publish this server's tools to the coordinator so the policy
|
|
126
|
+
// gate can route calls through it. Share the manager's live
|
|
127
|
+
// `ClientState` so `addRootToClient` mutates the same roots
|
|
128
|
+
// array the manager returns from its `roots/list` handler.
|
|
129
|
+
const tools = await this.mcpManager.listTools(name);
|
|
130
|
+
const clientState = this.mcpManager.getClientState(name);
|
|
131
|
+
if (clientState) {
|
|
132
|
+
const proxiedTools = tools.map((t) => ({
|
|
133
|
+
serverName: name,
|
|
134
|
+
name: t.name,
|
|
135
|
+
description: t.description,
|
|
136
|
+
inputSchema: (t.inputSchema ?? {}),
|
|
137
|
+
}));
|
|
138
|
+
coordinator.registerTools(name, proxiedTools, clientState);
|
|
139
|
+
}
|
|
87
140
|
}
|
|
88
141
|
catch (err) {
|
|
89
142
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -94,189 +147,42 @@ export class TrustedProcess {
|
|
|
94
147
|
if (failedServers.length > 0) {
|
|
95
148
|
logger.warn(`Unavailable MCP servers: ${failedServers.join(', ')}. Their tools will not be available.`);
|
|
96
149
|
}
|
|
97
|
-
// Create auto-approve model if enabled
|
|
98
|
-
const autoApproveConfig = this.config.userConfig.autoApprove;
|
|
99
|
-
if (autoApproveConfig.enabled) {
|
|
100
|
-
try {
|
|
101
|
-
this.autoApproveModel = await createLanguageModel(autoApproveConfig.modelId, this.config.userConfig);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Model creation failure should not prevent initialization.
|
|
105
|
-
// Auto-approve simply won't be available.
|
|
106
|
-
logger.warn('[auto-approve] Failed to create model; auto-approve disabled');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
150
|
}
|
|
110
151
|
async listTools(serverName) {
|
|
111
152
|
return this.mcpManager.listTools(serverName);
|
|
112
153
|
}
|
|
113
154
|
/**
|
|
114
|
-
* Handles a tool call
|
|
115
|
-
*
|
|
116
|
-
* 2. If escalated, prompt the human for approval
|
|
117
|
-
* 3. If allowed, forward to the real MCP server
|
|
118
|
-
* 4. Log the complete decision trace to the audit log
|
|
119
|
-
* 5. Return the result to the caller
|
|
155
|
+
* Handles a tool call through the coordinator's policy pipeline.
|
|
156
|
+
* Mirrors the legacy TrustedProcess.handleToolCall signature.
|
|
120
157
|
*/
|
|
121
158
|
async handleToolCall(request) {
|
|
122
|
-
|
|
123
|
-
// Annotation-driven normalization: split into transport vs policy args.
|
|
124
|
-
// Trusted servers skip annotation lookup and prepareToolArgs — use raw args directly.
|
|
125
|
-
const annotation = this.policyEngine.getAnnotation(request.serverName, request.toolName, request.arguments);
|
|
126
|
-
let argsForTransport;
|
|
127
|
-
let argsForPolicy;
|
|
128
|
-
if (!annotation && this.policyEngine.isTrustedServer(request.serverName)) {
|
|
129
|
-
argsForTransport = request.arguments;
|
|
130
|
-
argsForPolicy = request.arguments;
|
|
131
|
-
}
|
|
132
|
-
else if (!annotation) {
|
|
133
|
-
const reason = `Missing annotation for tool: ${request.serverName}__${request.toolName}. Re-run 'ironcurtain annotate-tools' to update.`;
|
|
134
|
-
return {
|
|
135
|
-
requestId: request.requestId,
|
|
136
|
-
status: 'denied',
|
|
137
|
-
content: { denied: true, reason },
|
|
138
|
-
policyDecision: { status: 'deny', rule: 'missing-annotation', reason },
|
|
139
|
-
durationMs: Date.now() - startTime,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
({ argsForTransport, argsForPolicy } = prepareToolArgs(request.arguments, annotation, this.config.allowedDirectory));
|
|
144
|
-
}
|
|
145
|
-
const policyRequest = { ...request, arguments: argsForPolicy };
|
|
146
|
-
const transportRequest = { ...request, arguments: argsForTransport };
|
|
147
|
-
// Step 1: Evaluate request against the policy rule chain
|
|
148
|
-
const evaluation = this.policyEngine.evaluate(policyRequest);
|
|
149
|
-
const policyDecision = {
|
|
150
|
-
status: evaluation.decision,
|
|
151
|
-
rule: evaluation.rule,
|
|
152
|
-
reason: evaluation.reason,
|
|
153
|
-
};
|
|
154
|
-
let escalationResult;
|
|
155
|
-
let autoApproved = false;
|
|
156
|
-
let whitelistApproved = false;
|
|
157
|
-
let whitelistPatternId;
|
|
158
|
-
let resultContent;
|
|
159
|
-
let resultStatus;
|
|
160
|
-
let resultError;
|
|
161
|
-
try {
|
|
162
|
-
// Step 2: Handle escalation -- whitelist check, auto-approve, then human
|
|
163
|
-
if (evaluation.decision === 'escalate') {
|
|
164
|
-
// Annotation is guaranteed non-null here: trusted servers always allow (never escalate),
|
|
165
|
-
// and missing-annotation returns early above. Narrow the type for TypeScript.
|
|
166
|
-
const resolvedAnnotation = annotation;
|
|
167
|
-
const whitelistMatch = this.whitelist.match(request.serverName, request.toolName, argsForPolicy, resolvedAnnotation);
|
|
168
|
-
if (whitelistMatch.matched) {
|
|
169
|
-
whitelistApproved = true;
|
|
170
|
-
whitelistPatternId = whitelistMatch.patternId;
|
|
171
|
-
escalationResult = 'approved';
|
|
172
|
-
policyDecision.status = 'allow';
|
|
173
|
-
policyDecision.reason = `Whitelist-approved: ${whitelistMatch.pattern.description}`;
|
|
174
|
-
}
|
|
175
|
-
if (!whitelistApproved) {
|
|
176
|
-
// Try auto-approve before prompting the human
|
|
177
|
-
if (this.autoApproveModel && this.lastUserMessage) {
|
|
178
|
-
const autoResult = await autoApprove({
|
|
179
|
-
userMessage: this.lastUserMessage,
|
|
180
|
-
toolName: `${request.serverName}/${request.toolName}`,
|
|
181
|
-
escalationReason: evaluation.reason,
|
|
182
|
-
}, this.autoApproveModel);
|
|
183
|
-
if (autoResult.decision === 'approve') {
|
|
184
|
-
autoApproved = true;
|
|
185
|
-
escalationResult = 'approved';
|
|
186
|
-
policyDecision.status = 'allow';
|
|
187
|
-
policyDecision.reason = `Auto-approved: ${autoResult.reasoning}`;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// Fall through to human escalation if not auto-approved
|
|
191
|
-
if (!autoApproved) {
|
|
192
|
-
// Extract whitelist candidates for display
|
|
193
|
-
const escalationId = `inprocess-${Date.now()}`;
|
|
194
|
-
const candidates = extractWhitelistCandidates(request.serverName, request.toolName, argsForPolicy, resolvedAnnotation, evaluation.escalatedRoles, escalationId, evaluation.reason);
|
|
195
|
-
const candidatePatterns = candidates.patterns;
|
|
196
|
-
const candidateIpcs = candidates.ipcs.length > 0 ? candidates.ipcs : undefined;
|
|
197
|
-
const escalationContext = formatServerContext(this.serverContextMap, transportRequest.serverName);
|
|
198
|
-
const escalationResponse = this.onEscalation
|
|
199
|
-
? await this.onEscalation(transportRequest, evaluation.reason, escalationContext, candidateIpcs)
|
|
200
|
-
: { decision: await this.escalation.prompt(transportRequest, evaluation.reason, escalationContext) };
|
|
201
|
-
escalationResult = escalationResponse.decision;
|
|
202
|
-
if (escalationResponse.decision === 'approved') {
|
|
203
|
-
policyDecision.status = 'allow';
|
|
204
|
-
policyDecision.reason = 'Approved by human during escalation';
|
|
205
|
-
// Handle whitelist selection
|
|
206
|
-
if (escalationResponse.whitelistSelection !== undefined &&
|
|
207
|
-
escalationResponse.whitelistSelection >= 0 &&
|
|
208
|
-
escalationResponse.whitelistSelection < candidatePatterns.length) {
|
|
209
|
-
const selectedPattern = candidatePatterns[escalationResponse.whitelistSelection];
|
|
210
|
-
this.whitelist.add(selectedPattern);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
policyDecision.status = 'deny';
|
|
215
|
-
policyDecision.reason = 'Denied by human during escalation';
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
// Expand roots to include target directories so the filesystem
|
|
220
|
-
// server accepts the forwarded call (for both auto and human approval).
|
|
221
|
-
if (escalationResult === 'approved' && annotation) {
|
|
222
|
-
const pathValues = extractAnnotatedPaths(transportRequest.arguments, annotation, getPathRoles());
|
|
223
|
-
for (const p of pathValues) {
|
|
224
|
-
const dir = directoryForPath(p);
|
|
225
|
-
await this.mcpManager.addRoot(transportRequest.serverName, {
|
|
226
|
-
uri: `file://${dir}`,
|
|
227
|
-
name: 'escalation-approved',
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// Step 3: Forward to MCP server or deny (using transport args)
|
|
233
|
-
if (policyDecision.status === 'allow') {
|
|
234
|
-
const mcpResult = (await this.mcpManager.callTool(transportRequest.serverName, transportRequest.toolName, transportRequest.arguments));
|
|
235
|
-
resultContent = mcpResult;
|
|
236
|
-
if (mcpResult.isError) {
|
|
237
|
-
resultStatus = 'error';
|
|
238
|
-
resultError = extractTextFromContent(mcpResult.content);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
resultStatus = 'success';
|
|
242
|
-
updateServerContext(this.serverContextMap, transportRequest.serverName, transportRequest.toolName, transportRequest.arguments);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
resultContent = { denied: true, reason: policyDecision.reason };
|
|
247
|
-
resultStatus = 'denied';
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
catch (err) {
|
|
251
|
-
resultStatus = 'error';
|
|
252
|
-
resultError = extractMcpErrorMessage(err);
|
|
253
|
-
resultContent = { error: resultError };
|
|
254
|
-
}
|
|
255
|
-
const durationMs = Date.now() - startTime;
|
|
256
|
-
// Step 4: Append-only audit log (records argsForTransport -- what was sent to MCP server)
|
|
257
|
-
this.auditLog.log(buildAuditEntry(transportRequest, transportRequest.arguments, policyDecision, {
|
|
258
|
-
status: resultStatus,
|
|
259
|
-
content: resultStatus === 'success' ? resultContent : undefined,
|
|
260
|
-
error: resultError,
|
|
261
|
-
}, durationMs, {
|
|
262
|
-
escalationResult,
|
|
263
|
-
autoApproved: autoApproved || undefined,
|
|
264
|
-
whitelistApproved: whitelistApproved || undefined,
|
|
265
|
-
whitelistPatternId,
|
|
266
|
-
}));
|
|
267
|
-
// Step 5: Return result to caller
|
|
268
|
-
return {
|
|
269
|
-
requestId: transportRequest.requestId,
|
|
270
|
-
status: resultStatus,
|
|
271
|
-
content: resultContent,
|
|
272
|
-
policyDecision,
|
|
273
|
-
durationMs,
|
|
274
|
-
};
|
|
159
|
+
return this.requireCoordinator().handleStructuredToolCall(request);
|
|
275
160
|
}
|
|
276
161
|
async shutdown() {
|
|
277
162
|
this.escalation.close();
|
|
163
|
+
// We injected our own MCPClientManager into the coordinator, so
|
|
164
|
+
// the coordinator will NOT close it. Do that here, then close the
|
|
165
|
+
// coordinator (which flushes the audit log).
|
|
278
166
|
await this.mcpManager.closeAll();
|
|
279
|
-
|
|
167
|
+
if (this.coordinator) {
|
|
168
|
+
await this.coordinator.close();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Detects Docker-style `-e VAR_NAME` args (no `=`) where the env var is unset.
|
|
174
|
+
*/
|
|
175
|
+
function getMissingEnvVars(args) {
|
|
176
|
+
const missing = [];
|
|
177
|
+
for (let i = 0; i < args.length; i++) {
|
|
178
|
+
if (args[i] === '-e' && i + 1 < args.length) {
|
|
179
|
+
const val = args[i + 1];
|
|
180
|
+
if (!val.includes('=') && !process.env[val]) {
|
|
181
|
+
missing.push(val);
|
|
182
|
+
}
|
|
183
|
+
i++;
|
|
184
|
+
}
|
|
280
185
|
}
|
|
186
|
+
return missing;
|
|
281
187
|
}
|
|
282
188
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trusted-process/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trusted-process/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List matcher -- runtime value/pattern matching for dynamic list types.
|
|
3
|
+
*
|
|
4
|
+
* Used by the PolicyEngine when evaluating `ListCondition` rules: given a
|
|
5
|
+
* `ListType`, returns a comparator that tests whether a tool-call argument
|
|
6
|
+
* value matches an entry from the resolved allow list.
|
|
7
|
+
*
|
|
8
|
+
* Lives in the trusted-process layer (not the offline pipeline) because it
|
|
9
|
+
* runs on the policy hot path. The compile-time concerns (validators,
|
|
10
|
+
* format guidance, the type registry) stay in `src/pipeline/dynamic-list-types.ts`.
|
|
11
|
+
*/
|
|
12
|
+
import type { ListType } from '../pipeline/types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Returns a matcher function for the given list type.
|
|
15
|
+
* The matcher checks whether a value matches a pattern from the allowed list.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getListMatcher(type: ListType): (value: string, pattern: string) => boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List matcher -- runtime value/pattern matching for dynamic list types.
|
|
3
|
+
*
|
|
4
|
+
* Used by the PolicyEngine when evaluating `ListCondition` rules: given a
|
|
5
|
+
* `ListType`, returns a comparator that tests whether a tool-call argument
|
|
6
|
+
* value matches an entry from the resolved allow list.
|
|
7
|
+
*
|
|
8
|
+
* Lives in the trusted-process layer (not the offline pipeline) because it
|
|
9
|
+
* runs on the policy hot path. The compile-time concerns (validators,
|
|
10
|
+
* format guidance, the type registry) stay in `src/pipeline/dynamic-list-types.ts`.
|
|
11
|
+
*/
|
|
12
|
+
import { domainMatchesAllowlist } from './domain-utils.js';
|
|
13
|
+
/**
|
|
14
|
+
* Returns a matcher function for the given list type.
|
|
15
|
+
* The matcher checks whether a value matches a pattern from the allowed list.
|
|
16
|
+
*/
|
|
17
|
+
export function getListMatcher(type) {
|
|
18
|
+
switch (type) {
|
|
19
|
+
case 'domains':
|
|
20
|
+
return (v, p) => domainMatchesAllowlist(v, [p]);
|
|
21
|
+
case 'emails':
|
|
22
|
+
return (v, p) => v.toLowerCase() === p.toLowerCase();
|
|
23
|
+
case 'identifiers':
|
|
24
|
+
return (v, p) => v === p;
|
|
25
|
+
default: {
|
|
26
|
+
const _exhaustive = type;
|
|
27
|
+
throw new Error(`Unknown list type: ${String(_exhaustive)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=list-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-matcher.js","sourceRoot":"","sources":["../../src/trusted-process/list-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,KAAK,aAAa;YAChB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,21 +1,50 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
1
2
|
import type { MCPServerConfig } from '../config/types.js';
|
|
2
3
|
export declare const ROOTS_REFRESH_TIMEOUT_MS = 5000;
|
|
3
4
|
export interface McpRoot {
|
|
4
5
|
uri: string;
|
|
5
6
|
name: string;
|
|
6
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Per-server connection state exposed to callers that need to interact
|
|
10
|
+
* with the live MCP client (e.g. the coordinator's roots-expansion
|
|
11
|
+
* path). Owned and mutated by `MCPClientManager`; callers receive the
|
|
12
|
+
* live reference so their mutations (e.g. pushing new roots) and the
|
|
13
|
+
* manager's `roots/list` responses share a single array.
|
|
14
|
+
*
|
|
15
|
+
* `rootsRefreshed` is a one-shot callback set by `addRootToClient` in
|
|
16
|
+
* `tool-call-pipeline.ts`. The manager fires and clears it when the
|
|
17
|
+
* connected MCP server issues a `roots/list` request after receiving
|
|
18
|
+
* our `notifications/roots/list_changed` notification.
|
|
19
|
+
*/
|
|
20
|
+
export interface ClientState {
|
|
21
|
+
client: Client;
|
|
22
|
+
roots: McpRoot[];
|
|
23
|
+
rootsRefreshed?: () => void;
|
|
24
|
+
}
|
|
7
25
|
export declare class MCPClientManager {
|
|
8
26
|
private servers;
|
|
9
27
|
connect(name: string, config: MCPServerConfig, roots?: McpRoot[]): Promise<void>;
|
|
10
28
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
29
|
+
* Returns the live MCP `Client` for a connected server, or undefined
|
|
30
|
+
* when the server is not connected. Exposed so the coordinator can
|
|
31
|
+
* wire an existing client through `ClientState` for
|
|
32
|
+
* `handleCallTool`'s escalation/roots-expansion paths.
|
|
15
33
|
*
|
|
16
|
-
*
|
|
34
|
+
* Callers must not mutate client internals; use the manager's public
|
|
35
|
+
* methods (`callTool`) for state-changing operations.
|
|
36
|
+
*/
|
|
37
|
+
getClient(serverName: string): Client | undefined;
|
|
38
|
+
/** Returns the root list tracked for a connected server, if any. */
|
|
39
|
+
getRoots(serverName: string): McpRoot[] | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the live `ClientState` for a connected server. Callers use
|
|
42
|
+
* this to share the manager's mutable `roots` array and one-shot
|
|
43
|
+
* `rootsRefreshed` slot with the tool-call pipeline's
|
|
44
|
+
* `addRootToClient`, so a single mutation is both visible to the
|
|
45
|
+
* `roots/list` handler and observable as a refresh event.
|
|
17
46
|
*/
|
|
18
|
-
|
|
47
|
+
getClientState(serverName: string): ClientState | undefined;
|
|
19
48
|
listTools(serverName: string): Promise<{
|
|
20
49
|
name: string;
|
|
21
50
|
description?: string;
|