@overdeck/desktop 0.45.7 → 0.45.8

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 (303) hide show
  1. package/package.json +10 -3
  2. package/server/{acceptance-criteria-DYffaKI9.js → acceptance-criteria-l0DSvFFS.js} +2 -2
  3. package/server/{activity-logger-DO27GsPa.js → activity-logger-DvYvFhwZ.js} +1 -1
  4. package/server/{activity-logger-Dm95Ua07.js → activity-logger-pcbf-e30.js} +3 -2
  5. package/server/{advancing-selfheal-n8tAeFwE.js → advancing-selfheal-CMlGznKv.js} +11 -66
  6. package/server/{agent-gc-CIFaa2vJ.js → agent-gc-BtAzj8QN.js} +3 -3
  7. package/server/{agent-state-service-BqVDA9b8.js → agent-state-service-5ge9xxhx.js} +5 -5
  8. package/server/{agent-state-service-CLifyinO.js → agent-state-service-C1iUF9Ft.js} +1 -1
  9. package/server/agent-state-xk_G8t90.js +3 -0
  10. package/server/{agents-KaEsWZ8D.js → agents-BIggLvi_.js} +1 -1
  11. package/server/{agents-D_x5BSZM.js → agents-DHvsjsuP.js} +129 -61
  12. package/server/{archive-planning-CFxmeFKh.js → archive-planning-B4Qi02bk.js} +1 -1
  13. package/server/{archive-planning-DVUXlRBs.js → archive-planning-zTvWWHG_.js} +4 -4
  14. package/server/{artifact-index-jobs-ChUgzZah.js → artifact-index-jobs-BrByqVkB.js} +2 -2
  15. package/server/{auto-commit-2KiBFh-K.js → auto-commit-DoIPFoEs.js} +1 -1
  16. package/server/{backlog-auto-trigger-DoTEMZMl.js → backlog-auto-trigger-COm_R96V.js} +3 -3
  17. package/server/{bd-mutex-CE6P_MlD.js → bd-mutex-BItGvLQ8.js} +2 -2
  18. package/server/{bd-process-lock-Ch3WNHS9.js → bd-process-lock-CJkoG7hW.js} +2 -2
  19. package/server/{beads-B43pgBIy.js → beads-AmCXEv_E.js} +1 -1
  20. package/server/{beads-BugPvtWp.js → beads-DlZm-vrG.js} +5 -5
  21. package/server/{beads-query-CtqWakL6.js → beads-query-BrVNWoSL.js} +2 -2
  22. package/server/{beads-restore-BqTMSQi-.js → beads-restore-CMbDSB5R.js} +1 -1
  23. package/server/{behavior-vk1sixby.js → behavior-By-2Wipv.js} +3 -3
  24. package/server/{briefing-freshness-B3YxHQ-L.js → briefing-freshness-CXhZdnB8.js} +4 -4
  25. package/server/{checkpoint-manager-CdrwLsQh.js → checkpoint-manager-CPw51H2n.js} +1 -1
  26. package/server/{checkpoint-manager-Dg6cWZz3.js → checkpoint-manager-CfNpHOp4.js} +11 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-DDd-0doa.js → checkpoints-BbfH1EIy.js} +2 -2
  29. package/server/{checkpoints-dBCJr0dC.js → checkpoints-BjlBWOA8.js} +1 -1
  30. package/server/{claude-permissions-BpwIcIR7.js → claude-permissions-DrRAs_0F.js} +3 -3
  31. package/server/{claude-settings-overlay-DnraWcz6.js → claude-settings-overlay-BSeS7Ki3.js} +2 -2
  32. package/server/{claude-settings-overlay-xD_Vu420.js → claude-settings-overlay-CEWlIFL-.js} +1 -1
  33. package/server/cli-CJDWXE_Y.js +3 -0
  34. package/server/{cli-BmzYZZKi.js → cli-CvK9xuSS.js} +9 -9
  35. package/server/{cliproxy-DYWdJKZ1.js → cliproxy-BOcmOK6l.js} +1 -1
  36. package/server/{cliproxy-CE2GDY7x.js → cliproxy-J-_1iIXe.js} +2 -2
  37. package/server/{close-issue-CpJd4SOL.js → close-issue-BnpErnD1.js} +5 -5
  38. package/server/{closed-issue-reaper-QpcvCDeE.js → closed-issue-reaper-BLCQwTpF.js} +1 -1
  39. package/server/{closed-issue-reaper-DubXY9Zg.js → closed-issue-reaper-DRqK5k39.js} +10 -10
  40. package/server/{codex-j8aVgRou.js → codex-BUZjrnqH.js} +1 -1
  41. package/server/{codex-B3J1TXo7.js → codex-DcInrhok.js} +5 -5
  42. package/server/{compact-beads-CqhLqG-k.js → compact-beads-RFwdZFPA.js} +4 -4
  43. package/server/{compact-beads-BeilHCdj.js → compact-beads-omhUgj5b.js} +1 -1
  44. package/server/{config-DHU0j_pS.js → config-CzcWQ24p.js} +1 -1
  45. package/server/{config-DkEhJM0h.js → config-oWoKf5jO.js} +4 -4
  46. package/server/{config-yaml-DbdN9Fuq.js → config-yaml-DPAieL_G.js} +3 -2
  47. package/server/{conflict-gate-CgOtMo8i.js → conflict-gate-BhKvrPxn.js} +4 -4
  48. package/server/{conflict-gate-D00zFjeu.js → conflict-gate-JdFuhKuF.js} +1 -1
  49. package/server/{context-layers-BHEjT8Cn.js → context-layers-CTjQwcEQ.js} +3 -3
  50. package/server/{context-layers-0Lgq-SE_.js → context-layers-DxKsseHI.js} +2 -2
  51. package/server/{control-settings-CYv732Gs.js → control-settings-BMqUkXmR.js} +4 -4
  52. package/server/{conversation-compaction-Dbw03b-X.js → conversation-compaction-Ba5aZdrb.js} +1 -1
  53. package/server/{conversation-compaction-DKXvmX50.js → conversation-compaction-C5o_eKEm.js} +8 -8
  54. package/server/{conversation-service-BwKUeEvn.js → conversation-service-DvG8vZSV.js} +5 -5
  55. package/server/{conversation-service-kYYeRp9B.js → conversation-service-WKl-sw58.js} +1 -1
  56. package/server/{conversations-Dwr1jHrO.js → conversations-DL_BAWVk.js} +4 -4
  57. package/server/{conversations-D-uOnA8T.js → conversations-Dcx6LeIh.js} +1 -1
  58. package/server/{cost-DiSDkYe7.js → cost-C2CuA66z.js} +2 -2
  59. package/server/{cost-DNIyZH1X.js → cost-DaOG8sUB.js} +3 -3
  60. package/server/{cost-sync-CfXu-3TF.js → cost-sync-8lkDeL9g.js} +3 -3
  61. package/server/{dag-DZBowTd2.js → dag-jH8ZkewR.js} +3 -3
  62. package/server/{dangerous-git-ops-Pongxg2d.js → dangerous-git-ops-Dcw7PbYo.js} +1 -1
  63. package/server/dashboard-db-worker.js +6 -6
  64. package/server/{deacon-DT0BsVyE.js → deacon-Cv2RMfHs.js} +3 -3
  65. package/server/{deacon-f0yvsG5S.js → deacon-j3qSZ7--.js} +222 -110
  66. package/server/{deacon-nudge-log-Cmcch2Av.js → deacon-nudge-log-CJGA6aSQ.js} +1 -1
  67. package/server/deacon-swarm-D1iAUX-P.js +2 -0
  68. package/server/{deacon-swarm-BBGnhvD2.js → deacon-swarm-DadWNi5J.js} +88 -43
  69. package/server/deacon.js +8 -8
  70. package/server/{devcontainer-renderer-Cpz7XBj0.js → devcontainer-renderer-DUJYYRQB.js} +3 -3
  71. package/server/{dist-DypOkJv9.js → dist-BIC8spJ0.js} +1 -1
  72. package/server/dist-BUplB3Od.js +3 -0
  73. package/server/{docker-DARVx0OZ.js → docker-Q4bphryk.js} +2 -2
  74. package/server/{ensure-devcontainer-Dmdw4BxF.js → ensure-devcontainer-BCB6fHp9.js} +1 -1
  75. package/server/{ensure-devcontainer-BJssuBG6.js → ensure-devcontainer-XLL0vtgV.js} +4 -4
  76. package/server/{esm-shims-Crmvo9Ln.js → esm-shims-DiV9jHa_.js} +1 -1
  77. package/server/{event-store-BeEE8pW5.js → event-store-DIk9wvnS.js} +1 -1
  78. package/server/{event-store-DrfTJZ1_.js → event-store-DTJXZjCl.js} +4 -4
  79. package/server/events-BlzVUyTx.js +3 -0
  80. package/server/{events-BbClwoM-.js → events-DGWZzye2.js} +4 -4
  81. package/server/{factory-DVv9cpG5.js → factory-rG4T40su.js} +4 -4
  82. package/server/{feature-registry-population-C6eVdq4J.js → feature-registry-population-Dwyj9gEM.js} +4 -4
  83. package/server/{feature-registry-storage-ByBosRId.js → feature-registry-storage-CnGyNgAq.js} +2 -2
  84. package/server/{features-EZfSwuqq.js → features-CYY2_Eeh.js} +2 -2
  85. package/server/{feedback-target-DENaINE6.js → feedback-target-C4DaDSZ8.js} +1 -1
  86. package/server/{feedback-target-Dv4VnbQl.js → feedback-target-oE4-Esxl.js} +48 -17
  87. package/server/{feedback-writer-Dxg8qM8i.js → feedback-writer-DMaO0XXa.js} +4 -4
  88. package/server/{feedback-writer-BvHE1I-3.js → feedback-writer-thrdxYpK.js} +1 -1
  89. package/server/{flywheel-Akbd9VNM.js → flywheel-BqDdGvrQ.js} +1 -1
  90. package/server/{flywheel-B4KN9BmW.js → flywheel-ClMjGW_u.js} +11 -11
  91. package/server/{flywheel-ByZyAv3P.js → flywheel-DefHRzY4.js} +13 -13
  92. package/server/{flywheel-merge-order-DPFZbt-w.js → flywheel-merge-order-B6YDSElh.js} +1 -1
  93. package/server/{flywheel-merge-order-BYUPxqgx.js → flywheel-merge-order-CuDcqTRJ.js} +7 -7
  94. package/server/forge-BfP7OJwK.js +2 -0
  95. package/server/{forge-BnTExkbK.js → forge-BixzckB0.js} +2 -2
  96. package/server/{from-B2i_NgIH.js → from-D4xmArTA.js} +1 -1
  97. package/server/{fts-db-dnCj-PD3.js → fts-db-DPtxOAjp.js} +2 -2
  98. package/server/{fts-operations-CAAofsTQ.js → fts-operations-VrGjsT0w.js} +2 -2
  99. package/server/{git-utils-CB3gDSM-.js → git-utils-D_cax3fD.js} +2 -2
  100. package/server/{git-utils-Bk7sJZru.js → git-utils-RAmTwjFB.js} +1 -1
  101. package/server/{github-app-CIhMNI4C.js → github-app-B5PDHMyn.js} +1 -1
  102. package/server/{github-app-BIU8a93o.js → github-app-FMXgo3vK.js} +2 -2
  103. package/server/{github-client-DmZgsnYP.js → github-client-VRiB6N-4.js} +1 -1
  104. package/server/{github-client-zREpj5HA.js → github-client-yjbXaqpR.js} +2 -2
  105. package/server/{github-pr-lookup-CPri6JR1.js → github-pr-lookup-t8X8R0c0.js} +2 -2
  106. package/server/{harness-resolve-TzYAiXzZ.js → harness-resolve-DKeSVsJL.js} +3 -3
  107. package/server/{health-events-CDWk8Oz4.js → health-events-CD6q47ub.js} +1 -1
  108. package/server/{health-events-Dd0FuKrE.js → health-events-DaLX4-0a.js} +2 -2
  109. package/server/{hooks-C6HBXlVm.js → hooks-CmHFSj_Z.js} +2 -2
  110. package/server/{hooks-DRLzoFof.js → hooks-D-cbMUzQ.js} +1 -1
  111. package/server/{hume-Bb91r_2I.js → hume-DkVOs1Qi.js} +2 -2
  112. package/server/hume-x9voULey.js +3 -0
  113. package/server/{idle-stack-reaper-BPHnItVj.js → idle-stack-reaper-DBKQ9SKu.js} +3 -3
  114. package/server/{idle-stack-reaper-D5bwmuwX.js → idle-stack-reaper-DdnERp3G.js} +1 -1
  115. package/server/{infra-CCTzpcuJ.js → infra-CpKlYZA9.js} +3 -3
  116. package/server/{injection-D6L7D_w0.js → injection-CszhePD2.js} +7 -7
  117. package/server/{injection-CBrN8UxB.js → injection-DKzL2Axk.js} +1 -1
  118. package/server/{inspect-agent-CSYyFWqP.js → inspect-agent-BKKc0XnB.js} +9 -9
  119. package/server/inspect-agent-vm88mLYr.js +2 -0
  120. package/server/{internal-token-DWhBqgIk.js → internal-token-CQUx9YLc.js} +2 -2
  121. package/server/{internal-token-DCrCAG_M.js → internal-token-DrGdpLFo.js} +1 -1
  122. package/server/{io-DtAQ_2hp.js → io-Wy8YpFeP.js} +2 -2
  123. package/server/{issue-closed-0Zx72zXf.js → issue-closed-BO84g03t.js} +4 -4
  124. package/server/{issue-lifecycle-ZTt6kP_K.js → issue-lifecycle-DnhQgddB.js} +22 -22
  125. package/server/{issue-lifecycle-CJ7-D4XX.js → issue-lifecycle-nY4esZn8.js} +1 -1
  126. package/server/{issue-service-singleton-DNh4RRI7.js → issue-service-singleton-Bnqv1uaa.js} +1 -1
  127. package/server/{issue-service-singleton-DRE7S-Zg.js → issue-service-singleton-_AquSBTl.js} +8 -8
  128. package/server/{issues-CGc8Aaxm.js → issues-ChNcfHta.js} +2 -2
  129. package/server/{label-cleanup-CNsPlXy6.js → label-cleanup-bVXCGWBM.js} +3 -3
  130. package/server/{layers-CO_VLcSv.js → layers-vdvlpFki.js} +2 -2
  131. package/server/{lifecycle-B_NFvTj9.js → lifecycle-CGKm7doE.js} +7 -7
  132. package/server/{lifecycle-io-D0FftBLy.js → lifecycle-io-CdqPkCyk.js} +1 -1
  133. package/server/{lifecycle-io-WDGwa1vV.js → lifecycle-io-DSrv9xGh.js} +4 -4
  134. package/server/{linear-client-MvjflCXs.js → linear-client-BxKvL6U8.js} +1 -1
  135. package/server/{linear-client-CSgH24Ym.js → linear-client-E0HdXtWs.js} +2 -2
  136. package/server/memory-fts-worker.js +1 -1
  137. package/server/{merge-DltB-RGV.js → merge-D3wEbmUJ.js} +1 -1
  138. package/server/{merge-Ce9DHBXM.js → merge-UlAwCk80.js} +4 -4
  139. package/server/{merge-agent-Rv0bNQNU.js → merge-agent-BcgAYStl.js} +27 -27
  140. package/server/{merge-agent-DRXwKxmb.js → merge-agent-Dh8Y9PDO.js} +1 -1
  141. package/server/{merge-batch-LLp_cXUR.js → merge-batch-BwhGdlh4.js} +1 -1
  142. package/server/{merge-blockers-BqYUtLBd.js → merge-blockers-DwdQNsYD.js} +2 -2
  143. package/server/merge-ops-QdBiQ8XB.js +2 -0
  144. package/server/{merge-rebase-AiSEs4QB.js → merge-rebase-CH12_ufi.js} +2 -2
  145. package/server/{merge-set-CUY9msG9.js → merge-set-TRxJwR-w.js} +3 -3
  146. package/server/{merge-set-CSJoIpKB.js → merge-set-rXK3ehnB.js} +1 -1
  147. package/server/{merge-sync-CAjbJeTp.js → merge-sync-BKLKu9kz.js} +1 -1
  148. package/server/{merge-sync-CuyWzzZK.js → merge-sync-CaLRt2cB.js} +2 -2
  149. package/server/{merge-train-DndZCAiv.js → merge-train-DmxlYbEo.js} +3 -3
  150. package/server/{merge-train-deps-Bsy90Q7t.js → merge-train-deps-DBHsOWt9.js} +4 -4
  151. package/server/{merge-verification-Kvh4WViS.js → merge-verification-DA9rvqsE.js} +4 -4
  152. package/server/{multipart-parser-BWnfyoyz.js → multipart-parser-DtIEUW2B.js} +2 -2
  153. package/server/{no-resume-mode-CKy2bwZL.js → no-resume-mode-yrPEQ_pC.js} +1 -1
  154. package/server/{orphan-proposed-reconciler-Cg5_uVy1.js → orphan-proposed-reconciler-Db8tUhce.js} +10 -10
  155. package/server/{orphan-proposed-reconciler-CjUuBs6J.js → orphan-proposed-reconciler-mXV--tcB.js} +1 -1
  156. package/server/{pan-dir-Cn3NUnxU.js → pan-dir-BgBeeZDX.js} +3 -3
  157. package/server/{paths-Bo-kA9ta.js → paths-TE1GOZDr.js} +2 -2
  158. package/server/{pickup-DRn-XNXS.js → pickup-KLRUhThD.js} +1 -1
  159. package/server/{pipeline-notifier-BbGQtvKM.js → pipeline-notifier-aX_5EqQO.js} +2 -2
  160. package/server/{pipeline-notifier-DQsOtdjZ.js → pipeline-notifier-lwMa--Gz.js} +1 -1
  161. package/server/{projects-CKTA6Klk.js → projects-BNmVxnNt.js} +1 -1
  162. package/server/{prompts-CVncQg4P.js → prompts-CelsUdrx.js} +2 -2
  163. package/server/{providers-uPI9uU7Q.js → providers-4-xOzHQu.js} +7 -7
  164. package/server/{providers-CapuDkKX.js → providers-BOnRq5XK.js} +1 -1
  165. package/server/public/assets/{chunk-BO2N2NFS-CaAvtgHW.js → chunk-BO2N2NFS-jJsbVwoD.js} +4 -4
  166. package/server/public/assets/{diagram-OG6HWLK6-C4flU2X9.js → diagram-OG6HWLK6-Cp1aNi3v.js} +1 -1
  167. package/server/public/assets/{dist-DXAnG2e9.js → dist-B2-Oc7J1.js} +1 -1
  168. package/server/public/assets/{dist-DygIHsen.js → dist-Dbb8vdyE.js} +3 -3
  169. package/server/public/assets/{ganttDiagram-6RSMTGT7-BJY25etK.js → ganttDiagram-6RSMTGT7-rujV2mSn.js} +1 -1
  170. package/server/public/assets/{highlighted-body-OFNGDK62-DIEQLSG_.js → highlighted-body-OFNGDK62-Df3Exbbt.js} +1 -1
  171. package/server/public/assets/{index-BsKNi2y5.js → index-rQPa7qlV.js} +88 -88
  172. package/server/public/assets/{linear-CRa2o9KP.js → linear-Ctp3LAJ5.js} +1 -1
  173. package/server/public/assets/mermaid-GHXKKRXX-BnC2HrDq.js +1 -0
  174. package/server/public/assets/{pieDiagram-4H26LBE5-Cb6OrK_c.js → pieDiagram-4H26LBE5-K-m6VCum.js} +1 -1
  175. package/server/public/assets/{prod-DWpuiL-y.js → prod-jqZ3zqVg.js} +4 -4
  176. package/server/public/assets/{quadrantDiagram-W4KKPZXB-DhZzzcAO.js → quadrantDiagram-W4KKPZXB-DXcFax_1.js} +1 -1
  177. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CVe6lE5A.js → sankeyDiagram-5OEKKPKP-DnD_J_rB.js} +1 -1
  178. package/server/public/assets/{xychartDiagram-2RQKCTM6-zukUz5pI.js → xychartDiagram-2RQKCTM6-Dx25iKVp.js} +1 -1
  179. package/server/public/index.html +1 -1
  180. package/server/{pull-requests-C3csHJsc.js → pull-requests-CH4iBFLl.js} +3 -3
  181. package/server/{pull-requests-MeAgb3Ax.js → pull-requests-DL_4klIb.js} +1 -1
  182. package/server/{rally-nalS21zz.js → rally-D0mKv2t8.js} +3 -3
  183. package/server/rally-DffLLIdl.js +3 -0
  184. package/server/{rally-api-DzQryQi8.js → rally-api-CcCdecF-.js} +1 -1
  185. package/server/{rally-api-DdY4ebu3.js → rally-api-DgAt6FbN.js} +2 -2
  186. package/server/{rally-client-9duSds1_.js → rally-client-DYjtgTOu.js} +4 -4
  187. package/server/{rally-client-B16-bZk9.js → rally-client-X0bEEN2B.js} +1 -1
  188. package/server/reap-terminal-sessions-BwJb2DLJ.js +3 -0
  189. package/server/{reap-terminal-sessions-C6rD1pDT.js → reap-terminal-sessions-CAmURC2h.js} +12 -62
  190. package/server/{rebuild-stack-D9qBmVcM.js → rebuild-stack-BLG3rlWa.js} +6 -6
  191. package/server/{rebuild-stack-DrWMHxoY.js → rebuild-stack-ByFCMqTK.js} +1 -1
  192. package/server/{reconstruct-cache--H2QBooC.js → reconstruct-cache-_tDZ2D72.js} +6 -6
  193. package/server/{record-fn7uPjsl.js → record-DjPikotp.js} +1 -1
  194. package/server/{remote-BEkHf2HO.js → remote-B1Trmr0N.js} +3 -3
  195. package/server/{remote-Dl6Hn0zz.js → remote-TN0cV8k-.js} +3 -3
  196. package/server/{remote-agents-DNdP4sew.js → remote-agents-CmbIKw7E.js} +5 -5
  197. package/server/{remote-agents-OB4zwVHz.js → remote-agents-DNuaAgU6.js} +1 -1
  198. package/server/{remote-completion-BINc1Y8c.js → remote-completion-Bklh6loJ.js} +12 -12
  199. package/server/resume-DnIsmIgC.js +3 -0
  200. package/server/review-agent-DgySDb-G.js +3 -0
  201. package/server/{review-agent-C-A6IgXc.js → review-agent-phzqNqIs.js} +599 -197
  202. package/server/{review-artifacts-DTTdAYsU.js → review-artifacts-BGc69epg.js} +7 -7
  203. package/server/{review-context-De14xPtc.js → review-context-CCq56O_Y.js} +7 -7
  204. package/server/{review-monitor-BNV3kjLq.js → review-monitor-BKG2ubt5.js} +2 -2
  205. package/server/{review-status-DWAsTqfJ.js → review-status-BQjqQXZG.js} +160 -52
  206. package/server/{review-status-mo3tyc8L.js → review-status-bBkqUj5i.js} +1 -1
  207. package/server/{review-status-enrichment-C6sr9wOI.js → review-status-enrichment-CGlcApSn.js} +3 -3
  208. package/server/{review-status-sync-D-p7TQit.js → review-status-sync-BWHnrq-k.js} +3 -3
  209. package/server/{review-status-sync-MvYGQLDD.js → review-status-sync-BxHBVH8s.js} +1 -1
  210. package/server/{review-verdict-feedback-BbIfN5Vg.js → review-verdict-feedback-cZh9Wi9G.js} +1 -1
  211. package/server/{review-verdict-feedback-Cfc-THvz.js → review-verdict-feedback-wqnikhMK.js} +16 -36
  212. package/server/{rollup-DgWlrSBc.js → rollup-BJE-Vc7H.js} +8 -8
  213. package/server/{rollup-CxR6GMTe.js → rollup-DBNy1yFB.js} +1 -1
  214. package/server/{scanner-6OmIn5XE.js → scanner-CUGpdp4i.js} +7 -7
  215. package/server/{sequence-io-CxiPMMKM.js → sequence-io-B2GmilSI.js} +4 -4
  216. package/server/{sequencer-agent--xPlSfR2.js → sequencer-agent-D8pW2aU_.js} +5 -5
  217. package/server/server.js +166 -162
  218. package/server/{service-CXje28KS.js → service-CILd-uOt.js} +46 -45
  219. package/server/session-fork-DDSDVoIK.js +99 -0
  220. package/server/{settings-ChvoXExM.js → settings-CBrei_kx.js} +2 -2
  221. package/server/{settings-DZq_bi-B.js → settings-D2wt4nku.js} +3 -3
  222. package/server/settings-vLoKyghx.js +2 -0
  223. package/server/{shadow-engineering-BHeyD5bL.js → shadow-engineering-Ba1D0QUN.js} +2 -2
  224. package/server/{shadow-state-p3YTxrJ5.js → shadow-state-BOaq8BrD.js} +1 -1
  225. package/server/{shadow-state-3L0eHQNE.js → shadow-state-DTC7AMHc.js} +2 -2
  226. package/server/{ship-log-B2EEH__n.js → ship-log-CMWH3H5-.js} +1 -1
  227. package/server/{smart-compaction-DRXK5_io.js → smart-compaction-Bgp_gwcA.js} +1 -1
  228. package/server/{smart-compaction-DMB4hv07.js → smart-compaction-CrP90OFE.js} +7 -7
  229. package/server/{spawn-planning-session-BZfVvIi3.js → spawn-planning-session-BmJWHSCu.js} +15 -15
  230. package/server/{spawn-planning-session-BBUzeHJQ.js → spawn-planning-session-D15KbPOy.js} +1 -1
  231. package/server/{specialist-completion-BAZHHbmp.js → specialist-completion-BiEXUHfD.js} +1 -1
  232. package/server/{specialist-context-DgdhI7rm.js → specialist-context-CwKkcXL9.js} +5 -5
  233. package/server/{specialist-handoff-logger-CH1nC8fq.js → specialist-handoff-logger-B_2VsWli.js} +2 -2
  234. package/server/{specialist-logs-DynFhFXg.js → specialist-logs-CvDxquV_.js} +3 -3
  235. package/server/{specialists-LJ9MZMCz.js → specialists-BCjcG4uE.js} +1 -1
  236. package/server/{specialists-BUKBHtmQ.js → specialists-BYi0k8CZ.js} +18 -18
  237. package/server/{specialists-e0Jmecc1.js → specialists-D07ybnam.js} +78 -85
  238. package/server/{specialists-CF02f9p2.js → specialists-F2uMO4QS.js} +1 -1
  239. package/server/specs-DeS98l_p.js +3 -0
  240. package/server/{src-CNLON0co.js → src-BswtmojL.js} +6 -6
  241. package/server/{src-DhJeCV1p.js → src-Dp0WHgDZ.js} +3 -3
  242. package/server/{src-AXK4mjue.js → src-fgbU-jJ-.js} +6 -3
  243. package/server/{stack-health-8jZH0Lgk.js → stack-health-BJVh1TCg.js} +3 -3
  244. package/server/{stack-health-CXYHwv5D.js → stack-health-Deel1mSW.js} +1 -1
  245. package/server/{state-home-XkLSsJCD.js → state-home-Bgj7i-C7.js} +8 -7
  246. package/server/{summary-fork-shfA2XOf.js → summary-fork-DedqguZb.js} +2 -2
  247. package/server/{summary-fork-BWa0ECGL.js → summary-fork-EjvOkEPl.js} +12 -91
  248. package/server/{supervisor-owMkHcx8.js → supervisor-0oXvLwyC.js} +3 -3
  249. package/server/supervisor-D1-XwmZ7.js +2 -0
  250. package/server/{swarm-readiness-BACUsKOx.js → swarm-readiness-OBgamRql.js} +3 -3
  251. package/server/{teardown-workspace-CYt_PBaq.js → teardown-workspace-5LCVbjfq.js} +14 -14
  252. package/server/{test-agent-queue-C1s6mB8C.js → test-agent-queue-qfsq6uaC.js} +6 -6
  253. package/server/{test-verdict-CmxX3KEf.js → test-verdict-BkubHtti.js} +1 -1
  254. package/server/{test-verdict-njEv9ZY2.js → test-verdict-D3Il7cBK.js} +1 -1
  255. package/server/{tldr-daemon-CEUflKr2.js → tldr-daemon-CJW_P4On.js} +2 -2
  256. package/server/{tldr-daemon-HIo0dwDB.js → tldr-daemon-CJqGsDFh.js} +1 -1
  257. package/server/tmux-CeDD14p1.js +3 -0
  258. package/server/{tmux-CBYZ5lKF.js → tmux-ePNhMIMU.js} +2 -2
  259. package/server/{token-CiS3w6Ma.js → token-_qujO3JZ.js} +1 -1
  260. package/server/{tracker-config-CVCoeaaL.js → tracker-config-C3hiPVAM.js} +2 -2
  261. package/server/{tracker-config-Bx50plWp.js → tracker-config-Drt_tx4D.js} +1 -1
  262. package/server/{tracker-utils-C2Lg4RoB.js → tracker-utils-D6B8scEw.js} +1 -1
  263. package/server/{tracker-utils-mI4d-vh8.js → tracker-utils-bpWs7Xyx.js} +2 -2
  264. package/server/{traefik-connect-D21-YEyX.js → traefik-connect-5EP1WS_Z.js} +1 -1
  265. package/server/{tunnel-BK4PVyb0.js → tunnel-3Ve8BS4H.js} +3 -3
  266. package/server/{tunnel-CcHkuRIS.js → tunnel-AporWhoi.js} +1 -1
  267. package/server/{types-DoPMvws2.js → types-B5u3NxMl.js} +1 -1
  268. package/server/{uat-train-BLFPxqLx.js → uat-train-C3hWXtip.js} +1 -1
  269. package/server/{uat-train-CQ_E-2ei.js → uat-train-CtNGgXxj.js} +27 -27
  270. package/server/{validation-Dab3bnSN.js → validation-BmUB-26g.js} +4 -4
  271. package/server/{validation-1QnjDMc0.js → validation-CbqP_dze.js} +1 -1
  272. package/server/{verification-runner-BO8TgZWA.js → verification-runner-BPAhPWR7.js} +11 -11
  273. package/server/{verification-runner-UhAAqOio.js → verification-runner-DuZRHjPU.js} +1 -1
  274. package/server/{vtt-parser-D-q5-8il.js → vtt-parser-CKc-smWM.js} +1 -1
  275. package/server/{work-agent-prompt-D_7T1xw5.js → work-agent-prompt-DCdHsm-V.js} +11 -11
  276. package/server/workflows-Cz8OtiB4.js +2 -0
  277. package/server/{workflows-CB5SWd0B.js → workflows-H-COJ84X.js} +14 -14
  278. package/server/{workspace-C4Avf_Tp.js → workspace-4ZufqeMe.js} +3 -3
  279. package/server/{workspace--XWYPbn1.js → workspace-DYv9kBg6.js} +1 -1
  280. package/server/{workspace-config-BwJB-bLH.js → workspace-config-DA8U97k9.js} +1 -1
  281. package/server/{workspace-manager-_6zbrhNF.js → workspace-manager-B3PqQQSM.js} +1 -1
  282. package/server/{workspace-manager-BE3OznLY.js → workspace-manager-CEWK-OXd.js} +12 -12
  283. package/server/{workspace-metadata-BCgODi1j.js → workspace-metadata-1eu1RvAT.js} +2 -2
  284. package/server/{workspace-metadata-wKPgY8PN.js → workspace-metadata-C0I-nIDL.js} +1 -1
  285. package/server/{workspaces-DpMiZ9BP.js → workspaces-CRU9_vRn.js} +154 -106
  286. package/server/agent-state-DTZCqWx5.js +0 -3
  287. package/server/cli-wyiCmp7b.js +0 -3
  288. package/server/deacon-swarm-jDiQ0kKk.js +0 -2
  289. package/server/dist-CnkaBMG-.js +0 -3
  290. package/server/forge-D2QLGWK9.js +0 -2
  291. package/server/hume-sCsuupWb.js +0 -3
  292. package/server/inspect-agent-DnspoIls.js +0 -2
  293. package/server/merge-ops-B6xc_Irj.js +0 -2
  294. package/server/public/assets/mermaid-GHXKKRXX-uIkd-n0c.js +0 -1
  295. package/server/rally-BJiyvz3w.js +0 -3
  296. package/server/reap-terminal-sessions-mW7SPDtP.js +0 -2
  297. package/server/resume-Pur3Z2e8.js +0 -3
  298. package/server/review-agent-BRSSFv7e.js +0 -3
  299. package/server/settings-D0XXIUQ0.js +0 -2
  300. package/server/specs-COn3zZ2Q.js +0 -3
  301. package/server/supervisor-DwGIhpXk.js +0 -2
  302. package/server/tmux-DNmHGMEv.js +0 -3
  303. package/server/workflows-Plo_VxeO.js +0 -2
@@ -1,40 +1,40 @@
1
1
  import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Gr as sessionFilePath, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Nt as readIssueRecordSync, Or as OVERDECK_HOME, Ot as init_record, St as ensureIssueRecordSync, Vr as init_paths, an as queueBeadsAutoCommit, cn as getMainDivergence, cr as FsError, dn as isStatePlanePath, er as init_issue_id, f as loadConfigSync, hr as TmuxError, ln as init_state_plane, rn as init_auto_commit, s as init_load, sn as STATE_PLANE_PATHS, vr as init_errors, wn as getIssuePrefix, yr as AGENTS_DIR, zt as writeIssueRecordSync } from "./config-yaml-DbdN9Fuq.js";
3
- import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-Dm95Ua07.js";
4
- import { C as isPaneDead, D as listPaneValuesSync, E as listPaneValues, F as sendKeysAsync, L as sessionExists, O as listSessionNames, P as sendKeys, R as sessionExistsSync, T as killSessionSync, i as capturePane, k as listSessions, w as killSession, x as init_tmux } from "./tmux-CBYZ5lKF.js";
5
- import { a as init_event_store, i as initEventStore } from "./event-store-DrfTJZ1_.js";
6
- import { n as CLAUDE_CODE_BEHAVIOR } from "./src-AXK4mjue.js";
7
- 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-DWAsTqfJ.js";
8
- import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-B3YxHQ-L.js";
9
- import { An as getAgentDir, B as createOhmypiRuntimeSync, 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, Hn as markAgentTroubled, 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, U as spawnAgent, Un as recordAgentFailure, V as init_ohmypi, X as listAgentStates, Xn as setAgentPausedSync, Y as init_queries, Z as listRunningAgents, Zn as setAgentYieldedSync, _t as init_config, at as init_concurrency, cn as determineModel, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, en as init_pi_fifo, er as init_persistent_logger, et as countRunningAgents, gn as buildDefaultResumeContinueMessage, gr as saveAgentRuntimeState, hr as init_runtime_state, ht as DEFAULT_CLOISTER_CONFIG, it as getConcurrencyLimits, j as messageAgent, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, nr as logDeaconEventSync, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, tr as logAgentLifecycleSync, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-D_x5BSZM.js";
10
- import { t as init_behavior } from "./behavior-vk1sixby.js";
11
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-CVCoeaaL.js";
12
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-mI4d-vh8.js";
2
+ import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Gr as sessionFilePath, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Nt as readIssueRecordSync, Or as OVERDECK_HOME, Ot as init_record, St as ensureIssueRecordSync, Vr as init_paths, an as queueBeadsAutoCommit, cn as getMainDivergence, cr as FsError, dn as isStatePlanePath, er as init_issue_id, f as loadConfigSync, hr as TmuxError, ln as init_state_plane, rn as init_auto_commit, s as init_load, sn as STATE_PLANE_PATHS, vr as init_errors, wn as getIssuePrefix, yr as AGENTS_DIR, zt as writeIssueRecordSync } from "./config-yaml-DPAieL_G.js";
3
+ import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
4
+ import { C as isPaneDead, D as listPaneValuesSync, E as listPaneValues, F as sendKeysAsync, L as sessionExists, O as listSessionNames, P as sendKeys, R as sessionExistsSync, T as killSessionSync, i as capturePane, k as listSessions, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
5
+ import { a as init_event_store, i as initEventStore } from "./event-store-DTJXZjCl.js";
6
+ import { n as CLAUDE_CODE_BEHAVIOR } from "./src-fgbU-jJ-.js";
7
+ 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-BQjqQXZG.js";
8
+ import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-CXhZdnB8.js";
9
+ import { An as getAgentDir, B as createOhmypiRuntimeSync, 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, Hn as markAgentTroubled, 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, U as spawnAgent, Un as recordAgentFailure, V as init_ohmypi, X as listAgentStates, Xn as setAgentPausedSync, Y as init_queries, Z as listRunningAgents, Zn as setAgentYieldedSync, _t as init_config, at as init_concurrency, cn as determineModel, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, en as init_pi_fifo, er as init_persistent_logger, et as countRunningAgents, gn as buildDefaultResumeContinueMessage, gr as saveAgentRuntimeState, hr as init_runtime_state, ht as DEFAULT_CLOISTER_CONFIG, it as getConcurrencyLimits, j as messageAgent, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, nr as logDeaconEventSync, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, tr as logAgentLifecycleSync, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-DHvsjsuP.js";
10
+ import { t as init_behavior } from "./behavior-By-2Wipv.js";
11
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-C3hiPVAM.js";
12
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
13
13
  import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BvAgFK8n.js";
14
- import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-D-p7TQit.js";
15
- import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-DkEhJM0h.js";
16
- import { a as init_launcher_generator, n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-XkLSsJCD.js";
17
- import { i as createCodexRuntimeSync, l as init_codex } from "./codex-B3J1TXo7.js";
18
- import { T as stampBootReconciliation, f as isFlywheelGloballyPaused, h as setBootReconciliationDecision, i as getFlywheelActiveRunId, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-CYv732Gs.js";
19
- import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-8jZH0Lgk.js";
20
- import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-CtqWakL6.js";
21
- import { n as __filename, r as init_esm_shims } from "./esm-shims-Crmvo9Ln.js";
22
- import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, at as init_jsonl_parser, d as getAllProjectSpecialistStatuses, it as getSessionFilesSync, rt as getProjectDirsSync, st as parseClaudeSessionSync } from "./specialists-BUKBHtmQ.js";
23
- import { t as recordDeaconNudge } from "./deacon-nudge-log-Cmcch2Av.js";
24
- import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BNV3kjLq.js";
25
- import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-DVUXlRBs.js";
26
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-0Zx72zXf.js";
27
- import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-Kvh4WViS.js";
28
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-Cfc-THvz.js";
29
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-D21-YEyX.js";
30
- import { g as recordRecoveryFailure, h as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BBGnhvD2.js";
31
- import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-CKy2bwZL.js";
32
- import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-DubXY9Zg.js";
33
- 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-DRn-XNXS.js";
34
- import { n as pruneTerminalStoppedAgents } from "./agent-gc-CIFaa2vJ.js";
35
- import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-Cg5_uVy1.js";
36
- import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-BPHnItVj.js";
37
- import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-njEv9ZY2.js";
14
+ import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BWHnrq-k.js";
15
+ import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-oWoKf5jO.js";
16
+ import { a as init_launcher_generator, n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-Bgj7i-C7.js";
17
+ import { i as createCodexRuntimeSync, l as init_codex } from "./codex-DcInrhok.js";
18
+ import { T as stampBootReconciliation, f as isFlywheelGloballyPaused, h as setBootReconciliationDecision, i as getFlywheelActiveRunId, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-BMqUkXmR.js";
19
+ import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-BJVh1TCg.js";
20
+ import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-BrVNWoSL.js";
21
+ import { n as __filename, r as init_esm_shims } from "./esm-shims-DiV9jHa_.js";
22
+ import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, at as init_jsonl_parser, d as getAllProjectSpecialistStatuses, it as getSessionFilesSync, rt as getProjectDirsSync, st as parseClaudeSessionSync } from "./specialists-BYi0k8CZ.js";
23
+ import { t as recordDeaconNudge } from "./deacon-nudge-log-CJGA6aSQ.js";
24
+ import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BKG2ubt5.js";
25
+ import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-zTvWWHG_.js";
26
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BO84g03t.js";
27
+ import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-DA9rvqsE.js";
28
+ import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-wqnikhMK.js";
29
+ import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-5EP1WS_Z.js";
30
+ import { _ as recordRecoveryFailure, b as listFeatureWorkspaces, g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots } from "./deacon-swarm-DadWNi5J.js";
31
+ import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-yrPEQ_pC.js";
32
+ import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-DRqK5k39.js";
33
+ 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-KLRUhThD.js";
34
+ import { n as pruneTerminalStoppedAgents } from "./agent-gc-BtAzj8QN.js";
35
+ import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-Db8tUhce.js";
36
+ import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DBKQ9SKu.js";
37
+ import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-D3Il7cBK.js";
38
38
  import { createRequire } from "node:module";
39
39
  import { Effect } from "effect";
40
40
  import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, unlinkSync, writeFileSync } from "fs";
@@ -23526,7 +23526,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
23526
23526
  console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
23527
23527
  });
23528
23528
  try {
23529
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
23529
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
23530
23530
  await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
23531
23531
  } catch (err) {
23532
23532
  const msg = err instanceof Error ? err.message : String(err);
@@ -23701,7 +23701,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
23701
23701
  if (!agentState?.workspace || !sessionId || !agentState.model) return null;
23702
23702
  let usage = null;
23703
23703
  try {
23704
- const { computeContextUsage } = await import("./conversation-service-kYYeRp9B.js");
23704
+ const { computeContextUsage } = await import("./conversation-service-WKl-sw58.js");
23705
23705
  usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
23706
23706
  } catch {
23707
23707
  return null;
@@ -23798,13 +23798,13 @@ async function checkApiErrorAgents() {
23798
23798
  const st = getAgentStateSync(sessionName);
23799
23799
  const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
23800
23800
  if (st?.workspace && sid && st.model) {
23801
- const { computeContextUsage } = await import("./conversation-service-kYYeRp9B.js");
23801
+ const { computeContextUsage } = await import("./conversation-service-WKl-sw58.js");
23802
23802
  const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
23803
23803
  if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
23804
23804
  }
23805
23805
  } catch {}
23806
23806
  if (recoveredPct !== null) {
23807
- const { clearWorkspaceStuck } = await import("./review-status-sync-MvYGQLDD.js");
23807
+ const { clearWorkspaceStuck } = await import("./review-status-sync-BxHBVH8s.js");
23808
23808
  clearWorkspaceStuck(issueId);
23809
23809
  stuckOverflowNativeRecoveryState.delete(sessionName);
23810
23810
  actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
@@ -23820,7 +23820,7 @@ async function checkApiErrorAgents() {
23820
23820
  rec.attempts += 1;
23821
23821
  rec.lastAttempt = now;
23822
23822
  stuckOverflowNativeRecoveryState.set(sessionName, rec);
23823
- const { resumeAgent } = await import("./agents-KaEsWZ8D.js");
23823
+ const { resumeAgent } = await import("./agents-BIggLvi_.js");
23824
23824
  const recovered = await resumeAgent(sessionName, void 0, { compact: true });
23825
23825
  if (recovered.success) {
23826
23826
  stuckOverflowNativeRecoveryState.delete(sessionName);
@@ -23868,7 +23868,7 @@ async function checkApiErrorAgents() {
23868
23868
  }
23869
23869
  const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
23870
23870
  if (issueId !== null) {
23871
- const { resumeAgent } = await import("./agents-KaEsWZ8D.js");
23871
+ const { resumeAgent } = await import("./agents-BIggLvi_.js");
23872
23872
  const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
23873
23873
  contextOverflowRecoveryState.set(sessionName, {
23874
23874
  lastAttempt: now,
@@ -24233,7 +24233,7 @@ function reviewConvoyLiveness(issueId) {
24233
24233
  */
24234
24234
  async function recoverUnhealthyTestStack(issueId, workspacePath) {
24235
24235
  const key = issueId.toUpperCase();
24236
- const { getWorkspaceStackHealth } = await import("./stack-health-CXYHwv5D.js");
24236
+ const { getWorkspaceStackHealth } = await import("./stack-health-Deel1mSW.js");
24237
24237
  const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
24238
24238
  if (health.healthy) {
24239
24239
  testStackRebuildState.delete(key);
@@ -24265,7 +24265,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
24265
24265
  record.attempts += 1;
24266
24266
  testStackRebuildState.set(key, record);
24267
24267
  console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
24268
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-DrWMHxoY.js");
24268
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-ByFCMqTK.js");
24269
24269
  const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
24270
24270
  if (!result.success) {
24271
24271
  console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
@@ -24393,7 +24393,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
24393
24393
  return actions;
24394
24394
  }
24395
24395
  try {
24396
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
24396
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
24397
24397
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
24398
24398
  issueId,
24399
24399
  workspace,
@@ -24523,7 +24523,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
24523
24523
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
24524
24524
  if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
24525
24525
  else if (workspace && resolved) try {
24526
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
24526
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
24527
24527
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
24528
24528
  issueId,
24529
24529
  workspace,
@@ -24548,8 +24548,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
24548
24548
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
24549
24549
  if (workspace && resolved) {
24550
24550
  const branch = `feature/${issueLower}`;
24551
- const { spawnRun } = await import("./agents-KaEsWZ8D.js");
24552
- const { buildTestRolePrompt } = await import("./test-agent-queue-C1s6mB8C.js");
24551
+ const { spawnRun } = await import("./agents-BIggLvi_.js");
24552
+ const { buildTestRolePrompt } = await import("./test-agent-queue-qfsq6uaC.js");
24553
24553
  const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
24554
24554
  if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
24555
24555
  setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
@@ -24687,7 +24687,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
24687
24687
  record.lastAttempt = now;
24688
24688
  record.attempts += 1;
24689
24689
  stalledReviewConvoyRecoveryState.set(key, record);
24690
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
24690
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
24691
24691
  try {
24692
24692
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
24693
24693
  issueId,
@@ -24758,7 +24758,7 @@ async function checkMissingReviewStatuses() {
24758
24758
  continue;
24759
24759
  }
24760
24760
  try {
24761
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
24761
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
24762
24762
  await Effect.runPromise(spawnReviewRoleForIssue({
24763
24763
  issueId,
24764
24764
  workspace,
@@ -24809,7 +24809,7 @@ async function checkStuckReviewing() {
24809
24809
  const actions = [];
24810
24810
  const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
24811
24811
  try {
24812
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-mo3tyc8L.js");
24812
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
24813
24813
  const statuses = loadReviewStatuses();
24814
24814
  const now = Date.now();
24815
24815
  const activeReviewIssues = /* @__PURE__ */ new Set();
@@ -24825,7 +24825,7 @@ async function checkStuckReviewing() {
24825
24825
  if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
24826
24826
  }
24827
24827
  try {
24828
- const { listRunningAgents } = await import("./agents-KaEsWZ8D.js");
24828
+ const { listRunningAgents } = await import("./agents-BIggLvi_.js");
24829
24829
  const agents = await Effect.runPromise(listRunningAgents());
24830
24830
  for (const agent of agents) {
24831
24831
  if (agent.status === "stopped" || agent.status === "error") continue;
@@ -24958,7 +24958,7 @@ async function checkCompletedButUnsignaledReviews() {
24958
24958
  }
24959
24959
  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.`;
24960
24960
  try {
24961
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
24961
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
24962
24962
  await messageAgent(reviewSession, nudge);
24963
24963
  unsignaledReviewNudges.set(latestDir, now);
24964
24964
  actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
@@ -25014,6 +25014,11 @@ function synthesizeReviewFromReports(opts) {
25014
25014
  path: report.path
25015
25015
  })));
25016
25016
  const verdict = blockers.length > 0 ? "blocked" : "passed";
25017
+ const reviewerVerdicts = {};
25018
+ for (const report of opts.reports) reviewerVerdicts[report.subRole] = {
25019
+ status: blockers.some((b) => b.subRole === report.subRole) ? "blocked" : "passed",
25020
+ findingsPath: report.path
25021
+ };
25017
25022
  const topBlocker = blockers[0] ? `[${blockers[0].subRole}] ${blockers[0].title}` : "";
25018
25023
  const blockerSection = blockers.length > 0 ? blockers.map((blocker) => `### [${blocker.subRole}] ${blocker.title}\nSource: ${blocker.path}`).join("\n\n") : "None";
25019
25024
  const cleanSubRoles = opts.reports.filter((report) => !blockers.some((blocker) => blocker.subRole === report.subRole)).map((report) => `- ${report.subRole}`).join("\n") || "None";
@@ -25047,7 +25052,8 @@ function synthesizeReviewFromReports(opts) {
25047
25052
  "## Clean Sub-roles",
25048
25053
  cleanSubRoles,
25049
25054
  ""
25050
- ].join("\n")
25055
+ ].join("\n"),
25056
+ reviewerVerdicts
25051
25057
  };
25052
25058
  }
25053
25059
  /**
@@ -25073,7 +25079,7 @@ async function respawnIdleReviewer(state, agentId) {
25073
25079
  return false;
25074
25080
  }
25075
25081
  try {
25076
- const { spawnReviewSubRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
25082
+ const { spawnReviewSubRoleForIssue } = await import("./review-agent-DgySDb-G.js");
25077
25083
  const contextManifestPath = join(dirname(outputPath), "context.json");
25078
25084
  const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
25079
25085
  issueId: state.issueId,
@@ -25157,9 +25163,25 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
25157
25163
  reports
25158
25164
  });
25159
25165
  writeFileSync(join(reviewDir, "synthesis.md"), synthesis.body);
25166
+ let fallbackHead;
25167
+ try {
25168
+ const { execFile } = await import("node:child_process");
25169
+ const { promisify } = await import("node:util");
25170
+ const { stdout } = await promisify(execFile)("git", ["rev-parse", "HEAD"], {
25171
+ cwd: state.workspace,
25172
+ encoding: "utf-8",
25173
+ timeout: 1e4
25174
+ });
25175
+ fallbackHead = stdout.trim() || void 0;
25176
+ } catch {}
25177
+ const anchoredVerdicts = Object.fromEntries(Object.entries(synthesis.reviewerVerdicts).map(([subRole, v]) => [subRole, {
25178
+ ...v,
25179
+ ...fallbackHead ? { atCommit: fallbackHead } : {}
25180
+ }]));
25160
25181
  setReviewStatusSync(state.issueId, {
25161
25182
  reviewStatus: synthesis.verdict,
25162
- reviewNotes: synthesis.topBlocker || "Review approved by Deacon fallback from completed reviewer reports"
25183
+ reviewNotes: synthesis.topBlocker || "Review approved by Deacon fallback from completed reviewer reports",
25184
+ reviewerVerdicts: anchoredVerdicts
25163
25185
  });
25164
25186
  if (synthesis.verdict === "blocked") await Effect.runPromise(deliverReviewVerdictFeedback({
25165
25187
  issueId: state.issueId,
@@ -25186,7 +25208,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
25186
25208
  "Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
25187
25209
  ].join("\n");
25188
25210
  try {
25189
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
25211
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
25190
25212
  await messageAgent(state.id, message);
25191
25213
  reviewReportsPresentNudges.set(nudgeKey, now);
25192
25214
  const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
@@ -25265,7 +25287,7 @@ async function monitorReviewConvoySignals() {
25265
25287
  if (!signal) continue;
25266
25288
  const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
25267
25289
  try {
25268
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
25290
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
25269
25291
  await messageAgent(state.reviewSynthesisAgentId, message);
25270
25292
  state.reviewMonitorSignaled = signal;
25271
25293
  saveAgentStateSync(state);
@@ -25273,7 +25295,7 @@ async function monitorReviewConvoySignals() {
25273
25295
  actions.push(action);
25274
25296
  logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
25275
25297
  if (signal === "ready") try {
25276
- const { notifyPipelineSync } = await import("./pipeline-notifier-DQsOtdjZ.js");
25298
+ const { notifyPipelineSync } = await import("./pipeline-notifier-lwMa--Gz.js");
25277
25299
  notifyPipelineSync({
25278
25300
  type: "reviewer_completed",
25279
25301
  issueId: state.issueId,
@@ -25281,7 +25303,7 @@ async function monitorReviewConvoySignals() {
25281
25303
  });
25282
25304
  } catch {}
25283
25305
  else if (signal === "timeout") try {
25284
- const { notifyPipelineSync } = await import("./pipeline-notifier-DQsOtdjZ.js");
25306
+ const { notifyPipelineSync } = await import("./pipeline-notifier-lwMa--Gz.js");
25285
25307
  notifyPipelineSync({
25286
25308
  type: "reviewer_timed_out",
25287
25309
  issueId: state.issueId,
@@ -25368,6 +25390,96 @@ async function cleanupOrphanedReviewSessions() {
25368
25390
  else logDeaconEventSync(`cleanupOrphanedReviewSessions completed: no orphaned sessions found`);
25369
25391
  return actions;
25370
25392
  }
25393
+ /** How long after the fork to wait before judging cache hits from cost events. */
25394
+ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
25395
+ /**
25396
+ * PAN-1862 (NFR-5 backstop): a discovery-mode review parent that never signals
25397
+ * discovery-ready (crashed, wedged, or just forgot) must not strand the review
25398
+ * at reviewing-with-no-convoy. After REVIEW_DISCOVERY_TIMEOUT_MS — or as soon
25399
+ * as the parent session is dead — force the discovery-ready handling: the fork
25400
+ * may miss the 5-minute cache TTL (the miss detector below reports that), but
25401
+ * the review itself always proceeds (NFR-2).
25402
+ */
25403
+ async function checkStalledReviewDiscovery() {
25404
+ const actions = [];
25405
+ try {
25406
+ const { listAgentStates } = await import("./agents-BIggLvi_.js");
25407
+ const states = listAgentStates();
25408
+ const now = Date.now();
25409
+ for (const state of states) {
25410
+ if (state.role !== "review" || state.reviewSubRole || !state.reviewDiscoveryPending || !state.issueId) continue;
25411
+ const startedMs = Date.parse(state.lastResumeAt ?? state.startedAt);
25412
+ const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
25413
+ const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
25414
+ if (!aged && !dead) continue;
25415
+ const { handleReviewDiscoveryReady } = await import("./review-agent-DgySDb-G.js");
25416
+ const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
25417
+ actions.push(result.message);
25418
+ logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
25419
+ }
25420
+ } catch (error) {
25421
+ console.error("[deacon] Error checking stalled review discovery:", error instanceof Error ? error.message : String(error));
25422
+ }
25423
+ return actions;
25424
+ }
25425
+ /**
25426
+ * PAN-1862 (FR-11/FR-12): detect a fork cache MISS — a forked reviewer's first
25427
+ * request reporting cacheRead == 0 when a warm hit was expected (TTL expired,
25428
+ * model mismatch, prefix drift). Purely observability: reviews are already
25429
+ * running correctly either way (NFR-2); the operator just learns the savings
25430
+ * didn't land, via a warn-level activity entry + a desktop notification.
25431
+ * Checked once per fork (reviewForkCacheChecked).
25432
+ */
25433
+ async function checkReviewForkCacheMisses() {
25434
+ const actions = [];
25435
+ try {
25436
+ const { listAgentStates, saveAgentState } = await import("./agents-BIggLvi_.js");
25437
+ const { readEventsSync } = await import("./events-BlzVUyTx.js");
25438
+ const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
25439
+ const states = listAgentStates();
25440
+ const now = Date.now();
25441
+ for (const parent of states) {
25442
+ if (parent.role !== "review" || parent.reviewSubRole || !parent.reviewConvoyForkedAt || parent.reviewForkCacheChecked || !parent.issueId) continue;
25443
+ const forkedMs = Date.parse(parent.reviewConvoyForkedAt);
25444
+ if (!Number.isFinite(forkedMs) || now - forkedMs < FORK_CACHE_CHECK_DELAY_MS) continue;
25445
+ const forkedReviewers = states.filter((s) => s.issueId === parent.issueId && s.reviewSubRole && s.reviewForkedFromParent && s.reviewRunId === parent.reviewRunId);
25446
+ if (forkedReviewers.length === 0) {
25447
+ parent.reviewForkCacheChecked = true;
25448
+ await Effect.runPromise(saveAgentState(parent));
25449
+ continue;
25450
+ }
25451
+ const firstEvents = forkedReviewers.map((r) => ({
25452
+ id: r.id,
25453
+ event: readEventsSync({
25454
+ agentId: r.id,
25455
+ startDate: parent.reviewConvoyForkedAt,
25456
+ limit: 1
25457
+ })[0]
25458
+ }));
25459
+ if (firstEvents.some((fe) => !fe.event) && now - forkedMs < 5 * FORK_CACHE_CHECK_DELAY_MS) continue;
25460
+ const misses = firstEvents.filter((fe) => fe.event && (fe.event.cacheRead ?? 0) === 0);
25461
+ parent.reviewForkCacheChecked = true;
25462
+ await Effect.runPromise(saveAgentState(parent));
25463
+ const readyMs = parent.reviewDiscoveryReadyAt ? Date.parse(parent.reviewDiscoveryReadyAt) : NaN;
25464
+ const gapSeconds = Number.isFinite(readyMs) ? Math.round((forkedMs - readyMs) / 1e3) : void 0;
25465
+ if (misses.length > 0) {
25466
+ const message = `Review cache miss for ${parent.issueId} — ${misses.length}/${forkedReviewers.length} forked reviewer(s) got zero cache reads on their first request${gapSeconds !== void 0 ? ` (discovery→fork gap ${gapSeconds}s; cache TTL is 300s)` : ""}. Reviews proceed correctly at full input cost.`;
25467
+ emitActivityEntrySync({
25468
+ source: "review",
25469
+ level: "warn",
25470
+ message,
25471
+ issueId: parent.issueId,
25472
+ desktop: true
25473
+ });
25474
+ actions.push(message);
25475
+ logDeaconEventSync(`checkReviewForkCacheMisses: ${message}`);
25476
+ } else actions.push(`Fork cache HIT confirmed for ${parent.issueId} (${forkedReviewers.length} reviewer(s))`);
25477
+ }
25478
+ } catch (error) {
25479
+ console.error("[deacon] Error checking review fork cache misses:", error instanceof Error ? error.message : String(error));
25480
+ }
25481
+ return actions;
25482
+ }
25371
25483
  //#endregion
25372
25484
  //#region ../../lib/concurrency.ts
25373
25485
  /**
@@ -25469,7 +25581,7 @@ async function reconcileStaleMergeStatus() {
25469
25581
  if (!project) continue;
25470
25582
  let specStatus;
25471
25583
  try {
25472
- const { findSpecByIssue } = await import("./specs-COn3zZ2Q.js");
25584
+ const { findSpecByIssue } = await import("./specs-DeS98l_p.js");
25473
25585
  const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
25474
25586
  specStatus = spec?.status;
25475
25587
  if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
@@ -25484,7 +25596,7 @@ async function reconcileStaleMergeStatus() {
25484
25596
  if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
25485
25597
  } catch {}
25486
25598
  if (!isMerged) {
25487
- const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-C2Lg4RoB.js");
25599
+ const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-D6B8scEw.js");
25488
25600
  const ghResolved = _resolveGitHubIssue(issueId);
25489
25601
  if (ghResolved.isGitHub) try {
25490
25602
  const { stdout } = await execFileAsync$4("gh", [
@@ -25521,7 +25633,7 @@ async function reconcileStaleMergeStatus() {
25521
25633
  actions.push(msg);
25522
25634
  console.log(`[deacon] ${msg}`);
25523
25635
  try {
25524
- const { postMergeLifecycle } = await import("./merge-agent-DRXwKxmb.js");
25636
+ const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
25525
25637
  postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
25526
25638
  } catch (err) {
25527
25639
  console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
@@ -25546,7 +25658,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
25546
25658
  async function reconcileFalseMerged() {
25547
25659
  const actions = [];
25548
25660
  try {
25549
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CIhMNI4C.js");
25661
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
25550
25662
  if (!isGitHubAppConfigured()) return actions;
25551
25663
  const statuses = loadReviewStatuses();
25552
25664
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -25591,7 +25703,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
25591
25703
  async function reconcileClosedPrReadyForMerge() {
25592
25704
  const actions = [];
25593
25705
  try {
25594
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CIhMNI4C.js");
25706
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
25595
25707
  if (!isGitHubAppConfigured()) return actions;
25596
25708
  const statuses = loadReviewStatuses();
25597
25709
  const now = Date.now();
@@ -25663,7 +25775,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
25663
25775
  async function reconcileStaleMergeBlockers() {
25664
25776
  const actions = [];
25665
25777
  try {
25666
- const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-D00zFjeu.js");
25778
+ const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-JdFuhKuF.js");
25667
25779
  const statuses = loadReviewStatuses();
25668
25780
  const now = Date.now();
25669
25781
  const deps = buildRealConflictGateDeps();
@@ -25806,7 +25918,7 @@ async function checkFailedMergeRetry() {
25806
25918
  if (ciEntry.count === 5) {
25807
25919
  console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
25808
25920
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
25809
- const { writeFeedbackFile } = await import("./feedback-writer-BvHE1I-3.js");
25921
+ const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
25810
25922
  const ciFileResult = await Effect.runPromise(writeFeedbackFile({
25811
25923
  issueId,
25812
25924
  specialist: "merge-agent",
@@ -25838,7 +25950,7 @@ async function checkFailedMergeRetry() {
25838
25950
  ciRetryMap.set(issueId, ciEntry);
25839
25951
  console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
25840
25952
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
25841
- const { writeFeedbackFile } = await import("./feedback-writer-BvHE1I-3.js");
25953
+ const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
25842
25954
  const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
25843
25955
  issueId,
25844
25956
  specialist: "merge-agent",
@@ -25866,7 +25978,7 @@ async function checkFailedMergeRetry() {
25866
25978
  const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
25867
25979
  if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
25868
25980
  const timeoutNotes = status.mergeNotes;
25869
- const { writeFeedbackFile } = await import("./feedback-writer-BvHE1I-3.js");
25981
+ const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
25870
25982
  await Effect.runPromise(writeFeedbackFile({
25871
25983
  issueId: issueIdForFb,
25872
25984
  specialist: "merge-agent",
@@ -25971,7 +26083,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
25971
26083
  } } : {}
25972
26084
  };
25973
26085
  try {
25974
- const { closeOut } = await import("./workflows-Plo_VxeO.js");
26086
+ const { closeOut } = await import("./workflows-Cz8OtiB4.js");
25975
26087
  const result = await Effect.runPromise(closeOut(ctx));
25976
26088
  if (!result.success) {
25977
26089
  const failed = result.steps.find((step) => !step.success && !step.skipped);
@@ -26533,7 +26645,7 @@ async function nudgeStalledResumeWorkAgents() {
26533
26645
  const message = buildStalledResumePrompt(state);
26534
26646
  if (!message) continue;
26535
26647
  try {
26536
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
26648
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
26537
26649
  await messageAgent(agentId, message);
26538
26650
  recordCooldown(agentId, ".last-stalled-resume-nudge");
26539
26651
  const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
@@ -26651,7 +26763,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
26651
26763
  "Continue the per-bead workflow without asking — claim it (`bd update <bead-id> --claim`), implement, commit, 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."
26652
26764
  ].join("\n");
26653
26765
  try {
26654
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
26766
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
26655
26767
  await messageAgent(agentId, message);
26656
26768
  writeFileSync(join(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
26657
26769
  const action = `Nudged idle ${agentId} (${state.issueId}) — ${openBeads.length} open bead(s)`;
@@ -27426,7 +27538,7 @@ async function remediateFlywheelOrchestrator(agentId, now, actions, reason) {
27426
27538
  now
27427
27539
  });
27428
27540
  if (decision.kind === "noop") return;
27429
- const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-Akbd9VNM.js");
27541
+ const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-BqDdGvrQ.js");
27430
27542
  const prev = readStuckRemediationState(agentId);
27431
27543
  const nowIso = new Date(now).toISOString();
27432
27544
  if (decision.kind === "escalate") {
@@ -28442,8 +28554,8 @@ async function cleanupStaleAgentState() {
28442
28554
  */
28443
28555
  async function cleanupAbandonedFeedback() {
28444
28556
  const actions = [];
28445
- const { getReviewStatusSync } = await import("./review-status-mo3tyc8L.js");
28446
- const { clearFeedbackFiles } = await import("./feedback-writer-BvHE1I-3.js");
28557
+ const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
28558
+ const { clearFeedbackFiles } = await import("./feedback-writer-thrdxYpK.js");
28447
28559
  for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
28448
28560
  const panFeedbackDir = join(workspacePath, ".pan", "feedback");
28449
28561
  if (!existsSync(panFeedbackDir)) continue;
@@ -28514,7 +28626,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
28514
28626
  if (!issueId) return null;
28515
28627
  const agentSession = `agent-${issueId.toLowerCase()}`;
28516
28628
  if (sessions.includes(agentSession)) return null;
28517
- const { getReviewStatusSync } = await import("./review-status-mo3tyc8L.js");
28629
+ const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
28518
28630
  try {
28519
28631
  if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
28520
28632
  } catch {}
@@ -28634,7 +28746,7 @@ async function checkOrphanedCompletions() {
28634
28746
  async function checkPendingTestDispatch() {
28635
28747
  const actions = [];
28636
28748
  try {
28637
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-mo3tyc8L.js");
28749
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
28638
28750
  const statuses = loadReviewStatuses();
28639
28751
  const now = Date.now();
28640
28752
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -28667,7 +28779,7 @@ async function checkPendingTestDispatch() {
28667
28779
  console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
28668
28780
  continue;
28669
28781
  }
28670
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
28782
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
28671
28783
  const resolved = resolveProjectFromIssueSync(issueId);
28672
28784
  if (!resolved) continue;
28673
28785
  const issueLower = issueId.toLowerCase();
@@ -28682,8 +28794,8 @@ async function checkPendingTestDispatch() {
28682
28794
  logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
28683
28795
  continue;
28684
28796
  }
28685
- const { spawnRun } = await import("./agents-KaEsWZ8D.js");
28686
- const { buildTestRolePrompt } = await import("./test-agent-queue-C1s6mB8C.js");
28797
+ const { spawnRun } = await import("./agents-BIggLvi_.js");
28798
+ const { buildTestRolePrompt } = await import("./test-agent-queue-qfsq6uaC.js");
28687
28799
  try {
28688
28800
  const run = await spawnRun(issueId, "test", {
28689
28801
  workspace,
@@ -28806,7 +28918,7 @@ async function checkCompletedButUnsignaledTests() {
28806
28918
  const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
28807
28919
  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.`;
28808
28920
  try {
28809
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
28921
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
28810
28922
  await messageAgent(testSession, nudge);
28811
28923
  unsignaledTestNudges.set(testSession, now);
28812
28924
  const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
@@ -28820,7 +28932,7 @@ async function checkCompletedButUnsignaledTests() {
28820
28932
  case "nudge-write": {
28821
28933
  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.`;
28822
28934
  try {
28823
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
28935
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
28824
28936
  await messageAgent(testSession, nudge);
28825
28937
  unsignaledTestNudges.set(testSession, now);
28826
28938
  const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
@@ -28843,8 +28955,8 @@ async function checkCompletedButUnsignaledTests() {
28843
28955
  async function checkVerificationReviewContradiction() {
28844
28956
  const actions = [];
28845
28957
  try {
28846
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-mo3tyc8L.js");
28847
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
28958
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
28959
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
28848
28960
  const statuses = loadReviewStatuses();
28849
28961
  for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
28850
28962
  let reviewedAtCommit;
@@ -28893,7 +29005,7 @@ async function checkPostReviewCommits() {
28893
29005
  const actions = [];
28894
29006
  try {
28895
29007
  const statuses = loadReviewStatuses();
28896
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
29008
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
28897
29009
  for (const [issueId, status] of Object.entries(statuses)) {
28898
29010
  if (status.mergeStatus === "merged") continue;
28899
29011
  if (!status.reviewedAtCommit) continue;
@@ -28948,7 +29060,7 @@ async function checkPostReviewCommits() {
28948
29060
  actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
28949
29061
  logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
28950
29062
  } else if (freshStatus?.reviewStatus === "pending") {
28951
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
29063
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
28952
29064
  const branch = `feature/${issueId.toLowerCase()}`;
28953
29065
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
28954
29066
  issueId,
@@ -29048,7 +29160,7 @@ async function checkReadyForMergeStuck() {
29048
29160
  const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
29049
29161
  const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
29050
29162
  async function reconcileTestStatusFromGreenCi() {
29051
- const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-CIhMNI4C.js");
29163
+ const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
29052
29164
  return reconcileTestStatusFromGreenCiWithDeps({
29053
29165
  isGitHubAppConfigured,
29054
29166
  loadReviewStatuses,
@@ -29069,7 +29181,7 @@ async function reconcileTestStatusFromGreenCi() {
29069
29181
  */
29070
29182
  async function clearStaleCiFeedback(issueId) {
29071
29183
  const { readdir, rm } = await import("fs/promises");
29072
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
29184
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
29073
29185
  const projectConfig = resolveProjectFromIssueSync(issueId);
29074
29186
  if (!projectConfig) return;
29075
29187
  const repoDir = projectConfig.projectPath;
@@ -29356,7 +29468,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
29356
29468
  console.warn(msg);
29357
29469
  actions.push(msg);
29358
29470
  try {
29359
- await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" has crashed ${CONTAINER_RESTART_MAX_COUNT} times and auto-restart gave up. The UAT environment at feature-${issueLower}.pan.localhost may be broken. Manual intervention required — check docker logs or re-containerize.`, "deacon:container-gave-up"));
29471
+ await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" has crashed ${CONTAINER_RESTART_MAX_COUNT} times and auto-restart gave up. The UAT environment at feature-${issueLower}.overdeck.localhost may be broken. Manual intervention required — check docker logs or re-containerize.`, "deacon:container-gave-up"));
29360
29472
  } catch {}
29361
29473
  continue;
29362
29474
  }
@@ -29369,7 +29481,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
29369
29481
  }
29370
29482
  }
29371
29483
  try {
29372
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
29484
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
29373
29485
  const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
29374
29486
  if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
29375
29487
  } catch {}
@@ -29395,7 +29507,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
29395
29507
  } catch (restartErr) {
29396
29508
  console.warn(`[deacon] Failed to restart ${name}: ${restartErr.message}`);
29397
29509
  try {
29398
- await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" crashed and restart failed (${restartErr.message}). The UAT environment at feature-${issueLower}.pan.localhost is likely broken.`, "deacon:container-restart-failed"));
29510
+ await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" crashed and restart failed (${restartErr.message}). The UAT environment at feature-${issueLower}.overdeck.localhost is likely broken.`, "deacon:container-restart-failed"));
29399
29511
  } catch {}
29400
29512
  }
29401
29513
  }
@@ -29418,8 +29530,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
29418
29530
  async function checkMergedWorkSessions() {
29419
29531
  const actions = [];
29420
29532
  try {
29421
- const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-mW7SPDtP.js");
29422
- const { setAgentPaused } = await import("./agents-KaEsWZ8D.js");
29533
+ const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BwJb2DLJ.js");
29534
+ const { setAgentPaused } = await import("./agents-BIggLvi_.js");
29423
29535
  const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
29424
29536
  for (const session of toKill) try {
29425
29537
  await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
@@ -29459,7 +29571,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
29459
29571
  async function checkAwaitingTestWorkSessions() {
29460
29572
  const actions = [];
29461
29573
  try {
29462
- const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-mW7SPDtP.js");
29574
+ const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BwJb2DLJ.js");
29463
29575
  const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
29464
29576
  const now = Date.now();
29465
29577
  for (const session of candidates) {
@@ -29515,7 +29627,7 @@ async function runPatrol() {
29515
29627
  const stuckRemediationActions = await checkStuckAgentRemediation();
29516
29628
  actions.push(...stuckRemediationActions);
29517
29629
  for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
29518
- const { reconcileInFlightJournals } = await import("./advancing-selfheal-n8tAeFwE.js");
29630
+ const { reconcileInFlightJournals } = await import("./advancing-selfheal-CMlGznKv.js");
29519
29631
  const reconciledJournalActions = await reconcileInFlightJournals();
29520
29632
  actions.push(...reconciledJournalActions);
29521
29633
  for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
@@ -29527,7 +29639,7 @@ async function runPatrol() {
29527
29639
  const age = Date.now() - (pending.timestamp ?? 0);
29528
29640
  if (age < 3600 * 1e3) {
29529
29641
  console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
29530
- const { postMergeLifecycle } = await import("./merge-agent-DRXwKxmb.js");
29642
+ const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
29531
29643
  const { unlinkSync } = await import("fs");
29532
29644
  unlinkSync(pendingFile);
29533
29645
  await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
@@ -29572,7 +29684,7 @@ async function runPatrol() {
29572
29684
  actions.push(...suspendActions);
29573
29685
  for (const a of suspendActions) addLog("action", a, state.patrolCycle);
29574
29686
  try {
29575
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
29687
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
29576
29688
  const allStatuses = loadReviewStatuses();
29577
29689
  for (const [issueId, status] of Object.entries(allStatuses)) {
29578
29690
  if (!status.readyForMerge || status.mergeStatus === "merged") continue;
@@ -29592,21 +29704,15 @@ async function runPatrol() {
29592
29704
  } catch (err) {
29593
29705
  console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
29594
29706
  }
29595
- const { checkIdleTerminalAdvancingSessions, checkMergedAdvancingSessions, checkTerminalAdvancingSessions } = await import("./advancing-selfheal-n8tAeFwE.js");
29596
- const reapedTerminalActions = await checkTerminalAdvancingSessions();
29597
- actions.push(...reapedTerminalActions);
29598
- for (const a of reapedTerminalActions) addLog("action", a, state.patrolCycle);
29707
+ const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-CMlGznKv.js");
29599
29708
  const reapedWorkActions = await checkMergedWorkSessions();
29600
29709
  actions.push(...reapedWorkActions);
29601
29710
  for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
29602
29711
  const reapedMergedAdvancingActions = await checkMergedAdvancingSessions();
29603
29712
  actions.push(...reapedMergedAdvancingActions);
29604
29713
  for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
29605
- const reapedIdleTerminalAdvancingActions = await checkIdleTerminalAdvancingSessions();
29606
- actions.push(...reapedIdleTerminalAdvancingActions);
29607
- for (const a of reapedIdleTerminalAdvancingActions) addLog("action", a, state.patrolCycle);
29608
29714
  try {
29609
- const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-BINc1Y8c.js");
29715
+ const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-Bklh6loJ.js");
29610
29716
  const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
29611
29717
  actions.push(...remoteCredentialActions);
29612
29718
  for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -29614,7 +29720,7 @@ async function runPatrol() {
29614
29720
  addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
29615
29721
  }
29616
29722
  try {
29617
- const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-OB4zwVHz.js");
29723
+ const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DNuaAgU6.js");
29618
29724
  const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
29619
29725
  actions.push(...heartbeatActions);
29620
29726
  for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -29622,7 +29728,7 @@ async function runPatrol() {
29622
29728
  addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
29623
29729
  }
29624
29730
  try {
29625
- const { reapCompletedRemoteAgents } = await import("./remote-completion-BINc1Y8c.js");
29731
+ const { reapCompletedRemoteAgents } = await import("./remote-completion-Bklh6loJ.js");
29626
29732
  const remoteReap = await reapCompletedRemoteAgents();
29627
29733
  for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
29628
29734
  const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
@@ -29677,6 +29783,12 @@ async function runPatrol() {
29677
29783
  const planningCleanupActions = await cleanupOrphanedPlanningSessions();
29678
29784
  actions.push(...planningCleanupActions);
29679
29785
  for (const a of planningCleanupActions) addLog("action", a, state.patrolCycle);
29786
+ const stalledDiscoveryActions = await checkStalledReviewDiscovery();
29787
+ actions.push(...stalledDiscoveryActions);
29788
+ for (const a of stalledDiscoveryActions) addLog("action", a, state.patrolCycle);
29789
+ const forkCacheActions = await checkReviewForkCacheMisses();
29790
+ actions.push(...forkCacheActions);
29791
+ for (const a of forkCacheActions) addLog("action", a, state.patrolCycle);
29680
29792
  const reviewerMonitorActions = await monitorReviewConvoySignals();
29681
29793
  actions.push(...reviewerMonitorActions);
29682
29794
  for (const a of reviewerMonitorActions) addLog("action", a, state.patrolCycle);
@@ -29791,7 +29903,7 @@ async function runPatrol() {
29791
29903
  const issueId = runtimeState.currentIssue;
29792
29904
  try {
29793
29905
  if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
29794
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
29906
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
29795
29907
  const resolved = resolveProjectFromIssueSync(issueId);
29796
29908
  if (resolved) {
29797
29909
  const branch = `feature/${issueId.toLowerCase()}`;
@@ -29805,7 +29917,7 @@ async function runPatrol() {
29805
29917
  mergeStatus: "merged",
29806
29918
  readyForMerge: false
29807
29919
  });
29808
- const { postMergeLifecycle } = await import("./merge-agent-DRXwKxmb.js");
29920
+ const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
29809
29921
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
29810
29922
  actions.push(`Auto-completed stale merge for ${issueId}`);
29811
29923
  } else {
@@ -29985,7 +30097,7 @@ function startDeacon() {
29985
30097
  logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
29986
30098
  (async () => {
29987
30099
  await reconcileAgentLiveness();
29988
- const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-n8tAeFwE.js");
30100
+ const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-CMlGznKv.js");
29989
30101
  await runBootAdvancingSelfHeal();
29990
30102
  runScheduledPatrol("startup");
29991
30103
  })().catch((err) => {
@@ -30057,4 +30169,4 @@ function assessDeaconPatrolFreshness(params) {
30057
30169
  //#endregion
30058
30170
  export { isPreKickoffLaunchDeath as $, scanPendingInputsPromise as $t, 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, INSPECT_TIMEOUT_MS as Ft, applyIssueVetoedLabel as G, isSmeeConfiguredSync as Gt, applyIssueParkedLabel as H, getCurrentDockerStats as Ht, setAgentStoppedNotifier as I, checkInspectAgentTimeouts as It, removeIssueParkedLabel as J, countPendingAskUserQuestionsForAgent as Jt, removeIssueBlocksMainLabel as K, startSmeeProcessSync as Kt, setMergeReadyNotifier as L, getRuntimeForAgent 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, getAgentWorkspace as Qt, 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, getAgentJsonlPath as Xt, removeIssueReadyLabel as Y, getAgentJsonlMtime as Yt, removeIssueVetoedLabel as Z, getAgentPendingQuestions as Zt, 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, detectAwaitingInputForAgent as en, 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, normalizeAwaitingInputPrompt as nn, nudgeStalledResumeWorkAgents as nt, checkDeadEndAgents as o, startBootReconciliation as ot, checkStuckWorkAgents as p, reconcileMergedButReviewing as pt, removeIssueObjectionLabel as q, computeAgentEnrichment as qt, checkAndSuspendIdleAgents as r, parseCodexApprovalPrompt as rn, redeliverUndeliveredKickoffs as rt, checkMassDeath as s, autoCloseOut as st, applyBootReconciliationDecision as t, detectAwaitingInputFromPaneSync as tn, 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 };
30059
30171
 
30060
- //# sourceMappingURL=deacon-f0yvsG5S.js.map
30172
+ //# sourceMappingURL=deacon-j3qSZ7--.js.map