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 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-loop.js","sourceRoot":"","sources":["../../../src/shell/orchestrator-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// FCIS rewrite — the per-poll cancel-on-move reconcile (imperative shell helper).
|
|
2
|
+
//
|
|
3
|
+
// Sliced out of orchestrator-loop.ts (at its max-lines budget) like orchestrator-feedback
|
|
4
|
+
// / orchestrator-image. The loop owns the live `running` map + `terminateRunning`; this
|
|
5
|
+
// reads each LIVE entry's FRESH tracker view across ALL states and applies the SAME pure
|
|
6
|
+
// decider the operator-move reducer routes through (`decideReconcileForIssue`), so a disk
|
|
7
|
+
// `mv`/external move and a dashboard move can't drift (issue 211). Entries the agent
|
|
8
|
+
// itself transitioned are SKIPPED — their worker_exit owns the PR-aware cleanup that a
|
|
9
|
+
// blind reap here would stomp; re-checked after the async fetch (an entry can transition
|
|
10
|
+
// during it). Shell rule: imports from src/types ONLY; the decision is the injected core.
|
|
11
|
+
/**
|
|
12
|
+
* Reconcile every LIVE running entry against its FRESH tracker view (issue 211).
|
|
13
|
+
* `terminate(id, cleanup)` is the loop's own `terminateRunning` (cancel + optional
|
|
14
|
+
* workspace reap); a `refresh` mutates the entry's in-memory snapshot in place. A
|
|
15
|
+
* tracker read miss is a no-op this poll (no spurious kills).
|
|
16
|
+
*/
|
|
17
|
+
export async function reconcileRunningEntries(running, deps, terminate) {
|
|
18
|
+
const live = [...running.values()].filter((e) => !e.transitioned);
|
|
19
|
+
if (live.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
const views = await deps.fetchRunningViews(live.map((e) => e.issue_id));
|
|
22
|
+
if (!views)
|
|
23
|
+
return;
|
|
24
|
+
const states = deps.readConfig().states;
|
|
25
|
+
for (const entry of live) {
|
|
26
|
+
if (entry.transitioned)
|
|
27
|
+
continue; // transitioned during the fetch — leave it to worker_exit
|
|
28
|
+
const fresh = views.get(entry.issue_id);
|
|
29
|
+
const action = deps.reconcileIssue(fresh, states);
|
|
30
|
+
if (action.kind === 'terminate')
|
|
31
|
+
terminate(entry.issue_id, action.cleanup);
|
|
32
|
+
else if (action.kind === 'refresh' && fresh)
|
|
33
|
+
entry.issue = fresh;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=orchestrator-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-reconcile.js","sourceRoot":"","sources":["../../../src/shell/orchestrator-reconcile.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,0FAA0F;AAC1F,wFAAwF;AACxF,yFAAyF;AACzF,0FAA0F;AAC1F,qFAAqF;AACrF,uFAAuF;AACvF,yFAAyF;AACzF,0FAA0F;AAS1F;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA0C,EAC1C,IAAmB,EACnB,SAAiD;IAEjD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,YAAY;YAAE,SAAS,CAAC,0DAA0D;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;aACtE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACnE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// FCIS rewrite — reconciler loop driver (the imperative shell of the reconciler).
|
|
2
|
+
//
|
|
3
|
+
// Faithful port of the reference `src/reconciler/index.ts` (the `Reconciler`
|
|
4
|
+
// class). Responsibility, verbatim from the reference:
|
|
5
|
+
// • single-flight `inFlight`-promise coalescing so an event burst
|
|
6
|
+
// (config-reload + backstop tick + manual trigger landing within ms of each
|
|
7
|
+
// other) collapses into ONE ongoing reconcile pass, with a `rerunRequested`
|
|
8
|
+
// flag guaranteeing the latest state is always re-observed afterward.
|
|
9
|
+
// • backstop tick: an internal `setInterval` (default 5 min, `backstopIntervalMs`)
|
|
10
|
+
// fires `reconcile()` so a missed config-watcher signal can't park the
|
|
11
|
+
// reconciler forever. The timer is `unref()`'d so it never holds the process
|
|
12
|
+
// open.
|
|
13
|
+
// • startup reap ordering: `reapWorkspaces()` + `reapVms()` run BEFORE the
|
|
14
|
+
// first dispatch (the orchestrator awaits them in `start()` to take over from
|
|
15
|
+
// the deleted `startupTerminalCleanup` sweep). They are decoupled from the
|
|
16
|
+
// normal `reconcile()` walk so VM/workspace reaping can run on its own cadence
|
|
17
|
+
// (startup / shutdown / worker-exit).
|
|
18
|
+
// • drives the vm / workspace / pr deciders + folds via the interpreter.
|
|
19
|
+
//
|
|
20
|
+
// FCIS split: under the rewrite this loop driver does NOT contain the
|
|
21
|
+
// per-resource decide → apply → fold logic — that lives in the functional core
|
|
22
|
+
// (src/core/reconcile/{vm-decide,vm-reap,workspace-decide,pr-decide,pr-loop}.ts)
|
|
23
|
+
// and is composed against the central `EffectInterpreter` by THIN shell adapters
|
|
24
|
+
// (the `ResourcePass` callbacks injected here). This mirrors how the reference
|
|
25
|
+
// delegated to `VmResource.reconcile()` / `WorkspaceResource.reconcile()` /
|
|
26
|
+
// `PrResource.reconcile()`: the loop driver only owns coalescing + ordering +
|
|
27
|
+
// the backstop timer; each resource owns its own convergence. Keeping the pass
|
|
28
|
+
// callbacks injected (rather than imported from src/core) preserves the shell's
|
|
29
|
+
// import discipline — this file imports src/types ONLY (the composition root
|
|
30
|
+
// src/shell/main.ts wires the concrete core-backed passes in).
|
|
31
|
+
//
|
|
32
|
+
// Per-resource passes are idempotent / cheap when there's no work (they return
|
|
33
|
+
// immediately when desired == actual), and each is wrapped in its own try/catch
|
|
34
|
+
// so one throwing resource never aborts the others (verbatim from the reference's
|
|
35
|
+
// `runPass`). A thrown pass is logged via the injected LogSink, not rethrown.
|
|
36
|
+
/** Stable timer id for the backstop tick registered on the TimerPort. */
|
|
37
|
+
const BACKSTOP_TIMER_ID = 'reconciler-backstop';
|
|
38
|
+
const DEFAULT_BACKSTOP_INTERVAL_MS = 5 * 60_000;
|
|
39
|
+
export class ReconcilerLoop {
|
|
40
|
+
backstopIntervalMs;
|
|
41
|
+
passes;
|
|
42
|
+
timer;
|
|
43
|
+
log;
|
|
44
|
+
backstopArmed = false;
|
|
45
|
+
stopped = false;
|
|
46
|
+
// Single-flight: collapse concurrent reconcile() calls into one ongoing pass
|
|
47
|
+
// (verbatim from the reference). `rerunRequested` guarantees a fresh pass
|
|
48
|
+
// observes the latest config after the in-flight one settles.
|
|
49
|
+
inFlight = null;
|
|
50
|
+
rerunRequested = false;
|
|
51
|
+
// Latest per-resource snapshots, refreshed after each pass for the dashboard.
|
|
52
|
+
lastSnapshots = [];
|
|
53
|
+
constructor(opts) {
|
|
54
|
+
this.backstopIntervalMs = opts.backstopIntervalMs ?? DEFAULT_BACKSTOP_INTERVAL_MS;
|
|
55
|
+
this.passes = opts.passes;
|
|
56
|
+
this.timer = opts.timer;
|
|
57
|
+
this.log = opts.log;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Re-bind the injected passes against freshly-reloaded config + then kick a
|
|
61
|
+
* reconcile. Mirrors the reference's `updateConfig`: the orchestrator rebuilds
|
|
62
|
+
* the core-backed passes (workspace root / PR strategy can change on reload)
|
|
63
|
+
* and hands them in here, then this fires a background reconcile so the
|
|
64
|
+
* reloaded config takes effect on the next pass. The fire-and-forget catch
|
|
65
|
+
* mirrors the reference (a reload-triggered reconcile failure is logged, not
|
|
66
|
+
* propagated).
|
|
67
|
+
*
|
|
68
|
+
* `_cfg` is accepted for parity with the reference signature; this loop driver
|
|
69
|
+
* holds no config-derived state of its own (all config lives in the injected
|
|
70
|
+
* passes), so it is intentionally unused here.
|
|
71
|
+
*/
|
|
72
|
+
updateConfig(_cfg, passes) {
|
|
73
|
+
this.passes = passes;
|
|
74
|
+
void this.reconcile().catch((err) => this.log.emit('warn', 'reconcile after config reload failed', {
|
|
75
|
+
error: err.message,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Arm the backstop tick (idempotent). The interval fires `reconcile()` so a
|
|
80
|
+
* missed signal can't park the reconciler forever; the registered timer is a
|
|
81
|
+
* named one-shot re-armed after each fire (the TimerPort has no repeating
|
|
82
|
+
* primitive). The reference `unref()`'d its `setInterval`; the equivalent here
|
|
83
|
+
* is that the TimerPort's setTimer is expected to be `unref()`'d in the shell
|
|
84
|
+
* adapter so the backstop never holds the process open.
|
|
85
|
+
*/
|
|
86
|
+
start() {
|
|
87
|
+
if (this.backstopArmed || this.stopped)
|
|
88
|
+
return;
|
|
89
|
+
this.backstopArmed = true;
|
|
90
|
+
this.armBackstop();
|
|
91
|
+
}
|
|
92
|
+
armBackstop() {
|
|
93
|
+
if (this.stopped || !this.backstopArmed)
|
|
94
|
+
return;
|
|
95
|
+
this.timer.setTimer(BACKSTOP_TIMER_ID, this.backstopIntervalMs, () => {
|
|
96
|
+
void this.reconcile()
|
|
97
|
+
.catch((err) => this.log.emit('debug', 'backstop reconcile failed', {
|
|
98
|
+
error: err.message,
|
|
99
|
+
}))
|
|
100
|
+
.finally(() => this.armBackstop());
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Stop the loop: clear the backstop timer and mark stopped so no further pass
|
|
105
|
+
* starts. Like the reference, this does NOT block on an in-flight pass — the
|
|
106
|
+
* janitors are idempotent and re-run on the next start. Tests needing
|
|
107
|
+
* deterministic completion call {@link awaitInFlight}.
|
|
108
|
+
*/
|
|
109
|
+
async stop() {
|
|
110
|
+
this.stopped = true;
|
|
111
|
+
this.backstopArmed = false;
|
|
112
|
+
this.timer.clearTimer(BACKSTOP_TIMER_ID);
|
|
113
|
+
}
|
|
114
|
+
/** Await the current reconcile pass (if any). Resolves immediately when idle. */
|
|
115
|
+
async awaitInFlight() {
|
|
116
|
+
if (this.inFlight)
|
|
117
|
+
await this.inFlight;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Run the workspace reaper outside the normal reconcile() walk (startup
|
|
121
|
+
* pre-dispatch sweep). mustFix: this runs BEFORE the first dispatch. No-op
|
|
122
|
+
* when the workspace pass isn't wired. A thrown pass is logged, not rethrown
|
|
123
|
+
* (verbatim from the reference's `reapWorkspaces`).
|
|
124
|
+
*/
|
|
125
|
+
async reapWorkspaces() {
|
|
126
|
+
await this.runResourcePass(this.passes.workspace, 'workspace reap pass threw');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Run the VM reaper outside the normal reconcile() walk (startup / shutdown /
|
|
130
|
+
* non-clean worker-exit). mustFix: the startup invocation runs BEFORE the
|
|
131
|
+
* first dispatch. No-op when the VM pass isn't wired. A thrown pass is logged,
|
|
132
|
+
* not rethrown (verbatim from the reference's `reapVms`).
|
|
133
|
+
*/
|
|
134
|
+
async reapVms() {
|
|
135
|
+
await this.runResourcePass(this.passes.vm, 'vm reap pass threw');
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Trigger a reconcile pass. Idempotent across overlapping callers
|
|
139
|
+
* (single-flight); if a pass is in progress when called, a re-run is scheduled
|
|
140
|
+
* to fire once it completes so the latest config is always observed. Verbatim
|
|
141
|
+
* coalescing logic from the reference's `reconcile()`.
|
|
142
|
+
*
|
|
143
|
+
* `force` is threaded for caller compatibility (the CLI `reconcile --force`
|
|
144
|
+
* entry point); it has no resource-specific semantics now that the per-issue
|
|
145
|
+
* bake is gone, but the rerun coalescing still guarantees a fresh pass observes
|
|
146
|
+
* the latest state.
|
|
147
|
+
*/
|
|
148
|
+
async reconcile(_opts = {}) {
|
|
149
|
+
if (this.stopped)
|
|
150
|
+
return;
|
|
151
|
+
if (this.inFlight) {
|
|
152
|
+
this.rerunRequested = true;
|
|
153
|
+
await this.inFlight;
|
|
154
|
+
if (this.rerunRequested) {
|
|
155
|
+
this.rerunRequested = false;
|
|
156
|
+
await this.runPass();
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
await this.runPass();
|
|
161
|
+
while (this.rerunRequested && !this.stopped) {
|
|
162
|
+
this.rerunRequested = false;
|
|
163
|
+
await this.runPass();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* One reconcile pass: drive the independent janitors (vm reaper, workspace
|
|
168
|
+
* janitor, PR autopilot) in order. Each is wrapped in its own try/catch so a
|
|
169
|
+
* throwing resource never aborts the others, and the whole pass is wrapped once
|
|
170
|
+
* more (verbatim from the reference's `runPass`). `inFlight` is published before
|
|
171
|
+
* the body runs so concurrent callers coalesce onto it, and cleared in
|
|
172
|
+
* `finally` so the next trigger starts fresh.
|
|
173
|
+
*/
|
|
174
|
+
async runPass() {
|
|
175
|
+
this.inFlight = (async () => {
|
|
176
|
+
try {
|
|
177
|
+
await this.runResourcePass(this.passes.vm, 'vm reconcile pass threw');
|
|
178
|
+
await this.runResourcePass(this.passes.workspace, 'workspace reconcile pass threw');
|
|
179
|
+
await this.runResourcePass(this.passes.pr, 'pr reconcile pass threw');
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
this.log.emit('warn', 'reconcile pass threw', { error: err.message });
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
this.inFlight = null;
|
|
186
|
+
}
|
|
187
|
+
})();
|
|
188
|
+
await this.inFlight;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Run one resource pass with its own try/catch so a throwing resource never
|
|
192
|
+
* aborts the others (verbatim from the reference's `runPass`). No-op when the
|
|
193
|
+
* pass isn't wired; a thrown pass is logged via the LogSink, not rethrown.
|
|
194
|
+
*/
|
|
195
|
+
async runResourcePass(pass, label) {
|
|
196
|
+
if (!pass)
|
|
197
|
+
return;
|
|
198
|
+
try {
|
|
199
|
+
const snap = await pass();
|
|
200
|
+
if (snap)
|
|
201
|
+
this.mergeSnapshot(snap);
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
this.log.emit('warn', label, { error: err.message });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Public predicate the orchestrator's dispatch loop calls before claiming an
|
|
209
|
+
* issue. True iff every resource the dispatch flow depends on is ready. The
|
|
210
|
+
* per-issue bake was the only dispatch-gating prerequisite; with the agent
|
|
211
|
+
* image built ahead of time (not per issue) there is nothing left to gate on,
|
|
212
|
+
* so dispatch is always ready (verbatim from the reference).
|
|
213
|
+
*/
|
|
214
|
+
dispatchReady() {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
/** Aggregate the latest per-resource snapshots for the dashboard. */
|
|
218
|
+
snapshot() {
|
|
219
|
+
return { resources: this.lastSnapshots.slice() };
|
|
220
|
+
}
|
|
221
|
+
/** Replace (by resource id) the cached snapshot a pass just produced. */
|
|
222
|
+
mergeSnapshot(snap) {
|
|
223
|
+
const next = this.lastSnapshots.filter((s) => s.id !== snap.id);
|
|
224
|
+
next.push(snap);
|
|
225
|
+
this.lastSnapshots = next;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=reconciler-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciler-loop.js","sourceRoot":"","sources":["../../../src/shell/reconciler-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
// FCIS rewrite — imperative shell: the per-attempt autonomous TURN LOOP.
|
|
2
|
+
//
|
|
3
|
+
// Split out of runner-loop.ts (file-size budget). The shell drives one runPrompt
|
|
4
|
+
// per iteration and folds three signals via the injected core deciders. Only
|
|
5
|
+
// autonomous turns count against max_turns; steering-reply turns are free
|
|
6
|
+
// (human-in-the-loop). Imports src/types ONLY — core is reached via the injected
|
|
7
|
+
// RunnerLoopDeps.core (the composition root binds the real pure-core fns).
|
|
8
|
+
const STEERING_PREVIEW_LIMIT = 240;
|
|
9
|
+
/**
|
|
10
|
+
* Cap on host-side credential refresh + re-prompt cycles within one attempt (issue 214).
|
|
11
|
+
* A single refresh should hand the session a fresh token; the cap bounds a pathological
|
|
12
|
+
* loop where every re-prompt still 401s (e.g. a refresh that reports success but the
|
|
13
|
+
* upstream keeps rejecting) before falling back to ending the attempt.
|
|
14
|
+
*/
|
|
15
|
+
const MAX_AUTH_RECOVERY_ATTEMPTS = 3;
|
|
16
|
+
export async function runTurnLoop(deps, args) {
|
|
17
|
+
const s = {
|
|
18
|
+
turnsCompleted: 0,
|
|
19
|
+
autonomousTurns: 0,
|
|
20
|
+
lastReason: 'unknown',
|
|
21
|
+
agentFailure: null,
|
|
22
|
+
currentIssue: args.issue,
|
|
23
|
+
pendingSteering: null,
|
|
24
|
+
firstTurn: true,
|
|
25
|
+
authRecoveryAttempts: 0,
|
|
26
|
+
};
|
|
27
|
+
for (;;) {
|
|
28
|
+
if (args.cancelSignal.cancelled) {
|
|
29
|
+
s.lastReason = 'cancelled_by_reconciliation';
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
const step = await runTurn(deps, args, s);
|
|
33
|
+
if (step.kind === 'mid_failure') {
|
|
34
|
+
return { kind: 'mid_failure', publicReason: step.publicReason, cleanupReason: step.cleanupReason, turnsCompleted: s.turnsCompleted };
|
|
35
|
+
}
|
|
36
|
+
if (step.kind === 'break')
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
return { kind: 'done', lastReason: s.lastReason, agentFailure: s.agentFailure, turnsCompleted: s.turnsCompleted };
|
|
40
|
+
}
|
|
41
|
+
/** Run one prompt → classify → post-turn routing. Mutates `s`; returns the loop verdict. */
|
|
42
|
+
async function runTurn(deps, args, s) {
|
|
43
|
+
let promptText;
|
|
44
|
+
try {
|
|
45
|
+
promptText = composeTurnPrompt(deps, args, s);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
args.log.emit('error', 'prompt rendering failed', { error: err.message });
|
|
49
|
+
return { kind: 'mid_failure', publicReason: 'prompt error', cleanupReason: 'prompt_error' };
|
|
50
|
+
}
|
|
51
|
+
const isSteeringReply = s.pendingSteering !== null;
|
|
52
|
+
s.pendingSteering = null;
|
|
53
|
+
s.firstTurn = false;
|
|
54
|
+
// Run the prompt with IN-SESSION RECOVERY. Two recoverable classes never discard the
|
|
55
|
+
// whole VM attempt: a TRANSIENT failure (529 / overload / rate-limit / transport blip,
|
|
56
|
+
// issue 213) re-prompts the SAME session after a backoff, and an auth/401 failure
|
|
57
|
+
// (issue 214) refreshes the host token + fans it out, then re-prompts the SAME prompt
|
|
58
|
+
// on the SAME live session. end_turn = success; transitioned overrides any failure.
|
|
59
|
+
const cls = await runPromptWithRecovery(deps, args, s, promptText);
|
|
60
|
+
const verdict = routeResolvedTurn(cls, s);
|
|
61
|
+
if (verdict)
|
|
62
|
+
return verdict;
|
|
63
|
+
// Only a genuine `success` reaches here — count the turn (the recovery re-prompts that
|
|
64
|
+
// got us here did NOT, so max_turns is untouched) and decide whether to keep looping.
|
|
65
|
+
s.turnsCompleted++;
|
|
66
|
+
if (!isSteeringReply)
|
|
67
|
+
s.autonomousTurns++;
|
|
68
|
+
return await postTurn(deps, args, s);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Map a resolved turn class to a loop verdict, or null to keep going (a clean
|
|
72
|
+
* `success`). A `cancelled` (reconcile landed mid-backoff) is a clean break — NOT a
|
|
73
|
+
* failure — matching the top-of-loop cancel path so the attempt isn't re-dispatched.
|
|
74
|
+
*/
|
|
75
|
+
function routeResolvedTurn(cls, s) {
|
|
76
|
+
if (cls.kind === 'cancelled') {
|
|
77
|
+
s.lastReason = 'cancelled_by_reconciliation';
|
|
78
|
+
return { kind: 'break' };
|
|
79
|
+
}
|
|
80
|
+
if (cls.kind === 'agent_failure') {
|
|
81
|
+
s.agentFailure = cls.agentFailure;
|
|
82
|
+
s.lastReason = cls.reason;
|
|
83
|
+
return { kind: 'break' };
|
|
84
|
+
}
|
|
85
|
+
if (cls.kind === 'agent_transitioned') {
|
|
86
|
+
s.lastReason = 'agent_transitioned';
|
|
87
|
+
return { kind: 'break' };
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Drive one prompt over the live ACP session, recovering IN-SESSION from BOTH recoverable
|
|
93
|
+
* failure classes WITHOUT discarding the VM attempt and WITHOUT counting against
|
|
94
|
+
* `max_turns` (the recovery re-prompts are free):
|
|
95
|
+
*
|
|
96
|
+
* - `auth_recoverable` (issue 214): a credential/401 failure. Refresh the host token +
|
|
97
|
+
* fan it out into the live VM's SecretManager (`deps.refreshCredential`), then
|
|
98
|
+
* re-prompt the SAME prompt on the SAME session immediately (the fresh token is ready —
|
|
99
|
+
* no backoff). Bounded across the attempt by `s.authRecoveryAttempts`; a refresh that
|
|
100
|
+
* itself FAILS (revoked/expired refresh token) or a spent budget degrades to
|
|
101
|
+
* `agent_failure` so the caller ends the attempt (today's behaviour, now the fallback).
|
|
102
|
+
* - `recoverable_failure` (issue 213): a TRANSIENT failure (529 / overload / rate-limit /
|
|
103
|
+
* transport blip). Re-prompt the SAME session after a bounded, increasing backoff — but
|
|
104
|
+
* only while the host↔guest ACP link is still alive AND the per-turn budget holds. Once
|
|
105
|
+
* spent or the session has died it downgrades to `agent_failure` (the breaker still
|
|
106
|
+
* treats the transient reason as transient, per issue 135).
|
|
107
|
+
*
|
|
108
|
+
* A reconcile cancel landing mid-recovery surfaces as `cancelled` (a clean break).
|
|
109
|
+
*/
|
|
110
|
+
async function runPromptWithRecovery(deps, args, s, promptText) {
|
|
111
|
+
let recoveryAttempts = 0; // transient (issue 213) budget — per-turn, local to this call
|
|
112
|
+
for (;;) {
|
|
113
|
+
const outcome = await deps.acp.runPrompt(args.sessionId, promptText);
|
|
114
|
+
const cls = deps.core.classifyTurnOutcome({ outcome, transitioned: args.runningEntry?.transitioned === true });
|
|
115
|
+
if (cls.kind === 'auth_recoverable') {
|
|
116
|
+
const turn = await recoverAuth(deps, args, s, cls);
|
|
117
|
+
if (turn)
|
|
118
|
+
return turn;
|
|
119
|
+
continue; // refreshed → re-prompt immediately on the fresh token
|
|
120
|
+
}
|
|
121
|
+
if (cls.kind === 'recoverable_failure') {
|
|
122
|
+
const step = await recoverTransient(deps, args, recoveryAttempts, cls);
|
|
123
|
+
if (step.turn)
|
|
124
|
+
return step.turn;
|
|
125
|
+
recoveryAttempts = step.recoveryAttempts;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
return cls; // success | agent_transitioned | agent_failure
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* One auth/401 in-session recovery step (issue 214): refresh the host token + fan it out
|
|
133
|
+
* into the live VM's SecretManager, then signal a re-prompt by returning `null`. Returns a
|
|
134
|
+
* terminal ResolvedTurn when recovery is impossible — a reconcile cancel landed mid-recovery
|
|
135
|
+
* (`cancelled`), the per-attempt budget is spent, or the refresh ITSELF failed (a revoked /
|
|
136
|
+
* expired refresh token needing operator re-login → `agent_failure`, today's fallback).
|
|
137
|
+
*/
|
|
138
|
+
async function recoverAuth(deps, args, s, cls) {
|
|
139
|
+
if (args.cancelSignal.cancelled)
|
|
140
|
+
return { kind: 'cancelled' };
|
|
141
|
+
if (s.authRecoveryAttempts >= MAX_AUTH_RECOVERY_ATTEMPTS) {
|
|
142
|
+
args.log.emit('warn', 'in-session 401 recovery budget exhausted; ending attempt', {
|
|
143
|
+
adapter: args.adapterId,
|
|
144
|
+
attempts: s.authRecoveryAttempts,
|
|
145
|
+
});
|
|
146
|
+
return { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason };
|
|
147
|
+
}
|
|
148
|
+
s.authRecoveryAttempts++;
|
|
149
|
+
deps.runlog.system(args.issue.id, 'credential_refresh_attempt', {
|
|
150
|
+
adapter: args.adapterId,
|
|
151
|
+
attempt: s.authRecoveryAttempts,
|
|
152
|
+
reason: cls.reason,
|
|
153
|
+
});
|
|
154
|
+
const refreshed = await deps.refreshCredential(args.adapterId).catch(() => false);
|
|
155
|
+
if (!refreshed) {
|
|
156
|
+
args.log.emit('warn', 'credential refresh failed during in-session 401 recovery; ending attempt', {
|
|
157
|
+
adapter: args.adapterId,
|
|
158
|
+
});
|
|
159
|
+
return { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason };
|
|
160
|
+
}
|
|
161
|
+
deps.runlog.system(args.issue.id, 'credential_refreshed_reprompt', { adapter: args.adapterId });
|
|
162
|
+
return null; // refreshed → re-prompt on the fresh token
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* One transient in-session recovery step (issue 213): while the per-turn budget holds AND
|
|
166
|
+
* the ACP session is alive, back off then signal a re-prompt with the bumped attempt count
|
|
167
|
+
* (`turn: null`). Otherwise return a terminal ResolvedTurn — `agent_failure` when the budget
|
|
168
|
+
* is spent / the session died, or `cancelled` when a reconcile lands during the backoff.
|
|
169
|
+
*/
|
|
170
|
+
async function recoverTransient(deps, args, recoveryAttempts, cls) {
|
|
171
|
+
const decision = deps.core.decideRecovery({ recoveryAttempts });
|
|
172
|
+
const sessionAlive = deps.acp.sessionAlive(args.sessionId);
|
|
173
|
+
if (decision.kind === 'give_up' || !sessionAlive) {
|
|
174
|
+
logRecoveryGaveUp(deps, args, cls.reason, recoveryAttempts, decision.kind === 'give_up' ? 'budget_exhausted' : 'acp_session_dead');
|
|
175
|
+
return { turn: { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason }, recoveryAttempts };
|
|
176
|
+
}
|
|
177
|
+
const next = recoveryAttempts + 1;
|
|
178
|
+
logRecoveryReprompt(deps, args, cls.reason, next, decision.backoffMs);
|
|
179
|
+
await sleep(decision.backoffMs);
|
|
180
|
+
if (args.cancelSignal.cancelled)
|
|
181
|
+
return { turn: { kind: 'cancelled' }, recoveryAttempts: next };
|
|
182
|
+
return { turn: null, recoveryAttempts: next };
|
|
183
|
+
}
|
|
184
|
+
/** Honest run log: a recovery re-prompt is logged DISTINCTLY from a real failure (issue 213). */
|
|
185
|
+
function logRecoveryReprompt(deps, args, reason, attempt, backoffMs) {
|
|
186
|
+
args.log.emit('info', 'in-session recovery re-prompt', { reason, attempt, backoff_ms: backoffMs });
|
|
187
|
+
deps.runlog.system(args.issue.id, 'in_session_recovery', { reason, attempt, backoff_ms: backoffMs });
|
|
188
|
+
}
|
|
189
|
+
/** Recovery abandoned (budget spent or the ACP session died) → fall back to ending the attempt. */
|
|
190
|
+
function logRecoveryGaveUp(deps, args, reason, attempts, cause) {
|
|
191
|
+
args.log.emit('warn', 'in-session recovery abandoned; ending attempt', { reason, attempts, cause });
|
|
192
|
+
deps.runlog.system(args.issue.id, 'in_session_recovery_abandoned', { reason, attempts, cause });
|
|
193
|
+
}
|
|
194
|
+
/** Post-turn routing: tool-driven exit > steering pause > tracker refresh + continue. */
|
|
195
|
+
async function postTurn(deps, args, s) {
|
|
196
|
+
if (args.runningEntry?.transitioned) {
|
|
197
|
+
s.lastReason = 'agent_transitioned';
|
|
198
|
+
return { kind: 'break' };
|
|
199
|
+
}
|
|
200
|
+
if (args.runningEntry && args.runningEntry.steering_question !== null) {
|
|
201
|
+
const steer = await handleSteering(deps, args, s);
|
|
202
|
+
if (steer === 'cancelled') {
|
|
203
|
+
s.lastReason = 'cancelled_while_awaiting_steering';
|
|
204
|
+
return { kind: 'break' };
|
|
205
|
+
}
|
|
206
|
+
return { kind: 'continue' }; // steering reply ready; render it next iteration
|
|
207
|
+
}
|
|
208
|
+
return await refreshAndContinue(deps, args, s);
|
|
209
|
+
}
|
|
210
|
+
/** Refresh the issue state from the tracker, then let core decide continuation. */
|
|
211
|
+
async function refreshAndContinue(deps, args, s) {
|
|
212
|
+
let refreshed;
|
|
213
|
+
try {
|
|
214
|
+
// ONE tracker read → the pure core selects this issue's current state
|
|
215
|
+
// (core/issue/parse.ts:selectIssuesByIds, injected via deps.core).
|
|
216
|
+
const { raw } = await deps.tracker.loadAllIssues();
|
|
217
|
+
refreshed = deps.core.selectIssuesByIds(raw, [args.issue.id]);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
args.log.emit('error', 'issue state refresh failed', { error: err.message });
|
|
221
|
+
return { kind: 'mid_failure', publicReason: 'issue state refresh error', cleanupReason: 'issue_state_refresh_failed' };
|
|
222
|
+
}
|
|
223
|
+
const found = refreshed[0] ?? null;
|
|
224
|
+
const cont = deps.core.decideTurnContinuation({
|
|
225
|
+
refreshedIssue: found,
|
|
226
|
+
activeStates: args.activeStates,
|
|
227
|
+
autonomousTurns: s.autonomousTurns,
|
|
228
|
+
maxTurns: args.resolved.maxTurns,
|
|
229
|
+
});
|
|
230
|
+
if (cont.kind === 'break') {
|
|
231
|
+
if (found)
|
|
232
|
+
s.currentIssue = found;
|
|
233
|
+
s.lastReason = cont.reason;
|
|
234
|
+
return { kind: 'break' };
|
|
235
|
+
}
|
|
236
|
+
s.currentIssue = found;
|
|
237
|
+
await sleep(25); // small yield between autonomous turns (reference `delay(25)`)
|
|
238
|
+
return { kind: 'continue' };
|
|
239
|
+
}
|
|
240
|
+
/** Render the next turn's prompt via the core prompt-kind selector. */
|
|
241
|
+
function composeTurnPrompt(deps, args, s) {
|
|
242
|
+
const kind = deps.core.selectPromptKind({ pendingSteering: s.pendingSteering !== null, firstTurn: s.firstTurn });
|
|
243
|
+
if (kind === 'steering') {
|
|
244
|
+
const ps = s.pendingSteering;
|
|
245
|
+
return deps.core.renderSteeringPrompt({ question: ps.question, context: ps.context, reply: ps.reply });
|
|
246
|
+
}
|
|
247
|
+
if (kind === 'initial') {
|
|
248
|
+
// Per-state prompt split: render this state's own assembled template (its
|
|
249
|
+
// `prompt_file` wrapped in the shared preamble/footer). A state with no
|
|
250
|
+
// template resolves to '' → the pure renderer's FALLBACK_PROMPT. The pure
|
|
251
|
+
// renderer's contract is unchanged — it still gets one template string.
|
|
252
|
+
const template = deps.workflow.prompt_templates?.[s.currentIssue.state] ?? '';
|
|
253
|
+
return deps.core.renderInitialPrompt({ template, issue: s.currentIssue, attempt: args.attempt });
|
|
254
|
+
}
|
|
255
|
+
return deps.core.continuationPrompt(deps.cfg.mcp.enabled);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Park the autonomous loop on a pending steering request. The wait does NOT
|
|
259
|
+
* count against max_turns. Returns 'cancelled' when the dispatch was torn down
|
|
260
|
+
* while awaiting, otherwise stashes the reply on `s.pendingSteering`. The two
|
|
261
|
+
* steering RuntimeEvents the reference surfaced via events.onRuntimeEvent are
|
|
262
|
+
* recorded into the run log here (the live recent-events ring is fed via
|
|
263
|
+
* AcpPort.onEvent at session open); previews stay bounded.
|
|
264
|
+
*/
|
|
265
|
+
async function handleSteering(deps, args, s) {
|
|
266
|
+
const entry = args.runningEntry;
|
|
267
|
+
const question = entry.steering_question ?? '';
|
|
268
|
+
const context = entry.steering_context;
|
|
269
|
+
// Flip the dashboard reply-box flag, coupled to awaiter-liveness (issue 151):
|
|
270
|
+
// set true only once parked here, cleared on resolve/cancel below.
|
|
271
|
+
entry.steering_requested = true;
|
|
272
|
+
deps.runlog.system(args.issue.id, 'awaiting_human_steering', { message: preview(question) });
|
|
273
|
+
let reply;
|
|
274
|
+
try {
|
|
275
|
+
reply = await deps.steering.await(entry.identifier);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// Awaiter rejected/cancelled on deactivate.
|
|
279
|
+
reply = null;
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
entry.steering_requested = false;
|
|
283
|
+
}
|
|
284
|
+
if (reply === null)
|
|
285
|
+
return 'cancelled';
|
|
286
|
+
// Clear the request payload so the next post-turn check sees no question.
|
|
287
|
+
entry.steering_question = null;
|
|
288
|
+
entry.steering_context = null;
|
|
289
|
+
deps.runlog.system(args.issue.id, 'human_steering_received', { message: preview(reply) });
|
|
290
|
+
s.pendingSteering = { question, context, reply };
|
|
291
|
+
return 'received';
|
|
292
|
+
}
|
|
293
|
+
/** Bound a steering preview string (the reference's truncated event message). */
|
|
294
|
+
function preview(text) {
|
|
295
|
+
return text.length > STEERING_PREVIEW_LIMIT ? text.slice(0, STEERING_PREVIEW_LIMIT) + '…' : text;
|
|
296
|
+
}
|
|
297
|
+
/** Local async sleep (the loop's inter-turn yield; the shell may use real timers). */
|
|
298
|
+
function sleep(ms) {
|
|
299
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=runner-loop-turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-loop-turn.js","sourceRoot":"","sources":["../../../src/shell/runner-loop-turn.ts"],"names":[],"mappings":"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"}
|