@overdeck/desktop 0.45.16 → 0.45.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/dist-electron/main.js +149 -158
  2. package/dist-electron/main.js.map +1 -1
  3. package/dist-electron/preload.js +17 -2
  4. package/dist-electron/preload.js.map +1 -1
  5. package/package.json +5 -4
  6. package/server/acceptance-criteria-aQFKQf-J.js +62 -0
  7. package/server/{advancing-selfheal-DJYAvGv-.js → advancing-selfheal-DgwQgm4D.js} +6 -6
  8. package/server/{agent-gc-D0wDIeV1.js → agent-gc-kpzxqT7P.js} +3 -3
  9. package/server/agent-state-C_6TG-Ad.js +3 -0
  10. package/server/{agent-state-service-CZrayD_G.js → agent-state-service-BUfovFfB.js} +1 -1
  11. package/server/{agent-state-service-DFslS5go.js → agent-state-service-nUD3qfob.js} +5 -5
  12. package/server/agents-BA15AQqo.js +3 -0
  13. package/server/{briefing-freshness-DESTCWo-.js → agents-BHBxr8c9.js} +5 -131
  14. package/server/{archive-planning-CbghE9-o.js → archive-planning-CzCW9Ifl.js} +5 -10
  15. package/server/{archive-planning-CoyIbgGK.js → archive-planning-D-QsBufn.js} +1 -1
  16. package/server/{artifact-index-jobs-CcSrUoSE.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
  17. package/server/{backlog-auto-trigger-BfgDsII0.js → backlog-auto-trigger-B7Bi0bvY.js} +2 -2
  18. package/server/{behavior-BTpYbAv4.js → behavior-CWqNMqE5.js} +2 -2
  19. package/server/briefing-freshness-DuxIE1yr.js +131 -0
  20. package/server/{checkpoint-manager-BwFdegJF.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
  21. package/server/{checkpoint-manager-DWSXooZV.js → checkpoint-manager-DixkLus7.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-fjadfOKF.js → checkpoints-B1Z42tJE.js} +1 -1
  24. package/server/{checkpoints-BtUonbs3.js → checkpoints-BiviJqei.js} +2 -2
  25. package/server/{claude-hooks-provision-DiK62u0k.js → claude-hooks-provision-BeMGi4ty.js} +1 -1
  26. package/server/{claude-hooks-provision-DAtxutOs.js → claude-hooks-provision-Du_PkMsp.js} +2 -2
  27. package/server/{claude-permissions-CThLgf8d.js → claude-permissions-BB6agcOZ.js} +2 -2
  28. package/server/{claude-settings-overlay-BF9MPIwx.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
  29. package/server/{claude-settings-overlay-Dx_Uqcmv.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
  30. package/server/cli-BFgrSWKV.js +3 -0
  31. package/server/{cli-ByKIIMfT.js → cli-C33xPZNm.js} +9 -9
  32. package/server/{cliproxy-C_GuT5DU.js → cliproxy-BQX1TL6N.js} +1 -1
  33. package/server/{cliproxy-B4c1BUvs.js → cliproxy-CGBA1GzA.js} +2 -2
  34. package/server/{close-issue-BOuLKr6e.js → close-issue-DNv8npc1.js} +5 -5
  35. package/server/{closed-issue-reaper-CksfuiFD.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
  36. package/server/{closed-issue-reaper-DCAYzNXW.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
  37. package/server/codex-DxLivxri.js +3 -0
  38. package/server/{codex-parser-mFYZh8vR.js → codex-parser-DboQnEXN.js} +2 -2
  39. package/server/{codex-BbqIRZjd.js → codex-sgWVCGUd.js} +43 -18
  40. package/server/{config-Dj6N8EP9.js → config-6MCHOZ2N.js} +1 -1
  41. package/server/{config-DVLdmnMJ.js → config-DfaUXr6r.js} +2 -2
  42. package/server/{config-yaml-cNOZcEww.js → config-yaml-CqaAyn8y.js} +74 -74
  43. package/server/{conflict-gate-BMKm_5DV.js → conflict-gate-BF_zhcmb.js} +3 -3
  44. package/server/{conflict-gate-CuXUv-bP.js → conflict-gate-BubJprtD.js} +1 -1
  45. package/server/{context-layers-c0JqYHcS.js → context-layers-BFrxfl0l.js} +17 -3
  46. package/server/{context-layers-CeAwSYNt.js → context-layers-DWL_8HhY.js} +2 -2
  47. package/server/{control-settings-D4EFsRBd.js → control-settings-BguNQ1F_.js} +4 -4
  48. package/server/{conversation-compaction-kHVfVRg3.js → conversation-compaction-CRKAf2qP.js} +1 -1
  49. package/server/{conversation-compaction-BCggyih4.js → conversation-compaction-DxSXl0pT.js} +8 -8
  50. package/server/{conversation-service-BTzObqGi.js → conversation-service-DzuY9qoH.js} +1 -1
  51. package/server/{conversation-service-B8LFQQm1.js → conversation-service-mFVFdDQK.js} +6 -6
  52. package/server/{conversations-B-lcHv-5.js → conversations-BX5aD-6F.js} +4 -4
  53. package/server/{conversations-BM7zlXjr.js → conversations-BajHQ60c.js} +1 -1
  54. package/server/{cost-D9kPIY_5.js → cost-BoqD1Pxz.js} +2 -2
  55. package/server/{cost-BcpRQ-7o.js → cost-DuZ5vlv-.js} +3 -3
  56. package/server/{cost-sync-DF6odxK9.js → cost-sync-BYnmnMkY.js} +3 -3
  57. package/server/{dag-DKI3sOmX.js → dag-C6kYyF17.js} +7 -243
  58. package/server/{dangerous-git-ops-Bn18PEcN.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
  59. package/server/dashboard-db-worker.js +6 -6
  60. package/server/{deacon-DONuopff.js → deacon-CwCiNuEZ.js} +3 -3
  61. package/server/{deacon-DdARMjZq.js → deacon-Dru5onpk.js} +233 -162
  62. package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
  63. package/server/{deacon-swarm-BNGkmYR_.js → deacon-swarm-BPmBmSoU.js} +298 -72
  64. package/server/deacon-swarm-CKyGJng1.js +2 -0
  65. package/server/deacon.js +14 -7
  66. package/server/{devcontainer-renderer-C-34Sxyz.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
  67. package/server/{dist-BMXvKiZP.js → dist-BwlEiLCU.js} +1 -1
  68. package/server/dist-Bx4KkgYL.js +3 -0
  69. package/server/{dist-src-BgGUblXg.js → dist-src-BE0Denfs.js} +1 -1
  70. package/server/{docker-apZ9pBYw.js → docker-CNjXS72x.js} +2 -2
  71. package/server/{ensure-devcontainer-Bqi1EF1P.js → ensure-devcontainer-5e9xOve4.js} +4 -4
  72. package/server/{ensure-devcontainer-Dq3KoOIl.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
  73. package/server/{esm-shims-BEjvINX3.js → esm-shims-Cso7IGBC.js} +1 -1
  74. package/server/{event-store-CqDgfbAs.js → event-store-D9UhQyMS.js} +1 -1
  75. package/server/{event-store-D89fMfXS.js → event-store-KZnWUKWh.js} +3 -3
  76. package/server/{events-S_C0pvl6.js → events-2eFUPdqz.js} +3 -3
  77. package/server/{events-rIGncmP1.js → events-BYbvqZky.js} +1 -1
  78. package/server/{factory-DV18m0rc.js → factory-BtaRsHFC.js} +20 -17
  79. package/server/{feature-registry-population-CqZSnqQi.js → feature-registry-population-Ca2UaV0U.js} +4 -4
  80. package/server/{feature-registry-storage-BeXmNBwK.js → feature-registry-storage-DaP-bQxO.js} +2 -2
  81. package/server/{features-u5XeMaOK.js → features-DqvaoQoa.js} +2 -2
  82. package/server/{feedback-target-CwyWf0Dg.js → feedback-target-BXWdOiYI.js} +9 -7
  83. package/server/{feedback-target-DDG1PWl3.js → feedback-target-BblmMe9P.js} +1 -1
  84. package/server/{feedback-writer-BsJiw5aT.js → feedback-writer-CULeOOY4.js} +1 -1
  85. package/server/{feedback-writer-D20HSXre.js → feedback-writer-Dn8o9ZyE.js} +4 -4
  86. package/server/{flywheel-RCnHAgc4.js → flywheel-BUWdcfhq.js} +1 -1
  87. package/server/{flywheel-Dczmgchd.js → flywheel-CqkO3cDj.js} +15 -28
  88. package/server/{flywheel-9Y1X7IM-.js → flywheel-D9r1mw2U.js} +13 -13
  89. package/server/{flywheel-merge-order-DEtEd3aK.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
  90. package/server/{flywheel-merge-order-CtCYsFJP.js → flywheel-merge-order-VtjUweEb.js} +6 -6
  91. package/server/forge-DJy3Zx4s.js +2 -0
  92. package/server/{forge-DFDThFil.js → forge-wEollMCi.js} +22 -12
  93. package/server/{from-NSJypkI8.js → from-B2tOYhYV.js} +1 -1
  94. package/server/{fts-db-C5A_TTOM.js → fts-db-Bgzn2RO7.js} +2 -2
  95. package/server/{fts-operations-DvCSimfU.js → fts-operations-Bj8yutnR.js} +2 -2
  96. package/server/{git-utils-Dr0L7mFk.js → git-utils-GxlL0tmt.js} +2 -2
  97. package/server/{git-utils-C0neHvQx.js → git-utils-q8jNoBts.js} +1 -1
  98. package/server/{github-app-Bwt9lK4A.js → github-app-BrYwK_Gb.js} +1 -1
  99. package/server/{github-app-u9-SX7Gc.js → github-app-tUbb8Ldr.js} +8 -3
  100. package/server/{github-client-Btyy3uan.js → github-client-BwBU41jK.js} +3 -3
  101. package/server/{github-client-Do3k-N1W.js → github-client-D6CNsftm.js} +1 -1
  102. package/server/{github-pr-lookup-DOF1U2WW.js → github-pr-lookup-BS5PqkJb.js} +2 -2
  103. package/server/{harness-resolve-C6g2R0Cd.js → harness-resolve-Dx8hUsvC.js} +3 -3
  104. package/server/{health-events-B4u-2a9m.js → health-events-2DLp-5Xp.js} +2 -2
  105. package/server/{health-events-Bos3sk5g.js → health-events-B0mj6Iae.js} +1 -1
  106. package/server/{hooks-uEr8WTx_.js → hooks-BDcQJDUe.js} +1 -1
  107. package/server/{hooks-BCoOjL_R.js → hooks-BS_JrvYP.js} +3 -3
  108. package/server/hume-B4seN95Y.js +3 -0
  109. package/server/{hume-BqxYKbUf.js → hume-BRhNKyXQ.js} +2 -2
  110. package/server/{idle-stack-reaper-DbZ8ukMd.js → idle-stack-reaper-BCITXNW5.js} +2 -2
  111. package/server/{idle-stack-reaper-H0W6XtHh.js → idle-stack-reaper-C1ymihno.js} +1 -1
  112. package/server/{infra-Ba9mS6e6.js → infra-_Kx1m9pm.js} +9 -4
  113. package/server/{injection-C1DKXeIZ.js → injection-Bvhyg_MV.js} +1 -1
  114. package/server/{injection-yrMBxzVq.js → injection-CCaYkofq.js} +7 -7
  115. package/server/{inspect-agent-B-mnb4uh.js → inspect-agent-BqyZ4pCo.js} +35 -67
  116. package/server/inspect-agent-DCJQm9Wu.js +2 -0
  117. package/server/{internal-token-BtqSbKTx.js → internal-token-Cl-1IxaE.js} +2 -2
  118. package/server/{internal-token-BPYEaXFh.js → internal-token-D-t28de5.js} +1 -1
  119. package/server/{io-VEGSAqsd.js → io-DkC4sFSy.js} +36 -43
  120. package/server/{issue-closed-BxcePXL-.js → issue-closed-Cpl4VDUM.js} +41 -6
  121. package/server/{issue-lifecycle--8MRxrG1.js → issue-lifecycle-CFR8TJ22.js} +22 -37
  122. package/server/{issue-lifecycle-CdMUauyb.js → issue-lifecycle-YNTy3OT3.js} +1 -1
  123. package/server/{issue-service-singleton-MZsDhAob.js → issue-service-singleton-D81mCts_.js} +1 -1
  124. package/server/{issue-service-singleton-CkTUI-eu.js → issue-service-singleton-ldvUUXi3.js} +29 -29
  125. package/server/{issues-CBAsuoAO.js → issues-DIEHt9sq.js} +2 -2
  126. package/server/{jsonl-parser-BUW5_sSK.js → jsonl-parser-Cd5jIqh7.js} +3 -3
  127. package/server/{label-cleanup-htK6fBRU.js → label-cleanup-Btny6Gyo.js} +3 -3
  128. package/server/{state-home-CEvD_v5F.js → launcher-generator-BXLM9f4b.js} +7 -127
  129. package/server/{layers-jjL16At6.js → layers-gCJlK62m.js} +2 -2
  130. package/server/lifecycle-D7aQUnTO.js +12 -0
  131. package/server/{lifecycle-io-DXv8Utct.js → lifecycle-io-DQBF-GHO.js} +1 -1
  132. package/server/{lifecycle-io-IehcRt2v.js → lifecycle-io-FfPUtz-y.js} +4 -4
  133. package/server/{linear-client-D9cSQfvD.js → linear-client-CDH2D6Qy.js} +3 -3
  134. package/server/{linear-client-By7hjwuN.js → linear-client-WrYrUIAH.js} +1 -1
  135. package/server/memory-fts-worker.js +1 -1
  136. package/server/{merge-BN8FGJ2q.js → merge-BsDgUxFz.js} +3 -3
  137. package/server/{merge-BLcEZNXz.js → merge-Dervs4BF.js} +1 -1
  138. package/server/{merge-agent-B3u2szOL.js → merge-agent-D6DNhe9j.js} +64 -51
  139. package/server/{merge-agent-ejC7Wos8.js → merge-agent-DMQTJMP0.js} +1 -1
  140. package/server/{merge-batch-DyqlgYGp.js → merge-batch-Bv6Z5K2H.js} +1 -1
  141. package/server/{merge-blockers-cq-aS2KG.js → merge-blockers-WWWi6Ur2.js} +2 -2
  142. package/server/merge-ops-h9OCnIVz.js +2 -0
  143. package/server/{merge-rebase-Dl7yIxtV.js → merge-rebase-Czth9ggm.js} +2 -2
  144. package/server/{merge-set-CZ9Nbay0.js → merge-set-DNc4zBqd.js} +3 -3
  145. package/server/{merge-set-Dy0D0r3i.js → merge-set-vuE3MEVt.js} +1 -1
  146. package/server/{merge-sync-D7jWLgCC.js → merge-sync-B2KSk54U.js} +2 -2
  147. package/server/{merge-sync-CG9kDCdT.js → merge-sync-B9nHdUGx.js} +1 -1
  148. package/server/{merge-train-CH33XJOH.js → merge-train-DJgr81tF.js} +3 -3
  149. package/server/{merge-train-deps-JoVdGnOg.js → merge-train-deps-B2OWS0k9.js} +4 -4
  150. package/server/{merge-verification-D4wTChdX.js → merge-verification-BBIXUEqa.js} +4 -4
  151. package/server/{multipart-parser-Csn8U-K9.js → multipart-parser-9DhuAkPd.js} +2 -2
  152. package/server/node_modules/.package-lock.json +11 -11
  153. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  154. package/server/node_modules/toml/README.md +54 -0
  155. package/server/node_modules/toml/index.d.ts +42 -1
  156. package/server/node_modules/toml/index.js +3 -3
  157. package/server/node_modules/toml/lib/compiler.js +35 -3
  158. package/server/node_modules/toml/lib/parser.js +224 -143
  159. package/server/node_modules/toml/package.json +3 -1
  160. package/server/node_modules/ws/lib/receiver.js +15 -32
  161. package/server/node_modules/ws/lib/websocket-server.js +4 -4
  162. package/server/node_modules/ws/lib/websocket.js +4 -4
  163. package/server/node_modules/ws/package.json +5 -1
  164. package/server/{orphan-proposed-reconciler-DI_IS1p_.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
  165. package/server/{orphan-proposed-reconciler-BIcNu4tl.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
  166. package/server/package-lock.json +12 -12
  167. package/server/package.json +1 -1
  168. package/server/{pan-dir-CQIfKG8c.js → pan-dir-BTw4MdSe.js} +4 -4
  169. package/server/{paths-Blj6A9AJ.js → paths-Btkc8mzp.js} +2 -2
  170. package/server/{pipeline-notifier-BH4PAi-w.js → pipeline-notifier-3frIvSi3.js} +1 -1
  171. package/server/{pipeline-notifier-D_WYtEwl.js → pipeline-notifier-DTd19f18.js} +2 -2
  172. package/server/{project-pipelines-jMTitpeO.js → project-pipelines-B95fcAek.js} +2 -2
  173. package/server/projects-Dc9aoVoG.js +3 -0
  174. package/server/{prompts-B3njaImU.js → prompts-CIVmjHxn.js} +2 -2
  175. package/server/{providers-DnPxkHoG.js → providers-BLLk5IIb.js} +1 -1
  176. package/server/{providers-BbEyFhPX.js → providers-C-yWibCk.js} +7 -7
  177. package/server/public/assets/{chunk-BO2N2NFS-3qh9TUJi.js → chunk-BO2N2NFS-DzKZyoKY.js} +4 -4
  178. package/server/public/assets/{diagram-OG6HWLK6-D8UVTPj7.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
  179. package/server/public/assets/{dist-BvLLn1YC.js → dist-BqccLhaw.js} +3 -3
  180. package/server/public/assets/{dist-CyubL7Wj.js → dist-rC3nAs_O.js} +1 -1
  181. package/server/public/assets/{ganttDiagram-6RSMTGT7-BI4E1LbQ.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
  182. package/server/public/assets/{highlighted-body-OFNGDK62-D_bapWkF.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
  183. package/server/public/assets/index-CPcysUHk.js +796 -0
  184. package/server/public/assets/index-H5M0yhM4.css +1 -0
  185. package/server/public/assets/{linear-CEdobObr.js → linear-yqcXkDfj.js} +1 -1
  186. package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
  187. package/server/public/assets/{pieDiagram-4H26LBE5-DT79L01f.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
  188. package/server/public/assets/{prod-CR_K2DFV.js → prod-DKUunUdN.js} +4 -4
  189. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BEkKXXrL.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
  190. package/server/public/assets/{sankeyDiagram-5OEKKPKP-BxSCqn-j.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
  191. package/server/public/assets/{xychartDiagram-2RQKCTM6-DicwJGG_.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
  192. package/server/public/index.html +2 -2
  193. package/server/{pull-requests-43LPDfM8.js → pull-requests-D7AL5woD.js} +1 -1
  194. package/server/{pull-requests-DyUkQl4W.js → pull-requests-NDDNtqNq.js} +3 -3
  195. package/server/{agents-B9GwfCyp.js → queries-C0LCGG21.js} +710 -325
  196. package/server/{rally-BtWjybOa.js → rally-4oKvnxLG.js} +3 -3
  197. package/server/rally-DF5a3ioP.js +3 -0
  198. package/server/{rally-api-B-osULNL.js → rally-api-41tT6ikZ.js} +2 -2
  199. package/server/{rally-api-B-YA_oXx.js → rally-api-BsaQ8Vnz.js} +1 -1
  200. package/server/{rally-client-sErNQBO0.js → rally-client-Bo4hNcCZ.js} +5 -5
  201. package/server/{rally-client-CzFymP7P.js → rally-client-b5PT1x5L.js} +1 -1
  202. package/server/{reap-terminal-sessions-DnDQ7pf9.js → reap-terminal-sessions-BR39qflC.js} +1 -1
  203. package/server/{reap-terminal-sessions-2s-fvilz.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
  204. package/server/{rebuild-stack-nGD_nPZo.js → rebuild-stack-C7JPUom6.js} +1 -1
  205. package/server/{rebuild-stack-CoU-HqZj.js → rebuild-stack-Ddv6W017.js} +5 -5
  206. package/server/{reconstruct-cache-Wj8GrYB0.js → reconstruct-cache-Gqhm---K.js} +6 -6
  207. package/server/record-DLOqfbkI.js +3 -0
  208. package/server/record-update-BltEmPge.js +168 -0
  209. package/server/record-update-CDp7aTaT.js +3 -0
  210. package/server/recovery-trip-Cn7KJVkS.js +44 -0
  211. package/server/{release-engine-CBLQXDlH.js → release-engine-BYzmIBf9.js} +5 -5
  212. package/server/{release-set-BNiqi7hy.js → release-set-7pnxFOWR.js} +3 -3
  213. package/server/{remote-DW_TWQnr.js → remote-Cvu4CSDk.js} +3 -3
  214. package/server/{remote-agents-C4cyxHQS.js → remote-agents-C2C6z9tj.js} +6 -33
  215. package/server/{remote-agents-Cv-U-_V8.js → remote-agents-DYY5fFpd.js} +1 -1
  216. package/server/{remote-completion-PhXGGFQy.js → remote-completion-2Kb4IDg_.js} +13 -13
  217. package/server/{remote-DcO9An_f.js → remote-rN0ecjHE.js} +3 -3
  218. package/server/resume-BFLl-yLn.js +3 -0
  219. package/server/{review-agent-Dn-yn7Zj.js → review-agent-BZvk0N5G.js} +31 -23
  220. package/server/{review-agent-u5q3ip7H.js → review-agent-CpSHLzed.js} +1 -1
  221. package/server/{review-artifacts-D4T04aYI.js → review-artifacts-PCo53YMn.js} +5 -19
  222. package/server/{review-context-Rc0VDLG_.js → review-context-M7QtJlJq.js} +8 -8
  223. package/server/{review-monitor-BC--miCO.js → review-monitor-BLC5mTTg.js} +2 -2
  224. package/server/{review-status-CG0iDuWa.js → review-status-77N3PoZr.js} +1 -1
  225. package/server/{review-status-Dc1l4dVz.js → review-status-DANr0t-v.js} +32 -58
  226. package/server/{review-status-enrichment-C1a1OG_1.js → review-status-enrichment-DwOg4UfL.js} +3 -3
  227. package/server/{review-status-sync-CfSixhhX.js → review-status-sync-Bd08OOFA.js} +1 -1
  228. package/server/{review-status-sync-CAr-hfnJ.js → review-status-sync-BjTUJ5fx.js} +2 -2
  229. package/server/{review-verdict-feedback-D2Q960wX.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
  230. package/server/{review-verdict-feedback-CVDbIDBe.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
  231. package/server/{rollup-DctoIu-A.js → rollup-Bu0f2EyN.js} +8 -8
  232. package/server/{rollup-CakjztPl.js → rollup-DTCCdEy4.js} +1 -1
  233. package/server/{scanner-BTM1jc_u.js → scanner-BlZ2vB7j.js} +7 -7
  234. package/server/{sequence-io-pnoIDGv4.js → sequence-io-ylyDtz2J.js} +4 -4
  235. package/server/{sequencer-agent-9Soi-WL-.js → sequencer-agent-DsWQ-87H.js} +6 -17
  236. package/server/server.js +4695 -4093
  237. package/server/{service-DfTVoqJg.js → service-CLVBC_1Y.js} +116 -90
  238. package/server/{session-fork-C4jAFHj8.js → session-fork-DlEIAhRy.js} +2 -2
  239. package/server/{session-history-DanhhiCw.js → session-history-bnOFKMwf.js} +4 -4
  240. package/server/settings-CP3GGon2.js +2 -0
  241. package/server/{settings-Cuc12oP_.js → settings-Cqa-8nyj.js} +2 -2
  242. package/server/{settings-DfT3f86D.js → settings-gJrdLZy2.js} +3 -3
  243. package/server/{shadow-engineering-bKuKTCn-.js → shadow-engineering-fq1YEKV3.js} +3 -3
  244. package/server/{shadow-state-CVHpRWlb.js → shadow-state-BqeFAygK.js} +1 -1
  245. package/server/{shadow-state-DJz6_pb_.js → shadow-state-RptE9Cau.js} +2 -2
  246. package/server/shadow-utils-BMWr5tRT.js +39 -0
  247. package/server/{ship-log-CwqPFfqx.js → ship-log-BRQQi2lU.js} +1 -1
  248. package/server/{smart-compaction-CiWfGfRZ.js → smart-compaction-CmoXpjeU.js} +7 -7
  249. package/server/{smart-compaction-B4KlpZGN.js → smart-compaction-DldUel4B.js} +1 -1
  250. package/server/{spawn-planning-session-CU-DwyDl.js → spawn-planning-session-CoS6LTc6.js} +16 -16
  251. package/server/{spawn-planning-session-D5N3RuLG.js → spawn-planning-session-DT2tSMxo.js} +1 -1
  252. package/server/{specialist-completion-CJcv-NXH.js → specialist-completion-pJtESo7m.js} +1 -1
  253. package/server/{specialist-context-B2HlbNxS.js → specialist-context-CspI4Eog.js} +5 -5
  254. package/server/{specialist-handoff-logger-CQyF1ygu.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
  255. package/server/{specialist-logs-CdcUpfjj.js → specialist-logs-DtSkPJZK.js} +3 -3
  256. package/server/{specialists-D7AcFi1u.js → specialists-CywEMwxk.js} +1 -1
  257. package/server/{specialists-k22_Btaq.js → specialists-D9-dMUtI.js} +1 -1
  258. package/server/{specialists-CFgw_0Q6.js → specialists-Dax7tqXC.js} +161 -448
  259. package/server/{specialists-CwzFdapR.js → specialists-GF42OOqd.js} +18 -18
  260. package/server/specs-VwcFtEDi.js +3 -0
  261. package/server/{src-B4TTzNSr.js → src-By3D85Ry.js} +6 -1
  262. package/server/{src-BvpMg4EB.js → src-CqyFg52C.js} +5 -5
  263. package/server/{src-D4YUZrwR.js → src-DhxM-eCb.js} +6 -6
  264. package/server/{stack-health-DVN7zRnL.js → stack-health-BsEVrJZ6.js} +1 -1
  265. package/server/{stack-health-CSgcYcr8.js → stack-health-C-SnpRHh.js} +2 -2
  266. package/server/stale-task-claims-vTxmRzLi.js +69 -0
  267. package/server/state-home-Bur1y4oH.js +213 -0
  268. package/server/{state-mapping-C13UaCL7.js → state-mapping-Ci0pkac4.js} +1 -1
  269. package/server/state-migrate-D3VveYfO.js +362 -0
  270. package/server/{stuck-remediation-CxsyxwFO.js → stuck-remediation-B699-p8v.js} +36 -41
  271. package/server/{stuck-remediation-nTIvhGOR.js → stuck-remediation-CaFYYTQW.js} +1 -1
  272. package/server/{summary-fork-CnRMPCYd.js → summary-fork-BxnF8Xh0.js} +2 -2
  273. package/server/{summary-fork-gKSoFAnK.js → summary-fork-COqYpVa3.js} +8 -8
  274. package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
  275. package/server/supervisor/pty-supervisor.js +2 -2
  276. package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
  277. package/server/supervisor-eWAAmXKu.js +2 -0
  278. package/server/{supervisor-CZMs8s0M.js → supervisor-liMgIPDF.js} +2 -2
  279. package/server/{swarm-readiness-h6-pwY8w.js → swarm-readiness-sXB1vhzo.js} +3 -3
  280. package/server/{system-prerequisites-DZZTi2G6.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
  281. package/server/{teardown-workspace-B4D-oCVg.js → teardown-workspace-DvzqnmUF.js} +14 -71
  282. package/server/{test-agent-queue-CnuYku4B.js → test-agent-queue-hAU1Ah08.js} +5 -5
  283. package/server/{tldr-daemon-CuA8hz21.js → tldr-daemon-Bam7Xhoo.js} +2 -2
  284. package/server/{tldr-daemon-CgZQ3jmZ.js → tldr-daemon-DhGwd88s.js} +1 -1
  285. package/server/tmux-C-rgxRDA.js +3 -0
  286. package/server/{tmux-C3g9VFcg.js → tmux-U55cNGFG.js} +92 -4
  287. package/server/{token-g_sJ19g3.js → token-Dsa-i36o.js} +2 -2
  288. package/server/{token-util-DiwnnbJo.js → token-util-BWNpH96m.js} +1 -1
  289. package/server/token-util-DRt0j2nQ.js +3 -0
  290. package/server/{tracker-config-dQxC15vH.js → tracker-config-OkdbaUCm.js} +2 -2
  291. package/server/{tracker-utils--z8FLSWn.js → tracker-utils-CghXMF3q.js} +2 -2
  292. package/server/{tracker-utils-DkKyRT0H.js → tracker-utils-DdzUiPNU.js} +1 -1
  293. package/server/{tunnel-BpWZs0Jy.js → tunnel-D1YxesBL.js} +3 -3
  294. package/server/{tunnel-CN2px87h.js → tunnel-DjlzgTl3.js} +1 -1
  295. package/server/typed-errors-CH4roFIj.js +3 -0
  296. package/server/{typed-errors-sLpGfegz.js → typed-errors-n_Tnb4Fh.js} +3 -4
  297. package/server/{types-BLS_Zbmd.js → types-DOjWNv3Z.js} +1 -1
  298. package/server/{types-tlXf80x3.js → types-DXBMm4mX.js} +1 -1
  299. package/server/{uat-train-utGVmqdm.js → uat-train-CaaWs9Rp.js} +1 -1
  300. package/server/{uat-train-BRo6DM7p.js → uat-train-CqN34zFx.js} +24 -25
  301. package/server/{validation-CsPVsoA0.js → validation-4-z2Cw4z.js} +70 -23
  302. package/server/validation-DpTNakM6.js +3 -0
  303. package/server/verification-artifact-DK1xb1zG.js +56 -0
  304. package/server/verification-artifact-JD_edpZ9.js +2 -0
  305. package/server/{verification-runner-CMT5WRMS.js → verification-runner-BjHN80pJ.js} +338 -58
  306. package/server/verification-runner-ShYu5Ph3.js +2 -0
  307. package/server/{vtt-parser-C_XPlifj.js → vtt-parser-QnRfcjiU.js} +1 -1
  308. package/server/{work-agent-prompt-ZTAb2Hyf.js → work-agent-prompt-BiJ43Der.js} +12 -88
  309. package/server/workflows-B4C3lY9E.js +2 -0
  310. package/server/{workflows-CXRwhw_o.js → workflows-DkTotz_m.js} +17 -24
  311. package/server/{workspace-CNfuj1-5.js → workspace-CuN0ev4Z.js} +3 -3
  312. package/server/{workspace-9UEsKuiP.js → workspace-DQ4vVivd.js} +1 -1
  313. package/server/{workspace-config-ChWOECy0.js → workspace-config-C77NKnsV.js} +1 -1
  314. package/server/{workspace-manager-BO-6k3sP.js → workspace-manager-B1mYn0lN.js} +1 -1
  315. package/server/{workspace-manager-D8AByFIT.js → workspace-manager-Beeo2aKF.js} +23 -48
  316. package/server/{workspace-metadata-CvC268MN.js → workspace-metadata-BZC5BmoP.js} +2 -2
  317. package/server/{workspace-metadata-DZiJtnuF.js → workspace-metadata-Cy7_ZACL.js} +1 -1
  318. package/server/{workspaces-D-uIoqbg.js → workspaces-CGuzW1Ia.js} +182 -152
  319. package/sync-sources/hooks/codex-notify-hook +64 -8
  320. package/sync-sources/hooks/record-cost-event.js +1109 -36
  321. package/sync-sources/hooks/record-cost-event.js.map +1 -1
  322. package/sync-sources/hooks/statusline.sh +2 -2
  323. package/sync-sources/hooks/work-agent-stop-hook +1 -2
  324. package/server/acceptance-criteria-BZ_nQS1f.js +0 -33
  325. package/server/agent-state-lGvgPP4m.js +0 -3
  326. package/server/agents-CEcaxSkR.js +0 -3
  327. package/server/auto-commit-IW-eik_b.js +0 -3
  328. package/server/bd-process-lock-XAXAet9O.js +0 -390
  329. package/server/beads-B1u04n3o.js +0 -2
  330. package/server/beads-BeSMEjGT.js +0 -649
  331. package/server/beads-query-Dl4FhT8J.js +0 -95
  332. package/server/beads-restore-BUItPOjI.js +0 -23
  333. package/server/cli-D9cUTbBr.js +0 -3
  334. package/server/codex-BYPz6ZdF.js +0 -3
  335. package/server/compact-beads-CyJtoXJi.js +0 -94
  336. package/server/compact-beads-N00E4EVa.js +0 -3
  337. package/server/deacon-swarm-CvdFekIO.js +0 -2
  338. package/server/dist-BNwrgsUO.js +0 -3
  339. package/server/export-BJHSVwKP.js +0 -87
  340. package/server/forge-8y6aEPTB.js +0 -2
  341. package/server/hume-CerGi2RH.js +0 -3
  342. package/server/inspect-agent-CWkeAB7J.js +0 -2
  343. package/server/lifecycle-Ck2UR27D.js +0 -14
  344. package/server/merge-ops-CFkQtXEj.js +0 -2
  345. package/server/projects-CrBE6IhN.js +0 -3
  346. package/server/public/assets/index-BAZxZ-8I.js +0 -796
  347. package/server/public/assets/index-FBG3JBfq.css +0 -1
  348. package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +0 -1
  349. package/server/rally-oggyp4cs.js +0 -3
  350. package/server/record-lEYK__LD.js +0 -3
  351. package/server/recovery-trip-BT7nb9OV.js +0 -98
  352. package/server/resolver-C7dLn8OK.js +0 -158
  353. package/server/resume-BYZBIab-.js +0 -3
  354. package/server/settings-Cy7SCFO9.js +0 -2
  355. package/server/specs-RzcDgozr.js +0 -3
  356. package/server/supervisor-CfX192ma.js +0 -2
  357. package/server/tmux-By8E_Yv_.js +0 -3
  358. package/server/token-util-C9u4An3K.js +0 -3
  359. package/server/tracker-config-BzfVj41Z.js +0 -3
  360. package/server/typed-errors-CrN1AByg.js +0 -3
  361. package/server/validation-Dq_wwcw3.js +0 -3
  362. package/server/verification-runner-D0Uh-9jc.js +0 -2
  363. package/server/workflows-BLwxUMP7.js +0 -2
  364. package/server/writer-BUweuRPx.js +0 -3
  365. package/server/writer-CrP2xuBn.js +0 -251
@@ -1,43 +1,42 @@
1
- import { Br as encodeClaudeProjectDir, Fn as init_projects, Jr as init_paths, bn as extractTeamPrefix, dn as init_state_plane, dr as FsError, er as extractNumberSync, fn as isStatePlaneOnlyStatus, fr as GitError, ir as parseIssueIdSync, kn as getProjectSync, nr as init_issue_id, or as resolveIssueIdSync, qn as resolveProjectFromIssueSync, qr as getOverdeckHome, tr as extractPrefixSync, wn as findProjectByTeamSync, xr as init_errors, zn as listProjectsSync } from "./config-yaml-cNOZcEww.js";
2
- import { Q as getWorkAgentLifecycleStateSync, ct as getTrustedOrigins, gt as jsonResponse, mt as httpHandler, n as _serverManagedMerges, st as getHeaderFromMap, ut as normalizeOrigin } from "./specialists-CFgw_0Q6.js";
1
+ import { Fn as init_projects, Jr as getOverdeckHome, Sr as init_errors, Vr as encodeClaudeProjectDir, Yr as init_paths, Z as resolveModel, ar as parseIssueIdSync, bn as extractTeamPrefix, cn as init_state_plane, fr as FsError, kn as getProjectSync, ln as isStatePlaneOnlyStatus, nr as extractPrefixSync, pr as GitError, qn as resolveProjectFromIssueSync, rr as init_issue_id, sr as resolveIssueIdSync, t as init_config_yaml, tr as extractNumberSync, wn as findProjectByTeamSync, zn as listProjectsSync } from "./config-yaml-CqaAyn8y.js";
2
+ import { Q as getWorkAgentLifecycleStateSync, ct as getTrustedOrigins, ht as jsonResponse, n as _serverManagedMerges, pt as httpHandler, st as getHeaderFromMap, ut as normalizeOrigin } from "./specialists-Dax7tqXC.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-Ba9mS6e6.js";
5
- import { K as buildChildEnvWithoutTmuxSync, L as sessionExists, O as listSessionNames, i as capturePane, q as init_child_env, x as init_tmux } from "./tmux-C3g9VFcg.js";
6
- 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-Dc1l4dVz.js";
7
- import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle--8MRxrG1.js";
8
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-D9kPIY_5.js";
9
- import { Mn as getAgentState, Rt as transitionIssueToInReview, U as spawnAgent, Z as listRunningAgents, hr as saveAgentRuntimeState, j as messageAgent, pr as getAgentRuntimeStateSync, t as init_agents } from "./agents-B9GwfCyp.js";
10
- import { f as CostWriter, l as CostDoorLive } from "./service-DfTVoqJg.js";
11
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-dQxC15vH.js";
12
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils--z8FLSWn.js";
13
- import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-BtqSbKTx.js";
14
- import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-BLS_Zbmd.js";
15
- import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-D7jWLgCC.js";
16
- import { A as init_vbrief_index, M as readVBriefDocument, b as init_types$1, c as mergeRecordStatusOverrides, k as findVBriefByIssue, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, y as VBRIEF_INSPECTION_POLICIES } from "./io-VEGSAqsd.js";
17
- import { f as init_config, m as loadConfigSync$1 } from "./config-DVLdmnMJ.js";
18
- import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-B-lcHv-5.js";
19
- import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-CSgcYcr8.js";
20
- import { o as criticalPath, t as actionableDoc, u as init_dag } from "./dag-DKI3sOmX.js";
21
- import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-Dl4FhT8J.js";
22
- import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-S_C0pvl6.js";
23
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-D8AByFIT.js";
24
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-C-34Sxyz.js";
25
- import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-BUW5_sSK.js";
26
- import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CbghE9-o.js";
27
- import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-u9-SX7Gc.js";
28
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-CvC268MN.js";
29
- import { n as restoreTrackedBeadsExport, t as init_beads_restore } from "./beads-restore-BUItPOjI.js";
30
- import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-C1a1OG_1.js";
31
- import { n as generateDailySummary, r as init_cli } from "./cli-ByKIIMfT.js";
32
- import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-Rc0VDLG_.js";
33
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CuA8hz21.js";
34
- 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-B3u2szOL.js";
35
- import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-BN8FGJ2q.js";
36
- import { n as init_release_set, t as getReleaseSetSync } from "./release-set-BNiqi7hy.js";
37
- import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BMKm_5DV.js";
38
- import { n as runVerificationForIssue } from "./verification-runner-CMT5WRMS.js";
39
- import { t as teardownWorkspace } from "./teardown-workspace-B4D-oCVg.js";
40
- import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-CoU-HqZj.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-_Kx1m9pm.js";
5
+ import { J as init_child_env, R as sessionExists, S as init_tmux, i as capturePane, k as listSessionNames, q as buildChildEnvWithoutTmuxSync } from "./tmux-U55cNGFG.js";
6
+ 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-DANr0t-v.js";
7
+ import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-CFR8TJ22.js";
8
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-BoqD1Pxz.js";
9
+ import { L as messageAgent, Nn as getAgentState, Rt as transitionIssueToInReview, Y as spawnAgent, gr as saveAgentRuntimeState, i as listRunningAgents, mr as getAgentRuntimeStateSync, s as init_agents } from "./queries-C0LCGG21.js";
10
+ import { f as CostWriter, l as CostDoorLive } from "./service-CLVBC_1Y.js";
11
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-OkdbaUCm.js";
12
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CghXMF3q.js";
13
+ import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-Cl-1IxaE.js";
14
+ import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-DOjWNv3Z.js";
15
+ import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-B2KSk54U.js";
16
+ import { O as findVBriefByIssue, _ as VBRIEF_INSPECTION_POLICIES, c as mergeRecordStatusOverrides, j as readVBriefDocument, k as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, v as init_types$1 } from "./io-DkC4sFSy.js";
17
+ import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-BX5aD-6F.js";
18
+ import { i as normalizeModelOverrideSync, r as init_model_validation } from "./launcher-generator-BXLM9f4b.js";
19
+ import { f as init_config, m as loadConfigSync$1 } from "./config-DfaUXr6r.js";
20
+ import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-C-SnpRHh.js";
21
+ import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-C6kYyF17.js";
22
+ import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-2eFUPdqz.js";
23
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-Beeo2aKF.js";
24
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-BqGNCzvN.js";
25
+ import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-Cd5jIqh7.js";
26
+ import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CzCW9Ifl.js";
27
+ import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-tUbb8Ldr.js";
28
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-BZC5BmoP.js";
29
+ import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-DwOg4UfL.js";
30
+ import { n as generateDailySummary, r as init_cli } from "./cli-C33xPZNm.js";
31
+ import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-M7QtJlJq.js";
32
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-Bam7Xhoo.js";
33
+ 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-D6DNhe9j.js";
34
+ import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-BsDgUxFz.js";
35
+ import { n as init_release_set, t as getReleaseSetSync } from "./release-set-7pnxFOWR.js";
36
+ import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BF_zhcmb.js";
37
+ import { r as runVerificationForIssue } from "./verification-runner-BjHN80pJ.js";
38
+ import { t as teardownWorkspace } from "./teardown-workspace-DvzqnmUF.js";
39
+ import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-Ddv6W017.js";
41
40
  import { basename, dirname, join, resolve, sep } from "node:path";
42
41
  import { Effect, Layer, Option } from "effect";
43
42
  import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
@@ -974,7 +973,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
974
973
  }
975
974
  if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
976
975
  if (!composeFile && ["start", "restart"].includes(action)) {
977
- const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-Dq3KoOIl.js"));
976
+ const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-C6gyUQdE.js"));
978
977
  if (ensureDevcontainerSync({
979
978
  workspacePath,
980
979
  issueId
@@ -2484,7 +2483,6 @@ function buildLocalMainRecoveryError(projectPath, aheadCount, behindCount) {
2484
2483
  * stay owned by ../workspaces.js and are imported here.
2485
2484
  */
2486
2485
  init_agents();
2487
- init_beads_query();
2488
2486
  init_merge_agent();
2489
2487
  init_operations();
2490
2488
  init_git_activity();
@@ -2594,7 +2592,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2594
2592
  const prRef = parseGitHubPullRequestUrl(status.prUrl);
2595
2593
  if (!prRef) return false;
2596
2594
  try {
2597
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
2595
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
2598
2596
  if (!isGitHubAppConfigured()) return false;
2599
2597
  const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
2600
2598
  console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
@@ -2612,7 +2610,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2612
2610
  }
2613
2611
  }
2614
2612
  /**
2615
- * Build a rich PR body with issue link, beads task summary, and AC checklist
2613
+ * Build a rich PR body with issue link, tasks task summary, and AC checklist
2616
2614
  * from the vBRIEF plan. Exported for testing.
2617
2615
  */
2618
2616
  async function buildRichPRBody(issueId, workspacePath) {
@@ -2635,18 +2633,6 @@ async function buildRichPRBody(issueId, workspacePath) {
2635
2633
  }
2636
2634
  }
2637
2635
  } catch {}
2638
- try {
2639
- const beads = (await Effect.runPromise(queryBeadsForIssue(workspacePath, issueId, { acquisitionTimeoutMs: 500 }))).beads;
2640
- if (beads.length > 0) {
2641
- lines.push("## Implementation Tasks");
2642
- lines.push("");
2643
- for (const bead of beads) {
2644
- const checked = bead.status === "closed" ? "x" : " ";
2645
- lines.push(`- [${checked}] ${bead.title.replace(/^[^:]+:\s*/, "")}`);
2646
- }
2647
- lines.push("");
2648
- }
2649
- } catch {}
2650
2636
  return lines.join("\n") || `Automated PR for ${issueId}`;
2651
2637
  }
2652
2638
  async function ensurePRExists(issueId, options) {
@@ -2846,8 +2832,8 @@ async function triggerMerge(issueId) {
2846
2832
  try {
2847
2833
  if (workspaceInfo.isRemote && workspaceInfo.vmName) {
2848
2834
  console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
2849
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-Dy0D0r3i.js");
2850
- const { getForgeAdapter } = await import("./forge-8y6aEPTB.js");
2835
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-vuE3MEVt.js");
2836
+ const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
2851
2837
  const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
2852
2838
  const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
2853
2839
  const remoteForge = remotePrimaryRepo?.forge || "github";
@@ -2882,7 +2868,7 @@ async function triggerMerge(issueId) {
2882
2868
  readyForMerge: false
2883
2869
  });
2884
2870
  completePendingOperation(issueId, null);
2885
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
2871
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
2886
2872
  await postMergeLifecycle(issueId, projectPath);
2887
2873
  return {
2888
2874
  success: true,
@@ -2919,10 +2905,10 @@ async function triggerMerge(issueId) {
2919
2905
  const projectConfig = findProjectByTeamSync(issuePrefix);
2920
2906
  if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
2921
2907
  console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
2922
- const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-Dy0D0r3i.js");
2923
- const { runQualityGates } = await import("./validation-Dq_wwcw3.js");
2924
- const { getForgeAdapter } = await import("./forge-8y6aEPTB.js");
2925
- const { messageAgent } = await import("./agents-CEcaxSkR.js");
2908
+ const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
2909
+ const { runQualityGates } = await import("./validation-DpTNakM6.js");
2910
+ const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
2911
+ const { messageAgent } = await import("./agents-BA15AQqo.js");
2926
2912
  let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
2927
2913
  if (!mergeSet) {
2928
2914
  const error = `No merge set found for ${issueId}`;
@@ -3192,7 +3178,7 @@ async function triggerMerge(issueId) {
3192
3178
  readyForMerge: false
3193
3179
  });
3194
3180
  completePendingOperation(issueId, null);
3195
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
3181
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
3196
3182
  advanceQueue();
3197
3183
  await postMergeLifecycle(issueId, projectPath);
3198
3184
  return {
@@ -3203,8 +3189,8 @@ async function triggerMerge(issueId) {
3203
3189
  repos: mergeResults
3204
3190
  };
3205
3191
  }
3206
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-Dy0D0r3i.js");
3207
- const { getForgeAdapter } = await import("./forge-8y6aEPTB.js");
3192
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-vuE3MEVt.js");
3193
+ const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
3208
3194
  const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3209
3195
  const targetBranch = primaryRepo?.targetBranch || "main";
3210
3196
  const primaryForge = primaryRepo?.forge || "github";
@@ -3246,7 +3232,7 @@ async function triggerMerge(issueId) {
3246
3232
  };
3247
3233
  }
3248
3234
  if (githubPrRef) try {
3249
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
3235
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
3250
3236
  if (isGitHubAppConfigured()) {
3251
3237
  const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
3252
3238
  if (prState.state !== "OPEN" && !prState.merged) {
@@ -3307,7 +3293,7 @@ async function triggerMerge(issueId) {
3307
3293
  readyForMerge: false
3308
3294
  });
3309
3295
  completePendingOperation(issueId, null);
3310
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
3296
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
3311
3297
  await postMergeLifecycle(issueId, projectPath, branchName);
3312
3298
  return {
3313
3299
  success: true,
@@ -3321,13 +3307,13 @@ async function triggerMerge(issueId) {
3321
3307
  } catch (prStateErr) {
3322
3308
  console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
3323
3309
  }
3324
- const { postMergeLifecycle } = await import("./merge-agent-ejC7Wos8.js");
3310
+ const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
3325
3311
  const agentId = `agent-${issueId.toLowerCase()}`;
3326
3312
  const rebaseMsg = `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.`;
3327
3313
  setReviewStatus(issueId, { mergeStep: "rebasing" });
3328
3314
  console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
3329
3315
  {
3330
- const { beginShipLog, appendShipLog } = await import("./ship-log-CwqPFfqx.js");
3316
+ const { beginShipLog, appendShipLog } = await import("./ship-log-BRQQi2lU.js");
3331
3317
  beginShipLog(issueId);
3332
3318
  appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
3333
3319
  }
@@ -3455,7 +3441,7 @@ async function triggerMerge(issueId) {
3455
3441
  });
3456
3442
  let skipLocalVerification = false;
3457
3443
  if (primaryForge === "github" && artifactUrl) try {
3458
- const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
3444
+ const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
3459
3445
  if (isGitHubAppConfigured()) {
3460
3446
  const ref = parsePullRequestRef({ url: artifactUrl });
3461
3447
  if (ref) {
@@ -3476,12 +3462,12 @@ async function triggerMerge(issueId) {
3476
3462
  } catch (ciErr) {
3477
3463
  console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
3478
3464
  }
3479
- const { appendShipLog } = await import("./ship-log-CwqPFfqx.js");
3465
+ const { appendShipLog } = await import("./ship-log-BRQQi2lU.js");
3480
3466
  if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
3481
3467
  const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
3482
3468
  console.log(`[merge] Running post-rebase verification for ${issueId}...`);
3483
3469
  appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
3484
- const { runVerificationForIssue } = await import("./verification-runner-D0Uh-9jc.js");
3470
+ const { runVerificationForIssue } = await import("./verification-runner-ShYu5Ph3.js");
3485
3471
  return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
3486
3472
  syncTargetBranch: false,
3487
3473
  onGateLog: (line) => appendShipLog(issueId, line, "verifying")
@@ -3514,7 +3500,7 @@ async function triggerMerge(issueId) {
3514
3500
  console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
3515
3501
  setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
3516
3502
  try {
3517
- const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-Bwt9lK4A.js");
3503
+ const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-BrYwK_Gb.js");
3518
3504
  if (githubPrRef && isGitHubAppConfigured()) {
3519
3505
  const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
3520
3506
  if (sha) {
@@ -3542,7 +3528,7 @@ async function triggerMerge(issueId) {
3542
3528
  } catch (prMergeErr) {
3543
3529
  console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
3544
3530
  try {
3545
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bwt9lK4A.js");
3531
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
3546
3532
  if (githubPrRef && isGitHubAppConfigured()) {
3547
3533
  artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
3548
3534
  if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
@@ -3659,8 +3645,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
3659
3645
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3660
3646
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3661
3647
  return yield* Effect.promise(async () => {
3662
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-Dy0D0r3i.js");
3663
- const { getForgeAdapter } = await import("./forge-8y6aEPTB.js");
3648
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
3649
+ const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
3664
3650
  let mergeSet = getMergeSetSync(issueId);
3665
3651
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3666
3652
  const results = [];
@@ -3748,8 +3734,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
3748
3734
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3749
3735
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3750
3736
  return yield* Effect.promise(async () => {
3751
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-Dy0D0r3i.js");
3752
- const { getForgeAdapter } = await import("./forge-8y6aEPTB.js");
3737
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
3738
+ const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
3753
3739
  let mergeSet = getMergeSetSync(issueId);
3754
3740
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3755
3741
  const results = [];
@@ -3942,7 +3928,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
3942
3928
  console.log(`[approve] Starting role pipeline for ${issueId}...`);
3943
3929
  let reviewResult;
3944
3930
  try {
3945
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
3931
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
3946
3932
  reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
3947
3933
  issueId,
3948
3934
  workspace: workspacePath,
@@ -3989,7 +3975,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
3989
3975
  }
3990
3976
  console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
3991
3977
  try {
3992
- const { rebaseFeatureBranch } = await import("./merge-rebase-Dl7yIxtV.js");
3978
+ const { rebaseFeatureBranch } = await import("./merge-rebase-Czth9ggm.js");
3993
3979
  const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
3994
3980
  const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
3995
3981
  if (!rebaseResult.success) {
@@ -4009,7 +3995,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4009
3995
  completePendingOperation(issueId, pushResult.error);
4010
3996
  return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
4011
3997
  }
4012
- const { approve: lifecycleApprove } = await import("./lifecycle-Ck2UR27D.js");
3998
+ const { approve: lifecycleApprove } = await import("./lifecycle-D7aQUnTO.js");
4013
3999
  const ghResolved = resolveGitHubIssueSync(issueId);
4014
4000
  const isGitHubIssueFlag = ghResolved.isGitHub;
4015
4001
  const lifecycleCtx = {
@@ -4043,7 +4029,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
4043
4029
  })));
4044
4030
  const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
4045
4031
  const request = yield* HttpServerRequest.HttpServerRequest;
4046
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BPYEaXFh.js"));
4032
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-D-t28de5.js"));
4047
4033
  const expected = getInternalTokenSync();
4048
4034
  if (!expected) return jsonResponse({
4049
4035
  ok: false,
@@ -4057,7 +4043,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
4057
4043
  }, 403);
4058
4044
  const event = yield* readJsonBody;
4059
4045
  const type = event.type;
4060
- const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-BH4PAi-w.js"));
4046
+ const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-3frIvSi3.js"));
4061
4047
  switch (type) {
4062
4048
  case "status_changed": {
4063
4049
  const issueId = event.issueId;
@@ -4636,7 +4622,7 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
4636
4622
  const salvageableStashes = (yield* listStashes(workspacePath)).filter(isSalvageableStash).filter((entry) => entry.issueId === issueId.toUpperCase());
4637
4623
  const hasPlan = (yield* findPlan(workspacePath)) !== null;
4638
4624
  const planningComplete = hasPlan ? yield* isPlanningComplete(workspacePath) : false;
4639
- const hasBeads = planningComplete;
4625
+ const hasTasks = planningComplete;
4640
4626
  const issueData = getCostsForIssueSync(issueId);
4641
4627
  const agents = yield* Effect.promise(() => getCachedRunningAgents());
4642
4628
  const resolvedCost = resolveIssueHeadlineCost({
@@ -4667,8 +4653,8 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
4667
4653
  salvageableStashes,
4668
4654
  planningState: {
4669
4655
  hasPlan,
4670
- hasBeads,
4671
- beadsCount: 0,
4656
+ hasTasks,
4657
+ tasksCount: 0,
4672
4658
  planningComplete,
4673
4659
  workspacePath
4674
4660
  },
@@ -4832,7 +4818,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
4832
4818
  if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
4833
4819
  const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
4834
4820
  if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
4835
- yield* Effect.promise(() => import("./record-lEYK__LD.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
4821
+ yield* Effect.promise(() => import("./record-DLOqfbkI.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
4836
4822
  const projectPath = project.path;
4837
4823
  const location = yield* resolvePlanLocation(projectPath, issueId);
4838
4824
  if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
@@ -5143,7 +5129,6 @@ init_domain_services();
5143
5129
  init_review_status();
5144
5130
  init_release_set();
5145
5131
  init_conflict_gate();
5146
- init_beads_restore();
5147
5132
  init_agents();
5148
5133
  const execAsync$2 = promisify(exec);
5149
5134
  const MAX_AUTO_REQUEUE = 25;
@@ -5159,7 +5144,6 @@ function getDirtyWorkspaceErrorForReviewRequestStatus(status, workspacePath) {
5159
5144
  }
5160
5145
  async function getDirtyWorkspaceErrorForReviewRequest(workspacePath, workspaceInfo) {
5161
5146
  try {
5162
- if (!workspaceInfo.isRemote) await Effect.runPromise(restoreTrackedBeadsExport(workspacePath));
5163
5147
  const statusCmd = "git status --porcelain -uno";
5164
5148
  return getDirtyWorkspaceErrorForReviewRequestStatus(workspaceInfo.isRemote && workspaceInfo.vmName ? (await execAsync$2(flyExecCmd(workspaceInfo.vmName, `cd ${workspacePath} && ${statusCmd}`), {
5165
5149
  encoding: "utf-8",
@@ -5269,7 +5253,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5269
5253
  console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
5270
5254
  }
5271
5255
  try {
5272
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-D4T04aYI.js");
5256
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-PCo53YMn.js");
5273
5257
  const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
5274
5258
  const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
5275
5259
  artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
@@ -5324,7 +5308,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5324
5308
  } catch {}
5325
5309
  return;
5326
5310
  }
5327
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
5311
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
5328
5312
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5329
5313
  const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
5330
5314
  issueId,
@@ -5425,7 +5409,6 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5425
5409
  message: `${canonicalIssueId} is executing remotely on ${wsInfoRerun.vmName ?? "a fly machine"} — run 'pan admin remote reap --issue ${canonicalIssueId}' after the agent finishes, then review.`
5426
5410
  }, { status: 409 });
5427
5411
  const workspacePathRerun = wsInfoRerun.localPath || join(projectPathRerun, "workspaces", `feature-${issueLowerRerun}`);
5428
- if (!wsInfoRerun.isRemote) yield* restoreTrackedBeadsExport(workspacePathRerun);
5429
5412
  const dirtyError = yield* Effect.promise(() => getDirtyWorkspaceErrorForReviewRequest(workspacePathRerun, wsInfoRerun));
5430
5413
  if (dirtyError) {
5431
5414
  console.log(`[request-review] Rejecting ${issueId}: dirty workspace on rerun path`);
@@ -5464,7 +5447,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5464
5447
  console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
5465
5448
  }
5466
5449
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5467
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
5450
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
5468
5451
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5469
5452
  issueId,
5470
5453
  workspace: workspacePathRerun,
@@ -5514,7 +5497,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5514
5497
  });
5515
5498
  } else {
5516
5499
  const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
5517
- const { spawnRun } = yield* Effect.promise(() => import("./agents-CEcaxSkR.js"));
5500
+ const { spawnRun } = yield* Effect.promise(() => import("./agents-BA15AQqo.js"));
5518
5501
  try {
5519
5502
  const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
5520
5503
  setReviewStatus(issueId, { testStatus: "testing" });
@@ -5564,7 +5547,6 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5564
5547
  success: false,
5565
5548
  error: "Workspace does not exist"
5566
5549
  }, { status: 400 });
5567
- if (!workspaceInfo.isRemote) yield* restoreTrackedBeadsExport(workspacePath);
5568
5550
  const dirtyWorkspaceError = yield* Effect.promise(() => getDirtyWorkspaceErrorForReviewRequest(workspacePath, workspaceInfo));
5569
5551
  if (dirtyWorkspaceError) return jsonResponse({
5570
5552
  success: false,
@@ -5603,7 +5585,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5603
5585
  autoRequeueCount: newCount
5604
5586
  }, { status: 500 });
5605
5587
  const result = yield* Effect.promise(async () => {
5606
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
5588
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
5607
5589
  return await Effect.runPromise(spawnReviewRoleForIssue({
5608
5590
  issueId,
5609
5591
  workspace: workspacePath,
@@ -5698,7 +5680,16 @@ init_archive_planning();
5698
5680
  init_projects();
5699
5681
  init_review_status();
5700
5682
  init_agents();
5683
+ init_model_validation();
5684
+ init_config_yaml();
5701
5685
  const execAsync$1 = promisify(exec);
5686
+ function resolveConfiguredReviewModel() {
5687
+ try {
5688
+ return resolveModel("review");
5689
+ } catch {
5690
+ return null;
5691
+ }
5692
+ }
5702
5693
  /**
5703
5694
  * Core logic for POST /api/review/:issueId/reset (synchronous, testable).
5704
5695
  *
@@ -5907,7 +5898,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5907
5898
  const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
5908
5899
  if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
5909
5900
  try {
5910
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-ejC7Wos8.js"));
5901
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-DMQTJMP0.js"));
5911
5902
  resetPostMergeState(issueId);
5912
5903
  } catch (err) {
5913
5904
  console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
@@ -5916,7 +5907,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5916
5907
  const rerun = body?.rerun === true;
5917
5908
  if (rerun) try {
5918
5909
  yield* Effect.promise(async () => {
5919
- const { spawnReviewRoleForIssue } = await import("./review-agent-u5q3ip7H.js");
5910
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
5920
5911
  const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
5921
5912
  if (dispatchArgs) {
5922
5913
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
@@ -5945,7 +5936,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5945
5936
  const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
5946
5937
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
5947
5938
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
5948
- const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-u5q3ip7H.js"));
5939
+ const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-CpSHLzed.js"));
5949
5940
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
5950
5941
  const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
5951
5942
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
@@ -5975,8 +5966,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5975
5966
  success: false,
5976
5967
  error: "Workspace does not exist"
5977
5968
  }, { status: 400 });
5978
- const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-CrBE6IhN.js"));
5979
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-u5q3ip7H.js"));
5969
+ const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-Dc9aoVoG.js"));
5970
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-CpSHLzed.js"));
5980
5971
  const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
5981
5972
  setReviewStatus(issueId, {
5982
5973
  reviewStatus: "pending",
@@ -6048,19 +6039,21 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
6048
6039
  const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
6049
6040
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6050
6041
  return jsonResponse(yield* Effect.promise(async () => {
6051
- const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-lEYK__LD.js");
6052
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-u5q3ip7H.js");
6042
+ const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
6043
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CpSHLzed.js");
6053
6044
  const project = resolveProjectForIssue(issueId);
6054
6045
  const record = project ? readIssueRecordSync(project, issueId) : null;
6055
6046
  return {
6056
6047
  issueId,
6057
6048
  override: {
6058
6049
  reviewMode: record?.reviewMode ?? null,
6059
- reReviewScope: record?.reReviewScope ?? null
6050
+ reReviewScope: record?.reReviewScope ?? null,
6051
+ reviewModel: record?.reviewModel ?? null
6060
6052
  },
6061
6053
  resolved: {
6062
6054
  reviewMode: resolveReviewMode(issueId),
6063
- reReviewScope: resolveReReviewScope(issueId)
6055
+ reReviewScope: resolveReReviewScope(issueId),
6056
+ reviewModel: record?.reviewModel ?? resolveConfiguredReviewModel()
6064
6057
  }
6065
6058
  };
6066
6059
  }));
@@ -6071,29 +6064,40 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
6071
6064
  const body = yield* readJsonBody;
6072
6065
  const hasMode = Object.prototype.hasOwnProperty.call(body ?? {}, "reviewMode");
6073
6066
  const hasScope = Object.prototype.hasOwnProperty.call(body ?? {}, "reReviewScope");
6074
- if (!hasMode && !hasScope) return jsonResponse({ error: "Provide reviewMode and/or reReviewScope (null clears the override)" }, { status: 400 });
6067
+ const hasModel = Object.prototype.hasOwnProperty.call(body ?? {}, "reviewModel");
6068
+ if (!hasMode && !hasScope && !hasModel) return jsonResponse({ error: "Provide reviewMode, reReviewScope, and/or reviewModel (null clears the override)" }, { status: 400 });
6075
6069
  if (hasMode && body.reviewMode !== null && body.reviewMode !== "quick" && body.reviewMode !== "full" && body.reviewMode !== "none") return jsonResponse({ error: "reviewMode must be quick, full, none, or null" }, { status: 400 });
6076
6070
  if (hasScope && body.reReviewScope !== null && body.reReviewScope !== "all" && body.reReviewScope !== "changed" && body.reReviewScope !== "blockers") return jsonResponse({ error: "reReviewScope must be all, changed, blockers, or null" }, { status: 400 });
6071
+ let reviewModel;
6072
+ if (hasModel && body.reviewModel !== null) try {
6073
+ reviewModel = normalizeModelOverrideSync(body.reviewModel);
6074
+ } catch (error) {
6075
+ return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
6076
+ }
6077
6077
  return jsonResponse(yield* Effect.promise(async () => {
6078
- const { ensureIssueRecordSync, readIssueRecordSync, resolveProjectForIssue, writeIssueRecordSync } = await import("./record-lEYK__LD.js");
6079
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-u5q3ip7H.js");
6080
- const project = resolveProjectForIssue(issueId);
6081
- const record = readIssueRecordSync(project, issueId) ?? ensureIssueRecordSync(project, issueId);
6082
- if (hasMode) if (body.reviewMode === null) delete record.reviewMode;
6083
- else record.reviewMode = body.reviewMode;
6084
- if (hasScope) if (body.reReviewScope === null) delete record.reReviewScope;
6085
- else record.reReviewScope = body.reReviewScope;
6086
- writeIssueRecordSync(project, issueId, record);
6078
+ const { resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
6079
+ const { updateIssueRecord } = await import("./record-update-CDp7aTaT.js");
6080
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CpSHLzed.js");
6081
+ const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
6082
+ if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
6083
+ else current.reviewMode = body.reviewMode;
6084
+ if (hasScope) if (body.reReviewScope === null) delete current.reReviewScope;
6085
+ else current.reReviewScope = body.reReviewScope;
6086
+ if (hasModel) if (body.reviewModel === null) delete current.reviewModel;
6087
+ else current.reviewModel = reviewModel;
6088
+ });
6087
6089
  return {
6088
6090
  success: true,
6089
6091
  issueId,
6090
6092
  override: {
6091
6093
  reviewMode: record.reviewMode ?? null,
6092
- reReviewScope: record.reReviewScope ?? null
6094
+ reReviewScope: record.reReviewScope ?? null,
6095
+ reviewModel: record.reviewModel ?? null
6093
6096
  },
6094
6097
  resolved: {
6095
6098
  reviewMode: resolveReviewMode(issueId),
6096
- reReviewScope: resolveReReviewScope(issueId)
6099
+ reReviewScope: resolveReReviewScope(issueId),
6100
+ reviewModel: record.reviewModel ?? resolveConfiguredReviewModel()
6097
6101
  }
6098
6102
  };
6099
6103
  }));
@@ -6122,6 +6126,29 @@ function findWorkspaceComposeFile(workspacePath) {
6122
6126
  }
6123
6127
  return null;
6124
6128
  }
6129
+ /**
6130
+ * Discover the compose project name from existing container labels. The
6131
+ * declared-name sources (compose file, dev script) can be gone — teardown or
6132
+ * cleanup removes the workspace .devcontainer dir while the stack's containers
6133
+ * survive — and the label on those containers is then the only truth.
6134
+ */
6135
+ async function discoverComposeProjectName(issueId) {
6136
+ const suffix = `feature-${issueId.toLowerCase()}`;
6137
+ try {
6138
+ const { stdout } = await execFileAsync$1("docker", [
6139
+ "ps",
6140
+ "-a",
6141
+ "--format",
6142
+ "{{.Label \"com.docker.compose.project\"}}"
6143
+ ], {
6144
+ encoding: "utf-8",
6145
+ timeout: 1e4
6146
+ });
6147
+ return [...new Set(stdout.split("\n").map((line) => line.trim()).filter(Boolean))].find((name) => name.endsWith(suffix)) ?? null;
6148
+ } catch {
6149
+ return null;
6150
+ }
6151
+ }
6125
6152
  function resolveWorkspaceStackContext(issueId) {
6126
6153
  const parsed = parseIssueIdSync(issueId);
6127
6154
  if (!parsed) return {
@@ -6140,10 +6167,6 @@ function resolveWorkspaceStackContext(issueId) {
6140
6167
  status: 404
6141
6168
  };
6142
6169
  const composeFile = findWorkspaceComposeFile(workspacePath);
6143
- if (!composeFile) return {
6144
- error: `No workspace compose file found for ${normalizedIssueId}`,
6145
- status: 404
6146
- };
6147
6170
  try {
6148
6171
  return {
6149
6172
  issueId: normalizedIssueId,
@@ -6258,14 +6281,30 @@ const postWorkspaceStackActionRoute = HttpRouter.add("POST", "/api/workspaces/:i
6258
6281
  if ("error" in context) return jsonResponse({ error: context.error }, { status: context.status });
6259
6282
  const pendingOperation = action === "start" ? "start-stack" : action === "stop" ? "stop-stack" : "restart-stack";
6260
6283
  const description = `${action[0].toUpperCase()}${action.slice(1)} stack for ${context.issueId}`;
6261
- const activityId = spawnCommandActivity("docker", [
6262
- "compose",
6263
- "-f",
6264
- context.composeFile,
6265
- "-p",
6266
- context.composeProjectName,
6267
- action
6268
- ], description, dirname(context.composeFile), {
6284
+ let composeArgs;
6285
+ let cwd;
6286
+ if (context.composeFile) {
6287
+ composeArgs = [
6288
+ "compose",
6289
+ "-f",
6290
+ context.composeFile,
6291
+ "-p",
6292
+ context.composeProjectName,
6293
+ action
6294
+ ];
6295
+ cwd = dirname(context.composeFile);
6296
+ } else {
6297
+ const discovered = yield* Effect.promise(() => discoverComposeProjectName(context.issueId));
6298
+ if (!discovered) return jsonResponse({ error: `No compose file or stack containers found for ${context.issueId} — use Rebuild to recreate the stack` }, { status: 404 });
6299
+ composeArgs = [
6300
+ "compose",
6301
+ "-p",
6302
+ discovered,
6303
+ action
6304
+ ];
6305
+ cwd = context.workspacePath;
6306
+ }
6307
+ const activityId = spawnCommandActivity("docker", composeArgs, description, cwd, {
6269
6308
  issueId: context.issueId,
6270
6309
  pendingOperation
6271
6310
  });
@@ -6280,11 +6319,12 @@ const getWorkspaceStackLogsRoute = HttpRouter.add("GET", "/api/workspaces/:issue
6280
6319
  if (authError) return authError;
6281
6320
  const context = resolveWorkspaceStackContext((yield* HttpRouter.params)["issueId"] ?? "");
6282
6321
  if ("error" in context) return jsonResponse({ error: context.error }, { status: context.status });
6322
+ const stackName = context.composeFile ? context.composeProjectName : (yield* Effect.promise(() => discoverComposeProjectName(context.issueId))) ?? context.composeProjectName;
6283
6323
  const { stdout } = yield* Effect.promise(() => execFileAsync$1("docker", [
6284
6324
  "ps",
6285
6325
  "-a",
6286
6326
  "--filter",
6287
- `label=com.docker.compose.project=${context.composeProjectName}`,
6327
+ `label=com.docker.compose.project=${stackName}`,
6288
6328
  "--format",
6289
6329
  "{{.Names}}"
6290
6330
  ], {
@@ -6312,7 +6352,7 @@ const getWorkspaceStackLogsRoute = HttpRouter.add("GET", "/api/workspaces/:issue
6312
6352
  return jsonResponse({
6313
6353
  success: true,
6314
6354
  issueId: context.issueId,
6315
- stackName: context.composeProjectName,
6355
+ stackName,
6316
6356
  logs: chunks.join("\n\n")
6317
6357
  });
6318
6358
  })));
@@ -6340,7 +6380,7 @@ const postWorkspaceReapRoute = HttpRouter.add("POST", "/api/workspaces/:issueId/
6340
6380
  projectName: context.projectName
6341
6381
  }, {
6342
6382
  deleteBranches: false,
6343
- clearBeads: false
6383
+ clearTasks: false
6344
6384
  }));
6345
6385
  for (const step of steps) {
6346
6386
  const detail = step.details?.length ? `: ${step.details.join("; ")}` : "";
@@ -6470,7 +6510,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
6470
6510
  */
6471
6511
  async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
6472
6512
  try {
6473
- const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-lEYK__LD.js");
6513
+ const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
6474
6514
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
6475
6515
  return recordView ? JSON.stringify(recordView, null, 2) : null;
6476
6516
  } catch {
@@ -7034,16 +7074,6 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7034
7074
  const issueLower = issueId.toLowerCase();
7035
7075
  const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
7036
7076
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace does not exist" }, { status: 400 });
7037
- const workspaceBeadsDir = join(workspacePath, ".beads");
7038
- if (!existsSync$1(workspaceBeadsDir)) {
7039
- const projectRootBeadsDir = join(projectPath, ".beads");
7040
- if (existsSync$1(projectRootBeadsDir)) try {
7041
- yield* Effect.promise(() => execAsync(`cp -r "${projectRootBeadsDir}" "${workspaceBeadsDir}"`, { encoding: "utf-8" }));
7042
- console.log(`[workspace/start] Copied beads from project root to workspace for ${issueId}`);
7043
- } catch (e) {
7044
- console.warn(`[workspace/start] Could not copy beads: ${e}`);
7045
- }
7046
- }
7047
7077
  const devScript = join(workspacePath, "dev");
7048
7078
  const devScriptInContainer = join(workspacePath, ".devcontainer", "dev");
7049
7079
  if (!existsSync$1(devScript)) if (existsSync$1(devScriptInContainer)) try {
@@ -7239,7 +7269,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
7239
7269
  if (queuePosition === null) try {
7240
7270
  const resolved = resolveProjectFromIssueSync(issueId);
7241
7271
  if (resolved) {
7242
- const { getQueueForProject } = yield* Effect.promise(() => import("./merge-BLcEZNXz.js"));
7272
+ const { getQueueForProject } = yield* Effect.promise(() => import("./merge-Dervs4BF.js"));
7243
7273
  const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
7244
7274
  id: String(e.id),
7245
7275
  type: "task",
@@ -7277,7 +7307,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7277
7307
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
7278
7308
  if (workspaceInfo.exists && workspaceInfo.localPath) {
7279
7309
  const localPath = workspaceInfo.localPath;
7280
- const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-C0neHvQx.js"));
7310
+ const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-q8jNoBts.js"));
7281
7311
  try {
7282
7312
  const gitInfo = yield* getWorkspaceGitInfo(localPath);
7283
7313
  if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
@@ -7292,7 +7322,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7292
7322
  if (verificationStatus) update.verificationStatus = verificationStatus;
7293
7323
  if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
7294
7324
  const status = setReviewStatus(issueId, update);
7295
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-k22_Btaq.js"));
7325
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-D9-dMUtI.js"));
7296
7326
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
7297
7327
  if (reviewStatus && [
7298
7328
  "passed",
@@ -7310,7 +7340,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7310
7340
  const agentId = `agent-${issueId.toLowerCase()}`;
7311
7341
  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.`;
7312
7342
  try {
7313
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BsJiw5aT.js"));
7343
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-CULeOOY4.js"));
7314
7344
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7315
7345
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7316
7346
  issueId,
@@ -7374,7 +7404,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7374
7404
  const agentId = `agent-${issueId.toLowerCase()}`;
7375
7405
  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.`;
7376
7406
  try {
7377
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BsJiw5aT.js"));
7407
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-CULeOOY4.js"));
7378
7408
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7379
7409
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7380
7410
  issueId,
@@ -7407,14 +7437,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7407
7437
  });
7408
7438
  yield* Effect.promise(async () => {
7409
7439
  try {
7410
- const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-CrBE6IhN.js");
7440
+ const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-Dc9aoVoG.js");
7411
7441
  const project = resolveProjectFromIssueSync(issueId);
7412
7442
  const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
7413
7443
  if (!repo || !repo.includes("/")) return;
7414
7444
  const [owner, name] = repo.split("/");
7415
7445
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7416
7446
  if (!wsInfo?.localPath) return;
7417
- const { postOverdeckTestsStatus } = await import("./github-app-Bwt9lK4A.js");
7447
+ const { postOverdeckTestsStatus } = await import("./github-app-BrYwK_Gb.js");
7418
7448
  await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
7419
7449
  } catch (err) {
7420
7450
  console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
@@ -7456,7 +7486,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7456
7486
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7457
7487
  const issueLower = issueId.toLowerCase();
7458
7488
  const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
7459
- const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-Bwt9lK4A.js"));
7489
+ const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-BrYwK_Gb.js"));
7460
7490
  if (!isGitHubAppConfigured()) return jsonResponse({
7461
7491
  success: false,
7462
7492
  error: "GitHub App not configured"
@@ -7471,4 +7501,4 @@ const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspa
7471
7501
  //#endregion
7472
7502
  export { hasDashboardInternalToken as C, getWorkspacePathForIssue as D, rejectUnsafeDashboardMutationRequest as E, dashboardSessionCookieHeader as S, rejectUnauthorizedDashboardSessionMintRequest as T, syncCacheSync as _, pushApproveMain as a, resolveIssueHeadlineCost as b, triggerMerge as c, reconcile as d, reconcilePiTranscripts as f, rebuildCacheSync as g, getCostsForIssueSync as h, mergeOpsRouteLayer as i, resumeQueuedMerges as l, migrateAllSessionsSync as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reclassifyUnknownCostEventsSync as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, syncWalFromAllProjects as u, processPendingFeedbackDeliveries as v, rejectUnauthorizedDashboardRequest as w, dashboardCsrfToken as x, getCachedRunningAgents as y };
7473
7503
 
7474
- //# sourceMappingURL=workspaces-D-uIoqbg.js.map
7504
+ //# sourceMappingURL=workspaces-CGuzW1Ia.js.map