@provos/ironcurtain 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -19
- package/dist/cli-help.d.ts +12 -0
- package/dist/cli-help.js +21 -0
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.js +14 -6
- package/dist/cli.js.map +1 -1
- package/dist/config/agent-model-guard.d.ts +14 -0
- package/dist/config/agent-model-guard.js +24 -0
- package/dist/config/agent-model-guard.js.map +1 -0
- package/dist/config/config-command.d.ts +33 -1
- package/dist/config/config-command.js +723 -11
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/first-start.js +2 -8
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/model-provider.d.ts +9 -0
- package/dist/config/model-provider.js +13 -0
- package/dist/config/model-provider.js.map +1 -1
- package/dist/config/openrouter-catalog.d.ts +46 -0
- package/dist/config/openrouter-catalog.js +111 -0
- package/dist/config/openrouter-catalog.js.map +1 -0
- package/dist/config/openrouter-models-fallback.d.ts +15 -0
- package/dist/config/openrouter-models-fallback.js +49 -0
- package/dist/config/openrouter-models-fallback.js.map +1 -0
- package/dist/config/paths.d.ts +48 -6
- package/dist/config/paths.js +63 -8
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/user-config.d.ts +179 -6
- package/dist/config/user-config.js +282 -5
- package/dist/config/user-config.js.map +1 -1
- package/dist/daemon/daemon-command.js +14 -5
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.d.ts +18 -0
- package/dist/daemon/ironcurtain-daemon.js +28 -1
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/daemon-client/daemon-client.d.ts +123 -0
- package/dist/daemon-client/daemon-client.js +324 -0
- package/dist/daemon-client/daemon-client.js.map +1 -0
- package/dist/docker/adapters/claude-code.js +109 -1
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/codex.d.ts +18 -0
- package/dist/docker/adapters/codex.js +376 -0
- package/dist/docker/adapters/codex.js.map +1 -0
- package/dist/docker/adapters/goose.js +38 -2
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +34 -6
- package/dist/docker/agent-adapter.js +2 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/agent-registry.js +5 -0
- package/dist/docker/agent-registry.js.map +1 -1
- package/dist/docker/apple-container-manager.d.ts +49 -0
- package/dist/docker/apple-container-manager.js +486 -0
- package/dist/docker/apple-container-manager.js.map +1 -0
- package/dist/docker/ca.js +9 -2
- package/dist/docker/ca.js.map +1 -1
- package/dist/docker/code-mode-proxy.d.ts +11 -0
- package/dist/docker/code-mode-proxy.js +3 -1
- package/dist/docker/code-mode-proxy.js.map +1 -1
- package/dist/docker/container-lifecycle.d.ts +2 -2
- package/dist/docker/container-lifecycle.js +9 -0
- package/dist/docker/container-lifecycle.js.map +1 -1
- package/dist/docker/container-runtime.d.ts +29 -0
- package/dist/docker/container-runtime.js +76 -0
- package/dist/docker/container-runtime.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +31 -0
- package/dist/docker/docker-agent-session.js +97 -7
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +232 -15
- package/dist/docker/docker-infrastructure.js +762 -118
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.d.ts +25 -5
- package/dist/docker/docker-manager.js +388 -21
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-probe.d.ts +45 -0
- package/dist/docker/docker-probe.js +86 -0
- package/dist/docker/docker-probe.js.map +1 -0
- package/dist/docker/docker-progress-sink.d.ts +1 -1
- package/dist/docker/docker-resource-lifecycle.d.ts +71 -0
- package/dist/docker/docker-resource-lifecycle.js +454 -0
- package/dist/docker/docker-resource-lifecycle.js.map +1 -0
- package/dist/docker/gc-command.d.ts +2 -0
- package/dist/docker/gc-command.js +37 -0
- package/dist/docker/gc-command.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +58 -5
- package/dist/docker/mitm-proxy.js +338 -26
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/network-topology.d.ts +88 -0
- package/dist/docker/network-topology.js +167 -0
- package/dist/docker/network-topology.js.map +1 -0
- package/dist/docker/oauth-credentials.d.ts +13 -0
- package/dist/docker/oauth-credentials.js +125 -0
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/openrouter.d.ts +107 -0
- package/dist/docker/openrouter.js +236 -0
- package/dist/docker/openrouter.js.map +1 -0
- package/dist/docker/orientation.js +1 -1
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/package-types.d.ts +1 -1
- package/dist/docker/platform.d.ts +3 -1
- package/dist/docker/platform.js +3 -1
- package/dist/docker/platform.js.map +1 -1
- package/dist/docker/provider-config.d.ts +35 -1
- package/dist/docker/provider-config.js +93 -3
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/provision-lock.d.ts +46 -0
- package/dist/docker/provision-lock.js +152 -0
- package/dist/docker/provision-lock.js.map +1 -0
- package/dist/docker/pty-session.d.ts +22 -0
- package/dist/docker/pty-session.js +238 -84
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +15 -0
- package/dist/docker/pty-types.js +8 -0
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/registry-proxy.d.ts +46 -0
- package/dist/docker/registry-proxy.js +255 -1
- package/dist/docker/registry-proxy.js.map +1 -1
- package/dist/docker/resource-limits.d.ts +14 -5
- package/dist/docker/resource-limits.js +11 -8
- package/dist/docker/resource-limits.js.map +1 -1
- package/dist/docker/sse-extractor.js +55 -5
- package/dist/docker/sse-extractor.js.map +1 -1
- package/dist/docker/stream-delay.d.ts +86 -0
- package/dist/docker/stream-delay.js +218 -0
- package/dist/docker/stream-delay.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +15 -0
- package/dist/docker/trajectory-capture.d.ts +79 -0
- package/dist/docker/trajectory-capture.js +521 -0
- package/dist/docker/trajectory-capture.js.map +1 -0
- package/dist/docker/trajectory-reassembler.d.ts +286 -0
- package/dist/docker/trajectory-reassembler.js +1010 -0
- package/dist/docker/trajectory-reassembler.js.map +1 -0
- package/dist/docker/trajectory-tap.d.ts +100 -0
- package/dist/docker/trajectory-tap.js +410 -0
- package/dist/docker/trajectory-tap.js.map +1 -0
- package/dist/docker/trajectory-types.d.ts +187 -0
- package/dist/docker/trajectory-types.js +43 -0
- package/dist/docker/trajectory-types.js.map +1 -0
- package/dist/docker/types.d.ts +116 -12
- package/dist/doctor/checks.d.ts +39 -6
- package/dist/doctor/checks.js +129 -25
- package/dist/doctor/checks.js.map +1 -1
- package/dist/doctor/doctor-command.js +39 -9
- package/dist/doctor/doctor-command.js.map +1 -1
- package/dist/doctor/mcp-liveness.d.ts +1 -1
- package/dist/doctor/mcp-liveness.js +12 -4
- package/dist/doctor/mcp-liveness.js.map +1 -1
- package/dist/escalation/escalation-watcher.js +6 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/{mux → escalation}/trusted-input.d.ts +7 -4
- package/dist/{mux → escalation}/trusted-input.js +8 -5
- package/dist/escalation/trusted-input.js.map +1 -0
- package/dist/hash.js.map +1 -1
- package/dist/index.js +65 -16
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +9 -0
- package/dist/mux/mux-app.js +18 -16
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.js +26 -8
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-input-handler.d.ts +26 -2
- package/dist/mux/mux-input-handler.js +93 -11
- package/dist/mux/mux-input-handler.js.map +1 -1
- package/dist/mux/mux-renderer.d.ts +2 -1
- package/dist/mux/mux-renderer.js +67 -0
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/provider-profile-snapshot.d.ts +44 -0
- package/dist/mux/provider-profile-snapshot.js +56 -0
- package/dist/mux/provider-profile-snapshot.js.map +1 -0
- package/dist/mux/types.d.ts +3 -2
- package/dist/mux/types.js +6 -2
- package/dist/mux/types.js.map +1 -1
- package/dist/observe/observe-command.js +112 -125
- package/dist/observe/observe-command.js.map +1 -1
- package/dist/persona/broad-policy-validator.d.ts +95 -0
- package/dist/persona/broad-policy-validator.js +171 -0
- package/dist/persona/broad-policy-validator.js.map +1 -0
- package/dist/persona/compile-persona-policy.d.ts +54 -2
- package/dist/persona/compile-persona-policy.js +29 -4
- package/dist/persona/compile-persona-policy.js.map +1 -1
- package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
- package/dist/persona/event-bus-progress-reporter.js +66 -0
- package/dist/persona/event-bus-progress-reporter.js.map +1 -0
- package/dist/persona/persona-command.js +46 -76
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
- package/dist/persona/persona-compile-orchestrator.js +504 -0
- package/dist/persona/persona-compile-orchestrator.js.map +1 -0
- package/dist/persona/persona-service.d.ts +137 -0
- package/dist/persona/persona-service.js +263 -0
- package/dist/persona/persona-service.js.map +1 -0
- package/dist/persona/policy-mutation-audit.d.ts +109 -0
- package/dist/persona/policy-mutation-audit.js +179 -0
- package/dist/persona/policy-mutation-audit.js.map +1 -0
- package/dist/persona/rule-delta.d.ts +30 -0
- package/dist/persona/rule-delta.js +82 -0
- package/dist/persona/rule-delta.js.map +1 -0
- package/dist/persona/types.d.ts +12 -0
- package/dist/pipeline/annotate.js +10 -2
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/compile.js +14 -2
- package/dist/pipeline/compile.js.map +1 -1
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/generate-with-repair.js.map +1 -1
- package/dist/pipeline/pipeline-runner.d.ts +63 -4
- package/dist/pipeline/pipeline-runner.js +159 -50
- package/dist/pipeline/pipeline-runner.js.map +1 -1
- package/dist/pipeline/pipeline-shared.d.ts +32 -3
- package/dist/pipeline/pipeline-shared.js +76 -8
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/refresh-lists.js +3 -5
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-schema-validator.js.map +1 -1
- package/dist/{mux → pty}/pty-bridge.d.ts +41 -3
- package/dist/{mux → pty}/pty-bridge.js +71 -18
- package/dist/pty/pty-bridge.js.map +1 -0
- package/dist/pty/resolve-ironcurtain-bin.d.ts +17 -0
- package/dist/pty/resolve-ironcurtain-bin.js +22 -0
- package/dist/pty/resolve-ironcurtain-bin.js.map +1 -0
- package/dist/sandbox/index.d.ts +19 -4
- package/dist/sandbox/index.js +31 -18
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.js +2 -0
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.js +20 -2
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +20 -35
- package/dist/session/preflight.js +92 -109
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/resource-budget-tracker.js +8 -0
- package/dist/session/resource-budget-tracker.js.map +1 -1
- package/dist/session/session-manager.d.ts +7 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/types.d.ts +23 -0
- package/dist/signal/bot-command.js +6 -1
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/setup-signal.js +1 -1
- package/dist/signal/setup-signal.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +1 -0
- package/dist/signal/signal-bot-daemon.js +9 -2
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.d.ts +3 -3
- package/dist/signal/signal-container.js +2 -2
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
- package/dist/trusted-process/call-circuit-breaker.js +22 -3
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
- package/dist/trusted-process/container-command.d.ts +35 -0
- package/dist/trusted-process/container-command.js +49 -0
- package/dist/trusted-process/container-command.js.map +1 -0
- package/dist/trusted-process/mcp-error-utils.js +4 -1
- package/dist/trusted-process/mcp-error-utils.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.js +37 -3
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.js +13 -2
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/tcp-server-transport.d.ts +19 -1
- package/dist/trusted-process/tcp-server-transport.js +56 -10
- package/dist/trusted-process/tcp-server-transport.js.map +1 -1
- package/dist/trusted-process/tool-call-coordinator.d.ts +22 -8
- package/dist/trusted-process/tool-call-coordinator.js +149 -65
- package/dist/trusted-process/tool-call-coordinator.js.map +1 -1
- package/dist/trusted-process/tool-call-pipeline.d.ts +8 -0
- package/dist/trusted-process/tool-call-pipeline.js +68 -34
- package/dist/trusted-process/tool-call-pipeline.js.map +1 -1
- package/dist/util/atomic-write.d.ts +31 -0
- package/dist/util/atomic-write.js +43 -0
- package/dist/util/atomic-write.js.map +1 -0
- package/dist/utils/preflight-checks.js +1 -3
- package/dist/utils/preflight-checks.js.map +1 -1
- package/dist/utils/stdio-guard.d.ts +1 -0
- package/dist/utils/stdio-guard.js +27 -0
- package/dist/utils/stdio-guard.js.map +1 -0
- package/dist/web-ui/__tests__/config-dispatch.test.d.ts +13 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js +383 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +6 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -1
- package/dist/web-ui/conn-registry.d.ts +14 -0
- package/dist/web-ui/conn-registry.js +25 -0
- package/dist/web-ui/conn-registry.js.map +1 -0
- package/dist/web-ui/dispatch/config-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/config-dispatch.js +277 -0
- package/dist/web-ui/dispatch/config-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +11 -2
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/persona-dispatch.d.ts +46 -2
- package/dist/web-ui/dispatch/persona-dispatch.js +209 -56
- package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/pty-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/pty-dispatch.js +66 -0
- package/dist/web-ui/dispatch/pty-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.js +89 -6
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/types.d.ts +35 -0
- package/dist/web-ui/dispatch/types.js +42 -1
- package/dist/web-ui/dispatch/types.js.map +1 -1
- package/dist/web-ui/dispatch/workflow-dispatch.js +116 -5
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -1
- package/dist/web-ui/json-rpc-dispatch.js +4 -1
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -1
- package/dist/web-ui/pty-session-manager.d.ts +234 -0
- package/dist/web-ui/pty-session-manager.js +599 -0
- package/dist/web-ui/pty-session-manager.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +34 -1
- package/dist/web-ui/web-event-bus.js.map +1 -1
- package/dist/web-ui/web-session-transport.js.map +1 -1
- package/dist/web-ui/web-ui-server.d.ts +22 -0
- package/dist/web-ui/web-ui-server.js +41 -0
- package/dist/web-ui/web-ui-server.js.map +1 -1
- package/dist/web-ui/web-ui-types.d.ts +212 -5
- package/dist/web-ui/web-ui-types.js.map +1 -1
- package/dist/web-ui-static/assets/index-CCVI4nEK.css +1 -0
- package/dist/web-ui-static/assets/index-Dm012gvY.js +114 -0
- package/dist/web-ui-static/index.html +2 -2
- package/dist/workflow/cli-shared.d.ts +62 -0
- package/dist/workflow/cli-shared.js +117 -0
- package/dist/workflow/cli-shared.js.map +1 -0
- package/dist/workflow/cli-support.js +0 -2
- package/dist/workflow/cli-support.js.map +1 -1
- package/dist/workflow/container-snapshots.d.ts +29 -0
- package/dist/workflow/container-snapshots.js +137 -0
- package/dist/workflow/container-snapshots.js.map +1 -0
- package/dist/workflow/daemon-gate-commands.d.ts +21 -0
- package/dist/workflow/daemon-gate-commands.js +595 -0
- package/dist/workflow/daemon-gate-commands.js.map +1 -0
- package/dist/workflow/discovery.d.ts +29 -0
- package/dist/workflow/discovery.js +67 -7
- package/dist/workflow/discovery.js.map +1 -1
- package/dist/workflow/lane-template.d.ts +89 -0
- package/dist/workflow/lane-template.js +141 -0
- package/dist/workflow/lane-template.js.map +1 -0
- package/dist/workflow/lint.d.ts +7 -1
- package/dist/workflow/lint.js +186 -3
- package/dist/workflow/lint.js.map +1 -1
- package/dist/workflow/machine-builder.d.ts +90 -2
- package/dist/workflow/machine-builder.js +222 -29
- package/dist/workflow/machine-builder.js.map +1 -1
- package/dist/workflow/message-log.d.ts +15 -1
- package/dist/workflow/message-log.js.map +1 -1
- package/dist/workflow/orchestrator.d.ts +505 -1
- package/dist/workflow/orchestrator.js +1725 -69
- package/dist/workflow/orchestrator.js.map +1 -1
- package/dist/workflow/prompt-builder.js +2 -1
- package/dist/workflow/prompt-builder.js.map +1 -1
- package/dist/workflow/run-state-command.js +1 -1
- package/dist/workflow/run-state-command.js.map +1 -1
- package/dist/workflow/shutdown-signals.d.ts +7 -0
- package/dist/workflow/shutdown-signals.js +40 -0
- package/dist/workflow/shutdown-signals.js.map +1 -0
- package/dist/workflow/status-parser.js +19 -4
- package/dist/workflow/status-parser.js.map +1 -1
- package/dist/workflow/types.d.ts +123 -23
- package/dist/workflow/types.js +2 -0
- package/dist/workflow/types.js.map +1 -1
- package/dist/workflow/validate.d.ts +23 -1
- package/dist/workflow/validate.js +311 -22
- package/dist/workflow/validate.js.map +1 -1
- package/dist/workflow/workflow-command.d.ts +0 -17
- package/dist/workflow/workflow-command.js +118 -94
- package/dist/workflow/workflow-command.js.map +1 -1
- package/dist/workflow/workflow-discovery.d.ts +2 -0
- package/dist/workflow/workflow-discovery.js +22 -1
- package/dist/workflow/workflow-discovery.js.map +1 -1
- package/dist/workflow/workflow-manager.d.ts +34 -0
- package/dist/workflow/workflow-manager.js +52 -1
- package/dist/workflow/workflow-manager.js.map +1 -1
- package/dist/workflow/workflows/design-and-code/README.md +50 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/dist/workflow/workflows/evolve/README.md +66 -0
- package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
- package/dist/workflow/workflows/test-email-summary/workflow.yaml +1 -0
- package/dist/workflow/workflows/vuln-discovery/README.md +54 -0
- package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
- package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
- package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
- package/dist/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
- package/docker/Dockerfile.base +22 -0
- package/docker/Dockerfile.base.arm64 +18 -0
- package/docker/Dockerfile.claude-code +3 -1
- package/docker/Dockerfile.codex +17 -0
- package/docker/Dockerfile.goose +3 -1
- package/docker/entrypoint-claude-code.sh +28 -45
- package/docker/entrypoint-codex.sh +42 -0
- package/docker/entrypoint-goose.sh +5 -24
- package/docker/entrypoint-uid-remap.sh +93 -0
- package/package.json +39 -30
- package/src/workflow/workflows/design-and-code/README.md +50 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
- package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
- package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
- package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
- package/src/workflow/workflows/evolve/README.md +66 -0
- package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
- package/src/workflow/workflows/evolve/scripts/README.md +314 -0
- package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
- package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
- package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
- package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
- package/src/workflow/workflows/evolve/workflow.yaml +646 -0
- package/src/workflow/workflows/test-email-summary/workflow.yaml +1 -0
- package/src/workflow/workflows/vuln-discovery/README.md +54 -0
- package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
- package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
- package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
- package/src/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
- package/dist/mux/pty-bridge.js.map +0 -1
- package/dist/mux/trusted-input.js.map +0 -1
- package/dist/web-ui-static/assets/index-BFO5z1js.js +0 -76
- package/dist/web-ui-static/assets/index-CCUwrkIL.css +0 -1
- package/packages/web-ui/README.md +0 -113
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MITM token-trajectory capture: shared types.
|
|
3
|
+
*
|
|
4
|
+
* Types backing the on-disk JSONL schema (see
|
|
5
|
+
* docs/designs/mitm-token-trajectory-capture.md §4) and the dispatcher's
|
|
6
|
+
* internal state. The schema is the source of truth for the corpus
|
|
7
|
+
* downstream tooling consumes — keep field names byte-faithful with the
|
|
8
|
+
* design doc.
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionId } from '../session/types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Provider identity. `unknown` is reserved for hosts the capture sees but
|
|
13
|
+
* cannot classify (and is captured raw). `'openai'` is the OpenAI Responses
|
|
14
|
+
* API stream Codex emits on `chatgpt.com`.
|
|
15
|
+
*/
|
|
16
|
+
export type CaptureProvider = 'anthropic' | 'openai' | 'unknown';
|
|
17
|
+
/** Reason a session was poisoned. See §9 for the full taxonomy. */
|
|
18
|
+
export type PoisonReason = 'reassembly-failure' | 'disk-error' | 'queue-overflow' | 'mid-stream-abort' | 'infrastructure-teardown' | 'unsupported-encoding' | 'unknown';
|
|
19
|
+
/**
|
|
20
|
+
* Single HTTP exchange captured by the MITM proxy. One line per
|
|
21
|
+
* exchange in the on-disk JSONL.
|
|
22
|
+
*/
|
|
23
|
+
export interface ExchangeRecord {
|
|
24
|
+
readonly schemaVersion: 1;
|
|
25
|
+
readonly exchangeId: string;
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly persona?: string;
|
|
28
|
+
readonly workflowRunId?: string;
|
|
29
|
+
readonly bundleId?: string;
|
|
30
|
+
readonly recordedAgentName?: string;
|
|
31
|
+
readonly provider: CaptureProvider;
|
|
32
|
+
readonly method: string;
|
|
33
|
+
readonly host: string;
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly requestStartedAt: number;
|
|
36
|
+
readonly requestFinishedAt: number;
|
|
37
|
+
readonly responseFinishedAt: number;
|
|
38
|
+
readonly request: {
|
|
39
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
40
|
+
/** UTF-8 body when content-encoding is identity (or absent); empty otherwise. */
|
|
41
|
+
readonly bodyUtf8: string;
|
|
42
|
+
/** Present iff body is compressed or otherwise not valid UTF-8. */
|
|
43
|
+
readonly bodyBase64?: string;
|
|
44
|
+
readonly bodyBytes: number;
|
|
45
|
+
readonly contentEncoding?: string;
|
|
46
|
+
};
|
|
47
|
+
readonly response: {
|
|
48
|
+
readonly status: number;
|
|
49
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
50
|
+
readonly streaming: boolean;
|
|
51
|
+
readonly providerRequestId?: string;
|
|
52
|
+
readonly stopReason?: string;
|
|
53
|
+
readonly modelFingerprint?: string;
|
|
54
|
+
readonly usage?: Readonly<Record<string, unknown>>;
|
|
55
|
+
readonly bodyUtf8: string;
|
|
56
|
+
readonly bodyBase64?: string;
|
|
57
|
+
readonly bodyBytes: number;
|
|
58
|
+
readonly streamRaw?: {
|
|
59
|
+
readonly events: ReadonlyArray<{
|
|
60
|
+
readonly eventType: string;
|
|
61
|
+
readonly dataUtf8: string;
|
|
62
|
+
readonly offsetMs: number;
|
|
63
|
+
}>;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
readonly capture: {
|
|
67
|
+
readonly reassemblyOk: boolean;
|
|
68
|
+
readonly reassemblyDiagnostic?: string;
|
|
69
|
+
readonly retried?: boolean;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Single line in `manifest.jsonl`. Always one `session-start` paired
|
|
74
|
+
* with one `session-end` (modulo crash safety nets, where the start
|
|
75
|
+
* may exist without a matching end — see §9).
|
|
76
|
+
*/
|
|
77
|
+
export type ManifestEntry = {
|
|
78
|
+
readonly schemaVersion: 1;
|
|
79
|
+
readonly event: 'session-start';
|
|
80
|
+
readonly seq: number;
|
|
81
|
+
readonly sessionId: string;
|
|
82
|
+
readonly persona?: string;
|
|
83
|
+
readonly fsmState?: string;
|
|
84
|
+
readonly ts: string;
|
|
85
|
+
} | {
|
|
86
|
+
readonly schemaVersion: 1;
|
|
87
|
+
readonly event: 'session-end';
|
|
88
|
+
readonly seq: number;
|
|
89
|
+
readonly sessionId: string;
|
|
90
|
+
readonly persona?: string;
|
|
91
|
+
readonly fsmState?: string;
|
|
92
|
+
readonly ts: string;
|
|
93
|
+
readonly exchanges: number;
|
|
94
|
+
readonly bytesWritten: number;
|
|
95
|
+
readonly poisoned: boolean;
|
|
96
|
+
readonly poisonReason?: PoisonReason;
|
|
97
|
+
readonly closedReason?: 'infrastructure-teardown';
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Capture configuration. v0 surface is a single boolean — see §10 for
|
|
101
|
+
* the rationale (no knobs that would silently produce partial captures).
|
|
102
|
+
*/
|
|
103
|
+
export interface CaptureConfig {
|
|
104
|
+
readonly enabled: boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Inputs to `beginSession` / `beginCaptureSession`.
|
|
108
|
+
*/
|
|
109
|
+
export interface BeginCaptureSessionOptions {
|
|
110
|
+
readonly sessionId: SessionId;
|
|
111
|
+
readonly persona?: string;
|
|
112
|
+
readonly fsmState?: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Aggregate dispatcher diagnostics.
|
|
116
|
+
*/
|
|
117
|
+
export interface CaptureStats {
|
|
118
|
+
/** Records successfully written to disk across all sessions. */
|
|
119
|
+
readonly written: number;
|
|
120
|
+
/**
|
|
121
|
+
* Records dropped before disk (poisoned session, missing beginSession,
|
|
122
|
+
* etc.). Individual records are never dropped on successful sessions;
|
|
123
|
+
* this is for diagnostic visibility only.
|
|
124
|
+
*/
|
|
125
|
+
readonly dropped: number;
|
|
126
|
+
readonly queued: number;
|
|
127
|
+
readonly bytesWritten: number;
|
|
128
|
+
readonly openSessions: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Reassembler interface. Each provider has its own state machine; the
|
|
132
|
+
* dispatcher routes by host. See §5 for the byte-fidelity rules.
|
|
133
|
+
*/
|
|
134
|
+
export interface Reassembler {
|
|
135
|
+
/** Feed raw response chunk bytes (verbatim). */
|
|
136
|
+
push(chunk: Buffer): void;
|
|
137
|
+
/**
|
|
138
|
+
* Signal that the upstream response stream closed cleanly. Returns
|
|
139
|
+
* the reassembled body plus structured fields. Throws (or marks the
|
|
140
|
+
* reassembly as failed) if the stream did not finish in a well-formed
|
|
141
|
+
* state. After `finalize()`, the reassembler MUST NOT be reused.
|
|
142
|
+
*/
|
|
143
|
+
finalize(): ReassemblyResult;
|
|
144
|
+
/**
|
|
145
|
+
* True once the provider's terminal event has been parsed
|
|
146
|
+
* (`message_stop` / `[DONE]` / `response.completed`). Lets the tap
|
|
147
|
+
* finalize a complete-but-socket-aborted stream (write a faithful
|
|
148
|
+
* record) instead of poisoning it as a mid-stream abort. When false,
|
|
149
|
+
* a close/error before the terminal event is a genuine truncation.
|
|
150
|
+
*/
|
|
151
|
+
canFinalize(): boolean;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Output of a successful reassembly.
|
|
155
|
+
*/
|
|
156
|
+
export interface ReassemblyResult {
|
|
157
|
+
/**
|
|
158
|
+
* Reassembled body as a string. Constructed via raw substring
|
|
159
|
+
* concatenation of wire bytes — never JSON.parse → JSON.stringify
|
|
160
|
+
* on captured content. See §6 invariant #1.
|
|
161
|
+
*/
|
|
162
|
+
readonly bodyUtf8: string;
|
|
163
|
+
readonly providerRequestId?: string;
|
|
164
|
+
readonly stopReason?: string;
|
|
165
|
+
readonly modelFingerprint?: string;
|
|
166
|
+
readonly usage?: Readonly<Record<string, unknown>>;
|
|
167
|
+
/** Raw event log for diagnostics (`streamRaw.events`). */
|
|
168
|
+
readonly events: ReadonlyArray<{
|
|
169
|
+
readonly eventType: string;
|
|
170
|
+
readonly dataUtf8: string;
|
|
171
|
+
readonly offsetMs: number;
|
|
172
|
+
}>;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Headers/body redaction is centralized so the writer-input unit test
|
|
176
|
+
* (§12 test #2(a)) can drive the redaction layer directly without a
|
|
177
|
+
* proxy.
|
|
178
|
+
*/
|
|
179
|
+
export declare const REDACTED_HEADER_NAMES: ReadonlySet<string>;
|
|
180
|
+
export declare const REDACTED_VALUE = "<redacted>";
|
|
181
|
+
/**
|
|
182
|
+
* Drop / replace any header in the redaction set. Case-insensitive on
|
|
183
|
+
* the name. Always emits the redaction sentinel so the schema shape is
|
|
184
|
+
* preserved (downstream tooling can see that a header was present and
|
|
185
|
+
* stripped, vs. truly absent).
|
|
186
|
+
*/
|
|
187
|
+
export declare function redactHeaders(headers: Readonly<Record<string, string | string[] | undefined>>): Record<string, string>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MITM token-trajectory capture: shared types.
|
|
3
|
+
*
|
|
4
|
+
* Types backing the on-disk JSONL schema (see
|
|
5
|
+
* docs/designs/mitm-token-trajectory-capture.md §4) and the dispatcher's
|
|
6
|
+
* internal state. The schema is the source of truth for the corpus
|
|
7
|
+
* downstream tooling consumes — keep field names byte-faithful with the
|
|
8
|
+
* design doc.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Headers/body redaction is centralized so the writer-input unit test
|
|
12
|
+
* (§12 test #2(a)) can drive the redaction layer directly without a
|
|
13
|
+
* proxy.
|
|
14
|
+
*/
|
|
15
|
+
export const REDACTED_HEADER_NAMES = new Set([
|
|
16
|
+
'authorization',
|
|
17
|
+
'x-api-key',
|
|
18
|
+
'proxy-authorization',
|
|
19
|
+
'cookie',
|
|
20
|
+
'set-cookie',
|
|
21
|
+
]);
|
|
22
|
+
export const REDACTED_VALUE = '<redacted>';
|
|
23
|
+
/**
|
|
24
|
+
* Drop / replace any header in the redaction set. Case-insensitive on
|
|
25
|
+
* the name. Always emits the redaction sentinel so the schema shape is
|
|
26
|
+
* preserved (downstream tooling can see that a header was present and
|
|
27
|
+
* stripped, vs. truly absent).
|
|
28
|
+
*/
|
|
29
|
+
export function redactHeaders(headers) {
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
32
|
+
if (value === undefined)
|
|
33
|
+
continue;
|
|
34
|
+
const lower = name.toLowerCase();
|
|
35
|
+
if (REDACTED_HEADER_NAMES.has(lower)) {
|
|
36
|
+
out[lower] = REDACTED_VALUE;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
out[lower] = Array.isArray(value) ? value.join(', ') : value;
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=trajectory-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory-types.js","sourceRoot":"","sources":["../../src/docker/trajectory-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6LH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,eAAe;IACf,WAAW;IACX,qBAAqB;IACrB,QAAQ;IACR,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgE;IAEhE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/docker/types.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export interface DockerContainerConfig {
|
|
|
42
42
|
* on standalone CLI / PTY sessions (which have no scope concept).
|
|
43
43
|
*/
|
|
44
44
|
readonly scopeLabel?: string;
|
|
45
|
+
/** Additional runtime ownership/housekeeping labels. */
|
|
46
|
+
readonly labels?: Readonly<Record<string, string>>;
|
|
45
47
|
/** Extra --add-host entries (e.g. ["host.docker.internal:172.30.0.3"]). When set, suppresses the default host-gateway mapping. */
|
|
46
48
|
readonly extraHosts?: readonly string[];
|
|
47
49
|
/** Optional resource limits. */
|
|
@@ -83,6 +85,23 @@ export interface DockerContainerConfig {
|
|
|
83
85
|
* Optional. Defaults to false (no TTY allocated).
|
|
84
86
|
*/
|
|
85
87
|
readonly tty?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Guest-listens / host-connects Unix-domain-socket bridges
|
|
90
|
+
* (`container create --publish-socket <hostPath>:<containerPath>`).
|
|
91
|
+
*
|
|
92
|
+
* Apple `container` only — the runtime creates a vsock relay so a
|
|
93
|
+
* socket the guest `bind()`s at `containerPath` becomes reachable on
|
|
94
|
+
* the host at `hostPath`. Used by PTY mode on the `uds` topology to
|
|
95
|
+
* expose the in-container PTY listener without any network interface.
|
|
96
|
+
* The host-side socket materializes when the guest binds, so
|
|
97
|
+
* existence-polling is a valid readiness signal.
|
|
98
|
+
*
|
|
99
|
+
* Docker has no equivalent; `buildCreateArgs` throws when this is set.
|
|
100
|
+
*/
|
|
101
|
+
readonly publishSockets?: readonly {
|
|
102
|
+
readonly hostPath: string;
|
|
103
|
+
readonly containerPath: string;
|
|
104
|
+
}[];
|
|
86
105
|
/**
|
|
87
106
|
* Override the container's effective user at creation time.
|
|
88
107
|
* Maps to `docker create --user <value>` (formats: `uid`, `uid:gid`,
|
|
@@ -117,15 +136,67 @@ export interface DockerExecResult {
|
|
|
117
136
|
readonly stdout: string;
|
|
118
137
|
readonly stderr: string;
|
|
119
138
|
}
|
|
139
|
+
export interface DockerCommitOptions {
|
|
140
|
+
readonly tag?: string;
|
|
141
|
+
readonly changes?: readonly string[];
|
|
142
|
+
readonly pause?: boolean;
|
|
143
|
+
readonly timeoutMs?: number;
|
|
144
|
+
/**
|
|
145
|
+
* When true, snapshot through docker export/import instead of docker commit
|
|
146
|
+
* so the resulting image is flattened and does not retain the source image
|
|
147
|
+
* as an inspectable parent (a superseded snapshot digest can then be
|
|
148
|
+
* force-removed without a dependent-child-image conflict). Intended for
|
|
149
|
+
* workflow resume snapshots. The image Config that export/import would
|
|
150
|
+
* otherwise drop (ENTRYPOINT/CMD/WORKDIR/USER/ENV) is re-baked from the
|
|
151
|
+
* source container, so a flattened image still behaves like its source.
|
|
152
|
+
*/
|
|
153
|
+
readonly flatten?: boolean;
|
|
154
|
+
}
|
|
155
|
+
export interface DockerImageInfo {
|
|
156
|
+
readonly id: string;
|
|
157
|
+
readonly repoTags: readonly string[];
|
|
158
|
+
readonly labels: Readonly<Record<string, string>>;
|
|
159
|
+
readonly created: string;
|
|
160
|
+
}
|
|
161
|
+
/** Docker network state used by crash reconciliation and subnet allocation. */
|
|
162
|
+
export interface DockerNetworkInfo {
|
|
163
|
+
readonly id: string;
|
|
164
|
+
readonly name: string;
|
|
165
|
+
readonly created: string;
|
|
166
|
+
readonly labels: Readonly<Record<string, string>>;
|
|
167
|
+
readonly subnets: readonly string[];
|
|
168
|
+
readonly containerIds: readonly string[];
|
|
169
|
+
}
|
|
170
|
+
/** Docker container state used by crash reconciliation. */
|
|
171
|
+
export interface DockerContainerInfo {
|
|
172
|
+
readonly id: string;
|
|
173
|
+
readonly name: string;
|
|
174
|
+
readonly created: string;
|
|
175
|
+
readonly running: boolean;
|
|
176
|
+
readonly labels: Readonly<Record<string, string>>;
|
|
177
|
+
}
|
|
178
|
+
export interface DockerNetworkCreateOptions {
|
|
179
|
+
readonly internal?: boolean;
|
|
180
|
+
readonly subnet?: string;
|
|
181
|
+
readonly gateway?: string;
|
|
182
|
+
readonly labels?: Readonly<Record<string, string>>;
|
|
183
|
+
}
|
|
120
184
|
/**
|
|
121
|
-
* Manages
|
|
185
|
+
* Manages container lifecycle for agent sessions.
|
|
186
|
+
*
|
|
187
|
+
* Implementations wrap a specific container runtime CLI -- Docker today
|
|
188
|
+
* (`createDockerManager()` in docker-manager.ts), Apple `container` planned
|
|
189
|
+
* (see docs/designs/apple-container-runtime.md). Select via
|
|
190
|
+
* `createContainerRuntime()` in container-runtime.ts.
|
|
122
191
|
*
|
|
123
|
-
*
|
|
124
|
-
* The
|
|
125
|
-
*
|
|
192
|
+
* Implementations use the runtime's CLI (not an engine API) for simplicity.
|
|
193
|
+
* The runtime is only invoked from the host process, never from inside
|
|
194
|
+
* agent containers.
|
|
126
195
|
*/
|
|
127
|
-
export interface
|
|
128
|
-
/**
|
|
196
|
+
export interface ContainerRuntime {
|
|
197
|
+
/** True when this runtime can commit containers to images and manage snapshot images. */
|
|
198
|
+
readonly supportsImageSnapshots: boolean;
|
|
199
|
+
/** Check that the runtime is available and the image exists. */
|
|
129
200
|
preflight(image: string): Promise<void>;
|
|
130
201
|
/** Create a container with the given configuration. Returns container ID. */
|
|
131
202
|
create(config: DockerContainerConfig): Promise<string>;
|
|
@@ -145,8 +216,10 @@ export interface DockerManager {
|
|
|
145
216
|
* - `null`: skip the `--user` flag entirely. Required for non-agent
|
|
146
217
|
* containers that have no `codespace` account (e.g. the
|
|
147
218
|
* `bbernhard/signal-cli-rest-api` image).
|
|
219
|
+
* @param workdir - optional working directory passed via
|
|
220
|
+
* `docker exec --workdir <dir>`.
|
|
148
221
|
*/
|
|
149
|
-
exec(nameOrId: string, command: readonly string[], timeoutMs?: number, execUser?: string | null): Promise<DockerExecResult>;
|
|
222
|
+
exec(nameOrId: string, command: readonly string[], timeoutMs?: number, execUser?: string | null, workdir?: string): Promise<DockerExecResult>;
|
|
150
223
|
/** Stop a running container (SIGTERM, then SIGKILL after grace period). */
|
|
151
224
|
stop(nameOrId: string): Promise<void>;
|
|
152
225
|
/** Remove a container (must be stopped). */
|
|
@@ -155,18 +228,42 @@ export interface DockerManager {
|
|
|
155
228
|
isRunning(nameOrId: string): Promise<boolean>;
|
|
156
229
|
/** Check if a Docker image exists locally. */
|
|
157
230
|
imageExists(image: string): Promise<boolean>;
|
|
231
|
+
/** Commit a container writable layer to an image and return its immutable sha256 image ID. */
|
|
232
|
+
commit(containerId: string, options?: DockerCommitOptions): Promise<string>;
|
|
233
|
+
/** Remove a Docker image by digest or tag. Returns true when a removal was attempted successfully. */
|
|
234
|
+
removeImage(ref: string): Promise<boolean>;
|
|
235
|
+
/** List local Docker images, optionally filtered by label. */
|
|
236
|
+
listImages(options?: {
|
|
237
|
+
readonly labelFilter?: string;
|
|
238
|
+
}): Promise<readonly DockerImageInfo[]>;
|
|
239
|
+
/** Inspect one local Docker image. Returns undefined when the image does not exist. */
|
|
240
|
+
inspectImage(ref: string): Promise<DockerImageInfo | undefined>;
|
|
158
241
|
/** Build a Docker image from a Dockerfile. Optional labels are stamped on the image. */
|
|
159
242
|
buildImage(tag: string, dockerfilePath: string, contextDir: string, labels?: Record<string, string>): Promise<void>;
|
|
160
243
|
/** Read a label value from a Docker image. Returns undefined if image or label doesn't exist. */
|
|
161
244
|
getImageLabel(image: string, label: string): Promise<string | undefined>;
|
|
245
|
+
/**
|
|
246
|
+
* Probe the version string of an agent binary baked into an image by running
|
|
247
|
+
* a throwaway, network-isolated container (`run --rm --network none
|
|
248
|
+
* --entrypoint <command[0]> <image> <command[1..]>`) and returning its trimmed
|
|
249
|
+
* stdout. Network isolation is required — the probe executes an agent binary
|
|
250
|
+
* that may attempt update-check/telemetry egress. Best-effort: returns
|
|
251
|
+
* undefined on any failure. Optional — runtimes that cannot cheaply run an
|
|
252
|
+
* ephemeral container may omit it, in which case callers skip version logging.
|
|
253
|
+
*/
|
|
254
|
+
probeImageVersion?(image: string, command: readonly string[]): Promise<string | undefined>;
|
|
162
255
|
/** Create a Docker network. No-op if it already exists. */
|
|
163
|
-
createNetwork(name: string, options?:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
256
|
+
createNetwork(name: string, options?: DockerNetworkCreateOptions): Promise<void>;
|
|
257
|
+
/** Enumerate Docker networks. Optional for non-Docker runtimes. */
|
|
258
|
+
listNetworks?(): Promise<readonly DockerNetworkInfo[]>;
|
|
259
|
+
/** Enumerate Docker containers, including stopped containers. Optional for non-Docker runtimes. */
|
|
260
|
+
listContainers?(options?: {
|
|
261
|
+
readonly labelFilter?: string;
|
|
262
|
+
}): Promise<readonly DockerContainerInfo[]>;
|
|
168
263
|
/** Remove a Docker network. Ignores errors (e.g., already removed). */
|
|
169
264
|
removeNetwork(name: string): Promise<void>;
|
|
265
|
+
/** Check whether a named network still exists. Optional for non-Docker runtimes. */
|
|
266
|
+
networkExists?(name: string): Promise<boolean>;
|
|
170
267
|
/** Pull a Docker image from a registry. */
|
|
171
268
|
pullImage(image: string): Promise<void>;
|
|
172
269
|
/**
|
|
@@ -186,6 +283,13 @@ export interface DockerManager {
|
|
|
186
283
|
getImageId(nameOrId: string): Promise<string | undefined>;
|
|
187
284
|
/** Connect an existing container to a Docker network. */
|
|
188
285
|
connectNetwork(networkName: string, containerId: string): Promise<void>;
|
|
286
|
+
/**
|
|
287
|
+
* Returns the host-side IPv4 gateway address of a network, or undefined
|
|
288
|
+
* if the network does not exist or has no gateway. Optional: only the
|
|
289
|
+
* tcp-hostonly topology consumes it (see network-topology.ts), and it
|
|
290
|
+
* falls back to deriving the gateway from the subnet when absent.
|
|
291
|
+
*/
|
|
292
|
+
getNetworkGateway?(name: string): Promise<string | undefined>;
|
|
189
293
|
/** Get a container's IP address on a specific network. */
|
|
190
294
|
getContainerIp(containerId: string, network: string): Promise<string>;
|
|
191
295
|
}
|
package/dist/doctor/checks.d.ts
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* responsible for translating results into an exit code so unit tests
|
|
7
7
|
* can call check functions directly without short-circuits.
|
|
8
8
|
*/
|
|
9
|
-
import { type DockerAvailability } from '../
|
|
9
|
+
import { type DockerAvailability } from '../docker/docker-probe.js';
|
|
10
|
+
import { type ContainerRuntimeKind } from '../docker/container-runtime.js';
|
|
10
11
|
import { type ExecFileFn } from '../docker/resource-limits.js';
|
|
11
12
|
import type { AgentId } from '../docker/agent-adapter.js';
|
|
12
13
|
import { loadGeneratedPolicy, findAnnotationServerDrift } from '../config/index.js';
|
|
@@ -29,19 +30,51 @@ export declare function checkSandbox(): Promise<CheckResult>;
|
|
|
29
30
|
* be reused in contexts that don't care about preferred mode.
|
|
30
31
|
*/
|
|
31
32
|
export declare function checkDocker(probe?: () => Promise<DockerAvailability>): Promise<CheckResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Reports Apple `container` runtime status. `skip` on platforms where the
|
|
35
|
+
* backend is structurally unavailable (non-macOS, Intel, pre-macOS-26);
|
|
36
|
+
* `warn` when the platform qualifies but the CLI/services are not ready —
|
|
37
|
+
* `checkActiveRuntime` upgrades that to a fail when this backend is the
|
|
38
|
+
* one sessions will actually use.
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkAppleContainer(probe?: () => Promise<DockerAvailability>, hostPlatform?: string, hostArch?: string): Promise<CheckResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Reports whether Rosetta is installed. Only meaningful when the Apple
|
|
43
|
+
* container backend is in play: its BuildKit builder VM requires Rosetta,
|
|
44
|
+
* so agent-image builds fail without it. Probed by running an x86_64
|
|
45
|
+
* binary under `arch` — exits 0 iff Rosetta can translate it.
|
|
46
|
+
*/
|
|
47
|
+
export declare function checkRosetta(runX86?: () => boolean): CheckResult;
|
|
48
|
+
/** Output of checkActiveRuntime: the resolved backend plus its availability. */
|
|
49
|
+
export interface ActiveRuntime {
|
|
50
|
+
readonly result: CheckResult;
|
|
51
|
+
readonly kind: ContainerRuntimeKind;
|
|
52
|
+
/** Human label for messages ("Docker" / "Apple container"). */
|
|
53
|
+
readonly label: string;
|
|
54
|
+
/** The availability CheckResult of the backend sessions will use. */
|
|
55
|
+
readonly availability: CheckResult;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolves which container runtime sessions will use (env override >
|
|
59
|
+
* `containerRuntime` config > auto probe) and pairs it with the matching
|
|
60
|
+
* availability result from the Environment section, so downstream checks
|
|
61
|
+
* (preferred mode, resource limits) evaluate the backend that actually
|
|
62
|
+
* runs — not unconditionally Docker.
|
|
63
|
+
*/
|
|
64
|
+
export declare function checkActiveRuntime(config: IronCurtainConfig, dockerResult: CheckResult, appleResult: CheckResult): Promise<ActiveRuntime>;
|
|
32
65
|
/**
|
|
33
66
|
* Reports whether the user's `preferredMode` is satisfiable on this host.
|
|
34
67
|
*
|
|
35
68
|
* Reuses the prior `dockerResult` from `checkDocker` so Docker is probed
|
|
36
|
-
* exactly once per `doctor` run. Maps the (preferredMode ×
|
|
69
|
+
* exactly once per `doctor` run. Maps the (preferredMode × runtime availability ×
|
|
37
70
|
* api-key-presence) tuple to a status:
|
|
38
71
|
*
|
|
39
|
-
* - preferredMode: '
|
|
40
|
-
* - preferredMode: '
|
|
72
|
+
* - preferredMode: 'container' + active runtime ok -> ok
|
|
73
|
+
* - preferredMode: 'container' + active runtime unavailable -> fail (sessions will refuse to start)
|
|
41
74
|
* - preferredMode: 'builtin' + API key present -> ok
|
|
42
75
|
* - preferredMode: 'builtin' + no API key -> warn (sessions will fail to start by default)
|
|
43
76
|
*/
|
|
44
|
-
export declare function checkPreferredMode(config: IronCurtainConfig, dockerResult: CheckResult): CheckResult;
|
|
77
|
+
export declare function checkPreferredMode(config: IronCurtainConfig, dockerResult: CheckResult, runtimeLabel?: string): CheckResult;
|
|
45
78
|
/**
|
|
46
79
|
* Reports whether the user's Docker resource ceilings (after clamping)
|
|
47
80
|
* are accepted by Docker. Two-step:
|
|
@@ -63,7 +96,7 @@ export interface CheckDockerResourcesDeps {
|
|
|
63
96
|
readonly execFile?: ExecFileFn;
|
|
64
97
|
readonly resolveImage?: (agentId: AgentId) => Promise<string>;
|
|
65
98
|
}
|
|
66
|
-
export declare function checkDockerResources(config: IronCurtainConfig, deps?: CheckDockerResourcesDeps): Promise<CheckResult>;
|
|
99
|
+
export declare function checkDockerResources(config: IronCurtainConfig, deps?: CheckDockerResourcesDeps, runtimeKind?: ContainerRuntimeKind): Promise<CheckResult>;
|
|
67
100
|
export interface ConfigLoadOk {
|
|
68
101
|
readonly result: CheckResult;
|
|
69
102
|
readonly config: IronCurtainConfig;
|