@overdeck/desktop 0.45.15 → 0.45.18

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 (372) hide show
  1. package/dist-electron/main.js +149 -158
  2. package/dist-electron/main.js.map +1 -1
  3. package/dist-electron/preload.js +17 -2
  4. package/dist-electron/preload.js.map +1 -1
  5. package/package.json +5 -4
  6. package/server/acceptance-criteria-aQFKQf-J.js +62 -0
  7. package/server/{advancing-selfheal-CSuZ31bB.js → advancing-selfheal-DgwQgm4D.js} +6 -5
  8. package/server/{agent-gc-D_DxfBHR.js → agent-gc-kpzxqT7P.js} +3 -3
  9. package/server/agent-state-C_6TG-Ad.js +3 -0
  10. package/server/{agent-state-service-C_2ZAQRP.js → agent-state-service-BUfovFfB.js} +1 -1
  11. package/server/{agent-state-service-BZkvgQf4.js → agent-state-service-nUD3qfob.js} +9 -52
  12. package/server/agents-BA15AQqo.js +3 -0
  13. package/server/{briefing-freshness-Kh5V8RTh.js → agents-BHBxr8c9.js} +5 -131
  14. package/server/{archive-planning-DkivCk1A.js → archive-planning-CzCW9Ifl.js} +5 -10
  15. package/server/{archive-planning-CTILQRnV.js → archive-planning-D-QsBufn.js} +1 -1
  16. package/server/{artifact-index-jobs-CmsvQ1ey.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
  17. package/server/{backlog-auto-trigger-ueRaT8Dy.js → backlog-auto-trigger-B7Bi0bvY.js} +3 -3
  18. package/server/behavior-CWqNMqE5.js +10 -0
  19. package/server/briefing-freshness-DuxIE1yr.js +131 -0
  20. package/server/{checkpoint-manager-fu9oVsR-.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
  21. package/server/{checkpoint-manager-CAFos8e1.js → checkpoint-manager-DixkLus7.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-DvhGi8P_.js → checkpoints-B1Z42tJE.js} +1 -1
  24. package/server/{checkpoints-1BqOlS4q.js → checkpoints-BiviJqei.js} +2 -2
  25. package/server/claude-hooks-provision-BeMGi4ty.js +3 -0
  26. package/server/{claude-hooks-provision-s_wdpeVj.js → claude-hooks-provision-Du_PkMsp.js} +132 -114
  27. package/server/{claude-permissions-CaWqysff.js → claude-permissions-BB6agcOZ.js} +2 -2
  28. package/server/{claude-settings-overlay-CcTf0xzG.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
  29. package/server/{claude-settings-overlay-BbA4FbVI.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
  30. package/server/cli-BFgrSWKV.js +3 -0
  31. package/server/{cli-BwCvCUBK.js → cli-C33xPZNm.js} +9 -9
  32. package/server/{cliproxy-C2xC-3vH.js → cliproxy-BQX1TL6N.js} +1 -1
  33. package/server/{cliproxy-BsoNNDAj.js → cliproxy-CGBA1GzA.js} +2 -2
  34. package/server/{close-issue-BleIwP3f.js → close-issue-DNv8npc1.js} +5 -5
  35. package/server/{closed-issue-reaper-BwUUvjEW.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
  36. package/server/{closed-issue-reaper-mC5pujeb.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
  37. package/server/codex-DxLivxri.js +3 -0
  38. package/server/{behavior-Cpj03N4v.js → codex-parser-DboQnEXN.js} +3 -9
  39. package/server/{codex-DW60_5j2.js → codex-sgWVCGUd.js} +43 -17
  40. package/server/{config-BRNQJXhA.js → config-6MCHOZ2N.js} +1 -1
  41. package/server/{config-ZNnMpIlh.js → config-DfaUXr6r.js} +2 -2
  42. package/server/{config-yaml-Dcz-8uit.js → config-yaml-CqaAyn8y.js} +149 -80
  43. package/server/{conflict-gate-DTje2Ll7.js → conflict-gate-BF_zhcmb.js} +3 -3
  44. package/server/{conflict-gate-DGT8jCLp.js → conflict-gate-BubJprtD.js} +1 -1
  45. package/server/{context-layers-BdUCQ-cl.js → context-layers-BFrxfl0l.js} +17 -3
  46. package/server/{context-layers-ByOWUjUg.js → context-layers-DWL_8HhY.js} +2 -2
  47. package/server/{control-settings-DwkAeooY.js → control-settings-BguNQ1F_.js} +4 -4
  48. package/server/{conversation-compaction-WYQZUVDm.js → conversation-compaction-CRKAf2qP.js} +1 -1
  49. package/server/{conversation-compaction-OTYgd6eg.js → conversation-compaction-DxSXl0pT.js} +8 -8
  50. package/server/{conversation-service-C_kNZPLx.js → conversation-service-DzuY9qoH.js} +1 -1
  51. package/server/{conversation-service-BR1OgvxO.js → conversation-service-mFVFdDQK.js} +6 -5
  52. package/server/{conversations-DG2M8WnT.js → conversations-BX5aD-6F.js} +4 -4
  53. package/server/{conversations-izHvSoAR.js → conversations-BajHQ60c.js} +1 -1
  54. package/server/{cost-DQ2ajr_m.js → cost-BoqD1Pxz.js} +2 -2
  55. package/server/{cost-B2mj17iG.js → cost-DuZ5vlv-.js} +3 -3
  56. package/server/{cost-sync-gTayEuWP.js → cost-sync-BYnmnMkY.js} +3 -3
  57. package/server/{dag-CqTehWpY.js → dag-C6kYyF17.js} +7 -243
  58. package/server/{dangerous-git-ops-DDWQlPC3.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
  59. package/server/dashboard-db-worker.js +6 -6
  60. package/server/{deacon-BqW9HMew.js → deacon-CwCiNuEZ.js} +3 -3
  61. package/server/{deacon-DrKDBeJL.js → deacon-Dru5onpk.js} +258 -167
  62. package/server/{deacon-nudge-log-D1wEK6zF.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
  63. package/server/{deacon-swarm-CO_A7xyd.js → deacon-swarm-BPmBmSoU.js} +298 -72
  64. package/server/deacon-swarm-CKyGJng1.js +2 -0
  65. package/server/deacon.js +14 -7
  66. package/server/{devcontainer-renderer-BQolp_qZ.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
  67. package/server/{dist-Bc32rWJB.js → dist-BwlEiLCU.js} +1 -1
  68. package/server/dist-Bx4KkgYL.js +3 -0
  69. package/server/{dist-src-Byxt1ifL.js → dist-src-BE0Denfs.js} +1 -1
  70. package/server/{docker-s-esqZ__.js → docker-CNjXS72x.js} +2 -2
  71. package/server/{ensure-devcontainer-DA4-jF6R.js → ensure-devcontainer-5e9xOve4.js} +4 -4
  72. package/server/{ensure-devcontainer-pUVaT0h3.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
  73. package/server/{esm-shims-CJHy8CZY.js → esm-shims-Cso7IGBC.js} +1 -1
  74. package/server/{event-store-CcJAhKCl.js → event-store-D9UhQyMS.js} +1 -1
  75. package/server/{event-store-DRte2Rwt.js → event-store-KZnWUKWh.js} +3 -3
  76. package/server/{events-Bej1w_k8.js → events-2eFUPdqz.js} +3 -3
  77. package/server/{events-CtsLScn8.js → events-BYbvqZky.js} +1 -1
  78. package/server/{factory-FN727tWr.js → factory-BtaRsHFC.js} +20 -17
  79. package/server/{feature-registry-population-ie-yBcQC.js → feature-registry-population-Ca2UaV0U.js} +4 -4
  80. package/server/{feature-registry-storage-CkZTFSsn.js → feature-registry-storage-DaP-bQxO.js} +2 -2
  81. package/server/{features-Dtm9ABuz.js → features-DqvaoQoa.js} +2 -2
  82. package/server/{feedback-target-BYtpyt1i.js → feedback-target-BXWdOiYI.js} +9 -7
  83. package/server/{feedback-target-DVJQDiE4.js → feedback-target-BblmMe9P.js} +1 -1
  84. package/server/{feedback-writer-DOUhyIW2.js → feedback-writer-CULeOOY4.js} +1 -1
  85. package/server/{feedback-writer-fdE1BzeL.js → feedback-writer-Dn8o9ZyE.js} +4 -4
  86. package/server/{flywheel-Bi82iiNl.js → flywheel-BUWdcfhq.js} +1 -1
  87. package/server/{flywheel-Bv3wv2S6.js → flywheel-CqkO3cDj.js} +15 -28
  88. package/server/{flywheel-CUErLAyN.js → flywheel-D9r1mw2U.js} +13 -13
  89. package/server/{flywheel-merge-order-DXjeBnJ1.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
  90. package/server/{flywheel-merge-order-BaEN3iyN.js → flywheel-merge-order-VtjUweEb.js} +7 -7
  91. package/server/forge-DJy3Zx4s.js +2 -0
  92. package/server/{forge-ButEdJ31.js → forge-wEollMCi.js} +22 -12
  93. package/server/{from-CbtTxftl.js → from-B2tOYhYV.js} +1 -1
  94. package/server/{fts-db-CBgBLZcL.js → fts-db-Bgzn2RO7.js} +2 -2
  95. package/server/{fts-operations-CI9Xuo_1.js → fts-operations-Bj8yutnR.js} +2 -2
  96. package/server/{git-utils-ClfpP47N.js → git-utils-GxlL0tmt.js} +2 -2
  97. package/server/{git-utils-BCLRWQ-y.js → git-utils-q8jNoBts.js} +1 -1
  98. package/server/{github-app-DRD2woO0.js → github-app-BrYwK_Gb.js} +1 -1
  99. package/server/{github-app-DscZ0_B6.js → github-app-tUbb8Ldr.js} +8 -3
  100. package/server/{github-client-DpiZnxGH.js → github-client-BwBU41jK.js} +3 -3
  101. package/server/{github-client-iFRw8f7e.js → github-client-D6CNsftm.js} +1 -1
  102. package/server/{github-pr-lookup-D-EBexxC.js → github-pr-lookup-BS5PqkJb.js} +2 -2
  103. package/server/{harness-resolve-iMjyNUJ2.js → harness-resolve-Dx8hUsvC.js} +3 -3
  104. package/server/{health-events-CRdxDFN2.js → health-events-2DLp-5Xp.js} +2 -2
  105. package/server/{health-events-B_WsQyYm.js → health-events-B0mj6Iae.js} +1 -1
  106. package/server/{hooks-C1ScyVxP.js → hooks-BDcQJDUe.js} +1 -1
  107. package/server/{hooks-C9b7Vqpw.js → hooks-BS_JrvYP.js} +3 -3
  108. package/server/hume-B4seN95Y.js +3 -0
  109. package/server/{hume-TQ5pvOZ_.js → hume-BRhNKyXQ.js} +2 -2
  110. package/server/{idle-stack-reaper-B1kG7B_X.js → idle-stack-reaper-BCITXNW5.js} +2 -2
  111. package/server/{idle-stack-reaper-iFVOAoJy.js → idle-stack-reaper-C1ymihno.js} +1 -1
  112. package/server/{infra-bpq1MHKU.js → infra-_Kx1m9pm.js} +9 -4
  113. package/server/{injection-BLWfwTVZ.js → injection-Bvhyg_MV.js} +1 -1
  114. package/server/{injection-DJqWld1v.js → injection-CCaYkofq.js} +7 -7
  115. package/server/{inspect-agent-DytCsltn.js → inspect-agent-BqyZ4pCo.js} +35 -67
  116. package/server/inspect-agent-DCJQm9Wu.js +2 -0
  117. package/server/{internal-token-CjlhdufS.js → internal-token-Cl-1IxaE.js} +2 -2
  118. package/server/{internal-token-CCaWaTwE.js → internal-token-D-t28de5.js} +1 -1
  119. package/server/{io-BiQ2Cs3k.js → io-DkC4sFSy.js} +42 -56
  120. package/server/{issue-closed-FApNiOOs.js → issue-closed-Cpl4VDUM.js} +41 -6
  121. package/server/{issue-lifecycle-C-K53ASY.js → issue-lifecycle-CFR8TJ22.js} +22 -37
  122. package/server/{issue-lifecycle-BkFWNjlD.js → issue-lifecycle-YNTy3OT3.js} +1 -1
  123. package/server/{issue-service-singleton-bG1WdSdQ.js → issue-service-singleton-D81mCts_.js} +1 -1
  124. package/server/{issue-service-singleton-CuHGpJJP.js → issue-service-singleton-ldvUUXi3.js} +29 -29
  125. package/server/{issues-CwQMphDH.js → issues-DIEHt9sq.js} +2 -2
  126. package/server/{jsonl-parser-dNIjHgym.js → jsonl-parser-Cd5jIqh7.js} +3 -3
  127. package/server/{label-cleanup-DYvAZknd.js → label-cleanup-Btny6Gyo.js} +3 -3
  128. package/server/{state-home-CRowbXqU.js → launcher-generator-BXLM9f4b.js} +7 -127
  129. package/server/{layers-CD6FysRU.js → layers-gCJlK62m.js} +2 -2
  130. package/server/lifecycle-D7aQUnTO.js +12 -0
  131. package/server/{lifecycle-io-C_Wu0_i-.js → lifecycle-io-DQBF-GHO.js} +1 -1
  132. package/server/{lifecycle-io-CeYxP3cE.js → lifecycle-io-FfPUtz-y.js} +36 -47
  133. package/server/{linear-client-EtVyblVz.js → linear-client-CDH2D6Qy.js} +3 -3
  134. package/server/{linear-client-4qoKnuQu.js → linear-client-WrYrUIAH.js} +1 -1
  135. package/server/memory-fts-worker.js +1 -1
  136. package/server/{merge-7rqkTUm2.js → merge-BsDgUxFz.js} +3 -3
  137. package/server/{merge-brm721Es.js → merge-Dervs4BF.js} +1 -1
  138. package/server/{merge-agent-4Zhlgvqp.js → merge-agent-D6DNhe9j.js} +64 -51
  139. package/server/{merge-agent-36wfYm2u.js → merge-agent-DMQTJMP0.js} +1 -1
  140. package/server/{merge-batch-itfnwdsT.js → merge-batch-Bv6Z5K2H.js} +1 -1
  141. package/server/{merge-blockers-Bto_Oe_o.js → merge-blockers-WWWi6Ur2.js} +2 -2
  142. package/server/merge-ops-h9OCnIVz.js +2 -0
  143. package/server/{merge-rebase-Czfqfe4q.js → merge-rebase-Czth9ggm.js} +2 -2
  144. package/server/{merge-set-BIkGQL9j.js → merge-set-DNc4zBqd.js} +3 -3
  145. package/server/{merge-set-G1RHcu3D.js → merge-set-vuE3MEVt.js} +1 -1
  146. package/server/{merge-sync-B43Dybea.js → merge-sync-B2KSk54U.js} +2 -2
  147. package/server/{merge-sync-DIrmlZUr.js → merge-sync-B9nHdUGx.js} +1 -1
  148. package/server/{merge-train-DGqVuNZV.js → merge-train-DJgr81tF.js} +3 -3
  149. package/server/{merge-train-deps-q15XLnAS.js → merge-train-deps-B2OWS0k9.js} +4 -4
  150. package/server/{merge-verification-Cqfxx6bE.js → merge-verification-BBIXUEqa.js} +4 -4
  151. package/server/{multipart-parser-CiPxxfUH.js → multipart-parser-9DhuAkPd.js} +2 -2
  152. package/server/{no-resume-mode-yrPEQ_pC.js → no-resume-mode-Gh5R_YLF.js} +1 -1
  153. package/server/node_modules/.package-lock.json +11 -11
  154. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  155. package/server/node_modules/toml/README.md +54 -0
  156. package/server/node_modules/toml/index.d.ts +42 -1
  157. package/server/node_modules/toml/index.js +3 -3
  158. package/server/node_modules/toml/lib/compiler.js +35 -3
  159. package/server/node_modules/toml/lib/parser.js +224 -143
  160. package/server/node_modules/toml/package.json +3 -1
  161. package/server/node_modules/ws/lib/receiver.js +15 -32
  162. package/server/node_modules/ws/lib/websocket-server.js +4 -4
  163. package/server/node_modules/ws/lib/websocket.js +4 -4
  164. package/server/node_modules/ws/package.json +5 -1
  165. package/server/{orphan-proposed-reconciler-BWWHn4Lr.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
  166. package/server/{orphan-proposed-reconciler-DAD9FJtQ.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
  167. package/server/package-lock.json +12 -12
  168. package/server/package.json +1 -1
  169. package/server/{pan-dir-Bj7Hy8iu.js → pan-dir-BTw4MdSe.js} +4 -4
  170. package/server/{paths-C9DkhIOT.js → paths-Btkc8mzp.js} +2 -2
  171. package/server/{pickup-CKRuGDsB.js → pickup-BtvRBbvI.js} +1 -1
  172. package/server/{pipeline-notifier-BkKbQ8ji.js → pipeline-notifier-3frIvSi3.js} +1 -1
  173. package/server/{pipeline-notifier-CAurUste.js → pipeline-notifier-DTd19f18.js} +2 -2
  174. package/server/{project-pipelines-BRWaGmI4.js → project-pipelines-B95fcAek.js} +2 -2
  175. package/server/projects-Dc9aoVoG.js +3 -0
  176. package/server/{prompts-DfI5qbTW.js → prompts-CIVmjHxn.js} +2 -2
  177. package/server/{providers-D-5txBRc.js → providers-BLLk5IIb.js} +1 -1
  178. package/server/{providers-CWDXoaMA.js → providers-C-yWibCk.js} +7 -7
  179. package/server/public/assets/chunk-BO2N2NFS-DzKZyoKY.js +103 -0
  180. package/server/public/assets/{diagram-OG6HWLK6-Avtvq2qI.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
  181. package/server/public/assets/{dist-BEHQuasD.js → dist-BqccLhaw.js} +3 -3
  182. package/server/public/assets/{dist-BvmY-qb1.js → dist-rC3nAs_O.js} +1 -1
  183. package/server/public/assets/{ganttDiagram-6RSMTGT7-7KhCd0fH.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
  184. package/server/public/assets/{highlighted-body-OFNGDK62-iQoBMTf0.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
  185. package/server/public/assets/index-CPcysUHk.js +796 -0
  186. package/server/public/assets/index-H5M0yhM4.css +1 -0
  187. package/server/public/assets/{linear-CiJHW9g5.js → linear-yqcXkDfj.js} +1 -1
  188. package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
  189. package/server/public/assets/{pieDiagram-4H26LBE5-BOhmvUhW.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
  190. package/server/public/assets/{prod-DmLBBqat.js → prod-DKUunUdN.js} +4 -4
  191. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Cjku660G.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
  192. package/server/public/assets/{sankeyDiagram-5OEKKPKP-D52w5oPh.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
  193. package/server/public/assets/{xychartDiagram-2RQKCTM6-BTO07_Iv.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
  194. package/server/public/index.html +2 -2
  195. package/server/{pull-requests-CKZPWhjD.js → pull-requests-D7AL5woD.js} +1 -1
  196. package/server/{pull-requests-Bmre-Xlz.js → pull-requests-NDDNtqNq.js} +3 -3
  197. package/server/{agents-CsOzAmRg.js → queries-C0LCGG21.js} +743 -399
  198. package/server/{rally-BBd9tQ__.js → rally-4oKvnxLG.js} +3 -3
  199. package/server/rally-DF5a3ioP.js +3 -0
  200. package/server/{rally-api-DxZFObI_.js → rally-api-41tT6ikZ.js} +2 -2
  201. package/server/{rally-api-DDc85HIz.js → rally-api-BsaQ8Vnz.js} +1 -1
  202. package/server/{rally-client-DvvLiAQP.js → rally-client-Bo4hNcCZ.js} +5 -5
  203. package/server/{rally-client-BADHn0m_.js → rally-client-b5PT1x5L.js} +1 -1
  204. package/server/{reap-terminal-sessions-D_xvy-Mk.js → reap-terminal-sessions-BR39qflC.js} +1 -1
  205. package/server/{reap-terminal-sessions-D6JDJsqF.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
  206. package/server/{rebuild-stack-GOsWqXi3.js → rebuild-stack-C7JPUom6.js} +1 -1
  207. package/server/{rebuild-stack-D19i080j.js → rebuild-stack-Ddv6W017.js} +6 -6
  208. package/server/{reconstruct-cache-lQrG4xGg.js → reconstruct-cache-Gqhm---K.js} +6 -6
  209. package/server/record-DLOqfbkI.js +3 -0
  210. package/server/record-update-BltEmPge.js +168 -0
  211. package/server/record-update-CDp7aTaT.js +3 -0
  212. package/server/recovery-trip-Cn7KJVkS.js +44 -0
  213. package/server/{release-engine-DxcMWRuK.js → release-engine-BYzmIBf9.js} +5 -5
  214. package/server/{release-set-BYsgX7o6.js → release-set-7pnxFOWR.js} +3 -3
  215. package/server/{remote-DmeL21dF.js → remote-Cvu4CSDk.js} +3 -3
  216. package/server/{remote-agents-BfQBE6MN.js → remote-agents-C2C6z9tj.js} +6 -33
  217. package/server/{remote-agents-DlvbzO7m.js → remote-agents-DYY5fFpd.js} +1 -1
  218. package/server/{remote-completion-BgkiSQmx.js → remote-completion-2Kb4IDg_.js} +13 -13
  219. package/server/{remote-8W2Yhygw.js → remote-rN0ecjHE.js} +3 -3
  220. package/server/resume-BFLl-yLn.js +3 -0
  221. package/server/{review-agent-D025Wt7w.js → review-agent-BZvk0N5G.js} +31 -23
  222. package/server/{review-agent-Rub0OpZc.js → review-agent-CpSHLzed.js} +1 -1
  223. package/server/{review-artifacts-CX951jTU.js → review-artifacts-PCo53YMn.js} +5 -19
  224. package/server/{review-context-DGGGR_w5.js → review-context-M7QtJlJq.js} +8 -8
  225. package/server/{review-monitor-0_qqMcnS.js → review-monitor-BLC5mTTg.js} +2 -2
  226. package/server/{review-status-Br6lAFGO.js → review-status-77N3PoZr.js} +1 -1
  227. package/server/{review-status-4qqLkRMu.js → review-status-DANr0t-v.js} +33 -59
  228. package/server/{review-status-enrichment-Cr8m3uVL.js → review-status-enrichment-DwOg4UfL.js} +3 -3
  229. package/server/{review-status-sync-D3KUhsdA.js → review-status-sync-Bd08OOFA.js} +1 -1
  230. package/server/{review-status-sync-OC-l1lNt.js → review-status-sync-BjTUJ5fx.js} +2 -2
  231. package/server/{review-verdict-feedback-YOzmsq9G.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
  232. package/server/{review-verdict-feedback-DrWMuRaj.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
  233. package/server/{rollup-CnxbwaLH.js → rollup-Bu0f2EyN.js} +8 -8
  234. package/server/{rollup-DmazRY0j.js → rollup-DTCCdEy4.js} +1 -1
  235. package/server/{scanner-DE1MqAaF.js → scanner-BlZ2vB7j.js} +7 -7
  236. package/server/{sequence-io-C0uoqfGx.js → sequence-io-ylyDtz2J.js} +4 -4
  237. package/server/{sequencer-agent-i-b2u4SJ.js → sequencer-agent-DsWQ-87H.js} +6 -17
  238. package/server/server.js +5670 -6392
  239. package/server/{service-D0_gh2tl.js → service-CLVBC_1Y.js} +116 -90
  240. package/server/{session-fork-DZ12vipL.js → session-fork-DlEIAhRy.js} +2 -2
  241. package/server/session-history-bnOFKMwf.js +168 -0
  242. package/server/settings-CP3GGon2.js +2 -0
  243. package/server/{settings-ByqjPtFO.js → settings-Cqa-8nyj.js} +2 -2
  244. package/server/{settings-DCC4BAqj.js → settings-gJrdLZy2.js} +3 -3
  245. package/server/{shadow-engineering-BhnmtW5m.js → shadow-engineering-fq1YEKV3.js} +3 -3
  246. package/server/{shadow-state-ByXZehsy.js → shadow-state-BqeFAygK.js} +1 -1
  247. package/server/{shadow-state-CKm8xWX9.js → shadow-state-RptE9Cau.js} +2 -2
  248. package/server/shadow-utils-BMWr5tRT.js +39 -0
  249. package/server/{ship-log-DE_0Cv_i.js → ship-log-BRQQi2lU.js} +1 -1
  250. package/server/{smart-compaction-D5Zen3AA.js → smart-compaction-CmoXpjeU.js} +7 -7
  251. package/server/{smart-compaction-h4_ca6Uk.js → smart-compaction-DldUel4B.js} +1 -1
  252. package/server/{spawn-planning-session-Dueit4WX.js → spawn-planning-session-CoS6LTc6.js} +16 -16
  253. package/server/{spawn-planning-session-Bgi7Ub02.js → spawn-planning-session-DT2tSMxo.js} +1 -1
  254. package/server/{specialist-completion-BZ8M-WZ0.js → specialist-completion-pJtESo7m.js} +1 -1
  255. package/server/{specialist-context-BMq83C58.js → specialist-context-CspI4Eog.js} +5 -5
  256. package/server/{specialist-handoff-logger-BxX1YefH.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
  257. package/server/{specialist-logs-BWZYcJ6P.js → specialist-logs-DtSkPJZK.js} +3 -3
  258. package/server/{specialists-ZkW4Mb7U.js → specialists-CywEMwxk.js} +1 -1
  259. package/server/{specialists-8ZAguXef.js → specialists-D9-dMUtI.js} +1 -1
  260. package/server/{specialists-BudKrjOu.js → specialists-Dax7tqXC.js} +1817 -560
  261. package/server/{specialists-DrPrC9Y9.js → specialists-GF42OOqd.js} +18 -18
  262. package/server/specs-VwcFtEDi.js +3 -0
  263. package/server/{src-DHn4Rd2F.js → src-By3D85Ry.js} +77 -1
  264. package/server/{src-Dv6L03vW.js → src-CqyFg52C.js} +5 -5
  265. package/server/{src-DNUUqkec.js → src-DhxM-eCb.js} +6 -6
  266. package/server/{stack-health-Dclm7_tu.js → stack-health-BsEVrJZ6.js} +1 -1
  267. package/server/{stack-health-DxsTx7II.js → stack-health-C-SnpRHh.js} +2 -2
  268. package/server/stale-task-claims-vTxmRzLi.js +69 -0
  269. package/server/state-home-Bur1y4oH.js +213 -0
  270. package/server/{state-mapping-BvAgFK8n.js → state-mapping-Ci0pkac4.js} +1 -1
  271. package/server/state-migrate-D3VveYfO.js +362 -0
  272. package/server/{stuck-remediation-CFWUP8_I.js → stuck-remediation-B699-p8v.js} +63 -46
  273. package/server/{stuck-remediation-CLHd-lrF.js → stuck-remediation-CaFYYTQW.js} +1 -1
  274. package/server/{summary-fork-CKc01Our.js → summary-fork-BxnF8Xh0.js} +2 -2
  275. package/server/{summary-fork-CtCwBJ2Z.js → summary-fork-COqYpVa3.js} +8 -8
  276. package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
  277. package/server/supervisor/pty-supervisor.js +2 -2
  278. package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
  279. package/server/supervisor-eWAAmXKu.js +2 -0
  280. package/server/{supervisor-BA5D72Qa.js → supervisor-liMgIPDF.js} +2 -2
  281. package/server/{swarm-readiness-CL5sM9B1.js → swarm-readiness-sXB1vhzo.js} +3 -3
  282. package/server/{system-prerequisites-DmFSXIE5.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
  283. package/server/{teardown-workspace-DWmFJzTw.js → teardown-workspace-DvzqnmUF.js} +14 -71
  284. package/server/{test-agent-queue-DjsQoV5X.js → test-agent-queue-hAU1Ah08.js} +6 -6
  285. package/server/{test-verdict-BSqsQp3G.js → test-verdict-CRsPpByy.js} +1 -1
  286. package/server/{test-verdict-D1AmZ2c0.js → test-verdict-CXMLATGc.js} +1 -1
  287. package/server/{tldr-daemon-C-MGomL8.js → tldr-daemon-Bam7Xhoo.js} +2 -2
  288. package/server/{tldr-daemon-DD9rI5gA.js → tldr-daemon-DhGwd88s.js} +1 -1
  289. package/server/tmux-C-rgxRDA.js +3 -0
  290. package/server/{tmux-C_d-lSIq.js → tmux-U55cNGFG.js} +92 -4
  291. package/server/{token-DfBf1bsd.js → token-Dsa-i36o.js} +2 -2
  292. package/server/{token-util-CROoF5ic.js → token-util-BWNpH96m.js} +1 -1
  293. package/server/token-util-DRt0j2nQ.js +3 -0
  294. package/server/{tracker-config-CNODpd11.js → tracker-config-OkdbaUCm.js} +2 -2
  295. package/server/{tracker-utils-Ch2_5GGf.js → tracker-utils-CghXMF3q.js} +2 -2
  296. package/server/{tracker-utils-B9ZoVA9b.js → tracker-utils-DdzUiPNU.js} +1 -1
  297. package/server/{traefik-connect-BF4x_LUQ.js → traefik-connect-CZYB3dlm.js} +1 -1
  298. package/server/{tunnel-r_5nHAI6.js → tunnel-D1YxesBL.js} +3 -3
  299. package/server/{tunnel-YD80_IHr.js → tunnel-DjlzgTl3.js} +1 -1
  300. package/server/typed-errors-CH4roFIj.js +3 -0
  301. package/server/{typed-errors-BEJhbjJg.js → typed-errors-n_Tnb4Fh.js} +3 -4
  302. package/server/{types-CE1m_daD.js → types-DOjWNv3Z.js} +1 -1
  303. package/server/{types-33JEP4LZ.js → types-DXBMm4mX.js} +1 -1
  304. package/server/{uat-train-DDI00aqD.js → uat-train-CaaWs9Rp.js} +1 -1
  305. package/server/{uat-train-DjkFWXge.js → uat-train-CqN34zFx.js} +24 -25
  306. package/server/{validation-DUTiJnyz.js → validation-4-z2Cw4z.js} +70 -23
  307. package/server/validation-DpTNakM6.js +3 -0
  308. package/server/verification-artifact-DK1xb1zG.js +56 -0
  309. package/server/verification-artifact-JD_edpZ9.js +2 -0
  310. package/server/{verification-runner-inLgeQux.js → verification-runner-BjHN80pJ.js} +338 -58
  311. package/server/verification-runner-ShYu5Ph3.js +2 -0
  312. package/server/{work-agent-prompt-fZljjA1_.js → work-agent-prompt-BiJ43Der.js} +12 -88
  313. package/server/workflows-B4C3lY9E.js +2 -0
  314. package/server/{workflows-oBnJ7Tm0.js → workflows-DkTotz_m.js} +17 -24
  315. package/server/{workspace-CNuW2j41.js → workspace-CuN0ev4Z.js} +3 -3
  316. package/server/{workspace-B2WOW9Hw.js → workspace-DQ4vVivd.js} +1 -1
  317. package/server/{workspace-config-CBgMGhWs.js → workspace-config-C77NKnsV.js} +1 -1
  318. package/server/{workspace-manager-DjUAJCSs.js → workspace-manager-B1mYn0lN.js} +1 -1
  319. package/server/{workspace-manager-CB-R07R3.js → workspace-manager-Beeo2aKF.js} +23 -48
  320. package/server/{workspace-metadata-9Nn5kgRl.js → workspace-metadata-BZC5BmoP.js} +2 -2
  321. package/server/{workspace-metadata-Fd58uUQG.js → workspace-metadata-Cy7_ZACL.js} +1 -1
  322. package/server/{workspaces-BjWXntty.js → workspaces-CGuzW1Ia.js} +191 -153
  323. package/sync-sources/hooks/ask-user-question-hook +7 -1
  324. package/sync-sources/hooks/codex-notify-hook +64 -8
  325. package/sync-sources/hooks/record-cost-event.js +1109 -36
  326. package/sync-sources/hooks/record-cost-event.js.map +1 -1
  327. package/sync-sources/hooks/statusline.sh +2 -2
  328. package/sync-sources/hooks/work-agent-stop-hook +1 -2
  329. package/server/acceptance-criteria-DHZk2ceV.js +0 -33
  330. package/server/agent-runtime-mirror-DrWxopNA.js +0 -37
  331. package/server/agent-state-EP2QFV9n.js +0 -3
  332. package/server/agents-DCvyTXNU.js +0 -3
  333. package/server/auto-commit-QAfsu3Sb.js +0 -3
  334. package/server/bd-process-lock-D3S4T4o-.js +0 -390
  335. package/server/beads-BGGxrkZ5.js +0 -649
  336. package/server/beads-CYsLiyIM.js +0 -2
  337. package/server/beads-query-B1DlJVp9.js +0 -95
  338. package/server/beads-restore-CyygSmmn.js +0 -23
  339. package/server/cli-ClIQwgMI.js +0 -3
  340. package/server/codex-B7DTpwEw.js +0 -3
  341. package/server/compact-beads-CK_hHEnB.js +0 -3
  342. package/server/compact-beads-DKL54y6j.js +0 -94
  343. package/server/deacon-swarm-BY5hKNaU.js +0 -2
  344. package/server/dist-DGTwcZhI.js +0 -3
  345. package/server/export-Dx_qJ3h8.js +0 -87
  346. package/server/forge-XlDgPQWs.js +0 -2
  347. package/server/hume-K1pi8jC4.js +0 -3
  348. package/server/inspect-agent-477VxQim.js +0 -2
  349. package/server/lifecycle-C_73gi-C.js +0 -14
  350. package/server/merge-ops-PzqsW69V.js +0 -2
  351. package/server/projects-KJ94e50I.js +0 -3
  352. package/server/public/assets/chunk-BO2N2NFS-ClukPsZQ.js +0 -103
  353. package/server/public/assets/index-DUFDmvmH.css +0 -1
  354. package/server/public/assets/index-DnTZ2QeN.js +0 -796
  355. package/server/public/assets/mermaid-GHXKKRXX-DZJOwgBG.js +0 -1
  356. package/server/rally-Dc2Wnxw2.js +0 -3
  357. package/server/record-pyB6VA32.js +0 -3
  358. package/server/recovery-trip-Dfh1tNHn.js +0 -98
  359. package/server/resolver-dTpSSzaH.js +0 -158
  360. package/server/resume-DhcIqsTm.js +0 -3
  361. package/server/settings-yydgaqhv.js +0 -2
  362. package/server/specs-DwoAEGrW.js +0 -3
  363. package/server/supervisor-DHjumXlL.js +0 -2
  364. package/server/tmux-x291Gjjb.js +0 -3
  365. package/server/token-util-xNaV-00f.js +0 -3
  366. package/server/tracker-config-DItsdelv.js +0 -3
  367. package/server/typed-errors-DSPn_xWP.js +0 -3
  368. package/server/validation-ict8hnXk.js +0 -3
  369. package/server/verification-runner-ATaLbpr5.js +0 -2
  370. package/server/workflows-tU7KKxQi.js +0 -2
  371. package/server/writer-CQMGzEkw.js +0 -3
  372. package/server/writer-fe1-8iGc.js +0 -251
@@ -1,38 +1,41 @@
1
1
  import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ar as OVERDECK_HOME, Bt as writeIssueRecordSync, Ct as ensureIssueRecordSync, Kn as resolveProjectFromIssueSync, Nt as readIssueRecordForWorkspaceSync, On as getProjectSync, Pn as init_projects, Pt as readIssueRecordSync, Rn as listProjectsSync, Tn as getIssuePrefix, Zr as sessionFilePath, br as init_errors, cn as STATE_PLANE_PATHS, f as loadConfigSync, fn as isStatePlanePath, in as init_auto_commit, kt as init_record, ln as getMainDivergence, on as queueBeadsAutoCommit, qr as init_paths, s as init_load, un as init_state_plane, xr as AGENTS_DIR } from "./config-yaml-Dcz-8uit.js";
2
+ import { $r as sessionFilePath, Cr as AGENTS_DIR, En as getIssuePrefix, Fn as init_projects, Mr as OVERDECK_HOME, Nt as readIssueRecordForWorkspaceSync, Pt as readIssueRecordSync, Sr as init_errors, Yr as init_paths, cn as init_state_plane, f as loadConfigSync, in as reconcileStatePlaneDrift, kn as getProjectSync, kt as init_record, nn as init_auto_commit, on as STATE_PLANE_PATHS, qn as resolveProjectFromIssueSync, s as init_load, sn as getMainDivergence, un as isStatePlanePath, zn as listProjectsSync } from "./config-yaml-CqaAyn8y.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
4
- import { C as isPaneDead, E as listPaneValues, F as sendKeysAsync, L as sessionExists, O as listSessionNames, P as sendKeys, R as sessionExistsSync, i as capturePane, k as listSessions, w as killSession, x as init_tmux } from "./tmux-C_d-lSIq.js";
5
- import { a as init_event_store, i as initEventStore } from "./event-store-DRte2Rwt.js";
6
- import { C as init_record_lock, S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, w as withIssueRecordLock, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-4qqLkRMu.js";
7
- import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-Kh5V8RTh.js";
8
- import { An as getAgentDir, Bn as markAgentRunningState, D as init_context_overflow, Dn as clearAgentTroubledSync, Dt as captureTranscriptUserRecordSnapshot, E as resumeAgent, Fn as init_agent_state, G as init_termination, Jn as saveAgentStateSync, K as stopAgent, Kn as resetAgentFailureCount, Mn as getAgentState, On as clearYieldForResumeSync, Ot as init_transcript_landing, Pn as getAgentStateSync, Q as listRunningAgentsSync, Un as recordAgentFailure, X as listAgentStates, Xn as setAgentPausedSync, Y as init_queries, Z as listRunningAgents, Zn as setAgentYieldedSync, _r as init_runtime_state, _t as init_config, at as init_concurrency, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, er as init_persistent_logger, et as countRunningAgents, gn as buildDefaultResumeContinueMessage, gr as getAgentRuntimeStateSync, hr as getAgentRuntimeState, it as getConcurrencyLimits, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mt as setCachedMemoryVerdict, nr as logDeaconEventSync, nt as describeRunningAgents, ot as releaseAdvancingSlot, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, tr as logAgentLifecycleSync, vr as saveAgentRuntimeState, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-CsOzAmRg.js";
9
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-Ch2_5GGf.js";
10
- import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BvAgFK8n.js";
11
- import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-OC-l1lNt.js";
12
- import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-ZNnMpIlh.js";
13
- import { n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-CRowbXqU.js";
14
- import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-DwkAeooY.js";
15
- import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-DxsTx7II.js";
16
- import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-B1DlJVp9.js";
17
- import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-CFWUP8_I.js";
18
- import { n as __filename, r as init_esm_shims } from "./esm-shims-CJHy8CZY.js";
19
- import { t as recordDeaconNudge } from "./deacon-nudge-log-D1wEK6zF.js";
20
- import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-0_qqMcnS.js";
21
- import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, d as getAllProjectSpecialistStatuses } from "./specialists-DrPrC9Y9.js";
22
- import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-DkivCk1A.js";
23
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-FApNiOOs.js";
24
- import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-Cqfxx6bE.js";
25
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-DrWMuRaj.js";
26
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-BF4x_LUQ.js";
27
- import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-CO_A7xyd.js";
28
- import { t as recordRecoveryFailure } from "./recovery-trip-Dfh1tNHn.js";
29
- import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-yrPEQ_pC.js";
30
- import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-mC5pujeb.js";
31
- import { a as RELEASED_LABEL, i as READY_LABEL, n as OBJECTION_LABEL, o as VETOED_LABEL, r as PARKED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-CKRuGDsB.js";
32
- import { n as pruneTerminalStoppedAgents } from "./agent-gc-D_DxfBHR.js";
33
- import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-BWWHn4Lr.js";
34
- import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-B1kG7B_X.js";
35
- import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-D1AmZ2c0.js";
4
+ import { n as updateIssueRecord, t as init_record_update } from "./record-update-BltEmPge.js";
5
+ import { A as listSessions, D as listPaneValues, F as sendKeys, I as sendKeysAsync, R as sessionExists, S as init_tmux, T as killSession, i as capturePane, k as listSessionNames, w as isPaneDead, z as sessionExistsSync } from "./tmux-U55cNGFG.js";
6
+ import { a as init_event_store, i as initEventStore } from "./event-store-KZnWUKWh.js";
7
+ import { S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-DANr0t-v.js";
8
+ import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-BHBxr8c9.js";
9
+ import { Dt as captureTranscriptUserRecordSnapshot, F as isContextOverflowTail, Fn as getAgentStateSync, In as init_agent_state, Jn as saveAgentState, M as resumeAgent, N as init_context_overflow, Nn as getAgentState, On as clearAgentTroubledSync, Ot as init_transcript_landing, Q as stopAgent, Qn as setAgentYieldedSync, Sr as paneShowsCodexAuthBurn, Vn as markAgentRunningState, Wn as recordAgentFailure, Yn as saveAgentStateSync, Z as init_termination, Zn as setAgentPausedSync, _n as buildDefaultResumeContinueMessage, _t as init_config, a as listRunningAgentsSync, at as init_concurrency, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, et as countRunningAgents, gr as saveAgentRuntimeState, hr as init_runtime_state, i as listRunningAgents, it as getConcurrencyLimits, jn as getAgentDir, kn as clearYieldForResumeSync, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, n as init_queries, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as resetAgentFailureCount, r as listAgentStates, s as init_agents$1, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, xr as init_codex_auth, yr as applyCodexAuthBurnFlag, yt as loadCloisterConfigSync } from "./queries-C0LCGG21.js";
10
+ import { c as logDeaconEventSync, o as init_persistent_logger, s as logAgentLifecycleSync } from "./session-history-bnOFKMwf.js";
11
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CghXMF3q.js";
12
+ import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-Ci0pkac4.js";
13
+ import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BjTUJ5fx.js";
14
+ import { m as readWorkspacePlanSync, o as init_io } from "./io-DkC4sFSy.js";
15
+ import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-DfaUXr6r.js";
16
+ import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-BguNQ1F_.js";
17
+ import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-C-SnpRHh.js";
18
+ import { l as init_dag, o as getDispatchableItems } from "./dag-C6kYyF17.js";
19
+ import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-Bur1y4oH.js";
20
+ import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-B699-p8v.js";
21
+ import { n as __filename, r as init_esm_shims } from "./esm-shims-Cso7IGBC.js";
22
+ import { t as recordDeaconNudge } from "./deacon-nudge-log-ilDfxrhK.js";
23
+ import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BLC5mTTg.js";
24
+ import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, d as getAllProjectSpecialistStatuses } from "./specialists-GF42OOqd.js";
25
+ import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CzCW9Ifl.js";
26
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-Cpl4VDUM.js";
27
+ import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-BBIXUEqa.js";
28
+ import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CBf-J_wS.js";
29
+ import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-CZYB3dlm.js";
30
+ import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BPmBmSoU.js";
31
+ import { t as recordRecoveryFailure } from "./recovery-trip-Cn7KJVkS.js";
32
+ import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Gh5R_YLF.js";
33
+ import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-LoMnnjtJ.js";
34
+ import { a as RELEASED_LABEL, i as READY_LABEL, n as OBJECTION_LABEL, o as VETOED_LABEL, r as PARKED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-BtvRBbvI.js";
35
+ import { n as pruneTerminalStoppedAgents } from "./agent-gc-kpzxqT7P.js";
36
+ import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-B8H41C4a.js";
37
+ import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-BCITXNW5.js";
38
+ import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-CXMLATGc.js";
36
39
  import { createRequire } from "node:module";
37
40
  import { join } from "node:path";
38
41
  import { Effect } from "effect";
@@ -21636,20 +21639,21 @@ init_activity_logger();
21636
21639
  init_projects();
21637
21640
  init_tmux();
21638
21641
  init_agents();
21642
+ init_persistent_logger();
21639
21643
  init_review_status_sync();
21640
21644
  init_review_dispatch_decision();
21641
21645
  init_review_status();
21646
+ init_codex_auth();
21642
21647
  init_runtime_state();
21643
- init_persistent_logger();
21644
21648
  init_agent_state();
21645
21649
  init_transcript_landing();
21646
21650
  init_config();
21647
21651
  init_memory_verdict_cache();
21648
21652
  init_concurrency();
21649
- init_queries();
21650
21653
  init_termination();
21651
21654
  init_context_overflow();
21652
21655
  init_agents$1();
21656
+ init_queries();
21653
21657
  new (require_undici()).EnvHttpProxyAgent();
21654
21658
  //#endregion
21655
21659
  //#region ../../lib/smee.ts
@@ -22503,8 +22507,8 @@ init_tmux();
22503
22507
  * forever for a verdict that will not arrive.
22504
22508
  */
22505
22509
  const INSPECT_TIMEOUT_MS = 12 * 6e4;
22506
- function inspectSessionName(issueId, beadId) {
22507
- return `inspect-${issueId.toLowerCase()}-${beadId.replace(/[^a-z0-9-]/gi, "-").toLowerCase().slice(0, 24)}`;
22510
+ function inspectSessionName(issueId, itemId) {
22511
+ return `inspect-${issueId.toLowerCase()}-${itemId.replace(/[^a-z0-9-]/gi, "-").toLowerCase().slice(0, 24)}`;
22508
22512
  }
22509
22513
  function formatInspectElapsed(elapsedMs) {
22510
22514
  return `${Math.max(0, Math.round(elapsedMs / 6e4))}m`;
@@ -22516,16 +22520,16 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
22516
22520
  for (const [rawIssueId, status] of Object.entries(statuses)) {
22517
22521
  if (status.inspectStatus !== "inspecting") continue;
22518
22522
  const issueId = rawIssueId.toUpperCase();
22519
- const beadId = status.inspectBeadId;
22523
+ const itemId = status.inspectBeadId;
22520
22524
  const startedMs = status.inspectStartedAt ? Date.parse(status.inspectStartedAt) : NaN;
22521
22525
  const hasStartedAt = Number.isFinite(startedMs);
22522
22526
  const elapsedMs = hasStartedAt ? nowMs - startedMs : Number.POSITIVE_INFINITY;
22523
22527
  const timedOut = elapsedMs > INSPECT_TIMEOUT_MS;
22524
- const sessionName = beadId ? inspectSessionName(issueId, beadId) : void 0;
22528
+ const sessionName = itemId ? inspectSessionName(issueId, itemId) : void 0;
22525
22529
  const sessionAlive = sessionName ? await Effect.runPromise(sessionExists(sessionName)).catch(() => false) : false;
22526
22530
  if (!timedOut && !(!!sessionName && !sessionAlive)) continue;
22527
22531
  const reason = !hasStartedAt ? "missing inspectStartedAt metadata" : timedOut ? `timed out after ${formatInspectElapsed(elapsedMs)} (limit ${formatInspectElapsed(INSPECT_TIMEOUT_MS)})` : `tmux session ${sessionName} exited before producing a verdict`;
22528
- const effectiveBeadId = beadId ?? "unknown";
22532
+ const effectiveBeadId = itemId ?? "unknown";
22529
22533
  const notes = `Inspection error for bead ${effectiveBeadId}: ${reason}. No verdict was produced.`;
22530
22534
  const verdict = `INSPECTION ERROR for bead ${effectiveBeadId}: inspection could not complete (${reason}) — no verdict was produced. Treat as infrastructure failure: do not silently proceed.`;
22531
22535
  setReviewStatusSync(issueId, {
@@ -22537,7 +22541,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
22537
22541
  console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
22538
22542
  });
22539
22543
  try {
22540
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
22544
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
22541
22545
  await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
22542
22546
  } catch (err) {
22543
22547
  const msg = err instanceof Error ? err.message : String(err);
@@ -22557,6 +22561,15 @@ const KNOWN_AGENT_MODALS = [{
22557
22561
  matches: (pane) => /rate limit/i.test(pane) && /keep current model/i.test(pane),
22558
22562
  keys: ["Down", "Enter"]
22559
22563
  }];
22564
+ const CLAUDE_BOOT_SCREEN_PATTERNS = [
22565
+ /Choose the text style that looks best with your terminal/i,
22566
+ /Select login method:/i,
22567
+ /Do you trust the files in this (?:folder|directory)\?/i,
22568
+ /Paste code here if prompted/i
22569
+ ];
22570
+ function paneShowsClaudeBootBlockingScreen(pane) {
22571
+ return CLAUDE_BOOT_SCREEN_PATTERNS.some((pattern) => pattern.test(pane));
22572
+ }
22560
22573
  /** Rollout JSONL is launch/turn attribution only until a captured switch proves otherwise. */
22561
22574
  const MODEL_SHAPED_TOKEN = /^(?:gpt|o\d|claude|kimi|glm|gemini|deepseek|qwen|minimax|grok)[\w.-]*$/i;
22562
22575
  function paneShowsModelSwitch(pane, launchModel) {
@@ -22680,7 +22693,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
22680
22693
  if (!agentState?.workspace || !sessionId || !agentState.model) return null;
22681
22694
  let usage = null;
22682
22695
  try {
22683
- const { computeContextUsage } = await import("./conversation-service-C_kNZPLx.js");
22696
+ const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
22684
22697
  usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
22685
22698
  } catch {
22686
22699
  return null;
@@ -22729,6 +22742,19 @@ async function checkApiErrorAgents() {
22729
22742
  if (!tmuxOutput.trim()) continue;
22730
22743
  const agentState = getAgentStateSync(sessionName);
22731
22744
  if (agentState?.harness === "codex") {
22745
+ if (paneShowsCodexAuthBurn(tmuxOutput)) {
22746
+ if (applyCodexAuthBurnFlag(agentState)) {
22747
+ saveAgentStateSync(agentState);
22748
+ emitActivityEntrySync({
22749
+ source: "cloister",
22750
+ level: "error",
22751
+ message: `${sessionName} marked troubled: Codex refresh token revoked (401 token_invalidated). Re-authenticate Codex — the dashboard banner has a Re-authenticate button, or run \`codex login\` on the host.`,
22752
+ issueId: agentState.issueId
22753
+ });
22754
+ actions.push(`Codex-auth-burned halt: ${sessionName} marked troubled — needs re-authentication`);
22755
+ }
22756
+ continue;
22757
+ }
22732
22758
  if (paneShowsModelSwitch(tmuxOutput, agentState.model)) {
22733
22759
  const reason = `needs-you: live Codex pane indicates a model switch from launch model ${agentState.model}`;
22734
22760
  setAgentPausedSync(sessionName, reason, true);
@@ -22777,13 +22803,13 @@ async function checkApiErrorAgents() {
22777
22803
  const st = getAgentStateSync(sessionName);
22778
22804
  const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
22779
22805
  if (st?.workspace && sid && st.model) {
22780
- const { computeContextUsage } = await import("./conversation-service-C_kNZPLx.js");
22806
+ const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
22781
22807
  const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
22782
22808
  if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
22783
22809
  }
22784
22810
  } catch {}
22785
22811
  if (recoveredPct !== null) {
22786
- const { clearWorkspaceStuck } = await import("./review-status-sync-D3KUhsdA.js");
22812
+ const { clearWorkspaceStuck } = await import("./review-status-sync-Bd08OOFA.js");
22787
22813
  clearWorkspaceStuck(issueId);
22788
22814
  stuckOverflowNativeRecoveryState.delete(sessionName);
22789
22815
  actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
@@ -22799,7 +22825,7 @@ async function checkApiErrorAgents() {
22799
22825
  rec.attempts += 1;
22800
22826
  rec.lastAttempt = now;
22801
22827
  stuckOverflowNativeRecoveryState.set(sessionName, rec);
22802
- const { resumeAgent } = await import("./agents-DCvyTXNU.js");
22828
+ const { resumeAgent } = await import("./agents-BA15AQqo.js");
22803
22829
  const recovered = await resumeAgent(sessionName, void 0, { compact: true });
22804
22830
  if (recovered.success) {
22805
22831
  stuckOverflowNativeRecoveryState.delete(sessionName);
@@ -22847,7 +22873,7 @@ async function checkApiErrorAgents() {
22847
22873
  }
22848
22874
  const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
22849
22875
  if (issueId !== null) {
22850
- const { resumeAgent } = await import("./agents-DCvyTXNU.js");
22876
+ const { resumeAgent } = await import("./agents-BA15AQqo.js");
22851
22877
  const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
22852
22878
  contextOverflowRecoveryState.set(sessionName, {
22853
22879
  lastAttempt: now,
@@ -23214,7 +23240,7 @@ function reviewConvoyLiveness(issueId) {
23214
23240
  */
23215
23241
  async function recoverUnhealthyTestStack(issueId, workspacePath) {
23216
23242
  const key = issueId.toUpperCase();
23217
- const { getWorkspaceStackHealth } = await import("./stack-health-Dclm7_tu.js");
23243
+ const { getWorkspaceStackHealth } = await import("./stack-health-BsEVrJZ6.js");
23218
23244
  const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
23219
23245
  if (health.healthy) {
23220
23246
  testStackRebuildState.delete(key);
@@ -23246,7 +23272,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
23246
23272
  record.attempts += 1;
23247
23273
  testStackRebuildState.set(key, record);
23248
23274
  console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
23249
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-GOsWqXi3.js");
23275
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-C7JPUom6.js");
23250
23276
  const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
23251
23277
  if (!result.success) {
23252
23278
  console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
@@ -23277,6 +23303,29 @@ function latestHistoryByType(history, type) {
23277
23303
  if (!history || history.length === 0) return void 0;
23278
23304
  for (let i = history.length - 1; i >= 0; i--) if (history[i].type === type) return history[i].status;
23279
23305
  }
23306
+ function completedReviewSnapshotAfterCoordinatorExit(status) {
23307
+ const review = latestHistoryEntry(status.history, "review", [
23308
+ "passed",
23309
+ "failed",
23310
+ "blocked"
23311
+ ]);
23312
+ if (review?.status !== "passed") return null;
23313
+ const test = latestHistoryEntry(status.history, "test", [
23314
+ "passed",
23315
+ "failed",
23316
+ "skipped"
23317
+ ]);
23318
+ return {
23319
+ reviewStatus: "passed",
23320
+ reviewNotes: review.notes,
23321
+ ...test ? {
23322
+ testStatus: test.status,
23323
+ testNotes: test.notes
23324
+ } : {},
23325
+ reviewRetryCount: 0,
23326
+ recoveryStartedAt: void 0
23327
+ };
23328
+ }
23280
23329
  async function isReviewAgentActiveForIssue(issueId) {
23281
23330
  try {
23282
23331
  const agents = await Effect.runPromise(listRunningAgents());
@@ -23351,6 +23400,20 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
23351
23400
  logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — issue closed`);
23352
23401
  return actions;
23353
23402
  }
23403
+ const completedSnapshot = completedReviewSnapshotAfterCoordinatorExit(status);
23404
+ if (completedSnapshot) {
23405
+ setReviewStatusSync(issueId, completedSnapshot);
23406
+ actions.push(`Restored completed review for ${issueId} after coordinator exit; no re-dispatch`);
23407
+ return actions;
23408
+ }
23409
+ if ((status.reviewRetryCount ?? 0) >= REVIEW_INFRA_BREAKER_THRESHOLD) {
23410
+ markWorkspaceStuck(issueId, "review_infrastructure_failure", {
23411
+ reviewRetryCount: status.reviewRetryCount ?? 0,
23412
+ recoveryStartedAt: status.recoveryStartedAt
23413
+ });
23414
+ actions.push(`Review recovery stopped for ${issueId} after ${status.reviewRetryCount} retries`);
23415
+ return actions;
23416
+ }
23354
23417
  if (status.reviewStatus !== "reviewing" && status.reviewStatus !== "pending") {
23355
23418
  logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — reviewStatus=${status.reviewStatus}`);
23356
23419
  return actions;
@@ -23374,7 +23437,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
23374
23437
  return actions;
23375
23438
  }
23376
23439
  try {
23377
- const { spawnReviewRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
23440
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23378
23441
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
23379
23442
  issueId,
23380
23443
  workspace,
@@ -23504,7 +23567,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
23504
23567
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
23505
23568
  if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
23506
23569
  else if (workspace && resolved) try {
23507
- const { spawnReviewRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
23570
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23508
23571
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
23509
23572
  issueId,
23510
23573
  workspace,
@@ -23529,8 +23592,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
23529
23592
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
23530
23593
  if (workspace && resolved) {
23531
23594
  const branch = `feature/${issueLower}`;
23532
- const { spawnRun } = await import("./agents-DCvyTXNU.js");
23533
- const { buildTestRolePrompt } = await import("./test-agent-queue-DjsQoV5X.js");
23595
+ const { spawnRun } = await import("./agents-BA15AQqo.js");
23596
+ const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
23534
23597
  const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
23535
23598
  if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
23536
23599
  setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
@@ -23668,7 +23731,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
23668
23731
  record.lastAttempt = now;
23669
23732
  record.attempts += 1;
23670
23733
  stalledReviewConvoyRecoveryState.set(key, record);
23671
- const { spawnReviewRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
23734
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23672
23735
  try {
23673
23736
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
23674
23737
  issueId,
@@ -23739,7 +23802,7 @@ async function checkMissingReviewStatuses() {
23739
23802
  continue;
23740
23803
  }
23741
23804
  try {
23742
- const { spawnReviewRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
23805
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23743
23806
  await Effect.runPromise(spawnReviewRoleForIssue({
23744
23807
  issueId,
23745
23808
  workspace,
@@ -23790,7 +23853,7 @@ async function checkStuckReviewing() {
23790
23853
  const actions = [];
23791
23854
  const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
23792
23855
  try {
23793
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Br6lAFGO.js");
23856
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
23794
23857
  const statuses = loadReviewStatuses();
23795
23858
  const now = Date.now();
23796
23859
  const activeReviewIssues = /* @__PURE__ */ new Set();
@@ -23806,7 +23869,7 @@ async function checkStuckReviewing() {
23806
23869
  if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
23807
23870
  }
23808
23871
  try {
23809
- const { listRunningAgents } = await import("./agents-DCvyTXNU.js");
23872
+ const { listRunningAgents } = await import("./agents-BA15AQqo.js");
23810
23873
  const agents = await Effect.runPromise(listRunningAgents());
23811
23874
  for (const agent of agents) {
23812
23875
  if (agent.status === "stopped" || agent.status === "error") continue;
@@ -23939,7 +24002,7 @@ async function checkCompletedButUnsignaledReviews() {
23939
24002
  }
23940
24003
  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.`;
23941
24004
  try {
23942
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
24005
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
23943
24006
  await messageAgent(reviewSession, nudge);
23944
24007
  unsignaledReviewNudges.set(latestDir, now);
23945
24008
  actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
@@ -23972,6 +24035,7 @@ init_review_status();
23972
24035
  init_persistent_logger();
23973
24036
  init_review_monitor();
23974
24037
  init_tmux();
24038
+ init_codex_auth();
23975
24039
  const REVIEWER_IDLE_FAILURE_MS = 180 * 1e3;
23976
24040
  const REVIEW_REPORTS_PRESENT_NUDGE_COOLDOWN_MS = 60 * 1e3;
23977
24041
  const reviewReportsPresentNudges = /* @__PURE__ */ new Map();
@@ -24060,7 +24124,7 @@ async function respawnIdleReviewer(state, agentId) {
24060
24124
  return false;
24061
24125
  }
24062
24126
  try {
24063
- const { spawnReviewSubRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
24127
+ const { spawnReviewSubRoleForIssue } = await import("./review-agent-CpSHLzed.js");
24064
24128
  const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
24065
24129
  const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
24066
24130
  issueId: state.issueId,
@@ -24189,7 +24253,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
24189
24253
  "Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
24190
24254
  ].join("\n");
24191
24255
  try {
24192
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
24256
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
24193
24257
  await messageAgent(state.id, message);
24194
24258
  reviewReportsPresentNudges.set(nudgeKey, now);
24195
24259
  const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
@@ -24241,7 +24305,14 @@ async function monitorReviewConvoySignals() {
24241
24305
  const runtimeIdleAgeMs = runtimeState?.state === "idle" ? Date.now() - new Date(runtimeState.lastActivity).getTime() : 0;
24242
24306
  const idleAndNoOutput = reviewerSessionAlive && !outputWrittenForThisRun && runtimeIdleAgeMs > REVIEWER_IDLE_FAILURE_MS;
24243
24307
  let contextOverflowDetected = false;
24244
- if (!outputWrittenForThisRun && runtimeState?.state === "idle") contextOverflowDetected = isContextOverflowTail(await Effect.runPromise(capturePane(agentId, 100)).catch(() => ""));
24308
+ if (!outputWrittenForThisRun && runtimeState?.state === "idle") {
24309
+ const tail = await Effect.runPromise(capturePane(agentId, 100)).catch(() => "");
24310
+ contextOverflowDetected = isContextOverflowTail(tail);
24311
+ if (paneShowsCodexAuthBurn(tail) && applyCodexAuthBurnFlag(state)) {
24312
+ saveAgentStateSync(state);
24313
+ logDeaconEventSync(`review-monitor: ${agentId} marked troubled — Codex refresh token revoked (codex-auth-burned)`);
24314
+ }
24315
+ }
24245
24316
  let signal = null;
24246
24317
  let reason = "";
24247
24318
  if (outputWrittenForThisRun) signal = "ready";
@@ -24268,7 +24339,7 @@ async function monitorReviewConvoySignals() {
24268
24339
  if (!signal) continue;
24269
24340
  const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
24270
24341
  try {
24271
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
24342
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
24272
24343
  await messageAgent(state.reviewSynthesisAgentId, message);
24273
24344
  state.reviewMonitorSignaled = signal;
24274
24345
  saveAgentStateSync(state);
@@ -24276,7 +24347,7 @@ async function monitorReviewConvoySignals() {
24276
24347
  actions.push(action);
24277
24348
  logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
24278
24349
  if (signal === "ready") try {
24279
- const { notifyPipelineSync } = await import("./pipeline-notifier-BkKbQ8ji.js");
24350
+ const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
24280
24351
  notifyPipelineSync({
24281
24352
  type: "reviewer_completed",
24282
24353
  issueId: state.issueId,
@@ -24284,7 +24355,7 @@ async function monitorReviewConvoySignals() {
24284
24355
  });
24285
24356
  } catch {}
24286
24357
  else if (signal === "timeout") try {
24287
- const { notifyPipelineSync } = await import("./pipeline-notifier-BkKbQ8ji.js");
24358
+ const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
24288
24359
  notifyPipelineSync({
24289
24360
  type: "reviewer_timed_out",
24290
24361
  issueId: state.issueId,
@@ -24384,7 +24455,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
24384
24455
  async function checkStalledReviewDiscovery() {
24385
24456
  const actions = [];
24386
24457
  try {
24387
- const { listAgentStates } = await import("./agents-DCvyTXNU.js");
24458
+ const { listAgentStates } = await import("./agents-BA15AQqo.js");
24388
24459
  const states = listAgentStates();
24389
24460
  const now = Date.now();
24390
24461
  for (const state of states) {
@@ -24393,7 +24464,7 @@ async function checkStalledReviewDiscovery() {
24393
24464
  const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
24394
24465
  const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
24395
24466
  if (!aged && !dead) continue;
24396
- const { handleReviewDiscoveryReady } = await import("./review-agent-Rub0OpZc.js");
24467
+ const { handleReviewDiscoveryReady } = await import("./review-agent-CpSHLzed.js");
24397
24468
  const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
24398
24469
  actions.push(result.message);
24399
24470
  logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
@@ -24416,8 +24487,8 @@ async function checkStalledReviewDiscovery() {
24416
24487
  async function checkStalledReviewParents() {
24417
24488
  const actions = [];
24418
24489
  try {
24419
- const { listAgentStates, markAgentStoppedState } = await import("./agents-DCvyTXNU.js");
24420
- const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-Rub0OpZc.js");
24490
+ const { listAgentStates, markAgentStoppedState } = await import("./agents-BA15AQqo.js");
24491
+ const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-CpSHLzed.js");
24421
24492
  const states = listAgentStates();
24422
24493
  const now = Date.now();
24423
24494
  for (const state of states) {
@@ -24466,8 +24537,8 @@ async function checkStalledReviewParents() {
24466
24537
  async function checkReviewForkCacheMisses() {
24467
24538
  const actions = [];
24468
24539
  try {
24469
- const { listAgentStates, saveAgentState } = await import("./agents-DCvyTXNU.js");
24470
- const { readEventsSync } = await import("./events-CtsLScn8.js");
24540
+ const { listAgentStates, saveAgentState } = await import("./agents-BA15AQqo.js");
24541
+ const { readEventsSync } = await import("./events-BYbvqZky.js");
24471
24542
  const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
24472
24543
  const states = listAgentStates();
24473
24544
  const now = Date.now();
@@ -24614,7 +24685,7 @@ async function reconcileStaleMergeStatus() {
24614
24685
  if (!project) continue;
24615
24686
  let specStatus;
24616
24687
  try {
24617
- const { findSpecByIssue } = await import("./specs-DwoAEGrW.js");
24688
+ const { findSpecByIssue } = await import("./specs-VwcFtEDi.js");
24618
24689
  const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
24619
24690
  specStatus = spec?.status;
24620
24691
  if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
@@ -24629,7 +24700,7 @@ async function reconcileStaleMergeStatus() {
24629
24700
  if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
24630
24701
  } catch {}
24631
24702
  if (!isMerged) {
24632
- const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-B9ZoVA9b.js");
24703
+ const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-DdzUiPNU.js");
24633
24704
  const ghResolved = _resolveGitHubIssue(issueId);
24634
24705
  if (ghResolved.isGitHub) try {
24635
24706
  const { stdout } = await execFileAsync$4("gh", [
@@ -24666,7 +24737,7 @@ async function reconcileStaleMergeStatus() {
24666
24737
  actions.push(msg);
24667
24738
  console.log(`[deacon] ${msg}`);
24668
24739
  try {
24669
- const { postMergeLifecycle } = await import("./merge-agent-36wfYm2u.js");
24740
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
24670
24741
  postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
24671
24742
  } catch (err) {
24672
24743
  console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
@@ -24691,7 +24762,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
24691
24762
  async function reconcileFalseMerged() {
24692
24763
  const actions = [];
24693
24764
  try {
24694
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DRD2woO0.js");
24765
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
24695
24766
  if (!isGitHubAppConfigured()) return actions;
24696
24767
  const statuses = loadReviewStatuses();
24697
24768
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -24736,7 +24807,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
24736
24807
  async function reconcileClosedPrReadyForMerge() {
24737
24808
  const actions = [];
24738
24809
  try {
24739
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DRD2woO0.js");
24810
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
24740
24811
  if (!isGitHubAppConfigured()) return actions;
24741
24812
  const statuses = loadReviewStatuses();
24742
24813
  const now = Date.now();
@@ -24808,7 +24879,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
24808
24879
  async function reconcileStaleMergeBlockers() {
24809
24880
  const actions = [];
24810
24881
  try {
24811
- const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-DGT8jCLp.js");
24882
+ const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BubJprtD.js");
24812
24883
  const statuses = loadReviewStatuses();
24813
24884
  const now = Date.now();
24814
24885
  const deps = buildRealConflictGateDeps();
@@ -24951,7 +25022,7 @@ async function checkFailedMergeRetry() {
24951
25022
  if (ciEntry.count === 5) {
24952
25023
  console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
24953
25024
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24954
- const { writeFeedbackFile } = await import("./feedback-writer-DOUhyIW2.js");
25025
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
24955
25026
  const ciFileResult = await Effect.runPromise(writeFeedbackFile({
24956
25027
  issueId,
24957
25028
  specialist: "merge-agent",
@@ -24983,7 +25054,7 @@ async function checkFailedMergeRetry() {
24983
25054
  ciRetryMap.set(issueId, ciEntry);
24984
25055
  console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
24985
25056
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24986
- const { writeFeedbackFile } = await import("./feedback-writer-DOUhyIW2.js");
25057
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
24987
25058
  const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
24988
25059
  issueId,
24989
25060
  specialist: "merge-agent",
@@ -25011,7 +25082,7 @@ async function checkFailedMergeRetry() {
25011
25082
  const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
25012
25083
  if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
25013
25084
  const timeoutNotes = status.mergeNotes;
25014
- const { writeFeedbackFile } = await import("./feedback-writer-DOUhyIW2.js");
25085
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
25015
25086
  await Effect.runPromise(writeFeedbackFile({
25016
25087
  issueId: issueIdForFb,
25017
25088
  specialist: "merge-agent",
@@ -25116,7 +25187,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
25116
25187
  } } : {}
25117
25188
  };
25118
25189
  try {
25119
- const { closeOut } = await import("./workflows-tU7KKxQi.js");
25190
+ const { closeOut } = await import("./workflows-B4C3lY9E.js");
25120
25191
  const result = await Effect.runPromise(closeOut(ctx));
25121
25192
  if (!result.success) {
25122
25193
  const failed = result.steps.find((step) => !step.success && !step.skipped);
@@ -25420,7 +25491,8 @@ init_review_status();
25420
25491
  init_control_settings();
25421
25492
  init_agents$1();
25422
25493
  init_tmux();
25423
- init_beads_query();
25494
+ init_io();
25495
+ init_dag();
25424
25496
  const orphanFailureRecordedForAutoResume = /* @__PURE__ */ new Set();
25425
25497
  const appliedBootReconciliationDecisions = /* @__PURE__ */ new Set();
25426
25498
  const emptyBootReconciliationApplyResult = () => ({
@@ -25614,7 +25686,7 @@ async function cleanupOrphanedPlanningSessions$1(deps) {
25614
25686
  * - phase === 'implementation' or 'review-response'
25615
25687
  * - tmux session exists (not orphaned)
25616
25688
  * - isAgentIdleForNudge() returns true (Stop hook authoritative)
25617
- * - bd ready -l <issueLabel> has ≥1 ready bead (work remaining)
25689
+ * - pan task next -l <issueLabel> has ≥1 ready bead (work remaining)
25618
25690
  * - last nudge older than NUDGE_COOLDOWN_MS (don't spam)
25619
25691
  *
25620
25692
  * Action: send `pan tell` with a concrete imperative pointing at the next
@@ -25657,8 +25729,8 @@ function buildStalledResumePrompt(state) {
25657
25729
  }
25658
25730
  return buildDefaultResumeContinueMessage(state.issueId);
25659
25731
  }
25660
- function readyBeadLine(bead) {
25661
- return `${bead.id} ${bead.title}`.trim();
25732
+ function readyTaskLine(item) {
25733
+ return `${item.id} ${item.title}`.trim();
25662
25734
  }
25663
25735
  async function nudgeStalledResumeWorkAgents() {
25664
25736
  const actions = [];
@@ -25680,7 +25752,7 @@ async function nudgeStalledResumeWorkAgents() {
25680
25752
  const message = buildStalledResumePrompt(state);
25681
25753
  if (!message) continue;
25682
25754
  try {
25683
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
25755
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
25684
25756
  await messageAgent(agentId, message);
25685
25757
  recordCooldown(agentId, ".last-stalled-resume-nudge");
25686
25758
  const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
@@ -25760,7 +25832,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
25760
25832
  status: "running",
25761
25833
  role: "work"
25762
25834
  });
25763
- const eligibleByQueryRoot = /* @__PURE__ */ new Map();
25835
+ const eligible = [];
25764
25836
  for (const state of states) {
25765
25837
  const agentId = state.id;
25766
25838
  if (await isIssueClosed(state.issueId)) {
@@ -25774,39 +25846,34 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
25774
25846
  const last = parseInt(readFileSync(cooldownFile, "utf-8").trim(), 10);
25775
25847
  if (!Number.isNaN(last) && Date.now() - last < BEAD_NUDGE_COOLDOWN_MS) continue;
25776
25848
  } catch {}
25777
- const queryRoot = resolveBeadsQueryRoot(state.workspace);
25778
- const workspaceStates = eligibleByQueryRoot.get(queryRoot) ?? [];
25779
- workspaceStates.push(state);
25780
- eligibleByQueryRoot.set(queryRoot, workspaceStates);
25781
- }
25782
- for (const [queryRoot, workspaceStates] of eligibleByQueryRoot) {
25783
- const issues = workspaceStates.map((state) => state.issueId);
25784
- const ready = await Effect.runPromise(queryReadyBeadsByIssueLabels(queryRoot, issues, { acquisitionTimeoutMs: 500 }));
25785
- for (const state of workspaceStates) {
25786
- const agentId = state.id;
25787
- const openBeads = ready.byIssue[state.issueId.toLowerCase()] ?? [];
25788
- if (openBeads.length === 0) continue;
25789
- const firstBead = readyBeadLine(openBeads[0]).slice(0, 200);
25790
- const briefPath = join$1(getAgentDir(agentId), "initial-prompt.md");
25791
- const message = [
25792
- `Deacon idle-nudge: your tmux is alive but Claude is idle and you have ${openBeads.length} open bead(s) remaining for ${state.issueId}.`,
25793
- ``,
25794
- `Next ready bead: ${firstBead}`,
25795
- ``,
25796
- `If you don't already have your full brief for ${state.issueId} in context (work-agent role instructions, the vBRIEF plan, recorded decisions & hazards), re-read it now — it is on disk at ${briefPath}, plus .pan/continue.json and .pan/spec.vbrief.json in your workspace. Startup kickoff delivery can silently fail on large briefs, so do not assume you received it.`,
25797
- ``,
25798
- "Continue the per-bead workflow without asking — claim it (`pan beads claim <bead-id>`), implement, commit, close through `pan beads close`. 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."
25799
- ].join("\n");
25800
- try {
25801
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
25802
- await messageAgent(agentId, message);
25803
- writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
25804
- const action = `Nudged idle ${agentId} (${state.issueId}) — ${openBeads.length} open bead(s)`;
25805
- actions.push(action);
25806
- logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
25807
- } catch (err) {
25808
- logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
25809
- }
25849
+ eligible.push(state);
25850
+ }
25851
+ for (const state of eligible) {
25852
+ const agentId = state.id;
25853
+ const plan = readWorkspacePlanSync(state.workspace);
25854
+ if (!plan) continue;
25855
+ const openTasks = getDispatchableItems(plan, /* @__PURE__ */ new Set());
25856
+ if (openTasks.length === 0) continue;
25857
+ const firstTask = readyTaskLine(openTasks[0]).slice(0, 200);
25858
+ const briefPath = join$1(getAgentDir(agentId), "initial-prompt.md");
25859
+ const message = [
25860
+ `Deacon idle-nudge: your tmux is alive but the agent is idle and you have ${openTasks.length} ready task(s) for ${state.issueId}.`,
25861
+ ``,
25862
+ `Next ready task: ${firstTask}`,
25863
+ ``,
25864
+ `If you don't already have your full brief for ${state.issueId} in context (work-agent role instructions, the vBRIEF plan, recorded decisions & hazards), re-read it now — it is on disk at ${briefPath}, plus .pan/continue.json and .pan/spec.vbrief.json in your workspace. Startup kickoff delivery can silently fail on large briefs, so do not assume you received it.`,
25865
+ ``,
25866
+ "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."
25867
+ ].join("\n");
25868
+ try {
25869
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
25870
+ await messageAgent(agentId, message);
25871
+ writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
25872
+ const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
25873
+ actions.push(action);
25874
+ logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
25875
+ } catch (err) {
25876
+ logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
25810
25877
  }
25811
25878
  }
25812
25879
  return actions;
@@ -26096,6 +26163,9 @@ async function reconcileAgentLiveness$1(deps) {
26096
26163
  }
26097
26164
  //#endregion
26098
26165
  //#region ../../lib/cloister/in-flight-guard.ts
26166
+ init_state_plane();
26167
+ init_auto_commit();
26168
+ init_record();
26099
26169
  function createInFlightGuard() {
26100
26170
  const inFlight = /* @__PURE__ */ new Set();
26101
26171
  return {
@@ -26120,7 +26190,6 @@ function createInFlightGuard() {
26120
26190
  }
26121
26191
  //#endregion
26122
26192
  //#region ../../lib/pipeline-state-paths.ts
26123
- init_state_plane();
26124
26193
  const execFileAsync$3 = promisify$1(execFile$1);
26125
26194
  const STATE_PLANE_DIFF_EXCLUDES = STATE_PLANE_PATHS.map((path) => `:(exclude)${path.replace(/\/$/, "")}`);
26126
26195
  function isPipelineStatePath(relativePath) {
@@ -26229,10 +26298,24 @@ async function gitStdout(workspacePath, args) {
26229
26298
  return String(result.stdout ?? "");
26230
26299
  }
26231
26300
  //#endregion
26232
- //#region ../../lib/cloister/state-recreation-patrol.ts
26233
- init_auto_commit();
26234
- init_record();
26301
+ //#region ../../lib/cloister/state-plane-patrol.ts
26302
+ init_record_update();
26235
26303
  init_state_home();
26304
+ async function reconcileProjectStatePlanes(projects) {
26305
+ const actions = [];
26306
+ for (const { config } of projects) {
26307
+ if (!config.path) continue;
26308
+ const write = await Effect.runPromise(reconcileStatePlaneDrift(config.path));
26309
+ if (!write.committed) continue;
26310
+ actions.push({
26311
+ message: `Reconciled pending spec/record state for ${config.name ?? config.path}`,
26312
+ level: write.pushed === false ? "warn" : "action"
26313
+ });
26314
+ }
26315
+ return actions;
26316
+ }
26317
+ //#endregion
26318
+ //#region ../../lib/cloister/state-recreation-patrol.ts
26236
26319
  async function recreatedStateWarnings(projects) {
26237
26320
  const warnings = [];
26238
26321
  for (const { config } of projects) {
@@ -26244,7 +26327,6 @@ async function recreatedStateWarnings(projects) {
26244
26327
  }
26245
26328
  //#endregion
26246
26329
  //#region ../../lib/cloister/deacon-main-divergence.ts
26247
- init_record_lock();
26248
26330
  init_projects();
26249
26331
  init_state_plane();
26250
26332
  async function recordMainDivergenceHealth(state, projects = listProjectsSync(), measure = getMainDivergence) {
@@ -26379,10 +26461,10 @@ function shouldRunRecoveryJanitor(janitor, patrolCycle) {
26379
26461
  //#endregion
26380
26462
  //#region ../../lib/cloister/dead-end-trip.ts
26381
26463
  init_projects();
26382
- function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
26464
+ async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
26383
26465
  const project = resolveProjectFromIssueSync(issueId);
26384
26466
  if (!project) return void 0;
26385
- return recordRecoveryFailure(project.projectPath, issueId, recoveryPath, generation, 1).emitNeedsYou ? message : void 0;
26467
+ return (await recordRecoveryFailure(project.projectPath, issueId, recoveryPath, generation, 1)).emitNeedsYou ? message : void 0;
26386
26468
  }
26387
26469
  //#endregion
26388
26470
  //#region ../../lib/cloister/test-status-green-ci-reconciler.ts
@@ -26903,7 +26985,7 @@ init_config();
26903
26985
  init_concurrency();
26904
26986
  init_review_status();
26905
26987
  init_record();
26906
- init_beads_query();
26988
+ init_io();
26907
26989
  init_control_settings();
26908
26990
  init_archive_planning();
26909
26991
  init_projects();
@@ -27175,8 +27257,8 @@ async function cleanupStaleAgentState() {
27175
27257
  */
27176
27258
  async function cleanupAbandonedFeedback() {
27177
27259
  const actions = [];
27178
- const { getReviewStatusSync } = await import("./review-status-Br6lAFGO.js");
27179
- const { clearFeedbackFiles } = await import("./feedback-writer-DOUhyIW2.js");
27260
+ const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27261
+ const { clearFeedbackFiles } = await import("./feedback-writer-CULeOOY4.js");
27180
27262
  for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
27181
27263
  const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
27182
27264
  if (!existsSync(panFeedbackDir)) continue;
@@ -27247,7 +27329,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
27247
27329
  if (!issueId) return null;
27248
27330
  const agentSession = `agent-${issueId.toLowerCase()}`;
27249
27331
  if (sessions.includes(agentSession)) return null;
27250
- const { getReviewStatusSync } = await import("./review-status-Br6lAFGO.js");
27332
+ const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27251
27333
  try {
27252
27334
  if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
27253
27335
  } catch {}
@@ -27326,9 +27408,9 @@ async function checkOrphanedCompletions() {
27326
27408
  const issueLower = issueId.toLowerCase();
27327
27409
  const workspacePath = findWorkspacePath(resolved.projectPath, issueLower);
27328
27410
  if (!workspacePath || !existsSync(workspacePath)) continue;
27329
- const beadResult = await Effect.runPromise(queryBeadsForIssue(workspacePath, issueId));
27330
- if (beadResult.transientFailure || beadResult.beads.length === 0) continue;
27331
- if (beadResult.beads.some((bead) => bead.status !== "closed")) continue;
27411
+ const plan = readWorkspacePlanSync(workspacePath);
27412
+ if (!plan || plan.plan.items.length === 0) continue;
27413
+ if (plan.plan.items.some((item) => !["completed", "cancelled"].includes(item.status))) continue;
27332
27414
  const { stdout } = await execAsync(`gh pr list --head feature/${issueLower} --state open --json url --jq '.[0].url'`, {
27333
27415
  encoding: "utf-8",
27334
27416
  timeout: 15e3
@@ -27339,10 +27421,12 @@ async function checkOrphanedCompletions() {
27339
27421
  reviewRequestedAt: now,
27340
27422
  prUrl
27341
27423
  });
27342
- await withIssueRecordLock(issueId, async () => {
27343
- const nextRecord = ensureIssueRecordSync(project, issueId);
27344
- nextRecord.pipeline.panDoneRecoveredAt = now;
27345
- writeIssueRecordSync(project, issueId, nextRecord);
27424
+ await updateIssueRecord(project, issueId, (nextRecord) => {
27425
+ Object.assign(nextRecord.pipeline, {
27426
+ reviewRequestedAt: now,
27427
+ prUrl,
27428
+ panDoneRecoveredAt: now
27429
+ });
27346
27430
  });
27347
27431
  const action = `checkOrphanedCompletions: recovered ${issueId} (PR open but review never dispatched)`;
27348
27432
  logDeaconEventSync(action);
@@ -27367,7 +27451,7 @@ async function checkOrphanedCompletions() {
27367
27451
  async function checkPendingTestDispatch() {
27368
27452
  const actions = [];
27369
27453
  try {
27370
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Br6lAFGO.js");
27454
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27371
27455
  const statuses = loadReviewStatuses();
27372
27456
  const now = Date.now();
27373
27457
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -27400,7 +27484,7 @@ async function checkPendingTestDispatch() {
27400
27484
  console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
27401
27485
  continue;
27402
27486
  }
27403
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
27487
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27404
27488
  const resolved = resolveProjectFromIssueSync(issueId);
27405
27489
  if (!resolved) continue;
27406
27490
  const issueLower = issueId.toLowerCase();
@@ -27415,8 +27499,8 @@ async function checkPendingTestDispatch() {
27415
27499
  logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
27416
27500
  continue;
27417
27501
  }
27418
- const { spawnRun } = await import("./agents-DCvyTXNU.js");
27419
- const { buildTestRolePrompt } = await import("./test-agent-queue-DjsQoV5X.js");
27502
+ const { spawnRun } = await import("./agents-BA15AQqo.js");
27503
+ const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
27420
27504
  try {
27421
27505
  const run = await spawnRun(issueId, "test", {
27422
27506
  workspace,
@@ -27539,7 +27623,7 @@ async function checkCompletedButUnsignaledTests() {
27539
27623
  const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
27540
27624
  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.`;
27541
27625
  try {
27542
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
27626
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
27543
27627
  await messageAgent(testSession, nudge);
27544
27628
  unsignaledTestNudges.set(testSession, now);
27545
27629
  const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
@@ -27553,7 +27637,7 @@ async function checkCompletedButUnsignaledTests() {
27553
27637
  case "nudge-write": {
27554
27638
  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.`;
27555
27639
  try {
27556
- const { messageAgent } = await import("./agents-DCvyTXNU.js");
27640
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
27557
27641
  await messageAgent(testSession, nudge);
27558
27642
  unsignaledTestNudges.set(testSession, now);
27559
27643
  const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
@@ -27576,8 +27660,8 @@ async function checkCompletedButUnsignaledTests() {
27576
27660
  async function checkVerificationReviewContradiction() {
27577
27661
  const actions = [];
27578
27662
  try {
27579
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Br6lAFGO.js");
27580
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
27663
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27664
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27581
27665
  const statuses = loadReviewStatuses();
27582
27666
  for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
27583
27667
  let reviewedAtCommit;
@@ -27626,7 +27710,7 @@ async function checkPostReviewCommits() {
27626
27710
  const actions = [];
27627
27711
  try {
27628
27712
  const statuses = loadReviewStatuses();
27629
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
27713
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27630
27714
  for (const [issueId, status] of Object.entries(statuses)) {
27631
27715
  if (status.mergeStatus === "merged") continue;
27632
27716
  if (!status.reviewedAtCommit) continue;
@@ -27681,7 +27765,7 @@ async function checkPostReviewCommits() {
27681
27765
  actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
27682
27766
  logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
27683
27767
  } else if (freshStatus?.reviewStatus === "pending") {
27684
- const { spawnReviewRoleForIssue } = await import("./review-agent-Rub0OpZc.js");
27768
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
27685
27769
  const branch = `feature/${issueId.toLowerCase()}`;
27686
27770
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
27687
27771
  issueId,
@@ -27781,7 +27865,7 @@ async function checkReadyForMergeStuck() {
27781
27865
  const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
27782
27866
  const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
27783
27867
  async function reconcileTestStatusFromGreenCi() {
27784
- const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-DRD2woO0.js");
27868
+ const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
27785
27869
  return reconcileTestStatusFromGreenCiWithDeps({
27786
27870
  isGitHubAppConfigured,
27787
27871
  loadReviewStatuses,
@@ -27802,7 +27886,7 @@ async function reconcileTestStatusFromGreenCi() {
27802
27886
  */
27803
27887
  async function clearStaleCiFeedback(issueId) {
27804
27888
  const { readdir, rm } = await import("fs/promises");
27805
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
27889
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27806
27890
  const projectConfig = resolveProjectFromIssueSync(issueId);
27807
27891
  if (!projectConfig) return;
27808
27892
  const repoDir = projectConfig.projectPath;
@@ -27858,7 +27942,7 @@ async function checkDeadEndAgents() {
27858
27942
  const autoRequeueCount = status.autoRequeueCount || 0;
27859
27943
  if (autoRequeueCount >= 25) {
27860
27944
  console.log(`[deacon] Dead-end detected for ${key} but circuit breaker active (${autoRequeueCount}/25 requeues used)`);
27861
- const trip = recordDeadEndNeedsYou(key, "dead-end-rebuild", status.updatedAt ?? "rework", `Dead-end recovery needs-you: ${key} exhausted 25 requeues`);
27945
+ const trip = await recordDeadEndNeedsYou(key, "dead-end-rebuild", status.updatedAt ?? "rework", `Dead-end recovery needs-you: ${key} exhausted 25 requeues`);
27862
27946
  if (trip) actions.push(trip);
27863
27947
  continue;
27864
27948
  }
@@ -27879,7 +27963,7 @@ async function checkDeadEndAgents() {
27879
27963
  const gateDecision = decideAgentAutonomousRedrive(agentState ?? {}, getAgentDir(agentSessionName), true);
27880
27964
  if (gateDecision.decision === "defer") {
27881
27965
  console.log(`[deacon] PAN-2209: ${issueId} (${statusType}) re-drive deferred — ${gateDecision.reason}`);
27882
- const trip = gateDecision.needsYou && recordDeadEndNeedsYou(issueId, "operator-stopped-rework", status.updatedAt ?? statusType, `Dead-end recovery needs-you: ${issueId} was explicitly stopped before handoff`);
27966
+ const trip = gateDecision.needsYou && await recordDeadEndNeedsYou(issueId, "operator-stopped-rework", status.updatedAt ?? statusType, `Dead-end recovery needs-you: ${issueId} was explicitly stopped before handoff`);
27883
27967
  if (trip) actions.push(trip);
27884
27968
  } else {
27885
27969
  if (gateDecision.gateDecision.clearStoppedByUser && agentState) {
@@ -28102,7 +28186,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
28102
28186
  }
28103
28187
  }
28104
28188
  try {
28105
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
28189
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28106
28190
  const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
28107
28191
  if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
28108
28192
  } catch {}
@@ -28151,8 +28235,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
28151
28235
  async function checkMergedWorkSessions() {
28152
28236
  const actions = [];
28153
28237
  try {
28154
- const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-D_xvy-Mk.js");
28155
- const { setAgentPaused } = await import("./agents-DCvyTXNU.js");
28238
+ const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
28239
+ const { setAgentPaused } = await import("./agents-BA15AQqo.js");
28156
28240
  const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
28157
28241
  for (const session of toKill) try {
28158
28242
  await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
@@ -28192,7 +28276,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
28192
28276
  async function checkAwaitingTestWorkSessions() {
28193
28277
  const actions = [];
28194
28278
  try {
28195
- const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-D_xvy-Mk.js");
28279
+ const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
28196
28280
  const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
28197
28281
  const now = Date.now();
28198
28282
  for (const session of candidates) {
@@ -28245,10 +28329,14 @@ async function runPatrol() {
28245
28329
  hasLoggedGlobalPauseSkip = false;
28246
28330
  addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
28247
28331
  console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
28332
+ for (const a of await (await import("./stale-task-claims-vTxmRzLi.js")).patrolStaleTaskClaims()) {
28333
+ actions.push(a);
28334
+ addLog("action", a, state.patrolCycle);
28335
+ }
28248
28336
  const stuckRemediationActions = await checkStuckAgentRemediation();
28249
28337
  actions.push(...stuckRemediationActions);
28250
28338
  for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
28251
- const { reconcileInFlightJournals } = await import("./advancing-selfheal-CSuZ31bB.js");
28339
+ const { reconcileInFlightJournals } = await import("./advancing-selfheal-DgwQgm4D.js");
28252
28340
  const reconciledJournalActions = await reconcileInFlightJournals();
28253
28341
  actions.push(...reconciledJournalActions);
28254
28342
  for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
@@ -28260,7 +28348,7 @@ async function runPatrol() {
28260
28348
  const age = Date.now() - (pending.timestamp ?? 0);
28261
28349
  if (age < 3600 * 1e3) {
28262
28350
  console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
28263
- const { postMergeLifecycle } = await import("./merge-agent-36wfYm2u.js");
28351
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
28264
28352
  const { unlinkSync } = await import("fs");
28265
28353
  unlinkSync(pendingFile);
28266
28354
  await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
@@ -28305,7 +28393,7 @@ async function runPatrol() {
28305
28393
  actions.push(...suspendActions);
28306
28394
  for (const a of suspendActions) addLog("action", a, state.patrolCycle);
28307
28395
  try {
28308
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
28396
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28309
28397
  const allStatuses = loadReviewStatuses();
28310
28398
  for (const [issueId, status] of Object.entries(allStatuses)) {
28311
28399
  if (!status.readyForMerge || status.mergeStatus === "merged") continue;
@@ -28325,7 +28413,7 @@ async function runPatrol() {
28325
28413
  } catch (err) {
28326
28414
  console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
28327
28415
  }
28328
- const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-CSuZ31bB.js");
28416
+ const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DgwQgm4D.js");
28329
28417
  const reapedWorkActions = await checkMergedWorkSessions();
28330
28418
  actions.push(...reapedWorkActions);
28331
28419
  for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
@@ -28333,7 +28421,7 @@ async function runPatrol() {
28333
28421
  actions.push(...reapedMergedAdvancingActions);
28334
28422
  for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
28335
28423
  try {
28336
- const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-BgkiSQmx.js");
28424
+ const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
28337
28425
  const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
28338
28426
  actions.push(...remoteCredentialActions);
28339
28427
  for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -28341,7 +28429,7 @@ async function runPatrol() {
28341
28429
  addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
28342
28430
  }
28343
28431
  try {
28344
- const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DlvbzO7m.js");
28432
+ const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DYY5fFpd.js");
28345
28433
  const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
28346
28434
  actions.push(...heartbeatActions);
28347
28435
  for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -28349,7 +28437,7 @@ async function runPatrol() {
28349
28437
  addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
28350
28438
  }
28351
28439
  try {
28352
- const { reapCompletedRemoteAgents } = await import("./remote-completion-BgkiSQmx.js");
28440
+ const { reapCompletedRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
28353
28441
  const remoteReap = await reapCompletedRemoteAgents();
28354
28442
  for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
28355
28443
  const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
@@ -28484,7 +28572,10 @@ async function runPatrol() {
28484
28572
  for (const a of playwrightActions) addLog("action", a, state.patrolCycle);
28485
28573
  }
28486
28574
  const projectConfigs = listProjectsSync();
28487
- for (const { config: projectConfig } of projectConfigs) if (projectConfig.path) queueBeadsAutoCommit(projectConfig.path);
28575
+ for (const result of await reconcileProjectStatePlanes(projectConfigs)) {
28576
+ actions.push(result.message);
28577
+ addLog(result.level, result.message, state.patrolCycle);
28578
+ }
28488
28579
  for (const warning of await recreatedStateWarnings(projectConfigs)) addLog("error", warning, state.patrolCycle);
28489
28580
  const divergenceWarnings = await recordMainDivergenceHealth(state, projectConfigs);
28490
28581
  for (const warning of divergenceWarnings) addLog("warn", warning, state.patrolCycle);
@@ -28527,7 +28618,7 @@ async function runPatrol() {
28527
28618
  const issueId = runtimeState.currentIssue;
28528
28619
  try {
28529
28620
  if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
28530
- const { resolveProjectFromIssueSync } = await import("./projects-KJ94e50I.js");
28621
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28531
28622
  const resolved = resolveProjectFromIssueSync(issueId);
28532
28623
  if (resolved) {
28533
28624
  const branch = `feature/${issueId.toLowerCase()}`;
@@ -28541,7 +28632,7 @@ async function runPatrol() {
28541
28632
  mergeStatus: "merged",
28542
28633
  readyForMerge: false
28543
28634
  });
28544
- const { postMergeLifecycle } = await import("./merge-agent-36wfYm2u.js");
28635
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
28545
28636
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
28546
28637
  actions.push(`Auto-completed stale merge for ${issueId}`);
28547
28638
  } else {
@@ -28721,7 +28812,7 @@ function startDeacon() {
28721
28812
  logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
28722
28813
  (async () => {
28723
28814
  await reconcileAgentLiveness();
28724
- const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-CSuZ31bB.js");
28815
+ const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DgwQgm4D.js");
28725
28816
  await runBootAdvancingSelfHeal();
28726
28817
  runScheduledPatrol("startup");
28727
28818
  })().catch((err) => {
@@ -28791,6 +28882,6 @@ function assessDeaconPatrolFreshness(params) {
28791
28882
  };
28792
28883
  }
28793
28884
  //#endregion
28794
- export { isPreKickoffLaunchDeath as $, reconcileAgentLiveness as A, stalledReviewConvoyRecoveryState as At, applyIssueBlocksMainLabel as B, getContainerHistory as Bt, getLastPatrolResult as C, isSynthesisForActiveReviewRun as Ct, isDeaconRunning as D, handleWorkCompleted as Dt, handleAgentStoppedForOrphanReviewerSessions as E, handleReviewCoordinatorDied as Et, setAgentStatusChangedNotifier as F, INSPECT_TIMEOUT_MS as Ft, applyIssueVetoedLabel as G, startSmeeProcessSync as Gt, applyIssueParkedLabel as H, getResourceConfig as Ht, setAgentStoppedNotifier as I, checkInspectAgentTimeouts as It, removeIssueParkedLabel as J, removeIssueBlocksMainLabel as K, setMergeReadyNotifier as L, classifyMemoryPressure as Lt, resetPatrolHeartbeatForStartup as M, contextOverflowRecoveryState as Mt, runPatrol as N, contextProactiveCompactState as Nt, loadConfig as O, recoverStalledReviewConvoys as Ot, saveState as P, stuckOverflowNativeRecoveryState as Pt, createInFlightGuard as Q, startDeacon as R, getResourceStacks as Rt, getDeaconStatus as S, checkStuckReviewing as St, handleAgentStoppedEvent as T, checkOrphanedReviewStatuses as Tt, applyIssueReadyLabel as U, getSystemHealthSnapshot as Ut, applyIssueObjectionLabel as V, getCurrentDockerStats as Vt, applyIssueReleasedLabel as W, isSmeeConfiguredSync as Wt, removeIssueReleasedLabel as X, removeIssueReadyLabel as Y, removeIssueVetoedLabel as Z, cleanupOrphanReviewerSessions as _, withConcurrencyLimit as _t, checkCompletedButUnsignaledTests as a, listBootReconciliationCandidates as at, containerRestartBackoffMs as b, synthesizeReviewFromReports as bt, checkMergedWorkSessions as c, checkFailedMergeRetry as ct, checkPostReviewCommits as d, reconcileClosedPrReadyForMerge as dt, isRapidPostResumeDeath as et, checkReadyForMergeStuck as f, reconcileFalseMerged as ft, cleanupAbandonedFeedback as g, reconcileStuckReadyForMerge as gt, checkWorkspaceContainerHealth as h, reconcileStaleMergeStatus as ht, checkAwaitingTestWorkSessions as i, isBootReconciliationCandidate as it, reconcileTestStatusFromGreenCi as j, checkApiErrorAgents as jt, loadState as k, reviewConvoyLiveness as kt, checkOrphanedCompletions as l, checkFirstCompletionAgents as lt, checkVerificationReviewContradiction as m, reconcileStaleMergeBlockers as mt, assessDeaconPatrolFreshness as n, nudgeStalledResumeWorkAgents as nt, checkDeadEndAgents as o, startBootReconciliation as ot, checkStuckWorkAgents as p, reconcileMergedButReviewing as pt, removeIssueObjectionLabel as q, checkAndSuspendIdleAgents as r, redeliverUndeliveredKickoffs as rt, checkMassDeath as s, autoCloseOut as st, applyBootReconciliationDecision as t, nudgeIdleWorkAgentsWithOpenBeads as tt, checkPendingTestDispatch as u, ciRetryMap as ut, cleanupOrphanedPlanningSessions as v, cleanupOrphanedReviewSessions as vt, handleAgentHeartbeatDeadEvent as w, checkMissingReviewStatuses as wt, getDeaconLogs as x, checkCompletedButUnsignaledReviews as xt, cleanupStaleAgentState as y, monitorReviewConvoySignals as yt, stopDeacon as z, formatUptime as zt };
28885
+ export { isPreKickoffLaunchDeath as $, reconcileAgentLiveness as A, stalledReviewConvoyRecoveryState as At, applyIssueBlocksMainLabel as B, formatUptime as Bt, getLastPatrolResult as C, isSynthesisForActiveReviewRun as Ct, isDeaconRunning as D, handleWorkCompleted as Dt, handleAgentStoppedForOrphanReviewerSessions as E, handleReviewCoordinatorDied as Et, setAgentStatusChangedNotifier as F, paneShowsClaudeBootBlockingScreen as Ft, applyIssueVetoedLabel as G, isSmeeConfiguredSync as Gt, applyIssueParkedLabel as H, getCurrentDockerStats as Ht, setAgentStoppedNotifier as I, INSPECT_TIMEOUT_MS as It, removeIssueParkedLabel as J, removeIssueBlocksMainLabel as K, startSmeeProcessSync as Kt, setMergeReadyNotifier as L, checkInspectAgentTimeouts as Lt, resetPatrolHeartbeatForStartup as M, contextOverflowRecoveryState as Mt, runPatrol as N, contextProactiveCompactState as Nt, loadConfig as O, recoverStalledReviewConvoys as Ot, saveState as P, stuckOverflowNativeRecoveryState as Pt, createInFlightGuard as Q, startDeacon as R, classifyMemoryPressure as Rt, getDeaconStatus as S, checkStuckReviewing as St, handleAgentStoppedEvent as T, checkOrphanedReviewStatuses as Tt, applyIssueReadyLabel as U, getResourceConfig as Ut, applyIssueObjectionLabel as V, getContainerHistory as Vt, applyIssueReleasedLabel as W, getSystemHealthSnapshot as Wt, removeIssueReleasedLabel as X, removeIssueReadyLabel as Y, removeIssueVetoedLabel as Z, cleanupOrphanReviewerSessions as _, withConcurrencyLimit as _t, checkCompletedButUnsignaledTests as a, listBootReconciliationCandidates as at, containerRestartBackoffMs as b, synthesizeReviewFromReports as bt, checkMergedWorkSessions as c, checkFailedMergeRetry as ct, checkPostReviewCommits as d, reconcileClosedPrReadyForMerge as dt, isRapidPostResumeDeath as et, checkReadyForMergeStuck as f, reconcileFalseMerged as ft, cleanupAbandonedFeedback as g, reconcileStuckReadyForMerge as gt, checkWorkspaceContainerHealth as h, reconcileStaleMergeStatus as ht, checkAwaitingTestWorkSessions as i, isBootReconciliationCandidate as it, reconcileTestStatusFromGreenCi as j, checkApiErrorAgents as jt, loadState as k, reviewConvoyLiveness as kt, checkOrphanedCompletions as l, checkFirstCompletionAgents as lt, checkVerificationReviewContradiction as m, reconcileStaleMergeBlockers as mt, assessDeaconPatrolFreshness as n, nudgeStalledResumeWorkAgents as nt, checkDeadEndAgents as o, startBootReconciliation as ot, checkStuckWorkAgents as p, reconcileMergedButReviewing as pt, removeIssueObjectionLabel as q, checkAndSuspendIdleAgents as r, redeliverUndeliveredKickoffs as rt, checkMassDeath as s, autoCloseOut as st, applyBootReconciliationDecision as t, nudgeIdleWorkAgentsWithOpenBeads as tt, checkPendingTestDispatch as u, ciRetryMap as ut, cleanupOrphanedPlanningSessions as v, cleanupOrphanedReviewSessions as vt, handleAgentHeartbeatDeadEvent as w, checkMissingReviewStatuses as wt, getDeaconLogs as x, checkCompletedButUnsignaledReviews as xt, cleanupStaleAgentState as y, monitorReviewConvoySignals as yt, stopDeacon as z, getResourceStacks as zt };
28795
28886
 
28796
- //# sourceMappingURL=deacon-DrKDBeJL.js.map
28887
+ //# sourceMappingURL=deacon-Dru5onpk.js.map