@overdeck/desktop 0.45.23 → 0.45.24

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