@overdeck/desktop 0.45.22 → 0.45.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
  4. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
  5. package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
  6. package/server/agent-state-Bc3tzUC8.js +3 -0
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
  8. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
  9. package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
  10. package/server/agents-wi9NWzs2.js +3 -0
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
  12. package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
  13. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
  14. package/server/assemble-J2ZZ2C15.js +339 -0
  15. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
  16. package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
  17. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
  18. package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
  19. package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
  20. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
  21. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
  24. package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
  25. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
  26. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
  27. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
  28. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
  29. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
  30. package/server/cli-B86rejVV.js +3 -0
  31. package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
  32. package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
  33. package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
  34. package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
  35. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
  36. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
  37. package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
  38. package/server/codex-GcHuUF-k.js +3 -0
  39. package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
  40. package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
  41. package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
  42. package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
  43. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
  44. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
  45. package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BhAY7TUd.js} +1 -1
  46. package/server/context-layers-BrPmE__h.js +4 -0
  47. package/server/context-layers-igZ4FI4_.js +37 -0
  48. package/server/{control-settings-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
  49. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
  50. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
  51. package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
  52. package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
  53. package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
  54. package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
  55. package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
  56. package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
  57. package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
  58. package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
  59. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
  60. package/server/dashboard-db-worker.js +7 -7
  61. package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
  62. package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
  63. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
  64. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
  65. package/server/deacon-swarm-C-GwfjJy.js +2 -0
  66. package/server/deacon.js +8 -8
  67. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
  68. package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
  69. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
  70. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
  71. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
  72. package/server/dist-Bzy0y69j.js +3 -0
  73. package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
  74. package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
  75. package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
  76. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
  77. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
  78. package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
  79. package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
  80. package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
  81. package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
  82. package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
  83. package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
  84. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
  85. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
  86. package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
  87. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
  88. package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
  89. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
  90. package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-D3a22RCd.js} +1 -1
  91. package/server/flywheel-DHrgCphM.js +1084 -0
  92. package/server/flywheel-DzGtWnJ1.js +477 -0
  93. package/server/flywheel-SVF02Jpq.js +2 -0
  94. package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
  95. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
  96. package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
  97. package/server/forge-DXnS_YFH.js +2 -0
  98. package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
  99. package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
  100. package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
  101. package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
  102. package/server/git-utils-D0_yhCgF.js +3 -0
  103. package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
  104. package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
  105. package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
  106. package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
  107. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
  108. package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
  109. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
  110. package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
  111. package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
  112. package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
  113. package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
  114. package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
  115. package/server/hume-ccTf4wTX.js +3 -0
  116. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
  117. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
  118. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
  119. package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
  120. package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
  121. package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
  122. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
  123. package/server/inspect-agent-Brtz0URj.js +2 -0
  124. package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
  125. package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
  126. package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
  127. package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
  128. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
  129. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
  130. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
  131. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
  132. package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
  133. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
  134. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
  135. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
  136. package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
  137. package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
  138. package/server/lifecycle-io-DPo7x11I.js +3 -0
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
  140. package/server/lifecycle-yPd___5E.js +121 -0
  141. package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
  142. package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
  143. package/server/memory-fts-worker.js +1 -1
  144. package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
  145. package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
  147. package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
  148. package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
  149. package/server/merge-ops-CR44oU9-.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
  151. package/server/merge-set-DJ8-UErs.js +83 -0
  152. package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
  153. package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
  154. package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
  155. package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
  160. package/server/node_modules/.package-lock.json +8 -8
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  162. package/server/node_modules/undici/README.md +5 -0
  163. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  164. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  165. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  166. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  167. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  168. package/server/node_modules/undici/docs/docs/index.md +5 -0
  169. package/server/node_modules/undici/lib/core/request.js +1 -1
  170. package/server/node_modules/undici/lib/core/util.js +6 -1
  171. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  172. package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
  173. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  174. package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
  175. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
  176. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  177. package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
  178. package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
  179. package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
  180. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  181. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  182. package/server/node_modules/undici/lib/util/cache.js +49 -7
  183. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  184. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  185. package/server/node_modules/undici/package.json +2 -2
  186. package/server/node_modules/undici/types/client.d.ts +2 -2
  187. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  188. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  189. package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
  190. package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
  191. package/server/package-lock.json +9 -9
  192. package/server/package.json +1 -1
  193. package/server/{pan-dir-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
  194. package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
  195. package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
  196. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
  197. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
  198. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
  199. package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-C0MWUeCU.js} +2 -2
  200. package/server/project-repos-B6GycDh9.js +94 -0
  201. package/server/project-repos-DXKQsc_m.js +3 -0
  202. package/server/projects-vjjcmiN8.js +3 -0
  203. package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
  204. package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
  205. package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
  206. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
  207. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
  208. package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
  209. package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
  210. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
  211. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
  212. package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
  213. package/server/public/assets/index-CenuJ3Cw.css +1 -0
  214. package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
  215. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
  216. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
  217. package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
  218. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
  219. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
  220. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
  221. package/server/public/index.html +2 -2
  222. package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
  223. package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
  224. package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
  225. package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
  226. package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
  227. package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
  228. package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
  229. package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
  230. package/server/rally-zhhtXuDP.js +3 -0
  231. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
  232. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
  233. package/server/rebuild-stack-CFvcBHsS.js +4 -0
  234. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
  235. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
  236. package/server/record-CN0pj4_5.js +3 -0
  237. package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
  238. package/server/record-update-dE1Aw83j.js +310 -0
  239. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
  240. package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
  241. package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
  242. package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
  243. package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
  244. package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
  245. package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
  246. package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
  247. package/server/resume-BFv1PGpA.js +3 -0
  248. package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
  249. package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
  250. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
  251. package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
  252. package/server/review-status-btEYlaxA.js +3 -0
  253. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
  254. package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
  255. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
  256. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
  257. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
  258. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
  259. package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
  260. package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
  261. package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
  262. package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
  263. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
  264. package/server/server.js +2961 -919
  265. package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
  266. package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
  267. package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
  268. package/server/settings-66A6uvIA.js +2 -0
  269. package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
  270. package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
  271. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
  272. package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
  273. package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
  274. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
  275. package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
  276. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
  277. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
  278. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
  279. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
  280. package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
  281. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
  282. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
  283. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
  284. package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
  285. package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
  286. package/server/specialists-DM6bWjsi.js +3 -0
  287. package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
  288. package/server/specs-C8Wsn2XO.js +3 -0
  289. package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
  290. package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
  291. package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
  292. package/server/stack-health-Bn3o8FBX.js +3 -0
  293. package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
  294. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
  295. package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
  296. package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
  297. package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
  298. package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
  299. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
  300. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
  301. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
  302. package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
  303. package/server/{summary-fork-agEMsPSo.js → summary-fork-DpcxN9tf.js} +2 -2
  304. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
  305. package/server/supervisor/pty-supervisor.js +2 -1
  306. package/server/supervisor/pty-token-x-ea28Us.js +43 -0
  307. package/server/supervisor-FTJAIsAK.js +2 -0
  308. package/server/{supervisor-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
  309. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
  310. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
  311. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
  312. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
  313. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
  314. package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
  315. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
  316. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
  317. package/server/tmux-B6z7h_vZ.js +3 -0
  318. package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
  319. package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
  320. package/server/token-util-DuPuNriz.js +3 -0
  321. package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
  322. package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
  323. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
  324. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
  325. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
  326. package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
  327. package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
  328. package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
  329. package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
  330. package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
  331. package/server/validate-IfDGkaVR.js +177 -0
  332. package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
  333. package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
  334. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
  335. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
  336. package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
  337. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
  338. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
  339. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
  340. package/server/workflows-BQu4RFQ-.js +2 -0
  341. package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
  342. package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
  343. package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
  344. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
  345. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
  346. package/server/workspace-manager-CWT55qeI.js +3 -0
  347. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
  348. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
  349. package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
  350. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  351. package/sync-sources/agents/pan-merge-agent.md +1 -1
  352. package/sync-sources/agents/pan-planning-agent.md +4 -4
  353. package/sync-sources/agents/pan-work-agent.md +1 -1
  354. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  355. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  356. package/sync-sources/hooks/record-cost-event.js +369 -75
  357. package/sync-sources/hooks/session-start-hook +7 -0
  358. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  359. package/sync-sources/rules/per-bead-durability.md +1 -1
  360. package/sync-sources/rules/prd-authoring.md +1 -1
  361. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  362. package/sync-sources/skills/okf/README.md +11 -3
  363. package/sync-sources/skills/okf/SKILL.md +12 -1
  364. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  365. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  366. package/sync-sources/skills/pan/SKILL.md +2 -2
  367. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  368. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  369. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  370. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  371. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  372. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  373. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  374. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  375. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  376. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  377. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  378. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  379. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  380. package/sync-sources/skills/pan-start/SKILL.md +7 -3
  381. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  382. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  383. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  384. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  385. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  386. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  387. package/sync-sources/skills/plan/SKILL.md +11 -11
  388. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  389. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  390. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  391. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  392. package/server/agent-state-Co5Sy2Fw.js +0 -3
  393. package/server/agents-DyHKlq1I.js +0 -3
  394. package/server/cli-BRORS9qY.js +0 -3
  395. package/server/codex-DNyiQDKW.js +0 -3
  396. package/server/context-layers-15gDOk20.js +0 -165
  397. package/server/context-layers-DlQKkHH2.js +0 -4
  398. package/server/deacon-swarm-CV54eNmU.js +0 -2
  399. package/server/dist-j64RzSrQ.js +0 -3
  400. package/server/flywheel-6WHU4O7A.js +0 -207
  401. package/server/flywheel-COR0mbRI.js +0 -522
  402. package/server/flywheel-Ctr5uuvo.js +0 -2
  403. package/server/forge-B0_opi-V.js +0 -2
  404. package/server/git-utils-CsKGnzFA.js +0 -3
  405. package/server/hume-BmhvfVbV.js +0 -3
  406. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  407. package/server/layers-Cp1To4L8.js +0 -93
  408. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  409. package/server/merge-blockers-BYjeXrVN.js +0 -41
  410. package/server/merge-ops-DwWCkSgo.js +0 -2
  411. package/server/merge-set-DiISXcC-.js +0 -139
  412. package/server/projects-BKkwpH6q.js +0 -3
  413. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  414. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  415. package/server/rally-OSJXdiHK.js +0 -3
  416. package/server/rebuild-stack-CKjJAI8L.js +0 -3
  417. package/server/record-rwK-nKv_.js +0 -3
  418. package/server/record-update-Crz74r-6.js +0 -168
  419. package/server/resume-wZZsWtzz.js +0 -3
  420. package/server/review-status-Bnh-rdkY.js +0 -3
  421. package/server/settings-BlUsVaUc.js +0 -2
  422. package/server/specialists-Dqe6_HE5.js +0 -3
  423. package/server/specs-BhOKBzqk.js +0 -3
  424. package/server/stack-health-Bd06frFn.js +0 -3
  425. package/server/supervisor-COVHrBTg.js +0 -2
  426. package/server/tmux-BAvtac_u.js +0 -3
  427. package/server/token-util-BArZLN6w.js +0 -3
  428. package/server/workflows-C4mR0Reb.js +0 -2
  429. package/server/workspace-manager-B1WOfKvB.js +0 -3
@@ -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-DySPNmKN.js";
2
+ import { Q as getWorkAgentLifecycleStateSync, St as jsonResponse, bt as httpHandler, dt as rejectUnauthorizedDashboardRequest, et as spawnPanCli, gt as getHeaderFromMap, n as _serverManagedMerges, pt as rejectUnsafeDashboardMutationRequest } from "./specialists-CC4r-c2s.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-BEqFxlJc.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-R7N7y-Mh.js";
6
+ import { a as init_event_store, n as getEventStore } from "./event-store-CQL6NeqB.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-kZj_KyCk.js";
8
+ import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-ojZAzDBP.js";
9
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-B2ddP6wq.js";
10
+ import { Ar as saveAgentRuntimeState, Kt as transitionIssueToInReview, Or as getAgentRuntimeStateSync, X as messageAgent, b as init_agents, i as listRunningAgents, lt as spawnAgent, qn as getAgentState } from "./queries-CjNIf-Ub.js";
11
+ import { f as CostWriter, l as CostDoorLive } from "./service-CLeAoU6G.js";
12
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-G6latr8C.js";
13
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
14
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.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-VPV28g0g.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-C9kF1wtJ.js";
18
+ import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-6AfUfbwc.js";
19
+ import { a as normalizeModelOverrideSync, i as init_model_validation } from "./launcher-generator-BBWG_SiS.js";
20
+ import { f as init_config, m as loadConfigSync$1 } from "./config-BZ0sHTju.js";
21
+ import { a as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot, r as composeProjectNameForWorkspace, s as init_stack_health } from "./stack-health-DxSdG9cW.js";
22
+ import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-B1ucnjDU.js";
23
+ import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-C3QrAUd0.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-DTfAe4My.js";
25
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CBhNdzE4.js";
26
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-_d6XhyND.js";
27
+ import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-BXSlHwEh.js";
28
+ import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-CAAkqPLu.js";
29
+ import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-Du25Jtst.js";
30
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-_WygnyoX.js";
31
+ import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-Dci-ZwEt.js";
32
+ import { n as generateDailySummary, r as init_cli } from "./cli-RoOx5DUf.js";
33
+ import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-2uj-YQ8J.js";
34
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-C-69c3OI.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-4WOWlSYA.js";
36
+ import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-CefQNAnq.js";
37
+ import { n as init_release_set, t as getReleaseSetSync } from "./release-set-CQfuN9-v.js";
38
+ import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BaCVrH-N.js";
39
+ import { r as runVerificationForIssue } from "./verification-runner-CkgX6EtI.js";
40
+ import { t as teardownWorkspace } from "./teardown-workspace-DeTTImn-.js";
41
+ import { t as init_rebuild_stack } from "./rebuild-stack-lwtsW0GO.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-CA3Ihlxj.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-BZgOhRo7.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;
@@ -2611,7 +2777,9 @@ function mergeCompletionStatus(request) {
2611
2777
  return request.kind === "strike" ? {
2612
2778
  strikeLandingState: "landed",
2613
2779
  strikeReadyHead: void 0,
2614
- strikeReadyAt: void 0
2780
+ strikeReadyAt: void 0,
2781
+ strikeTransportRetryCount: void 0,
2782
+ strikeNextAttemptAt: void 0
2615
2783
  } : {};
2616
2784
  }
2617
2785
  function activeStrikeMerge(currentMerge, pendingOperation) {
@@ -2823,7 +2991,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2823
2991
  const prRef = parseGitHubPullRequestUrl(status.prUrl);
2824
2992
  if (!prRef) return false;
2825
2993
  try {
2826
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
2994
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
2827
2995
  if (!isGitHubAppConfigured()) return false;
2828
2996
  const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
2829
2997
  console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
@@ -2842,7 +3010,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2842
3010
  }
2843
3011
  /**
2844
3012
  * Build a rich PR body with issue link, tasks task summary, and AC checklist
2845
- * from the vBRIEF plan. Exported for testing.
3013
+ * from the xBRIEF plan. Exported for testing.
2846
3014
  */
2847
3015
  async function buildRichPRBody(issueId, workspacePath) {
2848
3016
  const lines = [];
@@ -3090,8 +3258,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3090
3258
  try {
3091
3259
  if (request.kind === "normal" && workspaceInfo.isRemote && workspaceInfo.vmName) {
3092
3260
  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");
3261
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-bUqbm3yc.js");
3262
+ const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
3095
3263
  const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3096
3264
  const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
3097
3265
  const remoteForge = remotePrimaryRepo?.forge || "github";
@@ -3127,7 +3295,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3127
3295
  ...mergeCompletionStatus(request)
3128
3296
  });
3129
3297
  completePendingOperation(issueId, null);
3130
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3298
+ const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
3131
3299
  await postMergeLifecycle(issueId, projectPath);
3132
3300
  return {
3133
3301
  success: true,
@@ -3164,10 +3332,10 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3164
3332
  const projectConfig = findProjectByTeamSync(issuePrefix);
3165
3333
  if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
3166
3334
  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");
3335
+ const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
3336
+ const { runQualityGates } = await import("./validation-CC9OPqJZ.js");
3337
+ const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
3338
+ const { messageAgent } = await import("./agents-wi9NWzs2.js");
3171
3339
  let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
3172
3340
  if (!mergeSet) {
3173
3341
  const error = `No merge set found for ${issueId}`;
@@ -3438,7 +3606,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3438
3606
  ...mergeCompletionStatus(request)
3439
3607
  });
3440
3608
  completePendingOperation(issueId, null);
3441
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3609
+ const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
3442
3610
  advanceQueue();
3443
3611
  await postMergeLifecycle(issueId, projectPath);
3444
3612
  return {
@@ -3449,8 +3617,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3449
3617
  repos: mergeResults
3450
3618
  };
3451
3619
  }
3452
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-6LEglm6o.js");
3453
- const { getForgeAdapter } = await import("./forge-B0_opi-V.js");
3620
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-bUqbm3yc.js");
3621
+ const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
3454
3622
  const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3455
3623
  const targetBranch = primaryRepo?.targetBranch || "main";
3456
3624
  const primaryForge = primaryRepo?.forge || "github";
@@ -3492,7 +3660,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3492
3660
  };
3493
3661
  }
3494
3662
  if (githubPrRef) try {
3495
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3663
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
3496
3664
  if (isGitHubAppConfigured()) {
3497
3665
  const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
3498
3666
  if (prState.state !== "OPEN" && !prState.merged) {
@@ -3554,7 +3722,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3554
3722
  ...mergeCompletionStatus(request)
3555
3723
  });
3556
3724
  completePendingOperation(issueId, null);
3557
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3725
+ const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
3558
3726
  await postMergeLifecycle(issueId, projectPath, branchName);
3559
3727
  return {
3560
3728
  success: true,
@@ -3568,13 +3736,13 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3568
3736
  } catch (prStateErr) {
3569
3737
  console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
3570
3738
  }
3571
- const { postMergeLifecycle } = await import("./merge-agent-B-SnXOoc.js");
3739
+ const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
3572
3740
  const agentId = request.kind === "strike" ? request.recoveryTarget : `agent-${issueId.toLowerCase()}`;
3573
3741
  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
3742
  setReviewStatus(issueId, { mergeStep: "rebasing" });
3575
3743
  console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
3576
3744
  {
3577
- const { beginShipLog, appendShipLog } = await import("./ship-log-__QtAFXG.js");
3745
+ const { beginShipLog, appendShipLog } = await import("./ship-log-D9MlVzYU.js");
3578
3746
  beginShipLog(issueId);
3579
3747
  appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
3580
3748
  }
@@ -3705,7 +3873,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3705
3873
  });
3706
3874
  let skipLocalVerification = false;
3707
3875
  if (primaryForge === "github" && artifactUrl) try {
3708
- const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3876
+ const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
3709
3877
  if (isGitHubAppConfigured()) {
3710
3878
  const ref = parsePullRequestRef({ url: artifactUrl });
3711
3879
  if (ref) {
@@ -3726,14 +3894,14 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3726
3894
  } catch (ciErr) {
3727
3895
  console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
3728
3896
  }
3729
- const { appendShipLog } = await import("./ship-log-__QtAFXG.js");
3897
+ const { appendShipLog } = await import("./ship-log-D9MlVzYU.js");
3730
3898
  if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
3731
3899
  const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
3732
3900
  console.log(`[merge] Running post-rebase verification for ${issueId}...`);
3733
3901
  appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
3734
- const { runVerificationForIssue } = await import("./verification-runner-DlJezzef.js");
3902
+ const { runVerificationForIssue } = await import("./verification-runner-BW4HOKAz.js");
3735
3903
  return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
3736
- syncTargetBranch: false,
3904
+ ...mergeVerificationOptions(request),
3737
3905
  onGateLog: (line) => appendShipLog(issueId, line, "verifying")
3738
3906
  }));
3739
3907
  })();
@@ -3764,7 +3932,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3764
3932
  console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
3765
3933
  setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
3766
3934
  try {
3767
- const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CU14oYzP.js");
3935
+ const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-ClZ2lk8D.js");
3768
3936
  if (githubPrRef && isGitHubAppConfigured()) {
3769
3937
  const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
3770
3938
  if (sha) {
@@ -3792,7 +3960,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3792
3960
  } catch (prMergeErr) {
3793
3961
  console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
3794
3962
  try {
3795
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-CU14oYzP.js");
3963
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
3796
3964
  if (githubPrRef && isGitHubAppConfigured()) {
3797
3965
  artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
3798
3966
  if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
@@ -3911,8 +4079,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
3911
4079
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3912
4080
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3913
4081
  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");
4082
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
4083
+ const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
3916
4084
  let mergeSet = getMergeSetSync(issueId);
3917
4085
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3918
4086
  const results = [];
@@ -4000,8 +4168,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
4000
4168
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4001
4169
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
4002
4170
  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");
4171
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
4172
+ const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
4005
4173
  let mergeSet = getMergeSetSync(issueId);
4006
4174
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
4007
4175
  const results = [];
@@ -4194,7 +4362,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4194
4362
  console.log(`[approve] Starting role pipeline for ${issueId}...`);
4195
4363
  let reviewResult;
4196
4364
  try {
4197
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
4365
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
4198
4366
  reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
4199
4367
  issueId,
4200
4368
  workspace: workspacePath,
@@ -4241,7 +4409,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4241
4409
  }
4242
4410
  console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
4243
4411
  try {
4244
- const { rebaseFeatureBranch } = await import("./merge-rebase-Cm6fXaZN.js");
4412
+ const { rebaseFeatureBranch } = await import("./merge-rebase-BfaTyXsw.js");
4245
4413
  const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4246
4414
  const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
4247
4415
  if (!rebaseResult.success) {
@@ -4261,7 +4429,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4261
4429
  completePendingOperation(issueId, pushResult.error);
4262
4430
  return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
4263
4431
  }
4264
- const { approve: lifecycleApprove } = await import("./lifecycle-CtPDcZ9u.js");
4432
+ const { approve: lifecycleApprove } = await import("./lifecycle-xmBfK2GJ.js");
4265
4433
  const ghResolved = resolveGitHubIssueSync(issueId);
4266
4434
  const isGitHubIssueFlag = ghResolved.isGitHub;
4267
4435
  const lifecycleCtx = {
@@ -4295,7 +4463,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
4295
4463
  })));
4296
4464
  const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
4297
4465
  const request = yield* HttpServerRequest.HttpServerRequest;
4298
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-C9DdEOKY.js"));
4466
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BrcU6qfe.js"));
4299
4467
  const expected = getInternalTokenSync();
4300
4468
  if (!expected) return jsonResponse({
4301
4469
  ok: false,
@@ -4309,7 +4477,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
4309
4477
  }, 403);
4310
4478
  const event = yield* readJsonBody;
4311
4479
  const type = event.type;
4312
- const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-CZsrU_nj.js"));
4480
+ const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-BJr8gQX6.js"));
4313
4481
  switch (type) {
4314
4482
  case "status_changed": {
4315
4483
  const issueId = event.issueId;
@@ -4472,7 +4640,7 @@ init_review_status();
4472
4640
  init_io();
4473
4641
  init_types();
4474
4642
  init_dag();
4475
- init_vbrief_index();
4643
+ init_xbrief_index();
4476
4644
  init_types$1();
4477
4645
  init_review_context();
4478
4646
  init_tldr_daemon();
@@ -4601,9 +4769,9 @@ async function getIndexStats(workspacePath) {
4601
4769
  function resolvePlanLocation(projectPath, issueId) {
4602
4770
  return Effect.gen(function* () {
4603
4771
  const workspacePath = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4604
- const found = yield* findVBriefByIssue(projectPath, issueId);
4772
+ const found = yield* findXBriefByIssue(projectPath, issueId);
4605
4773
  if (found) {
4606
- const doc = yield* readVBriefDocument(found.path);
4774
+ const doc = yield* readXBriefDocument(found.path);
4607
4775
  return {
4608
4776
  path: found.path,
4609
4777
  lifecycleDir: found.lifecycleDir,
@@ -4990,7 +5158,7 @@ const getWorkspacePlanRoute = HttpRouter.add("GET", "/api/workspaces/:issueId/pl
4990
5158
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
4991
5159
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4992
5160
  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 });
5161
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
4994
5162
  const cp = criticalPath(actionableDoc(location.doc));
4995
5163
  return jsonResponse({
4996
5164
  ...location.doc,
@@ -5026,14 +5194,14 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
5026
5194
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
5027
5195
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
5028
5196
  const policy = (yield* readJsonBody).inspectionPolicy;
5029
- if (!VBRIEF_INSPECTION_POLICIES.includes(policy)) return jsonResponse({ error: "Invalid inspection policy" }, { status: 400 });
5197
+ if (!XBRIEF_INSPECTION_POLICIES.includes(policy)) return jsonResponse({ error: "Invalid inspection policy" }, { status: 400 });
5030
5198
  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 });
5199
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
5032
5200
  const now = (/* @__PURE__ */ new Date()).toISOString();
5033
5201
  const updated = {
5034
5202
  ...location.doc,
5035
- vBRIEFInfo: {
5036
- ...location.doc.vBRIEFInfo,
5203
+ xBRIEFInfo: {
5204
+ ...location.doc.xBRIEFInfo,
5037
5205
  inspectionPolicy: policy,
5038
5206
  updated: now
5039
5207
  },
@@ -5042,7 +5210,7 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
5042
5210
  updated: now
5043
5211
  }
5044
5212
  };
5045
- yield* Effect.promise(() => writeFile(location.path, JSON.stringify(updated, null, 2) + "\n", "utf-8"));
5213
+ yield* Effect.promise(() => writeFile(location.path, `${serializeXBriefDocument(updated)}\n`, "utf-8"));
5046
5214
  const cp = criticalPath(updated);
5047
5215
  return jsonResponse({
5048
5216
  ...updated,
@@ -5084,10 +5252,10 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
5084
5252
  if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
5085
5253
  const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
5086
5254
  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)));
5255
+ yield* Effect.promise(() => import("./record-CN0pj4_5.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
5088
5256
  const projectPath = project.path;
5089
5257
  const location = yield* resolvePlanLocation(projectPath, issueId);
5090
- if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
5258
+ if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
5091
5259
  const globalEnabled = loadConfigSync().config.tieredExecution?.enabled ?? false;
5092
5260
  const planMetadata = location.doc.plan?.metadata;
5093
5261
  let source;
@@ -5431,6 +5599,33 @@ const MAX_AUTO_REQUEUE = 25;
5431
5599
  const requestReviewPipeline = createRequestReviewPipeline();
5432
5600
  /** Safe `.message` read for caught values of unknown shape. */
5433
5601
  const errorMessage = (e) => e instanceof Error ? e.message : void 0;
5602
+ /**
5603
+ * Push the feature branch of every repo in the workspace (PAN-2948).
5604
+ *
5605
+ * A polyrepo workspace root is a one-commit wrapper repo with no remote and no
5606
+ * feature branch — pushing there fails and, on the verified-dispatch path,
5607
+ * kills the whole re-review pipeline. Loop the resolved repo roots instead
5608
+ * (mirrors rebase-helper.ts), skipping repos whose feature branch doesn't
5609
+ * exist locally (untouched sub-repos). Monorepo resolves to a single root at
5610
+ * the workspace path, preserving the previous behavior.
5611
+ */
5612
+ async function pushFeatureBranches(issueId, workspacePath) {
5613
+ const { resolveWorkspaceRepoRootsSync } = await import("./project-repos-DXKQsc_m.js");
5614
+ for (const root of resolveWorkspaceRepoRootsSync(issueId, workspacePath)) {
5615
+ try {
5616
+ await execAsync$2(`git rev-parse --verify --quiet refs/heads/${root.sourceBranch}`, {
5617
+ cwd: root.dir,
5618
+ encoding: "utf-8"
5619
+ });
5620
+ } catch {
5621
+ continue;
5622
+ }
5623
+ await execAsync$2(`git push origin ${root.sourceBranch}`, {
5624
+ cwd: root.dir,
5625
+ encoding: "utf-8"
5626
+ });
5627
+ }
5628
+ }
5434
5629
  function shouldTreatAsRerun(status) {
5435
5630
  if (!status) return false;
5436
5631
  return status.readyForMerge === true || status.reviewStatus === "passed" || status.testStatus === "passed" || status.mergeStatus === "failed";
@@ -5542,15 +5737,12 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5542
5737
  console.warn(`[review] Could not transition ${issueId} to in_review: ${errorMessage(err)}`);
5543
5738
  });
5544
5739
  try {
5545
- await execAsync$2(`git push origin ${branchName}`, {
5546
- cwd: workspacePath,
5547
- encoding: "utf-8"
5548
- });
5740
+ await pushFeatureBranches(issueId, workspacePath);
5549
5741
  } catch (pushErr) {
5550
5742
  console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
5551
5743
  }
5552
5744
  try {
5553
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-CXywD0F2.js");
5745
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-nRDPuMxd.js");
5554
5746
  const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
5555
5747
  const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
5556
5748
  artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
@@ -5605,7 +5797,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5605
5797
  } catch {}
5606
5798
  return;
5607
5799
  }
5608
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
5800
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
5609
5801
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5610
5802
  const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
5611
5803
  issueId,
@@ -5736,15 +5928,12 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5736
5928
  console.warn(`[request-review] Could not transition ${issueId} to in_review: ${errorMessage(err)}`);
5737
5929
  });
5738
5930
  try {
5739
- await execAsync$2(`git push origin ${branchNameRerun}`, {
5740
- cwd: workspacePathRerun,
5741
- encoding: "utf-8"
5742
- });
5931
+ await pushFeatureBranches(issueId, workspacePathRerun);
5743
5932
  } catch (pushErr) {
5744
5933
  console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
5745
5934
  }
5746
5935
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5747
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
5936
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
5748
5937
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5749
5938
  issueId,
5750
5939
  workspace: workspacePathRerun,
@@ -5794,7 +5983,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5794
5983
  });
5795
5984
  } else {
5796
5985
  const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
5797
- const { spawnRun } = yield* Effect.promise(() => import("./agents-DyHKlq1I.js"));
5986
+ const { spawnRun } = yield* Effect.promise(() => import("./agents-wi9NWzs2.js"));
5798
5987
  try {
5799
5988
  const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
5800
5989
  setReviewStatus(issueId, { testStatus: "testing" });
@@ -5890,12 +6079,8 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5890
6079
  });
5891
6080
  },
5892
6081
  pushBranch: async () => {
5893
- const pushCommand = `git push origin ${branchName}`;
5894
- if (workspaceInfo.isRemote && workspaceInfo.vmName) await execAsync$2(flyExecCmd(workspaceInfo.vmName, `cd ${workspacePath} && ${pushCommand}`), { encoding: "utf-8" });
5895
- else await execAsync$2(pushCommand, {
5896
- cwd: workspacePath,
5897
- encoding: "utf-8"
5898
- });
6082
+ if (workspaceInfo.isRemote && workspaceInfo.vmName) await execAsync$2(flyExecCmd(workspaceInfo.vmName, `cd ${workspacePath} && git push origin ${branchName}`), { encoding: "utf-8" });
6083
+ else await pushFeatureBranches(issueId, workspacePath);
5899
6084
  console.log(`[request-review] Pushed verified branch ${branchName} for ${issueId}`);
5900
6085
  },
5901
6086
  dispatchReview: async () => {
@@ -5904,7 +6089,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5904
6089
  testStatus: "pending",
5905
6090
  reviewNotes
5906
6091
  });
5907
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
6092
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
5908
6093
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5909
6094
  issueId,
5910
6095
  workspace: workspacePath,
@@ -6213,7 +6398,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6213
6398
  const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
6214
6399
  if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
6215
6400
  try {
6216
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-B-SnXOoc.js"));
6401
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CKkgIBPB.js"));
6217
6402
  resetPostMergeState(issueId);
6218
6403
  } catch (err) {
6219
6404
  console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
@@ -6222,7 +6407,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6222
6407
  const rerun = body?.rerun === true;
6223
6408
  if (rerun) try {
6224
6409
  yield* Effect.promise(async () => {
6225
- const { spawnReviewRoleForIssue } = await import("./review-agent-CCum8sGe.js");
6410
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
6226
6411
  const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
6227
6412
  if (dispatchArgs) {
6228
6413
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
@@ -6251,7 +6436,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6251
6436
  const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
6252
6437
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
6253
6438
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6254
- const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-CCum8sGe.js"));
6439
+ const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-DNboMyW4.js"));
6255
6440
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
6256
6441
  const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
6257
6442
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
@@ -6281,8 +6466,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6281
6466
  success: false,
6282
6467
  error: "Workspace does not exist"
6283
6468
  }, { status: 400 });
6284
- const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BKkwpH6q.js"));
6285
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-CCum8sGe.js"));
6469
+ const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-vjjcmiN8.js"));
6470
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DNboMyW4.js"));
6286
6471
  const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
6287
6472
  setReviewStatus(issueId, {
6288
6473
  reviewStatus: "pending",
@@ -6354,8 +6539,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
6354
6539
  const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
6355
6540
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6356
6541
  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");
6542
+ const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
6543
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DNboMyW4.js");
6359
6544
  const project = resolveProjectForIssue(issueId);
6360
6545
  const record = project ? readIssueRecordSync(project, issueId) : null;
6361
6546
  return {
@@ -6390,9 +6575,9 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
6390
6575
  return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
6391
6576
  }
6392
6577
  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");
6578
+ const { resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
6579
+ const { updateIssueRecord } = await import("./record-update-bLJxAXH4.js");
6580
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DNboMyW4.js");
6396
6581
  const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
6397
6582
  if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
6398
6583
  else current.reviewMode = body.reviewMode;
@@ -6825,7 +7010,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
6825
7010
  */
6826
7011
  async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
6827
7012
  try {
6828
- const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-rwK-nKv_.js");
7013
+ const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
6829
7014
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
6830
7015
  return recordView ? JSON.stringify(recordView, null, 2) : null;
6831
7016
  } catch {
@@ -7584,7 +7769,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
7584
7769
  if (queuePosition === null) try {
7585
7770
  const resolved = resolveProjectFromIssueSync(issueId);
7586
7771
  if (resolved) {
7587
- const { getQueueForProject } = yield* Effect.promise(() => import("./merge-BwsyNRJV.js"));
7772
+ const { getQueueForProject } = yield* Effect.promise(() => import("./merge-B1DiziGU.js"));
7588
7773
  const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
7589
7774
  id: String(e.id),
7590
7775
  type: "task",
@@ -7622,7 +7807,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7622
7807
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
7623
7808
  if (workspaceInfo.exists && workspaceInfo.localPath) {
7624
7809
  const localPath = workspaceInfo.localPath;
7625
- const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-CsKGnzFA.js"));
7810
+ const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-D0_yhCgF.js"));
7626
7811
  try {
7627
7812
  const gitInfo = yield* getWorkspaceGitInfo(localPath);
7628
7813
  if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
@@ -7637,7 +7822,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7637
7822
  if (verificationStatus) update.verificationStatus = verificationStatus;
7638
7823
  if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
7639
7824
  const status = setReviewStatus(issueId, update);
7640
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Dqe6_HE5.js"));
7825
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DM6bWjsi.js"));
7641
7826
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
7642
7827
  if (reviewStatus && [
7643
7828
  "passed",
@@ -7655,7 +7840,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7655
7840
  const agentId = `agent-${issueId.toLowerCase()}`;
7656
7841
  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
7842
  try {
7658
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-Bx5z11mF.js"));
7843
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-D3a22RCd.js"));
7659
7844
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7660
7845
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7661
7846
  issueId,
@@ -7719,7 +7904,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7719
7904
  const agentId = `agent-${issueId.toLowerCase()}`;
7720
7905
  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
7906
  try {
7722
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-Bx5z11mF.js"));
7907
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-D3a22RCd.js"));
7723
7908
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7724
7909
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7725
7910
  issueId,
@@ -7752,14 +7937,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7752
7937
  });
7753
7938
  yield* Effect.promise(async () => {
7754
7939
  try {
7755
- const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BKkwpH6q.js");
7940
+ const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-vjjcmiN8.js");
7756
7941
  const project = resolveProjectFromIssueSync(issueId);
7757
7942
  const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
7758
7943
  if (!repo || !repo.includes("/")) return;
7759
7944
  const [owner, name] = repo.split("/");
7760
7945
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7761
7946
  if (!wsInfo?.localPath) return;
7762
- const { postOverdeckTestsStatus } = await import("./github-app-CU14oYzP.js");
7947
+ const { postOverdeckTestsStatus } = await import("./github-app-ClZ2lk8D.js");
7763
7948
  await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
7764
7949
  } catch (err) {
7765
7950
  console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
@@ -7801,7 +7986,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7801
7986
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7802
7987
  const issueLower = issueId.toLowerCase();
7803
7988
  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"));
7989
+ const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-ClZ2lk8D.js"));
7805
7990
  if (!isGitHubAppConfigured()) return jsonResponse({
7806
7991
  success: false,
7807
7992
  error: "GitHub App not configured"
@@ -7814,6 +7999,6 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7814
7999
  })));
7815
8000
  const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspaceRebuildRoute, postWorkspaceRebuildAndStartRoute, uatStackActionRouteLayer, getWorkspaceStateMdRoute, getWorkspaceInferenceMdRoute, stashCleanRouteLayer, containerOpsRouteLayer, postWorkspaceStartRoute, getWorkspaceReviewStatusRoute, postWorkspaceReviewStatusRoute, reviewPipelineRouteLayer, reviewControlRouteLayer, mergeOpsRouteLayer, postWorkspaceRefreshTokenRoute);
7816
8001
  //#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 };
8002
+ 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
8003
 
7819
- //# sourceMappingURL=workspaces-CFPcL0vl.js.map
8004
+ //# sourceMappingURL=workspaces-Do_9J0LQ.js.map