@overdeck/desktop 0.45.22 → 0.45.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DOA0KgXx.js} +5 -5
- package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BBu6DSNm.js} +6 -6
- package/server/{agent-gc-Dj2gncak.js → agent-gc-BV1q_2EV.js} +4 -4
- package/server/agent-state-Bg0lhqwj.js +3 -0
- package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-CnzFKSAQ.js} +1 -1
- package/server/{agent-state-service-DistflNn.js → agent-state-service-HoK8U4jW.js} +5 -5
- package/server/{agents-DXdHmRTC.js → agents-B4Bjbkfv.js} +4 -4
- package/server/agents-FlIgQ3ql.js +3 -0
- package/server/{archive-planning-BvDuWNMo.js → archive-planning-DYrYojxl.js} +30 -6
- package/server/{archive-planning-Cp_DC1j-.js → archive-planning-zkJb3BeM.js} +1 -1
- package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
- package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
- package/server/{behavior-CGj16clS.js → behavior-B_-4EKF3.js} +2 -2
- package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-DWdW7vUm.js} +2 -2
- package/server/{build-info-NU3KbXYw.js → build-info-BT096lEl.js} +3 -3
- package/server/{build-info-BRpqQvNd.js → build-info-DgTqZkL5.js} +1 -1
- package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-B7Bt29J0.js} +1 -1
- package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-DDqcGyu8.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-BJum14fs.js → checkpoints-C-AXLfYT.js} +2 -2
- package/server/{checkpoints-B5jFNi2G.js → checkpoints-CpgCjAlN.js} +1 -1
- package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
- package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-but-_qGY.js} +2 -2
- package/server/{claude-permissions-nSFKH78M.js → claude-permissions-H_5wHQZQ.js} +2 -2
- package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-BTENVmYf.js} +1 -1
- package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
- package/server/cli-BsVIHwzC.js +3 -0
- package/server/{cli-CbKNkFE5.js → cli-vBeXbPrq.js} +9 -9
- package/server/{cliproxy-Brf_5MuG.js → cliproxy-Bgb2XCqi.js} +2 -2
- package/server/{cliproxy-bONZDBbC.js → cliproxy-DW0V86F8.js} +1 -1
- package/server/{close-issue-CxReRxIc.js → close-issue-Dn_4c4G8.js} +5 -5
- package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
- package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-hANY_ehE.js} +9 -9
- package/server/codex-Dg7Is5yb.js +3 -0
- package/server/{codex-CbmztVcc.js → codex-TmSi-yTv.js} +27 -8
- package/server/{codex-parser-jl8AeAmB.js → codex-parser-C4gSH-IR.js} +2 -2
- package/server/{config-q4Gvd8dq.js → config-CCvjQf27.js} +2 -2
- package/server/{config-BJKocXKd.js → config-DUIhMN_T.js} +1 -1
- package/server/{config-DeTsoZdR.js → config-DjLOdbgT.js} +2 -2
- package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DvyMuOle.js} +55 -186
- package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BSJkNTdp.js} +1 -1
- package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-CmrYpa47.js} +3 -3
- package/server/{context-layers-DlQKkHH2.js → context-layers-B3Nt58jl.js} +2 -2
- package/server/{context-layers-15gDOk20.js → context-layers-ZYFcWiyc.js} +3 -3
- package/server/{control-settings-D_odMIaC.js → control-settings-aP1ANIlI.js} +4 -4
- package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CNbTLB86.js} +8 -8
- package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-DiG5zWQq.js} +1 -1
- package/server/{conversation-service-C3avRVEr.js → conversation-service-Du-MTNpJ.js} +6 -6
- package/server/{conversation-service-Dq33SYEj.js → conversation-service-Up7FEzIC.js} +1 -1
- package/server/{conversations-H9if0bCQ.js → conversations-6mPANqvL.js} +1 -1
- package/server/{conversations-bYpM9-kZ.js → conversations-DbOs1e9Q.js} +4 -4
- package/server/{cost-wH46-WsJ.js → cost-CW4WSe72.js} +3 -3
- package/server/{cost-Codk1pc2.js → cost-Ca0YTWDw.js} +18 -2
- package/server/{cost-sync-D_cre6WM.js → cost-sync-C0VdGme1.js} +3 -3
- package/server/{dag-CJpgf9A3.js → dag-CdOjJVDT.js} +9 -9
- package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-CT-IypG3.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-B8HbQdqU.js → deacon-DYSEJb48.js} +3 -3
- package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
- package/server/{deacon-CkT_kznS.js → deacon-pRnyD5w9.js} +266 -577
- package/server/deacon-swarm-9jRLS5Ke.js +2 -0
- package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-DftYRDo8.js} +17 -17
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-Bjsho_ha.js} +136 -19
- package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-CM6W1-c6.js} +1 -1
- package/server/{deploy-window-wDf4UgHt.js → deploy-window-DeP_OIRk.js} +77 -10
- package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-BpMoHlkR.js} +2 -2
- package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
- package/server/dist-Bd3vn0Hw.js +3 -0
- package/server/{dist-D-Ed5yVw.js → dist-DyRx4cI7.js} +1 -1
- package/server/{docker-BCZ89M9X.js → docker-BK7HIcBj.js} +2 -2
- package/server/{dod-DbJLYcHv.js → dod-BrSfUHm0.js} +1 -1
- package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
- package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DseivYEy.js} +4 -4
- package/server/{esm-shims-dTeNdq7X.js → esm-shims-CbI3BVkl.js} +1 -1
- package/server/{event-store-CpBGsO6_.js → event-store-Cr5PQwFC.js} +1 -1
- package/server/{event-store-TnWdydfB.js → event-store-tdiY5eDZ.js} +3 -3
- package/server/{events-DSUdR-04.js → events-CC1dgUpx.js} +3 -3
- package/server/{events-Dsuv6qyB.js → events-CvvGK6LT.js} +1 -1
- package/server/{factory-BMrK4TrE.js → factory-CynerjXO.js} +50 -13
- package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-B0pmAz0a.js} +4 -4
- package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-_wUBRD3J.js} +2 -2
- package/server/{features-Bc-Bmiye.js → features-Dhxz-wLc.js} +2 -2
- package/server/{feedback-target-DZ-iAnAa.js → feedback-target-CPS15Vte.js} +7 -7
- package/server/{feedback-target-DS6NUuSs.js → feedback-target-iygZwmMc.js} +1 -1
- package/server/{feedback-writer-BXP6g75N.js → feedback-writer-C9b6ccN1.js} +6 -5
- package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-qmiMbqTZ.js} +1 -1
- package/server/{flywheel-Ctr5uuvo.js → flywheel-DMCUzDWg.js} +1 -1
- package/server/{flywheel-COR0mbRI.js → flywheel-DSSpWmqF.js} +13 -13
- package/server/{flywheel-6WHU4O7A.js → flywheel-DcBkQvgE.js} +14 -14
- package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
- package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
- package/server/forge-B-ZWyTRm.js +2 -0
- package/server/{forge-B1S_KZv4.js → forge-Ch9gCFod.js} +2 -2
- package/server/{from-DpwQ-sc3.js → from-CJ_aH5jD.js} +1 -1
- package/server/{fts-db-DmAcuCkV.js → fts-db-CKgg0VKg.js} +2 -2
- package/server/{fts-operations-7d_RkmWp.js → fts-operations-BrL_VTRr.js} +2 -2
- package/server/{git-utils-Cc3FHDKd.js → git-utils-BVa07a4a.js} +2 -2
- package/server/{git-utils-CsKGnzFA.js → git-utils-Dry_Ka_D.js} +1 -1
- package/server/{github-app-CDPtGF7J.js → github-app-CMBdIFBQ.js} +11 -3
- package/server/{github-app-CU14oYzP.js → github-app-CPfoFAdV.js} +1 -1
- package/server/{github-client-XjTJbBm7.js → github-client--XVlDpwM.js} +2 -2
- package/server/{github-client-CwBZZ3t7.js → github-client-B4QsdE-X.js} +1 -1
- package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-BRbDW-qk.js} +2 -2
- package/server/{harness-binary-B2CTcD84.js → harness-binary-CVio2m-u.js} +1 -1
- package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-qHJBhy3Z.js} +4 -4
- package/server/{health-events-DREeevle.js → health-events-C9B8y1Hm.js} +2 -2
- package/server/{health-events-C1whmd58.js → health-events-CpfvuVmm.js} +1 -1
- package/server/{hooks-yxRsjk-z.js → hooks-DUXw8A0-.js} +2 -2
- package/server/{hooks-B-HItBiS.js → hooks-ltecuFqZ.js} +1 -1
- package/server/{hume-Dz_OymXE.js → hume-BEq0bUDg.js} +2 -2
- package/server/hume-B_DbflNM.js +3 -0
- package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
- package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
- package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-aQ1IxeI3.js} +2 -2
- package/server/{infra-D4iNWMA5.js → infra-CzaSOgul.js} +4 -4
- package/server/{injection-D7T75Pye.js → injection-DZ0PfYa4.js} +7 -7
- package/server/{injection-BVNa4MQW.js → injection-oNZeoDhL.js} +1 -1
- package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-DJKLWcVT.js} +12 -12
- package/server/inspect-agent-ch-F-5Ci.js +2 -0
- package/server/{internal-token-CXsfxslp.js → internal-token-Bb4XeV2x.js} +2 -2
- package/server/{internal-token-C9DdEOKY.js → internal-token-DXdfprGr.js} +1 -1
- package/server/{io-DQR9PMgS.js → io-B3_AHDfr.js} +160 -184
- package/server/{issue-closed-DtmJM0D0.js → issue-closed-zhdvQicO.js} +7 -7
- package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-CreaCkjW.js} +22 -22
- package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
- package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-B5ushCvE.js} +8 -8
- package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-DabvBWUp.js} +1 -1
- package/server/{issues-pDW9VUNz.js → issues-B6ToV6x1.js} +2 -2
- package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-Dhflo1SH.js} +3 -3
- package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-BKPJm4Hv.js} +3 -3
- package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-DdWbHEBu.js} +4 -4
- package/server/{launcher-generator-COgR2By1.js → launcher-generator-CHVm7bGT.js} +10 -9
- package/server/{layers-Cp1To4L8.js → layers-DzxSTGNA.js} +2 -2
- package/server/lifecycle-DfeyBDwA.js +121 -0
- package/server/lifecycle-io-Bsnr2K4F.js +3 -0
- package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-D8iNBcux.js} +37 -37
- package/server/{lifecycle-CtPDcZ9u.js → lifecycle-sycO16hj.js} +6 -6
- package/server/{linear-client-DsFkIxee.js → linear-client-D4zqMnX7.js} +2 -2
- package/server/{linear-client-YwZMDIwQ.js → linear-client-DqhDQO9k.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-C1t-bspg.js → merge-C_ZEhbqI.js} +3 -3
- package/server/{merge-BwsyNRJV.js → merge-DK23JEdS.js} +1 -1
- package/server/{merge-agent-B-SnXOoc.js → merge-agent-BQM3a8z5.js} +1 -1
- package/server/{merge-agent-DDiIjzk-.js → merge-agent-XrB80vfT.js} +28 -28
- package/server/{merge-batch-Byt-QnEl.js → merge-batch-Bwoyr8Je.js} +1 -1
- package/server/{merge-blockers-BYjeXrVN.js → merge-blockers-BsFjGrQ8.js} +2 -2
- package/server/merge-ops-DlB1IM0Y.js +2 -0
- package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-C1KIVr0s.js} +2 -2
- package/server/{merge-set-DiISXcC-.js → merge-set-DLz0MkGT.js} +3 -3
- package/server/{merge-set-6LEglm6o.js → merge-set-DnSYdBEp.js} +1 -1
- package/server/{merge-sync-Do8_q32h.js → merge-sync-DZ9dojJn.js} +2 -2
- package/server/{merge-sync-B95_4in_.js → merge-sync-SSv3E-pl.js} +1 -1
- package/server/{merge-train-CKana8EH.js → merge-train-DxDfBTjr.js} +3 -3
- package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-CyYQUksx.js} +4 -4
- package/server/{merge-verification-CqnUzGEK.js → merge-verification-CSizH3HY.js} +4 -4
- package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-Dt8YPN5S.js} +2 -2
- package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Cx3K0hHi.js} +11 -8
- package/server/node_modules/.package-lock.json +1 -1
- package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
- package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-neK8dHQk.js} +15 -13
- package/server/package-lock.json +2 -2
- package/server/package.json +1 -1
- package/server/{pan-dir-DOcf6ug3.js → pan-dir-DeVUgwA7.js} +78 -58
- package/server/{paths-DooHpt9p.js → paths-_zEts6wc.js} +2 -2
- package/server/{pickup-CaskQ7j6.js → pickup-Dd0Znxxy.js} +1 -1
- package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-0HaEGDlH.js} +186 -67
- package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-6iCJplFZ.js} +1 -1
- package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-D0ykk59O.js} +2 -2
- package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-2sK1apsO.js} +2 -2
- package/server/projects-9SkRpES9.js +3 -0
- package/server/{prompts-EvhMeeHG.js → prompts-Dp4Tpk39.js} +2 -2
- package/server/{providers-DNSQqy2V.js → providers-DKkBXhxU.js} +1 -1
- package/server/{providers-BDDPULlp.js → providers-DV7ec8l7.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
- package/server/public/assets/{dist-Bio7THQU.js → dist-BWR4qFiV.js} +1 -1
- package/server/public/assets/{dist-DukGS2YZ.js → dist-DEmlBBNQ.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
- package/server/public/assets/index-CUr1xv8w.css +1 -0
- package/server/public/assets/{index-Bwejq-5s.js → index-CsSuZQBI.js} +145 -144
- package/server/public/assets/{linear-qUWmMZ-c.js → linear-C9zFQpkX.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
- package/server/public/assets/{prod-C8VtLuWC.js → prod-B1jCQihw.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-By_BteaL.js → pull-requests--Ib2jTgy.js} +1 -1
- package/server/{pull-requests-8z2N1UOV.js → pull-requests-CXIhdCYD.js} +13 -11
- package/server/{queries-ZABd5aXP.js → queries-6d7Cdtm7.js} +693 -104
- package/server/{rally-i_goYmiA.js → rally-B708-nZn.js} +3 -3
- package/server/{rally-api-DqKqIMNR.js → rally-api-nY0ZANw3.js} +2 -2
- package/server/{rally-api-xHazRk0d.js → rally-api-yjQ0TfHd.js} +1 -1
- package/server/{rally-client-COYz1vYR.js → rally-client-B1EJhfV0.js} +4 -4
- package/server/{rally-client-CGWEHaPd.js → rally-client-CULK2XAY.js} +1 -1
- package/server/rally-njs_mJrt.js +3 -0
- package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-MWnqdLCJ.js} +1 -1
- package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-N3BTkmX_.js} +1 -1
- package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-Dp4eLkt4.js} +6 -6
- package/server/{rebuild-stack-CKjJAI8L.js → rebuild-stack-kA7XngID.js} +1 -1
- package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-uWbZfjms.js} +6 -6
- package/server/record-t6V-3Dcj.js +3 -0
- package/server/{record-update-D3N6WMFR.js → record-update-DACtKh6_.js} +1 -1
- package/server/record-update-Dq0t2uBG.js +310 -0
- package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BJtIQuag.js} +2 -2
- package/server/{release-engine-DMINVN8S.js → release-engine-DZpmGGzb.js} +5 -5
- package/server/{release-set-DeUSOEHy.js → release-set-hnXd_kga.js} +3 -3
- package/server/{remote-Dr5kGYSZ.js → remote-4tiENDaI.js} +3 -3
- package/server/{remote-b-c5bOce.js → remote-Br-ZWVIP.js} +3 -3
- package/server/{remote-agents-D6O_zETW.js → remote-agents-CRCg1L4H.js} +1 -1
- package/server/{remote-agents-Ct_WOyke.js → remote-agents-nmty1mLu.js} +6 -6
- package/server/{remote-completion-Dca3hAaa.js → remote-completion-BbWNd10K.js} +12 -12
- package/server/resume-CcKqnTvE.js +3 -0
- package/server/{review-agent-CCum8sGe.js → review-agent-DJRO8EG8.js} +1 -1
- package/server/{review-agent-CThvgK2r.js → review-agent-sKkE1FEL.js} +22 -22
- package/server/{review-artifacts-CXywD0F2.js → review-artifacts-BLbSC4ke.js} +5 -5
- package/server/{review-context-OYfKUprb.js → review-context-BgX3lcCx.js} +8 -8
- package/server/{review-status-DFRjDFef.js → review-status-A7quS5KJ.js} +54 -21
- package/server/review-status-C6n6-9f_.js +3 -0
- package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-tbOn_A_u.js} +3 -3
- package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BhSQ0d0l.js} +2 -2
- package/server/{review-status-sync-D60PJWNL.js → review-status-sync-To3-iS-N.js} +1 -1
- package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
- package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CTRNtzXO.js} +6 -6
- package/server/{rollup-CZ02qgxk.js → rollup-B53Y81xK.js} +1 -1
- package/server/{rollup-SyuF09e4.js → rollup-WA0VD-Rr.js} +8 -8
- package/server/{scanner-Br0Z5S6R.js → scanner-D2743cp8.js} +11 -7
- package/server/{sequence-io-fxU0DlwW.js → sequence-io-Cg0zYj_E.js} +4 -4
- package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-BGY8gjg-.js} +5 -5
- package/server/server.js +941 -752
- package/server/{service-Bagb90KZ.js → service-DCpB_SGd.js} +53 -53
- package/server/{session-fork-BqQxd-V6.js → session-fork-BQ8_6H32.js} +2 -2
- package/server/{session-history-XdS0JKp3.js → session-history-CVZDpS3c.js} +4 -4
- package/server/{settings-BNbocWOg.js → settings-BZ5m1UCl.js} +3 -3
- package/server/settings-D0OSwos5.js +2 -0
- package/server/{settings-uLc6DEYI.js → settings-ylxwqwQG.js} +2 -2
- package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BlxG6Xye.js} +2 -2
- package/server/{shadow-state-CbvsN3qG.js → shadow-state-C2_epgx2.js} +1 -1
- package/server/{shadow-state-C_NkP-sa.js → shadow-state-Dh-HzF2J.js} +2 -2
- package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-4bvjn9b3.js} +2 -2
- package/server/{ship-log-__QtAFXG.js → ship-log-ClSMIzZX.js} +1 -1
- package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CHIxLr_d.js} +1 -1
- package/server/{smart-compaction-CLZOWin1.js → smart-compaction-r4pHQBIr.js} +7 -7
- package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DWAorh2B.js} +22 -21
- package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-KC_UduxD.js} +1 -1
- package/server/{specialist-completion-CqmduO92.js → specialist-completion-BXhav38U.js} +1 -1
- package/server/{specialist-context-CJ-QjFR-.js → specialist-context-DtrYvGJ-.js} +5 -5
- package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
- package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-DJ3RzKxW.js} +3 -3
- package/server/{specialists-D0gGXMZx.js → specialists-D5fRZXmN.js} +1 -1
- package/server/specialists-DVj0hvaL.js +3 -0
- package/server/{specialists-CwZHb5cb.js → specialists-DyFeedjn.js} +66 -76
- package/server/{specialists-Bg9v4z3F.js → specialists-JVO00bs7.js} +340 -214
- package/server/specs-nN45DG2X.js +3 -0
- package/server/{src-BMMoA_ba.js → src-CG9mCkP6.js} +6 -6
- package/server/{src-Bqdtd6po.js → src-CMTQGyCK.js} +3 -3
- package/server/{src-k039WVYY.js → src-U7_kTPEE.js} +2 -1
- package/server/{stack-health-Bd06frFn.js → stack-health-Df0YEZKa.js} +1 -1
- package/server/{stack-health-C-ifC7b0.js → stack-health-puygdaMd.js} +2 -2
- package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-BbFwCTb0.js} +4 -4
- package/server/{staleness-BID1BKdr.js → staleness-Bpy41ngS.js} +15 -3
- package/server/{staleness-_Tr-GwdA.js → staleness-Cbl_w4Bw.js} +1 -1
- package/server/{state-home-CONQvZR0.js → state-home-CIGjwNfJ.js} +96 -44
- package/server/{state-migrate-BeBW0KXA.js → state-migrate-Dkzaxvny.js} +12 -3
- package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-CzEov_fq.js} +26 -22
- package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-sY_MHHgQ.js} +1 -1
- package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
- package/server/{summary-fork-agEMsPSo.js → summary-fork-D8bXjCr7.js} +2 -2
- package/server/{summary-fork-bX6ax6X7.js → summary-fork-DHhJIsAL.js} +8 -8
- package/server/{supervisor-Ctt4eRYz.js → supervisor-BO-Zk_h-.js} +3 -3
- package/server/supervisor-BPy-o1A8.js +2 -0
- package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-CQ_fwUWF.js} +4 -4
- package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-Bza0ffAh.js} +2 -2
- package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-CEgauF4U.js} +15 -15
- package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-DXDt0Xa-.js} +7 -7
- package/server/{test-verdict-Cp5tljlJ.js → test-verdict-CmUBK5cT.js} +1 -1
- package/server/{test-verdict-D_-sXIz_.js → test-verdict-DFjjIHR5.js} +1 -1
- package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-BDtLOIlO.js} +2 -2
- package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-DL566HbH.js} +1 -1
- package/server/tmux-DoThH6aj.js +3 -0
- package/server/{tmux-L5LgvGLp.js → tmux-ftABRAmc.js} +76 -44
- package/server/{token-BkQLy4yS.js → token-CsOhvw42.js} +2 -2
- package/server/{token-util-DI8sGlmF.js → token-util-CTmczIfW.js} +1 -1
- package/server/token-util-DrHg8abn.js +3 -0
- package/server/{tracker-config-DdT-nUAM.js → tracker-config-B4itFzDo.js} +2 -2
- package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-BePq_oj-.js} +1 -1
- package/server/{tracker-utils-CawsPSS2.js → tracker-utils-tnxxqROg.js} +2 -2
- package/server/{traefik-connect-C6mJckNs.js → traefik-connect-m73vGebA.js} +1 -1
- package/server/{tunnel-IdK1iTHx.js → tunnel-B2vxjx_b.js} +3 -3
- package/server/{tunnel-BIFl98rc.js → tunnel-Cgj-IGIl.js} +1 -1
- package/server/{types-7-GnJn0t.js → types-BBNjPcqU.js} +1 -1
- package/server/{uat-train-j0cPeMSj.js → uat-train-CuEn0t9M.js} +28 -28
- package/server/{uat-train-0Ujk8GCv.js → uat-train-cKfM-_WW.js} +1 -1
- package/server/{validation-CabEISJT.js → validation-B5JxoPUS.js} +259 -9
- package/server/{validation-DcAgXTQp.js → validation-CIi6pnI2.js} +1 -1
- package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-BcnIbigL.js} +1 -1
- package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-C-lIHfUa.js} +1 -1
- package/server/{verification-runner-FiuAZ-H2.js → verification-runner-Br0S_Ous.js} +102 -37
- package/server/{verification-runner-DlJezzef.js → verification-runner-CDj4lD4t.js} +1 -1
- package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DKpNNW5i.js} +1 -1
- package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Yb2bd3Fq.js} +13 -13
- package/server/{workflows-BZNNYkGC.js → workflows-C9WmILql.js} +39 -77
- package/server/workflows-D90rMOya.js +2 -0
- package/server/{workspace-D9ppycdg.js → workspace-BVl4rihN.js} +3 -3
- package/server/{workspace-3IC-UkAi.js → workspace-DuUdndHe.js} +1 -1
- package/server/{workspace-config-Bigl_-Lk.js → workspace-config-cEGcO6UT.js} +1 -1
- package/server/{workspace-manager-B1WOfKvB.js → workspace-manager-ZTdJAy9M.js} +1 -1
- package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-hLUv3ADC.js} +22 -15
- package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-CskwzzhL.js} +2 -2
- package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-DNpMixRq.js} +1 -1
- package/server/{workspaces-CFPcL0vl.js → workspaces-hWvy9eKs.js} +275 -109
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +363 -71
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- package/sync-sources/skills/pan/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +3 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/server/agent-state-Co5Sy2Fw.js +0 -3
- package/server/agents-DyHKlq1I.js +0 -3
- package/server/cli-BRORS9qY.js +0 -3
- package/server/codex-DNyiQDKW.js +0 -3
- package/server/deacon-swarm-CV54eNmU.js +0 -2
- package/server/dist-j64RzSrQ.js +0 -3
- package/server/forge-B0_opi-V.js +0 -2
- package/server/hume-BmhvfVbV.js +0 -3
- package/server/inspect-agent-Dq0z1k3H.js +0 -2
- package/server/lifecycle-io-DmY2qwCn.js +0 -3
- package/server/merge-ops-DwWCkSgo.js +0 -2
- package/server/projects-BKkwpH6q.js +0 -3
- package/server/public/assets/index-Bdc4V9ba.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
- package/server/rally-OSJXdiHK.js +0 -3
- package/server/record-rwK-nKv_.js +0 -3
- package/server/record-update-Crz74r-6.js +0 -168
- package/server/resume-wZZsWtzz.js +0 -3
- package/server/review-status-Bnh-rdkY.js +0 -3
- package/server/settings-BlUsVaUc.js +0 -2
- package/server/specialists-Dqe6_HE5.js +0 -3
- package/server/specs-BhOKBzqk.js +0 -3
- package/server/supervisor-COVHrBTg.js +0 -2
- package/server/tmux-BAvtac_u.js +0 -3
- package/server/token-util-BArZLN6w.js +0 -3
- package/server/workflows-C4mR0Reb.js +0 -2
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
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-DvyMuOle.js";
|
|
3
|
+
import { n as init_build_info, t as getBuildInfo } from "./build-info-BT096lEl.js";
|
|
4
|
+
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-Bjg8U4Y9.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 {
|
|
8
|
-
import { a as init_event_store, i as initEventStore } from "./event-store-
|
|
9
|
-
import { C as projectLegacySystemHealthSummary, t as init_src } from "./src-
|
|
10
|
-
import {
|
|
11
|
-
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-
|
|
12
|
-
import { $ as
|
|
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-Dq0t2uBG.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-ftABRAmc.js";
|
|
8
|
+
import { a as init_event_store, i as initEventStore } from "./event-store-tdiY5eDZ.js";
|
|
9
|
+
import { C as projectLegacySystemHealthSummary, t as init_src } from "./src-U7_kTPEE.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-A7quS5KJ.js";
|
|
11
|
+
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-B4Bjbkfv.js";
|
|
12
|
+
import { $n as recordAgentFailure, Ar as init_codex_auth, Bn as getAgentDir, Cr as getAgentRuntimeStateSync, Ct as tryReserveAdvancingSlot, Dt as init_memory_verdict_cache, En as buildDefaultResumeContinueMessage, Ft as init_transcript_landing, G as resumeAgent, Gn as init_agent_state, Hn as getAgentState, J as isContextOverflowTail, K as init_context_overflow, Ln as clearAgentTroubledSync, Or as applyCodexAuthBurnFlag, Ot as setCachedMemoryVerdict, Pt as captureTranscriptUserRecordSnapshot, Rn as clearYieldForResumeSync, Sr as getAgentRuntimeState, St as resetPatrolDispatchBudget, Tr as saveAgentRuntimeState, Tt as workResumeSlotsAvailable, Wn as getAgentStateSync, X as messageAgent, Xn as markAgentRunningState, Y as init_messaging, _ as init_linux, a as listRunningAgentsSync, b as init_agents$1, bt as releaseAdvancingSlot, c as getRuntimeCensus, dt as init_termination, ft as stopAgent, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gt as describeRunningAgents, h as init_collector, i as listRunningAgents, ir as saveAgentStateSync, jr as paneShowsCodexAuthBurn, jt as deliverInitialPromptWithRetry, m as createHostHealthCollector, mt as countRunningAgents, n as init_queries, nr as resetAgentFailureCount, or as setAgentPausedSync, r as listAgentStates, rr as saveAgentState, s as descendantPidsForSession, sr as setAgentYieldedSync, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, vt as getConcurrencyLimits, wr as init_runtime_state, y as init_darwin, yt as init_concurrency } from "./queries-6d7Cdtm7.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-CVZDpS3c.js";
|
|
14
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-tnxxqROg.js";
|
|
15
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-Bb4XeV2x.js";
|
|
16
|
+
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BhSQ0d0l.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 { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-
|
|
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 {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import { a as
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
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-B3_AHDfr.js";
|
|
19
|
+
import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-CCvjQf27.js";
|
|
20
|
+
import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-aP1ANIlI.js";
|
|
21
|
+
import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-puygdaMd.js";
|
|
22
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-CdOjJVDT.js";
|
|
23
|
+
import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-DjLOdbgT.js";
|
|
24
|
+
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-CIGjwNfJ.js";
|
|
25
|
+
import { A as withConcurrencyLimit, k as init_concurrency$1 } from "./github-app-CMBdIFBQ.js";
|
|
26
|
+
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-CzEov_fq.js";
|
|
27
|
+
import { n as __filename, r as init_esm_shims } from "./esm-shims-CbI3BVkl.js";
|
|
28
|
+
import { i as init_staleness, r as computeBuildStaleness } from "./staleness-Bpy41ngS.js";
|
|
29
|
+
import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-BV1q_2EV.js";
|
|
30
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-C9b6ccN1.js";
|
|
31
|
+
import { r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-CPS15Vte.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-aQ1IxeI3.js";
|
|
33
|
+
import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-DyFeedjn.js";
|
|
34
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-DYrYojxl.js";
|
|
35
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-zhdvQicO.js";
|
|
36
|
+
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-CSizH3HY.js";
|
|
37
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CTRNtzXO.js";
|
|
38
|
+
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-m73vGebA.js";
|
|
39
|
+
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-DftYRDo8.js";
|
|
40
|
+
import { t as recordRecoveryFailure } from "./recovery-trip-BJtIQuag.js";
|
|
41
|
+
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Cx3K0hHi.js";
|
|
42
|
+
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-hANY_ehE.js";
|
|
43
|
+
import { n as init_label_reconciler, r as reconcilePipelineLabelsPatrol } from "./label-reconciler-DdWbHEBu.js";
|
|
44
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-neK8dHQk.js";
|
|
45
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-w1ISSlhs.js";
|
|
46
|
+
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-CmUBK5cT.js";
|
|
47
47
|
import { createRequire } from "node:module";
|
|
48
48
|
import { join } from "node:path";
|
|
49
49
|
import { Effect } from "effect";
|
|
50
50
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "fs";
|
|
51
51
|
import { dirname as dirname$1, join as join$1 } from "path";
|
|
52
52
|
import { cpus, loadavg } from "os";
|
|
53
|
-
import {
|
|
53
|
+
import { freemem as freemem$1, homedir as homedir$1, platform as platform$1, totalmem as totalmem$1 } from "node:os";
|
|
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";
|
|
@@ -89,6 +89,10 @@ init_termination();
|
|
|
89
89
|
init_messaging();
|
|
90
90
|
init_context_overflow();
|
|
91
91
|
init_agents$1();
|
|
92
|
+
init_darwin();
|
|
93
|
+
init_linux();
|
|
94
|
+
init_collector();
|
|
95
|
+
init_runtime_census();
|
|
92
96
|
init_queries();
|
|
93
97
|
const STARTUP_GRACE_MS = 300 * 1e3;
|
|
94
98
|
const ACTIVITY_WARNING_MS = 900 * 1e3;
|
|
@@ -22038,401 +22042,6 @@ function resolveSystemHealthConfig(options = {}) {
|
|
|
22038
22042
|
}, options.warn);
|
|
22039
22043
|
}
|
|
22040
22044
|
//#endregion
|
|
22041
|
-
//#region ../../lib/system-health/types.ts
|
|
22042
|
-
function available(value) {
|
|
22043
|
-
return {
|
|
22044
|
-
status: "available",
|
|
22045
|
-
value
|
|
22046
|
-
};
|
|
22047
|
-
}
|
|
22048
|
-
function unavailable(reason) {
|
|
22049
|
-
return {
|
|
22050
|
-
status: "unavailable",
|
|
22051
|
-
reason
|
|
22052
|
-
};
|
|
22053
|
-
}
|
|
22054
|
-
//#endregion
|
|
22055
|
-
//#region ../../lib/system-health/darwin.ts
|
|
22056
|
-
const execFileAsync$8 = promisify(execFile);
|
|
22057
|
-
const COMMAND_TIMEOUT_MS = 5e3;
|
|
22058
|
-
const MIB = 1024 ** 2;
|
|
22059
|
-
const DARWIN_MEMORY_PRESSURE_DEFAULTS = Object.freeze({
|
|
22060
|
-
warningFreePercent: 10,
|
|
22061
|
-
criticalFreePercent: 5,
|
|
22062
|
-
swapActivityWarningBytesPerMinute: 64 * MIB,
|
|
22063
|
-
swapActivityCriticalBytesPerMinute: 256 * MIB
|
|
22064
|
-
});
|
|
22065
|
-
function parseDarwinMemoryPressure(content) {
|
|
22066
|
-
for (const pattern of [/System-wide memory free percentage:\s*([\d.]+)\s*%/i, /System-wide memory free percentage\s*=\s*([\d.]+)\s*%?/i]) {
|
|
22067
|
-
const match = content.match(pattern);
|
|
22068
|
-
if (!match) continue;
|
|
22069
|
-
const value = Number(match[1]);
|
|
22070
|
-
if (Number.isFinite(value) && value >= 0 && value <= 100) return value;
|
|
22071
|
-
}
|
|
22072
|
-
return null;
|
|
22073
|
-
}
|
|
22074
|
-
function parseDarwinVmStat(content) {
|
|
22075
|
-
const pageSizeMatch = content.match(/page size of\s+(\d+)\s+bytes/i);
|
|
22076
|
-
if (!pageSizeMatch) return null;
|
|
22077
|
-
const pageSizeBytes = Number(pageSizeMatch[1]);
|
|
22078
|
-
if (!Number.isFinite(pageSizeBytes) || pageSizeBytes <= 0) return null;
|
|
22079
|
-
const pages = /* @__PURE__ */ new Map();
|
|
22080
|
-
for (const line of content.split("\n")) {
|
|
22081
|
-
const match = line.match(/^([^:]+):\s+(\d+)\.?$/);
|
|
22082
|
-
if (!match) continue;
|
|
22083
|
-
const value = Number(match[2]);
|
|
22084
|
-
if (Number.isFinite(value)) pages.set(match[1].trim(), value);
|
|
22085
|
-
}
|
|
22086
|
-
const availablePageNames = [
|
|
22087
|
-
"Pages free",
|
|
22088
|
-
"Pages inactive",
|
|
22089
|
-
"Pages speculative"
|
|
22090
|
-
];
|
|
22091
|
-
const availablePages = availablePageNames.every((name) => pages.has(name)) ? availablePageNames.reduce((sum, name) => sum + pages.get(name), 0) : void 0;
|
|
22092
|
-
const swapIn = pages.get("Swapins");
|
|
22093
|
-
const swapOut = pages.get("Swapouts");
|
|
22094
|
-
return {
|
|
22095
|
-
pageSizeBytes,
|
|
22096
|
-
availableMemoryBytes: availablePages == null ? void 0 : availablePages * pageSizeBytes,
|
|
22097
|
-
swap: swapIn == null || swapOut == null ? void 0 : {
|
|
22098
|
-
pagesIn: swapIn,
|
|
22099
|
-
pagesOut: swapOut
|
|
22100
|
-
}
|
|
22101
|
-
};
|
|
22102
|
-
}
|
|
22103
|
-
function unitBytes(value, unit) {
|
|
22104
|
-
const parsed = Number(value);
|
|
22105
|
-
if (!Number.isFinite(parsed) || parsed < 0) return null;
|
|
22106
|
-
const multiplier = unit.toUpperCase() === "G" ? 1024 ** 3 : unit.toUpperCase() === "K" ? 1024 : MIB;
|
|
22107
|
-
return Math.round(parsed * multiplier);
|
|
22108
|
-
}
|
|
22109
|
-
function parseDarwinSwapUsage(content) {
|
|
22110
|
-
const total = content.match(/total\s*=\s*([\d.]+)([KMG])/i);
|
|
22111
|
-
const used = content.match(/used\s*=\s*([\d.]+)([KMG])/i);
|
|
22112
|
-
const free = content.match(/free\s*=\s*([\d.]+)([KMG])/i);
|
|
22113
|
-
if (!total || !used || !free) return null;
|
|
22114
|
-
const totalBytes = unitBytes(total[1], total[2]);
|
|
22115
|
-
const usedBytes = unitBytes(used[1], used[2]);
|
|
22116
|
-
const freeBytes = unitBytes(free[1], free[2]);
|
|
22117
|
-
return totalBytes == null || usedBytes == null || freeBytes == null ? null : {
|
|
22118
|
-
totalBytes,
|
|
22119
|
-
usedBytes,
|
|
22120
|
-
freeBytes
|
|
22121
|
-
};
|
|
22122
|
-
}
|
|
22123
|
-
function aggregateDarwinCpuCounters(cpuInfo) {
|
|
22124
|
-
if (cpuInfo.length === 0) return null;
|
|
22125
|
-
let idle = 0;
|
|
22126
|
-
let total = 0;
|
|
22127
|
-
for (const cpu of cpuInfo) {
|
|
22128
|
-
const values = Object.values(cpu.times);
|
|
22129
|
-
if (values.some((value) => !Number.isFinite(value) || value < 0)) return null;
|
|
22130
|
-
idle += cpu.times.idle;
|
|
22131
|
-
total += values.reduce((sum, value) => sum + value, 0);
|
|
22132
|
-
}
|
|
22133
|
-
return {
|
|
22134
|
-
idle,
|
|
22135
|
-
total
|
|
22136
|
-
};
|
|
22137
|
-
}
|
|
22138
|
-
function computeCpuPercent$1(current, previous) {
|
|
22139
|
-
if (!previous) return unavailable("A previous CPU time sample is required.");
|
|
22140
|
-
const totalDelta = current.total - previous.total;
|
|
22141
|
-
const idleDelta = current.idle - previous.idle;
|
|
22142
|
-
if (totalDelta <= 0 || idleDelta < 0 || idleDelta > totalDelta) return unavailable("CPU times did not advance monotonically.");
|
|
22143
|
-
return available(Math.round((totalDelta - idleDelta) / totalDelta * 1e3) / 10);
|
|
22144
|
-
}
|
|
22145
|
-
function computeSwapActivity(current, previous, elapsedMs, pageSizeBytes) {
|
|
22146
|
-
if (!previous) return unavailable("A previous swap counter sample is required.");
|
|
22147
|
-
const pages = current.pagesIn - previous.pagesIn + current.pagesOut - previous.pagesOut;
|
|
22148
|
-
if (pages < 0 || elapsedMs <= 0) return unavailable("Swap counters or sample timing were invalid.");
|
|
22149
|
-
return available(Math.round(pages * pageSizeBytes * 6e4 / elapsedMs));
|
|
22150
|
-
}
|
|
22151
|
-
function percent$1(part, total) {
|
|
22152
|
-
if (total <= 0) return 0;
|
|
22153
|
-
return Math.round(part / total * 1e3) / 10;
|
|
22154
|
-
}
|
|
22155
|
-
const defaultAdapters$1 = {
|
|
22156
|
-
execFile: async (command, args, timeoutMs) => {
|
|
22157
|
-
const { stdout } = await execFileAsync$8(command, [...args], {
|
|
22158
|
-
encoding: "utf-8",
|
|
22159
|
-
timeout: timeoutMs
|
|
22160
|
-
});
|
|
22161
|
-
return stdout;
|
|
22162
|
-
},
|
|
22163
|
-
cpus: cpus$1,
|
|
22164
|
-
loadAverage1m: () => loadavg$1()[0] ?? 0,
|
|
22165
|
-
totalMemoryBytes: totalmem$1,
|
|
22166
|
-
now: () => Date.now()
|
|
22167
|
-
};
|
|
22168
|
-
async function command(adapters, executable, args) {
|
|
22169
|
-
try {
|
|
22170
|
-
return await adapters.execFile(executable, args, COMMAND_TIMEOUT_MS);
|
|
22171
|
-
} catch {
|
|
22172
|
-
return null;
|
|
22173
|
-
}
|
|
22174
|
-
}
|
|
22175
|
-
function createDarwinHostHealthCollector(adapters = defaultAdapters$1) {
|
|
22176
|
-
return {
|
|
22177
|
-
platform: "darwin",
|
|
22178
|
-
async sample(previous) {
|
|
22179
|
-
const sampledAtMs = adapters.now();
|
|
22180
|
-
const [pressureOutput, vmStatOutput, swapOutput] = await Promise.all([
|
|
22181
|
-
command(adapters, "memory_pressure", ["-Q"]),
|
|
22182
|
-
command(adapters, "vm_stat", []),
|
|
22183
|
-
command(adapters, "sysctl", ["-n", "vm.swapusage"])
|
|
22184
|
-
]);
|
|
22185
|
-
const pressureFreePercent = pressureOutput == null ? null : parseDarwinMemoryPressure(pressureOutput);
|
|
22186
|
-
const vmStat = vmStatOutput == null ? null : parseDarwinVmStat(vmStatOutput);
|
|
22187
|
-
const swapUsage = swapOutput == null ? null : parseDarwinSwapUsage(swapOutput);
|
|
22188
|
-
const cpuInfo = adapters.cpus();
|
|
22189
|
-
const cpuCounters = aggregateDarwinCpuCounters(cpuInfo);
|
|
22190
|
-
const totalMemoryBytes = adapters.totalMemoryBytes();
|
|
22191
|
-
const availableMemoryBytes = pressureFreePercent != null ? Math.round(totalMemoryBytes * pressureFreePercent / 100) : vmStat?.availableMemoryBytes ?? null;
|
|
22192
|
-
const usedMemoryBytes = Number.isFinite(totalMemoryBytes) && availableMemoryBytes != null ? Math.max(totalMemoryBytes - availableMemoryBytes, 0) : null;
|
|
22193
|
-
const loadAverage1m = adapters.loadAverage1m();
|
|
22194
|
-
const elapsedMs = previous ? sampledAtMs - previous.sampledAtMs : 0;
|
|
22195
|
-
return {
|
|
22196
|
-
platform: "darwin",
|
|
22197
|
-
sampledAtMs,
|
|
22198
|
-
cpuPercent: cpuCounters ? computeCpuPercent$1(cpuCounters, previous?.counters.cpu) : unavailable("macOS CPU times are unavailable."),
|
|
22199
|
-
loadAverage1m: Number.isFinite(loadAverage1m) && loadAverage1m >= 0 ? available(loadAverage1m) : unavailable("The one-minute load average is unavailable."),
|
|
22200
|
-
loadPerCore1m: Number.isFinite(loadAverage1m) && loadAverage1m >= 0 && cpuInfo.length > 0 ? available(Math.round(loadAverage1m / cpuInfo.length * 100) / 100) : unavailable("Load average or CPU core count is unavailable."),
|
|
22201
|
-
totalMemoryBytes: Number.isFinite(totalMemoryBytes) && totalMemoryBytes > 0 ? available(totalMemoryBytes) : unavailable("Total memory is unavailable."),
|
|
22202
|
-
usedMemoryBytes: usedMemoryBytes == null ? unavailable("Used memory cannot be derived.") : available(usedMemoryBytes),
|
|
22203
|
-
availableMemoryBytes: availableMemoryBytes == null ? unavailable("Available memory is unavailable.") : available(availableMemoryBytes),
|
|
22204
|
-
memoryUsedPercent: usedMemoryBytes == null ? unavailable("Memory utilization cannot be derived.") : available(percent$1(usedMemoryBytes, totalMemoryBytes)),
|
|
22205
|
-
memoryPressureSomeAvg10: unavailable("macOS does not expose Linux memory PSI."),
|
|
22206
|
-
memoryPressureFullAvg10: unavailable("macOS does not expose Linux memory PSI."),
|
|
22207
|
-
memoryPressureFreePercent: pressureFreePercent == null ? unavailable("memory_pressure did not report a recognized free percentage.") : available(pressureFreePercent),
|
|
22208
|
-
swapTotalBytes: swapUsage ? available(swapUsage.totalBytes) : unavailable("vm.swapusage is unavailable."),
|
|
22209
|
-
swapUsedBytes: swapUsage ? available(swapUsage.usedBytes) : unavailable("vm.swapusage is unavailable."),
|
|
22210
|
-
swapUsedPercent: swapUsage ? available(percent$1(swapUsage.usedBytes, swapUsage.totalBytes)) : unavailable("vm.swapusage is unavailable."),
|
|
22211
|
-
swapActivityBytesPerMinute: vmStat?.swap ? computeSwapActivity(vmStat.swap, previous?.counters.swap, elapsedMs, vmStat.pageSizeBytes) : unavailable("vm_stat swap activity counters are unavailable."),
|
|
22212
|
-
committedMemoryBytes: unavailable("macOS does not expose Linux Committed_AS."),
|
|
22213
|
-
commitLimitBytes: unavailable("macOS does not expose Linux CommitLimit."),
|
|
22214
|
-
virtualCommitmentPercent: unavailable("macOS virtual commitment is unavailable."),
|
|
22215
|
-
counters: {
|
|
22216
|
-
cpu: cpuCounters,
|
|
22217
|
-
swap: vmStat?.swap ?? null
|
|
22218
|
-
}
|
|
22219
|
-
};
|
|
22220
|
-
}
|
|
22221
|
-
};
|
|
22222
|
-
}
|
|
22223
|
-
//#endregion
|
|
22224
|
-
//#region ../../lib/system-health/linux.ts
|
|
22225
|
-
const execFileAsync$7 = promisify(execFile);
|
|
22226
|
-
const KB$1 = 1024;
|
|
22227
|
-
const LINUX_MEMORY_PRESSURE_DEFAULTS = Object.freeze({
|
|
22228
|
-
someWarningAvg10: 5,
|
|
22229
|
-
fullCriticalAvg10: 1,
|
|
22230
|
-
swapActivityWarningBytesPerMinute: 64 * 1024 ** 2,
|
|
22231
|
-
swapActivityCriticalBytesPerMinute: 256 * 1024 ** 2
|
|
22232
|
-
});
|
|
22233
|
-
function parseMemInfo(content) {
|
|
22234
|
-
const values = /* @__PURE__ */ new Map();
|
|
22235
|
-
for (const line of content.split("\n")) {
|
|
22236
|
-
const match = line.match(/^(\w+):\s+(\d+)\s+kB$/);
|
|
22237
|
-
if (!match) continue;
|
|
22238
|
-
const value = Number(match[2]);
|
|
22239
|
-
if (Number.isFinite(value)) values.set(match[1], value * KB$1);
|
|
22240
|
-
}
|
|
22241
|
-
return {
|
|
22242
|
-
memTotalBytes: values.get("MemTotal"),
|
|
22243
|
-
memAvailableBytes: values.get("MemAvailable"),
|
|
22244
|
-
swapTotalBytes: values.get("SwapTotal"),
|
|
22245
|
-
swapFreeBytes: values.get("SwapFree"),
|
|
22246
|
-
committedMemoryBytes: values.get("Committed_AS"),
|
|
22247
|
-
commitLimitBytes: values.get("CommitLimit")
|
|
22248
|
-
};
|
|
22249
|
-
}
|
|
22250
|
-
function parseProcStat(content) {
|
|
22251
|
-
const lines = content.split("\n");
|
|
22252
|
-
const cpuLine = lines.find((line) => line.startsWith("cpu "));
|
|
22253
|
-
if (!cpuLine) return null;
|
|
22254
|
-
const values = cpuLine.trim().split(/\s+/).slice(1).map(Number);
|
|
22255
|
-
if (values.length < 4 || values.some((value) => !Number.isFinite(value))) return null;
|
|
22256
|
-
const idle = values[3] + (values[4] ?? 0);
|
|
22257
|
-
const total = values.reduce((sum, value) => sum + value, 0);
|
|
22258
|
-
const coreCount = lines.filter((line) => /^cpu\d+\s/.test(line)).length;
|
|
22259
|
-
if (total < 0 || idle < 0) return null;
|
|
22260
|
-
return {
|
|
22261
|
-
cpu: {
|
|
22262
|
-
idle,
|
|
22263
|
-
total
|
|
22264
|
-
},
|
|
22265
|
-
coreCount: Math.max(coreCount, 1)
|
|
22266
|
-
};
|
|
22267
|
-
}
|
|
22268
|
-
function parseMemoryPressure(content) {
|
|
22269
|
-
const result = {};
|
|
22270
|
-
for (const line of content.split("\n")) {
|
|
22271
|
-
const match = line.match(/^(some|full)\s+.*\bavg10=([^\s]+)/);
|
|
22272
|
-
if (!match) continue;
|
|
22273
|
-
const value = Number(match[2]);
|
|
22274
|
-
if (!Number.isFinite(value) || value < 0) continue;
|
|
22275
|
-
if (match[1] === "some") result.someAvg10 = value;
|
|
22276
|
-
if (match[1] === "full") result.fullAvg10 = value;
|
|
22277
|
-
}
|
|
22278
|
-
return result;
|
|
22279
|
-
}
|
|
22280
|
-
function parseVmstat(content) {
|
|
22281
|
-
let pagesIn = null;
|
|
22282
|
-
let pagesOut = null;
|
|
22283
|
-
for (const line of content.split("\n")) {
|
|
22284
|
-
const match = line.match(/^(pswpin|pswpout)\s+(\d+)$/);
|
|
22285
|
-
if (!match) continue;
|
|
22286
|
-
const value = Number(match[2]);
|
|
22287
|
-
if (!Number.isFinite(value)) continue;
|
|
22288
|
-
if (match[1] === "pswpin") pagesIn = value;
|
|
22289
|
-
if (match[1] === "pswpout") pagesOut = value;
|
|
22290
|
-
}
|
|
22291
|
-
return pagesIn == null || pagesOut == null ? null : {
|
|
22292
|
-
pagesIn,
|
|
22293
|
-
pagesOut
|
|
22294
|
-
};
|
|
22295
|
-
}
|
|
22296
|
-
function parseLoadAverage(content) {
|
|
22297
|
-
const value = Number(content.trim().split(/\s+/)[0]);
|
|
22298
|
-
return Number.isFinite(value) && value >= 0 ? value : null;
|
|
22299
|
-
}
|
|
22300
|
-
function computeCpuPercent(current, previous) {
|
|
22301
|
-
if (!previous) return unavailable("A previous CPU counter sample is required.");
|
|
22302
|
-
const totalDelta = current.total - previous.total;
|
|
22303
|
-
const idleDelta = current.idle - previous.idle;
|
|
22304
|
-
if (totalDelta <= 0 || idleDelta < 0 || idleDelta > totalDelta) return unavailable("CPU counters did not advance monotonically.");
|
|
22305
|
-
return available(Math.round((totalDelta - idleDelta) / totalDelta * 1e3) / 10);
|
|
22306
|
-
}
|
|
22307
|
-
function computeSwapActivityBytesPerMinute(current, previous, elapsedMs, pageSizeBytes) {
|
|
22308
|
-
if (!previous) return unavailable("A previous swap counter sample is required.");
|
|
22309
|
-
const pageDelta = current.pagesIn - previous.pagesIn + current.pagesOut - previous.pagesOut;
|
|
22310
|
-
if (pageDelta < 0 || elapsedMs <= 0 || !Number.isFinite(pageSizeBytes) || pageSizeBytes <= 0) return unavailable("Swap counters or sample timing were invalid.");
|
|
22311
|
-
return available(Math.round(pageDelta * pageSizeBytes * 6e4 / elapsedMs));
|
|
22312
|
-
}
|
|
22313
|
-
const defaultAdapters = {
|
|
22314
|
-
readFile: (path) => readFile(path, "utf-8"),
|
|
22315
|
-
readPageSizeBytes: async () => {
|
|
22316
|
-
const { stdout } = await execFileAsync$7("getconf", ["PAGESIZE"], {
|
|
22317
|
-
encoding: "utf-8",
|
|
22318
|
-
timeout: 5e3
|
|
22319
|
-
});
|
|
22320
|
-
const value = Number(stdout.trim());
|
|
22321
|
-
if (!Number.isFinite(value) || value <= 0) throw new Error("getconf returned an invalid page size");
|
|
22322
|
-
return value;
|
|
22323
|
-
},
|
|
22324
|
-
now: () => Date.now()
|
|
22325
|
-
};
|
|
22326
|
-
async function readParsed(adapters, path, parse) {
|
|
22327
|
-
try {
|
|
22328
|
-
return parse(await adapters.readFile(path));
|
|
22329
|
-
} catch {
|
|
22330
|
-
return null;
|
|
22331
|
-
}
|
|
22332
|
-
}
|
|
22333
|
-
function percent(part, total) {
|
|
22334
|
-
if (total <= 0) return 0;
|
|
22335
|
-
return Math.round(part / total * 1e3) / 10;
|
|
22336
|
-
}
|
|
22337
|
-
function createLinuxHostHealthCollector(adapters = defaultAdapters) {
|
|
22338
|
-
return {
|
|
22339
|
-
platform: "linux",
|
|
22340
|
-
async sample(previous) {
|
|
22341
|
-
const sampledAtMs = adapters.now();
|
|
22342
|
-
const [memInfo, procStat, pressure, vmstat, loadAverage, pageSizeBytes] = await Promise.all([
|
|
22343
|
-
readParsed(adapters, "/proc/meminfo", parseMemInfo),
|
|
22344
|
-
readParsed(adapters, "/proc/stat", parseProcStat),
|
|
22345
|
-
readParsed(adapters, "/proc/pressure/memory", parseMemoryPressure),
|
|
22346
|
-
readParsed(adapters, "/proc/vmstat", parseVmstat),
|
|
22347
|
-
readParsed(adapters, "/proc/loadavg", parseLoadAverage),
|
|
22348
|
-
adapters.readPageSizeBytes().catch(() => null)
|
|
22349
|
-
]);
|
|
22350
|
-
const totalMemoryBytes = memInfo?.memTotalBytes;
|
|
22351
|
-
const availableMemoryBytes = memInfo?.memAvailableBytes;
|
|
22352
|
-
const usedMemoryBytes = totalMemoryBytes != null && availableMemoryBytes != null ? Math.max(totalMemoryBytes - availableMemoryBytes, 0) : null;
|
|
22353
|
-
const swapTotalBytes = memInfo?.swapTotalBytes;
|
|
22354
|
-
const swapFreeBytes = memInfo?.swapFreeBytes;
|
|
22355
|
-
const swapUsedBytes = swapTotalBytes != null && swapFreeBytes != null ? Math.max(swapTotalBytes - swapFreeBytes, 0) : null;
|
|
22356
|
-
const committedMemoryBytes = memInfo?.committedMemoryBytes;
|
|
22357
|
-
const commitLimitBytes = memInfo?.commitLimitBytes;
|
|
22358
|
-
const cpuCounters = procStat?.cpu ?? null;
|
|
22359
|
-
const swapCounters = vmstat ?? null;
|
|
22360
|
-
const elapsedMs = previous ? sampledAtMs - previous.sampledAtMs : 0;
|
|
22361
|
-
return {
|
|
22362
|
-
platform: "linux",
|
|
22363
|
-
sampledAtMs,
|
|
22364
|
-
cpuPercent: cpuCounters ? computeCpuPercent(cpuCounters, previous?.counters.cpu) : unavailable("The aggregate CPU counters are unavailable."),
|
|
22365
|
-
loadAverage1m: loadAverage == null ? unavailable("The one-minute load average is unavailable.") : available(loadAverage),
|
|
22366
|
-
loadPerCore1m: loadAverage == null || !procStat ? unavailable("Load average or CPU core count is unavailable.") : available(Math.round(loadAverage / procStat.coreCount * 100) / 100),
|
|
22367
|
-
totalMemoryBytes: totalMemoryBytes == null ? unavailable("MemTotal is unavailable.") : available(totalMemoryBytes),
|
|
22368
|
-
usedMemoryBytes: usedMemoryBytes == null ? unavailable("Used memory cannot be derived without MemTotal and MemAvailable.") : available(usedMemoryBytes),
|
|
22369
|
-
availableMemoryBytes: availableMemoryBytes == null ? unavailable("MemAvailable is unavailable.") : available(availableMemoryBytes),
|
|
22370
|
-
memoryUsedPercent: usedMemoryBytes == null || totalMemoryBytes == null ? unavailable("Memory utilization cannot be derived.") : available(percent(usedMemoryBytes, totalMemoryBytes)),
|
|
22371
|
-
memoryPressureSomeAvg10: pressure?.someAvg10 == null ? unavailable("Linux memory PSI some.avg10 is unavailable.") : available(pressure.someAvg10),
|
|
22372
|
-
memoryPressureFullAvg10: pressure?.fullAvg10 == null ? unavailable("Linux memory PSI full.avg10 is unavailable.") : available(pressure.fullAvg10),
|
|
22373
|
-
memoryPressureFreePercent: unavailable("Linux reports memory pressure through PSI."),
|
|
22374
|
-
swapTotalBytes: swapTotalBytes == null ? unavailable("SwapTotal is unavailable.") : available(swapTotalBytes),
|
|
22375
|
-
swapUsedBytes: swapUsedBytes == null ? unavailable("Swap usage cannot be derived without SwapTotal and SwapFree.") : available(swapUsedBytes),
|
|
22376
|
-
swapUsedPercent: swapUsedBytes == null || swapTotalBytes == null ? unavailable("Swap utilization cannot be derived.") : available(percent(swapUsedBytes, swapTotalBytes)),
|
|
22377
|
-
swapActivityBytesPerMinute: swapCounters && pageSizeBytes != null ? computeSwapActivityBytesPerMinute(swapCounters, previous?.counters.swap, elapsedMs, pageSizeBytes) : unavailable("Linux swap activity counters are unavailable."),
|
|
22378
|
-
committedMemoryBytes: committedMemoryBytes == null ? unavailable("Committed_AS is unavailable.") : available(committedMemoryBytes),
|
|
22379
|
-
commitLimitBytes: commitLimitBytes == null ? unavailable("CommitLimit is unavailable.") : available(commitLimitBytes),
|
|
22380
|
-
virtualCommitmentPercent: committedMemoryBytes == null || commitLimitBytes == null ? unavailable("Virtual commitment cannot be derived.") : available(percent(committedMemoryBytes, commitLimitBytes)),
|
|
22381
|
-
counters: {
|
|
22382
|
-
cpu: cpuCounters,
|
|
22383
|
-
swap: swapCounters
|
|
22384
|
-
}
|
|
22385
|
-
};
|
|
22386
|
-
}
|
|
22387
|
-
};
|
|
22388
|
-
}
|
|
22389
|
-
//#endregion
|
|
22390
|
-
//#region ../../lib/system-health/collector.ts
|
|
22391
|
-
/**
|
|
22392
|
-
* Selects the platform host-health collector. Linux and macOS expose native
|
|
22393
|
-
* current-pressure signals; unsupported platforms return unavailable signals
|
|
22394
|
-
* so callers never mistake missing measurements for measured zeroes.
|
|
22395
|
-
*/
|
|
22396
|
-
function createUnsupportedCollector(platform = "unsupported") {
|
|
22397
|
-
const signal = () => unavailable("Host health collection is unsupported on this platform.");
|
|
22398
|
-
return {
|
|
22399
|
-
platform,
|
|
22400
|
-
async sample() {
|
|
22401
|
-
return {
|
|
22402
|
-
platform,
|
|
22403
|
-
sampledAtMs: Date.now(),
|
|
22404
|
-
cpuPercent: signal(),
|
|
22405
|
-
loadAverage1m: signal(),
|
|
22406
|
-
loadPerCore1m: signal(),
|
|
22407
|
-
totalMemoryBytes: signal(),
|
|
22408
|
-
usedMemoryBytes: signal(),
|
|
22409
|
-
availableMemoryBytes: signal(),
|
|
22410
|
-
memoryUsedPercent: signal(),
|
|
22411
|
-
memoryPressureSomeAvg10: signal(),
|
|
22412
|
-
memoryPressureFullAvg10: signal(),
|
|
22413
|
-
memoryPressureFreePercent: signal(),
|
|
22414
|
-
swapTotalBytes: signal(),
|
|
22415
|
-
swapUsedBytes: signal(),
|
|
22416
|
-
swapUsedPercent: signal(),
|
|
22417
|
-
swapActivityBytesPerMinute: signal(),
|
|
22418
|
-
committedMemoryBytes: signal(),
|
|
22419
|
-
commitLimitBytes: signal(),
|
|
22420
|
-
virtualCommitmentPercent: signal(),
|
|
22421
|
-
counters: {
|
|
22422
|
-
cpu: null,
|
|
22423
|
-
swap: null
|
|
22424
|
-
}
|
|
22425
|
-
};
|
|
22426
|
-
}
|
|
22427
|
-
};
|
|
22428
|
-
}
|
|
22429
|
-
function createHostHealthCollector(selection = {}) {
|
|
22430
|
-
const platform = selection.platform ?? platform$1();
|
|
22431
|
-
if (platform === "linux") return selection.linux ?? createLinuxHostHealthCollector();
|
|
22432
|
-
if (platform === "darwin") return selection.darwin ?? createDarwinHostHealthCollector();
|
|
22433
|
-
return createUnsupportedCollector();
|
|
22434
|
-
}
|
|
22435
|
-
//#endregion
|
|
22436
22045
|
//#region ../../lib/system-health/evaluate.ts
|
|
22437
22046
|
function value(signal) {
|
|
22438
22047
|
return signal.status === "available" ? signal.value : null;
|
|
@@ -22945,47 +22554,6 @@ async function readProcMemoryDarwin() {
|
|
|
22945
22554
|
async function readProcMemory() {
|
|
22946
22555
|
return platform$1() === "darwin" ? readProcMemoryDarwin() : readProcMemoryLinux();
|
|
22947
22556
|
}
|
|
22948
|
-
async function readProcessTable() {
|
|
22949
|
-
const { stdout } = await execAsync$4("ps -eo pid=,ppid=,rss=,args=", {
|
|
22950
|
-
encoding: "utf-8",
|
|
22951
|
-
timeout: 1e4
|
|
22952
|
-
});
|
|
22953
|
-
const rows = /* @__PURE__ */ new Map();
|
|
22954
|
-
for (const line of stdout.split("\n")) {
|
|
22955
|
-
const trimmed = line.trim();
|
|
22956
|
-
if (!trimmed) continue;
|
|
22957
|
-
const match = trimmed.match(/^(\d+)\s+(\d+)\s+(\d+)\s+(.+)$/);
|
|
22958
|
-
if (!match) continue;
|
|
22959
|
-
const pid = Number(match[1]);
|
|
22960
|
-
const ppid = Number(match[2]);
|
|
22961
|
-
const rssKb = Number(match[3]);
|
|
22962
|
-
const command = match[4] ?? "";
|
|
22963
|
-
if (!Number.isFinite(pid) || !Number.isFinite(ppid) || !Number.isFinite(rssKb)) continue;
|
|
22964
|
-
rows.set(pid, {
|
|
22965
|
-
pid,
|
|
22966
|
-
ppid,
|
|
22967
|
-
rssKb,
|
|
22968
|
-
command
|
|
22969
|
-
});
|
|
22970
|
-
}
|
|
22971
|
-
return rows;
|
|
22972
|
-
}
|
|
22973
|
-
function getDescendantPids(rootPid, processes) {
|
|
22974
|
-
const descendants = /* @__PURE__ */ new Set();
|
|
22975
|
-
const queue = [rootPid];
|
|
22976
|
-
while (queue.length > 0) {
|
|
22977
|
-
const pid = queue.shift();
|
|
22978
|
-
if (!pid || descendants.has(pid)) continue;
|
|
22979
|
-
descendants.add(pid);
|
|
22980
|
-
for (const process of processes.values()) if (process.ppid === pid && !descendants.has(process.pid)) queue.push(process.pid);
|
|
22981
|
-
}
|
|
22982
|
-
return descendants;
|
|
22983
|
-
}
|
|
22984
|
-
function sumProcessMemory(descendants, processes) {
|
|
22985
|
-
let totalRssKb = 0;
|
|
22986
|
-
for (const pid of descendants) totalRssKb += processes.get(pid)?.rssKb ?? 0;
|
|
22987
|
-
return totalRssKb * KB;
|
|
22988
|
-
}
|
|
22989
22557
|
function buildLeakedSpecialists(agents) {
|
|
22990
22558
|
return agents.filter((agent) => agent.kind === "specialist" && agent.lifecycle === "orphaned").map((agent) => ({
|
|
22991
22559
|
name: agent.id,
|
|
@@ -23030,14 +22598,11 @@ async function collectAgentProcesses() {
|
|
|
23030
22598
|
const admittedWorkAgentCount = countAdmittedWorkAgents(registeredAgents, nowMs);
|
|
23031
22599
|
const activeAgents = registeredAgents.filter((agent) => agent.status !== "stopped");
|
|
23032
22600
|
const liveSessions = new Set(registeredAgents.filter((agent) => agent.tmuxActive).map((agent) => agent.id));
|
|
23033
|
-
const
|
|
22601
|
+
const runtimeCensus = await getRuntimeCensus();
|
|
23034
22602
|
const reviewStatuses = reviewStatusMap();
|
|
23035
22603
|
const collected = await Promise.all(activeAgents.map(async (agent) => {
|
|
23036
22604
|
const [runtimeState, runtimeSnapshot] = await Promise.all([Effect.runPromise(getAgentRuntimeState(agent.id)).catch(() => null), Effect.runPromise(getRuntimeSnapshot(agent.id)).catch(() => null)]);
|
|
23037
|
-
const
|
|
23038
|
-
const panePid = Number(panePidValue ?? "0");
|
|
23039
|
-
const descendants = Number.isFinite(panePid) && panePid > 0 ? getDescendantPids(panePid, processTable) : /* @__PURE__ */ new Set();
|
|
23040
|
-
const memoryBytes = descendants.size > 0 ? sumProcessMemory(descendants, processTable) : 0;
|
|
22605
|
+
const memoryBytes = [...descendantPidsForSession(runtimeCensus, agent.id)].reduce((sum, pid) => sum + (runtimeCensus.processesByPid.get(pid)?.rssBytes ?? 0), 0);
|
|
23041
22606
|
const lifecycle = agentLifecycle(agent.role, agent.issueId, agent.tmuxActive, reviewStatuses);
|
|
23042
22607
|
return {
|
|
23043
22608
|
process: {
|
|
@@ -23505,9 +23070,18 @@ async function assessMemoryPressure() {
|
|
|
23505
23070
|
return verdict;
|
|
23506
23071
|
}
|
|
23507
23072
|
//#endregion
|
|
23073
|
+
//#region ../../lib/cloister/agent-grace.ts
|
|
23074
|
+
init_tracker_utils();
|
|
23075
|
+
init_concurrency$1();
|
|
23076
|
+
const WORK_LAUNCHER_GRACE_MS = 12e4;
|
|
23077
|
+
function isStartingWithinGrace(state, now = Date.now(), graceMs = WORK_LAUNCHER_GRACE_MS) {
|
|
23078
|
+
if (state.status !== "starting") return false;
|
|
23079
|
+
const startedMs = Date.parse(state.startedAt ?? "");
|
|
23080
|
+
return Number.isFinite(startedMs) && now - startedMs < graceMs;
|
|
23081
|
+
}
|
|
23082
|
+
//#endregion
|
|
23508
23083
|
//#region ../../lib/cloister/deacon-inspect.ts
|
|
23509
23084
|
init_review_status();
|
|
23510
|
-
init_tmux();
|
|
23511
23085
|
/**
|
|
23512
23086
|
* Inspect prompts state a 10-minute budget. Deacon gives the agent a small
|
|
23513
23087
|
* grace window beyond that, then fails loud so the parent work agent never waits
|
|
@@ -23548,7 +23122,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
23548
23122
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
23549
23123
|
});
|
|
23550
23124
|
try {
|
|
23551
|
-
const { messageAgent } = await import("./agents-
|
|
23125
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
23552
23126
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
23553
23127
|
} catch (err) {
|
|
23554
23128
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -23601,8 +23175,50 @@ async function handleKnownAgentModal(agentId, deps = defaultDeps$1, initialPane)
|
|
|
23601
23175
|
await deps.settle();
|
|
23602
23176
|
return modal.matches(await deps.capturePane(agentId)) ? "needs-you" : "handled";
|
|
23603
23177
|
}
|
|
23178
|
+
const ORCHESTRATED_COMPACTION_CONTINUE_MESSAGE = "Compaction complete. Continue from the compacted summary now. Re-read your current xBRIEF item and latest feedback file if needed, then resume work; do not wait for further input.";
|
|
23179
|
+
const orchestratedCompactionContinuations = /* @__PURE__ */ new Map();
|
|
23180
|
+
function scheduleOrchestratedCompactionContinuation(sessionName, requestedAt = Date.now()) {
|
|
23181
|
+
orchestratedCompactionContinuations.set(sessionName, {
|
|
23182
|
+
requestedAt,
|
|
23183
|
+
observedBusy: false
|
|
23184
|
+
});
|
|
23185
|
+
}
|
|
23186
|
+
function cancelOrchestratedCompactionContinuation(sessionName) {
|
|
23187
|
+
orchestratedCompactionContinuations.delete(sessionName);
|
|
23188
|
+
}
|
|
23189
|
+
function hasOrchestratedCompactionContinuation(sessionName) {
|
|
23190
|
+
return orchestratedCompactionContinuations.has(sessionName);
|
|
23191
|
+
}
|
|
23192
|
+
async function deliverOrchestratedCompact(sessionName, deliver) {
|
|
23193
|
+
scheduleOrchestratedCompactionContinuation(sessionName);
|
|
23194
|
+
try {
|
|
23195
|
+
await deliver();
|
|
23196
|
+
} catch (error) {
|
|
23197
|
+
cancelOrchestratedCompactionContinuation(sessionName);
|
|
23198
|
+
throw error;
|
|
23199
|
+
}
|
|
23200
|
+
}
|
|
23201
|
+
async function maybeContinueOrchestratedCompaction(args) {
|
|
23202
|
+
const pending = orchestratedCompactionContinuations.get(args.sessionName);
|
|
23203
|
+
if (!pending) return false;
|
|
23204
|
+
const elapsed = (args.now ?? Date.now()) - pending.requestedAt;
|
|
23205
|
+
if (!args.tmuxOutput.includes("❯")) {
|
|
23206
|
+
pending.observedBusy = true;
|
|
23207
|
+
if (elapsed >= 15e4) orchestratedCompactionContinuations.delete(args.sessionName);
|
|
23208
|
+
return false;
|
|
23209
|
+
}
|
|
23210
|
+
if (isContextOverflowTail(args.tmuxOutput)) {
|
|
23211
|
+
if (elapsed >= 15e4) orchestratedCompactionContinuations.delete(args.sessionName);
|
|
23212
|
+
return false;
|
|
23213
|
+
}
|
|
23214
|
+
if (!pending.observedBusy && elapsed < 3e4) return false;
|
|
23215
|
+
await args.send(args.sessionName, ORCHESTRATED_COMPACTION_CONTINUE_MESSAGE);
|
|
23216
|
+
orchestratedCompactionContinuations.delete(args.sessionName);
|
|
23217
|
+
return true;
|
|
23218
|
+
}
|
|
23604
23219
|
//#endregion
|
|
23605
23220
|
//#region ../../lib/cloister/deacon-api-recovery.ts
|
|
23221
|
+
init_context_overflow();
|
|
23606
23222
|
init_agents$1();
|
|
23607
23223
|
init_review_status();
|
|
23608
23224
|
init_tmux();
|
|
@@ -23700,13 +23316,13 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
23700
23316
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
23701
23317
|
let usage = null;
|
|
23702
23318
|
try {
|
|
23703
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23319
|
+
const { computeContextUsage } = await import("./conversation-service-Up7FEzIC.js");
|
|
23704
23320
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
23705
23321
|
} catch {
|
|
23706
23322
|
return null;
|
|
23707
23323
|
}
|
|
23708
23324
|
if (!usage || usage.percentUsed < 85) return null;
|
|
23709
|
-
await Effect.runPromise(sendKeys(sessionName, "/compact"));
|
|
23325
|
+
await deliverOrchestratedCompact(sessionName, () => Effect.runPromise(sendKeys(sessionName, "/compact")));
|
|
23710
23326
|
contextProactiveCompactState.set(sessionName, { lastAttempt: now });
|
|
23711
23327
|
try {
|
|
23712
23328
|
await writeFile$1(join$1(getAgentDir(sessionName), PROACTIVE_COMPACT_STAMP_FILE), new Date(now).toISOString(), "utf-8");
|
|
@@ -23736,10 +23352,11 @@ async function checkApiErrorAgents() {
|
|
|
23736
23352
|
} catch {
|
|
23737
23353
|
return actions;
|
|
23738
23354
|
}
|
|
23739
|
-
const
|
|
23740
|
-
for (const sessionName of
|
|
23355
|
+
const sessionsToInspect = sessionNames.filter((name) => name.startsWith("agent-") || name.startsWith("specialist-") || name.startsWith("planning-")).filter((name) => !/^agent-.*-review-(?:security|correctness|performance|requirements)$/.test(name) || hasOrchestratedCompactionContinuation(name));
|
|
23356
|
+
for (const sessionName of sessionsToInspect) {
|
|
23357
|
+
const compactionPendingAtStart = hasOrchestratedCompactionContinuation(sessionName);
|
|
23741
23358
|
const recovery = apiErrorRecoveryState.get(sessionName);
|
|
23742
|
-
if (recovery && now - recovery.lastAttempt < API_ERROR_RECOVERY_COOLDOWN_MS) continue;
|
|
23359
|
+
if (!compactionPendingAtStart && recovery && now - recovery.lastAttempt < API_ERROR_RECOVERY_COOLDOWN_MS) continue;
|
|
23743
23360
|
let tmuxOutput;
|
|
23744
23361
|
try {
|
|
23745
23362
|
tmuxOutput = await Effect.runPromise(capturePane(sessionName, 100));
|
|
@@ -23779,6 +23396,23 @@ async function checkApiErrorAgents() {
|
|
|
23779
23396
|
continue;
|
|
23780
23397
|
}
|
|
23781
23398
|
}
|
|
23399
|
+
if (compactionPendingAtStart || hasOrchestratedCompactionContinuation(sessionName)) {
|
|
23400
|
+
try {
|
|
23401
|
+
if (await maybeContinueOrchestratedCompaction({
|
|
23402
|
+
sessionName,
|
|
23403
|
+
tmuxOutput,
|
|
23404
|
+
now,
|
|
23405
|
+
send: (target, message) => Effect.runPromise(sendKeys(target, message))
|
|
23406
|
+
})) {
|
|
23407
|
+
contextOverflowRecoveryState.delete(sessionName);
|
|
23408
|
+
actions.push(`Context compaction recovery: resumed ${sessionName} after compaction`);
|
|
23409
|
+
continue;
|
|
23410
|
+
}
|
|
23411
|
+
} catch (err) {
|
|
23412
|
+
console.error(`[deacon] Failed to resume ${sessionName} after orchestrated compaction:`, err);
|
|
23413
|
+
}
|
|
23414
|
+
if (hasOrchestratedCompactionContinuation(sessionName)) continue;
|
|
23415
|
+
}
|
|
23782
23416
|
if (!tmuxOutput.includes("❯")) continue;
|
|
23783
23417
|
{
|
|
23784
23418
|
const issueId = sessionName.startsWith("agent-") ? sessionName.replace("agent-", "").toUpperCase() : null;
|
|
@@ -23810,13 +23444,13 @@ async function checkApiErrorAgents() {
|
|
|
23810
23444
|
const st = getAgentStateSync(sessionName);
|
|
23811
23445
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
23812
23446
|
if (st?.workspace && sid && st.model) {
|
|
23813
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23447
|
+
const { computeContextUsage } = await import("./conversation-service-Up7FEzIC.js");
|
|
23814
23448
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
23815
23449
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
23816
23450
|
}
|
|
23817
23451
|
} catch {}
|
|
23818
23452
|
if (recoveredPct !== null) {
|
|
23819
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
23453
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-To3-iS-N.js");
|
|
23820
23454
|
clearWorkspaceStuck(issueId);
|
|
23821
23455
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
23822
23456
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -23832,7 +23466,7 @@ async function checkApiErrorAgents() {
|
|
|
23832
23466
|
rec.attempts += 1;
|
|
23833
23467
|
rec.lastAttempt = now;
|
|
23834
23468
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
23835
|
-
const { resumeAgent } = await import("./agents-
|
|
23469
|
+
const { resumeAgent } = await import("./agents-FlIgQ3ql.js");
|
|
23836
23470
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23837
23471
|
if (recovered.success) {
|
|
23838
23472
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -23880,7 +23514,7 @@ async function checkApiErrorAgents() {
|
|
|
23880
23514
|
}
|
|
23881
23515
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
23882
23516
|
if (issueId !== null) {
|
|
23883
|
-
const { resumeAgent } = await import("./agents-
|
|
23517
|
+
const { resumeAgent } = await import("./agents-FlIgQ3ql.js");
|
|
23884
23518
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23885
23519
|
contextOverflowRecoveryState.set(sessionName, {
|
|
23886
23520
|
lastAttempt: now,
|
|
@@ -23909,7 +23543,7 @@ async function checkApiErrorAgents() {
|
|
|
23909
23543
|
continue;
|
|
23910
23544
|
}
|
|
23911
23545
|
try {
|
|
23912
|
-
await Effect.runPromise(sendKeys(sessionName, "/compact"));
|
|
23546
|
+
await deliverOrchestratedCompact(sessionName, () => Effect.runPromise(sendKeys(sessionName, "/compact")));
|
|
23913
23547
|
contextOverflowRecoveryState.set(sessionName, {
|
|
23914
23548
|
lastAttempt: now,
|
|
23915
23549
|
compactAttempts,
|
|
@@ -24403,7 +24037,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
24403
24037
|
*/
|
|
24404
24038
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
24405
24039
|
const key = issueId.toUpperCase();
|
|
24406
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
24040
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-Df0YEZKa.js");
|
|
24407
24041
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
24408
24042
|
if (health.healthy) {
|
|
24409
24043
|
testStackRebuildState.delete(key);
|
|
@@ -24435,7 +24069,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
24435
24069
|
record.attempts += 1;
|
|
24436
24070
|
testStackRebuildState.set(key, record);
|
|
24437
24071
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
24438
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
24072
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-kA7XngID.js");
|
|
24439
24073
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
24440
24074
|
if (!result.success) {
|
|
24441
24075
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -24603,7 +24237,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
24603
24237
|
return actions;
|
|
24604
24238
|
}
|
|
24605
24239
|
try {
|
|
24606
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24240
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
24607
24241
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24608
24242
|
issueId,
|
|
24609
24243
|
workspace,
|
|
@@ -24755,7 +24389,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24755
24389
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24756
24390
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
24757
24391
|
else if (workspace && resolved) try {
|
|
24758
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24392
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
24759
24393
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24760
24394
|
issueId,
|
|
24761
24395
|
workspace,
|
|
@@ -24780,8 +24414,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
24780
24414
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24781
24415
|
if (workspace && resolved) {
|
|
24782
24416
|
const branch = `feature/${issueLower}`;
|
|
24783
|
-
const { spawnRun } = await import("./agents-
|
|
24784
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
24417
|
+
const { spawnRun } = await import("./agents-FlIgQ3ql.js");
|
|
24418
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-DXDt0Xa-.js");
|
|
24785
24419
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
24786
24420
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
24787
24421
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -24919,7 +24553,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
24919
24553
|
record.lastAttempt = now;
|
|
24920
24554
|
record.attempts += 1;
|
|
24921
24555
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
24922
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24556
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
24923
24557
|
try {
|
|
24924
24558
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24925
24559
|
issueId,
|
|
@@ -24990,7 +24624,7 @@ async function checkMissingReviewStatuses() {
|
|
|
24990
24624
|
continue;
|
|
24991
24625
|
}
|
|
24992
24626
|
try {
|
|
24993
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24627
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
24994
24628
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24995
24629
|
issueId,
|
|
24996
24630
|
workspace,
|
|
@@ -25017,7 +24651,6 @@ async function checkMissingReviewStatuses() {
|
|
|
25017
24651
|
}
|
|
25018
24652
|
//#endregion
|
|
25019
24653
|
//#region ../../lib/cloister/deacon-review-unsignaled.ts
|
|
25020
|
-
init_tracker_utils();
|
|
25021
24654
|
init_agents$1();
|
|
25022
24655
|
init_projects();
|
|
25023
24656
|
init_review_status();
|
|
@@ -25043,7 +24676,7 @@ async function checkStuckReviewing() {
|
|
|
25043
24676
|
const actions = [];
|
|
25044
24677
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
25045
24678
|
try {
|
|
25046
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
24679
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-C6n6-9f_.js");
|
|
25047
24680
|
const statuses = loadReviewStatuses();
|
|
25048
24681
|
const now = Date.now();
|
|
25049
24682
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -25188,7 +24821,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
25188
24821
|
}
|
|
25189
24822
|
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.`;
|
|
25190
24823
|
try {
|
|
25191
|
-
const { messageAgent } = await import("./agents-
|
|
24824
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
25192
24825
|
await messageAgent(reviewSession, nudge);
|
|
25193
24826
|
unsignaledReviewNudges.set(latestDir, now);
|
|
25194
24827
|
actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
@@ -25310,7 +24943,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
25310
24943
|
return false;
|
|
25311
24944
|
}
|
|
25312
24945
|
try {
|
|
25313
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
24946
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
25314
24947
|
const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
|
|
25315
24948
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
25316
24949
|
issueId: state.issueId,
|
|
@@ -25439,7 +25072,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
25439
25072
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
25440
25073
|
].join("\n");
|
|
25441
25074
|
try {
|
|
25442
|
-
const { messageAgent } = await import("./agents-
|
|
25075
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
25443
25076
|
await messageAgent(state.id, message);
|
|
25444
25077
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
25445
25078
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -25525,7 +25158,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25525
25158
|
if (!signal) continue;
|
|
25526
25159
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
25527
25160
|
try {
|
|
25528
|
-
const { messageAgent } = await import("./agents-
|
|
25161
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
25529
25162
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
25530
25163
|
state.reviewMonitorSignaled = signal;
|
|
25531
25164
|
saveAgentStateSync(state);
|
|
@@ -25533,7 +25166,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25533
25166
|
actions.push(action);
|
|
25534
25167
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
25535
25168
|
if (signal === "ready") try {
|
|
25536
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25169
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-6iCJplFZ.js");
|
|
25537
25170
|
notifyPipelineSync({
|
|
25538
25171
|
type: "reviewer_completed",
|
|
25539
25172
|
issueId: state.issueId,
|
|
@@ -25541,7 +25174,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25541
25174
|
});
|
|
25542
25175
|
} catch {}
|
|
25543
25176
|
else if (signal === "timeout") try {
|
|
25544
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25177
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-6iCJplFZ.js");
|
|
25545
25178
|
notifyPipelineSync({
|
|
25546
25179
|
type: "reviewer_timed_out",
|
|
25547
25180
|
issueId: state.issueId,
|
|
@@ -25641,7 +25274,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
|
25641
25274
|
async function checkStalledReviewDiscovery() {
|
|
25642
25275
|
const actions = [];
|
|
25643
25276
|
try {
|
|
25644
|
-
const { listAgentStates } = await import("./agents-
|
|
25277
|
+
const { listAgentStates } = await import("./agents-FlIgQ3ql.js");
|
|
25645
25278
|
const states = listAgentStates();
|
|
25646
25279
|
const now = Date.now();
|
|
25647
25280
|
for (const state of states) {
|
|
@@ -25650,7 +25283,7 @@ async function checkStalledReviewDiscovery() {
|
|
|
25650
25283
|
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
25651
25284
|
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
25652
25285
|
if (!aged && !dead) continue;
|
|
25653
|
-
const { handleReviewDiscoveryReady } = await import("./review-agent-
|
|
25286
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-DJRO8EG8.js");
|
|
25654
25287
|
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
25655
25288
|
actions.push(result.message);
|
|
25656
25289
|
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
@@ -25673,8 +25306,8 @@ async function checkStalledReviewDiscovery() {
|
|
|
25673
25306
|
async function checkStalledReviewParents() {
|
|
25674
25307
|
const actions = [];
|
|
25675
25308
|
try {
|
|
25676
|
-
const { listAgentStates, markAgentStoppedState } = await import("./agents-
|
|
25677
|
-
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-
|
|
25309
|
+
const { listAgentStates, markAgentStoppedState } = await import("./agents-FlIgQ3ql.js");
|
|
25310
|
+
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-DJRO8EG8.js");
|
|
25678
25311
|
const states = listAgentStates();
|
|
25679
25312
|
const now = Date.now();
|
|
25680
25313
|
for (const state of states) {
|
|
@@ -25723,8 +25356,8 @@ async function checkStalledReviewParents() {
|
|
|
25723
25356
|
async function checkReviewForkCacheMisses() {
|
|
25724
25357
|
const actions = [];
|
|
25725
25358
|
try {
|
|
25726
|
-
const { listAgentStates, saveAgentState } = await import("./agents-
|
|
25727
|
-
const { readEventsSync } = await import("./events-
|
|
25359
|
+
const { listAgentStates, saveAgentState } = await import("./agents-FlIgQ3ql.js");
|
|
25360
|
+
const { readEventsSync } = await import("./events-CvvGK6LT.js");
|
|
25728
25361
|
const { emitActivityEntrySync } = await import("./activity-logger-OEUBdfZ8.js");
|
|
25729
25362
|
const states = listAgentStates();
|
|
25730
25363
|
const now = Date.now();
|
|
@@ -25775,7 +25408,6 @@ async function checkReviewForkCacheMisses() {
|
|
|
25775
25408
|
init_paths();
|
|
25776
25409
|
init_activity_logger();
|
|
25777
25410
|
init_agents$1();
|
|
25778
|
-
init_concurrency$1();
|
|
25779
25411
|
init_review_status();
|
|
25780
25412
|
init_projects();
|
|
25781
25413
|
init_tmux();
|
|
@@ -25860,7 +25492,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25860
25492
|
if (!project) continue;
|
|
25861
25493
|
let specStatus;
|
|
25862
25494
|
try {
|
|
25863
|
-
const { findSpecByIssue } = await import("./specs-
|
|
25495
|
+
const { findSpecByIssue } = await import("./specs-nN45DG2X.js");
|
|
25864
25496
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
25865
25497
|
specStatus = spec?.status;
|
|
25866
25498
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -25875,7 +25507,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25875
25507
|
if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
|
|
25876
25508
|
} catch {}
|
|
25877
25509
|
if (!isMerged) {
|
|
25878
|
-
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-
|
|
25510
|
+
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-BePq_oj-.js");
|
|
25879
25511
|
const ghResolved = _resolveGitHubIssue(issueId);
|
|
25880
25512
|
if (ghResolved.isGitHub) try {
|
|
25881
25513
|
const { stdout } = await execFileAsync$4("gh", [
|
|
@@ -25912,7 +25544,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25912
25544
|
actions.push(msg);
|
|
25913
25545
|
console.log(`[deacon] ${msg}`);
|
|
25914
25546
|
try {
|
|
25915
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
25547
|
+
const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
|
|
25916
25548
|
postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
|
|
25917
25549
|
} catch (err) {
|
|
25918
25550
|
console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
|
|
@@ -25937,7 +25569,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
25937
25569
|
async function reconcileFalseMerged() {
|
|
25938
25570
|
const actions = [];
|
|
25939
25571
|
try {
|
|
25940
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25572
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
|
|
25941
25573
|
if (!isGitHubAppConfigured()) return actions;
|
|
25942
25574
|
const statuses = loadReviewStatuses();
|
|
25943
25575
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -25982,7 +25614,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
25982
25614
|
async function reconcileClosedPrReadyForMerge() {
|
|
25983
25615
|
const actions = [];
|
|
25984
25616
|
try {
|
|
25985
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25617
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
|
|
25986
25618
|
if (!isGitHubAppConfigured()) return actions;
|
|
25987
25619
|
const statuses = loadReviewStatuses();
|
|
25988
25620
|
const now = Date.now();
|
|
@@ -26054,7 +25686,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
26054
25686
|
async function reconcileStaleMergeBlockers() {
|
|
26055
25687
|
const actions = [];
|
|
26056
25688
|
try {
|
|
26057
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
25689
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BSJkNTdp.js");
|
|
26058
25690
|
const statuses = loadReviewStatuses();
|
|
26059
25691
|
const now = Date.now();
|
|
26060
25692
|
const deps = buildRealConflictGateDeps();
|
|
@@ -26197,7 +25829,7 @@ async function checkFailedMergeRetry() {
|
|
|
26197
25829
|
if (ciEntry.count === 5) {
|
|
26198
25830
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
26199
25831
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
26200
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25832
|
+
const { writeFeedbackFile } = await import("./feedback-writer-qmiMbqTZ.js");
|
|
26201
25833
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
26202
25834
|
issueId,
|
|
26203
25835
|
specialist: "merge-agent",
|
|
@@ -26229,7 +25861,7 @@ async function checkFailedMergeRetry() {
|
|
|
26229
25861
|
ciRetryMap.set(issueId, ciEntry);
|
|
26230
25862
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
26231
25863
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
26232
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25864
|
+
const { writeFeedbackFile } = await import("./feedback-writer-qmiMbqTZ.js");
|
|
26233
25865
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
26234
25866
|
issueId,
|
|
26235
25867
|
specialist: "merge-agent",
|
|
@@ -26257,7 +25889,7 @@ async function checkFailedMergeRetry() {
|
|
|
26257
25889
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
26258
25890
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
26259
25891
|
const timeoutNotes = status.mergeNotes;
|
|
26260
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25892
|
+
const { writeFeedbackFile } = await import("./feedback-writer-qmiMbqTZ.js");
|
|
26261
25893
|
await Effect.runPromise(writeFeedbackFile({
|
|
26262
25894
|
issueId: issueIdForFb,
|
|
26263
25895
|
specialist: "merge-agent",
|
|
@@ -26362,7 +25994,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
26362
25994
|
} } : {}
|
|
26363
25995
|
};
|
|
26364
25996
|
try {
|
|
26365
|
-
const { closeOut } = await import("./workflows-
|
|
25997
|
+
const { closeOut } = await import("./workflows-D90rMOya.js");
|
|
26366
25998
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
26367
25999
|
if (!result.success) {
|
|
26368
26000
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -26481,16 +26113,8 @@ async function checkFirstCompletionAgents() {
|
|
|
26481
26113
|
return actions;
|
|
26482
26114
|
}
|
|
26483
26115
|
//#endregion
|
|
26484
|
-
//#region ../../lib/cloister/agent-grace.ts
|
|
26485
|
-
init_traefik_connect();
|
|
26486
|
-
const WORK_LAUNCHER_GRACE_MS = 12e4;
|
|
26487
|
-
function isStartingWithinGrace(state, now = Date.now(), graceMs = WORK_LAUNCHER_GRACE_MS) {
|
|
26488
|
-
if (state.status !== "starting") return false;
|
|
26489
|
-
const startedMs = Date.parse(state.startedAt ?? "");
|
|
26490
|
-
return Number.isFinite(startedMs) && now - startedMs < graceMs;
|
|
26491
|
-
}
|
|
26492
|
-
//#endregion
|
|
26493
26116
|
//#region ../../lib/cloister/boot-reconciliation-outcomes.ts
|
|
26117
|
+
init_traefik_connect();
|
|
26494
26118
|
function resumedBootReconciliationOutcome(agent) {
|
|
26495
26119
|
return {
|
|
26496
26120
|
id: agent.id,
|
|
@@ -26658,9 +26282,71 @@ function startBootReconciliation(options = {}) {
|
|
|
26658
26282
|
};
|
|
26659
26283
|
}
|
|
26660
26284
|
//#endregion
|
|
26661
|
-
//#region ../../lib/
|
|
26285
|
+
//#region ../../lib/agents/pinned-launch.ts
|
|
26662
26286
|
init_io();
|
|
26663
26287
|
init_dag();
|
|
26288
|
+
init_agent_state();
|
|
26289
|
+
function parseFlagValue(content, flag) {
|
|
26290
|
+
const escapedFlag = flag.replace("-", "\\-");
|
|
26291
|
+
const quoted = content.match(new RegExp(`${escapedFlag}\\s+'([^']+)'`)) ?? content.match(new RegExp(`${escapedFlag}\\s+"([^"]+)"`));
|
|
26292
|
+
if (quoted?.[1]) return quoted[1];
|
|
26293
|
+
return content.match(new RegExp(`${escapedFlag}\\s+([^\\s'"\\\\]+)`))?.[1] ?? null;
|
|
26294
|
+
}
|
|
26295
|
+
function parsePinnedAgentLaunch(launcher, sessionId) {
|
|
26296
|
+
const pinnedSessionId = sessionId.trim();
|
|
26297
|
+
if (!pinnedSessionId) return null;
|
|
26298
|
+
const harness = launcher.includes("codex-app-server-host.js") || /(?:^|\s)(?:exec\s+)?codex(?:\s|$)/m.test(launcher) ? "codex" : /(?:^|\s)(?:exec\s+)?omp\s+--mode\s+rpc(?:\s|$)/m.test(launcher) ? "ohmypi" : /(?:^|\s)claude(?:\s|$)/m.test(launcher) ? "claude-code" : null;
|
|
26299
|
+
const model = parseFlagValue(launcher, "--model") ?? parseFlagValue(launcher, "-m");
|
|
26300
|
+
if (!harness || !model || model.startsWith("pending-")) return null;
|
|
26301
|
+
return {
|
|
26302
|
+
sessionId: pinnedSessionId,
|
|
26303
|
+
model,
|
|
26304
|
+
harness
|
|
26305
|
+
};
|
|
26306
|
+
}
|
|
26307
|
+
function readPinnedAgentLaunchSync(agentId) {
|
|
26308
|
+
const agentDir = getAgentDir(agentId);
|
|
26309
|
+
const launcherPath = join(agentDir, "launcher.sh");
|
|
26310
|
+
const sessionIdPath = join(agentDir, "session.id");
|
|
26311
|
+
if (!existsSync$1(launcherPath) || !existsSync$1(sessionIdPath)) return null;
|
|
26312
|
+
try {
|
|
26313
|
+
return parsePinnedAgentLaunch(readFileSync$1(launcherPath, "utf8"), readFileSync$1(sessionIdPath, "utf8"));
|
|
26314
|
+
} catch {
|
|
26315
|
+
return null;
|
|
26316
|
+
}
|
|
26317
|
+
}
|
|
26318
|
+
//#endregion
|
|
26319
|
+
//#region ../../lib/agents/placeholder-reconciliation.ts
|
|
26320
|
+
init_persistent_logger();
|
|
26321
|
+
init_agent_state();
|
|
26322
|
+
function defaultPlaceholderReconciliationDeps() {
|
|
26323
|
+
return {
|
|
26324
|
+
readPinnedLaunch: readPinnedAgentLaunchSync,
|
|
26325
|
+
markRunning: markAgentRunningState,
|
|
26326
|
+
saveState: (state) => Effect.runPromise(saveAgentState(state)),
|
|
26327
|
+
logDeacon: logDeaconEventSync,
|
|
26328
|
+
logAgent: logAgentLifecycleSync
|
|
26329
|
+
};
|
|
26330
|
+
}
|
|
26331
|
+
async function reconcileLiveWorkSpawnPlaceholder(state, notifyStatusChanged, deps) {
|
|
26332
|
+
if (state.model !== "pending-work-spawn") return null;
|
|
26333
|
+
const resolvedDeps = deps ?? defaultPlaceholderReconciliationDeps();
|
|
26334
|
+
const pinnedLaunch = resolvedDeps.readPinnedLaunch(state.id);
|
|
26335
|
+
if (!pinnedLaunch) return null;
|
|
26336
|
+
const previousStatus = state.status;
|
|
26337
|
+
state.model = pinnedLaunch.model;
|
|
26338
|
+
state.harness = pinnedLaunch.harness;
|
|
26339
|
+
state.sessionId = pinnedLaunch.sessionId;
|
|
26340
|
+
resolvedDeps.markRunning(state);
|
|
26341
|
+
await resolvedDeps.saveState(state);
|
|
26342
|
+
notifyStatusChanged(state, previousStatus, true);
|
|
26343
|
+
const message = `Reconciled ${state.id} placeholder to running (${pinnedLaunch.harness}/${pinnedLaunch.model})`;
|
|
26344
|
+
resolvedDeps.logDeacon(`handleAgentHeartbeatDeadEvent: ${message}`);
|
|
26345
|
+
resolvedDeps.logAgent(state.id, message);
|
|
26346
|
+
return message;
|
|
26347
|
+
}
|
|
26348
|
+
//#endregion
|
|
26349
|
+
//#region ../../lib/cloister/confirmed-session-query.ts
|
|
26664
26350
|
init_tmux();
|
|
26665
26351
|
const consecutiveMisses = /* @__PURE__ */ new Map();
|
|
26666
26352
|
function queryConfirmedSession(agentId) {
|
|
@@ -26802,7 +26488,10 @@ async function handleAgentHeartbeatDeadEvent$1(agentId, context, deps) {
|
|
|
26802
26488
|
} catch {
|
|
26803
26489
|
return [];
|
|
26804
26490
|
}
|
|
26805
|
-
else
|
|
26491
|
+
else {
|
|
26492
|
+
const action = await reconcileLiveWorkSpawnPlaceholder(state, deps.notifyAgentStatusChanged);
|
|
26493
|
+
return action ? [action] : [];
|
|
26494
|
+
}
|
|
26806
26495
|
else if (state.status === "starting") {
|
|
26807
26496
|
if (isStartingWithinGrace(state)) return [];
|
|
26808
26497
|
}
|
|
@@ -26960,7 +26649,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
26960
26649
|
const message = buildStalledResumePrompt(state);
|
|
26961
26650
|
if (!message) continue;
|
|
26962
26651
|
try {
|
|
26963
|
-
const { messageAgent } = await import("./agents-
|
|
26652
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
26964
26653
|
await messageAgent(agentId, message);
|
|
26965
26654
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
26966
26655
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -27069,12 +26758,12 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
27069
26758
|
``,
|
|
27070
26759
|
`Next ready task: ${firstTask}`,
|
|
27071
26760
|
``,
|
|
27072
|
-
`If you don't already have your full brief for ${state.issueId} in context (work-agent role instructions, the
|
|
26761
|
+
`If you don't already have your full brief for ${state.issueId} in context (work-agent role instructions, the xBRIEF plan, recorded decisions & hazards), re-read it now — it is on disk at ${briefPath}, plus .pan/continue.json and .pan/spec.vbrief.json in your workspace. Startup kickoff delivery can silently fail on large briefs, so do not assume you received it.`,
|
|
27073
26762
|
``,
|
|
27074
26763
|
"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."
|
|
27075
26764
|
].join("\n");
|
|
27076
26765
|
try {
|
|
27077
|
-
const { messageAgent } = await import("./agents-
|
|
26766
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
27078
26767
|
await messageAgent(agentId, message);
|
|
27079
26768
|
writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
|
|
27080
26769
|
const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
|
|
@@ -28343,8 +28032,8 @@ async function cleanupStaleAgentState() {
|
|
|
28343
28032
|
*/
|
|
28344
28033
|
async function cleanupAbandonedFeedback() {
|
|
28345
28034
|
const actions = [];
|
|
28346
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28347
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
28035
|
+
const { getReviewStatusSync } = await import("./review-status-C6n6-9f_.js");
|
|
28036
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-qmiMbqTZ.js");
|
|
28348
28037
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
28349
28038
|
const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
|
|
28350
28039
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -28415,7 +28104,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
28415
28104
|
if (!issueId) return null;
|
|
28416
28105
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
28417
28106
|
if (sessions.includes(agentSession)) return null;
|
|
28418
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28107
|
+
const { getReviewStatusSync } = await import("./review-status-C6n6-9f_.js");
|
|
28419
28108
|
try {
|
|
28420
28109
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
28421
28110
|
} catch {}
|
|
@@ -28537,7 +28226,7 @@ async function checkOrphanedCompletions() {
|
|
|
28537
28226
|
async function checkPendingTestDispatch() {
|
|
28538
28227
|
const actions = [];
|
|
28539
28228
|
try {
|
|
28540
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28229
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-C6n6-9f_.js");
|
|
28541
28230
|
const statuses = loadReviewStatuses();
|
|
28542
28231
|
const now = Date.now();
|
|
28543
28232
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -28570,7 +28259,7 @@ async function checkPendingTestDispatch() {
|
|
|
28570
28259
|
console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
|
|
28571
28260
|
continue;
|
|
28572
28261
|
}
|
|
28573
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28262
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
28574
28263
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
28575
28264
|
if (!resolved) continue;
|
|
28576
28265
|
const issueLower = issueId.toLowerCase();
|
|
@@ -28585,8 +28274,8 @@ async function checkPendingTestDispatch() {
|
|
|
28585
28274
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28586
28275
|
continue;
|
|
28587
28276
|
}
|
|
28588
|
-
const { spawnRun } = await import("./agents-
|
|
28589
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
28277
|
+
const { spawnRun } = await import("./agents-FlIgQ3ql.js");
|
|
28278
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-DXDt0Xa-.js");
|
|
28590
28279
|
try {
|
|
28591
28280
|
const run = await spawnRun(issueId, "test", {
|
|
28592
28281
|
workspace,
|
|
@@ -28709,7 +28398,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28709
28398
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
28710
28399
|
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.`;
|
|
28711
28400
|
try {
|
|
28712
|
-
const { messageAgent } = await import("./agents-
|
|
28401
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
28713
28402
|
await messageAgent(testSession, nudge);
|
|
28714
28403
|
unsignaledTestNudges.set(testSession, now);
|
|
28715
28404
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -28723,7 +28412,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28723
28412
|
case "nudge-write": {
|
|
28724
28413
|
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.`;
|
|
28725
28414
|
try {
|
|
28726
|
-
const { messageAgent } = await import("./agents-
|
|
28415
|
+
const { messageAgent } = await import("./agents-FlIgQ3ql.js");
|
|
28727
28416
|
await messageAgent(testSession, nudge);
|
|
28728
28417
|
unsignaledTestNudges.set(testSession, now);
|
|
28729
28418
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -28746,8 +28435,8 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28746
28435
|
async function checkVerificationReviewContradiction() {
|
|
28747
28436
|
const actions = [];
|
|
28748
28437
|
try {
|
|
28749
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28750
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28438
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-C6n6-9f_.js");
|
|
28439
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
28751
28440
|
const statuses = loadReviewStatuses();
|
|
28752
28441
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
28753
28442
|
let reviewedAtCommit;
|
|
@@ -28796,7 +28485,7 @@ async function checkPostReviewCommits() {
|
|
|
28796
28485
|
const actions = [];
|
|
28797
28486
|
try {
|
|
28798
28487
|
const statuses = loadReviewStatuses();
|
|
28799
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28488
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
28800
28489
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
28801
28490
|
if (status.mergeStatus === "merged") continue;
|
|
28802
28491
|
if (!status.reviewedAtCommit) continue;
|
|
@@ -28851,7 +28540,7 @@ async function checkPostReviewCommits() {
|
|
|
28851
28540
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
28852
28541
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28853
28542
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
28854
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
28543
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
|
|
28855
28544
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
28856
28545
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
28857
28546
|
issueId,
|
|
@@ -28951,7 +28640,7 @@ async function checkReadyForMergeStuck() {
|
|
|
28951
28640
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
28952
28641
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
28953
28642
|
async function reconcileTestStatusFromGreenCi() {
|
|
28954
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
28643
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
|
|
28955
28644
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
28956
28645
|
isGitHubAppConfigured,
|
|
28957
28646
|
loadReviewStatuses,
|
|
@@ -28972,7 +28661,7 @@ async function reconcileTestStatusFromGreenCi() {
|
|
|
28972
28661
|
*/
|
|
28973
28662
|
async function clearStaleCiFeedback(issueId) {
|
|
28974
28663
|
const { readdir, rm } = await import("fs/promises");
|
|
28975
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28664
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
28976
28665
|
const projectConfig = resolveProjectFromIssueSync(issueId);
|
|
28977
28666
|
if (!projectConfig) return;
|
|
28978
28667
|
const repoDir = projectConfig.projectPath;
|
|
@@ -29268,7 +28957,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29268
28957
|
}
|
|
29269
28958
|
}
|
|
29270
28959
|
try {
|
|
29271
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28960
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
29272
28961
|
const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
|
|
29273
28962
|
if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
|
|
29274
28963
|
} catch {}
|
|
@@ -29317,8 +29006,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29317
29006
|
async function checkMergedWorkSessions() {
|
|
29318
29007
|
const actions = [];
|
|
29319
29008
|
try {
|
|
29320
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
29321
|
-
const { setAgentPaused } = await import("./agents-
|
|
29009
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-MWnqdLCJ.js");
|
|
29010
|
+
const { setAgentPaused } = await import("./agents-FlIgQ3ql.js");
|
|
29322
29011
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29323
29012
|
for (const session of toKill) try {
|
|
29324
29013
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -29358,7 +29047,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
29358
29047
|
async function checkAwaitingTestWorkSessions() {
|
|
29359
29048
|
const actions = [];
|
|
29360
29049
|
try {
|
|
29361
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
29050
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-MWnqdLCJ.js");
|
|
29362
29051
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29363
29052
|
const now = Date.now();
|
|
29364
29053
|
for (const session of candidates) {
|
|
@@ -29411,14 +29100,14 @@ async function runPatrol() {
|
|
|
29411
29100
|
hasLoggedGlobalPauseSkip = false;
|
|
29412
29101
|
addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
|
|
29413
29102
|
console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
|
|
29414
|
-
for (const a of await (await import("./stale-task-claims-
|
|
29103
|
+
for (const a of await (await import("./stale-task-claims-BbFwCTb0.js")).patrolStaleTaskClaims()) {
|
|
29415
29104
|
actions.push(a);
|
|
29416
29105
|
addLog("action", a, state.patrolCycle);
|
|
29417
29106
|
}
|
|
29418
29107
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
29419
29108
|
actions.push(...stuckRemediationActions);
|
|
29420
29109
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
29421
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
29110
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-BBu6DSNm.js");
|
|
29422
29111
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
29423
29112
|
actions.push(...reconciledJournalActions);
|
|
29424
29113
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29430,7 +29119,7 @@ async function runPatrol() {
|
|
|
29430
29119
|
const age = Date.now() - (pending.timestamp ?? 0);
|
|
29431
29120
|
if (age < 3600 * 1e3) {
|
|
29432
29121
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
29433
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29122
|
+
const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
|
|
29434
29123
|
const { unlinkSync } = await import("fs");
|
|
29435
29124
|
unlinkSync(pendingFile);
|
|
29436
29125
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
@@ -29444,7 +29133,7 @@ async function runPatrol() {
|
|
|
29444
29133
|
} catch (err) {
|
|
29445
29134
|
console.warn(`[deacon] Failed to process pending lifecycle: ${err.message}`);
|
|
29446
29135
|
}
|
|
29447
|
-
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-
|
|
29136
|
+
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-Bjsho_ha.js")).runScheduledDeployPatrol();
|
|
29448
29137
|
const livenessActions = await reconcileAgentLiveness();
|
|
29449
29138
|
actions.push(...livenessActions);
|
|
29450
29139
|
for (const a of livenessActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29476,7 +29165,7 @@ async function runPatrol() {
|
|
|
29476
29165
|
actions.push(...suspendActions);
|
|
29477
29166
|
for (const a of suspendActions) addLog("action", a, state.patrolCycle);
|
|
29478
29167
|
try {
|
|
29479
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29168
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
29480
29169
|
const allStatuses = loadReviewStatuses();
|
|
29481
29170
|
for (const [issueId, status] of Object.entries(allStatuses)) {
|
|
29482
29171
|
if (!status.readyForMerge || status.mergeStatus === "merged") continue;
|
|
@@ -29496,7 +29185,7 @@ async function runPatrol() {
|
|
|
29496
29185
|
} catch (err) {
|
|
29497
29186
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
29498
29187
|
}
|
|
29499
|
-
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-
|
|
29188
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-BBu6DSNm.js");
|
|
29500
29189
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
29501
29190
|
actions.push(...reapedWorkActions);
|
|
29502
29191
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29504,7 +29193,7 @@ async function runPatrol() {
|
|
|
29504
29193
|
actions.push(...reapedMergedAdvancingActions);
|
|
29505
29194
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
29506
29195
|
try {
|
|
29507
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
29196
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-BbWNd10K.js");
|
|
29508
29197
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
29509
29198
|
actions.push(...remoteCredentialActions);
|
|
29510
29199
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29512,7 +29201,7 @@ async function runPatrol() {
|
|
|
29512
29201
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29513
29202
|
}
|
|
29514
29203
|
try {
|
|
29515
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
29204
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-CRCg1L4H.js");
|
|
29516
29205
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
29517
29206
|
actions.push(...heartbeatActions);
|
|
29518
29207
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29520,7 +29209,7 @@ async function runPatrol() {
|
|
|
29520
29209
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29521
29210
|
}
|
|
29522
29211
|
try {
|
|
29523
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
29212
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-BbWNd10K.js");
|
|
29524
29213
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
29525
29214
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
29526
29215
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -29705,7 +29394,7 @@ async function runPatrol() {
|
|
|
29705
29394
|
const issueId = runtimeState.currentIssue;
|
|
29706
29395
|
try {
|
|
29707
29396
|
if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
|
|
29708
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29397
|
+
const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
|
|
29709
29398
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
29710
29399
|
if (resolved) {
|
|
29711
29400
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
@@ -29719,7 +29408,7 @@ async function runPatrol() {
|
|
|
29719
29408
|
mergeStatus: "merged",
|
|
29720
29409
|
readyForMerge: false
|
|
29721
29410
|
});
|
|
29722
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29411
|
+
const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
|
|
29723
29412
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
29724
29413
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
29725
29414
|
} else {
|
|
@@ -29899,7 +29588,7 @@ function startDeacon() {
|
|
|
29899
29588
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
29900
29589
|
(async () => {
|
|
29901
29590
|
await reconcileAgentLiveness();
|
|
29902
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
29591
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-BBu6DSNm.js");
|
|
29903
29592
|
await runBootAdvancingSelfHeal();
|
|
29904
29593
|
runScheduledPatrol("startup");
|
|
29905
29594
|
})().catch((err) => {
|
|
@@ -29969,6 +29658,6 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
29969
29658
|
};
|
|
29970
29659
|
}
|
|
29971
29660
|
//#endregion
|
|
29972
|
-
export { reconcileClosedPrReadyForMerge as $, reconcileAgentLiveness as A,
|
|
29661
|
+
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 };
|
|
29973
29662
|
|
|
29974
|
-
//# sourceMappingURL=deacon-
|
|
29663
|
+
//# sourceMappingURL=deacon-pRnyD5w9.js.map
|