@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.
Files changed (375) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-Dj2gncak.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DXdHmRTC.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BvDuWNMo.js → archive-planning-DYrYojxl.js} +30 -6
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-CGj16clS.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-NU3KbXYw.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-BRpqQvNd.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-BJum14fs.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-B5jFNi2G.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-CbKNkFE5.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Brf_5MuG.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-bONZDBbC.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-CxReRxIc.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-CbmztVcc.js → codex-TmSi-yTv.js} +27 -8
  37. package/server/{codex-parser-jl8AeAmB.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-q4Gvd8dq.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-BJKocXKd.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-DeTsoZdR.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DvyMuOle.js} +55 -186
  42. package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-DlQKkHH2.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-15gDOk20.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_odMIaC.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-C3avRVEr.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-Dq33SYEj.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-H9if0bCQ.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-bYpM9-kZ.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-wH46-WsJ.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Codk1pc2.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-D_cre6WM.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-CJpgf9A3.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-B8HbQdqU.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-CkT_kznS.js → deacon-pRnyD5w9.js} +266 -577
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-wDf4UgHt.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-D-Ed5yVw.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-BCZ89M9X.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-DbJLYcHv.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-dTeNdq7X.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-CpBGsO6_.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-TnWdydfB.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-DSUdR-04.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-Dsuv6qyB.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-BMrK4TrE.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features-Bc-Bmiye.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-DS6NUuSs.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Ctr5uuvo.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-COR0mbRI.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-6WHU4O7A.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-B1S_KZv4.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-DpwQ-sc3.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-DmAcuCkV.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-7d_RkmWp.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/{git-utils-Cc3FHDKd.js → git-utils-BVa07a4a.js} +2 -2
  100. package/server/{git-utils-CsKGnzFA.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-CDPtGF7J.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CU14oYzP.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-XjTJbBm7.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-CwBZZ3t7.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/{harness-binary-B2CTcD84.js → harness-binary-CVio2m-u.js} +1 -1
  107. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-qHJBhy3Z.js} +4 -4
  108. package/server/{health-events-DREeevle.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-C1whmd58.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-yxRsjk-z.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-B-HItBiS.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-Dz_OymXE.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-D4iNWMA5.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-D7T75Pye.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-BVNa4MQW.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-DJKLWcVT.js} +12 -12
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-CXsfxslp.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-C9DdEOKY.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-DQR9PMgS.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-DtmJM0D0.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-pDW9VUNz.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-COgR2By1.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-Cp1To4L8.js → layers-DzxSTGNA.js} +2 -2
  136. package/server/lifecycle-DfeyBDwA.js +121 -0
  137. package/server/lifecycle-io-Bsnr2K4F.js +3 -0
  138. package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-DsFkIxee.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-YwZMDIwQ.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-C1t-bspg.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-BwsyNRJV.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-B-SnXOoc.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-XrB80vfT.js} +28 -28
  147. package/server/{merge-batch-Byt-QnEl.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-BYjeXrVN.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-DiISXcC-.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-6LEglm6o.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-Do8_q32h.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-B95_4in_.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-CKana8EH.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +1 -1
  161. package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  162. package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-neK8dHQk.js} +15 -13
  163. package/server/package-lock.json +2 -2
  164. package/server/package.json +1 -1
  165. package/server/{pan-dir-DOcf6ug3.js → pan-dir-DeVUgwA7.js} +78 -58
  166. package/server/{paths-DooHpt9p.js → paths-_zEts6wc.js} +2 -2
  167. package/server/{pickup-CaskQ7j6.js → pickup-Dd0Znxxy.js} +1 -1
  168. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-0HaEGDlH.js} +186 -67
  169. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  170. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-D0ykk59O.js} +2 -2
  171. package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-2sK1apsO.js} +2 -2
  172. package/server/projects-9SkRpES9.js +3 -0
  173. package/server/{prompts-EvhMeeHG.js → prompts-Dp4Tpk39.js} +2 -2
  174. package/server/{providers-DNSQqy2V.js → providers-DKkBXhxU.js} +1 -1
  175. package/server/{providers-BDDPULlp.js → providers-DV7ec8l7.js} +7 -7
  176. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  177. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  178. package/server/public/assets/{dist-Bio7THQU.js → dist-BWR4qFiV.js} +1 -1
  179. package/server/public/assets/{dist-DukGS2YZ.js → dist-DEmlBBNQ.js} +3 -3
  180. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  181. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  182. package/server/public/assets/index-CUr1xv8w.css +1 -0
  183. package/server/public/assets/{index-Bwejq-5s.js → index-CsSuZQBI.js} +145 -144
  184. package/server/public/assets/{linear-qUWmMZ-c.js → linear-C9zFQpkX.js} +1 -1
  185. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  186. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  187. package/server/public/assets/{prod-C8VtLuWC.js → prod-B1jCQihw.js} +4 -4
  188. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  189. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  190. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  191. package/server/public/index.html +2 -2
  192. package/server/{pull-requests-By_BteaL.js → pull-requests--Ib2jTgy.js} +1 -1
  193. package/server/{pull-requests-8z2N1UOV.js → pull-requests-CXIhdCYD.js} +13 -11
  194. package/server/{queries-ZABd5aXP.js → queries-6d7Cdtm7.js} +693 -104
  195. package/server/{rally-i_goYmiA.js → rally-B708-nZn.js} +3 -3
  196. package/server/{rally-api-DqKqIMNR.js → rally-api-nY0ZANw3.js} +2 -2
  197. package/server/{rally-api-xHazRk0d.js → rally-api-yjQ0TfHd.js} +1 -1
  198. package/server/{rally-client-COYz1vYR.js → rally-client-B1EJhfV0.js} +4 -4
  199. package/server/{rally-client-CGWEHaPd.js → rally-client-CULK2XAY.js} +1 -1
  200. package/server/rally-njs_mJrt.js +3 -0
  201. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-MWnqdLCJ.js} +1 -1
  202. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-N3BTkmX_.js} +1 -1
  203. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  204. package/server/{rebuild-stack-CKjJAI8L.js → rebuild-stack-kA7XngID.js} +1 -1
  205. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-uWbZfjms.js} +6 -6
  206. package/server/record-t6V-3Dcj.js +3 -0
  207. package/server/{record-update-D3N6WMFR.js → record-update-DACtKh6_.js} +1 -1
  208. package/server/record-update-Dq0t2uBG.js +310 -0
  209. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BJtIQuag.js} +2 -2
  210. package/server/{release-engine-DMINVN8S.js → release-engine-DZpmGGzb.js} +5 -5
  211. package/server/{release-set-DeUSOEHy.js → release-set-hnXd_kga.js} +3 -3
  212. package/server/{remote-Dr5kGYSZ.js → remote-4tiENDaI.js} +3 -3
  213. package/server/{remote-b-c5bOce.js → remote-Br-ZWVIP.js} +3 -3
  214. package/server/{remote-agents-D6O_zETW.js → remote-agents-CRCg1L4H.js} +1 -1
  215. package/server/{remote-agents-Ct_WOyke.js → remote-agents-nmty1mLu.js} +6 -6
  216. package/server/{remote-completion-Dca3hAaa.js → remote-completion-BbWNd10K.js} +12 -12
  217. package/server/resume-CcKqnTvE.js +3 -0
  218. package/server/{review-agent-CCum8sGe.js → review-agent-DJRO8EG8.js} +1 -1
  219. package/server/{review-agent-CThvgK2r.js → review-agent-sKkE1FEL.js} +22 -22
  220. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-BLbSC4ke.js} +5 -5
  221. package/server/{review-context-OYfKUprb.js → review-context-BgX3lcCx.js} +8 -8
  222. package/server/{review-status-DFRjDFef.js → review-status-A7quS5KJ.js} +54 -21
  223. package/server/review-status-C6n6-9f_.js +3 -0
  224. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  225. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BhSQ0d0l.js} +2 -2
  226. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-To3-iS-N.js} +1 -1
  227. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  228. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CTRNtzXO.js} +6 -6
  229. package/server/{rollup-CZ02qgxk.js → rollup-B53Y81xK.js} +1 -1
  230. package/server/{rollup-SyuF09e4.js → rollup-WA0VD-Rr.js} +8 -8
  231. package/server/{scanner-Br0Z5S6R.js → scanner-D2743cp8.js} +11 -7
  232. package/server/{sequence-io-fxU0DlwW.js → sequence-io-Cg0zYj_E.js} +4 -4
  233. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-BGY8gjg-.js} +5 -5
  234. package/server/server.js +941 -752
  235. package/server/{service-Bagb90KZ.js → service-DCpB_SGd.js} +53 -53
  236. package/server/{session-fork-BqQxd-V6.js → session-fork-BQ8_6H32.js} +2 -2
  237. package/server/{session-history-XdS0JKp3.js → session-history-CVZDpS3c.js} +4 -4
  238. package/server/{settings-BNbocWOg.js → settings-BZ5m1UCl.js} +3 -3
  239. package/server/settings-D0OSwos5.js +2 -0
  240. package/server/{settings-uLc6DEYI.js → settings-ylxwqwQG.js} +2 -2
  241. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BlxG6Xye.js} +2 -2
  242. package/server/{shadow-state-CbvsN3qG.js → shadow-state-C2_epgx2.js} +1 -1
  243. package/server/{shadow-state-C_NkP-sa.js → shadow-state-Dh-HzF2J.js} +2 -2
  244. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-4bvjn9b3.js} +2 -2
  245. package/server/{ship-log-__QtAFXG.js → ship-log-ClSMIzZX.js} +1 -1
  246. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CHIxLr_d.js} +1 -1
  247. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-r4pHQBIr.js} +7 -7
  248. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DWAorh2B.js} +22 -21
  249. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-KC_UduxD.js} +1 -1
  250. package/server/{specialist-completion-CqmduO92.js → specialist-completion-BXhav38U.js} +1 -1
  251. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-DtrYvGJ-.js} +5 -5
  252. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  253. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-DJ3RzKxW.js} +3 -3
  254. package/server/{specialists-D0gGXMZx.js → specialists-D5fRZXmN.js} +1 -1
  255. package/server/specialists-DVj0hvaL.js +3 -0
  256. package/server/{specialists-CwZHb5cb.js → specialists-DyFeedjn.js} +66 -76
  257. package/server/{specialists-Bg9v4z3F.js → specialists-JVO00bs7.js} +340 -214
  258. package/server/specs-nN45DG2X.js +3 -0
  259. package/server/{src-BMMoA_ba.js → src-CG9mCkP6.js} +6 -6
  260. package/server/{src-Bqdtd6po.js → src-CMTQGyCK.js} +3 -3
  261. package/server/{src-k039WVYY.js → src-U7_kTPEE.js} +2 -1
  262. package/server/{stack-health-Bd06frFn.js → stack-health-Df0YEZKa.js} +1 -1
  263. package/server/{stack-health-C-ifC7b0.js → stack-health-puygdaMd.js} +2 -2
  264. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-BbFwCTb0.js} +4 -4
  265. package/server/{staleness-BID1BKdr.js → staleness-Bpy41ngS.js} +15 -3
  266. package/server/{staleness-_Tr-GwdA.js → staleness-Cbl_w4Bw.js} +1 -1
  267. package/server/{state-home-CONQvZR0.js → state-home-CIGjwNfJ.js} +96 -44
  268. package/server/{state-migrate-BeBW0KXA.js → state-migrate-Dkzaxvny.js} +12 -3
  269. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-CzEov_fq.js} +26 -22
  270. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  271. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  272. package/server/{summary-fork-agEMsPSo.js → summary-fork-D8bXjCr7.js} +2 -2
  273. package/server/{summary-fork-bX6ax6X7.js → summary-fork-DHhJIsAL.js} +8 -8
  274. package/server/{supervisor-Ctt4eRYz.js → supervisor-BO-Zk_h-.js} +3 -3
  275. package/server/supervisor-BPy-o1A8.js +2 -0
  276. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  277. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-Bza0ffAh.js} +2 -2
  278. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-CEgauF4U.js} +15 -15
  279. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  280. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-CmUBK5cT.js} +1 -1
  281. package/server/{test-verdict-D_-sXIz_.js → test-verdict-DFjjIHR5.js} +1 -1
  282. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-BDtLOIlO.js} +2 -2
  283. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-DL566HbH.js} +1 -1
  284. package/server/tmux-DoThH6aj.js +3 -0
  285. package/server/{tmux-L5LgvGLp.js → tmux-ftABRAmc.js} +76 -44
  286. package/server/{token-BkQLy4yS.js → token-CsOhvw42.js} +2 -2
  287. package/server/{token-util-DI8sGlmF.js → token-util-CTmczIfW.js} +1 -1
  288. package/server/token-util-DrHg8abn.js +3 -0
  289. package/server/{tracker-config-DdT-nUAM.js → tracker-config-B4itFzDo.js} +2 -2
  290. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-BePq_oj-.js} +1 -1
  291. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-tnxxqROg.js} +2 -2
  292. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-m73vGebA.js} +1 -1
  293. package/server/{tunnel-IdK1iTHx.js → tunnel-B2vxjx_b.js} +3 -3
  294. package/server/{tunnel-BIFl98rc.js → tunnel-Cgj-IGIl.js} +1 -1
  295. package/server/{types-7-GnJn0t.js → types-BBNjPcqU.js} +1 -1
  296. package/server/{uat-train-j0cPeMSj.js → uat-train-CuEn0t9M.js} +28 -28
  297. package/server/{uat-train-0Ujk8GCv.js → uat-train-cKfM-_WW.js} +1 -1
  298. package/server/{validation-CabEISJT.js → validation-B5JxoPUS.js} +259 -9
  299. package/server/{validation-DcAgXTQp.js → validation-CIi6pnI2.js} +1 -1
  300. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-BcnIbigL.js} +1 -1
  301. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-C-lIHfUa.js} +1 -1
  302. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-Br0S_Ous.js} +102 -37
  303. package/server/{verification-runner-DlJezzef.js → verification-runner-CDj4lD4t.js} +1 -1
  304. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DKpNNW5i.js} +1 -1
  305. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Yb2bd3Fq.js} +13 -13
  306. package/server/{workflows-BZNNYkGC.js → workflows-C9WmILql.js} +39 -77
  307. package/server/workflows-D90rMOya.js +2 -0
  308. package/server/{workspace-D9ppycdg.js → workspace-BVl4rihN.js} +3 -3
  309. package/server/{workspace-3IC-UkAi.js → workspace-DuUdndHe.js} +1 -1
  310. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-cEGcO6UT.js} +1 -1
  311. package/server/{workspace-manager-B1WOfKvB.js → workspace-manager-ZTdJAy9M.js} +1 -1
  312. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-hLUv3ADC.js} +22 -15
  313. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-CskwzzhL.js} +2 -2
  314. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-DNpMixRq.js} +1 -1
  315. package/server/{workspaces-CFPcL0vl.js → workspaces-hWvy9eKs.js} +275 -109
  316. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  317. package/sync-sources/agents/pan-merge-agent.md +1 -1
  318. package/sync-sources/agents/pan-planning-agent.md +4 -4
  319. package/sync-sources/agents/pan-work-agent.md +1 -1
  320. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  321. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  322. package/sync-sources/hooks/record-cost-event.js +363 -71
  323. package/sync-sources/hooks/session-start-hook +7 -0
  324. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  325. package/sync-sources/rules/per-bead-durability.md +1 -1
  326. package/sync-sources/rules/prd-authoring.md +1 -1
  327. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  328. package/sync-sources/skills/pan/SKILL.md +2 -2
  329. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  330. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  331. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  332. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  333. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  334. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  335. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  336. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  337. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  338. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-start/SKILL.md +3 -3
  340. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  342. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  343. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  344. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  345. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  346. package/sync-sources/skills/plan/SKILL.md +11 -11
  347. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  348. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  349. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  350. package/server/agent-state-Co5Sy2Fw.js +0 -3
  351. package/server/agents-DyHKlq1I.js +0 -3
  352. package/server/cli-BRORS9qY.js +0 -3
  353. package/server/codex-DNyiQDKW.js +0 -3
  354. package/server/deacon-swarm-CV54eNmU.js +0 -2
  355. package/server/dist-j64RzSrQ.js +0 -3
  356. package/server/forge-B0_opi-V.js +0 -2
  357. package/server/hume-BmhvfVbV.js +0 -3
  358. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  359. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  360. package/server/merge-ops-DwWCkSgo.js +0 -2
  361. package/server/projects-BKkwpH6q.js +0 -3
  362. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  363. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  364. package/server/rally-OSJXdiHK.js +0 -3
  365. package/server/record-rwK-nKv_.js +0 -3
  366. package/server/record-update-Crz74r-6.js +0 -168
  367. package/server/resume-wZZsWtzz.js +0 -3
  368. package/server/review-status-Bnh-rdkY.js +0 -3
  369. package/server/settings-BlUsVaUc.js +0 -2
  370. package/server/specialists-Dqe6_HE5.js +0 -3
  371. package/server/specs-BhOKBzqk.js +0 -3
  372. package/server/supervisor-COVHrBTg.js +0 -2
  373. package/server/tmux-BAvtac_u.js +0 -3
  374. package/server/token-util-BArZLN6w.js +0 -3
  375. 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 { Hn as init_projects, In as getProjectSync, Kn as listProjectsSync, Mr as AGENTS_DIR, Nt as init_record, Rt as readIssueRecordSync, Vr as OVERDECK_HOME, b as DEFAULT_CONFIG$1, ci as sessionFilePath, cn as init_auto_commit, f as loadConfigSync, fn as STATE_PLANE_PATHS, gn as isStatePlanePath, ii as init_paths, jr as init_errors, mn as init_state_plane, nr as resolveProjectFromIssueSync, pn as getMainDivergence, s as init_load, un as reconcileStatePlaneDrift, x as init_defaults } from "./config-yaml-ig8Nwtiw.js";
3
- import { n as init_build_info, t as getBuildInfo } from "./build-info-NU3KbXYw.js";
4
- import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-D6K9K-rE.js";
2
+ import { Gr as sessionFilePath, Gt as reconcileStatePlaneDrift, Jt as getMainDivergence, Nt as readIssueRecordSync, Ot as init_record, Tn as init_projects, Ut as init_auto_commit, Vr as init_paths, Yt as init_state_plane, Zt as isStatePlanePath, b as DEFAULT_CONFIG$1, f as loadConfigSync, hr as AGENTS_DIR, kn as listProjectsSync, mr as init_errors, qt as STATE_PLANE_PATHS, s as init_load, wr as OVERDECK_HOME, x as init_defaults, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-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-Crz74r-6.js";
7
- import { D as killSession, E as isPaneDead, F as querySessionSync, H as sessionExistsSync, M as listSessions, R as sendKeys, V as sessionExists, i as capturePane, j as listSessionNames, k as listPaneValues, w as init_tmux, z as sendKeysAsync } from "./tmux-L5LgvGLp.js";
8
- import { a as init_event_store, i as initEventStore } from "./event-store-TnWdydfB.js";
9
- import { C as projectLegacySystemHealthSummary, t as init_src } from "./src-k039WVYY.js";
10
- import { S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-DFRjDFef.js";
11
- import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-DXdHmRTC.js";
12
- import { $ as stopAgent, Bn as recordAgentFailure, Dn as getAgentDir, F as isContextOverflowTail, Gn as saveAgentStateSync, I as init_messaging, Jn as setAgentYieldedSync, L as messageAgent, Ln as markAgentRunningState, M as resumeAgent, Mn as init_agent_state, N as init_context_overflow, Q as init_termination, St as init_transcript_landing, Tn as clearYieldForResumeSync, Un as resetAgentFailureCount, Wn as saveAgentState, _r as init_codex_auth, a as listRunningAgentsSync, at as getConcurrencyLimits, dr as init_runtime_state, fr as saveAgentRuntimeState, ft as workResumeSlotsAvailable, hr as applyCodexAuthBurnFlag, ht as setCachedMemoryVerdict, i as listRunningAgents, jn as getAgentStateSync, kn as getAgentState, lr as getAgentRuntimeState, lt as resetPatrolDispatchBudget, mt as init_memory_verdict_cache, n as init_queries, ot as init_concurrency, pn as buildDefaultResumeContinueMessage, qn as setAgentPausedSync, r as listAgentStates, rt as describeRunningAgents, s as init_agents$1, st as releaseAdvancingSlot, tt as countRunningAgents, ur as getAgentRuntimeStateSync, ut as tryReserveAdvancingSlot, vr as paneShowsCodexAuthBurn, vt as deliverInitialPromptWithRetry, wn as clearAgentTroubledSync, xt as captureTranscriptUserRecordSnapshot } from "./queries-ZABd5aXP.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-XdS0JKp3.js";
14
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CawsPSS2.js";
15
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CXsfxslp.js";
16
- import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-DpAMD_WO.js";
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-DQR9PMgS.js";
19
- import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-q4Gvd8dq.js";
20
- import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-D_odMIaC.js";
21
- import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-C-ifC7b0.js";
22
- import { l as init_dag, o as getDispatchableItems } from "./dag-CJpgf9A3.js";
23
- import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-DeTsoZdR.js";
24
- import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-CONQvZR0.js";
25
- import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-CKnIryGT.js";
26
- import { n as __filename, r as init_esm_shims } from "./esm-shims-dTeNdq7X.js";
27
- import { i as init_staleness, r as computeBuildStaleness } from "./staleness-BID1BKdr.js";
28
- import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-Dj2gncak.js";
29
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-BXP6g75N.js";
30
- import { r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-DZ-iAnAa.js";
31
- 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-BoWm66Kh.js";
32
- import { H as getTmuxSessionName, J as parseReviewerSessionName, _ as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-CwZHb5cb.js";
33
- import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-BvDuWNMo.js";
34
- import { A as withConcurrencyLimit, k as init_concurrency$1 } from "./github-app-CDPtGF7J.js";
35
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-DtmJM0D0.js";
36
- import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-CqnUzGEK.js";
37
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CpUZl5aE.js";
38
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-C6mJckNs.js";
39
- import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BryRr6AO.js";
40
- import { t as recordRecoveryFailure } from "./recovery-trip-DkzJSej9.js";
41
- import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-BWOSZjWd.js";
42
- import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-CQ3kqha7.js";
43
- import { n as init_label_reconciler, r as reconcilePipelineLabelsPatrol } from "./label-reconciler-Df1ZduPH.js";
44
- import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-xklgvNA7.js";
45
- import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-Yf34xXxY.js";
46
- import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-Cp5tljlJ.js";
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 { cpus as cpus$1, freemem as freemem$1, homedir as homedir$1, loadavg as loadavg$1, platform as platform$1, totalmem as totalmem$1 } from "node:os";
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 processTable = await readProcessTable().catch(() => /* @__PURE__ */ new Map());
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 panePidValue = (await Effect.runPromise(listPaneValues(agent.id, "#{pane_pid}")))[0];
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-DyHKlq1I.js");
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-Dq33SYEj.js");
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 nonReviewerSessions = sessionNames.filter((name) => name.startsWith("agent-") || name.startsWith("specialist-") || name.startsWith("planning-")).filter((name) => !/^agent-.*-review-(?:security|correctness|performance|requirements)$/.test(name));
23740
- for (const sessionName of nonReviewerSessions) {
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-Dq33SYEj.js");
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-D60PJWNL.js");
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-DyHKlq1I.js");
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-DyHKlq1I.js");
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-Bd06frFn.js");
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-CKjJAI8L.js");
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-CCum8sGe.js");
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-CCum8sGe.js");
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-DyHKlq1I.js");
24784
- const { buildTestRolePrompt } = await import("./test-agent-queue-BJZ9Nfcc.js");
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-CCum8sGe.js");
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-CCum8sGe.js");
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-Bnh-rdkY.js");
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-DyHKlq1I.js");
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-CCum8sGe.js");
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-DyHKlq1I.js");
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-DyHKlq1I.js");
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-CZsrU_nj.js");
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-CZsrU_nj.js");
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-DyHKlq1I.js");
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-CCum8sGe.js");
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-DyHKlq1I.js");
25677
- const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-CCum8sGe.js");
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-DyHKlq1I.js");
25727
- const { readEventsSync } = await import("./events-Dsuv6qyB.js");
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-BhOKBzqk.js");
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-DV3h1FYG.js");
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-B-SnXOoc.js");
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-CU14oYzP.js");
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-CU14oYzP.js");
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-CHU9K1vU.js");
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-Bx5z11mF.js");
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-Bx5z11mF.js");
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-Bx5z11mF.js");
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-C4mR0Reb.js");
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/cloister/confirmed-session-query.ts
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 return [];
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-DyHKlq1I.js");
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 vBRIEF 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.`,
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-DyHKlq1I.js");
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-Bnh-rdkY.js");
28347
- const { clearFeedbackFiles } = await import("./feedback-writer-Bx5z11mF.js");
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-Bnh-rdkY.js");
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-Bnh-rdkY.js");
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-BKkwpH6q.js");
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-DyHKlq1I.js");
28589
- const { buildTestRolePrompt } = await import("./test-agent-queue-BJZ9Nfcc.js");
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-DyHKlq1I.js");
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-DyHKlq1I.js");
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-Bnh-rdkY.js");
28750
- const { resolveProjectFromIssueSync } = await import("./projects-BKkwpH6q.js");
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-BKkwpH6q.js");
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-CCum8sGe.js");
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-CU14oYzP.js");
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-BKkwpH6q.js");
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-BKkwpH6q.js");
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-CaMkFOIH.js");
29321
- const { setAgentPaused } = await import("./agents-DyHKlq1I.js");
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-CaMkFOIH.js");
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-L7pJkQFL.js")).patrolStaleTaskClaims()) {
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-cSvXNZLZ.js");
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-B-SnXOoc.js");
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-1IrZxicY.js")).runScheduledDeployPatrol();
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-BKkwpH6q.js");
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-cSvXNZLZ.js");
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-Dca3hAaa.js");
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-D6O_zETW.js");
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-Dca3hAaa.js");
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-BKkwpH6q.js");
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-B-SnXOoc.js");
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-cSvXNZLZ.js");
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, getAcceptedSystemHealthSnapshot as At, recordDeadEndNeedsYou as B, getLastPatrolResult as C, INSPECT_TIMEOUT_MS as Ct, isDeaconRunning as D, formatUptime as Dt, handleAgentStoppedForOrphanReviewerSessions as E, getResourceStacks as Et, setAgentStatusChangedNotifier as F, isSmeeConfiguredSync as Ft, redeliverUndeliveredKickoffs as G, isRapidPostResumeDeath as H, setAgentStoppedNotifier as I, startSmeeProcessSync as It, startBootReconciliation as J, isBootReconciliationCandidate as K, setMergeReadyNotifier as L, classifyAgentHealth as Lt, resetPatrolHeartbeatForStartup as M, getResourceConfig as Mt, runPatrol as N, getSystemHealthEvidenceSnapshot as Nt, loadConfig as O, getContainerHistory as Ot, saveState as P, getSystemHealthSnapshot as Pt, ciRetryMap as Q, startDeacon as R, getDeaconStatus as S, paneShowsClaudeBootBlockingScreen as St, handleAgentStoppedEvent as T, classifyMemoryPressure 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, getDeployStaleness as jt, loadState as k, getCurrentDockerStats 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, checkInspectAgentTimeouts as wt, getDeaconLogs as x, stuckOverflowNativeRecoveryState as xt, cleanupStaleAgentState as y, contextOverflowRecoveryState as yt, stopDeacon as z };
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-CkT_kznS.js.map
29663
+ //# sourceMappingURL=deacon-pRnyD5w9.js.map