@telora/daemon 0.21.98 → 0.21.144
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 +6 -3
- package/dist/audit/audit-hooks.d.ts +120 -5
- package/dist/audit/audit-hooks.d.ts.map +1 -1
- package/dist/audit/audit-hooks.js +205 -45
- package/dist/audit/audit-hooks.js.map +1 -1
- package/dist/ci/ci-escalation.js +1 -1
- package/dist/ci/ci-escalation.js.map +1 -1
- package/dist/ci/ci-sensor-loop.d.ts +30 -0
- package/dist/ci/ci-sensor-loop.d.ts.map +1 -1
- package/dist/ci/ci-sensor-loop.js +85 -12
- package/dist/ci/ci-sensor-loop.js.map +1 -1
- package/dist/cli/connect/config-write.d.ts +87 -0
- package/dist/cli/connect/config-write.d.ts.map +1 -0
- package/dist/cli/connect/config-write.js +255 -0
- package/dist/cli/connect/config-write.js.map +1 -0
- package/dist/cli/connect/registration.d.ts +76 -0
- package/dist/cli/connect/registration.d.ts.map +1 -0
- package/dist/cli/connect/registration.js +207 -0
- package/dist/cli/connect/registration.js.map +1 -0
- package/dist/cli/connect.d.ts +3 -141
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +9 -441
- package/dist/cli/connect.js.map +1 -1
- package/dist/completion/coverage-drift-state.d.ts +29 -2
- package/dist/completion/coverage-drift-state.d.ts.map +1 -1
- package/dist/completion/coverage-drift-state.js +42 -2
- package/dist/completion/coverage-drift-state.js.map +1 -1
- package/dist/completion/coverage-stabilized.d.ts +58 -0
- package/dist/completion/coverage-stabilized.d.ts.map +1 -0
- package/dist/completion/coverage-stabilized.js +84 -0
- package/dist/completion/coverage-stabilized.js.map +1 -0
- package/dist/completion/delivery-advancement-guard.d.ts +21 -0
- package/dist/completion/delivery-advancement-guard.d.ts.map +1 -1
- package/dist/completion/delivery-advancement-guard.js +31 -3
- package/dist/completion/delivery-advancement-guard.js.map +1 -1
- package/dist/completion/escalation-provenance.d.ts +2 -1
- package/dist/completion/escalation-provenance.d.ts.map +1 -1
- package/dist/completion/escalation-provenance.js +2 -1
- package/dist/completion/escalation-provenance.js.map +1 -1
- package/dist/completion/escalations.js +1 -1
- package/dist/completion/escalations.js.map +1 -1
- package/dist/completion/event-escalations.d.ts +16 -1
- package/dist/completion/event-escalations.d.ts.map +1 -1
- package/dist/completion/event-escalations.js +43 -5
- package/dist/completion/event-escalations.js.map +1 -1
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +5 -2
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +1 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +2 -2
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/machine-remediable-demotion.d.ts +74 -0
- package/dist/completion/machine-remediable-demotion.d.ts.map +1 -0
- package/dist/completion/machine-remediable-demotion.js +148 -0
- package/dist/completion/machine-remediable-demotion.js.map +1 -0
- package/dist/completion/read-only-pristine.d.ts +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +1 -1
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-escalations.d.ts +1 -1
- package/dist/completion/review-exit-escalations.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +5 -2
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +15 -8
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/settle-injection-sweep.d.ts +55 -0
- package/dist/completion/settle-injection-sweep.d.ts.map +1 -0
- package/dist/completion/settle-injection-sweep.js +88 -0
- package/dist/completion/settle-injection-sweep.js.map +1 -0
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +42 -1
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +18 -0
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +42 -0
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +73 -1
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/delivery/delivery-advance-block.d.ts +1 -1
- package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery/delivery-advance-block.js +1 -1
- package/dist/delivery/delivery-advance-block.js.map +1 -1
- package/dist/delivery/delivery-lifecycle.d.ts +19 -33
- package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery/delivery-lifecycle.js +20 -148
- package/dist/delivery/delivery-lifecycle.js.map +1 -1
- package/dist/delivery/delivery-merge-ops.d.ts +46 -0
- package/dist/delivery/delivery-merge-ops.d.ts.map +1 -0
- package/dist/delivery/delivery-merge-ops.js +154 -0
- package/dist/delivery/delivery-merge-ops.js.map +1 -0
- package/dist/delivery/delivery-reconciler-apply.d.ts +28 -0
- package/dist/delivery/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler-apply.js +30 -0
- package/dist/delivery/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery/delivery-reconciler-shadow.d.ts +1 -1
- package/dist/delivery/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler-shadow.js +1 -1
- package/dist/delivery/delivery-reconciler-shadow.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts +7 -2
- package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler.js +34 -5
- package/dist/delivery/delivery-reconciler.js.map +1 -1
- package/dist/delivery/external-hold-surface.d.ts +32 -0
- package/dist/delivery/external-hold-surface.d.ts.map +1 -0
- package/dist/delivery/external-hold-surface.js +67 -0
- package/dist/delivery/external-hold-surface.js.map +1 -0
- package/dist/delivery/external-hold.d.ts +21 -0
- package/dist/delivery/external-hold.d.ts.map +1 -1
- package/dist/delivery/external-hold.js +40 -5
- package/dist/delivery/external-hold.js.map +1 -1
- package/dist/delivery/operator-hold.d.ts +1 -1
- package/dist/delivery/operator-hold.d.ts.map +1 -1
- package/dist/delivery/paused-revival.d.ts +140 -0
- package/dist/delivery/paused-revival.d.ts.map +1 -0
- package/dist/delivery/paused-revival.js +230 -0
- package/dist/delivery/paused-revival.js.map +1 -0
- package/dist/delivery/wait-reachability.d.ts.map +1 -1
- package/dist/delivery/wait-reachability.js +11 -0
- package/dist/delivery/wait-reachability.js.map +1 -1
- package/dist/directive/close-loop-dispatcher.d.ts +16 -263
- package/dist/directive/close-loop-dispatcher.d.ts.map +1 -1
- package/dist/directive/close-loop-dispatcher.js +21 -259
- package/dist/directive/close-loop-dispatcher.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts +20 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +19 -1
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts +1 -3
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +24 -22
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +28 -15
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +28 -36
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/directive/resolver-dispatch.d.ts +19 -92
- package/dist/directive/resolver-dispatch.d.ts.map +1 -1
- package/dist/directive/resolver-dispatch.js +19 -65
- package/dist/directive/resolver-dispatch.js.map +1 -1
- package/dist/drift/staleness-sensor.js +1 -1
- package/dist/drift/staleness-sensor.js.map +1 -1
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +29 -2
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-executor.d.ts.map +1 -1
- package/dist/focus/focus-executor.js +290 -256
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus/focus-lifecycle.js +2 -1
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus/focus-loop-registry.js +43 -1
- package/dist/focus/focus-loop-registry.js.map +1 -1
- package/dist/focus/focus-respawn-guard.d.ts +1 -1
- package/dist/focus/focus-respawn-guard.d.ts.map +1 -1
- package/dist/focus/focus-respawn-guard.js +12 -3
- package/dist/focus/focus-respawn-guard.js.map +1 -1
- package/dist/focus/focus-team-state.d.ts +11 -0
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +17 -0
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/listener-auto-advance.d.ts +17 -46
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +104 -256
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +62 -0
- package/dist/focus/listener-spawn.d.ts.map +1 -0
- package/dist/focus/listener-spawn.js +418 -0
- package/dist/focus/listener-spawn.js.map +1 -0
- package/dist/focus/listener-state.d.ts +57 -0
- package/dist/focus/listener-state.d.ts.map +1 -0
- package/dist/focus/listener-state.js +63 -0
- package/dist/focus/listener-state.js.map +1 -0
- package/dist/focus/listener.d.ts +0 -58
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +138 -516
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/tick-deadline.d.ts +55 -0
- package/dist/focus/tick-deadline.d.ts.map +1 -0
- package/dist/focus/tick-deadline.js +91 -0
- package/dist/focus/tick-deadline.js.map +1 -0
- package/dist/focus/verify-open-issues.d.ts +62 -0
- package/dist/focus/verify-open-issues.d.ts.map +1 -0
- package/dist/focus/verify-open-issues.js +265 -0
- package/dist/focus/verify-open-issues.js.map +1 -0
- package/dist/focus-stage-lifecycle/index.d.ts +19 -26
- package/dist/focus-stage-lifecycle/index.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/index.js +27 -39
- package/dist/focus-stage-lifecycle/index.js.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-cause-arbiter.d.ts +52 -0
- package/dist/focus-stage-lifecycle/wedge-cause-arbiter.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-cause-arbiter.js +94 -0
- package/dist/focus-stage-lifecycle/wedge-cause-arbiter.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +18 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +57 -7
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/git/index.d.ts +2 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +2 -0
- package/dist/git/index.js.map +1 -1
- package/dist/git/merge-strategies.d.ts +80 -0
- package/dist/git/merge-strategies.d.ts.map +1 -0
- package/dist/git/merge-strategies.js +218 -0
- package/dist/git/merge-strategies.js.map +1 -0
- package/dist/git/merge-to-main.d.ts +76 -0
- package/dist/git/merge-to-main.d.ts.map +1 -0
- package/dist/git/merge-to-main.js +256 -0
- package/dist/git/merge-to-main.js.map +1 -0
- package/dist/git/merge.d.ts +27 -81
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +4 -448
- package/dist/git/merge.js.map +1 -1
- package/dist/git/state-detector.js +1 -1
- package/dist/git/state-detector.js.map +1 -1
- package/dist/guard/condition-evaluators.d.ts +9 -0
- package/dist/guard/condition-evaluators.d.ts.map +1 -1
- package/dist/guard/condition-evaluators.js +15 -0
- package/dist/guard/condition-evaluators.js.map +1 -1
- package/dist/guard/guard-evaluator.d.ts +17 -1
- package/dist/guard/guard-evaluator.d.ts.map +1 -1
- package/dist/guard/guard-evaluator.js +61 -2
- package/dist/guard/guard-evaluator.js.map +1 -1
- package/dist/guard/trigger-executor.d.ts +30 -18
- package/dist/guard/trigger-executor.d.ts.map +1 -1
- package/dist/guard/trigger-executor.js +55 -31
- package/dist/guard/trigger-executor.js.map +1 -1
- package/dist/loops/engine.js +1 -1
- package/dist/loops/engine.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +1 -1
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +1 -1
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts +1 -1
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +2 -2
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-detector.js +1 -1
- package/dist/merge/merge-detector.js.map +1 -1
- package/dist/nexus/return.js +1 -1
- package/dist/nexus/return.js.map +1 -1
- package/dist/prd/controller-shared.d.ts +223 -0
- package/dist/prd/controller-shared.d.ts.map +1 -0
- package/dist/prd/controller-shared.js +77 -0
- package/dist/prd/controller-shared.js.map +1 -0
- package/dist/prd/controller.d.ts +5 -256
- package/dist/prd/controller.d.ts.map +1 -1
- package/dist/prd/controller.js +9 -166
- package/dist/prd/controller.js.map +1 -1
- package/dist/prd/done-sweep.d.ts +55 -0
- package/dist/prd/done-sweep.d.ts.map +1 -0
- package/dist/prd/done-sweep.js +112 -0
- package/dist/prd/done-sweep.js.map +1 -0
- package/dist/prompt/team-prompt-base.d.ts +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +1 -1
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +12 -2
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +0 -32
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +19 -88
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/shared.d.ts +1 -1
- package/dist/prompt-sections/shared.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.d.ts +1 -1
- package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.js +2 -1
- package/dist/queries/agent-resolvable-promotion.js.map +1 -1
- package/dist/queries/deliveries.d.ts +0 -172
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +1 -77
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/escalation-consumption.d.ts +120 -0
- package/dist/queries/escalation-consumption.d.ts.map +1 -0
- package/dist/queries/escalation-consumption.js +143 -0
- package/dist/queries/escalation-consumption.js.map +1 -0
- package/dist/queries/escalation-dispositions.d.ts +19 -0
- package/dist/queries/escalation-dispositions.d.ts.map +1 -0
- package/dist/queries/escalation-dispositions.js +18 -0
- package/dist/queries/escalation-dispositions.js.map +1 -0
- package/dist/queries/escalation-suppression.d.ts +1 -1
- package/dist/queries/escalation-suppression.d.ts.map +1 -1
- package/dist/queries/escalation-suppression.js +1 -1
- package/dist/queries/escalation-suppression.js.map +1 -1
- package/dist/queries/escalations.d.ts +343 -0
- package/dist/queries/escalations.d.ts.map +1 -0
- package/dist/queries/escalations.js +493 -0
- package/dist/queries/escalations.js.map +1 -0
- package/dist/queries/focus-discovery.d.ts +204 -0
- package/dist/queries/focus-discovery.d.ts.map +1 -0
- package/dist/queries/focus-discovery.js +92 -0
- package/dist/queries/focus-discovery.js.map +1 -0
- package/dist/queries/focuses.d.ts +36 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +45 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/guards.d.ts +10 -0
- package/dist/queries/guards.d.ts.map +1 -1
- package/dist/queries/guards.js +14 -1
- package/dist/queries/guards.js.map +1 -1
- package/dist/queries/index.d.ts +4 -2
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +4 -2
- package/dist/queries/index.js.map +1 -1
- package/dist/queries/issues.d.ts +8 -372
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +7 -482
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/schemas.d.ts +51 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +34 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/verification.d.ts +5 -6
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +5 -6
- package/dist/queries/verification.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts +20 -0
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +40 -10
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/index.d.ts +2 -2
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts +1 -11
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +2 -16
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/shared/git-diff.d.ts +99 -18
- package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
- package/dist/resolvers/shared/git-diff.js +98 -27
- package/dist/resolvers/shared/git-diff.js.map +1 -1
- package/dist/shell/control-state.d.ts +1 -1
- package/dist/shell/control-state.d.ts.map +1 -1
- package/dist/shell/control-state.js +1 -1
- package/dist/shell/control-state.js.map +1 -1
- package/dist/shell/crash-recovery.d.ts +1 -1
- package/dist/shell/crash-recovery.d.ts.map +1 -1
- package/dist/shell/crash-recovery.js +2 -2
- package/dist/shell/crash-recovery.js.map +1 -1
- package/dist/shell/install-probe-tick.d.ts +1 -1
- package/dist/shell/install-probe-tick.d.ts.map +1 -1
- package/dist/shell/install-probe-tick.js +1 -1
- package/dist/shell/install-probe-tick.js.map +1 -1
- package/dist/shell/unified-shell-provisioning.d.ts +40 -0
- package/dist/shell/unified-shell-provisioning.d.ts.map +1 -1
- package/dist/shell/unified-shell-provisioning.js +72 -0
- package/dist/shell/unified-shell-provisioning.js.map +1 -1
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +19 -2
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +6 -1
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/model-routing.d.ts +1 -1
- package/dist/spawn/model-routing.d.ts.map +1 -1
- package/dist/spawn/model-routing.js +1 -1
- 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 +7 -0
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +1 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +1 -1
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/spawn-cooldown.d.ts +41 -7
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +47 -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 +34 -2
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +1 -1
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/templates/claude-md.d.ts +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +12 -0
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +20 -8
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +27 -46
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +1 -1
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-deps.d.ts +1 -1
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +20 -12
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/workflow/gate-failure-policy.d.ts +48 -0
- package/dist/workflow/gate-failure-policy.d.ts.map +1 -0
- package/dist/workflow/gate-failure-policy.js +57 -0
- package/dist/workflow/gate-failure-policy.js.map +1 -0
- package/dist/workflow/pipeline-config.d.ts +2 -2
- package/dist/workflow/pipeline-config.js +2 -2
- package/dist/worktree/provision.js +1 -1
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/scratch-guard.d.ts.map +1 -1
- package/dist/worktree/scratch-guard.js +23 -2
- package/dist/worktree/scratch-guard.js.map +1 -1
- package/package.json +1 -1
- package/dist/directive/close-loop-stage.d.ts +0 -50
- package/dist/directive/close-loop-stage.d.ts.map +0 -1
- package/dist/directive/close-loop-stage.js +0 -210
- package/dist/directive/close-loop-stage.js.map +0 -1
- package/dist/focus-stage-lifecycle/review-convergence.d.ts +0 -133
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +0 -1
- package/dist/focus-stage-lifecycle/review-convergence.js +0 -237
- package/dist/focus-stage-lifecycle/review-convergence.js.map +0 -1
package/dist/git/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/dist/git/index.js
CHANGED
|
@@ -22,6 +22,8 @@ export * from './types.js';
|
|
|
22
22
|
export * from './merge-lock.js';
|
|
23
23
|
export * from './branch.js';
|
|
24
24
|
export * from './merge.js';
|
|
25
|
+
export * from './merge-strategies.js';
|
|
26
|
+
export * from './merge-to-main.js';
|
|
25
27
|
export * from './integration.js';
|
|
26
28
|
export * from './state-detector.js';
|
|
27
29
|
export * from './activity.js';
|
package/dist/git/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git merge strategy + worktree-recovery mechanics.
|
|
3
|
+
*
|
|
4
|
+
* The low-level merge dispatch (fast-forward / rebase / merge-commit / squash)
|
|
5
|
+
* and the failed-merge worktree recovery primitives. Split out of git/merge.ts
|
|
6
|
+
* (file-size limit); this is the LEAF of the git-merge module family -- it calls
|
|
7
|
+
* nothing in git/merge.ts, so merge.ts and git/merge-to-main.ts both import from
|
|
8
|
+
* here without a cycle. Focus-level merge ORCHESTRATION stays in merge/.
|
|
9
|
+
*/
|
|
10
|
+
import { type MergeResult, type MergeStrategy } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Extract the list of conflicted files from git status.
|
|
13
|
+
* Returns an empty array if the command fails or there are no conflicts.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractConflictedFiles(repoPath: string): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Recover a merge worktree left dirty by an EARLIER failed merge, BEFORE the next
|
|
18
|
+
* merge runs, so an already-wedged worktree heals itself with no operator. The
|
|
19
|
+
* residue is detected by a non-empty `git status --porcelain` (staged / unstaged
|
|
20
|
+
* / untracked) -- deliberately NOT by MERGE_HEAD: the 2026-08-18 wedge held 85
|
|
21
|
+
* staged files with MERGE_HEAD already cleared and AUTO_MERGE present, so a
|
|
22
|
+
* MERGE_HEAD probe would miss it. Any residue is discarded via
|
|
23
|
+
* restoreWorktreeAfterFailedMerge, which moves no branch ref -- focus-branch
|
|
24
|
+
* commits are untouched. Merge-worktree only; idempotent (a clean worktree is a
|
|
25
|
+
* no-op).
|
|
26
|
+
*
|
|
27
|
+
* CONFIRMS the outcome rather than recovering-and-hoping: it re-reads
|
|
28
|
+
* `git status --porcelain` AFTER any recovery and reports whether the worktree
|
|
29
|
+
* is now clean. `clean` is true only when the worktree is empty at exit -- it
|
|
30
|
+
* was already clean, or the recovery restored it. It is false when residue
|
|
31
|
+
* survived the recovery attempt, or when status itself could not be read (so
|
|
32
|
+
* cleanliness cannot be vouched for). A merge must REFUSE to run when this
|
|
33
|
+
* returns clean:false: running against an unconfirmed worktree is exactly the
|
|
34
|
+
* wedge this guard exists to prevent.
|
|
35
|
+
*/
|
|
36
|
+
export declare function recoverDirtyMergeWorktree(repoPath: string): {
|
|
37
|
+
clean: boolean;
|
|
38
|
+
residue?: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Attempt a fast-forward-only merge.
|
|
42
|
+
* Returns a MergeResult; on failure, no abort is needed (ff-only is atomic).
|
|
43
|
+
*/
|
|
44
|
+
export declare function tryFastForwardMerge(repoPath: string, sourceBranch: string): MergeResult;
|
|
45
|
+
/**
|
|
46
|
+
* Restore the merge worktree to the clean commit + index it had before a failed
|
|
47
|
+
* merge attempt. The conflict branches abort explicitly; this covers EVERY OTHER
|
|
48
|
+
* failure -- a commit-msg hook rejection (leaves MERGE_HEAD set + staged), a
|
|
49
|
+
* squash that staged changes with no MERGE_HEAD, or an unrecognised error --
|
|
50
|
+
* which git otherwise leaves as a staged, uncommitted merge that NOTHING clears.
|
|
51
|
+
* Because the merge worktree is shared by every focus in the product, that
|
|
52
|
+
* residue would fail the next focus's merge too; clearing it here contains one
|
|
53
|
+
* focus's failure to that focus. It discards ONLY the failed-merge residue --
|
|
54
|
+
* `git merge --abort` (or, when no merge is in progress, `reset --hard HEAD`)
|
|
55
|
+
* moves no branch ref, so commits on any focus branch are untouched. Only ever
|
|
56
|
+
* called against the merge worktree (never a developer checkout).
|
|
57
|
+
*/
|
|
58
|
+
export declare function restoreWorktreeAfterFailedMerge(repoPath: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Attempt a merge-commit merge (--no-ff).
|
|
61
|
+
* On conflict, aborts the merge and returns conflicted file details.
|
|
62
|
+
*/
|
|
63
|
+
export declare function tryMergeCommit(repoPath: string, sourceBranch: string, commitMessage: string): MergeResult;
|
|
64
|
+
/**
|
|
65
|
+
* Attempt a squash merge: stages all changes from the source branch as a
|
|
66
|
+
* single commit on the current branch.
|
|
67
|
+
*
|
|
68
|
+
* 1. `git merge --squash <sourceBranch>` -- stages all diffs without committing
|
|
69
|
+
* 2. `git commit -m <commitMessage>` -- creates a single squashed commit
|
|
70
|
+
* 3. Captures the resulting commit SHA via `git rev-parse HEAD`
|
|
71
|
+
*
|
|
72
|
+
* On conflict, aborts the merge and returns conflicted file details.
|
|
73
|
+
*/
|
|
74
|
+
export declare function trySquashMerge(repoPath: string, sourceBranch: string, commitMessage: string): MergeResult;
|
|
75
|
+
/**
|
|
76
|
+
* Dispatch to the appropriate merge strategy helper.
|
|
77
|
+
* For 'merge-commit', tries fast-forward first, then falls back to --no-ff.
|
|
78
|
+
*/
|
|
79
|
+
export declare function applyMergeStrategy(repoPath: string, sourceBranch: string, targetBranch: string, strategy: MergeStrategy): MergeResult;
|
|
80
|
+
//# sourceMappingURL=merge-strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-strategies.d.ts","sourceRoot":"","sources":["../../src/git/merge-strategies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAK9E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BhG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,WAAW,CASb;AAwBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAStE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,WAAW,CAgCb;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,WAAW,CAoDb;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,aAAa,GACtB,WAAW,CAmBb"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git merge strategy + worktree-recovery mechanics.
|
|
3
|
+
*
|
|
4
|
+
* The low-level merge dispatch (fast-forward / rebase / merge-commit / squash)
|
|
5
|
+
* and the failed-merge worktree recovery primitives. Split out of git/merge.ts
|
|
6
|
+
* (file-size limit); this is the LEAF of the git-merge module family -- it calls
|
|
7
|
+
* nothing in git/merge.ts, so merge.ts and git/merge-to-main.ts both import from
|
|
8
|
+
* here without a cycle. Focus-level merge ORCHESTRATION stays in merge/.
|
|
9
|
+
*/
|
|
10
|
+
import { runGitSync } from './types.js';
|
|
11
|
+
import { createLogger } from '../shell/log.js';
|
|
12
|
+
const log = createLogger({ module: 'CI' });
|
|
13
|
+
/**
|
|
14
|
+
* Extract the list of conflicted files from git status.
|
|
15
|
+
* Returns an empty array if the command fails or there are no conflicts.
|
|
16
|
+
*/
|
|
17
|
+
export function extractConflictedFiles(repoPath) {
|
|
18
|
+
const statusResult = runGitSync(['diff', '--name-only', '--diff-filter=U'], repoPath);
|
|
19
|
+
if (!statusResult.success) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return statusResult.output.split('\n').filter(Boolean);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Recover a merge worktree left dirty by an EARLIER failed merge, BEFORE the next
|
|
26
|
+
* merge runs, so an already-wedged worktree heals itself with no operator. The
|
|
27
|
+
* residue is detected by a non-empty `git status --porcelain` (staged / unstaged
|
|
28
|
+
* / untracked) -- deliberately NOT by MERGE_HEAD: the 2026-08-18 wedge held 85
|
|
29
|
+
* staged files with MERGE_HEAD already cleared and AUTO_MERGE present, so a
|
|
30
|
+
* MERGE_HEAD probe would miss it. Any residue is discarded via
|
|
31
|
+
* restoreWorktreeAfterFailedMerge, which moves no branch ref -- focus-branch
|
|
32
|
+
* commits are untouched. Merge-worktree only; idempotent (a clean worktree is a
|
|
33
|
+
* no-op).
|
|
34
|
+
*
|
|
35
|
+
* CONFIRMS the outcome rather than recovering-and-hoping: it re-reads
|
|
36
|
+
* `git status --porcelain` AFTER any recovery and reports whether the worktree
|
|
37
|
+
* is now clean. `clean` is true only when the worktree is empty at exit -- it
|
|
38
|
+
* was already clean, or the recovery restored it. It is false when residue
|
|
39
|
+
* survived the recovery attempt, or when status itself could not be read (so
|
|
40
|
+
* cleanliness cannot be vouched for). A merge must REFUSE to run when this
|
|
41
|
+
* returns clean:false: running against an unconfirmed worktree is exactly the
|
|
42
|
+
* wedge this guard exists to prevent.
|
|
43
|
+
*/
|
|
44
|
+
export function recoverDirtyMergeWorktree(repoPath) {
|
|
45
|
+
const status = runGitSync(['status', '--porcelain'], repoPath);
|
|
46
|
+
if (!status.success) {
|
|
47
|
+
// Can't read status -> can't confirm clean. Treat as unsafe to merge.
|
|
48
|
+
return { clean: false, residue: `git status failed: ${status.error}` };
|
|
49
|
+
}
|
|
50
|
+
if (status.output.trim().length === 0) {
|
|
51
|
+
return { clean: true };
|
|
52
|
+
}
|
|
53
|
+
log.warn(`[merge] Merge worktree was left dirty by an earlier failed merge ` +
|
|
54
|
+
`(git status --porcelain non-empty); recovering it before the next merge ` +
|
|
55
|
+
`so an already-wedged worktree does not require an operator.`);
|
|
56
|
+
restoreWorktreeAfterFailedMerge(repoPath);
|
|
57
|
+
// Confirm the recovery actually cleaned the worktree before we let a merge run.
|
|
58
|
+
const after = runGitSync(['status', '--porcelain'], repoPath);
|
|
59
|
+
if (after.success && after.output.trim().length === 0) {
|
|
60
|
+
return { clean: true };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
clean: false,
|
|
64
|
+
residue: after.success ? after.output.trim() : `git status failed: ${after.error}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Attempt a fast-forward-only merge.
|
|
69
|
+
* Returns a MergeResult; on failure, no abort is needed (ff-only is atomic).
|
|
70
|
+
*/
|
|
71
|
+
export function tryFastForwardMerge(repoPath, sourceBranch) {
|
|
72
|
+
const ffResult = runGitSync(['merge', '--ff-only', sourceBranch], repoPath);
|
|
73
|
+
if (ffResult.success) {
|
|
74
|
+
return { success: true };
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
error: `Fast-forward merge not possible: ${ffResult.error}`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Attempt a rebase merge.
|
|
83
|
+
* On conflict, aborts the rebase and returns conflicted file details.
|
|
84
|
+
*/
|
|
85
|
+
function tryRebaseMerge(repoPath, sourceBranch) {
|
|
86
|
+
const rebaseResult = runGitSync(['rebase', sourceBranch], repoPath);
|
|
87
|
+
if (rebaseResult.success) {
|
|
88
|
+
return { success: true };
|
|
89
|
+
}
|
|
90
|
+
const conflictedFiles = extractConflictedFiles(repoPath);
|
|
91
|
+
runGitSync(['rebase', '--abort'], repoPath);
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
error: `Rebase failed: ${conflictedFiles.length} file(s) conflicted`,
|
|
95
|
+
conflictedFiles,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Restore the merge worktree to the clean commit + index it had before a failed
|
|
100
|
+
* merge attempt. The conflict branches abort explicitly; this covers EVERY OTHER
|
|
101
|
+
* failure -- a commit-msg hook rejection (leaves MERGE_HEAD set + staged), a
|
|
102
|
+
* squash that staged changes with no MERGE_HEAD, or an unrecognised error --
|
|
103
|
+
* which git otherwise leaves as a staged, uncommitted merge that NOTHING clears.
|
|
104
|
+
* Because the merge worktree is shared by every focus in the product, that
|
|
105
|
+
* residue would fail the next focus's merge too; clearing it here contains one
|
|
106
|
+
* focus's failure to that focus. It discards ONLY the failed-merge residue --
|
|
107
|
+
* `git merge --abort` (or, when no merge is in progress, `reset --hard HEAD`)
|
|
108
|
+
* moves no branch ref, so commits on any focus branch are untouched. Only ever
|
|
109
|
+
* called against the merge worktree (never a developer checkout).
|
|
110
|
+
*/
|
|
111
|
+
export function restoreWorktreeAfterFailedMerge(repoPath) {
|
|
112
|
+
// MERGE_HEAD present (a --no-ff merge that stopped, e.g. hook-rejected) aborts
|
|
113
|
+
// cleanly. --squash stages changes WITHOUT a MERGE_HEAD, so abort is a no-op
|
|
114
|
+
// there; fall back to a hard reset + untracked clean to drop the staged residue.
|
|
115
|
+
const abort = runGitSync(['merge', '--abort'], repoPath);
|
|
116
|
+
if (!abort.success) {
|
|
117
|
+
runGitSync(['reset', '--hard', 'HEAD'], repoPath);
|
|
118
|
+
runGitSync(['clean', '-fd'], repoPath);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Attempt a merge-commit merge (--no-ff).
|
|
123
|
+
* On conflict, aborts the merge and returns conflicted file details.
|
|
124
|
+
*/
|
|
125
|
+
export function tryMergeCommit(repoPath, sourceBranch, commitMessage) {
|
|
126
|
+
const mergeResult = runGitSync(['merge', sourceBranch, '--no-ff', '-m', commitMessage], repoPath);
|
|
127
|
+
if (mergeResult.success) {
|
|
128
|
+
return { success: true };
|
|
129
|
+
}
|
|
130
|
+
const isConflict = mergeResult.error.includes('CONFLICT') ||
|
|
131
|
+
mergeResult.error.includes('Automatic merge failed') ||
|
|
132
|
+
mergeResult.output.includes('CONFLICT');
|
|
133
|
+
if (isConflict) {
|
|
134
|
+
const conflictedFiles = extractConflictedFiles(repoPath);
|
|
135
|
+
runGitSync(['merge', '--abort'], repoPath);
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
error: `Merge conflict: ${conflictedFiles.length} file(s) conflicted`,
|
|
139
|
+
conflictedFiles,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// Non-conflict failure (hook rejection / unrecognised error) still leaves a
|
|
143
|
+
// staged, uncommitted merge behind -- restore the worktree so it does not
|
|
144
|
+
// poison the next focus's merge.
|
|
145
|
+
restoreWorktreeAfterFailedMerge(repoPath);
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: `Merge failed: ${mergeResult.error}`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Attempt a squash merge: stages all changes from the source branch as a
|
|
153
|
+
* single commit on the current branch.
|
|
154
|
+
*
|
|
155
|
+
* 1. `git merge --squash <sourceBranch>` -- stages all diffs without committing
|
|
156
|
+
* 2. `git commit -m <commitMessage>` -- creates a single squashed commit
|
|
157
|
+
* 3. Captures the resulting commit SHA via `git rev-parse HEAD`
|
|
158
|
+
*
|
|
159
|
+
* On conflict, aborts the merge and returns conflicted file details.
|
|
160
|
+
*/
|
|
161
|
+
export function trySquashMerge(repoPath, sourceBranch, commitMessage) {
|
|
162
|
+
const squashResult = runGitSync(['merge', '--squash', sourceBranch], repoPath);
|
|
163
|
+
if (!squashResult.success) {
|
|
164
|
+
const isConflict = squashResult.error.includes('CONFLICT') ||
|
|
165
|
+
squashResult.error.includes('Automatic merge failed') ||
|
|
166
|
+
squashResult.output.includes('CONFLICT');
|
|
167
|
+
if (isConflict) {
|
|
168
|
+
const conflictedFiles = extractConflictedFiles(repoPath);
|
|
169
|
+
runGitSync(['merge', '--abort'], repoPath);
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
error: `Squash merge conflict: ${conflictedFiles.length} file(s) conflicted`,
|
|
173
|
+
conflictedFiles,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Non-conflict squash failure leaves the staged squash residue behind
|
|
177
|
+
// (no MERGE_HEAD) -- restore so it does not poison the next focus's merge.
|
|
178
|
+
restoreWorktreeAfterFailedMerge(repoPath);
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
error: `Squash merge failed: ${squashResult.error}`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// Commit the squashed changes
|
|
185
|
+
const commitResult = runGitSync(['commit', '-m', commitMessage], repoPath);
|
|
186
|
+
if (!commitResult.success) {
|
|
187
|
+
// The squash staged everything; a failed commit (e.g. a rejecting hook)
|
|
188
|
+
// leaves it staged. Restore so the residue does not wedge the next merge.
|
|
189
|
+
restoreWorktreeAfterFailedMerge(repoPath);
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
error: `Squash merge commit failed: ${commitResult.error}`,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Capture the resulting commit SHA
|
|
196
|
+
const shaResult = runGitSync(['rev-parse', 'HEAD'], repoPath);
|
|
197
|
+
const commitSha = shaResult.success ? shaResult.output : undefined;
|
|
198
|
+
return { success: true, commitSha };
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Dispatch to the appropriate merge strategy helper.
|
|
202
|
+
* For 'merge-commit', tries fast-forward first, then falls back to --no-ff.
|
|
203
|
+
*/
|
|
204
|
+
export function applyMergeStrategy(repoPath, sourceBranch, targetBranch, strategy) {
|
|
205
|
+
if (strategy === 'fast-forward') {
|
|
206
|
+
return tryFastForwardMerge(repoPath, sourceBranch);
|
|
207
|
+
}
|
|
208
|
+
if (strategy === 'rebase') {
|
|
209
|
+
return tryRebaseMerge(repoPath, sourceBranch);
|
|
210
|
+
}
|
|
211
|
+
// 'merge-commit': try ff first, fall back to --no-ff
|
|
212
|
+
const ffResult = tryFastForwardMerge(repoPath, sourceBranch);
|
|
213
|
+
if (ffResult.success) {
|
|
214
|
+
return ffResult;
|
|
215
|
+
}
|
|
216
|
+
return tryMergeCommit(repoPath, sourceBranch, `Advance ${targetBranch} to ${sourceBranch}`);
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=merge-strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-strategies.js","sourceRoot":"","sources":["../../src/git/merge-strategies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The integration -> main merge (the single write-to-main point).
|
|
3
|
+
*
|
|
4
|
+
* Split out of git/merge.ts (file-size limit). mergeIntegrationToMain is the one
|
|
5
|
+
* place refs/heads/main advances, so the fail-closed CI green-wait gate lives
|
|
6
|
+
* here. Pure CONSUMER of the git-merge family: it imports the strategy mechanics
|
|
7
|
+
* from git/merge-strategies.ts and the shared primitives from git/merge.ts, and
|
|
8
|
+
* nothing in either imports back -> no cycle.
|
|
9
|
+
*/
|
|
10
|
+
import type { DaemonConfig } from '../types/index.js';
|
|
11
|
+
import { type MergeResult, type MergeStrategy } from './types.js';
|
|
12
|
+
import { type CiStatusReader, type CiMergeGateDecision } from '../ci/ci-status.js';
|
|
13
|
+
export interface MergeIntegrationToMainParams {
|
|
14
|
+
config: DaemonConfig;
|
|
15
|
+
/** Focus ID for log attribution / push-failure escalations. */
|
|
16
|
+
focusId: string;
|
|
17
|
+
/** Focus name for logging/commit messages. */
|
|
18
|
+
focusName: string;
|
|
19
|
+
/** Whether to also push main to remote (CD). */
|
|
20
|
+
pushToRemote: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Merge strategy honored when integrating into main. Defaults to
|
|
23
|
+
* `merge-commit` (which itself attempts fast-forward first, then falls
|
|
24
|
+
* back to `--no-ff`) so legacy callers that omit the field get the
|
|
25
|
+
* pre-existing behavior.
|
|
26
|
+
*/
|
|
27
|
+
mergeStrategy?: MergeStrategy;
|
|
28
|
+
/**
|
|
29
|
+
* The green-wait CI status reader, evaluated at THIS write point -- the single
|
|
30
|
+
* place `refs/heads/main` is advanced -- so the gate governs every daemon route
|
|
31
|
+
* to main identically, not whichever call path performed the merge. REQUIRED so
|
|
32
|
+
* no caller can advance main without making the CI decision explicit:
|
|
33
|
+
* - a reader (`resolveCiStatusReader()`) => the merged SHA's status is read
|
|
34
|
+
* and `resolveCiMergeGate` decides; pending/red/unknown HOLD (fail-closed),
|
|
35
|
+
* green proceeds. On a hold the ref is NOT advanced and the result carries
|
|
36
|
+
* `ciHeld` (not an error -- nothing was written, nothing to roll back).
|
|
37
|
+
* - `undefined` => an explicit, visible opt-out (used by tests and legacy
|
|
38
|
+
* callers with no CI source); the gate is skipped and the merge proceeds
|
|
39
|
+
* exactly as before.
|
|
40
|
+
*/
|
|
41
|
+
getCiStatus: CiStatusReader | undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolved remote name + URL describing the push target for a CD push.
|
|
45
|
+
* Exported only so the focus-completion / focus-team-lifecycle log lines
|
|
46
|
+
* can surface the remote without re-querying git.
|
|
47
|
+
*/
|
|
48
|
+
export interface PushedRemoteInfo {
|
|
49
|
+
/** Remote name (always `origin` today). */
|
|
50
|
+
name: string;
|
|
51
|
+
/** Remote URL as configured in the repo. */
|
|
52
|
+
url: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Merge the integration branch into the default (main) branch.
|
|
56
|
+
*
|
|
57
|
+
* Called when a focus completes with CI enabled. Optionally pushes
|
|
58
|
+
* to remote when CD is also enabled. The push step is gated by
|
|
59
|
+
* `pushToRemote` and only runs when an `origin` remote is configured.
|
|
60
|
+
*
|
|
61
|
+
* Uses the merge worktree and merge lock (same as mergeToIntegration)
|
|
62
|
+
* to avoid concurrent merge conflicts. The merge worktree checks main out
|
|
63
|
+
* DETACHED and advances refs/heads/main via `git update-ref`, so the merge
|
|
64
|
+
* completes even when main is attached in the daemon's primary worktree
|
|
65
|
+
* (where `git checkout main` would fail with "'main' is already used by
|
|
66
|
+
* worktree"). Clean worktrees holding main are re-synced afterward.
|
|
67
|
+
*
|
|
68
|
+
* The result's `pushedTo` field is set only when CD push happened and
|
|
69
|
+
* succeeded. Callers can read it to emit a focus-attributed log line
|
|
70
|
+
* with the resolved remote name + URL.
|
|
71
|
+
*/
|
|
72
|
+
export declare function mergeIntegrationToMain(params: MergeIntegrationToMainParams): Promise<MergeResult & {
|
|
73
|
+
pushedTo?: PushedRemoteInfo;
|
|
74
|
+
ciHeld?: CiMergeGateDecision;
|
|
75
|
+
}>;
|
|
76
|
+
//# sourceMappingURL=merge-to-main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-to-main.d.ts","sourceRoot":"","sources":["../../src/git/merge-to-main.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,aAAa,EAAwB,MAAM,YAAY,CAAC;AAIpG,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAU5B,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;;;;OAYG;IACH,WAAW,EAAE,cAAc,GAAG,SAAS,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAoPtF"}
|