@overdeck/desktop 0.45.21 → 0.45.23
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/package.json +1 -1
- package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-DOA0KgXx.js} +5 -5
- package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-BBu6DSNm.js} +6 -6
- package/server/{agent-gc-D6PUckBB.js → agent-gc-BV1q_2EV.js} +4 -4
- package/server/agent-state-Bg0lhqwj.js +3 -0
- package/server/{agent-state-service-DHwemt96.js → agent-state-service-CnzFKSAQ.js} +1 -1
- package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-HoK8U4jW.js} +5 -5
- package/server/{agents-DbrHWunF.js → agents-B4Bjbkfv.js} +4 -4
- package/server/agents-FlIgQ3ql.js +3 -0
- package/server/{archive-planning-BOnwJq8M.js → archive-planning-DYrYojxl.js} +31 -7
- package/server/{archive-planning-MPpvQJL4.js → archive-planning-zkJb3BeM.js} +1 -1
- package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
- package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
- package/server/{behavior-Dg-D8eBG.js → behavior-B_-4EKF3.js} +2 -2
- package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-DWdW7vUm.js} +2 -2
- package/server/{build-info-27NlbKhV.js → build-info-BT096lEl.js} +3 -3
- package/server/{build-info-Cv6CI7Gu.js → build-info-DgTqZkL5.js} +1 -1
- package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-B7Bt29J0.js} +1 -1
- package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-DDqcGyu8.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Vh-J15ge.js → checkpoints-C-AXLfYT.js} +2 -2
- package/server/{checkpoints-DwZqT2qQ.js → checkpoints-CpgCjAlN.js} +1 -1
- package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
- package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-but-_qGY.js} +2 -2
- package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-H_5wHQZQ.js} +2 -2
- package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-BTENVmYf.js} +1 -1
- package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
- package/server/cli-BsVIHwzC.js +3 -0
- package/server/{cli-mvpEOb3w.js → cli-vBeXbPrq.js} +9 -9
- package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Bgb2XCqi.js} +2 -2
- package/server/{cliproxy-7g1nObvB.js → cliproxy-DW0V86F8.js} +1 -1
- package/server/{close-issue-8F6uawYj.js → close-issue-Dn_4c4G8.js} +5 -5
- package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
- package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-hANY_ehE.js} +9 -9
- package/server/codex-Dg7Is5yb.js +3 -0
- package/server/{codex-D_UBEOwL.js → codex-TmSi-yTv.js} +30 -8
- package/server/{codex-parser-BTzlOZiV.js → codex-parser-C4gSH-IR.js} +2 -2
- package/server/{config-CrduXs4a.js → config-CCvjQf27.js} +2 -2
- package/server/{config-nAB_F-Gp.js → config-DUIhMN_T.js} +1 -1
- package/server/{config-G1TOMJZA.js → config-DjLOdbgT.js} +2 -2
- package/server/{config-yaml-Ciyp2mYe.js → config-yaml-DvyMuOle.js} +177 -211
- package/server/{conflict-gate-BKalpcjL.js → conflict-gate-BSJkNTdp.js} +1 -1
- package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CmrYpa47.js} +3 -3
- package/server/{context-layers-YNpf6Q_I.js → context-layers-B3Nt58jl.js} +2 -2
- package/server/{context-layers-Cg9ZgVfx.js → context-layers-ZYFcWiyc.js} +3 -3
- package/server/{control-settings-D_79A6gp.js → control-settings-aP1ANIlI.js} +4 -4
- package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-CNbTLB86.js} +8 -8
- package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-DiG5zWQq.js} +1 -1
- package/server/{conversation-service-DQybSPUK.js → conversation-service-Du-MTNpJ.js} +6 -6
- package/server/{conversation-service-CWk8mEym.js → conversation-service-Up7FEzIC.js} +1 -1
- package/server/{conversations-BJ-t3BRm.js → conversations-6mPANqvL.js} +1 -1
- package/server/{conversations-BUgGvqVL.js → conversations-DbOs1e9Q.js} +4 -4
- package/server/{cost-jJ2cgDcG.js → cost-CW4WSe72.js} +3 -3
- package/server/{cost-Drm7qeD5.js → cost-Ca0YTWDw.js} +18 -2
- package/server/{cost-sync-DzHP6zaR.js → cost-sync-C0VdGme1.js} +3 -3
- package/server/{dag-DIji6O2b.js → dag-CdOjJVDT.js} +9 -9
- package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-CT-IypG3.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pleYrvIm.js → deacon-DYSEJb48.js} +3 -3
- package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
- package/server/{deacon-1s7bM5zn.js → deacon-pRnyD5w9.js} +1133 -474
- package/server/deacon-swarm-9jRLS5Ke.js +2 -0
- package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-DftYRDo8.js} +17 -17
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-Bjsho_ha.js} +136 -19
- package/server/{deploy-window-ClLq1RYf.js → deploy-window-CM6W1-c6.js} +1 -1
- package/server/{deploy-window-jw4S_Y-c.js → deploy-window-DeP_OIRk.js} +77 -10
- package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-BpMoHlkR.js} +2 -2
- package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
- package/server/dist-Bd3vn0Hw.js +3 -0
- package/server/{dist-yfR7G1BL.js → dist-DyRx4cI7.js} +1 -1
- package/server/{docker-ClwPQaba.js → docker-BK7HIcBj.js} +2 -2
- package/server/{dod-BLphkhjs.js → dod-BrSfUHm0.js} +1 -1
- package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
- package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-DseivYEy.js} +4 -4
- package/server/{esm-shims-BZw-fTQ6.js → esm-shims-CbI3BVkl.js} +1 -1
- package/server/{event-store-DABarGNz.js → event-store-Cr5PQwFC.js} +1 -1
- package/server/{event-store-BVnON3vf.js → event-store-tdiY5eDZ.js} +3 -3
- package/server/{events-CmERlnwn.js → events-CC1dgUpx.js} +3 -3
- package/server/{events-LGeUehYW.js → events-CvvGK6LT.js} +1 -1
- package/server/{factory-CQNprtHe.js → factory-CynerjXO.js} +50 -13
- package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B0pmAz0a.js} +4 -4
- package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-_wUBRD3J.js} +2 -2
- package/server/{features--fOza5g5.js → features-Dhxz-wLc.js} +2 -2
- package/server/{feedback-target-Dqik2WTe.js → feedback-target-CPS15Vte.js} +7 -7
- package/server/{feedback-target-Dn9vfPpz.js → feedback-target-iygZwmMc.js} +1 -1
- package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-C9b6ccN1.js} +6 -5
- package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-qmiMbqTZ.js} +1 -1
- package/server/{flywheel-Q-38YhZG.js → flywheel-DMCUzDWg.js} +1 -1
- package/server/{flywheel-1Wd8WDlh.js → flywheel-DSSpWmqF.js} +13 -13
- package/server/{flywheel-DPUc8r3V.js → flywheel-DcBkQvgE.js} +14 -14
- package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
- package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
- package/server/forge-B-ZWyTRm.js +2 -0
- package/server/{forge-DBbDpiYc.js → forge-Ch9gCFod.js} +2 -2
- package/server/{from-hh6vTBGl.js → from-CJ_aH5jD.js} +1 -1
- package/server/{fts-db-6ponMie2.js → fts-db-CKgg0VKg.js} +2 -2
- package/server/{fts-operations-KIRK165y.js → fts-operations-BrL_VTRr.js} +2 -2
- package/server/git-utils-BVa07a4a.js +198 -0
- package/server/{git-utils-DmF5xkj8.js → git-utils-Dry_Ka_D.js} +1 -1
- package/server/{github-app-B3yfECo8.js → github-app-CMBdIFBQ.js} +11 -3
- package/server/{github-app-CeSVFL6C.js → github-app-CPfoFAdV.js} +1 -1
- package/server/{github-client-Dslipypz.js → github-client--XVlDpwM.js} +2 -2
- package/server/{github-client-4A6FgA8O.js → github-client-B4QsdE-X.js} +1 -1
- package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-BRbDW-qk.js} +2 -2
- package/server/harness-binary-CVio2m-u.js +106 -0
- package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-qHJBhy3Z.js} +9 -15
- package/server/{health-events-CZGZ5I-A.js → health-events-C9B8y1Hm.js} +2 -2
- package/server/{health-events-CnwV_SSz.js → health-events-CpfvuVmm.js} +1 -1
- package/server/{hooks-CoNscX84.js → hooks-DUXw8A0-.js} +2 -2
- package/server/{hooks-DvX33gY_.js → hooks-ltecuFqZ.js} +1 -1
- package/server/{hume-DSJt5eA_.js → hume-BEq0bUDg.js} +2 -2
- package/server/hume-B_DbflNM.js +3 -0
- package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
- package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
- package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-aQ1IxeI3.js} +2 -2
- package/server/{infra-DN2wSxle.js → infra-CzaSOgul.js} +4 -4
- package/server/{injection-DtlT8Akv.js → injection-DZ0PfYa4.js} +7 -7
- package/server/{injection-DK9zh_HL.js → injection-oNZeoDhL.js} +1 -1
- package/server/{inspect-agent-DKByUS_F.js → inspect-agent-DJKLWcVT.js} +15 -11
- package/server/inspect-agent-ch-F-5Ci.js +2 -0
- package/server/{internal-token-DhfFiwW7.js → internal-token-Bb4XeV2x.js} +2 -2
- package/server/{internal-token-7bYL5v6K.js → internal-token-DXdfprGr.js} +1 -1
- package/server/{io-BiM-7Zsx.js → io-B3_AHDfr.js} +160 -184
- package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-zhdvQicO.js} +7 -7
- package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CreaCkjW.js} +22 -22
- package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
- package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-B5ushCvE.js} +8 -8
- package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DabvBWUp.js} +1 -1
- package/server/{issues-XYtFMxrH.js → issues-B6ToV6x1.js} +2 -2
- package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-Dhflo1SH.js} +3 -3
- package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-BKPJm4Hv.js} +3 -3
- package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-DdWbHEBu.js} +4 -4
- package/server/{launcher-generator-5DJRiovn.js → launcher-generator-CHVm7bGT.js} +10 -9
- package/server/{layers-cZx7ibtV.js → layers-DzxSTGNA.js} +2 -2
- package/server/lifecycle-DfeyBDwA.js +121 -0
- package/server/lifecycle-io-Bsnr2K4F.js +3 -0
- package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-D8iNBcux.js} +37 -37
- package/server/{lifecycle-CE7619Xw.js → lifecycle-sycO16hj.js} +6 -6
- package/server/{linear-client-BLyN-NiP.js → linear-client-D4zqMnX7.js} +2 -2
- package/server/{linear-client-Bj1l4FOA.js → linear-client-DqhDQO9k.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-hSC2BENe.js → merge-C_ZEhbqI.js} +3 -3
- package/server/{merge-CwX2_AWm.js → merge-DK23JEdS.js} +1 -1
- package/server/{merge-agent-CnORPiri.js → merge-agent-BQM3a8z5.js} +1 -1
- package/server/{merge-agent-DnBsms_V.js → merge-agent-XrB80vfT.js} +369 -213
- package/server/{merge-batch-C2w2U2eK.js → merge-batch-Bwoyr8Je.js} +1 -1
- package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BsFjGrQ8.js} +2 -2
- package/server/merge-ops-DlB1IM0Y.js +2 -0
- package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-C1KIVr0s.js} +2 -2
- package/server/{merge-set-D7YNU1ZB.js → merge-set-DLz0MkGT.js} +3 -3
- package/server/{merge-set-DHkzPCJU.js → merge-set-DnSYdBEp.js} +1 -1
- package/server/{merge-sync-De1FYva5.js → merge-sync-DZ9dojJn.js} +2 -2
- package/server/{merge-sync-CpGA9Kg7.js → merge-sync-SSv3E-pl.js} +1 -1
- package/server/{merge-train-SvkRJZ-k.js → merge-train-DxDfBTjr.js} +3 -3
- package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-CyYQUksx.js} +4 -4
- package/server/{merge-verification-B3meGcXF.js → merge-verification-CSizH3HY.js} +4 -4
- package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-Dt8YPN5S.js} +2 -2
- package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-Cx3K0hHi.js} +11 -8
- package/server/node_modules/.package-lock.json +5 -5
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
- package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
- package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-neK8dHQk.js} +23 -14
- package/server/package-lock.json +6 -6
- package/server/package.json +1 -1
- package/server/{pan-dir-Rw17YjT1.js → pan-dir-DeVUgwA7.js} +78 -58
- package/server/{paths-FP8v3lTz.js → paths-_zEts6wc.js} +2 -2
- package/server/{pickup-xi3KTLaJ.js → pickup-Dd0Znxxy.js} +2 -2
- package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-0HaEGDlH.js} +190 -68
- package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-6iCJplFZ.js} +1 -1
- package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-D0ykk59O.js} +2 -2
- package/server/{project-pipelines-B59NfN44.js → project-pipelines-2sK1apsO.js} +2 -2
- package/server/projects-9SkRpES9.js +3 -0
- package/server/{prompts-CbqaVjbe.js → prompts-Dp4Tpk39.js} +2 -2
- package/server/providers-DKkBXhxU.js +3 -0
- package/server/{providers-d3pwXGVE.js → providers-DV7ec8l7.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
- package/server/public/assets/{dist-DQNg4CiF.js → dist-BWR4qFiV.js} +1 -1
- package/server/public/assets/{dist-CLSlc6cV.js → dist-DEmlBBNQ.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
- package/server/public/assets/index-CUr1xv8w.css +1 -0
- package/server/public/assets/{index-SLYGA8AQ.js → index-CsSuZQBI.js} +148 -145
- package/server/public/assets/{linear-6Fi3qnGg.js → linear-C9zFQpkX.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
- package/server/public/assets/{prod-ojHllFvN.js → prod-B1jCQihw.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
- package/server/public/index.html +54 -10
- package/server/{pull-requests-D3N6HQzI.js → pull-requests--Ib2jTgy.js} +1 -1
- package/server/{pull-requests-CjjPj7v6.js → pull-requests-CXIhdCYD.js} +13 -11
- package/server/{queries-B5hl7lMQ.js → queries-6d7Cdtm7.js} +723 -110
- package/server/{rally-Dp0Gb1DN.js → rally-B708-nZn.js} +3 -3
- package/server/{rally-api-DGaFz5L5.js → rally-api-nY0ZANw3.js} +2 -2
- package/server/{rally-api-CKr0O4DJ.js → rally-api-yjQ0TfHd.js} +1 -1
- package/server/{rally-client-SVbjGvqj.js → rally-client-B1EJhfV0.js} +4 -4
- package/server/{rally-client-Cqf6EX_r.js → rally-client-CULK2XAY.js} +1 -1
- package/server/rally-njs_mJrt.js +3 -0
- package/server/reap-terminal-sessions-MWnqdLCJ.js +4 -0
- package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-N3BTkmX_.js} +11 -28
- package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-Dp4eLkt4.js} +6 -6
- package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-kA7XngID.js} +1 -1
- package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-uWbZfjms.js} +6 -6
- package/server/record-t6V-3Dcj.js +3 -0
- package/server/{record-update-BlB8mpKO.js → record-update-DACtKh6_.js} +1 -1
- package/server/record-update-Dq0t2uBG.js +310 -0
- package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-BJtIQuag.js} +2 -2
- package/server/{release-engine-CSI4K6Oj.js → release-engine-DZpmGGzb.js} +5 -5
- package/server/{release-set-BywwggrE.js → release-set-hnXd_kga.js} +3 -3
- package/server/{remote-DYziAkiZ.js → remote-4tiENDaI.js} +3 -3
- package/server/{remote-cnoeuDWn.js → remote-Br-ZWVIP.js} +3 -3
- package/server/{remote-agents-BNORDWAX.js → remote-agents-CRCg1L4H.js} +1 -1
- package/server/{remote-agents-CZ2rc8I0.js → remote-agents-nmty1mLu.js} +6 -6
- package/server/{remote-completion-W67FNQ-A.js → remote-completion-BbWNd10K.js} +13 -13
- package/server/resume-CcKqnTvE.js +3 -0
- package/server/{review-agent-CSswH985.js → review-agent-DJRO8EG8.js} +1 -1
- package/server/{review-agent-CqSqSHkU.js → review-agent-sKkE1FEL.js} +23 -23
- package/server/{review-artifacts-BBgnd5df.js → review-artifacts-BLbSC4ke.js} +5 -5
- package/server/{review-context-Ctp9BdNJ.js → review-context-BgX3lcCx.js} +9 -9
- package/server/{review-status-CCgPVK1h.js → review-status-A7quS5KJ.js} +56 -39
- package/server/review-status-C6n6-9f_.js +3 -0
- package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-tbOn_A_u.js} +3 -3
- package/server/review-status-source-CxuEjLGg.js +39 -0
- package/server/{review-status-sync-jnLgd04F.js → review-status-sync-BhSQ0d0l.js} +2 -2
- package/server/{review-status-sync-C792ksoJ.js → review-status-sync-To3-iS-N.js} +1 -1
- package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
- package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CTRNtzXO.js} +7 -7
- package/server/{rollup-B3kQmNpl.js → rollup-B53Y81xK.js} +1 -1
- package/server/{rollup-CLj_AK9f.js → rollup-WA0VD-Rr.js} +8 -8
- package/server/{scanner-C4NeC4FE.js → scanner-D2743cp8.js} +11 -7
- package/server/{sequence-io-Ce-6grIY.js → sequence-io-Cg0zYj_E.js} +4 -4
- package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-BGY8gjg-.js} +5 -5
- package/server/server.js +1348 -963
- package/server/{service-CqAY8Kmk.js → service-DCpB_SGd.js} +154 -51
- package/server/{session-fork-uNo4rMRA.js → session-fork-BQ8_6H32.js} +2 -2
- package/server/{session-history-DUehL3KN.js → session-history-CVZDpS3c.js} +4 -4
- package/server/{settings-DP2OYLXL.js → settings-BZ5m1UCl.js} +3 -3
- package/server/settings-D0OSwos5.js +2 -0
- package/server/{settings-D9grjmaP.js → settings-ylxwqwQG.js} +2 -2
- package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-BlxG6Xye.js} +3 -3
- package/server/{shadow-state-CDxEuPlE.js → shadow-state-C2_epgx2.js} +1 -1
- package/server/{shadow-state-a_ztFBJe.js → shadow-state-Dh-HzF2J.js} +2 -2
- package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-4bvjn9b3.js} +2 -2
- package/server/{ship-log-DDcueaIR.js → ship-log-ClSMIzZX.js} +1 -1
- package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-CHIxLr_d.js} +1 -1
- package/server/{smart-compaction--Oj65Uov.js → smart-compaction-r4pHQBIr.js} +7 -7
- package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-DWAorh2B.js} +25 -20
- package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-KC_UduxD.js} +1 -1
- package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-BXhav38U.js} +1 -1
- package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-DtrYvGJ-.js} +5 -5
- package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
- package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-DJ3RzKxW.js} +3 -3
- package/server/{specialists-D0VBf8g_.js → specialists-D5fRZXmN.js} +1 -1
- package/server/specialists-DVj0hvaL.js +3 -0
- package/server/{specialists-CYRwELzc.js → specialists-DyFeedjn.js} +66 -76
- package/server/{specialists-DAegTvRt.js → specialists-JVO00bs7.js} +374 -220
- package/server/specs-nN45DG2X.js +3 -0
- package/server/{src-OLoJhUiJ.js → src-CG9mCkP6.js} +6 -6
- package/server/{src-BqTcrfO_.js → src-CMTQGyCK.js} +3 -3
- package/server/{src-Dpq1yFIl.js → src-U7_kTPEE.js} +338 -4
- package/server/{stack-health-I713ELld.js → stack-health-Df0YEZKa.js} +1 -1
- package/server/{stack-health-DV_f-lK0.js → stack-health-puygdaMd.js} +2 -2
- package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-BbFwCTb0.js} +4 -4
- package/server/{staleness-BbsGxmF2.js → staleness-Bpy41ngS.js} +15 -3
- package/server/{staleness-zGp4P1hd.js → staleness-Cbl_w4Bw.js} +1 -1
- package/server/{state-home-DixkE-up.js → state-home-CIGjwNfJ.js} +119 -54
- package/server/state-migrate-Dkzaxvny.js +487 -0
- package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CzEov_fq.js} +27 -21
- package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-sY_MHHgQ.js} +1 -1
- package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
- package/server/{summary-fork-CdLn8Chr.js → summary-fork-D8bXjCr7.js} +2 -2
- package/server/{summary-fork-f3DpgjXh.js → summary-fork-DHhJIsAL.js} +8 -8
- package/server/{supervisor-Ch8CDuoF.js → supervisor-BO-Zk_h-.js} +3 -3
- package/server/supervisor-BPy-o1A8.js +2 -0
- package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-CQ_fwUWF.js} +4 -4
- package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-Bza0ffAh.js} +24 -44
- package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-CEgauF4U.js} +15 -15
- package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-DXDt0Xa-.js} +7 -7
- package/server/{test-verdict-BRiSu7eW.js → test-verdict-CmUBK5cT.js} +1 -1
- package/server/{test-verdict-BQ1yx7d4.js → test-verdict-DFjjIHR5.js} +1 -1
- package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BDtLOIlO.js} +2 -2
- package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-DL566HbH.js} +1 -1
- package/server/tmux-DoThH6aj.js +3 -0
- package/server/{tmux-y1blSxks.js → tmux-ftABRAmc.js} +76 -44
- package/server/{token-LUrbM9sU.js → token-CsOhvw42.js} +2 -2
- package/server/{token-util-BZaDAQ8S.js → token-util-CTmczIfW.js} +1 -1
- package/server/token-util-DrHg8abn.js +3 -0
- package/server/{tracker-config-DSFZBdXP.js → tracker-config-B4itFzDo.js} +2 -2
- package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-BePq_oj-.js} +1 -1
- package/server/{tracker-utils-DiceZN3a.js → tracker-utils-tnxxqROg.js} +2 -2
- package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-m73vGebA.js} +1 -1
- package/server/{tunnel-DTng1rfQ.js → tunnel-B2vxjx_b.js} +3 -3
- package/server/{tunnel-WcJImbAC.js → tunnel-Cgj-IGIl.js} +1 -1
- package/server/{types-BjaZ1oqH.js → types-BBNjPcqU.js} +1 -1
- package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
- package/server/{uat-train-BpLnp7Cx.js → uat-train-CuEn0t9M.js} +28 -28
- package/server/{uat-train-Wismge7h.js → uat-train-cKfM-_WW.js} +1 -1
- package/server/{validation-BA4e5EGm.js → validation-B5JxoPUS.js} +259 -9
- package/server/{validation-CUWamZ4X.js → validation-CIi6pnI2.js} +1 -1
- package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BcnIbigL.js} +1 -1
- package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-C-lIHfUa.js} +1 -1
- package/server/{verification-runner-gAzh3cVD.js → verification-runner-Br0S_Ous.js} +103 -37
- package/server/{verification-runner-Dcksl_P-.js → verification-runner-CDj4lD4t.js} +1 -1
- package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-DKpNNW5i.js} +1 -1
- package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-Yb2bd3Fq.js} +16 -15
- package/server/{workflows-B8ROFlfw.js → workflows-C9WmILql.js} +39 -77
- package/server/workflows-D90rMOya.js +2 -0
- package/server/{workspace-DhTDA8nB.js → workspace-BVl4rihN.js} +3 -3
- package/server/{workspace-DSjUJaJN.js → workspace-DuUdndHe.js} +1 -1
- package/server/{workspace-config-BAAsAv-o.js → workspace-config-cEGcO6UT.js} +1 -1
- package/server/{workspace-manager-CcujONCR.js → workspace-manager-ZTdJAy9M.js} +1 -1
- package/server/{workspace-manager-DsN52IMG.js → workspace-manager-hLUv3ADC.js} +23 -16
- package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-CskwzzhL.js} +2 -2
- package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-DNpMixRq.js} +1 -1
- package/server/{workspaces-Dmlh1YXm.js → workspaces-hWvy9eKs.js} +276 -110
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +363 -71
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- package/sync-sources/skills/pan/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +26 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/server/agent-state-BV_6RHnO.js +0 -3
- package/server/agents-Czz6R57Z.js +0 -3
- package/server/cli-ChErG518.js +0 -3
- package/server/codex-BBeZ8c3s.js +0 -3
- package/server/deacon-swarm-uudlSCLM.js +0 -2
- package/server/dist-BEDL2alY.js +0 -3
- package/server/forge-DbhJyH6u.js +0 -2
- package/server/git-utils-Bkxzr1Xf.js +0 -129
- package/server/hume-BrA1tUuk.js +0 -3
- package/server/inspect-agent-CyXNo9fM.js +0 -2
- package/server/lifecycle-io-CUpsxG0p.js +0 -3
- package/server/merge-ops-BpTtuO8x.js +0 -2
- package/server/projects-IRHJIPYC.js +0 -3
- package/server/providers-BqCdTryq.js +0 -3
- package/server/public/assets/index-C6NLz_1S.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
- package/server/rally-DGimSRBQ.js +0 -3
- package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
- package/server/record-update-RviRDSNs.js +0 -168
- package/server/record-us0YECMO.js +0 -3
- package/server/resume-OyN3dEXE.js +0 -3
- package/server/review-status-DXeqFpk5.js +0 -3
- package/server/settings-BaPXXJsT.js +0 -2
- package/server/specialists-C6WkeKFK.js +0 -3
- package/server/specs-BsNcum0h.js +0 -3
- package/server/state-migrate-_zJJ6XKE.js +0 -362
- package/server/supervisor-Qy1QecAs.js +0 -2
- package/server/tmux-HQLgwo_C.js +0 -3
- package/server/token-util-Cg-QnowA.js +0 -3
- package/server/workflows-C5c-RPsY.js +0 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Tn as init_projects, Vr as init_paths, ar as GitError, f as loadConfigSync, jn as loadProjectsConfigSync, mr as init_errors, pr as VcsError, t as init_config_yaml, wr as OVERDECK_HOME } from "./config-yaml-DvyMuOle.js";
|
|
3
3
|
import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-DDlOIAML.js";
|
|
4
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
5
|
-
import { D as killSession,
|
|
6
|
-
import {
|
|
7
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
8
|
-
import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-
|
|
9
|
-
import { r as verifyMergedBeforeLifecycle, t as init_merge_verification } from "./merge-verification-
|
|
10
|
-
import { i as
|
|
11
|
-
import { i as
|
|
4
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CzaSOgul.js";
|
|
5
|
+
import { D as killSession, H as sessionExists, M as listSessionNames, i as capturePane, w as init_tmux, z as sendKeys } from "./tmux-ftABRAmc.js";
|
|
6
|
+
import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status, p as markWorkspaceStuck } from "./review-status-A7quS5KJ.js";
|
|
7
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-tnxxqROg.js";
|
|
8
|
+
import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B0pmAz0a.js";
|
|
9
|
+
import { r as verifyMergedBeforeLifecycle, t as init_merge_verification } from "./merge-verification-CSizH3HY.js";
|
|
10
|
+
import { i as init_git_utils, t as cleanupStaleLocks } from "./git-utils-BVa07a4a.js";
|
|
11
|
+
import { i as runQualityGates, n as init_validation } from "./validation-B5JxoPUS.js";
|
|
12
12
|
import { Data, Effect } from "effect";
|
|
13
13
|
import { appendFileSync, existsSync, mkdirSync } from "fs";
|
|
14
14
|
import { basename, dirname, join, relative } from "path";
|
|
@@ -19,7 +19,7 @@ import { promisify } from "util";
|
|
|
19
19
|
//#region ../../lib/cloister/merge-agent-step0.ts
|
|
20
20
|
async function shouldRestartForPostMerge(repoRoot, dependencies = {}) {
|
|
21
21
|
if ((await (dependencies.computeStaleness ?? (async () => {
|
|
22
|
-
const [{ getBuildInfo }, { computeBuildStaleness }] = await Promise.all([import("./build-info-
|
|
22
|
+
const [{ getBuildInfo }, { computeBuildStaleness }] = await Promise.all([import("./build-info-DgTqZkL5.js"), import("./staleness-Cbl_w4Bw.js")]);
|
|
23
23
|
return computeBuildStaleness({
|
|
24
24
|
repoRoot,
|
|
25
25
|
buildCommit: getBuildInfo().buildCommit
|
|
@@ -28,7 +28,7 @@ async function shouldRestartForPostMerge(repoRoot, dependencies = {}) {
|
|
|
28
28
|
(dependencies.log ?? console.log)("Running build already contains origin/main build inputs — skipping deploy restart");
|
|
29
29
|
return false;
|
|
30
30
|
}
|
|
31
|
-
const reason = await (dependencies.getBlockReason ?? (async () => (await import("./deploy-window-
|
|
31
|
+
const reason = await (dependencies.getBlockReason ?? (async () => (await import("./deploy-window-CM6W1-c6.js")).getDeployBlockReason()))();
|
|
32
32
|
if (reason) {
|
|
33
33
|
(dependencies.log ?? console.log)(`Deploy window unsafe (${reason}) — deferring deploy to the staleness patrol`);
|
|
34
34
|
return false;
|
|
@@ -37,6 +37,175 @@ async function shouldRestartForPostMerge(repoRoot, dependencies = {}) {
|
|
|
37
37
|
}
|
|
38
38
|
var init_merge_agent_step0 = __esmMin((() => {}));
|
|
39
39
|
//#endregion
|
|
40
|
+
//#region ../../lib/cloister/sync-main-git.ts
|
|
41
|
+
function killCommandTree(child) {
|
|
42
|
+
if (!child?.pid) return;
|
|
43
|
+
try {
|
|
44
|
+
if (process.platform === "win32") child.kill("SIGKILL");
|
|
45
|
+
else process.kill(-child.pid, "SIGKILL");
|
|
46
|
+
} catch {
|
|
47
|
+
try {
|
|
48
|
+
child.kill("SIGKILL");
|
|
49
|
+
} catch {}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function runSyncGitCommand(command, options) {
|
|
53
|
+
if (options.signal?.aborted) return Promise.reject(new SyncGitCommandAbortError(command));
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
let child;
|
|
56
|
+
let termination;
|
|
57
|
+
const finishTermination = (kind) => {
|
|
58
|
+
if (termination) return;
|
|
59
|
+
termination = kind;
|
|
60
|
+
killCommandTree(child);
|
|
61
|
+
};
|
|
62
|
+
const timeout = setTimeout(() => finishTermination("timeout"), options.timeout);
|
|
63
|
+
const onAbort = () => finishTermination("abort");
|
|
64
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
65
|
+
child = execDetached(command, {
|
|
66
|
+
cwd: options.cwd,
|
|
67
|
+
encoding: "utf-8",
|
|
68
|
+
detached: process.platform !== "win32",
|
|
69
|
+
timeout: options.timeout
|
|
70
|
+
}, (error, stdout, stderr) => {
|
|
71
|
+
clearTimeout(timeout);
|
|
72
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
73
|
+
if (termination === "abort") reject(Object.assign(new SyncGitCommandAbortError(command), {
|
|
74
|
+
stdout,
|
|
75
|
+
stderr
|
|
76
|
+
}));
|
|
77
|
+
else if (termination === "timeout") reject(Object.assign(new SyncGitCommandTimeoutError(command, options.timeout), {
|
|
78
|
+
stdout,
|
|
79
|
+
stderr
|
|
80
|
+
}));
|
|
81
|
+
else if (error?.killed) reject(Object.assign(new SyncGitCommandTimeoutError(command, options.timeout), {
|
|
82
|
+
stdout,
|
|
83
|
+
stderr
|
|
84
|
+
}));
|
|
85
|
+
else if (error) reject(Object.assign(error, {
|
|
86
|
+
stdout,
|
|
87
|
+
stderr
|
|
88
|
+
}));
|
|
89
|
+
else resolve({
|
|
90
|
+
stdout,
|
|
91
|
+
stderr
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
if (options.signal?.aborted) finishTermination("abort");
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async function probeGitOperationHeads(projectPath, timeoutMs, signal) {
|
|
98
|
+
const present = [];
|
|
99
|
+
for (const operationHead of GIT_OPERATION_HEADS) try {
|
|
100
|
+
await runSyncGitCommand(`git rev-parse -q --verify ${operationHead}`, {
|
|
101
|
+
cwd: projectPath,
|
|
102
|
+
timeout: timeoutMs,
|
|
103
|
+
signal
|
|
104
|
+
});
|
|
105
|
+
present.push(operationHead);
|
|
106
|
+
} catch (error) {
|
|
107
|
+
if (error instanceof SyncGitCommandAbortError) throw error;
|
|
108
|
+
if (error instanceof SyncGitCommandTimeoutError) return {
|
|
109
|
+
success: false,
|
|
110
|
+
present,
|
|
111
|
+
reason: `${operationHead} probe timed out after ${timeoutMs / 1e3}s`
|
|
112
|
+
};
|
|
113
|
+
if (error?.code !== 1) return {
|
|
114
|
+
success: false,
|
|
115
|
+
present,
|
|
116
|
+
reason: `${operationHead} probe failed: ${error instanceof Error ? error.message : String(error)}`
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
success: true,
|
|
121
|
+
present
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async function ensureSyncGitQuiescent(projectPath, abortMerge, timeoutMs = 3e4) {
|
|
125
|
+
const controller = new AbortController();
|
|
126
|
+
const deadline = Date.now() + timeoutMs;
|
|
127
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
128
|
+
const remaining = (stage) => {
|
|
129
|
+
const budget = deadline - Date.now();
|
|
130
|
+
if (controller.signal.aborted || budget <= 0) throw new UnsafeSyncMainStateError(`Git cleanup timed out after ${timeoutMs / 1e3}s while ${stage}`);
|
|
131
|
+
return budget;
|
|
132
|
+
};
|
|
133
|
+
try {
|
|
134
|
+
let lockCleanup;
|
|
135
|
+
try {
|
|
136
|
+
lockCleanup = await Effect.runPromise(cleanupStaleLocks(projectPath, {
|
|
137
|
+
signal: controller.signal,
|
|
138
|
+
processProbeTimeoutMs: remaining("checking Git lock owners")
|
|
139
|
+
}));
|
|
140
|
+
} catch (error) {
|
|
141
|
+
throw new UnsafeSyncMainStateError(`Could not verify Git lock state after cancellation: ${error instanceof Error ? error.message : String(error)}`);
|
|
142
|
+
}
|
|
143
|
+
if (lockCleanup.errors.length > 0) throw new UnsafeSyncMainStateError(`Could not establish Git quiescence: ${lockCleanup.errors.map(({ file, error }) => `${file}: ${error}`).join("; ")}`);
|
|
144
|
+
let before;
|
|
145
|
+
try {
|
|
146
|
+
before = await probeGitOperationHeads(projectPath, remaining("checking Git operation state"), controller.signal);
|
|
147
|
+
} catch (error) {
|
|
148
|
+
throw new UnsafeSyncMainStateError(`Could not verify Git operation state: ${error instanceof Error ? error.message : String(error)}`);
|
|
149
|
+
}
|
|
150
|
+
if (!before.success) throw new UnsafeSyncMainStateError(`Could not verify Git operation state: ${before.reason}`);
|
|
151
|
+
if (before.present.filter((head) => head !== "MERGE_HEAD").length > 0 || before.present.includes("MERGE_HEAD") && !abortMerge) throw new UnsafeSyncMainStateError(`Git operation remains active after cancellation: ${before.present.join(", ")}`);
|
|
152
|
+
if (before.present.includes("MERGE_HEAD")) try {
|
|
153
|
+
await runSyncGitCommand("git merge --abort", {
|
|
154
|
+
cwd: projectPath,
|
|
155
|
+
timeout: remaining("aborting the timed-out merge"),
|
|
156
|
+
signal: controller.signal
|
|
157
|
+
});
|
|
158
|
+
} catch (error) {
|
|
159
|
+
throw new UnsafeSyncMainStateError(`Could not abort timed-out sync merge: ${error instanceof Error ? error.message : String(error)}`);
|
|
160
|
+
}
|
|
161
|
+
let after;
|
|
162
|
+
try {
|
|
163
|
+
after = await probeGitOperationHeads(projectPath, remaining("verifying Git cleanup"), controller.signal);
|
|
164
|
+
} catch (error) {
|
|
165
|
+
throw new UnsafeSyncMainStateError(`Could not verify Git operation state after cleanup: ${error instanceof Error ? error.message : String(error)}`);
|
|
166
|
+
}
|
|
167
|
+
if (!after.success) throw new UnsafeSyncMainStateError(`Could not verify Git operation state after cleanup: ${after.reason}`);
|
|
168
|
+
if (after.present.length > 0) throw new UnsafeSyncMainStateError(`Git operation remains active after cleanup: ${after.present.join(", ")}`);
|
|
169
|
+
} finally {
|
|
170
|
+
clearTimeout(timeout);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
var GIT_OPERATION_HEADS, SyncGitCommandTimeoutError, SyncGitCommandAbortError, UnsafeSyncMainStateError, execDetached;
|
|
174
|
+
var init_sync_main_git = __esmMin((() => {
|
|
175
|
+
init_git_utils();
|
|
176
|
+
GIT_OPERATION_HEADS = [
|
|
177
|
+
"MERGE_HEAD",
|
|
178
|
+
"REBASE_HEAD",
|
|
179
|
+
"CHERRY_PICK_HEAD",
|
|
180
|
+
"REVERT_HEAD"
|
|
181
|
+
];
|
|
182
|
+
SyncGitCommandTimeoutError = class extends Error {
|
|
183
|
+
killed = true;
|
|
184
|
+
constructor(command, budgetMs) {
|
|
185
|
+
super(`${command} timed out after ${budgetMs / 1e3}s`);
|
|
186
|
+
this.command = command;
|
|
187
|
+
this.budgetMs = budgetMs;
|
|
188
|
+
this.name = "SyncGitCommandTimeoutError";
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
SyncGitCommandAbortError = class extends Error {
|
|
192
|
+
code = "ABORT_ERR";
|
|
193
|
+
killed = true;
|
|
194
|
+
constructor(command) {
|
|
195
|
+
super(`${command} was cancelled`);
|
|
196
|
+
this.command = command;
|
|
197
|
+
this.name = "SyncGitCommandAbortError";
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
UnsafeSyncMainStateError = class extends Error {
|
|
201
|
+
constructor(message) {
|
|
202
|
+
super(message);
|
|
203
|
+
this.name = "UnsafeSyncMainStateError";
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
execDetached = exec;
|
|
207
|
+
}));
|
|
208
|
+
//#endregion
|
|
40
209
|
//#region ../../lib/overdeck/git-activity.ts
|
|
41
210
|
function overdeckDb() {
|
|
42
211
|
return getOverdeckDatabaseSync();
|
|
@@ -331,29 +500,26 @@ function parseStatusPath(line) {
|
|
|
331
500
|
* Respects .gitignore (no -f), unstages excluded paths, and leaves excluded
|
|
332
501
|
* paths dirty so the sync can proceed. Returns success=false on git errors.
|
|
333
502
|
*/
|
|
334
|
-
async function autoCommitWorkspaceChangesBeforeSync(projectPath, issueId) {
|
|
503
|
+
async function autoCommitWorkspaceChangesBeforeSync(projectPath, issueId, signal) {
|
|
504
|
+
const run = (command, timeout = SYNC_GIT_STATUS_TIMEOUT_MS) => runSyncGitCommand(command, {
|
|
505
|
+
cwd: projectPath,
|
|
506
|
+
timeout,
|
|
507
|
+
signal
|
|
508
|
+
});
|
|
335
509
|
try {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
success: false,
|
|
348
|
-
committed: false,
|
|
349
|
-
reason: `Refusing to auto-commit while ${operationHead} exists; finish or abort the in-progress Git operation first`
|
|
350
|
-
};
|
|
351
|
-
} catch {}
|
|
510
|
+
const operationHeads = await probeGitOperationHeads(projectPath, SYNC_GIT_STATUS_TIMEOUT_MS, signal);
|
|
511
|
+
if (!operationHeads.success) return {
|
|
512
|
+
success: false,
|
|
513
|
+
committed: false,
|
|
514
|
+
reason: operationHeads.reason
|
|
515
|
+
};
|
|
516
|
+
if (operationHeads.present.length > 0) return {
|
|
517
|
+
success: false,
|
|
518
|
+
committed: false,
|
|
519
|
+
reason: `Refusing to auto-commit while ${operationHeads.present[0]} exists; finish or abort the in-progress Git operation first`
|
|
520
|
+
};
|
|
352
521
|
try {
|
|
353
|
-
const { stdout: conflictMarkers } = await
|
|
354
|
-
cwd: projectPath,
|
|
355
|
-
encoding: "utf-8"
|
|
356
|
-
});
|
|
522
|
+
const { stdout: conflictMarkers } = await run("git grep -n -I -E '^(<<<<<<<( |$)|=======$|>>>>>>>( |$))' -- .");
|
|
357
523
|
if (conflictMarkers.trim()) return {
|
|
358
524
|
success: false,
|
|
359
525
|
committed: false,
|
|
@@ -366,45 +532,31 @@ async function autoCommitWorkspaceChangesBeforeSync(projectPath, issueId) {
|
|
|
366
532
|
reason: `Failed to scan for conflict markers: ${error.message}`
|
|
367
533
|
};
|
|
368
534
|
}
|
|
369
|
-
const { stdout: statusOut } = await
|
|
370
|
-
cwd: projectPath,
|
|
371
|
-
encoding: "utf-8"
|
|
372
|
-
});
|
|
535
|
+
const { stdout: statusOut } = await run("git status --porcelain");
|
|
373
536
|
if (!statusOut.trim()) return {
|
|
374
537
|
success: true,
|
|
375
538
|
committed: false,
|
|
376
539
|
reason: "no uncommitted changes"
|
|
377
540
|
};
|
|
378
|
-
await
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
});
|
|
382
|
-
await execAsync(`git reset HEAD -- ${AUTO_COMMIT_EXCLUDED_PATHS.map((p) => p.endsWith("/") ? p.slice(0, -1) : p).join(" ")}`, {
|
|
383
|
-
cwd: projectPath,
|
|
384
|
-
encoding: "utf-8"
|
|
385
|
-
});
|
|
386
|
-
const { stdout: diffStat } = await execAsync("git diff --cached --stat", {
|
|
387
|
-
cwd: projectPath,
|
|
388
|
-
encoding: "utf-8"
|
|
389
|
-
});
|
|
541
|
+
await run("git add -A");
|
|
542
|
+
await run(`git reset HEAD -- ${AUTO_COMMIT_EXCLUDED_PATHS.map((p) => p.endsWith("/") ? p.slice(0, -1) : p).join(" ")}`);
|
|
543
|
+
const { stdout: diffStat } = await run("git diff --cached --stat");
|
|
390
544
|
if (!diffStat.trim()) return {
|
|
391
545
|
success: true,
|
|
392
546
|
committed: false,
|
|
393
547
|
reason: "only excluded/ignored changes remain"
|
|
394
548
|
};
|
|
395
|
-
await
|
|
396
|
-
cwd: projectPath,
|
|
397
|
-
encoding: "utf-8"
|
|
398
|
-
});
|
|
549
|
+
await run(`git commit -m "${issueId ? `chore: auto-commit before sync with main (${issueId})` : "chore: auto-commit before sync with main"}"`, SYNC_GIT_COMMIT_TIMEOUT_MS);
|
|
399
550
|
return {
|
|
400
551
|
success: true,
|
|
401
552
|
committed: true
|
|
402
553
|
};
|
|
403
554
|
} catch (error) {
|
|
555
|
+
if (error instanceof SyncGitCommandAbortError || error instanceof SyncGitCommandTimeoutError) await ensureSyncGitQuiescent(projectPath, false);
|
|
404
556
|
return {
|
|
405
557
|
success: false,
|
|
406
558
|
committed: false,
|
|
407
|
-
reason: `Failed to auto-commit: ${error.message}`
|
|
559
|
+
reason: error instanceof SyncGitCommandTimeoutError && error.command.startsWith("git commit ") ? `Auto-commit git commit timed out after ${SYNC_GIT_COMMIT_TIMEOUT_MS / 1e3}s` : `Failed to auto-commit: ${error.message}`
|
|
408
560
|
};
|
|
409
561
|
}
|
|
410
562
|
}
|
|
@@ -447,7 +599,7 @@ async function notifyTldrDaemon(projectPath, _sourceBranch) {
|
|
|
447
599
|
return;
|
|
448
600
|
}
|
|
449
601
|
console.log(`[merge-agent] Found ${changedFiles.length} changed source files to reindex`);
|
|
450
|
-
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-
|
|
602
|
+
const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DL566HbH.js");
|
|
451
603
|
const tldrService = getTldrDaemonServiceSync(projectPath, venvPath);
|
|
452
604
|
if (!(await tldrService.getStatus()).running) {
|
|
453
605
|
console.log(`[merge-agent] TLDR daemon not running, skipping notification`);
|
|
@@ -477,7 +629,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
477
629
|
}
|
|
478
630
|
const run = (async () => {
|
|
479
631
|
try {
|
|
480
|
-
const { findSpecByIssue } = await import("./specs-
|
|
632
|
+
const { findSpecByIssue } = await import("./specs-nN45DG2X.js");
|
|
481
633
|
const spec = await Effect.runPromise(findSpecByIssue(projectPath, issueId));
|
|
482
634
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
483
635
|
console.log(`[merge-agent] ${issueId} is closed out (spec ${spec.status}) — skipping post-merge lifecycle`);
|
|
@@ -539,7 +691,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
539
691
|
}
|
|
540
692
|
console.log(`[merge-agent] Running post-merge verify handoff for ${issueId}`);
|
|
541
693
|
try {
|
|
542
|
-
const { cleanupMergedLabels } = await import("./label-cleanup-
|
|
694
|
+
const { cleanupMergedLabels } = await import("./label-cleanup-BKPJm4Hv.js");
|
|
543
695
|
const ghResolved = resolveGitHubIssueSync(issueId);
|
|
544
696
|
const labelCtx = ghResolved.isGitHub ? {
|
|
545
697
|
issueId,
|
|
@@ -588,8 +740,8 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
588
740
|
console.warn(`[merge-agent] Async post-merge release trigger failed for ${issueId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
589
741
|
});
|
|
590
742
|
try {
|
|
591
|
-
const { setAgentPaused, getAgentState } = await import("./agents-
|
|
592
|
-
const { killSession, sessionExists } = await import("./tmux-
|
|
743
|
+
const { setAgentPaused, getAgentState } = await import("./agents-FlIgQ3ql.js");
|
|
744
|
+
const { killSession, sessionExists } = await import("./tmux-DoThH6aj.js");
|
|
593
745
|
const issueLower = issueId.toLowerCase();
|
|
594
746
|
const reason = "awaiting close-out (verify on main)";
|
|
595
747
|
for (const agentId of [`agent-${issueLower}`, `planning-${issueLower}`]) {
|
|
@@ -614,8 +766,8 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
614
766
|
console.warn(`[merge-agent] Could not pause or kill agent sessions: ${err}`);
|
|
615
767
|
}
|
|
616
768
|
try {
|
|
617
|
-
const { killAllReviewerSessions } = await import("./review-agent-
|
|
618
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
769
|
+
const { killAllReviewerSessions } = await import("./review-agent-DJRO8EG8.js");
|
|
770
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
619
771
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
620
772
|
if (projectKey) {
|
|
621
773
|
const { killed } = await Effect.runPromise(killAllReviewerSessions(projectKey, issueId));
|
|
@@ -629,7 +781,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
629
781
|
}
|
|
630
782
|
await killPostMergeRoleSessions(issueId);
|
|
631
783
|
try {
|
|
632
|
-
const { createResetMarker } = await import("./cli-
|
|
784
|
+
const { createResetMarker } = await import("./cli-BsVIHwzC.js");
|
|
633
785
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
634
786
|
const marker = await createResetMarker({
|
|
635
787
|
projectId: basename(projectPath),
|
|
@@ -644,8 +796,8 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
|
|
|
644
796
|
console.warn(`[merge-agent] Memory reset marker creation failed (non-fatal): ${err}`);
|
|
645
797
|
}
|
|
646
798
|
try {
|
|
647
|
-
const { findWorkspacePath } = await import("./archive-planning-
|
|
648
|
-
const { stopWorkspaceDocker } = await import("./workspace-manager-
|
|
799
|
+
const { findWorkspacePath } = await import("./archive-planning-zkJb3BeM.js");
|
|
800
|
+
const { stopWorkspaceDocker } = await import("./workspace-manager-ZTdJAy9M.js");
|
|
649
801
|
const issueLower = issueId.toLowerCase();
|
|
650
802
|
const workspacePath = findWorkspacePath(projectPath, issueLower);
|
|
651
803
|
if (workspacePath) {
|
|
@@ -676,7 +828,7 @@ async function triggerPostMergeReleaseIfConfigured(issueId, projectPath) {
|
|
|
676
828
|
console.log(`[merge-agent] Release already started or completed for ${issueId} (${currentStatus}), skipping`);
|
|
677
829
|
return;
|
|
678
830
|
}
|
|
679
|
-
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-
|
|
831
|
+
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-9SkRpES9.js");
|
|
680
832
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
681
833
|
if (!(resolved ? getProjectSync(resolved.projectKey) : null)?.release) {
|
|
682
834
|
setReviewStatusSync(issueId, {
|
|
@@ -686,7 +838,7 @@ async function triggerPostMergeReleaseIfConfigured(issueId, projectPath) {
|
|
|
686
838
|
console.log(`[merge-agent] No release config for ${issueId}; marked release skipped`);
|
|
687
839
|
return;
|
|
688
840
|
}
|
|
689
|
-
const { runRelease } = await import("./release-engine-
|
|
841
|
+
const { runRelease } = await import("./release-engine-DZpmGGzb.js");
|
|
690
842
|
try {
|
|
691
843
|
await runRelease(issueId, projectPath);
|
|
692
844
|
} catch (err) {
|
|
@@ -705,10 +857,10 @@ async function triggerPostMergeReleaseIfConfigured(issueId, projectPath) {
|
|
|
705
857
|
async function transitionIssueToVerifyingOnMain(issueId, projectPath) {
|
|
706
858
|
const [effectModule, issueLifecycleModule, githubModule, linearModule, rallyModule, errorsModule] = await Promise.all([
|
|
707
859
|
import("effect"),
|
|
708
|
-
import("./issue-lifecycle-
|
|
709
|
-
import("./github-client-
|
|
710
|
-
import("./linear-client-
|
|
711
|
-
import("./rally-client-
|
|
860
|
+
import("./issue-lifecycle-Dy4vd0Oa.js"),
|
|
861
|
+
import("./github-client-B4QsdE-X.js"),
|
|
862
|
+
import("./linear-client-DqhDQO9k.js"),
|
|
863
|
+
import("./rally-client-CULK2XAY.js"),
|
|
712
864
|
import("./typed-errors-BHhE85Ul.js")
|
|
713
865
|
]);
|
|
714
866
|
const { Effect, Layer } = effectModule;
|
|
@@ -922,49 +1074,50 @@ function parseAgentOutput(output) {
|
|
|
922
1074
|
/**
|
|
923
1075
|
* Get conflict files from git status (async)
|
|
924
1076
|
*/
|
|
925
|
-
|
|
1077
|
+
function isSyncGitTermination(error) {
|
|
1078
|
+
return error instanceof SyncGitCommandAbortError || error instanceof SyncGitCommandTimeoutError;
|
|
1079
|
+
}
|
|
1080
|
+
async function getConflictFiles(projectPath, signal) {
|
|
926
1081
|
try {
|
|
927
|
-
const { stdout: status } = await
|
|
1082
|
+
const { stdout: status } = await runSyncGitCommand("git diff --name-only --diff-filter=U", {
|
|
928
1083
|
cwd: projectPath,
|
|
929
|
-
|
|
1084
|
+
timeout: SYNC_GIT_STATUS_TIMEOUT_MS,
|
|
1085
|
+
signal
|
|
930
1086
|
});
|
|
931
|
-
return status.split("\n").map((line) => line.trim()).filter(
|
|
1087
|
+
return status.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
932
1088
|
} catch (error) {
|
|
1089
|
+
if (isSyncGitTermination(error)) throw error;
|
|
933
1090
|
console.error("Failed to get conflict files:", error);
|
|
934
1091
|
return [];
|
|
935
1092
|
}
|
|
936
1093
|
}
|
|
937
|
-
async function resolveMainPreferredSyncConflicts(projectPath, conflictFiles) {
|
|
1094
|
+
async function resolveMainPreferredSyncConflicts(projectPath, conflictFiles, signal) {
|
|
938
1095
|
if (conflictFiles.length === 0 || !conflictFiles.every(isSyncMainMainPreferredPath)) return {
|
|
939
1096
|
success: false,
|
|
940
1097
|
reason: "conflicts include non-pipeline-owned files"
|
|
941
1098
|
};
|
|
1099
|
+
const run = (command, timeout = SYNC_GIT_STATUS_TIMEOUT_MS) => runSyncGitCommand(command, {
|
|
1100
|
+
cwd: projectPath,
|
|
1101
|
+
timeout,
|
|
1102
|
+
signal
|
|
1103
|
+
});
|
|
942
1104
|
try {
|
|
943
1105
|
for (const path of SYNC_MAIN_MAIN_PREFERRED_PATHS) {
|
|
944
|
-
await
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
});
|
|
948
|
-
await execAsync(`git checkout origin/main -- ${path}`, {
|
|
949
|
-
cwd: projectPath,
|
|
950
|
-
encoding: "utf-8"
|
|
951
|
-
}).catch(() => {});
|
|
952
|
-
await execAsync(`git add -A -- ${path}`, {
|
|
953
|
-
cwd: projectPath,
|
|
954
|
-
encoding: "utf-8"
|
|
1106
|
+
await run(`git rm -r --quiet --ignore-unmatch -- ${path}`);
|
|
1107
|
+
await run(`git checkout origin/main -- ${path}`).catch((error) => {
|
|
1108
|
+
if (isSyncGitTermination(error)) throw error;
|
|
955
1109
|
});
|
|
1110
|
+
await run(`git add -A -- ${path}`);
|
|
956
1111
|
}
|
|
957
|
-
const remainingConflicts = await getConflictFiles(projectPath);
|
|
1112
|
+
const remainingConflicts = await getConflictFiles(projectPath, signal);
|
|
958
1113
|
if (remainingConflicts.length > 0) return {
|
|
959
1114
|
success: false,
|
|
960
1115
|
reason: `Unresolved conflicts remain: ${remainingConflicts.join(", ")}`
|
|
961
1116
|
};
|
|
962
|
-
await
|
|
963
|
-
cwd: projectPath,
|
|
964
|
-
encoding: "utf-8"
|
|
965
|
-
});
|
|
1117
|
+
await run("git commit --no-edit", SYNC_GIT_COMMIT_TIMEOUT_MS);
|
|
966
1118
|
return { success: true };
|
|
967
1119
|
} catch (error) {
|
|
1120
|
+
if (isSyncGitTermination(error)) throw error;
|
|
968
1121
|
return {
|
|
969
1122
|
success: false,
|
|
970
1123
|
reason: `Failed to auto-resolve pipeline-owned conflicts: ${error.message}`
|
|
@@ -1156,6 +1309,31 @@ async function scanForConflictMarkers(projectPath) {
|
|
|
1156
1309
|
return [];
|
|
1157
1310
|
}
|
|
1158
1311
|
}
|
|
1312
|
+
async function collectSyncMergeStats(projectPath, signal) {
|
|
1313
|
+
const run = (command) => runSyncGitCommand(command, {
|
|
1314
|
+
cwd: projectPath,
|
|
1315
|
+
timeout: SYNC_GIT_STATUS_TIMEOUT_MS,
|
|
1316
|
+
signal
|
|
1317
|
+
});
|
|
1318
|
+
let changedFiles = [];
|
|
1319
|
+
let commitCount = 0;
|
|
1320
|
+
try {
|
|
1321
|
+
const { stdout } = await run("git diff --name-only ORIG_HEAD HEAD 2>/dev/null || git diff --name-only HEAD~1 HEAD");
|
|
1322
|
+
changedFiles = stdout.trim().split("\n").filter(Boolean);
|
|
1323
|
+
} catch (error) {
|
|
1324
|
+
if (isSyncGitTermination(error)) throw error;
|
|
1325
|
+
}
|
|
1326
|
+
try {
|
|
1327
|
+
const { stdout } = await run("git log ORIG_HEAD..HEAD --oneline 2>/dev/null || echo \"\"");
|
|
1328
|
+
commitCount = stdout.trim().split("\n").filter(Boolean).length;
|
|
1329
|
+
} catch (error) {
|
|
1330
|
+
if (isSyncGitTermination(error)) throw error;
|
|
1331
|
+
}
|
|
1332
|
+
return {
|
|
1333
|
+
changedFiles,
|
|
1334
|
+
commitCount
|
|
1335
|
+
};
|
|
1336
|
+
}
|
|
1159
1337
|
/**
|
|
1160
1338
|
* Sync the latest main branch into a workspace's feature branch.
|
|
1161
1339
|
*
|
|
@@ -1166,27 +1344,30 @@ async function scanForConflictMarkers(projectPath) {
|
|
|
1166
1344
|
*
|
|
1167
1345
|
* Auto-commits any uncommitted changes before merging (with safety verification).
|
|
1168
1346
|
*/
|
|
1169
|
-
async function syncMainIntoWorkspace(projectPath, issueId) {
|
|
1347
|
+
async function syncMainIntoWorkspace(projectPath, issueId, signal) {
|
|
1170
1348
|
console.log(`[sync-main] Starting sync of main into workspace for ${issueId}`);
|
|
1171
1349
|
logActivity("sync_main_start", `Starting sync for ${issueId}`);
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
logActivity("sync_main_blocked", message);
|
|
1179
|
-
return {
|
|
1180
|
-
success: false,
|
|
1181
|
-
reason: message
|
|
1182
|
-
};
|
|
1183
|
-
}
|
|
1184
|
-
if (autoCommit.committed) console.log(`[sync-main] Auto-commit successful`);
|
|
1350
|
+
const run = (command, timeout = SYNC_GIT_STATUS_TIMEOUT_MS) => runSyncGitCommand(command, {
|
|
1351
|
+
cwd: projectPath,
|
|
1352
|
+
timeout,
|
|
1353
|
+
signal
|
|
1354
|
+
});
|
|
1355
|
+
let mergeStarted = false;
|
|
1185
1356
|
try {
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1357
|
+
console.log(`[sync-main] Checking for uncommitted changes...`);
|
|
1358
|
+
logActivity("sync_main_auto_commit", `Auto-committing uncommitted changes before sync`);
|
|
1359
|
+
const autoCommit = await autoCommitWorkspaceChangesBeforeSync(projectPath, issueId, signal);
|
|
1360
|
+
if (!autoCommit.success) {
|
|
1361
|
+
const message = autoCommit.reason || "Failed to auto-commit uncommitted changes";
|
|
1362
|
+
console.error(`[sync-main] ${message}`);
|
|
1363
|
+
logActivity("sync_main_blocked", message);
|
|
1364
|
+
return {
|
|
1365
|
+
success: false,
|
|
1366
|
+
reason: message
|
|
1367
|
+
};
|
|
1368
|
+
}
|
|
1369
|
+
if (autoCommit.committed) console.log(`[sync-main] Auto-commit successful`);
|
|
1370
|
+
const { stdout: postCommitStatus } = await run("git status --porcelain");
|
|
1190
1371
|
if (postCommitStatus.trim()) {
|
|
1191
1372
|
if (postCommitStatus.trim().split("\n").filter((line) => !isAutoCommitExcludedPath(parseStatusPath(line))).length > 0) {
|
|
1192
1373
|
const message = "Uncommitted changes remain after auto-commit — aborting sync";
|
|
@@ -1198,22 +1379,18 @@ async function syncMainIntoWorkspace(projectPath, issueId) {
|
|
|
1198
1379
|
};
|
|
1199
1380
|
}
|
|
1200
1381
|
}
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
try {
|
|
1208
|
-
const lockCleanup = await Effect.runPromise(cleanupStaleLocks(projectPath));
|
|
1209
|
-
if (lockCleanup.found.length > 0) {
|
|
1210
|
-
console.log(`[sync-main] Found ${lockCleanup.found.length} lock file(s)`);
|
|
1382
|
+
try {
|
|
1383
|
+
const lockCleanup = await Effect.runPromise(cleanupStaleLocks(projectPath, {
|
|
1384
|
+
signal,
|
|
1385
|
+
processProbeTimeoutMs: SYNC_GIT_STATUS_TIMEOUT_MS
|
|
1386
|
+
}));
|
|
1387
|
+
if (lockCleanup.found.length > 0) console.log(`[sync-main] Found ${lockCleanup.found.length} lock file(s)`);
|
|
1211
1388
|
if (lockCleanup.removed.length > 0) {
|
|
1212
1389
|
console.log(`[sync-main] Cleaned up ${lockCleanup.removed.length} stale lock file(s)`);
|
|
1213
1390
|
logActivity("git_lock_cleanup", `Removed ${lockCleanup.removed.length} stale lock file(s)`);
|
|
1214
1391
|
}
|
|
1215
|
-
if (lockCleanup.errors.
|
|
1216
|
-
const message =
|
|
1392
|
+
if (lockCleanup.errors.length > 0) {
|
|
1393
|
+
const message = `Cannot safely start sync: ${lockCleanup.errors.map(({ file, error }) => `${file}: ${error}`).join("; ")}`;
|
|
1217
1394
|
console.error(`[sync-main] ${message}`);
|
|
1218
1395
|
logActivity("sync_main_blocked", message);
|
|
1219
1396
|
return {
|
|
@@ -1221,106 +1398,80 @@ async function syncMainIntoWorkspace(projectPath, issueId) {
|
|
|
1221
1398
|
reason: message
|
|
1222
1399
|
};
|
|
1223
1400
|
}
|
|
1401
|
+
} catch (lockError) {
|
|
1402
|
+
const message = `Cannot verify Git lock state: ${lockError instanceof Error ? lockError.message : String(lockError)}`;
|
|
1403
|
+
console.error(`[sync-main] ${message}`);
|
|
1404
|
+
logActivity("sync_main_blocked", message);
|
|
1405
|
+
return {
|
|
1406
|
+
success: false,
|
|
1407
|
+
reason: message
|
|
1408
|
+
};
|
|
1224
1409
|
}
|
|
1225
|
-
} catch (lockErr) {
|
|
1226
|
-
console.warn(`[sync-main] Lock cleanup warning: ${lockErr.message} (continuing)`);
|
|
1227
|
-
}
|
|
1228
|
-
try {
|
|
1229
1410
|
console.log(`[sync-main] Fetching origin/main...`);
|
|
1230
|
-
await execAsync("git fetch origin main", {
|
|
1231
|
-
cwd: projectPath,
|
|
1232
|
-
encoding: "utf-8"
|
|
1233
|
-
});
|
|
1234
|
-
} catch (error) {
|
|
1235
|
-
return {
|
|
1236
|
-
success: false,
|
|
1237
|
-
reason: `Failed to fetch origin/main: ${error.message}`
|
|
1238
|
-
};
|
|
1239
|
-
}
|
|
1240
|
-
let mergeOutput = "";
|
|
1241
|
-
let hasConflicts = false;
|
|
1242
|
-
try {
|
|
1243
|
-
const result = await execAsync("git merge origin/main", {
|
|
1244
|
-
cwd: projectPath,
|
|
1245
|
-
encoding: "utf-8"
|
|
1246
|
-
});
|
|
1247
|
-
mergeOutput = (result.stdout || "") + (result.stderr || "");
|
|
1248
|
-
} catch (error) {
|
|
1249
|
-
mergeOutput = (error.stdout || "") + (error.stderr || "");
|
|
1250
|
-
hasConflicts = true;
|
|
1251
|
-
}
|
|
1252
|
-
if (mergeOutput.includes("Already up to date") || mergeOutput.includes("Already up-to-date")) {
|
|
1253
|
-
console.log(`[sync-main] Already up to date`);
|
|
1254
|
-
logActivity("sync_main_noop", `${issueId} already up to date with main`);
|
|
1255
|
-
return {
|
|
1256
|
-
success: true,
|
|
1257
|
-
alreadyUpToDate: true
|
|
1258
|
-
};
|
|
1259
|
-
}
|
|
1260
|
-
if (!hasConflicts) {
|
|
1261
|
-
console.log(`[sync-main] Clean merge completed`);
|
|
1262
|
-
logActivity("sync_main_success", `Clean merge of main into ${issueId}`);
|
|
1263
|
-
let changedFiles = [];
|
|
1264
|
-
let commitCount = 0;
|
|
1265
1411
|
try {
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1412
|
+
await run("git fetch origin main", SYNC_GIT_FETCH_TIMEOUT_MS);
|
|
1413
|
+
} catch (error) {
|
|
1414
|
+
if (isSyncGitTermination(error)) throw error;
|
|
1415
|
+
return {
|
|
1416
|
+
success: false,
|
|
1417
|
+
reason: `Failed to fetch origin/main: ${error.message}`
|
|
1418
|
+
};
|
|
1419
|
+
}
|
|
1420
|
+
let mergeOutput = "";
|
|
1421
|
+
let hasConflicts = false;
|
|
1272
1422
|
try {
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1423
|
+
mergeStarted = true;
|
|
1424
|
+
const result = await run("git merge origin/main", SYNC_GIT_MERGE_TIMEOUT_MS);
|
|
1425
|
+
mergeStarted = false;
|
|
1426
|
+
mergeOutput = (result.stdout || "") + (result.stderr || "");
|
|
1427
|
+
} catch (error) {
|
|
1428
|
+
if (isSyncGitTermination(error)) throw error;
|
|
1429
|
+
mergeOutput = (error.stdout || "") + (error.stderr || "");
|
|
1430
|
+
hasConflicts = true;
|
|
1431
|
+
}
|
|
1432
|
+
if (mergeOutput.includes("Already up to date") || mergeOutput.includes("Already up-to-date")) {
|
|
1433
|
+
console.log(`[sync-main] Already up to date`);
|
|
1434
|
+
logActivity("sync_main_noop", `${issueId} already up to date with main`);
|
|
1435
|
+
return {
|
|
1436
|
+
success: true,
|
|
1437
|
+
alreadyUpToDate: true
|
|
1438
|
+
};
|
|
1439
|
+
}
|
|
1440
|
+
if (!hasConflicts) {
|
|
1441
|
+
console.log(`[sync-main] Clean merge completed`);
|
|
1442
|
+
logActivity("sync_main_success", `Clean merge of main into ${issueId}`);
|
|
1443
|
+
return {
|
|
1444
|
+
success: true,
|
|
1445
|
+
...await collectSyncMergeStats(projectPath, signal)
|
|
1446
|
+
};
|
|
1447
|
+
}
|
|
1448
|
+
const conflictFiles = await getConflictFiles(projectPath, signal);
|
|
1449
|
+
if ((await resolveMainPreferredSyncConflicts(projectPath, conflictFiles, signal)).success) {
|
|
1450
|
+
mergeStarted = false;
|
|
1451
|
+
console.log(`[sync-main] Auto-resolved ${conflictFiles.length} pipeline-owned conflict(s) with origin/main`);
|
|
1452
|
+
logActivity("sync_main_auto_resolved_conflicts", `Auto-resolved ${conflictFiles.length} pipeline-owned conflict(s) in ${issueId} with origin/main`);
|
|
1453
|
+
return {
|
|
1454
|
+
success: true,
|
|
1455
|
+
...await collectSyncMergeStats(projectPath, signal)
|
|
1456
|
+
};
|
|
1457
|
+
}
|
|
1458
|
+
console.log(`[sync-main] ${conflictFiles.length} conflict(s); aborting merge for manual resolution`);
|
|
1459
|
+
logActivity("sync_main_conflicts", `${conflictFiles.length} conflict(s) in ${issueId}: ${conflictFiles.join(", ")}`);
|
|
1460
|
+
await ensureSyncGitQuiescent(projectPath, true);
|
|
1461
|
+
mergeStarted = false;
|
|
1279
1462
|
return {
|
|
1280
|
-
success:
|
|
1281
|
-
|
|
1282
|
-
|
|
1463
|
+
success: false,
|
|
1464
|
+
conflictFiles,
|
|
1465
|
+
reason: `Sync-main produced ${conflictFiles.length} conflict(s) in ${issueId}: ${conflictFiles.join(", ")}. Resolve manually in the workspace, then re-run sync-main.`
|
|
1283
1466
|
};
|
|
1284
|
-
}
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
console.log(`[sync-main] Auto-resolved ${conflictFiles.length} pipeline-owned conflict(s) with origin/main`);
|
|
1288
|
-
logActivity("sync_main_auto_resolved_conflicts", `Auto-resolved ${conflictFiles.length} pipeline-owned conflict(s) in ${issueId} with origin/main`);
|
|
1289
|
-
let changedFiles = [];
|
|
1290
|
-
let commitCount = 0;
|
|
1291
|
-
try {
|
|
1292
|
-
const { stdout: diffFiles } = await execAsync("git diff --name-only ORIG_HEAD HEAD 2>/dev/null || git diff --name-only HEAD~1 HEAD", {
|
|
1293
|
-
cwd: projectPath,
|
|
1294
|
-
encoding: "utf-8"
|
|
1295
|
-
});
|
|
1296
|
-
changedFiles = diffFiles.trim().split("\n").filter((f) => f.length > 0);
|
|
1297
|
-
} catch {}
|
|
1298
|
-
try {
|
|
1299
|
-
const { stdout: logOut } = await execAsync("git log ORIG_HEAD..HEAD --oneline 2>/dev/null || echo \"\"", {
|
|
1300
|
-
cwd: projectPath,
|
|
1301
|
-
encoding: "utf-8"
|
|
1302
|
-
});
|
|
1303
|
-
commitCount = logOut.trim().split("\n").filter((l) => l.length > 0).length;
|
|
1304
|
-
} catch {}
|
|
1467
|
+
} catch (error) {
|
|
1468
|
+
if (!isSyncGitTermination(error)) throw error;
|
|
1469
|
+
await ensureSyncGitQuiescent(projectPath, mergeStarted);
|
|
1305
1470
|
return {
|
|
1306
|
-
success:
|
|
1307
|
-
|
|
1308
|
-
changedFiles
|
|
1471
|
+
success: false,
|
|
1472
|
+
reason: error instanceof SyncGitCommandTimeoutError ? error.message : "Sync-main cancelled after reaching its preparation deadline"
|
|
1309
1473
|
};
|
|
1310
1474
|
}
|
|
1311
|
-
console.log(`[sync-main] ${conflictFiles.length} conflict(s); aborting merge for manual resolution`);
|
|
1312
|
-
logActivity("sync_main_conflicts", `${conflictFiles.length} conflict(s) in ${issueId}: ${conflictFiles.join(", ")}`);
|
|
1313
|
-
try {
|
|
1314
|
-
await execAsync("git merge --abort", {
|
|
1315
|
-
cwd: projectPath,
|
|
1316
|
-
encoding: "utf-8"
|
|
1317
|
-
});
|
|
1318
|
-
} catch {}
|
|
1319
|
-
return {
|
|
1320
|
-
success: false,
|
|
1321
|
-
conflictFiles,
|
|
1322
|
-
reason: `Sync-main produced ${conflictFiles.length} conflict(s) in ${issueId}: ${conflictFiles.join(", ")}. Resolve manually in the workspace, then re-run sync-main.`
|
|
1323
|
-
};
|
|
1324
1475
|
}
|
|
1325
1476
|
/**
|
|
1326
1477
|
* Look up and run quality gates for the project at projectPath.
|
|
@@ -1358,12 +1509,13 @@ async function runProjectQualityGates(projectPath, phase) {
|
|
|
1358
1509
|
return [];
|
|
1359
1510
|
}
|
|
1360
1511
|
}
|
|
1361
|
-
var execAsync, AUTO_COMMIT_EXCLUDED_PATHS, SYNC_MAIN_MAIN_PREFERRED_PATHS, __dirname, MERGE_HISTORY_DIR, MERGE_HISTORY_FILE, _completedPostMerge, _postMergeInFlight, GIT_PATTERNS;
|
|
1512
|
+
var execAsync, SYNC_GIT_FETCH_TIMEOUT_MS, SYNC_GIT_MERGE_TIMEOUT_MS, SYNC_GIT_COMMIT_TIMEOUT_MS, SYNC_GIT_STATUS_TIMEOUT_MS, AUTO_COMMIT_EXCLUDED_PATHS, SYNC_MAIN_MAIN_PREFERRED_PATHS, __dirname, MERGE_HISTORY_DIR, MERGE_HISTORY_FILE, _completedPostMerge, _postMergeInFlight, GIT_PATTERNS;
|
|
1362
1513
|
var init_merge_agent = __esmMin((() => {
|
|
1363
1514
|
init_tmux();
|
|
1364
1515
|
init_activity_logger();
|
|
1365
1516
|
init_config_yaml();
|
|
1366
1517
|
init_merge_agent_step0();
|
|
1518
|
+
init_sync_main_git();
|
|
1367
1519
|
init_paths();
|
|
1368
1520
|
init_tracker_utils();
|
|
1369
1521
|
init_validation();
|
|
@@ -1375,6 +1527,10 @@ var init_merge_agent = __esmMin((() => {
|
|
|
1375
1527
|
init_feature_registry_population();
|
|
1376
1528
|
init_merge_verification();
|
|
1377
1529
|
execAsync = promisify(exec);
|
|
1530
|
+
SYNC_GIT_FETCH_TIMEOUT_MS = 6e4;
|
|
1531
|
+
SYNC_GIT_MERGE_TIMEOUT_MS = 12e4;
|
|
1532
|
+
SYNC_GIT_COMMIT_TIMEOUT_MS = 6e4;
|
|
1533
|
+
SYNC_GIT_STATUS_TIMEOUT_MS = 3e4;
|
|
1378
1534
|
AUTO_COMMIT_EXCLUDED_PATHS = [
|
|
1379
1535
|
".pan/kickoff.md",
|
|
1380
1536
|
".pan/continue.json",
|
|
@@ -1436,4 +1592,4 @@ var init_merge_agent = __esmMin((() => {
|
|
|
1436
1592
|
//#endregion
|
|
1437
1593
|
export { init_operations as C, gitPush as S, listGitOperationsSync as T, scanGitPatterns as _, init_merge_agent as a, triggerPostMergeReleaseIfConfigured as b, isSyncMainMainPreferredPath as c, parseAgentOutput as d, postMergeLifecycle as f, scanForConflictMarkers as g, salvageStrandedMerge as h, captureTmuxOutput as i, logMergeHistory as l, runProjectQualityGates as m, GIT_PATTERNS as n, isAutoCommitExcludedPath as o, resetPostMergeState as p, autoCommitWorkspaceChangesBeforeSync as r, isMergeAgentRunning as s, AUTO_COMMIT_EXCLUDED_PATHS as t, notifyTldrDaemon as u, sendMessageToAgent as v, init_git_activity as w, MainDivergedError as x, syncMainIntoWorkspace as y };
|
|
1438
1594
|
|
|
1439
|
-
//# sourceMappingURL=merge-agent-
|
|
1595
|
+
//# sourceMappingURL=merge-agent-XrB80vfT.js.map
|