@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,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fan-out lane templating for the evolve workflow's per-lane working areas.
|
|
3
|
+
*
|
|
4
|
+
* Under N-way fan-out (`docs/designs/evolve-sync-parallelism-slice.md` §7), the
|
|
5
|
+
* shared `current/` scratch directory collides across lanes, so each lane runs
|
|
6
|
+
* in its own `current/lane_<k>/` sub-path. This module rewrites the three
|
|
7
|
+
* surfaces that hardcode `current/`: agent prompts (via `{laneDir}`/`{laneId}`
|
|
8
|
+
* placeholders, §7.3), deterministic argv paths (via current-prefix rewriting,
|
|
9
|
+
* §7.1), and the per-lane `--lane <k>` flag the bridge reads (§7.1/§8.4).
|
|
10
|
+
*
|
|
11
|
+
* ESCAPING INVARIANT (read before adding a new caller). Every substitution here
|
|
12
|
+
* is a LITERAL text replacement, and the substituted values are
|
|
13
|
+
* orchestrator-controlled trusted lane identities: `lane.id` is a non-negative
|
|
14
|
+
* integer the orchestrator assigns (`buildFanOutLaneContext`), and `lane.dir` /
|
|
15
|
+
* `lane.relativeDir` are orchestrator-computed `…/current/lane_<id>` paths — none
|
|
16
|
+
* of them ever carry agent- or user-authored text. The rendered result is
|
|
17
|
+
* concatenated into a prompt (free text) or an argv array, so NO shell, markdown,
|
|
18
|
+
* or argv escaping is performed here. That is sound ONLY because of this
|
|
19
|
+
* invariant. A future caller MUST NOT template untrusted data (agent output, user
|
|
20
|
+
* input, file contents) through these helpers — doing so would inject unescaped
|
|
21
|
+
* text into a prompt/argv. If you need to interpolate untrusted data, escape it
|
|
22
|
+
* at the call site first; do not relax this module to do it for you.
|
|
23
|
+
*/
|
|
24
|
+
import type { WorkflowContext, FanOutDefinition, WorkflowSettings } from './types.js';
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the effective lane count for a fan-out state, exactly as the runtime
|
|
27
|
+
* does at `orchestrator.ts` (`runFanOutSegment`): `count: 'workers'` defers to
|
|
28
|
+
* `settings.workers` (default 1), while a numeric `count` is a per-state override
|
|
29
|
+
* independent of the global worker count.
|
|
30
|
+
*
|
|
31
|
+
* Single source of truth so the validator and linter gate their multi-lane
|
|
32
|
+
* safety checks on the SAME lane count the runtime will spin up — a numeric
|
|
33
|
+
* `count` override must not be able to bypass those checks just because
|
|
34
|
+
* `settings.workers` is 1. Keep in lockstep with the orchestrator's resolution.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveFanOutWorkers(fanOut: FanOutDefinition, settings?: WorkflowSettings): number;
|
|
37
|
+
export declare const DEFAULT_EVOLVE_LANE_DIR = "/workspace/.evolve_runs/main/current";
|
|
38
|
+
/**
|
|
39
|
+
* Zero-pad width of the `step_<NNNN>` batch index. Mirrors the Python `:04d`
|
|
40
|
+
* format in `scripts/evolve_result.py` (`step_{batch_index:04d}_lane_{lane}`).
|
|
41
|
+
*/
|
|
42
|
+
export declare const EVOLVE_STEP_INDEX_WIDTH = 4;
|
|
43
|
+
/**
|
|
44
|
+
* The single TS spelling of the fan-out step name `step_<NNNN>_lane_<k>` (the
|
|
45
|
+
* other half of the lane-dir seam above). The Python bridge writes the same
|
|
46
|
+
* literal at `f"step_{batch_index:04d}_lane_{lane}"`; the orchestrator parses it
|
|
47
|
+
* back with EVOLVE_LANE_STEP_RE. Keep all three (this fn, the Python f-string,
|
|
48
|
+
* the regex) in lockstep — they are one cross-language format contract.
|
|
49
|
+
*/
|
|
50
|
+
export declare function evolveStepName(batchIndex: number, lane: number): string;
|
|
51
|
+
export declare const DEFAULT_EVOLVE_LANE_RELATIVE_DIR = ".evolve_runs/main/current";
|
|
52
|
+
/**
|
|
53
|
+
* The bridge script basename. Exported so the orchestrator matches fan-out
|
|
54
|
+
* sample commands against the same literal this module uses for `--lane`
|
|
55
|
+
* injection, instead of re-spelling the find/`endsWith` matcher (see
|
|
56
|
+
* {@link evolveResultScriptIndex}).
|
|
57
|
+
*/
|
|
58
|
+
export declare const EVOLVE_RESULT_SCRIPT = "evolve_result.py";
|
|
59
|
+
/**
|
|
60
|
+
* Substitutes the `{laneDir}` / `{laneRelativeDir}` / `{laneRelDir}` /
|
|
61
|
+
* `{laneId}` / `${laneId}` placeholders in `value` with this lane's trusted
|
|
62
|
+
* identity (falling back to the bare `current/` dir and lane id `0` when no lane
|
|
63
|
+
* is active, so `workers: 1` renders the legacy paths). Pure literal replacement
|
|
64
|
+
* — see the module's ESCAPING INVARIANT.
|
|
65
|
+
*/
|
|
66
|
+
export declare function applyLaneTemplate(value: string, context: WorkflowContext): string;
|
|
67
|
+
/**
|
|
68
|
+
* Lane-scopes a path: first applies the placeholder templating, then rewrites a
|
|
69
|
+
* bare `…/current/<rest>` prefix to `…/current/lane_<k>/<rest>` (both the
|
|
70
|
+
* container-absolute `DEFAULT_EVOLVE_LANE_DIR` and the workspace-relative
|
|
71
|
+
* `DEFAULT_EVOLVE_LANE_RELATIVE_DIR` forms). Returns `value` unchanged when no
|
|
72
|
+
* lane is active. See the module's ESCAPING INVARIANT for why the values are
|
|
73
|
+
* trusted.
|
|
74
|
+
*/
|
|
75
|
+
export declare function laneScopeEvolveCurrentPath(value: string, context: WorkflowContext): string;
|
|
76
|
+
/**
|
|
77
|
+
* Lane-scopes every path argument in a deterministic `run:` command, then
|
|
78
|
+
* injects `--lane <id>` after the bridge subcommand for the lane-aware
|
|
79
|
+
* subcommands ({@link EVOLVE_LANE_AWARE_COMMANDS}). Returns the command
|
|
80
|
+
* unchanged when no lane is active. See the module's ESCAPING INVARIANT.
|
|
81
|
+
*/
|
|
82
|
+
export declare function templateLaneCommand(command: readonly string[], context: WorkflowContext): readonly string[];
|
|
83
|
+
/**
|
|
84
|
+
* Finds the index of the {@link EVOLVE_RESULT_SCRIPT} bridge entry in a command
|
|
85
|
+
* argv (matching either the bare basename or any `…/evolve_result.py` path), or
|
|
86
|
+
* `-1` if absent. The single source of truth for locating the bridge so the
|
|
87
|
+
* orchestrator and the `--lane` injector agree on what counts as the script.
|
|
88
|
+
*/
|
|
89
|
+
export declare function evolveResultScriptIndex(command: readonly string[]): number;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the effective lane count for a fan-out state, exactly as the runtime
|
|
3
|
+
* does at `orchestrator.ts` (`runFanOutSegment`): `count: 'workers'` defers to
|
|
4
|
+
* `settings.workers` (default 1), while a numeric `count` is a per-state override
|
|
5
|
+
* independent of the global worker count.
|
|
6
|
+
*
|
|
7
|
+
* Single source of truth so the validator and linter gate their multi-lane
|
|
8
|
+
* safety checks on the SAME lane count the runtime will spin up — a numeric
|
|
9
|
+
* `count` override must not be able to bypass those checks just because
|
|
10
|
+
* `settings.workers` is 1. Keep in lockstep with the orchestrator's resolution.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveFanOutWorkers(fanOut, settings) {
|
|
13
|
+
return fanOut.count === 'workers' ? (settings?.workers ?? 1) : fanOut.count;
|
|
14
|
+
}
|
|
15
|
+
// Lane-dir format seam: `current/lane_<k>`. The matching step-name half of this
|
|
16
|
+
// convention lives on the Python side as STEP_NAME_RE in
|
|
17
|
+
// scripts/evolve_result.py (`step_<NNNN>_lane_<k>`) — keep both in sync if the
|
|
18
|
+
// lane/step naming ever changes.
|
|
19
|
+
export const DEFAULT_EVOLVE_LANE_DIR = '/workspace/.evolve_runs/main/current';
|
|
20
|
+
/**
|
|
21
|
+
* Zero-pad width of the `step_<NNNN>` batch index. Mirrors the Python `:04d`
|
|
22
|
+
* format in `scripts/evolve_result.py` (`step_{batch_index:04d}_lane_{lane}`).
|
|
23
|
+
*/
|
|
24
|
+
export const EVOLVE_STEP_INDEX_WIDTH = 4;
|
|
25
|
+
/**
|
|
26
|
+
* The single TS spelling of the fan-out step name `step_<NNNN>_lane_<k>` (the
|
|
27
|
+
* other half of the lane-dir seam above). The Python bridge writes the same
|
|
28
|
+
* literal at `f"step_{batch_index:04d}_lane_{lane}"`; the orchestrator parses it
|
|
29
|
+
* back with EVOLVE_LANE_STEP_RE. Keep all three (this fn, the Python f-string,
|
|
30
|
+
* the regex) in lockstep — they are one cross-language format contract.
|
|
31
|
+
*/
|
|
32
|
+
export function evolveStepName(batchIndex, lane) {
|
|
33
|
+
return `step_${String(batchIndex).padStart(EVOLVE_STEP_INDEX_WIDTH, '0')}_lane_${lane}`;
|
|
34
|
+
}
|
|
35
|
+
export const DEFAULT_EVOLVE_LANE_RELATIVE_DIR = '.evolve_runs/main/current';
|
|
36
|
+
/**
|
|
37
|
+
* The bridge script basename. Exported so the orchestrator matches fan-out
|
|
38
|
+
* sample commands against the same literal this module uses for `--lane`
|
|
39
|
+
* injection, instead of re-spelling the find/`endsWith` matcher (see
|
|
40
|
+
* {@link evolveResultScriptIndex}).
|
|
41
|
+
*/
|
|
42
|
+
export const EVOLVE_RESULT_SCRIPT = 'evolve_result.py';
|
|
43
|
+
const EVOLVE_LANE_AWARE_COMMANDS = new Set(['sample', 'evaluate', 'record', 'attach_analysis']);
|
|
44
|
+
function laneId(context) {
|
|
45
|
+
return String(context.lane?.id ?? 0);
|
|
46
|
+
}
|
|
47
|
+
function laneDir(context) {
|
|
48
|
+
return context.lane?.dir ?? DEFAULT_EVOLVE_LANE_DIR;
|
|
49
|
+
}
|
|
50
|
+
function laneRelativeDir(context) {
|
|
51
|
+
return context.lane?.relativeDir ?? DEFAULT_EVOLVE_LANE_RELATIVE_DIR;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Substitutes the `{laneDir}` / `{laneRelativeDir}` / `{laneRelDir}` /
|
|
55
|
+
* `{laneId}` / `${laneId}` placeholders in `value` with this lane's trusted
|
|
56
|
+
* identity (falling back to the bare `current/` dir and lane id `0` when no lane
|
|
57
|
+
* is active, so `workers: 1` renders the legacy paths). Pure literal replacement
|
|
58
|
+
* — see the module's ESCAPING INVARIANT.
|
|
59
|
+
*/
|
|
60
|
+
export function applyLaneTemplate(value, context) {
|
|
61
|
+
let rendered = value;
|
|
62
|
+
rendered = rendered.replaceAll('{laneDir}', laneDir(context));
|
|
63
|
+
rendered = rendered.replaceAll('{laneRelativeDir}', laneRelativeDir(context));
|
|
64
|
+
rendered = rendered.replaceAll('{laneRelDir}', laneRelativeDir(context));
|
|
65
|
+
rendered = rendered.replaceAll('${laneId}', laneId(context));
|
|
66
|
+
rendered = rendered.replaceAll('{laneId}', laneId(context));
|
|
67
|
+
return rendered;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Lane-scopes a path: first applies the placeholder templating, then rewrites a
|
|
71
|
+
* bare `…/current/<rest>` prefix to `…/current/lane_<k>/<rest>` (both the
|
|
72
|
+
* container-absolute `DEFAULT_EVOLVE_LANE_DIR` and the workspace-relative
|
|
73
|
+
* `DEFAULT_EVOLVE_LANE_RELATIVE_DIR` forms). Returns `value` unchanged when no
|
|
74
|
+
* lane is active. See the module's ESCAPING INVARIANT for why the values are
|
|
75
|
+
* trusted.
|
|
76
|
+
*/
|
|
77
|
+
export function laneScopeEvolveCurrentPath(value, context) {
|
|
78
|
+
const lane = context.lane;
|
|
79
|
+
if (!lane)
|
|
80
|
+
return applyLaneTemplate(value, context);
|
|
81
|
+
let rendered = applyLaneTemplate(value, context);
|
|
82
|
+
rendered = replaceCurrentPrefix(rendered, DEFAULT_EVOLVE_LANE_DIR, lane.dir);
|
|
83
|
+
rendered = replaceCurrentPrefix(rendered, DEFAULT_EVOLVE_LANE_RELATIVE_DIR, lane.relativeDir);
|
|
84
|
+
return rendered;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Lane-scopes every path argument in a deterministic `run:` command, then
|
|
88
|
+
* injects `--lane <id>` after the bridge subcommand for the lane-aware
|
|
89
|
+
* subcommands ({@link EVOLVE_LANE_AWARE_COMMANDS}). Returns the command
|
|
90
|
+
* unchanged when no lane is active. See the module's ESCAPING INVARIANT.
|
|
91
|
+
*/
|
|
92
|
+
export function templateLaneCommand(command, context) {
|
|
93
|
+
const templated = command.map((arg) => laneScopeEvolveCurrentPath(arg, context));
|
|
94
|
+
const lane = context.lane;
|
|
95
|
+
if (!lane)
|
|
96
|
+
return templated;
|
|
97
|
+
return injectEvolveLaneArg(templated, lane.id);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Finds the index of the {@link EVOLVE_RESULT_SCRIPT} bridge entry in a command
|
|
101
|
+
* argv (matching either the bare basename or any `…/evolve_result.py` path), or
|
|
102
|
+
* `-1` if absent. The single source of truth for locating the bridge so the
|
|
103
|
+
* orchestrator and the `--lane` injector agree on what counts as the script.
|
|
104
|
+
*/
|
|
105
|
+
export function evolveResultScriptIndex(command) {
|
|
106
|
+
return command.findIndex((arg) => arg === EVOLVE_RESULT_SCRIPT || arg.endsWith(`/${EVOLVE_RESULT_SCRIPT}`));
|
|
107
|
+
}
|
|
108
|
+
function replaceCurrentPrefix(value, currentDir, replacement) {
|
|
109
|
+
if (value === currentDir)
|
|
110
|
+
return replacement;
|
|
111
|
+
const prefix = `${currentDir}/`;
|
|
112
|
+
if (!value.startsWith(prefix))
|
|
113
|
+
return value;
|
|
114
|
+
const suffix = value.slice(prefix.length);
|
|
115
|
+
// Idempotency guard: a path already lane-scoped (`current/lane_<n>/…`) must
|
|
116
|
+
// not be re-prefixed into `current/lane_<k>/lane_<n>/…`. This makes the rewrite
|
|
117
|
+
// safe to apply more than once (e.g. an argv that was templated upstream and
|
|
118
|
+
// re-templated here) and protects manifest paths that hardcode `lane_${laneId}`
|
|
119
|
+
// — applyLaneTemplate already expanded those, so the literal `lane_<n>/` they
|
|
120
|
+
// produce must be left alone. The flip side: a manifest that hardcodes a literal
|
|
121
|
+
// `lane_<digit>/` (no `${laneId}` to expand) is left UNCHANGED by every lane and
|
|
122
|
+
// would clobber — the validator (`HARDCODED_LANE_RESULT_FILE_RE` in validate.ts)
|
|
123
|
+
// rejects exactly that, matching this guard's `/^lane_\d+\//` notion of "a lane
|
|
124
|
+
// segment"; the two must stay consistent.
|
|
125
|
+
if (/^lane_\d+\//.test(suffix))
|
|
126
|
+
return value;
|
|
127
|
+
return `${replacement}/${suffix}`;
|
|
128
|
+
}
|
|
129
|
+
function injectEvolveLaneArg(command, id) {
|
|
130
|
+
if (command.includes('--lane'))
|
|
131
|
+
return command;
|
|
132
|
+
const scriptIndex = evolveResultScriptIndex(command);
|
|
133
|
+
if (scriptIndex < 0)
|
|
134
|
+
return command;
|
|
135
|
+
const subcommandIndex = scriptIndex + 1;
|
|
136
|
+
const subcommand = command[subcommandIndex];
|
|
137
|
+
if (!EVOLVE_LANE_AWARE_COMMANDS.has(subcommand))
|
|
138
|
+
return command;
|
|
139
|
+
return [...command.slice(0, subcommandIndex + 1), '--lane', String(id), ...command.slice(subcommandIndex + 1)];
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=lane-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-template.js","sourceRoot":"","sources":["../../src/workflow/lane-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared pre-flight lint integration used by both the CLI and the daemon.
|
|
3
|
+
* UI-agnostic: returns a `PreflightResult` that callers format themselves
|
|
4
|
+
* (stderr for CLI, JSON-RPC error data for the daemon).
|
|
5
|
+
*/
|
|
6
|
+
import { type Diagnostic, type LintContext } from './lint.js';
|
|
7
|
+
import type { WorkflowDefinition } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Default `LintContext` shared by both the CLI and the daemon. Backed by the
|
|
10
|
+
* real filesystem-resolving `personaExists` from `src/persona/resolve.ts`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const defaultLintContext: LintContext;
|
|
13
|
+
/**
|
|
14
|
+
* How strict the pre-flight should be:
|
|
15
|
+
* - `off` : skip linting entirely; always ok.
|
|
16
|
+
* - `warn` : fail only on error-severity diagnostics; warnings pass.
|
|
17
|
+
* - `strict`: fail on any diagnostic, including warnings.
|
|
18
|
+
*/
|
|
19
|
+
export type LintMode = 'off' | 'warn' | 'strict';
|
|
20
|
+
export interface PreflightResult {
|
|
21
|
+
readonly ok: boolean;
|
|
22
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
23
|
+
}
|
|
24
|
+
export declare function preflightLint(definition: WorkflowDefinition, context: LintContext, mode: LintMode): PreflightResult;
|
|
25
|
+
/**
|
|
26
|
+
* Discriminated result for {@link runPreflight}. Three variants:
|
|
27
|
+
*
|
|
28
|
+
* - `{ ok: true, ... }`: the definition loaded and lint either had no
|
|
29
|
+
* diagnostics or had only diagnostics tolerated by `mode`. `warnings`
|
|
30
|
+
* counts the (passing) warnings present.
|
|
31
|
+
* - `{ ok: false, kind: 'load', ... }`: the definition file could not be
|
|
32
|
+
* parsed or did not validate. `loadKind` distinguishes the two.
|
|
33
|
+
* - `{ ok: false, kind: 'lint', ... }`: the definition loaded but lint
|
|
34
|
+
* produced diagnostics that fail `mode`. The definition is still returned
|
|
35
|
+
* so callers can render it alongside the diagnostics.
|
|
36
|
+
*/
|
|
37
|
+
export type RunPreflightResult = {
|
|
38
|
+
ok: true;
|
|
39
|
+
definition: WorkflowDefinition;
|
|
40
|
+
diagnostics: readonly Diagnostic[];
|
|
41
|
+
warnings: number;
|
|
42
|
+
} | {
|
|
43
|
+
ok: false;
|
|
44
|
+
kind: 'load';
|
|
45
|
+
loadKind: 'parse' | 'validate';
|
|
46
|
+
message: string;
|
|
47
|
+
} | {
|
|
48
|
+
ok: false;
|
|
49
|
+
kind: 'lint';
|
|
50
|
+
definition: WorkflowDefinition;
|
|
51
|
+
diagnostics: readonly Diagnostic[];
|
|
52
|
+
errors: number;
|
|
53
|
+
warnings: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Loads + validates a definition from `definitionPath`, then runs
|
|
57
|
+
* {@link preflightLint} with a {@link LintContext} derived from
|
|
58
|
+
* {@link defaultLintContext} but bound to `definitionPath` so
|
|
59
|
+
* package-relative checks (currently WF010 — skill references) can
|
|
60
|
+
* resolve sibling resources. Never throws — returns a discriminated
|
|
61
|
+
* result that callers map to their own error surfaces (stderr+exit
|
|
62
|
+
* for CLI, RpcError for the daemon).
|
|
63
|
+
*/
|
|
64
|
+
export declare function runPreflight(definitionPath: string, mode: LintMode): RunPreflightResult;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared pre-flight lint integration used by both the CLI and the daemon.
|
|
3
|
+
* UI-agnostic: returns a `PreflightResult` that callers format themselves
|
|
4
|
+
* (stderr for CLI, JSON-RPC error data for the daemon).
|
|
5
|
+
*/
|
|
6
|
+
import { countBySeverity, lintWorkflow } from './lint.js';
|
|
7
|
+
import { personaExists } from '../persona/resolve.js';
|
|
8
|
+
import { loadDefinition } from './definition-loader.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default `LintContext` shared by both the CLI and the daemon. Backed by the
|
|
11
|
+
* real filesystem-resolving `personaExists` from `src/persona/resolve.ts`.
|
|
12
|
+
*/
|
|
13
|
+
export const defaultLintContext = { personaExists };
|
|
14
|
+
export function preflightLint(definition, context, mode) {
|
|
15
|
+
if (mode === 'off')
|
|
16
|
+
return { ok: true, diagnostics: [] };
|
|
17
|
+
const diagnostics = lintWorkflow(definition, context);
|
|
18
|
+
const { errors } = countBySeverity(diagnostics);
|
|
19
|
+
const failed = mode === 'strict' ? diagnostics.length > 0 : errors > 0;
|
|
20
|
+
return { ok: !failed, diagnostics };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Loads + validates a definition from `definitionPath`, then runs
|
|
24
|
+
* {@link preflightLint} with a {@link LintContext} derived from
|
|
25
|
+
* {@link defaultLintContext} but bound to `definitionPath` so
|
|
26
|
+
* package-relative checks (currently WF010 — skill references) can
|
|
27
|
+
* resolve sibling resources. Never throws — returns a discriminated
|
|
28
|
+
* result that callers map to their own error surfaces (stderr+exit
|
|
29
|
+
* for CLI, RpcError for the daemon).
|
|
30
|
+
*/
|
|
31
|
+
export function runPreflight(definitionPath, mode) {
|
|
32
|
+
const loaded = loadDefinition(definitionPath);
|
|
33
|
+
if (!loaded.ok) {
|
|
34
|
+
return { ok: false, kind: 'load', loadKind: loaded.kind, message: loaded.message };
|
|
35
|
+
}
|
|
36
|
+
const ctx = { ...defaultLintContext, workflowFilePath: definitionPath };
|
|
37
|
+
const lintResult = preflightLint(loaded.definition, ctx, mode);
|
|
38
|
+
const { errors, warnings } = countBySeverity(lintResult.diagnostics);
|
|
39
|
+
if (lintResult.ok) {
|
|
40
|
+
return {
|
|
41
|
+
ok: true,
|
|
42
|
+
definition: loaded.definition,
|
|
43
|
+
diagnostics: lintResult.diagnostics,
|
|
44
|
+
warnings,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
ok: false,
|
|
49
|
+
kind: 'lint',
|
|
50
|
+
definition: loaded.definition,
|
|
51
|
+
diagnostics: lintResult.diagnostics,
|
|
52
|
+
errors,
|
|
53
|
+
warnings,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=lint-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-integration.js","sourceRoot":"","sources":["../../src/workflow/lint-integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqC,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB,EAAE,aAAa,EAAE,CAAC;AAejE,MAAM,UAAU,aAAa,CAAC,UAA8B,EAAE,OAAoB,EAAE,IAAc;IAChG,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAEzD,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvE,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC;AAoCD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,cAAsB,EAAE,IAAc;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,GAAG,GAAgB,EAAE,GAAG,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACrF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAErE,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { WorkflowDefinition } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Diagnostic codes.
|
|
4
|
+
*
|
|
5
|
+
* WF008 occupies the slot previously used for a raw-YAML check that
|
|
6
|
+
* `maxVisits` is only declared on agent states. That check now throws
|
|
7
|
+
* `WorkflowValidationError` before lint runs, so it never emits a WF code;
|
|
8
|
+
* the slot is reclaimed here for the visit-cap transition-ordering rule.
|
|
9
|
+
* WF009 is retired for the same reason (state-ID regex is a validation
|
|
10
|
+
* error) and must not be reused.
|
|
11
|
+
*
|
|
12
|
+
* WF005 (parallelKey + worktree needs gitRepoPath) is retired: the
|
|
13
|
+
* `parallelKey` schema field was removed as unused, so the trigger
|
|
14
|
+
* condition can no longer fire. Must not be reused.
|
|
15
|
+
*
|
|
16
|
+
* WF010 covers two related concerns under a single code:
|
|
17
|
+
* 1. State-scoped: an agent state's `skills:` entry is invalid or
|
|
18
|
+
* doesn't match any discoverable skill in the package.
|
|
19
|
+
* 2. Package-scoped: a `SKILL.md` under the workflow package's
|
|
20
|
+
* `skills/` tree is malformed, unreadable, or missing required
|
|
21
|
+
* frontmatter fields. These are surfaced even when no state
|
|
22
|
+
* references the broken skill, so authors get fast feedback on a
|
|
23
|
+
* typo in frontmatter rather than discovering it via a "skill not
|
|
24
|
+
* found" message at runtime.
|
|
25
|
+
*
|
|
26
|
+
* Both concerns are skipped cleanly when the lint caller did not
|
|
27
|
+
* supply a `workflowFilePath` (the package dir is the only place skill
|
|
28
|
+
* manifests can live).
|
|
29
|
+
*
|
|
30
|
+
* WF013 (fan-out maxRounds budget) and WF014 (fan-out child-bounds) are
|
|
31
|
+
* sibling fan-out checks split apart so each carries one concern. WF014
|
|
32
|
+
* previously flagged non-barrier fan-out joins; that is now a parse-time
|
|
33
|
+
* rejection (`FanOutDefinition.join` is the literal `'barrier'`), so the
|
|
34
|
+
* lint became unreachable and the number was reclaimed for child-bounds.
|
|
35
|
+
*/
|
|
36
|
+
export type DiagnosticCode = 'WF001' | 'WF002' | 'WF003' | 'WF004' | 'WF006' | 'WF007' | 'WF008' | 'WF010' | 'WF011' | 'WF012' | 'WF013' | 'WF014';
|
|
37
|
+
export type DiagnosticSeverity = 'error' | 'warning';
|
|
38
|
+
export interface Diagnostic {
|
|
39
|
+
readonly code: DiagnosticCode;
|
|
40
|
+
readonly severity: DiagnosticSeverity;
|
|
41
|
+
readonly message: string;
|
|
42
|
+
readonly stateId?: string;
|
|
43
|
+
readonly hint?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Injected facts the linter cannot derive from the definition alone.
|
|
47
|
+
*
|
|
48
|
+
* Kept minimal: methods/fields are added only when a new check
|
|
49
|
+
* genuinely needs external context.
|
|
50
|
+
*/
|
|
51
|
+
export interface LintContext {
|
|
52
|
+
/** Returns true iff the named persona is installed locally. */
|
|
53
|
+
personaExists(name: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Absolute path to the workflow file being linted, when known. Used
|
|
56
|
+
* by checks that resolve co-packaged resources off the manifest's
|
|
57
|
+
* directory (currently WF010 — skill references). Lint callers that
|
|
58
|
+
* do not have a path on hand (e.g., synthesized definitions in tests)
|
|
59
|
+
* may omit this; rules that need it skip cleanly when absent.
|
|
60
|
+
*/
|
|
61
|
+
readonly workflowFilePath?: string;
|
|
62
|
+
}
|
|
63
|
+
export type LintResult = readonly Diagnostic[];
|
|
64
|
+
/**
|
|
65
|
+
* Runs all registered checks against `def`. Pure: same input => same
|
|
66
|
+
* output. Diagnostics come back in stable order (WF001 first, WF007 last).
|
|
67
|
+
*/
|
|
68
|
+
export declare function lintWorkflow(def: WorkflowDefinition, ctx: LintContext): LintResult;
|
|
69
|
+
export declare function countBySeverity(diagnostics: readonly Diagnostic[]): {
|
|
70
|
+
errors: number;
|
|
71
|
+
warnings: number;
|
|
72
|
+
};
|