@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,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ironcurtain workflow run-state` — runs a single workflow agent state once
|
|
3
|
+
* against a pre-staged artifact directory. Reuses the start-time staging and
|
|
4
|
+
* session-factory seams; deliberately skips the orchestrator, journal,
|
|
5
|
+
* checkpoint, and transition machinery.
|
|
6
|
+
*/
|
|
7
|
+
import { cpSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { resolve } from 'node:path';
|
|
9
|
+
import { getIronCurtainHome } from '../config/paths.js';
|
|
10
|
+
import { formatHelp } from '../cli-help.js';
|
|
11
|
+
import { createInitialContext } from './machine-builder.js';
|
|
12
|
+
import { resolveWorkflowPath, getWorkflowPackageDir } from './discovery.js';
|
|
13
|
+
import { buildAgentCommand } from './prompt-builder.js';
|
|
14
|
+
import { parseAgentStatus, AgentStatusParseError } from './status-parser.js';
|
|
15
|
+
import { parseArtifactRef } from './validate.js';
|
|
16
|
+
import { stageWorkflowSkillsAtStart } from './orchestrator.js';
|
|
17
|
+
import { parseArgsStrict, runCliPreflightLint } from './cli-shared.js';
|
|
18
|
+
import { WORKFLOW_ARTIFACT_DIR, resolveWorkflowSkillsOptions } from './types.js';
|
|
19
|
+
import { createWorkflowSessionFactory, writeStderr, writeStdout, BOLD, CYAN, DIM, GREEN, RED, RESET, YELLOW, } from './cli-support.js';
|
|
20
|
+
import { captureContainerLogs, captureConversationLogs, resolveCapturePaths, } from './run-state-debug-capture.js';
|
|
21
|
+
import { bundleIdFromSessionId, createAgentConversationId } from '../session/types.js';
|
|
22
|
+
function printCaptureLocations(target, paths) {
|
|
23
|
+
const write = target === 'stdout' ? writeStdout : writeStderr;
|
|
24
|
+
write(`${DIM}Container logs: ${paths.containerLogsPath}${RESET}`);
|
|
25
|
+
write(`${DIM}Conversation logs: ${paths.claudeLogsDir}${RESET}`);
|
|
26
|
+
}
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Help spec
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
export const runStateSpec = {
|
|
31
|
+
name: 'ironcurtain workflow run-state',
|
|
32
|
+
description: 'Run a single workflow agent state once against pre-staged artifacts',
|
|
33
|
+
usage: ['ironcurtain workflow run-state <name-or-path> <state> --artifacts <dir> [options]'],
|
|
34
|
+
options: [
|
|
35
|
+
{ flag: 'artifacts', description: 'Directory containing pre-staged artifact subdirs', placeholder: '<dir>' },
|
|
36
|
+
{
|
|
37
|
+
flag: 'workspace',
|
|
38
|
+
description: 'Source tree to stage alongside .workflow/ (excludes top-level .workflow/ from the copy)',
|
|
39
|
+
placeholder: '<dir>',
|
|
40
|
+
},
|
|
41
|
+
{ flag: 'directive', description: 'Inline scoping directive from a synthetic prior agent', placeholder: '<text>' },
|
|
42
|
+
{ flag: 'directive-file', description: 'File containing the scoping directive', placeholder: '<path>' },
|
|
43
|
+
{
|
|
44
|
+
flag: 'output',
|
|
45
|
+
description: 'Output dir for staged workspace (default: ~/.ironcurtain/debug-runs/...)',
|
|
46
|
+
placeholder: '<dir>',
|
|
47
|
+
},
|
|
48
|
+
{ flag: 'mode', description: 'Override settings.mode (builtin or docker)', placeholder: '<mode>' },
|
|
49
|
+
{
|
|
50
|
+
flag: 'task',
|
|
51
|
+
description: 'Inline task description (overrides artifacts/task/description.md)',
|
|
52
|
+
placeholder: '<text>',
|
|
53
|
+
},
|
|
54
|
+
{ flag: 'task-file', description: 'File containing task description', placeholder: '<path>' },
|
|
55
|
+
{ flag: 'model', description: 'Override the agent model', placeholder: '<model-id>' },
|
|
56
|
+
{ flag: 'no-lint', description: 'Skip pre-flight linting' },
|
|
57
|
+
{ flag: 'help', short: 'h', description: 'Show this help message' },
|
|
58
|
+
],
|
|
59
|
+
examples: [
|
|
60
|
+
'ironcurtain workflow run-state vuln-discovery review --artifacts ~/src/libtiff/.workflow',
|
|
61
|
+
'ironcurtain workflow run-state vuln-discovery review --workspace ~/src/libtiff --artifacts ~/src/libtiff/.workflow',
|
|
62
|
+
'ironcurtain workflow run-state vuln-discovery review --artifacts ~/src/libtiff/.workflow --directive "focus on the PIXARLOG finding"',
|
|
63
|
+
'ironcurtain workflow run-state vuln-discovery review --artifacts ~/src/libtiff/.workflow --mode builtin',
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
function parseRunStateArgs(args) {
|
|
67
|
+
const { values, positionals } = parseArgsStrict({
|
|
68
|
+
args,
|
|
69
|
+
options: {
|
|
70
|
+
artifacts: { type: 'string' },
|
|
71
|
+
workspace: { type: 'string' },
|
|
72
|
+
directive: { type: 'string' },
|
|
73
|
+
'directive-file': { type: 'string' },
|
|
74
|
+
output: { type: 'string' },
|
|
75
|
+
mode: { type: 'string' },
|
|
76
|
+
task: { type: 'string' },
|
|
77
|
+
'task-file': { type: 'string' },
|
|
78
|
+
model: { type: 'string' },
|
|
79
|
+
'no-lint': { type: 'boolean' },
|
|
80
|
+
help: { type: 'boolean', short: 'h' },
|
|
81
|
+
},
|
|
82
|
+
allowPositionals: true,
|
|
83
|
+
});
|
|
84
|
+
if (values.help)
|
|
85
|
+
return 'help';
|
|
86
|
+
const definitionRef = positionals[0];
|
|
87
|
+
const stateId = positionals[1];
|
|
88
|
+
if (!definitionRef || !stateId) {
|
|
89
|
+
writeStderr(`${RED}Usage: ironcurtain workflow run-state <name-or-path> <state> --artifacts <dir>${RESET}`);
|
|
90
|
+
process.exit(2);
|
|
91
|
+
}
|
|
92
|
+
const artifactsDir = values.artifacts;
|
|
93
|
+
if (!artifactsDir) {
|
|
94
|
+
writeStderr(`${RED}--artifacts <dir> is required${RESET}`);
|
|
95
|
+
process.exit(2);
|
|
96
|
+
}
|
|
97
|
+
if (values.directive != null && values['directive-file'] != null) {
|
|
98
|
+
writeStderr(`${RED}--directive and --directive-file are mutually exclusive${RESET}`);
|
|
99
|
+
process.exit(2);
|
|
100
|
+
}
|
|
101
|
+
if (values.task != null && values['task-file'] != null) {
|
|
102
|
+
writeStderr(`${RED}--task and --task-file are mutually exclusive${RESET}`);
|
|
103
|
+
process.exit(2);
|
|
104
|
+
}
|
|
105
|
+
let directive;
|
|
106
|
+
if (values.directive != null) {
|
|
107
|
+
directive = values.directive;
|
|
108
|
+
}
|
|
109
|
+
else if (values['directive-file'] != null) {
|
|
110
|
+
const path = resolve(values['directive-file']);
|
|
111
|
+
directive = readFileWithMessage(path, 'directive file');
|
|
112
|
+
}
|
|
113
|
+
let taskDescription;
|
|
114
|
+
if (values.task != null) {
|
|
115
|
+
taskDescription = values.task;
|
|
116
|
+
}
|
|
117
|
+
else if (values['task-file'] != null) {
|
|
118
|
+
const path = resolve(values['task-file']);
|
|
119
|
+
taskDescription = readFileWithMessage(path, 'task file');
|
|
120
|
+
}
|
|
121
|
+
const modeRaw = values.mode;
|
|
122
|
+
let mode;
|
|
123
|
+
if (modeRaw != null) {
|
|
124
|
+
if (modeRaw !== 'builtin' && modeRaw !== 'docker') {
|
|
125
|
+
writeStderr(`${RED}--mode must be "builtin" or "docker" (got "${modeRaw}")${RESET}`);
|
|
126
|
+
process.exit(2);
|
|
127
|
+
}
|
|
128
|
+
mode = modeRaw;
|
|
129
|
+
}
|
|
130
|
+
const workspaceRaw = values.workspace;
|
|
131
|
+
const workspaceSrc = workspaceRaw != null ? resolve(workspaceRaw) : undefined;
|
|
132
|
+
return {
|
|
133
|
+
definitionRef,
|
|
134
|
+
stateId,
|
|
135
|
+
artifactsDir: resolve(artifactsDir),
|
|
136
|
+
workspaceSrc,
|
|
137
|
+
directive,
|
|
138
|
+
outputDir: values.output != null ? resolve(values.output) : undefined,
|
|
139
|
+
mode,
|
|
140
|
+
taskDescription,
|
|
141
|
+
modelOverride: values.model,
|
|
142
|
+
noLint: values['no-lint'] === true,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function readFileWithMessage(path, label) {
|
|
146
|
+
try {
|
|
147
|
+
return readFileSync(path, 'utf-8');
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
writeStderr(`${RED}${label} not found: ${path}${RESET}`);
|
|
151
|
+
process.exit(2);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function resolveAgentState(parsed) {
|
|
155
|
+
const definitionPath = resolveWorkflowPath(parsed.definitionRef);
|
|
156
|
+
if (!definitionPath) {
|
|
157
|
+
writeStderr(`${RED}Workflow not found: ${parsed.definitionRef}${RESET}`);
|
|
158
|
+
writeStderr(`${DIM}Looked in bundled and user workflow directories.${RESET}`);
|
|
159
|
+
process.exit(2);
|
|
160
|
+
}
|
|
161
|
+
const lintMode = parsed.noLint ? 'off' : 'warn';
|
|
162
|
+
const definition = runCliPreflightLint(definitionPath, lintMode);
|
|
163
|
+
if (!Object.prototype.hasOwnProperty.call(definition.states, parsed.stateId)) {
|
|
164
|
+
const agentStates = Object.entries(definition.states)
|
|
165
|
+
.filter(([, s]) => s.type === 'agent')
|
|
166
|
+
.map(([id]) => id);
|
|
167
|
+
writeStderr(`${RED}Unknown state: "${parsed.stateId}"${RESET}`);
|
|
168
|
+
writeStderr(`${DIM}Available agent states: ${agentStates.join(', ')}${RESET}`);
|
|
169
|
+
process.exit(2);
|
|
170
|
+
}
|
|
171
|
+
const stateConfig = definition.states[parsed.stateId];
|
|
172
|
+
if (stateConfig.type !== 'agent') {
|
|
173
|
+
writeStderr(`${RED}state "${parsed.stateId}" is type "${stateConfig.type}"; only agent states are runnable${RESET}`);
|
|
174
|
+
process.exit(2);
|
|
175
|
+
}
|
|
176
|
+
return { definition, definitionPath, stateConfig };
|
|
177
|
+
}
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
// Workspace + artifact staging
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
function defaultOutputDir(workflowName, stateId) {
|
|
182
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
183
|
+
return resolve(getIronCurtainHome(), 'debug-runs', `${workflowName}-${stateId}-${ts}`);
|
|
184
|
+
}
|
|
185
|
+
function assertDirectory(path, flag) {
|
|
186
|
+
let stat;
|
|
187
|
+
try {
|
|
188
|
+
stat = statSync(path);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
writeStderr(`${RED}${flag} is not a directory: ${path}${RESET}`);
|
|
192
|
+
process.exit(2);
|
|
193
|
+
}
|
|
194
|
+
if (!stat.isDirectory()) {
|
|
195
|
+
writeStderr(`${RED}${flag} is not a directory: ${path}${RESET}`);
|
|
196
|
+
process.exit(2);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Stages the agent's workspace under {@link outputDir}/workspace, copying every
|
|
201
|
+
* subdirectory of {@link artifactsSrc} whose name matches one of the state's
|
|
202
|
+
* declared inputs. Required inputs (no `?`) missing on disk produce a
|
|
203
|
+
* structured exit-2 error listing each missing input and the path it was
|
|
204
|
+
* looked up at; optional inputs are silently skipped.
|
|
205
|
+
*
|
|
206
|
+
* If {@link workspaceSrc} is provided, its contents are copied first into the
|
|
207
|
+
* staged workspace, EXCLUDING any top-level `.workflow/` directory (which
|
|
208
|
+
* would conflict with the artifact staging step that runs after). Artifact
|
|
209
|
+
* staging always wins on conflict.
|
|
210
|
+
*
|
|
211
|
+
* The source dirs are never mutated — only read.
|
|
212
|
+
*/
|
|
213
|
+
function stageWorkspace(outputDir, artifactsSrc, inputs, workspaceSrc) {
|
|
214
|
+
assertDirectory(artifactsSrc, '--artifacts');
|
|
215
|
+
if (workspaceSrc != null)
|
|
216
|
+
assertDirectory(workspaceSrc, '--workspace');
|
|
217
|
+
let existingEntries = [];
|
|
218
|
+
try {
|
|
219
|
+
existingEntries = readdirSync(outputDir);
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
const code = err.code;
|
|
223
|
+
if (code === 'ENOTDIR') {
|
|
224
|
+
writeStderr(`${RED}--output exists but is not a directory: ${outputDir}${RESET}`);
|
|
225
|
+
process.exit(2);
|
|
226
|
+
}
|
|
227
|
+
if (code !== 'ENOENT') {
|
|
228
|
+
writeStderr(`${RED}Cannot read --output dir ${outputDir}: ${err instanceof Error ? err.message : String(err)}${RESET}`);
|
|
229
|
+
process.exit(2);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (existingEntries.length > 0) {
|
|
233
|
+
writeStderr(`${RED}Output dir already exists and is not empty: ${outputDir}${RESET}`);
|
|
234
|
+
writeStderr(`${DIM}Choose a different --output, or remove the existing directory.${RESET}`);
|
|
235
|
+
process.exit(2);
|
|
236
|
+
}
|
|
237
|
+
const workspacePath = resolve(outputDir, 'workspace');
|
|
238
|
+
const artifactDir = resolve(workspacePath, WORKFLOW_ARTIFACT_DIR);
|
|
239
|
+
mkdirSync(artifactDir, { recursive: true });
|
|
240
|
+
if (workspaceSrc != null) {
|
|
241
|
+
const skip = resolve(workspaceSrc, WORKFLOW_ARTIFACT_DIR);
|
|
242
|
+
cpSync(workspaceSrc, workspacePath, { recursive: true, filter: (src) => resolve(src) !== skip });
|
|
243
|
+
}
|
|
244
|
+
const missing = [];
|
|
245
|
+
for (const inputRef of inputs) {
|
|
246
|
+
const { name, isOptional } = parseArtifactRef(inputRef);
|
|
247
|
+
const srcPath = resolve(artifactsSrc, name);
|
|
248
|
+
let srcStat;
|
|
249
|
+
try {
|
|
250
|
+
srcStat = statSync(srcPath);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
if (!isOptional)
|
|
254
|
+
missing.push(`${name} (looked up at ${srcPath})`);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (!srcStat.isDirectory()) {
|
|
258
|
+
if (isOptional) {
|
|
259
|
+
writeStderr(`${YELLOW}Warning: optional input ${srcPath} is not a directory; skipping.${RESET}`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
writeStderr(`${RED}Required input ${name} at ${srcPath} is not a directory${RESET}`);
|
|
263
|
+
process.exit(2);
|
|
264
|
+
}
|
|
265
|
+
cpSync(srcPath, resolve(artifactDir, name), { recursive: true });
|
|
266
|
+
}
|
|
267
|
+
if (missing.length > 0) {
|
|
268
|
+
writeStderr(`${RED}Missing required inputs:${RESET}`);
|
|
269
|
+
for (const m of missing)
|
|
270
|
+
writeStderr(` ${RED}- ${m}${RESET}`);
|
|
271
|
+
process.exit(2);
|
|
272
|
+
}
|
|
273
|
+
return { outputDir, workspacePath, artifactDir };
|
|
274
|
+
}
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// Task description resolution
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
function resolveTaskDescription(parsed) {
|
|
279
|
+
if (parsed.taskDescription != null)
|
|
280
|
+
return parsed.taskDescription.trim();
|
|
281
|
+
const candidate = resolve(parsed.artifactsDir, 'task', 'description.md');
|
|
282
|
+
try {
|
|
283
|
+
return readFileSync(candidate, 'utf-8').trim();
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
writeStderr(`${YELLOW}Warning: no task description found (tried ${candidate}); using placeholder.${RESET}`);
|
|
287
|
+
return '(no task description provided)';
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
// Context synthesis
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
function buildContext(definition, taskDescription, stateId, directive) {
|
|
294
|
+
return {
|
|
295
|
+
...createInitialContext(definition),
|
|
296
|
+
taskDescription,
|
|
297
|
+
round: 1,
|
|
298
|
+
maxRounds: 1,
|
|
299
|
+
previousAgentOutput: directive ?? null,
|
|
300
|
+
previousStateName: directive != null ? 'debug' : null,
|
|
301
|
+
visitCounts: { [stateId]: 1 },
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
// Mode + session creation
|
|
306
|
+
// ---------------------------------------------------------------------------
|
|
307
|
+
function resolveMode(definition, override) {
|
|
308
|
+
const settings = definition.settings ?? {};
|
|
309
|
+
const effective = override ?? settings.mode ?? 'docker';
|
|
310
|
+
if (effective === 'builtin')
|
|
311
|
+
return { kind: 'builtin' };
|
|
312
|
+
return { kind: 'docker', agent: (settings.dockerAgent ?? 'claude-code') };
|
|
313
|
+
}
|
|
314
|
+
// ---------------------------------------------------------------------------
|
|
315
|
+
// Main entry point
|
|
316
|
+
// ---------------------------------------------------------------------------
|
|
317
|
+
export async function runRunState(args) {
|
|
318
|
+
const parsed = parseRunStateArgs(args);
|
|
319
|
+
if (parsed === 'help') {
|
|
320
|
+
process.stderr.write(formatHelp(runStateSpec) + '\n');
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const { definition, definitionPath, stateConfig } = resolveAgentState(parsed);
|
|
324
|
+
const outputDir = parsed.outputDir ?? defaultOutputDir(definition.name, parsed.stateId);
|
|
325
|
+
const staged = stageWorkspace(outputDir, parsed.artifactsDir, stateConfig.inputs, parsed.workspaceSrc);
|
|
326
|
+
const workflowSkillsDir = stageWorkflowSkillsAtStart(getWorkflowPackageDir(definitionPath), outputDir);
|
|
327
|
+
const taskDescription = resolveTaskDescription(parsed);
|
|
328
|
+
const context = buildContext(definition, taskDescription, parsed.stateId, parsed.directive);
|
|
329
|
+
const command = buildAgentCommand(parsed.stateId, stateConfig, context, definition);
|
|
330
|
+
const mode = resolveMode(definition, parsed.mode);
|
|
331
|
+
const settings = definition.settings ?? {};
|
|
332
|
+
const effectiveModel = stateConfig.model ?? settings.model;
|
|
333
|
+
const sessionFactory = createWorkflowSessionFactory(parsed.modelOverride);
|
|
334
|
+
writeStdout(`${BOLD}${CYAN}Running state "${parsed.stateId}" from ${definition.name}${RESET}`);
|
|
335
|
+
writeStdout(`${DIM}Workspace: ${staged.workspacePath}${RESET}`);
|
|
336
|
+
writeStdout(`${DIM}Mode: ${mode.kind}${RESET}`);
|
|
337
|
+
if (parsed.directive)
|
|
338
|
+
writeStdout(`${DIM}Directive: ${parsed.directive.length} bytes from synthetic "debug" agent${RESET}`);
|
|
339
|
+
writeStdout('');
|
|
340
|
+
let session;
|
|
341
|
+
try {
|
|
342
|
+
session = await sessionFactory({
|
|
343
|
+
persona: stateConfig.persona,
|
|
344
|
+
mode,
|
|
345
|
+
agentConversationId: createAgentConversationId(),
|
|
346
|
+
workspacePath: staged.workspacePath,
|
|
347
|
+
...(definition.settings?.systemPrompt ? { systemPromptAugmentation: definition.settings.systemPrompt } : {}),
|
|
348
|
+
...(effectiveModel != null ? { agentModelOverride: effectiveModel } : {}),
|
|
349
|
+
...(settings.maxSessionSeconds != null
|
|
350
|
+
? { resourceBudgetOverrides: { maxSessionSeconds: settings.maxSessionSeconds } }
|
|
351
|
+
: {}),
|
|
352
|
+
workflow: resolveWorkflowSkillsOptions(stateConfig.skills, workflowSkillsDir),
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
writeStderr(`${RED}Session creation failed: ${err instanceof Error ? err.message : String(err)}${RESET}`);
|
|
357
|
+
process.exit(1);
|
|
358
|
+
}
|
|
359
|
+
// bundleIdFromSessionId carries the standalone-mode invariant
|
|
360
|
+
// (workflow-session-identity §2.1) — see helper in session/types.
|
|
361
|
+
const capturePaths = mode.kind === 'docker' ? resolveCapturePaths(bundleIdFromSessionId(session.getInfo().id), outputDir) : undefined;
|
|
362
|
+
let responseText = '';
|
|
363
|
+
let invocationFailed = false;
|
|
364
|
+
let invocationError;
|
|
365
|
+
try {
|
|
366
|
+
responseText = await session.sendMessage(command);
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
invocationFailed = true;
|
|
370
|
+
invocationError = err;
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
if (capturePaths)
|
|
374
|
+
await captureContainerLogs(capturePaths);
|
|
375
|
+
await session
|
|
376
|
+
.close()
|
|
377
|
+
.catch((err) => writeStderr(`[run-state] session.close() failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
378
|
+
if (capturePaths)
|
|
379
|
+
captureConversationLogs(capturePaths);
|
|
380
|
+
}
|
|
381
|
+
if (invocationFailed) {
|
|
382
|
+
writeStderr(`${RED}Agent invocation failed: ${invocationError instanceof Error ? invocationError.message : String(invocationError)}${RESET}`);
|
|
383
|
+
if (capturePaths)
|
|
384
|
+
printCaptureLocations('stderr', capturePaths);
|
|
385
|
+
process.exit(1);
|
|
386
|
+
}
|
|
387
|
+
// Sidecar — agent response can be megabytes; stderr is inconvenient to recover from CI logs.
|
|
388
|
+
const outputFile = resolve(outputDir, 'agent-output.md');
|
|
389
|
+
writeFileSync(outputFile, responseText, 'utf-8');
|
|
390
|
+
let verdictLine;
|
|
391
|
+
try {
|
|
392
|
+
const parsedStatus = parseAgentStatus(responseText);
|
|
393
|
+
verdictLine = parsedStatus
|
|
394
|
+
? `verdict=${parsedStatus.verdict}` + (parsedStatus.notes ? `\nnotes: ${parsedStatus.notes}` : '')
|
|
395
|
+
: '(no agent_status block)';
|
|
396
|
+
}
|
|
397
|
+
catch (err) {
|
|
398
|
+
if (err instanceof AgentStatusParseError) {
|
|
399
|
+
verdictLine = `(malformed agent_status: ${err.message})`;
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
throw err;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
writeStdout('');
|
|
406
|
+
writeStdout(`${BOLD}${GREEN}Result${RESET}`);
|
|
407
|
+
writeStdout(verdictLine);
|
|
408
|
+
writeStdout('');
|
|
409
|
+
writeStdout(`${DIM}Workspace: ${staged.workspacePath}${RESET}`);
|
|
410
|
+
writeStdout(`${DIM}Agent output: ${outputFile}${RESET}`);
|
|
411
|
+
if (capturePaths)
|
|
412
|
+
printCaptureLocations('stdout', capturePaths);
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=run-state-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state-command.js","sourceRoot":"","sources":["../../src/workflow/run-state-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug-capture helpers for `ironcurtain workflow run-state`.
|
|
3
|
+
*
|
|
4
|
+
* Two artifacts are extracted into the run's `--output` dir so each test
|
|
5
|
+
* run owns a self-contained record of what the in-container agent saw and
|
|
6
|
+
* what the container reported.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle notes that aren't obvious from the code:
|
|
9
|
+
* - `captureContainerLogs` MUST run BEFORE `session.close()`: the
|
|
10
|
+
* container is force-removed on close, after which `docker logs`
|
|
11
|
+
* returns "no such container".
|
|
12
|
+
* - `captureConversationLogs` runs AFTER `session.close()`: the
|
|
13
|
+
* bundle teardown only removes the runtime sockets dir, not the
|
|
14
|
+
* bind-mounted `claude-state/` tree under the session dir.
|
|
15
|
+
*
|
|
16
|
+
* Both are best-effort: missing/empty inputs and Docker-side failures are
|
|
17
|
+
* logged to stderr but never propagated. The agent run's success/failure
|
|
18
|
+
* is reported through the existing `agent-output.md` + verdict path.
|
|
19
|
+
*
|
|
20
|
+
* This module is run-state-only by design. Production workflow runs go
|
|
21
|
+
* through the orchestrator, which has its own diagnostics; bind-mounting
|
|
22
|
+
* agent state into long-lived workflow runs would cross privacy/state
|
|
23
|
+
* boundaries.
|
|
24
|
+
*/
|
|
25
|
+
import { type BundleId } from '../session/types.js';
|
|
26
|
+
export interface RunStateCapturePaths {
|
|
27
|
+
readonly containerLogsPath: string;
|
|
28
|
+
readonly claudeLogsDir: string;
|
|
29
|
+
readonly claudeProjectsSrc: string;
|
|
30
|
+
readonly containerName: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function resolveCapturePaths(bundleId: BundleId, outputDir: string): RunStateCapturePaths;
|
|
33
|
+
/**
|
|
34
|
+
* Streams `docker logs <container>` (combined stdout/stderr) to the
|
|
35
|
+
* capture path. Streaming avoids the 10 MB `maxBuffer` data-loss failure
|
|
36
|
+
* mode of `execFile` -- crashlooping/OOM containers, the very ones we
|
|
37
|
+
* want to diagnose, are exactly the ones likely to overflow.
|
|
38
|
+
*/
|
|
39
|
+
export declare function captureContainerLogs(paths: RunStateCapturePaths): Promise<void>;
|
|
40
|
+
export declare function captureConversationLogs(paths: RunStateCapturePaths): void;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug-capture helpers for `ironcurtain workflow run-state`.
|
|
3
|
+
*
|
|
4
|
+
* Two artifacts are extracted into the run's `--output` dir so each test
|
|
5
|
+
* run owns a self-contained record of what the in-container agent saw and
|
|
6
|
+
* what the container reported.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle notes that aren't obvious from the code:
|
|
9
|
+
* - `captureContainerLogs` MUST run BEFORE `session.close()`: the
|
|
10
|
+
* container is force-removed on close, after which `docker logs`
|
|
11
|
+
* returns "no such container".
|
|
12
|
+
* - `captureConversationLogs` runs AFTER `session.close()`: the
|
|
13
|
+
* bundle teardown only removes the runtime sockets dir, not the
|
|
14
|
+
* bind-mounted `claude-state/` tree under the session dir.
|
|
15
|
+
*
|
|
16
|
+
* Both are best-effort: missing/empty inputs and Docker-side failures are
|
|
17
|
+
* logged to stderr but never propagated. The agent run's success/failure
|
|
18
|
+
* is reported through the existing `agent-output.md` + verdict path.
|
|
19
|
+
*
|
|
20
|
+
* This module is run-state-only by design. Production workflow runs go
|
|
21
|
+
* through the orchestrator, which has its own diagnostics; bind-mounting
|
|
22
|
+
* agent state into long-lived workflow runs would cross privacy/state
|
|
23
|
+
* boundaries.
|
|
24
|
+
*/
|
|
25
|
+
import { spawn } from 'node:child_process';
|
|
26
|
+
import { createWriteStream, existsSync, readdirSync, cpSync } from 'node:fs';
|
|
27
|
+
import { resolve } from 'node:path';
|
|
28
|
+
import { getSessionDir } from '../config/paths.js';
|
|
29
|
+
import { getBundleShortId } from '../session/types.js';
|
|
30
|
+
export function resolveCapturePaths(bundleId, outputDir) {
|
|
31
|
+
const bundleSlug = getBundleShortId(bundleId);
|
|
32
|
+
return {
|
|
33
|
+
containerLogsPath: resolve(outputDir, 'container-logs.txt'),
|
|
34
|
+
claudeLogsDir: resolve(outputDir, 'claude-session-logs'),
|
|
35
|
+
claudeProjectsSrc: resolve(getSessionDir(bundleId), 'claude-state', 'projects'),
|
|
36
|
+
containerName: `ironcurtain-${bundleSlug}`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Streams `docker logs <container>` (combined stdout/stderr) to the
|
|
41
|
+
* capture path. Streaming avoids the 10 MB `maxBuffer` data-loss failure
|
|
42
|
+
* mode of `execFile` -- crashlooping/OOM containers, the very ones we
|
|
43
|
+
* want to diagnose, are exactly the ones likely to overflow.
|
|
44
|
+
*/
|
|
45
|
+
export async function captureContainerLogs(paths) {
|
|
46
|
+
const out = createWriteStream(paths.containerLogsPath);
|
|
47
|
+
const proc = spawn('docker', ['logs', paths.containerName], {
|
|
48
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
49
|
+
});
|
|
50
|
+
proc.stdout.pipe(out, { end: false });
|
|
51
|
+
proc.stderr.pipe(out, { end: false });
|
|
52
|
+
await new Promise((res) => {
|
|
53
|
+
let resolved = false;
|
|
54
|
+
const done = () => {
|
|
55
|
+
if (resolved)
|
|
56
|
+
return;
|
|
57
|
+
resolved = true;
|
|
58
|
+
res();
|
|
59
|
+
};
|
|
60
|
+
// Resolve only after the file write stream has flushed to disk.
|
|
61
|
+
// `out.on('finish')` fires after `out.end()` has drained the buffer.
|
|
62
|
+
out.on('finish', done);
|
|
63
|
+
out.on('error', (err) => {
|
|
64
|
+
process.stderr.write(`[run-state] container-log write failed: ${err.message}\n`);
|
|
65
|
+
proc.kill();
|
|
66
|
+
done();
|
|
67
|
+
});
|
|
68
|
+
// `close` (vs. `exit`) waits for the child's stdio to fully drain,
|
|
69
|
+
// so any data still piping into `out` has been written by the time
|
|
70
|
+
// we call `out.end()`. Resolving on `exit` could truncate large logs.
|
|
71
|
+
proc.on('close', (code, signal) => {
|
|
72
|
+
if (code !== 0) {
|
|
73
|
+
process.stderr.write(`[run-state] docker logs ${paths.containerName} exited ${code ?? signal}\n`);
|
|
74
|
+
}
|
|
75
|
+
out.end();
|
|
76
|
+
});
|
|
77
|
+
proc.on('error', (err) => {
|
|
78
|
+
process.stderr.write(`[run-state] docker logs failed: ${err.message}\n`);
|
|
79
|
+
out.end();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function captureConversationLogs(paths) {
|
|
84
|
+
if (!existsSync(paths.claudeProjectsSrc))
|
|
85
|
+
return;
|
|
86
|
+
try {
|
|
87
|
+
// Skip empty source dir: an empty `claude-session-logs/` would
|
|
88
|
+
// misleadingly suggest the agent ran silently when in reality it
|
|
89
|
+
// crashed before writing the first JSONL frame.
|
|
90
|
+
if (readdirSync(paths.claudeProjectsSrc).length === 0) {
|
|
91
|
+
process.stderr.write('[run-state] no conversation log captured (claude-state/projects empty -- agent likely crashed before first message)\n');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
cpSync(paths.claudeProjectsSrc, paths.claudeLogsDir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
98
|
+
process.stderr.write(`[run-state] conversation-log capture failed: ${message}\n`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=run-state-debug-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state-debug-capture.js","sourceRoot":"","sources":["../../src/workflow/run-state-debug-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { AgentOutput, AgentTransitionDefinition } from './types.js';
|
|
2
|
+
export declare class AgentStatusParseError extends Error {
|
|
3
|
+
readonly rawBlock: string;
|
|
4
|
+
constructor(message: string, rawBlock: string);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Extracts and parses an agent_status YAML block from response text.
|
|
8
|
+
*
|
|
9
|
+
* @returns parsed AgentOutput, or undefined if no status block found
|
|
10
|
+
* @throws {AgentStatusParseError} if block found but malformed
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseAgentStatus(responseText: string): AgentOutput | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Removes the fenced agent_status block from the end of the response text.
|
|
15
|
+
* The status block is already parsed into AgentOutput by `parseAgentStatus`,
|
|
16
|
+
* so passing it as raw text to the next agent is redundant noise.
|
|
17
|
+
*
|
|
18
|
+
* @returns text with the trailing status block removed and whitespace trimmed
|
|
19
|
+
*/
|
|
20
|
+
export declare function stripStatusBlock(responseText: string): string;
|
|
21
|
+
/** Minimal status instructions for unconditional transitions (no guards, no when clauses). */
|
|
22
|
+
export declare const MINIMAL_STATUS_INSTRUCTIONS: string;
|
|
23
|
+
/**
|
|
24
|
+
* Extracts verdict values from `when` clauses that match on the `verdict` key.
|
|
25
|
+
* Returns deduplicated values in definition order.
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractVerdictValues(transitions: readonly AgentTransitionDefinition[]): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Builds context-sensitive status block instructions for states with
|
|
30
|
+
* conditional transitions (`when` clauses or `guard` functions).
|
|
31
|
+
*
|
|
32
|
+
* Two modes:
|
|
33
|
+
* - **Verdict-routed**: transitions have `when` clauses keyed on verdict.
|
|
34
|
+
* Instructions list the valid verdict values and explain they control routing.
|
|
35
|
+
* - **Guard-only**: transitions use only `guard` functions (no `when` clauses).
|
|
36
|
+
* Verdict is informational — instructions make this clear to avoid confusion.
|
|
37
|
+
*
|
|
38
|
+
* @param transitions - the state's transition definitions
|
|
39
|
+
* @param guardLabels - human-readable labels for named guard conditions
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildConditionalStatusInstructions(transitions: readonly AgentTransitionDefinition[], guardLabels: Readonly<Record<string, string>>): string;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the re-prompt message when the agent's response is missing or
|
|
44
|
+
* malformed. Passing `parseError` switches the wording to the malformed-block
|
|
45
|
+
* form and includes the validation detail. Passing `statusInstructions`
|
|
46
|
+
* overrides the default template (e.g. to list state-specific verdicts).
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildStatusBlockReprompt(statusInstructions?: string, parseError?: AgentStatusParseError): string;
|
|
49
|
+
/**
|
|
50
|
+
* Determines whether a state's transitions require verdict validation
|
|
51
|
+
* and, if so, returns the set of valid verdict strings.
|
|
52
|
+
*
|
|
53
|
+
* Validation is skipped (returns `undefined`) when:
|
|
54
|
+
* - No transitions have `when` clauses (pure guard-based or unconditional)
|
|
55
|
+
* - Any transition is unconditional (no `guard` and no `when`), meaning
|
|
56
|
+
* it acts as a fallthrough that accepts any verdict
|
|
57
|
+
*
|
|
58
|
+
* @returns set of valid verdict strings, or undefined if validation should be skipped
|
|
59
|
+
*/
|
|
60
|
+
export declare function getValidVerdicts(transitions: readonly AgentTransitionDefinition[]): ReadonlySet<string> | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Builds the re-prompt message when the agent's verdict doesn't match
|
|
63
|
+
* any valid transition for the current state.
|
|
64
|
+
*
|
|
65
|
+
* @param invalidVerdict - the verdict the agent returned
|
|
66
|
+
* @param transitions - the state's transition definitions (valid verdicts and targets derived from `when` clauses)
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildInvalidVerdictReprompt(invalidVerdict: string, transitions: readonly AgentTransitionDefinition[]): string;
|