@telora/daemon 0.22.104 → 0.22.132
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 +4 -3
- package/dist/completion/commit-verdict-release.d.ts +49 -0
- package/dist/completion/commit-verdict-release.d.ts.map +1 -0
- package/dist/completion/commit-verdict-release.js +240 -0
- package/dist/completion/commit-verdict-release.js.map +1 -0
- package/dist/completion/completion-phase-registry.d.ts +10 -4
- package/dist/completion/completion-phase-registry.d.ts.map +1 -1
- package/dist/completion/completion-phase-registry.js +19 -7
- package/dist/completion/completion-phase-registry.js.map +1 -1
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +1 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts +6 -3
- package/dist/completion/event-entry-phases.d.ts.map +1 -1
- package/dist/completion/event-entry-phases.js +135 -76
- package/dist/completion/event-entry-phases.js.map +1 -1
- package/dist/completion/event-phases.d.ts +24 -3
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +9 -9
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +8 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +47 -21
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/exit-classification.d.ts.map +1 -1
- package/dist/completion/exit-classification.js +1 -0
- package/dist/completion/exit-classification.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +21 -9
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -10
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/review-auto-approval-record.d.ts +19 -0
- package/dist/completion/review-auto-approval-record.d.ts.map +1 -0
- package/dist/completion/review-auto-approval-record.js +102 -0
- package/dist/completion/review-auto-approval-record.js.map +1 -0
- package/dist/completion/review-cycle-cap.d.ts +62 -0
- package/dist/completion/review-cycle-cap.d.ts.map +1 -0
- package/dist/completion/review-cycle-cap.js +180 -0
- package/dist/completion/review-cycle-cap.js.map +1 -0
- package/dist/completion/review-exit-deps.d.ts +17 -2
- package/dist/completion/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit-deps.js +19 -2
- package/dist/completion/review-exit-deps.js.map +1 -1
- package/dist/completion/review-exit-escalations.d.ts +45 -23
- package/dist/completion/review-exit-escalations.d.ts.map +1 -1
- package/dist/completion/review-exit-escalations.js +15 -74
- package/dist/completion/review-exit-escalations.js.map +1 -1
- package/dist/completion/review-exit-evidence.d.ts +9 -0
- package/dist/completion/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit-evidence.js +4 -1
- package/dist/completion/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit-foreign-findings.d.ts +151 -0
- package/dist/completion/review-exit-foreign-findings.d.ts.map +1 -0
- package/dist/completion/review-exit-foreign-findings.js +474 -0
- package/dist/completion/review-exit-foreign-findings.js.map +1 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +71 -64
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/review-exit-progress.d.ts +20 -0
- package/dist/completion/review-exit-progress.d.ts.map +1 -1
- package/dist/completion/review-exit-progress.js +28 -19
- package/dist/completion/review-exit-progress.js.map +1 -1
- package/dist/completion/review-exit-rehoming.d.ts +5 -0
- package/dist/completion/review-exit-rehoming.d.ts.map +1 -1
- package/dist/completion/review-exit-rehoming.js.map +1 -1
- package/dist/completion/review-exit-verdict-gate.d.ts +202 -0
- package/dist/completion/review-exit-verdict-gate.d.ts.map +1 -0
- package/dist/completion/review-exit-verdict-gate.js +228 -0
- package/dist/completion/review-exit-verdict-gate.js.map +1 -0
- package/dist/completion/review-next-step.d.ts +62 -0
- package/dist/completion/review-next-step.d.ts.map +1 -0
- package/dist/completion/review-next-step.js +63 -0
- package/dist/completion/review-next-step.js.map +1 -0
- package/dist/completion/session-hold-sweep-deps.d.ts +17 -0
- package/dist/completion/session-hold-sweep-deps.d.ts.map +1 -0
- package/dist/completion/session-hold-sweep-deps.js +89 -0
- package/dist/completion/session-hold-sweep-deps.js.map +1 -0
- package/dist/completion/session-hold.d.ts +180 -0
- package/dist/completion/session-hold.d.ts.map +1 -0
- package/dist/completion/session-hold.js +238 -0
- package/dist/completion/session-hold.js.map +1 -0
- package/dist/completion/state-cascade.d.ts +19 -0
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +85 -31
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +35 -2
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +165 -94
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/team-phase.d.ts +27 -15
- package/dist/completion/team-phase.d.ts.map +1 -1
- package/dist/completion/team-phase.js +34 -15
- package/dist/completion/team-phase.js.map +1 -1
- package/dist/delivery/commit-verdict-hold.d.ts +55 -0
- package/dist/delivery/commit-verdict-hold.d.ts.map +1 -0
- package/dist/delivery/commit-verdict-hold.js +118 -0
- package/dist/delivery/commit-verdict-hold.js.map +1 -0
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +10 -3
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +1 -0
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +6 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +29 -2
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +30 -6
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/drift/artifact-ref-shape.d.ts +34 -0
- package/dist/drift/artifact-ref-shape.d.ts.map +1 -0
- package/dist/drift/artifact-ref-shape.js +94 -0
- package/dist/drift/artifact-ref-shape.js.map +1 -0
- package/dist/drift/drift-eval-loop.d.ts +7 -0
- package/dist/drift/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift/drift-eval-loop.js +34 -5
- package/dist/drift/drift-eval-loop.js.map +1 -1
- package/dist/drift/drift-evaluator.d.ts.map +1 -1
- package/dist/drift/drift-evaluator.js +8 -3
- package/dist/drift/drift-evaluator.js.map +1 -1
- package/dist/focus/awaiting-slot.d.ts +34 -0
- package/dist/focus/awaiting-slot.d.ts.map +1 -0
- package/dist/focus/awaiting-slot.js +26 -0
- package/dist/focus/awaiting-slot.js.map +1 -0
- package/dist/focus/focus-lifecycle.js +2 -2
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-phase.d.ts.map +1 -1
- package/dist/focus/focus-phase.js +3 -1
- package/dist/focus/focus-phase.js.map +1 -1
- package/dist/focus/focus-spawn-decision.d.ts +62 -0
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -0
- package/dist/focus/focus-spawn-decision.js +41 -0
- package/dist/focus/focus-spawn-decision.js.map +1 -0
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +1 -13
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +16 -55
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +102 -64
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener-state.d.ts.map +1 -1
- package/dist/focus/listener-state.js +4 -1
- package/dist/focus/listener-state.js.map +1 -1
- package/dist/focus/listener.d.ts +41 -2
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +135 -83
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +69 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -0
- package/dist/focus/pending-spawn-pass-deps.js +34 -0
- package/dist/focus/pending-spawn-pass-deps.js.map +1 -0
- package/dist/focus/pending-spawn-review-next-step.d.ts +83 -0
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -0
- package/dist/focus/pending-spawn-review-next-step.js +325 -0
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -0
- package/dist/focus/review-cycle-cap-hold.d.ts +132 -0
- package/dist/focus/review-cycle-cap-hold.d.ts.map +1 -0
- package/dist/focus/review-cycle-cap-hold.js +178 -0
- package/dist/focus/review-cycle-cap-hold.js.map +1 -0
- package/dist/focus/team-actionable-work.js +2 -2
- package/dist/focus/verify-open-issues.d.ts +22 -0
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +118 -57
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/focus/verify-routing-passes.d.ts +32 -0
- package/dist/focus/verify-routing-passes.d.ts.map +1 -0
- package/dist/focus/verify-routing-passes.js +18 -0
- package/dist/focus/verify-routing-passes.js.map +1 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +9 -5
- package/dist/git/index.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +16 -2
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +53 -30
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts +5 -0
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +17 -8
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-gate-coverage.d.ts +94 -0
- package/dist/merge/merge-gate-coverage.d.ts.map +1 -0
- package/dist/merge/merge-gate-coverage.js +217 -0
- package/dist/merge/merge-gate-coverage.js.map +1 -0
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +6 -0
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt/prompt-listing.d.ts.map +1 -1
- package/dist/prompt/prompt-listing.js +8 -0
- package/dist/prompt/prompt-listing.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +5 -1
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +14 -39
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/gate-ownership.d.ts +36 -0
- package/dist/prompt-sections/gate-ownership.d.ts.map +1 -0
- package/dist/prompt-sections/gate-ownership.js +68 -0
- package/dist/prompt-sections/gate-ownership.js.map +1 -0
- package/dist/prompt-sections/gate-verdict-section.d.ts +58 -0
- package/dist/prompt-sections/gate-verdict-section.d.ts.map +1 -0
- package/dist/prompt-sections/gate-verdict-section.js +88 -0
- package/dist/prompt-sections/gate-verdict-section.js.map +1 -0
- package/dist/prompt-sections/persona-sections.d.ts +10 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +35 -11
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/shared.js +1 -1
- package/dist/prompt-sections/shared.js.map +1 -1
- package/dist/queries/agent-resolvable-promotion.d.ts +6 -3
- package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.js +20 -9
- package/dist/queries/agent-resolvable-promotion.js.map +1 -1
- package/dist/queries/deliveries.d.ts +46 -4
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +69 -16
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-state.d.ts +151 -1
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js +95 -14
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/delivery-write-discipline.d.ts +65 -0
- package/dist/queries/delivery-write-discipline.d.ts.map +1 -0
- package/dist/queries/delivery-write-discipline.js +101 -0
- package/dist/queries/delivery-write-discipline.js.map +1 -0
- package/dist/queries/escalation-consumption.d.ts +11 -0
- package/dist/queries/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalation-consumption.js +22 -0
- package/dist/queries/escalation-consumption.js.map +1 -1
- package/dist/queries/escalation-spool.d.ts +75 -0
- package/dist/queries/escalation-spool.d.ts.map +1 -0
- package/dist/queries/escalation-spool.js +232 -0
- package/dist/queries/escalation-spool.js.map +1 -0
- package/dist/queries/escalation-suppression.d.ts.map +1 -1
- package/dist/queries/escalation-suppression.js +2 -0
- package/dist/queries/escalation-suppression.js.map +1 -1
- package/dist/queries/escalations.js +1 -1
- package/dist/queries/filing-observation.d.ts.map +1 -1
- package/dist/queries/filing-observation.js +2 -0
- package/dist/queries/filing-observation.js.map +1 -1
- package/dist/queries/focus-discovery.d.ts +4 -4
- package/dist/queries/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focus-discovery.js +1 -0
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focus-review-approval.d.ts +84 -0
- package/dist/queries/focus-review-approval.d.ts.map +1 -0
- package/dist/queries/focus-review-approval.js +158 -0
- package/dist/queries/focus-review-approval.js.map +1 -0
- package/dist/queries/focuses.d.ts +6 -5
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +9 -5
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/incident-correlation.d.ts +5 -4
- package/dist/queries/incident-correlation.d.ts.map +1 -1
- package/dist/queries/incident-correlation.js +11 -5
- package/dist/queries/incident-correlation.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +2 -1
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/loop-refusal-observation.d.ts +64 -0
- package/dist/queries/loop-refusal-observation.d.ts.map +1 -0
- package/dist/queries/loop-refusal-observation.js +137 -0
- package/dist/queries/loop-refusal-observation.js.map +1 -0
- package/dist/queries/schemas.d.ts +9 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +11 -3
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +1 -15
- package/dist/queries/verification.js.map +1 -1
- package/dist/queries/wire-contract.generated.d.ts +3 -0
- package/dist/queries/wire-contract.generated.d.ts.map +1 -1
- package/dist/queries/wire-contract.generated.js +3 -0
- package/dist/queries/wire-contract.generated.js.map +1 -1
- package/dist/resolvers/assembly-engine.d.ts.map +1 -1
- package/dist/resolvers/assembly-engine.js +3 -1
- package/dist/resolvers/assembly-engine.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts +5 -2
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +121 -39
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/shared/git-diff.d.ts +2 -0
- package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
- package/dist/resolvers/shared/git-diff.js +5 -1
- package/dist/resolvers/shared/git-diff.js.map +1 -1
- package/dist/resolvers/shared/review-window-commits.d.ts +96 -0
- package/dist/resolvers/shared/review-window-commits.d.ts.map +1 -0
- package/dist/resolvers/shared/review-window-commits.js +262 -0
- package/dist/resolvers/shared/review-window-commits.js.map +1 -0
- package/dist/session/session-lineage.d.ts.map +1 -1
- package/dist/session/session-lineage.js +4 -1
- package/dist/session/session-lineage.js.map +1 -1
- package/dist/shell/fail-stop.d.ts +18 -0
- package/dist/shell/fail-stop.d.ts.map +1 -0
- package/dist/shell/fail-stop.js +53 -0
- package/dist/shell/fail-stop.js.map +1 -0
- package/dist/shell/graceful-shutdown.d.ts +48 -0
- package/dist/shell/graceful-shutdown.d.ts.map +1 -0
- package/dist/shell/graceful-shutdown.js +152 -0
- package/dist/shell/graceful-shutdown.js.map +1 -0
- package/dist/shell/heartbeat.d.ts.map +1 -1
- package/dist/shell/heartbeat.js +5 -4
- package/dist/shell/heartbeat.js.map +1 -1
- package/dist/shell/log.d.ts.map +1 -1
- package/dist/shell/log.js +4 -1
- package/dist/shell/log.js.map +1 -1
- package/dist/shell/stop-request.d.ts.map +1 -1
- package/dist/shell/stop-request.js +2 -1
- package/dist/shell/stop-request.js.map +1 -1
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +41 -114
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/spawn/lifecycle.d.ts +12 -0
- package/dist/spawn/lifecycle.d.ts.map +1 -1
- package/dist/spawn/lifecycle.js +25 -21
- package/dist/spawn/lifecycle.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +19 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +70 -21
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/review-hold-park.d.ts.map +1 -1
- package/dist/spawn/review-hold-park.js +18 -8
- package/dist/spawn/review-hold-park.js.map +1 -1
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +4 -0
- package/dist/spawn/spawn-cooldown.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +2 -1
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +6 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +15 -2
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/index.d.ts +10 -1
- package/dist/testing/fixtures/index.d.ts.map +1 -1
- package/dist/testing/fixtures/index.js +59 -1
- package/dist/testing/fixtures/index.js.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts +34 -0
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -0
- package/dist/testing/fixtures/pending-spawn-world.js +92 -0
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -0
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-gate-configured.d.ts +86 -0
- package/dist/verify/commit-gate-configured.d.ts.map +1 -0
- package/dist/verify/commit-gate-configured.js +234 -0
- package/dist/verify/commit-gate-configured.js.map +1 -0
- package/dist/verify/commit-verdict-record.d.ts +98 -0
- package/dist/verify/commit-verdict-record.d.ts.map +1 -0
- package/dist/verify/commit-verdict-record.js +297 -0
- package/dist/verify/commit-verdict-record.js.map +1 -0
- package/dist/verify/explicit-gate-outcome.d.ts +161 -0
- package/dist/verify/explicit-gate-outcome.d.ts.map +1 -0
- package/dist/verify/explicit-gate-outcome.js +215 -0
- package/dist/verify/explicit-gate-outcome.js.map +1 -0
- package/dist/verify/explicit-rearm.d.ts +27 -0
- package/dist/verify/explicit-rearm.d.ts.map +1 -0
- package/dist/verify/explicit-rearm.js +161 -0
- package/dist/verify/explicit-rearm.js.map +1 -0
- package/dist/verify/explicit-run-ledger.d.ts +26 -0
- package/dist/verify/explicit-run-ledger.d.ts.map +1 -0
- package/dist/verify/explicit-run-ledger.js +93 -0
- package/dist/verify/explicit-run-ledger.js.map +1 -0
- package/dist/verify/failure-signature.d.ts.map +1 -1
- package/dist/verify/failure-signature.js +5 -1
- package/dist/verify/failure-signature.js.map +1 -1
- package/dist/verify/gate-run-registry.d.ts +105 -0
- package/dist/verify/gate-run-registry.d.ts.map +1 -0
- package/dist/verify/gate-run-registry.js +111 -0
- package/dist/verify/gate-run-registry.js.map +1 -0
- package/dist/verify/gate-verdict-source.d.ts +68 -0
- package/dist/verify/gate-verdict-source.d.ts.map +1 -0
- package/dist/verify/gate-verdict-source.js +143 -0
- package/dist/verify/gate-verdict-source.js.map +1 -0
- package/dist/verify/judged-commit-gate.d.ts +11 -0
- package/dist/verify/judged-commit-gate.d.ts.map +1 -0
- package/dist/verify/judged-commit-gate.js +48 -0
- package/dist/verify/judged-commit-gate.js.map +1 -0
- package/dist/verify/rework-judgment.d.ts +58 -0
- package/dist/verify/rework-judgment.d.ts.map +1 -0
- package/dist/verify/rework-judgment.js +54 -0
- package/dist/verify/rework-judgment.js.map +1 -0
- package/dist/verify/verification-attribution.d.ts +105 -0
- package/dist/verify/verification-attribution.d.ts.map +1 -0
- package/dist/verify/verification-attribution.js +322 -0
- package/dist/verify/verification-attribution.js.map +1 -0
- package/dist/verify/verification-baseline-run.d.ts +123 -0
- package/dist/verify/verification-baseline-run.d.ts.map +1 -0
- package/dist/verify/verification-baseline-run.js +386 -0
- package/dist/verify/verification-baseline-run.js.map +1 -0
- package/dist/verify/verification-baseline.d.ts +79 -33
- package/dist/verify/verification-baseline.d.ts.map +1 -1
- package/dist/verify/verification-baseline.js +99 -106
- package/dist/verify/verification-baseline.js.map +1 -1
- package/dist/verify/verification-checkout.d.ts +13 -0
- package/dist/verify/verification-checkout.d.ts.map +1 -1
- package/dist/verify/verification-checkout.js +39 -2
- package/dist/verify/verification-checkout.js.map +1 -1
- package/dist/verify/verification-commit-sharing.d.ts +84 -0
- package/dist/verify/verification-commit-sharing.d.ts.map +1 -0
- package/dist/verify/verification-commit-sharing.js +416 -0
- package/dist/verify/verification-commit-sharing.js.map +1 -0
- package/dist/verify/verification-config.d.ts.map +1 -1
- package/dist/verify/verification-config.js +12 -2
- package/dist/verify/verification-config.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +27 -11
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-default-on.js +159 -29
- package/dist/verify/verification-default-on.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +49 -42
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +69 -4
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.d.ts +15 -2
- package/dist/verify/verification-deterministic.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.js +12 -3
- package/dist/verify/verification-deterministic.js.map +1 -1
- package/dist/verify/verification-diagnostics.d.ts +16 -0
- package/dist/verify/verification-diagnostics.d.ts.map +1 -0
- package/dist/verify/verification-diagnostics.js +219 -0
- package/dist/verify/verification-diagnostics.js.map +1 -0
- package/dist/verify/verification-engine.d.ts +12 -8
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +110 -92
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts +2 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.js +14 -4
- package/dist/verify/verification-evidence-unavailable-feedback.js.map +1 -1
- package/dist/verify/verification-failure-parser.d.ts +37 -3
- package/dist/verify/verification-failure-parser.d.ts.map +1 -1
- package/dist/verify/verification-failure-parser.js +66 -3
- package/dist/verify/verification-failure-parser.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts +21 -34
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +37 -88
- package/dist/verify/verification-feedback.js.map +1 -1
- package/dist/verify/verification-gate-stages.d.ts +110 -0
- package/dist/verify/verification-gate-stages.d.ts.map +1 -0
- package/dist/verify/verification-gate-stages.js +179 -0
- package/dist/verify/verification-gate-stages.js.map +1 -0
- package/dist/verify/verification-history-reset.d.ts +61 -0
- package/dist/verify/verification-history-reset.d.ts.map +1 -0
- package/dist/verify/verification-history-reset.js +90 -0
- package/dist/verify/verification-history-reset.js.map +1 -0
- package/dist/verify/verification-manifest.d.ts.map +1 -1
- package/dist/verify/verification-manifest.js +2 -1
- package/dist/verify/verification-manifest.js.map +1 -1
- package/dist/verify/verification-rework-messages.d.ts +19 -0
- package/dist/verify/verification-rework-messages.d.ts.map +1 -0
- package/dist/verify/verification-rework-messages.js +52 -0
- package/dist/verify/verification-rework-messages.js.map +1 -0
- package/dist/worktree/install-inputs.d.ts +89 -0
- package/dist/worktree/install-inputs.d.ts.map +1 -0
- package/dist/worktree/install-inputs.js +625 -0
- package/dist/worktree/install-inputs.js.map +1 -0
- package/dist/worktree/install-script-effects.d.ts +30 -0
- package/dist/worktree/install-script-effects.d.ts.map +1 -0
- package/dist/worktree/install-script-effects.js +524 -0
- package/dist/worktree/install-script-effects.js.map +1 -0
- package/dist/worktree/install-script-tokens.d.ts +57 -0
- package/dist/worktree/install-script-tokens.d.ts.map +1 -0
- package/dist/worktree/install-script-tokens.js +299 -0
- package/dist/worktree/install-script-tokens.js.map +1 -0
- package/dist/worktree/provision.d.ts +27 -4
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +46 -7
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/safety.d.ts +11 -0
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +20 -3
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +3 -1
- package/dist/worktree/verify-interlock.js.map +1 -1
- package/dist/worktree/worktree-package-provisioning.d.ts +75 -0
- package/dist/worktree/worktree-package-provisioning.d.ts.map +1 -0
- package/dist/worktree/worktree-package-provisioning.js +362 -0
- package/dist/worktree/worktree-package-provisioning.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/spawn/worktree-session-provisioning.test.ts,
|
|
3
|
+
// packages/daemon/src/verify/verification-baseline-run.test.ts,
|
|
4
|
+
// packages/daemon/src/verify/verify-unprovisioned-worktree.test.ts,
|
|
5
|
+
// packages/daemon/src/worktree/worktree-package-provisioning.test.ts
|
|
6
|
+
// PINNED-BY-END
|
|
7
|
+
/**
|
|
8
|
+
* A focus worktree carries the installed dependencies of every package the gate
|
|
9
|
+
* loads, so a verify stage fails only on the code.
|
|
10
|
+
*
|
|
11
|
+
* Why this exists. A focus worktree is a git checkout: tracked files only. Its
|
|
12
|
+
* ROOT package resolves by Node's walk-up to the product checkout's node_modules
|
|
13
|
+
* (the worktree nests under it), and the verify checkout rebuilds exactly that
|
|
14
|
+
* resolution (verify/verification-checkout.ts). A NESTED package with its own
|
|
15
|
+
* lockfile (packages/daemon, mcp/telora-products, ...) is not reachable that way:
|
|
16
|
+
* its walk-up passes the worktree root and the product root, never the product
|
|
17
|
+
* checkout's packages/daemon/node_modules. So the daemon lint could not load
|
|
18
|
+
* eslint-import-resolver-typescript in the verify checkout and failed ~950
|
|
19
|
+
* import-x/no-cycle "Resolve error"s against deliveries whose code was fine
|
|
20
|
+
* (2026-09-11, 09-12, 09-14), each cleared by `npm ci` with no code change.
|
|
21
|
+
*
|
|
22
|
+
* Discovery rule (which packages are provisioned), derived from the worktree:
|
|
23
|
+
* 1. every TRACKED package-lock.json below the repo root (root excluded: it
|
|
24
|
+
* resolves by walk-up; nothing under a node_modules segment);
|
|
25
|
+
* 2. minus root workspace members (package.json `workspaces`): the root
|
|
26
|
+
* install covers them;
|
|
27
|
+
* 3. minus a package a root package.json script installs for itself
|
|
28
|
+
* (`npm ci|install|i ... --prefix <dir>`): its own script owns that
|
|
29
|
+
* install, and a package the gate never loads must not be able to stall
|
|
30
|
+
* every verify with its install (e.g. a starter template);
|
|
31
|
+
* 4. minus a package whose node_modules marker path is NOT git-ignored: the
|
|
32
|
+
* verify checkout mirrors only ignored node_modules, and a marker in a
|
|
33
|
+
* non-ignored tree would dirty the worktree.
|
|
34
|
+
* A repo with none is a no-op.
|
|
35
|
+
*
|
|
36
|
+
* Current-ness: a successful install writes a marker inside that package's
|
|
37
|
+
* node_modules holding the package's INSTALL-INPUT fingerprint
|
|
38
|
+
* (worktree/install-inputs.ts): its lockfile, package.json and .npmrc, and every
|
|
39
|
+
* tracked file its install lifecycle scripts or native build consume -- the same
|
|
40
|
+
* input set the baseline dependency parity compares, so a reused worktree
|
|
41
|
+
* re-provisions when a script its postinstall runs changes, not only when a
|
|
42
|
+
* manifest does (TEL-9). An equal marker means current, so a reused worktree is
|
|
43
|
+
* not reinstalled; a marker of an older format (a bare sha256 of lockfile +
|
|
44
|
+
* package.json) never equals one, so it reinstalls rather than skips. `npm ci`
|
|
45
|
+
* removes node_modules first, so an interrupted install leaves no marker. The install is
|
|
46
|
+
* `npm ci --include=dev` (the lockfile, dev deps even under NODE_ENV=production,
|
|
47
|
+
* the same install CI runs), spawned asynchronously through an injectable seam,
|
|
48
|
+
* single-flight per worktree, serialized across worktrees (one install at a time
|
|
49
|
+
* on the host), and bounded by a timeout, so registry latency cannot wedge the
|
|
50
|
+
* poll loop. A failed install (including an `npm ci` abort on a
|
|
51
|
+
* package.json/lockfile mismatch) is recorded against its fingerprint and retried
|
|
52
|
+
* after a backoff, or immediately once the lockfile changes.
|
|
53
|
+
*
|
|
54
|
+
* Verify interlock: provisioning never STARTS while a verify holds the worktree
|
|
55
|
+
* (the verify is mirroring these node_modules), and re-checks before each
|
|
56
|
+
* package. The verify side refuses to run while an install is in flight or a
|
|
57
|
+
* package is not current ({@link readWorktreeProvisioning} -> checkoutUnavailable,
|
|
58
|
+
* retried next tick); the checkout's dependency fingerprint discards a verdict an
|
|
59
|
+
* install moved mid-run as the backstop.
|
|
60
|
+
*
|
|
61
|
+
* @module worktree/worktree-package-provisioning
|
|
62
|
+
*/
|
|
63
|
+
import { spawn } from 'node:child_process';
|
|
64
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
65
|
+
import { dirname, join } from 'node:path';
|
|
66
|
+
import { runGitSync } from '../git/types.js';
|
|
67
|
+
import { isWorktreeUnderVerify } from './verify-interlock.js';
|
|
68
|
+
import { installInputsFingerprint, readWorktreeInstallTree, trackedInstallTree } from './install-inputs.js';
|
|
69
|
+
import { createLogger } from '../shell/log.js';
|
|
70
|
+
const log = createLogger({ module: 'worktree-provisioning' });
|
|
71
|
+
/** Bound on one package install: a registry stall is a failed (retried) install, never a wedge. */
|
|
72
|
+
export const PACKAGE_INSTALL_TIMEOUT_MS = 15 * 60 * 1000;
|
|
73
|
+
/** A failed install is retried after this, or at once when its lockfile changes. */
|
|
74
|
+
export const PACKAGE_INSTALL_RETRY_BACKOFF_MS = 2 * 60 * 1000;
|
|
75
|
+
/** The current-ness marker, inside the package's (ignored) node_modules; a dot-entry the verify mirror skips. */
|
|
76
|
+
export const PROVISIONED_MARKER = '.telora-provisioned.json';
|
|
77
|
+
const LOCKFILE = 'package-lock.json';
|
|
78
|
+
const DEPENDENCY_DIR = 'node_modules';
|
|
79
|
+
const inFlight = new Map();
|
|
80
|
+
const failures = new Map();
|
|
81
|
+
const lastLoggedStatus = new Map();
|
|
82
|
+
let installChain = Promise.resolve();
|
|
83
|
+
const failureKey = (worktreePath, rel) => JSON.stringify([worktreePath, rel]);
|
|
84
|
+
function readJson(path) {
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
87
|
+
return parsed !== null && typeof parsed === 'object' ? parsed : null;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Root workspace globs as anchored regexes (`*` = one segment, `**` = any depth). */
|
|
94
|
+
function workspaceMatchers(rootPackage) {
|
|
95
|
+
const raw = rootPackage?.workspaces;
|
|
96
|
+
const globs = Array.isArray(raw) ? raw : (raw && typeof raw === 'object' ? raw.packages : []);
|
|
97
|
+
if (!Array.isArray(globs))
|
|
98
|
+
return [];
|
|
99
|
+
return globs.filter((g) => typeof g === 'string').map((glob) => {
|
|
100
|
+
const body = glob.replace(/^\.\//, '').replace(/\/$/, '').split('/')
|
|
101
|
+
.map((seg) => (seg === '**' ? '.*' : seg.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '[^/]*')))
|
|
102
|
+
.join('/');
|
|
103
|
+
return new RegExp(`^${body}$`);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/** Package dirs a root script installs itself (`npm ci|install|i ... --prefix <dir>`). */
|
|
107
|
+
function selfInstalledDirs(rootPackage) {
|
|
108
|
+
const dirs = new Set();
|
|
109
|
+
const scripts = rootPackage?.scripts;
|
|
110
|
+
if (!scripts || typeof scripts !== 'object')
|
|
111
|
+
return dirs;
|
|
112
|
+
for (const body of Object.values(scripts)) {
|
|
113
|
+
if (typeof body !== 'string')
|
|
114
|
+
continue;
|
|
115
|
+
for (const match of body.matchAll(/\bnpm\s+(?:ci|install|i)\b[^&|;]*?--prefix[=\s]+(\S+)/g)) {
|
|
116
|
+
dirs.add(match[1].replace(/^\.\//, '').replace(/\/$/, ''));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return dirs;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Discovery (module doc) over one tracked listing, which the fingerprints then
|
|
123
|
+
* read too. No packages for a path that does not exist; null when git cannot list
|
|
124
|
+
* an existing worktree -- the caller fails closed.
|
|
125
|
+
*/
|
|
126
|
+
function readProvisionedPackages(worktreePath, runGit = runGitSync) {
|
|
127
|
+
if (!existsSync(worktreePath))
|
|
128
|
+
return { packages: [], tree: trackedInstallTree([], () => null) };
|
|
129
|
+
const tree = readWorktreeInstallTree(worktreePath, runGit);
|
|
130
|
+
if (tree === null)
|
|
131
|
+
return null;
|
|
132
|
+
const rootPackage = readJson(join(worktreePath, 'package.json'));
|
|
133
|
+
const members = workspaceMatchers(rootPackage);
|
|
134
|
+
const selfInstalled = selfInstalledDirs(rootPackage);
|
|
135
|
+
const candidates = tree.filesUnder('')
|
|
136
|
+
.filter((path) => path.endsWith(`/${LOCKFILE}`))
|
|
137
|
+
.map((path) => dirname(path))
|
|
138
|
+
.filter((rel) => !members.some((m) => m.test(rel)) && !selfInstalled.has(rel));
|
|
139
|
+
if (candidates.length === 0)
|
|
140
|
+
return { packages: [], tree };
|
|
141
|
+
const ignored = runGit(['check-ignore', ...candidates.map((rel) => `${rel}/${DEPENDENCY_DIR}/${PROVISIONED_MARKER}`)], worktreePath);
|
|
142
|
+
const ignoredMarkers = new Set(ignored.output.split('\n').map((line) => line.trim()));
|
|
143
|
+
return { packages: candidates.filter((rel) => ignoredMarkers.has(`${rel}/${DEPENDENCY_DIR}/${PROVISIONED_MARKER}`)).sort(), tree };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The repo-relative package dirs to provision in `worktreePath` (module doc,
|
|
147
|
+
* discovery rule). [] when the path does not exist (nothing to provision); null
|
|
148
|
+
* when git cannot list an existing worktree -- the caller fails closed.
|
|
149
|
+
*/
|
|
150
|
+
export function discoverProvisionedPackages(worktreePath, runGit = runGitSync) {
|
|
151
|
+
return readProvisionedPackages(worktreePath, runGit)?.packages ?? null;
|
|
152
|
+
}
|
|
153
|
+
/** The install-input fingerprint of `rel` over `tree`; null when it has no lockfile on disk (nothing to install from). */
|
|
154
|
+
function fingerprintIn(worktreePath, rel, tree) {
|
|
155
|
+
if (!existsSync(join(worktreePath, rel, LOCKFILE)))
|
|
156
|
+
return null;
|
|
157
|
+
return installInputsFingerprint(tree, rel);
|
|
158
|
+
}
|
|
159
|
+
/** True when `rel`'s marker records its current fingerprint; an input that cannot be read is never current. */
|
|
160
|
+
function isCurrent(worktreePath, rel, tree) {
|
|
161
|
+
let fingerprint;
|
|
162
|
+
try {
|
|
163
|
+
fingerprint = fingerprintIn(worktreePath, rel, tree);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
if (fingerprint === null)
|
|
169
|
+
return true; // no lockfile in the tree: nothing to install from
|
|
170
|
+
return readJson(join(worktreePath, rel, DEPENDENCY_DIR, PROVISIONED_MARKER))?.fingerprint === fingerprint;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* The install-input fingerprint of package `rel` in `worktreePath` (module doc):
|
|
174
|
+
* null when it has no lockfile; throws when git cannot list the worktree or an
|
|
175
|
+
* input cannot be read.
|
|
176
|
+
*/
|
|
177
|
+
export function packageFingerprint(worktreePath, rel, runGit = runGitSync) {
|
|
178
|
+
const tree = readWorktreeInstallTree(worktreePath, runGit);
|
|
179
|
+
if (tree === null)
|
|
180
|
+
throw new Error(`git cannot list the tracked files of ${worktreePath}`);
|
|
181
|
+
return fingerprintIn(worktreePath, rel, tree);
|
|
182
|
+
}
|
|
183
|
+
/** True when package `rel`'s marker records its current install-input fingerprint (never when git cannot list the worktree). */
|
|
184
|
+
export function isPackageProvisioned(worktreePath, rel, runGit = runGitSync) {
|
|
185
|
+
const tree = readWorktreeInstallTree(worktreePath, runGit);
|
|
186
|
+
return tree !== null && isCurrent(worktreePath, rel, tree);
|
|
187
|
+
}
|
|
188
|
+
/** The recorded failure for a package, when it is for the package's CURRENT fingerprint. */
|
|
189
|
+
function currentFailure(worktreePath, rel, tree) {
|
|
190
|
+
const failure = failures.get(failureKey(worktreePath, rel));
|
|
191
|
+
if (!failure)
|
|
192
|
+
return undefined;
|
|
193
|
+
try {
|
|
194
|
+
return failure.fingerprint === fingerprintIn(worktreePath, rel, tree) ? failure : undefined;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** Install one package and record the outcome (marker on success, failure otherwise). */
|
|
201
|
+
async function installPackage(worktreePath, rel, deps) {
|
|
202
|
+
const packageDir = join(worktreePath, rel);
|
|
203
|
+
const fingerprint = packageFingerprint(worktreePath, rel, deps.runGit);
|
|
204
|
+
if (fingerprint === null || readJson(join(packageDir, DEPENDENCY_DIR, PROVISIONED_MARKER))?.fingerprint === fingerprint)
|
|
205
|
+
return;
|
|
206
|
+
const now = deps.now ?? Date.now;
|
|
207
|
+
log.info(`installing ${rel} dependencies from its lockfile in ${worktreePath}`);
|
|
208
|
+
let outcome;
|
|
209
|
+
try {
|
|
210
|
+
outcome = await (deps.install ?? npmCiInstaller)(packageDir, deps.timeoutMs ?? PACKAGE_INSTALL_TIMEOUT_MS);
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
outcome = { ok: false, error: err.message };
|
|
214
|
+
}
|
|
215
|
+
if (!outcome.ok) {
|
|
216
|
+
failures.set(failureKey(worktreePath, rel), { fingerprint, error: outcome.error, atMs: now() });
|
|
217
|
+
log.warn(`dependency install failed for package ${rel} in ${worktreePath}: ${outcome.error} -- retried; no verify runs against it`);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// The fingerprint read BEFORE the install: an input that moved mid-install stays stale and reinstalls.
|
|
221
|
+
mkdirSync(join(packageDir, DEPENDENCY_DIR), { recursive: true });
|
|
222
|
+
writeFileSync(join(packageDir, DEPENDENCY_DIR, PROVISIONED_MARKER), `${JSON.stringify({ fingerprint, installedAt: new Date(now()).toISOString() })}\n`);
|
|
223
|
+
failures.delete(failureKey(worktreePath, rel));
|
|
224
|
+
log.info(`installed ${rel} dependencies in ${worktreePath}`);
|
|
225
|
+
}
|
|
226
|
+
async function installDue(worktreePath, due, deps) {
|
|
227
|
+
const underVerify = deps.isWorktreeUnderVerify ?? isWorktreeUnderVerify;
|
|
228
|
+
for (const rel of due) {
|
|
229
|
+
if (underVerify(worktreePath)) {
|
|
230
|
+
log.info(`dependency install in ${worktreePath} deferred: a verify holds the worktree (next: ${rel})`);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
await installPackage(worktreePath, rel, deps);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
// A fingerprint or marker write that throws leaves the package stale: retried, never a crash of the chain.
|
|
238
|
+
log.warn(`dependency provisioning of ${rel} in ${worktreePath} errored: ${err.message}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Start provisioning `worktreePath` when a package is stale and not in backoff.
|
|
244
|
+
* Never awaited by the poll loop: returns the in-flight job (existing or new), or
|
|
245
|
+
* null when there is nothing to do, a verify holds the worktree, or git cannot
|
|
246
|
+
* list it.
|
|
247
|
+
*/
|
|
248
|
+
export function provisionWorktreePackages(worktreePath, deps = {}) {
|
|
249
|
+
const running = inFlight.get(worktreePath);
|
|
250
|
+
if (running)
|
|
251
|
+
return running.job;
|
|
252
|
+
if ((deps.isWorktreeUnderVerify ?? isWorktreeUnderVerify)(worktreePath))
|
|
253
|
+
return null;
|
|
254
|
+
const listed = readProvisionedPackages(worktreePath, deps.runGit);
|
|
255
|
+
if (!listed)
|
|
256
|
+
return null;
|
|
257
|
+
const now = (deps.now ?? Date.now)();
|
|
258
|
+
const backoff = deps.retryBackoffMs ?? PACKAGE_INSTALL_RETRY_BACKOFF_MS;
|
|
259
|
+
const due = listed.packages.filter((rel) => {
|
|
260
|
+
if (isCurrent(worktreePath, rel, listed.tree))
|
|
261
|
+
return false;
|
|
262
|
+
const failure = currentFailure(worktreePath, rel, listed.tree);
|
|
263
|
+
return !failure || now - failure.atMs >= backoff;
|
|
264
|
+
});
|
|
265
|
+
if (due.length === 0)
|
|
266
|
+
return null;
|
|
267
|
+
const job = installChain.then(() => installDue(worktreePath, due, deps));
|
|
268
|
+
installChain = job.catch(() => undefined);
|
|
269
|
+
const tracked = job.catch(() => undefined).finally(() => inFlight.delete(worktreePath));
|
|
270
|
+
inFlight.set(worktreePath, { job: tracked, packages: due });
|
|
271
|
+
return tracked;
|
|
272
|
+
}
|
|
273
|
+
function logStatusChange(worktreePath, status) {
|
|
274
|
+
const text = status.ready ? 'ready' : status.reason;
|
|
275
|
+
if (lastLoggedStatus.get(worktreePath) !== text) {
|
|
276
|
+
lastLoggedStatus.set(worktreePath, text);
|
|
277
|
+
if (!status.ready)
|
|
278
|
+
log.warn(`verify refused for ${worktreePath}: ${status.reason}`);
|
|
279
|
+
}
|
|
280
|
+
return status;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* May a deterministic verify run against `worktreePath`'s installed packages?
|
|
284
|
+
* Not ready while an install is in flight, a package failed its install, or a
|
|
285
|
+
* package is stale (provisioning is kicked here when it is not running), and
|
|
286
|
+
* when git cannot list the worktree (fail closed). The verify reports a
|
|
287
|
+
* not-ready status as checkoutUnavailable: retried next tick, never a verdict.
|
|
288
|
+
*/
|
|
289
|
+
export function readWorktreeProvisioning(worktreePath, deps = {}) {
|
|
290
|
+
const listed = readProvisionedPackages(worktreePath, deps.runGit);
|
|
291
|
+
if (listed === null) {
|
|
292
|
+
return logStatusChange(worktreePath, { ready: false, state: 'unlistable', reason: `git cannot list the tracked package lockfiles of ${worktreePath}` });
|
|
293
|
+
}
|
|
294
|
+
const running = inFlight.get(worktreePath);
|
|
295
|
+
if (running) {
|
|
296
|
+
return logStatusChange(worktreePath, { ready: false, state: 'installing', reason: `dependency install in flight for ${running.packages.join(', ')}` });
|
|
297
|
+
}
|
|
298
|
+
const stale = listed.packages.filter((rel) => !isCurrent(worktreePath, rel, listed.tree));
|
|
299
|
+
if (stale.length === 0)
|
|
300
|
+
return logStatusChange(worktreePath, { ready: true });
|
|
301
|
+
const kicked = provisionWorktreePackages(worktreePath, deps);
|
|
302
|
+
const failed = stale.map((rel) => ({ rel, failure: currentFailure(worktreePath, rel, listed.tree) })).find((f) => f.failure);
|
|
303
|
+
let status;
|
|
304
|
+
if (kicked) {
|
|
305
|
+
status = { ready: false, state: 'installing', reason: `dependency install started for ${stale.join(', ')}` };
|
|
306
|
+
}
|
|
307
|
+
else if (failed?.failure) {
|
|
308
|
+
status = { ready: false, state: 'failed', reason: `dependency install failed for package ${failed.rel}: ${failed.failure.error}` };
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
status = { ready: false, state: 'deferred', reason: `dependencies not installed for ${stale.join(', ')}; the install waits for the verify holding the worktree` };
|
|
312
|
+
}
|
|
313
|
+
return logStatusChange(worktreePath, status);
|
|
314
|
+
}
|
|
315
|
+
/** The tail of npm's output that names the failure (last non-empty lines). */
|
|
316
|
+
function outputTail(output) {
|
|
317
|
+
return output.split('\n').map((line) => line.trim()).filter((line) => line.length > 0).slice(-6).join(' | ') || 'no output';
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The real installer: `npm ci --include=dev` in the package dir, in its own
|
|
321
|
+
* process group so a timeout kills npm's children too.
|
|
322
|
+
*/
|
|
323
|
+
export const npmCiInstaller = (packageDir, timeoutMs) => new Promise((resolvePromise) => {
|
|
324
|
+
let output = '';
|
|
325
|
+
let settled = false;
|
|
326
|
+
const finish = (outcome) => {
|
|
327
|
+
if (settled)
|
|
328
|
+
return;
|
|
329
|
+
settled = true;
|
|
330
|
+
resolvePromise(outcome);
|
|
331
|
+
};
|
|
332
|
+
const child = spawn('npm', ['ci', '--include=dev', '--no-audit', '--no-fund'], {
|
|
333
|
+
cwd: packageDir,
|
|
334
|
+
detached: true,
|
|
335
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
336
|
+
env: { ...process.env, npm_config_audit: 'false', npm_config_fund: 'false' },
|
|
337
|
+
});
|
|
338
|
+
const append = (chunk) => { output = (output + chunk.toString()).slice(-8192); };
|
|
339
|
+
child.stdout?.on('data', append);
|
|
340
|
+
child.stderr?.on('data', append);
|
|
341
|
+
const timer = setTimeout(() => {
|
|
342
|
+
try {
|
|
343
|
+
if (child.pid !== undefined)
|
|
344
|
+
process.kill(-child.pid, 'SIGKILL');
|
|
345
|
+
}
|
|
346
|
+
catch { /* already gone */ }
|
|
347
|
+
finish({ ok: false, error: `npm ci timed out after ${timeoutMs}ms: ${outputTail(output)}` });
|
|
348
|
+
}, timeoutMs);
|
|
349
|
+
child.on('error', (err) => { clearTimeout(timer); finish({ ok: false, error: `npm ci could not start: ${err.message}` }); });
|
|
350
|
+
child.on('close', (code) => {
|
|
351
|
+
clearTimeout(timer);
|
|
352
|
+
finish(code === 0 ? { ok: true } : { ok: false, error: `npm ci exited ${code ?? 'by signal'}: ${outputTail(output)}` });
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
/** Test-only: forget in-flight jobs, failures and logged statuses. */
|
|
356
|
+
export function __resetWorktreeProvisioningForTests() {
|
|
357
|
+
inFlight.clear();
|
|
358
|
+
failures.clear();
|
|
359
|
+
lastLoggedStatus.clear();
|
|
360
|
+
installChain = Promise.resolve();
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=worktree-package-provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-package-provisioning.js","sourceRoot":"","sources":["../../src/worktree/worktree-package-provisioning.ts"],"names":[],"mappings":"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"}
|