@provos/ironcurtain 0.10.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 +68 -14
- package/dist/auth/oauth-provider.js +1 -4
- package/dist/auth/oauth-provider.js.map +1 -1
- 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 +46 -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 +277 -7
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +62 -7
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +528 -161
- package/dist/config/generated/test-scenarios.json +4810 -170
- package/dist/config/generated/tool-annotations.json +34 -47
- package/dist/config/index.d.ts +58 -0
- package/dist/config/index.js +97 -15
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +2 -2
- package/dist/config/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 +217 -0
- package/dist/config/paths.js +363 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +7 -1
- package/dist/config/user-config.d.ts +101 -6
- package/dist/config/user-config.js +145 -31
- package/dist/config/user-config.js.map +1 -1
- package/dist/config/validate-policy-dir.d.ts +10 -0
- package/dist/config/validate-policy-dir.js +59 -0
- package/dist/config/validate-policy-dir.js.map +1 -0
- package/dist/cron/job-commands.js +22 -2
- package/dist/cron/job-commands.js.map +1 -1
- package/dist/cron/types.d.ts +16 -2
- package/dist/cron/types.js +1 -3
- package/dist/cron/types.js.map +1 -1
- package/dist/daemon/daemon-command.js +30 -7
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
- package/dist/daemon/ironcurtain-daemon.js +231 -8
- 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 +194 -20
- package/dist/docker/adapters/claude-code.js.map +1 -1
- 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/adapters/goose.d.ts +12 -11
- package/dist/docker/adapters/goose.js +80 -27
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +183 -5
- package/dist/docker/agent-adapter.js +16 -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 +38 -0
- package/dist/docker/code-mode-proxy.js +6 -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.d.ts +113 -62
- package/dist/docker/docker-agent-session.js +271 -294
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +428 -26
- package/dist/docker/docker-infrastructure.js +1005 -70
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +58 -3
- package/dist/docker/docker-manager.js +378 -33
- 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 +43 -0
- package/dist/docker/docker-progress-sink.js +299 -0
- package/dist/docker/docker-progress-sink.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +135 -1
- package/dist/docker/mitm-proxy.js +611 -25
- 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 +59 -3
- package/dist/docker/oauth-credentials.js +181 -14
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.js +2 -2
- package/dist/docker/oauth-token-manager.js.map +1 -1
- package/dist/docker/orientation.d.ts +1 -1
- package/dist/docker/package-types.d.ts +1 -1
- package/dist/docker/provider-config.d.ts +78 -3
- package/dist/docker/provider-config.js +295 -31
- 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/proxy-tools.d.ts +0 -2
- package/dist/docker/proxy-tools.js +2 -7
- package/dist/docker/proxy-tools.js.map +1 -1
- package/dist/docker/pty-session.d.ts +64 -1
- package/dist/docker/pty-session.js +306 -104
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +0 -2
- package/dist/docker/pty-types.js +0 -2
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/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 +134 -0
- package/dist/docker/resource-limits.js +203 -0
- package/dist/docker/resource-limits.js.map +1 -0
- package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
- package/dist/docker/spawn-with-idle-timeout.js +152 -0
- package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
- package/dist/docker/sse-extractor.d.ts +51 -0
- package/dist/docker/sse-extractor.js +303 -0
- package/dist/docker/sse-extractor.js.map +1 -0
- package/dist/docker/token-stream-bus.d.ts +83 -0
- package/dist/docker/token-stream-bus.js +98 -0
- package/dist/docker/token-stream-bus.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +71 -0
- package/dist/docker/token-stream-types.js +8 -0
- package/dist/docker/token-stream-types.js.map +1 -0
- package/dist/docker/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 +105 -12
- package/dist/doctor/checks.d.ts +171 -0
- package/dist/doctor/checks.js +598 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/doctor-command.d.ts +29 -0
- package/dist/doctor/doctor-command.js +190 -0
- package/dist/doctor/doctor-command.js.map +1 -0
- package/dist/doctor/mcp-liveness.d.ts +28 -0
- package/dist/doctor/mcp-liveness.js +92 -0
- package/dist/doctor/mcp-liveness.js.map +1 -0
- package/dist/doctor/oauth-checks.d.ts +23 -0
- package/dist/doctor/oauth-checks.js +157 -0
- package/dist/doctor/oauth-checks.js.map +1 -0
- package/dist/doctor/output.d.ts +26 -0
- package/dist/doctor/output.js +82 -0
- package/dist/doctor/output.js.map +1 -0
- package/dist/escalation/listener-command.js +0 -3
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/event-bus/typed-event-bus.d.ts +26 -0
- package/dist/event-bus/typed-event-bus.js +35 -0
- package/dist/event-bus/typed-event-bus.js.map +1 -0
- package/dist/index.js +54 -21
- package/dist/index.js.map +1 -1
- package/dist/logger.js +31 -2
- package/dist/logger.js.map +1 -1
- package/dist/memory/auto-save.d.ts +18 -4
- package/dist/memory/auto-save.js +46 -6
- package/dist/memory/auto-save.js.map +1 -1
- package/dist/memory/memory-policy.d.ts +41 -0
- package/dist/memory/memory-policy.js +36 -0
- package/dist/memory/memory-policy.js.map +1 -0
- package/dist/mux/mux-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.d.ts +10 -1
- package/dist/mux/mux-command.js +74 -40
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-renderer.js +2 -12
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/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/mux/session-scanner.js +1 -2
- package/dist/mux/session-scanner.js.map +1 -1
- package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
- package/dist/{pipeline → observability}/llm-logger.js +8 -3
- package/dist/observability/llm-logger.js.map +1 -0
- package/dist/observe/observe-command.d.ts +12 -0
- package/dist/observe/observe-command.js +285 -0
- package/dist/observe/observe-command.js.map +1 -0
- package/dist/observe/observe-renderer.d.ts +24 -0
- package/dist/observe/observe-renderer.js +87 -0
- package/dist/observe/observe-renderer.js.map +1 -0
- package/dist/observe/observe-tui-rain.d.ts +42 -0
- package/dist/observe/observe-tui-rain.js +531 -0
- package/dist/observe/observe-tui-rain.js.map +1 -0
- package/dist/observe/observe-tui-text-panel.d.ts +46 -0
- package/dist/observe/observe-tui-text-panel.js +525 -0
- package/dist/observe/observe-tui-text-panel.js.map +1 -0
- package/dist/observe/observe-tui-types.d.ts +270 -0
- package/dist/observe/observe-tui-types.js +200 -0
- package/dist/observe/observe-tui-types.js.map +1 -0
- package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
- package/dist/observe/observe-tui-word-scorer.js +572 -0
- package/dist/observe/observe-tui-word-scorer.js.map +1 -0
- package/dist/observe/observe-tui.d.ts +59 -0
- package/dist/observe/observe-tui.js +592 -0
- package/dist/observe/observe-tui.js.map +1 -0
- package/dist/persona/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/memory-gate.d.ts +19 -0
- package/dist/persona/memory-gate.js +33 -0
- package/dist/persona/memory-gate.js.map +1 -0
- package/dist/persona/persona-command.js +77 -72
- 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/resolve.d.ts +22 -0
- package/dist/persona/resolve.js +45 -2
- package/dist/persona/resolve.js.map +1 -1
- 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 +28 -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.d.ts +25 -14
- package/dist/pipeline/constitution-compiler.js +107 -38
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/dynamic-list-types.d.ts +3 -6
- package/dist/pipeline/dynamic-list-types.js +3 -16
- package/dist/pipeline/dynamic-list-types.js.map +1 -1
- package/dist/pipeline/pipeline-runner.d.ts +63 -4
- package/dist/pipeline/pipeline-runner.js +242 -94
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +33 -4
- package/dist/pipeline/pipeline-shared.js +79 -19
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/policy-verifier.js +16 -3
- package/dist/pipeline/policy-verifier.js.map +1 -1
- package/dist/pipeline/proxy-mcp-connections.js +17 -2
- package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
- package/dist/pipeline/refresh-lists.js +3 -5
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-generator.d.ts +4 -8
- package/dist/pipeline/scenario-generator.js +13 -46
- package/dist/pipeline/scenario-generator.js.map +1 -1
- package/dist/sandbox/index.d.ts +29 -0
- package/dist/sandbox/index.js +351 -119
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
- package/dist/sandbox/ironcurtain-protocol.js +185 -0
- package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
- package/dist/session/agent-session.d.ts +6 -0
- package/dist/session/agent-session.js +16 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/cli-transport.js +0 -6
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.d.ts +35 -14
- package/dist/session/index.js +333 -130
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +21 -13
- package/dist/session/preflight.js +227 -88
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +2 -5
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/session-manager.d.ts +61 -6
- package/dist/session/session-manager.js +72 -10
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-metadata.d.ts +21 -5
- package/dist/session/session-metadata.js +34 -12
- package/dist/session/session-metadata.js.map +1 -1
- package/dist/session/types.d.ts +320 -5
- package/dist/session/types.js +57 -1
- package/dist/session/types.js.map +1 -1
- package/dist/signal/bot-command.js +6 -1
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/setup-signal.js +13 -21
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +16 -1
- package/dist/signal/signal-bot-daemon.js +39 -27
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.d.ts +3 -3
- package/dist/signal/signal-container.js +9 -3
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/skills/discovery.d.ts +77 -0
- package/dist/skills/discovery.js +206 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/staging.d.ts +28 -0
- package/dist/skills/staging.js +68 -0
- package/dist/skills/staging.js.map +1 -0
- package/dist/skills/types.d.ts +46 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/trusted-process/approval-whitelist.d.ts +0 -2
- package/dist/trusted-process/approval-whitelist.js +17 -17
- package/dist/trusted-process/approval-whitelist.js.map +1 -1
- package/dist/trusted-process/async-mutex.d.ts +32 -0
- package/dist/trusted-process/async-mutex.js +50 -0
- package/dist/trusted-process/async-mutex.js.map +1 -0
- package/dist/trusted-process/audit-log.d.ts +38 -1
- package/dist/trusted-process/audit-log.js +82 -13
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
- package/dist/trusted-process/call-circuit-breaker.js +23 -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/control-server.d.ts +101 -0
- package/dist/trusted-process/control-server.js +282 -0
- package/dist/trusted-process/control-server.js.map +1 -0
- package/dist/trusted-process/domain-utils.d.ts +6 -6
- package/dist/trusted-process/domain-utils.js +7 -23
- package/dist/trusted-process/domain-utils.js.map +1 -1
- package/dist/trusted-process/error-prefixes.d.ts +16 -0
- package/dist/trusted-process/error-prefixes.js +17 -0
- package/dist/trusted-process/error-prefixes.js.map +1 -0
- package/dist/trusted-process/index.d.ts +40 -23
- package/dist/trusted-process/index.js +131 -225
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/list-matcher.d.ts +17 -0
- package/dist/trusted-process/list-matcher.js +31 -0
- package/dist/trusted-process/list-matcher.js.map +1 -0
- package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
- package/dist/trusted-process/mcp-client-manager.js +40 -45
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
- package/dist/trusted-process/mcp-proxy-server.js +201 -660
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +16 -4
- package/dist/trusted-process/policy-engine.js +103 -47
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/policy-roots.d.ts +6 -0
- package/dist/trusted-process/policy-roots.js +20 -0
- package/dist/trusted-process/policy-roots.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +12 -0
- package/dist/trusted-process/sandbox-integration.js +18 -0
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/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 +283 -0
- package/dist/trusted-process/tool-call-coordinator.js +592 -0
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
- package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
- package/dist/trusted-process/tool-call-pipeline.js +832 -0
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
- package/dist/trusted-process/tool-description-hints.d.ts +1 -1
- package/dist/types/argument-roles.d.ts +1 -1
- package/dist/types/argument-roles.js +14 -1
- package/dist/types/argument-roles.js.map +1 -1
- package/dist/types/audit.d.ts +9 -0
- package/dist/{session → types}/errors.d.ts +8 -2
- package/dist/{session → types}/errors.js +8 -2
- package/dist/types/errors.js.map +1 -0
- package/dist/types/reserved-servers.d.ts +11 -0
- package/dist/types/reserved-servers.js +12 -0
- package/dist/types/reserved-servers.js.map +1 -0
- package/dist/types/server-listing.d.ts +14 -0
- package/dist/types/server-listing.js +2 -0
- package/dist/types/server-listing.js.map +1 -0
- package/dist/types/slug.d.ts +2 -0
- package/dist/types/slug.js +2 -0
- package/dist/types/slug.js.map +1 -1
- package/dist/types/url-normalize.d.ts +16 -0
- package/dist/types/url-normalize.js +33 -0
- package/dist/types/url-normalize.js.map +1 -0
- package/dist/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/error-message.d.ts +8 -0
- package/dist/utils/error-message.js +11 -0
- package/dist/utils/error-message.js.map +1 -0
- package/dist/utils/exec-error.d.ts +19 -0
- package/dist/utils/exec-error.js +16 -0
- package/dist/utils/exec-error.js.map +1 -0
- package/dist/utils/is-plain-object.d.ts +7 -0
- package/dist/utils/is-plain-object.js +12 -0
- package/dist/utils/is-plain-object.js.map +1 -0
- package/dist/utils/preflight-checks.d.ts +16 -0
- package/dist/utils/preflight-checks.js +178 -0
- package/dist/utils/preflight-checks.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
- package/dist/web-ui/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/escalation-dispatch.d.ts +7 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
- package/dist/web-ui/dispatch/job-dispatch.js +83 -0
- package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
- package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
- package/dist/web-ui/dispatch/session-dispatch.js +219 -0
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/types.d.ts +54 -0
- package/dist/web-ui/dispatch/types.js +72 -0
- package/dist/web-ui/dispatch/types.js.map +1 -0
- package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
- package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
- package/dist/web-ui/json-rpc-dispatch.js +34 -0
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
- package/dist/web-ui/state-graph.d.ts +13 -0
- package/dist/web-ui/state-graph.js +82 -0
- package/dist/web-ui/state-graph.js.map +1 -0
- package/dist/web-ui/token-stream-bridge.d.ts +76 -0
- package/dist/web-ui/token-stream-bridge.js +265 -0
- package/dist/web-ui/token-stream-bridge.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +176 -0
- package/dist/web-ui/web-event-bus.js +19 -0
- package/dist/web-ui/web-event-bus.js.map +1 -0
- package/dist/web-ui/web-session-transport.d.ts +31 -0
- package/dist/web-ui/web-session-transport.js +109 -0
- package/dist/web-ui/web-session-transport.js.map +1 -0
- package/dist/web-ui/web-ui-server.d.ts +90 -0
- package/dist/web-ui/web-ui-server.js +477 -0
- package/dist/web-ui/web-ui-server.js.map +1 -0
- package/dist/web-ui/web-ui-types.d.ts +418 -0
- package/dist/web-ui/web-ui-types.js +32 -0
- package/dist/web-ui/web-ui-types.js.map +1 -0
- package/dist/web-ui/ws-utils.d.ts +5 -0
- package/dist/web-ui/ws-utils.js +12 -0
- package/dist/web-ui/ws-utils.js.map +1 -0
- package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
- package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
- package/dist/web-ui-static/index.html +14 -0
- package/dist/workflow/artifacts.d.ts +59 -0
- package/dist/workflow/artifacts.js +188 -0
- package/dist/workflow/artifacts.js.map +1 -0
- package/dist/workflow/checkpoint-selection.d.ts +34 -0
- package/dist/workflow/checkpoint-selection.js +48 -0
- package/dist/workflow/checkpoint-selection.js.map +1 -0
- package/dist/workflow/checkpoint.d.ts +35 -0
- package/dist/workflow/checkpoint.js +84 -0
- package/dist/workflow/checkpoint.js.map +1 -0
- package/dist/workflow/cli-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.d.ts +92 -0
- package/dist/workflow/cli-support.js +421 -0
- package/dist/workflow/cli-support.js.map +1 -0
- 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/definition-loader.d.ts +32 -0
- package/dist/workflow/definition-loader.js +56 -0
- package/dist/workflow/definition-loader.js.map +1 -0
- package/dist/workflow/discovery.d.ts +107 -0
- package/dist/workflow/discovery.js +263 -0
- package/dist/workflow/discovery.js.map +1 -0
- package/dist/workflow/errors.d.ts +66 -0
- package/dist/workflow/errors.js +49 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/guards.d.ts +8 -0
- package/dist/workflow/guards.js +38 -0
- package/dist/workflow/guards.js.map +1 -0
- package/dist/workflow/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-integration.d.ts +64 -0
- package/dist/workflow/lint-integration.js +56 -0
- package/dist/workflow/lint-integration.js.map +1 -0
- package/dist/workflow/lint.d.ts +72 -0
- package/dist/workflow/lint.js +593 -0
- package/dist/workflow/lint.js.map +1 -0
- package/dist/workflow/machine-builder.d.ts +178 -0
- package/dist/workflow/machine-builder.js +678 -0
- package/dist/workflow/machine-builder.js.map +1 -0
- package/dist/workflow/message-log.d.ts +99 -0
- package/dist/workflow/message-log.js +40 -0
- package/dist/workflow/message-log.js.map +1 -0
- package/dist/workflow/orchestrator.d.ts +954 -0
- package/dist/workflow/orchestrator.js +3594 -0
- package/dist/workflow/orchestrator.js.map +1 -0
- package/dist/workflow/prompt-builder.d.ts +39 -0
- package/dist/workflow/prompt-builder.js +243 -0
- package/dist/workflow/prompt-builder.js.map +1 -0
- package/dist/workflow/run-state-command.d.ts +9 -0
- package/dist/workflow/run-state-command.js +414 -0
- package/dist/workflow/run-state-command.js.map +1 -0
- package/dist/workflow/run-state-debug-capture.d.ts +40 -0
- package/dist/workflow/run-state-debug-capture.js +101 -0
- package/dist/workflow/run-state-debug-capture.js.map +1 -0
- package/dist/workflow/status-parser.d.ts +68 -0
- package/dist/workflow/status-parser.js +274 -0
- package/dist/workflow/status-parser.js.map +1 -0
- package/dist/workflow/types.d.ts +598 -0
- package/dist/workflow/types.js +85 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validate.d.ts +80 -0
- package/dist/workflow/validate.js +788 -0
- package/dist/workflow/validate.js.map +1 -0
- package/dist/workflow/workflow-command.d.ts +9 -0
- package/dist/workflow/workflow-command.js +670 -0
- package/dist/workflow/workflow-command.js.map +1 -0
- package/dist/workflow/workflow-discovery.d.ts +27 -0
- package/dist/workflow/workflow-discovery.js +121 -0
- package/dist/workflow/workflow-discovery.js.map +1 -0
- package/dist/workflow/workflow-manager.d.ts +156 -0
- package/dist/workflow/workflow-manager.js +359 -0
- package/dist/workflow/workflow-manager.js.map +1 -0
- package/dist/workflow/workflows/design-and-code/README.md +50 -0
- package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -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/skills/email-formatting/SKILL.md +55 -0
- package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
- package/dist/workflow/worktree.d.ts +43 -0
- package/dist/workflow/worktree.js +106 -0
- package/dist/workflow/worktree.js.map +1 -0
- package/docker/Dockerfile.base +31 -0
- package/docker/Dockerfile.base.arm64 +27 -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 +7 -0
- package/docker/entrypoint-codex.sh +42 -0
- package/docker/entrypoint-goose.sh +6 -0
- package/docker/entrypoint-uid-remap.sh +93 -0
- package/package.json +27 -11
- package/packages/web-ui/README.md +113 -0
- package/packages/web-ui/docs/workflow-state-machine.png +0 -0
- package/src/config/generated/compiled-policy.json +528 -161
- package/src/config/generated/test-scenarios.json +4810 -170
- package/src/config/generated/tool-annotations.json +34 -47
- package/src/config/mcp-servers.json +2 -2
- package/src/workflow/workflows/design-and-code/README.md +50 -0
- package/src/workflow/workflows/design-and-code/workflow.yaml +169 -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/skills/email-formatting/SKILL.md +55 -0
- package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
- package/dist/pipeline/llm-logger.js.map +0 -1
- package/dist/session/errors.js.map +0 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-related JSON-RPC method dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles all `sessions.*` methods: list, get, create, end, send,
|
|
5
|
+
* budget, history, diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { validateParams, toSessionDto, toBudgetDto, labelSchema } from './types.js';
|
|
9
|
+
import { RpcError, SessionNotFoundError, MethodNotFoundError, } from '../web-ui-types.js';
|
|
10
|
+
import { tokenStreamDispatch } from './token-stream-dispatch.js';
|
|
11
|
+
import { WebSessionTransport } from '../web-session-transport.js';
|
|
12
|
+
import { loadConfig } from '../../config/index.js';
|
|
13
|
+
import { createStandaloneSession } from '../../session/index.js';
|
|
14
|
+
import { shouldAutoSaveMemory } from '../../memory/auto-save.js';
|
|
15
|
+
import { BudgetExhaustedError } from '../../types/errors.js';
|
|
16
|
+
import { getTokenStreamBus } from '../../docker/token-stream-bus.js';
|
|
17
|
+
import * as logger from '../../logger.js';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Param validation schemas
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
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
|
+
});
|
|
31
|
+
const sessionSendSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Session dispatch
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
export async function sessionDispatch(ctx, method, params, client) {
|
|
36
|
+
// Delegate token stream methods to dedicated dispatch module
|
|
37
|
+
if (method.startsWith('sessions.subscribe') || method.startsWith('sessions.unsubscribe')) {
|
|
38
|
+
if (!client) {
|
|
39
|
+
throw new RpcError('INTERNAL_ERROR', 'Token stream methods require a WebSocket client');
|
|
40
|
+
}
|
|
41
|
+
return tokenStreamDispatch(ctx, method, params, client);
|
|
42
|
+
}
|
|
43
|
+
switch (method) {
|
|
44
|
+
case 'sessions.list':
|
|
45
|
+
return listSessions(ctx);
|
|
46
|
+
case 'sessions.get': {
|
|
47
|
+
const { label } = validateParams(labelSchema, params);
|
|
48
|
+
return getSession(ctx, label);
|
|
49
|
+
}
|
|
50
|
+
case 'sessions.create': {
|
|
51
|
+
const { persona, captureTraces } = validateParams(sessionCreateSchema, params);
|
|
52
|
+
return createWebSession(ctx, persona, captureTraces);
|
|
53
|
+
}
|
|
54
|
+
case 'sessions.end': {
|
|
55
|
+
const { label } = validateParams(labelSchema, params);
|
|
56
|
+
const endManaged = ctx.sessionManager.get(label);
|
|
57
|
+
const endSessionId = endManaged?.session.getInfo().id;
|
|
58
|
+
await ctx.sessionManager.end(label);
|
|
59
|
+
if (endSessionId)
|
|
60
|
+
getTokenStreamBus().endSession(endSessionId);
|
|
61
|
+
cleanupSessionQueue(ctx, label);
|
|
62
|
+
ctx.eventBus.emit('session.ended', { label, reason: 'user_ended' });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
case 'sessions.send': {
|
|
66
|
+
const { label, text } = validateParams(sessionSendSchema, params);
|
|
67
|
+
return sendToSession(ctx, label, text);
|
|
68
|
+
}
|
|
69
|
+
case 'sessions.budget': {
|
|
70
|
+
const { label } = validateParams(labelSchema, params);
|
|
71
|
+
const managed = ctx.sessionManager.get(label);
|
|
72
|
+
if (!managed)
|
|
73
|
+
throw new SessionNotFoundError(label);
|
|
74
|
+
return toBudgetDto(managed);
|
|
75
|
+
}
|
|
76
|
+
case 'sessions.history': {
|
|
77
|
+
const { label } = validateParams(labelSchema, params);
|
|
78
|
+
const managed = ctx.sessionManager.get(label);
|
|
79
|
+
if (!managed)
|
|
80
|
+
throw new SessionNotFoundError(label);
|
|
81
|
+
return managed.session.getHistory();
|
|
82
|
+
}
|
|
83
|
+
case 'sessions.diagnostics': {
|
|
84
|
+
const { label } = validateParams(labelSchema, params);
|
|
85
|
+
const managed = ctx.sessionManager.get(label);
|
|
86
|
+
if (!managed)
|
|
87
|
+
throw new SessionNotFoundError(label);
|
|
88
|
+
return managed.session.getDiagnosticLog();
|
|
89
|
+
}
|
|
90
|
+
default:
|
|
91
|
+
throw new MethodNotFoundError(method);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Helpers
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
/** Clean up session queue entry when session ends. */
|
|
98
|
+
function cleanupSessionQueue(ctx, label) {
|
|
99
|
+
ctx.sessionQueues.delete(label);
|
|
100
|
+
}
|
|
101
|
+
function listSessions(ctx) {
|
|
102
|
+
return ctx.sessionManager.all().map((m) => toSessionDto(m));
|
|
103
|
+
}
|
|
104
|
+
function getSession(ctx, label) {
|
|
105
|
+
const managed = ctx.sessionManager.get(label);
|
|
106
|
+
if (!managed)
|
|
107
|
+
throw new SessionNotFoundError(label);
|
|
108
|
+
return {
|
|
109
|
+
...toSessionDto(managed),
|
|
110
|
+
history: managed.session.getHistory(),
|
|
111
|
+
diagnosticLog: managed.session.getDiagnosticLog(),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function createWebSession(ctx, persona, captureTracesOverride) {
|
|
115
|
+
const webCount = ctx.sessionManager.byKind('web').length;
|
|
116
|
+
if (webCount >= ctx.maxConcurrentWebSessions) {
|
|
117
|
+
throw new RpcError('RATE_LIMITED', `Web session limit reached (max ${ctx.maxConcurrentWebSessions})`);
|
|
118
|
+
}
|
|
119
|
+
const config = loadConfig();
|
|
120
|
+
const transport = new WebSessionTransport({
|
|
121
|
+
eventBus: ctx.eventBus,
|
|
122
|
+
sessionManager: ctx.sessionManager,
|
|
123
|
+
autoSaveMemory: shouldAutoSaveMemory(config, { persona }),
|
|
124
|
+
dockerMode: ctx.mode.kind === 'docker',
|
|
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;
|
|
134
|
+
const session = await createStandaloneSession({
|
|
135
|
+
config,
|
|
136
|
+
mode: ctx.mode,
|
|
137
|
+
persona,
|
|
138
|
+
...(effectiveCapture !== undefined ? { captureTracesOverride: effectiveCapture } : {}),
|
|
139
|
+
onEscalation: transport.createEscalationHandler(),
|
|
140
|
+
onEscalationExpired: transport.createEscalationExpiredHandler(),
|
|
141
|
+
onEscalationResolved: transport.createEscalationResolvedHandler(),
|
|
142
|
+
onDiagnostic: transport.createDiagnosticHandler(),
|
|
143
|
+
});
|
|
144
|
+
const label = ctx.sessionManager.register(session, transport, { kind: 'web', persona });
|
|
145
|
+
transport.sessionLabel = label;
|
|
146
|
+
const runPromise = transport.run(session);
|
|
147
|
+
const managed = ctx.sessionManager.get(label);
|
|
148
|
+
if (managed) {
|
|
149
|
+
managed.runPromise = runPromise;
|
|
150
|
+
}
|
|
151
|
+
const sessionId = session.getInfo().id;
|
|
152
|
+
runPromise
|
|
153
|
+
.then(() => {
|
|
154
|
+
const m = ctx.sessionManager.get(label);
|
|
155
|
+
if (m) {
|
|
156
|
+
ctx.sessionManager.end(label).catch((err) => {
|
|
157
|
+
logger.error(`[WebUI] Failed to clean up session #${label}: ${String(err)}`);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
getTokenStreamBus().endSession(sessionId);
|
|
161
|
+
})
|
|
162
|
+
.catch((err) => {
|
|
163
|
+
logger.error(`[WebUI] Transport #${label} error: ${String(err)}`);
|
|
164
|
+
})
|
|
165
|
+
.finally(() => {
|
|
166
|
+
cleanupSessionQueue(ctx, label);
|
|
167
|
+
});
|
|
168
|
+
if (managed) {
|
|
169
|
+
ctx.eventBus.emit('session.created', toSessionDto(managed));
|
|
170
|
+
}
|
|
171
|
+
return { label };
|
|
172
|
+
}
|
|
173
|
+
function sendToSession(ctx, label, text) {
|
|
174
|
+
const managed = ctx.sessionManager.get(label);
|
|
175
|
+
if (!managed)
|
|
176
|
+
throw new SessionNotFoundError(label);
|
|
177
|
+
if (managed.source.kind !== 'web') {
|
|
178
|
+
throw new RpcError('INVALID_PARAMS', `Session #${label} is not a web session`);
|
|
179
|
+
}
|
|
180
|
+
const transport = managed.transport;
|
|
181
|
+
const prev = ctx.sessionQueues.get(label) ?? Promise.resolve();
|
|
182
|
+
const current = prev.then(async () => {
|
|
183
|
+
const turnNumber = managed.session.getInfo().turnCount + 1;
|
|
184
|
+
ctx.eventBus.emit('session.thinking', { label, turnNumber });
|
|
185
|
+
// Emit session status update so the frontend shows 'processing'
|
|
186
|
+
const freshManaged = ctx.sessionManager.get(label);
|
|
187
|
+
if (freshManaged) {
|
|
188
|
+
ctx.eventBus.emit('session.updated', toSessionDto(freshManaged));
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
const response = await transport.forwardMessage(text);
|
|
192
|
+
ctx.eventBus.emit('session.output', { label, text: response, turnNumber });
|
|
193
|
+
ctx.eventBus.emit('session.budget_update', { label, budget: toBudgetDto(managed) });
|
|
194
|
+
// Emit updated session so frontend picks up status change (e.g. back to 'ready')
|
|
195
|
+
const updatedManaged = ctx.sessionManager.get(label);
|
|
196
|
+
if (updatedManaged) {
|
|
197
|
+
ctx.eventBus.emit('session.updated', toSessionDto(updatedManaged));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
if (err instanceof BudgetExhaustedError) {
|
|
202
|
+
const budgetSessionId = managed.session.getInfo().id;
|
|
203
|
+
ctx.eventBus.emit('session.ended', { label, reason: `Budget exhausted: ${err.message}` });
|
|
204
|
+
await ctx.sessionManager.end(label);
|
|
205
|
+
getTokenStreamBus().endSession(budgetSessionId);
|
|
206
|
+
cleanupSessionQueue(ctx, label);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
210
|
+
ctx.eventBus.emit('session.output', { label, text: `Error: ${message}`, turnNumber });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
ctx.sessionQueues.set(label, current.catch((err) => {
|
|
215
|
+
logger.error(`[WebUI] Session #${label} queue error: ${err instanceof Error ? err.message : String(err)}`);
|
|
216
|
+
}));
|
|
217
|
+
return { accepted: true };
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=session-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/session-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token stream subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four token stream methods:
|
|
5
|
+
* - sessions.subscribeTokenStream (per-session)
|
|
6
|
+
* - sessions.unsubscribeTokenStream (per-session)
|
|
7
|
+
* - sessions.subscribeAllTokenStreams (global)
|
|
8
|
+
* - sessions.unsubscribeAllTokenStreams (global)
|
|
9
|
+
*
|
|
10
|
+
* Per-session methods resolve label to SessionId via sessionManager.
|
|
11
|
+
* Global methods use bus.subscribeAll via the bridge.
|
|
12
|
+
*/
|
|
13
|
+
import type { WebSocket as WsWebSocket } from 'ws';
|
|
14
|
+
import { type DispatchContext } from './types.js';
|
|
15
|
+
export declare function tokenStreamDispatch(ctx: DispatchContext, method: string, params: Record<string, unknown>, client: WsWebSocket): unknown;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token stream subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four token stream methods:
|
|
5
|
+
* - sessions.subscribeTokenStream (per-session)
|
|
6
|
+
* - sessions.unsubscribeTokenStream (per-session)
|
|
7
|
+
* - sessions.subscribeAllTokenStreams (global)
|
|
8
|
+
* - sessions.unsubscribeAllTokenStreams (global)
|
|
9
|
+
*
|
|
10
|
+
* Per-session methods resolve label to SessionId via sessionManager.
|
|
11
|
+
* Global methods use bus.subscribeAll via the bridge.
|
|
12
|
+
*/
|
|
13
|
+
import { validateParams, labelSchema } from './types.js';
|
|
14
|
+
import { SessionNotFoundError, MethodNotFoundError, RpcError } from '../web-ui-types.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Dispatch
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export function tokenStreamDispatch(ctx, method, params, client) {
|
|
19
|
+
const bridge = ctx.tokenStreamBridge;
|
|
20
|
+
if (!bridge) {
|
|
21
|
+
throw new RpcError('INTERNAL_ERROR', 'Token stream bridge not available');
|
|
22
|
+
}
|
|
23
|
+
switch (method) {
|
|
24
|
+
case 'sessions.subscribeTokenStream': {
|
|
25
|
+
const { label } = validateParams(labelSchema, params);
|
|
26
|
+
const managed = ctx.sessionManager.get(label);
|
|
27
|
+
if (!managed)
|
|
28
|
+
throw new SessionNotFoundError(label);
|
|
29
|
+
const sessionId = managed.session.getInfo().id;
|
|
30
|
+
bridge.addClient(client, label, sessionId);
|
|
31
|
+
return { subscribed: true };
|
|
32
|
+
}
|
|
33
|
+
case 'sessions.unsubscribeTokenStream': {
|
|
34
|
+
const { label } = validateParams(labelSchema, params);
|
|
35
|
+
bridge.removeClient(client, label);
|
|
36
|
+
return { unsubscribed: true };
|
|
37
|
+
}
|
|
38
|
+
case 'sessions.subscribeAllTokenStreams': {
|
|
39
|
+
bridge.addGlobalClient(client);
|
|
40
|
+
// Register all existing sessions so global events can resolve labels
|
|
41
|
+
for (const managed of ctx.sessionManager.all()) {
|
|
42
|
+
const sessionId = managed.session.getInfo().id;
|
|
43
|
+
bridge.registerSession(managed.label, sessionId);
|
|
44
|
+
}
|
|
45
|
+
return { subscribed: true };
|
|
46
|
+
}
|
|
47
|
+
case 'sessions.unsubscribeAllTokenStreams': {
|
|
48
|
+
bridge.removeGlobalClient(client);
|
|
49
|
+
return { unsubscribed: true };
|
|
50
|
+
}
|
|
51
|
+
default:
|
|
52
|
+
throw new MethodNotFoundError(method);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=token-stream-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-stream-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/token-stream-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAwB,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEzF,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,MAAc,EACd,MAA+B,EAC/B,MAAmB;IAEnB,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;IAC5E,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,+BAA+B,CAAC,CAAC,CAAC;YACrC,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC3C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9B,CAAC;QAED,KAAK,iCAAiC,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAChC,CAAC;QAED,KAAK,mCAAmC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/B,qEAAqE;YACrE,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9B,CAAC;QAED,KAAK,qCAAqC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAChC,CAAC;QAED;YACE,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types and utilities for dispatch sub-modules.
|
|
3
|
+
*
|
|
4
|
+
* The DispatchContext and validation helpers are used by all
|
|
5
|
+
* domain-specific dispatch modules (session, job, escalation, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import type { SessionManager, ManagedSession } from '../../session/session-manager.js';
|
|
9
|
+
import type { ControlRequestHandler } from '../../daemon/control-socket.js';
|
|
10
|
+
import type { SessionMode } from '../../session/types.js';
|
|
11
|
+
import type { TokenStreamBridge } from '../token-stream-bridge.js';
|
|
12
|
+
import type { WebEventBus } from '../web-event-bus.js';
|
|
13
|
+
import { type SessionDto, type BudgetSummaryDto, type DaemonStatusDto } from '../web-ui-types.js';
|
|
14
|
+
export declare const labelSchema: z.ZodObject<{
|
|
15
|
+
label: z.ZodNumber;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
export interface DispatchContext {
|
|
18
|
+
readonly handler: ControlRequestHandler;
|
|
19
|
+
readonly sessionManager: SessionManager;
|
|
20
|
+
readonly mode: SessionMode;
|
|
21
|
+
readonly eventBus: WebEventBus;
|
|
22
|
+
readonly maxConcurrentWebSessions: number;
|
|
23
|
+
/** @internal Sequencing queues per session -- managed by dispatch module. */
|
|
24
|
+
readonly sessionQueues: Map<number, Promise<void>>;
|
|
25
|
+
/** Bridge for per-client token stream subscriptions. */
|
|
26
|
+
tokenStreamBridge?: TokenStreamBridge;
|
|
27
|
+
/**
|
|
28
|
+
* Daemon-process capture-traces default. Used by `sessions.create`
|
|
29
|
+
* when the JSON-RPC payload does not include `captureTraces`. See
|
|
30
|
+
* docs/designs/mitm-token-trajectory-capture.md §10.
|
|
31
|
+
*/
|
|
32
|
+
readonly captureTracesDefault?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Policy-mutation authz gate. When false (the DEFAULT), the policy-mutation
|
|
35
|
+
* surface does not exist: every persona-mutation method
|
|
36
|
+
* (`compileStream` / `create` / `editConstitution` / `setMemory` / `delete` /
|
|
37
|
+
* `setBroadPolicyOptIn`) returns `POLICY_MUTATION_FORBIDDEN`. Read methods
|
|
38
|
+
* (`list` / `get` / `getCompile` / `listCompiles`) stay ungated.
|
|
39
|
+
*
|
|
40
|
+
* Wired (Phase 1c) via the 4-hop `--allow-policy-mutation` daemon flag,
|
|
41
|
+
* mirroring `captureTracesDefault`:
|
|
42
|
+
* daemon-command.ts (CommandSpec option + parseArgs + read + pass)
|
|
43
|
+
* -> IronCurtainDaemonOptions.allowPolicyMutation
|
|
44
|
+
* -> WebUiServerOptions.allowPolicyMutation
|
|
45
|
+
* -> dispatchCtx.allowPolicyMutation (web-ui-server.ts).
|
|
46
|
+
* Surfaced to the UI via `DaemonStatusDto.allowPolicyMutation` so the UI
|
|
47
|
+
* hides mutation controls. Off by default, CLI-only, not config-persisted.
|
|
48
|
+
*/
|
|
49
|
+
readonly allowPolicyMutation?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function validateParams<T>(schema: z.ZodType<T>, params: Record<string, unknown>): T;
|
|
52
|
+
export declare function toSessionDto(managed: ManagedSession): SessionDto;
|
|
53
|
+
export declare function toBudgetDto(managed: ManagedSession): BudgetSummaryDto;
|
|
54
|
+
export declare function buildStatusDto(ctx: DispatchContext): DaemonStatusDto;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types and utilities for dispatch sub-modules.
|
|
3
|
+
*
|
|
4
|
+
* The DispatchContext and validation helpers are used by all
|
|
5
|
+
* domain-specific dispatch modules (session, job, escalation, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { InvalidParamsError } from '../web-ui-types.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Shared param schemas
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export const labelSchema = z.object({ label: z.number().int().positive() });
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Param validation
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
export function validateParams(schema, params) {
|
|
17
|
+
const result = schema.safeParse(params);
|
|
18
|
+
if (!result.success) {
|
|
19
|
+
throw new InvalidParamsError(result.error.message);
|
|
20
|
+
}
|
|
21
|
+
return result.data;
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// DTO builders
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
export function toSessionDto(managed) {
|
|
27
|
+
const info = managed.session.getInfo();
|
|
28
|
+
const persona = managed.source.kind === 'web' ? managed.source.persona : undefined;
|
|
29
|
+
return {
|
|
30
|
+
label: managed.label,
|
|
31
|
+
source: managed.source,
|
|
32
|
+
status: info.status,
|
|
33
|
+
turnCount: info.turnCount,
|
|
34
|
+
createdAt: info.createdAt,
|
|
35
|
+
hasPendingEscalation: managed.pendingEscalation !== null,
|
|
36
|
+
messageInFlight: managed.messageInFlight,
|
|
37
|
+
budget: toBudgetDto(managed),
|
|
38
|
+
...(persona ? { persona } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function toBudgetDto(managed) {
|
|
42
|
+
const status = managed.session.getBudgetStatus();
|
|
43
|
+
return {
|
|
44
|
+
totalTokens: status.totalTokens,
|
|
45
|
+
stepCount: status.stepCount,
|
|
46
|
+
elapsedSeconds: status.elapsedSeconds,
|
|
47
|
+
estimatedCostUsd: status.estimatedCostUsd,
|
|
48
|
+
tokenTrackingAvailable: status.tokenTrackingAvailable,
|
|
49
|
+
limits: {
|
|
50
|
+
maxTotalTokens: status.limits.maxTotalTokens,
|
|
51
|
+
maxSteps: status.limits.maxSteps,
|
|
52
|
+
maxSessionSeconds: status.limits.maxSessionSeconds,
|
|
53
|
+
maxEstimatedCostUsd: status.limits.maxEstimatedCostUsd,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function buildStatusDto(ctx) {
|
|
58
|
+
const status = ctx.handler.getStatus();
|
|
59
|
+
return {
|
|
60
|
+
uptimeSeconds: status.uptimeSeconds,
|
|
61
|
+
jobs: status.jobs,
|
|
62
|
+
signalConnected: status.signalConnected,
|
|
63
|
+
webUiListening: true,
|
|
64
|
+
activeSessions: ctx.sessionManager.size,
|
|
65
|
+
nextFireTime: status.nextFireTime?.toISOString() ?? null,
|
|
66
|
+
// Phase 1c: surface the policy-mutation kill switch so the UI can hide
|
|
67
|
+
// mutation controls. Defaults to false (off) when the daemon was not
|
|
68
|
+
// launched with `--allow-policy-mutation`.
|
|
69
|
+
allowPolicyMutation: ctx.allowPolicyMutation ?? false,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow-related JSON-RPC method dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles all `workflows.*` methods: list, get, start, resume,
|
|
5
|
+
* abort, resolveGate, inspect, fileTree, fileContent, artifacts.
|
|
6
|
+
*/
|
|
7
|
+
import { type DispatchContext } from './types.js';
|
|
8
|
+
import { type WorkflowDetailDto, type PastRunDto, type MessageLogResponseDto, type LatestVerdictDto, type LiveWorkflowPhase, type PastRunPhase } from '../web-ui-types.js';
|
|
9
|
+
import type { PastRunLoadSuccess, WorkflowManager } from '../../workflow/workflow-manager.js';
|
|
10
|
+
import { type WorkflowId, type WorkflowCheckpoint, type WorkflowDefinition } from '../../workflow/types.js';
|
|
11
|
+
import { type MessageLogEntry } from '../../workflow/message-log.js';
|
|
12
|
+
import { type WorkflowRunSummary } from '../../workflow/workflow-discovery.js';
|
|
13
|
+
export interface WorkflowDispatchContext extends DispatchContext {
|
|
14
|
+
workflowManager?: WorkflowManager;
|
|
15
|
+
}
|
|
16
|
+
export declare function workflowDispatch(ctx: WorkflowDispatchContext, method: string, params: Record<string, unknown>): Promise<unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* Synthesizes a phase value for a checkpoint loaded from disk.
|
|
19
|
+
*
|
|
20
|
+
* Requires a defined `WorkflowCheckpoint`. For checkpoint-less past-run rows
|
|
21
|
+
* (i.e. directories where `checkpoint.json` is absent — e.g. runs completed
|
|
22
|
+
* before B3b persisted `finalStatus`), callers must use
|
|
23
|
+
* `synthesizePhaseFromMessageLog` instead.
|
|
24
|
+
*
|
|
25
|
+
* Resolution order:
|
|
26
|
+
* - If `isLive` is true, returns `'running'`.
|
|
27
|
+
* - Post-B3b checkpoints carry a canonical `finalStatus.phase`. When present
|
|
28
|
+
* and valid (matches a `PastRunPhase` value), return it directly —
|
|
29
|
+
* this short-circuits the legacy state-name heuristic.
|
|
30
|
+
* - Legacy pre-B3b checkpoints fall through to the state-name heuristic:
|
|
31
|
+
* - Terminal state in the definition: infer `'aborted'` from the
|
|
32
|
+
* conventional name pattern (`'aborted'` or contains `'abort'`);
|
|
33
|
+
* otherwise `'completed'`. Matches `handleWorkflowComplete` in the
|
|
34
|
+
* orchestrator.
|
|
35
|
+
* - Human-gate state: `'waiting_human'`.
|
|
36
|
+
* - Otherwise: `'interrupted'` (mid-run state with no live instance —
|
|
37
|
+
* typical of a daemon crash).
|
|
38
|
+
*/
|
|
39
|
+
export declare function computePastRunPhase(checkpoint: WorkflowCheckpoint, definition: WorkflowDefinition, isLive: boolean): LiveWorkflowPhase | PastRunPhase;
|
|
40
|
+
/**
|
|
41
|
+
* Synthesize a `PastRunPhase` for a checkpoint-less directory from its message log.
|
|
42
|
+
* `entries` must be chronological (oldest-first), matching `MessageLog.readAll()`.
|
|
43
|
+
*
|
|
44
|
+
* Per D6: the destination state of the last `state_transition` lives in the
|
|
45
|
+
* `event` field (orchestrator.handleTransition writes it there). For non-terminal,
|
|
46
|
+
* non-gate destinations, post-transition `quota_exhausted` → 'aborted',
|
|
47
|
+
* `transient_failure` → 'aborted', `error` → 'failed', none → 'interrupted'.
|
|
48
|
+
*/
|
|
49
|
+
export declare function synthesizePhaseFromMessageLog(entries: readonly MessageLogEntry[], definition: WorkflowDefinition): PastRunPhase;
|
|
50
|
+
/**
|
|
51
|
+
* `TransitionRecord` doesn't carry a structured verdict; the frontend populates
|
|
52
|
+
* `latestVerdict` from live `workflow.agent_completed` events. Past-run callers
|
|
53
|
+
* receive `undefined` until checkpoints capture verdict/confidence first-class.
|
|
54
|
+
*/
|
|
55
|
+
export declare function extractLatestVerdictFromTransitions(): LatestVerdictDto | undefined;
|
|
56
|
+
/** Assembles a `WorkflowDetailDto` from on-disk past-run objects (checkpoint or message-log fallback). */
|
|
57
|
+
export declare function buildDetailFromPastRun(id: WorkflowId, load: PastRunLoadSuccess, summary: WorkflowRunSummary): WorkflowDetailDto;
|
|
58
|
+
/** Map file extensions to language identifiers for syntax highlighting. */
|
|
59
|
+
export declare function inferLanguage(filePath: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Resolves a relative path within a workspace and validates containment.
|
|
62
|
+
* Prevents path traversal attacks.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveAndContain(workspacePath: string, relPath: string): string;
|
|
65
|
+
/** Assembles a `PastRunDto` from on-disk past-run objects (checkpoint or message-log fallback). */
|
|
66
|
+
export declare function buildPastRunDto(id: WorkflowId, load: PastRunLoadSuccess, summary: WorkflowRunSummary): PastRunDto;
|
|
67
|
+
/**
|
|
68
|
+
* Reads a page of {@link MessageLogEntry} records for a workflow with cursor
|
|
69
|
+
* pagination (per design decision D5).
|
|
70
|
+
*
|
|
71
|
+
* Existence semantics: the workflow must be either currently active in the
|
|
72
|
+
* orchestrator or recoverable from disk via {@link WorkflowManager.loadPastRun}.
|
|
73
|
+
* Workflows write their checkpoint+definition immediately on `start()`, so
|
|
74
|
+
* `loadPastRun` succeeds for live workflows too — this single check covers
|
|
75
|
+
* both the live and past-run cases. Throws `WORKFLOW_NOT_FOUND` when neither
|
|
76
|
+
* source has the id and `WORKFLOW_CORRUPTED` when the checkpoint or definition
|
|
77
|
+
* file is present but unparseable.
|
|
78
|
+
*
|
|
79
|
+
* Note: `MessageLog.readAll()` silently skips malformed JSONL lines (it's
|
|
80
|
+
* append-only and tolerant of truncated writes from crashes), so we cannot
|
|
81
|
+
* surface log-file corruption distinctly here. The corruption error class
|
|
82
|
+
* therefore reflects only checkpoint/definition issues, not log issues.
|
|
83
|
+
*
|
|
84
|
+
* Pagination shape: `entries` is filtered to `ts < before` when `before` is
|
|
85
|
+
* set, sorted descending by `ts` (newest first), then sliced to `limit`.
|
|
86
|
+
* `hasMore` is true iff `entries.length === limit` AND at least one entry
|
|
87
|
+
* with `ts < entries[entries.length - 1].ts` exists in the original log.
|
|
88
|
+
*
|
|
89
|
+
* Cost: v1 re-reads and re-parses the whole log on every page request. This
|
|
90
|
+
* is acceptable given typical message-log sizes (hundreds of entries); a
|
|
91
|
+
* future `MessageLog.readRange(opts)` API can stream from disk in reverse
|
|
92
|
+
* order if logs grow pathologically large. The `MessageLogResponseDto` shape
|
|
93
|
+
* is stable across that change.
|
|
94
|
+
*/
|
|
95
|
+
export declare function readMessageLogPage(manager: WorkflowManager, workflowId: WorkflowId, opts: {
|
|
96
|
+
before?: string;
|
|
97
|
+
limit: number;
|
|
98
|
+
}): MessageLogResponseDto;
|
|
99
|
+
/**
|
|
100
|
+
* Extracts a human-readable state name from an XState machine state snapshot.
|
|
101
|
+
* The machineState can be a string (simple state) or a nested object (compound state).
|
|
102
|
+
*/
|
|
103
|
+
export declare function extractLastState(machineState: unknown): string;
|