@telora/daemon 0.20.4 → 0.20.9
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 +7 -3
- package/dist/ai-inspection-context.d.ts.map +1 -1
- package/dist/ai-inspection-context.js +5 -3
- package/dist/ai-inspection-context.js.map +1 -1
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js +4 -2
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.d.ts.map +1 -1
- package/dist/audit-hooks.js +3 -1
- package/dist/audit-hooks.js.map +1 -1
- package/dist/auth-liveness.d.ts.map +1 -1
- package/dist/auth-liveness.js +4 -2
- package/dist/auth-liveness.js.map +1 -1
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +14 -12
- package/dist/auto-update.js.map +1 -1
- package/dist/backends/codex/codex-backend.d.ts.map +1 -1
- package/dist/backends/codex/codex-backend.js +4 -2
- package/dist/backends/codex/codex-backend.js.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.d.ts.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.js +3 -1
- package/dist/backends/codex/codex-mcp-proxy.js.map +1 -1
- package/dist/backends/lacuna/lifecycle.d.ts.map +1 -1
- package/dist/backends/lacuna/lifecycle.js +4 -2
- package/dist/backends/lacuna/lifecycle.js.map +1 -1
- package/dist/backends/resolve.d.ts.map +1 -1
- package/dist/backends/resolve.js +3 -1
- package/dist/backends/resolve.js.map +1 -1
- package/dist/cascade-restatement.d.ts.map +1 -1
- package/dist/cascade-restatement.js +15 -13
- package/dist/cascade-restatement.js.map +1 -1
- package/dist/ci-escalation.d.ts.map +1 -1
- package/dist/ci-escalation.js +4 -2
- package/dist/ci-escalation.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts.map +1 -1
- package/dist/ci-sensor-loop.js +6 -4
- package/dist/ci-sensor-loop.js.map +1 -1
- package/dist/ci-status-git.d.ts +5 -6
- package/dist/ci-status-git.d.ts.map +1 -1
- package/dist/ci-status-git.js +7 -7
- package/dist/ci-status-git.js.map +1 -1
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +9 -2
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.d.ts.map +1 -1
- package/dist/cli/open.js +9 -2
- package/dist/cli/open.js.map +1 -1
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +2 -0
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/verify-setup.d.ts.map +1 -1
- package/dist/cli/verify-setup.js +9 -4
- package/dist/cli/verify-setup.js.map +1 -1
- package/dist/close-loop-dispatcher.d.ts.map +1 -1
- package/dist/close-loop-dispatcher.js +6 -4
- package/dist/close-loop-dispatcher.js.map +1 -1
- package/dist/completion/advanceability.d.ts.map +1 -1
- package/dist/completion/advanceability.js +3 -1
- package/dist/completion/advanceability.js.map +1 -1
- package/dist/completion/agent-completion.d.ts.map +1 -1
- package/dist/completion/agent-completion.js +11 -9
- package/dist/completion/agent-completion.js.map +1 -1
- package/dist/completion/event-escalations.d.ts.map +1 -1
- package/dist/completion/event-escalations.js +10 -8
- package/dist/completion/event-escalations.js.map +1 -1
- package/dist/completion/event-phases.d.ts +104 -0
- package/dist/completion/event-phases.d.ts.map +1 -0
- package/dist/completion/event-phases.js +572 -0
- package/dist/completion/event-phases.js.map +1 -0
- package/dist/completion/event.d.ts +1 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +36 -592
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +14 -12
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +6 -4
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +28 -26
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +16 -14
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +16 -14
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +32 -33
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/terminated-work-reconcile.js +11 -9
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +3 -1
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/config-reconcile.d.ts.map +1 -1
- package/dist/config-reconcile.js +3 -1
- package/dist/config-reconcile.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -37
- package/dist/config.js.map +1 -1
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +26 -24
- package/dist/control-state.js.map +1 -1
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +43 -41
- package/dist/crash-recovery.js.map +1 -1
- package/dist/daemon-logs.d.ts.map +1 -1
- package/dist/daemon-logs.js +21 -3
- package/dist/daemon-logs.js.map +1 -1
- package/dist/daemon-process.d.ts +0 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +15 -10
- package/dist/daemon-process.js.map +1 -1
- package/dist/delivery-advance-block.d.ts +4 -4
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +25 -18
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-guards.d.ts.map +1 -1
- package/dist/delivery-guards.js +11 -9
- package/dist/delivery-guards.js.map +1 -1
- package/dist/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery-lifecycle.js +23 -21
- package/dist/delivery-lifecycle.js.map +1 -1
- package/dist/delivery-merge.d.ts.map +1 -1
- package/dist/delivery-merge.js +10 -8
- package/dist/delivery-merge.js.map +1 -1
- package/dist/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery-reconciler-apply.js +5 -8
- package/dist/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +5 -6
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/directive/close-loop-stage.d.ts.map +1 -1
- package/dist/directive/close-loop-stage.js +9 -7
- package/dist/directive/close-loop-stage.js.map +1 -1
- package/dist/directive/directive-assembly.d.ts.map +1 -1
- package/dist/directive/directive-assembly.js +3 -1
- package/dist/directive/directive-assembly.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +16 -14
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +27 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +28 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +8 -6
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/directive-executor.d.ts +1 -1
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +12 -10
- package/dist/directive-executor.js.map +1 -1
- package/dist/discovery-poll.d.ts.map +1 -1
- package/dist/discovery-poll.js +8 -6
- package/dist/discovery-poll.js.map +1 -1
- package/dist/drain-teardown.d.ts.map +1 -1
- package/dist/drain-teardown.js +6 -19
- package/dist/drain-teardown.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +10 -8
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/escalation-provenance.d.ts.map +1 -1
- package/dist/escalation-provenance.js +8 -3
- package/dist/escalation-provenance.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +36 -34
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +1 -0
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +16 -14
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus-lifecycle.js +56 -44
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus-loop-registry.js +38 -36
- package/dist/focus-loop-registry.js.map +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +40 -34
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-provisioning.d.ts.map +1 -1
- package/dist/focus-provisioning.js +15 -13
- package/dist/focus-provisioning.js.map +1 -1
- package/dist/focus-respawn-guard.d.ts.map +1 -1
- package/dist/focus-respawn-guard.js +4 -2
- package/dist/focus-respawn-guard.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.js +10 -8
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.js +11 -9
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +7 -5
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +7 -5
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/focus-team-state.d.ts +18 -9
- package/dist/focus-team-state.d.ts.map +1 -1
- package/dist/focus-team-state.js +37 -18
- package/dist/focus-team-state.js.map +1 -1
- package/dist/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus-worktree-state.js +6 -4
- package/dist/focus-worktree-state.js.map +1 -1
- package/dist/git/branch.d.ts.map +1 -1
- package/dist/git/branch.js +7 -5
- package/dist/git/branch.js.map +1 -1
- package/dist/git/genesis.d.ts.map +1 -1
- package/dist/git/genesis.js +3 -1
- package/dist/git/genesis.js.map +1 -1
- package/dist/git/integration.d.ts.map +1 -1
- package/dist/git/integration.js +4 -2
- package/dist/git/integration.js.map +1 -1
- package/dist/git/merge-helpers.d.ts.map +1 -1
- package/dist/git/merge-helpers.js +6 -4
- package/dist/git/merge-helpers.js.map +1 -1
- package/dist/git/merge-lock.d.ts +0 -7
- package/dist/git/merge-lock.d.ts.map +1 -1
- package/dist/git/merge-lock.js +5 -3
- package/dist/git/merge-lock.js.map +1 -1
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +10 -8
- package/dist/git/merge.js.map +1 -1
- package/dist/git/state-detector.d.ts.map +1 -1
- package/dist/git/state-detector.js +9 -7
- package/dist/git/state-detector.js.map +1 -1
- package/dist/git/utils.d.ts.map +1 -1
- package/dist/git/utils.js +6 -4
- package/dist/git/utils.js.map +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +16 -14
- package/dist/git.js.map +1 -1
- package/dist/guard-evaluator.d.ts.map +1 -1
- package/dist/guard-evaluator.js +3 -1
- package/dist/guard-evaluator.js.map +1 -1
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +14 -11
- package/dist/heartbeat.js.map +1 -1
- package/dist/host-control/catalog.d.ts.map +1 -1
- package/dist/host-control/catalog.js +4 -2
- package/dist/host-control/catalog.js.map +1 -1
- package/dist/host-control/client.d.ts.map +1 -1
- package/dist/host-control/client.js +3 -1
- package/dist/host-control/client.js.map +1 -1
- package/dist/host-control/sizing.d.ts.map +1 -1
- package/dist/host-control/sizing.js +4 -1
- package/dist/host-control/sizing.js.map +1 -1
- package/dist/index.js +110 -127
- package/dist/index.js.map +1 -1
- package/dist/install-probe-tick.d.ts.map +1 -1
- package/dist/install-probe-tick.js +6 -4
- package/dist/install-probe-tick.js.map +1 -1
- package/dist/intake-control.d.ts +0 -16
- package/dist/intake-control.d.ts.map +1 -1
- package/dist/intake-control.js +4 -2
- package/dist/intake-control.js.map +1 -1
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +26 -24
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +59 -39
- package/dist/listener.js.map +1 -1
- package/dist/log.d.ts +84 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +182 -0
- package/dist/log.js.map +1 -0
- package/dist/loops/context-audit-pass.d.ts.map +1 -1
- package/dist/loops/context-audit-pass.js +8 -5
- package/dist/loops/context-audit-pass.js.map +1 -1
- package/dist/loops/engine.d.ts.map +1 -1
- package/dist/loops/engine.js +26 -24
- package/dist/loops/engine.js.map +1 -1
- package/dist/loops/llm-client.d.ts.map +1 -1
- package/dist/loops/llm-client.js +4 -2
- package/dist/loops/llm-client.js.map +1 -1
- package/dist/loops/llm-flag.d.ts +4 -28
- package/dist/loops/llm-flag.d.ts.map +1 -1
- package/dist/loops/llm-flag.js +11 -30
- package/dist/loops/llm-flag.js.map +1 -1
- package/dist/loops/prompt-builder.d.ts.map +1 -1
- package/dist/loops/prompt-builder.js +3 -1
- package/dist/loops/prompt-builder.js.map +1 -1
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +20 -18
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.d.ts.map +1 -1
- package/dist/merge-detector.js +7 -5
- package/dist/merge-detector.js.map +1 -1
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -1
- package/dist/nexus/endpoint-clearance.js +3 -1
- package/dist/nexus/endpoint-clearance.js.map +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -1
- package/dist/nexus/escalation-bridge.js +3 -1
- package/dist/nexus/escalation-bridge.js.map +1 -1
- package/dist/nexus/incoming.d.ts.map +1 -1
- package/dist/nexus/incoming.js +3 -1
- package/dist/nexus/incoming.js.map +1 -1
- package/dist/nexus/intake-spawn.d.ts.map +1 -1
- package/dist/nexus/intake-spawn.js +6 -4
- package/dist/nexus/intake-spawn.js.map +1 -1
- package/dist/nexus/intake.d.ts.map +1 -1
- package/dist/nexus/intake.js +3 -1
- package/dist/nexus/intake.js.map +1 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +3 -1
- package/dist/nexus/return.js.map +1 -1
- package/dist/non-interactive-init.d.ts.map +1 -1
- package/dist/non-interactive-init.js +0 -0
- package/dist/non-interactive-init.js.map +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -1
- package/dist/otlp/port-manager.js +7 -5
- package/dist/otlp/port-manager.js.map +1 -1
- package/dist/otlp/receiver.d.ts.map +1 -1
- package/dist/otlp/receiver.js +14 -12
- package/dist/otlp/receiver.js.map +1 -1
- package/dist/output-monitor.d.ts.map +1 -1
- package/dist/output-monitor.js +6 -4
- package/dist/output-monitor.js.map +1 -1
- package/dist/prd/controller.d.ts.map +1 -1
- package/dist/prd/controller.js +7 -5
- package/dist/prd/controller.js.map +1 -1
- package/dist/prd/focus-pushdown.d.ts.map +1 -1
- package/dist/prd/focus-pushdown.js +3 -1
- package/dist/prd/focus-pushdown.js.map +1 -1
- package/dist/product-scaffold.d.ts.map +1 -1
- package/dist/product-scaffold.js +8 -6
- package/dist/product-scaffold.js.map +1 -1
- package/dist/queries/context-assembly.d.ts.map +1 -1
- package/dist/queries/context-assembly.js +3 -1
- package/dist/queries/context-assembly.js.map +1 -1
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +7 -5
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +3 -1
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/guards.d.ts.map +1 -1
- package/dist/queries/guards.js +3 -1
- package/dist/queries/guards.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +3 -1
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/system-session.d.ts.map +1 -1
- package/dist/queries/system-session.js +5 -3
- package/dist/queries/system-session.js.map +1 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +6 -4
- package/dist/queries/verification.js.map +1 -1
- package/dist/reality-pole-capture.d.ts.map +1 -1
- package/dist/reality-pole-capture.js +7 -4
- package/dist/reality-pole-capture.js.map +1 -1
- package/dist/reality-pole.d.ts.map +1 -1
- package/dist/reality-pole.js +4 -2
- package/dist/reality-pole.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +3 -1
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
- package/dist/resolvers/agent-session-summaries.js +3 -1
- package/dist/resolvers/agent-session-summaries.js.map +1 -1
- package/dist/resolvers/deployment-profile.d.ts.map +1 -1
- package/dist/resolvers/deployment-profile.js +3 -1
- package/dist/resolvers/deployment-profile.js.map +1 -1
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +4 -2
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +3 -1
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-injections.js +3 -1
- package/dist/resolvers/focus-injections.js.map +1 -1
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
- package/dist/resolvers/focus-last-review-report.js +3 -1
- package/dist/resolvers/focus-last-review-report.js.map +1 -1
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
- package/dist/resolvers/focus-reality-tree.js +3 -1
- package/dist/resolvers/focus-reality-tree.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +3 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
- package/dist/resolvers/guards-evaluation-results.js +3 -1
- package/dist/resolvers/guards-evaluation-results.js.map +1 -1
- package/dist/resolvers/loop-context.d.ts.map +1 -1
- package/dist/resolvers/loop-context.js +6 -2
- package/dist/resolvers/loop-context.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +3 -1
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/loop-documents.d.ts.map +1 -1
- package/dist/resolvers/loop-documents.js +3 -1
- package/dist/resolvers/loop-documents.js.map +1 -1
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
- package/dist/resolvers/loop-expected-effects.js +3 -1
- package/dist/resolvers/loop-expected-effects.js.map +1 -1
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
- package/dist/resolvers/loop-frt-statement.js +3 -1
- package/dist/resolvers/loop-frt-statement.js.map +1 -1
- package/dist/resolvers/loop-injection.d.ts.map +1 -1
- package/dist/resolvers/loop-injection.js +3 -1
- package/dist/resolvers/loop-injection.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +3 -1
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/loop-questions.d.ts.map +1 -1
- package/dist/resolvers/loop-questions.js +3 -1
- package/dist/resolvers/loop-questions.js.map +1 -1
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
- package/dist/resolvers/loop-upstream-udes.js +3 -1
- package/dist/resolvers/loop-upstream-udes.js.map +1 -1
- package/dist/resolvers/prd-context.d.ts.map +1 -1
- package/dist/resolvers/prd-context.js +3 -1
- package/dist/resolvers/prd-context.js.map +1 -1
- package/dist/resolvers/reality-metrics.d.ts.map +1 -1
- package/dist/resolvers/reality-metrics.js +3 -1
- package/dist/resolvers/reality-metrics.js.map +1 -1
- package/dist/resolvers/reality-projections.d.ts.map +1 -1
- package/dist/resolvers/reality-projections.js +3 -1
- package/dist/resolvers/reality-projections.js.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.js +3 -1
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
- package/dist/resolvers/retired-injections.d.ts.map +1 -1
- package/dist/resolvers/retired-injections.js +3 -1
- package/dist/resolvers/retired-injections.js.map +1 -1
- package/dist/resolvers/review-outcomes.d.ts.map +1 -1
- package/dist/resolvers/review-outcomes.js +3 -1
- package/dist/resolvers/review-outcomes.js.map +1 -1
- package/dist/resolvers/security-advisory.d.ts.map +1 -1
- package/dist/resolvers/security-advisory.js +3 -1
- package/dist/resolvers/security-advisory.js.map +1 -1
- package/dist/resolvers/shared/wiki.d.ts.map +1 -1
- package/dist/resolvers/shared/wiki.js +5 -3
- package/dist/resolvers/shared/wiki.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +3 -1
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/resolvers/workflow-stages.d.ts.map +1 -1
- package/dist/resolvers/workflow-stages.js +3 -1
- package/dist/resolvers/workflow-stages.js.map +1 -1
- package/dist/schema-version-gate.d.ts.map +1 -1
- package/dist/schema-version-gate.js +16 -18
- package/dist/schema-version-gate.js.map +1 -1
- package/dist/security-finding-gate.d.ts.map +1 -1
- package/dist/security-finding-gate.js +3 -1
- package/dist/security-finding-gate.js.map +1 -1
- package/dist/security-rescan-resolution.d.ts.map +1 -1
- package/dist/security-rescan-resolution.js +4 -2
- package/dist/security-rescan-resolution.js.map +1 -1
- package/dist/security-scan-engine.d.ts.map +1 -1
- package/dist/security-scan-engine.js +9 -6
- package/dist/security-scan-engine.js.map +1 -1
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +48 -39
- package/dist/self-update.js.map +1 -1
- package/dist/sensor-sweep.d.ts.map +1 -1
- package/dist/sensor-sweep.js +5 -2
- package/dist/sensor-sweep.js.map +1 -1
- package/dist/session-stamp.d.ts.map +1 -1
- package/dist/session-stamp.js +4 -2
- package/dist/session-stamp.js.map +1 -1
- package/dist/spawn/model-routing.d.ts.map +1 -1
- package/dist/spawn/model-routing.js +19 -16
- package/dist/spawn/model-routing.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +29 -22
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +6 -4
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +16 -14
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +13 -11
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/spawn-cooldown.d.ts +0 -7
- package/dist/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn-cooldown.js +3 -1
- package/dist/spawn-cooldown.js.map +1 -1
- package/dist/spawn-environment.d.ts.map +1 -1
- package/dist/spawn-environment.js +4 -1
- package/dist/spawn-environment.js.map +1 -1
- package/dist/spawner/helpers.d.ts.map +1 -1
- package/dist/spawner/helpers.js +19 -17
- package/dist/spawner/helpers.js.map +1 -1
- package/dist/spawner/lifecycle.d.ts.map +1 -1
- package/dist/spawner/lifecycle.js +17 -13
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/liveness.d.ts.map +1 -1
- package/dist/spawner/liveness.js +7 -5
- package/dist/spawner/liveness.js.map +1 -1
- package/dist/spawner/resolution.d.ts.map +1 -1
- package/dist/spawner/resolution.js +7 -5
- package/dist/spawner/resolution.js.map +1 -1
- package/dist/spawner/stream-handlers.d.ts +6 -55
- package/dist/spawner/stream-handlers.d.ts.map +1 -1
- package/dist/spawner/stream-handlers.js +10 -172
- package/dist/spawner/stream-handlers.js.map +1 -1
- package/dist/spawner/timeout.d.ts.map +1 -1
- package/dist/spawner/timeout.js +11 -9
- package/dist/spawner/timeout.js.map +1 -1
- package/dist/staleness.d.ts.map +1 -1
- package/dist/staleness.js +4 -1
- package/dist/staleness.js.map +1 -1
- package/dist/stall-detector-config.d.ts +6 -17
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +10 -36
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/stall-detectors.d.ts.map +1 -1
- package/dist/stall-detectors.js +6 -4
- package/dist/stall-detectors.js.map +1 -1
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +9 -7
- package/dist/state-cascade.js.map +1 -1
- package/dist/stop-request.d.ts.map +1 -1
- package/dist/stop-request.js +6 -2
- package/dist/stop-request.js.map +1 -1
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +3 -1
- package/dist/supabase.js.map +1 -1
- package/dist/telemetry-writer.d.ts.map +1 -1
- package/dist/telemetry-writer.js +11 -9
- package/dist/telemetry-writer.js.map +1 -1
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +28 -26
- package/dist/trigger-executor.js.map +1 -1
- package/dist/unified-engine-lifecycle.d.ts +19 -11
- package/dist/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +71 -70
- package/dist/unified-engine-lifecycle.js.map +1 -1
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +41 -36
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell-config.d.ts +8 -1
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +57 -34
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.d.ts.map +1 -1
- package/dist/unified-shell-status.js +39 -37
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +37 -41
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-baseline.d.ts.map +1 -1
- package/dist/verification-baseline.js +7 -4
- package/dist/verification-baseline.js.map +1 -1
- package/dist/verification-config.d.ts +3 -3
- package/dist/verification-config.d.ts.map +1 -1
- package/dist/verification-config.js +8 -19
- package/dist/verification-config.js.map +1 -1
- package/dist/verification-default-on.d.ts +6 -6
- package/dist/verification-default-on.d.ts.map +1 -1
- package/dist/verification-default-on.js +9 -7
- package/dist/verification-default-on.js.map +1 -1
- package/dist/verification-deterministic.d.ts.map +1 -1
- package/dist/verification-deterministic.js +6 -3
- package/dist/verification-deterministic.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +20 -16
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-feedback.d.ts.map +1 -1
- package/dist/verification-feedback.js +4 -2
- package/dist/verification-feedback.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +5 -3
- package/dist/version-check.js.map +1 -1
- package/dist/worker-pidfile.d.ts.map +1 -1
- package/dist/worker-pidfile.js +8 -3
- package/dist/worker-pidfile.js.map +1 -1
- package/dist/worktree/focus.d.ts.map +1 -1
- package/dist/worktree/focus.js +15 -13
- package/dist/worktree/focus.js.map +1 -1
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +13 -11
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +41 -39
- package/dist/worktree.js.map +1 -1
- package/package.json +3 -3
package/dist/worktree/focus.js
CHANGED
|
@@ -16,6 +16,8 @@ import { getActiveFocuses } from '../queries/deliveries.js';
|
|
|
16
16
|
import { removeFocusWorktree as removeFocusWorktreeState } from '../focus-worktree-state.js';
|
|
17
17
|
import { sanitizeGitSegment } from '../git/index.js';
|
|
18
18
|
import { branchHasUnmergedCommits, removeWorktree } from './safety.js';
|
|
19
|
+
import { createLogger } from '../log.js';
|
|
20
|
+
const log = createLogger({ module: 'worktree' });
|
|
19
21
|
// ── Canonical worktree removal ────────────────────────────────────
|
|
20
22
|
/**
|
|
21
23
|
* Canonical focus worktree removal: merge-before-remove + conditional cleanup.
|
|
@@ -38,7 +40,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
38
40
|
let mergeError;
|
|
39
41
|
try {
|
|
40
42
|
if (branchHasUnmergedCommits(branchName, integrationBranch, repoPath)) {
|
|
41
|
-
|
|
43
|
+
log.info(`Attempting merge for ${branchName} before removal`);
|
|
42
44
|
const mergeResult = await mergeToIntegration({
|
|
43
45
|
config,
|
|
44
46
|
branchName,
|
|
@@ -48,11 +50,11 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
48
50
|
mergeSucceeded = mergeResult.success;
|
|
49
51
|
merged = true;
|
|
50
52
|
if (mergeResult.success) {
|
|
51
|
-
|
|
53
|
+
log.info(`Merge succeeded for ${branchName}`);
|
|
52
54
|
}
|
|
53
55
|
else {
|
|
54
56
|
mergeError = mergeResult.error ?? 'unknown';
|
|
55
|
-
|
|
57
|
+
log.warn(`[worktree] Merge failed for ${branchName}: ${mergeError}. ` +
|
|
56
58
|
`Safety guards will preserve the branch.`);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
@@ -62,7 +64,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
62
64
|
}
|
|
63
65
|
catch (err) {
|
|
64
66
|
mergeError = err.message;
|
|
65
|
-
|
|
67
|
+
log.warn(`Merge attempt failed for ${branchName}: ${mergeError}`);
|
|
66
68
|
}
|
|
67
69
|
// 2. Remove worktree (safety guards handle uncommitted changes and unmerged commits)
|
|
68
70
|
let removed = false;
|
|
@@ -75,7 +77,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
75
77
|
});
|
|
76
78
|
}
|
|
77
79
|
catch (err) {
|
|
78
|
-
|
|
80
|
+
log.warn(`Failed to remove worktree ${worktreePath}: ${err.message}`);
|
|
79
81
|
}
|
|
80
82
|
// 3. Conditionally clear in-memory state
|
|
81
83
|
if (focusId) {
|
|
@@ -83,7 +85,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
83
85
|
removeFocusWorktreeState(focusId);
|
|
84
86
|
}
|
|
85
87
|
else {
|
|
86
|
-
|
|
88
|
+
log.info(`[worktree] Worktree preserved for focus ${focusId} -- keeping in-memory state`);
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
return { removed, merged, mergeError };
|
|
@@ -180,13 +182,13 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
180
182
|
return statSync(join(worktreeDir, entry)).isDirectory();
|
|
181
183
|
}
|
|
182
184
|
catch (e) {
|
|
183
|
-
|
|
185
|
+
log.debug(`Failed to stat ${entry} (may have been deleted):`, e.message);
|
|
184
186
|
return false;
|
|
185
187
|
}
|
|
186
188
|
});
|
|
187
189
|
}
|
|
188
190
|
catch (err) {
|
|
189
|
-
|
|
191
|
+
log.warn(`[worktree] Failed to scan worktree directory: ${err instanceof Error ? err.message : String(err)}`);
|
|
190
192
|
return { cleaned, preserved };
|
|
191
193
|
}
|
|
192
194
|
if (entries.length === 0) {
|
|
@@ -199,15 +201,15 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
199
201
|
orphanDirs = identifyOrphanWorktrees(entries, activeFocusesList);
|
|
200
202
|
}
|
|
201
203
|
catch (err) {
|
|
202
|
-
|
|
204
|
+
log.warn(`[worktree] Failed to query active focuses for orphan detection: ` +
|
|
203
205
|
`${err instanceof Error ? err.message : String(err)}. Skipping orphan cleanup.`);
|
|
204
206
|
return { cleaned, preserved };
|
|
205
207
|
}
|
|
206
208
|
if (orphanDirs.length === 0) {
|
|
207
|
-
|
|
209
|
+
log.info('No orphan focus worktrees found');
|
|
208
210
|
return { cleaned, preserved };
|
|
209
211
|
}
|
|
210
|
-
|
|
212
|
+
log.info(`Found ${orphanDirs.length} orphan focus worktree(s)`);
|
|
211
213
|
// 4. Parse git worktree list to get branch names for each path
|
|
212
214
|
const worktreeListResult = runGitSync(['worktree', 'list', '--porcelain'], repoPath);
|
|
213
215
|
const pathToBranch = worktreeListResult.success
|
|
@@ -218,7 +220,7 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
218
220
|
const worktreePath = resolve(join(worktreeDir, dir));
|
|
219
221
|
const branchName = pathToBranch.get(worktreePath) ?? dir.replace(/-/g, '/');
|
|
220
222
|
const deliveryName = branchName.split('/').slice(2).join('/') || dir;
|
|
221
|
-
|
|
223
|
+
log.info(`Cleaning up orphan focus worktree: ${worktreePath} [${branchName}]`);
|
|
222
224
|
const result = await safeRemoveFocusWorktree({
|
|
223
225
|
config,
|
|
224
226
|
worktreePath,
|
|
@@ -233,7 +235,7 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
233
235
|
preserved++;
|
|
234
236
|
}
|
|
235
237
|
}
|
|
236
|
-
|
|
238
|
+
log.info(`[worktree] Orphan focus worktree cleanup: ${cleaned} cleaned, ${preserved} preserved`);
|
|
237
239
|
return { cleaned, preserved };
|
|
238
240
|
}
|
|
239
241
|
//# sourceMappingURL=focus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../src/worktree/focus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../src/worktree/focus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAI3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9F;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAMzD,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qCAAqC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAWnF;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,GACL,OAAO,CAgDT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzF"}
|
package/dist/worktree/safety.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import { existsSync } from 'node:fs';
|
|
8
8
|
import { runGitSync } from '../git/index.js';
|
|
9
9
|
import { commitWip, removeWorktreeBase, } from '@telora/daemon-core';
|
|
10
|
+
import { createLogger } from '../log.js';
|
|
11
|
+
const log = createLogger({ module: 'worktree' });
|
|
10
12
|
/**
|
|
11
13
|
* Check if a worktree has uncommitted changes (dirty working tree).
|
|
12
14
|
*/
|
|
@@ -31,13 +33,13 @@ export function safetyCommitWorktree(worktreePath, deliveryName) {
|
|
|
31
33
|
// Stage everything
|
|
32
34
|
const addResult = runGitSync(['add', '-A'], worktreePath);
|
|
33
35
|
if (!addResult.success) {
|
|
34
|
-
|
|
36
|
+
log.error(`Safety commit: failed to stage changes: ${addResult.error}`);
|
|
35
37
|
return null;
|
|
36
38
|
}
|
|
37
39
|
// Commit
|
|
38
40
|
const commitResult = runGitSync(['commit', '-m', `wip: uncommitted agent work for "${deliveryName}" (safety commit)`], worktreePath);
|
|
39
41
|
if (!commitResult.success) {
|
|
40
|
-
|
|
42
|
+
log.warn(`Safety commit: commit failed (may be empty): ${commitResult.error}`);
|
|
41
43
|
return null;
|
|
42
44
|
}
|
|
43
45
|
// Return the new commit hash
|
|
@@ -102,12 +104,12 @@ export function dirtyChangesAreGeneratedLockfilesOnly(worktreePath) {
|
|
|
102
104
|
export function commitGeneratedLockfiles(worktreePath) {
|
|
103
105
|
const addResult = runGitSync(['add', '-A'], worktreePath);
|
|
104
106
|
if (!addResult.success) {
|
|
105
|
-
|
|
107
|
+
log.error(`lockfile auto-commit: failed to stage changes: ${addResult.error}`);
|
|
106
108
|
return null;
|
|
107
109
|
}
|
|
108
110
|
const commitResult = runGitSync(['commit', '-m', 'chore: auto-commit generated lockfile churn (daemon remediation)'], worktreePath);
|
|
109
111
|
if (!commitResult.success) {
|
|
110
|
-
|
|
112
|
+
log.warn(`lockfile auto-commit: commit failed (may be empty): ${commitResult.error}`);
|
|
111
113
|
return null;
|
|
112
114
|
}
|
|
113
115
|
const hashResult = runGitSync(['rev-parse', 'HEAD'], worktreePath);
|
|
@@ -127,21 +129,21 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
127
129
|
const { branchName, integrationBranch, deliveryName, mergeSucceeded } = options;
|
|
128
130
|
try {
|
|
129
131
|
if (!existsSync(worktreePath)) {
|
|
130
|
-
|
|
132
|
+
log.info(`Worktree already removed: ${worktreePath}`);
|
|
131
133
|
runGitSync(['worktree', 'prune'], repoPath);
|
|
132
134
|
return true;
|
|
133
135
|
}
|
|
134
136
|
// Guard 1: Check for uncommitted changes and safety-commit them
|
|
135
137
|
if (worktreeHasUncommittedChanges(worktreePath)) {
|
|
136
|
-
|
|
138
|
+
log.warn(`Worktree has uncommitted changes: ${worktreePath}. ` +
|
|
137
139
|
`Creating safety commit to preserve work...`);
|
|
138
140
|
const hash = safetyCommitWorktree(worktreePath, deliveryName ?? 'unknown');
|
|
139
141
|
if (hash) {
|
|
140
|
-
|
|
142
|
+
log.info(`Safety commit created: ${hash.slice(0, 8)}`);
|
|
141
143
|
}
|
|
142
144
|
else {
|
|
143
145
|
// Could not commit -- refuse to delete
|
|
144
|
-
|
|
146
|
+
log.error(`REFUSING to remove worktree ${worktreePath}: ` +
|
|
145
147
|
`has uncommitted changes and safety commit failed. ` +
|
|
146
148
|
`Manual cleanup required.`);
|
|
147
149
|
return false;
|
|
@@ -150,7 +152,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
150
152
|
// Guard 2: Check for unmerged commits (if we know the branch and integration)
|
|
151
153
|
if (branchName && integrationBranch && !mergeSucceeded) {
|
|
152
154
|
if (branchHasUnmergedCommits(branchName, integrationBranch, repoPath)) {
|
|
153
|
-
|
|
155
|
+
log.error(`REFUSING to remove worktree ${worktreePath}: ` +
|
|
154
156
|
`branch ${branchName} has commits not merged to ${integrationBranch}. ` +
|
|
155
157
|
`Branch preserved for manual merge/review.`);
|
|
156
158
|
return false;
|
|
@@ -160,7 +162,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
160
162
|
return removeWorktreeBase(repoPath, worktreePath);
|
|
161
163
|
}
|
|
162
164
|
catch (err) {
|
|
163
|
-
|
|
165
|
+
log.error('Error removing worktree:', err instanceof Error ? err.message : String(err));
|
|
164
166
|
return false;
|
|
165
167
|
}
|
|
166
168
|
}
|
|
@@ -176,7 +178,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
176
178
|
* @returns The commit hash if a WIP commit was created, null if no changes or failure.
|
|
177
179
|
*/
|
|
178
180
|
export function commitWipChanges(worktreePath, contextName) {
|
|
179
|
-
|
|
181
|
+
log.info(`Committing WIP changes in ${worktreePath} for "${contextName}"`);
|
|
180
182
|
return commitWip(worktreePath, `Uncommitted work captured by daemon on agent exit (${contextName})`);
|
|
181
183
|
}
|
|
182
184
|
//# sourceMappingURL=safety.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,SAAS,EACT,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"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"}
|
package/dist/worktree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
|
package/dist/worktree.js
CHANGED
|
@@ -18,6 +18,8 @@ import { getActiveFocuses } from './queries/deliveries.js';
|
|
|
18
18
|
import { removeFocusWorktree as removeFocusWorktreeState } from './focus-worktree-state.js';
|
|
19
19
|
import { sanitizeGitSegment } from './git/index.js';
|
|
20
20
|
import { resolveMcpServerPath, writeMcpConfigFile } from './mcp-resolution.js';
|
|
21
|
+
import { createLogger } from './log.js';
|
|
22
|
+
const log = createLogger({ module: 'worktree' });
|
|
21
23
|
// ── Merge worktree ────────────────────────────────────────────────
|
|
22
24
|
// Re-export getMergeWorktreePath from git-types (canonical location)
|
|
23
25
|
// to preserve backward-compatible import surface.
|
|
@@ -42,11 +44,11 @@ export function ensureMergeWorktree(config) {
|
|
|
42
44
|
// Validate it's a functioning worktree (has a .git file or directory)
|
|
43
45
|
const gitMarker = join(wtPath, '.git');
|
|
44
46
|
if (existsSync(gitMarker)) {
|
|
45
|
-
|
|
47
|
+
log.info(`[merge-worktree] Using existing merge worktree: ${wtPath}`);
|
|
46
48
|
return wtPath;
|
|
47
49
|
}
|
|
48
50
|
// Directory exists but isn't a valid worktree -- prune and recreate
|
|
49
|
-
|
|
51
|
+
log.info(`[merge-worktree] Stale merge worktree detected, recreating...`);
|
|
50
52
|
rmSync(wtPath, { recursive: true, force: true });
|
|
51
53
|
runGitSync(['worktree', 'prune'], config.repoPath);
|
|
52
54
|
}
|
|
@@ -59,7 +61,7 @@ export function ensureMergeWorktree(config) {
|
|
|
59
61
|
if (!result.success) {
|
|
60
62
|
throw new Error(`Failed to create merge worktree: ${result.error}`);
|
|
61
63
|
}
|
|
62
|
-
|
|
64
|
+
log.info(`[merge-worktree] Created merge worktree: ${wtPath}`);
|
|
63
65
|
return wtPath;
|
|
64
66
|
}
|
|
65
67
|
/**
|
|
@@ -68,7 +70,7 @@ export function ensureMergeWorktree(config) {
|
|
|
68
70
|
export function ensureWorktreeDir(config) {
|
|
69
71
|
if (!existsSync(config.worktreeDir)) {
|
|
70
72
|
mkdirSync(config.worktreeDir, { recursive: true });
|
|
71
|
-
|
|
73
|
+
log.info(`Created worktree directory: ${config.worktreeDir}`);
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
@@ -104,10 +106,10 @@ export function generateMcpConfigInWorktree(worktreePath) {
|
|
|
104
106
|
mcpServerPath,
|
|
105
107
|
profile: 'execution',
|
|
106
108
|
});
|
|
107
|
-
|
|
109
|
+
log.info(`Generated .mcp.json in ${worktreePath}`);
|
|
108
110
|
}
|
|
109
111
|
catch (err) {
|
|
110
|
-
|
|
112
|
+
log.warn(`Failed to generate .mcp.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
115
|
const CODEX_WORKTREE_EXCLUDE_ENTRY = '.codex/';
|
|
@@ -121,7 +123,7 @@ const CODEX_WORKTREE_EXCLUDE_ENTRY = '.codex/';
|
|
|
121
123
|
export function ensureCodexConfigIgnoredInWorktree(worktreePath) {
|
|
122
124
|
const gitPath = runGitSync(['rev-parse', '--git-path', 'info/exclude'], worktreePath);
|
|
123
125
|
if (!gitPath.success || !gitPath.output.trim()) {
|
|
124
|
-
|
|
126
|
+
log.warn(`Failed to resolve git exclude for ${worktreePath}: ${gitPath.error}`);
|
|
125
127
|
return;
|
|
126
128
|
}
|
|
127
129
|
const excludePath = resolve(worktreePath, gitPath.output.trim());
|
|
@@ -137,10 +139,10 @@ export function ensureCodexConfigIgnoredInWorktree(worktreePath) {
|
|
|
137
139
|
}
|
|
138
140
|
const prefix = existing.length > 0 && !existing.endsWith('\n') ? '\n' : '';
|
|
139
141
|
writeFileSync(excludePath, `${existing}${prefix}${CODEX_WORKTREE_EXCLUDE_ENTRY}\n`);
|
|
140
|
-
|
|
142
|
+
log.info(`Added ${CODEX_WORKTREE_EXCLUDE_ENTRY} to git exclude in ${worktreePath}`);
|
|
141
143
|
}
|
|
142
144
|
catch (err) {
|
|
143
|
-
|
|
145
|
+
log.warn(`Failed to update git exclude for ${worktreePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
/**
|
|
@@ -184,10 +186,10 @@ export function generateCodexConfigInWorktree(worktreePath) {
|
|
|
184
186
|
mkdirSync(codexDir, { recursive: true, mode: 0o700 });
|
|
185
187
|
const configPath = join(codexDir, 'config.toml');
|
|
186
188
|
writeFileSync(configPath, renderCodexWorktreeConfigToml(), { mode: 0o600 });
|
|
187
|
-
|
|
189
|
+
log.info(`Generated .codex/config.toml in ${worktreePath}`);
|
|
188
190
|
}
|
|
189
191
|
catch (err) {
|
|
190
|
-
|
|
192
|
+
log.warn(`Failed to generate .codex/config.toml: ${err instanceof Error ? err.message : String(err)}`);
|
|
191
193
|
}
|
|
192
194
|
}
|
|
193
195
|
/**
|
|
@@ -200,37 +202,37 @@ export async function createWorktree(config, branchName) {
|
|
|
200
202
|
const worktreePath = join(config.worktreeDir, branchName.replace(/\//g, '-'));
|
|
201
203
|
// If worktree directory exists, remove it first
|
|
202
204
|
if (existsSync(worktreePath)) {
|
|
203
|
-
|
|
205
|
+
log.info(`Removing existing worktree directory: ${worktreePath}`);
|
|
204
206
|
rmSync(worktreePath, { recursive: true, force: true });
|
|
205
207
|
}
|
|
206
208
|
// Prune any stale worktree entries (handles "missing but registered" state)
|
|
207
209
|
runGitSync(['worktree', 'prune'], config.repoPath);
|
|
208
210
|
// Check if there's still a worktree entry for this branch after pruning
|
|
209
211
|
if (worktreeExistsForBranch(branchName, config.repoPath)) {
|
|
210
|
-
|
|
212
|
+
log.info(`Removing existing worktree for branch: ${branchName}`);
|
|
211
213
|
runGitSync(['worktree', 'remove', '--force', branchName], config.repoPath);
|
|
212
214
|
}
|
|
213
215
|
// Determine if branch already exists
|
|
214
216
|
const branchAlreadyExists = branchExists(branchName, config.repoPath);
|
|
215
217
|
if (branchAlreadyExists) {
|
|
216
218
|
// Use existing branch
|
|
217
|
-
|
|
219
|
+
log.info(`Creating worktree using existing branch: ${branchName}`);
|
|
218
220
|
const result = runGitSync(['worktree', 'add', worktreePath, branchName], config.repoPath);
|
|
219
221
|
if (!result.success) {
|
|
220
222
|
throw new Error(`Failed to create worktree: ${result.error}`);
|
|
221
223
|
}
|
|
222
224
|
// Rebase onto integration branch to get latest changes
|
|
223
|
-
|
|
225
|
+
log.info(`Rebasing ${branchName} onto ${config.integrationBranch}...`);
|
|
224
226
|
const rebaseResult = runGitSync(['rebase', config.integrationBranch], worktreePath);
|
|
225
227
|
if (!rebaseResult.success) {
|
|
226
228
|
// If rebase fails, abort and warn
|
|
227
229
|
runGitSync(['rebase', '--abort'], worktreePath);
|
|
228
|
-
|
|
230
|
+
log.warn(`Warning: Could not rebase onto integration branch. Continuing with existing branch state.`);
|
|
229
231
|
}
|
|
230
232
|
}
|
|
231
233
|
else {
|
|
232
234
|
// Create new branch from integration
|
|
233
|
-
|
|
235
|
+
log.info(`Creating worktree with new branch ${branchName} from ${config.integrationBranch}`);
|
|
234
236
|
const result = runGitSync(['worktree', 'add', '-b', branchName, worktreePath, config.integrationBranch], config.repoPath);
|
|
235
237
|
if (!result.success) {
|
|
236
238
|
throw new Error(`Failed to create worktree: ${result.error}`);
|
|
@@ -265,13 +267,13 @@ export function safetyCommitWorktree(worktreePath, deliveryName) {
|
|
|
265
267
|
// Stage everything
|
|
266
268
|
const addResult = runGitSync(['add', '-A'], worktreePath);
|
|
267
269
|
if (!addResult.success) {
|
|
268
|
-
|
|
270
|
+
log.error(`Safety commit: failed to stage changes: ${addResult.error}`);
|
|
269
271
|
return null;
|
|
270
272
|
}
|
|
271
273
|
// Commit
|
|
272
274
|
const commitResult = runGitSync(['commit', '-m', `wip: uncommitted agent work for "${deliveryName}" (safety commit)`], worktreePath);
|
|
273
275
|
if (!commitResult.success) {
|
|
274
|
-
|
|
276
|
+
log.warn(`Safety commit: commit failed (may be empty): ${commitResult.error}`);
|
|
275
277
|
return null;
|
|
276
278
|
}
|
|
277
279
|
// Return the new commit hash
|
|
@@ -292,21 +294,21 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
292
294
|
const { branchName, integrationBranch, deliveryName, mergeSucceeded } = options;
|
|
293
295
|
try {
|
|
294
296
|
if (!existsSync(worktreePath)) {
|
|
295
|
-
|
|
297
|
+
log.info(`Worktree already removed: ${worktreePath}`);
|
|
296
298
|
runGitSync(['worktree', 'prune'], repoPath);
|
|
297
299
|
return true;
|
|
298
300
|
}
|
|
299
301
|
// Guard 1: Check for uncommitted changes and safety-commit them
|
|
300
302
|
if (worktreeHasUncommittedChanges(worktreePath)) {
|
|
301
|
-
|
|
303
|
+
log.warn(`Worktree has uncommitted changes: ${worktreePath}. ` +
|
|
302
304
|
`Creating safety commit to preserve work...`);
|
|
303
305
|
const hash = safetyCommitWorktree(worktreePath, deliveryName ?? 'unknown');
|
|
304
306
|
if (hash) {
|
|
305
|
-
|
|
307
|
+
log.info(`Safety commit created: ${hash.slice(0, 8)}`);
|
|
306
308
|
}
|
|
307
309
|
else {
|
|
308
310
|
// Could not commit -- refuse to delete
|
|
309
|
-
|
|
311
|
+
log.error(`REFUSING to remove worktree ${worktreePath}: ` +
|
|
310
312
|
`has uncommitted changes and safety commit failed. ` +
|
|
311
313
|
`Manual cleanup required.`);
|
|
312
314
|
return false;
|
|
@@ -315,7 +317,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
315
317
|
// Guard 2: Check for unmerged commits (if we know the branch and integration)
|
|
316
318
|
if (branchName && integrationBranch && !mergeSucceeded) {
|
|
317
319
|
if (branchHasUnmergedCommits(branchName, integrationBranch, repoPath)) {
|
|
318
|
-
|
|
320
|
+
log.error(`REFUSING to remove worktree ${worktreePath}: ` +
|
|
319
321
|
`branch ${branchName} has commits not merged to ${integrationBranch}. ` +
|
|
320
322
|
`Branch preserved for manual merge/review.`);
|
|
321
323
|
return false;
|
|
@@ -325,7 +327,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
325
327
|
return removeWorktreeBase(repoPath, worktreePath);
|
|
326
328
|
}
|
|
327
329
|
catch (err) {
|
|
328
|
-
|
|
330
|
+
log.error('Error removing worktree:', err instanceof Error ? err.message : String(err));
|
|
329
331
|
return false;
|
|
330
332
|
}
|
|
331
333
|
}
|
|
@@ -342,7 +344,7 @@ export function removeWorktree(repoPath, worktreePath, options = {}) {
|
|
|
342
344
|
* @returns The commit hash if a WIP commit was created, null if no changes or failure.
|
|
343
345
|
*/
|
|
344
346
|
export function commitWipChanges(worktreePath, contextName) {
|
|
345
|
-
|
|
347
|
+
log.info(`Committing WIP changes in ${worktreePath} for "${contextName}"`);
|
|
346
348
|
return commitWip(worktreePath, `Uncommitted work captured by daemon on agent exit (${contextName})`);
|
|
347
349
|
}
|
|
348
350
|
// ── Canonical worktree removal ────────────────────────────────────
|
|
@@ -367,7 +369,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
367
369
|
let mergeError;
|
|
368
370
|
try {
|
|
369
371
|
if (branchHasUnmergedCommits(branchName, integrationBranch, repoPath)) {
|
|
370
|
-
|
|
372
|
+
log.info(`Attempting merge for ${branchName} before removal`);
|
|
371
373
|
const mergeResult = await mergeToIntegration({
|
|
372
374
|
config,
|
|
373
375
|
branchName,
|
|
@@ -377,11 +379,11 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
377
379
|
mergeSucceeded = mergeResult.success;
|
|
378
380
|
merged = true;
|
|
379
381
|
if (mergeResult.success) {
|
|
380
|
-
|
|
382
|
+
log.info(`Merge succeeded for ${branchName}`);
|
|
381
383
|
}
|
|
382
384
|
else {
|
|
383
385
|
mergeError = mergeResult.error ?? 'unknown';
|
|
384
|
-
|
|
386
|
+
log.warn(`[worktree] Merge failed for ${branchName}: ${mergeError}. ` +
|
|
385
387
|
`Safety guards will preserve the branch.`);
|
|
386
388
|
}
|
|
387
389
|
}
|
|
@@ -391,7 +393,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
391
393
|
}
|
|
392
394
|
catch (err) {
|
|
393
395
|
mergeError = err.message;
|
|
394
|
-
|
|
396
|
+
log.warn(`Merge attempt failed for ${branchName}: ${mergeError}`);
|
|
395
397
|
}
|
|
396
398
|
// 2. Remove worktree (safety guards handle uncommitted changes and unmerged commits)
|
|
397
399
|
let removed = false;
|
|
@@ -404,7 +406,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
404
406
|
});
|
|
405
407
|
}
|
|
406
408
|
catch (err) {
|
|
407
|
-
|
|
409
|
+
log.warn(`Failed to remove worktree ${worktreePath}: ${err.message}`);
|
|
408
410
|
}
|
|
409
411
|
// 3. Conditionally clear in-memory state
|
|
410
412
|
if (focusId) {
|
|
@@ -412,7 +414,7 @@ export async function safeRemoveFocusWorktree(params) {
|
|
|
412
414
|
removeFocusWorktreeState(focusId);
|
|
413
415
|
}
|
|
414
416
|
else {
|
|
415
|
-
|
|
417
|
+
log.info(`[worktree] Worktree preserved for focus ${focusId} -- keeping in-memory state`);
|
|
416
418
|
}
|
|
417
419
|
}
|
|
418
420
|
return { removed, merged, mergeError };
|
|
@@ -448,13 +450,13 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
448
450
|
return statSync(join(worktreeDir, entry)).isDirectory();
|
|
449
451
|
}
|
|
450
452
|
catch (e) {
|
|
451
|
-
|
|
453
|
+
log.debug(`Failed to stat ${entry} (may have been deleted):`, e.message);
|
|
452
454
|
return false;
|
|
453
455
|
}
|
|
454
456
|
});
|
|
455
457
|
}
|
|
456
458
|
catch (err) {
|
|
457
|
-
|
|
459
|
+
log.warn(`[worktree] Failed to scan worktree directory: ${err instanceof Error ? err.message : String(err)}`);
|
|
458
460
|
return { cleaned, preserved };
|
|
459
461
|
}
|
|
460
462
|
if (entries.length === 0) {
|
|
@@ -497,7 +499,7 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
497
499
|
catch (err) {
|
|
498
500
|
// Conservative fallback: if we cannot determine active focuses,
|
|
499
501
|
// skip orphan cleanup entirely rather than risk deleting active worktrees.
|
|
500
|
-
|
|
502
|
+
log.warn(`[worktree] Failed to query active focuses for orphan detection: ` +
|
|
501
503
|
`${err instanceof Error ? err.message : String(err)}. Skipping orphan cleanup.`);
|
|
502
504
|
return { cleaned, preserved };
|
|
503
505
|
}
|
|
@@ -509,10 +511,10 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
509
511
|
return !activeFocusBranchDirs.has(entry);
|
|
510
512
|
});
|
|
511
513
|
if (orphanDirs.length === 0) {
|
|
512
|
-
|
|
514
|
+
log.info('No orphan focus worktrees found');
|
|
513
515
|
return { cleaned, preserved };
|
|
514
516
|
}
|
|
515
|
-
|
|
517
|
+
log.info(`Found ${orphanDirs.length} orphan focus worktree(s)`);
|
|
516
518
|
// 4. Parse git worktree list to get branch names for each path
|
|
517
519
|
const worktreeListResult = runGitSync(['worktree', 'list', '--porcelain'], repoPath);
|
|
518
520
|
const pathToBranch = new Map();
|
|
@@ -536,7 +538,7 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
536
538
|
const worktreePath = resolve(join(worktreeDir, dir));
|
|
537
539
|
const branchName = pathToBranch.get(worktreePath) ?? dir.replace(/-/g, '/');
|
|
538
540
|
const deliveryName = branchName.split('/').slice(2).join('/') || dir;
|
|
539
|
-
|
|
541
|
+
log.info(`Cleaning up orphan focus worktree: ${worktreePath} [${branchName}]`);
|
|
540
542
|
const result = await safeRemoveFocusWorktree({
|
|
541
543
|
config,
|
|
542
544
|
worktreePath,
|
|
@@ -551,7 +553,7 @@ export async function cleanupOrphanFocusWorktrees(config) {
|
|
|
551
553
|
preserved++;
|
|
552
554
|
}
|
|
553
555
|
}
|
|
554
|
-
|
|
556
|
+
log.info(`[worktree] Orphan focus worktree cleanup: ${cleaned} cleaned, ${preserved} preserved`);
|
|
555
557
|
return { cleaned, preserved };
|
|
556
558
|
}
|
|
557
559
|
//# sourceMappingURL=worktree.js.map
|