@provos/ironcurtain 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -8
- package/dist/auth/oauth-provider.js +1 -4
- package/dist/auth/oauth-provider.js.map +1 -1
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.js +162 -7
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +61 -0
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +528 -161
- package/dist/config/generated/test-scenarios.json +4810 -170
- package/dist/config/generated/tool-annotations.json +34 -47
- package/dist/config/index.d.ts +58 -0
- package/dist/config/index.js +97 -15
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +2 -2
- package/dist/config/paths.d.ts +175 -0
- package/dist/config/paths.js +308 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +7 -1
- package/dist/config/user-config.d.ts +53 -5
- package/dist/config/user-config.js +96 -30
- package/dist/config/user-config.js.map +1 -1
- package/dist/config/validate-policy-dir.d.ts +10 -0
- package/dist/config/validate-policy-dir.js +59 -0
- package/dist/config/validate-policy-dir.js.map +1 -0
- package/dist/cron/job-commands.js +22 -2
- package/dist/cron/job-commands.js.map +1 -1
- package/dist/cron/types.d.ts +16 -2
- package/dist/cron/types.js +1 -3
- package/dist/cron/types.js.map +1 -1
- package/dist/daemon/daemon-command.js +16 -2
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +44 -1
- package/dist/daemon/ironcurtain-daemon.js +210 -8
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/docker/adapters/claude-code.js +194 -20
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/goose.d.ts +12 -11
- package/dist/docker/adapters/goose.js +80 -27
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +178 -4
- package/dist/docker/agent-adapter.js +14 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/code-mode-proxy.d.ts +27 -0
- package/dist/docker/code-mode-proxy.js +3 -0
- package/dist/docker/code-mode-proxy.js.map +1 -1
- package/dist/docker/docker-agent-session.d.ts +113 -62
- package/dist/docker/docker-agent-session.js +242 -294
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +246 -21
- package/dist/docker/docker-infrastructure.js +520 -29
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +36 -1
- package/dist/docker/docker-manager.js +135 -30
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-progress-sink.d.ts +43 -0
- package/dist/docker/docker-progress-sink.js +299 -0
- package/dist/docker/docker-progress-sink.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +84 -1
- package/dist/docker/mitm-proxy.js +380 -18
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +46 -3
- package/dist/docker/oauth-credentials.js +56 -14
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.js +2 -2
- package/dist/docker/oauth-token-manager.js.map +1 -1
- package/dist/docker/orientation.d.ts +1 -1
- package/dist/docker/provider-config.d.ts +49 -2
- package/dist/docker/provider-config.js +202 -28
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/proxy-tools.d.ts +0 -2
- package/dist/docker/proxy-tools.js +2 -7
- package/dist/docker/proxy-tools.js.map +1 -1
- package/dist/docker/pty-session.d.ts +49 -1
- package/dist/docker/pty-session.js +199 -69
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +0 -2
- package/dist/docker/pty-types.js +0 -2
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/resource-limits.d.ts +125 -0
- package/dist/docker/resource-limits.js +200 -0
- package/dist/docker/resource-limits.js.map +1 -0
- package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
- package/dist/docker/spawn-with-idle-timeout.js +152 -0
- package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
- package/dist/docker/sse-extractor.d.ts +51 -0
- package/dist/docker/sse-extractor.js +303 -0
- package/dist/docker/sse-extractor.js.map +1 -0
- package/dist/docker/token-stream-bus.d.ts +83 -0
- package/dist/docker/token-stream-bus.js +98 -0
- package/dist/docker/token-stream-bus.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +71 -0
- package/dist/docker/token-stream-types.js +8 -0
- package/dist/docker/token-stream-types.js.map +1 -0
- package/dist/docker/types.d.ts +53 -6
- package/dist/doctor/checks.d.ts +138 -0
- package/dist/doctor/checks.js +511 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/doctor-command.d.ts +29 -0
- package/dist/doctor/doctor-command.js +160 -0
- package/dist/doctor/doctor-command.js.map +1 -0
- package/dist/doctor/mcp-liveness.d.ts +28 -0
- package/dist/doctor/mcp-liveness.js +84 -0
- package/dist/doctor/mcp-liveness.js.map +1 -0
- package/dist/doctor/oauth-checks.d.ts +23 -0
- package/dist/doctor/oauth-checks.js +157 -0
- package/dist/doctor/oauth-checks.js.map +1 -0
- package/dist/doctor/output.d.ts +26 -0
- package/dist/doctor/output.js +82 -0
- package/dist/doctor/output.js.map +1 -0
- package/dist/escalation/listener-command.js +0 -3
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/event-bus/typed-event-bus.d.ts +26 -0
- package/dist/event-bus/typed-event-bus.js +35 -0
- package/dist/event-bus/typed-event-bus.js.map +1 -0
- package/dist/index.js +24 -9
- package/dist/index.js.map +1 -1
- package/dist/logger.js +31 -2
- package/dist/logger.js.map +1 -1
- package/dist/memory/auto-save.d.ts +18 -4
- package/dist/memory/auto-save.js +46 -6
- package/dist/memory/auto-save.js.map +1 -1
- package/dist/memory/memory-policy.d.ts +41 -0
- package/dist/memory/memory-policy.js +36 -0
- package/dist/memory/memory-policy.js.map +1 -0
- package/dist/mux/mux-command.d.ts +10 -1
- package/dist/mux/mux-command.js +56 -35
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-renderer.js +2 -12
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/session-scanner.js +1 -2
- package/dist/mux/session-scanner.js.map +1 -1
- package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
- package/dist/{pipeline → observability}/llm-logger.js +8 -3
- package/dist/observability/llm-logger.js.map +1 -0
- package/dist/observe/observe-command.d.ts +12 -0
- package/dist/observe/observe-command.js +298 -0
- package/dist/observe/observe-command.js.map +1 -0
- package/dist/observe/observe-renderer.d.ts +24 -0
- package/dist/observe/observe-renderer.js +87 -0
- package/dist/observe/observe-renderer.js.map +1 -0
- package/dist/observe/observe-tui-rain.d.ts +42 -0
- package/dist/observe/observe-tui-rain.js +531 -0
- package/dist/observe/observe-tui-rain.js.map +1 -0
- package/dist/observe/observe-tui-text-panel.d.ts +46 -0
- package/dist/observe/observe-tui-text-panel.js +525 -0
- package/dist/observe/observe-tui-text-panel.js.map +1 -0
- package/dist/observe/observe-tui-types.d.ts +270 -0
- package/dist/observe/observe-tui-types.js +200 -0
- package/dist/observe/observe-tui-types.js.map +1 -0
- package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
- package/dist/observe/observe-tui-word-scorer.js +572 -0
- package/dist/observe/observe-tui-word-scorer.js.map +1 -0
- package/dist/observe/observe-tui.d.ts +59 -0
- package/dist/observe/observe-tui.js +592 -0
- package/dist/observe/observe-tui.js.map +1 -0
- package/dist/persona/memory-gate.d.ts +19 -0
- package/dist/persona/memory-gate.js +33 -0
- package/dist/persona/memory-gate.js.map +1 -0
- package/dist/persona/persona-command.js +41 -6
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/resolve.d.ts +22 -0
- package/dist/persona/resolve.js +45 -2
- package/dist/persona/resolve.js.map +1 -1
- package/dist/persona/types.d.ts +16 -0
- package/dist/pipeline/constitution-compiler.d.ts +25 -14
- package/dist/pipeline/constitution-compiler.js +107 -38
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/dynamic-list-types.d.ts +3 -6
- package/dist/pipeline/dynamic-list-types.js +3 -16
- package/dist/pipeline/dynamic-list-types.js.map +1 -1
- package/dist/pipeline/pipeline-runner.js +89 -50
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +1 -1
- package/dist/pipeline/pipeline-shared.js +3 -11
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/policy-verifier.js +16 -3
- package/dist/pipeline/policy-verifier.js.map +1 -1
- package/dist/pipeline/proxy-mcp-connections.js +17 -2
- package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
- package/dist/pipeline/scenario-generator.d.ts +4 -8
- package/dist/pipeline/scenario-generator.js +13 -46
- package/dist/pipeline/scenario-generator.js.map +1 -1
- package/dist/sandbox/index.d.ts +14 -0
- package/dist/sandbox/index.js +335 -116
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
- package/dist/sandbox/ironcurtain-protocol.js +185 -0
- package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
- package/dist/session/agent-session.d.ts +6 -0
- package/dist/session/agent-session.js +16 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/cli-transport.js +0 -6
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.d.ts +35 -14
- package/dist/session/index.js +324 -130
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +50 -13
- package/dist/session/preflight.js +252 -80
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +2 -5
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/session-manager.d.ts +61 -6
- package/dist/session/session-manager.js +72 -10
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-metadata.d.ts +21 -5
- package/dist/session/session-metadata.js +34 -12
- package/dist/session/session-metadata.js.map +1 -1
- package/dist/session/types.d.ts +311 -5
- package/dist/session/types.js +57 -1
- package/dist/session/types.js.map +1 -1
- package/dist/signal/setup-signal.js +13 -21
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +16 -1
- package/dist/signal/signal-bot-daemon.js +39 -27
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.js +7 -1
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/skills/discovery.d.ts +77 -0
- package/dist/skills/discovery.js +206 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/staging.d.ts +28 -0
- package/dist/skills/staging.js +68 -0
- package/dist/skills/staging.js.map +1 -0
- package/dist/skills/types.d.ts +46 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/trusted-process/approval-whitelist.d.ts +0 -2
- package/dist/trusted-process/approval-whitelist.js +17 -17
- package/dist/trusted-process/approval-whitelist.js.map +1 -1
- package/dist/trusted-process/async-mutex.d.ts +32 -0
- package/dist/trusted-process/async-mutex.js +50 -0
- package/dist/trusted-process/async-mutex.js.map +1 -0
- package/dist/trusted-process/audit-log.d.ts +38 -1
- package/dist/trusted-process/audit-log.js +82 -13
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.js +2 -1
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
- package/dist/trusted-process/control-server.d.ts +101 -0
- package/dist/trusted-process/control-server.js +282 -0
- package/dist/trusted-process/control-server.js.map +1 -0
- package/dist/trusted-process/domain-utils.d.ts +6 -6
- package/dist/trusted-process/domain-utils.js +7 -23
- package/dist/trusted-process/domain-utils.js.map +1 -1
- package/dist/trusted-process/error-prefixes.d.ts +16 -0
- package/dist/trusted-process/error-prefixes.js +17 -0
- package/dist/trusted-process/error-prefixes.js.map +1 -0
- package/dist/trusted-process/index.d.ts +40 -23
- package/dist/trusted-process/index.js +131 -225
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/list-matcher.d.ts +17 -0
- package/dist/trusted-process/list-matcher.js +31 -0
- package/dist/trusted-process/list-matcher.js.map +1 -0
- package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
- package/dist/trusted-process/mcp-client-manager.js +40 -45
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
- package/dist/trusted-process/mcp-proxy-server.js +166 -657
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +16 -4
- package/dist/trusted-process/policy-engine.js +90 -45
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/policy-roots.d.ts +6 -0
- package/dist/trusted-process/policy-roots.js +20 -0
- package/dist/trusted-process/policy-roots.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +12 -0
- package/dist/trusted-process/sandbox-integration.js +18 -0
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/tool-call-coordinator.d.ts +269 -0
- package/dist/trusted-process/tool-call-coordinator.js +508 -0
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
- package/dist/trusted-process/tool-call-pipeline.d.ts +205 -0
- package/dist/trusted-process/tool-call-pipeline.js +798 -0
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
- package/dist/trusted-process/tool-description-hints.d.ts +1 -1
- package/dist/types/argument-roles.d.ts +1 -1
- package/dist/types/argument-roles.js +14 -1
- package/dist/types/argument-roles.js.map +1 -1
- package/dist/types/audit.d.ts +9 -0
- package/dist/{session → types}/errors.d.ts +8 -2
- package/dist/{session → types}/errors.js +8 -2
- package/dist/types/errors.js.map +1 -0
- package/dist/types/reserved-servers.d.ts +11 -0
- package/dist/types/reserved-servers.js +12 -0
- package/dist/types/reserved-servers.js.map +1 -0
- package/dist/types/server-listing.d.ts +14 -0
- package/dist/types/server-listing.js +2 -0
- package/dist/types/server-listing.js.map +1 -0
- package/dist/types/slug.d.ts +2 -0
- package/dist/types/slug.js +2 -0
- package/dist/types/slug.js.map +1 -1
- package/dist/types/url-normalize.d.ts +16 -0
- package/dist/types/url-normalize.js +33 -0
- package/dist/types/url-normalize.js.map +1 -0
- package/dist/utils/error-message.d.ts +8 -0
- package/dist/utils/error-message.js +11 -0
- package/dist/utils/error-message.js.map +1 -0
- package/dist/utils/exec-error.d.ts +19 -0
- package/dist/utils/exec-error.js +16 -0
- package/dist/utils/exec-error.js.map +1 -0
- package/dist/utils/is-plain-object.d.ts +7 -0
- package/dist/utils/is-plain-object.js +12 -0
- package/dist/utils/is-plain-object.js.map +1 -0
- package/dist/utils/preflight-checks.d.ts +16 -0
- package/dist/utils/preflight-checks.js +178 -0
- package/dist/utils/preflight-checks.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
- package/dist/web-ui/dispatch/job-dispatch.js +83 -0
- package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +6 -0
- package/dist/web-ui/dispatch/persona-dispatch.js +116 -0
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
- package/dist/web-ui/dispatch/session-dispatch.js +201 -0
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
- package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/types.d.ts +31 -0
- package/dist/web-ui/dispatch/types.js +68 -0
- package/dist/web-ui/dispatch/types.js.map +1 -0
- package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js +925 -0
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
- package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
- package/dist/web-ui/json-rpc-dispatch.js +34 -0
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
- package/dist/web-ui/state-graph.d.ts +13 -0
- package/dist/web-ui/state-graph.js +82 -0
- package/dist/web-ui/state-graph.js.map +1 -0
- package/dist/web-ui/token-stream-bridge.d.ts +76 -0
- package/dist/web-ui/token-stream-bridge.js +265 -0
- package/dist/web-ui/token-stream-bridge.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +152 -0
- package/dist/web-ui/web-event-bus.js +19 -0
- package/dist/web-ui/web-event-bus.js.map +1 -0
- package/dist/web-ui/web-session-transport.d.ts +31 -0
- package/dist/web-ui/web-session-transport.js +109 -0
- package/dist/web-ui/web-session-transport.js.map +1 -0
- package/dist/web-ui/web-ui-server.d.ts +76 -0
- package/dist/web-ui/web-ui-server.js +461 -0
- package/dist/web-ui/web-ui-server.js.map +1 -0
- package/dist/web-ui/web-ui-types.d.ts +290 -0
- package/dist/web-ui/web-ui-types.js +32 -0
- package/dist/web-ui/web-ui-types.js.map +1 -0
- package/dist/web-ui/ws-utils.d.ts +5 -0
- package/dist/web-ui/ws-utils.js +12 -0
- package/dist/web-ui/ws-utils.js.map +1 -0
- package/dist/web-ui-static/assets/index-BFO5z1js.js +76 -0
- package/dist/web-ui-static/assets/index-CCUwrkIL.css +1 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
- package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
- package/dist/web-ui-static/index.html +14 -0
- package/dist/workflow/artifacts.d.ts +59 -0
- package/dist/workflow/artifacts.js +188 -0
- package/dist/workflow/artifacts.js.map +1 -0
- package/dist/workflow/checkpoint-selection.d.ts +34 -0
- package/dist/workflow/checkpoint-selection.js +48 -0
- package/dist/workflow/checkpoint-selection.js.map +1 -0
- package/dist/workflow/checkpoint.d.ts +35 -0
- package/dist/workflow/checkpoint.js +84 -0
- package/dist/workflow/checkpoint.js.map +1 -0
- package/dist/workflow/cli-support.d.ts +92 -0
- package/dist/workflow/cli-support.js +423 -0
- package/dist/workflow/cli-support.js.map +1 -0
- package/dist/workflow/definition-loader.d.ts +32 -0
- package/dist/workflow/definition-loader.js +56 -0
- package/dist/workflow/definition-loader.js.map +1 -0
- package/dist/workflow/discovery.d.ts +78 -0
- package/dist/workflow/discovery.js +203 -0
- package/dist/workflow/discovery.js.map +1 -0
- package/dist/workflow/errors.d.ts +66 -0
- package/dist/workflow/errors.js +49 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/guards.d.ts +8 -0
- package/dist/workflow/guards.js +38 -0
- package/dist/workflow/guards.js.map +1 -0
- package/dist/workflow/lint-integration.d.ts +64 -0
- package/dist/workflow/lint-integration.js +56 -0
- package/dist/workflow/lint-integration.js.map +1 -0
- package/dist/workflow/lint.d.ts +66 -0
- package/dist/workflow/lint.js +410 -0
- package/dist/workflow/lint.js.map +1 -0
- package/dist/workflow/machine-builder.d.ts +90 -0
- package/dist/workflow/machine-builder.js +485 -0
- package/dist/workflow/machine-builder.js.map +1 -0
- package/dist/workflow/message-log.d.ts +85 -0
- package/dist/workflow/message-log.js +40 -0
- package/dist/workflow/message-log.js.map +1 -0
- package/dist/workflow/orchestrator.d.ts +450 -0
- package/dist/workflow/orchestrator.js +1941 -0
- package/dist/workflow/orchestrator.js.map +1 -0
- package/dist/workflow/prompt-builder.d.ts +39 -0
- package/dist/workflow/prompt-builder.js +242 -0
- package/dist/workflow/prompt-builder.js.map +1 -0
- package/dist/workflow/run-state-command.d.ts +9 -0
- package/dist/workflow/run-state-command.js +414 -0
- package/dist/workflow/run-state-command.js.map +1 -0
- package/dist/workflow/run-state-debug-capture.d.ts +40 -0
- package/dist/workflow/run-state-debug-capture.js +101 -0
- package/dist/workflow/run-state-debug-capture.js.map +1 -0
- package/dist/workflow/status-parser.d.ts +68 -0
- package/dist/workflow/status-parser.js +259 -0
- package/dist/workflow/status-parser.js.map +1 -0
- package/dist/workflow/types.d.ts +498 -0
- package/dist/workflow/types.js +83 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validate.d.ts +58 -0
- package/dist/workflow/validate.js +499 -0
- package/dist/workflow/validate.js.map +1 -0
- package/dist/workflow/workflow-command.d.ts +26 -0
- package/dist/workflow/workflow-command.js +648 -0
- package/dist/workflow/workflow-command.js.map +1 -0
- package/dist/workflow/workflow-discovery.d.ts +25 -0
- package/dist/workflow/workflow-discovery.js +100 -0
- package/dist/workflow/workflow-discovery.js.map +1 -0
- package/dist/workflow/workflow-manager.d.ts +122 -0
- package/dist/workflow/workflow-manager.js +308 -0
- package/dist/workflow/workflow-manager.js.map +1 -0
- package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +89 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
- package/dist/workflow/worktree.d.ts +43 -0
- package/dist/workflow/worktree.js +106 -0
- package/dist/workflow/worktree.js.map +1 -0
- package/docker/Dockerfile.base +9 -0
- package/docker/Dockerfile.base.arm64 +9 -0
- package/docker/entrypoint-claude-code.sh +46 -0
- package/docker/entrypoint-goose.sh +25 -0
- package/package.json +19 -8
- package/packages/web-ui/README.md +113 -0
- package/packages/web-ui/docs/workflow-state-machine.png +0 -0
- package/src/config/generated/compiled-policy.json +528 -161
- package/src/config/generated/test-scenarios.json +4810 -170
- package/src/config/generated/tool-annotations.json +34 -47
- package/src/config/mcp-servers.json +2 -2
- package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
- package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
- package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
- package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
- package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +89 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
- package/dist/pipeline/llm-logger.js.map +0 -1
- package/dist/session/errors.js.map +0 -1
|
@@ -12,6 +12,24 @@
|
|
|
12
12
|
import type { Session } from './types.js';
|
|
13
13
|
import type { Transport } from './transport.js';
|
|
14
14
|
import type { JobId } from '../cron/types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Minimal escalation data stored on a ManagedSession. Allows
|
|
17
|
+
* late-connecting clients (e.g. a new browser tab) to enumerate
|
|
18
|
+
* pending escalations without having received the original event.
|
|
19
|
+
*/
|
|
20
|
+
export interface PendingEscalationData {
|
|
21
|
+
readonly escalationId: string;
|
|
22
|
+
readonly sessionLabel: number;
|
|
23
|
+
readonly toolName: string;
|
|
24
|
+
readonly serverName: string;
|
|
25
|
+
readonly arguments: Record<string, unknown>;
|
|
26
|
+
readonly reason: string;
|
|
27
|
+
readonly context?: Record<string, string>;
|
|
28
|
+
readonly whitelistCandidates?: readonly {
|
|
29
|
+
readonly description: string;
|
|
30
|
+
}[];
|
|
31
|
+
readonly receivedAt: string;
|
|
32
|
+
}
|
|
15
33
|
/**
|
|
16
34
|
* Source discriminant for managed sessions.
|
|
17
35
|
* Determines cleanup behavior, notification routing, and
|
|
@@ -21,6 +39,8 @@ import type { JobId } from '../cron/types.js';
|
|
|
21
39
|
* Accepts follow-up messages via forwardToSession().
|
|
22
40
|
* - 'cron': headless session created by the cron scheduler.
|
|
23
41
|
* Does NOT accept follow-up messages.
|
|
42
|
+
* - 'web': interactive session created via the web UI.
|
|
43
|
+
* Always targeted by explicit label (no currentLabel focus).
|
|
24
44
|
*/
|
|
25
45
|
export type SessionSource = {
|
|
26
46
|
readonly kind: 'signal';
|
|
@@ -28,6 +48,9 @@ export type SessionSource = {
|
|
|
28
48
|
readonly kind: 'cron';
|
|
29
49
|
readonly jobId: JobId;
|
|
30
50
|
readonly jobName: string;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: 'web';
|
|
53
|
+
readonly persona?: string;
|
|
31
54
|
};
|
|
32
55
|
/**
|
|
33
56
|
* Unified managed session entry. Used for both Signal-initiated
|
|
@@ -43,7 +66,8 @@ export interface ManagedSession {
|
|
|
43
66
|
readonly transport: Transport;
|
|
44
67
|
readonly source: SessionSource;
|
|
45
68
|
messageInFlight: boolean;
|
|
46
|
-
|
|
69
|
+
/** Full escalation data for late-connecting clients and expiry handling. */
|
|
70
|
+
pendingEscalation: PendingEscalationData | null;
|
|
47
71
|
escalationResolving: boolean;
|
|
48
72
|
/**
|
|
49
73
|
* The promise returned by transport.run(). When set, SessionManager.end()
|
|
@@ -52,6 +76,10 @@ export interface ManagedSession {
|
|
|
52
76
|
*/
|
|
53
77
|
runPromise: Promise<void> | null;
|
|
54
78
|
}
|
|
79
|
+
export interface EscalationResolutionResult {
|
|
80
|
+
readonly resolved: boolean;
|
|
81
|
+
readonly reason?: 'not_found' | 'already_resolving';
|
|
82
|
+
}
|
|
55
83
|
/**
|
|
56
84
|
* Owns all managed session state. Both SignalBotDaemon and
|
|
57
85
|
* CronScheduler delegate to this class for session registration,
|
|
@@ -59,8 +87,14 @@ export interface ManagedSession {
|
|
|
59
87
|
*
|
|
60
88
|
* Invariants:
|
|
61
89
|
* - Labels are monotonically increasing integers starting at 1.
|
|
62
|
-
* - At most one session exists per label.
|
|
90
|
+
* - At most one registered session exists per label.
|
|
63
91
|
* - currentLabel is always either null or a valid label in the map.
|
|
92
|
+
*
|
|
93
|
+
* Label space is shared with workflow-owned agent sessions via
|
|
94
|
+
* `reserveLabel()` — those labels are live at the TokenStreamBridge
|
|
95
|
+
* but have no entry in this manager's `sessions` map. Code that
|
|
96
|
+
* iterates `sessions` or calls `end(label)` will silently skip them;
|
|
97
|
+
* their lifecycle is owned by the workflow orchestrator.
|
|
64
98
|
*/
|
|
65
99
|
export declare class SessionManager {
|
|
66
100
|
private sessions;
|
|
@@ -70,15 +104,23 @@ export declare class SessionManager {
|
|
|
70
104
|
* When a Signal message arrives without an explicit #N prefix, it
|
|
71
105
|
* is routed to this session.
|
|
72
106
|
*
|
|
73
|
-
* Only updated by register() for Signal sessions. Cron
|
|
74
|
-
* do not steal Signal focus.
|
|
107
|
+
* Only updated by register() for Signal sessions. Cron and web
|
|
108
|
+
* sessions do not steal Signal focus.
|
|
75
109
|
*/
|
|
76
110
|
currentLabel: number | null;
|
|
111
|
+
/**
|
|
112
|
+
* Reserves a fresh label without registering a session. Exists so
|
|
113
|
+
* that non-managed sessions (workflow-owned agent sessions, which
|
|
114
|
+
* run without a Transport) can share the same label space as
|
|
115
|
+
* managed sessions. A single label authority avoids collisions in
|
|
116
|
+
* the TokenStreamBridge, which keys per-session state by label.
|
|
117
|
+
*/
|
|
118
|
+
reserveLabel(): number;
|
|
77
119
|
/**
|
|
78
120
|
* Registers a new session and returns its assigned label.
|
|
79
121
|
*
|
|
80
122
|
* For Signal sessions: sets currentLabel to the new session.
|
|
81
|
-
* For cron sessions: currentLabel is NOT changed.
|
|
123
|
+
* For cron/web sessions: currentLabel is NOT changed.
|
|
82
124
|
*/
|
|
83
125
|
register(session: Session, transport: Transport, source: SessionSource): number;
|
|
84
126
|
/**
|
|
@@ -98,11 +140,24 @@ export declare class SessionManager {
|
|
|
98
140
|
/** Returns the number of active sessions. */
|
|
99
141
|
get size(): number;
|
|
100
142
|
/** Records that a session has a pending escalation. */
|
|
101
|
-
setPendingEscalation(label: number,
|
|
143
|
+
setPendingEscalation(label: number, escalation: PendingEscalationData | string): void;
|
|
102
144
|
/** Clears a session's pending escalation. */
|
|
103
145
|
clearPendingEscalation(label: number): void;
|
|
104
146
|
/** Returns sessions that have pending escalations. */
|
|
105
147
|
withPendingEscalation(): readonly ManagedSession[];
|
|
148
|
+
/** Finds a session by pending escalation ID. */
|
|
149
|
+
findByEscalation(escalationId: string): ManagedSession | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* Resolves a pending escalation on any session. Encapsulates the
|
|
152
|
+
* escalationResolving guard, the resolveEscalation call, and the
|
|
153
|
+
* clearPendingEscalation cleanup.
|
|
154
|
+
*
|
|
155
|
+
* This is the single codepath for escalation resolution. All three
|
|
156
|
+
* transports (Signal, web, cron auto-deny) call through here.
|
|
157
|
+
*/
|
|
158
|
+
resolveSessionEscalation(escalationId: string, decision: 'approved' | 'denied', options?: {
|
|
159
|
+
whitelistSelection?: number;
|
|
160
|
+
}): Promise<EscalationResolutionResult>;
|
|
106
161
|
/**
|
|
107
162
|
* Finds the most recently registered Signal session label.
|
|
108
163
|
* Returns null if no Signal sessions exist.
|
|
@@ -17,8 +17,14 @@ import * as logger from '../logger.js';
|
|
|
17
17
|
*
|
|
18
18
|
* Invariants:
|
|
19
19
|
* - Labels are monotonically increasing integers starting at 1.
|
|
20
|
-
* - At most one session exists per label.
|
|
20
|
+
* - At most one registered session exists per label.
|
|
21
21
|
* - currentLabel is always either null or a valid label in the map.
|
|
22
|
+
*
|
|
23
|
+
* Label space is shared with workflow-owned agent sessions via
|
|
24
|
+
* `reserveLabel()` — those labels are live at the TokenStreamBridge
|
|
25
|
+
* but have no entry in this manager's `sessions` map. Code that
|
|
26
|
+
* iterates `sessions` or calls `end(label)` will silently skip them;
|
|
27
|
+
* their lifecycle is owned by the workflow orchestrator.
|
|
22
28
|
*/
|
|
23
29
|
export class SessionManager {
|
|
24
30
|
sessions = new Map();
|
|
@@ -28,15 +34,25 @@ export class SessionManager {
|
|
|
28
34
|
* When a Signal message arrives without an explicit #N prefix, it
|
|
29
35
|
* is routed to this session.
|
|
30
36
|
*
|
|
31
|
-
* Only updated by register() for Signal sessions. Cron
|
|
32
|
-
* do not steal Signal focus.
|
|
37
|
+
* Only updated by register() for Signal sessions. Cron and web
|
|
38
|
+
* sessions do not steal Signal focus.
|
|
33
39
|
*/
|
|
34
40
|
currentLabel = null;
|
|
41
|
+
/**
|
|
42
|
+
* Reserves a fresh label without registering a session. Exists so
|
|
43
|
+
* that non-managed sessions (workflow-owned agent sessions, which
|
|
44
|
+
* run without a Transport) can share the same label space as
|
|
45
|
+
* managed sessions. A single label authority avoids collisions in
|
|
46
|
+
* the TokenStreamBridge, which keys per-session state by label.
|
|
47
|
+
*/
|
|
48
|
+
reserveLabel() {
|
|
49
|
+
return this.nextLabel++;
|
|
50
|
+
}
|
|
35
51
|
/**
|
|
36
52
|
* Registers a new session and returns its assigned label.
|
|
37
53
|
*
|
|
38
54
|
* For Signal sessions: sets currentLabel to the new session.
|
|
39
|
-
* For cron sessions: currentLabel is NOT changed.
|
|
55
|
+
* For cron/web sessions: currentLabel is NOT changed.
|
|
40
56
|
*/
|
|
41
57
|
register(session, transport, source) {
|
|
42
58
|
const label = this.nextLabel++;
|
|
@@ -46,7 +62,7 @@ export class SessionManager {
|
|
|
46
62
|
transport,
|
|
47
63
|
source,
|
|
48
64
|
messageInFlight: false,
|
|
49
|
-
|
|
65
|
+
pendingEscalation: null,
|
|
50
66
|
escalationResolving: false,
|
|
51
67
|
runPromise: null,
|
|
52
68
|
};
|
|
@@ -114,23 +130,69 @@ export class SessionManager {
|
|
|
114
130
|
return this.sessions.size;
|
|
115
131
|
}
|
|
116
132
|
/** Records that a session has a pending escalation. */
|
|
117
|
-
setPendingEscalation(label,
|
|
133
|
+
setPendingEscalation(label, escalation) {
|
|
118
134
|
const managed = this.sessions.get(label);
|
|
119
|
-
if (managed)
|
|
120
|
-
|
|
135
|
+
if (!managed)
|
|
136
|
+
return;
|
|
137
|
+
if (typeof escalation === 'string') {
|
|
138
|
+
// Backward compat: Signal transport passes just the ID
|
|
139
|
+
managed.pendingEscalation = {
|
|
140
|
+
escalationId: escalation,
|
|
141
|
+
sessionLabel: label,
|
|
142
|
+
toolName: '',
|
|
143
|
+
serverName: '',
|
|
144
|
+
arguments: {},
|
|
145
|
+
reason: '',
|
|
146
|
+
receivedAt: new Date().toISOString(),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
managed.pendingEscalation = escalation;
|
|
121
151
|
}
|
|
122
152
|
}
|
|
123
153
|
/** Clears a session's pending escalation. */
|
|
124
154
|
clearPendingEscalation(label) {
|
|
125
155
|
const managed = this.sessions.get(label);
|
|
126
156
|
if (managed) {
|
|
127
|
-
managed.
|
|
157
|
+
managed.pendingEscalation = null;
|
|
128
158
|
managed.escalationResolving = false;
|
|
129
159
|
}
|
|
130
160
|
}
|
|
131
161
|
/** Returns sessions that have pending escalations. */
|
|
132
162
|
withPendingEscalation() {
|
|
133
|
-
return [...this.sessions.values()].filter((m) => m.
|
|
163
|
+
return [...this.sessions.values()].filter((m) => m.pendingEscalation !== null);
|
|
164
|
+
}
|
|
165
|
+
/** Finds a session by pending escalation ID. */
|
|
166
|
+
findByEscalation(escalationId) {
|
|
167
|
+
return [...this.sessions.values()].find((m) => m.pendingEscalation?.escalationId === escalationId);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Resolves a pending escalation on any session. Encapsulates the
|
|
171
|
+
* escalationResolving guard, the resolveEscalation call, and the
|
|
172
|
+
* clearPendingEscalation cleanup.
|
|
173
|
+
*
|
|
174
|
+
* This is the single codepath for escalation resolution. All three
|
|
175
|
+
* transports (Signal, web, cron auto-deny) call through here.
|
|
176
|
+
*/
|
|
177
|
+
async resolveSessionEscalation(escalationId, decision, options) {
|
|
178
|
+
const managed = this.findByEscalation(escalationId);
|
|
179
|
+
if (!managed) {
|
|
180
|
+
return { resolved: false, reason: 'not_found' };
|
|
181
|
+
}
|
|
182
|
+
if (managed.escalationResolving) {
|
|
183
|
+
return { resolved: false, reason: 'already_resolving' };
|
|
184
|
+
}
|
|
185
|
+
managed.escalationResolving = true;
|
|
186
|
+
try {
|
|
187
|
+
await managed.session.resolveEscalation(escalationId, decision, options);
|
|
188
|
+
return { resolved: true };
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
managed.escalationResolving = false;
|
|
192
|
+
if (managed.pendingEscalation?.escalationId === escalationId) {
|
|
193
|
+
managed.pendingEscalation = null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
134
196
|
}
|
|
135
197
|
/**
|
|
136
198
|
* Finds the most recently registered Signal session label.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,29 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { SessionMetadata } from './types.js';
|
|
8
8
|
/**
|
|
9
|
-
* Writes session metadata to
|
|
10
|
-
* (
|
|
9
|
+
* Writes session metadata to an explicit path. Primary API used by
|
|
10
|
+
* borrow-mode callers (e.g., workflow per-state dirs) that don't live
|
|
11
|
+
* under `{home}/sessions/{sessionId}/`.
|
|
12
|
+
*
|
|
13
|
+
* No-ops if the file already exists (idempotent for retried session
|
|
14
|
+
* creation). Uses `wx` flag to atomically fail on existence rather than
|
|
15
|
+
* stat-then-write (TOCTOU-safe).
|
|
16
|
+
*/
|
|
17
|
+
export declare function saveSessionMetadataTo(path: string, metadata: SessionMetadata): void;
|
|
18
|
+
/**
|
|
19
|
+
* Writes session metadata for a session ID. Thin wrapper around
|
|
20
|
+
* `saveSessionMetadataTo` that derives the path from the session ID.
|
|
11
21
|
*/
|
|
12
22
|
export declare function saveSessionMetadata(sessionId: string, metadata: SessionMetadata): void;
|
|
13
23
|
/**
|
|
14
|
-
* Reads session metadata from
|
|
15
|
-
*
|
|
16
|
-
*
|
|
24
|
+
* Reads session metadata from an explicit path. Used by callers (e.g. workflow
|
|
25
|
+
* per-state metadata under workflow-runs) that don't live under the standard
|
|
26
|
+
* sessions directory layout. Returns undefined for missing files or invalid JSON.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadSessionMetadataFromPath(path: string): SessionMetadata | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Reads session metadata for a session ID. Thin wrapper that derives the path
|
|
31
|
+
* from the session ID. Graceful for old sessions created before metadata
|
|
32
|
+
* persistence was added.
|
|
17
33
|
*/
|
|
18
34
|
export declare function loadSessionMetadata(sessionId: string): SessionMetadata | undefined;
|
|
@@ -4,25 +4,39 @@
|
|
|
4
4
|
* Written once when a session is created; read back on --resume so
|
|
5
5
|
* the session continues with the same settings.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
8
8
|
import { getSessionMetadataPath } from '../config/paths.js';
|
|
9
9
|
/**
|
|
10
|
-
* Writes session metadata to
|
|
11
|
-
* (
|
|
10
|
+
* Writes session metadata to an explicit path. Primary API used by
|
|
11
|
+
* borrow-mode callers (e.g., workflow per-state dirs) that don't live
|
|
12
|
+
* under `{home}/sessions/{sessionId}/`.
|
|
13
|
+
*
|
|
14
|
+
* No-ops if the file already exists (idempotent for retried session
|
|
15
|
+
* creation). Uses `wx` flag to atomically fail on existence rather than
|
|
16
|
+
* stat-then-write (TOCTOU-safe).
|
|
17
|
+
*/
|
|
18
|
+
export function saveSessionMetadataTo(path, metadata) {
|
|
19
|
+
try {
|
|
20
|
+
writeFileSync(path, JSON.stringify(metadata, null, 2) + '\n', { flag: 'wx', encoding: 'utf-8' });
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err.code !== 'EEXIST')
|
|
24
|
+
throw err;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Writes session metadata for a session ID. Thin wrapper around
|
|
29
|
+
* `saveSessionMetadataTo` that derives the path from the session ID.
|
|
12
30
|
*/
|
|
13
31
|
export function saveSessionMetadata(sessionId, metadata) {
|
|
14
|
-
|
|
15
|
-
if (existsSync(path))
|
|
16
|
-
return;
|
|
17
|
-
writeFileSync(path, JSON.stringify(metadata, null, 2) + '\n', 'utf-8');
|
|
32
|
+
saveSessionMetadataTo(getSessionMetadataPath(sessionId), metadata);
|
|
18
33
|
}
|
|
19
34
|
/**
|
|
20
|
-
* Reads session metadata from
|
|
21
|
-
*
|
|
22
|
-
*
|
|
35
|
+
* Reads session metadata from an explicit path. Used by callers (e.g. workflow
|
|
36
|
+
* per-state metadata under workflow-runs) that don't live under the standard
|
|
37
|
+
* sessions directory layout. Returns undefined for missing files or invalid JSON.
|
|
23
38
|
*/
|
|
24
|
-
export function
|
|
25
|
-
const path = getSessionMetadataPath(sessionId);
|
|
39
|
+
export function loadSessionMetadataFromPath(path) {
|
|
26
40
|
try {
|
|
27
41
|
const raw = readFileSync(path, 'utf-8');
|
|
28
42
|
return JSON.parse(raw);
|
|
@@ -31,4 +45,12 @@ export function loadSessionMetadata(sessionId) {
|
|
|
31
45
|
return undefined;
|
|
32
46
|
}
|
|
33
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Reads session metadata for a session ID. Thin wrapper that derives the path
|
|
50
|
+
* from the session ID. Graceful for old sessions created before metadata
|
|
51
|
+
* persistence was added.
|
|
52
|
+
*/
|
|
53
|
+
export function loadSessionMetadata(sessionId) {
|
|
54
|
+
return loadSessionMetadataFromPath(getSessionMetadataPath(sessionId));
|
|
55
|
+
}
|
|
34
56
|
//# sourceMappingURL=session-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-metadata.js","sourceRoot":"","sources":["../../src/session/session-metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-metadata.js","sourceRoot":"","sources":["../../src/session/session-metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,QAAyB;IAC3E,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,QAAyB;IAC9E,qBAAqB,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,2BAA2B,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC"}
|