smol-symphony 0.2.0 → 0.3.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/AGENTS.md +41 -22
- package/DESIGN.md +494 -273
- package/README.md +109 -57
- package/SPEC.md +33 -24
- package/WORKFLOW.minimal.yaml +34 -0
- package/{WORKFLOW.template.md → WORKFLOW.template.yaml} +409 -256
- package/WORKFLOW.yaml +487 -0
- package/assets/skills/symphony-issues/SKILL.md +136 -0
- package/assets/symphony-mise.system.toml +68 -0
- package/dist/src/bin/symphony.js +30 -0
- package/dist/src/bin/symphony.js.map +1 -0
- package/dist/src/core/actions/context.js +109 -0
- package/dist/src/core/actions/context.js.map +1 -0
- package/dist/{actions/parsing.js → src/core/actions/parse.js} +33 -114
- package/dist/src/core/actions/parse.js.map +1 -0
- package/dist/src/core/actions/plan.js +197 -0
- package/dist/src/core/actions/plan.js.map +1 -0
- package/dist/src/core/actions/predicates.js +111 -0
- package/dist/src/core/actions/predicates.js.map +1 -0
- package/dist/src/core/actions/run-fold.js +248 -0
- package/dist/src/core/actions/run-fold.js.map +1 -0
- package/dist/src/core/actions/template.js +118 -0
- package/dist/src/core/actions/template.js.map +1 -0
- package/dist/src/core/cli/args.js +116 -0
- package/dist/src/core/cli/args.js.map +1 -0
- package/dist/src/core/coerce.js +75 -0
- package/dist/src/core/coerce.js.map +1 -0
- package/dist/src/core/credential/account-id.js +20 -0
- package/dist/src/core/credential/account-id.js.map +1 -0
- package/dist/src/core/credential/adapter-config.js +136 -0
- package/dist/src/core/credential/adapter-config.js.map +1 -0
- package/dist/src/core/credential/availability.js +98 -0
- package/dist/src/core/credential/availability.js.map +1 -0
- package/dist/src/core/credential/extract.js +228 -0
- package/dist/src/core/credential/extract.js.map +1 -0
- package/dist/src/core/credential/fake-creds.js +171 -0
- package/dist/src/core/credential/fake-creds.js.map +1 -0
- package/dist/src/core/credential/identity.js +125 -0
- package/dist/src/core/credential/identity.js.map +1 -0
- package/dist/src/core/credential/shape.js +230 -0
- package/dist/src/core/credential/shape.js.map +1 -0
- package/dist/src/core/credential/strings.js +15 -0
- package/dist/src/core/credential/strings.js.map +1 -0
- package/dist/src/core/doctor/checks.js +303 -0
- package/dist/src/core/doctor/checks.js.map +1 -0
- package/dist/src/core/git/result.js +107 -0
- package/dist/src/core/git/result.js.map +1 -0
- package/dist/src/core/http/decisions.js +225 -0
- package/dist/src/core/http/decisions.js.map +1 -0
- package/dist/{http.js → src/core/http/render.js} +472 -738
- package/dist/src/core/http/render.js.map +1 -0
- package/dist/{http-handlers.js → src/core/http/routes.js} +52 -87
- package/dist/src/core/http/routes.js.map +1 -0
- package/dist/src/core/http/views.js +181 -0
- package/dist/src/core/http/views.js.map +1 -0
- package/dist/src/core/image/managed-image.js +95 -0
- package/dist/src/core/image/managed-image.js.map +1 -0
- package/dist/src/core/issue/file.js +149 -0
- package/dist/src/core/issue/file.js.map +1 -0
- package/dist/src/core/issue/parse.js +210 -0
- package/dist/src/core/issue/parse.js.map +1 -0
- package/dist/src/core/mcp/dispatch.js +239 -0
- package/dist/src/core/mcp/dispatch.js.map +1 -0
- package/dist/src/core/mcp/post-move.js +92 -0
- package/dist/src/core/mcp/post-move.js.map +1 -0
- package/dist/src/core/mcp/protocol.js +293 -0
- package/dist/src/core/mcp/protocol.js.map +1 -0
- package/dist/src/core/mcp/url.js +162 -0
- package/dist/src/core/mcp/url.js.map +1 -0
- package/dist/src/core/path.js +63 -0
- package/dist/src/core/path.js.map +1 -0
- package/dist/src/core/reconcile/image-decide.js +48 -0
- package/dist/src/core/reconcile/image-decide.js.map +1 -0
- package/dist/src/core/reconcile/ledger.js +142 -0
- package/dist/src/core/reconcile/ledger.js.map +1 -0
- package/dist/src/core/reconcile/pr-classify.js +62 -0
- package/dist/src/core/reconcile/pr-classify.js.map +1 -0
- package/dist/{reconciler → src/core/reconcile}/pr-decide.js +25 -12
- package/dist/src/core/reconcile/pr-decide.js.map +1 -0
- package/dist/src/core/reconcile/pr-loop.js +161 -0
- package/dist/src/core/reconcile/pr-loop.js.map +1 -0
- package/dist/src/core/reconcile/pr-notes.js +35 -0
- package/dist/src/core/reconcile/pr-notes.js.map +1 -0
- package/dist/src/core/reconcile/vm-decide.js +70 -0
- package/dist/src/core/reconcile/vm-decide.js.map +1 -0
- package/dist/src/core/reconcile/vm-reap.js +207 -0
- package/dist/src/core/reconcile/vm-reap.js.map +1 -0
- package/dist/src/core/reconcile/workspace-decide.js +162 -0
- package/dist/src/core/reconcile/workspace-decide.js.map +1 -0
- package/dist/src/core/runlog/summary.js +231 -0
- package/dist/src/core/runlog/summary.js.map +1 -0
- package/dist/src/core/runner/dispatch-config.js +95 -0
- package/dist/src/core/runner/dispatch-config.js.map +1 -0
- package/dist/src/core/runner/injection.js +61 -0
- package/dist/src/core/runner/injection.js.map +1 -0
- package/dist/src/core/runner/mise.js +210 -0
- package/dist/src/core/runner/mise.js.map +1 -0
- package/dist/src/core/runner/prompt.js +720 -0
- package/dist/src/core/runner/prompt.js.map +1 -0
- package/dist/src/core/runner/turn.js +242 -0
- package/dist/src/core/runner/turn.js.map +1 -0
- package/dist/src/core/runner/vm-plan.js +390 -0
- package/dist/src/core/runner/vm-plan.js.map +1 -0
- package/dist/src/core/schedule/admission.js +123 -0
- package/dist/src/core/schedule/admission.js.map +1 -0
- package/dist/src/core/schedule/circuit-breaker.js +111 -0
- package/dist/src/core/schedule/circuit-breaker.js.map +1 -0
- package/dist/src/core/schedule/eligibility.js +83 -0
- package/dist/src/core/schedule/eligibility.js.map +1 -0
- package/dist/src/core/schedule/reconcile-issue.js +82 -0
- package/dist/src/core/schedule/reconcile-issue.js.map +1 -0
- package/dist/src/core/schedule/retry.js +96 -0
- package/dist/src/core/schedule/retry.js.map +1 -0
- package/dist/src/core/schedule/sleep-cycle.js +133 -0
- package/dist/src/core/schedule/sleep-cycle.js.map +1 -0
- package/dist/src/core/schedule/slots.js +124 -0
- package/dist/src/core/schedule/slots.js.map +1 -0
- package/dist/src/core/schedule/tick.js +553 -0
- package/dist/src/core/schedule/tick.js.map +1 -0
- package/dist/src/core/schedule/token-fold.js +181 -0
- package/dist/src/core/schedule/token-fold.js.map +1 -0
- package/dist/src/core/state-resolve.js +86 -0
- package/dist/src/core/state-resolve.js.map +1 -0
- package/dist/src/core/vm-guards.js +278 -0
- package/dist/src/core/vm-guards.js.map +1 -0
- package/dist/src/core/workflow/derive.js +107 -0
- package/dist/src/core/workflow/derive.js.map +1 -0
- package/dist/src/core/workflow/parse.js +687 -0
- package/dist/src/core/workflow/parse.js.map +1 -0
- package/dist/src/core/workflow/prompt-probe.js +78 -0
- package/dist/src/core/workflow/prompt-probe.js.map +1 -0
- package/dist/src/core/workflow/validate.js +189 -0
- package/dist/src/core/workflow/validate.js.map +1 -0
- package/dist/src/core/workspace-key.js +19 -0
- package/dist/src/core/workspace-key.js.map +1 -0
- package/dist/src/shell/actions-runner.js +356 -0
- package/dist/src/shell/actions-runner.js.map +1 -0
- package/dist/src/shell/adapter/adapter-registry.js +45 -0
- package/dist/src/shell/adapter/adapter-registry.js.map +1 -0
- package/dist/src/shell/adapter/clock-random.js +96 -0
- package/dist/src/shell/adapter/clock-random.js.map +1 -0
- package/dist/src/shell/adapter/gondolin-dispatch-helpers.js +158 -0
- package/dist/src/shell/adapter/gondolin-dispatch-helpers.js.map +1 -0
- package/dist/src/shell/adapter/gondolin-dispatch.js +385 -0
- package/dist/src/shell/adapter/gondolin-dispatch.js.map +1 -0
- package/dist/src/shell/adapter/gondolin-image-converter.js +233 -0
- package/dist/src/shell/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/src/shell/adapter/gondolin-image-fetch.js +180 -0
- package/dist/src/shell/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/src/shell/adapter/launcher-asset.js +57 -0
- package/dist/src/shell/adapter/launcher-asset.js.map +1 -0
- package/dist/src/shell/adapter/mise-config-asset.js +65 -0
- package/dist/src/shell/adapter/mise-config-asset.js.map +1 -0
- package/dist/src/shell/adapter/workflow-loader.js +304 -0
- package/dist/src/shell/adapter/workflow-loader.js.map +1 -0
- package/dist/src/shell/cli/doctor.js +268 -0
- package/dist/src/shell/cli/doctor.js.map +1 -0
- package/dist/src/shell/effect-interpreter-families.js +314 -0
- package/dist/src/shell/effect-interpreter-families.js.map +1 -0
- package/dist/src/shell/effect-interpreter.js +29 -0
- package/dist/src/shell/effect-interpreter.js.map +1 -0
- package/dist/src/shell/interp/acp-frame.js +137 -0
- package/dist/src/shell/interp/acp-frame.js.map +1 -0
- package/dist/src/shell/interp/acp-ws-conn.js +320 -0
- package/dist/src/shell/interp/acp-ws-conn.js.map +1 -0
- package/dist/src/shell/interp/acp-ws-frames.js +159 -0
- package/dist/src/shell/interp/acp-ws-frames.js.map +1 -0
- package/dist/src/shell/interp/acp-ws.js +197 -0
- package/dist/src/shell/interp/acp-ws.js.map +1 -0
- package/dist/src/shell/interp/acp.js +319 -0
- package/dist/src/shell/interp/acp.js.map +1 -0
- package/dist/src/shell/interp/credential-defaults.js +128 -0
- package/dist/src/shell/interp/credential-defaults.js.map +1 -0
- package/dist/src/shell/interp/credential-hooks.js +149 -0
- package/dist/src/shell/interp/credential-hooks.js.map +1 -0
- package/dist/src/shell/interp/credential-registry.js +226 -0
- package/dist/src/shell/interp/credential-registry.js.map +1 -0
- package/dist/src/shell/interp/credential.js +103 -0
- package/dist/src/shell/interp/credential.js.map +1 -0
- package/dist/src/shell/interp/gh.js +163 -0
- package/dist/src/shell/interp/gh.js.map +1 -0
- package/dist/src/shell/interp/git.js +28 -0
- package/dist/src/shell/interp/git.js.map +1 -0
- package/dist/src/shell/interp/log.js +213 -0
- package/dist/src/shell/interp/log.js.map +1 -0
- package/dist/src/shell/interp/process.js +178 -0
- package/dist/src/shell/interp/process.js.map +1 -0
- package/dist/src/shell/interp/runlog.js +193 -0
- package/dist/src/shell/interp/runlog.js.map +1 -0
- package/dist/src/shell/interp/timer.js +64 -0
- package/dist/src/shell/interp/timer.js.map +1 -0
- package/dist/src/shell/interp/tracker-disk.js +99 -0
- package/dist/src/shell/interp/tracker-disk.js.map +1 -0
- package/dist/src/shell/interp/tracker-parse.js +71 -0
- package/dist/src/shell/interp/tracker-parse.js.map +1 -0
- package/dist/src/shell/interp/tracker-scan.js +238 -0
- package/dist/src/shell/interp/tracker-scan.js.map +1 -0
- package/dist/src/shell/interp/tracker-write.js +91 -0
- package/dist/src/shell/interp/tracker-write.js.map +1 -0
- package/dist/src/shell/interp/tracker.js +41 -0
- package/dist/src/shell/interp/tracker.js.map +1 -0
- package/dist/src/shell/interp/tty.js +48 -0
- package/dist/src/shell/interp/tty.js.map +1 -0
- package/dist/src/shell/interp/vm.js +199 -0
- package/dist/src/shell/interp/vm.js.map +1 -0
- package/dist/src/shell/interp/workspace.js +310 -0
- package/dist/src/shell/interp/workspace.js.map +1 -0
- package/dist/src/shell/main-acp.js +78 -0
- package/dist/src/shell/main-acp.js.map +1 -0
- package/dist/src/shell/main-adapters.js +222 -0
- package/dist/src/shell/main-adapters.js.map +1 -0
- package/dist/src/shell/main-credential.js +122 -0
- package/dist/src/shell/main-credential.js.map +1 -0
- package/dist/src/shell/main-doctor.js +22 -0
- package/dist/src/shell/main-doctor.js.map +1 -0
- package/dist/src/shell/main-entry.js +46 -0
- package/dist/src/shell/main-entry.js.map +1 -0
- package/dist/src/shell/main-http-csrf.js +45 -0
- package/dist/src/shell/main-http-csrf.js.map +1 -0
- package/dist/src/shell/main-http-handler.js +389 -0
- package/dist/src/shell/main-http-handler.js.map +1 -0
- package/dist/src/shell/main-http-mcp.js +122 -0
- package/dist/src/shell/main-http-mcp.js.map +1 -0
- package/dist/src/shell/main-http-views.js +253 -0
- package/dist/src/shell/main-http-views.js.map +1 -0
- package/dist/src/shell/main-http.js +76 -0
- package/dist/src/shell/main-http.js.map +1 -0
- package/dist/src/shell/main-loops.js +130 -0
- package/dist/src/shell/main-loops.js.map +1 -0
- package/dist/src/shell/main-mcp.js +129 -0
- package/dist/src/shell/main-mcp.js.map +1 -0
- package/dist/src/shell/main-orchestrator.js +120 -0
- package/dist/src/shell/main-orchestrator.js.map +1 -0
- package/dist/src/shell/main-preflight.js +43 -0
- package/dist/src/shell/main-preflight.js.map +1 -0
- package/dist/src/shell/main-reconcilers-helpers.js +244 -0
- package/dist/src/shell/main-reconcilers-helpers.js.map +1 -0
- package/dist/src/shell/main-reconcilers-pr.js +148 -0
- package/dist/src/shell/main-reconcilers-pr.js.map +1 -0
- package/dist/src/shell/main-reconcilers.js +225 -0
- package/dist/src/shell/main-reconcilers.js.map +1 -0
- package/dist/src/shell/main-runner.js +355 -0
- package/dist/src/shell/main-runner.js.map +1 -0
- package/dist/src/shell/main-scaffold.js +116 -0
- package/dist/src/shell/main-scaffold.js.map +1 -0
- package/dist/src/shell/main-shutdown.js +115 -0
- package/dist/src/shell/main-shutdown.js.map +1 -0
- package/dist/src/shell/main-startup.js +48 -0
- package/dist/src/shell/main-startup.js.map +1 -0
- package/dist/src/shell/main-substrates.js +43 -0
- package/dist/src/shell/main-substrates.js.map +1 -0
- package/dist/src/shell/main.js +385 -0
- package/dist/src/shell/main.js.map +1 -0
- package/dist/src/shell/orchestrator-feedback.js +69 -0
- package/dist/src/shell/orchestrator-feedback.js.map +1 -0
- package/dist/src/shell/orchestrator-image.js +167 -0
- package/dist/src/shell/orchestrator-image.js.map +1 -0
- package/dist/src/shell/orchestrator-loop.js +468 -0
- package/dist/src/shell/orchestrator-loop.js.map +1 -0
- package/dist/src/shell/orchestrator-reconcile.js +36 -0
- package/dist/src/shell/orchestrator-reconcile.js.map +1 -0
- package/dist/src/shell/reconciler-loop.js +228 -0
- package/dist/src/shell/reconciler-loop.js.map +1 -0
- package/dist/src/shell/runner-loop-turn.js +301 -0
- package/dist/src/shell/runner-loop-turn.js.map +1 -0
- package/dist/src/shell/runner-loop.js +338 -0
- package/dist/src/shell/runner-loop.js.map +1 -0
- package/dist/src/shell/server/http.js +208 -0
- package/dist/src/shell/server/http.js.map +1 -0
- package/dist/src/shell/server/mcp-runtime-effects.js +237 -0
- package/dist/src/shell/server/mcp-runtime-effects.js.map +1 -0
- package/dist/src/shell/server/mcp-runtime.js +99 -0
- package/dist/src/shell/server/mcp-runtime.js.map +1 -0
- package/dist/src/shell/workspace-key.js +14 -0
- package/dist/src/shell/workspace-key.js.map +1 -0
- package/dist/src/types/acp.js +8 -0
- package/dist/src/types/acp.js.map +1 -0
- package/dist/src/types/actions/plan.js +6 -0
- package/dist/src/types/actions/plan.js.map +1 -0
- package/dist/src/types/actions/predicates.js +6 -0
- package/dist/src/types/actions/predicates.js.map +1 -0
- package/dist/src/types/actions/run-fold.js +8 -0
- package/dist/src/types/actions/run-fold.js.map +1 -0
- package/dist/src/types/actions.js +7 -0
- package/dist/src/types/actions.js.map +1 -0
- package/dist/src/types/adapter/clock-random.js +4 -0
- package/dist/src/types/adapter/clock-random.js.map +1 -0
- package/dist/src/types/adapter/gondolin-image-converter.js +5 -0
- package/dist/src/types/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/src/types/adapter/gondolin-image-fetch.js +5 -0
- package/dist/src/types/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/src/types/adapter/workflow-loader.js +4 -0
- package/dist/src/types/adapter/workflow-loader.js.map +1 -0
- package/dist/src/types/cli/args.js +8 -0
- package/dist/src/types/cli/args.js.map +1 -0
- package/dist/src/types/config.js +8 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/credential-interp.js +6 -0
- package/dist/src/types/credential-interp.js.map +1 -0
- package/dist/src/types/credentials.js +10 -0
- package/dist/src/types/credentials.js.map +1 -0
- package/dist/src/types/doctor.js +7 -0
- package/dist/src/types/doctor.js.map +1 -0
- package/dist/src/types/domain.js +7 -0
- package/dist/src/types/domain.js.map +1 -0
- package/dist/src/types/effect.js +15 -0
- package/dist/src/types/effect.js.map +1 -0
- package/dist/src/types/errors.js +39 -0
- package/dist/src/types/errors.js.map +1 -0
- package/dist/src/types/http/decisions.js +6 -0
- package/dist/src/types/http/decisions.js.map +1 -0
- package/dist/src/types/http/render.js +10 -0
- package/dist/src/types/http/render.js.map +1 -0
- package/dist/src/types/http/views.js +6 -0
- package/dist/src/types/http/views.js.map +1 -0
- package/dist/src/types/http.js +9 -0
- package/dist/src/types/http.js.map +1 -0
- package/dist/src/types/image/managed-image.js +7 -0
- package/dist/src/types/image/managed-image.js.map +1 -0
- package/dist/src/types/interp/effect-interpreter.js +8 -0
- package/dist/src/types/interp/effect-interpreter.js.map +1 -0
- package/dist/src/types/interp/tracker.js +7 -0
- package/dist/src/types/interp/tracker.js.map +1 -0
- package/dist/src/types/issue/file.js +6 -0
- package/dist/src/types/issue/file.js.map +1 -0
- package/dist/src/types/issue/parse.js +8 -0
- package/dist/src/types/issue/parse.js.map +1 -0
- package/dist/src/types/main-acp.js +13 -0
- package/dist/src/types/main-acp.js.map +1 -0
- package/dist/src/types/main-adapters.js +5 -0
- package/dist/src/types/main-adapters.js.map +1 -0
- package/dist/src/types/main-credential.js +21 -0
- package/dist/src/types/main-credential.js.map +1 -0
- package/dist/src/types/main-doctor.js +6 -0
- package/dist/src/types/main-doctor.js.map +1 -0
- package/dist/src/types/main-http-handler.js +12 -0
- package/dist/src/types/main-http-handler.js.map +1 -0
- package/dist/src/types/main-http.js +5 -0
- package/dist/src/types/main-http.js.map +1 -0
- package/dist/src/types/main-loops.js +5 -0
- package/dist/src/types/main-loops.js.map +1 -0
- package/dist/src/types/main-mcp.js +12 -0
- package/dist/src/types/main-mcp.js.map +1 -0
- package/dist/src/types/main-orchestrator.js +5 -0
- package/dist/src/types/main-orchestrator.js.map +1 -0
- package/dist/src/types/main-reconcilers.js +11 -0
- package/dist/src/types/main-reconcilers.js.map +1 -0
- package/dist/src/types/main-runner.js +13 -0
- package/dist/src/types/main-runner.js.map +1 -0
- package/dist/src/types/main-startup.js +5 -0
- package/dist/src/types/main-startup.js.map +1 -0
- package/dist/src/types/main-substrates.js +5 -0
- package/dist/src/types/main-substrates.js.map +1 -0
- package/dist/src/types/mcp/dispatch.js +4 -0
- package/dist/src/types/mcp/dispatch.js.map +1 -0
- package/dist/src/types/mcp/post-move.js +7 -0
- package/dist/src/types/mcp/post-move.js.map +1 -0
- package/dist/src/types/mcp.js +9 -0
- package/dist/src/types/mcp.js.map +1 -0
- package/dist/src/types/ports.js +12 -0
- package/dist/src/types/ports.js.map +1 -0
- package/dist/src/types/reconcile/image-decide.js +5 -0
- package/dist/src/types/reconcile/image-decide.js.map +1 -0
- package/dist/src/types/reconcile/ledger.js +7 -0
- package/dist/src/types/reconcile/ledger.js.map +1 -0
- package/dist/src/types/reconcile/pr-loop.js +8 -0
- package/dist/src/types/reconcile/pr-loop.js.map +1 -0
- package/dist/src/types/reconcile/vm-reap.js +8 -0
- package/dist/src/types/reconcile/vm-reap.js.map +1 -0
- package/dist/src/types/reconcile/workspace-decide.js +7 -0
- package/dist/src/types/reconcile/workspace-decide.js.map +1 -0
- package/dist/src/types/reconcile.js +9 -0
- package/dist/src/types/reconcile.js.map +1 -0
- package/dist/src/types/runlog.js +7 -0
- package/dist/src/types/runlog.js.map +1 -0
- package/dist/src/types/runner/actions-runner.js +12 -0
- package/dist/src/types/runner/actions-runner.js.map +1 -0
- package/dist/src/types/runner/gondolin-dispatch.js +5 -0
- package/dist/src/types/runner/gondolin-dispatch.js.map +1 -0
- package/dist/src/types/runner/injection.js +6 -0
- package/dist/src/types/runner/injection.js.map +1 -0
- package/dist/src/types/runner/runner-loop.js +5 -0
- package/dist/src/types/runner/runner-loop.js.map +1 -0
- package/dist/src/types/runner/turn.js +4 -0
- package/dist/src/types/runner/turn.js.map +1 -0
- package/dist/src/types/runner/vm-plan.js +4 -0
- package/dist/src/types/runner/vm-plan.js.map +1 -0
- package/dist/src/types/runtime.js +9 -0
- package/dist/src/types/runtime.js.map +1 -0
- package/dist/src/types/schedule/admission.js +7 -0
- package/dist/src/types/schedule/admission.js.map +1 -0
- package/dist/src/types/schedule/circuit-breaker.js +2 -0
- package/dist/src/types/schedule/circuit-breaker.js.map +1 -0
- package/dist/src/types/schedule/eligibility.js +9 -0
- package/dist/src/types/schedule/eligibility.js.map +1 -0
- package/dist/src/types/schedule/orchestrator-loop.js +10 -0
- package/dist/src/types/schedule/orchestrator-loop.js.map +1 -0
- package/dist/src/types/schedule/sleep-cycle.js +4 -0
- package/dist/src/types/schedule/sleep-cycle.js.map +1 -0
- package/dist/src/types/schedule/slots.js +8 -0
- package/dist/src/types/schedule/slots.js.map +1 -0
- package/dist/src/types/schedule/tick.js +9 -0
- package/dist/src/types/schedule/tick.js.map +1 -0
- package/dist/src/types/server/mcp-runtime.js +8 -0
- package/dist/src/types/server/mcp-runtime.js.map +1 -0
- package/dist/src/types/workflow/parse.js +4 -0
- package/dist/src/types/workflow/parse.js.map +1 -0
- package/dist/tests/core/account-id.test.js +35 -0
- package/dist/tests/core/account-id.test.js.map +1 -0
- package/dist/tests/core/actions-parse.test.js +176 -0
- package/dist/tests/core/actions-parse.test.js.map +1 -0
- package/dist/tests/core/adapter-config.test.js +133 -0
- package/dist/tests/core/adapter-config.test.js.map +1 -0
- package/dist/tests/core/admission.test.js +215 -0
- package/dist/tests/core/admission.test.js.map +1 -0
- package/dist/tests/core/args.test.js +132 -0
- package/dist/tests/core/args.test.js.map +1 -0
- package/dist/tests/core/availability.test.js +62 -0
- package/dist/tests/core/availability.test.js.map +1 -0
- package/dist/tests/core/checks.test.js +395 -0
- package/dist/tests/core/checks.test.js.map +1 -0
- package/dist/tests/core/circuit-breaker.test.js +172 -0
- package/dist/tests/core/circuit-breaker.test.js.map +1 -0
- package/dist/tests/core/coerce.test.js +87 -0
- package/dist/tests/core/coerce.test.js.map +1 -0
- package/dist/tests/core/context.test.js +228 -0
- package/dist/tests/core/context.test.js.map +1 -0
- package/dist/tests/core/decisions.test.js +310 -0
- package/dist/tests/core/decisions.test.js.map +1 -0
- package/dist/tests/core/derive.test.js +205 -0
- package/dist/tests/core/derive.test.js.map +1 -0
- package/dist/tests/core/dispatch-config.test.js +164 -0
- package/dist/tests/core/dispatch-config.test.js.map +1 -0
- package/dist/tests/core/dispatch.test.js +302 -0
- package/dist/tests/core/dispatch.test.js.map +1 -0
- package/dist/tests/core/eligibility.test.js +163 -0
- package/dist/tests/core/eligibility.test.js.map +1 -0
- package/dist/tests/core/extract.test.js +139 -0
- package/dist/tests/core/extract.test.js.map +1 -0
- package/dist/tests/core/fake-creds.test.js +134 -0
- package/dist/tests/core/fake-creds.test.js.map +1 -0
- package/dist/tests/core/file.test.js +197 -0
- package/dist/tests/core/file.test.js.map +1 -0
- package/dist/tests/core/git-result.test.js +113 -0
- package/dist/tests/core/git-result.test.js.map +1 -0
- package/dist/tests/core/identity.test.js +180 -0
- package/dist/tests/core/identity.test.js.map +1 -0
- package/dist/tests/core/image-decide.test.js +59 -0
- package/dist/tests/core/image-decide.test.js.map +1 -0
- package/dist/tests/core/injection.test.js +163 -0
- package/dist/tests/core/injection.test.js.map +1 -0
- package/dist/tests/core/ledger.test.js +218 -0
- package/dist/tests/core/ledger.test.js.map +1 -0
- package/dist/tests/core/managed-image.test.js +68 -0
- package/dist/tests/core/managed-image.test.js.map +1 -0
- package/dist/tests/core/mise.test.js +138 -0
- package/dist/tests/core/mise.test.js.map +1 -0
- package/dist/tests/core/parse.test.js +174 -0
- package/dist/tests/core/parse.test.js.map +1 -0
- package/dist/tests/core/path.test.js +50 -0
- package/dist/tests/core/path.test.js.map +1 -0
- package/dist/tests/core/plan.test.js +218 -0
- package/dist/tests/core/plan.test.js.map +1 -0
- package/dist/tests/core/post-move.test.js +162 -0
- package/dist/tests/core/post-move.test.js.map +1 -0
- package/dist/tests/core/pr-classify.test.js +117 -0
- package/dist/tests/core/pr-classify.test.js.map +1 -0
- package/dist/tests/core/pr-decide.test.js +298 -0
- package/dist/tests/core/pr-decide.test.js.map +1 -0
- package/dist/tests/core/pr-loop.test.js +301 -0
- package/dist/tests/core/pr-loop.test.js.map +1 -0
- package/dist/tests/core/pr-notes.test.js +165 -0
- package/dist/tests/core/pr-notes.test.js.map +1 -0
- package/dist/tests/core/predicates.test.js +154 -0
- package/dist/tests/core/predicates.test.js.map +1 -0
- package/dist/tests/core/prompt.test.js +189 -0
- package/dist/tests/core/prompt.test.js.map +1 -0
- package/dist/tests/core/protocol.test.js +195 -0
- package/dist/tests/core/protocol.test.js.map +1 -0
- package/dist/tests/core/reconcile-issue.test.js +116 -0
- package/dist/tests/core/reconcile-issue.test.js.map +1 -0
- package/dist/tests/core/render.test.js +549 -0
- package/dist/tests/core/render.test.js.map +1 -0
- package/dist/tests/core/retry.test.js +186 -0
- package/dist/tests/core/retry.test.js.map +1 -0
- package/dist/tests/core/routes.test.js +247 -0
- package/dist/tests/core/routes.test.js.map +1 -0
- package/dist/tests/core/run-fold.test.js +299 -0
- package/dist/tests/core/run-fold.test.js.map +1 -0
- package/dist/tests/core/shape.test.js +185 -0
- package/dist/tests/core/shape.test.js.map +1 -0
- package/dist/tests/core/sleep-cycle.test.js +150 -0
- package/dist/tests/core/sleep-cycle.test.js.map +1 -0
- package/dist/tests/core/slots.test.js +201 -0
- package/dist/tests/core/slots.test.js.map +1 -0
- package/dist/tests/core/state-resolve.test.js +80 -0
- package/dist/tests/core/state-resolve.test.js.map +1 -0
- package/dist/tests/core/summary.test.js +200 -0
- package/dist/tests/core/summary.test.js.map +1 -0
- package/dist/tests/core/template.test.js +116 -0
- package/dist/tests/core/template.test.js.map +1 -0
- package/dist/tests/core/tick.test.js +558 -0
- package/dist/tests/core/tick.test.js.map +1 -0
- package/dist/tests/core/token-fold.test.js +176 -0
- package/dist/tests/core/token-fold.test.js.map +1 -0
- package/dist/tests/core/turn.test.js +388 -0
- package/dist/tests/core/turn.test.js.map +1 -0
- package/dist/tests/core/url.test.js +118 -0
- package/dist/tests/core/url.test.js.map +1 -0
- package/dist/tests/core/validate.test.js +247 -0
- package/dist/tests/core/validate.test.js.map +1 -0
- package/dist/tests/core/views.test.js +252 -0
- package/dist/tests/core/views.test.js.map +1 -0
- package/dist/tests/core/vm-decide.test.js +110 -0
- package/dist/tests/core/vm-decide.test.js.map +1 -0
- package/dist/tests/core/vm-guards.test.js +153 -0
- package/dist/tests/core/vm-guards.test.js.map +1 -0
- package/dist/tests/core/vm-plan.test.js +332 -0
- package/dist/tests/core/vm-plan.test.js.map +1 -0
- package/dist/tests/core/vm-reap.test.js +196 -0
- package/dist/tests/core/vm-reap.test.js.map +1 -0
- package/dist/tests/core/workflow-parse.test.js +493 -0
- package/dist/tests/core/workflow-parse.test.js.map +1 -0
- package/dist/tests/core/workspace-decide.test.js +236 -0
- package/dist/tests/core/workspace-decide.test.js.map +1 -0
- package/dist/tests/helpers/fixtures.js +167 -0
- package/dist/tests/helpers/fixtures.js.map +1 -0
- package/dist/tests/shell/acp-substrate.test.js +101 -0
- package/dist/tests/shell/acp-substrate.test.js.map +1 -0
- package/dist/tests/shell/actions-runner-push.test.js +203 -0
- package/dist/tests/shell/actions-runner-push.test.js.map +1 -0
- package/dist/tests/shell/credential-hooks.test.js +36 -0
- package/dist/tests/shell/credential-hooks.test.js.map +1 -0
- package/dist/tests/shell/credential-registry.test.js +165 -0
- package/dist/tests/shell/credential-registry.test.js.map +1 -0
- package/dist/tests/shell/credential-substrate.test.js +179 -0
- package/dist/tests/shell/credential-substrate.test.js.map +1 -0
- package/dist/tests/shell/dockerfile-mise-pin.test.js +51 -0
- package/dist/tests/shell/dockerfile-mise-pin.test.js.map +1 -0
- package/dist/tests/shell/doctor.test.js +101 -0
- package/dist/tests/shell/doctor.test.js.map +1 -0
- package/dist/tests/shell/effect-vm-create.test.js +52 -0
- package/dist/tests/shell/effect-vm-create.test.js.map +1 -0
- package/dist/tests/shell/gh-port.test.js +63 -0
- package/dist/tests/shell/gh-port.test.js.map +1 -0
- package/dist/tests/shell/gondolin-dispatch-guard.test.js +144 -0
- package/dist/tests/shell/gondolin-dispatch-guard.test.js.map +1 -0
- package/dist/tests/shell/gondolin-dispatch-shquote.test.js +168 -0
- package/dist/tests/shell/gondolin-dispatch-shquote.test.js.map +1 -0
- package/dist/tests/shell/gondolin-image-converter.test.js +208 -0
- package/dist/tests/shell/gondolin-image-converter.test.js.map +1 -0
- package/dist/tests/shell/gondolin-image-fetch.test.js +93 -0
- package/dist/tests/shell/gondolin-image-fetch.test.js.map +1 -0
- package/dist/tests/shell/http-handler.test.js +608 -0
- package/dist/tests/shell/http-handler.test.js.map +1 -0
- package/dist/tests/shell/http-server.test.js +53 -0
- package/dist/tests/shell/http-server.test.js.map +1 -0
- package/dist/tests/shell/mcp-runtime.test.js +366 -0
- package/dist/tests/shell/mcp-runtime.test.js.map +1 -0
- package/dist/tests/shell/mise-config-asset.test.js +87 -0
- package/dist/tests/shell/mise-config-asset.test.js.map +1 -0
- package/dist/tests/shell/orchestrator-loop.test.js +583 -0
- package/dist/tests/shell/orchestrator-loop.test.js.map +1 -0
- package/dist/tests/shell/reconciler-passes.test.js +314 -0
- package/dist/tests/shell/reconciler-passes.test.js.map +1 -0
- package/dist/tests/shell/runner-loop-turn.test.js +97 -0
- package/dist/tests/shell/runner-loop-turn.test.js.map +1 -0
- package/dist/tests/shell/runner-slice.test.js +536 -0
- package/dist/tests/shell/runner-slice.test.js.map +1 -0
- package/dist/tests/shell/scaffold.test.js +65 -0
- package/dist/tests/shell/scaffold.test.js.map +1 -0
- package/dist/tests/shell/tick-config.test.js +83 -0
- package/dist/tests/shell/tick-config.test.js.map +1 -0
- package/dist/tests/shell/tracker-parse-dates.test.js +44 -0
- package/dist/tests/shell/tracker-parse-dates.test.js.map +1 -0
- package/dist/tests/shell/tracker-write-issue.test.js +154 -0
- package/dist/tests/shell/tracker-write-issue.test.js.map +1 -0
- package/dist/tests/shell/workflow-prompt-split.test.js +208 -0
- package/dist/tests/shell/workflow-prompt-split.test.js.map +1 -0
- package/dist/tests/shell/workspace-live-config.test.js +140 -0
- package/dist/tests/shell/workspace-live-config.test.js.map +1 -0
- package/package.json +21 -9
- package/patches/@earendil-works+gondolin+0.12.0.patch +173 -0
- package/prompts/Reflect.md +91 -0
- package/prompts/Review.md +97 -0
- package/prompts/Todo.md +96 -0
- package/prompts/_footer.md +41 -0
- package/prompts/_preamble.md +42 -0
- package/prompts-minimal/Todo.md +26 -0
- package/scripts/postinstall.mjs +63 -0
- package/scripts/vm-agent.mjs +312 -90
- package/WORKFLOW.md +0 -744
- package/dist/acp-bridge.js +0 -324
- package/dist/acp-bridge.js.map +0 -1
- package/dist/actions/cache.js +0 -191
- package/dist/actions/cache.js.map +0 -1
- package/dist/actions/effects.js +0 -41
- package/dist/actions/effects.js.map +0 -1
- package/dist/actions/executor.js +0 -570
- package/dist/actions/executor.js.map +0 -1
- package/dist/actions/index.js +0 -13
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/parsing.js.map +0 -1
- package/dist/actions/predicate-env.js +0 -27
- package/dist/actions/predicate-env.js.map +0 -1
- package/dist/actions/predicates.js +0 -49
- package/dist/actions/predicates.js.map +0 -1
- package/dist/actions/templating.js +0 -66
- package/dist/actions/templating.js.map +0 -1
- package/dist/actions/types.js +0 -15
- package/dist/actions/types.js.map +0 -1
- package/dist/agent/acp.js +0 -473
- package/dist/agent/acp.js.map +0 -1
- package/dist/agent/adapter-names.js +0 -159
- package/dist/agent/adapter-names.js.map +0 -1
- package/dist/agent/adapters.js +0 -511
- package/dist/agent/adapters.js.map +0 -1
- package/dist/agent/credential-extractors.js +0 -342
- package/dist/agent/credential-extractors.js.map +0 -1
- package/dist/agent/credential-secrets.js +0 -628
- package/dist/agent/credential-secrets.js.map +0 -1
- package/dist/agent/credential-ticker.js +0 -57
- package/dist/agent/credential-ticker.js.map +0 -1
- package/dist/agent/gondolin-creds-staging.js +0 -356
- package/dist/agent/gondolin-creds-staging.js.map +0 -1
- package/dist/agent/gondolin-dispatch.js +0 -375
- package/dist/agent/gondolin-dispatch.js.map +0 -1
- package/dist/agent/gondolin.js +0 -124
- package/dist/agent/gondolin.js.map +0 -1
- package/dist/agent/runner-decisions.js +0 -134
- package/dist/agent/runner-decisions.js.map +0 -1
- package/dist/agent/runner.js +0 -1456
- package/dist/agent/runner.js.map +0 -1
- package/dist/agent/tool-call-summary.js +0 -102
- package/dist/agent/tool-call-summary.js.map +0 -1
- package/dist/agent/vm-acp-mapping.js +0 -73
- package/dist/agent/vm-acp-mapping.js.map +0 -1
- package/dist/agent/vm-guards.js +0 -262
- package/dist/agent/vm-guards.js.map +0 -1
- package/dist/agent/vm-port.js +0 -22
- package/dist/agent/vm-port.js.map +0 -1
- package/dist/agent/vm-process-registry.js +0 -79
- package/dist/agent/vm-process-registry.js.map +0 -1
- package/dist/bin/cli-args.js +0 -105
- package/dist/bin/cli-args.js.map +0 -1
- package/dist/bin/symphony.js +0 -794
- package/dist/bin/symphony.js.map +0 -1
- package/dist/errors.js +0 -15
- package/dist/errors.js.map +0 -1
- package/dist/http-disk.js +0 -135
- package/dist/http-disk.js.map +0 -1
- package/dist/http-handlers.js.map +0 -1
- package/dist/http.js.map +0 -1
- package/dist/issues.js +0 -178
- package/dist/issues.js.map +0 -1
- package/dist/logging.js +0 -203
- package/dist/logging.js.map +0 -1
- package/dist/mcp.js +0 -706
- package/dist/mcp.js.map +0 -1
- package/dist/memory.js +0 -85
- package/dist/memory.js.map +0 -1
- package/dist/orchestrator-decisions.js +0 -331
- package/dist/orchestrator-decisions.js.map +0 -1
- package/dist/orchestrator.js +0 -1569
- package/dist/orchestrator.js.map +0 -1
- package/dist/prompt.js +0 -65
- package/dist/prompt.js.map +0 -1
- package/dist/reconciler/cache.js +0 -65
- package/dist/reconciler/cache.js.map +0 -1
- package/dist/reconciler/index.js +0 -448
- package/dist/reconciler/index.js.map +0 -1
- package/dist/reconciler/ledger.js +0 -131
- package/dist/reconciler/ledger.js.map +0 -1
- package/dist/reconciler/pr-adapters.js +0 -174
- package/dist/reconciler/pr-adapters.js.map +0 -1
- package/dist/reconciler/pr-decide.js.map +0 -1
- package/dist/reconciler/pr.js +0 -422
- package/dist/reconciler/pr.js.map +0 -1
- package/dist/reconciler/types.js +0 -12
- package/dist/reconciler/types.js.map +0 -1
- package/dist/reconciler/vm.js +0 -243
- package/dist/reconciler/vm.js.map +0 -1
- package/dist/reconciler/workspace-defaults.js +0 -83
- package/dist/reconciler/workspace-defaults.js.map +0 -1
- package/dist/reconciler/workspace.js +0 -272
- package/dist/reconciler/workspace.js.map +0 -1
- package/dist/runlog.js +0 -403
- package/dist/runlog.js.map +0 -1
- package/dist/scaffold.js +0 -165
- package/dist/scaffold.js.map +0 -1
- package/dist/trackers/local.js +0 -445
- package/dist/trackers/local.js.map +0 -1
- package/dist/trackers/types.js +0 -10
- package/dist/trackers/types.js.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/util/clock.js +0 -12
- package/dist/util/clock.js.map +0 -1
- package/dist/util/crypto.js +0 -25
- package/dist/util/crypto.js.map +0 -1
- package/dist/util/frontmatter.js +0 -70
- package/dist/util/frontmatter.js.map +0 -1
- package/dist/util/fs-issues.js +0 -22
- package/dist/util/fs-issues.js.map +0 -1
- package/dist/util/process.js +0 -152
- package/dist/util/process.js.map +0 -1
- package/dist/util/workspace-key.js +0 -10
- package/dist/util/workspace-key.js.map +0 -1
- package/dist/workflow-loader.js +0 -147
- package/dist/workflow-loader.js.map +0 -1
- package/dist/workflow.js +0 -822
- package/dist/workflow.js.map +0 -1
- package/dist/workspace-types.js +0 -8
- package/dist/workspace-types.js.map +0 -1
- package/dist/workspace.js +0 -443
- package/dist/workspace.js.map +0 -1
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
// FCIS rewrite — THE COMPOSITION ROOT (the single file allowed to import core).
|
|
2
|
+
//
|
|
3
|
+
// Usage (ported 1:1 from REF src/bin/symphony.ts):
|
|
4
|
+
// symphony [path-to-WORKFLOW.yaml] [--port <port>] [--reconcile-force] [--verbose]
|
|
5
|
+
// symphony doctor [path-to-WORKFLOW.yaml] [--port <port>]
|
|
6
|
+
// symphony reconcile [path-to-WORKFLOW.yaml] [--force] [--port <port>]
|
|
7
|
+
//
|
|
8
|
+
// Responsibility: parse argv (pure core/cli/args), load+watch WORKFLOW.yaml, build
|
|
9
|
+
// every adapter/port (in the main-adapters sibling) + the deterministic seams,
|
|
10
|
+
// construct the EffectInterpreter, run doctor/preflight, branch to serve/
|
|
11
|
+
// reconcile, bind the unified HTTP server (dashboard + MCP + the /acp
|
|
12
|
+
// WebSocket), drive the orchestrator over the pure scheduler reducer
|
|
13
|
+
// (core/schedule/tick), and install the SIGTERM/SIGINT graceful-shutdown
|
|
14
|
+
// choreography (in the main-shutdown sibling). ALL decisions live in core; this
|
|
15
|
+
// file only wires the pure deciders into the adapters the shell siblings build.
|
|
16
|
+
//
|
|
17
|
+
// FCIS discipline: imperative shell — async/await/Promise/real IO are expected.
|
|
18
|
+
// This is the ONE shell file permitted to import src/core; everything that does
|
|
19
|
+
// NOT need core lives in a sibling (main-adapters / main-preflight / main-shutdown
|
|
20
|
+
// / main-scaffold) that imports src/types + the other shell slices only. The root
|
|
21
|
+
// builds the core-backed closures and injects them into those siblings.
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
import process from 'node:process';
|
|
24
|
+
// ─── CORE (decisions only — the ONLY file allowed these imports) ──────────────
|
|
25
|
+
import { parseCli } from '../core/cli/args.js';
|
|
26
|
+
import { parseWorkflow } from '../core/workflow/parse.js';
|
|
27
|
+
import { parseActionsBlock } from '../core/actions/parse.js';
|
|
28
|
+
import { parseMemAvailableMib } from '../core/schedule/admission.js';
|
|
29
|
+
import { deriveSpawnRouting, derivePrRouting, requiredAdapterIds, resolveActionsForState } from '../core/workflow/derive.js';
|
|
30
|
+
import { validateDispatch } from '../core/workflow/validate.js';
|
|
31
|
+
import { probePromptTemplates } from '../core/workflow/prompt-probe.js';
|
|
32
|
+
import { tick, FAILURE_BASE_MS, POLL_TIMER_ID, SPAWN_CYCLE_ACTOR } from '../core/schedule/tick.js';
|
|
33
|
+
import { decideReconcileForIssue } from '../core/schedule/reconcile-issue.js';
|
|
34
|
+
import { backoffDelayMs } from '../core/schedule/retry.js';
|
|
35
|
+
import { classifyPushResult, parsePrNumberFromUrl, describeHandoffFailure } from '../core/git/result.js';
|
|
36
|
+
import { foldRuntimeEvent, applyToolDelta, clearToolCallsAtTurnBoundary, toolCallLifecycle, foldTokenUsage, detectStall } from '../core/schedule/token-fold.js';
|
|
37
|
+
// RUNNER-slice core deciders (runner-loop + actions-runner + dispatch-wrapper
|
|
38
|
+
// extras). Bundled into RUNNER_CORE below + handed to main-loops; only this
|
|
39
|
+
// composition root may import them.
|
|
40
|
+
import { isTransportError, classifyTurnOutcome, decideTurnContinuation, decideAttemptOutcome, decideRecovery, selectPermissionOption } from '../core/runner/turn.js';
|
|
41
|
+
import { resolveDispatchConfig } from '../core/runner/dispatch-config.js';
|
|
42
|
+
import { applyRuntimeInjections } from '../core/runner/injection.js';
|
|
43
|
+
import { buildVmPlan, byoProbeFailureMessage } from '../core/runner/vm-plan.js';
|
|
44
|
+
import { buildManagedImageWiring } from '../core/image/managed-image.js';
|
|
45
|
+
import { buildByoProbeScript, miseInstallFailureMessage, hasProjectMiseConfig } from '../core/runner/mise.js';
|
|
46
|
+
import { selectPromptKind, renderPrompt, buildSteeringReplyPrompt, continuationPrompt } from '../core/runner/prompt.js';
|
|
47
|
+
import { activeStateNames, terminalStateNames, pickHoldingState, selectIssuesByIds, selectIssuesByStates, selectCandidateIssues, matchingCandidates, resolveMatch, pickNextNumericIdentifier } from '../core/issue/parse.js';
|
|
48
|
+
import { resolveActorString } from '../core/schedule/eligibility.js';
|
|
49
|
+
import { assertNoCredentialMounts, assertContained } from '../core/vm-guards.js';
|
|
50
|
+
import { guestMcpUrl } from '../core/mcp/url.js';
|
|
51
|
+
import { deriveActionContext } from '../core/actions/context.js';
|
|
52
|
+
import { planActions } from '../core/actions/plan.js';
|
|
53
|
+
import { foldPredicateProbe } from '../core/actions/predicates.js';
|
|
54
|
+
import { beginAction, foldActionOutcome, foldRenderFailed, foldSkipped, foldPredicateError, summarizeRun } from '../core/actions/run-fold.js';
|
|
55
|
+
// Credential-egress slice deciders (the PURE half the host-only adapter + per-VM
|
|
56
|
+
// egress substrate consume; only this composition root may import them).
|
|
57
|
+
import { extractClaudeToken, extractCodexToken, codexEnvFallback } from '../core/credential/extract.js';
|
|
58
|
+
import { extractClaudeIdentity, extractCodexMetadata } from '../core/credential/identity.js';
|
|
59
|
+
import { buildAdapterCredentialSpecWithPlaceholder, buildAdapterHooksConfig, codexUpstreamRoute } from '../core/credential/shape.js';
|
|
60
|
+
import { buildGondolinFakeCreds } from '../core/credential/fake-creds.js';
|
|
61
|
+
import { buildStagedConfigs } from '../core/credential/adapter-config.js';
|
|
62
|
+
import { buildUrl as buildMcpUrl } from '../core/mcp/url.js';
|
|
63
|
+
// MCP control-plane deciders (the McpCore bundle the per-issue runtime closes over).
|
|
64
|
+
import { validateEnvelope, extractId, routeFraming, makeError as makeMcpError, JsonRpcErrorCode } from '../core/mcp/protocol.js';
|
|
65
|
+
import { decideToolCall } from '../core/mcp/dispatch.js';
|
|
66
|
+
import { foldPostMove } from '../core/mcp/post-move.js';
|
|
67
|
+
import { composeIssueFile } from '../core/issue/file.js';
|
|
68
|
+
// Reconciler-slice deciders (VM reaper / workspace janitor / PR autopilot).
|
|
69
|
+
import { decideVm } from '../core/reconcile/vm-decide.js';
|
|
70
|
+
import { beginKill, foldKillStep } from '../core/reconcile/vm-reap.js';
|
|
71
|
+
import { decideWorkspace } from '../core/reconcile/workspace-decide.js';
|
|
72
|
+
import { classifyPrIntent } from '../core/reconcile/pr-classify.js';
|
|
73
|
+
import { decidePr } from '../core/reconcile/pr-decide.js';
|
|
74
|
+
import { foldPrEffectOutcome, MAX_PR_DECIDE_ITERATIONS } from '../core/reconcile/pr-loop.js';
|
|
75
|
+
import { decidePrSummaryFreshness, decidePrViewFreshness } from '../core/reconcile/pr-notes.js';
|
|
76
|
+
import { createLedger, start as ledgerStart, done as ledgerDone, error as ledgerError, record as ledgerRecord, resourceSnapshot as ledgerResourceSnapshot, } from '../core/reconcile/ledger.js';
|
|
77
|
+
import { resolveHttpPort, formatStartupBanner, checkNodeVersion, checkWorkflow, checkGondolinImage, checkTrackerRoot, checkDashboardPort, doctorReportPassed, formatDoctorReport, } from '../core/doctor/checks.js';
|
|
78
|
+
// HTTP/dashboard slice (core/http): the pure router/deciders/views/renderers the
|
|
79
|
+
// composed `handle` drives. Only this composition root may import them.
|
|
80
|
+
import { matchRoute, resolvePartialName, extractBearerToken, classifyContentType, checkSteeringCsrf, checkTriageCsrf, extractFormText, extractJsonText, } from '../core/http/routes.js';
|
|
81
|
+
import { decideCreateIssue, decideMoveTransition, buildIssueDetailDto } from '../core/http/decisions.js';
|
|
82
|
+
import { buildSnapshot, buildHealthRollup, buildSessionTotalsView } from '../core/http/views.js';
|
|
83
|
+
import { renderDashboardHtml, renderHeaderPartial, renderHealthPartial, renderAttentionPartial, renderBoardPartial, renderTotalsPartial, renderIssueDetailPage, renderIssueNotFoundPage, } from '../core/http/render.js';
|
|
84
|
+
import { hostClaudeCredentialPath, hostCodexCredentialPath, codexCredentialAvailable, codexMissingCredentialMessage, isKnownAdapter, } from '../core/credential/availability.js';
|
|
85
|
+
// ─── SHELL ADAPTERS (each a THIN sibling shell module) ────────────────────────
|
|
86
|
+
import { watchWorkflowSource, loadWorkflowSource, loadWorkflowProbed, validateDispatchIo } from './adapter/workflow-loader.js';
|
|
87
|
+
import { buildLogSink, setLogVerbose, closeLogFile } from './interp/log.js';
|
|
88
|
+
import { createEffectInterpreter } from './effect-interpreter.js';
|
|
89
|
+
import { bindHttp, checkMcpPrecondition, bailStartup } from './main-http.js';
|
|
90
|
+
import { wireHttpHandler, probeTrackerWritable } from './main-http-handler.js';
|
|
91
|
+
import { buildMcpRuntime } from './main-mcp.js';
|
|
92
|
+
import { OrchestratorLoop } from './orchestrator-loop.js';
|
|
93
|
+
import { ReconcilerLoop } from './reconciler-loop.js';
|
|
94
|
+
import { resolveLogFile, wireLogSink, buildConcreteAdapters, buildEffectAdapters } from './main-adapters.js';
|
|
95
|
+
import { buildTransportSubstrates } from './main-substrates.js';
|
|
96
|
+
import { buildReconcilerPasses } from './main-reconcilers.js';
|
|
97
|
+
import { inFlightEntries } from './main-reconcilers-helpers.js';
|
|
98
|
+
import { installShutdownHandlers } from './main-shutdown.js';
|
|
99
|
+
import { handlePreflight } from './main-preflight.js';
|
|
100
|
+
import { readSymphonyVersion, isMainEntry } from './main-entry.js';
|
|
101
|
+
import { buildOrchestratorWithRunner, loadLauncherAsset, loadMiseConfigAsset } from './main-loops.js';
|
|
102
|
+
import { buildRunDoctor } from './main-doctor.js';
|
|
103
|
+
import { startServices } from './main-startup.js';
|
|
104
|
+
// Re-exported for the public module surface (tests import the root's helpers).
|
|
105
|
+
export { isMainEntry } from './main-entry.js';
|
|
106
|
+
// Real YAML decoder (the shell side of the injected ParseDeps).
|
|
107
|
+
import { parse as parseYaml } from 'yaml';
|
|
108
|
+
// ─── Workflow parse closure + injected pure deps (core curried with decoders) ──
|
|
109
|
+
/** The injected workflow ParseDeps: SHELL yaml decoder + CORE actions sub-parser. */
|
|
110
|
+
const WORKFLOW_PARSE_DEPS = { parseYaml, parseActions: parseActionsBlock };
|
|
111
|
+
/** Pure parse closure injected into the WorkflowSource adapter (and the doctor). */
|
|
112
|
+
const parseWorkflowText = (text, workflowPath) => {
|
|
113
|
+
const { config, definition } = parseWorkflow(text, workflowPath, WORKFLOW_PARSE_DEPS, process.env);
|
|
114
|
+
return { config, definition };
|
|
115
|
+
};
|
|
116
|
+
/** The pure CORE fns/constants the shell adapters consume but may not import
|
|
117
|
+
* themselves (only this composition root imports core). */
|
|
118
|
+
const ADAPTER_CORE_DEPS = {
|
|
119
|
+
parseMemAvailableMib,
|
|
120
|
+
assertContained, composeIssueFile, pickNextNumericIdentifier,
|
|
121
|
+
};
|
|
122
|
+
/** The pure CORE credential deciders the credential-egress substrate consumes
|
|
123
|
+
* (host-only token/identity extractors + placeholder/spec/allowlist/route
|
|
124
|
+
* assemblers). The substrate stays core-free; the root injects these. */
|
|
125
|
+
const CREDENTIAL_CORE_DEPS = {
|
|
126
|
+
pure: {
|
|
127
|
+
extractClaudeToken, extractCodexToken, codexEnvFallback, extractClaudeIdentity,
|
|
128
|
+
extractCodexMetadata,
|
|
129
|
+
},
|
|
130
|
+
buildAdapterCredentialSpecWithPlaceholder, buildAdapterHooksConfig,
|
|
131
|
+
buildGondolinFakeCreds, buildStagedConfigs, codexUpstreamRoute,
|
|
132
|
+
};
|
|
133
|
+
/** The pure CORE reconciler deciders + ledger reducer the reconciler passes
|
|
134
|
+
* drive (the shell sibling may not import core; the root injects them here). */
|
|
135
|
+
const RECONCILER_CORE_DEPS = {
|
|
136
|
+
decideVm, beginKill, foldKillStep, decideWorkspace, selectIssuesByStates, classifyPrIntent, decidePr,
|
|
137
|
+
foldPrEffectOutcome, maxPrDecideIterations: MAX_PR_DECIDE_ITERATIONS,
|
|
138
|
+
decidePrSummaryFreshness, decidePrViewFreshness,
|
|
139
|
+
createLedger, ledgerStart, ledgerDone, ledgerError, ledgerRecord, ledgerResourceSnapshot,
|
|
140
|
+
};
|
|
141
|
+
/** The pure credential-availability classifiers the WorkflowSource probes with. */
|
|
142
|
+
const CREDENTIAL_AVAILABILITY_DEPS = {
|
|
143
|
+
hostClaudeCredentialPath, hostCodexCredentialPath,
|
|
144
|
+
codexCredentialAvailable, codexMissingCredentialMessage,
|
|
145
|
+
};
|
|
146
|
+
/** symphony version (read off package.json; works from src/ and dist/). */
|
|
147
|
+
const SYMPHONY_VERSION = readSymphonyVersion(import.meta.url);
|
|
148
|
+
/**
|
|
149
|
+
* Managed prebuilt-image wiring for THIS host (issue 224), built once at the root (the
|
|
150
|
+
* only core importer): the published-asset ref/URLs for the running version + host arch
|
|
151
|
+
* + `SYMPHONY_RELEASE_REPO` override. Null on an arch with no published asset (the
|
|
152
|
+
* managed source is then inert). Shared by the orchestrator loops (fetch routing +
|
|
153
|
+
* readiness) and the doctor (managed-source preflight).
|
|
154
|
+
*/
|
|
155
|
+
const MANAGED_IMAGE_WIRING = buildManagedImageWiring({ version: SYMPHONY_VERSION, nodeArch: process.arch, repo: process.env.SYMPHONY_RELEASE_REPO ?? null });
|
|
156
|
+
/** The in-VM vm-agent launcher source (read off host disk ONCE at boot; fail-fast
|
|
157
|
+
* if absent). Staged per-dispatch into the guest so it's byte-identical to the
|
|
158
|
+
* host transport (eliminates the image⇄host launcher version lock). */
|
|
159
|
+
const LAUNCHER_SOURCE = loadLauncherAsset().source;
|
|
160
|
+
/** The symphony-bundled mise SYSTEM config source (issue 209; read off host disk ONCE
|
|
161
|
+
* at boot, fail-fast if absent). Always staged per-dispatch into the guest at
|
|
162
|
+
* /etc/mise/config.toml (mise provisioning is unconditional, issue 233), so node + the
|
|
163
|
+
* agent CLIs are decoupled from the image digest (bump a pin → no image rebuild + repin). */
|
|
164
|
+
const MISE_SYSTEM_CONFIG_SOURCE = loadMiseConfigAsset().source;
|
|
165
|
+
// ─── Preflight: doctor / scaffold — the early-exit subcommands ─────────────────
|
|
166
|
+
/** The doctor preflight closure (built in a sibling; the root injects core checks). */
|
|
167
|
+
const runDoctor = buildRunDoctor({ checkNodeVersion, checkWorkflow, checkGondolinImage, checkTrackerRoot, checkDashboardPort, formatDoctorReport, doctorReportPassed },
|
|
168
|
+
// SAME core bundle the startup probe uses (host-credential paths + classifiers +
|
|
169
|
+
// messages) so doctor can't disagree with the live probe, plus the adapter union.
|
|
170
|
+
{ ...CREDENTIAL_AVAILABILITY_DEPS, requiredAdapterIds, isKnownAdapter },
|
|
171
|
+
// Load + render-probe the SAME way live serve validates: loadWorkflowProbed
|
|
172
|
+
// assembles the per-state prompt templates (a missing/renamed prompt_file throws
|
|
173
|
+
// `missing_prompt_file`) AND runs the pure probePromptTemplates render-probe (an
|
|
174
|
+
// unparseable prompt_file throws `invalid_prompt_template`) — so BOTH surface as a
|
|
175
|
+
// doctor `workflow` FAIL, matching the boot validateBootConfig probe, not at dispatch.
|
|
176
|
+
// last arg: managed-image wiring (issue 224) for the doctor's managed-source preflight.
|
|
177
|
+
async (p) => (await loadWorkflowProbed(p, parseWorkflowText, probePromptTemplates)).config, MANAGED_IMAGE_WIRING);
|
|
178
|
+
/**
|
|
179
|
+
* Build the in-process graph: open the workflow watcher, wire the deterministic
|
|
180
|
+
* seams, construct every adapter, assemble the EffectInterpreter over them, and
|
|
181
|
+
* stand up the orchestrator + reconciler loops. The reload callback re-projects
|
|
182
|
+
* the freshly-parsed config so a WORKFLOW.yaml edit retargets the loop without a
|
|
183
|
+
* restart (REF buildReloadHandler).
|
|
184
|
+
*/
|
|
185
|
+
async function buildGraph(cli, workflowPath) {
|
|
186
|
+
const src = await watchWorkflowSource(workflowPath, parseWorkflowText, { watch: true });
|
|
187
|
+
let liveCfg = src.current().config;
|
|
188
|
+
validateBootConfig(src.current());
|
|
189
|
+
// Persistent log sink: SYMPHONY_LOG_FILE env override wins ("" disables);
|
|
190
|
+
// otherwise <logs.root>/symphony.log. wireLogSink points the sink + returns a
|
|
191
|
+
// reload retargeter that moves (and announces) it only when the path changes.
|
|
192
|
+
const retargetLogSink = wireLogSink(process.env.SYMPHONY_LOG_FILE, liveCfg);
|
|
193
|
+
setLogVerbose(cli.verbose);
|
|
194
|
+
const log = buildLogSink();
|
|
195
|
+
// Inject the pure core match-resolver into the tracker adapter's move path
|
|
196
|
+
// (the adapter is built in a shell sibling that may not import core).
|
|
197
|
+
const resolveIssueMatch = (all, issueId, fromState) => resolveMatch(matchingCandidates(all, issueId), issueId, fromState);
|
|
198
|
+
const a = buildConcreteAdapters(() => liveCfg, log, resolveIssueMatch, ADAPTER_CORE_DEPS);
|
|
199
|
+
// The transport substrates: host-only CredentialPort + per-VM egress substrate
|
|
200
|
+
// (placeholder-only-guest staging, REQUEST-side hooks incl. the PR#119 codex
|
|
201
|
+
// route — see main-credential) + the real ACP port over the `/acp` WebSocket,
|
|
202
|
+
// bound to the SAME AcpWsRegistry the HTTP server exposes (a.acpWs). The runner
|
|
203
|
+
// slice later populates `acp.context` + consumes `credential.registry`.
|
|
204
|
+
const { credential, acp } = buildTransportSubstrates({
|
|
205
|
+
credentialCore: CREDENTIAL_CORE_DEPS, acpCore: { toolCallLifecycle, isTransportError, selectPermissionOption },
|
|
206
|
+
random: a.random, acpWs: a.acpWs, runlog: a.runlog, clock: a.clock, log, getCfg: () => liveCfg,
|
|
207
|
+
requiredAdapters: () => requiredAdapterIds(liveCfg, isKnownAdapter),
|
|
208
|
+
});
|
|
209
|
+
// The per-issue MCP control plane (in-VM agent transition/steering/propose_issue
|
|
210
|
+
// tools/call). `applyMcpEffect` is the SAME tracker-move applier the central
|
|
211
|
+
// interpreter's `mcp_tool` family routes through; propose_issue writes WITHOUT
|
|
212
|
+
// an identifier → the tracker collision-picks the next free id (§2i fix).
|
|
213
|
+
const mcp = buildMcpRuntime({
|
|
214
|
+
core: MCP_CORE_PARTS, tracker: a.tracker, random: a.random, crypto: a.crypto,
|
|
215
|
+
clock: a.clock, log, getLiveCfg: () => liveCfg,
|
|
216
|
+
derivePrMerge: (cfg) => ({ enabled: cfg.pr.enabled, mergeState: derivePrRouting(cfg.states).mergeState }),
|
|
217
|
+
});
|
|
218
|
+
// The orchestrator owns the live running/claimed maps the reconciler reads as
|
|
219
|
+
// its intended set; it is built just below (after the interpreter it drives),
|
|
220
|
+
// so the reconciler reads it through a forward-referencing closure. The passes'
|
|
221
|
+
// `intended.inFlight()` only fires at pass-run time (well after construction).
|
|
222
|
+
let orchestrator;
|
|
223
|
+
const built = buildReconcilerPasses({
|
|
224
|
+
core: RECONCILER_CORE_DEPS, getCfg: () => liveCfg, log,
|
|
225
|
+
intended: { inFlight: () => inFlightEntries(orchestrator, liveCfg) },
|
|
226
|
+
clock: a.clock, vm: a.vm, signal: a.signal, timer: a.timer, gh: a.gh, git: a.git, workspace: a.workspace, tracker: a.tracker,
|
|
227
|
+
derivePrRouting: (cfg) => derivePrRouting(cfg.states),
|
|
228
|
+
sourceRepo: () => process.env.SYMPHONY_SOURCE_REPO ?? liveCfg.workflow_dir,
|
|
229
|
+
});
|
|
230
|
+
// The reaper / pr effect families route through the same appliers the passes
|
|
231
|
+
// drive, so a core-emitted `reaper`/`pr` Effect and a pass apply share state.
|
|
232
|
+
const interpreter = createEffectInterpreter(buildEffectAdapters({
|
|
233
|
+
...a, log, logsRoot: () => liveCfg.logs.root,
|
|
234
|
+
acp: acp.port,
|
|
235
|
+
credential: credential.port,
|
|
236
|
+
applyKillStep: built.applyKillStep,
|
|
237
|
+
applyPrEffect: built.applyPrEffect,
|
|
238
|
+
// The `steering` family resolves/cancels McpRuntime's awaiter (the ONE live
|
|
239
|
+
// Promise); the steering-reply route + worker teardown emit, never poke it. The
|
|
240
|
+
// `mcp` family activates/deactivates the per-dispatch entry on the SAME runtime —
|
|
241
|
+
// the runner brackets via an Effect rather than poking activate/deactivate.
|
|
242
|
+
applyMcpEffect: mcp.applyMcpEffect, classifyPushResult, parsePrNumberFromUrl, steering: mcp.runtime.steering, mcpLifecycle: mcp.runtime,
|
|
243
|
+
}));
|
|
244
|
+
// The RUNNER slice + the OrchestratorLoop it drives (built together so the
|
|
245
|
+
// runner's onWorkerExit forward-references the loop). The runner brackets MCP
|
|
246
|
+
// activate/deactivate + the ACP dispatch context, runs the §2a mount guard before
|
|
247
|
+
// createVm, and folds per-issue ACP events/token-usage onto the live entry.
|
|
248
|
+
orchestrator = buildOrchestratorWithRunner({
|
|
249
|
+
core: LOOPS_CORE,
|
|
250
|
+
adapters: {
|
|
251
|
+
interpreter, workspace: a.workspace, tracker: a.tracker, vm: a.vm, acpPort: acp.port, credentialPort: credential.port, runlog: a.runlog, clock: a.clock, random: a.random, timer: a.timer, mem: a.mem,
|
|
252
|
+
},
|
|
253
|
+
substrates: { credential, acpContext: acp.context, acpRegistry: acp.registry, mcp: mcp.runtime },
|
|
254
|
+
// managedImageWiring (issue 224): built once at module level (root is the only core importer), shared with the doctor.
|
|
255
|
+
log, getLiveCfg: () => liveCfg, getWorkflow: () => src.current().definition, boundMcpPort: () => graph.boundPort, launcherSource: LAUNCHER_SOURCE, miseSystemConfigSource: MISE_SYSTEM_CONFIG_SOURCE, readEnv: (key) => process.env[key], managedImageWiring: MANAGED_IMAGE_WIRING,
|
|
256
|
+
});
|
|
257
|
+
const reconciler = new ReconcilerLoop({ passes: built.passes, timer: a.timer, log });
|
|
258
|
+
// Compose the dashboard/REST `handle`. The agent-facing MCP routes ride an
|
|
259
|
+
// McpHttpSurface assembled here: runtime.handleJsonRpc + a performSteering bound to
|
|
260
|
+
// the central interpreter (steering-reply emits a steering Effect — no awaiter poke).
|
|
261
|
+
const httpHandle = wireHttpHandler({
|
|
262
|
+
core: HTTP_HANDLER_CORE, orchestrator, tracker: a.tracker, clock: a.clock, log,
|
|
263
|
+
getLiveCfg: () => liveCfg, workflowPath: liveCfg.workflow_path, trackerWritable: () => probeTrackerWritable(liveCfg.tracker.root),
|
|
264
|
+
mcp: { handleJsonRpc: (id, t, b) => mcp.runtime.handleJsonRpc(id, t, b), performSteering: (e) => interpreter.execute(e) }
|
|
265
|
+
});
|
|
266
|
+
const graph = {
|
|
267
|
+
src, interpreter, orchestrator, reconciler, acpWs: a.acpWs,
|
|
268
|
+
http: null, boundPort: null, httpHandle, vm: a.vm, log, clock: a.clock,
|
|
269
|
+
getLiveCfg: () => liveCfg,
|
|
270
|
+
mcp: mcp.runtime,
|
|
271
|
+
credential, acp,
|
|
272
|
+
};
|
|
273
|
+
// Reload: re-point the live cfg + retarget the log sink + fan to the reconciler.
|
|
274
|
+
// The orchestrator reads the fresh cfg through its readConfig closure next tick.
|
|
275
|
+
src.onChange((cfg) => {
|
|
276
|
+
liveCfg = cfg;
|
|
277
|
+
retargetLogSink(cfg);
|
|
278
|
+
// The passes close over `getCfg: () => liveCfg` (already retargeted above), so
|
|
279
|
+
// re-hand the SAME pass set — they observe the reloaded config next pass.
|
|
280
|
+
reconciler.updateConfig(cfg, built.passes);
|
|
281
|
+
});
|
|
282
|
+
return graph;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* The fatal boot gates (REF loadAndValidateConfig): this build serves
|
|
286
|
+
* tracker.kind=local only; the pure validateDispatch catches a misconfigured
|
|
287
|
+
* workflow; validateDispatchIo runs the IO-touching half (tracker.root exists,
|
|
288
|
+
* per-state host credential readable) against the injected pure availability
|
|
289
|
+
* classifiers so a missing credential fails at boot, not mid-dispatch.
|
|
290
|
+
*/
|
|
291
|
+
function validateBootConfig({ config: cfg, definition }) {
|
|
292
|
+
const fail = (reason) => {
|
|
293
|
+
process.stderr.write(`error: ${reason}\n`);
|
|
294
|
+
process.exit(2);
|
|
295
|
+
};
|
|
296
|
+
if (cfg.tracker.kind !== 'local') {
|
|
297
|
+
fail(`this build supports tracker.kind=local only (got: ${cfg.tracker.kind || '<unset>'})`);
|
|
298
|
+
}
|
|
299
|
+
// probePromptTemplates returns the same `string | null` shape as the validators,
|
|
300
|
+
// so an unparseable per-state prompt_file folds into the same chain and fails the
|
|
301
|
+
// boot here, not at first dispatch (a missing file already threw in loadWorkflowSource).
|
|
302
|
+
const invalid = validateDispatch(cfg) ?? validateDispatchIo(cfg, CREDENTIAL_AVAILABILITY_DEPS, process.env) ?? probePromptTemplates(definition);
|
|
303
|
+
if (invalid)
|
|
304
|
+
fail(invalid);
|
|
305
|
+
}
|
|
306
|
+
/** Loose pure-CORE fns the loops builder nests into the OrchestratorCore +
|
|
307
|
+
* RunnerCoreParts bundles (main-loops nests). renderInitialPrompt = renderPrompt. */
|
|
308
|
+
const LOOPS_CORE = {
|
|
309
|
+
orchestrator: {
|
|
310
|
+
tick: tick, selectCandidateIssues, selectIssuesByIds, decideReconcileForIssue, detectStall, deriveSpawnRouting, activeStateNames, terminalStateNames, pickHoldingState, backoffDelayMs, failureBaseMs: FAILURE_BASE_MS, pollTimerId: POLL_TIMER_ID, spawnActor: SPAWN_CYCLE_ACTOR,
|
|
311
|
+
tokenFold: { foldRuntimeEvent, applyToolDelta, clearToolCallsAtTurnBoundary, foldTokenUsage },
|
|
312
|
+
},
|
|
313
|
+
loop: {
|
|
314
|
+
resolveDispatchConfig, applyRuntimeInjections, buildVmPlan, selectPromptKind,
|
|
315
|
+
// decideRecovery defaults the per-turn budget + base backoff internally (issue 213),
|
|
316
|
+
// so the shell turn loop passes only the attempts already spent.
|
|
317
|
+
classifyTurnOutcome, decideTurnContinuation, decideAttemptOutcome, decideRecovery,
|
|
318
|
+
renderInitialPrompt: renderPrompt,
|
|
319
|
+
renderSteeringPrompt: ({ question, context, reply }) => buildSteeringReplyPrompt(question, context, reply),
|
|
320
|
+
continuationPrompt, activeStateNames, selectIssuesByIds,
|
|
321
|
+
},
|
|
322
|
+
actions: {
|
|
323
|
+
resolveActionsForState, deriveActionContext, planActions, foldPredicateProbe, beginAction, foldActionOutcome,
|
|
324
|
+
foldRenderFailed, foldSkipped, foldPredicateError, summarizeRun, describeHandoffFailure,
|
|
325
|
+
},
|
|
326
|
+
// mise toolchain-provisioning deciders (issue 209): byoProbeScript, miseInstallFailureMessage, hasProjectMiseConfig.
|
|
327
|
+
resolveActorString, assertNoCredentialMounts, resolveDispatchConfig, guestMcpUrl, byoProbeFailureMessage, byoProbeScript: buildByoProbeScript, miseInstallFailureMessage, hasProjectMiseConfig,
|
|
328
|
+
};
|
|
329
|
+
/** The pure CORE decisions + log-flush the HTTP boot cluster (main-http) needs. */
|
|
330
|
+
const HTTP_BIND_CORE = { resolveHttpPort, buildMcpUrl, closeLog: closeLogFile };
|
|
331
|
+
/** The pure CORE http router/deciders/views/renderers the composed dashboard
|
|
332
|
+
* `handle` drives (the shell handler may not import core; the root binds them). */
|
|
333
|
+
const HTTP_HANDLER_CORE = {
|
|
334
|
+
matchRoute, resolvePartialName, extractBearerToken, classifyContentType, checkSteeringCsrf, checkTriageCsrf, extractFormText, extractJsonText,
|
|
335
|
+
decideCreateIssue, decideMoveTransition, buildIssueDetailDto, buildSnapshot, buildHealthRollup, buildSessionTotalsView,
|
|
336
|
+
renderDashboardHtml, renderHeaderPartial, renderHealthPartial, renderAttentionPartial, renderBoardPartial, renderTotalsPartial, renderIssueDetailPage, renderIssueNotFoundPage,
|
|
337
|
+
};
|
|
338
|
+
/** The raw pure-CORE MCP deciders the per-issue runtime closes over (protocol /
|
|
339
|
+
* dispatch / post-move family); main-mcp folds them into the McpCore bundle. */
|
|
340
|
+
const MCP_CORE_PARTS = {
|
|
341
|
+
validateEnvelope, extractId, routeFraming, makeError: makeMcpError, decideToolCall, foldPostMove,
|
|
342
|
+
errorCodes: JsonRpcErrorCode,
|
|
343
|
+
};
|
|
344
|
+
// ─── main — argv → preflight → graph → transports → loop → shutdown handlers ───
|
|
345
|
+
export async function main(argv = process.argv.slice(2)) {
|
|
346
|
+
const cli = resolveCli(argv);
|
|
347
|
+
const workflowPath = path.resolve(cli.workflow);
|
|
348
|
+
await handlePreflight(cli, workflowPath, { runDoctor });
|
|
349
|
+
const graph = await buildGraph(cli, workflowPath);
|
|
350
|
+
graph.http = await bindHttp(graph, cli, HTTP_BIND_CORE, graph.httpHandle);
|
|
351
|
+
await checkMcpPrecondition(graph, HTTP_BIND_CORE);
|
|
352
|
+
await startServices(graph, cli, workflowPath, {
|
|
353
|
+
formatStartupBanner, resolveHttpPort, version: SYMPHONY_VERSION,
|
|
354
|
+
logFile: resolveLogFile(process.env.SYMPHONY_LOG_FILE, graph.getLiveCfg()),
|
|
355
|
+
bailStartup: (msg) => bailStartup(msg, graph, HTTP_BIND_CORE),
|
|
356
|
+
});
|
|
357
|
+
// Graph already carries orchestrator/reconciler/src/http/vm/log under the names
|
|
358
|
+
// the handlers want; just add the log-sink flush closure.
|
|
359
|
+
installShutdownHandlers({ ...graph, stopCredentialTicker: () => graph.credential.ticker.stop(), closeLog: closeLogFile });
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Parse argv (pure core/cli/args) and apply the help/error directives the way the
|
|
363
|
+
* original wrote to the stream + exited — the core only RETURNS the directive.
|
|
364
|
+
* Returns the typed Cli on the happy path (the help/error branches never return).
|
|
365
|
+
*/
|
|
366
|
+
function resolveCli(argv) {
|
|
367
|
+
const parsed = parseCli(argv, process.cwd());
|
|
368
|
+
if (parsed.kind === 'help') {
|
|
369
|
+
process.stdout.write(parsed.message);
|
|
370
|
+
process.exit(parsed.exitCode);
|
|
371
|
+
}
|
|
372
|
+
if (parsed.kind === 'error') {
|
|
373
|
+
process.stderr.write(parsed.message);
|
|
374
|
+
process.exit(parsed.exitCode);
|
|
375
|
+
}
|
|
376
|
+
return parsed.cli;
|
|
377
|
+
}
|
|
378
|
+
if (isMainEntry(import.meta.url)) {
|
|
379
|
+
main().catch(async (err) => {
|
|
380
|
+
process.stderr.write(`fatal: ${err.message}\n${err.stack ?? ''}\n`);
|
|
381
|
+
await closeLogFile().catch(() => undefined);
|
|
382
|
+
process.exit(1);
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/shell/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// FCIS rewrite — the runner-feedback folds the OrchestratorLoop applies to its live
|
|
2
|
+
// running entries (kind: shell helper). Sliced out of orchestrator-loop.ts to keep
|
|
3
|
+
// the loop class under the file-line budget. Each fold takes the LIVE RunningEntry
|
|
4
|
+
// (the `active_tool_calls` Set is a live shell handle core never holds) plus the
|
|
5
|
+
// injected PURE core folds (core/schedule/token-fold) and writes the result back.
|
|
6
|
+
//
|
|
7
|
+
// Shell rule: imports from src/types ONLY (the core folds arrive injected).
|
|
8
|
+
/** REF: reportRuntimeEvent — fold the event + track in-flight tool calls onto `e`. */
|
|
9
|
+
export function applyRuntimeEvent(e, ev, fold) {
|
|
10
|
+
const next = fold.foldRuntimeEvent({ last_event: e.last_event, last_event_at: e.last_event_at, last_message: e.last_message, recent_events: e.recent_events }, ev);
|
|
11
|
+
e.last_event = next.last_event;
|
|
12
|
+
e.last_event_at = next.last_event_at;
|
|
13
|
+
e.last_message = next.last_message;
|
|
14
|
+
e.recent_events = next.recent_events;
|
|
15
|
+
if (ev.tool && ev.tool.id) {
|
|
16
|
+
e.active_tool_calls = new Set(fold.applyToolDelta([...e.active_tool_calls], { id: ev.tool.id, ended: ev.tool.ended }));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** REF: reportTurnStarted — turn boundary clears the in-flight tool set. */
|
|
20
|
+
export function applyTurnStarted(e, turnNumber, fold) {
|
|
21
|
+
e.turn_count = turnNumber;
|
|
22
|
+
e.active_tool_calls = new Set(fold.clearToolCallsAtTurnBoundary());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* REF: reportTokenUsage — fold the adapter's ABSOLUTE token totals onto the live
|
|
26
|
+
* entry (core `foldTokenUsage` de-dupes via the per-report delta + new baselines).
|
|
27
|
+
* The dashboard's totals footer sums these per-entry counters live, so without this
|
|
28
|
+
* the totals stay stuck at 0 (§2c).
|
|
29
|
+
*/
|
|
30
|
+
export function applyTokenUsage(e, usage, fold) {
|
|
31
|
+
const delta = fold.foldTokenUsage({
|
|
32
|
+
last_reported_input: e.last_reported_input_tokens,
|
|
33
|
+
last_reported_output: e.last_reported_output_tokens,
|
|
34
|
+
last_reported_total: e.last_reported_total_tokens,
|
|
35
|
+
}, usage);
|
|
36
|
+
e.input_tokens = usage.input_tokens;
|
|
37
|
+
e.output_tokens = usage.output_tokens;
|
|
38
|
+
e.total_tokens = usage.total_tokens;
|
|
39
|
+
e.last_reported_input_tokens = delta.last_reported_input;
|
|
40
|
+
e.last_reported_output_tokens = delta.last_reported_output;
|
|
41
|
+
e.last_reported_total_tokens = delta.last_reported_total;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* REF: detectStalls — the no-activity stall reaper. Folds every running entry's
|
|
45
|
+
* last-activity reference through core `detectStall` (clock injected as nowMs) and
|
|
46
|
+
* returns the issue ids to terminate. core honors the suppression: steering-paused
|
|
47
|
+
* entries AND entries with a tool call IN FLIGHT are skipped (a long silent tool
|
|
48
|
+
* emits no ACP frames; the prompt-timeout hard cap backstops a genuine hang — the
|
|
49
|
+
* "suppress the stall reaper while a tool call is in flight" behavior, §2c).
|
|
50
|
+
*/
|
|
51
|
+
export function detectStalledIssues(running, stall, nowMs) {
|
|
52
|
+
const stallTimeoutMs = stall.stallTimeoutMs();
|
|
53
|
+
if (stallTimeoutMs <= 0)
|
|
54
|
+
return [];
|
|
55
|
+
const stalled = [];
|
|
56
|
+
for (const [issueId, e] of running) {
|
|
57
|
+
const verdict = stall.detectStall({
|
|
58
|
+
stallTimeoutMs,
|
|
59
|
+
steeringRequested: e.steering_requested,
|
|
60
|
+
activeToolCallCount: e.active_tool_calls.size,
|
|
61
|
+
lastReferenceMs: Date.parse(e.last_event_at ?? e.started_at),
|
|
62
|
+
nowMs,
|
|
63
|
+
});
|
|
64
|
+
if (verdict.stalled)
|
|
65
|
+
stalled.push(issueId);
|
|
66
|
+
}
|
|
67
|
+
return stalled;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=orchestrator-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-feedback.js","sourceRoot":"","sources":["../../../src/shell/orchestrator-feedback.ts"],"names":[],"mappings":"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"}
|