@overdeck/desktop 0.45.22 → 0.45.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-Dj2gncak.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DXdHmRTC.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BvDuWNMo.js → archive-planning-DYrYojxl.js} +30 -6
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-CGj16clS.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-NU3KbXYw.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-BRpqQvNd.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-BJum14fs.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-B5jFNi2G.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-CbKNkFE5.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Brf_5MuG.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-bONZDBbC.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-CxReRxIc.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-CbmztVcc.js → codex-TmSi-yTv.js} +27 -8
  37. package/server/{codex-parser-jl8AeAmB.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-q4Gvd8dq.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-BJKocXKd.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-DeTsoZdR.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DvyMuOle.js} +55 -186
  42. package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-DlQKkHH2.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-15gDOk20.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_odMIaC.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-C3avRVEr.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-Dq33SYEj.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-H9if0bCQ.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-bYpM9-kZ.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-wH46-WsJ.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Codk1pc2.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-D_cre6WM.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-CJpgf9A3.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-B8HbQdqU.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-CkT_kznS.js → deacon-pRnyD5w9.js} +266 -577
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-wDf4UgHt.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-D-Ed5yVw.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-BCZ89M9X.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-DbJLYcHv.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-dTeNdq7X.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-CpBGsO6_.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-TnWdydfB.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-DSUdR-04.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-Dsuv6qyB.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-BMrK4TrE.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features-Bc-Bmiye.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-DS6NUuSs.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Ctr5uuvo.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-COR0mbRI.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-6WHU4O7A.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-B1S_KZv4.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-DpwQ-sc3.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-DmAcuCkV.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-7d_RkmWp.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/{git-utils-Cc3FHDKd.js → git-utils-BVa07a4a.js} +2 -2
  100. package/server/{git-utils-CsKGnzFA.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-CDPtGF7J.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CU14oYzP.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-XjTJbBm7.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-CwBZZ3t7.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/{harness-binary-B2CTcD84.js → harness-binary-CVio2m-u.js} +1 -1
  107. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-qHJBhy3Z.js} +4 -4
  108. package/server/{health-events-DREeevle.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-C1whmd58.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-yxRsjk-z.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-B-HItBiS.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-Dz_OymXE.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-D4iNWMA5.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-D7T75Pye.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-BVNa4MQW.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-DJKLWcVT.js} +12 -12
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-CXsfxslp.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-C9DdEOKY.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-DQR9PMgS.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-DtmJM0D0.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-pDW9VUNz.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-COgR2By1.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-Cp1To4L8.js → layers-DzxSTGNA.js} +2 -2
  136. package/server/lifecycle-DfeyBDwA.js +121 -0
  137. package/server/lifecycle-io-Bsnr2K4F.js +3 -0
  138. package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-DsFkIxee.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-YwZMDIwQ.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-C1t-bspg.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-BwsyNRJV.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-B-SnXOoc.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-XrB80vfT.js} +28 -28
  147. package/server/{merge-batch-Byt-QnEl.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-BYjeXrVN.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-DiISXcC-.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-6LEglm6o.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-Do8_q32h.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-B95_4in_.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-CKana8EH.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +1 -1
  161. package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  162. package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-neK8dHQk.js} +15 -13
  163. package/server/package-lock.json +2 -2
  164. package/server/package.json +1 -1
  165. package/server/{pan-dir-DOcf6ug3.js → pan-dir-DeVUgwA7.js} +78 -58
  166. package/server/{paths-DooHpt9p.js → paths-_zEts6wc.js} +2 -2
  167. package/server/{pickup-CaskQ7j6.js → pickup-Dd0Znxxy.js} +1 -1
  168. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-0HaEGDlH.js} +186 -67
  169. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  170. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-D0ykk59O.js} +2 -2
  171. package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-2sK1apsO.js} +2 -2
  172. package/server/projects-9SkRpES9.js +3 -0
  173. package/server/{prompts-EvhMeeHG.js → prompts-Dp4Tpk39.js} +2 -2
  174. package/server/{providers-DNSQqy2V.js → providers-DKkBXhxU.js} +1 -1
  175. package/server/{providers-BDDPULlp.js → providers-DV7ec8l7.js} +7 -7
  176. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  177. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  178. package/server/public/assets/{dist-Bio7THQU.js → dist-BWR4qFiV.js} +1 -1
  179. package/server/public/assets/{dist-DukGS2YZ.js → dist-DEmlBBNQ.js} +3 -3
  180. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  181. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  182. package/server/public/assets/index-CUr1xv8w.css +1 -0
  183. package/server/public/assets/{index-Bwejq-5s.js → index-CsSuZQBI.js} +145 -144
  184. package/server/public/assets/{linear-qUWmMZ-c.js → linear-C9zFQpkX.js} +1 -1
  185. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  186. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  187. package/server/public/assets/{prod-C8VtLuWC.js → prod-B1jCQihw.js} +4 -4
  188. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  189. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  190. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  191. package/server/public/index.html +2 -2
  192. package/server/{pull-requests-By_BteaL.js → pull-requests--Ib2jTgy.js} +1 -1
  193. package/server/{pull-requests-8z2N1UOV.js → pull-requests-CXIhdCYD.js} +13 -11
  194. package/server/{queries-ZABd5aXP.js → queries-6d7Cdtm7.js} +693 -104
  195. package/server/{rally-i_goYmiA.js → rally-B708-nZn.js} +3 -3
  196. package/server/{rally-api-DqKqIMNR.js → rally-api-nY0ZANw3.js} +2 -2
  197. package/server/{rally-api-xHazRk0d.js → rally-api-yjQ0TfHd.js} +1 -1
  198. package/server/{rally-client-COYz1vYR.js → rally-client-B1EJhfV0.js} +4 -4
  199. package/server/{rally-client-CGWEHaPd.js → rally-client-CULK2XAY.js} +1 -1
  200. package/server/rally-njs_mJrt.js +3 -0
  201. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-MWnqdLCJ.js} +1 -1
  202. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-N3BTkmX_.js} +1 -1
  203. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  204. package/server/{rebuild-stack-CKjJAI8L.js → rebuild-stack-kA7XngID.js} +1 -1
  205. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-uWbZfjms.js} +6 -6
  206. package/server/record-t6V-3Dcj.js +3 -0
  207. package/server/{record-update-D3N6WMFR.js → record-update-DACtKh6_.js} +1 -1
  208. package/server/record-update-Dq0t2uBG.js +310 -0
  209. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BJtIQuag.js} +2 -2
  210. package/server/{release-engine-DMINVN8S.js → release-engine-DZpmGGzb.js} +5 -5
  211. package/server/{release-set-DeUSOEHy.js → release-set-hnXd_kga.js} +3 -3
  212. package/server/{remote-Dr5kGYSZ.js → remote-4tiENDaI.js} +3 -3
  213. package/server/{remote-b-c5bOce.js → remote-Br-ZWVIP.js} +3 -3
  214. package/server/{remote-agents-D6O_zETW.js → remote-agents-CRCg1L4H.js} +1 -1
  215. package/server/{remote-agents-Ct_WOyke.js → remote-agents-nmty1mLu.js} +6 -6
  216. package/server/{remote-completion-Dca3hAaa.js → remote-completion-BbWNd10K.js} +12 -12
  217. package/server/resume-CcKqnTvE.js +3 -0
  218. package/server/{review-agent-CCum8sGe.js → review-agent-DJRO8EG8.js} +1 -1
  219. package/server/{review-agent-CThvgK2r.js → review-agent-sKkE1FEL.js} +22 -22
  220. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-BLbSC4ke.js} +5 -5
  221. package/server/{review-context-OYfKUprb.js → review-context-BgX3lcCx.js} +8 -8
  222. package/server/{review-status-DFRjDFef.js → review-status-A7quS5KJ.js} +54 -21
  223. package/server/review-status-C6n6-9f_.js +3 -0
  224. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  225. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BhSQ0d0l.js} +2 -2
  226. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-To3-iS-N.js} +1 -1
  227. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  228. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CTRNtzXO.js} +6 -6
  229. package/server/{rollup-CZ02qgxk.js → rollup-B53Y81xK.js} +1 -1
  230. package/server/{rollup-SyuF09e4.js → rollup-WA0VD-Rr.js} +8 -8
  231. package/server/{scanner-Br0Z5S6R.js → scanner-D2743cp8.js} +11 -7
  232. package/server/{sequence-io-fxU0DlwW.js → sequence-io-Cg0zYj_E.js} +4 -4
  233. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-BGY8gjg-.js} +5 -5
  234. package/server/server.js +941 -752
  235. package/server/{service-Bagb90KZ.js → service-DCpB_SGd.js} +53 -53
  236. package/server/{session-fork-BqQxd-V6.js → session-fork-BQ8_6H32.js} +2 -2
  237. package/server/{session-history-XdS0JKp3.js → session-history-CVZDpS3c.js} +4 -4
  238. package/server/{settings-BNbocWOg.js → settings-BZ5m1UCl.js} +3 -3
  239. package/server/settings-D0OSwos5.js +2 -0
  240. package/server/{settings-uLc6DEYI.js → settings-ylxwqwQG.js} +2 -2
  241. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BlxG6Xye.js} +2 -2
  242. package/server/{shadow-state-CbvsN3qG.js → shadow-state-C2_epgx2.js} +1 -1
  243. package/server/{shadow-state-C_NkP-sa.js → shadow-state-Dh-HzF2J.js} +2 -2
  244. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-4bvjn9b3.js} +2 -2
  245. package/server/{ship-log-__QtAFXG.js → ship-log-ClSMIzZX.js} +1 -1
  246. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CHIxLr_d.js} +1 -1
  247. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-r4pHQBIr.js} +7 -7
  248. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DWAorh2B.js} +22 -21
  249. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-KC_UduxD.js} +1 -1
  250. package/server/{specialist-completion-CqmduO92.js → specialist-completion-BXhav38U.js} +1 -1
  251. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-DtrYvGJ-.js} +5 -5
  252. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  253. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-DJ3RzKxW.js} +3 -3
  254. package/server/{specialists-D0gGXMZx.js → specialists-D5fRZXmN.js} +1 -1
  255. package/server/specialists-DVj0hvaL.js +3 -0
  256. package/server/{specialists-CwZHb5cb.js → specialists-DyFeedjn.js} +66 -76
  257. package/server/{specialists-Bg9v4z3F.js → specialists-JVO00bs7.js} +340 -214
  258. package/server/specs-nN45DG2X.js +3 -0
  259. package/server/{src-BMMoA_ba.js → src-CG9mCkP6.js} +6 -6
  260. package/server/{src-Bqdtd6po.js → src-CMTQGyCK.js} +3 -3
  261. package/server/{src-k039WVYY.js → src-U7_kTPEE.js} +2 -1
  262. package/server/{stack-health-Bd06frFn.js → stack-health-Df0YEZKa.js} +1 -1
  263. package/server/{stack-health-C-ifC7b0.js → stack-health-puygdaMd.js} +2 -2
  264. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-BbFwCTb0.js} +4 -4
  265. package/server/{staleness-BID1BKdr.js → staleness-Bpy41ngS.js} +15 -3
  266. package/server/{staleness-_Tr-GwdA.js → staleness-Cbl_w4Bw.js} +1 -1
  267. package/server/{state-home-CONQvZR0.js → state-home-CIGjwNfJ.js} +96 -44
  268. package/server/{state-migrate-BeBW0KXA.js → state-migrate-Dkzaxvny.js} +12 -3
  269. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-CzEov_fq.js} +26 -22
  270. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  271. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  272. package/server/{summary-fork-agEMsPSo.js → summary-fork-D8bXjCr7.js} +2 -2
  273. package/server/{summary-fork-bX6ax6X7.js → summary-fork-DHhJIsAL.js} +8 -8
  274. package/server/{supervisor-Ctt4eRYz.js → supervisor-BO-Zk_h-.js} +3 -3
  275. package/server/supervisor-BPy-o1A8.js +2 -0
  276. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  277. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-Bza0ffAh.js} +2 -2
  278. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-CEgauF4U.js} +15 -15
  279. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  280. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-CmUBK5cT.js} +1 -1
  281. package/server/{test-verdict-D_-sXIz_.js → test-verdict-DFjjIHR5.js} +1 -1
  282. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-BDtLOIlO.js} +2 -2
  283. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-DL566HbH.js} +1 -1
  284. package/server/tmux-DoThH6aj.js +3 -0
  285. package/server/{tmux-L5LgvGLp.js → tmux-ftABRAmc.js} +76 -44
  286. package/server/{token-BkQLy4yS.js → token-CsOhvw42.js} +2 -2
  287. package/server/{token-util-DI8sGlmF.js → token-util-CTmczIfW.js} +1 -1
  288. package/server/token-util-DrHg8abn.js +3 -0
  289. package/server/{tracker-config-DdT-nUAM.js → tracker-config-B4itFzDo.js} +2 -2
  290. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-BePq_oj-.js} +1 -1
  291. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-tnxxqROg.js} +2 -2
  292. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-m73vGebA.js} +1 -1
  293. package/server/{tunnel-IdK1iTHx.js → tunnel-B2vxjx_b.js} +3 -3
  294. package/server/{tunnel-BIFl98rc.js → tunnel-Cgj-IGIl.js} +1 -1
  295. package/server/{types-7-GnJn0t.js → types-BBNjPcqU.js} +1 -1
  296. package/server/{uat-train-j0cPeMSj.js → uat-train-CuEn0t9M.js} +28 -28
  297. package/server/{uat-train-0Ujk8GCv.js → uat-train-cKfM-_WW.js} +1 -1
  298. package/server/{validation-CabEISJT.js → validation-B5JxoPUS.js} +259 -9
  299. package/server/{validation-DcAgXTQp.js → validation-CIi6pnI2.js} +1 -1
  300. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-BcnIbigL.js} +1 -1
  301. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-C-lIHfUa.js} +1 -1
  302. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-Br0S_Ous.js} +102 -37
  303. package/server/{verification-runner-DlJezzef.js → verification-runner-CDj4lD4t.js} +1 -1
  304. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DKpNNW5i.js} +1 -1
  305. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Yb2bd3Fq.js} +13 -13
  306. package/server/{workflows-BZNNYkGC.js → workflows-C9WmILql.js} +39 -77
  307. package/server/workflows-D90rMOya.js +2 -0
  308. package/server/{workspace-D9ppycdg.js → workspace-BVl4rihN.js} +3 -3
  309. package/server/{workspace-3IC-UkAi.js → workspace-DuUdndHe.js} +1 -1
  310. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-cEGcO6UT.js} +1 -1
  311. package/server/{workspace-manager-B1WOfKvB.js → workspace-manager-ZTdJAy9M.js} +1 -1
  312. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-hLUv3ADC.js} +22 -15
  313. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-CskwzzhL.js} +2 -2
  314. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-DNpMixRq.js} +1 -1
  315. package/server/{workspaces-CFPcL0vl.js → workspaces-hWvy9eKs.js} +275 -109
  316. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  317. package/sync-sources/agents/pan-merge-agent.md +1 -1
  318. package/sync-sources/agents/pan-planning-agent.md +4 -4
  319. package/sync-sources/agents/pan-work-agent.md +1 -1
  320. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  321. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  322. package/sync-sources/hooks/record-cost-event.js +363 -71
  323. package/sync-sources/hooks/session-start-hook +7 -0
  324. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  325. package/sync-sources/rules/per-bead-durability.md +1 -1
  326. package/sync-sources/rules/prd-authoring.md +1 -1
  327. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  328. package/sync-sources/skills/pan/SKILL.md +2 -2
  329. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  330. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  331. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  332. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  333. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  334. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  335. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  336. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  337. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  338. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-start/SKILL.md +3 -3
  340. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  342. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  343. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  344. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  345. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  346. package/sync-sources/skills/plan/SKILL.md +11 -11
  347. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  348. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  349. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  350. package/server/agent-state-Co5Sy2Fw.js +0 -3
  351. package/server/agents-DyHKlq1I.js +0 -3
  352. package/server/cli-BRORS9qY.js +0 -3
  353. package/server/codex-DNyiQDKW.js +0 -3
  354. package/server/deacon-swarm-CV54eNmU.js +0 -2
  355. package/server/dist-j64RzSrQ.js +0 -3
  356. package/server/forge-B0_opi-V.js +0 -2
  357. package/server/hume-BmhvfVbV.js +0 -3
  358. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  359. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  360. package/server/merge-ops-DwWCkSgo.js +0 -2
  361. package/server/projects-BKkwpH6q.js +0 -3
  362. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  363. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  364. package/server/rally-OSJXdiHK.js +0 -3
  365. package/server/record-rwK-nKv_.js +0 -3
  366. package/server/record-update-Crz74r-6.js +0 -168
  367. package/server/resume-wZZsWtzz.js +0 -3
  368. package/server/review-status-Bnh-rdkY.js +0 -3
  369. package/server/settings-BlUsVaUc.js +0 -2
  370. package/server/specialists-Dqe6_HE5.js +0 -3
  371. package/server/specs-BhOKBzqk.js +0 -3
  372. package/server/supervisor-COVHrBTg.js +0 -2
  373. package/server/tmux-BAvtac_u.js +0 -3
  374. package/server/token-util-BArZLN6w.js +0 -3
  375. package/server/workflows-C4mR0Reb.js +0 -2
@@ -1,44 +1,44 @@
1
- import { Dn as extractTeamPrefix, Hn as init_projects, In as getProjectSync, Kn as listProjectsSync, Sr as GitError, Xr as encodeClaudeProjectDir, dr as extractPrefixSync, fr as init_issue_id, gr as resolveIssueIdSync, hn as isStatePlaneOnlyStatus, ii as init_paths, jn as findProjectByTeamSync, jr as init_errors, mn as init_state_plane, mr as parseIssueIdSync, nr as resolveProjectFromIssueSync, ri as getOverdeckHome, t as init_config_yaml, tt as resolveModel, ur as extractNumberSync, xr as FsError } from "./config-yaml-ig8Nwtiw.js";
2
- import { d as rejectUnsafeDashboardMutationRequest, ht as getHeaderFromMap, it as getWorkAgentLifecycleStateSync, l as rejectUnauthorizedDashboardRequest, n as _serverManagedMerges, ot as spawnPanCli, xt as jsonResponse, yt as httpHandler } from "./specialists-Bg9v4z3F.js";
1
+ import { $n as resolveIssueIdSync, Br as getOverdeckHome, Jn as extractPrefixSync, Nr as encodeClaudeProjectDir, Tn as init_projects, Vr as init_paths, Xt as isStatePlaneOnlyStatus, Yn as init_issue_id, Yt as init_state_plane, Zn as parseIssueIdSync, ar as GitError, ir as FsError, kn as listProjectsSync, mn as findProjectByTeamSync, mr as init_errors, qn as extractNumberSync, t as init_config_yaml, tt as resolveModel, un as extractTeamPrefix, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DvyMuOle.js";
2
+ import { d as rejectUnsafeDashboardMutationRequest, ht as getHeaderFromMap, it as getWorkAgentLifecycleStateSync, l as rejectUnauthorizedDashboardRequest, n as _serverManagedMerges, ot as spawnPanCli, xt as jsonResponse, yt as httpHandler } from "./specialists-JVO00bs7.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-D4iNWMA5.js";
5
- import { V as sessionExists, X as buildChildEnvWithoutTmuxSync, Z as init_child_env, i as capturePane, j as listSessionNames, w as init_tmux } from "./tmux-L5LgvGLp.js";
6
- import { a as init_event_store, n as getEventStore } from "./event-store-TnWdydfB.js";
7
- import { _ as setDeaconIgnored, c as init_review_status, f as markWorkspaceStuck, g as setAutoMerge, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-DFRjDFef.js";
8
- import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-CeyW_HoD.js";
9
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-Codk1pc2.js";
10
- import { L as messageAgent, Nt as transitionIssueToInReview, X as spawnAgent, fr as saveAgentRuntimeState, i as listRunningAgents, kn as getAgentState, s as init_agents, ur as getAgentRuntimeStateSync } from "./queries-ZABd5aXP.js";
11
- import { f as CostWriter, l as CostDoorLive } from "./service-Bagb90KZ.js";
12
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-DdT-nUAM.js";
13
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CawsPSS2.js";
14
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CXsfxslp.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CzaSOgul.js";
5
+ import { $ as init_child_env, H as sessionExists, M as listSessionNames, Q as buildChildEnvWithoutTmuxSync, i as capturePane, w as init_tmux } from "./tmux-ftABRAmc.js";
6
+ import { a as init_event_store, n as getEventStore } from "./event-store-tdiY5eDZ.js";
7
+ import { _ as setAutoMerge, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, l as init_review_status, p as markWorkspaceStuck, v as setDeaconIgnored } from "./review-status-A7quS5KJ.js";
8
+ import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-CreaCkjW.js";
9
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-Ca0YTWDw.js";
10
+ import { Cr as getAgentRuntimeStateSync, Hn as getAgentState, Kt as transitionIssueToInReview, Tr as saveAgentRuntimeState, X as messageAgent, b as init_agents, i as listRunningAgents, lt as spawnAgent } from "./queries-6d7Cdtm7.js";
11
+ import { f as CostWriter, l as CostDoorLive } from "./service-DCpB_SGd.js";
12
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-B4itFzDo.js";
13
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-tnxxqROg.js";
14
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-Bb4XeV2x.js";
15
15
  import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-hraoaQIp.js";
16
- import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-Do8_q32h.js";
17
- import { A as init_vbrief_index, M as readVBriefDocument, _ as VBRIEF_INSPECTION_POLICIES, c as mergeRecordStatusOverrides, k as findVBriefByIssue, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, v as init_types$1 } from "./io-DQR9PMgS.js";
18
- import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-bYpM9-kZ.js";
19
- import { i as normalizeModelOverrideSync, r as init_model_validation } from "./launcher-generator-COgR2By1.js";
20
- import { f as init_config, m as loadConfigSync$1 } from "./config-q4Gvd8dq.js";
21
- import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-C-ifC7b0.js";
22
- import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-CJpgf9A3.js";
23
- import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-DSUdR-04.js";
24
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-ClkCIWTe.js";
25
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-CNmQy0pL.js";
26
- import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-C3HVNR5d.js";
27
- import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-BoWm66Kh.js";
28
- import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-BvDuWNMo.js";
29
- import { E as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-CDPtGF7J.js";
30
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-tiSRIWJP.js";
31
- import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-crNAtIpL.js";
32
- import { n as generateDailySummary, r as init_cli } from "./cli-CbKNkFE5.js";
33
- import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-OYfKUprb.js";
34
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-BQFmmFp0.js";
35
- import { C as init_operations, S as gitPush, T as listGitOperationsSync, a as init_merge_agent, w as init_git_activity, x as MainDivergedError, y as syncMainIntoWorkspace } from "./merge-agent-DDiIjzk-.js";
36
- import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-C1t-bspg.js";
37
- import { n as init_release_set, t as getReleaseSetSync } from "./release-set-DeUSOEHy.js";
38
- import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-CFqPVxEg.js";
39
- import { r as runVerificationForIssue } from "./verification-runner-FiuAZ-H2.js";
40
- import { t as teardownWorkspace } from "./teardown-workspace-DDCf5n-a.js";
41
- import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-JUm0jqYP.js";
16
+ import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-DZ9dojJn.js";
17
+ import { A as init_xbrief_index, M as readXBriefDocument, _ as XBRIEF_INSPECTION_POLICIES, c as mergeRecordStatusOverrides, g as serializeXBriefDocument, k as findXBriefByIssue, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, v as init_types$1 } from "./io-B3_AHDfr.js";
18
+ import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-DbOs1e9Q.js";
19
+ import { i as normalizeModelOverrideSync, r as init_model_validation } from "./launcher-generator-CHVm7bGT.js";
20
+ import { f as init_config, m as loadConfigSync$1 } from "./config-CCvjQf27.js";
21
+ import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-puygdaMd.js";
22
+ import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-CdOjJVDT.js";
23
+ import { A as withConcurrencyLimit, E as verifyAppCanMerge, f as init_github_app, k as init_concurrency, m as isIntegrationPermissionError } from "./github-app-CMBdIFBQ.js";
24
+ import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-CC1dgUpx.js";
25
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-hLUv3ADC.js";
26
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-CtUgrVKW.js";
27
+ import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-Dhflo1SH.js";
28
+ import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-aQ1IxeI3.js";
29
+ import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-DYrYojxl.js";
30
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-CskwzzhL.js";
31
+ import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-tbOn_A_u.js";
32
+ import { n as generateDailySummary, r as init_cli } from "./cli-vBeXbPrq.js";
33
+ import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-BgX3lcCx.js";
34
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-BDtLOIlO.js";
35
+ import { C as init_operations, S as gitPush, T as listGitOperationsSync, a as init_merge_agent, w as init_git_activity, x as MainDivergedError, y as syncMainIntoWorkspace } from "./merge-agent-XrB80vfT.js";
36
+ import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-C_ZEhbqI.js";
37
+ import { n as init_release_set, t as getReleaseSetSync } from "./release-set-hnXd_kga.js";
38
+ import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-CmrYpa47.js";
39
+ import { r as runVerificationForIssue } from "./verification-runner-Br0S_Ous.js";
40
+ import { t as teardownWorkspace } from "./teardown-workspace-CEgauF4U.js";
41
+ import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-Dp4eLkt4.js";
42
42
  import { basename, dirname, join, resolve, sep } from "node:path";
43
43
  import { Effect, Layer, Option, Stream } from "effect";
44
44
  import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
@@ -54,6 +54,162 @@ import { promisify } from "node:util";
54
54
  import { timingSafeEqual } from "node:crypto";
55
55
  import { createConnection } from "node:net";
56
56
  import { crc32 } from "node:zlib";
57
+ //#region services/agent-output-service.ts
58
+ /**
59
+ * Agent Output Service (PAN-1221 F3)
60
+ *
61
+ * Captures tmux pane output only for agents with an active output subscriber.
62
+ * Explicit agent subscriptions and the public all-output SSE feed share one
63
+ * reference-counted poller, so zero interest means zero pane captures.
64
+ */
65
+ init_agents();
66
+ init_tmux();
67
+ init_concurrency();
68
+ init_event_store();
69
+ function splitLines(text) {
70
+ const lines = text.split("\n");
71
+ if (lines.length > 0 && lines[lines.length - 1] === "") lines.pop();
72
+ return lines;
73
+ }
74
+ /**
75
+ * Find new lines by looking for the longest suffix of `previous` that matches
76
+ * a prefix of `current`. The non-overlapping prefix of `current` is returned.
77
+ * If there is no overlap, all of `current` is new (pane was cleared or scrolled
78
+ * past the overlap window).
79
+ */
80
+ function diffLines(previous, current) {
81
+ if (previous.length === 0) return current;
82
+ for (let start = 0; start < previous.length; start++) {
83
+ const suffix = previous.slice(start);
84
+ if (suffix.length > current.length) continue;
85
+ if (suffix.every((line, i) => line === current[i])) return current.slice(suffix.length);
86
+ }
87
+ return current;
88
+ }
89
+ function hasAgentInterest(state, agentId) {
90
+ return state.allInterestCount > 0 || (state.interestCounts.get(agentId) ?? 0) > 0;
91
+ }
92
+ async function captureInterestedAgent(state, agentId) {
93
+ if (!hasAgentInterest(state, agentId) || state.inFlight.has(agentId)) return;
94
+ state.inFlight.add(agentId);
95
+ try {
96
+ let stdout;
97
+ try {
98
+ const remoteState = await readFile(join(homedir$1(), ".overdeck", "agents", agentId, "remote-state.json"), "utf-8").then((text) => JSON.parse(text)).catch(() => null);
99
+ if (remoteState?.location === "remote" && remoteState?.vmName) {
100
+ const { getRemoteAgentOutput } = await import("./remote-agents-CRCg1L4H.js");
101
+ stdout = await getRemoteAgentOutput(agentId, remoteState.vmName, 50);
102
+ } else stdout = await Effect.runPromise(capturePane(agentId, 50));
103
+ } catch {
104
+ stdout = await Effect.runPromise(capturePane(agentId, 50).pipe(Effect.catch(() => Effect.succeed(""))));
105
+ }
106
+ if (!hasAgentInterest(state, agentId)) return;
107
+ if (!stdout || stdout.trim() === "" || stdout.trim() === "Session not found") return;
108
+ const previousOutput = state.lastOutput.get(agentId) ?? "";
109
+ if (stdout === previousOutput) return;
110
+ const newLines = diffLines(splitLines(previousOutput), splitLines(stdout));
111
+ state.lastOutput.set(agentId, stdout);
112
+ if (newLines.length === 0) return;
113
+ const event = {
114
+ type: "agent.output_received",
115
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
116
+ payload: {
117
+ agentId,
118
+ lines: newLines
119
+ }
120
+ };
121
+ getEventStore().emitOnly(event);
122
+ } finally {
123
+ state.inFlight.delete(agentId);
124
+ }
125
+ }
126
+ async function pollOnce(state) {
127
+ if (state.polling) return;
128
+ state.polling = true;
129
+ try {
130
+ const interestedIds = new Set(state.interestCounts.keys());
131
+ if (state.allInterestCount > 0) try {
132
+ const runningAgents = await Effect.runPromise(listRunningAgents());
133
+ for (const agent of runningAgents) if (agent.tmuxActive) interestedIds.add(agent.id);
134
+ } catch {}
135
+ if (interestedIds.size === 0) return;
136
+ await Effect.runPromise(withConcurrencyLimit([...interestedIds].map((agentId) => Effect.tryPromise({
137
+ try: () => captureInterestedAgent(state, agentId),
138
+ catch: (cause) => cause
139
+ })), 4));
140
+ } finally {
141
+ state.polling = false;
142
+ }
143
+ }
144
+ const POLL_INTERVAL_MS = 3e3;
145
+ const serviceState = {
146
+ timer: null,
147
+ lastOutput: /* @__PURE__ */ new Map(),
148
+ interestCounts: /* @__PURE__ */ new Map(),
149
+ allInterestCount: 0,
150
+ inFlight: /* @__PURE__ */ new Set(),
151
+ polling: false,
152
+ started: false
153
+ };
154
+ function hasAnyInterest(state) {
155
+ return state.allInterestCount > 0 || state.interestCounts.size > 0;
156
+ }
157
+ function ensurePolling() {
158
+ if (!serviceState.started || serviceState.timer !== null || !hasAnyInterest(serviceState)) return;
159
+ serviceState.timer = setInterval(() => {
160
+ pollOnce(serviceState).catch(() => void 0);
161
+ }, POLL_INTERVAL_MS);
162
+ }
163
+ function stopPollingIfIdle() {
164
+ if (hasAnyInterest(serviceState) || serviceState.timer === null) return;
165
+ clearInterval(serviceState.timer);
166
+ serviceState.timer = null;
167
+ }
168
+ function retainAgentOutputInterest(agentId) {
169
+ const previousCount = serviceState.interestCounts.get(agentId) ?? 0;
170
+ serviceState.interestCounts.set(agentId, previousCount + 1);
171
+ ensurePolling();
172
+ if (serviceState.started && previousCount === 0) captureInterestedAgent(serviceState, agentId).catch(() => void 0);
173
+ let released = false;
174
+ return () => {
175
+ if (released) return;
176
+ released = true;
177
+ const count = serviceState.interestCounts.get(agentId) ?? 0;
178
+ if (count <= 1) serviceState.interestCounts.delete(agentId);
179
+ else serviceState.interestCounts.set(agentId, count - 1);
180
+ stopPollingIfIdle();
181
+ };
182
+ }
183
+ /** Preserve the public SSE feed's existing all-agent output surface on demand. */
184
+ function retainAllAgentOutputInterest() {
185
+ serviceState.allInterestCount += 1;
186
+ ensurePolling();
187
+ if (serviceState.started && serviceState.allInterestCount === 1) pollOnce(serviceState).catch(() => void 0);
188
+ let released = false;
189
+ return () => {
190
+ if (released) return;
191
+ released = true;
192
+ serviceState.allInterestCount = Math.max(0, serviceState.allInterestCount - 1);
193
+ stopPollingIfIdle();
194
+ };
195
+ }
196
+ function startAgentOutputService() {
197
+ if (serviceState.started) return;
198
+ serviceState.started = true;
199
+ ensurePolling();
200
+ if (hasAnyInterest(serviceState)) pollOnce(serviceState).catch(() => void 0);
201
+ }
202
+ function stopAgentOutputService() {
203
+ serviceState.started = false;
204
+ if (serviceState.timer !== null) clearInterval(serviceState.timer);
205
+ serviceState.timer = null;
206
+ serviceState.lastOutput.clear();
207
+ serviceState.interestCounts.clear();
208
+ serviceState.allInterestCount = 0;
209
+ serviceState.inFlight.clear();
210
+ serviceState.polling = false;
211
+ }
212
+ //#endregion
57
213
  //#region workspace-paths.ts
58
214
  init_issue_id();
59
215
  function getWorkspacePathForIssue(projectPath, rawIssueId) {
@@ -775,7 +931,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
775
931
  }
776
932
  if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
777
933
  if (!composeFile && ["start", "restart"].includes(action)) {
778
- const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-Cs6W9Yzj.js"));
934
+ const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-DRqaAkBR.js"));
779
935
  if (ensureDevcontainerSync({
780
936
  workspacePath,
781
937
  issueId
@@ -2371,6 +2527,7 @@ const getEventStreamRoute = HttpRouter.add("GET", "/events/stream", httpHandler(
2371
2527
  const nodeStream = new ReadableStream({
2372
2528
  start(controller) {
2373
2529
  let closed = false;
2530
+ let cleanedUp = false;
2374
2531
  const safeEnqueue = (chunk) => {
2375
2532
  if (closed) return;
2376
2533
  try {
@@ -2398,14 +2555,17 @@ const getEventStreamRoute = HttpRouter.add("GET", "/events/stream", httpHandler(
2398
2555
  if (!matchesFilter(event, filters)) return;
2399
2556
  safeEnqueue(encoder.encode(formatFrame(event)));
2400
2557
  });
2558
+ const releaseOutputInterest = !filters.types || filters.types.has("agent.output_received") ? retainAllAgentOutputInterest() : () => void 0;
2401
2559
  const keepalive = setInterval(() => {
2402
2560
  safeEnqueue(encoder.encode(`: keepalive\n\n`));
2403
2561
  }, KEEPALIVE_INTERVAL_MS);
2404
2562
  cleanup = () => {
2405
- if (closed) return;
2563
+ if (cleanedUp) return;
2564
+ cleanedUp = true;
2406
2565
  closed = true;
2407
2566
  clearInterval(keepalive);
2408
2567
  unsubscribe();
2568
+ releaseOutputInterest();
2409
2569
  try {
2410
2570
  controller.close();
2411
2571
  } catch {}
@@ -2602,6 +2762,12 @@ const internalEventsRouteLayer = Layer.mergeAll(internalEventsRoute, internalEve
2602
2762
  //#endregion
2603
2763
  //#region routes/workspaces/merge-strike.ts
2604
2764
  init_agents();
2765
+ function mergeVerificationOptions(request) {
2766
+ return {
2767
+ syncTargetBranch: false,
2768
+ ...request.kind === "strike" ? { skipPlanChecklist: true } : {}
2769
+ };
2770
+ }
2605
2771
  function parseStrikeMergeRequest(raw) {
2606
2772
  if (!raw || typeof raw !== "object") return null;
2607
2773
  const request = raw;
@@ -2823,7 +2989,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2823
2989
  const prRef = parseGitHubPullRequestUrl(status.prUrl);
2824
2990
  if (!prRef) return false;
2825
2991
  try {
2826
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
2992
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
2827
2993
  if (!isGitHubAppConfigured()) return false;
2828
2994
  const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
2829
2995
  console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
@@ -2842,7 +3008,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2842
3008
  }
2843
3009
  /**
2844
3010
  * Build a rich PR body with issue link, tasks task summary, and AC checklist
2845
- * from the vBRIEF plan. Exported for testing.
3011
+ * from the xBRIEF plan. Exported for testing.
2846
3012
  */
2847
3013
  async function buildRichPRBody(issueId, workspacePath) {
2848
3014
  const lines = [];
@@ -3090,8 +3256,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3090
3256
  try {
3091
3257
  if (request.kind === "normal" && workspaceInfo.isRemote && workspaceInfo.vmName) {
3092
3258
  console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
3093
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-6LEglm6o.js");
3094
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
3259
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DnSYdBEp.js");
3260
+ const { getForgeAdapter } = await import("./forge-B-ZWyTRm.js");
3095
3261
  const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3096
3262
  const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
3097
3263
  const remoteForge = remotePrimaryRepo?.forge || "github";
@@ -3127,7 +3293,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3127
3293
  ...mergeCompletionStatus(request)
3128
3294
  });
3129
3295
  completePendingOperation(issueId, null);
3130
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3296
+ const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
3131
3297
  await postMergeLifecycle(issueId, projectPath);
3132
3298
  return {
3133
3299
  success: true,
@@ -3164,10 +3330,10 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3164
3330
  const projectConfig = findProjectByTeamSync(issuePrefix);
3165
3331
  if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
3166
3332
  console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
3167
- const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-6LEglm6o.js");
3168
- const { runQualityGates } = await import("./validation-DcAgXTQp.js");
3169
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
3170
- const { messageAgent } = await import("./agents-DyHKlq1I.js");
3333
+ const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-DnSYdBEp.js");
3334
+ const { runQualityGates } = await import("./validation-CIi6pnI2.js");
3335
+ const { getForgeAdapter } = await import("./forge-B-ZWyTRm.js");
3336
+ const { messageAgent } = await import("./agents-FlIgQ3ql.js");
3171
3337
  let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
3172
3338
  if (!mergeSet) {
3173
3339
  const error = `No merge set found for ${issueId}`;
@@ -3438,7 +3604,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3438
3604
  ...mergeCompletionStatus(request)
3439
3605
  });
3440
3606
  completePendingOperation(issueId, null);
3441
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3607
+ const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
3442
3608
  advanceQueue();
3443
3609
  await postMergeLifecycle(issueId, projectPath);
3444
3610
  return {
@@ -3449,8 +3615,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3449
3615
  repos: mergeResults
3450
3616
  };
3451
3617
  }
3452
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-6LEglm6o.js");
3453
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
3618
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DnSYdBEp.js");
3619
+ const { getForgeAdapter } = await import("./forge-B-ZWyTRm.js");
3454
3620
  const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3455
3621
  const targetBranch = primaryRepo?.targetBranch || "main";
3456
3622
  const primaryForge = primaryRepo?.forge || "github";
@@ -3492,7 +3658,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3492
3658
  };
3493
3659
  }
3494
3660
  if (githubPrRef) try {
3495
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3661
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
3496
3662
  if (isGitHubAppConfigured()) {
3497
3663
  const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
3498
3664
  if (prState.state !== "OPEN" && !prState.merged) {
@@ -3554,7 +3720,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3554
3720
  ...mergeCompletionStatus(request)
3555
3721
  });
3556
3722
  completePendingOperation(issueId, null);
3557
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3723
+ const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
3558
3724
  await postMergeLifecycle(issueId, projectPath, branchName);
3559
3725
  return {
3560
3726
  success: true,
@@ -3568,13 +3734,13 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3568
3734
  } catch (prStateErr) {
3569
3735
  console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
3570
3736
  }
3571
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3737
+ const { postMergeLifecycle } = await import("./merge-agent-BQM3a8z5.js");
3572
3738
  const agentId = request.kind === "strike" ? request.recoveryTarget : `agent-${issueId.toLowerCase()}`;
3573
3739
  const rebaseMsg = request.kind === "strike" ? `STRIKE LANDING REQUEST: Rebase ${branchName} onto ${targetBranch}, resolve conflicts, run the full quality gates, push ${branchName}, then run pan strike-ready ${issueId} to persist the new HEAD. Do NOT merge or push main.` : `MERGE REQUESTED: The human has clicked MERGE for ${issueId}. Please rebase onto ${targetBranch} and push:\n\n1. git fetch origin ${targetBranch}\n2. git rebase origin/${targetBranch}\n3. If conflicts: resolve them, git add, git rebase --continue\n4. git push --force-with-lease\n\nAfter pushing, the server will handle verification and merge automatically. Do NOT run gh pr merge yourself.`;
3574
3740
  setReviewStatus(issueId, { mergeStep: "rebasing" });
3575
3741
  console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
3576
3742
  {
3577
- const { beginShipLog, appendShipLog } = await import("./ship-log-__QtAFXG.js");
3743
+ const { beginShipLog, appendShipLog } = await import("./ship-log-ClSMIzZX.js");
3578
3744
  beginShipLog(issueId);
3579
3745
  appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
3580
3746
  }
@@ -3705,7 +3871,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3705
3871
  });
3706
3872
  let skipLocalVerification = false;
3707
3873
  if (primaryForge === "github" && artifactUrl) try {
3708
- const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3874
+ const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
3709
3875
  if (isGitHubAppConfigured()) {
3710
3876
  const ref = parsePullRequestRef({ url: artifactUrl });
3711
3877
  if (ref) {
@@ -3726,14 +3892,14 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3726
3892
  } catch (ciErr) {
3727
3893
  console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
3728
3894
  }
3729
- const { appendShipLog } = await import("./ship-log-__QtAFXG.js");
3895
+ const { appendShipLog } = await import("./ship-log-ClSMIzZX.js");
3730
3896
  if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
3731
3897
  const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
3732
3898
  console.log(`[merge] Running post-rebase verification for ${issueId}...`);
3733
3899
  appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
3734
- const { runVerificationForIssue } = await import("./verification-runner-DlJezzef.js");
3900
+ const { runVerificationForIssue } = await import("./verification-runner-CDj4lD4t.js");
3735
3901
  return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
3736
- syncTargetBranch: false,
3902
+ ...mergeVerificationOptions(request),
3737
3903
  onGateLog: (line) => appendShipLog(issueId, line, "verifying")
3738
3904
  }));
3739
3905
  })();
@@ -3764,7 +3930,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3764
3930
  console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
3765
3931
  setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
3766
3932
  try {
3767
- const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CU14oYzP.js");
3933
+ const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CPfoFAdV.js");
3768
3934
  if (githubPrRef && isGitHubAppConfigured()) {
3769
3935
  const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
3770
3936
  if (sha) {
@@ -3792,7 +3958,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3792
3958
  } catch (prMergeErr) {
3793
3959
  console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
3794
3960
  try {
3795
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3961
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CPfoFAdV.js");
3796
3962
  if (githubPrRef && isGitHubAppConfigured()) {
3797
3963
  artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
3798
3964
  if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
@@ -3911,8 +4077,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
3911
4077
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3912
4078
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3913
4079
  return yield* Effect.promise(async () => {
3914
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-6LEglm6o.js");
3915
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
4080
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DnSYdBEp.js");
4081
+ const { getForgeAdapter } = await import("./forge-B-ZWyTRm.js");
3916
4082
  let mergeSet = getMergeSetSync(issueId);
3917
4083
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3918
4084
  const results = [];
@@ -4000,8 +4166,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
4000
4166
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4001
4167
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
4002
4168
  return yield* Effect.promise(async () => {
4003
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-6LEglm6o.js");
4004
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
4169
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DnSYdBEp.js");
4170
+ const { getForgeAdapter } = await import("./forge-B-ZWyTRm.js");
4005
4171
  let mergeSet = getMergeSetSync(issueId);
4006
4172
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
4007
4173
  const results = [];
@@ -4194,7 +4360,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4194
4360
  console.log(`[approve] Starting role pipeline for ${issueId}...`);
4195
4361
  let reviewResult;
4196
4362
  try {
4197
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
4363
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
4198
4364
  reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
4199
4365
  issueId,
4200
4366
  workspace: workspacePath,
@@ -4241,7 +4407,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4241
4407
  }
4242
4408
  console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
4243
4409
  try {
4244
- const { rebaseFeatureBranch } = await import("./merge-rebase-Cm6fXaZN.js");
4410
+ const { rebaseFeatureBranch } = await import("./merge-rebase-C1KIVr0s.js");
4245
4411
  const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4246
4412
  const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
4247
4413
  if (!rebaseResult.success) {
@@ -4261,7 +4427,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4261
4427
  completePendingOperation(issueId, pushResult.error);
4262
4428
  return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
4263
4429
  }
4264
- const { approve: lifecycleApprove } = await import("./lifecycle-CtPDcZ9u.js");
4430
+ const { approve: lifecycleApprove } = await import("./lifecycle-sycO16hj.js");
4265
4431
  const ghResolved = resolveGitHubIssueSync(issueId);
4266
4432
  const isGitHubIssueFlag = ghResolved.isGitHub;
4267
4433
  const lifecycleCtx = {
@@ -4295,7 +4461,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
4295
4461
  })));
4296
4462
  const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
4297
4463
  const request = yield* HttpServerRequest.HttpServerRequest;
4298
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-C9DdEOKY.js"));
4464
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-DXdfprGr.js"));
4299
4465
  const expected = getInternalTokenSync();
4300
4466
  if (!expected) return jsonResponse({
4301
4467
  ok: false,
@@ -4309,7 +4475,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
4309
4475
  }, 403);
4310
4476
  const event = yield* readJsonBody;
4311
4477
  const type = event.type;
4312
- const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-CZsrU_nj.js"));
4478
+ const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-6iCJplFZ.js"));
4313
4479
  switch (type) {
4314
4480
  case "status_changed": {
4315
4481
  const issueId = event.issueId;
@@ -4472,7 +4638,7 @@ init_review_status();
4472
4638
  init_io();
4473
4639
  init_types();
4474
4640
  init_dag();
4475
- init_vbrief_index();
4641
+ init_xbrief_index();
4476
4642
  init_types$1();
4477
4643
  init_review_context();
4478
4644
  init_tldr_daemon();
@@ -4601,9 +4767,9 @@ async function getIndexStats(workspacePath) {
4601
4767
  function resolvePlanLocation(projectPath, issueId) {
4602
4768
  return Effect.gen(function* () {
4603
4769
  const workspacePath = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4604
- const found = yield* findVBriefByIssue(projectPath, issueId);
4770
+ const found = yield* findXBriefByIssue(projectPath, issueId);
4605
4771
  if (found) {
4606
- const doc = yield* readVBriefDocument(found.path);
4772
+ const doc = yield* readXBriefDocument(found.path);
4607
4773
  return {
4608
4774
  path: found.path,
4609
4775
  lifecycleDir: found.lifecycleDir,
@@ -4990,7 +5156,7 @@ const getWorkspacePlanRoute = HttpRouter.add("GET", "/api/workspaces/:issueId/pl
4990
5156
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
4991
5157
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4992
5158
  const location = yield* resolvePlanLocation(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), issueId);
4993
- if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
5159
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
4994
5160
  const cp = criticalPath(actionableDoc(location.doc));
4995
5161
  return jsonResponse({
4996
5162
  ...location.doc,
@@ -5026,14 +5192,14 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
5026
5192
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
5027
5193
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
5028
5194
  const policy = (yield* readJsonBody).inspectionPolicy;
5029
- if (!VBRIEF_INSPECTION_POLICIES.includes(policy)) return jsonResponse({ error: "Invalid inspection policy" }, { status: 400 });
5195
+ if (!XBRIEF_INSPECTION_POLICIES.includes(policy)) return jsonResponse({ error: "Invalid inspection policy" }, { status: 400 });
5030
5196
  const location = yield* resolvePlanLocation(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), issueId);
5031
- if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
5197
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
5032
5198
  const now = (/* @__PURE__ */ new Date()).toISOString();
5033
5199
  const updated = {
5034
5200
  ...location.doc,
5035
- vBRIEFInfo: {
5036
- ...location.doc.vBRIEFInfo,
5201
+ xBRIEFInfo: {
5202
+ ...location.doc.xBRIEFInfo,
5037
5203
  inspectionPolicy: policy,
5038
5204
  updated: now
5039
5205
  },
@@ -5042,7 +5208,7 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
5042
5208
  updated: now
5043
5209
  }
5044
5210
  };
5045
- yield* Effect.promise(() => writeFile(location.path, JSON.stringify(updated, null, 2) + "\n", "utf-8"));
5211
+ yield* Effect.promise(() => writeFile(location.path, `${serializeXBriefDocument(updated)}\n`, "utf-8"));
5046
5212
  const cp = criticalPath(updated);
5047
5213
  return jsonResponse({
5048
5214
  ...updated,
@@ -5084,10 +5250,10 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
5084
5250
  if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
5085
5251
  const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
5086
5252
  if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
5087
- yield* Effect.promise(() => import("./record-rwK-nKv_.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
5253
+ yield* Effect.promise(() => import("./record-t6V-3Dcj.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
5088
5254
  const projectPath = project.path;
5089
5255
  const location = yield* resolvePlanLocation(projectPath, issueId);
5090
- if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
5256
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
5091
5257
  const globalEnabled = loadConfigSync().config.tieredExecution?.enabled ?? false;
5092
5258
  const planMetadata = location.doc.plan?.metadata;
5093
5259
  let source;
@@ -5550,7 +5716,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5550
5716
  console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
5551
5717
  }
5552
5718
  try {
5553
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-CXywD0F2.js");
5719
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-BLbSC4ke.js");
5554
5720
  const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
5555
5721
  const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
5556
5722
  artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
@@ -5605,7 +5771,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5605
5771
  } catch {}
5606
5772
  return;
5607
5773
  }
5608
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
5774
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
5609
5775
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5610
5776
  const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
5611
5777
  issueId,
@@ -5744,7 +5910,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5744
5910
  console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
5745
5911
  }
5746
5912
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5747
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
5913
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
5748
5914
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5749
5915
  issueId,
5750
5916
  workspace: workspacePathRerun,
@@ -5794,7 +5960,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5794
5960
  });
5795
5961
  } else {
5796
5962
  const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
5797
- const { spawnRun } = yield* Effect.promise(() => import("./agents-DyHKlq1I.js"));
5963
+ const { spawnRun } = yield* Effect.promise(() => import("./agents-FlIgQ3ql.js"));
5798
5964
  try {
5799
5965
  const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
5800
5966
  setReviewStatus(issueId, { testStatus: "testing" });
@@ -5904,7 +6070,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5904
6070
  testStatus: "pending",
5905
6071
  reviewNotes
5906
6072
  });
5907
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
6073
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
5908
6074
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5909
6075
  issueId,
5910
6076
  workspace: workspacePath,
@@ -6213,7 +6379,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6213
6379
  const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
6214
6380
  if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
6215
6381
  try {
6216
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-B-SnXOoc.js"));
6382
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-BQM3a8z5.js"));
6217
6383
  resetPostMergeState(issueId);
6218
6384
  } catch (err) {
6219
6385
  console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
@@ -6222,7 +6388,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6222
6388
  const rerun = body?.rerun === true;
6223
6389
  if (rerun) try {
6224
6390
  yield* Effect.promise(async () => {
6225
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
6391
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DJRO8EG8.js");
6226
6392
  const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
6227
6393
  if (dispatchArgs) {
6228
6394
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
@@ -6251,7 +6417,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6251
6417
  const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
6252
6418
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
6253
6419
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6254
- const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-CCum8sGe.js"));
6420
+ const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-DJRO8EG8.js"));
6255
6421
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
6256
6422
  const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
6257
6423
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
@@ -6281,8 +6447,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6281
6447
  success: false,
6282
6448
  error: "Workspace does not exist"
6283
6449
  }, { status: 400 });
6284
- const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BKkwpH6q.js"));
6285
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-CCum8sGe.js"));
6450
+ const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-9SkRpES9.js"));
6451
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DJRO8EG8.js"));
6286
6452
  const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
6287
6453
  setReviewStatus(issueId, {
6288
6454
  reviewStatus: "pending",
@@ -6354,8 +6520,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
6354
6520
  const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
6355
6521
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6356
6522
  return jsonResponse(yield* Effect.promise(async () => {
6357
- const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-rwK-nKv_.js");
6358
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CCum8sGe.js");
6523
+ const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-t6V-3Dcj.js");
6524
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DJRO8EG8.js");
6359
6525
  const project = resolveProjectForIssue(issueId);
6360
6526
  const record = project ? readIssueRecordSync(project, issueId) : null;
6361
6527
  return {
@@ -6390,9 +6556,9 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
6390
6556
  return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
6391
6557
  }
6392
6558
  return jsonResponse(yield* Effect.promise(async () => {
6393
- const { resolveProjectForIssue } = await import("./record-rwK-nKv_.js");
6394
- const { updateIssueRecord } = await import("./record-update-D3N6WMFR.js");
6395
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CCum8sGe.js");
6559
+ const { resolveProjectForIssue } = await import("./record-t6V-3Dcj.js");
6560
+ const { updateIssueRecord } = await import("./record-update-DACtKh6_.js");
6561
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DJRO8EG8.js");
6396
6562
  const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
6397
6563
  if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
6398
6564
  else current.reviewMode = body.reviewMode;
@@ -6825,7 +6991,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
6825
6991
  */
6826
6992
  async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
6827
6993
  try {
6828
- const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-rwK-nKv_.js");
6994
+ const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-t6V-3Dcj.js");
6829
6995
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
6830
6996
  return recordView ? JSON.stringify(recordView, null, 2) : null;
6831
6997
  } catch {
@@ -7584,7 +7750,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
7584
7750
  if (queuePosition === null) try {
7585
7751
  const resolved = resolveProjectFromIssueSync(issueId);
7586
7752
  if (resolved) {
7587
- const { getQueueForProject } = yield* Effect.promise(() => import("./merge-BwsyNRJV.js"));
7753
+ const { getQueueForProject } = yield* Effect.promise(() => import("./merge-DK23JEdS.js"));
7588
7754
  const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
7589
7755
  id: String(e.id),
7590
7756
  type: "task",
@@ -7622,7 +7788,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7622
7788
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
7623
7789
  if (workspaceInfo.exists && workspaceInfo.localPath) {
7624
7790
  const localPath = workspaceInfo.localPath;
7625
- const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-CsKGnzFA.js"));
7791
+ const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-Dry_Ka_D.js"));
7626
7792
  try {
7627
7793
  const gitInfo = yield* getWorkspaceGitInfo(localPath);
7628
7794
  if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
@@ -7637,7 +7803,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7637
7803
  if (verificationStatus) update.verificationStatus = verificationStatus;
7638
7804
  if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
7639
7805
  const status = setReviewStatus(issueId, update);
7640
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Dqe6_HE5.js"));
7806
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DVj0hvaL.js"));
7641
7807
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
7642
7808
  if (reviewStatus && [
7643
7809
  "passed",
@@ -7655,7 +7821,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7655
7821
  const agentId = `agent-${issueId.toLowerCase()}`;
7656
7822
  const feedbackBody = `CODE REVIEW ${reviewStatus.toUpperCase()} for ${issueId}:\n\n${reviewNotes}\n\n## REQUIRED: Fix ALL issues above, then invoke the /rebase-and-submit skill\n\n1. Read each blocking issue carefully\n2. Fix the code for EVERY issue listed\n3. Run tests locally to verify your fixes\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
7657
7823
  try {
7658
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-Bx5z11mF.js"));
7824
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-qmiMbqTZ.js"));
7659
7825
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7660
7826
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7661
7827
  issueId,
@@ -7719,7 +7885,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7719
7885
  const agentId = `agent-${issueId.toLowerCase()}`;
7720
7886
  const feedbackBody = `TESTS FAILED for ${issueId}:\n\n${testNotes}\n\n## REQUIRED: Fix ALL test failures, then invoke the /rebase-and-submit skill\n\n1. Read each test failure carefully\n2. Fix the code causing EVERY failure\n3. Run the test suite locally to verify your fixes pass\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
7721
7887
  try {
7722
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-Bx5z11mF.js"));
7888
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-qmiMbqTZ.js"));
7723
7889
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7724
7890
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7725
7891
  issueId,
@@ -7752,14 +7918,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7752
7918
  });
7753
7919
  yield* Effect.promise(async () => {
7754
7920
  try {
7755
- const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BKkwpH6q.js");
7921
+ const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-9SkRpES9.js");
7756
7922
  const project = resolveProjectFromIssueSync(issueId);
7757
7923
  const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
7758
7924
  if (!repo || !repo.includes("/")) return;
7759
7925
  const [owner, name] = repo.split("/");
7760
7926
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7761
7927
  if (!wsInfo?.localPath) return;
7762
- const { postOverdeckTestsStatus } = await import("./github-app-CU14oYzP.js");
7928
+ const { postOverdeckTestsStatus } = await import("./github-app-CPfoFAdV.js");
7763
7929
  await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
7764
7930
  } catch (err) {
7765
7931
  console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
@@ -7801,7 +7967,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7801
7967
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7802
7968
  const issueLower = issueId.toLowerCase();
7803
7969
  const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
7804
- const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-CU14oYzP.js"));
7970
+ const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-CPfoFAdV.js"));
7805
7971
  if (!isGitHubAppConfigured()) return jsonResponse({
7806
7972
  success: false,
7807
7973
  error: "GitHub App not configured"
@@ -7814,6 +7980,6 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7814
7980
  })));
7815
7981
  const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspaceRebuildRoute, postWorkspaceRebuildAndStartRoute, uatStackActionRouteLayer, getWorkspaceStateMdRoute, getWorkspaceInferenceMdRoute, stashCleanRouteLayer, containerOpsRouteLayer, postWorkspaceStartRoute, getWorkspaceReviewStatusRoute, postWorkspaceReviewStatusRoute, reviewPipelineRouteLayer, reviewControlRouteLayer, mergeOpsRouteLayer, postWorkspaceRefreshTokenRoute);
7816
7982
  //#endregion
7817
- export { getWorkspacePathForIssue as C, resolveIssueHeadlineCost as S, getCostsForIssueSync as _, pushApproveMain as a, processPendingFeedbackDeliveries as b, triggerMerge as c, resumeQueuedMerges as d, syncWalFromAllProjects as f, migrateAllSessionsSync as g, reclassifyUnknownCostEventsSync as h, mergeOpsRouteLayer as i, internalEventsRouteLayer as l, reconcilePiTranscripts as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reconcile as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, eventsRouteLayer as u, rebuildCacheSync as v, getCachedRunningAgents as x, syncCacheSync as y };
7983
+ export { getWorkspacePathForIssue as C, stopAgentOutputService as E, resolveIssueHeadlineCost as S, startAgentOutputService as T, getCostsForIssueSync as _, pushApproveMain as a, processPendingFeedbackDeliveries as b, triggerMerge as c, resumeQueuedMerges as d, syncWalFromAllProjects as f, migrateAllSessionsSync as g, reclassifyUnknownCostEventsSync as h, mergeOpsRouteLayer as i, internalEventsRouteLayer as l, reconcilePiTranscripts as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reconcile as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, eventsRouteLayer as u, rebuildCacheSync as v, retainAgentOutputInterest as w, getCachedRunningAgents as x, syncCacheSync as y };
7818
7984
 
7819
- //# sourceMappingURL=workspaces-CFPcL0vl.js.map
7985
+ //# sourceMappingURL=workspaces-hWvy9eKs.js.map