smol-symphony 0.2.0 → 0.3.1
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/bin/symphony.js +22 -786
- package/dist/bin/symphony.js.map +1 -1
- package/dist/core/actions/context.js +109 -0
- package/dist/core/actions/context.js.map +1 -0
- package/dist/{actions/parsing.js → core/actions/parse.js} +33 -114
- package/dist/core/actions/parse.js.map +1 -0
- package/dist/core/actions/plan.js +197 -0
- package/dist/core/actions/plan.js.map +1 -0
- package/dist/core/actions/predicates.js +111 -0
- package/dist/core/actions/predicates.js.map +1 -0
- package/dist/core/actions/run-fold.js +248 -0
- package/dist/core/actions/run-fold.js.map +1 -0
- package/dist/core/actions/template.js +118 -0
- package/dist/core/actions/template.js.map +1 -0
- package/dist/core/cli/args.js +116 -0
- package/dist/core/cli/args.js.map +1 -0
- package/dist/core/coerce.js +75 -0
- package/dist/core/coerce.js.map +1 -0
- package/dist/core/credential/account-id.js +20 -0
- package/dist/core/credential/account-id.js.map +1 -0
- package/dist/core/credential/adapter-config.js +136 -0
- package/dist/core/credential/adapter-config.js.map +1 -0
- package/dist/core/credential/availability.js +98 -0
- package/dist/core/credential/availability.js.map +1 -0
- package/dist/core/credential/extract.js +228 -0
- package/dist/core/credential/extract.js.map +1 -0
- package/dist/core/credential/fake-creds.js +171 -0
- package/dist/core/credential/fake-creds.js.map +1 -0
- package/dist/core/credential/identity.js +125 -0
- package/dist/core/credential/identity.js.map +1 -0
- package/dist/core/credential/shape.js +230 -0
- package/dist/core/credential/shape.js.map +1 -0
- package/dist/core/credential/strings.js +15 -0
- package/dist/core/credential/strings.js.map +1 -0
- package/dist/core/doctor/checks.js +303 -0
- package/dist/core/doctor/checks.js.map +1 -0
- package/dist/core/git/result.js +107 -0
- package/dist/core/git/result.js.map +1 -0
- package/dist/core/http/decisions.js +225 -0
- package/dist/core/http/decisions.js.map +1 -0
- package/dist/{http.js → core/http/render.js} +472 -738
- package/dist/core/http/render.js.map +1 -0
- package/dist/{http-handlers.js → core/http/routes.js} +52 -87
- package/dist/core/http/routes.js.map +1 -0
- package/dist/core/http/views.js +181 -0
- package/dist/core/http/views.js.map +1 -0
- package/dist/core/image/managed-image.js +95 -0
- package/dist/core/image/managed-image.js.map +1 -0
- package/dist/core/issue/file.js +149 -0
- package/dist/core/issue/file.js.map +1 -0
- package/dist/core/issue/parse.js +210 -0
- package/dist/core/issue/parse.js.map +1 -0
- package/dist/core/mcp/dispatch.js +239 -0
- package/dist/core/mcp/dispatch.js.map +1 -0
- package/dist/core/mcp/post-move.js +92 -0
- package/dist/core/mcp/post-move.js.map +1 -0
- package/dist/core/mcp/protocol.js +293 -0
- package/dist/core/mcp/protocol.js.map +1 -0
- package/dist/core/mcp/url.js +162 -0
- package/dist/core/mcp/url.js.map +1 -0
- package/dist/core/path.js +63 -0
- package/dist/core/path.js.map +1 -0
- package/dist/core/reconcile/image-decide.js +48 -0
- package/dist/core/reconcile/image-decide.js.map +1 -0
- package/dist/core/reconcile/ledger.js +142 -0
- package/dist/core/reconcile/ledger.js.map +1 -0
- package/dist/core/reconcile/pr-classify.js +62 -0
- package/dist/core/reconcile/pr-classify.js.map +1 -0
- package/dist/{reconciler → core/reconcile}/pr-decide.js +25 -12
- package/dist/core/reconcile/pr-decide.js.map +1 -0
- package/dist/core/reconcile/pr-loop.js +161 -0
- package/dist/core/reconcile/pr-loop.js.map +1 -0
- package/dist/core/reconcile/pr-notes.js +35 -0
- package/dist/core/reconcile/pr-notes.js.map +1 -0
- package/dist/core/reconcile/vm-decide.js +70 -0
- package/dist/core/reconcile/vm-decide.js.map +1 -0
- package/dist/core/reconcile/vm-reap.js +207 -0
- package/dist/core/reconcile/vm-reap.js.map +1 -0
- package/dist/core/reconcile/workspace-decide.js +162 -0
- package/dist/core/reconcile/workspace-decide.js.map +1 -0
- package/dist/core/runlog/summary.js +231 -0
- package/dist/core/runlog/summary.js.map +1 -0
- package/dist/core/runner/dispatch-config.js +95 -0
- package/dist/core/runner/dispatch-config.js.map +1 -0
- package/dist/core/runner/injection.js +61 -0
- package/dist/core/runner/injection.js.map +1 -0
- package/dist/core/runner/mise.js +210 -0
- package/dist/core/runner/mise.js.map +1 -0
- package/dist/core/runner/prompt.js +720 -0
- package/dist/core/runner/prompt.js.map +1 -0
- package/dist/core/runner/turn.js +242 -0
- package/dist/core/runner/turn.js.map +1 -0
- package/dist/core/runner/vm-plan.js +390 -0
- package/dist/core/runner/vm-plan.js.map +1 -0
- package/dist/core/schedule/admission.js +123 -0
- package/dist/core/schedule/admission.js.map +1 -0
- package/dist/core/schedule/circuit-breaker.js +111 -0
- package/dist/core/schedule/circuit-breaker.js.map +1 -0
- package/dist/core/schedule/eligibility.js +83 -0
- package/dist/core/schedule/eligibility.js.map +1 -0
- package/dist/core/schedule/reconcile-issue.js +82 -0
- package/dist/core/schedule/reconcile-issue.js.map +1 -0
- package/dist/core/schedule/retry.js +96 -0
- package/dist/core/schedule/retry.js.map +1 -0
- package/dist/core/schedule/sleep-cycle.js +133 -0
- package/dist/core/schedule/sleep-cycle.js.map +1 -0
- package/dist/core/schedule/slots.js +124 -0
- package/dist/core/schedule/slots.js.map +1 -0
- package/dist/core/schedule/tick.js +553 -0
- package/dist/core/schedule/tick.js.map +1 -0
- package/dist/core/schedule/token-fold.js +181 -0
- package/dist/core/schedule/token-fold.js.map +1 -0
- package/dist/core/state-resolve.js +86 -0
- package/dist/core/state-resolve.js.map +1 -0
- package/dist/core/vm-guards.js +278 -0
- package/dist/core/vm-guards.js.map +1 -0
- package/dist/core/workflow/derive.js +107 -0
- package/dist/core/workflow/derive.js.map +1 -0
- package/dist/core/workflow/parse.js +687 -0
- package/dist/core/workflow/parse.js.map +1 -0
- package/dist/core/workflow/prompt-probe.js +78 -0
- package/dist/core/workflow/prompt-probe.js.map +1 -0
- package/dist/core/workflow/validate.js +189 -0
- package/dist/core/workflow/validate.js.map +1 -0
- package/dist/core/workspace-key.js +19 -0
- package/dist/core/workspace-key.js.map +1 -0
- package/dist/shell/actions-runner.js +356 -0
- package/dist/shell/actions-runner.js.map +1 -0
- package/dist/shell/adapter/adapter-registry.js +45 -0
- package/dist/shell/adapter/adapter-registry.js.map +1 -0
- package/dist/shell/adapter/clock-random.js +96 -0
- package/dist/shell/adapter/clock-random.js.map +1 -0
- package/dist/shell/adapter/gondolin-dispatch-helpers.js +158 -0
- package/dist/shell/adapter/gondolin-dispatch-helpers.js.map +1 -0
- package/dist/shell/adapter/gondolin-dispatch.js +385 -0
- package/dist/shell/adapter/gondolin-dispatch.js.map +1 -0
- package/dist/shell/adapter/gondolin-image-converter.js +233 -0
- package/dist/shell/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/shell/adapter/gondolin-image-fetch.js +180 -0
- package/dist/shell/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/shell/adapter/launcher-asset.js +57 -0
- package/dist/shell/adapter/launcher-asset.js.map +1 -0
- package/dist/shell/adapter/mise-config-asset.js +65 -0
- package/dist/shell/adapter/mise-config-asset.js.map +1 -0
- package/dist/shell/adapter/workflow-loader.js +304 -0
- package/dist/shell/adapter/workflow-loader.js.map +1 -0
- package/dist/shell/cli/doctor.js +268 -0
- package/dist/shell/cli/doctor.js.map +1 -0
- package/dist/shell/effect-interpreter-families.js +314 -0
- package/dist/shell/effect-interpreter-families.js.map +1 -0
- package/dist/shell/effect-interpreter.js +29 -0
- package/dist/shell/effect-interpreter.js.map +1 -0
- package/dist/shell/interp/acp-frame.js +137 -0
- package/dist/shell/interp/acp-frame.js.map +1 -0
- package/dist/shell/interp/acp-ws-conn.js +320 -0
- package/dist/shell/interp/acp-ws-conn.js.map +1 -0
- package/dist/shell/interp/acp-ws-frames.js +159 -0
- package/dist/shell/interp/acp-ws-frames.js.map +1 -0
- package/dist/shell/interp/acp-ws.js +197 -0
- package/dist/shell/interp/acp-ws.js.map +1 -0
- package/dist/shell/interp/acp.js +319 -0
- package/dist/shell/interp/acp.js.map +1 -0
- package/dist/shell/interp/credential-defaults.js +128 -0
- package/dist/shell/interp/credential-defaults.js.map +1 -0
- package/dist/shell/interp/credential-hooks.js +149 -0
- package/dist/shell/interp/credential-hooks.js.map +1 -0
- package/dist/shell/interp/credential-registry.js +226 -0
- package/dist/shell/interp/credential-registry.js.map +1 -0
- package/dist/shell/interp/credential.js +103 -0
- package/dist/shell/interp/credential.js.map +1 -0
- package/dist/shell/interp/gh.js +163 -0
- package/dist/shell/interp/gh.js.map +1 -0
- package/dist/shell/interp/git.js +28 -0
- package/dist/shell/interp/git.js.map +1 -0
- package/dist/shell/interp/log.js +213 -0
- package/dist/shell/interp/log.js.map +1 -0
- package/dist/shell/interp/process.js +178 -0
- package/dist/shell/interp/process.js.map +1 -0
- package/dist/shell/interp/runlog.js +193 -0
- package/dist/shell/interp/runlog.js.map +1 -0
- package/dist/shell/interp/timer.js +64 -0
- package/dist/shell/interp/timer.js.map +1 -0
- package/dist/shell/interp/tracker-disk.js +99 -0
- package/dist/shell/interp/tracker-disk.js.map +1 -0
- package/dist/shell/interp/tracker-parse.js +71 -0
- package/dist/shell/interp/tracker-parse.js.map +1 -0
- package/dist/shell/interp/tracker-scan.js +238 -0
- package/dist/shell/interp/tracker-scan.js.map +1 -0
- package/dist/shell/interp/tracker-write.js +91 -0
- package/dist/shell/interp/tracker-write.js.map +1 -0
- package/dist/shell/interp/tracker.js +41 -0
- package/dist/shell/interp/tracker.js.map +1 -0
- package/dist/shell/interp/tty.js +48 -0
- package/dist/shell/interp/tty.js.map +1 -0
- package/dist/shell/interp/vm.js +199 -0
- package/dist/shell/interp/vm.js.map +1 -0
- package/dist/shell/interp/workspace.js +310 -0
- package/dist/shell/interp/workspace.js.map +1 -0
- package/dist/shell/main-acp.js +78 -0
- package/dist/shell/main-acp.js.map +1 -0
- package/dist/shell/main-adapters.js +222 -0
- package/dist/shell/main-adapters.js.map +1 -0
- package/dist/shell/main-credential.js +122 -0
- package/dist/shell/main-credential.js.map +1 -0
- package/dist/shell/main-doctor.js +22 -0
- package/dist/shell/main-doctor.js.map +1 -0
- package/dist/shell/main-entry.js +46 -0
- package/dist/shell/main-entry.js.map +1 -0
- package/dist/shell/main-http-csrf.js +45 -0
- package/dist/shell/main-http-csrf.js.map +1 -0
- package/dist/shell/main-http-handler.js +389 -0
- package/dist/shell/main-http-handler.js.map +1 -0
- package/dist/shell/main-http-mcp.js +122 -0
- package/dist/shell/main-http-mcp.js.map +1 -0
- package/dist/shell/main-http-views.js +253 -0
- package/dist/shell/main-http-views.js.map +1 -0
- package/dist/shell/main-http.js +76 -0
- package/dist/shell/main-http.js.map +1 -0
- package/dist/shell/main-loops.js +130 -0
- package/dist/shell/main-loops.js.map +1 -0
- package/dist/shell/main-mcp.js +129 -0
- package/dist/shell/main-mcp.js.map +1 -0
- package/dist/shell/main-orchestrator.js +120 -0
- package/dist/shell/main-orchestrator.js.map +1 -0
- package/dist/shell/main-preflight.js +43 -0
- package/dist/shell/main-preflight.js.map +1 -0
- package/dist/shell/main-reconcilers-helpers.js +244 -0
- package/dist/shell/main-reconcilers-helpers.js.map +1 -0
- package/dist/shell/main-reconcilers-pr.js +148 -0
- package/dist/shell/main-reconcilers-pr.js.map +1 -0
- package/dist/shell/main-reconcilers.js +225 -0
- package/dist/shell/main-reconcilers.js.map +1 -0
- package/dist/shell/main-runner.js +355 -0
- package/dist/shell/main-runner.js.map +1 -0
- package/dist/shell/main-scaffold.js +116 -0
- package/dist/shell/main-scaffold.js.map +1 -0
- package/dist/shell/main-shutdown.js +115 -0
- package/dist/shell/main-shutdown.js.map +1 -0
- package/dist/shell/main-startup.js +48 -0
- package/dist/shell/main-startup.js.map +1 -0
- package/dist/shell/main-substrates.js +43 -0
- package/dist/shell/main-substrates.js.map +1 -0
- package/dist/shell/main.js +385 -0
- package/dist/shell/main.js.map +1 -0
- package/dist/shell/orchestrator-feedback.js +69 -0
- package/dist/shell/orchestrator-feedback.js.map +1 -0
- package/dist/shell/orchestrator-image.js +167 -0
- package/dist/shell/orchestrator-image.js.map +1 -0
- package/dist/shell/orchestrator-loop.js +468 -0
- package/dist/shell/orchestrator-loop.js.map +1 -0
- package/dist/shell/orchestrator-reconcile.js +36 -0
- package/dist/shell/orchestrator-reconcile.js.map +1 -0
- package/dist/shell/reconciler-loop.js +228 -0
- package/dist/shell/reconciler-loop.js.map +1 -0
- package/dist/shell/runner-loop-turn.js +301 -0
- package/dist/shell/runner-loop-turn.js.map +1 -0
- package/dist/shell/runner-loop.js +338 -0
- package/dist/shell/runner-loop.js.map +1 -0
- package/dist/shell/server/http.js +208 -0
- package/dist/shell/server/http.js.map +1 -0
- package/dist/shell/server/mcp-runtime-effects.js +237 -0
- package/dist/shell/server/mcp-runtime-effects.js.map +1 -0
- package/dist/shell/server/mcp-runtime.js +99 -0
- package/dist/shell/server/mcp-runtime.js.map +1 -0
- package/dist/shell/workspace-key.js +14 -0
- package/dist/shell/workspace-key.js.map +1 -0
- package/dist/types/acp.js +8 -0
- package/dist/types/acp.js.map +1 -0
- package/dist/types/actions/plan.js +6 -0
- package/dist/types/actions/plan.js.map +1 -0
- package/dist/types/actions/predicates.js +6 -0
- package/dist/types/actions/predicates.js.map +1 -0
- package/dist/types/actions/run-fold.js +8 -0
- package/dist/types/actions/run-fold.js.map +1 -0
- package/dist/types/actions.js +7 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/adapter/clock-random.js +4 -0
- package/dist/types/adapter/clock-random.js.map +1 -0
- package/dist/types/adapter/gondolin-image-converter.js +5 -0
- package/dist/types/adapter/gondolin-image-converter.js.map +1 -0
- package/dist/types/adapter/gondolin-image-fetch.js +5 -0
- package/dist/types/adapter/gondolin-image-fetch.js.map +1 -0
- package/dist/types/adapter/workflow-loader.js +4 -0
- package/dist/types/adapter/workflow-loader.js.map +1 -0
- package/dist/types/cli/args.js +8 -0
- package/dist/types/cli/args.js.map +1 -0
- package/dist/types/config.js +8 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/credential-interp.js +6 -0
- package/dist/types/credential-interp.js.map +1 -0
- package/dist/types/credentials.js +10 -0
- package/dist/types/credentials.js.map +1 -0
- package/dist/types/doctor.js +7 -0
- package/dist/types/doctor.js.map +1 -0
- package/dist/types/domain.js +7 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/effect.js +15 -0
- package/dist/types/effect.js.map +1 -0
- package/dist/types/errors.js +39 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/http/decisions.js +6 -0
- package/dist/types/http/decisions.js.map +1 -0
- package/dist/types/http/render.js +10 -0
- package/dist/types/http/render.js.map +1 -0
- package/dist/types/http/views.js +6 -0
- package/dist/types/http/views.js.map +1 -0
- package/dist/types/http.js +9 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/image/managed-image.js +7 -0
- package/dist/types/image/managed-image.js.map +1 -0
- package/dist/types/interp/effect-interpreter.js +8 -0
- package/dist/types/interp/effect-interpreter.js.map +1 -0
- package/dist/types/interp/tracker.js +7 -0
- package/dist/types/interp/tracker.js.map +1 -0
- package/dist/types/issue/file.js +6 -0
- package/dist/types/issue/file.js.map +1 -0
- package/dist/types/issue/parse.js +8 -0
- package/dist/types/issue/parse.js.map +1 -0
- package/dist/types/main-acp.js +13 -0
- package/dist/types/main-acp.js.map +1 -0
- package/dist/types/main-adapters.js +5 -0
- package/dist/types/main-adapters.js.map +1 -0
- package/dist/types/main-credential.js +21 -0
- package/dist/types/main-credential.js.map +1 -0
- package/dist/types/main-doctor.js +6 -0
- package/dist/types/main-doctor.js.map +1 -0
- package/dist/types/main-http-handler.js +12 -0
- package/dist/types/main-http-handler.js.map +1 -0
- package/dist/types/main-http.js +5 -0
- package/dist/types/main-http.js.map +1 -0
- package/dist/types/main-loops.js +5 -0
- package/dist/types/main-loops.js.map +1 -0
- package/dist/types/main-mcp.js +12 -0
- package/dist/types/main-mcp.js.map +1 -0
- package/dist/types/main-orchestrator.js +5 -0
- package/dist/types/main-orchestrator.js.map +1 -0
- package/dist/types/main-reconcilers.js +11 -0
- package/dist/types/main-reconcilers.js.map +1 -0
- package/dist/types/main-runner.js +13 -0
- package/dist/types/main-runner.js.map +1 -0
- package/dist/types/main-startup.js +5 -0
- package/dist/types/main-startup.js.map +1 -0
- package/dist/types/main-substrates.js +5 -0
- package/dist/types/main-substrates.js.map +1 -0
- package/dist/types/mcp/dispatch.js +4 -0
- package/dist/types/mcp/dispatch.js.map +1 -0
- package/dist/types/mcp/post-move.js +7 -0
- package/dist/types/mcp/post-move.js.map +1 -0
- package/dist/types/mcp.js +9 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/ports.js +12 -0
- package/dist/types/ports.js.map +1 -0
- package/dist/types/reconcile/image-decide.js +5 -0
- package/dist/types/reconcile/image-decide.js.map +1 -0
- package/dist/types/reconcile/ledger.js +7 -0
- package/dist/types/reconcile/ledger.js.map +1 -0
- package/dist/types/reconcile/pr-loop.js +8 -0
- package/dist/types/reconcile/pr-loop.js.map +1 -0
- package/dist/types/reconcile/vm-reap.js +8 -0
- package/dist/types/reconcile/vm-reap.js.map +1 -0
- package/dist/types/reconcile/workspace-decide.js +7 -0
- package/dist/types/reconcile/workspace-decide.js.map +1 -0
- package/dist/types/reconcile.js +9 -0
- package/dist/types/reconcile.js.map +1 -0
- package/dist/types/runlog.js +7 -0
- package/dist/types/runlog.js.map +1 -0
- package/dist/types/runner/actions-runner.js +12 -0
- package/dist/types/runner/actions-runner.js.map +1 -0
- package/dist/types/runner/gondolin-dispatch.js +5 -0
- package/dist/types/runner/gondolin-dispatch.js.map +1 -0
- package/dist/types/runner/injection.js +6 -0
- package/dist/types/runner/injection.js.map +1 -0
- package/dist/types/runner/runner-loop.js +5 -0
- package/dist/types/runner/runner-loop.js.map +1 -0
- package/dist/types/runner/turn.js +4 -0
- package/dist/types/runner/turn.js.map +1 -0
- package/dist/types/runner/vm-plan.js +4 -0
- package/dist/types/runner/vm-plan.js.map +1 -0
- package/dist/types/runtime.js +9 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/schedule/admission.js +7 -0
- package/dist/types/schedule/admission.js.map +1 -0
- package/dist/types/schedule/circuit-breaker.js +2 -0
- package/dist/types/schedule/circuit-breaker.js.map +1 -0
- package/dist/types/schedule/eligibility.js +9 -0
- package/dist/types/schedule/eligibility.js.map +1 -0
- package/dist/types/schedule/orchestrator-loop.js +10 -0
- package/dist/types/schedule/orchestrator-loop.js.map +1 -0
- package/dist/types/schedule/sleep-cycle.js +4 -0
- package/dist/types/schedule/sleep-cycle.js.map +1 -0
- package/dist/types/schedule/slots.js +8 -0
- package/dist/types/schedule/slots.js.map +1 -0
- package/dist/types/schedule/tick.js +9 -0
- package/dist/types/schedule/tick.js.map +1 -0
- package/dist/types/server/mcp-runtime.js +8 -0
- package/dist/types/server/mcp-runtime.js.map +1 -0
- package/dist/types/workflow/parse.js +4 -0
- package/dist/types/workflow/parse.js.map +1 -0
- package/package.json +22 -10
- 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/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
package/dist/issues.js
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
// File-creation helpers shared between the HTTP dashboard's POST /api/v1/issues handler
|
|
2
|
-
// and the MCP propose_issue tool. Both write a Markdown file with YAML front matter into
|
|
3
|
-
// `<tracker.root>/<state>/<identifier>.md`; this module owns the slug + collision logic
|
|
4
|
-
// and the front-matter serializer so the two callers can't drift.
|
|
5
|
-
//
|
|
6
|
-
// State-of-file shape is the local-tracker contract: see src/trackers/local.ts for the
|
|
7
|
-
// reader side.
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import { sanitizeWorkspaceKey } from './util/workspace-key.js';
|
|
10
|
-
import { realClock, isoFromClock } from './util/clock.js';
|
|
11
|
-
import { realIssueFs } from './util/fs-issues.js';
|
|
12
|
-
/**
|
|
13
|
-
* Thrown by `pickHoldingState` when no `holding`-role state is declared. The
|
|
14
|
-
* workflow parser refuses configs without one, so reaching this path implies a
|
|
15
|
-
* programmer error or a hand-mutated config — callers that surface this to
|
|
16
|
-
* agents (the MCP propose_issue tool, the HTTP triage handler) should produce
|
|
17
|
-
* a structured `no_holding_state` error rather than a generic message.
|
|
18
|
-
*/
|
|
19
|
-
export class NoHoldingStateError extends Error {
|
|
20
|
-
constructor() {
|
|
21
|
-
super('no holding state declared in workflow');
|
|
22
|
-
this.name = 'NoHoldingStateError';
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* First declared `holding` state in declaration order. Shared between the MCP
|
|
27
|
-
* `propose_issue` tool (where new agent-proposed issues land) and the HTTP
|
|
28
|
-
* triage approve/discard handler (where the from-state is implied). Throws
|
|
29
|
-
* `NoHoldingStateError` when no holding state is declared.
|
|
30
|
-
*/
|
|
31
|
-
export function pickHoldingState(states) {
|
|
32
|
-
for (const [name, cfg] of Object.entries(states)) {
|
|
33
|
-
if (cfg.role === 'holding')
|
|
34
|
-
return name;
|
|
35
|
-
}
|
|
36
|
-
throw new NoHoldingStateError();
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Names of every `role: active` state in declaration order. Used by the
|
|
40
|
-
* orchestrator's eligibility/reconciliation paths, the local tracker's
|
|
41
|
-
* candidate filter, and the HTTP dashboard's default-state lookup.
|
|
42
|
-
*/
|
|
43
|
-
export function activeStateNames(states) {
|
|
44
|
-
const out = [];
|
|
45
|
-
for (const [name, cfg] of Object.entries(states)) {
|
|
46
|
-
if (cfg.role === 'active')
|
|
47
|
-
out.push(name);
|
|
48
|
-
}
|
|
49
|
-
return out;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Names of every `role: terminal` state in declaration order. Mirror of
|
|
53
|
-
* `activeStateNames` for the terminal role — used by the orchestrator's
|
|
54
|
-
* reconcile/eligibility/cleanup paths and by the local tracker.
|
|
55
|
-
*/
|
|
56
|
-
export function terminalStateNames(states) {
|
|
57
|
-
const out = [];
|
|
58
|
-
for (const [name, cfg] of Object.entries(states)) {
|
|
59
|
-
if (cfg.role === 'terminal')
|
|
60
|
-
out.push(name);
|
|
61
|
-
}
|
|
62
|
-
return out;
|
|
63
|
-
}
|
|
64
|
-
// Walk every state directory under `trackerRoot` and return the set of issue identifiers
|
|
65
|
-
// (filename stem) currently present. Used to pick the next free numeric identifier —
|
|
66
|
-
// checking only the target state directory would let a `Done/3.md` silently shadow a
|
|
67
|
-
// freshly created `Todo/3.md` once it moves out of Todo.
|
|
68
|
-
export async function collectExistingIdentifiers(trackerRoot, fs = realIssueFs) {
|
|
69
|
-
const out = new Set();
|
|
70
|
-
let entries;
|
|
71
|
-
try {
|
|
72
|
-
entries = await fs.readdir(trackerRoot);
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return out;
|
|
76
|
-
}
|
|
77
|
-
for (const stateDir of entries) {
|
|
78
|
-
const dirPath = path.join(trackerRoot, stateDir);
|
|
79
|
-
let st;
|
|
80
|
-
try {
|
|
81
|
-
st = await fs.stat(dirPath);
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (!st.isDirectory())
|
|
87
|
-
continue;
|
|
88
|
-
let files;
|
|
89
|
-
try {
|
|
90
|
-
files = await fs.readdir(dirPath);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
for (const f of files) {
|
|
96
|
-
if (f.endsWith('.md'))
|
|
97
|
-
out.add(f.slice(0, -3));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return out;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Used by the dashboard form and the MCP propose_issue tool. The local tracker stores
|
|
104
|
-
* issues at `<tracker.root>/<state>/<identifier>.md` with YAML front matter; identifier
|
|
105
|
-
* sanitization re-uses the workspace key rules so the file name is always safe across
|
|
106
|
-
* the rest of the orchestrator.
|
|
107
|
-
*/
|
|
108
|
-
export async function writeIssueFile(input) {
|
|
109
|
-
const fs = input.fs ?? realIssueFs;
|
|
110
|
-
const stateDir = path.join(input.trackerRoot, input.state);
|
|
111
|
-
await fs.mkdir(stateDir, { recursive: true });
|
|
112
|
-
let ident;
|
|
113
|
-
let filePath;
|
|
114
|
-
const explicit = (input.identifier ?? '').trim();
|
|
115
|
-
if (explicit.length > 0) {
|
|
116
|
-
ident = sanitizeWorkspaceKey(explicit);
|
|
117
|
-
if (!ident)
|
|
118
|
-
throw new Error('identifier must contain at least one allowed character');
|
|
119
|
-
filePath = path.join(stateDir, `${ident}.md`);
|
|
120
|
-
try {
|
|
121
|
-
await fs.stat(filePath);
|
|
122
|
-
throw new Error(`issue ${ident} already exists at ${filePath}`);
|
|
123
|
-
}
|
|
124
|
-
catch (err) {
|
|
125
|
-
if (err.code !== 'ENOENT')
|
|
126
|
-
throw err;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
// No identifier supplied → pick the next free numeric identifier by counting up from 1
|
|
131
|
-
// until we find a basename that doesn't already exist in any state directory. Title-slug
|
|
132
|
-
// files from prior cycles are inert here: only numeric basenames consume IDs, so legacy
|
|
133
|
-
// `add-changelog.md` files coexist with the numeric scheme without claiming a slot.
|
|
134
|
-
const existing = await collectExistingIdentifiers(input.trackerRoot, fs);
|
|
135
|
-
let n = 1;
|
|
136
|
-
while (existing.has(String(n)))
|
|
137
|
-
n += 1;
|
|
138
|
-
ident = String(n);
|
|
139
|
-
filePath = path.join(stateDir, `${ident}.md`);
|
|
140
|
-
}
|
|
141
|
-
const now = isoFromClock(input.now ?? realClock);
|
|
142
|
-
const fm = {
|
|
143
|
-
id: ident,
|
|
144
|
-
identifier: ident,
|
|
145
|
-
title: input.title,
|
|
146
|
-
created_at: now,
|
|
147
|
-
updated_at: now,
|
|
148
|
-
};
|
|
149
|
-
if (typeof input.priority === 'number')
|
|
150
|
-
fm.priority = input.priority;
|
|
151
|
-
if (input.labels && input.labels.length > 0)
|
|
152
|
-
fm.labels = input.labels;
|
|
153
|
-
if (input.blocked_by && input.blocked_by.length > 0)
|
|
154
|
-
fm.blocked_by = input.blocked_by;
|
|
155
|
-
if (input.extra_front_matter) {
|
|
156
|
-
for (const [k, v] of Object.entries(input.extra_front_matter)) {
|
|
157
|
-
fm[k] = v;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const yamlLines = ['---'];
|
|
161
|
-
for (const [k, v] of Object.entries(fm)) {
|
|
162
|
-
if (Array.isArray(v)) {
|
|
163
|
-
yamlLines.push(`${k}: [${v.map((x) => JSON.stringify(x)).join(', ')}]`);
|
|
164
|
-
}
|
|
165
|
-
else if (typeof v === 'string') {
|
|
166
|
-
yamlLines.push(`${k}: ${JSON.stringify(v)}`);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
yamlLines.push(`${k}: ${String(v)}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
yamlLines.push('---', '');
|
|
173
|
-
const body = (input.description ?? '').trim();
|
|
174
|
-
const content = yamlLines.join('\n') + (body.length > 0 ? body + '\n' : '');
|
|
175
|
-
await fs.writeFile(filePath, content, 'utf8');
|
|
176
|
-
return { path: filePath, identifier: ident, state: input.state };
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=issues.js.map
|
package/dist/issues.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../src/issues.ts"],"names":[],"mappings":"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"}
|
package/dist/logging.js
DELETED
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
// Structured key=value logging per SPEC.md §9.1.
|
|
2
|
-
// Sink failures do not crash the orchestrator (§9.2).
|
|
3
|
-
//
|
|
4
|
-
// Persistent file sink: when `setLogFile(path)` has been called, each emitted
|
|
5
|
-
// line is appended to that file. The on-disk format matches the stderr format
|
|
6
|
-
// (one `key=value ...` line per event) so an agent inspecting logs later sees
|
|
7
|
-
// the same shape. File-sink failures are swallowed (one stderr warning on first
|
|
8
|
-
// failure, then silent) per §9.2 so a full disk or permission error can never
|
|
9
|
-
// crash the orchestrator.
|
|
10
|
-
//
|
|
11
|
-
// Console routing (issue 118): when a file sink is active, structured lines go
|
|
12
|
-
// to the file ONLY — the operator console stays clean and shows just the
|
|
13
|
-
// intentional stdout banner. stderr remains the fallback when no file sink is
|
|
14
|
-
// configured (nothing is silently lost in a no-log-file setup), and
|
|
15
|
-
// `setLogVerbose(true)` (the `--verbose` flag) forces lines back onto stderr
|
|
16
|
-
// alongside the file for interactive debugging.
|
|
17
|
-
import { closeSync, createWriteStream, mkdirSync, openSync } from 'node:fs';
|
|
18
|
-
import path from 'node:path';
|
|
19
|
-
const ENV_LEVEL = (process.env.SYMPHONY_LOG_LEVEL ?? 'info').toLowerCase();
|
|
20
|
-
const LEVEL_RANK = { debug: 10, info: 20, warn: 30, error: 40 };
|
|
21
|
-
let fileSink = null;
|
|
22
|
-
let fileSinkBroken = false;
|
|
23
|
-
let fileSinkPath = null;
|
|
24
|
-
let verbose = false;
|
|
25
|
-
function quote(v) {
|
|
26
|
-
if (v === null || v === undefined)
|
|
27
|
-
return '';
|
|
28
|
-
const s = String(v);
|
|
29
|
-
return /[\s"=]/.test(s) ? JSON.stringify(s) : s;
|
|
30
|
-
}
|
|
31
|
-
function format(level, msg, fields) {
|
|
32
|
-
const ts = new Date().toISOString();
|
|
33
|
-
const parts = [`ts=${ts}`, `level=${level}`, `msg=${quote(msg)}`];
|
|
34
|
-
for (const [k, v] of Object.entries(fields)) {
|
|
35
|
-
if (v === undefined)
|
|
36
|
-
continue;
|
|
37
|
-
parts.push(`${k}=${quote(v)}`);
|
|
38
|
-
}
|
|
39
|
-
return parts.join(' ');
|
|
40
|
-
}
|
|
41
|
-
function writeFileSink(line) {
|
|
42
|
-
if (!fileSink || fileSinkBroken)
|
|
43
|
-
return;
|
|
44
|
-
try {
|
|
45
|
-
fileSink.write(line);
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Stream errors land in the 'error' handler attached in setLogFile; a
|
|
49
|
-
// synchronous throw is unusual but not impossible — swallow it.
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function emit(level, msg, fields = {}) {
|
|
53
|
-
if (LEVEL_RANK[level] < LEVEL_RANK[ENV_LEVEL])
|
|
54
|
-
return;
|
|
55
|
-
const line = format(level, msg, fields) + '\n';
|
|
56
|
-
// Route to stderr only when no working file sink is capturing the line
|
|
57
|
-
// (so a no-log-file setup loses nothing) or when --verbose was requested
|
|
58
|
-
// (interactive debugging). A broken sink counts as inactive so its dropped
|
|
59
|
-
// writes fall back to stderr rather than vanishing. See issue 118.
|
|
60
|
-
const fileSinkActive = fileSink !== null && !fileSinkBroken;
|
|
61
|
-
if (verbose || !fileSinkActive) {
|
|
62
|
-
try {
|
|
63
|
-
process.stderr.write(line);
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
// Spec §9.2: a failed sink must not crash the service.
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
writeFileSink(line);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Force structured logs back onto stderr even when a file sink is active. The
|
|
73
|
-
* `--verbose` / `--foreground` flag flips this on for interactive debugging;
|
|
74
|
-
* the default (false) keeps the console clean by routing logs to the file only
|
|
75
|
-
* whenever a sink is configured. Idempotent.
|
|
76
|
-
*/
|
|
77
|
-
export function setLogVerbose(on) {
|
|
78
|
-
verbose = on;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Enable (or replace) the persistent file sink. Pass `null` to close any
|
|
82
|
-
* currently-open file sink and revert to stderr-only.
|
|
83
|
-
*
|
|
84
|
-
* The directory is created on demand. The file is opened synchronously via
|
|
85
|
-
* `openSync` so failures (EISDIR, EACCES, ENOTDIR, ENOSPC) raise before the
|
|
86
|
-
* sink is installed — by the time this returns a non-null path, the file is
|
|
87
|
-
* known to be writable. Open failures do not throw: a single stderr warning
|
|
88
|
-
* is emitted and the function returns `null` so callers can branch without a
|
|
89
|
-
* try/catch. After a successful open, runtime stream errors flip the sink
|
|
90
|
-
* into a broken state (silently dropping further writes) so a mid-run
|
|
91
|
-
* disk-full condition cannot recursively spam stderr.
|
|
92
|
-
*
|
|
93
|
-
* Idempotent for repeated calls with the same path. Returns the absolute path
|
|
94
|
-
* actually opened, or `null` when the sink was disabled or failed to open.
|
|
95
|
-
*/
|
|
96
|
-
export function setLogFile(filePath) {
|
|
97
|
-
if (filePath === null || filePath === '') {
|
|
98
|
-
void closeLogFile();
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
const abs = path.resolve(filePath);
|
|
102
|
-
if (fileSink && fileSinkPath === abs && !fileSinkBroken)
|
|
103
|
-
return abs;
|
|
104
|
-
void closeLogFile();
|
|
105
|
-
let fd;
|
|
106
|
-
try {
|
|
107
|
-
mkdirSync(path.dirname(abs), { recursive: true });
|
|
108
|
-
// Open synchronously so EISDIR / EACCES / ENOTDIR surface here instead of
|
|
109
|
-
// arriving asynchronously on the stream's 'error' event after setLogFile()
|
|
110
|
-
// has already returned the path. Passing the fd into createWriteStream
|
|
111
|
-
// tells Node to reuse it (the stream's close still releases the fd).
|
|
112
|
-
fd = openSync(abs, 'a');
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
try {
|
|
116
|
-
process.stderr.write(format('warn', 'log file sink open failed', { path: abs, error: err.message }) +
|
|
117
|
-
'\n');
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
// stderr itself failed; nothing left to do.
|
|
121
|
-
}
|
|
122
|
-
fileSink = null;
|
|
123
|
-
fileSinkPath = null;
|
|
124
|
-
fileSinkBroken = false;
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
let stream;
|
|
128
|
-
try {
|
|
129
|
-
stream = createWriteStream(abs, { encoding: 'utf8', fd, autoClose: true });
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
try {
|
|
133
|
-
closeSync(fd);
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
// fd already gone; nothing to do.
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
process.stderr.write(format('warn', 'log file sink open failed', { path: abs, error: err.message }) +
|
|
140
|
-
'\n');
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// stderr itself failed; nothing left to do.
|
|
144
|
-
}
|
|
145
|
-
fileSink = null;
|
|
146
|
-
fileSinkPath = null;
|
|
147
|
-
fileSinkBroken = false;
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
stream.on('error', (err) => {
|
|
151
|
-
if (!fileSinkBroken) {
|
|
152
|
-
fileSinkBroken = true;
|
|
153
|
-
try {
|
|
154
|
-
process.stderr.write(format('warn', 'log file sink write failed', { path: abs, error: err.message }) + '\n');
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
// stderr itself failed; nothing left to do.
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
fileSink = stream;
|
|
162
|
-
fileSinkPath = abs;
|
|
163
|
-
fileSinkBroken = false;
|
|
164
|
-
return abs;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Close the file sink and await the underlying stream's flush. Safe to call
|
|
168
|
-
* repeatedly. Callers that intend to `process.exit()` immediately afterwards
|
|
169
|
-
* MUST await this — `process.exit` does not drain pending WriteStream writes,
|
|
170
|
-
* so the final log lines (including the shutdown banner) would otherwise be
|
|
171
|
-
* lost. Tests that read the file back also await.
|
|
172
|
-
*/
|
|
173
|
-
export async function closeLogFile() {
|
|
174
|
-
const sink = fileSink;
|
|
175
|
-
fileSink = null;
|
|
176
|
-
fileSinkPath = null;
|
|
177
|
-
fileSinkBroken = false;
|
|
178
|
-
if (!sink)
|
|
179
|
-
return;
|
|
180
|
-
await new Promise((resolve) => {
|
|
181
|
-
try {
|
|
182
|
-
sink.end(() => resolve());
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
resolve();
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
export const log = {
|
|
190
|
-
debug: (msg, fields) => emit('debug', msg, fields ?? {}),
|
|
191
|
-
info: (msg, fields) => emit('info', msg, fields ?? {}),
|
|
192
|
-
warn: (msg, fields) => emit('warn', msg, fields ?? {}),
|
|
193
|
-
error: (msg, fields) => emit('error', msg, fields ?? {}),
|
|
194
|
-
};
|
|
195
|
-
export function withIssue(ctx) {
|
|
196
|
-
return {
|
|
197
|
-
debug: (msg, fields = {}) => log.debug(msg, { ...ctx, ...fields }),
|
|
198
|
-
info: (msg, fields = {}) => log.info(msg, { ...ctx, ...fields }),
|
|
199
|
-
warn: (msg, fields = {}) => log.warn(msg, { ...ctx, ...fields }),
|
|
200
|
-
error: (msg, fields = {}) => log.error(msg, { ...ctx, ...fields }),
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=logging.js.map
|
package/dist/logging.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
|