@telora/daemon 0.24.17 → 0.24.26
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 +12 -3
- package/dist/audit/audit-prompt.d.ts.map +1 -1
- package/dist/audit/audit-prompt.js +15 -0
- package/dist/audit/audit-prompt.js.map +1 -1
- package/dist/ci/candidate-failure-record.d.ts +104 -0
- package/dist/ci/candidate-failure-record.d.ts.map +1 -0
- package/dist/ci/candidate-failure-record.js +135 -0
- package/dist/ci/candidate-failure-record.js.map +1 -0
- package/dist/ci/candidate-ref.d.ts.map +1 -1
- package/dist/ci/candidate-ref.js +10 -3
- package/dist/ci/candidate-ref.js.map +1 -1
- package/dist/ci/ci-status-git.d.ts.map +1 -1
- package/dist/ci/ci-status-git.js +1 -0
- package/dist/ci/ci-status-git.js.map +1 -1
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +1 -0
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/ci/gate-ref.d.ts +10 -1
- package/dist/ci/gate-ref.d.ts.map +1 -1
- package/dist/ci/gate-ref.js +11 -4
- package/dist/ci/gate-ref.js.map +1 -1
- package/dist/ci/product-ci-repo.d.ts.map +1 -1
- package/dist/ci/product-ci-repo.js +3 -2
- package/dist/ci/product-ci-repo.js.map +1 -1
- package/dist/completion/completion-event/event.d.ts +4 -3
- package/dist/completion/completion-event/event.d.ts.map +1 -1
- package/dist/completion/completion-event/event.js.map +1 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts +19 -11
- package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts.map +1 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.js +36 -36
- package/dist/completion/review-cycle-budget/review-cycle-cap.js.map +1 -1
- package/dist/completion/review-cycle-budget/review-loop-detection.d.ts +101 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.d.ts.map +1 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.js +105 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.js.map +1 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.d.ts +70 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.d.ts.map +1 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.js +98 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.js.map +1 -0
- package/dist/completion/review-exit/review-defect-detector.d.ts +71 -49
- package/dist/completion/review-exit/review-defect-detector.d.ts.map +1 -1
- package/dist/completion/review-exit/review-defect-detector.js +75 -69
- package/dist/completion/review-exit/review-defect-detector.js.map +1 -1
- package/dist/completion/review-exit/review-exit-attribution.d.ts +1 -1
- package/dist/completion/review-exit/review-exit-attribution.js +1 -1
- package/dist/completion/review-exit/review-exit-deps.d.ts +5 -2
- package/dist/completion/review-exit/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-deps.js +1 -1
- package/dist/completion/review-exit/review-exit-evidence.d.ts +10 -1
- package/dist/completion/review-exit/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-evidence.js +17 -14
- package/dist/completion/review-exit/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit/review-exit-foreign-findings.d.ts +1 -1
- package/dist/completion/review-exit/review-exit-foreign-findings.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-phase.js +12 -8
- package/dist/completion/review-exit/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade/review-next-step.d.ts +12 -3
- package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-next-step.js +10 -1
- package/dist/completion/state-cascade/review-next-step.js.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.js +10 -4
- package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
- package/dist/completion/state-cascade/state-cascade.d.ts +3 -0
- package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade/state-cascade.js +16 -1
- package/dist/completion/state-cascade/state-cascade.js.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.js +6 -4
- package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
- package/dist/completion/team-outcome/apply-turn.d.ts.map +1 -1
- package/dist/completion/team-outcome/apply-turn.js +9 -4
- package/dist/completion/team-outcome/apply-turn.js.map +1 -1
- package/dist/completion/team-outcome/decide-turn-entry-rows.d.ts.map +1 -1
- package/dist/completion/team-outcome/decide-turn-entry-rows.js +28 -3
- package/dist/completion/team-outcome/decide-turn-entry-rows.js.map +1 -1
- package/dist/completion/team-outcome/decide.d.ts.map +1 -1
- package/dist/completion/team-outcome/decide.js +1 -0
- package/dist/completion/team-outcome/decide.js.map +1 -1
- package/dist/completion/team-outcome/exit-limits.d.ts +6 -0
- package/dist/completion/team-outcome/exit-limits.d.ts.map +1 -1
- package/dist/completion/team-outcome/exit-limits.js +6 -0
- package/dist/completion/team-outcome/exit-limits.js.map +1 -1
- package/dist/completion/team-outcome/exit-pipeline-state.d.ts +5 -0
- package/dist/completion/team-outcome/exit-pipeline-state.d.ts.map +1 -1
- package/dist/completion/team-outcome/exit-pipeline-state.js.map +1 -1
- package/dist/completion/team-teardown/session-hold-bounds.d.ts +10 -1
- package/dist/completion/team-teardown/session-hold-bounds.d.ts.map +1 -1
- package/dist/completion/team-teardown/session-hold-bounds.js +11 -0
- package/dist/completion/team-teardown/session-hold-bounds.js.map +1 -1
- package/dist/completion/team-teardown/session-hold.d.ts.map +1 -1
- package/dist/completion/team-teardown/session-hold.js +2 -0
- package/dist/completion/team-teardown/session-hold.js.map +1 -1
- package/dist/composition/engine-start-context.d.ts.map +1 -1
- package/dist/composition/engine-start-context.js +9 -1
- package/dist/composition/engine-start-context.js.map +1 -1
- package/dist/composition/execution-merge-context.d.ts +13 -0
- package/dist/composition/execution-merge-context.d.ts.map +1 -1
- package/dist/composition/execution-merge-context.js +76 -3
- package/dist/composition/execution-merge-context.js.map +1 -1
- package/dist/composition/execution-spawn-context.d.ts.map +1 -1
- package/dist/composition/execution-spawn-context.js +2 -0
- package/dist/composition/execution-spawn-context.js.map +1 -1
- package/dist/composition/focus-activity-live-sources.d.ts.map +1 -1
- package/dist/composition/focus-activity-live-sources.js +1 -0
- package/dist/composition/focus-activity-live-sources.js.map +1 -1
- package/dist/composition/judgement-contexts.d.ts.map +1 -1
- package/dist/composition/judgement-contexts.js +8 -2
- package/dist/composition/judgement-contexts.js.map +1 -1
- package/dist/composition/review-exit-context.d.ts.map +1 -1
- package/dist/composition/review-exit-context.js +2 -0
- package/dist/composition/review-exit-context.js.map +1 -1
- package/dist/composition/review-loop-context.d.ts +28 -0
- package/dist/composition/review-loop-context.d.ts.map +1 -0
- package/dist/composition/review-loop-context.js +147 -0
- package/dist/composition/review-loop-context.js.map +1 -0
- package/dist/composition/runtime-heartbeat-context.d.ts +11 -0
- package/dist/composition/runtime-heartbeat-context.d.ts.map +1 -1
- package/dist/composition/runtime-heartbeat-context.js +33 -2
- package/dist/composition/runtime-heartbeat-context.js.map +1 -1
- package/dist/composition/spawn-pass-deps.d.ts.map +1 -1
- package/dist/composition/spawn-pass-deps.js +3 -0
- package/dist/composition/spawn-pass-deps.js.map +1 -1
- package/dist/composition/state-cascade-context.d.ts.map +1 -1
- package/dist/composition/state-cascade-context.js +3 -1
- package/dist/composition/state-cascade-context.js.map +1 -1
- package/dist/composition/team-liveness-phase-sources.d.ts.map +1 -1
- package/dist/composition/team-liveness-phase-sources.js +1 -0
- package/dist/composition/team-liveness-phase-sources.js.map +1 -1
- package/dist/composition/tower-escalation-context.d.ts +12 -0
- package/dist/composition/tower-escalation-context.d.ts.map +1 -0
- package/dist/composition/tower-escalation-context.js +109 -0
- package/dist/composition/tower-escalation-context.js.map +1 -0
- package/dist/composition/verification-context.d.ts.map +1 -1
- package/dist/composition/verification-context.js +34 -4
- package/dist/composition/verification-context.js.map +1 -1
- package/dist/composition/workstation-intervals-context.d.ts +3 -0
- package/dist/composition/workstation-intervals-context.d.ts.map +1 -0
- package/dist/composition/workstation-intervals-context.js +33 -0
- package/dist/composition/workstation-intervals-context.js.map +1 -0
- package/dist/daemon-state/awaiting-slot.d.ts +18 -1
- package/dist/daemon-state/awaiting-slot.d.ts.map +1 -1
- package/dist/daemon-state/awaiting-slot.js +7 -0
- package/dist/daemon-state/awaiting-slot.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts +7 -7
- package/dist/delivery/recorded-concerns.d.ts +63 -28
- package/dist/delivery/recorded-concerns.d.ts.map +1 -1
- package/dist/delivery/recorded-concerns.js +72 -28
- package/dist/delivery/recorded-concerns.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +8 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +1 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/focus/control-state.d.ts +6 -4
- package/dist/focus/control-state.d.ts.map +1 -1
- package/dist/focus/control-state.js +6 -4
- package/dist/focus/control-state.js.map +1 -1
- package/dist/focus/daemon-contexts-judgement.d.ts +6 -0
- package/dist/focus/daemon-contexts-judgement.d.ts.map +1 -1
- package/dist/focus/daemon-contexts.d.ts +6 -0
- package/dist/focus/daemon-contexts.d.ts.map +1 -1
- package/dist/focus/daemon-contexts.js.map +1 -1
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +3 -1
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-executor.d.ts.map +1 -1
- package/dist/focus/focus-executor.js +3 -2
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus/focus-loop-registry.js +42 -0
- package/dist/focus/focus-loop-registry.js.map +1 -1
- package/dist/focus/focus-poller-auto-advance.d.ts +4 -2
- package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
- package/dist/focus/focus-poller-auto-advance.js +24 -18
- package/dist/focus/focus-poller-auto-advance.js.map +1 -1
- package/dist/focus/focus-poller-spawn.d.ts.map +1 -1
- package/dist/focus/focus-poller-spawn.js +8 -6
- package/dist/focus/focus-poller-spawn.js.map +1 -1
- package/dist/focus/heartbeat-metadata.d.ts +5 -0
- package/dist/focus/heartbeat-metadata.d.ts.map +1 -1
- package/dist/focus/heartbeat-metadata.js +12 -0
- package/dist/focus/heartbeat-metadata.js.map +1 -1
- package/dist/focus/heartbeat.d.ts +9 -2
- package/dist/focus/heartbeat.d.ts.map +1 -1
- package/dist/focus/heartbeat.js +10 -1
- package/dist/focus/heartbeat.js.map +1 -1
- package/dist/focus/host-pressure.d.ts +77 -0
- package/dist/focus/host-pressure.d.ts.map +1 -0
- package/dist/focus/host-pressure.js +83 -0
- package/dist/focus/host-pressure.js.map +1 -0
- package/dist/focus/pending-directive-gates.d.ts +14 -0
- package/dist/focus/pending-directive-gates.d.ts.map +1 -1
- package/dist/focus/pending-directive-gates.js +25 -1
- package/dist/focus/pending-directive-gates.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +7 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.js +2 -0
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
- package/dist/focus/ready-focus-team-work.d.ts +9 -4
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
- package/dist/focus/ready-focus-team-work.js +14 -3
- package/dist/focus/ready-focus-team-work.js.map +1 -1
- package/dist/focus/verify-open-issues.d.ts +3 -2
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +6 -4
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/focus/workstation-intervals.d.ts +83 -0
- package/dist/focus/workstation-intervals.d.ts.map +1 -0
- package/dist/focus/workstation-intervals.js +81 -0
- package/dist/focus/workstation-intervals.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +5 -2
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +2 -2
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/git/types.js +1 -1
- package/dist/merge/candidate-ci-failures.d.ts +72 -0
- package/dist/merge/candidate-ci-failures.d.ts.map +1 -0
- package/dist/merge/candidate-ci-failures.js +240 -0
- package/dist/merge/candidate-ci-failures.js.map +1 -0
- package/dist/merge/candidate-red-record.d.ts +44 -0
- package/dist/merge/candidate-red-record.d.ts.map +1 -0
- package/dist/merge/candidate-red-record.js +98 -0
- package/dist/merge/candidate-red-record.js.map +1 -0
- package/dist/merge/candidate-rework.d.ts +4 -3
- package/dist/merge/candidate-rework.d.ts.map +1 -1
- package/dist/merge/candidate-rework.js +46 -14
- package/dist/merge/candidate-rework.js.map +1 -1
- package/dist/merge/candidate-tip-attribution.d.ts +135 -0
- package/dist/merge/candidate-tip-attribution.d.ts.map +1 -0
- package/dist/merge/candidate-tip-attribution.js +319 -0
- package/dist/merge/candidate-tip-attribution.js.map +1 -0
- package/dist/merge/completion-merge-driver.d.ts +49 -5
- package/dist/merge/completion-merge-driver.d.ts.map +1 -1
- package/dist/merge/completion-merge-driver.js +56 -2
- package/dist/merge/completion-merge-driver.js.map +1 -1
- package/dist/merge/completion-merge-gate.d.ts +4 -1
- package/dist/merge/completion-merge-gate.d.ts.map +1 -1
- package/dist/merge/completion-merge-gate.js +9 -8
- package/dist/merge/completion-merge-gate.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +4 -1
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/qa-author-section.d.ts.map +1 -1
- package/dist/prompt-sections/qa-author-section.js +18 -1
- package/dist/prompt-sections/qa-author-section.js.map +1 -1
- package/dist/prompt-sections/scoping-sections.d.ts +0 -12
- package/dist/prompt-sections/scoping-sections.d.ts.map +1 -1
- package/dist/prompt-sections/scoping-sections.js +16 -2
- package/dist/prompt-sections/scoping-sections.js.map +1 -1
- package/dist/prompts/bounded-universals.d.ts +13 -0
- package/dist/prompts/bounded-universals.d.ts.map +1 -0
- package/dist/prompts/bounded-universals.js +32 -0
- package/dist/prompts/bounded-universals.js.map +1 -0
- package/dist/queries/api-client/shared.d.ts +2 -1
- package/dist/queries/api-client/shared.d.ts.map +1 -1
- package/dist/queries/api-client/shared.js +36 -1
- package/dist/queries/api-client/shared.js.map +1 -1
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.d.ts +35 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.d.ts.map +1 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.js +42 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.js.map +1 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.d.ts +16 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.d.ts.map +1 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.js +51 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.js.map +1 -0
- package/dist/queries/deliveries/issues.d.ts.map +1 -1
- package/dist/queries/deliveries/issues.js +1 -0
- package/dist/queries/deliveries/issues.js.map +1 -1
- package/dist/queries/escalations/escalation-consumption.d.ts +13 -0
- package/dist/queries/escalations/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalations/escalation-consumption.js +12 -2
- package/dist/queries/escalations/escalation-consumption.js.map +1 -1
- package/dist/queries/escalations/tower-escalations.d.ts +82 -0
- package/dist/queries/escalations/tower-escalations.d.ts.map +1 -0
- package/dist/queries/escalations/tower-escalations.js +97 -0
- package/dist/queries/escalations/tower-escalations.js.map +1 -0
- package/dist/queries/focus-review/recorded-concern-ids.d.ts +48 -11
- package/dist/queries/focus-review/recorded-concern-ids.d.ts.map +1 -1
- package/dist/queries/focus-review/recorded-concern-ids.js +42 -12
- package/dist/queries/focus-review/recorded-concern-ids.js.map +1 -1
- package/dist/queries/focus-review/review-criterion-verdicts.d.ts +37 -0
- package/dist/queries/focus-review/review-criterion-verdicts.d.ts.map +1 -0
- package/dist/queries/focus-review/review-criterion-verdicts.js +64 -0
- package/dist/queries/focus-review/review-criterion-verdicts.js.map +1 -0
- package/dist/queries/focus-review/review-finding-facts.d.ts +18 -6
- package/dist/queries/focus-review/review-finding-facts.d.ts.map +1 -1
- package/dist/queries/focus-review/review-finding-facts.js +21 -8
- package/dist/queries/focus-review/review-finding-facts.js.map +1 -1
- package/dist/queries/focuses/ended-arm.d.ts +56 -13
- package/dist/queries/focuses/ended-arm.d.ts.map +1 -1
- package/dist/queries/focuses/ended-arm.js +40 -14
- package/dist/queries/focuses/ended-arm.js.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.d.ts +12 -0
- package/dist/queries/focuses/focus-criteria-standing.d.ts.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.js +13 -0
- package/dist/queries/focuses/focus-criteria-standing.js.map +1 -1
- package/dist/queries/focuses/focus-discovery.d.ts +14 -3
- package/dist/queries/focuses/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focuses/focus-discovery.js +2 -19
- package/dist/queries/focuses/focus-discovery.js.map +1 -1
- package/dist/queries/focuses/focuses.d.ts +15 -12
- package/dist/queries/focuses/focuses.d.ts.map +1 -1
- package/dist/queries/focuses/focuses.js +15 -13
- package/dist/queries/focuses/focuses.js.map +1 -1
- package/dist/queries/sessions/daemon-connection.d.ts.map +1 -1
- package/dist/queries/sessions/daemon-connection.js +1 -0
- package/dist/queries/sessions/daemon-connection.js.map +1 -1
- package/dist/queries/sessions/sessions.d.ts.map +1 -1
- package/dist/queries/sessions/sessions.js +2 -1
- package/dist/queries/sessions/sessions.js.map +1 -1
- package/dist/queries/tower-decisions/tower-decisions.d.ts +103 -0
- package/dist/queries/tower-decisions/tower-decisions.d.ts.map +1 -0
- package/dist/queries/tower-decisions/tower-decisions.js +138 -0
- package/dist/queries/tower-decisions/tower-decisions.js.map +1 -0
- package/dist/queries/verification/verification.js +1 -1
- package/dist/queries/wire-schemas/schemas.d.ts +2 -0
- package/dist/queries/wire-schemas/schemas.d.ts.map +1 -1
- package/dist/queries/wire-schemas/schemas.js +8 -2
- package/dist/queries/wire-schemas/schemas.js.map +1 -1
- package/dist/queries/workstation-intervals/workstation-intervals.d.ts +52 -0
- package/dist/queries/workstation-intervals/workstation-intervals.d.ts.map +1 -0
- package/dist/queries/workstation-intervals/workstation-intervals.js +49 -0
- package/dist/queries/workstation-intervals/workstation-intervals.js.map +1 -0
- package/dist/resolvers/escalation-answers.d.ts +31 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +31 -17
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/focus-criteria-standing.d.ts.map +1 -1
- package/dist/resolvers/focus-criteria-standing.js +20 -0
- package/dist/resolvers/focus-criteria-standing.js.map +1 -1
- package/dist/shell/unified-engine-lifecycle.d.ts +11 -1
- package/dist/shell/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/shell/unified-engine-lifecycle.js +10 -1
- package/dist/shell/unified-engine-lifecycle.js.map +1 -1
- package/dist/shell/unified-shell.d.ts +25 -0
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +26 -80
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/shell/update-restart.d.ts +47 -0
- package/dist/shell/update-restart.d.ts.map +1 -0
- package/dist/shell/update-restart.js +124 -0
- package/dist/shell/update-restart.js.map +1 -0
- package/dist/spawn/directive-dispatch.d.ts.map +1 -1
- package/dist/spawn/directive-dispatch.js +1 -0
- package/dist/spawn/directive-dispatch.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts +4 -3
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/live-answer-delivery.d.ts +53 -0
- package/dist/spawn/live-answer-delivery.d.ts.map +1 -0
- package/dist/spawn/live-answer-delivery.js +26 -0
- package/dist/spawn/live-answer-delivery.js.map +1 -0
- package/dist/spawn/routing-decider-spawn.d.ts +64 -2
- package/dist/spawn/routing-decider-spawn.d.ts.map +1 -1
- package/dist/spawn/routing-decider-spawn.js +65 -20
- package/dist/spawn/routing-decider-spawn.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +7 -5
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +11 -7
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/supervision/escalation-suppression.js +1 -1
- package/dist/supervision/review-cycle-cap-hold.d.ts +11 -5
- package/dist/supervision/review-cycle-cap-hold.d.ts.map +1 -1
- package/dist/supervision/review-cycle-cap-hold.js +29 -11
- package/dist/supervision/review-cycle-cap-hold.js.map +1 -1
- package/dist/supervision/review-loop-detector.d.ts +48 -0
- package/dist/supervision/review-loop-detector.d.ts.map +1 -0
- package/dist/supervision/review-loop-detector.js +13 -0
- package/dist/supervision/review-loop-detector.js.map +1 -0
- package/dist/supervision/review-loop-hold.d.ts +29 -0
- package/dist/supervision/review-loop-hold.d.ts.map +1 -0
- package/dist/supervision/review-loop-hold.js +99 -0
- package/dist/supervision/review-loop-hold.js.map +1 -0
- package/dist/supervision/stall-detector-config.d.ts +8 -0
- package/dist/supervision/stall-detector-config.d.ts.map +1 -1
- package/dist/supervision/stall-detector-config.js +14 -3
- package/dist/supervision/stall-detector-config.js.map +1 -1
- package/dist/supervision/stop-registry.d.ts +3 -0
- package/dist/supervision/stop-registry.d.ts.map +1 -1
- package/dist/supervision/stop-registry.js +3 -1
- package/dist/supervision/stop-registry.js.map +1 -1
- package/dist/supervision/stop-rows-review-loop.d.ts +35 -0
- package/dist/supervision/stop-rows-review-loop.d.ts.map +1 -0
- package/dist/supervision/stop-rows-review-loop.js +150 -0
- package/dist/supervision/stop-rows-review-loop.js.map +1 -0
- package/dist/supervision/stop-rows-team-session.d.ts +1 -1
- package/dist/supervision/stop-rows-team-session.d.ts.map +1 -1
- package/dist/supervision/stop-rows-team-session.js.map +1 -1
- package/dist/supervision/unreviewed-settle-detector.d.ts +7 -2
- package/dist/supervision/unreviewed-settle-detector.d.ts.map +1 -1
- package/dist/supervision/unreviewed-settle-detector.js +15 -2
- package/dist/supervision/unreviewed-settle-detector.js.map +1 -1
- package/dist/templates/agents-md.d.ts.map +1 -1
- package/dist/templates/agents-md.js +1 -0
- package/dist/templates/agents-md.js.map +1 -1
- package/dist/templates/claude-md.d.ts +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +12 -0
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/testing/fixtures/api-client.js +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.d.ts +7 -2
- package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.js +11 -1
- package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/merge-log-capture.d.ts.map +1 -1
- package/dist/testing/fixtures/merge-log-capture.js +1 -0
- package/dist/testing/fixtures/merge-log-capture.js.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts +4 -0
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +15 -2
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/testing/fixtures/recording-api-client.js +1 -1
- package/dist/testing/fixtures/review-exit-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/review-exit-deps.js +3 -1
- package/dist/testing/fixtures/review-exit-deps.js.map +1 -1
- package/dist/testing/fixtures/review-loop.d.ts +19 -0
- package/dist/testing/fixtures/review-loop.d.ts.map +1 -0
- package/dist/testing/fixtures/review-loop.js +30 -0
- package/dist/testing/fixtures/review-loop.js.map +1 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js +1 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js.map +1 -1
- package/dist/testing/fixtures/tower-loop.d.ts +28 -0
- package/dist/testing/fixtures/tower-loop.d.ts.map +1 -0
- package/dist/testing/fixtures/tower-loop.js +83 -0
- package/dist/testing/fixtures/tower-loop.js.map +1 -0
- package/dist/testing/fixtures/verification-deps.d.ts +7 -0
- package/dist/testing/fixtures/verification-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/verification-deps.js +17 -1
- package/dist/testing/fixtures/verification-deps.js.map +1 -1
- package/dist/testing/fixtures/vitest-failure-log.d.ts.map +1 -1
- package/dist/testing/fixtures/vitest-failure-log.js +2 -1
- package/dist/testing/fixtures/vitest-failure-log.js.map +1 -1
- package/dist/tower/tower-escalation-gather.d.ts +33 -0
- package/dist/tower/tower-escalation-gather.d.ts.map +1 -0
- package/dist/tower/tower-escalation-gather.js +38 -0
- package/dist/tower/tower-escalation-gather.js.map +1 -0
- package/dist/tower/tower-escalation-prompt.d.ts +62 -0
- package/dist/tower/tower-escalation-prompt.d.ts.map +1 -0
- package/dist/tower/tower-escalation-prompt.js +130 -0
- package/dist/tower/tower-escalation-prompt.js.map +1 -0
- package/dist/tower/tower-escalation-routing.d.ts +49 -0
- package/dist/tower/tower-escalation-routing.d.ts.map +1 -0
- package/dist/tower/tower-escalation-routing.js +53 -0
- package/dist/tower/tower-escalation-routing.js.map +1 -0
- package/dist/tower/tower-escalation-session.d.ts +149 -0
- package/dist/tower/tower-escalation-session.d.ts.map +1 -0
- package/dist/tower/tower-escalation-session.js +238 -0
- package/dist/tower/tower-escalation-session.js.map +1 -0
- package/dist/tower/tower-supervisor-history.d.ts +129 -0
- package/dist/tower/tower-supervisor-history.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-history.js +217 -0
- package/dist/tower/tower-supervisor-history.js.map +1 -0
- package/dist/tower/tower-supervisor-prompt.d.ts +21 -0
- package/dist/tower/tower-supervisor-prompt.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-prompt.js +205 -0
- package/dist/tower/tower-supervisor-prompt.js.map +1 -0
- package/dist/tower/tower-supervisor-session.d.ts +220 -0
- package/dist/tower/tower-supervisor-session.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-session.js +307 -0
- package/dist/tower/tower-supervisor-session.js.map +1 -0
- package/dist/tower/tower-supervisor.d.ts +86 -0
- package/dist/tower/tower-supervisor.d.ts.map +1 -0
- package/dist/tower/tower-supervisor.js +8 -0
- package/dist/tower/tower-supervisor.js.map +1 -0
- package/dist/types/index.js +1 -1
- package/dist/update/auto-update.d.ts +11 -5
- package/dist/update/auto-update.d.ts.map +1 -1
- package/dist/update/auto-update.js +11 -5
- package/dist/update/auto-update.js.map +1 -1
- package/dist/update/restart-contract.d.ts +62 -0
- package/dist/update/restart-contract.d.ts.map +1 -0
- package/dist/update/restart-contract.js +137 -0
- package/dist/update/restart-contract.js.map +1 -0
- package/dist/verify/attribution/verification-baseline-run.d.ts.map +1 -1
- package/dist/verify/attribution/verification-baseline-run.js +1 -0
- package/dist/verify/attribution/verification-baseline-run.js.map +1 -1
- package/dist/verify/ci-gate/ci-gate-dispatch.d.ts +3 -0
- package/dist/verify/ci-gate/ci-gate-dispatch.d.ts.map +1 -1
- package/dist/verify/ci-gate/ci-gate-dispatch.js +31 -9
- package/dist/verify/ci-gate/ci-gate-dispatch.js.map +1 -1
- package/dist/verify/ci-gate/ci-gate-wait-record.d.ts +6 -0
- package/dist/verify/ci-gate/ci-gate-wait-record.d.ts.map +1 -1
- package/dist/verify/ci-gate/ci-gate-wait-record.js +1 -0
- package/dist/verify/ci-gate/ci-gate-wait-record.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.d.ts +12 -2
- package/dist/verify/deterministic-gate/verification-checkout.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.js +18 -3
- package/dist/verify/deterministic-gate/verification-checkout.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-deterministic.js +1 -1
- package/dist/verify/deterministic-gate/verification-failure-parser.d.ts +30 -9
- package/dist/verify/deterministic-gate/verification-failure-parser.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-failure-parser.js +52 -8
- package/dist/verify/deterministic-gate/verification-failure-parser.js.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.js +6 -2
- package/dist/verify/engine/verification-commit-sharing.js.map +1 -1
- package/dist/verify/engine/verification-deps.d.ts +9 -0
- package/dist/verify/engine/verification-deps.d.ts.map +1 -1
- package/dist/verify/engine/verification-deps.js +1 -1
- package/dist/verify/engine/verification-engine.d.ts.map +1 -1
- package/dist/verify/engine/verification-engine.js +4 -1
- package/dist/verify/engine/verification-engine.js.map +1 -1
- package/dist/verify/escaped-tests/escaped-pass-store.d.ts +19 -0
- package/dist/verify/escaped-tests/escaped-pass-store.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-pass-store.js +90 -0
- package/dist/verify/escaped-tests/escaped-pass-store.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-run.d.ts +39 -0
- package/dist/verify/escaped-tests/escaped-test-run.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-run.js +156 -0
- package/dist/verify/escaped-tests/escaped-test-run.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-set.d.ts +65 -0
- package/dist/verify/escaped-tests/escaped-test-set.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-set.js +95 -0
- package/dist/verify/escaped-tests/escaped-test-set.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-tests-source.d.ts +44 -0
- package/dist/verify/escaped-tests/escaped-tests-source.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-tests-source.js +142 -0
- package/dist/verify/escaped-tests/escaped-tests-source.js.map +1 -0
- package/dist/verify/gate-config/verification-manifest.d.ts +12 -1
- package/dist/verify/gate-config/verification-manifest.d.ts.map +1 -1
- package/dist/verify/gate-config/verification-manifest.js +12 -1
- package/dist/verify/gate-config/verification-manifest.js.map +1 -1
- package/dist/verify/gate-verdicts/commit-verdict-record.js +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.d.ts +4 -4
- package/dist/verify/outcome-routing/verification-rework-issue.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.js +16 -6
- package/dist/verify/outcome-routing/verification-rework-issue.js.map +1 -1
- package/package.json +3 -3
- package/scripts/telora-daemon-wrapper.sh +16 -7
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/composition/tower-escalation-context.test.ts,
|
|
3
|
+
// packages/daemon/src/tower/tower-escalation-session.test.ts,
|
|
4
|
+
// packages/daemon/src/tower/tower-supervisor-session.test.ts,
|
|
5
|
+
// packages/daemon/src/tower/tower-supervisor.test.ts
|
|
6
|
+
// PINNED-BY-END
|
|
7
|
+
import { createLogger } from '../log/daemon-log.js';
|
|
8
|
+
import { heldLoopOf } from './tower-supervisor-history.js';
|
|
9
|
+
import { buildTowerSupervisorPrompt, parseTowerDecisionLine } from './tower-supervisor-prompt.js';
|
|
10
|
+
import { emptySweepCounts, } from './tower-supervisor.js';
|
|
11
|
+
const log = createLogger({ module: 'tower' });
|
|
12
|
+
export const TOWER_SUPERVISOR_MODEL = 'opus';
|
|
13
|
+
/** Kill a supervisor that has not exited within this window (30 minutes: it may run the disputed tests). */
|
|
14
|
+
export const TOWER_SUPERVISOR_TIMEOUT_MS = 30 * 60 * 1000;
|
|
15
|
+
/** Sessions that ran without deciding, per loop, before the daemon stops trying and files it. */
|
|
16
|
+
export const TOWER_SUPERVISOR_MAX_ATTEMPTS = 2;
|
|
17
|
+
/** Governor engine name for supervisor slots (no per-engine limit: bounded by the global session cap). */
|
|
18
|
+
export const TOWER_SUPERVISOR_GOVERNOR_ENGINE = 'tower-supervisor';
|
|
19
|
+
/**
|
|
20
|
+
* The scoped MCP profile the supervisor's Telora server runs under
|
|
21
|
+
* (mcp/telora-products profile-scope.ts TOWER_SUPERVISOR_PROFILE): the tool-level
|
|
22
|
+
* bound on "it never grants review budget".
|
|
23
|
+
*/
|
|
24
|
+
export const TOWER_SUPERVISOR_MCP_PROFILE = 'tower_supervisor';
|
|
25
|
+
/** escalation_kind of the observation filed when every attempt ran without deciding. */
|
|
26
|
+
export const TOWER_SUPERVISOR_UNDECIDED_KIND = 'tower_supervisor_undecided';
|
|
27
|
+
/**
|
|
28
|
+
* The tools a supervisor session is pre-approved for: reading and running the
|
|
29
|
+
* disputed check in the worktree, and the Telora acts it decides through --
|
|
30
|
+
* the amendment (telora_product_focus amend_criterion), the findings and Tasks
|
|
31
|
+
* (telora_product_issue), the decision record (telora_product_tower), the one
|
|
32
|
+
* escalation (telora_agent) -- plus the context it reads. This list only
|
|
33
|
+
* PRE-APPROVES; what the Telora tools can DO is bounded by the scoped MCP
|
|
34
|
+
* profile (TOWER_SUPERVISOR_MCP_PROFILE), under which none can arm, unarm or
|
|
35
|
+
* grant review cycles: the budget is the daemon's.
|
|
36
|
+
*/
|
|
37
|
+
export const TOWER_SUPERVISOR_MCP_TOOLS = [
|
|
38
|
+
'Read', 'Grep', 'Glob', 'Bash',
|
|
39
|
+
'mcp__telora-products__telora_product_focus',
|
|
40
|
+
'mcp__telora-products__telora_product_issue',
|
|
41
|
+
'mcp__telora-products__telora_product_delivery',
|
|
42
|
+
'mcp__telora-products__telora_product_tower',
|
|
43
|
+
'mcp__telora-products__telora_agent',
|
|
44
|
+
'mcp__telora-products__telora_reality_tree_traverse',
|
|
45
|
+
'mcp__telora-products__telora_wiki_search',
|
|
46
|
+
];
|
|
47
|
+
/** Pure: the decisions on the record that are ABOUT a loop (evidence.loopDecisionId). */
|
|
48
|
+
export function decisionsAboutLoop(decisions, loopDecisionId) {
|
|
49
|
+
return decisions.filter((d) => {
|
|
50
|
+
const ev = d.evidence;
|
|
51
|
+
return ev !== null && typeof ev === 'object' && ev.loopDecisionId === loopDecisionId;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Pure: where a held loop stands on the record. An escalation to the operator
|
|
56
|
+
* wins over a bound (a supervisor that escalated did not settle it); a
|
|
57
|
+
* criterion_bounded decision naming the loop settles it only when the edge
|
|
58
|
+
* reports its bound APPLIED (an amendment of the criterion since detection);
|
|
59
|
+
* a bound on the record without one is `bound_unapplied`, which releases
|
|
60
|
+
* nothing; anything else is undecided.
|
|
61
|
+
*/
|
|
62
|
+
export function settlementOf(record, loopDecisionId) {
|
|
63
|
+
const about = decisionsAboutLoop(record.decisions, loopDecisionId);
|
|
64
|
+
const escalations = about.filter((d) => d.kind === 'escalated_to_operator');
|
|
65
|
+
if (escalations.length > 0)
|
|
66
|
+
return { kind: 'awaiting_operator', escalations };
|
|
67
|
+
const bounded = about.filter((d) => d.kind === 'criterion_bounded');
|
|
68
|
+
if (bounded.length === 0)
|
|
69
|
+
return { kind: 'undecided' };
|
|
70
|
+
const applied = (record.appliedBounds ?? []).find((b) => b.loopDecisionId === loopDecisionId);
|
|
71
|
+
return applied && applied.amendmentIds.length > 0
|
|
72
|
+
? { kind: 'bounded', bounded, amendmentIds: applied.amendmentIds }
|
|
73
|
+
: { kind: 'bound_unapplied', bounded };
|
|
74
|
+
}
|
|
75
|
+
/** Pure: the loop_resolved the daemon records once the criterion was bounded. */
|
|
76
|
+
export function loopResolvedDecision(loop, bounded, amendmentIds) {
|
|
77
|
+
return {
|
|
78
|
+
focusId: loop.focusId,
|
|
79
|
+
kind: 'loop_resolved',
|
|
80
|
+
decidedByKind: 'daemon',
|
|
81
|
+
summary: `Released the held review loop on criterion "${loop.criterion}": the Tower supervisor bounded it.`,
|
|
82
|
+
rationale: `The supervisor recorded ${bounded.length} criterion_bounded decision(s) naming this loop and applied the ` +
|
|
83
|
+
`bound (${amendmentIds.length} amendment(s) of the criterion since the loop was detected), so the criterion ` +
|
|
84
|
+
'the loop could not converge on now reads as a closed list plus a named judge. The next review is a fresh ' +
|
|
85
|
+
'session that judges the amended wording.',
|
|
86
|
+
evidence: {
|
|
87
|
+
loopDecisionId: loop.towerDecisionId,
|
|
88
|
+
boundDecisionIds: bounded.map((d) => d.towerDecisionId),
|
|
89
|
+
amendmentIds: [...amendmentIds],
|
|
90
|
+
supervisorSessionIds: [...new Set(bounded.map((d) => d.agentSessionId).filter((s) => s !== null))],
|
|
91
|
+
},
|
|
92
|
+
criterionKey: loop.criterionKey,
|
|
93
|
+
nodeId: loop.nodeId,
|
|
94
|
+
resolvesDecisionId: loop.towerDecisionId,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** Pure: what a finished spawn was -- not run at all (retry, uncounted), or ran. */
|
|
98
|
+
export function spawnRan(result) {
|
|
99
|
+
return result.started && result.modelUnavailable === undefined;
|
|
100
|
+
}
|
|
101
|
+
/** Pure: a one-line account of a spawn's end. */
|
|
102
|
+
export function describeSpawnEnd(result) {
|
|
103
|
+
if (result.modelUnavailable)
|
|
104
|
+
return `model unavailable (${result.modelUnavailable.kind})`;
|
|
105
|
+
if (!result.started)
|
|
106
|
+
return result.errorMessage ?? 'did not start';
|
|
107
|
+
if (result.timedOut)
|
|
108
|
+
return 'timed out (killed)';
|
|
109
|
+
const said = parseTowerDecisionLine(result.stdout);
|
|
110
|
+
return `exited ${result.exitCode ?? 'null'}${result.errorMessage ? ` (${result.errorMessage})` : ''}${said ? `; said "${said}"` : ''}`;
|
|
111
|
+
}
|
|
112
|
+
/** Record loop_resolved for a bounded loop and drop the review directive queued on the old wording. */
|
|
113
|
+
async function release(st, loop, bounded, amendmentIds) {
|
|
114
|
+
await st.deps.recordTowerDecision(loopResolvedDecision(loop, bounded, amendmentIds));
|
|
115
|
+
const dropped = st.deps.dropPendingReviewDirective(loop.focusId);
|
|
116
|
+
log.info(`[tower-supervisor] released the held loop ${loop.towerDecisionId.slice(0, 8)} on "${loop.criterion}": the ` +
|
|
117
|
+
`criterion was bounded${dropped ? '; dropped the review directive queued on the old wording' : ''}.`);
|
|
118
|
+
st.attempts.delete(loop.towerDecisionId);
|
|
119
|
+
return 'resolved';
|
|
120
|
+
}
|
|
121
|
+
/** Every attempt ran without deciding: file the loop for a routing decider and record escalated_to_operator. */
|
|
122
|
+
async function giveUp(st, loop, focus, config, detail) {
|
|
123
|
+
const tried = st.attempts.get(loop.towerDecisionId) ?? 0;
|
|
124
|
+
const filed = await st.deps.fileUndecidedLoop({
|
|
125
|
+
organizationId: config.organizationId, productId: focus.productId, focusId: focus.focusId,
|
|
126
|
+
escalationKind: TOWER_SUPERVISOR_UNDECIDED_KIND,
|
|
127
|
+
description: `The review loop of focus "${focus.focusName}" on criterion "${loop.criterion}" is held, and the Tower ` +
|
|
128
|
+
`supervisor ran ${tried} time(s) without deciding it (last: ${detail}). The focus spawns no coding or ` +
|
|
129
|
+
'review pass until the criterion is bounded or the operator rules.',
|
|
130
|
+
whatWasTried: `${tried} one-shot supervisor session(s); none recorded escalated_to_operator, or a criterion_bounded whose ` +
|
|
131
|
+
'amendment of the criterion landed.',
|
|
132
|
+
helpNeeded: 'Decide the loop: bound the criterion (telora_product_focus amend_criterion) and record it ' +
|
|
133
|
+
'(telora_product_tower decision_record criterion_bounded with loopDecisionId), or escalate to the operator.',
|
|
134
|
+
metadata: { loopDecisionId: loop.towerDecisionId, attempts: tried, lastDetail: detail },
|
|
135
|
+
});
|
|
136
|
+
await st.deps.recordTowerDecision({
|
|
137
|
+
focusId: loop.focusId, kind: 'escalated_to_operator', decidedByKind: 'daemon',
|
|
138
|
+
summary: `Handed the held review loop on "${loop.criterion}" on: the Tower supervisor could not decide it.`,
|
|
139
|
+
rationale: `${tried} supervisor session(s) ran and none recorded a decision (last: ${detail}). The daemon stops ` +
|
|
140
|
+
'spawning supervisors for this loop and files it for a routing decider, which makes it the operator\'s ' +
|
|
141
|
+
'when only a human can rule. The loop stays held.',
|
|
142
|
+
evidence: { loopDecisionId: loop.towerDecisionId, attempts: tried, lastDetail: detail },
|
|
143
|
+
criterionKey: loop.criterionKey, nodeId: loop.nodeId, escalationId: filed.escalationId,
|
|
144
|
+
});
|
|
145
|
+
log.warn(`[tower-supervisor] gave up on the held loop ${loop.towerDecisionId.slice(0, 8)} of "${focus.focusName}" after ${tried} attempt(s); filed ${filed.escalationId ?? '(correlated)'}.`);
|
|
146
|
+
}
|
|
147
|
+
/** After a session exits: release a bounded loop, leave an escalated one held, count an undecided run. */
|
|
148
|
+
async function settleAfterRun(st, loop, focus, config, result) {
|
|
149
|
+
const detail = describeSpawnEnd(result);
|
|
150
|
+
const record = await st.deps.listTowerDecisions(loop.focusId);
|
|
151
|
+
const settled = settlementOf(record, loop.towerDecisionId);
|
|
152
|
+
if (settled.kind === 'bounded') {
|
|
153
|
+
await release(st, loop, settled.bounded, settled.amendmentIds);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (settled.kind === 'awaiting_operator') {
|
|
157
|
+
log.info(`[tower-supervisor] the held loop ${loop.towerDecisionId.slice(0, 8)} of "${focus.focusName}" was escalated to the operator; it stays held.`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (!spawnRan(result)) {
|
|
161
|
+
log.info(`[tower-supervisor] supervisor for "${focus.focusName}" did not run (${detail}); the next sweep retries.`);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const tried = (st.attempts.get(loop.towerDecisionId) ?? 0) + 1;
|
|
165
|
+
st.attempts.set(loop.towerDecisionId, tried);
|
|
166
|
+
const outcome = settled.kind === 'bound_unapplied'
|
|
167
|
+
? `${detail}, recording criterion_bounded with no amendment of the criterion -- the bound was not applied, so the loop stays held`
|
|
168
|
+
: `${detail} without deciding`;
|
|
169
|
+
log.warn(`[tower-supervisor] supervisor for "${focus.focusName}" ${outcome} (attempt ${tried} of ${TOWER_SUPERVISOR_MAX_ATTEMPTS}).`);
|
|
170
|
+
if (tried >= TOWER_SUPERVISOR_MAX_ATTEMPTS)
|
|
171
|
+
await giveUp(st, loop, focus, config, settled.kind === 'bound_unapplied' ? `${detail}; bound recorded, never applied` : detail);
|
|
172
|
+
}
|
|
173
|
+
/** One supervisor session, inside a governor slot: gather, prompt, spawn, settle. */
|
|
174
|
+
async function runSession(st, loop, focus, config) {
|
|
175
|
+
const governor = st.deps.readGovernor();
|
|
176
|
+
let token = null;
|
|
177
|
+
if (governor) {
|
|
178
|
+
token = governor.tryAcquireSlot(TOWER_SUPERVISOR_GOVERNOR_ENGINE);
|
|
179
|
+
if (!token) {
|
|
180
|
+
log.info(`[tower-supervisor] no governor slot free for "${focus.focusName}"; the next sweep retries.`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
const repoRoot = st.deps.focusWorktreePath(focus.focusId) ?? config.repoPath;
|
|
186
|
+
const history = await st.deps.gatherHistory({ loop, productId: focus.productId, config, repoRoot });
|
|
187
|
+
const supervisorSessionId = st.deps.newSessionId();
|
|
188
|
+
const prompt = buildTowerSupervisorPrompt({ focus, loop, supervisorSessionId, history });
|
|
189
|
+
log.info(`[tower-supervisor] deciding the held loop ${loop.towerDecisionId.slice(0, 8)} of "${focus.focusName}" (session ${supervisorSessionId.slice(0, 8)}).`);
|
|
190
|
+
const result = await st.deps.spawn({
|
|
191
|
+
config, prompt, cwd: repoRoot, focusId: focus.focusId, loopDecisionId: loop.towerDecisionId,
|
|
192
|
+
model: TOWER_SUPERVISOR_MODEL, timeoutMs: TOWER_SUPERVISOR_TIMEOUT_MS, allowedTools: TOWER_SUPERVISOR_MCP_TOOLS,
|
|
193
|
+
});
|
|
194
|
+
await settleAfterRun(st, loop, focus, config, result);
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
if (token && governor)
|
|
198
|
+
governor.releaseSlot(token);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/** One supervision step for one held loop; starts a session in the background when one is owed. Never throws. */
|
|
202
|
+
async function supervise(st, loopDecision, productId, known) {
|
|
203
|
+
const loopId = loopDecision.towerDecisionId;
|
|
204
|
+
if (st.inFlight.has(loopId))
|
|
205
|
+
return 'in_flight';
|
|
206
|
+
try {
|
|
207
|
+
const loop = heldLoopOf(loopDecision);
|
|
208
|
+
const config = st.deps.readConfig();
|
|
209
|
+
if (!loop || !config)
|
|
210
|
+
return 'skipped';
|
|
211
|
+
const record = known ?? await st.deps.listTowerDecisions(loop.focusId);
|
|
212
|
+
if (!record.openLoopDecisionIds.includes(loopId))
|
|
213
|
+
return 'not_open';
|
|
214
|
+
const settled = settlementOf(record, loopId);
|
|
215
|
+
if (settled.kind === 'bounded')
|
|
216
|
+
return await release(st, loop, settled.bounded, settled.amendmentIds);
|
|
217
|
+
if (settled.kind === 'awaiting_operator')
|
|
218
|
+
return 'awaiting_operator';
|
|
219
|
+
const repeat = await st.deps.escalateRepeatReviewLoop({ focusId: loop.focusId, loopDecisionId: loopId });
|
|
220
|
+
if (repeat.repeat) {
|
|
221
|
+
log.warn(`[tower-supervisor] the loop ${loopId.slice(0, 8)} on "${loop.criterion}" repeats a criterion the supervisor ` +
|
|
222
|
+
`already bounded under this arm: no second supervisor; filed to the operator (${repeat.escalationId ?? 'escalation unknown'}).`);
|
|
223
|
+
return 'awaiting_operator';
|
|
224
|
+
}
|
|
225
|
+
const focus = await st.deps.findFocus(loop.focusId, productId);
|
|
226
|
+
const scoped = focus ? st.deps.productConfig(config, focus.productId) : null;
|
|
227
|
+
if (!focus || !scoped)
|
|
228
|
+
return 'skipped';
|
|
229
|
+
if ((st.attempts.get(loopId) ?? 0) >= TOWER_SUPERVISOR_MAX_ATTEMPTS) {
|
|
230
|
+
await giveUp(st, loop, focus, scoped, 'the previous hand-off did not land');
|
|
231
|
+
return 'awaiting_operator';
|
|
232
|
+
}
|
|
233
|
+
const run = runSession(st, loop, focus, scoped)
|
|
234
|
+
.catch((err) => log.warn(`[tower-supervisor] supervision of "${focus.focusName}" failed: ${err.message}; the next sweep retries.`))
|
|
235
|
+
.finally(() => st.inFlight.delete(loopId));
|
|
236
|
+
st.inFlight.set(loopId, run);
|
|
237
|
+
return 'started';
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
log.warn(`[tower-supervisor] could not read the held loop ${loopId.slice(0, 8)}: ${err.message}; the next sweep retries.`);
|
|
241
|
+
return 'unreadable';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** A sweep's step for one open loop: read its focus record, then supervise it. */
|
|
245
|
+
async function superviseOpen(st, open, productId) {
|
|
246
|
+
if (st.inFlight.has(open.towerDecisionId))
|
|
247
|
+
return 'in_flight';
|
|
248
|
+
try {
|
|
249
|
+
const record = await st.deps.listTowerDecisions(open.focusId);
|
|
250
|
+
const decision = record.decisions.find((d) => d.towerDecisionId === open.towerDecisionId);
|
|
251
|
+
return decision ? await supervise(st, decision, productId, record) : 'not_open';
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
log.warn(`[tower-supervisor] focus record read failed for ${open.focusId.slice(0, 8)}: ${err.message}`);
|
|
255
|
+
return 'unreadable';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function tally(counts, outcome) {
|
|
259
|
+
if (outcome === 'started')
|
|
260
|
+
counts.started += 1;
|
|
261
|
+
else if (outcome === 'in_flight')
|
|
262
|
+
counts.inFlight += 1;
|
|
263
|
+
else if (outcome === 'resolved')
|
|
264
|
+
counts.resolved += 1;
|
|
265
|
+
else if (outcome === 'awaiting_operator')
|
|
266
|
+
counts.awaitingOperator += 1;
|
|
267
|
+
else if (outcome === 'unreadable')
|
|
268
|
+
counts.unreadable += 1;
|
|
269
|
+
else
|
|
270
|
+
counts.skipped += 1;
|
|
271
|
+
}
|
|
272
|
+
/** Sweep the held loops of every configured product. */
|
|
273
|
+
async function sweepHeldLoops(st) {
|
|
274
|
+
const counts = emptySweepCounts();
|
|
275
|
+
const config = st.deps.readConfig();
|
|
276
|
+
if (!config)
|
|
277
|
+
return counts;
|
|
278
|
+
for (const product of config.products) {
|
|
279
|
+
let loops;
|
|
280
|
+
try {
|
|
281
|
+
loops = await st.deps.listOpenReviewLoops({ productId: product.id });
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
log.warn(`[tower-supervisor] open-loop read failed for product ${product.id.slice(0, 8)}: ${err.message}`);
|
|
285
|
+
counts.unreadable += 1;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
for (const open of loops) {
|
|
289
|
+
counts.openLoops += 1;
|
|
290
|
+
tally(counts, await superviseOpen(st, open, product.id));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return counts;
|
|
294
|
+
}
|
|
295
|
+
/** Build the TowerSupervisor the composition root binds (one per process). */
|
|
296
|
+
export function createTowerSupervisor(deps) {
|
|
297
|
+
const st = { deps, inFlight: new Map(), attempts: new Map() };
|
|
298
|
+
return {
|
|
299
|
+
onLoopDetected: async (notice) => {
|
|
300
|
+
const outcome = await supervise(st, notice.decision, null, null);
|
|
301
|
+
log.info(`[tower-supervisor] "${notice.focusName}" held loop handed to the supervisor: ${outcome}.`);
|
|
302
|
+
},
|
|
303
|
+
sweep: () => sweepHeldLoops(st),
|
|
304
|
+
settled: async () => { await Promise.all([...st.inFlight.values()]); },
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=tower-supervisor-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tower-supervisor-session.js","sourceRoot":"","sources":["../../src/tower/tower-supervisor-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE TOWER SUPERVISOR: the actor a held review loop is handed to.
|
|
3
|
+
*
|
|
4
|
+
* A review loop that cannot converge (supervision/review-loop-detector.ts) is
|
|
5
|
+
* a judgement call -- is the criterion unbounded, or does the work really fall
|
|
6
|
+
* short? The operator ruled that a Tower supervisor decides it,
|
|
7
|
+
* WITHOUT the operator in the loop, and reports what it decided on the focus
|
|
8
|
+
* (focus_tower_decisions). The review exit holds the loop, records the
|
|
9
|
+
* `loop_detected` decision, and calls `onLoopDetected`
|
|
10
|
+
* (completion/review-cycle-budget/review-loop-detection.ts). The supervisor
|
|
11
|
+
* session bounds the criterion (or, when it cannot, escalates to the
|
|
12
|
+
* operator); the daemon then records the `loop_resolved` that names the loop,
|
|
13
|
+
* which releases the hold (supervision/review-loop-hold.ts). It is called once
|
|
14
|
+
* per criterion per arm: a loop that returns after a bound under the same arm
|
|
15
|
+
* goes to the operator instead (tower/tower-supervisor-session.ts).
|
|
16
|
+
*
|
|
17
|
+
* This module is the contract; the implementation is
|
|
18
|
+
* tower/tower-supervisor-session.ts, bound once at the composition root
|
|
19
|
+
* (composition/review-loop-context.ts) and never defaulted in a consumer.
|
|
20
|
+
*
|
|
21
|
+
* @module tower/tower-supervisor
|
|
22
|
+
*/
|
|
23
|
+
import type { TowerDecision } from '../queries/tower-decisions/tower-decisions.js';
|
|
24
|
+
/** What the supervisor is handed when a loop is held. */
|
|
25
|
+
export interface LoopDetectedNotice {
|
|
26
|
+
focusId: string;
|
|
27
|
+
focusName: string;
|
|
28
|
+
/** The `loop_detected` decision recorded on the focus (its id is what a `loop_resolved` names). */
|
|
29
|
+
decision: TowerDecision;
|
|
30
|
+
criterionKey: string;
|
|
31
|
+
criterion: string;
|
|
32
|
+
nodeId: string | null;
|
|
33
|
+
/** The reviews of the loop, oldest first, with the new blocking findings each named. */
|
|
34
|
+
rounds: ReadonlyArray<{
|
|
35
|
+
reviewId: string;
|
|
36
|
+
newBlockingIssueIds: readonly string[];
|
|
37
|
+
}>;
|
|
38
|
+
/** The review-cycle count after this exit, and the budget it is measured against (logged; never handed to the session). */
|
|
39
|
+
reviewCycleCount: number;
|
|
40
|
+
cap: number;
|
|
41
|
+
}
|
|
42
|
+
/** What one supervision step did for one held loop. */
|
|
43
|
+
export type LoopSupervisionOutcome =
|
|
44
|
+
/** A supervisor session was started for it (it runs in the background). */
|
|
45
|
+
'started'
|
|
46
|
+
/** A session for it is already running in this process. */
|
|
47
|
+
| 'in_flight'
|
|
48
|
+
/** The loop is no longer open (resolved, or from a previous arm). */
|
|
49
|
+
| 'not_open'
|
|
50
|
+
/** The supervisor bounded the criterion; the daemon recorded loop_resolved. */
|
|
51
|
+
| 'resolved'
|
|
52
|
+
/** The supervisor (or the daemon, after its attempts ran out) escalated it to the operator; it stays held. */
|
|
53
|
+
| 'awaiting_operator'
|
|
54
|
+
/** Nothing could run (no daemon config, the focus is not one this daemon runs); retried next sweep. */
|
|
55
|
+
| 'skipped'
|
|
56
|
+
/** A read or write failed; retried next sweep. */
|
|
57
|
+
| 'unreadable';
|
|
58
|
+
/** One sweep over the held loops of the configured products. */
|
|
59
|
+
export interface TowerSupervisorSweepCounts {
|
|
60
|
+
openLoops: number;
|
|
61
|
+
started: number;
|
|
62
|
+
inFlight: number;
|
|
63
|
+
resolved: number;
|
|
64
|
+
awaitingOperator: number;
|
|
65
|
+
skipped: number;
|
|
66
|
+
unreadable: number;
|
|
67
|
+
}
|
|
68
|
+
/** A sweep that found nothing (each sweep starts from a copy). */
|
|
69
|
+
export declare function emptySweepCounts(): TowerSupervisorSweepCounts;
|
|
70
|
+
/** The actor that decides a held review loop. */
|
|
71
|
+
export interface TowerSupervisor {
|
|
72
|
+
/**
|
|
73
|
+
* Called once per newly recorded `loop_detected`. Starts the supervision in
|
|
74
|
+
* the background and returns at once: the review exit is never blocked on a
|
|
75
|
+
* session (the hold covers the wait). Never rejects.
|
|
76
|
+
*/
|
|
77
|
+
onLoopDetected(notice: LoopDetectedNotice): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Settle every held loop of the configured products: start a session for one
|
|
80
|
+
* nobody is deciding (a daemon restart, a failed attempt, no slot free),
|
|
81
|
+
* release one whose criterion was bounded but whose release did not land, and
|
|
82
|
+
* leave one escalated to the operator held. Never rejects.
|
|
83
|
+
*/
|
|
84
|
+
sweep(): Promise<TowerSupervisorSweepCounts>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=tower-supervisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tower-supervisor.d.ts","sourceRoot":"","sources":["../../src/tower/tower-supervisor.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAEnF,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mGAAmG;IACnG,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wFAAwF;IACxF,MAAM,EAAE,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpF,2HAA2H;IAC3H,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,uDAAuD;AACvD,MAAM,MAAM,sBAAsB;AAChC,2EAA2E;AACzE,SAAS;AACX,2DAA2D;GACzD,WAAW;AACb,qEAAqE;GACnE,UAAU;AACZ,+EAA+E;GAC7E,UAAU;AACZ,8GAA8G;GAC5G,mBAAmB;AACrB,uGAAuG;GACrG,SAAS;AACX,kDAAkD;GAChD,YAAY,CAAC;AAEjB,gEAAgE;AAChE,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,IAAI,0BAA0B,CAE7D;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,KAAK,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC9C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/tower/tower-supervisor.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
/** A sweep that found nothing (each sweep starts from a copy). */
|
|
5
|
+
export function emptySweepCounts() {
|
|
6
|
+
return { openLoops: 0, started: 0, inFlight: 0, resolved: 0, awaitingOperator: 0, skipped: 0, unreadable: 0 };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=tower-supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tower-supervisor.js","sourceRoot":"","sources":["../../src/tower/tower-supervisor.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gEAAgE;AAChE,gBAAgB;AAuEhB,kEAAkE;AAClE,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAChH,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 285 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/types/index.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/**
|
|
5
5
|
* Domain-specific type re-exports.
|
|
@@ -10,12 +10,18 @@
|
|
|
10
10
|
* Routine path: when the daemon crosses into batch-safe idle (the busy->idle
|
|
11
11
|
* edge) and a newer cached version exists, install it and signal restart.
|
|
12
12
|
*
|
|
13
|
-
* When an update installs, the
|
|
14
|
-
*
|
|
13
|
+
* When an update installs, the shell restarts onto the new version under the
|
|
14
|
+
* one contract, restated here verbatim (restart-contract.test.ts checks it
|
|
15
|
+
* against the hand-over the code performs):
|
|
16
|
+
*
|
|
17
|
+
* Restart after a self-update (update/restart-contract.ts):
|
|
18
|
+
* under systemd: exit 75, spawn nothing
|
|
19
|
+
* under telora-daemon-wrapper.sh: exit 75, spawn nothing
|
|
20
|
+
* unsupervised: re-exec a detached replacement, then exit 0
|
|
21
|
+
*
|
|
22
|
+
* A supervisor that receives 75 starts the new version itself.
|
|
15
23
|
*/
|
|
16
24
|
import { type NpmInstallOptions } from './self-update.js';
|
|
17
|
-
/** Exit code that signals "restart after self-update". */
|
|
18
|
-
export declare const EXIT_CODE_UPDATE = 75;
|
|
19
25
|
/**
|
|
20
26
|
* Default cadence for sampling the idle edge. Short by design -- the 1h clock
|
|
21
27
|
* is gone; this only bounds how quickly a reached idle seam is noticed. Registry
|
|
@@ -118,7 +124,7 @@ export interface AutoUpdateDeps {
|
|
|
118
124
|
* produce a registry-call storm.
|
|
119
125
|
*/
|
|
120
126
|
getCachedCandidateVersion: () => string | null;
|
|
121
|
-
/** Called when an update is installed
|
|
127
|
+
/** Called when an update is installed; the shell restarts per update/restart-contract.ts. */
|
|
122
128
|
onUpdateReady: () => void;
|
|
123
129
|
/** Performs the install (the shell binds {@link performSelfUpdate}). */
|
|
124
130
|
performUpdate: (packageName: string) => Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,15 +14,21 @@
|
|
|
14
14
|
* Routine path: when the daemon crosses into batch-safe idle (the busy->idle
|
|
15
15
|
* edge) and a newer cached version exists, install it and signal restart.
|
|
16
16
|
*
|
|
17
|
-
* When an update installs, the
|
|
18
|
-
*
|
|
17
|
+
* When an update installs, the shell restarts onto the new version under the
|
|
18
|
+
* one contract, restated here verbatim (restart-contract.test.ts checks it
|
|
19
|
+
* against the hand-over the code performs):
|
|
20
|
+
*
|
|
21
|
+
* Restart after a self-update (update/restart-contract.ts):
|
|
22
|
+
* under systemd: exit 75, spawn nothing
|
|
23
|
+
* under telora-daemon-wrapper.sh: exit 75, spawn nothing
|
|
24
|
+
* unsupervised: re-exec a detached replacement, then exit 0
|
|
25
|
+
*
|
|
26
|
+
* A supervisor that receives 75 starts the new version itself.
|
|
19
27
|
*/
|
|
20
28
|
import { detectInstallMode, installNpmVersion } from './self-update.js';
|
|
21
29
|
import { isNewerVersion, versionDistance, resolveUpdateChannelUrl, scopedInstallCommand, } from '../config/update-channel.js';
|
|
22
30
|
import { createLogger } from '../log/daemon-log.js';
|
|
23
31
|
const log = createLogger({ module: 'auto-update' });
|
|
24
|
-
/** Exit code that signals "restart after self-update". */
|
|
25
|
-
export const EXIT_CODE_UPDATE = 75;
|
|
26
32
|
/**
|
|
27
33
|
* Default cadence for sampling the idle edge. Short by design -- the 1h clock
|
|
28
34
|
* is gone; this only bounds how quickly a reached idle seam is noticed. Registry
|
|
@@ -99,7 +105,7 @@ export function describeUpdateDecision(decision, currentVersion) {
|
|
|
99
105
|
level: 'info',
|
|
100
106
|
steady: false,
|
|
101
107
|
signature: `applied:${decision.candidate}`,
|
|
102
|
-
message: `[auto-update] Update to v${decision.candidate} installed; signaling restart
|
|
108
|
+
message: `[auto-update] Update to v${decision.candidate} installed; signaling restart`,
|
|
103
109
|
};
|
|
104
110
|
case 'failed':
|
|
105
111
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,uEAAuE;AACvE,mDAAmD;AACnD,gBAAgB;AAEhB
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,uEAAuE;AACvE,mDAAmD;AACnD,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAA0B,MAAM,kBAAkB,CAAC;AAChG,OAAO,EACL,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,SAAS,CAAC;AA4BvD;;;;;GAKG;AACH;;;;;GAKG;AACH,SAAS,SAAS,CAAC,cAAsB,EAAE,SAAiB;IAC1D,MAAM,CAAC,GAAG,eAAe,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACrD,OAAO,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAwB,EACxB,cAAsB;IAEtB,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,SAAS;YACZ,uEAAuE;YACvE,2EAA2E;YAC3E,2EAA2E;YAC3E,+DAA+D;YAC/D,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,uCAAuC,cAAc,+BAA+B;aAC9F,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,WAAW,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gBAC7D,OAAO,EACL,QAAQ,CAAC,MAAM,KAAK,MAAM;oBACxB,CAAC,CAAC,4BAA4B,QAAQ,CAAC,SAAS,iEAAiE,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG;oBAClL,CAAC,CAAC,4BAA4B,QAAQ,CAAC,SAAS,4DAA4D,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG;aAClL,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,eAAe,QAAQ,CAAC,SAAS,EAAE;gBAC9C,OAAO,EAAE,wDAAwD,QAAQ,CAAC,SAAS,cAAc,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG;aACnK,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,YAAY,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE;gBAC/D,OAAO,EACL,QAAQ,CAAC,OAAO,KAAK,QAAQ;oBAC3B,CAAC,CAAC,uDAAuD,QAAQ,CAAC,SAAS,mDAAmD,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG;oBAC/L,CAAC,CAAC,gEAAgE,QAAQ,CAAC,SAAS,cAAc,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG;aACxK,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,WAAW,QAAQ,CAAC,SAAS,EAAE;gBAC1C,OAAO,EAAE,4BAA4B,QAAQ,CAAC,SAAS,+BAA+B;aACvF,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,UAAU,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE;gBAC7D,OAAO,EACL,QAAQ,CAAC,OAAO,KAAK,QAAQ;oBAC3B,CAAC,CAAC,oCAAoC,QAAQ,CAAC,SAAS,YAAY,QAAQ,CAAC,KAAK,wBAAwB;oBAC1G,CAAC,CAAC,6BAA6B,QAAQ,CAAC,SAAS,yBAAyB,QAAQ,CAAC,KAAK,oCAAoC;aACjI,CAAC;QACJ,KAAK,OAAO;YACV,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,mCAAmC,QAAQ,CAAC,KAAK,EAAE;aAC7D,CAAC;QACJ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,QAAQ,CAAC;YACpC,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAMzC;IACC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,GAAG,6BAA6B,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1F,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAC9C,IAAI,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAElD,OAAO,CAAC,QAAwB,EAAQ,EAAE;QACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACnE,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,kBAAkB,IAAI,WAAW,CAAC;YAC/D,IAAI,SAAS,CAAC,SAAS,KAAK,mBAAmB,IAAI,CAAC,YAAY;gBAAE,OAAO;YACzE,mBAAmB,GAAG,SAAS,CAAC,SAAS,CAAC;YAC1C,kBAAkB,GAAG,GAAG,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,yEAAyE;YACzE,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;YAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,cAAsB,EAAE,GAAiB;IAC/E,OAAO,yBAAyB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;AACzE,CAAC;AAiED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,OAA0B;IAC/E,OAAO,iBAAiB,CAAC,GAAG,WAAW,SAAS,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;AAQD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAoB;IACzD,MAAM,EACJ,cAAc,EACd,WAAW,GAAG,gBAAgB,EAC9B,MAAM,EACN,yBAAyB,EACzB,aAAa,EACb,aAAa,EACb,GAAG,EACH,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,EAC/C,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EAAE,IAAI,GACjB,GAAG,IAAI,CAAC;IAET,4EAA4E;IAC5E,6EAA6E;IAC7E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,+EAA+E;IAC/E,0EAA0E;IAC1E,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,KAAK,UAAU,IAAI;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,yBAAyB,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,SAAS,KAAK,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAElF,0EAA0E;YAC1E,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;oBACjC,sEAAsE;oBACtE,uEAAuE;oBACvE,sEAAsE;oBACtE,uCAAuC;oBACvC,MAAM,UAAU,GAAG,cAAc,KAAK,IAAI,CAAC;oBAC3C,cAAc,GAAG,SAAS,CAAC;oBAC3B,YAAY,GAAG,GAAG,EAAE,CAAC;oBACrB,IAAI,UAAU;wBAAE,YAAY,EAAE,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBACnC,0EAA0E;gBAC1E,cAAc,GAAG,IAAI,CAAC;gBACtB,YAAY,GAAG,IAAI,CAAC;gBACpB,YAAY,EAAE,CAAC;YACjB,CAAC;YAED,0EAA0E;YAC1E,gEAAgE;YAChE,6DAA6D;YAC7D,wEAAwE;YACxE,yEAAyE;YACzE,yDAAyD;YACzD,IAAI,SAAS,IAAI,QAAQ,EAAE,EAAE,CAAC;gBAC5B,qDAAqD;gBACrD,MAAM,MAAM,GAAG,SAAmB,CAAC;gBACnC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;oBACrG,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7C,aAAa,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;YAEzB,0EAA0E;YAC1E,yEAAyE;YACzE,2EAA2E;YAC3E,2EAA2E;YAC3E,gBAAgB;YAChB,IACE,SAAS;gBACT,YAAY,KAAK,IAAI;gBACrB,CAAC,OAAO;gBACR,GAAG,EAAE,GAAG,YAAY,IAAI,oBAAoB,EAC5C,CAAC;gBACD,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAmB,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,IAAI,SAAS,CAAC;YACnC,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC;YACtC,QAAQ,GAAG,KAAK,CAAC;YAEjB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,wEAAwE;gBACxE,uEAAuE;gBACvE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC;wBACH,IAAI,EAAE,mBAAmB;wBACzB,SAAS,EAAE,SAAmB;wBAC9B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM;qBAChD,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,SAAmB,CAAC;YACnC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,uEAAuE;gBACvE,oEAAoE;gBACpE,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACxG,OAAO;YACT,CAAC;YACD,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7C,aAAa,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,EAAE,UAAU,GAAG,0BAA0B,EAAE,GAAG,IAAI,CAAC;IAEzD,IAAI,iBAAiB,EAAE,KAAK,KAAK,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CACN,2EAA2E,oBAAoB,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,2DAA2D,CACxM,CAAC;QACF,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,IAAI,OAAO;YAAE,OAAO;QACpB,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,EAAE,UAAU,CAAC,CAAC;IACf,2BAA2B;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,GAAG,CAAC,IAAI,CACN,oDAAoD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CACtF,CAAC;IAEF,OAAO,GAAG,EAAE;QACV,OAAO,GAAG,IAAI,CAAC;QACf,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Exit code that signals "restart after self-update" to a supervisor. */
|
|
2
|
+
export declare const EXIT_CODE_UPDATE = 75;
|
|
3
|
+
/**
|
|
4
|
+
* Env var a supervisor uses to declare itself (`systemd` | `wrapper` | `none`).
|
|
5
|
+
* Read raw, not via loadEnvConfig, and leniently: it is a supervisor's
|
|
6
|
+
* self-declaration rather than an operator knob, and an unknown value must fall
|
|
7
|
+
* through to detection instead of failing the restart (loadEnvConfig throws on a
|
|
8
|
+
* bad enum). Allowlisted under "env-reads" in scripts/lint-config.json.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SUPERVISOR_ENV = "TELORA_DAEMON_SUPERVISOR";
|
|
11
|
+
/** Who restarts the daemon after an update; `null` = nothing does. */
|
|
12
|
+
export type RestartSupervisor = 'systemd' | 'wrapper';
|
|
13
|
+
/** The restart decision the shell's restart-after-update branch acts on. */
|
|
14
|
+
export type RestartPlan = {
|
|
15
|
+
kind: 'exit-to-supervisor';
|
|
16
|
+
supervisor: RestartSupervisor;
|
|
17
|
+
exitCode: typeof EXIT_CODE_UPDATE;
|
|
18
|
+
source: 'declared' | 'detected';
|
|
19
|
+
} | {
|
|
20
|
+
kind: 're-exec-detached';
|
|
21
|
+
exitCode: 0;
|
|
22
|
+
source: 'declared' | 'detected';
|
|
23
|
+
};
|
|
24
|
+
/** Seams for {@link detectRestartSupervisor}; the shell binds the live process. */
|
|
25
|
+
export interface RestartSupervisorProbe {
|
|
26
|
+
env: NodeJS.ProcessEnv;
|
|
27
|
+
/** The parent process's command name (`/proc/<ppid>/comm`), or null if unreadable. */
|
|
28
|
+
parentCommand: () => string | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Decide how the restart-after-update branch hands over to the new version.
|
|
32
|
+
* Pure over its probe, so both branches are unit-testable.
|
|
33
|
+
*/
|
|
34
|
+
export declare function planRestartAfterUpdate(probe: RestartSupervisorProbe): RestartPlan;
|
|
35
|
+
/** The supervisor named by {@link planRestartAfterUpdate}, or null when unsupervised. */
|
|
36
|
+
export declare function detectRestartSupervisor(probe: RestartSupervisorProbe): RestartSupervisor | null;
|
|
37
|
+
/** One log line naming the decision, so a restart that did not come back is diagnosable. */
|
|
38
|
+
export declare function describeRestartPlan(plan: RestartPlan): string;
|
|
39
|
+
/** The live probe the shell binds: this process's env and its parent's command name. */
|
|
40
|
+
export declare function liveRestartProbe(): RestartSupervisorProbe;
|
|
41
|
+
/** Effects {@link handOverAfterUpdate} performs; the shell binds the live ones. */
|
|
42
|
+
export interface RestartHandOverDeps {
|
|
43
|
+
/** Spawn the detached replacement daemon (the unsupervised re-exec). */
|
|
44
|
+
reExecDetached: () => void;
|
|
45
|
+
exit: (code: number) => void;
|
|
46
|
+
log: (message: string) => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The shell's restart-after-update branch, after teardown: hand over to the
|
|
50
|
+
* supervisor (exit 75, spawn nothing) or, unsupervised, re-exec a detached
|
|
51
|
+
* replacement and exit 0.
|
|
52
|
+
*/
|
|
53
|
+
export declare function handOverAfterUpdate(plan: RestartPlan, deps: RestartHandOverDeps): void;
|
|
54
|
+
/** The first line of the contract statement an artifact restates verbatim. */
|
|
55
|
+
export declare const RESTART_STATEMENT_HEADING = "Restart after a self-update (update/restart-contract.ts):";
|
|
56
|
+
/**
|
|
57
|
+
* The contract as one plain statement, DERIVED by running the hand-over for each
|
|
58
|
+
* kind of runner -- so a statement that restates it (the auto-update.ts header)
|
|
59
|
+
* is checked against what the code does, not against a phrase someone wrote.
|
|
60
|
+
*/
|
|
61
|
+
export declare function restartContractStatement(): string[];
|
|
62
|
+
//# sourceMappingURL=restart-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-contract.d.ts","sourceRoot":"","sources":["../../src/update/restart-contract.ts"],"names":[],"mappings":"AAiDA,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,4EAA4E;AAC5E,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,OAAO,gBAAgB,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAA;CAAE,GACjI;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAA;CAAE,CAAC;AAE/E,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,sFAAsF;IACtF,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,WAAW,CAYjF;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,IAAI,CAG/F;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAK7D;AAWD,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,sBAAsB,CAEzD;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAItF;AAED,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,8DAA8D,CAAC;AAErG;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAmBnD"}
|