smol-symphony 0.3.0 → 0.3.2
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/dist/bin/symphony.js.map +1 -0
- package/dist/core/actions/context.js.map +1 -0
- package/dist/core/actions/parse.js.map +1 -0
- package/dist/core/actions/plan.js.map +1 -0
- package/dist/core/actions/predicates.js.map +1 -0
- package/dist/core/actions/run-fold.js.map +1 -0
- package/dist/core/actions/template.js.map +1 -0
- package/dist/core/cli/args.js.map +1 -0
- package/dist/core/coerce.js.map +1 -0
- package/dist/core/credential/account-id.js.map +1 -0
- package/dist/core/credential/adapter-config.js.map +1 -0
- package/dist/core/credential/availability.js.map +1 -0
- package/dist/core/credential/extract.js.map +1 -0
- package/dist/core/credential/fake-creds.js.map +1 -0
- package/dist/core/credential/identity.js.map +1 -0
- package/dist/core/credential/shape.js.map +1 -0
- package/dist/core/credential/strings.js.map +1 -0
- package/dist/core/doctor/checks.js.map +1 -0
- package/dist/core/git/result.js.map +1 -0
- package/dist/core/http/decisions.js.map +1 -0
- package/dist/core/http/render.js.map +1 -0
- package/dist/core/http/routes.js.map +1 -0
- package/dist/core/http/views.js.map +1 -0
- package/dist/core/image/managed-image.js.map +1 -0
- package/dist/core/issue/file.js.map +1 -0
- package/dist/core/issue/parse.js.map +1 -0
- package/dist/core/mcp/dispatch.js.map +1 -0
- package/dist/core/mcp/post-move.js.map +1 -0
- package/dist/core/mcp/protocol.js.map +1 -0
- package/dist/core/mcp/url.js.map +1 -0
- package/dist/core/path.js.map +1 -0
- package/dist/core/reconcile/image-decide.js.map +1 -0
- package/dist/core/reconcile/ledger.js.map +1 -0
- package/dist/core/reconcile/pr-classify.js.map +1 -0
- package/dist/core/reconcile/pr-decide.js.map +1 -0
- package/dist/core/reconcile/pr-loop.js.map +1 -0
- package/dist/core/reconcile/pr-notes.js.map +1 -0
- package/dist/core/reconcile/vm-decide.js.map +1 -0
- package/dist/core/reconcile/vm-reap.js.map +1 -0
- package/dist/core/reconcile/workspace-decide.js.map +1 -0
- package/dist/core/runlog/summary.js.map +1 -0
- package/dist/core/runner/dispatch-config.js.map +1 -0
- package/dist/core/runner/injection.js.map +1 -0
- package/dist/core/runner/mise.js.map +1 -0
- package/dist/core/runner/prompt.js.map +1 -0
- package/dist/core/runner/turn.js.map +1 -0
- package/dist/core/runner/vm-plan.js.map +1 -0
- package/dist/core/schedule/admission.js.map +1 -0
- package/dist/core/schedule/circuit-breaker.js.map +1 -0
- package/dist/core/schedule/eligibility.js.map +1 -0
- package/dist/core/schedule/reconcile-issue.js.map +1 -0
- package/dist/core/schedule/retry.js.map +1 -0
- package/dist/core/schedule/sleep-cycle.js.map +1 -0
- package/dist/core/schedule/slots.js.map +1 -0
- package/dist/core/schedule/tick.js.map +1 -0
- package/dist/core/schedule/token-fold.js.map +1 -0
- package/dist/core/state-resolve.js.map +1 -0
- package/dist/core/vm-guards.js.map +1 -0
- package/dist/core/workflow/derive.js.map +1 -0
- package/dist/core/workflow/parse.js.map +1 -0
- package/dist/core/workflow/prompt-probe.js.map +1 -0
- package/dist/core/workflow/validate.js.map +1 -0
- package/dist/core/workspace-key.js.map +1 -0
- package/dist/shell/actions-runner.js.map +1 -0
- package/dist/shell/adapter/adapter-registry.js.map +1 -0
- package/dist/shell/adapter/clock-random.js.map +1 -0
- package/dist/shell/adapter/gondolin-dispatch-helpers.js.map +1 -0
- package/dist/shell/adapter/gondolin-dispatch.js.map +1 -0
- package/dist/shell/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/shell/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/shell/adapter/launcher-asset.js.map +1 -0
- package/dist/shell/adapter/mise-config-asset.js.map +1 -0
- package/dist/shell/adapter/workflow-loader.js.map +1 -0
- package/dist/shell/cli/doctor.js.map +1 -0
- package/dist/shell/effect-interpreter-families.js.map +1 -0
- package/dist/shell/effect-interpreter.js.map +1 -0
- package/dist/shell/interp/acp-frame.js.map +1 -0
- package/dist/shell/interp/acp-ws-conn.js.map +1 -0
- package/dist/shell/interp/acp-ws-frames.js.map +1 -0
- package/dist/shell/interp/acp-ws.js.map +1 -0
- package/dist/shell/interp/acp.js.map +1 -0
- package/dist/shell/interp/credential-defaults.js.map +1 -0
- package/dist/shell/interp/credential-hooks.js.map +1 -0
- package/dist/shell/interp/credential-registry.js.map +1 -0
- package/dist/shell/interp/credential.js.map +1 -0
- package/dist/shell/interp/gh.js.map +1 -0
- package/dist/shell/interp/git.js.map +1 -0
- package/dist/shell/interp/log.js.map +1 -0
- package/dist/shell/interp/process.js.map +1 -0
- package/dist/shell/interp/runlog.js.map +1 -0
- package/dist/shell/interp/timer.js.map +1 -0
- package/dist/shell/interp/tracker-disk.js.map +1 -0
- package/dist/shell/interp/tracker-parse.js.map +1 -0
- package/dist/shell/interp/tracker-scan.js.map +1 -0
- package/dist/shell/interp/tracker-write.js.map +1 -0
- package/dist/shell/interp/tracker.js.map +1 -0
- package/dist/shell/interp/tty.js.map +1 -0
- package/dist/shell/interp/vm.js.map +1 -0
- package/dist/shell/interp/workspace.js.map +1 -0
- package/dist/shell/main-acp.js.map +1 -0
- package/dist/shell/main-adapters.js.map +1 -0
- package/dist/shell/main-credential.js.map +1 -0
- package/dist/shell/main-doctor.js.map +1 -0
- package/dist/shell/main-entry.js.map +1 -0
- package/dist/shell/main-http-csrf.js.map +1 -0
- package/dist/shell/main-http-handler.js.map +1 -0
- package/dist/shell/main-http-mcp.js.map +1 -0
- package/dist/shell/main-http-views.js.map +1 -0
- package/dist/shell/main-http.js.map +1 -0
- package/dist/shell/main-loops.js.map +1 -0
- package/dist/shell/main-mcp.js.map +1 -0
- package/dist/shell/main-orchestrator.js.map +1 -0
- package/dist/shell/main-preflight.js.map +1 -0
- package/dist/shell/main-reconcilers-helpers.js.map +1 -0
- package/dist/shell/main-reconcilers-pr.js.map +1 -0
- package/dist/shell/main-reconcilers.js.map +1 -0
- package/dist/shell/main-runner.js.map +1 -0
- package/dist/shell/main-scaffold.js.map +1 -0
- package/dist/shell/main-shutdown.js.map +1 -0
- package/dist/shell/main-startup.js.map +1 -0
- package/dist/shell/main-substrates.js.map +1 -0
- package/dist/shell/main.js.map +1 -0
- package/dist/shell/orchestrator-feedback.js.map +1 -0
- package/dist/shell/orchestrator-image.js.map +1 -0
- package/dist/shell/orchestrator-loop.js.map +1 -0
- package/dist/shell/orchestrator-reconcile.js.map +1 -0
- package/dist/shell/reconciler-loop.js.map +1 -0
- package/dist/shell/runner-loop-turn.js.map +1 -0
- package/dist/shell/runner-loop.js.map +1 -0
- package/dist/shell/server/http.js.map +1 -0
- package/dist/shell/server/mcp-runtime-effects.js.map +1 -0
- package/dist/shell/server/mcp-runtime.js.map +1 -0
- package/dist/shell/workspace-key.js.map +1 -0
- package/dist/types/acp.js.map +1 -0
- package/dist/types/actions/plan.js.map +1 -0
- package/dist/types/actions/predicates.js.map +1 -0
- package/dist/types/actions/run-fold.js.map +1 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/adapter/clock-random.js.map +1 -0
- package/dist/types/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/types/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/types/adapter/workflow-loader.js.map +1 -0
- package/dist/types/cli/args.js.map +1 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/credential-interp.js.map +1 -0
- package/dist/types/credentials.js.map +1 -0
- package/dist/types/doctor.js.map +1 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/effect.js.map +1 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/http/decisions.js.map +1 -0
- package/dist/types/http/render.js.map +1 -0
- package/dist/types/http/views.js.map +1 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/image/managed-image.js.map +1 -0
- package/dist/types/interp/effect-interpreter.js.map +1 -0
- package/dist/types/interp/tracker.js.map +1 -0
- package/dist/types/issue/file.js.map +1 -0
- package/dist/types/issue/parse.js.map +1 -0
- package/dist/types/main-acp.js.map +1 -0
- package/dist/types/main-adapters.js.map +1 -0
- package/dist/types/main-credential.js.map +1 -0
- package/dist/types/main-doctor.js.map +1 -0
- package/dist/types/main-http-handler.js.map +1 -0
- package/dist/types/main-http.js.map +1 -0
- package/dist/types/main-loops.js.map +1 -0
- package/dist/types/main-mcp.js.map +1 -0
- package/dist/types/main-orchestrator.js.map +1 -0
- package/dist/types/main-reconcilers.js.map +1 -0
- package/dist/types/main-runner.js.map +1 -0
- package/dist/types/main-startup.js.map +1 -0
- package/dist/types/main-substrates.js.map +1 -0
- package/dist/types/mcp/dispatch.js.map +1 -0
- package/dist/types/mcp/post-move.js.map +1 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/ports.js.map +1 -0
- package/dist/types/reconcile/image-decide.js.map +1 -0
- package/dist/types/reconcile/ledger.js.map +1 -0
- package/dist/types/reconcile/pr-loop.js.map +1 -0
- package/dist/types/reconcile/vm-reap.js.map +1 -0
- package/dist/types/reconcile/workspace-decide.js.map +1 -0
- package/dist/types/reconcile.js.map +1 -0
- package/dist/types/runlog.js.map +1 -0
- package/dist/types/runner/actions-runner.js.map +1 -0
- package/dist/types/runner/gondolin-dispatch.js.map +1 -0
- package/dist/types/runner/injection.js.map +1 -0
- package/dist/types/runner/runner-loop.js.map +1 -0
- package/dist/types/runner/turn.js.map +1 -0
- package/dist/types/runner/vm-plan.js.map +1 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/schedule/admission.js.map +1 -0
- package/dist/types/schedule/circuit-breaker.js.map +1 -0
- package/dist/types/schedule/eligibility.js.map +1 -0
- package/dist/types/schedule/orchestrator-loop.js.map +1 -0
- package/dist/types/schedule/sleep-cycle.js.map +1 -0
- package/dist/types/schedule/slots.js.map +1 -0
- package/dist/types/schedule/tick.js.map +1 -0
- package/dist/types/server/mcp-runtime.js.map +1 -0
- package/dist/types/workflow/parse.js.map +1 -0
- package/package.json +3 -3
- package/scripts/postinstall.mjs +24 -1
- package/dist/src/bin/symphony.js.map +0 -1
- package/dist/src/core/actions/context.js.map +0 -1
- package/dist/src/core/actions/parse.js.map +0 -1
- package/dist/src/core/actions/plan.js.map +0 -1
- package/dist/src/core/actions/predicates.js.map +0 -1
- package/dist/src/core/actions/run-fold.js.map +0 -1
- package/dist/src/core/actions/template.js.map +0 -1
- package/dist/src/core/cli/args.js.map +0 -1
- package/dist/src/core/coerce.js.map +0 -1
- package/dist/src/core/credential/account-id.js.map +0 -1
- package/dist/src/core/credential/adapter-config.js.map +0 -1
- package/dist/src/core/credential/availability.js.map +0 -1
- package/dist/src/core/credential/extract.js.map +0 -1
- package/dist/src/core/credential/fake-creds.js.map +0 -1
- package/dist/src/core/credential/identity.js.map +0 -1
- package/dist/src/core/credential/shape.js.map +0 -1
- package/dist/src/core/credential/strings.js.map +0 -1
- package/dist/src/core/doctor/checks.js.map +0 -1
- package/dist/src/core/git/result.js.map +0 -1
- package/dist/src/core/http/decisions.js.map +0 -1
- package/dist/src/core/http/render.js.map +0 -1
- package/dist/src/core/http/routes.js.map +0 -1
- package/dist/src/core/http/views.js.map +0 -1
- package/dist/src/core/image/managed-image.js.map +0 -1
- package/dist/src/core/issue/file.js.map +0 -1
- package/dist/src/core/issue/parse.js.map +0 -1
- package/dist/src/core/mcp/dispatch.js.map +0 -1
- package/dist/src/core/mcp/post-move.js.map +0 -1
- package/dist/src/core/mcp/protocol.js.map +0 -1
- package/dist/src/core/mcp/url.js.map +0 -1
- package/dist/src/core/path.js.map +0 -1
- package/dist/src/core/reconcile/image-decide.js.map +0 -1
- package/dist/src/core/reconcile/ledger.js.map +0 -1
- package/dist/src/core/reconcile/pr-classify.js.map +0 -1
- package/dist/src/core/reconcile/pr-decide.js.map +0 -1
- package/dist/src/core/reconcile/pr-loop.js.map +0 -1
- package/dist/src/core/reconcile/pr-notes.js.map +0 -1
- package/dist/src/core/reconcile/vm-decide.js.map +0 -1
- package/dist/src/core/reconcile/vm-reap.js.map +0 -1
- package/dist/src/core/reconcile/workspace-decide.js.map +0 -1
- package/dist/src/core/runlog/summary.js.map +0 -1
- package/dist/src/core/runner/dispatch-config.js.map +0 -1
- package/dist/src/core/runner/injection.js.map +0 -1
- package/dist/src/core/runner/mise.js.map +0 -1
- package/dist/src/core/runner/prompt.js.map +0 -1
- package/dist/src/core/runner/turn.js.map +0 -1
- package/dist/src/core/runner/vm-plan.js.map +0 -1
- package/dist/src/core/schedule/admission.js.map +0 -1
- package/dist/src/core/schedule/circuit-breaker.js.map +0 -1
- package/dist/src/core/schedule/eligibility.js.map +0 -1
- package/dist/src/core/schedule/reconcile-issue.js.map +0 -1
- package/dist/src/core/schedule/retry.js.map +0 -1
- package/dist/src/core/schedule/sleep-cycle.js.map +0 -1
- package/dist/src/core/schedule/slots.js.map +0 -1
- package/dist/src/core/schedule/tick.js.map +0 -1
- package/dist/src/core/schedule/token-fold.js.map +0 -1
- package/dist/src/core/state-resolve.js.map +0 -1
- package/dist/src/core/vm-guards.js.map +0 -1
- package/dist/src/core/workflow/derive.js.map +0 -1
- package/dist/src/core/workflow/parse.js.map +0 -1
- package/dist/src/core/workflow/prompt-probe.js.map +0 -1
- package/dist/src/core/workflow/validate.js.map +0 -1
- package/dist/src/core/workspace-key.js.map +0 -1
- package/dist/src/shell/actions-runner.js.map +0 -1
- package/dist/src/shell/adapter/adapter-registry.js.map +0 -1
- package/dist/src/shell/adapter/clock-random.js.map +0 -1
- package/dist/src/shell/adapter/gondolin-dispatch-helpers.js.map +0 -1
- package/dist/src/shell/adapter/gondolin-dispatch.js.map +0 -1
- package/dist/src/shell/adapter/gondolin-image-converter.js.map +0 -1
- package/dist/src/shell/adapter/gondolin-image-fetch.js.map +0 -1
- package/dist/src/shell/adapter/launcher-asset.js.map +0 -1
- package/dist/src/shell/adapter/mise-config-asset.js.map +0 -1
- package/dist/src/shell/adapter/workflow-loader.js.map +0 -1
- package/dist/src/shell/cli/doctor.js.map +0 -1
- package/dist/src/shell/effect-interpreter-families.js.map +0 -1
- package/dist/src/shell/effect-interpreter.js.map +0 -1
- package/dist/src/shell/interp/acp-frame.js.map +0 -1
- package/dist/src/shell/interp/acp-ws-conn.js.map +0 -1
- package/dist/src/shell/interp/acp-ws-frames.js.map +0 -1
- package/dist/src/shell/interp/acp-ws.js.map +0 -1
- package/dist/src/shell/interp/acp.js.map +0 -1
- package/dist/src/shell/interp/credential-defaults.js.map +0 -1
- package/dist/src/shell/interp/credential-hooks.js.map +0 -1
- package/dist/src/shell/interp/credential-registry.js.map +0 -1
- package/dist/src/shell/interp/credential.js.map +0 -1
- package/dist/src/shell/interp/gh.js.map +0 -1
- package/dist/src/shell/interp/git.js.map +0 -1
- package/dist/src/shell/interp/log.js.map +0 -1
- package/dist/src/shell/interp/process.js.map +0 -1
- package/dist/src/shell/interp/runlog.js.map +0 -1
- package/dist/src/shell/interp/timer.js.map +0 -1
- package/dist/src/shell/interp/tracker-disk.js.map +0 -1
- package/dist/src/shell/interp/tracker-parse.js.map +0 -1
- package/dist/src/shell/interp/tracker-scan.js.map +0 -1
- package/dist/src/shell/interp/tracker-write.js.map +0 -1
- package/dist/src/shell/interp/tracker.js.map +0 -1
- package/dist/src/shell/interp/tty.js.map +0 -1
- package/dist/src/shell/interp/vm.js.map +0 -1
- package/dist/src/shell/interp/workspace.js.map +0 -1
- package/dist/src/shell/main-acp.js.map +0 -1
- package/dist/src/shell/main-adapters.js.map +0 -1
- package/dist/src/shell/main-credential.js.map +0 -1
- package/dist/src/shell/main-doctor.js.map +0 -1
- package/dist/src/shell/main-entry.js.map +0 -1
- package/dist/src/shell/main-http-csrf.js.map +0 -1
- package/dist/src/shell/main-http-handler.js.map +0 -1
- package/dist/src/shell/main-http-mcp.js.map +0 -1
- package/dist/src/shell/main-http-views.js.map +0 -1
- package/dist/src/shell/main-http.js.map +0 -1
- package/dist/src/shell/main-loops.js.map +0 -1
- package/dist/src/shell/main-mcp.js.map +0 -1
- package/dist/src/shell/main-orchestrator.js.map +0 -1
- package/dist/src/shell/main-preflight.js.map +0 -1
- package/dist/src/shell/main-reconcilers-helpers.js.map +0 -1
- package/dist/src/shell/main-reconcilers-pr.js.map +0 -1
- package/dist/src/shell/main-reconcilers.js.map +0 -1
- package/dist/src/shell/main-runner.js.map +0 -1
- package/dist/src/shell/main-scaffold.js.map +0 -1
- package/dist/src/shell/main-shutdown.js.map +0 -1
- package/dist/src/shell/main-startup.js.map +0 -1
- package/dist/src/shell/main-substrates.js.map +0 -1
- package/dist/src/shell/main.js.map +0 -1
- package/dist/src/shell/orchestrator-feedback.js.map +0 -1
- package/dist/src/shell/orchestrator-image.js.map +0 -1
- package/dist/src/shell/orchestrator-loop.js.map +0 -1
- package/dist/src/shell/orchestrator-reconcile.js.map +0 -1
- package/dist/src/shell/reconciler-loop.js.map +0 -1
- package/dist/src/shell/runner-loop-turn.js.map +0 -1
- package/dist/src/shell/runner-loop.js.map +0 -1
- package/dist/src/shell/server/http.js.map +0 -1
- package/dist/src/shell/server/mcp-runtime-effects.js.map +0 -1
- package/dist/src/shell/server/mcp-runtime.js.map +0 -1
- package/dist/src/shell/workspace-key.js.map +0 -1
- package/dist/src/types/acp.js.map +0 -1
- package/dist/src/types/actions/plan.js.map +0 -1
- package/dist/src/types/actions/predicates.js.map +0 -1
- package/dist/src/types/actions/run-fold.js.map +0 -1
- package/dist/src/types/actions.js.map +0 -1
- package/dist/src/types/adapter/clock-random.js.map +0 -1
- package/dist/src/types/adapter/gondolin-image-converter.js.map +0 -1
- package/dist/src/types/adapter/gondolin-image-fetch.js.map +0 -1
- package/dist/src/types/adapter/workflow-loader.js.map +0 -1
- package/dist/src/types/cli/args.js.map +0 -1
- package/dist/src/types/config.js.map +0 -1
- package/dist/src/types/credential-interp.js.map +0 -1
- package/dist/src/types/credentials.js.map +0 -1
- package/dist/src/types/doctor.js.map +0 -1
- package/dist/src/types/domain.js.map +0 -1
- package/dist/src/types/effect.js.map +0 -1
- package/dist/src/types/errors.js.map +0 -1
- package/dist/src/types/http/decisions.js.map +0 -1
- package/dist/src/types/http/render.js.map +0 -1
- package/dist/src/types/http/views.js.map +0 -1
- package/dist/src/types/http.js.map +0 -1
- package/dist/src/types/image/managed-image.js.map +0 -1
- package/dist/src/types/interp/effect-interpreter.js.map +0 -1
- package/dist/src/types/interp/tracker.js.map +0 -1
- package/dist/src/types/issue/file.js.map +0 -1
- package/dist/src/types/issue/parse.js.map +0 -1
- package/dist/src/types/main-acp.js.map +0 -1
- package/dist/src/types/main-adapters.js.map +0 -1
- package/dist/src/types/main-credential.js.map +0 -1
- package/dist/src/types/main-doctor.js.map +0 -1
- package/dist/src/types/main-http-handler.js.map +0 -1
- package/dist/src/types/main-http.js.map +0 -1
- package/dist/src/types/main-loops.js.map +0 -1
- package/dist/src/types/main-mcp.js.map +0 -1
- package/dist/src/types/main-orchestrator.js.map +0 -1
- package/dist/src/types/main-reconcilers.js.map +0 -1
- package/dist/src/types/main-runner.js.map +0 -1
- package/dist/src/types/main-startup.js.map +0 -1
- package/dist/src/types/main-substrates.js.map +0 -1
- package/dist/src/types/mcp/dispatch.js.map +0 -1
- package/dist/src/types/mcp/post-move.js.map +0 -1
- package/dist/src/types/mcp.js.map +0 -1
- package/dist/src/types/ports.js.map +0 -1
- package/dist/src/types/reconcile/image-decide.js.map +0 -1
- package/dist/src/types/reconcile/ledger.js.map +0 -1
- package/dist/src/types/reconcile/pr-loop.js.map +0 -1
- package/dist/src/types/reconcile/vm-reap.js.map +0 -1
- package/dist/src/types/reconcile/workspace-decide.js.map +0 -1
- package/dist/src/types/reconcile.js.map +0 -1
- package/dist/src/types/runlog.js.map +0 -1
- package/dist/src/types/runner/actions-runner.js.map +0 -1
- package/dist/src/types/runner/gondolin-dispatch.js.map +0 -1
- package/dist/src/types/runner/injection.js.map +0 -1
- package/dist/src/types/runner/runner-loop.js.map +0 -1
- package/dist/src/types/runner/turn.js.map +0 -1
- package/dist/src/types/runner/vm-plan.js.map +0 -1
- package/dist/src/types/runtime.js.map +0 -1
- package/dist/src/types/schedule/admission.js.map +0 -1
- package/dist/src/types/schedule/circuit-breaker.js.map +0 -1
- package/dist/src/types/schedule/eligibility.js.map +0 -1
- package/dist/src/types/schedule/orchestrator-loop.js.map +0 -1
- package/dist/src/types/schedule/sleep-cycle.js.map +0 -1
- package/dist/src/types/schedule/slots.js.map +0 -1
- package/dist/src/types/schedule/tick.js.map +0 -1
- package/dist/src/types/server/mcp-runtime.js.map +0 -1
- package/dist/src/types/workflow/parse.js.map +0 -1
- package/dist/tests/core/account-id.test.js +0 -35
- package/dist/tests/core/account-id.test.js.map +0 -1
- package/dist/tests/core/actions-parse.test.js +0 -176
- package/dist/tests/core/actions-parse.test.js.map +0 -1
- package/dist/tests/core/adapter-config.test.js +0 -133
- package/dist/tests/core/adapter-config.test.js.map +0 -1
- package/dist/tests/core/admission.test.js +0 -215
- package/dist/tests/core/admission.test.js.map +0 -1
- package/dist/tests/core/args.test.js +0 -132
- package/dist/tests/core/args.test.js.map +0 -1
- package/dist/tests/core/availability.test.js +0 -62
- package/dist/tests/core/availability.test.js.map +0 -1
- package/dist/tests/core/checks.test.js +0 -395
- package/dist/tests/core/checks.test.js.map +0 -1
- package/dist/tests/core/circuit-breaker.test.js +0 -172
- package/dist/tests/core/circuit-breaker.test.js.map +0 -1
- package/dist/tests/core/coerce.test.js +0 -87
- package/dist/tests/core/coerce.test.js.map +0 -1
- package/dist/tests/core/context.test.js +0 -228
- package/dist/tests/core/context.test.js.map +0 -1
- package/dist/tests/core/decisions.test.js +0 -310
- package/dist/tests/core/decisions.test.js.map +0 -1
- package/dist/tests/core/derive.test.js +0 -205
- package/dist/tests/core/derive.test.js.map +0 -1
- package/dist/tests/core/dispatch-config.test.js +0 -164
- package/dist/tests/core/dispatch-config.test.js.map +0 -1
- package/dist/tests/core/dispatch.test.js +0 -302
- package/dist/tests/core/dispatch.test.js.map +0 -1
- package/dist/tests/core/eligibility.test.js +0 -163
- package/dist/tests/core/eligibility.test.js.map +0 -1
- package/dist/tests/core/extract.test.js +0 -139
- package/dist/tests/core/extract.test.js.map +0 -1
- package/dist/tests/core/fake-creds.test.js +0 -134
- package/dist/tests/core/fake-creds.test.js.map +0 -1
- package/dist/tests/core/file.test.js +0 -197
- package/dist/tests/core/file.test.js.map +0 -1
- package/dist/tests/core/git-result.test.js +0 -113
- package/dist/tests/core/git-result.test.js.map +0 -1
- package/dist/tests/core/identity.test.js +0 -180
- package/dist/tests/core/identity.test.js.map +0 -1
- package/dist/tests/core/image-decide.test.js +0 -59
- package/dist/tests/core/image-decide.test.js.map +0 -1
- package/dist/tests/core/injection.test.js +0 -163
- package/dist/tests/core/injection.test.js.map +0 -1
- package/dist/tests/core/ledger.test.js +0 -218
- package/dist/tests/core/ledger.test.js.map +0 -1
- package/dist/tests/core/managed-image.test.js +0 -68
- package/dist/tests/core/managed-image.test.js.map +0 -1
- package/dist/tests/core/mise.test.js +0 -138
- package/dist/tests/core/mise.test.js.map +0 -1
- package/dist/tests/core/parse.test.js +0 -174
- package/dist/tests/core/parse.test.js.map +0 -1
- package/dist/tests/core/path.test.js +0 -50
- package/dist/tests/core/path.test.js.map +0 -1
- package/dist/tests/core/plan.test.js +0 -218
- package/dist/tests/core/plan.test.js.map +0 -1
- package/dist/tests/core/post-move.test.js +0 -162
- package/dist/tests/core/post-move.test.js.map +0 -1
- package/dist/tests/core/pr-classify.test.js +0 -117
- package/dist/tests/core/pr-classify.test.js.map +0 -1
- package/dist/tests/core/pr-decide.test.js +0 -298
- package/dist/tests/core/pr-decide.test.js.map +0 -1
- package/dist/tests/core/pr-loop.test.js +0 -301
- package/dist/tests/core/pr-loop.test.js.map +0 -1
- package/dist/tests/core/pr-notes.test.js +0 -165
- package/dist/tests/core/pr-notes.test.js.map +0 -1
- package/dist/tests/core/predicates.test.js +0 -154
- package/dist/tests/core/predicates.test.js.map +0 -1
- package/dist/tests/core/prompt.test.js +0 -189
- package/dist/tests/core/prompt.test.js.map +0 -1
- package/dist/tests/core/protocol.test.js +0 -195
- package/dist/tests/core/protocol.test.js.map +0 -1
- package/dist/tests/core/reconcile-issue.test.js +0 -116
- package/dist/tests/core/reconcile-issue.test.js.map +0 -1
- package/dist/tests/core/render.test.js +0 -549
- package/dist/tests/core/render.test.js.map +0 -1
- package/dist/tests/core/retry.test.js +0 -186
- package/dist/tests/core/retry.test.js.map +0 -1
- package/dist/tests/core/routes.test.js +0 -247
- package/dist/tests/core/routes.test.js.map +0 -1
- package/dist/tests/core/run-fold.test.js +0 -299
- package/dist/tests/core/run-fold.test.js.map +0 -1
- package/dist/tests/core/shape.test.js +0 -185
- package/dist/tests/core/shape.test.js.map +0 -1
- package/dist/tests/core/sleep-cycle.test.js +0 -150
- package/dist/tests/core/sleep-cycle.test.js.map +0 -1
- package/dist/tests/core/slots.test.js +0 -201
- package/dist/tests/core/slots.test.js.map +0 -1
- package/dist/tests/core/state-resolve.test.js +0 -80
- package/dist/tests/core/state-resolve.test.js.map +0 -1
- package/dist/tests/core/summary.test.js +0 -200
- package/dist/tests/core/summary.test.js.map +0 -1
- package/dist/tests/core/template.test.js +0 -116
- package/dist/tests/core/template.test.js.map +0 -1
- package/dist/tests/core/tick.test.js +0 -558
- package/dist/tests/core/tick.test.js.map +0 -1
- package/dist/tests/core/token-fold.test.js +0 -176
- package/dist/tests/core/token-fold.test.js.map +0 -1
- package/dist/tests/core/turn.test.js +0 -388
- package/dist/tests/core/turn.test.js.map +0 -1
- package/dist/tests/core/url.test.js +0 -118
- package/dist/tests/core/url.test.js.map +0 -1
- package/dist/tests/core/validate.test.js +0 -247
- package/dist/tests/core/validate.test.js.map +0 -1
- package/dist/tests/core/views.test.js +0 -252
- package/dist/tests/core/views.test.js.map +0 -1
- package/dist/tests/core/vm-decide.test.js +0 -110
- package/dist/tests/core/vm-decide.test.js.map +0 -1
- package/dist/tests/core/vm-guards.test.js +0 -153
- package/dist/tests/core/vm-guards.test.js.map +0 -1
- package/dist/tests/core/vm-plan.test.js +0 -332
- package/dist/tests/core/vm-plan.test.js.map +0 -1
- package/dist/tests/core/vm-reap.test.js +0 -196
- package/dist/tests/core/vm-reap.test.js.map +0 -1
- package/dist/tests/core/workflow-parse.test.js +0 -493
- package/dist/tests/core/workflow-parse.test.js.map +0 -1
- package/dist/tests/core/workspace-decide.test.js +0 -236
- package/dist/tests/core/workspace-decide.test.js.map +0 -1
- package/dist/tests/helpers/fixtures.js +0 -167
- package/dist/tests/helpers/fixtures.js.map +0 -1
- package/dist/tests/shell/acp-substrate.test.js +0 -101
- package/dist/tests/shell/acp-substrate.test.js.map +0 -1
- package/dist/tests/shell/actions-runner-push.test.js +0 -203
- package/dist/tests/shell/actions-runner-push.test.js.map +0 -1
- package/dist/tests/shell/credential-hooks.test.js +0 -36
- package/dist/tests/shell/credential-hooks.test.js.map +0 -1
- package/dist/tests/shell/credential-registry.test.js +0 -165
- package/dist/tests/shell/credential-registry.test.js.map +0 -1
- package/dist/tests/shell/credential-substrate.test.js +0 -179
- package/dist/tests/shell/credential-substrate.test.js.map +0 -1
- package/dist/tests/shell/dockerfile-mise-pin.test.js +0 -51
- package/dist/tests/shell/dockerfile-mise-pin.test.js.map +0 -1
- package/dist/tests/shell/doctor.test.js +0 -101
- package/dist/tests/shell/doctor.test.js.map +0 -1
- package/dist/tests/shell/effect-vm-create.test.js +0 -52
- package/dist/tests/shell/effect-vm-create.test.js.map +0 -1
- package/dist/tests/shell/gh-port.test.js +0 -63
- package/dist/tests/shell/gh-port.test.js.map +0 -1
- package/dist/tests/shell/gondolin-dispatch-guard.test.js +0 -144
- package/dist/tests/shell/gondolin-dispatch-guard.test.js.map +0 -1
- package/dist/tests/shell/gondolin-dispatch-shquote.test.js +0 -168
- package/dist/tests/shell/gondolin-dispatch-shquote.test.js.map +0 -1
- package/dist/tests/shell/gondolin-image-converter.test.js +0 -208
- package/dist/tests/shell/gondolin-image-converter.test.js.map +0 -1
- package/dist/tests/shell/gondolin-image-fetch.test.js +0 -93
- package/dist/tests/shell/gondolin-image-fetch.test.js.map +0 -1
- package/dist/tests/shell/http-handler.test.js +0 -608
- package/dist/tests/shell/http-handler.test.js.map +0 -1
- package/dist/tests/shell/http-server.test.js +0 -53
- package/dist/tests/shell/http-server.test.js.map +0 -1
- package/dist/tests/shell/mcp-runtime.test.js +0 -366
- package/dist/tests/shell/mcp-runtime.test.js.map +0 -1
- package/dist/tests/shell/mise-config-asset.test.js +0 -87
- package/dist/tests/shell/mise-config-asset.test.js.map +0 -1
- package/dist/tests/shell/orchestrator-loop.test.js +0 -583
- package/dist/tests/shell/orchestrator-loop.test.js.map +0 -1
- package/dist/tests/shell/reconciler-passes.test.js +0 -314
- package/dist/tests/shell/reconciler-passes.test.js.map +0 -1
- package/dist/tests/shell/runner-loop-turn.test.js +0 -97
- package/dist/tests/shell/runner-loop-turn.test.js.map +0 -1
- package/dist/tests/shell/runner-slice.test.js +0 -536
- package/dist/tests/shell/runner-slice.test.js.map +0 -1
- package/dist/tests/shell/scaffold.test.js +0 -65
- package/dist/tests/shell/scaffold.test.js.map +0 -1
- package/dist/tests/shell/tick-config.test.js +0 -83
- package/dist/tests/shell/tick-config.test.js.map +0 -1
- package/dist/tests/shell/tracker-parse-dates.test.js +0 -44
- package/dist/tests/shell/tracker-parse-dates.test.js.map +0 -1
- package/dist/tests/shell/tracker-write-issue.test.js +0 -154
- package/dist/tests/shell/tracker-write-issue.test.js.map +0 -1
- package/dist/tests/shell/workflow-prompt-split.test.js +0 -208
- package/dist/tests/shell/workflow-prompt-split.test.js.map +0 -1
- package/dist/tests/shell/workspace-live-config.test.js +0 -140
- package/dist/tests/shell/workspace-live-config.test.js.map +0 -1
- /package/dist/{src/bin → bin}/symphony.js +0 -0
- /package/dist/{src/core → core}/actions/context.js +0 -0
- /package/dist/{src/core → core}/actions/parse.js +0 -0
- /package/dist/{src/core → core}/actions/plan.js +0 -0
- /package/dist/{src/core → core}/actions/predicates.js +0 -0
- /package/dist/{src/core → core}/actions/run-fold.js +0 -0
- /package/dist/{src/core → core}/actions/template.js +0 -0
- /package/dist/{src/core → core}/cli/args.js +0 -0
- /package/dist/{src/core → core}/coerce.js +0 -0
- /package/dist/{src/core → core}/credential/account-id.js +0 -0
- /package/dist/{src/core → core}/credential/adapter-config.js +0 -0
- /package/dist/{src/core → core}/credential/availability.js +0 -0
- /package/dist/{src/core → core}/credential/extract.js +0 -0
- /package/dist/{src/core → core}/credential/fake-creds.js +0 -0
- /package/dist/{src/core → core}/credential/identity.js +0 -0
- /package/dist/{src/core → core}/credential/shape.js +0 -0
- /package/dist/{src/core → core}/credential/strings.js +0 -0
- /package/dist/{src/core → core}/doctor/checks.js +0 -0
- /package/dist/{src/core → core}/git/result.js +0 -0
- /package/dist/{src/core → core}/http/decisions.js +0 -0
- /package/dist/{src/core → core}/http/render.js +0 -0
- /package/dist/{src/core → core}/http/routes.js +0 -0
- /package/dist/{src/core → core}/http/views.js +0 -0
- /package/dist/{src/core → core}/image/managed-image.js +0 -0
- /package/dist/{src/core → core}/issue/file.js +0 -0
- /package/dist/{src/core → core}/issue/parse.js +0 -0
- /package/dist/{src/core → core}/mcp/dispatch.js +0 -0
- /package/dist/{src/core → core}/mcp/post-move.js +0 -0
- /package/dist/{src/core → core}/mcp/protocol.js +0 -0
- /package/dist/{src/core → core}/mcp/url.js +0 -0
- /package/dist/{src/core → core}/path.js +0 -0
- /package/dist/{src/core → core}/reconcile/image-decide.js +0 -0
- /package/dist/{src/core → core}/reconcile/ledger.js +0 -0
- /package/dist/{src/core → core}/reconcile/pr-classify.js +0 -0
- /package/dist/{src/core → core}/reconcile/pr-decide.js +0 -0
- /package/dist/{src/core → core}/reconcile/pr-loop.js +0 -0
- /package/dist/{src/core → core}/reconcile/pr-notes.js +0 -0
- /package/dist/{src/core → core}/reconcile/vm-decide.js +0 -0
- /package/dist/{src/core → core}/reconcile/vm-reap.js +0 -0
- /package/dist/{src/core → core}/reconcile/workspace-decide.js +0 -0
- /package/dist/{src/core → core}/runlog/summary.js +0 -0
- /package/dist/{src/core → core}/runner/dispatch-config.js +0 -0
- /package/dist/{src/core → core}/runner/injection.js +0 -0
- /package/dist/{src/core → core}/runner/mise.js +0 -0
- /package/dist/{src/core → core}/runner/prompt.js +0 -0
- /package/dist/{src/core → core}/runner/turn.js +0 -0
- /package/dist/{src/core → core}/runner/vm-plan.js +0 -0
- /package/dist/{src/core → core}/schedule/admission.js +0 -0
- /package/dist/{src/core → core}/schedule/circuit-breaker.js +0 -0
- /package/dist/{src/core → core}/schedule/eligibility.js +0 -0
- /package/dist/{src/core → core}/schedule/reconcile-issue.js +0 -0
- /package/dist/{src/core → core}/schedule/retry.js +0 -0
- /package/dist/{src/core → core}/schedule/sleep-cycle.js +0 -0
- /package/dist/{src/core → core}/schedule/slots.js +0 -0
- /package/dist/{src/core → core}/schedule/tick.js +0 -0
- /package/dist/{src/core → core}/schedule/token-fold.js +0 -0
- /package/dist/{src/core → core}/state-resolve.js +0 -0
- /package/dist/{src/core → core}/vm-guards.js +0 -0
- /package/dist/{src/core → core}/workflow/derive.js +0 -0
- /package/dist/{src/core → core}/workflow/parse.js +0 -0
- /package/dist/{src/core → core}/workflow/prompt-probe.js +0 -0
- /package/dist/{src/core → core}/workflow/validate.js +0 -0
- /package/dist/{src/core → core}/workspace-key.js +0 -0
- /package/dist/{src/shell → shell}/actions-runner.js +0 -0
- /package/dist/{src/shell → shell}/adapter/adapter-registry.js +0 -0
- /package/dist/{src/shell → shell}/adapter/clock-random.js +0 -0
- /package/dist/{src/shell → shell}/adapter/gondolin-dispatch-helpers.js +0 -0
- /package/dist/{src/shell → shell}/adapter/gondolin-dispatch.js +0 -0
- /package/dist/{src/shell → shell}/adapter/gondolin-image-converter.js +0 -0
- /package/dist/{src/shell → shell}/adapter/gondolin-image-fetch.js +0 -0
- /package/dist/{src/shell → shell}/adapter/launcher-asset.js +0 -0
- /package/dist/{src/shell → shell}/adapter/mise-config-asset.js +0 -0
- /package/dist/{src/shell → shell}/adapter/workflow-loader.js +0 -0
- /package/dist/{src/shell → shell}/cli/doctor.js +0 -0
- /package/dist/{src/shell → shell}/effect-interpreter-families.js +0 -0
- /package/dist/{src/shell → shell}/effect-interpreter.js +0 -0
- /package/dist/{src/shell → shell}/interp/acp-frame.js +0 -0
- /package/dist/{src/shell → shell}/interp/acp-ws-conn.js +0 -0
- /package/dist/{src/shell → shell}/interp/acp-ws-frames.js +0 -0
- /package/dist/{src/shell → shell}/interp/acp-ws.js +0 -0
- /package/dist/{src/shell → shell}/interp/acp.js +0 -0
- /package/dist/{src/shell → shell}/interp/credential-defaults.js +0 -0
- /package/dist/{src/shell → shell}/interp/credential-hooks.js +0 -0
- /package/dist/{src/shell → shell}/interp/credential-registry.js +0 -0
- /package/dist/{src/shell → shell}/interp/credential.js +0 -0
- /package/dist/{src/shell → shell}/interp/gh.js +0 -0
- /package/dist/{src/shell → shell}/interp/git.js +0 -0
- /package/dist/{src/shell → shell}/interp/log.js +0 -0
- /package/dist/{src/shell → shell}/interp/process.js +0 -0
- /package/dist/{src/shell → shell}/interp/runlog.js +0 -0
- /package/dist/{src/shell → shell}/interp/timer.js +0 -0
- /package/dist/{src/shell → shell}/interp/tracker-disk.js +0 -0
- /package/dist/{src/shell → shell}/interp/tracker-parse.js +0 -0
- /package/dist/{src/shell → shell}/interp/tracker-scan.js +0 -0
- /package/dist/{src/shell → shell}/interp/tracker-write.js +0 -0
- /package/dist/{src/shell → shell}/interp/tracker.js +0 -0
- /package/dist/{src/shell → shell}/interp/tty.js +0 -0
- /package/dist/{src/shell → shell}/interp/vm.js +0 -0
- /package/dist/{src/shell → shell}/interp/workspace.js +0 -0
- /package/dist/{src/shell → shell}/main-acp.js +0 -0
- /package/dist/{src/shell → shell}/main-adapters.js +0 -0
- /package/dist/{src/shell → shell}/main-credential.js +0 -0
- /package/dist/{src/shell → shell}/main-doctor.js +0 -0
- /package/dist/{src/shell → shell}/main-entry.js +0 -0
- /package/dist/{src/shell → shell}/main-http-csrf.js +0 -0
- /package/dist/{src/shell → shell}/main-http-handler.js +0 -0
- /package/dist/{src/shell → shell}/main-http-mcp.js +0 -0
- /package/dist/{src/shell → shell}/main-http-views.js +0 -0
- /package/dist/{src/shell → shell}/main-http.js +0 -0
- /package/dist/{src/shell → shell}/main-loops.js +0 -0
- /package/dist/{src/shell → shell}/main-mcp.js +0 -0
- /package/dist/{src/shell → shell}/main-orchestrator.js +0 -0
- /package/dist/{src/shell → shell}/main-preflight.js +0 -0
- /package/dist/{src/shell → shell}/main-reconcilers-helpers.js +0 -0
- /package/dist/{src/shell → shell}/main-reconcilers-pr.js +0 -0
- /package/dist/{src/shell → shell}/main-reconcilers.js +0 -0
- /package/dist/{src/shell → shell}/main-runner.js +0 -0
- /package/dist/{src/shell → shell}/main-scaffold.js +0 -0
- /package/dist/{src/shell → shell}/main-shutdown.js +0 -0
- /package/dist/{src/shell → shell}/main-startup.js +0 -0
- /package/dist/{src/shell → shell}/main-substrates.js +0 -0
- /package/dist/{src/shell → shell}/main.js +0 -0
- /package/dist/{src/shell → shell}/orchestrator-feedback.js +0 -0
- /package/dist/{src/shell → shell}/orchestrator-image.js +0 -0
- /package/dist/{src/shell → shell}/orchestrator-loop.js +0 -0
- /package/dist/{src/shell → shell}/orchestrator-reconcile.js +0 -0
- /package/dist/{src/shell → shell}/reconciler-loop.js +0 -0
- /package/dist/{src/shell → shell}/runner-loop-turn.js +0 -0
- /package/dist/{src/shell → shell}/runner-loop.js +0 -0
- /package/dist/{src/shell → shell}/server/http.js +0 -0
- /package/dist/{src/shell → shell}/server/mcp-runtime-effects.js +0 -0
- /package/dist/{src/shell → shell}/server/mcp-runtime.js +0 -0
- /package/dist/{src/shell → shell}/workspace-key.js +0 -0
- /package/dist/{src/types → types}/acp.js +0 -0
- /package/dist/{src/types → types}/actions/plan.js +0 -0
- /package/dist/{src/types → types}/actions/predicates.js +0 -0
- /package/dist/{src/types → types}/actions/run-fold.js +0 -0
- /package/dist/{src/types → types}/actions.js +0 -0
- /package/dist/{src/types → types}/adapter/clock-random.js +0 -0
- /package/dist/{src/types → types}/adapter/gondolin-image-converter.js +0 -0
- /package/dist/{src/types → types}/adapter/gondolin-image-fetch.js +0 -0
- /package/dist/{src/types → types}/adapter/workflow-loader.js +0 -0
- /package/dist/{src/types → types}/cli/args.js +0 -0
- /package/dist/{src/types → types}/config.js +0 -0
- /package/dist/{src/types → types}/credential-interp.js +0 -0
- /package/dist/{src/types → types}/credentials.js +0 -0
- /package/dist/{src/types → types}/doctor.js +0 -0
- /package/dist/{src/types → types}/domain.js +0 -0
- /package/dist/{src/types → types}/effect.js +0 -0
- /package/dist/{src/types → types}/errors.js +0 -0
- /package/dist/{src/types → types}/http/decisions.js +0 -0
- /package/dist/{src/types → types}/http/render.js +0 -0
- /package/dist/{src/types → types}/http/views.js +0 -0
- /package/dist/{src/types → types}/http.js +0 -0
- /package/dist/{src/types → types}/image/managed-image.js +0 -0
- /package/dist/{src/types → types}/interp/effect-interpreter.js +0 -0
- /package/dist/{src/types → types}/interp/tracker.js +0 -0
- /package/dist/{src/types → types}/issue/file.js +0 -0
- /package/dist/{src/types → types}/issue/parse.js +0 -0
- /package/dist/{src/types → types}/main-acp.js +0 -0
- /package/dist/{src/types → types}/main-adapters.js +0 -0
- /package/dist/{src/types → types}/main-credential.js +0 -0
- /package/dist/{src/types → types}/main-doctor.js +0 -0
- /package/dist/{src/types → types}/main-http-handler.js +0 -0
- /package/dist/{src/types → types}/main-http.js +0 -0
- /package/dist/{src/types → types}/main-loops.js +0 -0
- /package/dist/{src/types → types}/main-mcp.js +0 -0
- /package/dist/{src/types → types}/main-orchestrator.js +0 -0
- /package/dist/{src/types → types}/main-reconcilers.js +0 -0
- /package/dist/{src/types → types}/main-runner.js +0 -0
- /package/dist/{src/types → types}/main-startup.js +0 -0
- /package/dist/{src/types → types}/main-substrates.js +0 -0
- /package/dist/{src/types → types}/mcp/dispatch.js +0 -0
- /package/dist/{src/types → types}/mcp/post-move.js +0 -0
- /package/dist/{src/types → types}/mcp.js +0 -0
- /package/dist/{src/types → types}/ports.js +0 -0
- /package/dist/{src/types → types}/reconcile/image-decide.js +0 -0
- /package/dist/{src/types → types}/reconcile/ledger.js +0 -0
- /package/dist/{src/types → types}/reconcile/pr-loop.js +0 -0
- /package/dist/{src/types → types}/reconcile/vm-reap.js +0 -0
- /package/dist/{src/types → types}/reconcile/workspace-decide.js +0 -0
- /package/dist/{src/types → types}/reconcile.js +0 -0
- /package/dist/{src/types → types}/runlog.js +0 -0
- /package/dist/{src/types → types}/runner/actions-runner.js +0 -0
- /package/dist/{src/types → types}/runner/gondolin-dispatch.js +0 -0
- /package/dist/{src/types → types}/runner/injection.js +0 -0
- /package/dist/{src/types → types}/runner/runner-loop.js +0 -0
- /package/dist/{src/types → types}/runner/turn.js +0 -0
- /package/dist/{src/types → types}/runner/vm-plan.js +0 -0
- /package/dist/{src/types → types}/runtime.js +0 -0
- /package/dist/{src/types → types}/schedule/admission.js +0 -0
- /package/dist/{src/types → types}/schedule/circuit-breaker.js +0 -0
- /package/dist/{src/types → types}/schedule/eligibility.js +0 -0
- /package/dist/{src/types → types}/schedule/orchestrator-loop.js +0 -0
- /package/dist/{src/types → types}/schedule/sleep-cycle.js +0 -0
- /package/dist/{src/types → types}/schedule/slots.js +0 -0
- /package/dist/{src/types → types}/schedule/tick.js +0 -0
- /package/dist/{src/types → types}/server/mcp-runtime.js +0 -0
- /package/dist/{src/types → types}/workflow/parse.js +0 -0
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
// Pure unit tests for src/core/cli/args.ts — no mocks (parseCli is pure).
|
|
2
|
-
import { test } from 'node:test';
|
|
3
|
-
import assert from 'node:assert/strict';
|
|
4
|
-
import { parseCli, USAGE, DEFAULT_WORKFLOW_FILENAME, } from '../../src/core/cli/args.js';
|
|
5
|
-
const CWD = '/home/op/project';
|
|
6
|
-
/** Narrow to the ok branch (throws with the actual result on a non-ok directive). */
|
|
7
|
-
function ok(r) {
|
|
8
|
-
assert.equal(r.kind, 'ok', `expected ok, got ${JSON.stringify(r)}`);
|
|
9
|
-
return r;
|
|
10
|
-
}
|
|
11
|
-
// ── default subcommand + default workflow path ───────────────────────────────
|
|
12
|
-
test('no args → serve with default WORKFLOW.yaml resolved against injected cwd', () => {
|
|
13
|
-
const { cli } = ok(parseCli([], CWD));
|
|
14
|
-
assert.equal(cli.subcommand, 'serve');
|
|
15
|
-
assert.equal(cli.workflow, `${CWD}/${DEFAULT_WORKFLOW_FILENAME}`);
|
|
16
|
-
assert.equal(cli.port, null);
|
|
17
|
-
assert.equal(cli.reconcileForce, false);
|
|
18
|
-
assert.equal(cli.verbose, false);
|
|
19
|
-
});
|
|
20
|
-
test('default workflow join tolerates a trailing slash on cwd', () => {
|
|
21
|
-
const { cli } = ok(parseCli([], '/a/b/'));
|
|
22
|
-
assert.equal(cli.workflow, '/a/b/WORKFLOW.yaml');
|
|
23
|
-
});
|
|
24
|
-
test('empty cwd collapses the default workflow to a root-absolute path', () => {
|
|
25
|
-
const { cli } = ok(parseCli([], ''));
|
|
26
|
-
assert.equal(cli.workflow, '/WORKFLOW.yaml');
|
|
27
|
-
});
|
|
28
|
-
// ── positional workflow path ─────────────────────────────────────────────────
|
|
29
|
-
test('positional path wins over the default and is taken verbatim', () => {
|
|
30
|
-
const { cli } = ok(parseCli(['/custom/Flow.md'], CWD));
|
|
31
|
-
assert.equal(cli.subcommand, 'serve');
|
|
32
|
-
assert.equal(cli.workflow, '/custom/Flow.md');
|
|
33
|
-
});
|
|
34
|
-
// ── subcommand detection ─────────────────────────────────────────────────────
|
|
35
|
-
test('reconcile subcommand is detected and preserved', () => {
|
|
36
|
-
const { cli } = ok(parseCli(['reconcile'], CWD));
|
|
37
|
-
assert.equal(cli.subcommand, 'reconcile');
|
|
38
|
-
assert.equal(cli.workflow, `${CWD}/${DEFAULT_WORKFLOW_FILENAME}`);
|
|
39
|
-
});
|
|
40
|
-
test('doctor subcommand is detected and preserved', () => {
|
|
41
|
-
assert.equal(ok(parseCli(['doctor'], CWD)).cli.subcommand, 'doctor');
|
|
42
|
-
});
|
|
43
|
-
// ── --port (both shapes + validation) ────────────────────────────────────────
|
|
44
|
-
test('--port PORT and -p PORT parse the value', () => {
|
|
45
|
-
assert.equal(ok(parseCli(['--port', '9000'], CWD)).cli.port, 9000);
|
|
46
|
-
assert.equal(ok(parseCli(['-p', '0'], CWD)).cli.port, 0);
|
|
47
|
-
});
|
|
48
|
-
test('--port=PORT inline shape parses the value', () => {
|
|
49
|
-
assert.equal(ok(parseCli(['--port=8181'], CWD)).cli.port, 8181);
|
|
50
|
-
});
|
|
51
|
-
test('--port without a value → error directive (exit 2, stderr message)', () => {
|
|
52
|
-
const r = parseCli(['--port'], CWD);
|
|
53
|
-
assert.equal(r.kind, 'error');
|
|
54
|
-
assert.equal(r.kind === 'error' && r.exitCode, 2);
|
|
55
|
-
assert.equal(r.kind === 'error' && r.message, 'error: --port requires a value\n');
|
|
56
|
-
});
|
|
57
|
-
test('--port with a non-numeric value → error (whole-arg shape uses the value)', () => {
|
|
58
|
-
const r = parseCli(['--port', 'abc'], CWD);
|
|
59
|
-
assert.equal(r.kind, 'error');
|
|
60
|
-
assert.equal(r.kind === 'error' && r.message, 'error: invalid --port value: abc\n');
|
|
61
|
-
});
|
|
62
|
-
test('--port with a negative value → error', () => {
|
|
63
|
-
const r = parseCli(['--port', '-5'], CWD);
|
|
64
|
-
// parseInt('-5') = -5, which is < 0.
|
|
65
|
-
assert.equal(r.kind, 'error');
|
|
66
|
-
assert.equal(r.kind === 'error' && r.message, 'error: invalid --port value: -5\n');
|
|
67
|
-
});
|
|
68
|
-
test('--port=BAD interpolates the WHOLE arg into the message (original behavior)', () => {
|
|
69
|
-
const r = parseCli(['--port=foo'], CWD);
|
|
70
|
-
assert.equal(r.kind, 'error');
|
|
71
|
-
assert.equal(r.kind === 'error' && r.message, 'error: invalid --port value: --port=foo\n');
|
|
72
|
-
});
|
|
73
|
-
// ── --force ──────────────────────────────────────────────────────────────────
|
|
74
|
-
test('reconcile --force sets reconcileForce only under the reconcile subcommand', () => {
|
|
75
|
-
assert.equal(ok(parseCli(['reconcile', '--force'], CWD)).cli.reconcileForce, true);
|
|
76
|
-
});
|
|
77
|
-
test('bare --force under serve is not a force flag (taken as the positional workflow)', () => {
|
|
78
|
-
// Under serve, `--force` is not recognized and (since no positional taken yet)
|
|
79
|
-
// would be captured as the workflow path? No: the workflow slot is still open,
|
|
80
|
-
// so `--force` is taken as the positional workflow. Assert that faithfully.
|
|
81
|
-
const { cli } = ok(parseCli(['--force'], CWD));
|
|
82
|
-
assert.equal(cli.reconcileForce, false);
|
|
83
|
-
assert.equal(cli.workflow, '--force');
|
|
84
|
-
});
|
|
85
|
-
test('the retired top-level --reconcile-force alias no longer parses', () => {
|
|
86
|
-
// The alias was removed; `--reconcile-force` is now an unrecognized flag. With
|
|
87
|
-
// the workflow slot still open it is captured as the positional workflow path,
|
|
88
|
-
// and the force flag stays off — `symphony reconcile --force` is the only form.
|
|
89
|
-
const { cli } = ok(parseCli(['--reconcile-force'], CWD));
|
|
90
|
-
assert.equal(cli.subcommand, 'serve');
|
|
91
|
-
assert.equal(cli.reconcileForce, false);
|
|
92
|
-
assert.equal(cli.workflow, '--reconcile-force');
|
|
93
|
-
});
|
|
94
|
-
// ── --verbose / aliases ──────────────────────────────────────────────────────
|
|
95
|
-
test('--verbose, -v, and --foreground all set verbose', () => {
|
|
96
|
-
assert.equal(ok(parseCli(['--verbose'], CWD)).cli.verbose, true);
|
|
97
|
-
assert.equal(ok(parseCli(['-v'], CWD)).cli.verbose, true);
|
|
98
|
-
assert.equal(ok(parseCli(['--foreground'], CWD)).cli.verbose, true);
|
|
99
|
-
});
|
|
100
|
-
// ── help ─────────────────────────────────────────────────────────────────────
|
|
101
|
-
test('-h / --help → help directive carrying USAGE and exit 0', () => {
|
|
102
|
-
for (const flag of ['-h', '--help']) {
|
|
103
|
-
const r = parseCli([flag], CWD);
|
|
104
|
-
assert.equal(r.kind, 'help');
|
|
105
|
-
assert.equal(r.kind === 'help' && r.exitCode, 0);
|
|
106
|
-
assert.equal(r.kind === 'help' && r.message, USAGE);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
// ── unexpected argument ──────────────────────────────────────────────────────
|
|
110
|
-
test('a second positional → unexpected-argument error directive', () => {
|
|
111
|
-
const r = parseCli(['/a/Flow.md', '/b/Other.md'], CWD);
|
|
112
|
-
assert.equal(r.kind, 'error');
|
|
113
|
-
assert.equal(r.kind === 'error' && r.exitCode, 2);
|
|
114
|
-
assert.equal(r.kind === 'error' && r.message, 'error: unexpected argument: /b/Other.md\n');
|
|
115
|
-
});
|
|
116
|
-
// ── combined / ordering ──────────────────────────────────────────────────────
|
|
117
|
-
test('reconcile with path, --force, and --port all combine', () => {
|
|
118
|
-
const { cli } = ok(parseCli(['reconcile', '/flow.md', '--force', '--port', '7777'], CWD));
|
|
119
|
-
assert.equal(cli.subcommand, 'reconcile');
|
|
120
|
-
assert.equal(cli.workflow, '/flow.md');
|
|
121
|
-
assert.equal(cli.reconcileForce, true);
|
|
122
|
-
assert.equal(cli.port, 7777);
|
|
123
|
-
});
|
|
124
|
-
test('parseCli is pure: same inputs → deeply-equal output, inputs not mutated', () => {
|
|
125
|
-
const argv = ['reconcile', '--force', '--port=8080', '/x.md'];
|
|
126
|
-
const before = [...argv];
|
|
127
|
-
const a = parseCli(argv, CWD);
|
|
128
|
-
const b = parseCli(argv, CWD);
|
|
129
|
-
assert.deepEqual(a, b);
|
|
130
|
-
assert.deepEqual(argv, before); // argv not mutated
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=args.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"args.test.js","sourceRoot":"","sources":["../../../tests/core/args.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// PURE unit test for src/core/credential/availability.ts — node:test + node:assert.
|
|
2
|
-
// The functions under test are pure (data -> data), so no mocks are needed: we
|
|
3
|
-
// pass file text + env maps directly and assert the classification + messages.
|
|
4
|
-
import { test } from 'node:test';
|
|
5
|
-
import assert from 'node:assert/strict';
|
|
6
|
-
import { KNOWN_ADAPTER_IDS, isKnownAdapter, hostClaudeCredentialPath, hostCodexCredentialPath, codexCredentialAvailable, codexMissingCredentialMessage, } from '../../src/core/credential/availability.js';
|
|
7
|
-
const HOME = '/home/tester';
|
|
8
|
-
const EMPTY_ENV = {};
|
|
9
|
-
// ─── known-adapter registry ──────────────────────────────────────────────────
|
|
10
|
-
test('KNOWN_ADAPTER_IDS is exactly the two adapters', () => {
|
|
11
|
-
assert.deepEqual([...KNOWN_ADAPTER_IDS], ['claude', 'codex']);
|
|
12
|
-
});
|
|
13
|
-
test('isKnownAdapter accepts known ids and rejects others', () => {
|
|
14
|
-
assert.equal(isKnownAdapter('claude'), true);
|
|
15
|
-
assert.equal(isKnownAdapter('codex'), true);
|
|
16
|
-
assert.equal(isKnownAdapter('opencode'), false);
|
|
17
|
-
assert.equal(isKnownAdapter('gemini'), false);
|
|
18
|
-
assert.equal(isKnownAdapter(''), false);
|
|
19
|
-
assert.equal(isKnownAdapter('Claude'), false); // case-sensitive
|
|
20
|
-
});
|
|
21
|
-
// ─── host credential paths ───────────────────────────────────────────────────
|
|
22
|
-
test('hostClaudeCredentialPath / hostCodexCredentialPath join under home', () => {
|
|
23
|
-
assert.equal(hostClaudeCredentialPath(HOME), '/home/tester/.claude/.credentials.json');
|
|
24
|
-
assert.equal(hostCodexCredentialPath(HOME), '/home/tester/.codex/auth.json');
|
|
25
|
-
});
|
|
26
|
-
test('host credential path collapses a trailing-slash home dir', () => {
|
|
27
|
-
assert.equal(hostCodexCredentialPath('/home/tester/'), '/home/tester/.codex/auth.json');
|
|
28
|
-
});
|
|
29
|
-
// ─── codexCredentialAvailable ────────────────────────────────────────────────
|
|
30
|
-
test('codexCredentialAvailable: OPENAI_API_KEY env alone is enough', () => {
|
|
31
|
-
assert.equal(codexCredentialAvailable(null, { OPENAI_API_KEY: 'sk-live' }), true);
|
|
32
|
-
});
|
|
33
|
-
test('codexCredentialAvailable: ChatGPT-OAuth tokens.access_token in file', () => {
|
|
34
|
-
const file = JSON.stringify({ tokens: { access_token: 'oauth-tok' } });
|
|
35
|
-
assert.equal(codexCredentialAvailable(file, EMPTY_ENV), true);
|
|
36
|
-
});
|
|
37
|
-
test('codexCredentialAvailable: top-level OPENAI_API_KEY in file', () => {
|
|
38
|
-
const file = JSON.stringify({ OPENAI_API_KEY: 'sk-in-file' });
|
|
39
|
-
assert.equal(codexCredentialAvailable(file, EMPTY_ENV), true);
|
|
40
|
-
});
|
|
41
|
-
test('codexCredentialAvailable: no file and no env => false', () => {
|
|
42
|
-
assert.equal(codexCredentialAvailable(null, EMPTY_ENV), false);
|
|
43
|
-
});
|
|
44
|
-
test('codexCredentialAvailable: malformed JSON, no env => false', () => {
|
|
45
|
-
assert.equal(codexCredentialAvailable('}{', EMPTY_ENV), false);
|
|
46
|
-
});
|
|
47
|
-
test('codexCredentialAvailable: file with empty access_token and no env => false', () => {
|
|
48
|
-
const file = JSON.stringify({ tokens: { access_token: '' } });
|
|
49
|
-
assert.equal(codexCredentialAvailable(file, EMPTY_ENV), false);
|
|
50
|
-
});
|
|
51
|
-
test('codexCredentialAvailable: tokens not an object => false', () => {
|
|
52
|
-
assert.equal(codexCredentialAvailable(JSON.stringify({ tokens: 'x' }), EMPTY_ENV), false);
|
|
53
|
-
assert.equal(codexCredentialAvailable(JSON.stringify([1, 2]), EMPTY_ENV), false);
|
|
54
|
-
});
|
|
55
|
-
// ─── missing-credential messages ─────────────────────────────────────────────
|
|
56
|
-
test('codexMissingCredentialMessage names the codex path and both sources', () => {
|
|
57
|
-
const msg = codexMissingCredentialMessage(HOME);
|
|
58
|
-
assert.match(msg, /adapter "codex" requires a host credential/);
|
|
59
|
-
assert.match(msg, /\/home\/tester\/\.codex\/auth\.json/);
|
|
60
|
-
assert.match(msg, /OPENAI_API_KEY/);
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=availability.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"availability.test.js","sourceRoot":"","sources":["../../../tests/core/availability.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
// Pure unit tests for the doctor preflight core (no mocks — every function is
|
|
2
|
-
// data → data). Covers each check builder's PASS/FAIL branches, the report
|
|
3
|
-
// aggregation + rendering, resolveHttpPort precedence, and the startup banner.
|
|
4
|
-
import { test } from 'node:test';
|
|
5
|
-
import assert from 'node:assert/strict';
|
|
6
|
-
import { checkNodeVersion, checkWorkflow, checkGondolinImage, checkTrackerRoot, checkDashboardPort, doctorReportPassed, formatDoctorReport, resolveHttpPort, formatStartupBanner, } from '../../src/core/doctor/checks.js';
|
|
7
|
-
// ─── checkNodeVersion ────────────────────────────────────────────────────────
|
|
8
|
-
test('checkNodeVersion: null floor always passes, reports running version', () => {
|
|
9
|
-
const c = checkNodeVersion('v23.6.0', null);
|
|
10
|
-
assert.equal(c.key, 'node');
|
|
11
|
-
assert.equal(c.pass, true);
|
|
12
|
-
assert.match(c.detail, /v23\.6\.0/);
|
|
13
|
-
assert.match(c.detail, /no engines floor/);
|
|
14
|
-
assert.equal(c.fix, '');
|
|
15
|
-
});
|
|
16
|
-
test('checkNodeVersion: current >= floor passes', () => {
|
|
17
|
-
assert.equal(checkNodeVersion('v23.6.0', '>=23.6.0').pass, true);
|
|
18
|
-
assert.equal(checkNodeVersion('v24.0.0', '>=23.6.0').pass, true);
|
|
19
|
-
assert.equal(checkNodeVersion('v23.7.0', '>=23.6.0').pass, true);
|
|
20
|
-
});
|
|
21
|
-
test('checkNodeVersion: current < floor fails with a fix', () => {
|
|
22
|
-
const c = checkNodeVersion('v22.0.0', '>=23.6.0');
|
|
23
|
-
assert.equal(c.pass, false);
|
|
24
|
-
assert.match(c.detail, /engines floor >=23\.6\.0/);
|
|
25
|
-
assert.match(c.fix, /nvm install 23/);
|
|
26
|
-
});
|
|
27
|
-
test('checkNodeVersion: patch-level comparison', () => {
|
|
28
|
-
assert.equal(checkNodeVersion('v23.6.0', '>=23.6.1').pass, false);
|
|
29
|
-
assert.equal(checkNodeVersion('v23.6.1', '>=23.6.0').pass, true);
|
|
30
|
-
});
|
|
31
|
-
// ─── checkWorkflow ───────────────────────────────────────────────────────────
|
|
32
|
-
function wf(over = {}) {
|
|
33
|
-
return {
|
|
34
|
-
parseError: null,
|
|
35
|
-
hasActive: true,
|
|
36
|
-
hasTerminal: true,
|
|
37
|
-
hasHolding: true,
|
|
38
|
-
stateNames: ['Todo', 'Doing', 'Done'],
|
|
39
|
-
...over,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
test('checkWorkflow: parse error is a single FAIL', () => {
|
|
43
|
-
const c = checkWorkflow(wf({ parseError: 'bad yaml at line 3' }));
|
|
44
|
-
assert.equal(c.pass, false);
|
|
45
|
-
assert.match(c.detail, /does not parse: bad yaml at line 3/);
|
|
46
|
-
assert.match(c.fix, /WORKFLOW\.yaml/);
|
|
47
|
-
});
|
|
48
|
-
test('checkWorkflow: all roles present passes and lists states', () => {
|
|
49
|
-
const c = checkWorkflow(wf());
|
|
50
|
-
assert.equal(c.pass, true);
|
|
51
|
-
assert.match(c.detail, /Todo, Doing, Done/);
|
|
52
|
-
assert.match(c.detail, /active\/terminal\/holding present/);
|
|
53
|
-
assert.equal(c.fix, '');
|
|
54
|
-
});
|
|
55
|
-
test('checkWorkflow: missing roles named exactly', () => {
|
|
56
|
-
const c = checkWorkflow(wf({ hasTerminal: false, hasHolding: false }));
|
|
57
|
-
assert.equal(c.pass, false);
|
|
58
|
-
assert.match(c.detail, /missing required state role\(s\): terminal, holding/);
|
|
59
|
-
// fix joins with ', role: ' so each missing role reads as `role: X`
|
|
60
|
-
assert.match(c.fix, /role: terminal, role: holding/);
|
|
61
|
-
});
|
|
62
|
-
test('checkWorkflow: single missing role', () => {
|
|
63
|
-
const c = checkWorkflow(wf({ hasActive: false }));
|
|
64
|
-
assert.equal(c.pass, false);
|
|
65
|
-
assert.match(c.detail, /missing required state role\(s\): active/);
|
|
66
|
-
});
|
|
67
|
-
// ─── checkGondolinImage ──────────────────────────────────────────────────────
|
|
68
|
-
test('checkGondolinImage: unset fails', () => {
|
|
69
|
-
for (const image of [null, '']) {
|
|
70
|
-
const obs = { image, resolution: null, oci: null };
|
|
71
|
-
const c = checkGondolinImage(obs);
|
|
72
|
-
assert.equal(c.pass, false);
|
|
73
|
-
assert.equal(c.detail, 'not set');
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
test('checkGondolinImage: bare floating name is unpinned (flagged before resolution)', () => {
|
|
77
|
-
const obs = { image: 'symphony-agent', resolution: null, oci: null };
|
|
78
|
-
const c = checkGondolinImage(obs);
|
|
79
|
-
assert.equal(c.pass, false);
|
|
80
|
-
assert.match(c.detail, /unpinned ref "symphony-agent"/);
|
|
81
|
-
assert.match(c.fix, /pin a name:tag or digest/);
|
|
82
|
-
});
|
|
83
|
-
test('checkGondolinImage: pinned name:tag but unresolvable fails', () => {
|
|
84
|
-
const obs = {
|
|
85
|
-
image: 'does-not-exist:v1',
|
|
86
|
-
resolution: { resolved: false, source: null, detail: 'image not found in store' },
|
|
87
|
-
oci: null,
|
|
88
|
-
};
|
|
89
|
-
const c = checkGondolinImage(obs);
|
|
90
|
-
assert.equal(c.pass, false);
|
|
91
|
-
assert.match(c.detail, /pinned but unresolvable: image not found in store/);
|
|
92
|
-
});
|
|
93
|
-
test('checkGondolinImage: pinned with null resolution fails (not probed)', () => {
|
|
94
|
-
const obs = { image: 'name:tag', resolution: null, oci: null };
|
|
95
|
-
const c = checkGondolinImage(obs);
|
|
96
|
-
assert.equal(c.pass, false);
|
|
97
|
-
assert.match(c.detail, /not probed/);
|
|
98
|
-
});
|
|
99
|
-
test('checkGondolinImage: resolved digest passes with source', () => {
|
|
100
|
-
const obs = {
|
|
101
|
-
image: 'cb875342-03ef-56e0-9306-dde8628aa17d',
|
|
102
|
-
resolution: { resolved: true, source: 'build-id', detail: 'cb875342' },
|
|
103
|
-
oci: null,
|
|
104
|
-
};
|
|
105
|
-
const c = checkGondolinImage(obs);
|
|
106
|
-
assert.equal(c.pass, true);
|
|
107
|
-
assert.match(c.detail, /resolved: build-id/);
|
|
108
|
-
assert.equal(c.fix, '');
|
|
109
|
-
});
|
|
110
|
-
test('checkGondolinImage: path-shaped selector is pinned (resolves to PASS)', () => {
|
|
111
|
-
const obs = {
|
|
112
|
-
image: './assets/agent',
|
|
113
|
-
resolution: { resolved: true, source: 'path', detail: '/abs/assets/agent' },
|
|
114
|
-
oci: null,
|
|
115
|
-
};
|
|
116
|
-
assert.equal(checkGondolinImage(obs).pass, true);
|
|
117
|
-
});
|
|
118
|
-
test('checkGondolinImage: resolved with null source falls back to "ok"', () => {
|
|
119
|
-
const obs = {
|
|
120
|
-
image: 'name:tag',
|
|
121
|
-
resolution: { resolved: true, source: null, detail: 'x' },
|
|
122
|
-
oci: null,
|
|
123
|
-
};
|
|
124
|
-
const c = checkGondolinImage(obs);
|
|
125
|
-
assert.equal(c.pass, true);
|
|
126
|
-
assert.match(c.detail, /resolved: ok/);
|
|
127
|
-
});
|
|
128
|
-
// ─── checkGondolinImage: oci_image auto-convert path (issue 206) ─────────────
|
|
129
|
-
test('checkGondolinImage: oci_image already converted passes', () => {
|
|
130
|
-
const obs = {
|
|
131
|
-
image: null,
|
|
132
|
-
resolution: null,
|
|
133
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'if-not-present', converted: true, locallyResolvable: true },
|
|
134
|
-
};
|
|
135
|
-
const c = checkGondolinImage(obs);
|
|
136
|
-
assert.equal(c.pass, true);
|
|
137
|
-
assert.match(c.detail, /converted asset cached/);
|
|
138
|
-
});
|
|
139
|
-
test('checkGondolinImage: oci_image not yet converted is a SOFT pass (builds on reconcile)', () => {
|
|
140
|
-
const obs = {
|
|
141
|
-
image: null,
|
|
142
|
-
resolution: null,
|
|
143
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'if-not-present', converted: false, locallyResolvable: false },
|
|
144
|
-
};
|
|
145
|
-
const c = checkGondolinImage(obs);
|
|
146
|
-
assert.equal(c.pass, true); // NOT a hard failure
|
|
147
|
-
assert.match(c.detail, /will build on first reconcile/);
|
|
148
|
-
});
|
|
149
|
-
test('checkGondolinImage: oci_image with pull_policy never + not local + not converted FAILS', () => {
|
|
150
|
-
const obs = {
|
|
151
|
-
image: null,
|
|
152
|
-
resolution: null,
|
|
153
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'never', converted: false, locallyResolvable: false },
|
|
154
|
-
};
|
|
155
|
-
const c = checkGondolinImage(obs);
|
|
156
|
-
assert.equal(c.pass, false);
|
|
157
|
-
assert.match(c.detail, /not in the local container store/);
|
|
158
|
-
});
|
|
159
|
-
test('checkGondolinImage: oci_image with pull_policy never but locally resolvable is a SOFT pass', () => {
|
|
160
|
-
const obs = {
|
|
161
|
-
image: null,
|
|
162
|
-
resolution: null,
|
|
163
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'never', converted: false, locallyResolvable: true },
|
|
164
|
-
};
|
|
165
|
-
assert.equal(checkGondolinImage(obs).pass, true);
|
|
166
|
-
});
|
|
167
|
-
test('checkGondolinImage: a bad `image` escape hatch FAILS even when oci_image is converted', () => {
|
|
168
|
-
// Runtime precedence (resolveImagePath) boots `image` over the converted asset
|
|
169
|
-
// when both are set, so doctor must validate `image` and fail on an unpinned ref
|
|
170
|
-
// regardless of a present/converted oci_image — dispatch would boot the bad ref.
|
|
171
|
-
const obs = {
|
|
172
|
-
image: 'floating-name',
|
|
173
|
-
resolution: null,
|
|
174
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'always', converted: true, locallyResolvable: true },
|
|
175
|
-
};
|
|
176
|
-
const c = checkGondolinImage(obs);
|
|
177
|
-
assert.equal(c.pass, false);
|
|
178
|
-
assert.match(c.detail, /unpinned ref "floating-name"/);
|
|
179
|
-
});
|
|
180
|
-
test('checkGondolinImage: a pinned+unresolvable `image` FAILS even when oci_image is converted', () => {
|
|
181
|
-
const obs = {
|
|
182
|
-
image: 'does-not-exist:v1',
|
|
183
|
-
resolution: { resolved: false, source: null, detail: 'image not found in store' },
|
|
184
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'always', converted: true, locallyResolvable: true },
|
|
185
|
-
};
|
|
186
|
-
const c = checkGondolinImage(obs);
|
|
187
|
-
assert.equal(c.pass, false);
|
|
188
|
-
assert.match(c.detail, /pinned but unresolvable/);
|
|
189
|
-
});
|
|
190
|
-
test('checkGondolinImage: a valid `image` escape hatch wins when both are set', () => {
|
|
191
|
-
// Both configured + `image` resolvable → PASS on `image` (mirrors dispatch).
|
|
192
|
-
const obs = {
|
|
193
|
-
image: 'name:tag',
|
|
194
|
-
resolution: { resolved: true, source: 'ref', detail: 'ok' },
|
|
195
|
-
oci: { ref: 'ghcr.io/acme/agent:1', pullPolicy: 'always', converted: true, locallyResolvable: true },
|
|
196
|
-
};
|
|
197
|
-
const c = checkGondolinImage(obs);
|
|
198
|
-
assert.equal(c.pass, true);
|
|
199
|
-
assert.match(c.detail, /name:tag \(resolved: ref\)/);
|
|
200
|
-
});
|
|
201
|
-
// ─── checkGondolinImage: managed source (issue 224) ──────────────────────────
|
|
202
|
-
test('checkGondolinImage: managed source cached PASSES', () => {
|
|
203
|
-
const obs = {
|
|
204
|
-
image: null,
|
|
205
|
-
resolution: null,
|
|
206
|
-
oci: null,
|
|
207
|
-
managed: { supported: true, arch: 'x86_64', ref: 'symphony-agents:0.3.0-x86_64', cached: true },
|
|
208
|
-
};
|
|
209
|
-
const c = checkGondolinImage(obs);
|
|
210
|
-
assert.equal(c.pass, true);
|
|
211
|
-
assert.match(c.detail, /managed image symphony-agents:0.3.0-x86_64 \(fetched asset cached\)/);
|
|
212
|
-
});
|
|
213
|
-
test('checkGondolinImage: managed source not-yet-fetched is a soft PASS (one-time fetch)', () => {
|
|
214
|
-
const obs = {
|
|
215
|
-
image: null,
|
|
216
|
-
resolution: null,
|
|
217
|
-
oci: null,
|
|
218
|
-
managed: { supported: true, arch: 'x86_64', ref: 'symphony-agents:0.3.0-x86_64', cached: false },
|
|
219
|
-
};
|
|
220
|
-
const c = checkGondolinImage(obs);
|
|
221
|
-
assert.equal(c.pass, true);
|
|
222
|
-
assert.match(c.detail, /not yet fetched; will download on first reconcile/);
|
|
223
|
-
});
|
|
224
|
-
test('checkGondolinImage: managed source on an UNSUPPORTED arch FAILS', () => {
|
|
225
|
-
const obs = {
|
|
226
|
-
image: null,
|
|
227
|
-
resolution: null,
|
|
228
|
-
oci: null,
|
|
229
|
-
managed: { supported: false, arch: null, ref: null, cached: false },
|
|
230
|
-
};
|
|
231
|
-
const c = checkGondolinImage(obs);
|
|
232
|
-
assert.equal(c.pass, false);
|
|
233
|
-
assert.match(c.detail, /no published asset for this host architecture/);
|
|
234
|
-
});
|
|
235
|
-
test('checkGondolinImage: an explicit `image` still wins over a managed observation', () => {
|
|
236
|
-
const obs = {
|
|
237
|
-
image: 'name:tag',
|
|
238
|
-
resolution: { resolved: true, source: 'ref', detail: 'ok' },
|
|
239
|
-
oci: null,
|
|
240
|
-
managed: { supported: true, arch: 'x86_64', ref: 'symphony-agents:0.3.0-x86_64', cached: true },
|
|
241
|
-
};
|
|
242
|
-
const c = checkGondolinImage(obs);
|
|
243
|
-
assert.equal(c.pass, true);
|
|
244
|
-
assert.match(c.detail, /name:tag \(resolved: ref\)/);
|
|
245
|
-
});
|
|
246
|
-
// ─── checkTrackerRoot ────────────────────────────────────────────────────────
|
|
247
|
-
function tr(over = {}) {
|
|
248
|
-
return { root: '/data/tracker', exists: true, isDirectory: true, writable: true, ...over };
|
|
249
|
-
}
|
|
250
|
-
test('checkTrackerRoot: unset fails', () => {
|
|
251
|
-
const c = checkTrackerRoot(tr({ root: null }));
|
|
252
|
-
assert.equal(c.pass, false);
|
|
253
|
-
assert.equal(c.detail, 'not set');
|
|
254
|
-
});
|
|
255
|
-
test('checkTrackerRoot: missing path fails with mkdir fix', () => {
|
|
256
|
-
const c = checkTrackerRoot(tr({ exists: false }));
|
|
257
|
-
assert.equal(c.pass, false);
|
|
258
|
-
assert.match(c.detail, /not found: \/data\/tracker/);
|
|
259
|
-
assert.match(c.fix, /mkdir -p \/data\/tracker/);
|
|
260
|
-
});
|
|
261
|
-
test('checkTrackerRoot: file (not directory) fails', () => {
|
|
262
|
-
const c = checkTrackerRoot(tr({ isDirectory: false }));
|
|
263
|
-
assert.equal(c.pass, false);
|
|
264
|
-
assert.match(c.detail, /not a directory/);
|
|
265
|
-
});
|
|
266
|
-
test('checkTrackerRoot: not writable fails', () => {
|
|
267
|
-
const c = checkTrackerRoot(tr({ writable: false }));
|
|
268
|
-
assert.equal(c.pass, false);
|
|
269
|
-
assert.match(c.detail, /not writable/);
|
|
270
|
-
assert.match(c.fix, /grant write permission/);
|
|
271
|
-
});
|
|
272
|
-
test('checkTrackerRoot: exists+dir+writable passes', () => {
|
|
273
|
-
const c = checkTrackerRoot(tr());
|
|
274
|
-
assert.equal(c.pass, true);
|
|
275
|
-
assert.match(c.detail, /\/data\/tracker \(writable\)/);
|
|
276
|
-
});
|
|
277
|
-
// ─── checkDashboardPort ──────────────────────────────────────────────────────
|
|
278
|
-
test('checkDashboardPort: ephemeral (0) always passes', () => {
|
|
279
|
-
const obs = { port: 0, bindable: false, reason: 'ignored' };
|
|
280
|
-
const c = checkDashboardPort(obs);
|
|
281
|
-
assert.equal(c.pass, true);
|
|
282
|
-
assert.match(c.detail, /ephemeral/);
|
|
283
|
-
});
|
|
284
|
-
test('checkDashboardPort: bindable fixed port passes', () => {
|
|
285
|
-
const obs = { port: 8787, bindable: true, reason: '' };
|
|
286
|
-
const c = checkDashboardPort(obs);
|
|
287
|
-
assert.equal(c.pass, true);
|
|
288
|
-
assert.match(c.detail, /8787 \(bindable\)/);
|
|
289
|
-
});
|
|
290
|
-
test('checkDashboardPort: not bindable fails, includes reason', () => {
|
|
291
|
-
const obs = { port: 8787, bindable: false, reason: 'EADDRINUSE' };
|
|
292
|
-
const c = checkDashboardPort(obs);
|
|
293
|
-
assert.equal(c.pass, false);
|
|
294
|
-
assert.match(c.detail, /8787 not bindable \(EADDRINUSE\)/);
|
|
295
|
-
assert.match(c.fix, /free the port/);
|
|
296
|
-
});
|
|
297
|
-
test('checkDashboardPort: not bindable without reason omits the parenthetical', () => {
|
|
298
|
-
const obs = { port: 9999, bindable: false, reason: '' };
|
|
299
|
-
const c = checkDashboardPort(obs);
|
|
300
|
-
assert.equal(c.pass, false);
|
|
301
|
-
assert.equal(c.detail, '9999 not bindable');
|
|
302
|
-
});
|
|
303
|
-
// ─── doctorReportPassed + formatDoctorReport ─────────────────────────────────
|
|
304
|
-
test('doctorReportPassed: true iff all pass', () => {
|
|
305
|
-
assert.equal(doctorReportPassed([]), true);
|
|
306
|
-
assert.equal(doctorReportPassed([
|
|
307
|
-
{ key: 'a', pass: true, detail: '', fix: '' },
|
|
308
|
-
{ key: 'b', pass: true, detail: '', fix: '' },
|
|
309
|
-
]), true);
|
|
310
|
-
assert.equal(doctorReportPassed([
|
|
311
|
-
{ key: 'a', pass: true, detail: '', fix: '' },
|
|
312
|
-
{ key: 'b', pass: false, detail: '', fix: '' },
|
|
313
|
-
]), false);
|
|
314
|
-
});
|
|
315
|
-
test('formatDoctorReport: header, aligned keys, fix lines under failures, summary', () => {
|
|
316
|
-
const out = formatDoctorReport([
|
|
317
|
-
{ key: 'node', pass: true, detail: 'v23.6.0', fix: '' },
|
|
318
|
-
{ key: 'gondolin.image', pass: false, detail: 'not set', fix: 'set gondolin.image' },
|
|
319
|
-
]);
|
|
320
|
-
// header
|
|
321
|
-
assert.match(out, /^symphony doctor\n/);
|
|
322
|
-
// PASS/FAIL prefixes
|
|
323
|
-
assert.match(out, /PASS {2}node {2,}v23\.6\.0/);
|
|
324
|
-
assert.match(out, /FAIL {2}gondolin\.image {2}not set/);
|
|
325
|
-
// fix line only under the failure
|
|
326
|
-
assert.match(out, /\n {6}fix: set gondolin\.image\n/);
|
|
327
|
-
// summary tally
|
|
328
|
-
assert.match(out, /2 checks · 1 pass · 1 fail\n$/);
|
|
329
|
-
});
|
|
330
|
-
test('formatDoctorReport: no fix line when failing check has empty fix', () => {
|
|
331
|
-
const out = formatDoctorReport([{ key: 'x', pass: false, detail: 'd', fix: '' }]);
|
|
332
|
-
assert.doesNotMatch(out, /fix:/);
|
|
333
|
-
assert.match(out, /1 checks · 0 pass · 1 fail\n$/);
|
|
334
|
-
});
|
|
335
|
-
// ─── resolveHttpPort ─────────────────────────────────────────────────────────
|
|
336
|
-
test('resolveHttpPort: cli wins, then config, then ephemeral 0', () => {
|
|
337
|
-
assert.equal(resolveHttpPort(3000, 8787), 3000);
|
|
338
|
-
assert.equal(resolveHttpPort(null, 8787), 8787);
|
|
339
|
-
assert.equal(resolveHttpPort(null, null), 0);
|
|
340
|
-
// explicit 0 still pins ephemeral, not falls through
|
|
341
|
-
assert.equal(resolveHttpPort(0, 8787), 0);
|
|
342
|
-
});
|
|
343
|
-
// ─── formatStartupBanner ─────────────────────────────────────────────────────
|
|
344
|
-
function banner(over = {}) {
|
|
345
|
-
return {
|
|
346
|
-
version: '1.2.3',
|
|
347
|
-
workflowPath: '/repo/WORKFLOW.md',
|
|
348
|
-
boundPort: 8787,
|
|
349
|
-
host: '127.0.0.1',
|
|
350
|
-
trackerRoot: '/data/tracker',
|
|
351
|
-
workspaceRoot: '/data/workspaces',
|
|
352
|
-
logFile: '/data/logs/symphony.log',
|
|
353
|
-
adapter: 'claude/default',
|
|
354
|
-
image: 'cb875342',
|
|
355
|
-
...over,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
test('formatStartupBanner: renders all fields', () => {
|
|
359
|
-
const out = formatStartupBanner(banner());
|
|
360
|
-
assert.match(out, /^symphony 1\.2\.3\n/);
|
|
361
|
-
assert.match(out, /workflow {6}\/repo\/WORKFLOW\.md/);
|
|
362
|
-
assert.match(out, /tracker root {2}\/data\/tracker/);
|
|
363
|
-
assert.match(out, /workspace {5}\/data\/workspaces/);
|
|
364
|
-
assert.match(out, /dashboard {5}http:\/\/127\.0\.0\.1:8787\//);
|
|
365
|
-
assert.match(out, /log file {6}\/data\/logs\/symphony\.log/);
|
|
366
|
-
assert.match(out, /adapter {7}claude\/default/);
|
|
367
|
-
assert.match(out, /image {9}cb875342/);
|
|
368
|
-
assert.ok(out.endsWith('\n'));
|
|
369
|
-
});
|
|
370
|
-
test('formatStartupBanner: names the log file and dashboard URL (the operator orientation points)', () => {
|
|
371
|
-
const out = formatStartupBanner(banner());
|
|
372
|
-
assert.match(out, /log file {6}\/data\/logs\/symphony\.log/);
|
|
373
|
-
assert.match(out, /dashboard {5}http:\/\/127\.0\.0\.1:8787\//);
|
|
374
|
-
});
|
|
375
|
-
test('formatStartupBanner: honours a SYMPHONY_LOG_FILE override path', () => {
|
|
376
|
-
// The shell resolves SYMPHONY_LOG_FILE to an absolute path and hands it in; the
|
|
377
|
-
// pure banner just has to print whatever resolved path it's given.
|
|
378
|
-
const out = formatStartupBanner(banner({ logFile: '/var/log/symphony-override.log' }));
|
|
379
|
-
assert.match(out, /log file {6}\/var\/log\/symphony-override\.log/);
|
|
380
|
-
});
|
|
381
|
-
test('formatStartupBanner: null logFile renders (disabled)', () => {
|
|
382
|
-
// SYMPHONY_LOG_FILE="" disables file logging → resolveLogFile returns null.
|
|
383
|
-
assert.match(formatStartupBanner(banner({ logFile: null })), /log file {6}\(disabled\)/);
|
|
384
|
-
});
|
|
385
|
-
test('formatStartupBanner: wildcard host maps to localhost', () => {
|
|
386
|
-
assert.match(formatStartupBanner(banner({ host: '0.0.0.0' })), /http:\/\/localhost:8787\//);
|
|
387
|
-
assert.match(formatStartupBanner(banner({ host: '::' })), /http:\/\/localhost:8787\//);
|
|
388
|
-
});
|
|
389
|
-
test('formatStartupBanner: null trackerRoot/workspaceRoot/image render <unset>', () => {
|
|
390
|
-
const out = formatStartupBanner(banner({ trackerRoot: null, workspaceRoot: null, image: null }));
|
|
391
|
-
assert.match(out, /tracker root {2}<unset>/);
|
|
392
|
-
assert.match(out, /workspace {5}<unset>/);
|
|
393
|
-
assert.match(out, /image {9}<unset>/);
|
|
394
|
-
});
|
|
395
|
-
//# sourceMappingURL=checks.test.js.map
|