@overdeck/desktop 0.45.16 → 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 (365) 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-DJYAvGv-.js → advancing-selfheal-DgwQgm4D.js} +6 -6
  8. package/server/{agent-gc-D0wDIeV1.js → agent-gc-kpzxqT7P.js} +3 -3
  9. package/server/agent-state-C_6TG-Ad.js +3 -0
  10. package/server/{agent-state-service-CZrayD_G.js → agent-state-service-BUfovFfB.js} +1 -1
  11. package/server/{agent-state-service-DFslS5go.js → agent-state-service-nUD3qfob.js} +5 -5
  12. package/server/agents-BA15AQqo.js +3 -0
  13. package/server/{briefing-freshness-DESTCWo-.js → agents-BHBxr8c9.js} +5 -131
  14. package/server/{archive-planning-CbghE9-o.js → archive-planning-CzCW9Ifl.js} +5 -10
  15. package/server/{archive-planning-CoyIbgGK.js → archive-planning-D-QsBufn.js} +1 -1
  16. package/server/{artifact-index-jobs-CcSrUoSE.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
  17. package/server/{backlog-auto-trigger-BfgDsII0.js → backlog-auto-trigger-B7Bi0bvY.js} +2 -2
  18. package/server/{behavior-BTpYbAv4.js → behavior-CWqNMqE5.js} +2 -2
  19. package/server/briefing-freshness-DuxIE1yr.js +131 -0
  20. package/server/{checkpoint-manager-BwFdegJF.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
  21. package/server/{checkpoint-manager-DWSXooZV.js → checkpoint-manager-DixkLus7.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-fjadfOKF.js → checkpoints-B1Z42tJE.js} +1 -1
  24. package/server/{checkpoints-BtUonbs3.js → checkpoints-BiviJqei.js} +2 -2
  25. package/server/{claude-hooks-provision-DiK62u0k.js → claude-hooks-provision-BeMGi4ty.js} +1 -1
  26. package/server/{claude-hooks-provision-DAtxutOs.js → claude-hooks-provision-Du_PkMsp.js} +2 -2
  27. package/server/{claude-permissions-CThLgf8d.js → claude-permissions-BB6agcOZ.js} +2 -2
  28. package/server/{claude-settings-overlay-BF9MPIwx.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
  29. package/server/{claude-settings-overlay-Dx_Uqcmv.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
  30. package/server/cli-BFgrSWKV.js +3 -0
  31. package/server/{cli-ByKIIMfT.js → cli-C33xPZNm.js} +9 -9
  32. package/server/{cliproxy-C_GuT5DU.js → cliproxy-BQX1TL6N.js} +1 -1
  33. package/server/{cliproxy-B4c1BUvs.js → cliproxy-CGBA1GzA.js} +2 -2
  34. package/server/{close-issue-BOuLKr6e.js → close-issue-DNv8npc1.js} +5 -5
  35. package/server/{closed-issue-reaper-CksfuiFD.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
  36. package/server/{closed-issue-reaper-DCAYzNXW.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
  37. package/server/codex-DxLivxri.js +3 -0
  38. package/server/{codex-parser-mFYZh8vR.js → codex-parser-DboQnEXN.js} +2 -2
  39. package/server/{codex-BbqIRZjd.js → codex-sgWVCGUd.js} +43 -18
  40. package/server/{config-Dj6N8EP9.js → config-6MCHOZ2N.js} +1 -1
  41. package/server/{config-DVLdmnMJ.js → config-DfaUXr6r.js} +2 -2
  42. package/server/{config-yaml-cNOZcEww.js → config-yaml-CqaAyn8y.js} +74 -74
  43. package/server/{conflict-gate-BMKm_5DV.js → conflict-gate-BF_zhcmb.js} +3 -3
  44. package/server/{conflict-gate-CuXUv-bP.js → conflict-gate-BubJprtD.js} +1 -1
  45. package/server/{context-layers-c0JqYHcS.js → context-layers-BFrxfl0l.js} +17 -3
  46. package/server/{context-layers-CeAwSYNt.js → context-layers-DWL_8HhY.js} +2 -2
  47. package/server/{control-settings-D4EFsRBd.js → control-settings-BguNQ1F_.js} +4 -4
  48. package/server/{conversation-compaction-kHVfVRg3.js → conversation-compaction-CRKAf2qP.js} +1 -1
  49. package/server/{conversation-compaction-BCggyih4.js → conversation-compaction-DxSXl0pT.js} +8 -8
  50. package/server/{conversation-service-BTzObqGi.js → conversation-service-DzuY9qoH.js} +1 -1
  51. package/server/{conversation-service-B8LFQQm1.js → conversation-service-mFVFdDQK.js} +6 -6
  52. package/server/{conversations-B-lcHv-5.js → conversations-BX5aD-6F.js} +4 -4
  53. package/server/{conversations-BM7zlXjr.js → conversations-BajHQ60c.js} +1 -1
  54. package/server/{cost-D9kPIY_5.js → cost-BoqD1Pxz.js} +2 -2
  55. package/server/{cost-BcpRQ-7o.js → cost-DuZ5vlv-.js} +3 -3
  56. package/server/{cost-sync-DF6odxK9.js → cost-sync-BYnmnMkY.js} +3 -3
  57. package/server/{dag-DKI3sOmX.js → dag-C6kYyF17.js} +7 -243
  58. package/server/{dangerous-git-ops-Bn18PEcN.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
  59. package/server/dashboard-db-worker.js +6 -6
  60. package/server/{deacon-DONuopff.js → deacon-CwCiNuEZ.js} +3 -3
  61. package/server/{deacon-DdARMjZq.js → deacon-Dru5onpk.js} +233 -162
  62. package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
  63. package/server/{deacon-swarm-BNGkmYR_.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-C-34Sxyz.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
  67. package/server/{dist-BMXvKiZP.js → dist-BwlEiLCU.js} +1 -1
  68. package/server/dist-Bx4KkgYL.js +3 -0
  69. package/server/{dist-src-BgGUblXg.js → dist-src-BE0Denfs.js} +1 -1
  70. package/server/{docker-apZ9pBYw.js → docker-CNjXS72x.js} +2 -2
  71. package/server/{ensure-devcontainer-Bqi1EF1P.js → ensure-devcontainer-5e9xOve4.js} +4 -4
  72. package/server/{ensure-devcontainer-Dq3KoOIl.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
  73. package/server/{esm-shims-BEjvINX3.js → esm-shims-Cso7IGBC.js} +1 -1
  74. package/server/{event-store-CqDgfbAs.js → event-store-D9UhQyMS.js} +1 -1
  75. package/server/{event-store-D89fMfXS.js → event-store-KZnWUKWh.js} +3 -3
  76. package/server/{events-S_C0pvl6.js → events-2eFUPdqz.js} +3 -3
  77. package/server/{events-rIGncmP1.js → events-BYbvqZky.js} +1 -1
  78. package/server/{factory-DV18m0rc.js → factory-BtaRsHFC.js} +20 -17
  79. package/server/{feature-registry-population-CqZSnqQi.js → feature-registry-population-Ca2UaV0U.js} +4 -4
  80. package/server/{feature-registry-storage-BeXmNBwK.js → feature-registry-storage-DaP-bQxO.js} +2 -2
  81. package/server/{features-u5XeMaOK.js → features-DqvaoQoa.js} +2 -2
  82. package/server/{feedback-target-CwyWf0Dg.js → feedback-target-BXWdOiYI.js} +9 -7
  83. package/server/{feedback-target-DDG1PWl3.js → feedback-target-BblmMe9P.js} +1 -1
  84. package/server/{feedback-writer-BsJiw5aT.js → feedback-writer-CULeOOY4.js} +1 -1
  85. package/server/{feedback-writer-D20HSXre.js → feedback-writer-Dn8o9ZyE.js} +4 -4
  86. package/server/{flywheel-RCnHAgc4.js → flywheel-BUWdcfhq.js} +1 -1
  87. package/server/{flywheel-Dczmgchd.js → flywheel-CqkO3cDj.js} +15 -28
  88. package/server/{flywheel-9Y1X7IM-.js → flywheel-D9r1mw2U.js} +13 -13
  89. package/server/{flywheel-merge-order-DEtEd3aK.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
  90. package/server/{flywheel-merge-order-CtCYsFJP.js → flywheel-merge-order-VtjUweEb.js} +6 -6
  91. package/server/forge-DJy3Zx4s.js +2 -0
  92. package/server/{forge-DFDThFil.js → forge-wEollMCi.js} +22 -12
  93. package/server/{from-NSJypkI8.js → from-B2tOYhYV.js} +1 -1
  94. package/server/{fts-db-C5A_TTOM.js → fts-db-Bgzn2RO7.js} +2 -2
  95. package/server/{fts-operations-DvCSimfU.js → fts-operations-Bj8yutnR.js} +2 -2
  96. package/server/{git-utils-Dr0L7mFk.js → git-utils-GxlL0tmt.js} +2 -2
  97. package/server/{git-utils-C0neHvQx.js → git-utils-q8jNoBts.js} +1 -1
  98. package/server/{github-app-Bwt9lK4A.js → github-app-BrYwK_Gb.js} +1 -1
  99. package/server/{github-app-u9-SX7Gc.js → github-app-tUbb8Ldr.js} +8 -3
  100. package/server/{github-client-Btyy3uan.js → github-client-BwBU41jK.js} +3 -3
  101. package/server/{github-client-Do3k-N1W.js → github-client-D6CNsftm.js} +1 -1
  102. package/server/{github-pr-lookup-DOF1U2WW.js → github-pr-lookup-BS5PqkJb.js} +2 -2
  103. package/server/{harness-resolve-C6g2R0Cd.js → harness-resolve-Dx8hUsvC.js} +3 -3
  104. package/server/{health-events-B4u-2a9m.js → health-events-2DLp-5Xp.js} +2 -2
  105. package/server/{health-events-Bos3sk5g.js → health-events-B0mj6Iae.js} +1 -1
  106. package/server/{hooks-uEr8WTx_.js → hooks-BDcQJDUe.js} +1 -1
  107. package/server/{hooks-BCoOjL_R.js → hooks-BS_JrvYP.js} +3 -3
  108. package/server/hume-B4seN95Y.js +3 -0
  109. package/server/{hume-BqxYKbUf.js → hume-BRhNKyXQ.js} +2 -2
  110. package/server/{idle-stack-reaper-DbZ8ukMd.js → idle-stack-reaper-BCITXNW5.js} +2 -2
  111. package/server/{idle-stack-reaper-H0W6XtHh.js → idle-stack-reaper-C1ymihno.js} +1 -1
  112. package/server/{infra-Ba9mS6e6.js → infra-_Kx1m9pm.js} +9 -4
  113. package/server/{injection-C1DKXeIZ.js → injection-Bvhyg_MV.js} +1 -1
  114. package/server/{injection-yrMBxzVq.js → injection-CCaYkofq.js} +7 -7
  115. package/server/{inspect-agent-B-mnb4uh.js → inspect-agent-BqyZ4pCo.js} +35 -67
  116. package/server/inspect-agent-DCJQm9Wu.js +2 -0
  117. package/server/{internal-token-BtqSbKTx.js → internal-token-Cl-1IxaE.js} +2 -2
  118. package/server/{internal-token-BPYEaXFh.js → internal-token-D-t28de5.js} +1 -1
  119. package/server/{io-VEGSAqsd.js → io-DkC4sFSy.js} +36 -43
  120. package/server/{issue-closed-BxcePXL-.js → issue-closed-Cpl4VDUM.js} +41 -6
  121. package/server/{issue-lifecycle--8MRxrG1.js → issue-lifecycle-CFR8TJ22.js} +22 -37
  122. package/server/{issue-lifecycle-CdMUauyb.js → issue-lifecycle-YNTy3OT3.js} +1 -1
  123. package/server/{issue-service-singleton-MZsDhAob.js → issue-service-singleton-D81mCts_.js} +1 -1
  124. package/server/{issue-service-singleton-CkTUI-eu.js → issue-service-singleton-ldvUUXi3.js} +29 -29
  125. package/server/{issues-CBAsuoAO.js → issues-DIEHt9sq.js} +2 -2
  126. package/server/{jsonl-parser-BUW5_sSK.js → jsonl-parser-Cd5jIqh7.js} +3 -3
  127. package/server/{label-cleanup-htK6fBRU.js → label-cleanup-Btny6Gyo.js} +3 -3
  128. package/server/{state-home-CEvD_v5F.js → launcher-generator-BXLM9f4b.js} +7 -127
  129. package/server/{layers-jjL16At6.js → layers-gCJlK62m.js} +2 -2
  130. package/server/lifecycle-D7aQUnTO.js +12 -0
  131. package/server/{lifecycle-io-DXv8Utct.js → lifecycle-io-DQBF-GHO.js} +1 -1
  132. package/server/{lifecycle-io-IehcRt2v.js → lifecycle-io-FfPUtz-y.js} +4 -4
  133. package/server/{linear-client-D9cSQfvD.js → linear-client-CDH2D6Qy.js} +3 -3
  134. package/server/{linear-client-By7hjwuN.js → linear-client-WrYrUIAH.js} +1 -1
  135. package/server/memory-fts-worker.js +1 -1
  136. package/server/{merge-BN8FGJ2q.js → merge-BsDgUxFz.js} +3 -3
  137. package/server/{merge-BLcEZNXz.js → merge-Dervs4BF.js} +1 -1
  138. package/server/{merge-agent-B3u2szOL.js → merge-agent-D6DNhe9j.js} +64 -51
  139. package/server/{merge-agent-ejC7Wos8.js → merge-agent-DMQTJMP0.js} +1 -1
  140. package/server/{merge-batch-DyqlgYGp.js → merge-batch-Bv6Z5K2H.js} +1 -1
  141. package/server/{merge-blockers-cq-aS2KG.js → merge-blockers-WWWi6Ur2.js} +2 -2
  142. package/server/merge-ops-h9OCnIVz.js +2 -0
  143. package/server/{merge-rebase-Dl7yIxtV.js → merge-rebase-Czth9ggm.js} +2 -2
  144. package/server/{merge-set-CZ9Nbay0.js → merge-set-DNc4zBqd.js} +3 -3
  145. package/server/{merge-set-Dy0D0r3i.js → merge-set-vuE3MEVt.js} +1 -1
  146. package/server/{merge-sync-D7jWLgCC.js → merge-sync-B2KSk54U.js} +2 -2
  147. package/server/{merge-sync-CG9kDCdT.js → merge-sync-B9nHdUGx.js} +1 -1
  148. package/server/{merge-train-CH33XJOH.js → merge-train-DJgr81tF.js} +3 -3
  149. package/server/{merge-train-deps-JoVdGnOg.js → merge-train-deps-B2OWS0k9.js} +4 -4
  150. package/server/{merge-verification-D4wTChdX.js → merge-verification-BBIXUEqa.js} +4 -4
  151. package/server/{multipart-parser-Csn8U-K9.js → multipart-parser-9DhuAkPd.js} +2 -2
  152. package/server/node_modules/.package-lock.json +11 -11
  153. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  154. package/server/node_modules/toml/README.md +54 -0
  155. package/server/node_modules/toml/index.d.ts +42 -1
  156. package/server/node_modules/toml/index.js +3 -3
  157. package/server/node_modules/toml/lib/compiler.js +35 -3
  158. package/server/node_modules/toml/lib/parser.js +224 -143
  159. package/server/node_modules/toml/package.json +3 -1
  160. package/server/node_modules/ws/lib/receiver.js +15 -32
  161. package/server/node_modules/ws/lib/websocket-server.js +4 -4
  162. package/server/node_modules/ws/lib/websocket.js +4 -4
  163. package/server/node_modules/ws/package.json +5 -1
  164. package/server/{orphan-proposed-reconciler-DI_IS1p_.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
  165. package/server/{orphan-proposed-reconciler-BIcNu4tl.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
  166. package/server/package-lock.json +12 -12
  167. package/server/package.json +1 -1
  168. package/server/{pan-dir-CQIfKG8c.js → pan-dir-BTw4MdSe.js} +4 -4
  169. package/server/{paths-Blj6A9AJ.js → paths-Btkc8mzp.js} +2 -2
  170. package/server/{pipeline-notifier-BH4PAi-w.js → pipeline-notifier-3frIvSi3.js} +1 -1
  171. package/server/{pipeline-notifier-D_WYtEwl.js → pipeline-notifier-DTd19f18.js} +2 -2
  172. package/server/{project-pipelines-jMTitpeO.js → project-pipelines-B95fcAek.js} +2 -2
  173. package/server/projects-Dc9aoVoG.js +3 -0
  174. package/server/{prompts-B3njaImU.js → prompts-CIVmjHxn.js} +2 -2
  175. package/server/{providers-DnPxkHoG.js → providers-BLLk5IIb.js} +1 -1
  176. package/server/{providers-BbEyFhPX.js → providers-C-yWibCk.js} +7 -7
  177. package/server/public/assets/{chunk-BO2N2NFS-3qh9TUJi.js → chunk-BO2N2NFS-DzKZyoKY.js} +4 -4
  178. package/server/public/assets/{diagram-OG6HWLK6-D8UVTPj7.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
  179. package/server/public/assets/{dist-BvLLn1YC.js → dist-BqccLhaw.js} +3 -3
  180. package/server/public/assets/{dist-CyubL7Wj.js → dist-rC3nAs_O.js} +1 -1
  181. package/server/public/assets/{ganttDiagram-6RSMTGT7-BI4E1LbQ.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
  182. package/server/public/assets/{highlighted-body-OFNGDK62-D_bapWkF.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
  183. package/server/public/assets/index-CPcysUHk.js +796 -0
  184. package/server/public/assets/index-H5M0yhM4.css +1 -0
  185. package/server/public/assets/{linear-CEdobObr.js → linear-yqcXkDfj.js} +1 -1
  186. package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
  187. package/server/public/assets/{pieDiagram-4H26LBE5-DT79L01f.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
  188. package/server/public/assets/{prod-CR_K2DFV.js → prod-DKUunUdN.js} +4 -4
  189. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BEkKXXrL.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
  190. package/server/public/assets/{sankeyDiagram-5OEKKPKP-BxSCqn-j.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
  191. package/server/public/assets/{xychartDiagram-2RQKCTM6-DicwJGG_.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
  192. package/server/public/index.html +2 -2
  193. package/server/{pull-requests-43LPDfM8.js → pull-requests-D7AL5woD.js} +1 -1
  194. package/server/{pull-requests-DyUkQl4W.js → pull-requests-NDDNtqNq.js} +3 -3
  195. package/server/{agents-B9GwfCyp.js → queries-C0LCGG21.js} +710 -325
  196. package/server/{rally-BtWjybOa.js → rally-4oKvnxLG.js} +3 -3
  197. package/server/rally-DF5a3ioP.js +3 -0
  198. package/server/{rally-api-B-osULNL.js → rally-api-41tT6ikZ.js} +2 -2
  199. package/server/{rally-api-B-YA_oXx.js → rally-api-BsaQ8Vnz.js} +1 -1
  200. package/server/{rally-client-sErNQBO0.js → rally-client-Bo4hNcCZ.js} +5 -5
  201. package/server/{rally-client-CzFymP7P.js → rally-client-b5PT1x5L.js} +1 -1
  202. package/server/{reap-terminal-sessions-DnDQ7pf9.js → reap-terminal-sessions-BR39qflC.js} +1 -1
  203. package/server/{reap-terminal-sessions-2s-fvilz.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
  204. package/server/{rebuild-stack-nGD_nPZo.js → rebuild-stack-C7JPUom6.js} +1 -1
  205. package/server/{rebuild-stack-CoU-HqZj.js → rebuild-stack-Ddv6W017.js} +5 -5
  206. package/server/{reconstruct-cache-Wj8GrYB0.js → reconstruct-cache-Gqhm---K.js} +6 -6
  207. package/server/record-DLOqfbkI.js +3 -0
  208. package/server/record-update-BltEmPge.js +168 -0
  209. package/server/record-update-CDp7aTaT.js +3 -0
  210. package/server/recovery-trip-Cn7KJVkS.js +44 -0
  211. package/server/{release-engine-CBLQXDlH.js → release-engine-BYzmIBf9.js} +5 -5
  212. package/server/{release-set-BNiqi7hy.js → release-set-7pnxFOWR.js} +3 -3
  213. package/server/{remote-DW_TWQnr.js → remote-Cvu4CSDk.js} +3 -3
  214. package/server/{remote-agents-C4cyxHQS.js → remote-agents-C2C6z9tj.js} +6 -33
  215. package/server/{remote-agents-Cv-U-_V8.js → remote-agents-DYY5fFpd.js} +1 -1
  216. package/server/{remote-completion-PhXGGFQy.js → remote-completion-2Kb4IDg_.js} +13 -13
  217. package/server/{remote-DcO9An_f.js → remote-rN0ecjHE.js} +3 -3
  218. package/server/resume-BFLl-yLn.js +3 -0
  219. package/server/{review-agent-Dn-yn7Zj.js → review-agent-BZvk0N5G.js} +31 -23
  220. package/server/{review-agent-u5q3ip7H.js → review-agent-CpSHLzed.js} +1 -1
  221. package/server/{review-artifacts-D4T04aYI.js → review-artifacts-PCo53YMn.js} +5 -19
  222. package/server/{review-context-Rc0VDLG_.js → review-context-M7QtJlJq.js} +8 -8
  223. package/server/{review-monitor-BC--miCO.js → review-monitor-BLC5mTTg.js} +2 -2
  224. package/server/{review-status-CG0iDuWa.js → review-status-77N3PoZr.js} +1 -1
  225. package/server/{review-status-Dc1l4dVz.js → review-status-DANr0t-v.js} +32 -58
  226. package/server/{review-status-enrichment-C1a1OG_1.js → review-status-enrichment-DwOg4UfL.js} +3 -3
  227. package/server/{review-status-sync-CfSixhhX.js → review-status-sync-Bd08OOFA.js} +1 -1
  228. package/server/{review-status-sync-CAr-hfnJ.js → review-status-sync-BjTUJ5fx.js} +2 -2
  229. package/server/{review-verdict-feedback-D2Q960wX.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
  230. package/server/{review-verdict-feedback-CVDbIDBe.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
  231. package/server/{rollup-DctoIu-A.js → rollup-Bu0f2EyN.js} +8 -8
  232. package/server/{rollup-CakjztPl.js → rollup-DTCCdEy4.js} +1 -1
  233. package/server/{scanner-BTM1jc_u.js → scanner-BlZ2vB7j.js} +7 -7
  234. package/server/{sequence-io-pnoIDGv4.js → sequence-io-ylyDtz2J.js} +4 -4
  235. package/server/{sequencer-agent-9Soi-WL-.js → sequencer-agent-DsWQ-87H.js} +6 -17
  236. package/server/server.js +4695 -4093
  237. package/server/{service-DfTVoqJg.js → service-CLVBC_1Y.js} +116 -90
  238. package/server/{session-fork-C4jAFHj8.js → session-fork-DlEIAhRy.js} +2 -2
  239. package/server/{session-history-DanhhiCw.js → session-history-bnOFKMwf.js} +4 -4
  240. package/server/settings-CP3GGon2.js +2 -0
  241. package/server/{settings-Cuc12oP_.js → settings-Cqa-8nyj.js} +2 -2
  242. package/server/{settings-DfT3f86D.js → settings-gJrdLZy2.js} +3 -3
  243. package/server/{shadow-engineering-bKuKTCn-.js → shadow-engineering-fq1YEKV3.js} +3 -3
  244. package/server/{shadow-state-CVHpRWlb.js → shadow-state-BqeFAygK.js} +1 -1
  245. package/server/{shadow-state-DJz6_pb_.js → shadow-state-RptE9Cau.js} +2 -2
  246. package/server/shadow-utils-BMWr5tRT.js +39 -0
  247. package/server/{ship-log-CwqPFfqx.js → ship-log-BRQQi2lU.js} +1 -1
  248. package/server/{smart-compaction-CiWfGfRZ.js → smart-compaction-CmoXpjeU.js} +7 -7
  249. package/server/{smart-compaction-B4KlpZGN.js → smart-compaction-DldUel4B.js} +1 -1
  250. package/server/{spawn-planning-session-CU-DwyDl.js → spawn-planning-session-CoS6LTc6.js} +16 -16
  251. package/server/{spawn-planning-session-D5N3RuLG.js → spawn-planning-session-DT2tSMxo.js} +1 -1
  252. package/server/{specialist-completion-CJcv-NXH.js → specialist-completion-pJtESo7m.js} +1 -1
  253. package/server/{specialist-context-B2HlbNxS.js → specialist-context-CspI4Eog.js} +5 -5
  254. package/server/{specialist-handoff-logger-CQyF1ygu.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
  255. package/server/{specialist-logs-CdcUpfjj.js → specialist-logs-DtSkPJZK.js} +3 -3
  256. package/server/{specialists-D7AcFi1u.js → specialists-CywEMwxk.js} +1 -1
  257. package/server/{specialists-k22_Btaq.js → specialists-D9-dMUtI.js} +1 -1
  258. package/server/{specialists-CFgw_0Q6.js → specialists-Dax7tqXC.js} +161 -448
  259. package/server/{specialists-CwzFdapR.js → specialists-GF42OOqd.js} +18 -18
  260. package/server/specs-VwcFtEDi.js +3 -0
  261. package/server/{src-B4TTzNSr.js → src-By3D85Ry.js} +6 -1
  262. package/server/{src-BvpMg4EB.js → src-CqyFg52C.js} +5 -5
  263. package/server/{src-D4YUZrwR.js → src-DhxM-eCb.js} +6 -6
  264. package/server/{stack-health-DVN7zRnL.js → stack-health-BsEVrJZ6.js} +1 -1
  265. package/server/{stack-health-CSgcYcr8.js → stack-health-C-SnpRHh.js} +2 -2
  266. package/server/stale-task-claims-vTxmRzLi.js +69 -0
  267. package/server/state-home-Bur1y4oH.js +213 -0
  268. package/server/{state-mapping-C13UaCL7.js → state-mapping-Ci0pkac4.js} +1 -1
  269. package/server/state-migrate-D3VveYfO.js +362 -0
  270. package/server/{stuck-remediation-CxsyxwFO.js → stuck-remediation-B699-p8v.js} +36 -41
  271. package/server/{stuck-remediation-nTIvhGOR.js → stuck-remediation-CaFYYTQW.js} +1 -1
  272. package/server/{summary-fork-CnRMPCYd.js → summary-fork-BxnF8Xh0.js} +2 -2
  273. package/server/{summary-fork-gKSoFAnK.js → summary-fork-COqYpVa3.js} +8 -8
  274. package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
  275. package/server/supervisor/pty-supervisor.js +2 -2
  276. package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
  277. package/server/supervisor-eWAAmXKu.js +2 -0
  278. package/server/{supervisor-CZMs8s0M.js → supervisor-liMgIPDF.js} +2 -2
  279. package/server/{swarm-readiness-h6-pwY8w.js → swarm-readiness-sXB1vhzo.js} +3 -3
  280. package/server/{system-prerequisites-DZZTi2G6.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
  281. package/server/{teardown-workspace-B4D-oCVg.js → teardown-workspace-DvzqnmUF.js} +14 -71
  282. package/server/{test-agent-queue-CnuYku4B.js → test-agent-queue-hAU1Ah08.js} +5 -5
  283. package/server/{tldr-daemon-CuA8hz21.js → tldr-daemon-Bam7Xhoo.js} +2 -2
  284. package/server/{tldr-daemon-CgZQ3jmZ.js → tldr-daemon-DhGwd88s.js} +1 -1
  285. package/server/tmux-C-rgxRDA.js +3 -0
  286. package/server/{tmux-C3g9VFcg.js → tmux-U55cNGFG.js} +92 -4
  287. package/server/{token-g_sJ19g3.js → token-Dsa-i36o.js} +2 -2
  288. package/server/{token-util-DiwnnbJo.js → token-util-BWNpH96m.js} +1 -1
  289. package/server/token-util-DRt0j2nQ.js +3 -0
  290. package/server/{tracker-config-dQxC15vH.js → tracker-config-OkdbaUCm.js} +2 -2
  291. package/server/{tracker-utils--z8FLSWn.js → tracker-utils-CghXMF3q.js} +2 -2
  292. package/server/{tracker-utils-DkKyRT0H.js → tracker-utils-DdzUiPNU.js} +1 -1
  293. package/server/{tunnel-BpWZs0Jy.js → tunnel-D1YxesBL.js} +3 -3
  294. package/server/{tunnel-CN2px87h.js → tunnel-DjlzgTl3.js} +1 -1
  295. package/server/typed-errors-CH4roFIj.js +3 -0
  296. package/server/{typed-errors-sLpGfegz.js → typed-errors-n_Tnb4Fh.js} +3 -4
  297. package/server/{types-BLS_Zbmd.js → types-DOjWNv3Z.js} +1 -1
  298. package/server/{types-tlXf80x3.js → types-DXBMm4mX.js} +1 -1
  299. package/server/{uat-train-utGVmqdm.js → uat-train-CaaWs9Rp.js} +1 -1
  300. package/server/{uat-train-BRo6DM7p.js → uat-train-CqN34zFx.js} +24 -25
  301. package/server/{validation-CsPVsoA0.js → validation-4-z2Cw4z.js} +70 -23
  302. package/server/validation-DpTNakM6.js +3 -0
  303. package/server/verification-artifact-DK1xb1zG.js +56 -0
  304. package/server/verification-artifact-JD_edpZ9.js +2 -0
  305. package/server/{verification-runner-CMT5WRMS.js → verification-runner-BjHN80pJ.js} +338 -58
  306. package/server/verification-runner-ShYu5Ph3.js +2 -0
  307. package/server/{vtt-parser-C_XPlifj.js → vtt-parser-QnRfcjiU.js} +1 -1
  308. package/server/{work-agent-prompt-ZTAb2Hyf.js → work-agent-prompt-BiJ43Der.js} +12 -88
  309. package/server/workflows-B4C3lY9E.js +2 -0
  310. package/server/{workflows-CXRwhw_o.js → workflows-DkTotz_m.js} +17 -24
  311. package/server/{workspace-CNfuj1-5.js → workspace-CuN0ev4Z.js} +3 -3
  312. package/server/{workspace-9UEsKuiP.js → workspace-DQ4vVivd.js} +1 -1
  313. package/server/{workspace-config-ChWOECy0.js → workspace-config-C77NKnsV.js} +1 -1
  314. package/server/{workspace-manager-BO-6k3sP.js → workspace-manager-B1mYn0lN.js} +1 -1
  315. package/server/{workspace-manager-D8AByFIT.js → workspace-manager-Beeo2aKF.js} +23 -48
  316. package/server/{workspace-metadata-CvC268MN.js → workspace-metadata-BZC5BmoP.js} +2 -2
  317. package/server/{workspace-metadata-DZiJtnuF.js → workspace-metadata-Cy7_ZACL.js} +1 -1
  318. package/server/{workspaces-D-uIoqbg.js → workspaces-CGuzW1Ia.js} +182 -152
  319. package/sync-sources/hooks/codex-notify-hook +64 -8
  320. package/sync-sources/hooks/record-cost-event.js +1109 -36
  321. package/sync-sources/hooks/record-cost-event.js.map +1 -1
  322. package/sync-sources/hooks/statusline.sh +2 -2
  323. package/sync-sources/hooks/work-agent-stop-hook +1 -2
  324. package/server/acceptance-criteria-BZ_nQS1f.js +0 -33
  325. package/server/agent-state-lGvgPP4m.js +0 -3
  326. package/server/agents-CEcaxSkR.js +0 -3
  327. package/server/auto-commit-IW-eik_b.js +0 -3
  328. package/server/bd-process-lock-XAXAet9O.js +0 -390
  329. package/server/beads-B1u04n3o.js +0 -2
  330. package/server/beads-BeSMEjGT.js +0 -649
  331. package/server/beads-query-Dl4FhT8J.js +0 -95
  332. package/server/beads-restore-BUItPOjI.js +0 -23
  333. package/server/cli-D9cUTbBr.js +0 -3
  334. package/server/codex-BYPz6ZdF.js +0 -3
  335. package/server/compact-beads-CyJtoXJi.js +0 -94
  336. package/server/compact-beads-N00E4EVa.js +0 -3
  337. package/server/deacon-swarm-CvdFekIO.js +0 -2
  338. package/server/dist-BNwrgsUO.js +0 -3
  339. package/server/export-BJHSVwKP.js +0 -87
  340. package/server/forge-8y6aEPTB.js +0 -2
  341. package/server/hume-CerGi2RH.js +0 -3
  342. package/server/inspect-agent-CWkeAB7J.js +0 -2
  343. package/server/lifecycle-Ck2UR27D.js +0 -14
  344. package/server/merge-ops-CFkQtXEj.js +0 -2
  345. package/server/projects-CrBE6IhN.js +0 -3
  346. package/server/public/assets/index-BAZxZ-8I.js +0 -796
  347. package/server/public/assets/index-FBG3JBfq.css +0 -1
  348. package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +0 -1
  349. package/server/rally-oggyp4cs.js +0 -3
  350. package/server/record-lEYK__LD.js +0 -3
  351. package/server/recovery-trip-BT7nb9OV.js +0 -98
  352. package/server/resolver-C7dLn8OK.js +0 -158
  353. package/server/resume-BYZBIab-.js +0 -3
  354. package/server/settings-Cy7SCFO9.js +0 -2
  355. package/server/specs-RzcDgozr.js +0 -3
  356. package/server/supervisor-CfX192ma.js +0 -2
  357. package/server/tmux-By8E_Yv_.js +0 -3
  358. package/server/token-util-C9u4An3K.js +0 -3
  359. package/server/tracker-config-BzfVj41Z.js +0 -3
  360. package/server/typed-errors-CrN1AByg.js +0 -3
  361. package/server/validation-Dq_wwcw3.js +0 -3
  362. package/server/verification-runner-D0Uh-9jc.js +0 -2
  363. package/server/workflows-BLwxUMP7.js +0 -2
  364. package/server/writer-BUweuRPx.js +0 -3
  365. package/server/writer-CrP2xuBn.js +0 -251
@@ -1,38 +1,40 @@
1
1
  import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Bt as writeIssueRecordSync, Ct as ensureIssueRecordSync, En as getIssuePrefix, Fn as init_projects, Jr as init_paths, Nt as readIssueRecordForWorkspaceSync, Pt as readIssueRecordSync, Qr as sessionFilePath, Sr as AGENTS_DIR, dn as init_state_plane, f as loadConfigSync, in as init_auto_commit, jr as OVERDECK_HOME, kn as getProjectSync, kt as init_record, ln as STATE_PLANE_PATHS, on as queueBeadsAutoCommit, pn as isStatePlanePath, qn as resolveProjectFromIssueSync, s as init_load, sn as reconcileStatePlaneDrift, un as getMainDivergence, xr as init_errors, zn as listProjectsSync } from "./config-yaml-cNOZcEww.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-C3g9VFcg.js";
5
- import { a as init_event_store, i as initEventStore } from "./event-store-D89fMfXS.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-Dc1l4dVz.js";
7
- import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-DESTCWo-.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, _t as init_config, at as init_concurrency, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, et as countRunningAgents, fr as getAgentRuntimeState, gn as buildDefaultResumeContinueMessage, hr as saveAgentRuntimeState, it as getConcurrencyLimits, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mr as init_runtime_state, mt as setCachedMemoryVerdict, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeStateSync, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-B9GwfCyp.js";
9
- import { c as logDeaconEventSync, o as init_persistent_logger, s as logAgentLifecycleSync } from "./session-history-DanhhiCw.js";
10
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils--z8FLSWn.js";
11
- import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-C13UaCL7.js";
12
- import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-CAr-hfnJ.js";
13
- import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-DVLdmnMJ.js";
14
- import { n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-CEvD_v5F.js";
15
- import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-D4EFsRBd.js";
16
- import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-CSgcYcr8.js";
17
- import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-Dl4FhT8J.js";
18
- import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-CxsyxwFO.js";
19
- import { n as __filename, r as init_esm_shims } from "./esm-shims-BEjvINX3.js";
20
- import { t as recordDeaconNudge } from "./deacon-nudge-log-B-naf89q.js";
21
- import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BC--miCO.js";
22
- import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, d as getAllProjectSpecialistStatuses } from "./specialists-CwzFdapR.js";
23
- import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CbghE9-o.js";
24
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BxcePXL-.js";
25
- import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-D4wTChdX.js";
26
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CVDbIDBe.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";
27
29
  import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-CZYB3dlm.js";
28
- import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BNGkmYR_.js";
29
- import { t as recordRecoveryFailure } from "./recovery-trip-BT7nb9OV.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";
30
32
  import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Gh5R_YLF.js";
31
- import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-DCAYzNXW.js";
33
+ import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-LoMnnjtJ.js";
32
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";
33
- import { n as pruneTerminalStoppedAgents } from "./agent-gc-D0wDIeV1.js";
34
- import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-DI_IS1p_.js";
35
- import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DbZ8ukMd.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";
36
38
  import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-CXMLATGc.js";
37
39
  import { createRequire } from "node:module";
38
40
  import { join } from "node:path";
@@ -21641,16 +21643,17 @@ init_persistent_logger();
21641
21643
  init_review_status_sync();
21642
21644
  init_review_dispatch_decision();
21643
21645
  init_review_status();
21646
+ init_codex_auth();
21644
21647
  init_runtime_state();
21645
21648
  init_agent_state();
21646
21649
  init_transcript_landing();
21647
21650
  init_config();
21648
21651
  init_memory_verdict_cache();
21649
21652
  init_concurrency();
21650
- init_queries();
21651
21653
  init_termination();
21652
21654
  init_context_overflow();
21653
21655
  init_agents$1();
21656
+ init_queries();
21654
21657
  new (require_undici()).EnvHttpProxyAgent();
21655
21658
  //#endregion
21656
21659
  //#region ../../lib/smee.ts
@@ -22504,8 +22507,8 @@ init_tmux();
22504
22507
  * forever for a verdict that will not arrive.
22505
22508
  */
22506
22509
  const INSPECT_TIMEOUT_MS = 12 * 6e4;
22507
- function inspectSessionName(issueId, beadId) {
22508
- 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)}`;
22509
22512
  }
22510
22513
  function formatInspectElapsed(elapsedMs) {
22511
22514
  return `${Math.max(0, Math.round(elapsedMs / 6e4))}m`;
@@ -22517,16 +22520,16 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
22517
22520
  for (const [rawIssueId, status] of Object.entries(statuses)) {
22518
22521
  if (status.inspectStatus !== "inspecting") continue;
22519
22522
  const issueId = rawIssueId.toUpperCase();
22520
- const beadId = status.inspectBeadId;
22523
+ const itemId = status.inspectBeadId;
22521
22524
  const startedMs = status.inspectStartedAt ? Date.parse(status.inspectStartedAt) : NaN;
22522
22525
  const hasStartedAt = Number.isFinite(startedMs);
22523
22526
  const elapsedMs = hasStartedAt ? nowMs - startedMs : Number.POSITIVE_INFINITY;
22524
22527
  const timedOut = elapsedMs > INSPECT_TIMEOUT_MS;
22525
- const sessionName = beadId ? inspectSessionName(issueId, beadId) : void 0;
22528
+ const sessionName = itemId ? inspectSessionName(issueId, itemId) : void 0;
22526
22529
  const sessionAlive = sessionName ? await Effect.runPromise(sessionExists(sessionName)).catch(() => false) : false;
22527
22530
  if (!timedOut && !(!!sessionName && !sessionAlive)) continue;
22528
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`;
22529
- const effectiveBeadId = beadId ?? "unknown";
22532
+ const effectiveBeadId = itemId ?? "unknown";
22530
22533
  const notes = `Inspection error for bead ${effectiveBeadId}: ${reason}. No verdict was produced.`;
22531
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.`;
22532
22535
  setReviewStatusSync(issueId, {
@@ -22538,7 +22541,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
22538
22541
  console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
22539
22542
  });
22540
22543
  try {
22541
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
22544
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
22542
22545
  await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
22543
22546
  } catch (err) {
22544
22547
  const msg = err instanceof Error ? err.message : String(err);
@@ -22558,6 +22561,15 @@ const KNOWN_AGENT_MODALS = [{
22558
22561
  matches: (pane) => /rate limit/i.test(pane) && /keep current model/i.test(pane),
22559
22562
  keys: ["Down", "Enter"]
22560
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
+ }
22561
22573
  /** Rollout JSONL is launch/turn attribution only until a captured switch proves otherwise. */
22562
22574
  const MODEL_SHAPED_TOKEN = /^(?:gpt|o\d|claude|kimi|glm|gemini|deepseek|qwen|minimax|grok)[\w.-]*$/i;
22563
22575
  function paneShowsModelSwitch(pane, launchModel) {
@@ -22681,7 +22693,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
22681
22693
  if (!agentState?.workspace || !sessionId || !agentState.model) return null;
22682
22694
  let usage = null;
22683
22695
  try {
22684
- const { computeContextUsage } = await import("./conversation-service-BTzObqGi.js");
22696
+ const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
22685
22697
  usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
22686
22698
  } catch {
22687
22699
  return null;
@@ -22730,6 +22742,19 @@ async function checkApiErrorAgents() {
22730
22742
  if (!tmuxOutput.trim()) continue;
22731
22743
  const agentState = getAgentStateSync(sessionName);
22732
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
+ }
22733
22758
  if (paneShowsModelSwitch(tmuxOutput, agentState.model)) {
22734
22759
  const reason = `needs-you: live Codex pane indicates a model switch from launch model ${agentState.model}`;
22735
22760
  setAgentPausedSync(sessionName, reason, true);
@@ -22778,13 +22803,13 @@ async function checkApiErrorAgents() {
22778
22803
  const st = getAgentStateSync(sessionName);
22779
22804
  const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
22780
22805
  if (st?.workspace && sid && st.model) {
22781
- const { computeContextUsage } = await import("./conversation-service-BTzObqGi.js");
22806
+ const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
22782
22807
  const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
22783
22808
  if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
22784
22809
  }
22785
22810
  } catch {}
22786
22811
  if (recoveredPct !== null) {
22787
- const { clearWorkspaceStuck } = await import("./review-status-sync-CfSixhhX.js");
22812
+ const { clearWorkspaceStuck } = await import("./review-status-sync-Bd08OOFA.js");
22788
22813
  clearWorkspaceStuck(issueId);
22789
22814
  stuckOverflowNativeRecoveryState.delete(sessionName);
22790
22815
  actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
@@ -22800,7 +22825,7 @@ async function checkApiErrorAgents() {
22800
22825
  rec.attempts += 1;
22801
22826
  rec.lastAttempt = now;
22802
22827
  stuckOverflowNativeRecoveryState.set(sessionName, rec);
22803
- const { resumeAgent } = await import("./agents-CEcaxSkR.js");
22828
+ const { resumeAgent } = await import("./agents-BA15AQqo.js");
22804
22829
  const recovered = await resumeAgent(sessionName, void 0, { compact: true });
22805
22830
  if (recovered.success) {
22806
22831
  stuckOverflowNativeRecoveryState.delete(sessionName);
@@ -22848,7 +22873,7 @@ async function checkApiErrorAgents() {
22848
22873
  }
22849
22874
  const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
22850
22875
  if (issueId !== null) {
22851
- const { resumeAgent } = await import("./agents-CEcaxSkR.js");
22876
+ const { resumeAgent } = await import("./agents-BA15AQqo.js");
22852
22877
  const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
22853
22878
  contextOverflowRecoveryState.set(sessionName, {
22854
22879
  lastAttempt: now,
@@ -23215,7 +23240,7 @@ function reviewConvoyLiveness(issueId) {
23215
23240
  */
23216
23241
  async function recoverUnhealthyTestStack(issueId, workspacePath) {
23217
23242
  const key = issueId.toUpperCase();
23218
- const { getWorkspaceStackHealth } = await import("./stack-health-DVN7zRnL.js");
23243
+ const { getWorkspaceStackHealth } = await import("./stack-health-BsEVrJZ6.js");
23219
23244
  const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
23220
23245
  if (health.healthy) {
23221
23246
  testStackRebuildState.delete(key);
@@ -23247,7 +23272,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
23247
23272
  record.attempts += 1;
23248
23273
  testStackRebuildState.set(key, record);
23249
23274
  console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
23250
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-nGD_nPZo.js");
23275
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-C7JPUom6.js");
23251
23276
  const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
23252
23277
  if (!result.success) {
23253
23278
  console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
@@ -23278,6 +23303,29 @@ function latestHistoryByType(history, type) {
23278
23303
  if (!history || history.length === 0) return void 0;
23279
23304
  for (let i = history.length - 1; i >= 0; i--) if (history[i].type === type) return history[i].status;
23280
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
+ }
23281
23329
  async function isReviewAgentActiveForIssue(issueId) {
23282
23330
  try {
23283
23331
  const agents = await Effect.runPromise(listRunningAgents());
@@ -23352,6 +23400,20 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
23352
23400
  logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — issue closed`);
23353
23401
  return actions;
23354
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
+ }
23355
23417
  if (status.reviewStatus !== "reviewing" && status.reviewStatus !== "pending") {
23356
23418
  logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — reviewStatus=${status.reviewStatus}`);
23357
23419
  return actions;
@@ -23375,7 +23437,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
23375
23437
  return actions;
23376
23438
  }
23377
23439
  try {
23378
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
23440
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23379
23441
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
23380
23442
  issueId,
23381
23443
  workspace,
@@ -23505,7 +23567,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
23505
23567
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
23506
23568
  if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
23507
23569
  else if (workspace && resolved) try {
23508
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
23570
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23509
23571
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
23510
23572
  issueId,
23511
23573
  workspace,
@@ -23530,8 +23592,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
23530
23592
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
23531
23593
  if (workspace && resolved) {
23532
23594
  const branch = `feature/${issueLower}`;
23533
- const { spawnRun } = await import("./agents-CEcaxSkR.js");
23534
- const { buildTestRolePrompt } = await import("./test-agent-queue-CnuYku4B.js");
23595
+ const { spawnRun } = await import("./agents-BA15AQqo.js");
23596
+ const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
23535
23597
  const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
23536
23598
  if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
23537
23599
  setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
@@ -23669,7 +23731,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
23669
23731
  record.lastAttempt = now;
23670
23732
  record.attempts += 1;
23671
23733
  stalledReviewConvoyRecoveryState.set(key, record);
23672
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
23734
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23673
23735
  try {
23674
23736
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
23675
23737
  issueId,
@@ -23740,7 +23802,7 @@ async function checkMissingReviewStatuses() {
23740
23802
  continue;
23741
23803
  }
23742
23804
  try {
23743
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
23805
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
23744
23806
  await Effect.runPromise(spawnReviewRoleForIssue({
23745
23807
  issueId,
23746
23808
  workspace,
@@ -23791,7 +23853,7 @@ async function checkStuckReviewing() {
23791
23853
  const actions = [];
23792
23854
  const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
23793
23855
  try {
23794
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CG0iDuWa.js");
23856
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
23795
23857
  const statuses = loadReviewStatuses();
23796
23858
  const now = Date.now();
23797
23859
  const activeReviewIssues = /* @__PURE__ */ new Set();
@@ -23807,7 +23869,7 @@ async function checkStuckReviewing() {
23807
23869
  if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
23808
23870
  }
23809
23871
  try {
23810
- const { listRunningAgents } = await import("./agents-CEcaxSkR.js");
23872
+ const { listRunningAgents } = await import("./agents-BA15AQqo.js");
23811
23873
  const agents = await Effect.runPromise(listRunningAgents());
23812
23874
  for (const agent of agents) {
23813
23875
  if (agent.status === "stopped" || agent.status === "error") continue;
@@ -23940,7 +24002,7 @@ async function checkCompletedButUnsignaledReviews() {
23940
24002
  }
23941
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.`;
23942
24004
  try {
23943
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
24005
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
23944
24006
  await messageAgent(reviewSession, nudge);
23945
24007
  unsignaledReviewNudges.set(latestDir, now);
23946
24008
  actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
@@ -23973,6 +24035,7 @@ init_review_status();
23973
24035
  init_persistent_logger();
23974
24036
  init_review_monitor();
23975
24037
  init_tmux();
24038
+ init_codex_auth();
23976
24039
  const REVIEWER_IDLE_FAILURE_MS = 180 * 1e3;
23977
24040
  const REVIEW_REPORTS_PRESENT_NUDGE_COOLDOWN_MS = 60 * 1e3;
23978
24041
  const reviewReportsPresentNudges = /* @__PURE__ */ new Map();
@@ -24061,7 +24124,7 @@ async function respawnIdleReviewer(state, agentId) {
24061
24124
  return false;
24062
24125
  }
24063
24126
  try {
24064
- const { spawnReviewSubRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
24127
+ const { spawnReviewSubRoleForIssue } = await import("./review-agent-CpSHLzed.js");
24065
24128
  const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
24066
24129
  const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
24067
24130
  issueId: state.issueId,
@@ -24190,7 +24253,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
24190
24253
  "Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
24191
24254
  ].join("\n");
24192
24255
  try {
24193
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
24256
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
24194
24257
  await messageAgent(state.id, message);
24195
24258
  reviewReportsPresentNudges.set(nudgeKey, now);
24196
24259
  const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
@@ -24242,7 +24305,14 @@ async function monitorReviewConvoySignals() {
24242
24305
  const runtimeIdleAgeMs = runtimeState?.state === "idle" ? Date.now() - new Date(runtimeState.lastActivity).getTime() : 0;
24243
24306
  const idleAndNoOutput = reviewerSessionAlive && !outputWrittenForThisRun && runtimeIdleAgeMs > REVIEWER_IDLE_FAILURE_MS;
24244
24307
  let contextOverflowDetected = false;
24245
- 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
+ }
24246
24316
  let signal = null;
24247
24317
  let reason = "";
24248
24318
  if (outputWrittenForThisRun) signal = "ready";
@@ -24269,7 +24339,7 @@ async function monitorReviewConvoySignals() {
24269
24339
  if (!signal) continue;
24270
24340
  const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
24271
24341
  try {
24272
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
24342
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
24273
24343
  await messageAgent(state.reviewSynthesisAgentId, message);
24274
24344
  state.reviewMonitorSignaled = signal;
24275
24345
  saveAgentStateSync(state);
@@ -24277,7 +24347,7 @@ async function monitorReviewConvoySignals() {
24277
24347
  actions.push(action);
24278
24348
  logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
24279
24349
  if (signal === "ready") try {
24280
- const { notifyPipelineSync } = await import("./pipeline-notifier-BH4PAi-w.js");
24350
+ const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
24281
24351
  notifyPipelineSync({
24282
24352
  type: "reviewer_completed",
24283
24353
  issueId: state.issueId,
@@ -24285,7 +24355,7 @@ async function monitorReviewConvoySignals() {
24285
24355
  });
24286
24356
  } catch {}
24287
24357
  else if (signal === "timeout") try {
24288
- const { notifyPipelineSync } = await import("./pipeline-notifier-BH4PAi-w.js");
24358
+ const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
24289
24359
  notifyPipelineSync({
24290
24360
  type: "reviewer_timed_out",
24291
24361
  issueId: state.issueId,
@@ -24385,7 +24455,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
24385
24455
  async function checkStalledReviewDiscovery() {
24386
24456
  const actions = [];
24387
24457
  try {
24388
- const { listAgentStates } = await import("./agents-CEcaxSkR.js");
24458
+ const { listAgentStates } = await import("./agents-BA15AQqo.js");
24389
24459
  const states = listAgentStates();
24390
24460
  const now = Date.now();
24391
24461
  for (const state of states) {
@@ -24394,7 +24464,7 @@ async function checkStalledReviewDiscovery() {
24394
24464
  const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
24395
24465
  const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
24396
24466
  if (!aged && !dead) continue;
24397
- const { handleReviewDiscoveryReady } = await import("./review-agent-u5q3ip7H.js");
24467
+ const { handleReviewDiscoveryReady } = await import("./review-agent-CpSHLzed.js");
24398
24468
  const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
24399
24469
  actions.push(result.message);
24400
24470
  logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
@@ -24417,8 +24487,8 @@ async function checkStalledReviewDiscovery() {
24417
24487
  async function checkStalledReviewParents() {
24418
24488
  const actions = [];
24419
24489
  try {
24420
- const { listAgentStates, markAgentStoppedState } = await import("./agents-CEcaxSkR.js");
24421
- const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-u5q3ip7H.js");
24490
+ const { listAgentStates, markAgentStoppedState } = await import("./agents-BA15AQqo.js");
24491
+ const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-CpSHLzed.js");
24422
24492
  const states = listAgentStates();
24423
24493
  const now = Date.now();
24424
24494
  for (const state of states) {
@@ -24467,8 +24537,8 @@ async function checkStalledReviewParents() {
24467
24537
  async function checkReviewForkCacheMisses() {
24468
24538
  const actions = [];
24469
24539
  try {
24470
- const { listAgentStates, saveAgentState } = await import("./agents-CEcaxSkR.js");
24471
- const { readEventsSync } = await import("./events-rIGncmP1.js");
24540
+ const { listAgentStates, saveAgentState } = await import("./agents-BA15AQqo.js");
24541
+ const { readEventsSync } = await import("./events-BYbvqZky.js");
24472
24542
  const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
24473
24543
  const states = listAgentStates();
24474
24544
  const now = Date.now();
@@ -24615,7 +24685,7 @@ async function reconcileStaleMergeStatus() {
24615
24685
  if (!project) continue;
24616
24686
  let specStatus;
24617
24687
  try {
24618
- const { findSpecByIssue } = await import("./specs-RzcDgozr.js");
24688
+ const { findSpecByIssue } = await import("./specs-VwcFtEDi.js");
24619
24689
  const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
24620
24690
  specStatus = spec?.status;
24621
24691
  if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
@@ -24630,7 +24700,7 @@ async function reconcileStaleMergeStatus() {
24630
24700
  if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
24631
24701
  } catch {}
24632
24702
  if (!isMerged) {
24633
- const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-DkKyRT0H.js");
24703
+ const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-DdzUiPNU.js");
24634
24704
  const ghResolved = _resolveGitHubIssue(issueId);
24635
24705
  if (ghResolved.isGitHub) try {
24636
24706
  const { stdout } = await execFileAsync$4("gh", [
@@ -24667,7 +24737,7 @@ async function reconcileStaleMergeStatus() {
24667
24737
  actions.push(msg);
24668
24738
  console.log(`[deacon] ${msg}`);
24669
24739
  try {
24670
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
24740
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
24671
24741
  postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
24672
24742
  } catch (err) {
24673
24743
  console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
@@ -24692,7 +24762,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
24692
24762
  async function reconcileFalseMerged() {
24693
24763
  const actions = [];
24694
24764
  try {
24695
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
24765
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
24696
24766
  if (!isGitHubAppConfigured()) return actions;
24697
24767
  const statuses = loadReviewStatuses();
24698
24768
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -24737,7 +24807,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
24737
24807
  async function reconcileClosedPrReadyForMerge() {
24738
24808
  const actions = [];
24739
24809
  try {
24740
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
24810
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
24741
24811
  if (!isGitHubAppConfigured()) return actions;
24742
24812
  const statuses = loadReviewStatuses();
24743
24813
  const now = Date.now();
@@ -24809,7 +24879,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
24809
24879
  async function reconcileStaleMergeBlockers() {
24810
24880
  const actions = [];
24811
24881
  try {
24812
- const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-CuXUv-bP.js");
24882
+ const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BubJprtD.js");
24813
24883
  const statuses = loadReviewStatuses();
24814
24884
  const now = Date.now();
24815
24885
  const deps = buildRealConflictGateDeps();
@@ -24952,7 +25022,7 @@ async function checkFailedMergeRetry() {
24952
25022
  if (ciEntry.count === 5) {
24953
25023
  console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
24954
25024
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24955
- const { writeFeedbackFile } = await import("./feedback-writer-BsJiw5aT.js");
25025
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
24956
25026
  const ciFileResult = await Effect.runPromise(writeFeedbackFile({
24957
25027
  issueId,
24958
25028
  specialist: "merge-agent",
@@ -24984,7 +25054,7 @@ async function checkFailedMergeRetry() {
24984
25054
  ciRetryMap.set(issueId, ciEntry);
24985
25055
  console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
24986
25056
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24987
- const { writeFeedbackFile } = await import("./feedback-writer-BsJiw5aT.js");
25057
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
24988
25058
  const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
24989
25059
  issueId,
24990
25060
  specialist: "merge-agent",
@@ -25012,7 +25082,7 @@ async function checkFailedMergeRetry() {
25012
25082
  const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
25013
25083
  if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
25014
25084
  const timeoutNotes = status.mergeNotes;
25015
- const { writeFeedbackFile } = await import("./feedback-writer-BsJiw5aT.js");
25085
+ const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
25016
25086
  await Effect.runPromise(writeFeedbackFile({
25017
25087
  issueId: issueIdForFb,
25018
25088
  specialist: "merge-agent",
@@ -25117,7 +25187,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
25117
25187
  } } : {}
25118
25188
  };
25119
25189
  try {
25120
- const { closeOut } = await import("./workflows-BLwxUMP7.js");
25190
+ const { closeOut } = await import("./workflows-B4C3lY9E.js");
25121
25191
  const result = await Effect.runPromise(closeOut(ctx));
25122
25192
  if (!result.success) {
25123
25193
  const failed = result.steps.find((step) => !step.success && !step.skipped);
@@ -25421,7 +25491,8 @@ init_review_status();
25421
25491
  init_control_settings();
25422
25492
  init_agents$1();
25423
25493
  init_tmux();
25424
- init_beads_query();
25494
+ init_io();
25495
+ init_dag();
25425
25496
  const orphanFailureRecordedForAutoResume = /* @__PURE__ */ new Set();
25426
25497
  const appliedBootReconciliationDecisions = /* @__PURE__ */ new Set();
25427
25498
  const emptyBootReconciliationApplyResult = () => ({
@@ -25615,7 +25686,7 @@ async function cleanupOrphanedPlanningSessions$1(deps) {
25615
25686
  * - phase === 'implementation' or 'review-response'
25616
25687
  * - tmux session exists (not orphaned)
25617
25688
  * - isAgentIdleForNudge() returns true (Stop hook authoritative)
25618
- * - bd ready -l <issueLabel> has ≥1 ready bead (work remaining)
25689
+ * - pan task next -l <issueLabel> has ≥1 ready bead (work remaining)
25619
25690
  * - last nudge older than NUDGE_COOLDOWN_MS (don't spam)
25620
25691
  *
25621
25692
  * Action: send `pan tell` with a concrete imperative pointing at the next
@@ -25658,8 +25729,8 @@ function buildStalledResumePrompt(state) {
25658
25729
  }
25659
25730
  return buildDefaultResumeContinueMessage(state.issueId);
25660
25731
  }
25661
- function readyBeadLine(bead) {
25662
- return `${bead.id} ${bead.title}`.trim();
25732
+ function readyTaskLine(item) {
25733
+ return `${item.id} ${item.title}`.trim();
25663
25734
  }
25664
25735
  async function nudgeStalledResumeWorkAgents() {
25665
25736
  const actions = [];
@@ -25681,7 +25752,7 @@ async function nudgeStalledResumeWorkAgents() {
25681
25752
  const message = buildStalledResumePrompt(state);
25682
25753
  if (!message) continue;
25683
25754
  try {
25684
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
25755
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
25685
25756
  await messageAgent(agentId, message);
25686
25757
  recordCooldown(agentId, ".last-stalled-resume-nudge");
25687
25758
  const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
@@ -25761,7 +25832,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
25761
25832
  status: "running",
25762
25833
  role: "work"
25763
25834
  });
25764
- const eligibleByQueryRoot = /* @__PURE__ */ new Map();
25835
+ const eligible = [];
25765
25836
  for (const state of states) {
25766
25837
  const agentId = state.id;
25767
25838
  if (await isIssueClosed(state.issueId)) {
@@ -25775,39 +25846,34 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
25775
25846
  const last = parseInt(readFileSync(cooldownFile, "utf-8").trim(), 10);
25776
25847
  if (!Number.isNaN(last) && Date.now() - last < BEAD_NUDGE_COOLDOWN_MS) continue;
25777
25848
  } catch {}
25778
- const queryRoot = resolveBeadsQueryRoot(state.workspace);
25779
- const workspaceStates = eligibleByQueryRoot.get(queryRoot) ?? [];
25780
- workspaceStates.push(state);
25781
- eligibleByQueryRoot.set(queryRoot, workspaceStates);
25782
- }
25783
- for (const [queryRoot, workspaceStates] of eligibleByQueryRoot) {
25784
- const issues = workspaceStates.map((state) => state.issueId);
25785
- const ready = await Effect.runPromise(queryReadyBeadsByIssueLabels(queryRoot, issues, { acquisitionTimeoutMs: 500 }));
25786
- for (const state of workspaceStates) {
25787
- const agentId = state.id;
25788
- const openBeads = ready.byIssue[state.issueId.toLowerCase()] ?? [];
25789
- if (openBeads.length === 0) continue;
25790
- const firstBead = readyBeadLine(openBeads[0]).slice(0, 200);
25791
- const briefPath = join$1(getAgentDir(agentId), "initial-prompt.md");
25792
- const message = [
25793
- `Deacon idle-nudge: your tmux is alive but Claude is idle and you have ${openBeads.length} open bead(s) remaining for ${state.issueId}.`,
25794
- ``,
25795
- `Next ready bead: ${firstBead}`,
25796
- ``,
25797
- `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.`,
25798
- ``,
25799
- "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."
25800
- ].join("\n");
25801
- try {
25802
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
25803
- await messageAgent(agentId, message);
25804
- writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
25805
- const action = `Nudged idle ${agentId} (${state.issueId}) — ${openBeads.length} open bead(s)`;
25806
- actions.push(action);
25807
- logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
25808
- } catch (err) {
25809
- logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
25810
- }
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)}`);
25811
25877
  }
25812
25878
  }
25813
25879
  return actions;
@@ -26097,6 +26163,9 @@ async function reconcileAgentLiveness$1(deps) {
26097
26163
  }
26098
26164
  //#endregion
26099
26165
  //#region ../../lib/cloister/in-flight-guard.ts
26166
+ init_state_plane();
26167
+ init_auto_commit();
26168
+ init_record();
26100
26169
  function createInFlightGuard() {
26101
26170
  const inFlight = /* @__PURE__ */ new Set();
26102
26171
  return {
@@ -26121,7 +26190,6 @@ function createInFlightGuard() {
26121
26190
  }
26122
26191
  //#endregion
26123
26192
  //#region ../../lib/pipeline-state-paths.ts
26124
- init_state_plane();
26125
26193
  const execFileAsync$3 = promisify$1(execFile$1);
26126
26194
  const STATE_PLANE_DIFF_EXCLUDES = STATE_PLANE_PATHS.map((path) => `:(exclude)${path.replace(/\/$/, "")}`);
26127
26195
  function isPipelineStatePath(relativePath) {
@@ -26231,14 +26299,12 @@ async function gitStdout(workspacePath, args) {
26231
26299
  }
26232
26300
  //#endregion
26233
26301
  //#region ../../lib/cloister/state-plane-patrol.ts
26234
- init_record();
26302
+ init_record_update();
26235
26303
  init_state_home();
26236
- init_auto_commit();
26237
26304
  async function reconcileProjectStatePlanes(projects) {
26238
26305
  const actions = [];
26239
26306
  for (const { config } of projects) {
26240
26307
  if (!config.path) continue;
26241
- queueBeadsAutoCommit(config.path);
26242
26308
  const write = await Effect.runPromise(reconcileStatePlaneDrift(config.path));
26243
26309
  if (!write.committed) continue;
26244
26310
  actions.push({
@@ -26261,7 +26327,6 @@ async function recreatedStateWarnings(projects) {
26261
26327
  }
26262
26328
  //#endregion
26263
26329
  //#region ../../lib/cloister/deacon-main-divergence.ts
26264
- init_record_lock();
26265
26330
  init_projects();
26266
26331
  init_state_plane();
26267
26332
  async function recordMainDivergenceHealth(state, projects = listProjectsSync(), measure = getMainDivergence) {
@@ -26396,10 +26461,10 @@ function shouldRunRecoveryJanitor(janitor, patrolCycle) {
26396
26461
  //#endregion
26397
26462
  //#region ../../lib/cloister/dead-end-trip.ts
26398
26463
  init_projects();
26399
- function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
26464
+ async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
26400
26465
  const project = resolveProjectFromIssueSync(issueId);
26401
26466
  if (!project) return void 0;
26402
- 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;
26403
26468
  }
26404
26469
  //#endregion
26405
26470
  //#region ../../lib/cloister/test-status-green-ci-reconciler.ts
@@ -26920,7 +26985,7 @@ init_config();
26920
26985
  init_concurrency();
26921
26986
  init_review_status();
26922
26987
  init_record();
26923
- init_beads_query();
26988
+ init_io();
26924
26989
  init_control_settings();
26925
26990
  init_archive_planning();
26926
26991
  init_projects();
@@ -27192,8 +27257,8 @@ async function cleanupStaleAgentState() {
27192
27257
  */
27193
27258
  async function cleanupAbandonedFeedback() {
27194
27259
  const actions = [];
27195
- const { getReviewStatusSync } = await import("./review-status-CG0iDuWa.js");
27196
- const { clearFeedbackFiles } = await import("./feedback-writer-BsJiw5aT.js");
27260
+ const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27261
+ const { clearFeedbackFiles } = await import("./feedback-writer-CULeOOY4.js");
27197
27262
  for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
27198
27263
  const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
27199
27264
  if (!existsSync(panFeedbackDir)) continue;
@@ -27264,7 +27329,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
27264
27329
  if (!issueId) return null;
27265
27330
  const agentSession = `agent-${issueId.toLowerCase()}`;
27266
27331
  if (sessions.includes(agentSession)) return null;
27267
- const { getReviewStatusSync } = await import("./review-status-CG0iDuWa.js");
27332
+ const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27268
27333
  try {
27269
27334
  if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
27270
27335
  } catch {}
@@ -27343,9 +27408,9 @@ async function checkOrphanedCompletions() {
27343
27408
  const issueLower = issueId.toLowerCase();
27344
27409
  const workspacePath = findWorkspacePath(resolved.projectPath, issueLower);
27345
27410
  if (!workspacePath || !existsSync(workspacePath)) continue;
27346
- const beadResult = await Effect.runPromise(queryBeadsForIssue(workspacePath, issueId));
27347
- if (beadResult.transientFailure || beadResult.beads.length === 0) continue;
27348
- 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;
27349
27414
  const { stdout } = await execAsync(`gh pr list --head feature/${issueLower} --state open --json url --jq '.[0].url'`, {
27350
27415
  encoding: "utf-8",
27351
27416
  timeout: 15e3
@@ -27356,10 +27421,12 @@ async function checkOrphanedCompletions() {
27356
27421
  reviewRequestedAt: now,
27357
27422
  prUrl
27358
27423
  });
27359
- await withIssueRecordLock(issueId, async () => {
27360
- const nextRecord = ensureIssueRecordSync(project, issueId);
27361
- nextRecord.pipeline.panDoneRecoveredAt = now;
27362
- writeIssueRecordSync(project, issueId, nextRecord);
27424
+ await updateIssueRecord(project, issueId, (nextRecord) => {
27425
+ Object.assign(nextRecord.pipeline, {
27426
+ reviewRequestedAt: now,
27427
+ prUrl,
27428
+ panDoneRecoveredAt: now
27429
+ });
27363
27430
  });
27364
27431
  const action = `checkOrphanedCompletions: recovered ${issueId} (PR open but review never dispatched)`;
27365
27432
  logDeaconEventSync(action);
@@ -27384,7 +27451,7 @@ async function checkOrphanedCompletions() {
27384
27451
  async function checkPendingTestDispatch() {
27385
27452
  const actions = [];
27386
27453
  try {
27387
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CG0iDuWa.js");
27454
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27388
27455
  const statuses = loadReviewStatuses();
27389
27456
  const now = Date.now();
27390
27457
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -27417,7 +27484,7 @@ async function checkPendingTestDispatch() {
27417
27484
  console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
27418
27485
  continue;
27419
27486
  }
27420
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
27487
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27421
27488
  const resolved = resolveProjectFromIssueSync(issueId);
27422
27489
  if (!resolved) continue;
27423
27490
  const issueLower = issueId.toLowerCase();
@@ -27432,8 +27499,8 @@ async function checkPendingTestDispatch() {
27432
27499
  logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
27433
27500
  continue;
27434
27501
  }
27435
- const { spawnRun } = await import("./agents-CEcaxSkR.js");
27436
- const { buildTestRolePrompt } = await import("./test-agent-queue-CnuYku4B.js");
27502
+ const { spawnRun } = await import("./agents-BA15AQqo.js");
27503
+ const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
27437
27504
  try {
27438
27505
  const run = await spawnRun(issueId, "test", {
27439
27506
  workspace,
@@ -27556,7 +27623,7 @@ async function checkCompletedButUnsignaledTests() {
27556
27623
  const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
27557
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.`;
27558
27625
  try {
27559
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
27626
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
27560
27627
  await messageAgent(testSession, nudge);
27561
27628
  unsignaledTestNudges.set(testSession, now);
27562
27629
  const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
@@ -27570,7 +27637,7 @@ async function checkCompletedButUnsignaledTests() {
27570
27637
  case "nudge-write": {
27571
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.`;
27572
27639
  try {
27573
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
27640
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
27574
27641
  await messageAgent(testSession, nudge);
27575
27642
  unsignaledTestNudges.set(testSession, now);
27576
27643
  const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
@@ -27593,8 +27660,8 @@ async function checkCompletedButUnsignaledTests() {
27593
27660
  async function checkVerificationReviewContradiction() {
27594
27661
  const actions = [];
27595
27662
  try {
27596
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CG0iDuWa.js");
27597
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
27663
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
27664
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27598
27665
  const statuses = loadReviewStatuses();
27599
27666
  for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
27600
27667
  let reviewedAtCommit;
@@ -27643,7 +27710,7 @@ async function checkPostReviewCommits() {
27643
27710
  const actions = [];
27644
27711
  try {
27645
27712
  const statuses = loadReviewStatuses();
27646
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
27713
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27647
27714
  for (const [issueId, status] of Object.entries(statuses)) {
27648
27715
  if (status.mergeStatus === "merged") continue;
27649
27716
  if (!status.reviewedAtCommit) continue;
@@ -27698,7 +27765,7 @@ async function checkPostReviewCommits() {
27698
27765
  actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
27699
27766
  logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
27700
27767
  } else if (freshStatus?.reviewStatus === "pending") {
27701
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
27768
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
27702
27769
  const branch = `feature/${issueId.toLowerCase()}`;
27703
27770
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
27704
27771
  issueId,
@@ -27798,7 +27865,7 @@ async function checkReadyForMergeStuck() {
27798
27865
  const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
27799
27866
  const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
27800
27867
  async function reconcileTestStatusFromGreenCi() {
27801
- const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
27868
+ const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
27802
27869
  return reconcileTestStatusFromGreenCiWithDeps({
27803
27870
  isGitHubAppConfigured,
27804
27871
  loadReviewStatuses,
@@ -27819,7 +27886,7 @@ async function reconcileTestStatusFromGreenCi() {
27819
27886
  */
27820
27887
  async function clearStaleCiFeedback(issueId) {
27821
27888
  const { readdir, rm } = await import("fs/promises");
27822
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
27889
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
27823
27890
  const projectConfig = resolveProjectFromIssueSync(issueId);
27824
27891
  if (!projectConfig) return;
27825
27892
  const repoDir = projectConfig.projectPath;
@@ -27875,7 +27942,7 @@ async function checkDeadEndAgents() {
27875
27942
  const autoRequeueCount = status.autoRequeueCount || 0;
27876
27943
  if (autoRequeueCount >= 25) {
27877
27944
  console.log(`[deacon] Dead-end detected for ${key} but circuit breaker active (${autoRequeueCount}/25 requeues used)`);
27878
- 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`);
27879
27946
  if (trip) actions.push(trip);
27880
27947
  continue;
27881
27948
  }
@@ -27896,7 +27963,7 @@ async function checkDeadEndAgents() {
27896
27963
  const gateDecision = decideAgentAutonomousRedrive(agentState ?? {}, getAgentDir(agentSessionName), true);
27897
27964
  if (gateDecision.decision === "defer") {
27898
27965
  console.log(`[deacon] PAN-2209: ${issueId} (${statusType}) re-drive deferred — ${gateDecision.reason}`);
27899
- 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`);
27900
27967
  if (trip) actions.push(trip);
27901
27968
  } else {
27902
27969
  if (gateDecision.gateDecision.clearStoppedByUser && agentState) {
@@ -28119,7 +28186,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
28119
28186
  }
28120
28187
  }
28121
28188
  try {
28122
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
28189
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28123
28190
  const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
28124
28191
  if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
28125
28192
  } catch {}
@@ -28168,8 +28235,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
28168
28235
  async function checkMergedWorkSessions() {
28169
28236
  const actions = [];
28170
28237
  try {
28171
- const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-DnDQ7pf9.js");
28172
- const { setAgentPaused } = await import("./agents-CEcaxSkR.js");
28238
+ const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
28239
+ const { setAgentPaused } = await import("./agents-BA15AQqo.js");
28173
28240
  const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
28174
28241
  for (const session of toKill) try {
28175
28242
  await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
@@ -28209,7 +28276,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
28209
28276
  async function checkAwaitingTestWorkSessions() {
28210
28277
  const actions = [];
28211
28278
  try {
28212
- const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-DnDQ7pf9.js");
28279
+ const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
28213
28280
  const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
28214
28281
  const now = Date.now();
28215
28282
  for (const session of candidates) {
@@ -28262,10 +28329,14 @@ async function runPatrol() {
28262
28329
  hasLoggedGlobalPauseSkip = false;
28263
28330
  addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
28264
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
+ }
28265
28336
  const stuckRemediationActions = await checkStuckAgentRemediation();
28266
28337
  actions.push(...stuckRemediationActions);
28267
28338
  for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
28268
- const { reconcileInFlightJournals } = await import("./advancing-selfheal-DJYAvGv-.js");
28339
+ const { reconcileInFlightJournals } = await import("./advancing-selfheal-DgwQgm4D.js");
28269
28340
  const reconciledJournalActions = await reconcileInFlightJournals();
28270
28341
  actions.push(...reconciledJournalActions);
28271
28342
  for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
@@ -28277,7 +28348,7 @@ async function runPatrol() {
28277
28348
  const age = Date.now() - (pending.timestamp ?? 0);
28278
28349
  if (age < 3600 * 1e3) {
28279
28350
  console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
28280
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
28351
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
28281
28352
  const { unlinkSync } = await import("fs");
28282
28353
  unlinkSync(pendingFile);
28283
28354
  await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
@@ -28322,7 +28393,7 @@ async function runPatrol() {
28322
28393
  actions.push(...suspendActions);
28323
28394
  for (const a of suspendActions) addLog("action", a, state.patrolCycle);
28324
28395
  try {
28325
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
28396
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28326
28397
  const allStatuses = loadReviewStatuses();
28327
28398
  for (const [issueId, status] of Object.entries(allStatuses)) {
28328
28399
  if (!status.readyForMerge || status.mergeStatus === "merged") continue;
@@ -28342,7 +28413,7 @@ async function runPatrol() {
28342
28413
  } catch (err) {
28343
28414
  console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
28344
28415
  }
28345
- const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DJYAvGv-.js");
28416
+ const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DgwQgm4D.js");
28346
28417
  const reapedWorkActions = await checkMergedWorkSessions();
28347
28418
  actions.push(...reapedWorkActions);
28348
28419
  for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
@@ -28350,7 +28421,7 @@ async function runPatrol() {
28350
28421
  actions.push(...reapedMergedAdvancingActions);
28351
28422
  for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
28352
28423
  try {
28353
- const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-PhXGGFQy.js");
28424
+ const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
28354
28425
  const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
28355
28426
  actions.push(...remoteCredentialActions);
28356
28427
  for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -28358,7 +28429,7 @@ async function runPatrol() {
28358
28429
  addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
28359
28430
  }
28360
28431
  try {
28361
- const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-Cv-U-_V8.js");
28432
+ const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DYY5fFpd.js");
28362
28433
  const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
28363
28434
  actions.push(...heartbeatActions);
28364
28435
  for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -28366,7 +28437,7 @@ async function runPatrol() {
28366
28437
  addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
28367
28438
  }
28368
28439
  try {
28369
- const { reapCompletedRemoteAgents } = await import("./remote-completion-PhXGGFQy.js");
28440
+ const { reapCompletedRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
28370
28441
  const remoteReap = await reapCompletedRemoteAgents();
28371
28442
  for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
28372
28443
  const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
@@ -28547,7 +28618,7 @@ async function runPatrol() {
28547
28618
  const issueId = runtimeState.currentIssue;
28548
28619
  try {
28549
28620
  if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
28550
- const { resolveProjectFromIssueSync } = await import("./projects-CrBE6IhN.js");
28621
+ const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
28551
28622
  const resolved = resolveProjectFromIssueSync(issueId);
28552
28623
  if (resolved) {
28553
28624
  const branch = `feature/${issueId.toLowerCase()}`;
@@ -28561,7 +28632,7 @@ async function runPatrol() {
28561
28632
  mergeStatus: "merged",
28562
28633
  readyForMerge: false
28563
28634
  });
28564
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
28635
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
28565
28636
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
28566
28637
  actions.push(`Auto-completed stale merge for ${issueId}`);
28567
28638
  } else {
@@ -28741,7 +28812,7 @@ function startDeacon() {
28741
28812
  logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
28742
28813
  (async () => {
28743
28814
  await reconcileAgentLiveness();
28744
- const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DJYAvGv-.js");
28815
+ const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DgwQgm4D.js");
28745
28816
  await runBootAdvancingSelfHeal();
28746
28817
  runScheduledPatrol("startup");
28747
28818
  })().catch((err) => {
@@ -28811,6 +28882,6 @@ function assessDeaconPatrolFreshness(params) {
28811
28882
  };
28812
28883
  }
28813
28884
  //#endregion
28814
- 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 };
28815
28886
 
28816
- //# sourceMappingURL=deacon-DdARMjZq.js.map
28887
+ //# sourceMappingURL=deacon-Dru5onpk.js.map