@provos/ironcurtain 0.11.0 → 0.13.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 +23 -19
- package/dist/cli-help.d.ts +12 -0
- package/dist/cli-help.js +21 -0
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.js +14 -6
- package/dist/cli.js.map +1 -1
- package/dist/config/agent-model-guard.d.ts +14 -0
- package/dist/config/agent-model-guard.js +24 -0
- package/dist/config/agent-model-guard.js.map +1 -0
- package/dist/config/config-command.d.ts +33 -1
- package/dist/config/config-command.js +723 -11
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +2 -8
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/model-provider.d.ts +9 -0
- package/dist/config/model-provider.js +13 -0
- package/dist/config/model-provider.js.map +1 -1
- package/dist/config/openrouter-catalog.d.ts +46 -0
- package/dist/config/openrouter-catalog.js +111 -0
- package/dist/config/openrouter-catalog.js.map +1 -0
- package/dist/config/openrouter-models-fallback.d.ts +15 -0
- package/dist/config/openrouter-models-fallback.js +49 -0
- package/dist/config/openrouter-models-fallback.js.map +1 -0
- package/dist/config/paths.d.ts +48 -6
- package/dist/config/paths.js +63 -8
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/user-config.d.ts +179 -6
- package/dist/config/user-config.js +282 -5
- package/dist/config/user-config.js.map +1 -1
- package/dist/daemon/daemon-command.js +14 -5
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +18 -0
- package/dist/daemon/ironcurtain-daemon.js +28 -1
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/daemon-client/daemon-client.d.ts +123 -0
- package/dist/daemon-client/daemon-client.js +324 -0
- package/dist/daemon-client/daemon-client.js.map +1 -0
- package/dist/docker/adapters/claude-code.js +109 -1
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/codex.d.ts +18 -0
- package/dist/docker/adapters/codex.js +376 -0
- package/dist/docker/adapters/codex.js.map +1 -0
- package/dist/docker/adapters/goose.js +38 -2
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +34 -6
- package/dist/docker/agent-adapter.js +2 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/agent-registry.js +5 -0
- package/dist/docker/agent-registry.js.map +1 -1
- package/dist/docker/apple-container-manager.d.ts +49 -0
- package/dist/docker/apple-container-manager.js +486 -0
- package/dist/docker/apple-container-manager.js.map +1 -0
- package/dist/docker/ca.js +9 -2
- package/dist/docker/ca.js.map +1 -1
- package/dist/docker/code-mode-proxy.d.ts +11 -0
- package/dist/docker/code-mode-proxy.js +3 -1
- package/dist/docker/code-mode-proxy.js.map +1 -1
- package/dist/docker/container-lifecycle.d.ts +2 -2
- package/dist/docker/container-lifecycle.js +9 -0
- package/dist/docker/container-lifecycle.js.map +1 -1
- package/dist/docker/container-runtime.d.ts +29 -0
- package/dist/docker/container-runtime.js +76 -0
- package/dist/docker/container-runtime.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +31 -0
- package/dist/docker/docker-agent-session.js +97 -7
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +232 -15
- package/dist/docker/docker-infrastructure.js +762 -118
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +25 -5
- package/dist/docker/docker-manager.js +388 -21
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-probe.d.ts +45 -0
- package/dist/docker/docker-probe.js +86 -0
- package/dist/docker/docker-probe.js.map +1 -0
- package/dist/docker/docker-progress-sink.d.ts +1 -1
- package/dist/docker/docker-resource-lifecycle.d.ts +71 -0
- package/dist/docker/docker-resource-lifecycle.js +454 -0
- package/dist/docker/docker-resource-lifecycle.js.map +1 -0
- package/dist/docker/gc-command.d.ts +2 -0
- package/dist/docker/gc-command.js +37 -0
- package/dist/docker/gc-command.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +58 -5
- package/dist/docker/mitm-proxy.js +338 -26
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/network-topology.d.ts +88 -0
- package/dist/docker/network-topology.js +167 -0
- package/dist/docker/network-topology.js.map +1 -0
- package/dist/docker/oauth-credentials.d.ts +13 -0
- package/dist/docker/oauth-credentials.js +125 -0
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/openrouter.d.ts +107 -0
- package/dist/docker/openrouter.js +236 -0
- package/dist/docker/openrouter.js.map +1 -0
- package/dist/docker/orientation.js +1 -1
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/package-types.d.ts +1 -1
- package/dist/docker/platform.d.ts +3 -1
- package/dist/docker/platform.js +3 -1
- package/dist/docker/platform.js.map +1 -1
- package/dist/docker/provider-config.d.ts +35 -1
- package/dist/docker/provider-config.js +93 -3
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/provision-lock.d.ts +46 -0
- package/dist/docker/provision-lock.js +152 -0
- package/dist/docker/provision-lock.js.map +1 -0
- package/dist/docker/pty-session.d.ts +22 -0
- package/dist/docker/pty-session.js +238 -84
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +15 -0
- package/dist/docker/pty-types.js +8 -0
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/registry-proxy.d.ts +46 -0
- package/dist/docker/registry-proxy.js +255 -1
- package/dist/docker/registry-proxy.js.map +1 -1
- package/dist/docker/resource-limits.d.ts +14 -5
- package/dist/docker/resource-limits.js +11 -8
- package/dist/docker/resource-limits.js.map +1 -1
- package/dist/docker/sse-extractor.js +55 -5
- package/dist/docker/sse-extractor.js.map +1 -1
- package/dist/docker/stream-delay.d.ts +86 -0
- package/dist/docker/stream-delay.js +218 -0
- package/dist/docker/stream-delay.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +15 -0
- package/dist/docker/trajectory-capture.d.ts +79 -0
- package/dist/docker/trajectory-capture.js +521 -0
- package/dist/docker/trajectory-capture.js.map +1 -0
- package/dist/docker/trajectory-reassembler.d.ts +286 -0
- package/dist/docker/trajectory-reassembler.js +1010 -0
- package/dist/docker/trajectory-reassembler.js.map +1 -0
- package/dist/docker/trajectory-tap.d.ts +100 -0
- package/dist/docker/trajectory-tap.js +410 -0
- package/dist/docker/trajectory-tap.js.map +1 -0
- package/dist/docker/trajectory-types.d.ts +187 -0
- package/dist/docker/trajectory-types.js +43 -0
- package/dist/docker/trajectory-types.js.map +1 -0
- package/dist/docker/types.d.ts +116 -12
- package/dist/doctor/checks.d.ts +39 -6
- package/dist/doctor/checks.js +129 -25
- package/dist/doctor/checks.js.map +1 -1
- package/dist/doctor/doctor-command.js +39 -9
- package/dist/doctor/doctor-command.js.map +1 -1
- package/dist/doctor/mcp-liveness.d.ts +1 -1
- package/dist/doctor/mcp-liveness.js +12 -4
- package/dist/doctor/mcp-liveness.js.map +1 -1
- package/dist/escalation/escalation-watcher.js +6 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/{mux → escalation}/trusted-input.d.ts +7 -4
- package/dist/{mux → escalation}/trusted-input.js +8 -5
- package/dist/escalation/trusted-input.js.map +1 -0
- package/dist/hash.js.map +1 -1
- package/dist/index.js +65 -16
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +9 -0
- package/dist/mux/mux-app.js +18 -16
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.js +26 -8
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-input-handler.d.ts +26 -2
- package/dist/mux/mux-input-handler.js +93 -11
- package/dist/mux/mux-input-handler.js.map +1 -1
- package/dist/mux/mux-renderer.d.ts +2 -1
- package/dist/mux/mux-renderer.js +67 -0
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/provider-profile-snapshot.d.ts +44 -0
- package/dist/mux/provider-profile-snapshot.js +56 -0
- package/dist/mux/provider-profile-snapshot.js.map +1 -0
- package/dist/mux/types.d.ts +3 -2
- package/dist/mux/types.js +6 -2
- package/dist/mux/types.js.map +1 -1
- package/dist/observe/observe-command.js +112 -125
- package/dist/observe/observe-command.js.map +1 -1
- package/dist/persona/broad-policy-validator.d.ts +95 -0
- package/dist/persona/broad-policy-validator.js +171 -0
- package/dist/persona/broad-policy-validator.js.map +1 -0
- package/dist/persona/compile-persona-policy.d.ts +54 -2
- package/dist/persona/compile-persona-policy.js +29 -4
- package/dist/persona/compile-persona-policy.js.map +1 -1
- package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
- package/dist/persona/event-bus-progress-reporter.js +66 -0
- package/dist/persona/event-bus-progress-reporter.js.map +1 -0
- package/dist/persona/persona-command.js +46 -76
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
- package/dist/persona/persona-compile-orchestrator.js +504 -0
- package/dist/persona/persona-compile-orchestrator.js.map +1 -0
- package/dist/persona/persona-service.d.ts +137 -0
- package/dist/persona/persona-service.js +263 -0
- package/dist/persona/persona-service.js.map +1 -0
- package/dist/persona/policy-mutation-audit.d.ts +109 -0
- package/dist/persona/policy-mutation-audit.js +179 -0
- package/dist/persona/policy-mutation-audit.js.map +1 -0
- package/dist/persona/rule-delta.d.ts +30 -0
- package/dist/persona/rule-delta.js +82 -0
- package/dist/persona/rule-delta.js.map +1 -0
- package/dist/persona/types.d.ts +12 -0
- package/dist/pipeline/annotate.js +10 -2
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/compile.js +14 -2
- package/dist/pipeline/compile.js.map +1 -1
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/generate-with-repair.js.map +1 -1
- package/dist/pipeline/pipeline-runner.d.ts +63 -4
- package/dist/pipeline/pipeline-runner.js +159 -50
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +32 -3
- package/dist/pipeline/pipeline-shared.js +76 -8
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/refresh-lists.js +3 -5
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-schema-validator.js.map +1 -1
- package/dist/{mux → pty}/pty-bridge.d.ts +41 -3
- package/dist/{mux → pty}/pty-bridge.js +71 -18
- package/dist/pty/pty-bridge.js.map +1 -0
- package/dist/pty/resolve-ironcurtain-bin.d.ts +17 -0
- package/dist/pty/resolve-ironcurtain-bin.js +22 -0
- package/dist/pty/resolve-ironcurtain-bin.js.map +1 -0
- package/dist/sandbox/index.d.ts +19 -4
- package/dist/sandbox/index.js +31 -18
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.js +2 -0
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.js +20 -2
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +20 -35
- package/dist/session/preflight.js +92 -109
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/resource-budget-tracker.js +8 -0
- package/dist/session/resource-budget-tracker.js.map +1 -1
- package/dist/session/session-manager.d.ts +7 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/types.d.ts +23 -0
- package/dist/signal/bot-command.js +6 -1
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/setup-signal.js +1 -1
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +1 -0
- package/dist/signal/signal-bot-daemon.js +9 -2
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.d.ts +3 -3
- package/dist/signal/signal-container.js +2 -2
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
- package/dist/trusted-process/call-circuit-breaker.js +22 -3
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
- package/dist/trusted-process/container-command.d.ts +35 -0
- package/dist/trusted-process/container-command.js +49 -0
- package/dist/trusted-process/container-command.js.map +1 -0
- package/dist/trusted-process/mcp-error-utils.js +4 -1
- package/dist/trusted-process/mcp-error-utils.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.js +37 -3
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.js +13 -2
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/tcp-server-transport.d.ts +19 -1
- package/dist/trusted-process/tcp-server-transport.js +56 -10
- package/dist/trusted-process/tcp-server-transport.js.map +1 -1
- package/dist/trusted-process/tool-call-coordinator.d.ts +22 -8
- package/dist/trusted-process/tool-call-coordinator.js +149 -65
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -1
- package/dist/trusted-process/tool-call-pipeline.d.ts +8 -0
- package/dist/trusted-process/tool-call-pipeline.js +68 -34
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -1
- package/dist/util/atomic-write.d.ts +31 -0
- package/dist/util/atomic-write.js +43 -0
- package/dist/util/atomic-write.js.map +1 -0
- package/dist/utils/preflight-checks.js +1 -3
- package/dist/utils/preflight-checks.js.map +1 -1
- package/dist/utils/stdio-guard.d.ts +1 -0
- package/dist/utils/stdio-guard.js +27 -0
- package/dist/utils/stdio-guard.js.map +1 -0
- package/dist/web-ui/__tests__/config-dispatch.test.d.ts +13 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js +383 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +6 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -1
- package/dist/web-ui/conn-registry.d.ts +14 -0
- package/dist/web-ui/conn-registry.js +25 -0
- package/dist/web-ui/conn-registry.js.map +1 -0
- package/dist/web-ui/dispatch/config-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/config-dispatch.js +277 -0
- package/dist/web-ui/dispatch/config-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +11 -2
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +46 -2
- package/dist/web-ui/dispatch/persona-dispatch.js +209 -56
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/pty-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/pty-dispatch.js +66 -0
- package/dist/web-ui/dispatch/pty-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.js +89 -6
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/types.d.ts +35 -0
- package/dist/web-ui/dispatch/types.js +42 -1
- package/dist/web-ui/dispatch/types.js.map +1 -1
- package/dist/web-ui/dispatch/workflow-dispatch.js +116 -5
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -1
- package/dist/web-ui/json-rpc-dispatch.js +4 -1
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -1
- package/dist/web-ui/pty-session-manager.d.ts +234 -0
- package/dist/web-ui/pty-session-manager.js +599 -0
- package/dist/web-ui/pty-session-manager.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +34 -1
- package/dist/web-ui/web-event-bus.js.map +1 -1
- package/dist/web-ui/web-session-transport.js.map +1 -1
- package/dist/web-ui/web-ui-server.d.ts +22 -0
- package/dist/web-ui/web-ui-server.js +41 -0
- package/dist/web-ui/web-ui-server.js.map +1 -1
- package/dist/web-ui/web-ui-types.d.ts +212 -5
- package/dist/web-ui/web-ui-types.js.map +1 -1
- package/dist/web-ui-static/assets/index-CCVI4nEK.css +1 -0
- package/dist/web-ui-static/assets/index-Dm012gvY.js +114 -0
- package/dist/web-ui-static/index.html +2 -2
- package/dist/workflow/cli-shared.d.ts +62 -0
- package/dist/workflow/cli-shared.js +117 -0
- package/dist/workflow/cli-shared.js.map +1 -0
- package/dist/workflow/cli-support.js +0 -2
- package/dist/workflow/cli-support.js.map +1 -1
- package/dist/workflow/container-snapshots.d.ts +29 -0
- package/dist/workflow/container-snapshots.js +137 -0
- package/dist/workflow/container-snapshots.js.map +1 -0
- package/dist/workflow/daemon-gate-commands.d.ts +21 -0
- package/dist/workflow/daemon-gate-commands.js +595 -0
- package/dist/workflow/daemon-gate-commands.js.map +1 -0
- package/dist/workflow/discovery.d.ts +29 -0
- package/dist/workflow/discovery.js +67 -7
- package/dist/workflow/discovery.js.map +1 -1
- package/dist/workflow/lane-template.d.ts +89 -0
- package/dist/workflow/lane-template.js +141 -0
- package/dist/workflow/lane-template.js.map +1 -0
- package/dist/workflow/lint.d.ts +7 -1
- package/dist/workflow/lint.js +186 -3
- package/dist/workflow/lint.js.map +1 -1
- package/dist/workflow/machine-builder.d.ts +90 -2
- package/dist/workflow/machine-builder.js +222 -29
- package/dist/workflow/machine-builder.js.map +1 -1
- package/dist/workflow/message-log.d.ts +15 -1
- package/dist/workflow/message-log.js.map +1 -1
- package/dist/workflow/orchestrator.d.ts +505 -1
- package/dist/workflow/orchestrator.js +1725 -69
- package/dist/workflow/orchestrator.js.map +1 -1
- package/dist/workflow/prompt-builder.js +2 -1
- package/dist/workflow/prompt-builder.js.map +1 -1
- package/dist/workflow/run-state-command.js +1 -1
- package/dist/workflow/run-state-command.js.map +1 -1
- package/dist/workflow/shutdown-signals.d.ts +7 -0
- package/dist/workflow/shutdown-signals.js +40 -0
- package/dist/workflow/shutdown-signals.js.map +1 -0
- package/dist/workflow/status-parser.js +19 -4
- package/dist/workflow/status-parser.js.map +1 -1
- package/dist/workflow/types.d.ts +123 -23
- package/dist/workflow/types.js +2 -0
- package/dist/workflow/types.js.map +1 -1
- package/dist/workflow/validate.d.ts +23 -1
- package/dist/workflow/validate.js +311 -22
- package/dist/workflow/validate.js.map +1 -1
- package/dist/workflow/workflow-command.d.ts +0 -17
- package/dist/workflow/workflow-command.js +118 -94
- package/dist/workflow/workflow-command.js.map +1 -1
- package/dist/workflow/workflow-discovery.d.ts +2 -0
- package/dist/workflow/workflow-discovery.js +22 -1
- package/dist/workflow/workflow-discovery.js.map +1 -1
- package/dist/workflow/workflow-manager.d.ts +34 -0
- package/dist/workflow/workflow-manager.js +52 -1
- package/dist/workflow/workflow-manager.js.map +1 -1
- package/dist/workflow/workflows/design-and-code/README.md +50 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/dist/workflow/workflows/evolve/README.md +66 -0
- package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +1 -0
- package/dist/workflow/workflows/vuln-discovery/README.md +54 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
- package/docker/Dockerfile.base +22 -0
- package/docker/Dockerfile.base.arm64 +18 -0
- package/docker/Dockerfile.claude-code +3 -1
- package/docker/Dockerfile.codex +17 -0
- package/docker/Dockerfile.goose +3 -1
- package/docker/entrypoint-claude-code.sh +28 -45
- package/docker/entrypoint-codex.sh +42 -0
- package/docker/entrypoint-goose.sh +5 -24
- package/docker/entrypoint-uid-remap.sh +93 -0
- package/package.json +39 -30
- package/src/workflow/workflows/design-and-code/README.md +50 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/src/workflow/workflows/evolve/README.md +66 -0
- package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/src/workflow/workflows/evolve/scripts/README.md +314 -0
- package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/src/workflow/workflows/evolve/workflow.yaml +646 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +1 -0
- package/src/workflow/workflows/vuln-discovery/README.md +54 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
- package/dist/mux/pty-bridge.js.map +0 -1
- package/dist/mux/trusted-input.js.map +0 -1
- package/dist/web-ui-static/assets/index-BFO5z1js.js +0 -76
- package/dist/web-ui-static/assets/index-CCUwrkIL.css +0 -1
- package/packages/web-ui/README.md +0 -113
|
@@ -1,39 +1,128 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persona-related JSON-RPC method dispatch.
|
|
3
3
|
*
|
|
4
|
-
* Handles `personas.*` methods: list, get, compile
|
|
4
|
+
* Handles `personas.*` methods: list, get, the Phase 1b streamed compile + its
|
|
5
|
+
* read methods (compileStream / getCompile / listCompiles), and the Phase 1c
|
|
6
|
+
* CRUD methods. There is a SINGLE compile surface (compileStream) — it is both
|
|
7
|
+
* kill-switch gated and runs the broad-policy validator. The old blocking
|
|
8
|
+
* `personas.compile` method was removed in Phase 1c because it was an ungated,
|
|
9
|
+
* unvalidated second compile path.
|
|
5
10
|
*/
|
|
6
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
-
import { resolve } from 'node:path';
|
|
8
11
|
import { z } from 'zod';
|
|
9
12
|
import { validateParams } from './types.js';
|
|
10
|
-
import { RpcError, MethodNotFoundError } from '../web-ui-types.js';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
+
import { RpcError, MethodNotFoundError, } from '../web-ui-types.js';
|
|
14
|
+
import { getPersonaDetail as getPersonaDetailService, listPersonas, createPersona as createPersonaService, setPersonaConstitution as setPersonaConstitutionService, setPersonaMemory as setPersonaMemoryService, deletePersona as deletePersonaService, setPersonaBroadPolicyOptIn as setPersonaBroadPolicyOptInService, } from '../../persona/persona-service.js';
|
|
15
|
+
import { loadPersona } from '../../persona/resolve.js';
|
|
13
16
|
import { createPersonaName } from '../../persona/types.js';
|
|
17
|
+
import { personaCompileOrchestrator, CompileOrchestratorError } from '../../persona/persona-compile-orchestrator.js';
|
|
18
|
+
import { getConnId } from '../conn-registry.js';
|
|
14
19
|
// ---------------------------------------------------------------------------
|
|
15
20
|
// Param schemas
|
|
16
21
|
// ---------------------------------------------------------------------------
|
|
17
22
|
const personaNameSchema = z.object({ name: z.string().min(1) });
|
|
23
|
+
const getCompileSchema = z.object({ operationId: z.string().min(1) });
|
|
24
|
+
const listCompilesSchema = z.object({});
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Phase 1c persona-CRUD param schemas (locked contract; handlers added in the
|
|
27
|
+
// implementation stage). Exported so they form part of the wire contract and
|
|
28
|
+
// can be unit-tested independently. All mutation methods are additionally
|
|
29
|
+
// gated on `ctx.allowPolicyMutation` in the dispatch switch (else
|
|
30
|
+
// POLICY_MUTATION_FORBIDDEN); the schemas only validate shape.
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** `personas.create` -> PersonaDetailDto. Slug is branded inside the service. */
|
|
33
|
+
export const createPersonaSchema = z.object({
|
|
34
|
+
name: z.string().min(1).max(63),
|
|
35
|
+
description: z.string().trim().min(1),
|
|
36
|
+
servers: z.array(z.string().trim().min(1)).optional(),
|
|
37
|
+
memoryEnabled: z.boolean().optional(),
|
|
38
|
+
constitution: z.string().optional(), // default '' inside the service (empty persona)
|
|
39
|
+
});
|
|
40
|
+
/** `personas.editConstitution` -> PersonaEditResultDto { stale }. */
|
|
41
|
+
export const editConstitutionSchema = z.object({
|
|
42
|
+
name: z.string().min(1),
|
|
43
|
+
constitution: z.string(),
|
|
44
|
+
});
|
|
45
|
+
/** `personas.setMemory` -> PersonaDetailDto. */
|
|
46
|
+
export const setMemorySchema = z.object({
|
|
47
|
+
name: z.string().min(1),
|
|
48
|
+
enabled: z.boolean(),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* `personas.delete` (soft by default) -> { deleted: true }.
|
|
52
|
+
* `confirmed: z.literal(true)` makes an unconfirmed call a schema error;
|
|
53
|
+
* confirmation lives in the UI. `force: true` => hard delete (revoke policy).
|
|
54
|
+
*/
|
|
55
|
+
export const deletePersonaSchema = z.object({
|
|
56
|
+
name: z.string().min(1),
|
|
57
|
+
confirmed: z.literal(true),
|
|
58
|
+
force: z.boolean().optional(),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* `personas.setBroadPolicyOptIn` (gated) -> PersonaDetailDto. The ONLY way to
|
|
62
|
+
* set `allowBroadPolicy`; never inferred from the constitution.
|
|
63
|
+
*/
|
|
64
|
+
export const setBroadPolicyOptInSchema = z.object({
|
|
65
|
+
name: z.string().min(1),
|
|
66
|
+
enabled: z.boolean(),
|
|
67
|
+
});
|
|
18
68
|
// ---------------------------------------------------------------------------
|
|
19
69
|
// Dispatch
|
|
20
70
|
// ---------------------------------------------------------------------------
|
|
21
|
-
|
|
71
|
+
// All persona methods are synchronous post-Phase-1c (the streamed compile is
|
|
72
|
+
// fire-and-return; the old blocking `personas.compile` that awaited the pipeline
|
|
73
|
+
// was removed). The signature stays `async` for uniformity with the sibling
|
|
74
|
+
// dispatchers and so a thrown RpcError is normalized into a rejected promise for
|
|
75
|
+
// callers that `await` it.
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
77
|
+
export async function personaDispatch(ctx, method, params, client) {
|
|
22
78
|
switch (method) {
|
|
23
79
|
case 'personas.list': {
|
|
24
|
-
return
|
|
25
|
-
name: p.name,
|
|
26
|
-
description: p.description,
|
|
27
|
-
compiled: p.compiled,
|
|
28
|
-
}));
|
|
80
|
+
return listPersonas();
|
|
29
81
|
}
|
|
30
82
|
case 'personas.get': {
|
|
31
83
|
const { name } = validateParams(personaNameSchema, params);
|
|
32
84
|
return getPersonaDetail(name);
|
|
33
85
|
}
|
|
34
|
-
case 'personas.
|
|
86
|
+
case 'personas.compileStream': {
|
|
35
87
|
const { name } = validateParams(personaNameSchema, params);
|
|
36
|
-
return
|
|
88
|
+
return compileStream(ctx, name, client);
|
|
89
|
+
}
|
|
90
|
+
case 'personas.getCompile': {
|
|
91
|
+
const { operationId } = validateParams(getCompileSchema, params);
|
|
92
|
+
return getCompile(operationId);
|
|
93
|
+
}
|
|
94
|
+
case 'personas.listCompiles': {
|
|
95
|
+
validateParams(listCompilesSchema, params);
|
|
96
|
+
return listCompiles();
|
|
97
|
+
}
|
|
98
|
+
// -----------------------------------------------------------------------
|
|
99
|
+
// Phase 1c CRUD (all gated on ctx.allowPolicyMutation; gate fires BEFORE
|
|
100
|
+
// any fs read). Each mutation emits `personas.changed`.
|
|
101
|
+
// -----------------------------------------------------------------------
|
|
102
|
+
case 'personas.create': {
|
|
103
|
+
requirePolicyMutation(ctx);
|
|
104
|
+
const input = validateParams(createPersonaSchema, params);
|
|
105
|
+
return createPersonaHandler(ctx, input, client);
|
|
106
|
+
}
|
|
107
|
+
case 'personas.editConstitution': {
|
|
108
|
+
requirePolicyMutation(ctx);
|
|
109
|
+
const { name, constitution } = validateParams(editConstitutionSchema, params);
|
|
110
|
+
return editConstitutionHandler(ctx, name, constitution, client);
|
|
111
|
+
}
|
|
112
|
+
case 'personas.setMemory': {
|
|
113
|
+
requirePolicyMutation(ctx);
|
|
114
|
+
const { name, enabled } = validateParams(setMemorySchema, params);
|
|
115
|
+
return setMemoryHandler(ctx, name, enabled, client);
|
|
116
|
+
}
|
|
117
|
+
case 'personas.delete': {
|
|
118
|
+
requirePolicyMutation(ctx);
|
|
119
|
+
const { name, force } = validateParams(deletePersonaSchema, params);
|
|
120
|
+
return deletePersonaHandler(ctx, name, force ?? false, client);
|
|
121
|
+
}
|
|
122
|
+
case 'personas.setBroadPolicyOptIn': {
|
|
123
|
+
requirePolicyMutation(ctx);
|
|
124
|
+
const { name, enabled } = validateParams(setBroadPolicyOptInSchema, params);
|
|
125
|
+
return setBroadPolicyOptInHandler(ctx, name, enabled, client);
|
|
37
126
|
}
|
|
38
127
|
default:
|
|
39
128
|
throw new MethodNotFoundError(method);
|
|
@@ -61,56 +150,120 @@ function resolvePersonaOrThrow(nameRaw) {
|
|
|
61
150
|
return { name, persona };
|
|
62
151
|
}
|
|
63
152
|
function getPersonaDetail(nameRaw) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
153
|
+
// Validate + map to RpcError consistently with the other persona methods,
|
|
154
|
+
// then delegate the fs reads to the headless service (Phase 1a).
|
|
155
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
156
|
+
return getPersonaDetailService(name);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Fire-and-return streamed compile (Phase 1b). Gated behind the daemon's
|
|
160
|
+
* `allowPolicyMutation` kill switch: when off (the DEFAULT), the mutation
|
|
161
|
+
* surface does not exist — return POLICY_MUTATION_FORBIDDEN BEFORE any
|
|
162
|
+
* credential read so a read-only client never learns credential state.
|
|
163
|
+
*/
|
|
164
|
+
function compileStream(ctx, nameRaw, client) {
|
|
165
|
+
if (ctx.allowPolicyMutation !== true) {
|
|
166
|
+
throw new RpcError('POLICY_MUTATION_FORBIDDEN', 'Policy mutation is not enabled on this daemon.');
|
|
167
|
+
}
|
|
168
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
169
|
+
const actor = describeActor(client);
|
|
67
170
|
try {
|
|
68
|
-
|
|
171
|
+
return personaCompileOrchestrator.startCompile(name, actor, ctx.eventBus);
|
|
69
172
|
}
|
|
70
|
-
catch {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const generatedDir = getPersonaGeneratedDir(name);
|
|
74
|
-
const policyPath = resolve(generatedDir, 'compiled-policy.json');
|
|
75
|
-
const hasPolicy = existsSync(policyPath);
|
|
76
|
-
let policyRuleCount;
|
|
77
|
-
if (hasPolicy) {
|
|
78
|
-
try {
|
|
79
|
-
const raw = readFileSync(policyPath, 'utf-8');
|
|
80
|
-
const compiled = JSON.parse(raw);
|
|
81
|
-
policyRuleCount = compiled.rules.length;
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Ignore parse errors
|
|
173
|
+
catch (err) {
|
|
174
|
+
if (err instanceof CompileOrchestratorError) {
|
|
175
|
+
throw new RpcError(err.code, err.message, err.data);
|
|
85
176
|
}
|
|
177
|
+
throw err;
|
|
86
178
|
}
|
|
87
|
-
return {
|
|
88
|
-
name: persona.name,
|
|
89
|
-
description: persona.description,
|
|
90
|
-
createdAt: persona.createdAt,
|
|
91
|
-
constitution,
|
|
92
|
-
servers: persona.servers,
|
|
93
|
-
hasPolicy,
|
|
94
|
-
policyRuleCount,
|
|
95
|
-
};
|
|
96
179
|
}
|
|
97
|
-
|
|
98
|
-
const
|
|
180
|
+
function getCompile(operationId) {
|
|
181
|
+
const op = personaCompileOrchestrator.getCompile(operationId);
|
|
182
|
+
if (!op) {
|
|
183
|
+
throw new RpcError('PERSONA_NOT_FOUND', `No compile operation "${operationId}"`);
|
|
184
|
+
}
|
|
185
|
+
return op;
|
|
186
|
+
}
|
|
187
|
+
function listCompiles() {
|
|
188
|
+
return personaCompileOrchestrator.listCompiles();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Kill-switch gate shared by all mutation methods. Throws
|
|
192
|
+
* POLICY_MUTATION_FORBIDDEN when the daemon was not launched with
|
|
193
|
+
* `--allow-policy-mutation`. Fires BEFORE any fs/credential read so a read-only
|
|
194
|
+
* client never learns persona/credential state.
|
|
195
|
+
*/
|
|
196
|
+
function requirePolicyMutation(ctx) {
|
|
197
|
+
if (ctx.allowPolicyMutation !== true) {
|
|
198
|
+
throw new RpcError('POLICY_MUTATION_FORBIDDEN', 'Policy mutation is not enabled on this daemon.');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Maps a persona-service thrown error (which carries a discriminant `code`
|
|
203
|
+
* string set via Object.assign) onto a typed RpcError. Unknown errors bubble.
|
|
204
|
+
*/
|
|
205
|
+
function rethrowServiceError(err) {
|
|
206
|
+
const code = typeof err === 'object' && err !== null ? err.code : undefined;
|
|
207
|
+
if (code === 'PERSONA_EXISTS') {
|
|
208
|
+
throw new RpcError('PERSONA_EXISTS', err instanceof Error ? err.message : 'Persona already exists.');
|
|
209
|
+
}
|
|
210
|
+
if (code === 'PERSONA_NOT_FOUND') {
|
|
211
|
+
throw new RpcError('PERSONA_NOT_FOUND', err instanceof Error ? err.message : 'Persona not found.');
|
|
212
|
+
}
|
|
213
|
+
throw err;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Runs a persona-service mutation under the WS actor, maps service errors to
|
|
217
|
+
* RpcError (via rethrowServiceError), emits `personas.changed`, and returns the
|
|
218
|
+
* mutation's result. Centralizes the per-handler try/catch + change-event
|
|
219
|
+
* boilerplate so a new mutation method cannot forget the notification.
|
|
220
|
+
*/
|
|
221
|
+
function mutateAndEmit(ctx, mutate, client) {
|
|
222
|
+
let result;
|
|
99
223
|
try {
|
|
100
|
-
|
|
101
|
-
const { compilePersonaPolicy } = await import('../../persona/compile-persona-policy.js');
|
|
102
|
-
const result = await compilePersonaPolicy(name);
|
|
103
|
-
return {
|
|
104
|
-
success: true,
|
|
105
|
-
ruleCount: result.rules.length,
|
|
106
|
-
};
|
|
224
|
+
result = mutate(describeActor(client));
|
|
107
225
|
}
|
|
108
226
|
catch (err) {
|
|
109
|
-
|
|
110
|
-
success: false,
|
|
111
|
-
ruleCount: 0,
|
|
112
|
-
errors: [err instanceof Error ? err.message : String(err)],
|
|
113
|
-
};
|
|
227
|
+
rethrowServiceError(err);
|
|
114
228
|
}
|
|
229
|
+
ctx.eventBus.emit('personas.changed', {});
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
function createPersonaHandler(ctx, input, client) {
|
|
233
|
+
// Validate the slug up front so a bad name is INVALID_PARAMS (not a raw throw).
|
|
234
|
+
try {
|
|
235
|
+
createPersonaName(input.name);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
throw new RpcError('INVALID_PARAMS', `Invalid persona name: ${input.name}`);
|
|
239
|
+
}
|
|
240
|
+
return mutateAndEmit(ctx, (actor) => createPersonaService(input, actor), client);
|
|
241
|
+
}
|
|
242
|
+
function editConstitutionHandler(ctx, nameRaw, constitution, client) {
|
|
243
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
244
|
+
return mutateAndEmit(ctx, (actor) => setPersonaConstitutionService(name, constitution, actor), client);
|
|
245
|
+
}
|
|
246
|
+
function setMemoryHandler(ctx, nameRaw, enabled, client) {
|
|
247
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
248
|
+
mutateAndEmit(ctx, (actor) => setPersonaMemoryService(name, enabled, actor), client);
|
|
249
|
+
return getPersonaDetailService(name);
|
|
250
|
+
}
|
|
251
|
+
function deletePersonaHandler(ctx, nameRaw, force, client) {
|
|
252
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
253
|
+
mutateAndEmit(ctx, (actor) => deletePersonaService(name, actor, { force }), client);
|
|
254
|
+
return { deleted: true };
|
|
255
|
+
}
|
|
256
|
+
function setBroadPolicyOptInHandler(ctx, nameRaw, enabled, client) {
|
|
257
|
+
const { name } = resolvePersonaOrThrow(nameRaw);
|
|
258
|
+
return mutateAndEmit(ctx, (actor) => setPersonaBroadPolicyOptInService(name, enabled, actor), client);
|
|
259
|
+
}
|
|
260
|
+
/** Builds the audit/actor string: `${remoteAddr}#${connId}` (WS) or 'cli'. */
|
|
261
|
+
function describeActor(client) {
|
|
262
|
+
if (!client)
|
|
263
|
+
return 'cli';
|
|
264
|
+
const connId = getConnId(client);
|
|
265
|
+
// `_socket` exposes the remote address on the underlying TCP socket.
|
|
266
|
+
const remote = client._socket?.remoteAddress ?? 'unknown';
|
|
267
|
+
return `${remote}#${connId ?? 'unknown'}`;
|
|
115
268
|
}
|
|
116
269
|
//# sourceMappingURL=persona-dispatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persona-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/persona-dispatch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"persona-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/persona-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY terminal subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four per-client PTY methods:
|
|
5
|
+
* - sessions.ptyAttach (subscribe + one-shot replay snapshot)
|
|
6
|
+
* - sessions.ptyDetach (unsubscribe)
|
|
7
|
+
* - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
|
|
8
|
+
* - sessions.ptyResize (resize the child PTY)
|
|
9
|
+
*
|
|
10
|
+
* All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
|
|
11
|
+
* attach/detach are keyed to the calling WebSocket, so the client is required.
|
|
12
|
+
*/
|
|
13
|
+
import type { WebSocket as WsWebSocket } from 'ws';
|
|
14
|
+
import { type DispatchContext } from './types.js';
|
|
15
|
+
export declare function ptyDispatch(ctx: DispatchContext, method: string, params: Record<string, unknown>, client: WsWebSocket): unknown;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY terminal subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four per-client PTY methods:
|
|
5
|
+
* - sessions.ptyAttach (subscribe + one-shot replay snapshot)
|
|
6
|
+
* - sessions.ptyDetach (unsubscribe)
|
|
7
|
+
* - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
|
|
8
|
+
* - sessions.ptyResize (resize the child PTY)
|
|
9
|
+
*
|
|
10
|
+
* All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
|
|
11
|
+
* attach/detach are keyed to the calling WebSocket, so the client is required.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { validateParams, labelSchema } from './types.js';
|
|
15
|
+
import { MethodNotFoundError, RpcError } from '../web-ui-types.js';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Param validation schemas
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const ptyInputSchema = z.object({ label: z.number().int().positive(), data: z.string() });
|
|
20
|
+
const ptyResizeSchema = z.object({
|
|
21
|
+
label: z.number().int().positive(),
|
|
22
|
+
cols: z.number().int().positive(),
|
|
23
|
+
rows: z.number().int().positive(),
|
|
24
|
+
});
|
|
25
|
+
// A trusted user message (not raw keystrokes): the daemon writes user-context
|
|
26
|
+
// (source 'mux-trusted-input') and injects the text into the PTY.
|
|
27
|
+
const ptyPromptSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Dispatch
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export function ptyDispatch(ctx, method, params, client) {
|
|
32
|
+
const manager = ctx.ptySessionManager;
|
|
33
|
+
if (!manager) {
|
|
34
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
|
|
35
|
+
}
|
|
36
|
+
switch (method) {
|
|
37
|
+
case 'sessions.ptyAttach': {
|
|
38
|
+
const { label } = validateParams(labelSchema, params);
|
|
39
|
+
manager.attach(label, client);
|
|
40
|
+
return { attached: true };
|
|
41
|
+
}
|
|
42
|
+
case 'sessions.ptyDetach': {
|
|
43
|
+
const { label } = validateParams(labelSchema, params);
|
|
44
|
+
manager.detach(label, client);
|
|
45
|
+
return { detached: true };
|
|
46
|
+
}
|
|
47
|
+
case 'sessions.ptyInput': {
|
|
48
|
+
const { label, data } = validateParams(ptyInputSchema, params);
|
|
49
|
+
manager.input(label, data);
|
|
50
|
+
return { accepted: true };
|
|
51
|
+
}
|
|
52
|
+
case 'sessions.ptyResize': {
|
|
53
|
+
const { label, cols, rows } = validateParams(ptyResizeSchema, params);
|
|
54
|
+
manager.resize(label, cols, rows);
|
|
55
|
+
return { resized: true };
|
|
56
|
+
}
|
|
57
|
+
case 'sessions.ptyPrompt': {
|
|
58
|
+
const { label, text } = validateParams(ptyPromptSchema, params);
|
|
59
|
+
manager.sendPrompt(label, text);
|
|
60
|
+
return { accepted: true };
|
|
61
|
+
}
|
|
62
|
+
default:
|
|
63
|
+
throw new MethodNotFoundError(method);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=pty-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/pty-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* budget, history, diagnostics.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { validateParams, toSessionDto, toBudgetDto, labelSchema } from './types.js';
|
|
8
|
+
import { validateParams, toSessionDto, toBudgetDto, zeroedBudgetDto, labelSchema, } from './types.js';
|
|
9
9
|
import { RpcError, SessionNotFoundError, MethodNotFoundError, } from '../web-ui-types.js';
|
|
10
10
|
import { tokenStreamDispatch } from './token-stream-dispatch.js';
|
|
11
|
+
import { ptyDispatch } from './pty-dispatch.js';
|
|
11
12
|
import { WebSessionTransport } from '../web-session-transport.js';
|
|
12
13
|
import { loadConfig } from '../../config/index.js';
|
|
13
14
|
import { createStandaloneSession } from '../../session/index.js';
|
|
@@ -18,7 +19,24 @@ import * as logger from '../../logger.js';
|
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// Param validation schemas
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
21
|
-
const sessionCreateSchema = z.object({
|
|
22
|
+
const sessionCreateSchema = z.object({
|
|
23
|
+
persona: z.string().min(1).optional(),
|
|
24
|
+
/**
|
|
25
|
+
* Per-session trajectory-capture override. Wins over the
|
|
26
|
+
* daemon-process default set via `--capture-traces`. When undefined,
|
|
27
|
+
* the daemon-process default (or `false`) is used. See
|
|
28
|
+
* docs/designs/mitm-token-trajectory-capture.md §10.
|
|
29
|
+
*/
|
|
30
|
+
captureTraces: z.boolean().optional(),
|
|
31
|
+
/**
|
|
32
|
+
* Docker-agent (web-pty) launch options, mirroring mux `/new`. Ignored by the
|
|
33
|
+
* code-mode chatbox path. The child `ironcurtain start --pty` validates the
|
|
34
|
+
* workspace (containment) and resolves the provider profile / model.
|
|
35
|
+
*/
|
|
36
|
+
workspacePath: z.string().min(1).optional(),
|
|
37
|
+
providerProfileName: z.string().min(1).optional(),
|
|
38
|
+
model: z.string().min(1).optional(),
|
|
39
|
+
});
|
|
22
40
|
const sessionSendSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
23
41
|
// ---------------------------------------------------------------------------
|
|
24
42
|
// Session dispatch
|
|
@@ -31,6 +49,13 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
31
49
|
}
|
|
32
50
|
return tokenStreamDispatch(ctx, method, params, client);
|
|
33
51
|
}
|
|
52
|
+
// Delegate PTY terminal methods to dedicated dispatch module
|
|
53
|
+
if (method.startsWith('sessions.pty')) {
|
|
54
|
+
if (!client) {
|
|
55
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY methods require a WebSocket client');
|
|
56
|
+
}
|
|
57
|
+
return ptyDispatch(ctx, method, params, client);
|
|
58
|
+
}
|
|
34
59
|
switch (method) {
|
|
35
60
|
case 'sessions.list':
|
|
36
61
|
return listSessions(ctx);
|
|
@@ -39,11 +64,21 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
39
64
|
return getSession(ctx, label);
|
|
40
65
|
}
|
|
41
66
|
case 'sessions.create': {
|
|
42
|
-
const
|
|
43
|
-
|
|
67
|
+
const opts = validateParams(sessionCreateSchema, params);
|
|
68
|
+
// Docker mode streams a live terminal (web-pty); code mode keeps the
|
|
69
|
+
// turn-based chatbox session. The daemon's SessionMode is process-global.
|
|
70
|
+
if (ctx.mode.kind === 'docker') {
|
|
71
|
+
return createPtySession(ctx, opts);
|
|
72
|
+
}
|
|
73
|
+
return createWebSession(ctx, opts.persona, opts.captureTraces);
|
|
44
74
|
}
|
|
45
75
|
case 'sessions.end': {
|
|
46
76
|
const { label } = validateParams(labelSchema, params);
|
|
77
|
+
// Route PTY labels to their manager (they are not in SessionManager).
|
|
78
|
+
if (ctx.ptySessionManager?.has(label)) {
|
|
79
|
+
ctx.ptySessionManager.end(label);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
47
82
|
const endManaged = ctx.sessionManager.get(label);
|
|
48
83
|
const endSessionId = endManaged?.session.getInfo().id;
|
|
49
84
|
await ctx.sessionManager.end(label);
|
|
@@ -59,6 +94,10 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
59
94
|
}
|
|
60
95
|
case 'sessions.budget': {
|
|
61
96
|
const { label } = validateParams(labelSchema, params);
|
|
97
|
+
// PTY sessions have no turn/budget accounting; return a zeroed budget
|
|
98
|
+
// rather than throwing, so a stale/racing client degrades cleanly (§11 D2).
|
|
99
|
+
if (ctx.ptySessionManager?.has(label))
|
|
100
|
+
return zeroedBudgetDto();
|
|
62
101
|
const managed = ctx.sessionManager.get(label);
|
|
63
102
|
if (!managed)
|
|
64
103
|
throw new SessionNotFoundError(label);
|
|
@@ -66,6 +105,9 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
66
105
|
}
|
|
67
106
|
case 'sessions.history': {
|
|
68
107
|
const { label } = validateParams(labelSchema, params);
|
|
108
|
+
// PTY sessions carry no turn history (§11 D2).
|
|
109
|
+
if (ctx.ptySessionManager?.has(label))
|
|
110
|
+
return [];
|
|
69
111
|
const managed = ctx.sessionManager.get(label);
|
|
70
112
|
if (!managed)
|
|
71
113
|
throw new SessionNotFoundError(label);
|
|
@@ -73,6 +115,9 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
73
115
|
}
|
|
74
116
|
case 'sessions.diagnostics': {
|
|
75
117
|
const { label } = validateParams(labelSchema, params);
|
|
118
|
+
// PTY sessions carry no diagnostic log (§11 D2).
|
|
119
|
+
if (ctx.ptySessionManager?.has(label))
|
|
120
|
+
return [];
|
|
76
121
|
const managed = ctx.sessionManager.get(label);
|
|
77
122
|
if (!managed)
|
|
78
123
|
throw new SessionNotFoundError(label);
|
|
@@ -90,9 +135,17 @@ function cleanupSessionQueue(ctx, label) {
|
|
|
90
135
|
ctx.sessionQueues.delete(label);
|
|
91
136
|
}
|
|
92
137
|
function listSessions(ctx) {
|
|
93
|
-
|
|
138
|
+
const managed = ctx.sessionManager.all().map((m) => toSessionDto(m));
|
|
139
|
+
const pty = ctx.ptySessionManager?.listDtos() ?? [];
|
|
140
|
+
return [...managed, ...pty];
|
|
94
141
|
}
|
|
95
142
|
function getSession(ctx, label) {
|
|
143
|
+
// PTY sessions have no turn history/diagnostics; return the DTO with empty
|
|
144
|
+
// logs rather than throwing, since selecting one drives this call.
|
|
145
|
+
const ptyDto = ctx.ptySessionManager?.getDto(label);
|
|
146
|
+
if (ptyDto) {
|
|
147
|
+
return { ...ptyDto, history: [], diagnosticLog: [] };
|
|
148
|
+
}
|
|
96
149
|
const managed = ctx.sessionManager.get(label);
|
|
97
150
|
if (!managed)
|
|
98
151
|
throw new SessionNotFoundError(label);
|
|
@@ -102,7 +155,28 @@ function getSession(ctx, label) {
|
|
|
102
155
|
diagnosticLog: managed.session.getDiagnosticLog(),
|
|
103
156
|
};
|
|
104
157
|
}
|
|
105
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Creates a Docker-agent PTY session (docker mode). Enforces the SAME
|
|
160
|
+
* concurrency cap as the turn-based path, counting PTY sessions (§11 D4) —
|
|
161
|
+
* each is a full container, so an unbounded spawn is a real resource concern.
|
|
162
|
+
*/
|
|
163
|
+
async function createPtySession(ctx, opts) {
|
|
164
|
+
const manager = ctx.ptySessionManager;
|
|
165
|
+
if (!manager) {
|
|
166
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
|
|
167
|
+
}
|
|
168
|
+
if (manager.size >= ctx.maxConcurrentWebSessions) {
|
|
169
|
+
throw new RpcError('RATE_LIMITED', `PTY session limit reached (max ${ctx.maxConcurrentWebSessions})`);
|
|
170
|
+
}
|
|
171
|
+
return manager.create({
|
|
172
|
+
...(opts.persona ? { persona: opts.persona } : {}),
|
|
173
|
+
...(opts.captureTraces !== undefined ? { captureTraces: opts.captureTraces } : {}),
|
|
174
|
+
...(opts.workspacePath ? { workspacePath: opts.workspacePath } : {}),
|
|
175
|
+
...(opts.providerProfileName ? { providerProfileName: opts.providerProfileName } : {}),
|
|
176
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
async function createWebSession(ctx, persona, captureTracesOverride) {
|
|
106
180
|
const webCount = ctx.sessionManager.byKind('web').length;
|
|
107
181
|
if (webCount >= ctx.maxConcurrentWebSessions) {
|
|
108
182
|
throw new RpcError('RATE_LIMITED', `Web session limit reached (max ${ctx.maxConcurrentWebSessions})`);
|
|
@@ -114,10 +188,19 @@ async function createWebSession(ctx, persona) {
|
|
|
114
188
|
autoSaveMemory: shouldAutoSaveMemory(config, { persona }),
|
|
115
189
|
dockerMode: ctx.mode.kind === 'docker',
|
|
116
190
|
});
|
|
191
|
+
// Capture precedence: JSON-RPC field > daemon CLI flag > userConfig.
|
|
192
|
+
// The session factory then resolves vs `userConfig.capture?.enabled`
|
|
193
|
+
// as the final fallback (§10).
|
|
194
|
+
const effectiveCapture = captureTracesOverride !== undefined
|
|
195
|
+
? captureTracesOverride
|
|
196
|
+
: (ctx.captureTracesDefault ?? false)
|
|
197
|
+
? true
|
|
198
|
+
: undefined;
|
|
117
199
|
const session = await createStandaloneSession({
|
|
118
200
|
config,
|
|
119
201
|
mode: ctx.mode,
|
|
120
202
|
persona,
|
|
203
|
+
...(effectiveCapture !== undefined ? { captureTracesOverride: effectiveCapture } : {}),
|
|
121
204
|
onEscalation: transport.createEscalationHandler(),
|
|
122
205
|
onEscalationExpired: transport.createEscalationExpiredHandler(),
|
|
123
206
|
onEscalationResolved: transport.createEscalationResolvedHandler(),
|