@overdeck/desktop 0.45.23 → 0.45.24
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/drizzle/overdeck/0000_overdeck_init.sql +2 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-DDCnXF58.js} +2 -2
- package/server/{advancing-selfheal-BBu6DSNm.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-BV1q_2EV.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-B4Bjbkfv.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-zkJb3BeM.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-DYrYojxl.js → archive-planning-Du25Jtst.js} +4 -4
- package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-B_-4EKF3.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-DgTqZkL5.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-BT096lEl.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CpgCjAlN.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-C-AXLfYT.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-vBeXbPrq.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-DW0V86F8.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-Dn_4c4G8.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-TmSi-yTv.js → codex-BZXGhUVB.js} +7 -7
- package/server/{codex-Dg7Is5yb.js → codex-GcHuUF-k.js} +1 -1
- package/server/{codex-parser-C4gSH-IR.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-CCvjQf27.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DjLOdbgT.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-DUIhMN_T.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-DvyMuOle.js → config-yaml-DySPNmKN.js} +23 -9
- package/server/{conflict-gate-CmrYpa47.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-BhAY7TUd.js} +1 -1
- package/server/context-layers-BrPmE__h.js +4 -0
- package/server/context-layers-igZ4FI4_.js +37 -0
- package/server/{control-settings-aP1ANIlI.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Up7FEzIC.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-Du-MTNpJ.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-DbOs1e9Q.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-6mPANqvL.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Ca0YTWDw.js → cost-B2ddP6wq.js} +2 -2
- package/server/{cost-CW4WSe72.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-C0VdGme1.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CdOjJVDT.js → dag-B1ucnjDU.js} +2 -2
- package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pRnyD5w9.js → deacon-CU_cAYSR.js} +254 -144
- package/server/{deacon-DYSEJb48.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-BXZZ1Z2-.js} +13 -13
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-AiFoP8dw.js} +6 -6
- package/server/{deploy-window-DeP_OIRk.js → deploy-window-C3F-tihF.js} +6 -6
- package/server/{deploy-window-CM6W1-c6.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-DyRx4cI7.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BK7HIcBj.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-BrSfUHm0.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-CbI3BVkl.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-tdiY5eDZ.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-Cr5PQwFC.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-CvvGK6LT.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-CC1dgUpx.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-CynerjXO.js → factory-CFibJuaw.js} +4 -4
- package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Dhxz-wLc.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-CPS15Vte.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-iygZwmMc.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-CY5L1lB7.js} +5 -5
- package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D3a22RCd.js} +1 -1
- package/server/flywheel-DHrgCphM.js +1084 -0
- package/server/flywheel-DzGtWnJ1.js +477 -0
- package/server/flywheel-SVF02Jpq.js +2 -0
- package/server/{flywheel-merge-order-DxbQKE1d.js → flywheel-merge-order-UU0tiUld.js} +9 -8
- package/server/{flywheel-merge-order-C-6zRLvM.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-Ch9gCFod.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-CJ_aH5jD.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-CKgg0VKg.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-BrL_VTRr.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-BVa07a4a.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CMBdIFBQ.js → github-app-C3QrAUd0.js} +18 -7
- package/server/{github-app-CPfoFAdV.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client--XVlDpwM.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-B4QsdE-X.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-BRbDW-qk.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-CVio2m-u.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-C9B8y1Hm.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-CpfvuVmm.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-DUXw8A0-.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-ltecuFqZ.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-BEq0bUDg.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-aQ1IxeI3.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-CzaSOgul.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-DZ0PfYa4.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-oNZeoDhL.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-BLuJ1AkT.js} +135 -79
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-DXdfprGr.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-Bb4XeV2x.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-B3_AHDfr.js → io-C9kF1wtJ.js} +3 -3
- package/server/{issue-closed-zhdvQicO.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-ojZAzDBP.js} +21 -21
- package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-B6ToV6x1.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-DdWbHEBu.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-CHVm7bGT.js → launcher-generator-BBWG_SiS.js} +101 -7
- package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-BREGpnLk.js} +5 -5
- package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-DPo7x11I.js} +1 -1
- package/server/{lifecycle-sycO16hj.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/{lifecycle-DfeyBDwA.js → lifecycle-yPd___5E.js} +2 -2
- package/server/{linear-client-D4zqMnX7.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-DqhDQO9k.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DK23JEdS.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C_ZEhbqI.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-XrB80vfT.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-BQM3a8z5.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Bwoyr8Je.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-DnSYdBEp.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-SSv3E-pl.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-DZ9dojJn.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-DxDfBTjr.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CSizH3HY.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-Nw29vaFb.js} +1 -1
- package/server/node_modules/.package-lock.json +8 -8
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/undici/README.md +5 -0
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
- package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
- package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
- package/server/node_modules/undici/docs/docs/index.md +5 -0
- package/server/node_modules/undici/lib/core/request.js +1 -1
- package/server/node_modules/undici/lib/core/util.js +6 -1
- package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
- package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
- package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
- package/server/node_modules/undici/lib/util/cache.js +49 -7
- package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
- package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/server/node_modules/undici/package.json +2 -2
- package/server/node_modules/undici/types/client.d.ts +2 -2
- package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-BvKkWMJQ.js} +12 -12
- package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
- package/server/package-lock.json +9 -9
- package/server/package.json +1 -1
- package/server/{pan-dir-DeVUgwA7.js → pan-dir-B0c3w0Ya.js} +3 -3
- package/server/{paths-_zEts6wc.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-Dd0Znxxy.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-mY3GprlK.js} +7 -7
- package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-2sK1apsO.js → project-pipelines-C0MWUeCU.js} +2 -2
- package/server/project-repos-B6GycDh9.js +94 -0
- package/server/project-repos-DXKQsc_m.js +3 -0
- package/server/{projects-9SkRpES9.js → projects-vjjcmiN8.js} +1 -1
- package/server/{prompts-Dp4Tpk39.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-DV7ec8l7.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DKkBXhxU.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DEmlBBNQ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-BWR4qFiV.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-CsSuZQBI.js → index-CWeMerGO.js} +146 -144
- package/server/public/assets/{index-CUr1xv8w.css → index-CenuJ3Cw.css} +1 -1
- package/server/public/assets/{linear-C9zFQpkX.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-B1jCQihw.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests--Ib2jTgy.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-CXIhdCYD.js → pull-requests-_lHueOHW.js} +3 -3
- package/server/{queries-6d7Cdtm7.js → queries-CjNIf-Ub.js} +576 -166
- package/server/{rally-B708-nZn.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-nY0ZANw3.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-yjQ0TfHd.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-B1EJhfV0.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CULK2XAY.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/{record-t6V-3Dcj.js → record-CN0pj4_5.js} +1 -1
- package/server/{record-update-DACtKh6_.js → record-update-bLJxAXH4.js} +1 -1
- package/server/{record-update-Dq0t2uBG.js → record-update-dE1Aw83j.js} +2 -2
- package/server/{recovery-trip-BJtIQuag.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DZpmGGzb.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-hnXd_kga.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-Br-ZWVIP.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-4tiENDaI.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-nmty1mLu.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-CRCg1L4H.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-BbWNd10K.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-sKkE1FEL.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-DJRO8EG8.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-BgX3lcCx.js → review-context-2uj-YQ8J.js} +69 -25
- package/server/{review-status-C6n6-9f_.js → review-status-btEYlaxA.js} +1 -1
- package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-A7quS5KJ.js → review-status-kZj_KyCk.js} +42 -26
- package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-To3-iS-N.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-B53Y81xK.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-WA0VD-Rr.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-D2743cp8.js → scanner-CnqEZeDy.js} +41 -14
- package/server/{sequence-io-Cg0zYj_E.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2194 -341
- package/server/{service-DCpB_SGd.js → service-CLeAoU6G.js} +51 -50
- package/server/{session-fork-BQ8_6H32.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-CVZDpS3c.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BZ5m1UCl.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-ylxwqwQG.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-Dh-HzF2J.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-C2_epgx2.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-ClSMIzZX.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DKpdFyOC.js} +30 -23
- package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-BXhav38U.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-DtrYvGJ-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-JVO00bs7.js → specialists-CC4r-c2s.js} +776 -347
- package/server/{specialists-D5fRZXmN.js → specialists-CShuVGWT.js} +1 -1
- package/server/{specialists-DVj0hvaL.js → specialists-DM6bWjsi.js} +1 -1
- package/server/{specialists-DyFeedjn.js → specialists-jiuuyVkp.js} +21 -19
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-CG9mCkP6.js → src-CXmtj0im.js} +6 -6
- package/server/{src-CMTQGyCK.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-U7_kTPEE.js → src-DtcUOZCq.js} +111 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-puygdaMd.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-Cbl_w4Bw.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-Bpy41ngS.js → staleness-DPm7ClwA.js} +1 -1
- package/server/{state-home-CIGjwNfJ.js → state-home-Cn_Qu8IX.js} +2 -2
- package/server/{state-migrate-Dkzaxvny.js → state-migrate-BGg2ZaOt.js} +4 -4
- package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-DYuPRYYw.js} +300 -23
- package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-DHhJIsAL.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-D8bXjCr7.js → summary-fork-DpcxN9tf.js} +2 -2
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
- package/server/supervisor/pty-supervisor.js +2 -1
- package/server/supervisor/pty-token-x-ea28Us.js +43 -0
- package/server/supervisor-FTJAIsAK.js +2 -0
- package/server/{supervisor-BO-Zk_h-.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-DlP_UjHq.js} +3 -3
- package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-MbxX5vqq.js} +6 -6
- package/server/{test-verdict-CmUBK5cT.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-DFjjIHR5.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/{tmux-DoThH6aj.js → tmux-B6z7h_vZ.js} +1 -1
- package/server/{tmux-ftABRAmc.js → tmux-R7N7y-Mh.js} +2 -2
- package/server/{token-CsOhvw42.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-CTmczIfW.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-B4itFzDo.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-BePq_oj-.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-tnxxqROg.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-m73vGebA.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-B2vxjx_b.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-Cgj-IGIl.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-BBNjPcqU.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-cKfM-_WW.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-CuEn0t9M.js → uat-train-DDSrSoV1.js} +25 -25
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-CIi6pnI2.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-B5JxoPUS.js → validation-Dw1pzDzr.js} +4 -4
- package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BcnIbigL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-CDj4lD4t.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-Br0S_Ous.js → verification-runner-CkgX6EtI.js} +91 -106
- package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-Du8Vh2aJ.js} +9 -9
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-C9WmILql.js → workflows-mbQzh6mQ.js} +18 -18
- package/server/{workspace-DuUdndHe.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-BVl4rihN.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-cEGcO6UT.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CBhNdzE4.js} +66 -15
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-hWvy9eKs.js → workspaces-Do_9J0LQ.js} +130 -111
- package/sync-sources/hooks/record-cost-event.js +6 -4
- package/sync-sources/skills/okf/README.md +11 -3
- package/sync-sources/skills/okf/SKILL.md +12 -1
- package/sync-sources/skills/okf/docs/USAGE.md +15 -0
- package/sync-sources/skills/okf/references/overdeck.md +28 -0
- package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-start/SKILL.md +4 -0
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Bg0lhqwj.js +0 -3
- package/server/agents-FlIgQ3ql.js +0 -3
- package/server/cli-BsVIHwzC.js +0 -3
- package/server/context-layers-B3Nt58jl.js +0 -4
- package/server/context-layers-ZYFcWiyc.js +0 -165
- package/server/deacon-swarm-9jRLS5Ke.js +0 -2
- package/server/dist-Bd3vn0Hw.js +0 -3
- package/server/flywheel-DMCUzDWg.js +0 -2
- package/server/flywheel-DSSpWmqF.js +0 -522
- package/server/flywheel-DcBkQvgE.js +0 -207
- package/server/forge-B-ZWyTRm.js +0 -2
- package/server/git-utils-Dry_Ka_D.js +0 -3
- package/server/hume-B_DbflNM.js +0 -3
- package/server/inspect-agent-ch-F-5Ci.js +0 -2
- package/server/layers-DzxSTGNA.js +0 -93
- package/server/merge-blockers-BsFjGrQ8.js +0 -41
- package/server/merge-ops-DlB1IM0Y.js +0 -2
- package/server/merge-set-DLz0MkGT.js +0 -139
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
- package/server/rally-njs_mJrt.js +0 -3
- package/server/rebuild-stack-kA7XngID.js +0 -3
- package/server/resume-CcKqnTvE.js +0 -3
- package/server/settings-D0OSwos5.js +0 -2
- package/server/specs-nN45DG2X.js +0 -3
- package/server/stack-health-Df0YEZKa.js +0 -3
- package/server/supervisor-BPy-o1A8.js +0 -2
- package/server/token-util-DrHg8abn.js +0 -3
- package/server/workflows-D90rMOya.js +0 -2
- package/server/workspace-manager-ZTdJAy9M.js +0 -3
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Gr as sessionFilePath, Gt as reconcileStatePlaneDrift, Jt as getMainDivergence, Nt as readIssueRecordSync, Ot as init_record, Tn as init_projects, Ut as init_auto_commit, Vr as init_paths, Yt as init_state_plane, Zt as isStatePlanePath, b as DEFAULT_CONFIG$1, f as loadConfigSync, hr as AGENTS_DIR, kn as listProjectsSync, mr as init_errors, qt as STATE_PLANE_PATHS, s as init_load, wr as OVERDECK_HOME, x as init_defaults, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-
|
|
3
|
-
import { n as init_build_info, t as getBuildInfo } from "./build-info-
|
|
4
|
-
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-
|
|
2
|
+
import { Gr as sessionFilePath, Gt as reconcileStatePlaneDrift, Jt as getMainDivergence, Nt as readIssueRecordSync, Ot as init_record, Tn as init_projects, Ut as init_auto_commit, Vr as init_paths, Yt as init_state_plane, Zt as isStatePlanePath, b as DEFAULT_CONFIG$1, f as loadConfigSync, hr as AGENTS_DIR, kn as listProjectsSync, mr as init_errors, qt as STATE_PLANE_PATHS, s as init_load, wr as OVERDECK_HOME, x as init_defaults, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { n as init_build_info, t as getBuildInfo } from "./build-info-Ie_D0_BT.js";
|
|
4
|
+
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-6wVqAaqz.js";
|
|
5
5
|
import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-DDlOIAML.js";
|
|
6
|
-
import { n as updateIssueRecord, t as init_record_update } from "./record-update-
|
|
7
|
-
import { A as listPaneValues, B as sendKeysAsync, D as killSession, E as isPaneDead, H as sessionExists, I as querySessionSync, M as listSessionNames, N as listSessions, U as sessionExistsSync, i as capturePane, w as init_tmux, z as sendKeys } from "./tmux-
|
|
8
|
-
import { a as init_event_store, i as initEventStore } from "./event-store-
|
|
9
|
-
import {
|
|
10
|
-
import { C as needsReviewDispatch, S as init_review_dispatch_decision, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, g as reviewGatesPassedSync, l as init_review_status } from "./review-status-
|
|
11
|
-
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-
|
|
12
|
-
import {
|
|
13
|
-
import { c as logDeaconEventSync, l as getRuntimeSnapshot, o as init_persistent_logger, s as logAgentLifecycleSync, u as init_agent_runtime_mirror } from "./session-history-
|
|
14
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
15
|
-
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-
|
|
16
|
-
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-
|
|
6
|
+
import { n as updateIssueRecord, t as init_record_update } from "./record-update-dE1Aw83j.js";
|
|
7
|
+
import { A as listPaneValues, B as sendKeysAsync, D as killSession, E as isPaneDead, H as sessionExists, I as querySessionSync, M as listSessionNames, N as listSessions, U as sessionExistsSync, i as capturePane, w as init_tmux, z as sendKeys } from "./tmux-R7N7y-Mh.js";
|
|
8
|
+
import { a as init_event_store, i as initEventStore } from "./event-store-CQL6NeqB.js";
|
|
9
|
+
import { E as projectLegacySystemHealthSummary, t as init_src } from "./src-DtcUOZCq.js";
|
|
10
|
+
import { C as needsReviewDispatch, S as init_review_dispatch_decision, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, g as reviewGatesPassedSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
|
|
11
|
+
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-EbI0zCJl.js";
|
|
12
|
+
import { Ar as saveAgentRuntimeState, Ct as tryReserveAdvancingSlot, Dr as getAgentRuntimeState, Dt as init_memory_verdict_cache, Fr as init_codex_auth, Ft as init_transcript_landing, G as resumeAgent, Gn as getAgentDir, Hn as clearAgentTroubledSync, Ir as paneShowsCodexAuthBurn, J as isContextOverflowTail, K as init_context_overflow, Nr as applyCodexAuthBurnFlag, Or as getAgentRuntimeStateSync, Ot as setCachedMemoryVerdict, Pt as captureTranscriptUserRecordSnapshot, St as resetPatrolDispatchBudget, Tt as workResumeSlotsAvailable, Un as clearYieldForResumeSync, X as messageAgent, Xn as init_agent_state, Y as init_messaging, Yn as getAgentStateSync, _ as init_linux, a as listRunningAgentsSync, b as init_agents$1, bt as releaseAdvancingSlot, c as getRuntimeCensus, cr as saveAgentState, dr as setAgentPausedSync, dt as init_termination, fr as setAgentYieldedSync, ft as stopAgent, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gt as describeRunningAgents, h as init_collector, i as listRunningAgents, ir as recordAgentFailure, jn as buildResumeContinueMessage, jt as deliverInitialPromptWithRetry, kr as init_runtime_state, lr as saveAgentStateSync, m as createHostHealthCollector, mt as countRunningAgents, n as init_queries, qn as getAgentState, r as listAgentStates, s as descendantPidsForSession, sr as resetAgentFailureCount, tr as markAgentRunningState, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, vt as getConcurrencyLimits, y as init_darwin, yt as init_concurrency } from "./queries-CjNIf-Ub.js";
|
|
13
|
+
import { c as logDeaconEventSync, l as getRuntimeSnapshot, o as init_persistent_logger, s as logAgentLifecycleSync, u as init_agent_runtime_mirror } from "./session-history-BT3IvqhC.js";
|
|
14
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
|
|
15
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
|
|
16
|
+
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BTOpxtTC.js";
|
|
17
17
|
import { i as readReviewStatusMap, n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-CxuEjLGg.js";
|
|
18
|
-
import { m as readWorkspacePlanSync, o as init_io } from "./io-
|
|
19
|
-
import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-
|
|
20
|
-
import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-
|
|
21
|
-
import {
|
|
22
|
-
import { l as init_dag, o as getDispatchableItems } from "./dag-
|
|
23
|
-
import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-
|
|
24
|
-
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-
|
|
25
|
-
import {
|
|
26
|
-
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-
|
|
27
|
-
import { n as __filename, r as init_esm_shims } from "./esm-shims-
|
|
28
|
-
import { i as init_staleness, r as computeBuildStaleness } from "./staleness-
|
|
29
|
-
import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-
|
|
30
|
-
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-
|
|
31
|
-
import { r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-
|
|
32
|
-
import { a as init_review_convoy_liveness, c as init_review_monitor, i as evaluateReviewConvoyLiveness, o as reviewTimestampMs, r as init_in_flight_guard, s as REVIEW_SUB_ROLES, t as createInFlightGuard } from "./in-flight-guard-
|
|
33
|
-
import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-
|
|
34
|
-
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-
|
|
35
|
-
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-
|
|
36
|
-
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-
|
|
37
|
-
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-
|
|
38
|
-
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-
|
|
39
|
-
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-
|
|
40
|
-
import { t as recordRecoveryFailure } from "./recovery-trip-
|
|
41
|
-
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-
|
|
42
|
-
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-
|
|
43
|
-
import { n as init_label_reconciler, r as reconcilePipelineLabelsPatrol } from "./label-reconciler-
|
|
44
|
-
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-
|
|
45
|
-
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-
|
|
46
|
-
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-
|
|
18
|
+
import { m as readWorkspacePlanSync, o as init_io } from "./io-C9kF1wtJ.js";
|
|
19
|
+
import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-BZ0sHTju.js";
|
|
20
|
+
import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-BQp7_4uD.js";
|
|
21
|
+
import { d as init_docker_stats, u as DockerStatsCollector } from "./stack-health-DxSdG9cW.js";
|
|
22
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-B1ucnjDU.js";
|
|
23
|
+
import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-CKxYiCmX.js";
|
|
24
|
+
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-Cn_Qu8IX.js";
|
|
25
|
+
import { M as withConcurrencyLimit, j as init_concurrency$1 } from "./github-app-C3QrAUd0.js";
|
|
26
|
+
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-DYuPRYYw.js";
|
|
27
|
+
import { n as __filename, r as init_esm_shims } from "./esm-shims-OSHAYaS1.js";
|
|
28
|
+
import { i as init_staleness, r as computeBuildStaleness } from "./staleness-DPm7ClwA.js";
|
|
29
|
+
import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-CHcnvonI.js";
|
|
30
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-CY5L1lB7.js";
|
|
31
|
+
import { r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-7mqqwrX6.js";
|
|
32
|
+
import { a as init_review_convoy_liveness, c as init_review_monitor, i as evaluateReviewConvoyLiveness, o as reviewTimestampMs, r as init_in_flight_guard, s as REVIEW_SUB_ROLES, t as createInFlightGuard } from "./in-flight-guard-CAAkqPLu.js";
|
|
33
|
+
import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-jiuuyVkp.js";
|
|
34
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-Du25Jtst.js";
|
|
35
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CDJk4pIp.js";
|
|
36
|
+
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-BkaOqPsw.js";
|
|
37
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CCjVA7Uk.js";
|
|
38
|
+
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-Df2uXPsQ.js";
|
|
39
|
+
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BXZZ1Z2-.js";
|
|
40
|
+
import { t as recordRecoveryFailure } from "./recovery-trip-BvRWfUXM.js";
|
|
41
|
+
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Nw29vaFb.js";
|
|
42
|
+
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-Bk3SU4RC.js";
|
|
43
|
+
import { n as init_label_reconciler, r as reconcilePipelineLabelsPatrol } from "./label-reconciler-B4iOAjlC.js";
|
|
44
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-BvKkWMJQ.js";
|
|
45
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DDIRwxUY.js";
|
|
46
|
+
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-bWYBtqBg.js";
|
|
47
47
|
import { createRequire } from "node:module";
|
|
48
48
|
import { join } from "node:path";
|
|
49
49
|
import { Effect } from "effect";
|
|
@@ -54,7 +54,7 @@ import { freemem as freemem$1, homedir as homedir$1, platform as platform$1, tot
|
|
|
54
54
|
import { closeSync as closeSync$1, existsSync as existsSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, unlinkSync as unlinkSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
|
|
55
55
|
import { readFile } from "node:fs/promises";
|
|
56
56
|
import { readFile as readFile$1, readdir as readdir$1, writeFile as writeFile$1 } from "fs/promises";
|
|
57
|
-
import { exec, execFile, spawn } from "node:child_process";
|
|
57
|
+
import { exec, execFile, execFileSync, spawn } from "node:child_process";
|
|
58
58
|
import { promisify } from "node:util";
|
|
59
59
|
import { exec as exec$1, execFile as execFile$1, spawn as spawn$1 } from "child_process";
|
|
60
60
|
import { promisify as promisify$1 } from "util";
|
|
@@ -22409,7 +22409,7 @@ function acceptedReasons(state, hostReasons, agents, services) {
|
|
|
22409
22409
|
//#endregion
|
|
22410
22410
|
//#region services/system-health-service.ts
|
|
22411
22411
|
init_review_status_source();
|
|
22412
|
-
const execAsync$
|
|
22412
|
+
const execAsync$3 = promisify(exec);
|
|
22413
22413
|
const KB = 1024;
|
|
22414
22414
|
const GIB$1 = 1024 ** 3;
|
|
22415
22415
|
let dockerStatsCollector$1 = null;
|
|
@@ -22512,7 +22512,7 @@ async function readProcMemoryDarwin() {
|
|
|
22512
22512
|
let memAvailable = freemem$1();
|
|
22513
22513
|
let memFree = freemem$1();
|
|
22514
22514
|
try {
|
|
22515
|
-
const { stdout } = await execAsync$
|
|
22515
|
+
const { stdout } = await execAsync$3("vm_stat", {
|
|
22516
22516
|
encoding: "utf-8",
|
|
22517
22517
|
timeout: 5e3
|
|
22518
22518
|
});
|
|
@@ -22532,7 +22532,7 @@ async function readProcMemoryDarwin() {
|
|
|
22532
22532
|
let swapTotal = 0;
|
|
22533
22533
|
let swapFree = 0;
|
|
22534
22534
|
try {
|
|
22535
|
-
const { stdout } = await execAsync$
|
|
22535
|
+
const { stdout } = await execAsync$3("sysctl -n vm.swapusage", {
|
|
22536
22536
|
encoding: "utf-8",
|
|
22537
22537
|
timeout: 5e3
|
|
22538
22538
|
});
|
|
@@ -23122,7 +23122,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
23122
23122
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
23123
23123
|
});
|
|
23124
23124
|
try {
|
|
23125
|
-
const { messageAgent } = await import("./agents-
|
|
23125
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
23126
23126
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
23127
23127
|
} catch (err) {
|
|
23128
23128
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -23316,7 +23316,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
23316
23316
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
23317
23317
|
let usage = null;
|
|
23318
23318
|
try {
|
|
23319
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23319
|
+
const { computeContextUsage } = await import("./conversation-service-BLd3MYsG.js");
|
|
23320
23320
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
23321
23321
|
} catch {
|
|
23322
23322
|
return null;
|
|
@@ -23444,13 +23444,13 @@ async function checkApiErrorAgents() {
|
|
|
23444
23444
|
const st = getAgentStateSync(sessionName);
|
|
23445
23445
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
23446
23446
|
if (st?.workspace && sid && st.model) {
|
|
23447
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23447
|
+
const { computeContextUsage } = await import("./conversation-service-BLd3MYsG.js");
|
|
23448
23448
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
23449
23449
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
23450
23450
|
}
|
|
23451
23451
|
} catch {}
|
|
23452
23452
|
if (recoveredPct !== null) {
|
|
23453
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
23453
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-DSDK3OMy.js");
|
|
23454
23454
|
clearWorkspaceStuck(issueId);
|
|
23455
23455
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
23456
23456
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -23466,7 +23466,7 @@ async function checkApiErrorAgents() {
|
|
|
23466
23466
|
rec.attempts += 1;
|
|
23467
23467
|
rec.lastAttempt = now;
|
|
23468
23468
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
23469
|
-
const { resumeAgent } = await import("./agents-
|
|
23469
|
+
const { resumeAgent } = await import("./agents-wi9NWzs2.js");
|
|
23470
23470
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23471
23471
|
if (recovered.success) {
|
|
23472
23472
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -23514,7 +23514,7 @@ async function checkApiErrorAgents() {
|
|
|
23514
23514
|
}
|
|
23515
23515
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
23516
23516
|
if (issueId !== null) {
|
|
23517
|
-
const { resumeAgent } = await import("./agents-
|
|
23517
|
+
const { resumeAgent } = await import("./agents-wi9NWzs2.js");
|
|
23518
23518
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23519
23519
|
contextOverflowRecoveryState.set(sessionName, {
|
|
23520
23520
|
lastAttempt: now,
|
|
@@ -23620,6 +23620,7 @@ async function requestStrikeMerge(issueId, request, options = {}) {
|
|
|
23620
23620
|
} catch (error) {
|
|
23621
23621
|
return {
|
|
23622
23622
|
success: false,
|
|
23623
|
+
transport: true,
|
|
23623
23624
|
error: `Strike merge request failed: ${error instanceof Error ? error.message : String(error)}`
|
|
23624
23625
|
};
|
|
23625
23626
|
}
|
|
@@ -23683,7 +23684,10 @@ function defaultDeps() {
|
|
|
23683
23684
|
isPersistentlyOwned: () => false
|
|
23684
23685
|
};
|
|
23685
23686
|
}
|
|
23686
|
-
const
|
|
23687
|
+
const TRANSPORT_BACKOFF_BASE_MS = 6e4;
|
|
23688
|
+
const TRANSPORT_BACKOFF_CAP_MS = 18e5;
|
|
23689
|
+
const MAX_TRANSPORT_RETRIES = 10;
|
|
23690
|
+
const NON_ACTIONABLE = /permission|merge guard|configured project|integration|infrastructure|unavailable|not registered|workspace does not exist|fetch failed|ECONNREFUSED|ECONNRESET|socket hang up|ETIMEDOUT|EAI_AGAIN/i;
|
|
23687
23691
|
function attemptHistory(attempts) {
|
|
23688
23692
|
return attempts.map((attempt, index) => `${index + 1}. strike ${attempt.strikeHead}; main ${attempt.mainHead}; ${attempt.outcome}: ${attempt.detail}`).join("\n");
|
|
23689
23693
|
}
|
|
@@ -23704,14 +23708,21 @@ async function handleFailure(issueId, head, detail, projectPath, workspacePath,
|
|
|
23704
23708
|
const recoveryCount = (status.strikeRecoveryCount ?? 0) + 1;
|
|
23705
23709
|
const recoveryMessage = `Strike landing failed for ${issueId} at ${head}.\n\nCurrent main: ${mainHead}\nFailure: ${detail}\n\nFetch origin, rebase strike/${issueId.toLowerCase()} onto current origin/main, resolve every conflict, rerun the configured gates, push only strike/${issueId.toLowerCase()}, then run pan strike-ready ${issueId}. A fresh pushed HEAD is required before another landing attempt.`;
|
|
23706
23710
|
if (!NON_ACTIONABLE.test(detail) && recoveryCount < 3) try {
|
|
23707
|
-
await deps.deliverRecovery(`strike-${issueId.toLowerCase()}`, recoveryMessage);
|
|
23708
|
-
|
|
23709
|
-
|
|
23710
|
-
|
|
23711
|
-
|
|
23712
|
-
|
|
23713
|
-
|
|
23714
|
-
|
|
23711
|
+
const outcome = await deps.deliverRecovery(`strike-${issueId.toLowerCase()}`, recoveryMessage);
|
|
23712
|
+
if (outcome.delivered) {
|
|
23713
|
+
deps.setStatus(issueId, {
|
|
23714
|
+
strikeLandingState: "recovering",
|
|
23715
|
+
strikeRecoveryCount: recoveryCount,
|
|
23716
|
+
strikeLandingAttempts: attempts,
|
|
23717
|
+
mergeNotes: detail
|
|
23718
|
+
});
|
|
23719
|
+
return `[strike-landing] ${issueId} at ${head} recovering (${recoveryCount}/3)`;
|
|
23720
|
+
}
|
|
23721
|
+
detail += `; recovery not delivered: ${outcome.reason ?? "queued to mail only"}`;
|
|
23722
|
+
attempts[attempts.length - 1] = {
|
|
23723
|
+
...attempts[attempts.length - 1],
|
|
23724
|
+
detail
|
|
23725
|
+
};
|
|
23715
23726
|
} catch (error) {
|
|
23716
23727
|
detail += `; recovery delivery failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
23717
23728
|
attempts[attempts.length - 1] = {
|
|
@@ -23730,6 +23741,50 @@ async function handleFailure(issueId, head, detail, projectPath, workspacePath,
|
|
|
23730
23741
|
await deps.needsYou(issueId, reason, { attempts });
|
|
23731
23742
|
return `[strike-landing] ${issueId} at ${head} needs-you`;
|
|
23732
23743
|
}
|
|
23744
|
+
async function handleTransportFailure(issueId, head, detail, status, deps) {
|
|
23745
|
+
const timestamp = deps.now();
|
|
23746
|
+
const project = deps.resolveProject(issueId);
|
|
23747
|
+
const projectPath = project?.projectPath ?? "";
|
|
23748
|
+
const workspacePath = project ? join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}-strike`) : "";
|
|
23749
|
+
let mainHead = "unknown";
|
|
23750
|
+
try {
|
|
23751
|
+
if (projectPath) mainHead = await deps.getMainHead(projectPath);
|
|
23752
|
+
} catch (error) {
|
|
23753
|
+
detail += `; main HEAD unavailable: ${error instanceof Error ? error.message : String(error)}`;
|
|
23754
|
+
}
|
|
23755
|
+
const attempts = [...status.strikeLandingAttempts ?? [], {
|
|
23756
|
+
timestamp,
|
|
23757
|
+
strikeHead: head,
|
|
23758
|
+
mainHead,
|
|
23759
|
+
outcome: "transport-failed",
|
|
23760
|
+
detail
|
|
23761
|
+
}];
|
|
23762
|
+
const retryCount = (status.strikeTransportRetryCount ?? 0) + 1;
|
|
23763
|
+
if (retryCount < MAX_TRANSPORT_RETRIES) {
|
|
23764
|
+
const delayMs = Math.min(TRANSPORT_BACKOFF_CAP_MS, TRANSPORT_BACKOFF_BASE_MS * 2 ** (retryCount - 1));
|
|
23765
|
+
const nextAttemptAt = new Date(Date.parse(timestamp) + delayMs).toISOString();
|
|
23766
|
+
deps.setStatus(issueId, {
|
|
23767
|
+
strikeLandingState: "ready",
|
|
23768
|
+
strikeReadyHead: head,
|
|
23769
|
+
strikeTransportRetryCount: retryCount,
|
|
23770
|
+
strikeNextAttemptAt: nextAttemptAt,
|
|
23771
|
+
strikeLandingAttempts: attempts,
|
|
23772
|
+
mergeNotes: detail
|
|
23773
|
+
});
|
|
23774
|
+
return `[strike-landing] ${issueId} at ${head} transport retry ${retryCount}/${MAX_TRANSPORT_RETRIES} after ${nextAttemptAt}`;
|
|
23775
|
+
}
|
|
23776
|
+
const reason = `Strike landing for ${issueId} needs operator attention after ${retryCount} transport attempt(s).\n${attemptHistory(attempts)}`;
|
|
23777
|
+
deps.setStatus(issueId, {
|
|
23778
|
+
strikeLandingState: "needs_you",
|
|
23779
|
+
strikeTransportRetryCount: retryCount,
|
|
23780
|
+
strikeNextAttemptAt: void 0,
|
|
23781
|
+
strikeLandingAttempts: attempts,
|
|
23782
|
+
mergeNotes: detail
|
|
23783
|
+
});
|
|
23784
|
+
await deps.writeFeedback(issueId, workspacePath, `## Strike landing needs operator attention\n\n${reason}`);
|
|
23785
|
+
await deps.needsYou(issueId, reason, { attempts });
|
|
23786
|
+
return `[strike-landing] ${issueId} at ${head} needs-you`;
|
|
23787
|
+
}
|
|
23733
23788
|
async function patrolStrikeLandings(overrides = {}) {
|
|
23734
23789
|
const deps = {
|
|
23735
23790
|
...defaultDeps(),
|
|
@@ -23740,6 +23795,7 @@ async function patrolStrikeLandings(overrides = {}) {
|
|
|
23740
23795
|
const issueId = (candidate.issueId || key).toUpperCase();
|
|
23741
23796
|
const head = candidate.strikeReadyHead;
|
|
23742
23797
|
if (!head || candidate.strikeLandingState !== "ready" && candidate.strikeLandingState !== "landing") continue;
|
|
23798
|
+
if (candidate.strikeNextAttemptAt && candidate.strikeNextAttemptAt > deps.now()) continue;
|
|
23743
23799
|
if (candidate.deaconIgnored || candidate.stuck || candidate.mergeStatus === "merged") continue;
|
|
23744
23800
|
const current = deps.getStatus(issueId);
|
|
23745
23801
|
if (current?.strikeReadyHead !== head || current.strikeLandingState !== "ready" && current.strikeLandingState !== "landing") continue;
|
|
@@ -23785,10 +23841,25 @@ async function executeStrikeLanding(issueId, head, claimed, deps) {
|
|
|
23785
23841
|
if (result.mergeStatus === "merged") deps.setStatus(issueId, {
|
|
23786
23842
|
strikeLandingState: "landed",
|
|
23787
23843
|
strikeReadyHead: void 0,
|
|
23788
|
-
strikeReadyAt: void 0
|
|
23844
|
+
strikeReadyAt: void 0,
|
|
23845
|
+
strikeTransportRetryCount: void 0,
|
|
23846
|
+
strikeNextAttemptAt: void 0
|
|
23789
23847
|
});
|
|
23790
23848
|
else if (result.success || result.mergeStatus === "queued" || result.mergeStatus === "merging" || result.mergeStatus === "merged") return;
|
|
23791
|
-
else
|
|
23849
|
+
else if (result.transport) {
|
|
23850
|
+
const current = deps.getStatus(issueId) ?? claimed;
|
|
23851
|
+
if (current.mergeStatus === "merged" || current.strikeLandingState === "landed") {
|
|
23852
|
+
deps.setStatus(issueId, {
|
|
23853
|
+
strikeLandingState: "landed",
|
|
23854
|
+
strikeReadyHead: void 0,
|
|
23855
|
+
strikeReadyAt: void 0,
|
|
23856
|
+
strikeTransportRetryCount: void 0,
|
|
23857
|
+
strikeNextAttemptAt: void 0
|
|
23858
|
+
});
|
|
23859
|
+
return;
|
|
23860
|
+
}
|
|
23861
|
+
await handleTransportFailure(issueId, head, result.error ?? "Strike landing transport failed", current, deps);
|
|
23862
|
+
} else await handleFailure(issueId, head, result.error ?? "Strike landing failed", project.projectPath, request.workspacePath, claimed, deps);
|
|
23792
23863
|
}
|
|
23793
23864
|
//#endregion
|
|
23794
23865
|
//#region ../../lib/cloister/preemption.ts
|
|
@@ -23974,7 +24045,7 @@ init_archive_planning();
|
|
|
23974
24045
|
init_issue_closed();
|
|
23975
24046
|
init_merge_verification();
|
|
23976
24047
|
init_review_convoy_liveness();
|
|
23977
|
-
|
|
24048
|
+
promisify$1(exec$1);
|
|
23978
24049
|
/**
|
|
23979
24050
|
* Check for orphaned review/test statuses (PAN-88 follow-up)
|
|
23980
24051
|
*
|
|
@@ -24037,7 +24108,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
24037
24108
|
*/
|
|
24038
24109
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
24039
24110
|
const key = issueId.toUpperCase();
|
|
24040
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
24111
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-Bn3o8FBX.js");
|
|
24041
24112
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
24042
24113
|
if (health.healthy) {
|
|
24043
24114
|
testStackRebuildState.delete(key);
|
|
@@ -24069,7 +24140,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
24069
24140
|
record.attempts += 1;
|
|
24070
24141
|
testStackRebuildState.set(key, record);
|
|
24071
24142
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
24072
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
24143
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-CFvcBHsS.js");
|
|
24073
24144
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
24074
24145
|
if (!result.success) {
|
|
24075
24146
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -24237,7 +24308,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
24237
24308
|
return actions;
|
|
24238
24309
|
}
|
|
24239
24310
|
try {
|
|
24240
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24311
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
24241
24312
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24242
24313
|
issueId,
|
|
24243
24314
|
workspace,
|
|
@@ -24312,7 +24383,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24312
24383
|
const issueLower = issueId.toLowerCase();
|
|
24313
24384
|
const workspace = getAgentStateSync(`agent-${issueLower}`)?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24314
24385
|
if (workspace) try {
|
|
24315
|
-
if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : (await
|
|
24386
|
+
if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : await (await import("./git-utils-D0_yhCgF.js")).snapshotWorkspaceHeadsPromise(issueId, workspace)) === status.lastVerifiedCommit) {
|
|
24316
24387
|
setReviewStatusSync(issueId, {
|
|
24317
24388
|
reviewStatus: "pending",
|
|
24318
24389
|
reviewNotes: void 0
|
|
@@ -24334,8 +24405,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24334
24405
|
if (project) {
|
|
24335
24406
|
const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
24336
24407
|
if (existsSync(workspacePath)) {
|
|
24337
|
-
const {
|
|
24338
|
-
reviewUpdate["reviewedAtCommit"] =
|
|
24408
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-D0_yhCgF.js");
|
|
24409
|
+
reviewUpdate["reviewedAtCommit"] = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
|
|
24339
24410
|
}
|
|
24340
24411
|
}
|
|
24341
24412
|
} catch {}
|
|
@@ -24389,7 +24460,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24389
24460
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24390
24461
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
24391
24462
|
else if (workspace && resolved) try {
|
|
24392
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24463
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
24393
24464
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24394
24465
|
issueId,
|
|
24395
24466
|
workspace,
|
|
@@ -24414,8 +24485,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24414
24485
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24415
24486
|
if (workspace && resolved) {
|
|
24416
24487
|
const branch = `feature/${issueLower}`;
|
|
24417
|
-
const { spawnRun } = await import("./agents-
|
|
24418
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
24488
|
+
const { spawnRun } = await import("./agents-wi9NWzs2.js");
|
|
24489
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-MbxX5vqq.js");
|
|
24419
24490
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
24420
24491
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
24421
24492
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -24553,7 +24624,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
24553
24624
|
record.lastAttempt = now;
|
|
24554
24625
|
record.attempts += 1;
|
|
24555
24626
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
24556
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24627
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
24557
24628
|
try {
|
|
24558
24629
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24559
24630
|
issueId,
|
|
@@ -24624,7 +24695,7 @@ async function checkMissingReviewStatuses() {
|
|
|
24624
24695
|
continue;
|
|
24625
24696
|
}
|
|
24626
24697
|
try {
|
|
24627
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24698
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
24628
24699
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24629
24700
|
issueId,
|
|
24630
24701
|
workspace,
|
|
@@ -24676,7 +24747,7 @@ async function checkStuckReviewing() {
|
|
|
24676
24747
|
const actions = [];
|
|
24677
24748
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
24678
24749
|
try {
|
|
24679
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
24750
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-btEYlaxA.js");
|
|
24680
24751
|
const statuses = loadReviewStatuses();
|
|
24681
24752
|
const now = Date.now();
|
|
24682
24753
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -24821,7 +24892,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
24821
24892
|
}
|
|
24822
24893
|
const nudge = `Your review synthesis is already written and saved. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${`pan admin specialists done review ${issueId} --status ${verdict}${verdict === "blocked" || verdict === "failed" ? ` --notes "${topBlocker || "See synthesis.md"}"` : ""}`}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
24823
24894
|
try {
|
|
24824
|
-
const { messageAgent } = await import("./agents-
|
|
24895
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
24825
24896
|
await messageAgent(reviewSession, nudge);
|
|
24826
24897
|
unsignaledReviewNudges.set(latestDir, now);
|
|
24827
24898
|
actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
@@ -24943,7 +25014,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
24943
25014
|
return false;
|
|
24944
25015
|
}
|
|
24945
25016
|
try {
|
|
24946
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
25017
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
24947
25018
|
const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
|
|
24948
25019
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
24949
25020
|
issueId: state.issueId,
|
|
@@ -25029,14 +25100,8 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
25029
25100
|
writeFileSync(join$1(reviewDir, "synthesis.md"), synthesis.body);
|
|
25030
25101
|
let fallbackHead;
|
|
25031
25102
|
try {
|
|
25032
|
-
const {
|
|
25033
|
-
|
|
25034
|
-
const { stdout } = await promisify(execFile)("git", ["rev-parse", "HEAD"], {
|
|
25035
|
-
cwd: state.workspace,
|
|
25036
|
-
encoding: "utf-8",
|
|
25037
|
-
timeout: 1e4
|
|
25038
|
-
});
|
|
25039
|
-
fallbackHead = stdout.trim() || void 0;
|
|
25103
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-D0_yhCgF.js");
|
|
25104
|
+
fallbackHead = await snapshotWorkspaceHeadsPromise(state.issueId, state.workspace);
|
|
25040
25105
|
} catch {}
|
|
25041
25106
|
const anchoredVerdicts = Object.fromEntries(Object.entries(synthesis.reviewerVerdicts).map(([subRole, v]) => [subRole, {
|
|
25042
25107
|
...v,
|
|
@@ -25072,7 +25137,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
25072
25137
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
25073
25138
|
].join("\n");
|
|
25074
25139
|
try {
|
|
25075
|
-
const { messageAgent } = await import("./agents-
|
|
25140
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
25076
25141
|
await messageAgent(state.id, message);
|
|
25077
25142
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
25078
25143
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -25158,7 +25223,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25158
25223
|
if (!signal) continue;
|
|
25159
25224
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
25160
25225
|
try {
|
|
25161
|
-
const { messageAgent } = await import("./agents-
|
|
25226
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
25162
25227
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
25163
25228
|
state.reviewMonitorSignaled = signal;
|
|
25164
25229
|
saveAgentStateSync(state);
|
|
@@ -25166,7 +25231,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25166
25231
|
actions.push(action);
|
|
25167
25232
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
25168
25233
|
if (signal === "ready") try {
|
|
25169
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25234
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-BJr8gQX6.js");
|
|
25170
25235
|
notifyPipelineSync({
|
|
25171
25236
|
type: "reviewer_completed",
|
|
25172
25237
|
issueId: state.issueId,
|
|
@@ -25174,7 +25239,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25174
25239
|
});
|
|
25175
25240
|
} catch {}
|
|
25176
25241
|
else if (signal === "timeout") try {
|
|
25177
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25242
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-BJr8gQX6.js");
|
|
25178
25243
|
notifyPipelineSync({
|
|
25179
25244
|
type: "reviewer_timed_out",
|
|
25180
25245
|
issueId: state.issueId,
|
|
@@ -25274,7 +25339,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
|
25274
25339
|
async function checkStalledReviewDiscovery() {
|
|
25275
25340
|
const actions = [];
|
|
25276
25341
|
try {
|
|
25277
|
-
const { listAgentStates } = await import("./agents-
|
|
25342
|
+
const { listAgentStates } = await import("./agents-wi9NWzs2.js");
|
|
25278
25343
|
const states = listAgentStates();
|
|
25279
25344
|
const now = Date.now();
|
|
25280
25345
|
for (const state of states) {
|
|
@@ -25283,7 +25348,7 @@ async function checkStalledReviewDiscovery() {
|
|
|
25283
25348
|
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
25284
25349
|
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
25285
25350
|
if (!aged && !dead) continue;
|
|
25286
|
-
const { handleReviewDiscoveryReady } = await import("./review-agent-
|
|
25351
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-DNboMyW4.js");
|
|
25287
25352
|
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
25288
25353
|
actions.push(result.message);
|
|
25289
25354
|
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
@@ -25306,8 +25371,8 @@ async function checkStalledReviewDiscovery() {
|
|
|
25306
25371
|
async function checkStalledReviewParents() {
|
|
25307
25372
|
const actions = [];
|
|
25308
25373
|
try {
|
|
25309
|
-
const { listAgentStates, markAgentStoppedState } = await import("./agents-
|
|
25310
|
-
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-
|
|
25374
|
+
const { listAgentStates, markAgentStoppedState } = await import("./agents-wi9NWzs2.js");
|
|
25375
|
+
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-DNboMyW4.js");
|
|
25311
25376
|
const states = listAgentStates();
|
|
25312
25377
|
const now = Date.now();
|
|
25313
25378
|
for (const state of states) {
|
|
@@ -25356,8 +25421,8 @@ async function checkStalledReviewParents() {
|
|
|
25356
25421
|
async function checkReviewForkCacheMisses() {
|
|
25357
25422
|
const actions = [];
|
|
25358
25423
|
try {
|
|
25359
|
-
const { listAgentStates, saveAgentState } = await import("./agents-
|
|
25360
|
-
const { readEventsSync } = await import("./events-
|
|
25424
|
+
const { listAgentStates, saveAgentState } = await import("./agents-wi9NWzs2.js");
|
|
25425
|
+
const { readEventsSync } = await import("./events-BTdrdEq8.js");
|
|
25361
25426
|
const { emitActivityEntrySync } = await import("./activity-logger-OEUBdfZ8.js");
|
|
25362
25427
|
const states = listAgentStates();
|
|
25363
25428
|
const now = Date.now();
|
|
@@ -25492,7 +25557,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25492
25557
|
if (!project) continue;
|
|
25493
25558
|
let specStatus;
|
|
25494
25559
|
try {
|
|
25495
|
-
const { findSpecByIssue } = await import("./specs-
|
|
25560
|
+
const { findSpecByIssue } = await import("./specs-C8Wsn2XO.js");
|
|
25496
25561
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
25497
25562
|
specStatus = spec?.status;
|
|
25498
25563
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -25507,7 +25572,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25507
25572
|
if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
|
|
25508
25573
|
} catch {}
|
|
25509
25574
|
if (!isMerged) {
|
|
25510
|
-
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-
|
|
25575
|
+
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-B4ylXZQK.js");
|
|
25511
25576
|
const ghResolved = _resolveGitHubIssue(issueId);
|
|
25512
25577
|
if (ghResolved.isGitHub) try {
|
|
25513
25578
|
const { stdout } = await execFileAsync$4("gh", [
|
|
@@ -25544,7 +25609,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25544
25609
|
actions.push(msg);
|
|
25545
25610
|
console.log(`[deacon] ${msg}`);
|
|
25546
25611
|
try {
|
|
25547
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
25612
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
25548
25613
|
postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
|
|
25549
25614
|
} catch (err) {
|
|
25550
25615
|
console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
|
|
@@ -25569,7 +25634,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
25569
25634
|
async function reconcileFalseMerged() {
|
|
25570
25635
|
const actions = [];
|
|
25571
25636
|
try {
|
|
25572
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25637
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
25573
25638
|
if (!isGitHubAppConfigured()) return actions;
|
|
25574
25639
|
const statuses = loadReviewStatuses();
|
|
25575
25640
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -25614,7 +25679,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
25614
25679
|
async function reconcileClosedPrReadyForMerge() {
|
|
25615
25680
|
const actions = [];
|
|
25616
25681
|
try {
|
|
25617
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25682
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
25618
25683
|
if (!isGitHubAppConfigured()) return actions;
|
|
25619
25684
|
const statuses = loadReviewStatuses();
|
|
25620
25685
|
const now = Date.now();
|
|
@@ -25686,7 +25751,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
25686
25751
|
async function reconcileStaleMergeBlockers() {
|
|
25687
25752
|
const actions = [];
|
|
25688
25753
|
try {
|
|
25689
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
25754
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BhAY7TUd.js");
|
|
25690
25755
|
const statuses = loadReviewStatuses();
|
|
25691
25756
|
const now = Date.now();
|
|
25692
25757
|
const deps = buildRealConflictGateDeps();
|
|
@@ -25829,7 +25894,7 @@ async function checkFailedMergeRetry() {
|
|
|
25829
25894
|
if (ciEntry.count === 5) {
|
|
25830
25895
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
25831
25896
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
25832
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25897
|
+
const { writeFeedbackFile } = await import("./feedback-writer-D3a22RCd.js");
|
|
25833
25898
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
25834
25899
|
issueId,
|
|
25835
25900
|
specialist: "merge-agent",
|
|
@@ -25861,7 +25926,7 @@ async function checkFailedMergeRetry() {
|
|
|
25861
25926
|
ciRetryMap.set(issueId, ciEntry);
|
|
25862
25927
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
25863
25928
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
25864
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25929
|
+
const { writeFeedbackFile } = await import("./feedback-writer-D3a22RCd.js");
|
|
25865
25930
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
25866
25931
|
issueId,
|
|
25867
25932
|
specialist: "merge-agent",
|
|
@@ -25889,7 +25954,7 @@ async function checkFailedMergeRetry() {
|
|
|
25889
25954
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
25890
25955
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
25891
25956
|
const timeoutNotes = status.mergeNotes;
|
|
25892
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25957
|
+
const { writeFeedbackFile } = await import("./feedback-writer-D3a22RCd.js");
|
|
25893
25958
|
await Effect.runPromise(writeFeedbackFile({
|
|
25894
25959
|
issueId: issueIdForFb,
|
|
25895
25960
|
specialist: "merge-agent",
|
|
@@ -25994,7 +26059,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
25994
26059
|
} } : {}
|
|
25995
26060
|
};
|
|
25996
26061
|
try {
|
|
25997
|
-
const { closeOut } = await import("./workflows-
|
|
26062
|
+
const { closeOut } = await import("./workflows-BQu4RFQ-.js");
|
|
25998
26063
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
25999
26064
|
if (!result.success) {
|
|
26000
26065
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -26046,7 +26111,8 @@ async function checkFirstCompletionAgents() {
|
|
|
26046
26111
|
if (existsSync(completedFile) || existsSync(processedMarker)) continue;
|
|
26047
26112
|
if (!isAgentIdleForNudge(agent.id, FIRST_COMPLETION_IDLE_MS)) continue;
|
|
26048
26113
|
const runtimeState = getAgentRuntimeStateSync(agent.id);
|
|
26049
|
-
|
|
26114
|
+
if (!runtimeState) continue;
|
|
26115
|
+
const idleMs = now - new Date(runtimeState.lastActivity ?? 0).getTime();
|
|
26050
26116
|
if (idleMs < FIRST_COMPLETION_IDLE_MS) continue;
|
|
26051
26117
|
const lastNudge = firstCompletionCooldowns.get(agent.id);
|
|
26052
26118
|
if (lastNudge && now - lastNudge < FIRST_COMPLETION_COOLDOWN_MS) continue;
|
|
@@ -26346,6 +26412,41 @@ async function reconcileLiveWorkSpawnPlaceholder(state, notifyStatusChanged, dep
|
|
|
26346
26412
|
return message;
|
|
26347
26413
|
}
|
|
26348
26414
|
//#endregion
|
|
26415
|
+
//#region ../../lib/agents/supervisor-liveness.ts
|
|
26416
|
+
/**
|
|
26417
|
+
* PAN-3002: supervisor-delivered agents (pty-supervisor, deliveryMethod:
|
|
26418
|
+
* supervisor) keep working after their tmux session dies — the worker holds
|
|
26419
|
+
* the pty and detaches. A tmux-only liveness check then declares a healthy
|
|
26420
|
+
* agent dead and marks it stopped, splitting state from reality: MIN-882 ran
|
|
26421
|
+
* 36h untracked ($166, 35MB transcript) while the pipeline showed "Planned
|
|
26422
|
+
* idle", and PAN-2997 was killed 41s after a healthy resume.
|
|
26423
|
+
*
|
|
26424
|
+
* A live pty-supervisor process carrying `--name <agentId>` is positive proof
|
|
26425
|
+
* of life regardless of tmux. The deacon's liveness arbiter consults this
|
|
26426
|
+
* before declaring an agent orphaned.
|
|
26427
|
+
*/
|
|
26428
|
+
const defaultPgrep = (pattern) => {
|
|
26429
|
+
try {
|
|
26430
|
+
execFileSync("pgrep", ["-f", pattern], { stdio: [
|
|
26431
|
+
"ignore",
|
|
26432
|
+
"ignore",
|
|
26433
|
+
"ignore"
|
|
26434
|
+
] });
|
|
26435
|
+
return true;
|
|
26436
|
+
} catch {
|
|
26437
|
+
return false;
|
|
26438
|
+
}
|
|
26439
|
+
};
|
|
26440
|
+
/**
|
|
26441
|
+
* True when a pty-supervisor process for this agent is alive. `--name` is
|
|
26442
|
+
* boundary-anchored so `agent-min-882` does not match `agent-min-882-review`.
|
|
26443
|
+
* Agent ids are `[a-z0-9-]` by construction, so the pattern needs no escaping.
|
|
26444
|
+
*/
|
|
26445
|
+
function supervisorProcessAliveSync(agentId, pgrep = defaultPgrep) {
|
|
26446
|
+
if (!agentId) return false;
|
|
26447
|
+
return pgrep(`pty-supervisor\\.js.*--name ${agentId}(\\s|$)`);
|
|
26448
|
+
}
|
|
26449
|
+
//#endregion
|
|
26349
26450
|
//#region ../../lib/cloister/confirmed-session-query.ts
|
|
26350
26451
|
init_tmux();
|
|
26351
26452
|
const consecutiveMisses = /* @__PURE__ */ new Map();
|
|
@@ -26359,6 +26460,10 @@ function queryConfirmedSession(agentId) {
|
|
|
26359
26460
|
consecutiveMisses.delete(agentId);
|
|
26360
26461
|
return [query];
|
|
26361
26462
|
}
|
|
26463
|
+
if (supervisorProcessAliveSync(agentId)) {
|
|
26464
|
+
consecutiveMisses.delete(agentId);
|
|
26465
|
+
return [query, `retained — live pty-supervisor process despite missing tmux session (PAN-3002)`];
|
|
26466
|
+
}
|
|
26362
26467
|
const missCount = (consecutiveMisses.get(agentId) ?? 0) + 1;
|
|
26363
26468
|
consecutiveMisses.set(agentId, missCount);
|
|
26364
26469
|
return missCount < 2 ? [query, `retained after first confirmed tmux miss (${query.detail})`] : [query];
|
|
@@ -26624,7 +26729,7 @@ function buildStalledResumePrompt(state) {
|
|
|
26624
26729
|
return null;
|
|
26625
26730
|
}
|
|
26626
26731
|
}
|
|
26627
|
-
return
|
|
26732
|
+
return buildResumeContinueMessage(state);
|
|
26628
26733
|
}
|
|
26629
26734
|
function readyTaskLine(item) {
|
|
26630
26735
|
return `${item.id} ${item.title}`.trim();
|
|
@@ -26649,7 +26754,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
26649
26754
|
const message = buildStalledResumePrompt(state);
|
|
26650
26755
|
if (!message) continue;
|
|
26651
26756
|
try {
|
|
26652
|
-
const { messageAgent } = await import("./agents-
|
|
26757
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
26653
26758
|
await messageAgent(agentId, message);
|
|
26654
26759
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
26655
26760
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -26763,7 +26868,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
26763
26868
|
"Continue the per-item workflow without asking — claim it (`pan task claim <item-id>`), implement, commit, push, then complete it through `pan task done <item-id>`. Inspection is conditional on metadata.requiresInspection (default false; check the plan item before deciding to call `pan inspect`). Do NOT end your turn with a multi-paragraph summary; just advance to the next bead."
|
|
26764
26869
|
].join("\n");
|
|
26765
26870
|
try {
|
|
26766
|
-
const { messageAgent } = await import("./agents-
|
|
26871
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
26767
26872
|
await messageAgent(agentId, message);
|
|
26768
26873
|
writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
|
|
26769
26874
|
const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
|
|
@@ -26828,6 +26933,11 @@ async function handleAgentStoppedEvent$1(agentId, opts = {}, deps) {
|
|
|
26828
26933
|
logDeaconEventSync(`handleAgentStoppedEvent: ${agentId} skipped — held by boot reconciliation decision`);
|
|
26829
26934
|
return null;
|
|
26830
26935
|
}
|
|
26936
|
+
const bootDecision = getBootReconciliationState().decision;
|
|
26937
|
+
if (!skipGlobalGates && (bootDecision === "pending" || bootDecision === "hold_all")) {
|
|
26938
|
+
logDeaconEventSync(`handleAgentStoppedEvent: ${agentId} held — boot reconciliation ${bootDecision} (late-arriving candidate, evaluated with the batch)`);
|
|
26939
|
+
return null;
|
|
26940
|
+
}
|
|
26831
26941
|
if (state.paused === true) {
|
|
26832
26942
|
logDeaconEventSync(`handleAgentStoppedEvent: ${agentId} skipped — ${isVerifyPausedAgentState(state) ? "verify-paused" : "manually-paused"} (${state.pausedReason ?? "no reason"})`);
|
|
26833
26943
|
return null;
|
|
@@ -27987,7 +28097,7 @@ async function cleanupStaleAgentState() {
|
|
|
27987
28097
|
try {
|
|
27988
28098
|
if (await Effect.runPromise(sessionExists(dir.name))) continue;
|
|
27989
28099
|
} catch {}
|
|
27990
|
-
if (dir.name.startsWith("agent-")) {
|
|
28100
|
+
if (dir.name.startsWith("agent-") || dir.name.startsWith("strike-")) {
|
|
27991
28101
|
if (await Effect.runPromise(getAgentState(dir.name).pipe(Effect.catch(() => Effect.succeed(null)))) != null) continue;
|
|
27992
28102
|
}
|
|
27993
28103
|
const ageMs = now - statSync(agentDir).mtimeMs;
|
|
@@ -28032,8 +28142,8 @@ async function cleanupStaleAgentState() {
|
|
|
28032
28142
|
*/
|
|
28033
28143
|
async function cleanupAbandonedFeedback() {
|
|
28034
28144
|
const actions = [];
|
|
28035
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28036
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
28145
|
+
const { getReviewStatusSync } = await import("./review-status-btEYlaxA.js");
|
|
28146
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-D3a22RCd.js");
|
|
28037
28147
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
28038
28148
|
const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
|
|
28039
28149
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -28104,7 +28214,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
28104
28214
|
if (!issueId) return null;
|
|
28105
28215
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
28106
28216
|
if (sessions.includes(agentSession)) return null;
|
|
28107
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28217
|
+
const { getReviewStatusSync } = await import("./review-status-btEYlaxA.js");
|
|
28108
28218
|
try {
|
|
28109
28219
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
28110
28220
|
} catch {}
|
|
@@ -28226,7 +28336,7 @@ async function checkOrphanedCompletions() {
|
|
|
28226
28336
|
async function checkPendingTestDispatch() {
|
|
28227
28337
|
const actions = [];
|
|
28228
28338
|
try {
|
|
28229
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28339
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-btEYlaxA.js");
|
|
28230
28340
|
const statuses = loadReviewStatuses();
|
|
28231
28341
|
const now = Date.now();
|
|
28232
28342
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -28259,7 +28369,7 @@ async function checkPendingTestDispatch() {
|
|
|
28259
28369
|
console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
|
|
28260
28370
|
continue;
|
|
28261
28371
|
}
|
|
28262
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28372
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
28263
28373
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
28264
28374
|
if (!resolved) continue;
|
|
28265
28375
|
const issueLower = issueId.toLowerCase();
|
|
@@ -28274,8 +28384,8 @@ async function checkPendingTestDispatch() {
|
|
|
28274
28384
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28275
28385
|
continue;
|
|
28276
28386
|
}
|
|
28277
|
-
const { spawnRun } = await import("./agents-
|
|
28278
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
28387
|
+
const { spawnRun } = await import("./agents-wi9NWzs2.js");
|
|
28388
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-MbxX5vqq.js");
|
|
28279
28389
|
try {
|
|
28280
28390
|
const run = await spawnRun(issueId, "test", {
|
|
28281
28391
|
workspace,
|
|
@@ -28398,7 +28508,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28398
28508
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
28399
28509
|
const nudge = `Your test verdict (${decision.status}) is already written to .pan/test/result.json. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${cmd}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
28400
28510
|
try {
|
|
28401
|
-
const { messageAgent } = await import("./agents-
|
|
28511
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
28402
28512
|
await messageAgent(testSession, nudge);
|
|
28403
28513
|
unsignaledTestNudges.set(testSession, now);
|
|
28404
28514
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -28412,7 +28522,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28412
28522
|
case "nudge-write": {
|
|
28413
28523
|
const nudge = `Your test run for ${issueId} looks finished but no verdict was recorded. Decide the verdict from the gates/UAT you ran, then do BOTH of these now: (1) write the workspace file .pan/test/result.json as {"status":"passed"|"failed","notes":"<evidence>"}, and (2) run: pan admin specialists done test ${issueId} --status passed|failed. Do this immediately — do not summarize or ask questions, just write the file and run the command.`;
|
|
28414
28524
|
try {
|
|
28415
|
-
const { messageAgent } = await import("./agents-
|
|
28525
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
28416
28526
|
await messageAgent(testSession, nudge);
|
|
28417
28527
|
unsignaledTestNudges.set(testSession, now);
|
|
28418
28528
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -28435,8 +28545,8 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28435
28545
|
async function checkVerificationReviewContradiction() {
|
|
28436
28546
|
const actions = [];
|
|
28437
28547
|
try {
|
|
28438
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28439
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28548
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-btEYlaxA.js");
|
|
28549
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
28440
28550
|
const statuses = loadReviewStatuses();
|
|
28441
28551
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
28442
28552
|
let reviewedAtCommit;
|
|
@@ -28485,7 +28595,7 @@ async function checkPostReviewCommits() {
|
|
|
28485
28595
|
const actions = [];
|
|
28486
28596
|
try {
|
|
28487
28597
|
const statuses = loadReviewStatuses();
|
|
28488
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28598
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
28489
28599
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
28490
28600
|
if (status.mergeStatus === "merged") continue;
|
|
28491
28601
|
if (!status.reviewedAtCommit) continue;
|
|
@@ -28540,7 +28650,7 @@ async function checkPostReviewCommits() {
|
|
|
28540
28650
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
28541
28651
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28542
28652
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
28543
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
28653
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
28544
28654
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
28545
28655
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
28546
28656
|
issueId,
|
|
@@ -28640,7 +28750,7 @@ async function checkReadyForMergeStuck() {
|
|
|
28640
28750
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
28641
28751
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
28642
28752
|
async function reconcileTestStatusFromGreenCi() {
|
|
28643
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
28753
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
28644
28754
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
28645
28755
|
isGitHubAppConfigured,
|
|
28646
28756
|
loadReviewStatuses,
|
|
@@ -28661,7 +28771,7 @@ async function reconcileTestStatusFromGreenCi() {
|
|
|
28661
28771
|
*/
|
|
28662
28772
|
async function clearStaleCiFeedback(issueId) {
|
|
28663
28773
|
const { readdir, rm } = await import("fs/promises");
|
|
28664
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28774
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
28665
28775
|
const projectConfig = resolveProjectFromIssueSync(issueId);
|
|
28666
28776
|
if (!projectConfig) return;
|
|
28667
28777
|
const repoDir = projectConfig.projectPath;
|
|
@@ -28957,7 +29067,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
28957
29067
|
}
|
|
28958
29068
|
}
|
|
28959
29069
|
try {
|
|
28960
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29070
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
28961
29071
|
const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
|
|
28962
29072
|
if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
|
|
28963
29073
|
} catch {}
|
|
@@ -29006,8 +29116,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29006
29116
|
async function checkMergedWorkSessions() {
|
|
29007
29117
|
const actions = [];
|
|
29008
29118
|
try {
|
|
29009
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
29010
|
-
const { setAgentPaused } = await import("./agents-
|
|
29119
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-7KeHv1R1.js");
|
|
29120
|
+
const { setAgentPaused } = await import("./agents-wi9NWzs2.js");
|
|
29011
29121
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29012
29122
|
for (const session of toKill) try {
|
|
29013
29123
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -29047,7 +29157,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
29047
29157
|
async function checkAwaitingTestWorkSessions() {
|
|
29048
29158
|
const actions = [];
|
|
29049
29159
|
try {
|
|
29050
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
29160
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-7KeHv1R1.js");
|
|
29051
29161
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29052
29162
|
const now = Date.now();
|
|
29053
29163
|
for (const session of candidates) {
|
|
@@ -29100,14 +29210,14 @@ async function runPatrol() {
|
|
|
29100
29210
|
hasLoggedGlobalPauseSkip = false;
|
|
29101
29211
|
addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
|
|
29102
29212
|
console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
|
|
29103
|
-
for (const a of await (await import("./stale-task-claims-
|
|
29213
|
+
for (const a of await (await import("./stale-task-claims-KJKxxiiQ.js")).patrolStaleTaskClaims()) {
|
|
29104
29214
|
actions.push(a);
|
|
29105
29215
|
addLog("action", a, state.patrolCycle);
|
|
29106
29216
|
}
|
|
29107
29217
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
29108
29218
|
actions.push(...stuckRemediationActions);
|
|
29109
29219
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
29110
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
29220
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-BVwW4qRn.js");
|
|
29111
29221
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
29112
29222
|
actions.push(...reconciledJournalActions);
|
|
29113
29223
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29119,7 +29229,7 @@ async function runPatrol() {
|
|
|
29119
29229
|
const age = Date.now() - (pending.timestamp ?? 0);
|
|
29120
29230
|
if (age < 3600 * 1e3) {
|
|
29121
29231
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
29122
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29232
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
29123
29233
|
const { unlinkSync } = await import("fs");
|
|
29124
29234
|
unlinkSync(pendingFile);
|
|
29125
29235
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
@@ -29133,7 +29243,7 @@ async function runPatrol() {
|
|
|
29133
29243
|
} catch (err) {
|
|
29134
29244
|
console.warn(`[deacon] Failed to process pending lifecycle: ${err.message}`);
|
|
29135
29245
|
}
|
|
29136
|
-
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-
|
|
29246
|
+
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-AiFoP8dw.js")).runScheduledDeployPatrol();
|
|
29137
29247
|
const livenessActions = await reconcileAgentLiveness();
|
|
29138
29248
|
actions.push(...livenessActions);
|
|
29139
29249
|
for (const a of livenessActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29165,7 +29275,7 @@ async function runPatrol() {
|
|
|
29165
29275
|
actions.push(...suspendActions);
|
|
29166
29276
|
for (const a of suspendActions) addLog("action", a, state.patrolCycle);
|
|
29167
29277
|
try {
|
|
29168
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29278
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
29169
29279
|
const allStatuses = loadReviewStatuses();
|
|
29170
29280
|
for (const [issueId, status] of Object.entries(allStatuses)) {
|
|
29171
29281
|
if (!status.readyForMerge || status.mergeStatus === "merged") continue;
|
|
@@ -29185,7 +29295,7 @@ async function runPatrol() {
|
|
|
29185
29295
|
} catch (err) {
|
|
29186
29296
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
29187
29297
|
}
|
|
29188
|
-
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-
|
|
29298
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-BVwW4qRn.js");
|
|
29189
29299
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
29190
29300
|
actions.push(...reapedWorkActions);
|
|
29191
29301
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29193,7 +29303,7 @@ async function runPatrol() {
|
|
|
29193
29303
|
actions.push(...reapedMergedAdvancingActions);
|
|
29194
29304
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
29195
29305
|
try {
|
|
29196
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
29306
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-fVe9e_3u.js");
|
|
29197
29307
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
29198
29308
|
actions.push(...remoteCredentialActions);
|
|
29199
29309
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29201,7 +29311,7 @@ async function runPatrol() {
|
|
|
29201
29311
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29202
29312
|
}
|
|
29203
29313
|
try {
|
|
29204
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
29314
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-CA3Ihlxj.js");
|
|
29205
29315
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
29206
29316
|
actions.push(...heartbeatActions);
|
|
29207
29317
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29209,7 +29319,7 @@ async function runPatrol() {
|
|
|
29209
29319
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29210
29320
|
}
|
|
29211
29321
|
try {
|
|
29212
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
29322
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-fVe9e_3u.js");
|
|
29213
29323
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
29214
29324
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
29215
29325
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -29394,7 +29504,7 @@ async function runPatrol() {
|
|
|
29394
29504
|
const issueId = runtimeState.currentIssue;
|
|
29395
29505
|
try {
|
|
29396
29506
|
if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
|
|
29397
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29507
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.js");
|
|
29398
29508
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
29399
29509
|
if (resolved) {
|
|
29400
29510
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
@@ -29408,7 +29518,7 @@ async function runPatrol() {
|
|
|
29408
29518
|
mergeStatus: "merged",
|
|
29409
29519
|
readyForMerge: false
|
|
29410
29520
|
});
|
|
29411
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29521
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
29412
29522
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
29413
29523
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
29414
29524
|
} else {
|
|
@@ -29588,7 +29698,7 @@ function startDeacon() {
|
|
|
29588
29698
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
29589
29699
|
(async () => {
|
|
29590
29700
|
await reconcileAgentLiveness();
|
|
29591
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
29701
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-BVwW4qRn.js");
|
|
29592
29702
|
await runBootAdvancingSelfHeal();
|
|
29593
29703
|
runScheduledPatrol("startup");
|
|
29594
29704
|
})().catch((err) => {
|
|
@@ -29660,4 +29770,4 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
29660
29770
|
//#endregion
|
|
29661
29771
|
export { reconcileClosedPrReadyForMerge as $, reconcileAgentLiveness as A, getContainerHistory as At, recordDeadEndNeedsYou as B, getLastPatrolResult as C, paneShowsClaudeBootBlockingScreen as Ct, isDeaconRunning as D, classifyMemoryPressure as Dt, handleAgentStoppedForOrphanReviewerSessions as E, WORK_LAUNCHER_GRACE_MS as Et, setAgentStatusChangedNotifier as F, getSystemHealthEvidenceSnapshot as Ft, redeliverUndeliveredKickoffs as G, isRapidPostResumeDeath as H, setAgentStoppedNotifier as I, getSystemHealthSnapshot as It, startBootReconciliation as J, isBootReconciliationCandidate as K, setMergeReadyNotifier as L, isSmeeConfiguredSync as Lt, resetPatrolHeartbeatForStartup as M, getAcceptedSystemHealthSnapshot as Mt, runPatrol as N, getDeployStaleness as Nt, loadConfig as O, getResourceStacks as Ot, saveState as P, getResourceConfig as Pt, ciRetryMap as Q, startDeacon as R, startSmeeProcessSync as Rt, getDeaconStatus as S, deliverOrchestratedCompact as St, handleAgentStoppedEvent as T, checkInspectAgentTimeouts as Tt, nudgeIdleWorkAgentsWithOpenBeads as U, isPreKickoffLaunchDeath as V, nudgeStalledResumeWorkAgents as W, checkFailedMergeRetry as X, autoCloseOut as Y, checkFirstCompletionAgents as Z, cleanupOrphanReviewerSessions as _, stalledReviewConvoyRecoveryState as _t, checkCompletedButUnsignaledTests as a, cleanupOrphanedReviewSessions as at, containerRestartBackoffMs as b, contextProactiveCompactState as bt, checkMergedWorkSessions as c, checkCompletedButUnsignaledReviews as ct, checkPostReviewCommits as d, checkMissingReviewStatuses as dt, reconcileFalseMerged as et, checkReadyForMergeStuck as f, checkOrphanedReviewStatuses as ft, cleanupAbandonedFeedback as g, reviewConvoyLiveness as gt, checkWorkspaceContainerHealth as h, recoverStalledReviewConvoys as ht, checkAwaitingTestWorkSessions as i, reconcileStuckReadyForMerge as it, reconcileTestStatusFromGreenCi as j, getCurrentDockerStats as jt, loadState as k, formatUptime as kt, checkOrphanedCompletions as l, checkStuckReviewing as lt, checkVerificationReviewContradiction as m, handleWorkCompleted as mt, assessDeaconPatrolFreshness as n, reconcileStaleMergeBlockers as nt, checkDeadEndAgents as o, monitorReviewConvoySignals as ot, checkStuckWorkAgents as p, handleReviewCoordinatorDied as pt, listBootReconciliationCandidates as q, checkAndSuspendIdleAgents as r, reconcileStaleMergeStatus as rt, checkMassDeath as s, synthesizeReviewFromReports as st, applyBootReconciliationDecision as t, reconcileMergedButReviewing as tt, checkPendingTestDispatch as u, isSynthesisForActiveReviewRun as ut, cleanupOrphanedPlanningSessions as v, checkApiErrorAgents as vt, handleAgentHeartbeatDeadEvent as w, INSPECT_TIMEOUT_MS as wt, getDeaconLogs as x, stuckOverflowNativeRecoveryState as xt, cleanupStaleAgentState as y, contextOverflowRecoveryState as yt, stopDeacon as z, classifyAgentHealth as zt };
|
|
29662
29772
|
|
|
29663
|
-
//# sourceMappingURL=deacon-
|
|
29773
|
+
//# sourceMappingURL=deacon-CU_cAYSR.js.map
|