@telora/daemon 0.20.4 → 0.20.19
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/build-info.json +13 -3
- package/dist/ai-inspection-context.d.ts.map +1 -1
- package/dist/ai-inspection-context.js +5 -3
- package/dist/ai-inspection-context.js.map +1 -1
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js +4 -2
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.d.ts.map +1 -1
- package/dist/audit-hooks.js +3 -1
- package/dist/audit-hooks.js.map +1 -1
- package/dist/auth-liveness.d.ts.map +1 -1
- package/dist/auth-liveness.js +4 -2
- package/dist/auth-liveness.js.map +1 -1
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +14 -12
- package/dist/auto-update.js.map +1 -1
- package/dist/backends/codex/codex-backend.d.ts.map +1 -1
- package/dist/backends/codex/codex-backend.js +4 -2
- package/dist/backends/codex/codex-backend.js.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.d.ts.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.js +3 -1
- package/dist/backends/codex/codex-mcp-proxy.js.map +1 -1
- package/dist/backends/lacuna/lifecycle.d.ts.map +1 -1
- package/dist/backends/lacuna/lifecycle.js +4 -2
- package/dist/backends/lacuna/lifecycle.js.map +1 -1
- package/dist/backends/resolve.d.ts.map +1 -1
- package/dist/backends/resolve.js +3 -1
- package/dist/backends/resolve.js.map +1 -1
- package/dist/cascade-restatement.d.ts.map +1 -1
- package/dist/cascade-restatement.js +15 -13
- package/dist/cascade-restatement.js.map +1 -1
- package/dist/ci-escalation.d.ts.map +1 -1
- package/dist/ci-escalation.js +4 -2
- package/dist/ci-escalation.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts.map +1 -1
- package/dist/ci-sensor-loop.js +6 -4
- package/dist/ci-sensor-loop.js.map +1 -1
- package/dist/ci-status-git.d.ts +5 -6
- package/dist/ci-status-git.d.ts.map +1 -1
- package/dist/ci-status-git.js +7 -7
- package/dist/ci-status-git.js.map +1 -1
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +9 -2
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.d.ts.map +1 -1
- package/dist/cli/open.js +9 -2
- package/dist/cli/open.js.map +1 -1
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +2 -0
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/verify-setup.d.ts.map +1 -1
- package/dist/cli/verify-setup.js +9 -4
- package/dist/cli/verify-setup.js.map +1 -1
- package/dist/close-loop-dispatcher.d.ts.map +1 -1
- package/dist/close-loop-dispatcher.js +6 -4
- package/dist/close-loop-dispatcher.js.map +1 -1
- package/dist/completion/advanceability.d.ts.map +1 -1
- package/dist/completion/advanceability.js +3 -1
- package/dist/completion/advanceability.js.map +1 -1
- package/dist/completion/agent-completion.d.ts.map +1 -1
- package/dist/completion/agent-completion.js +11 -9
- package/dist/completion/agent-completion.js.map +1 -1
- package/dist/completion/event-escalations.d.ts.map +1 -1
- package/dist/completion/event-escalations.js +10 -8
- package/dist/completion/event-escalations.js.map +1 -1
- package/dist/completion/event-phases.d.ts +104 -0
- package/dist/completion/event-phases.d.ts.map +1 -0
- package/dist/completion/event-phases.js +572 -0
- package/dist/completion/event-phases.js.map +1 -0
- package/dist/completion/event.d.ts +1 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +36 -592
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +14 -12
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +6 -4
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +2 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +86 -30
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/review-exit-shortfall.d.ts +62 -0
- package/dist/completion/review-exit-shortfall.d.ts.map +1 -0
- package/dist/completion/review-exit-shortfall.js +84 -0
- package/dist/completion/review-exit-shortfall.js.map +1 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +16 -14
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +16 -14
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +32 -33
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/terminated-work-reconcile.js +11 -9
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +3 -1
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/config-reconcile.d.ts.map +1 -1
- package/dist/config-reconcile.js +3 -1
- package/dist/config-reconcile.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -37
- package/dist/config.js.map +1 -1
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +26 -24
- package/dist/control-state.js.map +1 -1
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +43 -41
- package/dist/crash-recovery.js.map +1 -1
- package/dist/daemon-logs.d.ts.map +1 -1
- package/dist/daemon-logs.js +21 -3
- package/dist/daemon-logs.js.map +1 -1
- package/dist/daemon-process.d.ts +0 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +15 -10
- package/dist/daemon-process.js.map +1 -1
- package/dist/delivery-advance-block.d.ts +4 -4
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +25 -18
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-guards.d.ts.map +1 -1
- package/dist/delivery-guards.js +11 -9
- package/dist/delivery-guards.js.map +1 -1
- package/dist/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery-lifecycle.js +23 -21
- package/dist/delivery-lifecycle.js.map +1 -1
- package/dist/delivery-merge.d.ts.map +1 -1
- package/dist/delivery-merge.js +10 -8
- package/dist/delivery-merge.js.map +1 -1
- package/dist/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery-reconciler-apply.js +5 -8
- package/dist/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +5 -6
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/directive/close-loop-stage.d.ts.map +1 -1
- package/dist/directive/close-loop-stage.js +9 -7
- package/dist/directive/close-loop-stage.js.map +1 -1
- package/dist/directive/directive-assembly.d.ts.map +1 -1
- package/dist/directive/directive-assembly.js +3 -1
- package/dist/directive/directive-assembly.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +16 -14
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +27 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +28 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +8 -6
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/directive-executor.d.ts +1 -1
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +12 -10
- package/dist/directive-executor.js.map +1 -1
- package/dist/discovery-poll.d.ts.map +1 -1
- package/dist/discovery-poll.js +8 -6
- package/dist/discovery-poll.js.map +1 -1
- package/dist/drain-teardown.d.ts.map +1 -1
- package/dist/drain-teardown.js +6 -19
- package/dist/drain-teardown.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +10 -8
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/drift-ratify-loop.d.ts +68 -0
- package/dist/drift-ratify-loop.d.ts.map +1 -0
- package/dist/drift-ratify-loop.js +161 -0
- package/dist/drift-ratify-loop.js.map +1 -0
- package/dist/drift-ratify-policy.d.ts +101 -0
- package/dist/drift-ratify-policy.d.ts.map +1 -0
- package/dist/drift-ratify-policy.js +178 -0
- package/dist/drift-ratify-policy.js.map +1 -0
- package/dist/escalation-provenance.d.ts.map +1 -1
- package/dist/escalation-provenance.js +8 -3
- package/dist/escalation-provenance.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +36 -34
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +1 -0
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +16 -14
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus-lifecycle.js +56 -44
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus-loop-registry.js +87 -36
- package/dist/focus-loop-registry.js.map +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +40 -34
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-provisioning.d.ts.map +1 -1
- package/dist/focus-provisioning.js +15 -13
- package/dist/focus-provisioning.js.map +1 -1
- package/dist/focus-respawn-guard.d.ts.map +1 -1
- package/dist/focus-respawn-guard.js +4 -2
- package/dist/focus-respawn-guard.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.js +10 -8
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.js +11 -9
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +7 -5
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +7 -5
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/focus-team-state.d.ts +18 -9
- package/dist/focus-team-state.d.ts.map +1 -1
- package/dist/focus-team-state.js +37 -18
- package/dist/focus-team-state.js.map +1 -1
- package/dist/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus-worktree-state.js +6 -4
- package/dist/focus-worktree-state.js.map +1 -1
- package/dist/git/branch.d.ts.map +1 -1
- package/dist/git/branch.js +7 -5
- package/dist/git/branch.js.map +1 -1
- package/dist/git/genesis.d.ts.map +1 -1
- package/dist/git/genesis.js +3 -1
- package/dist/git/genesis.js.map +1 -1
- package/dist/git/integration.d.ts.map +1 -1
- package/dist/git/integration.js +4 -2
- package/dist/git/integration.js.map +1 -1
- package/dist/git/merge-helpers.d.ts.map +1 -1
- package/dist/git/merge-helpers.js +6 -4
- package/dist/git/merge-helpers.js.map +1 -1
- package/dist/git/merge-lock.d.ts +0 -7
- package/dist/git/merge-lock.d.ts.map +1 -1
- package/dist/git/merge-lock.js +5 -3
- package/dist/git/merge-lock.js.map +1 -1
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +10 -8
- package/dist/git/merge.js.map +1 -1
- package/dist/git/state-detector.d.ts.map +1 -1
- package/dist/git/state-detector.js +9 -7
- package/dist/git/state-detector.js.map +1 -1
- package/dist/git/utils.d.ts.map +1 -1
- package/dist/git/utils.js +6 -4
- package/dist/git/utils.js.map +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +16 -14
- package/dist/git.js.map +1 -1
- package/dist/guard-evaluator.d.ts.map +1 -1
- package/dist/guard-evaluator.js +3 -1
- package/dist/guard-evaluator.js.map +1 -1
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +14 -11
- package/dist/heartbeat.js.map +1 -1
- package/dist/host-control/catalog.d.ts.map +1 -1
- package/dist/host-control/catalog.js +4 -2
- package/dist/host-control/catalog.js.map +1 -1
- package/dist/host-control/client.d.ts.map +1 -1
- package/dist/host-control/client.js +3 -1
- package/dist/host-control/client.js.map +1 -1
- package/dist/host-control/sizing.d.ts.map +1 -1
- package/dist/host-control/sizing.js +4 -1
- package/dist/host-control/sizing.js.map +1 -1
- package/dist/index.js +110 -127
- package/dist/index.js.map +1 -1
- package/dist/install-probe-tick.d.ts.map +1 -1
- package/dist/install-probe-tick.js +6 -4
- package/dist/install-probe-tick.js.map +1 -1
- package/dist/intake-control.d.ts +0 -16
- package/dist/intake-control.d.ts.map +1 -1
- package/dist/intake-control.js +4 -2
- package/dist/intake-control.js.map +1 -1
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +26 -24
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +59 -39
- package/dist/listener.js.map +1 -1
- package/dist/log.d.ts +84 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +182 -0
- package/dist/log.js.map +1 -0
- package/dist/loops/context-audit-pass.d.ts.map +1 -1
- package/dist/loops/context-audit-pass.js +8 -5
- package/dist/loops/context-audit-pass.js.map +1 -1
- package/dist/loops/engine.d.ts.map +1 -1
- package/dist/loops/engine.js +26 -24
- package/dist/loops/engine.js.map +1 -1
- package/dist/loops/llm-client.d.ts.map +1 -1
- package/dist/loops/llm-client.js +4 -2
- package/dist/loops/llm-client.js.map +1 -1
- package/dist/loops/llm-flag.d.ts +4 -28
- package/dist/loops/llm-flag.d.ts.map +1 -1
- package/dist/loops/llm-flag.js +11 -30
- package/dist/loops/llm-flag.js.map +1 -1
- package/dist/loops/prompt-builder.d.ts.map +1 -1
- package/dist/loops/prompt-builder.js +3 -1
- package/dist/loops/prompt-builder.js.map +1 -1
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +20 -18
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.d.ts.map +1 -1
- package/dist/merge-detector.js +7 -5
- package/dist/merge-detector.js.map +1 -1
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -1
- package/dist/nexus/endpoint-clearance.js +3 -1
- package/dist/nexus/endpoint-clearance.js.map +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -1
- package/dist/nexus/escalation-bridge.js +3 -1
- package/dist/nexus/escalation-bridge.js.map +1 -1
- package/dist/nexus/incoming.d.ts.map +1 -1
- package/dist/nexus/incoming.js +3 -1
- package/dist/nexus/incoming.js.map +1 -1
- package/dist/nexus/intake-spawn.d.ts.map +1 -1
- package/dist/nexus/intake-spawn.js +6 -4
- package/dist/nexus/intake-spawn.js.map +1 -1
- package/dist/nexus/intake.d.ts.map +1 -1
- package/dist/nexus/intake.js +3 -1
- package/dist/nexus/intake.js.map +1 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +3 -1
- package/dist/nexus/return.js.map +1 -1
- package/dist/non-interactive-init.d.ts.map +1 -1
- package/dist/non-interactive-init.js +0 -0
- package/dist/non-interactive-init.js.map +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -1
- package/dist/otlp/port-manager.js +7 -5
- package/dist/otlp/port-manager.js.map +1 -1
- package/dist/otlp/receiver.d.ts.map +1 -1
- package/dist/otlp/receiver.js +14 -12
- package/dist/otlp/receiver.js.map +1 -1
- package/dist/output-monitor.d.ts.map +1 -1
- package/dist/output-monitor.js +6 -4
- package/dist/output-monitor.js.map +1 -1
- package/dist/prd/controller.d.ts.map +1 -1
- package/dist/prd/controller.js +7 -5
- package/dist/prd/controller.js.map +1 -1
- package/dist/prd/focus-pushdown.d.ts.map +1 -1
- package/dist/prd/focus-pushdown.js +3 -1
- package/dist/prd/focus-pushdown.js.map +1 -1
- package/dist/product-scaffold.d.ts.map +1 -1
- package/dist/product-scaffold.js +8 -6
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +41 -4
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/context-assembly.d.ts.map +1 -1
- package/dist/queries/context-assembly.js +3 -1
- package/dist/queries/context-assembly.js.map +1 -1
- package/dist/queries/deliveries.d.ts +22 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +13 -5
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +9 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +17 -1
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/guards.d.ts.map +1 -1
- package/dist/queries/guards.js +3 -1
- package/dist/queries/guards.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +3 -1
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/reality-tree.d.ts +22 -0
- package/dist/queries/reality-tree.d.ts.map +1 -1
- package/dist/queries/reality-tree.js +32 -0
- package/dist/queries/reality-tree.js.map +1 -1
- package/dist/queries/schemas.d.ts +2 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +5 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/system-session.d.ts.map +1 -1
- package/dist/queries/system-session.js +5 -3
- package/dist/queries/system-session.js.map +1 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +6 -4
- package/dist/queries/verification.js.map +1 -1
- package/dist/reality-pole-capture.d.ts.map +1 -1
- package/dist/reality-pole-capture.js +7 -4
- package/dist/reality-pole-capture.js.map +1 -1
- package/dist/reality-pole.d.ts.map +1 -1
- package/dist/reality-pole.js +4 -2
- package/dist/reality-pole.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +3 -1
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
- package/dist/resolvers/agent-session-summaries.js +3 -1
- package/dist/resolvers/agent-session-summaries.js.map +1 -1
- package/dist/resolvers/deployment-profile.d.ts.map +1 -1
- package/dist/resolvers/deployment-profile.js +3 -1
- package/dist/resolvers/deployment-profile.js.map +1 -1
- package/dist/resolvers/drift-shortfall-proposals.d.ts +27 -0
- package/dist/resolvers/drift-shortfall-proposals.d.ts.map +1 -0
- package/dist/resolvers/drift-shortfall-proposals.js +90 -0
- package/dist/resolvers/drift-shortfall-proposals.js.map +1 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +4 -2
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +3 -1
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-injections.js +3 -1
- package/dist/resolvers/focus-injections.js.map +1 -1
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
- package/dist/resolvers/focus-last-review-report.js +3 -1
- package/dist/resolvers/focus-last-review-report.js.map +1 -1
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
- package/dist/resolvers/focus-reality-tree.js +3 -1
- package/dist/resolvers/focus-reality-tree.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +3 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
- package/dist/resolvers/guards-evaluation-results.js +3 -1
- package/dist/resolvers/guards-evaluation-results.js.map +1 -1
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +2 -0
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/loop-context.d.ts.map +1 -1
- package/dist/resolvers/loop-context.js +6 -2
- package/dist/resolvers/loop-context.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +3 -1
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/loop-documents.d.ts.map +1 -1
- package/dist/resolvers/loop-documents.js +3 -1
- package/dist/resolvers/loop-documents.js.map +1 -1
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
- package/dist/resolvers/loop-expected-effects.js +3 -1
- package/dist/resolvers/loop-expected-effects.js.map +1 -1
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
- package/dist/resolvers/loop-frt-statement.js +3 -1
- package/dist/resolvers/loop-frt-statement.js.map +1 -1
- package/dist/resolvers/loop-injection.d.ts.map +1 -1
- package/dist/resolvers/loop-injection.js +3 -1
- package/dist/resolvers/loop-injection.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +3 -1
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/loop-questions.d.ts.map +1 -1
- package/dist/resolvers/loop-questions.js +3 -1
- package/dist/resolvers/loop-questions.js.map +1 -1
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
- package/dist/resolvers/loop-upstream-udes.js +3 -1
- package/dist/resolvers/loop-upstream-udes.js.map +1 -1
- package/dist/resolvers/prd-context.d.ts.map +1 -1
- package/dist/resolvers/prd-context.js +3 -1
- package/dist/resolvers/prd-context.js.map +1 -1
- package/dist/resolvers/reality-metrics.d.ts.map +1 -1
- package/dist/resolvers/reality-metrics.js +3 -1
- package/dist/resolvers/reality-metrics.js.map +1 -1
- package/dist/resolvers/reality-projections.d.ts.map +1 -1
- package/dist/resolvers/reality-projections.js +3 -1
- package/dist/resolvers/reality-projections.js.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.js +3 -1
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
- package/dist/resolvers/retired-injections.d.ts.map +1 -1
- package/dist/resolvers/retired-injections.js +3 -1
- package/dist/resolvers/retired-injections.js.map +1 -1
- package/dist/resolvers/review-outcomes.d.ts.map +1 -1
- package/dist/resolvers/review-outcomes.js +3 -1
- package/dist/resolvers/review-outcomes.js.map +1 -1
- package/dist/resolvers/security-advisory.d.ts.map +1 -1
- package/dist/resolvers/security-advisory.js +3 -1
- package/dist/resolvers/security-advisory.js.map +1 -1
- package/dist/resolvers/shared/wiki.d.ts.map +1 -1
- package/dist/resolvers/shared/wiki.js +5 -3
- package/dist/resolvers/shared/wiki.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +3 -1
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/resolvers/workflow-stages.d.ts.map +1 -1
- package/dist/resolvers/workflow-stages.js +3 -1
- package/dist/resolvers/workflow-stages.js.map +1 -1
- package/dist/schema-version-gate.d.ts.map +1 -1
- package/dist/schema-version-gate.js +16 -18
- package/dist/schema-version-gate.js.map +1 -1
- package/dist/security-finding-gate.d.ts.map +1 -1
- package/dist/security-finding-gate.js +3 -1
- package/dist/security-finding-gate.js.map +1 -1
- package/dist/security-rescan-resolution.d.ts.map +1 -1
- package/dist/security-rescan-resolution.js +4 -2
- package/dist/security-rescan-resolution.js.map +1 -1
- package/dist/security-scan-engine.d.ts.map +1 -1
- package/dist/security-scan-engine.js +9 -6
- package/dist/security-scan-engine.js.map +1 -1
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +48 -39
- package/dist/self-update.js.map +1 -1
- package/dist/sensor-sweep.d.ts.map +1 -1
- package/dist/sensor-sweep.js +5 -2
- package/dist/sensor-sweep.js.map +1 -1
- package/dist/session-stamp.d.ts.map +1 -1
- package/dist/session-stamp.js +4 -2
- package/dist/session-stamp.js.map +1 -1
- package/dist/shortfall-disposition-config.d.ts +34 -0
- package/dist/shortfall-disposition-config.d.ts.map +1 -0
- package/dist/shortfall-disposition-config.js +46 -0
- package/dist/shortfall-disposition-config.js.map +1 -0
- package/dist/shortfall-disposition-loop.d.ts +86 -0
- package/dist/shortfall-disposition-loop.d.ts.map +1 -0
- package/dist/shortfall-disposition-loop.js +309 -0
- package/dist/shortfall-disposition-loop.js.map +1 -0
- package/dist/spawn/model-routing.d.ts.map +1 -1
- package/dist/spawn/model-routing.js +19 -16
- package/dist/spawn/model-routing.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +29 -22
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +6 -4
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +16 -14
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +13 -11
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/spawn-cooldown.d.ts +0 -7
- package/dist/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn-cooldown.js +3 -1
- package/dist/spawn-cooldown.js.map +1 -1
- package/dist/spawn-environment.d.ts.map +1 -1
- package/dist/spawn-environment.js +4 -1
- package/dist/spawn-environment.js.map +1 -1
- package/dist/spawner/helpers.d.ts.map +1 -1
- package/dist/spawner/helpers.js +19 -17
- package/dist/spawner/helpers.js.map +1 -1
- package/dist/spawner/lifecycle.d.ts.map +1 -1
- package/dist/spawner/lifecycle.js +17 -13
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/liveness.d.ts.map +1 -1
- package/dist/spawner/liveness.js +7 -5
- package/dist/spawner/liveness.js.map +1 -1
- package/dist/spawner/resolution.d.ts.map +1 -1
- package/dist/spawner/resolution.js +7 -5
- package/dist/spawner/resolution.js.map +1 -1
- package/dist/spawner/stream-handlers.d.ts +6 -55
- package/dist/spawner/stream-handlers.d.ts.map +1 -1
- package/dist/spawner/stream-handlers.js +10 -172
- package/dist/spawner/stream-handlers.js.map +1 -1
- package/dist/spawner/timeout.d.ts.map +1 -1
- package/dist/spawner/timeout.js +11 -9
- package/dist/spawner/timeout.js.map +1 -1
- package/dist/staleness.d.ts.map +1 -1
- package/dist/staleness.js +4 -1
- package/dist/staleness.js.map +1 -1
- package/dist/stall-detector-config.d.ts +6 -17
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +10 -36
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/stall-detectors.d.ts.map +1 -1
- package/dist/stall-detectors.js +6 -4
- package/dist/stall-detectors.js.map +1 -1
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +9 -7
- package/dist/state-cascade.js.map +1 -1
- package/dist/stop-request.d.ts.map +1 -1
- package/dist/stop-request.js +6 -2
- package/dist/stop-request.js.map +1 -1
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +3 -1
- package/dist/supabase.js.map +1 -1
- package/dist/telemetry-writer.d.ts.map +1 -1
- package/dist/telemetry-writer.js +11 -9
- package/dist/telemetry-writer.js.map +1 -1
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +28 -26
- package/dist/trigger-executor.js.map +1 -1
- package/dist/unified-engine-lifecycle.d.ts +19 -11
- package/dist/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +71 -70
- package/dist/unified-engine-lifecycle.js.map +1 -1
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +41 -36
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell-config.d.ts +8 -1
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +57 -34
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.d.ts.map +1 -1
- package/dist/unified-shell-status.js +39 -37
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +37 -41
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-baseline.d.ts.map +1 -1
- package/dist/verification-baseline.js +7 -4
- package/dist/verification-baseline.js.map +1 -1
- package/dist/verification-config.d.ts +3 -3
- package/dist/verification-config.d.ts.map +1 -1
- package/dist/verification-config.js +8 -19
- package/dist/verification-config.js.map +1 -1
- package/dist/verification-default-on.d.ts +6 -6
- package/dist/verification-default-on.d.ts.map +1 -1
- package/dist/verification-default-on.js +9 -7
- package/dist/verification-default-on.js.map +1 -1
- package/dist/verification-deterministic.d.ts.map +1 -1
- package/dist/verification-deterministic.js +6 -3
- package/dist/verification-deterministic.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +20 -16
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-feedback.d.ts.map +1 -1
- package/dist/verification-feedback.js +4 -2
- package/dist/verification-feedback.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +5 -3
- package/dist/version-check.js.map +1 -1
- package/dist/worker-pidfile.d.ts.map +1 -1
- package/dist/worker-pidfile.js +8 -3
- package/dist/worker-pidfile.js.map +1 -1
- package/dist/worktree/focus.d.ts.map +1 -1
- package/dist/worktree/focus.js +15 -13
- package/dist/worktree/focus.js.map +1 -1
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +13 -11
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +41 -39
- package/dist/worktree.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -31,7 +31,12 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import { createRequire } from 'node:module';
|
|
33
33
|
import { Command } from 'commander';
|
|
34
|
+
import { cliLog } from './log.js';
|
|
34
35
|
const require = createRequire(import.meta.url);
|
|
36
|
+
// Interactive command feedback: plain console text for the operator
|
|
37
|
+
// terminal, never JSON envelopes (review TEL-5). The daemon process's own
|
|
38
|
+
// modules keep the structured createLogger.
|
|
39
|
+
const log = cliLog;
|
|
35
40
|
const pkg = require('../package.json');
|
|
36
41
|
const program = new Command();
|
|
37
42
|
// Load git commit SHA stamped at publish time (optional, missing in dev)
|
|
@@ -40,8 +45,9 @@ try {
|
|
|
40
45
|
const buildInfo = require('../build-info.json');
|
|
41
46
|
commitSha = buildInfo.commitSha || 'unknown';
|
|
42
47
|
}
|
|
43
|
-
catch {
|
|
48
|
+
catch (err) {
|
|
44
49
|
// build-info.json not present in dev -- only stamped at publish time
|
|
50
|
+
log.debug('build-info.json not present in dev -- only stamped at publish time', { error: String(err?.message ?? err) });
|
|
45
51
|
}
|
|
46
52
|
const fullVersion = commitSha !== 'unknown' ? `${pkg.version} (${commitSha})` : pkg.version;
|
|
47
53
|
import { runUnifiedDaemon } from './unified-shell.js';
|
|
@@ -67,7 +73,7 @@ try {
|
|
|
67
73
|
process.loadEnvFile?.('.env');
|
|
68
74
|
}
|
|
69
75
|
catch (e) {
|
|
70
|
-
|
|
76
|
+
log.debug('.env file not loaded (optional):', e.message);
|
|
71
77
|
}
|
|
72
78
|
// ---------------------------------------------------------------------------
|
|
73
79
|
// Main
|
|
@@ -85,23 +91,13 @@ async function main() {
|
|
|
85
91
|
.option('-c, --config <path>', 'Path to config file (default: .telora/daemon.json)')
|
|
86
92
|
.option('--dry-run', 'Print configuration and exit')
|
|
87
93
|
.option('--skip-recovery', 'Skip crash recovery on startup')
|
|
88
|
-
.option('--engine <name>', 'Only enable this engine: focus')
|
|
89
94
|
.option('--no-auto-update', 'Disable automatic self-updating')
|
|
90
95
|
.action(async (opts) => {
|
|
91
|
-
let engineFilter;
|
|
92
|
-
if (opts.engine) {
|
|
93
|
-
if (opts.engine !== 'focus') {
|
|
94
|
-
console.error(`Invalid --engine value: "${opts.engine}". Must be "focus".`);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
engineFilter = opts.engine;
|
|
98
|
-
}
|
|
99
96
|
await runUnifiedDaemon({
|
|
100
97
|
verbose: opts.verbose,
|
|
101
98
|
config: opts.config,
|
|
102
99
|
dryRun: opts.dryRun,
|
|
103
100
|
skipRecovery: opts.skipRecovery,
|
|
104
|
-
engineFilter,
|
|
105
101
|
noAutoUpdate: opts.autoUpdate === false,
|
|
106
102
|
});
|
|
107
103
|
});
|
|
@@ -111,7 +107,6 @@ async function main() {
|
|
|
111
107
|
.description('Start the daemon (background by default)')
|
|
112
108
|
.option('-v, --verbose', 'Enable verbose logging')
|
|
113
109
|
.option('-c, --config <path>', 'Path to config file (default: .telora/daemon.json)')
|
|
114
|
-
.option('--engine <name>', 'Only enable this engine: focus')
|
|
115
110
|
.option('--skip-recovery', 'Skip crash recovery on startup')
|
|
116
111
|
.option('--no-auto-update', 'Disable automatic self-updating')
|
|
117
112
|
.option('--foreground', 'Run in foreground instead of background')
|
|
@@ -122,12 +117,7 @@ async function main() {
|
|
|
122
117
|
// self-update, so the long-running daemon must never start that way.
|
|
123
118
|
// Overridable via TELORA_ALLOW_NPX_RUN.
|
|
124
119
|
if (isNpxRunMode()) {
|
|
125
|
-
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
// Validate engine flag
|
|
129
|
-
if (opts.engine && opts.engine !== 'focus') {
|
|
130
|
-
console.error(`Invalid --engine value: "${opts.engine}". Must be "focus".`);
|
|
120
|
+
log.error(npxRunRefusalMessage());
|
|
131
121
|
process.exit(1);
|
|
132
122
|
}
|
|
133
123
|
// Clean up stale PID file if the process isn't running
|
|
@@ -135,8 +125,8 @@ async function main() {
|
|
|
135
125
|
// Check if already running
|
|
136
126
|
const status = getDaemonStatus();
|
|
137
127
|
if (status.running) {
|
|
138
|
-
|
|
139
|
-
|
|
128
|
+
log.error(`Daemon is already running (PID ${status.pid}).`);
|
|
129
|
+
log.error('Use "telora-daemon restart" to restart it.');
|
|
140
130
|
process.exit(1);
|
|
141
131
|
}
|
|
142
132
|
// Auto-rebuild: explicit --rebuild flag or automatic stale detection
|
|
@@ -152,7 +142,6 @@ async function main() {
|
|
|
152
142
|
verbose: opts.verbose,
|
|
153
143
|
config: opts.config,
|
|
154
144
|
skipRecovery: opts.skipRecovery,
|
|
155
|
-
engineFilter: opts.engine,
|
|
156
145
|
noAutoUpdate: opts.autoUpdate === false,
|
|
157
146
|
});
|
|
158
147
|
}
|
|
@@ -161,21 +150,20 @@ async function main() {
|
|
|
161
150
|
const childPid = startDaemonBackground({
|
|
162
151
|
config: opts.config,
|
|
163
152
|
verbose: opts.verbose,
|
|
164
|
-
engine: opts.engine,
|
|
165
153
|
skipRecovery: opts.skipRecovery,
|
|
166
154
|
noAutoUpdate: opts.autoUpdate === false,
|
|
167
155
|
});
|
|
168
156
|
const logPath = resolveDaemonLogPath();
|
|
169
|
-
|
|
170
|
-
|
|
157
|
+
log.info(`Daemon started (PID ${childPid})`);
|
|
158
|
+
log.info(`Log file: ${logPath}`);
|
|
171
159
|
// Wait for the daemon to confirm healthy
|
|
172
160
|
const healthy = await waitForHealthy(5_000);
|
|
173
161
|
if (healthy) {
|
|
174
|
-
|
|
162
|
+
log.info('Daemon is healthy.');
|
|
175
163
|
}
|
|
176
164
|
else {
|
|
177
|
-
|
|
178
|
-
|
|
165
|
+
log.warn('Warning: daemon may not have started successfully.');
|
|
166
|
+
log.warn('Check logs: telora-daemon logs');
|
|
179
167
|
}
|
|
180
168
|
}
|
|
181
169
|
});
|
|
@@ -189,7 +177,7 @@ async function main() {
|
|
|
189
177
|
.action(async (opts) => {
|
|
190
178
|
const status = getDaemonStatus();
|
|
191
179
|
if (!status.running || status.pid === null) {
|
|
192
|
-
|
|
180
|
+
log.info('Daemon is not running.');
|
|
193
181
|
process.exit(0);
|
|
194
182
|
}
|
|
195
183
|
// Default: drain-to-idle. Leave a `drain` stop-request, signal the daemon,
|
|
@@ -203,37 +191,37 @@ async function main() {
|
|
|
203
191
|
process.kill(status.pid, 'SIGTERM');
|
|
204
192
|
}
|
|
205
193
|
catch {
|
|
206
|
-
|
|
194
|
+
log.info('Daemon is not running.');
|
|
207
195
|
process.exit(0);
|
|
208
196
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
197
|
+
log.info(`Drain-to-idle stop requested (PID ${status.pid}).`);
|
|
198
|
+
log.info('The daemon stops at the next zero-team boundary; no new teams spawn meanwhile.');
|
|
199
|
+
log.info('Watch: telora-daemon logs --follow');
|
|
200
|
+
log.info('Force now: telora-daemon stop --now (or telora-daemon stop --force to hard-kill)');
|
|
213
201
|
process.exit(0);
|
|
214
202
|
}
|
|
215
203
|
// --now: immediate teardown (today's behavior).
|
|
216
204
|
writeStopRequest('now');
|
|
217
205
|
const timeoutMs = parseInt(opts.timeout, 10);
|
|
218
|
-
|
|
206
|
+
log.info(`Stopping daemon now (PID ${status.pid})...`);
|
|
219
207
|
try {
|
|
220
208
|
const stopped = await stopDaemon(timeoutMs);
|
|
221
209
|
if (stopped) {
|
|
222
|
-
|
|
210
|
+
log.info('Daemon stopped.');
|
|
223
211
|
}
|
|
224
212
|
else {
|
|
225
|
-
|
|
213
|
+
log.info('Daemon is not running.');
|
|
226
214
|
}
|
|
227
215
|
}
|
|
228
216
|
catch (err) {
|
|
229
217
|
if (opts.force && status.pid !== null) {
|
|
230
|
-
|
|
218
|
+
log.warn(`Graceful shutdown timed out. Sending SIGKILL to PID ${status.pid}...`);
|
|
231
219
|
try {
|
|
232
220
|
process.kill(status.pid, 'SIGKILL');
|
|
233
|
-
|
|
221
|
+
log.info('Daemon killed.');
|
|
234
222
|
}
|
|
235
223
|
catch {
|
|
236
|
-
|
|
224
|
+
log.error('Failed to kill daemon process.');
|
|
237
225
|
process.exit(1);
|
|
238
226
|
}
|
|
239
227
|
// The daemon was SIGKILLed without running its graceful reap, so its
|
|
@@ -242,15 +230,15 @@ async function main() {
|
|
|
242
230
|
try {
|
|
243
231
|
const reaped = reapAndClearWorkerPidfile();
|
|
244
232
|
if (reaped.reaped.length > 0) {
|
|
245
|
-
|
|
233
|
+
log.info(`Reaped ${reaped.reaped.length} orphaned team lead(s): ${reaped.reaped.join(', ')}`);
|
|
246
234
|
}
|
|
247
235
|
}
|
|
248
236
|
catch (reapErr) {
|
|
249
|
-
|
|
237
|
+
log.warn(`Team-lead reap failed: ${reapErr instanceof Error ? reapErr.message : String(reapErr)}`);
|
|
250
238
|
}
|
|
251
239
|
}
|
|
252
240
|
else {
|
|
253
|
-
|
|
241
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
254
242
|
process.exit(1);
|
|
255
243
|
}
|
|
256
244
|
}
|
|
@@ -261,7 +249,6 @@ async function main() {
|
|
|
261
249
|
.description('Restart the daemon (stop then start)')
|
|
262
250
|
.option('-v, --verbose', 'Enable verbose logging')
|
|
263
251
|
.option('-c, --config <path>', 'Path to config file (default: .telora/daemon.json)')
|
|
264
|
-
.option('--engine <name>', 'Only enable this engine: focus')
|
|
265
252
|
.option('--skip-recovery', 'Skip crash recovery on startup')
|
|
266
253
|
.option('--no-auto-update', 'Disable automatic self-updating')
|
|
267
254
|
.option('--foreground', 'Run in foreground instead of background')
|
|
@@ -269,11 +256,6 @@ async function main() {
|
|
|
269
256
|
.option('--timeout <ms>', 'Stop timeout in milliseconds', '30000')
|
|
270
257
|
.option('--now', 'Stop immediately instead of draining to a zero-team boundary before restart')
|
|
271
258
|
.action(async (opts) => {
|
|
272
|
-
// Validate engine flag
|
|
273
|
-
if (opts.engine && opts.engine !== 'focus') {
|
|
274
|
-
console.error(`Invalid --engine value: "${opts.engine}". Must be "focus".`);
|
|
275
|
-
process.exit(1);
|
|
276
|
-
}
|
|
277
259
|
const status = getDaemonStatus();
|
|
278
260
|
const timeoutMs = parseInt(opts.timeout, 10);
|
|
279
261
|
if (status.running && status.pid !== null) {
|
|
@@ -283,20 +265,20 @@ async function main() {
|
|
|
283
265
|
// kill it -- we tell the operator it is draining in the background and
|
|
284
266
|
// to re-run start once it is down (or restart --now to force).
|
|
285
267
|
writeStopRequest(opts.now ? 'now' : 'drain');
|
|
286
|
-
|
|
268
|
+
log.info(opts.now
|
|
287
269
|
? `Stopping daemon now (PID ${status.pid})...`
|
|
288
270
|
: `Draining daemon to a zero-team boundary before restart (PID ${status.pid}); waiting up to ${Math.round(timeoutMs / 1000)}s...`);
|
|
289
271
|
try {
|
|
290
272
|
await stopDaemon(timeoutMs);
|
|
291
|
-
|
|
273
|
+
log.info('Daemon stopped.');
|
|
292
274
|
}
|
|
293
275
|
catch (err) {
|
|
294
276
|
if (!opts.now) {
|
|
295
|
-
|
|
296
|
-
|
|
277
|
+
log.info('Daemon is still draining the current batch; it will stop at the next zero-team boundary.');
|
|
278
|
+
log.info('The new version starts once it is down -- re-run `telora-daemon start`, or `telora-daemon restart --now` to force.');
|
|
297
279
|
process.exit(0);
|
|
298
280
|
}
|
|
299
|
-
|
|
281
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
300
282
|
process.exit(1);
|
|
301
283
|
}
|
|
302
284
|
}
|
|
@@ -309,7 +291,6 @@ async function main() {
|
|
|
309
291
|
verbose: opts.verbose,
|
|
310
292
|
config: opts.config,
|
|
311
293
|
skipRecovery: opts.skipRecovery,
|
|
312
|
-
engineFilter: opts.engine,
|
|
313
294
|
noAutoUpdate: opts.autoUpdate === false,
|
|
314
295
|
});
|
|
315
296
|
}
|
|
@@ -317,21 +298,20 @@ async function main() {
|
|
|
317
298
|
const childPid = startDaemonBackground({
|
|
318
299
|
config: opts.config,
|
|
319
300
|
verbose: opts.verbose,
|
|
320
|
-
engine: opts.engine,
|
|
321
301
|
skipRecovery: opts.skipRecovery,
|
|
322
302
|
noAutoUpdate: opts.autoUpdate === false,
|
|
323
303
|
});
|
|
324
304
|
const logPath = resolveDaemonLogPath();
|
|
325
|
-
|
|
326
|
-
|
|
305
|
+
log.info(`Daemon started (PID ${childPid})`);
|
|
306
|
+
log.info(`Log file: ${logPath}`);
|
|
327
307
|
// Wait for the daemon to confirm healthy
|
|
328
308
|
const healthy = await waitForHealthy(5_000);
|
|
329
309
|
if (healthy) {
|
|
330
|
-
|
|
310
|
+
log.info('Daemon is healthy.');
|
|
331
311
|
}
|
|
332
312
|
else {
|
|
333
|
-
|
|
334
|
-
|
|
313
|
+
log.warn('Warning: daemon may not have started successfully.');
|
|
314
|
+
log.warn('Check logs: telora-daemon logs');
|
|
335
315
|
}
|
|
336
316
|
}
|
|
337
317
|
});
|
|
@@ -344,19 +324,19 @@ async function main() {
|
|
|
344
324
|
if (!status.running || status.pid === null) {
|
|
345
325
|
// Check for stale PID file
|
|
346
326
|
cleanStalePidFile();
|
|
347
|
-
|
|
327
|
+
log.info('Status: stopped');
|
|
348
328
|
process.exit(1);
|
|
349
329
|
}
|
|
350
330
|
// Report basic info directly
|
|
351
|
-
|
|
352
|
-
|
|
331
|
+
log.info('Status: running');
|
|
332
|
+
log.info(`PID: ${status.pid}`);
|
|
353
333
|
// Compute uptime from daemon metadata (portable) or /proc fallback (Linux)
|
|
354
334
|
if (status.startedAt) {
|
|
355
335
|
const uptimeSec = Math.floor((Date.now() - new Date(status.startedAt).getTime()) / 1000);
|
|
356
336
|
const hours = Math.floor(uptimeSec / 3600);
|
|
357
337
|
const mins = Math.floor((uptimeSec % 3600) / 60);
|
|
358
|
-
|
|
359
|
-
|
|
338
|
+
log.info(`Uptime: ${hours}h ${mins}m`);
|
|
339
|
+
log.info(`Started: ${status.startedAt}`);
|
|
360
340
|
}
|
|
361
341
|
else {
|
|
362
342
|
// Fallback: read from /proc if available (Linux)
|
|
@@ -375,16 +355,17 @@ async function main() {
|
|
|
375
355
|
const uptimeSec = Math.floor(Date.now() / 1000 - startSec);
|
|
376
356
|
const hours = Math.floor(uptimeSec / 3600);
|
|
377
357
|
const mins = Math.floor((uptimeSec % 3600) / 60);
|
|
378
|
-
|
|
358
|
+
log.info(`Uptime: ${hours}h ${mins}m`);
|
|
379
359
|
}
|
|
380
360
|
}
|
|
381
|
-
catch {
|
|
361
|
+
catch (err) {
|
|
382
362
|
// Not on Linux or can't read /proc
|
|
363
|
+
log.debug('Not on Linux or can\'t read /proc', { error: String(err?.message ?? err) });
|
|
383
364
|
}
|
|
384
365
|
}
|
|
385
366
|
const logPath = status.logPath ?? resolveDaemonLogPath();
|
|
386
|
-
|
|
387
|
-
|
|
367
|
+
log.info(`Log file: ${logPath}`);
|
|
368
|
+
log.info(`Version: v${pkg.version}`);
|
|
388
369
|
// Per-product verification posture (configured / declined / unconfigured)
|
|
389
370
|
// so an operator sees how deliveries are gated straight from `status`.
|
|
390
371
|
// Derived from config; best-effort so a config-load hiccup never breaks
|
|
@@ -393,13 +374,14 @@ async function main() {
|
|
|
393
374
|
const cfg = loadUnifiedConfig();
|
|
394
375
|
const postureLines = formatVerificationPostureLines(cfg);
|
|
395
376
|
if (postureLines.length > 0) {
|
|
396
|
-
|
|
377
|
+
log.info('');
|
|
397
378
|
for (const line of postureLines)
|
|
398
|
-
|
|
379
|
+
log.info(line);
|
|
399
380
|
}
|
|
400
381
|
}
|
|
401
|
-
catch {
|
|
382
|
+
catch (err) {
|
|
402
383
|
// Non-fatal: skip posture when config cannot be loaded.
|
|
384
|
+
log.debug('Non-fatal: skip posture when config cannot be loaded', { error: String(err?.message ?? err) });
|
|
403
385
|
}
|
|
404
386
|
// Staleness signal: warn when the RUNNING daemon (version stamped into
|
|
405
387
|
// daemon.meta.json at its startup -- possibly a different install than
|
|
@@ -407,14 +389,15 @@ async function main() {
|
|
|
407
389
|
// date or when the check cannot be established.
|
|
408
390
|
const stalenessWarning = formatStalenessWarning(await getStalenessInfo());
|
|
409
391
|
if (stalenessWarning)
|
|
410
|
-
|
|
392
|
+
log.info(stalenessWarning);
|
|
411
393
|
// Also send SIGUSR1 for detailed engine status
|
|
412
394
|
try {
|
|
413
395
|
process.kill(status.pid, 'SIGUSR1');
|
|
414
|
-
|
|
396
|
+
log.info('\nDetailed status written to daemon log.');
|
|
415
397
|
}
|
|
416
|
-
catch {
|
|
398
|
+
catch (err) {
|
|
417
399
|
// Best effort
|
|
400
|
+
log.debug('Best effort', { error: String(err?.message ?? err) });
|
|
418
401
|
}
|
|
419
402
|
});
|
|
420
403
|
// ── verify-live: earned-green readiness gate (liveness + claim) ───────
|
|
@@ -430,20 +413,20 @@ async function main() {
|
|
|
430
413
|
.action(async (opts) => {
|
|
431
414
|
const readiness = gatherDaemonReadiness();
|
|
432
415
|
if (readiness.ready) {
|
|
433
|
-
|
|
416
|
+
log.info('Daemon is live and has claimed at least one product.');
|
|
434
417
|
process.exit(0);
|
|
435
418
|
}
|
|
436
419
|
if (readiness.cause === 'not-running') {
|
|
437
|
-
|
|
420
|
+
log.error('Daemon readiness: FAILED -- the daemon is not running.');
|
|
438
421
|
}
|
|
439
422
|
else {
|
|
440
|
-
|
|
423
|
+
log.error('Daemon readiness: FAILED -- the daemon is running but has not claimed any product ' +
|
|
441
424
|
'(no "[claim] Product <id> claimed by <host>" line in the log).');
|
|
442
425
|
}
|
|
443
426
|
// Print a tail of the canonical log so the cause is visible in-line.
|
|
444
427
|
const logPath = resolveDaemonLogPath();
|
|
445
428
|
const lineCount = parseInt(opts.lines, 10);
|
|
446
|
-
|
|
429
|
+
log.error(`--- last ${lineCount} line(s) of ${logPath} ---`);
|
|
447
430
|
await tailFile(logPath, lineCount);
|
|
448
431
|
process.exit(1);
|
|
449
432
|
});
|
|
@@ -502,7 +485,7 @@ async function main() {
|
|
|
502
485
|
let harness;
|
|
503
486
|
if (opts.harness !== undefined) {
|
|
504
487
|
if (!isOperatorHarness(opts.harness)) {
|
|
505
|
-
|
|
488
|
+
log.error(`Invalid --harness '${opts.harness}'. Expected one of: ${OPERATOR_HARNESSES.join(', ')}.`);
|
|
506
489
|
process.exit(1);
|
|
507
490
|
}
|
|
508
491
|
harness = opts.harness;
|
|
@@ -517,7 +500,7 @@ async function main() {
|
|
|
517
500
|
});
|
|
518
501
|
}
|
|
519
502
|
catch (err) {
|
|
520
|
-
|
|
503
|
+
log.error(`init --non-interactive: ${err instanceof Error ? err.message : String(err)}`);
|
|
521
504
|
process.exit(1);
|
|
522
505
|
}
|
|
523
506
|
});
|
|
@@ -547,7 +530,7 @@ async function main() {
|
|
|
547
530
|
await runBackfillFrtProse({ productId: opts.product, dryRun: opts.dryRun === true });
|
|
548
531
|
}
|
|
549
532
|
catch (err) {
|
|
550
|
-
|
|
533
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
551
534
|
process.exit(1);
|
|
552
535
|
}
|
|
553
536
|
});
|
|
@@ -561,7 +544,7 @@ async function main() {
|
|
|
561
544
|
await runVerifySetupCommand({ config: opts.config });
|
|
562
545
|
}
|
|
563
546
|
catch (err) {
|
|
564
|
-
|
|
547
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
565
548
|
process.exit(1);
|
|
566
549
|
}
|
|
567
550
|
});
|
|
@@ -576,7 +559,7 @@ async function main() {
|
|
|
576
559
|
.action(async (token, opts) => {
|
|
577
560
|
try {
|
|
578
561
|
if (opts.harness !== undefined && !isOperatorHarness(opts.harness)) {
|
|
579
|
-
|
|
562
|
+
log.error(`Invalid --harness '${opts.harness}'. Expected one of: ${OPERATOR_HARNESSES.join(', ')}.`);
|
|
580
563
|
process.exit(1);
|
|
581
564
|
}
|
|
582
565
|
await runConnect({
|
|
@@ -588,7 +571,7 @@ async function main() {
|
|
|
588
571
|
});
|
|
589
572
|
}
|
|
590
573
|
catch (err) {
|
|
591
|
-
|
|
574
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
592
575
|
process.exit(1);
|
|
593
576
|
}
|
|
594
577
|
});
|
|
@@ -610,7 +593,7 @@ async function main() {
|
|
|
610
593
|
process.exit(code);
|
|
611
594
|
}
|
|
612
595
|
catch (err) {
|
|
613
|
-
|
|
596
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
614
597
|
process.exit(1);
|
|
615
598
|
}
|
|
616
599
|
});
|
|
@@ -627,15 +610,15 @@ async function main() {
|
|
|
627
610
|
.option('-C, --repo <path>', 'Repo path to scaffold (default: cwd)')
|
|
628
611
|
.action((target, opts) => {
|
|
629
612
|
if (!isOperatorHarness(target)) {
|
|
630
|
-
|
|
613
|
+
log.error(`Invalid harness target '${target}'. Expected one of: ${OPERATOR_HARNESSES.join(', ')}.`);
|
|
631
614
|
process.exit(1);
|
|
632
615
|
}
|
|
633
616
|
const result = runHarnessAdd({ target, repoPath: opts.repo });
|
|
634
617
|
if (result.ok) {
|
|
635
|
-
|
|
618
|
+
log.info(result.message);
|
|
636
619
|
}
|
|
637
620
|
else {
|
|
638
|
-
|
|
621
|
+
log.error(result.message);
|
|
639
622
|
process.exit(1);
|
|
640
623
|
}
|
|
641
624
|
});
|
|
@@ -651,18 +634,18 @@ async function main() {
|
|
|
651
634
|
// Show current install mode and version
|
|
652
635
|
const mode = detectInstallMode();
|
|
653
636
|
const info = await getVersionInfo();
|
|
654
|
-
|
|
655
|
-
|
|
637
|
+
log.info(`Install mode: ${mode}`);
|
|
638
|
+
log.info(`Current version: v${info.current}`);
|
|
656
639
|
if (!info.updateAvailable || !info.latest) {
|
|
657
640
|
if (info.latest === null) {
|
|
658
|
-
|
|
641
|
+
log.info('Could not check for updates.');
|
|
659
642
|
}
|
|
660
643
|
else {
|
|
661
|
-
|
|
644
|
+
log.info('Already up to date.');
|
|
662
645
|
}
|
|
663
646
|
process.exit(0);
|
|
664
647
|
}
|
|
665
|
-
|
|
648
|
+
log.info(`Update available: v${info.latest}`);
|
|
666
649
|
if (opts.checkOnly) {
|
|
667
650
|
process.exit(0);
|
|
668
651
|
}
|
|
@@ -673,20 +656,20 @@ async function main() {
|
|
|
673
656
|
// Default: drain-to-idle before replacing files (the update must not
|
|
674
657
|
// proceed while the daemon is live). --now forces immediate teardown.
|
|
675
658
|
writeStopRequest(opts.now ? 'now' : 'drain');
|
|
676
|
-
|
|
659
|
+
log.info(opts.now
|
|
677
660
|
? `Stopping daemon now (PID ${status.pid})...`
|
|
678
661
|
: `Draining daemon to a zero-team boundary before update (PID ${status.pid})...`);
|
|
679
662
|
try {
|
|
680
663
|
await stopDaemon();
|
|
681
|
-
|
|
664
|
+
log.info('Daemon stopped.');
|
|
682
665
|
}
|
|
683
666
|
catch (err) {
|
|
684
667
|
if (!opts.now) {
|
|
685
|
-
|
|
686
|
-
|
|
668
|
+
log.info('Daemon is still draining the current batch; the update will not proceed until it is down.');
|
|
669
|
+
log.info('Re-run `telora-daemon update` once it has stopped, or `telora-daemon update --now` to force.');
|
|
687
670
|
process.exit(0);
|
|
688
671
|
}
|
|
689
|
-
|
|
672
|
+
log.error(`Failed to stop daemon: ${err instanceof Error ? err.message : String(err)}`);
|
|
690
673
|
process.exit(1);
|
|
691
674
|
}
|
|
692
675
|
}
|
|
@@ -695,48 +678,48 @@ async function main() {
|
|
|
695
678
|
skipMigrations: opts.migrations === false,
|
|
696
679
|
});
|
|
697
680
|
if (!result.success) {
|
|
698
|
-
|
|
681
|
+
log.error(`Update failed: ${result.error ?? 'unknown error'}`);
|
|
699
682
|
if (result.snapshotPath) {
|
|
700
|
-
|
|
683
|
+
log.info('Attempting automatic rollback...');
|
|
701
684
|
const rolled = await rollback(result.snapshotPath);
|
|
702
685
|
if (rolled) {
|
|
703
|
-
|
|
686
|
+
log.info('Rollback successful.');
|
|
704
687
|
}
|
|
705
688
|
else {
|
|
706
|
-
|
|
707
|
-
|
|
689
|
+
log.error('Automatic rollback failed.');
|
|
690
|
+
log.error(`Manual rollback: telora-daemon rollback ${result.snapshotPath}`);
|
|
708
691
|
}
|
|
709
692
|
}
|
|
710
693
|
process.exit(1);
|
|
711
694
|
}
|
|
712
|
-
|
|
695
|
+
log.info(`Updated: v${result.previousVersion} -> v${result.newVersion}`);
|
|
713
696
|
if (result.migrationsApplied) {
|
|
714
|
-
|
|
697
|
+
log.info('Migrations applied successfully.');
|
|
715
698
|
}
|
|
716
699
|
// npx mode: the running binary lives in a cache we just cleared, so we
|
|
717
700
|
// can't auto-restart. The daemon refuses to run from an npx cache (it
|
|
718
701
|
// can't self-update), so the path forward is a stable global install --
|
|
719
702
|
// not another npx re-launch.
|
|
720
703
|
if (result.requiresManualRestart) {
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
704
|
+
log.info('');
|
|
705
|
+
log.info('npx-cache cleared. Install the daemon globally, then start it:');
|
|
706
|
+
log.info(' npm install -g @telora/daemon');
|
|
707
|
+
log.info(' telora-daemon run');
|
|
725
708
|
return;
|
|
726
709
|
}
|
|
727
710
|
// Restart if requested and was running
|
|
728
711
|
if (opts.restart !== false && wasRunning) {
|
|
729
712
|
const childPid = startDaemonBackground({});
|
|
730
713
|
const logPath = resolveDaemonLogPath();
|
|
731
|
-
|
|
732
|
-
|
|
714
|
+
log.info(`Daemon restarted (PID ${childPid})`);
|
|
715
|
+
log.info(`Log file: ${logPath}`);
|
|
733
716
|
const healthy = await waitForHealthy(5_000);
|
|
734
717
|
if (healthy) {
|
|
735
|
-
|
|
718
|
+
log.info('Daemon is healthy.');
|
|
736
719
|
}
|
|
737
720
|
else {
|
|
738
|
-
|
|
739
|
-
|
|
721
|
+
log.warn('Warning: daemon may not have started successfully.');
|
|
722
|
+
log.warn('Check logs: telora-daemon logs');
|
|
740
723
|
}
|
|
741
724
|
}
|
|
742
725
|
});
|
|
@@ -745,13 +728,13 @@ async function main() {
|
|
|
745
728
|
.command('rollback <snapshot>')
|
|
746
729
|
.description('Rollback to a previous version from a snapshot file')
|
|
747
730
|
.action(async (snapshotPath) => {
|
|
748
|
-
|
|
731
|
+
log.info(`Rolling back from snapshot: ${snapshotPath}`);
|
|
749
732
|
const success = await rollback(snapshotPath);
|
|
750
733
|
if (success) {
|
|
751
|
-
|
|
734
|
+
log.info('Rollback complete.');
|
|
752
735
|
}
|
|
753
736
|
else {
|
|
754
|
-
|
|
737
|
+
log.error('Rollback failed.');
|
|
755
738
|
process.exit(1);
|
|
756
739
|
}
|
|
757
740
|
});
|
|
@@ -762,23 +745,23 @@ async function main() {
|
|
|
762
745
|
.action(async () => {
|
|
763
746
|
const mode = detectInstallMode();
|
|
764
747
|
const info = await getVersionInfo();
|
|
765
|
-
|
|
766
|
-
|
|
748
|
+
log.info(`Install mode: ${mode}`);
|
|
749
|
+
log.info(`Current version: v${info.current}`);
|
|
767
750
|
if (info.latest === null) {
|
|
768
|
-
|
|
751
|
+
log.info('Could not check for updates.');
|
|
769
752
|
process.exit(0);
|
|
770
753
|
}
|
|
771
754
|
if (info.updateAvailable) {
|
|
772
|
-
|
|
755
|
+
log.info(`Update available: v${info.latest}`);
|
|
773
756
|
if (mode === 'npm') {
|
|
774
|
-
|
|
757
|
+
log.info('Run: telora-daemon update');
|
|
775
758
|
}
|
|
776
759
|
else {
|
|
777
|
-
|
|
760
|
+
log.info('Run: telora-daemon update (will git pull + rebuild)');
|
|
778
761
|
}
|
|
779
762
|
process.exit(1);
|
|
780
763
|
}
|
|
781
|
-
|
|
764
|
+
log.info('Already up to date.');
|
|
782
765
|
process.exit(0);
|
|
783
766
|
});
|
|
784
767
|
// ── Default action: if no subcommand given, show help ─────────────────
|
|
@@ -792,7 +775,7 @@ async function main() {
|
|
|
792
775
|
}
|
|
793
776
|
// Run
|
|
794
777
|
main().catch((err) => {
|
|
795
|
-
|
|
778
|
+
log.error('Fatal error:', err instanceof Error ? err.message : String(err));
|
|
796
779
|
process.exit(1);
|
|
797
780
|
});
|
|
798
781
|
//# sourceMappingURL=index.js.map
|