@provos/ironcurtain 0.11.0 → 0.12.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 +9 -7
- 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 +8 -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.js +116 -1
- 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/paths.d.ts +48 -6
- package/dist/config/paths.js +63 -8
- package/dist/config/paths.js.map +1 -1
- package/dist/config/user-config.d.ts +48 -1
- package/dist/config/user-config.js +49 -1
- 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 +22 -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/codex.d.ts +9 -0
- package/dist/docker/adapters/codex.js +297 -0
- package/dist/docker/adapters/codex.js.map +1 -0
- package/dist/docker/agent-adapter.d.ts +5 -1
- 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 +464 -0
- package/dist/docker/apple-container-manager.js.map +1 -0
- 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.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.js +30 -1
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +186 -9
- package/dist/docker/docker-infrastructure.js +521 -77
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +25 -5
- package/dist/docker/docker-manager.js +262 -22
- 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/mitm-proxy.d.ts +52 -1
- package/dist/docker/mitm-proxy.js +234 -10
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/network-topology.d.ts +81 -0
- package/dist/docker/network-topology.js +160 -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/package-types.d.ts +1 -1
- package/dist/docker/provider-config.d.ts +29 -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 +15 -0
- package/dist/docker/pty-session.js +139 -67
- package/dist/docker/pty-session.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/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 +990 -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 +53 -7
- package/dist/doctor/checks.d.ts +36 -3
- package/dist/doctor/checks.js +102 -15
- 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/index.js +30 -12
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +2 -0
- package/dist/mux/mux-app.js +1 -0
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.js +19 -6
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/pty-bridge.d.ts +2 -0
- package/dist/mux/pty-bridge.js +3 -0
- package/dist/mux/pty-bridge.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/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/sandbox/index.d.ts +19 -4
- package/dist/sandbox/index.js +31 -18
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session/index.js +10 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +1 -30
- package/dist/session/preflight.js +52 -85
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/types.d.ts +9 -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-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-proxy-server.js +35 -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 +12 -1
- package/dist/trusted-process/tcp-server-transport.js +9 -1
- 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/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/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/session-dispatch.js +22 -4
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/types.d.ts +23 -0
- package/dist/web-ui/dispatch/types.js +4 -0
- 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 +1 -1
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -1
- package/dist/web-ui/web-event-bus.d.ts +25 -1
- package/dist/web-ui/web-event-bus.js.map +1 -1
- package/dist/web-ui/web-ui-server.d.ts +14 -0
- package/dist/web-ui/web-ui-server.js +16 -0
- package/dist/web-ui/web-ui-server.js.map +1 -1
- package/dist/web-ui/web-ui-types.d.ts +133 -5
- package/dist/web-ui/web-ui-types.js.map +1 -1
- package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
- package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -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 +599 -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 +1722 -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/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 +110 -88
- 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/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/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 +6 -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 +9 -4
- 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/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/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/web-ui-static/assets/index-BFO5z1js.js +0 -76
- package/dist/web-ui-static/assets/index-CCUwrkIL.css +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file-write primitive shared across layers.
|
|
3
|
+
*
|
|
4
|
+
* A neutral leaf with no domain imports, so both offline pipeline tooling
|
|
5
|
+
* (`src/pipeline/`) and live-layer modules (`src/persona/`, etc.) can use it
|
|
6
|
+
* without a layering violation. The raw-text primitive lives here; pipeline
|
|
7
|
+
* artifacts append their own trailing newline on top of it.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Atomically writes raw text using write-to-temp-then-rename.
|
|
11
|
+
*
|
|
12
|
+
* `renameSync` is atomic on POSIX filesystems, so a concurrent reader either
|
|
13
|
+
* sees the complete old file or the complete new file — never a torn write.
|
|
14
|
+
* The parent directory is created if missing.
|
|
15
|
+
*
|
|
16
|
+
* The temp file name is unique per call (`<file>.<pid>.<n>.tmp`) so two writers
|
|
17
|
+
* racing on the SAME target path can't clobber each other's temp and rename the
|
|
18
|
+
* wrong content into place — making the write atomic across concurrent writers,
|
|
19
|
+
* not just concurrent readers. The temp stays in the target's directory so the
|
|
20
|
+
* rename is a same-filesystem (atomic) move.
|
|
21
|
+
*/
|
|
22
|
+
export declare function atomicWriteTextSync(filePath: string, text: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Atomically writes a pretty-printed JSON value (NO trailing newline) via
|
|
25
|
+
* {@link atomicWriteTextSync} (which also creates the parent dir). The
|
|
26
|
+
* no-newline layout matches the historical `persona.json` on-disk convention,
|
|
27
|
+
* so persona-service can use a leaf primitive instead of importing from the
|
|
28
|
+
* escalation domain module. Consumers needing a trailing newline (e.g. pipeline
|
|
29
|
+
* artifacts) append it themselves.
|
|
30
|
+
*/
|
|
31
|
+
export declare function atomicWriteJsonSync(filePath: string, data: unknown): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file-write primitive shared across layers.
|
|
3
|
+
*
|
|
4
|
+
* A neutral leaf with no domain imports, so both offline pipeline tooling
|
|
5
|
+
* (`src/pipeline/`) and live-layer modules (`src/persona/`, etc.) can use it
|
|
6
|
+
* without a layering violation. The raw-text primitive lives here; pipeline
|
|
7
|
+
* artifacts append their own trailing newline on top of it.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync, writeFileSync, renameSync } from 'node:fs';
|
|
10
|
+
import { dirname } from 'node:path';
|
|
11
|
+
/** Monotonic per-process counter to disambiguate temp files within one process. */
|
|
12
|
+
let tmpCounter = 0;
|
|
13
|
+
/**
|
|
14
|
+
* Atomically writes raw text using write-to-temp-then-rename.
|
|
15
|
+
*
|
|
16
|
+
* `renameSync` is atomic on POSIX filesystems, so a concurrent reader either
|
|
17
|
+
* sees the complete old file or the complete new file — never a torn write.
|
|
18
|
+
* The parent directory is created if missing.
|
|
19
|
+
*
|
|
20
|
+
* The temp file name is unique per call (`<file>.<pid>.<n>.tmp`) so two writers
|
|
21
|
+
* racing on the SAME target path can't clobber each other's temp and rename the
|
|
22
|
+
* wrong content into place — making the write atomic across concurrent writers,
|
|
23
|
+
* not just concurrent readers. The temp stays in the target's directory so the
|
|
24
|
+
* rename is a same-filesystem (atomic) move.
|
|
25
|
+
*/
|
|
26
|
+
export function atomicWriteTextSync(filePath, text) {
|
|
27
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
28
|
+
const tmpPath = `${filePath}.${process.pid}.${tmpCounter++}.tmp`;
|
|
29
|
+
writeFileSync(tmpPath, text);
|
|
30
|
+
renameSync(tmpPath, filePath);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Atomically writes a pretty-printed JSON value (NO trailing newline) via
|
|
34
|
+
* {@link atomicWriteTextSync} (which also creates the parent dir). The
|
|
35
|
+
* no-newline layout matches the historical `persona.json` on-disk convention,
|
|
36
|
+
* so persona-service can use a leaf primitive instead of importing from the
|
|
37
|
+
* escalation domain module. Consumers needing a trailing newline (e.g. pipeline
|
|
38
|
+
* artifacts) append it themselves.
|
|
39
|
+
*/
|
|
40
|
+
export function atomicWriteJsonSync(filePath, data) {
|
|
41
|
+
atomicWriteTextSync(filePath, JSON.stringify(data, null, 2));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=atomic-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../../src/util/atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,mFAAmF;AACnF,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,IAAY;IAChE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC;IACjE,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,IAAa;IACjE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-connection id registry for the Web UI WS server.
|
|
3
|
+
*
|
|
4
|
+
* Assigns a short, stable id to each upgraded WebSocket connection so the
|
|
5
|
+
* dispatch layer can build an `actor` string (`${remoteAddr}#${connId}`) for
|
|
6
|
+
* audit attribution without reaching into transport internals. The map is a
|
|
7
|
+
* `WeakMap` keyed by the socket, so entries are garbage-collected when the
|
|
8
|
+
* connection closes.
|
|
9
|
+
*/
|
|
10
|
+
import type { WebSocket as WsWebSocket } from 'ws';
|
|
11
|
+
/** Assigns (or returns an existing) connId for a connection. */
|
|
12
|
+
export declare function assignConnId(ws: WsWebSocket): string;
|
|
13
|
+
/** Returns the connId for a connection, or undefined if none was assigned. */
|
|
14
|
+
export declare function getConnId(ws: WsWebSocket): string | undefined;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-connection id registry for the Web UI WS server.
|
|
3
|
+
*
|
|
4
|
+
* Assigns a short, stable id to each upgraded WebSocket connection so the
|
|
5
|
+
* dispatch layer can build an `actor` string (`${remoteAddr}#${connId}`) for
|
|
6
|
+
* audit attribution without reaching into transport internals. The map is a
|
|
7
|
+
* `WeakMap` keyed by the socket, so entries are garbage-collected when the
|
|
8
|
+
* connection closes.
|
|
9
|
+
*/
|
|
10
|
+
import { randomUUID } from 'node:crypto';
|
|
11
|
+
const connIds = new WeakMap();
|
|
12
|
+
/** Assigns (or returns an existing) connId for a connection. */
|
|
13
|
+
export function assignConnId(ws) {
|
|
14
|
+
const existing = connIds.get(ws);
|
|
15
|
+
if (existing)
|
|
16
|
+
return existing;
|
|
17
|
+
const id = randomUUID().slice(0, 8);
|
|
18
|
+
connIds.set(ws, id);
|
|
19
|
+
return id;
|
|
20
|
+
}
|
|
21
|
+
/** Returns the connId for a connection, or undefined if none was assigned. */
|
|
22
|
+
export function getConnId(ws) {
|
|
23
|
+
return connIds.get(ws);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=conn-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conn-registry.js","sourceRoot":"","sources":["../../src/web-ui/conn-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAuB,CAAC;AAEnD,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,EAAe;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,EAAe;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,6 +1,50 @@
|
|
|
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
|
-
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import type { WebSocket as WsWebSocket } from 'ws';
|
|
13
|
+
import type { WorkflowDispatchContext } from './workflow-dispatch.js';
|
|
14
|
+
/** `personas.create` -> PersonaDetailDto. Slug is branded inside the service. */
|
|
15
|
+
export declare const createPersonaSchema: z.ZodObject<{
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
description: z.ZodString;
|
|
18
|
+
servers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
memoryEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
constitution: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
/** `personas.editConstitution` -> PersonaEditResultDto { stale }. */
|
|
23
|
+
export declare const editConstitutionSchema: z.ZodObject<{
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
constitution: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
/** `personas.setMemory` -> PersonaDetailDto. */
|
|
28
|
+
export declare const setMemorySchema: z.ZodObject<{
|
|
29
|
+
name: z.ZodString;
|
|
30
|
+
enabled: z.ZodBoolean;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
/**
|
|
33
|
+
* `personas.delete` (soft by default) -> { deleted: true }.
|
|
34
|
+
* `confirmed: z.literal(true)` makes an unconfirmed call a schema error;
|
|
35
|
+
* confirmation lives in the UI. `force: true` => hard delete (revoke policy).
|
|
36
|
+
*/
|
|
37
|
+
export declare const deletePersonaSchema: z.ZodObject<{
|
|
38
|
+
name: z.ZodString;
|
|
39
|
+
confirmed: z.ZodLiteral<true>;
|
|
40
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
/**
|
|
43
|
+
* `personas.setBroadPolicyOptIn` (gated) -> PersonaDetailDto. The ONLY way to
|
|
44
|
+
* set `allowBroadPolicy`; never inferred from the constitution.
|
|
45
|
+
*/
|
|
46
|
+
export declare const setBroadPolicyOptInSchema: z.ZodObject<{
|
|
47
|
+
name: z.ZodString;
|
|
48
|
+
enabled: z.ZodBoolean;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
export declare function personaDispatch(ctx: WorkflowDispatchContext, method: string, params: Record<string, unknown>, client?: WsWebSocket): Promise<unknown>;
|
|
@@ -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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"}
|
|
@@ -18,7 +18,16 @@ import * as logger from '../../logger.js';
|
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
// Param validation schemas
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
|
-
const sessionCreateSchema = z.object({
|
|
21
|
+
const sessionCreateSchema = z.object({
|
|
22
|
+
persona: z.string().min(1).optional(),
|
|
23
|
+
/**
|
|
24
|
+
* Per-session trajectory-capture override. Wins over the
|
|
25
|
+
* daemon-process default set via `--capture-traces`. When undefined,
|
|
26
|
+
* the daemon-process default (or `false`) is used. See
|
|
27
|
+
* docs/designs/mitm-token-trajectory-capture.md §10.
|
|
28
|
+
*/
|
|
29
|
+
captureTraces: z.boolean().optional(),
|
|
30
|
+
});
|
|
22
31
|
const sessionSendSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
23
32
|
// ---------------------------------------------------------------------------
|
|
24
33
|
// Session dispatch
|
|
@@ -39,8 +48,8 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
39
48
|
return getSession(ctx, label);
|
|
40
49
|
}
|
|
41
50
|
case 'sessions.create': {
|
|
42
|
-
const { persona } = validateParams(sessionCreateSchema, params);
|
|
43
|
-
return createWebSession(ctx, persona);
|
|
51
|
+
const { persona, captureTraces } = validateParams(sessionCreateSchema, params);
|
|
52
|
+
return createWebSession(ctx, persona, captureTraces);
|
|
44
53
|
}
|
|
45
54
|
case 'sessions.end': {
|
|
46
55
|
const { label } = validateParams(labelSchema, params);
|
|
@@ -102,7 +111,7 @@ function getSession(ctx, label) {
|
|
|
102
111
|
diagnosticLog: managed.session.getDiagnosticLog(),
|
|
103
112
|
};
|
|
104
113
|
}
|
|
105
|
-
async function createWebSession(ctx, persona) {
|
|
114
|
+
async function createWebSession(ctx, persona, captureTracesOverride) {
|
|
106
115
|
const webCount = ctx.sessionManager.byKind('web').length;
|
|
107
116
|
if (webCount >= ctx.maxConcurrentWebSessions) {
|
|
108
117
|
throw new RpcError('RATE_LIMITED', `Web session limit reached (max ${ctx.maxConcurrentWebSessions})`);
|
|
@@ -114,10 +123,19 @@ async function createWebSession(ctx, persona) {
|
|
|
114
123
|
autoSaveMemory: shouldAutoSaveMemory(config, { persona }),
|
|
115
124
|
dockerMode: ctx.mode.kind === 'docker',
|
|
116
125
|
});
|
|
126
|
+
// Capture precedence: JSON-RPC field > daemon CLI flag > userConfig.
|
|
127
|
+
// The session factory then resolves vs `userConfig.capture?.enabled`
|
|
128
|
+
// as the final fallback (§10).
|
|
129
|
+
const effectiveCapture = captureTracesOverride !== undefined
|
|
130
|
+
? captureTracesOverride
|
|
131
|
+
: (ctx.captureTracesDefault ?? false)
|
|
132
|
+
? true
|
|
133
|
+
: undefined;
|
|
117
134
|
const session = await createStandaloneSession({
|
|
118
135
|
config,
|
|
119
136
|
mode: ctx.mode,
|
|
120
137
|
persona,
|
|
138
|
+
...(effectiveCapture !== undefined ? { captureTracesOverride: effectiveCapture } : {}),
|
|
121
139
|
onEscalation: transport.createEscalationHandler(),
|
|
122
140
|
onEscalationExpired: transport.createEscalationExpiredHandler(),
|
|
123
141
|
onEscalationResolved: transport.createEscalationResolvedHandler(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/session-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAwB,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAGL,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"session-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/session-dispatch.ts"],"names":[],"mappings":"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"}
|