@overdeck/desktop 0.49.1 → 0.50.0

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 (545) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +1 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-Crw-xSJ3.js → acceptance-criteria-B_maCGZv.js} +2 -2
  4. package/server/{active-dashboard-bundle-CLwfD-Om.js → active-dashboard-bundle-CCqpFWiz.js} +2 -2
  5. package/server/activity-logger-B0X2JJwM.js +3 -0
  6. package/server/{activity-logger-BAVLrkR7.js → activity-logger-SlTXYCVf.js} +22 -4
  7. package/server/{advancing-selfheal-BQiJ7mIH.js → advancing-selfheal-BJAfiY-C.js} +12 -7
  8. package/server/{agent-gc-5E0lgxI1.js → agent-gc-bhikjoJ_.js} +11 -11
  9. package/server/agent-idle-D-UQ7gDv.js +745 -0
  10. package/server/agent-state-BrUPf_7Z.js +3 -0
  11. package/server/{agent-state-Bb3UUxQm.js → agent-state-FABw8neJ.js} +682 -454
  12. package/server/{agent-state-service-keg-x1bT.js → agent-state-service-BAQApt97.js} +1 -1
  13. package/server/{agent-state-service-BFbttwRA.js → agent-state-service-rDenYSlD.js} +5 -5
  14. package/server/agents-DixZjXWm.js +3 -0
  15. package/server/{agents-CqQJW75N.js → agents-DzpQidT8.js} +8 -8
  16. package/server/{archive-planning-BwEhu9Oq.js → archive-planning-BL1ABtW0.js} +20 -135
  17. package/server/archive-planning-D3gw32U9.js +2 -0
  18. package/server/{artifact-index-jobs-C6Lg2rKm.js → artifact-index-jobs-Cjdme0jS.js} +3 -3
  19. package/server/{assemble-DyTp2gSB.js → assemble-B_JgnCbG.js} +28 -9
  20. package/server/{auto-spawn-consent-BDfe4qz0.js → auto-spawn-consent-BesWchEi.js} +8 -7
  21. package/server/{backlog-auto-trigger-DuOGpdDW.js → backlog-auto-trigger-COLq639j.js} +3 -3
  22. package/server/{behavior-Bitko0mD.js → behavior-DCg8CIWC.js} +3 -3
  23. package/server/{bridge-pool-patrol-DiHEd13O.js → bridge-pool-patrol-BDohuMRt.js} +2 -2
  24. package/server/{briefing-freshness-CDJcmHHZ.js → briefing-freshness-ENa_hW_V.js} +2 -2
  25. package/server/build-info-Dx2qrVhb.js +2 -0
  26. package/server/{build-info-DTX8JwVP.js → build-info-WuZT6xyi.js} +3 -3
  27. package/server/{checkpoint-manager-BlOOdzLF.js → checkpoint-manager-CSZ7aVQF.js} +26 -9
  28. package/server/{checkpoint-manager-CKg1tn34.js → checkpoint-manager-DXhGRvg4.js} +1 -1
  29. package/server/checkpoint-worker.js +1 -1
  30. package/server/{checkpoints-BGfl0cHM.js → checkpoints-DUkUsPVS.js} +2 -2
  31. package/server/{checkpoints-DRALkfDS.js → checkpoints-tm_w6Y4V.js} +1 -1
  32. package/server/{claude-hooks-provision-B_tv3wzE.js → claude-hooks-provision-CTh9zxEi.js} +1 -1
  33. package/server/{claude-hooks-provision-BlGv6twJ.js → claude-hooks-provision-fRofvhTN.js} +2 -2
  34. package/server/{claude-permissions-aHgDcZi5.js → claude-permissions-DLrb9ovz.js} +18 -3
  35. package/server/{claude-settings-overlay-T2LWLteV.js → claude-settings-overlay-BYnXaTVc.js} +2 -2
  36. package/server/{claude-settings-overlay-CYOvFE3A.js → claude-settings-overlay-CMS5Jab5.js} +1 -1
  37. package/server/cli-BflmtEFM.js +2 -0
  38. package/server/{cli-Do8UpLoI.js → cli-CoQou1t_.js} +11 -11
  39. package/server/{cliproxy-CX6jHRDP.js → cliproxy-DXDQcR3I.js} +52 -17
  40. package/server/cliproxy-DdhFpcXU.js +3 -0
  41. package/server/{close-issue-J0_eWYT1.js → close-issue-CpQ0BWg-.js} +5 -5
  42. package/server/{closed-issue-reaper-bFppuk6F.js → closed-issue-reaper-CdcJRvUx.js} +13 -12
  43. package/server/{closed-issue-reaper-Cl2h9AfT.js → closed-issue-reaper-TymtZM37.js} +1 -1
  44. package/server/{codex-icapA4om.js → codex-BValsmtK.js} +1 -1
  45. package/server/{codex-OOea7lXs.js → codex-DYyZL8JD.js} +16 -10
  46. package/server/{compaction-continuation-D5voR1ME.js → compaction-continuation-CVjbdGKt.js} +3 -3
  47. package/server/{config-Cjleh3_U.js → config-CvKH7r7W.js} +1 -1
  48. package/server/{config-tucKBCCc.js → config-NxI9Yl2f.js} +2 -2
  49. package/server/{config-DC75T4Mr.js → config-_qaa1UXH.js} +2 -2
  50. package/server/{config-yaml-BwOEANMr.js → config-yaml-D60AnTIu.js} +55 -15
  51. package/server/{conflict-gate-DlpWCMd7.js → conflict-gate-0dD1kxjN.js} +1 -1
  52. package/server/{conflict-gate-D2L1kZeL.js → conflict-gate-hAUCL-un.js} +5 -5
  53. package/server/{context-layers-CSPGc2Hb.js → context-layers-CdpabJj0.js} +3 -3
  54. package/server/context-layers-Ds1MnEFI.js +4 -0
  55. package/server/{continue-U3Af0jUq.js → continue-CnvrUfxw.js} +3 -3
  56. package/server/{control-settings-5k6ixdFW.js → control-settings-Db0uXgVM.js} +310 -7
  57. package/server/{conversation-compaction-CSpVpxN6.js → conversation-compaction-B-1KETG9.js} +8 -8
  58. package/server/{conversation-compaction-Ciit9O6k.js → conversation-compaction-DzMXGRiJ.js} +1 -1
  59. package/server/{conversation-service-BxrB5lUT.js → conversation-service-BL-asWPX.js} +1 -1
  60. package/server/{conversation-service-BteE4ELK.js → conversation-service-BxIOd5ay.js} +21 -7
  61. package/server/conversations-CEMfwMt-.js +3 -0
  62. package/server/{conversations-DhwxsOru.js → conversations-nS6QgYpD.js} +12 -7
  63. package/server/cost-3FyqKK56.js +838 -0
  64. package/server/{cost-Bnf9NUC5.js → cost-Cctc-Q9M.js} +3 -3
  65. package/server/{cost-CQKI6OCu.js → cost-DTuIRE4y.js} +2 -2
  66. package/server/{cost-sync-B-ADeXKY.js → cost-sync-DfmvLT9L.js} +3 -3
  67. package/server/{dag-DI9LaK_q.js → dag-o-dUpw1L.js} +6 -19
  68. package/server/{dangerous-git-ops-akhA3iyF.js → dangerous-git-ops-BOtXCFkT.js} +1 -1
  69. package/server/dashboard-db-worker.js +61 -11
  70. package/server/{deacon-TPYssFYt.js → deacon-CsisLmPt.js} +1735 -172
  71. package/server/{deacon-canonical-state-DFYymrDw.js → deacon-canonical-state-DkdkQS5p.js} +3 -3
  72. package/server/deacon-e6py3jkM.js +4 -0
  73. package/server/{deacon-event-client-Te5v10-b.js → deacon-event-client-BCjHiGAY.js} +1 -1
  74. package/server/{deacon-event-client-BKOL4AcL.js → deacon-event-client-CMQswEHX.js} +2 -2
  75. package/server/{deacon-nudge-log-BtlTWgWu.js → deacon-nudge-log-pcliw8Dr.js} +1 -1
  76. package/server/{deacon-pending-lifecycle-DVHjOLje.js → deacon-pending-lifecycle-BzaE76Xo.js} +3 -3
  77. package/server/deacon.js +11 -11
  78. package/server/{dead-end-trip-P0IF1O0E.js → dead-end-trip-Bs3hxIn6.js} +3 -3
  79. package/server/dead-end-trip-DUbiRMtT.js +2 -0
  80. package/server/delivery-DhZGRShH.js +3 -0
  81. package/server/{deploy-patrol-BXjlvoV3.js → deploy-patrol-B8sKkA8h.js} +8 -8
  82. package/server/deploy-queue--smqHLhe.js +2 -0
  83. package/server/{deploy-queue-o7shYg1j.js → deploy-queue-CCGWXFkp.js} +2 -2
  84. package/server/{deploy-window-CNT6fOff.js → deploy-window-YuJewzmC.js} +4 -4
  85. package/server/{deploy-window-BMk5_oX6.js → deploy-window-hgsvZ3UZ.js} +1 -1
  86. package/server/{dev-supervisor-SR1CLOAK.js → dev-supervisor-4SBloJHV.js} +2 -2
  87. package/server/{devcontainer-renderer-enMmNDFa.js → devcontainer-renderer-BiJhwFNi.js} +3 -3
  88. package/server/{dist-CPTO_zMR.js → dist-CoR2sivG.js} +1 -1
  89. package/server/dist-FHv1s5ez.js +3 -0
  90. package/server/{docker-B7qUZptz.js → docker-CWO7dcIP.js} +3 -3
  91. package/server/{docker-KR3zSFKY.js → docker-DQzyMXkd.js} +1 -1
  92. package/server/{dod-gK835UMf.js → dod-BAk5arLF.js} +1 -1
  93. package/server/{done-preflight-CksRvh49.js → done-preflight-CGFA0M1b.js} +1 -1
  94. package/server/{done-preflight-Bk8aExAL.js → done-preflight-Cx9JGznT.js} +5 -5
  95. package/server/{driver-CmsY2RLl.js → driver-BtcFz-qu.js} +14 -3
  96. package/server/durable-review-pipeline-BOEZ0chh.js +3 -0
  97. package/server/{durable-review-pipeline-DgYHucN2.js → durable-review-pipeline-Djx_lvFd.js} +11 -2
  98. package/server/{ensure-devcontainer-BQ4YizSH.js → ensure-devcontainer-Dk6ZMOUC.js} +1 -1
  99. package/server/{ensure-devcontainer-ojerEqQg.js → ensure-devcontainer-DzYBBwnM.js} +4 -4
  100. package/server/{esm-shims-1htPASWs.js → esm-shims-deFq5Hhl.js} +1 -1
  101. package/server/{event-store-BgEjNsvk.js → event-store-C50Qt-f1.js} +1 -1
  102. package/server/{event-store-D7qcJXuZ.js → event-store-DTns2XZP.js} +5 -5
  103. package/server/{event-store-provider-BKvk2rDj.js → event-store-provider-Bu1Qrg6v.js} +1 -1
  104. package/server/{events-BIKGJZOT.js → events-B6xW8Cpm.js} +3 -3
  105. package/server/{dist-src-BM9eudEd.js → factory-CWVKwKFE.js} +714 -2
  106. package/server/{feature-registry-storage-ewNSIVsQ.js → feature-registry-storage-vaxRN3WO.js} +3 -3
  107. package/server/{features-CGopJXdU.js → features-DXWwktJB.js} +2 -2
  108. package/server/{feedback-stuck-retirement-B8-fX7NA.js → feedback-stuck-retirement-CXAYe2rU.js} +2 -2
  109. package/server/{feedback-target-CkyLYohm.js → feedback-target-DSVpi0gT.js} +1 -1
  110. package/server/{feedback-target-Ci6N5p4G.js → feedback-target-yPD_wclF.js} +10 -10
  111. package/server/{feedback-writer-DfuVjvH0.js → feedback-writer-BzN4qvaP.js} +1 -1
  112. package/server/{feedback-writer-D4ULO4qG.js → feedback-writer-Ds1Wjsz4.js} +5 -5
  113. package/server/{flywheel-DXI_WITn.js → flywheel-BCZS-FlW.js} +1 -1
  114. package/server/{flywheel-BwYPDlhK.js → flywheel-CC4gE_rx.js} +15 -15
  115. package/server/{flywheel-C7yek87O.js → flywheel-DWKd7bMc.js} +79 -29
  116. package/server/{flywheel-merge-order-C5m5bYBc.js → flywheel-merge-order-DDT3i57u.js} +1 -1
  117. package/server/{flywheel-merge-order-CXfU4M6l.js → flywheel-merge-order-DJwH2KpL.js} +17 -15
  118. package/server/forge-4VVCRcF7.js +2 -0
  119. package/server/{forge-DYX9sKzG.js → forge-CHADjOFs.js} +2 -2
  120. package/server/{from-DAdMxC29.js → from-C3dzmjSO.js} +1 -1
  121. package/server/{fs-lock-cw25uO_E.js → fs-lock-DQ_gUxfq.js} +2 -2
  122. package/server/{fts-operations-D_rzLxX5.js → fts-operations-asZo2fh1.js} +3 -3
  123. package/server/git-info-DMOSfJ9I.js +148 -0
  124. package/server/{git-utils-Y0zG25ez.js → git-utils-BAMwn9Nf.js} +1 -1
  125. package/server/{git-utils-DV4B9TRl.js → git-utils-BdHk8y7g.js} +4 -4
  126. package/server/{github-app-C33lDk9Z.js → github-app-BWziYCf3.js} +1 -1
  127. package/server/{github-app-4UX8VIr8.js → github-app-BlMSzSTw.js} +2 -2
  128. package/server/{github-client-nPj5ckZO.js → github-client-OK24qpol.js} +1 -1
  129. package/server/{github-client-DkJVR908.js → github-client-w6j5nVlz.js} +3 -3
  130. package/server/{github-pr-lookup-C9Vokb0W.js → github-pr-lookup-bGcsEvLE.js} +2 -2
  131. package/server/{harness-binary-BgXYDo2Z.js → harness-binary-DChiynaB.js} +2 -2
  132. package/server/{harness-resolve-1NZcVx7n.js → harness-resolve-BplBEbwn.js} +4 -4
  133. package/server/{health-events-jMfxrElt.js → health-events-BTqsmunw.js} +1 -1
  134. package/server/{health-events-DlX_FVAB.js → health-events-Bk3LjaJ9.js} +2 -2
  135. package/server/{hooks-NQ19vvlB.js → hooks-DJR1yR9w.js} +2 -2
  136. package/server/{hooks-W3REcb3h.js → hooks-EndRNrx9.js} +1 -1
  137. package/server/{hume-BFkid2PO.js → hume-1FJmNDTq.js} +2 -2
  138. package/server/hume-gXLmRhmN.js +3 -0
  139. package/server/{identity-Bwh6VGeL.js → identity-C3s8lyp0.js} +3 -3
  140. package/server/{idle-stack-reaper-CHtCNpvd.js → idle-stack-reaper-CBelVOE3.js} +1 -1
  141. package/server/{idle-stack-reaper-BeU_KxWx.js → idle-stack-reaper-DtoI4al6.js} +4 -4
  142. package/server/{in-flight-guard-pcwXKLGz.js → in-flight-guard-B7khcBdQ.js} +1 -1
  143. package/server/{infra-KTp9KV9u.js → infra-CJRi_5Wu.js} +36 -7
  144. package/server/{injection-67YyU6SC.js → injection-ADWQ3D0s.js} +8 -8
  145. package/server/{injection-BxbZKPDh.js → injection-BWsgHvrL.js} +1 -1
  146. package/server/{inspect-agent-VHSihlb7.js → inspect-agent-CCfNJjKr.js} +12 -12
  147. package/server/inspect-agent-Dhp3hCGp.js +2 -0
  148. package/server/{internal-token-B-z-sGBH.js → internal-token-BCTEqUCX.js} +1 -1
  149. package/server/{internal-token-zY75jrRJ.js → internal-token-BeIWG_kT.js} +2 -2
  150. package/server/{io-DfvO2xyh.js → io-BCtZoXHo.js} +5 -5
  151. package/server/{issue-closed-dvEWKO7Q.js → issue-closed-CiYAa6bX.js} +7 -7
  152. package/server/{issue-lifecycle-3N8XF7lP.js → issue-lifecycle-BETNVVLq.js} +206 -29
  153. package/server/{issue-lifecycle-BI6jAfp8.js → issue-lifecycle-DaKN57sx.js} +1 -1
  154. package/server/{issue-service-singleton-CL6hESX2.js → issue-service-singleton-1Q0ER8Yc.js} +1 -1
  155. package/server/{issue-service-singleton-BN_2MXp4.js → issue-service-singleton-C_sZ0HjP.js} +124 -11
  156. package/server/issue-title-fallback-B91iD66g.js +120 -0
  157. package/server/{issues-CkvUoAnq.js → issues-RGHQUKhB.js} +2 -2
  158. package/server/{jsonl-parser-CrEb2PWr.js → jsonl-parser-Dfs1dlYE.js} +3 -3
  159. package/server/jsonl-resolver-bFtftCDd.js +324 -0
  160. package/server/{kimi-code-DoMoGqIu.js → kimi-code-BxkDgaj4.js} +1 -1
  161. package/server/{kimi-code-C26gmGxM.js → kimi-code-CNYRA8Dd.js} +14 -12
  162. package/server/{kimi-parser-Dmhy3UlR.js → kimi-parser-OcWwmOqF.js} +2 -2
  163. package/server/{label-cleanup-X2lWfghH.js → label-cleanup-CefxK9tL.js} +3 -3
  164. package/server/{lifecycle-B0rL38D3.js → lifecycle-DDZ7w-BY.js} +6 -6
  165. package/server/{lifecycle-Bg44O-9x.js → lifecycle-DVXyUil2.js} +2 -2
  166. package/server/{lifecycle-io-DQDU0apV.js → lifecycle-io-D1oBiMce.js} +1 -1
  167. package/server/{lifecycle-io-CCBpRv5m.js → lifecycle-io-D7N0vQNj.js} +5 -5
  168. package/server/{linear-client-B0cIkTs4.js → linear-client-DUN7zCeb.js} +3 -3
  169. package/server/{linear-client-6V2E-DSa.js → linear-client-TL32snOy.js} +1 -1
  170. package/server/{linear-mcp-auth-LCo9AWUd.js → linear-mcp-auth-CtRKSHy5.js} +1 -1
  171. package/server/{linear-mcp-auth-Dsu9Io9r.js → linear-mcp-auth-bB0CPyjh.js} +5 -5
  172. package/server/memory-fts-worker.js +1 -1
  173. package/server/{memory-governor-A4O6vI9d.js → memory-governor-Cvv_9K0M.js} +88 -22
  174. package/server/{memory-pressure-patrol-BWlWywmA.js → memory-pressure-patrol-C6DJJQRA.js} +38 -14
  175. package/server/{merge-BGWcBxku.js → merge-DOCR6pHi.js} +1 -1
  176. package/server/{merge-vz80RvSE.js → merge-FTk4LsnM.js} +3 -3
  177. package/server/{merge-agent-GWhmnxFk.js → merge-agent-C-dsN9se.js} +37 -33
  178. package/server/{merge-agent-BRSz26Oh.js → merge-agent-D-4_iQgy.js} +2 -2
  179. package/server/{merge-batch-CFMEtTxv.js → merge-batch-BJjzUUL7.js} +1 -1
  180. package/server/{merge-completeness-CP347umA.js → merge-completeness-BOtBUwTU.js} +4 -4
  181. package/server/{merge-completeness-7ajHAIR-.js → merge-completeness-CoLJxfUY.js} +1 -1
  182. package/server/merge-eligibility-C4rTS97F.js +3 -0
  183. package/server/merge-eligibility-D7wRnJbj.js +51 -0
  184. package/server/merge-ops-Cf02szJ5.js +2 -0
  185. package/server/merge-rebase-Bj7eJAG4.js +2 -0
  186. package/server/{merge-rebase-C5htyEEH.js → merge-rebase-KBw4rdh3.js} +2 -2
  187. package/server/{merge-set-DsGW8fmc.js → merge-set-CVfEM57p.js} +1 -1
  188. package/server/{merge-set-eiE2nC6C.js → merge-set-CyW-xSn4.js} +4 -4
  189. package/server/{merge-sync-CM2-myXu.js → merge-sync-CYGsJy0u.js} +1 -1
  190. package/server/{merge-sync-Ct0-cxMX.js → merge-sync-YLvOPAry.js} +2 -2
  191. package/server/{merge-train-BOu3fN7O.js → merge-train-VxLn8Ms4.js} +4 -4
  192. package/server/{merge-train-deps-LXHGK61n.js → merge-train-deps-D0y4hBB9.js} +4 -4
  193. package/server/{merge-verification-BRp08IzI.js → merge-verification-BfJRNMiD.js} +6 -6
  194. package/server/{merged-docker-cleanup-worker-CwldDjHV.js → merged-docker-cleanup-worker-Bh5fKG_b.js} +4 -4
  195. package/server/{merged-docker-cleanup-worker-C8eGn78a.js → merged-docker-cleanup-worker-Ci9oeFAe.js} +1 -1
  196. package/server/messaging-Dfbhgjd6.js +3 -0
  197. package/server/{multipart-parser-OAuW7824.js → multipart-parser-BYwfKOVU.js} +2 -2
  198. package/server/{no-resume-mode-MWI6pnrK.js → no-resume-mode-DjMQRkId.js} +1 -1
  199. package/server/node_modules/.package-lock.json +24 -24
  200. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/AGENTS.md +14 -0
  201. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/CLAUDE.md +14 -0
  202. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +10 -3
  203. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/package.json +2 -2
  204. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/40_sql/10_basics.ts +175 -0
  205. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/40_sql/index.md +6 -0
  206. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/10_basics.ts +3 -1
  207. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/20_testing.ts +100 -0
  208. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/api/Users.ts +30 -14
  209. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/domain/User.ts +15 -6
  210. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +11 -10
  211. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +41 -32
  212. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Users.ts +141 -20
  213. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/70_cli/10_basics.ts +31 -5
  214. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  215. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +10 -9
  216. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  217. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.d.ts.map +1 -1
  218. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js +12 -9
  219. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js.map +1 -1
  220. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js +1 -1
  221. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js.map +1 -1
  222. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocketServer.js +4 -4
  223. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocketServer.js.map +1 -1
  224. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.d.ts.map +1 -1
  225. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.js +10 -4
  226. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.js.map +1 -1
  227. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.d.ts +4 -0
  228. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.d.ts.map +1 -0
  229. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.js +10 -0
  230. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.js.map +1 -0
  231. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +7 -7
  232. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +16 -11
  233. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeClusterSocket.ts +15 -12
  234. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocket.ts +1 -1
  235. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocketServer.ts +4 -4
  236. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeStream.ts +10 -4
  237. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/internal/nodeChildProcessSpawner.ts +16 -0
  238. package/server/node_modules/@types/node/README.md +1 -1
  239. package/server/node_modules/@types/node/buffer.buffer.d.ts +5 -5
  240. package/server/node_modules/@types/node/crypto.d.ts +2 -2
  241. package/server/node_modules/@types/node/http.d.ts +16 -0
  242. package/server/node_modules/@types/node/http2.d.ts +10 -2
  243. package/server/node_modules/@types/node/package.json +2 -2
  244. package/server/node_modules/@types/node/process.d.ts +52 -0
  245. package/server/node_modules/@types/node/quic.d.ts +210 -28
  246. package/server/node_modules/@types/node/sqlite.d.ts +6 -2
  247. package/server/node_modules/@types/node/test.d.ts +36 -0
  248. package/server/node_modules/ansi-regex/index.js +3 -2
  249. package/server/node_modules/ansi-regex/package.json +1 -1
  250. package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
  251. package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
  252. package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
  253. package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
  254. package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
  255. package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
  256. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  257. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  258. package/server/node_modules/gaxios/package.json +3 -3
  259. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +11 -5
  260. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  261. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  262. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  263. package/server/node_modules/msgpackr/dist/index.js +11 -5
  264. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  265. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  266. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  267. package/server/node_modules/msgpackr/dist/node.cjs +11 -5
  268. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  269. package/server/node_modules/msgpackr/dist/test.js +11 -5
  270. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  271. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
  272. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  273. package/server/node_modules/msgpackr/package.json +1 -1
  274. package/server/node_modules/msgpackr/unpack.js +11 -5
  275. package/server/node_modules/picomatch/lib/parse.js +10 -1
  276. package/server/node_modules/picomatch/lib/scan.js +30 -18
  277. package/server/node_modules/picomatch/package.json +1 -1
  278. package/server/{orphan-proposed-reconciler-BAE5AZ_e.js → orphan-proposed-reconciler-CnP0K2v3.js} +2 -2
  279. package/server/{orphan-proposed-reconciler-cV3URUqk.js → orphan-proposed-reconciler-nFUlquZt.js} +24 -23
  280. package/server/package-lock.json +25 -25
  281. package/server/package.json +1 -1
  282. package/server/{pan-dir-DDd91kMb.js → pan-dir-B4NfzOf3.js} +5 -5
  283. package/server/{deacon-merge-BOGFEV8_.js → parked-residue-8WbU0y1z.js} +188 -69
  284. package/server/{paths-CRLnDgcI.js → paths-rETQhTF2.js} +2 -2
  285. package/server/{pending-lifecycle-claim-CYgMiDAP.js → pending-lifecycle-claim-yAwDuGS4.js} +2 -2
  286. package/server/{pickup-BjJsSX12.js → pickup-Dle6k9Xt.js} +1 -1
  287. package/server/{pipeline-agent-reader-BLc43dVJ.js → pipeline-agent-reader-CeWhQzXC.js} +5 -5
  288. package/server/{pipeline-membership-BHZp_ShY.js → pipeline-membership-BV4hdkHm.js} +1 -1
  289. package/server/{pipeline-membership-5qlRz5Qg.js → pipeline-membership-C9ykcjsn.js} +1 -1
  290. package/server/{pipeline-membership-gather-CGFY1v-y.js → pipeline-membership-gather-Ba0wJNCR.js} +17 -12
  291. package/server/{pipeline-membership-gather-WhRc1yke.js → pipeline-membership-gather-C9E22B2W.js} +1 -1
  292. package/server/{pipeline-notifier-C4fZ2ito.js → pipeline-notifier-B5DPXvnr.js} +1 -1
  293. package/server/{pipeline-notifier-BmsLWM_2.js → pipeline-notifier-p190L97e.js} +2 -2
  294. package/server/{post-merge-lifecycle-worker-KK1RTKRE.js → post-merge-lifecycle-worker-OQoK8Ckg.js} +3 -3
  295. package/server/{post-merge-state-_Lj3LDLh.js → post-merge-state-DFaf7OI1.js} +4 -4
  296. package/server/prd-locations-F2oLSAhy.js +124 -0
  297. package/server/{project-pipelines-CCkebHOu.js → project-pipelines-CUsa6U59.js} +2 -2
  298. package/server/project-repos-BVdi9-ch.js +3 -0
  299. package/server/{project-repos-B4MK48j4.js → project-repos-CsfvLtmr.js} +29 -3
  300. package/server/project-resource-refresh-queue-BehrH4Ai.js +865 -0
  301. package/server/project-resource-refresh-queue-D2110Guc.js +2 -0
  302. package/server/{projects-DvPEAP18.js → projects-BMuEf14J.js} +1 -1
  303. package/server/{prompts-BiS5I2tZ.js → prompts-CKpDt8Jn.js} +2 -2
  304. package/server/providers-Buv2wmFU.js +3 -0
  305. package/server/{providers-DrfK0Ip8.js → providers-CxPKmyif.js} +7 -7
  306. package/server/public/assets/{chunk-BO2N2NFS-GtVe_o56.js → chunk-BO2N2NFS-DZOQVqV1.js} +4 -4
  307. package/server/public/assets/{diagram-OG6HWLK6-BvhcYYHc.js → diagram-OG6HWLK6-oKeXcbO1.js} +1 -1
  308. package/server/public/assets/{dist-CSmUXazd.js → dist-2qPmeRzT.js} +3 -3
  309. package/server/public/assets/{dist-D0ryefak.js → dist-ClBlE-Nm.js} +1 -1
  310. package/server/public/assets/{ganttDiagram-6RSMTGT7-BXA51DzM.js → ganttDiagram-6RSMTGT7-BwdG9fQv.js} +1 -1
  311. package/server/public/assets/{highlighted-body-OFNGDK62-mlV4EpWt.js → highlighted-body-OFNGDK62-BzGNdskQ.js} +1 -1
  312. package/server/public/assets/index-CdPveU3M.css +1 -0
  313. package/server/public/assets/index-Cg6tdZoY.js +860 -0
  314. package/server/public/assets/{linear-BPE7oswm.js → linear-DpEt1TJb.js} +1 -1
  315. package/server/public/assets/mermaid-GHXKKRXX-6KBD_3T_.js +1 -0
  316. package/server/public/assets/{pieDiagram-4H26LBE5-BguGGV3S.js → pieDiagram-4H26LBE5-9BpM4oRJ.js} +1 -1
  317. package/server/public/assets/{prod-aKDYUrXQ.js → prod-CzJiNNEG.js} +4 -4
  318. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Bx3i4B6H.js → quadrantDiagram-W4KKPZXB-BXWVAoZx.js} +1 -1
  319. package/server/public/assets/{sankeyDiagram-5OEKKPKP-B5vuLjA4.js → sankeyDiagram-5OEKKPKP-5oxodGEw.js} +1 -1
  320. package/server/public/assets/{xychartDiagram-2RQKCTM6-HPlpkqsN.js → xychartDiagram-2RQKCTM6-BChDrHxZ.js} +1 -1
  321. package/server/public/index.html +2 -2
  322. package/server/pull-requests-CmlandI7.js +2 -0
  323. package/server/{pull-requests-BcHIsFJv.js → pull-requests-T0OV0Vn4.js} +3 -3
  324. package/server/{rally-B1OMtzch.js → rally-CUqj2oIN.js} +3 -3
  325. package/server/rally-DYIn9R2U.js +3 -0
  326. package/server/{rally-api-ShZ4kvn0.js → rally-api-BFPb2oSq.js} +2 -2
  327. package/server/{rally-api-u_vkr5c_.js → rally-api-BoucQG1u.js} +1 -1
  328. package/server/{rally-client-D6Feq1Ka.js → rally-client-16iObny7.js} +5 -5
  329. package/server/{rally-client-DgZvUZqX.js → rally-client-CsqLjLLa.js} +1 -1
  330. package/server/{reap-terminal-sessions-CRfiXLY0.js → reap-terminal-sessions-BaDSNR-k.js} +2 -2
  331. package/server/{reap-terminal-sessions-D7f3zSE9.js → reap-terminal-sessions-DgEIKMhH.js} +2 -2
  332. package/server/{rebuild-stack-CCwKHZb6.js → rebuild-stack-BcBVFJp3.js} +2 -2
  333. package/server/{rebuild-stack-DKxOnkpE.js → rebuild-stack-CyXMrj6K.js} +7 -7
  334. package/server/reconciler-caYiRnPy.js +657 -0
  335. package/server/{reconstruct-cache-BP8UIKt7.js → reconstruct-cache-3JzPOune.js} +7 -7
  336. package/server/{record-By-wp6pg.js → record-DYOg97Iv.js} +1 -1
  337. package/server/{record-update-D23jPU6b.js → record-update-BPqpBu3O.js} +9 -7
  338. package/server/{record-update-ByGtIlUK.js → record-update-CDPEX7BH.js} +1 -1
  339. package/server/{recovery-trip-C4dTl8DO.js → recovery-trip-CpfW6LCJ.js} +43 -10
  340. package/server/{recovery-trip-qloOYOFz.js → recovery-trip-xqKC07Gy.js} +1 -1
  341. package/server/{release-engine-Crc0Tjx-.js → release-engine-C_OOhCaK.js} +5 -5
  342. package/server/{release-set-DDXwbIK7.js → release-set-DOIDz2vw.js} +3 -3
  343. package/server/{remote-oEMfXlwT.js → remote-BTh-sjpX.js} +3 -3
  344. package/server/{remote-agents-Bgtc2nOO.js → remote-agents-DbbN7vSm.js} +6 -6
  345. package/server/{remote-agents-DQVGZVQ9.js → remote-agents-MuXx2gWm.js} +1 -1
  346. package/server/{remote-completion-DxUJ5HKR.js → remote-completion-LcWCpAm2.js} +13 -13
  347. package/server/{remote-CBpLi4Yy.js → remote-xY0B43Ho.js} +3 -3
  348. package/server/{resolver-CuAULbLs.js → resolver-C2QKOf09.js} +2 -2
  349. package/server/{resolver-C8rooxoz.js → resolver-D4nsxfGo.js} +31 -8
  350. package/server/resume-ByUrJUNX.js +3 -0
  351. package/server/{review-agent-7C2w5CzU.js → review-agent-BRBTm1qE.js} +43 -55
  352. package/server/review-agent-Caodi0PX.js +3 -0
  353. package/server/{review-artifacts-BJeEfm2r.js → review-artifacts-DgaDlbO4.js} +6 -6
  354. package/server/{review-convoy-liveness-DfF9eXjI.js → review-convoy-liveness-BBvyuRLC.js} +20 -11
  355. package/server/{review-run-recovery-ZjuDTNhZ.js → review-run-recovery-DCzWMMvE.js} +1 -1
  356. package/server/{review-run-recovery-7BKt2Es0.js → review-run-recovery-THHMKlXJ.js} +3 -3
  357. package/server/{review-status-CUnjjOUu.js → review-status-Bge_3XTR.js} +1 -1
  358. package/server/{review-status-DBnR5t4z.js → review-status-DpniqzPT.js} +113 -44
  359. package/server/{review-status-emit-Cg4tOb8U.js → review-status-emit-D7sM720S.js} +3 -3
  360. package/server/{review-status-enrichment-D-rQshu6.js → review-status-enrichment-PDI4-faj.js} +3 -3
  361. package/server/{review-status-source-DSn0glLa.js → review-status-source-D2PCWS6E.js} +1 -1
  362. package/server/{review-status-source-Ct912fv_.js → review-status-source-Jq0BXmn3.js} +1 -1
  363. package/server/{review-status-sync-B7V_Gg51.js → review-status-sync-C6ZKTI8f.js} +11 -8
  364. package/server/{review-status-sync-YthpOH_q.js → review-status-sync-CvpHWyvR.js} +1 -1
  365. package/server/{review-verdict-feedback-C-dBon_-.js → review-verdict-feedback-B2ojHFH5.js} +8 -8
  366. package/server/{review-verdict-feedback-DqXTuJk8.js → review-verdict-feedback-tyMoLT2L.js} +1 -1
  367. package/server/{review-verdict-writer-CKaJWp75.js → review-verdict-writer-Cy_1pnIj.js} +7 -7
  368. package/server/{review-verdict-writer-jldSh3Bm.js → review-verdict-writer-DjrJ64eS.js} +1 -1
  369. package/server/{rollup-DZwH4CLs.js → rollup-Cp0KEoOu.js} +1 -1
  370. package/server/{rollup-QCwYcBdP.js → rollup-DU3xBQu2.js} +8 -8
  371. package/server/{scanner-2aHeLC3W.js → scanner-BFKG3Gxv.js} +8 -8
  372. package/server/{search-DwHYaj66.js → search-DhtKwbBC.js} +2 -2
  373. package/server/{secret-redaction-B5G1xZ3k.js → secret-redaction-DLZ-VqHq.js} +1 -1
  374. package/server/{sequence-io-POKWdusG.js → sequence-io-C-Q19Jez.js} +4 -4
  375. package/server/{sequencer-agent-DS00KHVm.js → sequencer-agent-eN2P2lDz.js} +6 -6
  376. package/server/server.js +1499 -1350
  377. package/server/{service-BLb_CyPL.js → service-CThO0Sar.js} +80 -774
  378. package/server/{session-fork-DcTzVwex.js → session-fork-ZYTHtpBh.js} +2 -2
  379. package/server/settings-ByDRfuuE.js +2 -0
  380. package/server/{settings-Clw8UVNs.js → settings-CTywpFw5.js} +2 -2
  381. package/server/{settings-B9-H2K_E.js → settings-nAT-eK56.js} +3 -3
  382. package/server/{shadow-engineering-C6oO_PiR.js → shadow-engineering-BHZKPJhq.js} +3 -3
  383. package/server/{shadow-state-CEGrrECe.js → shadow-state-BTLi4Axs.js} +2 -2
  384. package/server/{shadow-state-e7250VUx.js → shadow-state-CZ_LnPsi.js} +1 -1
  385. package/server/{shadow-utils-xFk2Wusb.js → shadow-utils-CPLlPHdn.js} +2 -2
  386. package/server/{ship-log-7BnQHuKU.js → ship-log-D-CphNZx.js} +1 -1
  387. package/server/{ship-record-CwUX6Afo.js → ship-record-BaBla0l_.js} +7 -7
  388. package/server/{ship-record-BgUPnpT0.js → ship-record-BlvX8-xv.js} +1 -1
  389. package/server/{ship-status-Ce3_3edi.js → ship-status-rQbPQBsF.js} +2 -2
  390. package/server/{smart-compaction-BmfIi3oL.js → smart-compaction-CUXn8mfX.js} +1 -1
  391. package/server/{smart-compaction-Dy0gw1VH.js → smart-compaction-D1CNGdZx.js} +7 -7
  392. package/server/{spawn-planning-session-nH3b4Drz.js → spawn-planning-session-DCmO6COk.js} +19 -19
  393. package/server/{spawn-planning-session-CfhxRJoY.js → spawn-planning-session-DfEWyrVV.js} +2 -2
  394. package/server/{specialist-completion-CC1XJbTx.js → specialist-completion-BMv3K54P.js} +1 -1
  395. package/server/{specialist-context-cHwpcXSh.js → specialist-context-C1-CfYQb.js} +5 -5
  396. package/server/{specialist-handoff-logger-GqnGSYoJ.js → specialist-handoff-logger-BDKoz5Z9.js} +2 -2
  397. package/server/{specialist-logs-5OTnrV91.js → specialist-logs-BJQFkpdG.js} +3 -3
  398. package/server/specialists-CYt1U3Zm.js +4 -0
  399. package/server/{specialists-8LcQi9Np.js → specialists-D6MUU31Q.js} +21 -272
  400. package/server/{specialists-DocAK-7A.js → specialists-DhS79T9v.js} +369 -691
  401. package/server/{specialists-xXcJHAyg.js → specialists-Dx0zRTxX.js} +1 -1
  402. package/server/specialists-registry-BRLCi61y.js +3 -0
  403. package/server/specialists-registry-Bng0OFGH.js +277 -0
  404. package/server/specs-oRGyfz6C.js +3 -0
  405. package/server/{src-C2TAxwki.js → src-C7gGe4KU.js} +6 -6
  406. package/server/{src-DudQNYVw.js → src-CdwN6WY6.js} +344 -7
  407. package/server/{src-DUVvEA8Q.js → src-DMosbuSJ.js} +3 -3
  408. package/server/{stack-health-DKT4ySnA.js → stack-health-BKfNaqMm.js} +3 -3
  409. package/server/{stack-health-CbyiYS9H.js → stack-health-Bz711z1Y.js} +1 -1
  410. package/server/{stale-task-claims-PzFee70R.js → stale-task-claims-DMRLb5R2.js} +5 -5
  411. package/server/{staleness-D8UTEXV5.js → staleness-CxZaIhrn.js} +1 -1
  412. package/server/{staleness-BjOAq9-d.js → staleness-r_dkMyMG.js} +1 -1
  413. package/server/{stall-sweeper-DOyIfeLR.js → stall-sweeper-CBWqSWV2.js} +8 -8
  414. package/server/{state-home-DhAZlk5k.js → state-home-DhsMqg8W.js} +2 -2
  415. package/server/{state-mapping-BVSs84bO.js → state-mapping-D2yC81Vy.js} +1 -1
  416. package/server/{state-migrate-CJKEwpB0.js → state-migrate-C2Ouyd6e.js} +6 -6
  417. package/server/{state-mirror-Do7pag7W.js → state-mirror-BPXciz84.js} +3 -3
  418. package/server/stuck-remediation-DALieAkx.js +2 -0
  419. package/server/stuck-remediation-kta3KN7c.js +774 -0
  420. package/server/{substrate-bug-weights-service-BTNjHBnl.js → substrate-bug-weights-service-D_ICP7TI.js} +3 -3
  421. package/server/{summary-fork-CvB7Oyq9.js → summary-fork-CojrFKb6.js} +2 -2
  422. package/server/{summary-fork-CZ88rhVx.js → summary-fork-DhhaFhxZ.js} +113 -30
  423. package/server/supervisor/{pane-composer-BaLLspSj.js → pane-composer-CoiVkGIt.js} +8 -1
  424. package/server/supervisor/{paths-D6XUcR_g.js → paths-DTGbtcaP.js} +8 -4
  425. package/server/supervisor/pty-supervisor.js +3 -3
  426. package/server/supervisor/{pty-token-DjjHxoCq.js → pty-token-GVqnvU3U.js} +2 -2
  427. package/server/supervisor-DSSWo4M2.js +2 -0
  428. package/server/{supervisor-D4v0WfiQ.js → supervisor-DqH-laVL.js} +4 -4
  429. package/server/{swarm-readiness-D8R-LWX5.js → swarm-readiness-LF8ZF_hc.js} +3 -3
  430. package/server/{synthesis-verdict-N5Z11pg7.js → synthesis-verdict-CGFF8uQI.js} +2 -2
  431. package/server/{synthesis-verdict-B6wvLGcA.js → synthesis-verdict-DSoOFUIV.js} +1 -1
  432. package/server/{system-prerequisites-BbGZ_WHF.js → system-prerequisites-Lsx0jUUV.js} +2 -2
  433. package/server/{teardown-workspace-CYend-KY.js → teardown-workspace-DMwomEG1.js} +16 -16
  434. package/server/{test-agent-queue-BUtWhNcc.js → test-agent-queue-Cu0D6BYe.js} +6 -6
  435. package/server/{test-verdict-BWm3hgDj.js → test-verdict-9mvl7pQn.js} +1 -1
  436. package/server/{test-verdict-BWtRmdiR.js → test-verdict-oNSv1rVr.js} +2 -2
  437. package/server/{tldr-daemon-CneJ24eL.js → tldr-daemon-CRSAkhBx.js} +1 -1
  438. package/server/{tldr-daemon-CMVBT4kT.js → tldr-daemon-McqCk2X7.js} +2 -2
  439. package/server/tmux-CYucGrTl.js +4 -0
  440. package/server/{tmux-BqXzRuaH.js → tmux-wnT_hg-s.js} +91 -19
  441. package/server/{token-CO3INKbh.js → token-BdfZLRg1.js} +2 -2
  442. package/server/{token-util-DyJJyX_B.js → token-util-Crcay9j_.js} +1 -1
  443. package/server/token-util-DfUS3Lpp.js +3 -0
  444. package/server/{tracker-config-DVzhaUxO.js → tracker-config-tfAOWgng.js} +2 -2
  445. package/server/{tracker-utils-xnVJVrrO.js → tracker-utils-Dbg_pVZg.js} +2 -2
  446. package/server/{traefik-connect-A5k54mCv.js → traefik-connect-DoQvQ6oJ.js} +1 -1
  447. package/server/{tunnel-DauSR-rs.js → tunnel-B1MNIgkL.js} +1 -1
  448. package/server/{tunnel-CwOnS-PB.js → tunnel-skW68j9B.js} +3 -3
  449. package/server/{typed-errors-B-gfU2RB.js → typed-errors-CZ3GFBvo.js} +1 -1
  450. package/server/{typed-errors-DzC4zXbI.js → typed-errors-DXqf3RnP.js} +1 -1
  451. package/server/{types-DjpLVpsj.js → types-PW4zkxCM.js} +1 -1
  452. package/server/{types-DbxY2QB6.js → types-pLpbsNto.js} +1 -1
  453. package/server/{uat-failure-feedback-BVqsWlrr.js → uat-failure-feedback-ly8ZwtfC.js} +5 -5
  454. package/server/{uat-promote-verification-DmG097QS.js → uat-promote-verification-BBaMwfdc.js} +5 -5
  455. package/server/{uat-train-DVUNW03P.js → uat-train-BBEiYSep.js} +0 -0
  456. package/server/{uat-train-COSy-vEX.js → uat-train-D7Ran2FB.js} +1 -1
  457. package/server/{validate-Dvv83iBx.js → validate-BYcBcBwg.js} +3 -3
  458. package/server/{validation-DlHafKzu.js → validation-BfG2jW5C.js} +9 -6
  459. package/server/{validation-BdCjzWLN.js → validation-nSrYiYvA.js} +1 -1
  460. package/server/{verification-artifact-CaSbxUVg.js → verification-artifact-Cmhgq4b_.js} +1 -1
  461. package/server/{verification-artifact-0Zku8N-W.js → verification-artifact-DglwaHke.js} +1 -1
  462. package/server/{verification-runner-DwP2fUEF.js → verification-runner-BEq5ZF-h.js} +53 -27
  463. package/server/{verification-runner-C6wdZda2.js → verification-runner-CFjAuv9u.js} +1 -1
  464. package/server/{vtt-parser-luerJpYT.js → vtt-parser-Va--tv27.js} +1 -1
  465. package/server/work-agent-prompt-BnhKNAg7.js +3 -0
  466. package/server/{work-agent-prompt--9AWNYwZ.js → work-agent-prompt-CaD2ue8m.js} +14 -14
  467. package/server/{work-agent-start-BNQO65W7.js → work-agent-start-0nJ-6UeA.js} +2 -2
  468. package/server/{work-agent-start-DkzseQFl.js → work-agent-start-D8NEN5KD.js} +1 -1
  469. package/server/workflows-BtHRlFIm.js +2 -0
  470. package/server/{workflows-BYwR2aIN.js → workflows-C7mxM1qc.js} +114 -41
  471. package/server/{workspace-iTnTycOB.js → workspace-BAhMgMaO.js} +3 -3
  472. package/server/{workspace-B-QJa3Ps.js → workspace-Dbqv9ehn.js} +1 -1
  473. package/server/{workspace-anchor-drift-CHiGg8iu.js → workspace-anchor-drift-B_3kyyxJ.js} +4 -4
  474. package/server/{workspace-anchor-drift-DTt6h2Em.js → workspace-anchor-drift-Bpa3xoni.js} +1 -1
  475. package/server/{workspace-config-D0CavVtz.js → workspace-config-D-bNq2CF.js} +1 -1
  476. package/server/{workspace-manager-5BKPV6SY.js → workspace-manager-BrbX90Rm.js} +1 -1
  477. package/server/{workspace-manager-W1OnbvU5.js → workspace-manager-CM8RCrSc.js} +17 -17
  478. package/server/{workspace-metadata-tbbevEmP.js → workspace-metadata-BEOwJSdK.js} +1 -1
  479. package/server/{workspace-metadata-dJhXvZGQ.js → workspace-metadata-Cu6yfxBS.js} +2 -2
  480. package/server/{workspaces-BlpbOPZ7.js → workspaces-C7LAuZfe.js} +140 -709
  481. package/sync-sources/dev-skills/pan-style-guide/SKILL.md +90 -15
  482. package/sync-sources/hooks/linear-mcp-auth-hook +6 -1
  483. package/sync-sources/rules/agent-message-delivery.md +21 -14
  484. package/sync-sources/rules/handoff-isolate-cwd.md +4 -4
  485. package/sync-sources/rules/pan-handoff-focus-limit.md +14 -5
  486. package/sync-sources/rules/ste-writing.md +17 -0
  487. package/sync-sources/rules/work-agents-via-pan.md +2 -1
  488. package/sync-sources/rules/writing-style.md +3 -2
  489. package/sync-sources/skills/{skill-creator → claude-skill-creator}/SKILL.md +1 -1
  490. package/sync-sources/skills/{skill-creator → claude-skill-creator}/scripts/init_skill.py +1 -1
  491. package/sync-sources/skills/{skill-creator → claude-skill-creator}/scripts/package_skill.py +1 -1
  492. package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +230 -0
  493. package/sync-sources/skills/pan-gauntlet-loop/assets/PROMPT.template.md +92 -0
  494. package/sync-sources/skills/pan-gauntlet-loop/assets/REFERENCE-BAR.template.md +53 -0
  495. package/sync-sources/skills/pan-gauntlet-loop/assets/STYLE.template.md +41 -0
  496. package/sync-sources/skills/pan-gauntlet-loop/assets/gauntlet-index.html +237 -0
  497. package/sync-sources/skills/pan-gauntlet-loop/references/domains.md +106 -0
  498. package/sync-sources/skills/pan-handoff/SKILL.md +24 -6
  499. package/sync-sources/skills/pan-help/SKILL.md +1 -1
  500. package/sync-sources/skills/pan-peer-review/SKILL.md +3 -3
  501. package/sync-sources/skills/pan-restart/SKILL.md +6 -3
  502. package/sync-sources/skills/pan-start/SKILL.md +3 -0
  503. package/sync-sources/skills/pan-swarm/SKILL.md +32 -44
  504. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  505. package/server/activity-logger-BejO16Am.js +0 -3
  506. package/server/agent-state-DH_-Jkua.js +0 -3
  507. package/server/agents-megfmQHM.js +0 -3
  508. package/server/archive-planning-C-H9cM_J.js +0 -2
  509. package/server/build-info-PQlh_Rhb.js +0 -2
  510. package/server/cli-TaZspPHS.js +0 -2
  511. package/server/cliproxy-36ncAXlu.js +0 -3
  512. package/server/context-layers-CF6zHws4.js +0 -4
  513. package/server/conversations-AnGJ5rtX.js +0 -3
  514. package/server/deacon-BEH-IY0v.js +0 -5
  515. package/server/deacon-swarm-BHX-kR1b.js +0 -2
  516. package/server/deacon-swarm-BiLfNm_v.js +0 -1522
  517. package/server/dead-end-trip-BWpDg1Qd.js +0 -2
  518. package/server/delivery-cJM6zRjJ.js +0 -3
  519. package/server/deploy-queue-CmVBZEja.js +0 -2
  520. package/server/dist-VKBfkdi7.js +0 -3
  521. package/server/durable-review-pipeline-DgcVCYDL.js +0 -3
  522. package/server/factory-D4V2wd_V.js +0 -717
  523. package/server/forge-CrP1L3i6.js +0 -2
  524. package/server/hume-1ubD_6O7.js +0 -3
  525. package/server/inspect-agent-CfxERkNt.js +0 -2
  526. package/server/merge-ops-DtHx17Vd.js +0 -2
  527. package/server/merge-rebase-BvB4UuNS.js +0 -2
  528. package/server/project-repos-BJiShUsN.js +0 -3
  529. package/server/providers-CStNGwze.js +0 -3
  530. package/server/public/assets/index-BFEwfmqX.js +0 -860
  531. package/server/public/assets/index-_USwyTAT.css +0 -1
  532. package/server/public/assets/mermaid-GHXKKRXX-Dsln95SK.js +0 -1
  533. package/server/pull-requests-C1Cqp2yo.js +0 -2
  534. package/server/rally-CjayjUIl.js +0 -3
  535. package/server/resume-D7JuMCRQ.js +0 -3
  536. package/server/review-agent-BUNTVJK2.js +0 -2
  537. package/server/settings-DBWB1gsG.js +0 -2
  538. package/server/specialists-D8gsOCwh.js +0 -3
  539. package/server/specs-BqkrRnU9.js +0 -3
  540. package/server/stuck-remediation-Di5JYkoo.js +0 -1164
  541. package/server/stuck-remediation-TNM1VhZb.js +0 -2
  542. package/server/supervisor-DX8VsPnb.js +0 -2
  543. package/server/tmux-CqNapnrr.js +0 -4
  544. package/server/token-util-Bu8bPF9f.js +0 -3
  545. package/server/workflows-Cf4LAnhg.js +0 -2
@@ -1,55 +1,54 @@
1
- import { Di as encodeClaudeProjectDir, Er as resolveModel, Fi as init_paths, Gn as init_issue_id, Mt as init_state_plane, On as resolveProjectFromIssueSync, Pi as getOverdeckHome, Pt as isOverdeckOwnedOnlyStatus, Un as extractNumberSync, Wn as extractPrefixSync, Xr as GitError, Yn as resolveIssueIdSync, Yr as FsError, Zt as extractTeamPrefix, fn as init_projects, oi as init_errors, on as getProjectSync, qn as parseIssueIdSync, t as init_config_yaml, tn as findProjectByTeamSync, vn as listProjectsSync } from "./config-yaml-BwOEANMr.js";
2
- import { Ct as rejectUnauthorizedDashboardRequest, Mt as httpHandler, Ot as getHeaderFromMap, Pt as jsonResponse, Tt as rejectUnsafeDashboardMutationRequest, at as isInternalAgentRequest, dt as spawnPanCli, lt as getWorkAgentLifecycleStateSync, n as _serverManagedMerges, ot as resolveRequestedStartedBy } from "./specialists-DocAK-7A.js";
3
- import { h as loadConfigSync$1, p as init_config } from "./config-tucKBCCc.js";
4
- import { a as emitActivityEntrySync, c as init_activity_logger } from "./activity-logger-BAVLrkR7.js";
5
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-KTp9KV9u.js";
6
- import { A as listSessionNames, B as sessionExists, S as init_tmux, ot as buildChildEnvWithoutTmuxSync, r as capturePane, st as init_child_env } from "./tmux-BqXzRuaH.js";
7
- import { d as resolveIssueWorkspaceSyncTarget, o as init_resolver } from "./resolver-CuAULbLs.js";
8
- import { a as init_event_store, n as getEventStore } from "./event-store-D7qcJXuZ.js";
9
- import { i as EventStoreService, m as findPositionInQueueSync, p as computeQueuePositionFromStatusSync } from "./issue-lifecycle-3N8XF7lP.js";
10
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CQKI6OCu.js";
11
- import { $t as spawnAgent, G as init_agents, H as getAgentRuntimeStateSync, O as saveAgentStateSync, Rt as messageAgent, W as saveAgentRuntimeState, c as clearYieldForResumeSync, d as getAgentResumeGateBlockReason, f as getAgentState, h as init_agent_state, l as decideResumeGate, ln as listRunningAgents, m as getAgentStateSync, xr as transitionIssueToInReview } from "./agent-state-Bb3UUxQm.js";
12
- import { c as CostDoorLive, d as CostWriter } from "./service-BLb_CyPL.js";
13
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-zY75jrRJ.js";
14
- import { k as init_conversations, ot as findConversationForCostSessionSync } from "./conversations-DhwxsOru.js";
15
- import { D as normalizeModelOverrideSync, E as init_model_validation } from "./auto-spawn-consent-BDfe4qz0.js";
16
- import { c as init_stack_health, n as collectDockerContainerLifecycleSnapshot, o as getWorkspaceStackHealth, r as composeProjectNameForWorkspace } from "./stack-health-DKT4ySnA.js";
17
- import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types } from "./types-DbxY2QB6.js";
18
- import { A as init_xbrief_index, M as readXBriefDocument, _ as serializeXBriefDocument, c as isPlanningComplete, d as readPlan, k as findXBriefByIssue, l as mergeRecordStatusOverrides, r as findPlan, s as init_io, v as XBRIEF_INSPECTION_POLICIES, y as init_types$1 } from "./io-DfvO2xyh.js";
19
- import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-DI9LaK_q.js";
20
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-DVzhaUxO.js";
21
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-xnVJVrrO.js";
22
- import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BmsLWM_2.js";
23
- import { a as getAllActiveQueues, c as init_merge_sync } from "./merge-sync-Ct0-cxMX.js";
24
- import { i as init_project_repos, u as resolveWorkspaceRepoRootsSync } from "./project-repos-B4MK48j4.js";
25
- import { S as setDeaconIgnored, _ as markWorkspaceStuck, d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, r as clearFeedbackDeliveryStuck, w as setReviewStatusSync, x as setAutoMerge, y as registerReviewVerdictFeedbackDelivery } from "./review-status-DBnR5t4z.js";
26
- import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-4UX8VIr8.js";
27
- import { a as init_events, i as getEventsFileSizeSync, l as init_wal, o as readEventsFromByteOffsetSync, r as forEachCostEventSync, t as appendCostEventSync } from "./events-BIKGJZOT.js";
28
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-W1OnbvU5.js";
29
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-enMmNDFa.js";
30
- import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-CrEb2PWr.js";
31
- import { i as findWorkspacePath } from "./archive-planning-BwEhu9Oq.js";
32
- import { t as handlePostRebaseVerificationDeferral } from "./merge-verification-BRp08IzI.js";
33
- import { n as deliverReviewVerdictFeedbackFromStatus } from "./review-verdict-feedback-C-dBon_-.js";
34
- import { t as createInFlightGuard } from "./in-flight-guard-pcwXKLGz.js";
35
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-dJhXvZGQ.js";
36
- import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-D-rQshu6.js";
37
- import { n as generateDailySummary } from "./cli-Do8UpLoI.js";
38
- import { _ as getDiffStat, g as getDiffBase, h as getChangedFiles, u as spawnReviewRoleForIssue } from "./review-agent-7C2w5CzU.js";
39
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CMVBT4kT.js";
40
- import { _ as syncMainIntoWorkspace, b as gitPush, x as listGitOperationsSync, y as MainDivergedError } from "./merge-agent-GWhmnxFk.js";
41
- import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-vz80RvSE.js";
42
- import { t as rebaseFeatureBranch } from "./merge-rebase-C5htyEEH.js";
43
- import { t as getReleaseSetSync } from "./release-set-DDXwbIK7.js";
44
- import { r as getCachedConflictGateMergeability } from "./conflict-gate-D2L1kZeL.js";
45
- import { r as runVerificationForIssue } from "./verification-runner-DwP2fUEF.js";
46
- import { i as registerDurableReviewPipelineHandler, n as init_durable_review_pipeline, r as registerDurableReviewDispatcher } from "./durable-review-pipeline-DgYHucN2.js";
47
- import { t as teardownWorkspace } from "./teardown-workspace-CYend-KY.js";
48
- import { t as init_rebuild_stack } from "./rebuild-stack-DKxOnkpE.js";
1
+ import { $r as GitError, Ai as encodeClaudeProjectDir, Gn as extractNumberSync, Kn as extractPrefixSync, Mt as init_state_plane, On as resolveProjectFromIssueSync, Or as resolveModel, Pt as isOverdeckOwnedOnlyStatus, Qr as FsError, Ri as getOverdeckHome, Yn as parseIssueIdSync, Zn as resolveIssueIdSync, Zt as extractTeamPrefix, fn as init_projects, li as init_errors, on as getProjectSync, qn as init_issue_id, t as init_config_yaml, tn as findProjectByTeamSync, vn as listProjectsSync, zi as init_paths } from "./config-yaml-D60AnTIu.js";
2
+ import { St as httpHandler, at as isInternalAgentRequest, ht as rejectUnsafeDashboardMutationRequest, lt as spawnPanCli, n as _serverManagedMerges, ot as resolveRequestedStartedBy, pt as rejectUnauthorizedDashboardRequest, st as getWorkAgentLifecycleStateSync, vt as getHeaderFromMap, wt as jsonResponse } from "./specialists-DhS79T9v.js";
3
+ import { h as loadConfigSync$1, p as init_config } from "./config-NxI9Yl2f.js";
4
+ import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-SlTXYCVf.js";
5
+ import { C as init_tmux, U as sessionExists, dt as init_child_env, j as listSessionNames, r as capturePane, ut as buildChildEnvWithoutTmuxSync } from "./tmux-wnT_hg-s.js";
6
+ import { d as resolveIssueWorkspaceSyncTarget, o as init_resolver } from "./resolver-C2QKOf09.js";
7
+ import { a as init_event_store, n as getEventStore } from "./event-store-DTns2XZP.js";
8
+ import { g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, i as EventStoreService } from "./issue-lifecycle-BETNVVLq.js";
9
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-DTuIRE4y.js";
10
+ import { i as CostWriter, t as CostDoorLive } from "./cost-3FyqKK56.js";
11
+ import { A as saveAgentStateSync, Ar as transitionIssueToInReview, K as saveAgentRuntimeState, Ut as messageAgent, W as getAgentRuntimeStateSync, _ as init_agent_state, d as decideResumeGate, g as getAgentStateSync, m as getAgentState, on as spawnAgent, p as getAgentResumeGateBlockReason, q as init_agents, u as clearYieldForResumeSync, vn as listRunningAgents } from "./agent-state-FABw8neJ.js";
12
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BeIWG_kT.js";
13
+ import { D as normalizeModelOverrideSync, E as init_model_validation } from "./auto-spawn-consent-BesWchEi.js";
14
+ import { c as init_stack_health, n as collectDockerContainerLifecycleSnapshot, o as getWorkspaceStackHealth, r as composeProjectNameForWorkspace } from "./stack-health-BKfNaqMm.js";
15
+ import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types } from "./types-pLpbsNto.js";
16
+ import { A as init_xbrief_index, M as readXBriefDocument, _ as serializeXBriefDocument, c as isPlanningComplete, d as readPlan, k as findXBriefByIssue, l as mergeRecordStatusOverrides, r as findPlan, s as init_io, v as XBRIEF_INSPECTION_POLICIES, y as init_types$1 } from "./io-BCtZoXHo.js";
17
+ import { c as init_dag, i as criticalPath, t as actionableDoc } from "./dag-o-dUpw1L.js";
18
+ import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos } from "./project-repos-CsfvLtmr.js";
19
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-tfAOWgng.js";
20
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-Dbg_pVZg.js";
21
+ import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-p190L97e.js";
22
+ import { a as getAllActiveQueues, c as init_merge_sync } from "./merge-sync-YLvOPAry.js";
23
+ import { S as setDeaconIgnored, _ as markWorkspaceStuck, d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, r as clearFeedbackDeliveryStuck, w as setReviewStatusSync, x as setAutoMerge, y as registerReviewVerdictFeedbackDelivery } from "./review-status-DpniqzPT.js";
24
+ import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-BlMSzSTw.js";
25
+ import { a as init_events, i as getEventsFileSizeSync, l as init_wal, o as readEventsFromByteOffsetSync, r as forEachCostEventSync, t as appendCostEventSync } from "./events-B6xW8Cpm.js";
26
+ import "./reconciler-caYiRnPy.js";
27
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CM8RCrSc.js";
28
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-BiJhwFNi.js";
29
+ import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-Dfs1dlYE.js";
30
+ import { i as findWorkspacePath } from "./archive-planning-BL1ABtW0.js";
31
+ import { t as handlePostRebaseVerificationDeferral } from "./merge-verification-BfJRNMiD.js";
32
+ import { n as deliverReviewVerdictFeedbackFromStatus } from "./review-verdict-feedback-B2ojHFH5.js";
33
+ import { t as createInFlightGuard } from "./in-flight-guard-B7khcBdQ.js";
34
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-Cu6yfxBS.js";
35
+ import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-PDI4-faj.js";
36
+ import { n as generateDailySummary } from "./cli-CoQou1t_.js";
37
+ import { g as getDiffStat, h as getDiffBase, l as spawnReviewRoleForIssue, m as getChangedFiles } from "./review-agent-BRBTm1qE.js";
38
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-McqCk2X7.js";
39
+ import { _ as syncMainIntoWorkspace, b as gitPush, x as listGitOperationsSync, y as MainDivergedError } from "./merge-agent-C-dsN9se.js";
40
+ import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-FTk4LsnM.js";
41
+ import { t as rebaseFeatureBranch } from "./merge-rebase-KBw4rdh3.js";
42
+ import { t as getReleaseSetSync } from "./release-set-DOIDz2vw.js";
43
+ import { r as getCachedConflictGateMergeability } from "./conflict-gate-hAUCL-un.js";
44
+ import { r as runVerificationForIssue } from "./verification-runner-BEq5ZF-h.js";
45
+ import { a as registerDurableReviewPipelineHandler, i as registerDurableReviewDispatcher, r as init_durable_review_pipeline } from "./durable-review-pipeline-Djx_lvFd.js";
46
+ import { t as teardownWorkspace } from "./teardown-workspace-DMwomEG1.js";
47
+ import { t as init_rebuild_stack } from "./rebuild-stack-CyXMrj6K.js";
49
48
  import { basename, dirname, join, resolve, sep } from "node:path";
50
49
  import { Cause, Effect, Layer, Option, Stream } from "effect";
51
- import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
52
- import { basename as basename$1, join as join$1 } from "path";
50
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "fs";
51
+ import { join as join$1 } from "path";
53
52
  import { homedir } from "os";
54
53
  import { homedir as homedir$1 } from "node:os";
55
54
  import { existsSync as existsSync$1, mkdirSync as mkdirSync$1, readFileSync as readFileSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
@@ -104,7 +103,7 @@ async function captureInterestedAgent(state, agentId) {
104
103
  try {
105
104
  const remoteState = await readFile(join(homedir$1(), ".overdeck", "agents", agentId, "remote-state.json"), "utf-8").then((text) => JSON.parse(text)).catch(() => null);
106
105
  if (remoteState?.location === "remote" && remoteState?.vmName) {
107
- const { getRemoteAgentOutput } = await import("./remote-agents-DQVGZVQ9.js");
106
+ const { getRemoteAgentOutput } = await import("./remote-agents-MuXx2gWm.js");
108
107
  stdout = await getRemoteAgentOutput(agentId, remoteState.vmName, 50);
109
108
  } else stdout = await Effect.runPromise(capturePane(agentId, 50));
110
109
  } catch {
@@ -937,7 +936,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
937
936
  }
938
937
  if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
939
938
  if (!composeFile && ["start", "restart"].includes(action)) {
940
- const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-BQ4YizSH.js"));
939
+ const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-Dk6ZMOUC.js"));
941
940
  if (ensureDevcontainerSync({
942
941
  workspacePath,
943
942
  issueId
@@ -1427,10 +1426,10 @@ init_paths();
1427
1426
  init_events();
1428
1427
  init_cost();
1429
1428
  init_errors();
1430
- function getAgentsDir$1() {
1429
+ function getAgentsDir() {
1431
1430
  return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
1432
1431
  }
1433
- function getClaudeProjectsDir$1() {
1432
+ function getClaudeProjectsDir() {
1434
1433
  return join$1(process.env.HOME || homedir(), ".claude", "projects");
1435
1434
  }
1436
1435
  function getProjectsYamlPath() {
@@ -1440,7 +1439,7 @@ function getProjectsYamlPath() {
1440
1439
  * Infer issueId from agent directory name
1441
1440
  * e.g., 'agent-pan-105' -> 'PAN-105', 'agent-min-663' -> 'MIN-663'
1442
1441
  */
1443
- function inferIssueId$1(agentDir) {
1442
+ function inferIssueId(agentDir) {
1444
1443
  const match = agentDir.replace(/^(agent|planning)-/, "").match(/^([a-z]+)-(\d+)$/i);
1445
1444
  if (match) return `${match[1].toUpperCase()}-${match[2]}`;
1446
1445
  return null;
@@ -1482,7 +1481,7 @@ function resolveWorkspace(issueId) {
1482
1481
  function findSessionDirsByIssue(issueId) {
1483
1482
  const dirs = [];
1484
1483
  const issueLower = issueId.toLowerCase();
1485
- const claudeDir = getClaudeProjectsDir$1();
1484
+ const claudeDir = getClaudeProjectsDir();
1486
1485
  try {
1487
1486
  const entries = readdirSync(claudeDir);
1488
1487
  for (const entry of entries) if (entry.includes(`feature-${issueLower}`)) {
@@ -1559,7 +1558,7 @@ function usageToCostEvents(usages, context) {
1559
1558
  */
1560
1559
  function getSessionDir(workspacePath) {
1561
1560
  const sessionDirName = encodeClaudeProjectDir(workspacePath);
1562
- const sessionDir = join$1(getClaudeProjectsDir$1(), sessionDirName);
1561
+ const sessionDir = join$1(getClaudeProjectsDir(), sessionDirName);
1563
1562
  if (existsSync(sessionDir)) return sessionDir;
1564
1563
  return null;
1565
1564
  }
@@ -1567,7 +1566,7 @@ function getSessionDir(workspacePath) {
1567
1566
  * Migrate a single agent's session data
1568
1567
  */
1569
1568
  function migrateAgent(agentDir, stats) {
1570
- const stateFile = join$1(getAgentsDir$1(), agentDir, "state.json");
1569
+ const stateFile = join$1(getAgentsDir(), agentDir, "state.json");
1571
1570
  if (!existsSync(stateFile)) {
1572
1571
  stats.warnings.push({
1573
1572
  file: stateFile,
@@ -1585,7 +1584,7 @@ function migrateAgent(agentDir, stats) {
1585
1584
  });
1586
1585
  return;
1587
1586
  }
1588
- const inferredIssueId = inferIssueId$1(agentDir);
1587
+ const inferredIssueId = inferIssueId(agentDir);
1589
1588
  const context = {
1590
1589
  agentId: agentDir,
1591
1590
  issueId: state.issueId || inferredIssueId || "UNKNOWN",
@@ -1683,7 +1682,7 @@ function migrateAllSessionsSync() {
1683
1682
  totalTokens: 0
1684
1683
  };
1685
1684
  console.log("Starting migration of historical session data...");
1686
- const agentsDir = getAgentsDir$1();
1685
+ const agentsDir = getAgentsDir();
1687
1686
  if (!existsSync(agentsDir)) {
1688
1687
  console.log("No agents directory found - nothing to migrate");
1689
1688
  return stats;
@@ -1710,578 +1709,6 @@ function migrateAllSessionsSync() {
1710
1709
  return stats;
1711
1710
  }
1712
1711
  //#endregion
1713
- //#region ../../lib/costs/attribution.ts
1714
- init_conversations();
1715
- init_infra();
1716
- const NO_ISSUE_BUCKETS = {
1717
- conversations: "CONVERSATIONS",
1718
- flywheel: "FLYWHEEL",
1719
- unattributed: "UNATTRIBUTED"
1720
- };
1721
- function classifySessionBucket(input, lookup) {
1722
- const conversation = lookup(input);
1723
- if (!conversation) return NO_ISSUE_BUCKETS.unattributed;
1724
- if (conversation.name === "flywheel-orchestrator") return NO_ISSUE_BUCKETS.flywheel;
1725
- return NO_ISSUE_BUCKETS.conversations;
1726
- }
1727
- function reclassifyUnknownCostEventsSync() {
1728
- const db = getOverdeckDatabaseSync();
1729
- const rows = db.prepare(`SELECT DISTINCT session_id AS sessionId, agent_id AS agentId
1730
- FROM cost_events
1731
- WHERE issue_id = 'UNKNOWN'`).all();
1732
- let updated = 0;
1733
- const update = db.prepare(`UPDATE cost_events
1734
- SET issue_id = ?
1735
- WHERE issue_id = 'UNKNOWN'
1736
- AND session_id IS ?
1737
- AND agent_id IS ?`);
1738
- for (const row of rows) {
1739
- const bucket = classifySessionBucket(row, findConversationForCostSessionSync);
1740
- const result = update.run(bucket, row.sessionId, row.agentId);
1741
- updated += result.changes;
1742
- }
1743
- return { updated };
1744
- }
1745
- //#endregion
1746
- //#region ../../lib/costs/reconciler.ts
1747
- /**
1748
- * Cost Reconciler — Periodic catch-up sweep for cost tracking
1749
- *
1750
- * The live recording hook (heartbeat-hook → record-cost-event.js) captures costs
1751
- * in real time, but can miss events due to hook failures, process crashes, or
1752
- * system reboots. The reconciler ensures completeness by periodically sweeping
1753
- * ALL Claude transcript files and importing any events not yet in SQLite.
1754
- *
1755
- * v2 Architecture: Scans ~/.claude/projects/ directly instead of going through
1756
- * agent state.json files. This catches everything:
1757
- * - Work agent sessions (from worktree workspaces)
1758
- * - Planning agent sessions (from main project dirs)
1759
- * - Specialist sessions (review, test, merge)
1760
- * - Interactive/manual Claude sessions
1761
- *
1762
- * Key properties:
1763
- * - Idempotent: dedup on request_id — safe to run any number of times
1764
- * - Incremental: tracks byte offset per session — only reads new bytes
1765
- * - Non-destructive: never deletes from SQLite, append-only
1766
- * - Catches everything: scans all transcript files regardless of source
1767
- */
1768
- init_cost();
1769
- init_errors();
1770
- init_conversations();
1771
- /**
1772
- * Map a pi-reported provider string to the AIProvider union used by the pricing
1773
- * layer. zai/kimi/minimax/mimo and anything unknown collapse to 'custom' (which
1774
- * is how these providers are keyed in DEFAULT_PRICING).
1775
- */
1776
- function piProviderToAiProvider(provider) {
1777
- if (provider === "anthropic") return "anthropic";
1778
- if (provider === "openai") return "openai";
1779
- if (provider === "google") return "google";
1780
- return "custom";
1781
- }
1782
- function getAgentsDir() {
1783
- return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
1784
- }
1785
- function getClaudeProjectsDir() {
1786
- return join$1(process.env.HOME || homedir(), ".claude", "projects");
1787
- }
1788
- /**
1789
- * Extract session UUID from a transcript filename.
1790
- * e.g., "678c8d8d-cefe-45ca-bebc-bafe602aff93.jsonl" → "678c8d8d-cefe-45ca-bebc-bafe602aff93"
1791
- */
1792
- function extractSessionId(filename) {
1793
- return basename$1(filename, ".jsonl");
1794
- }
1795
- function resolveUnmappedSessionIssueId(input, lookup = findConversationForCostSessionSync) {
1796
- return classifySessionBucket(input, lookup);
1797
- }
1798
- /**
1799
- * Decode a Claude projects directory name back to the original cwd path.
1800
- * e.g., "-home-eltmon-Projects-krux-workspaces-feature-krux-4" → "/home/eltmon/Projects/krux/workspaces/feature-krux-4"
1801
- */
1802
- function decodeClaudeDirName(dirName) {
1803
- return "/" + dirName.replace(/^-/, "").replace(/-/g, "/");
1804
- }
1805
- /**
1806
- * Build a reverse index: session UUID → agent context.
1807
- * Sources:
1808
- * 1. sessions.json files in agent directories (authoritative — written by heartbeat hook)
1809
- * 2. Agent state.json for issue/workspace context
1810
- */
1811
- function buildSessionIndex() {
1812
- const index = /* @__PURE__ */ new Map();
1813
- const agentsDir = getAgentsDir();
1814
- if (!existsSync(agentsDir)) return index;
1815
- let entries;
1816
- try {
1817
- entries = readdirSync(agentsDir);
1818
- } catch {
1819
- return index;
1820
- }
1821
- for (const agentDir of entries) {
1822
- const agentPath = join$1(agentsDir, agentDir);
1823
- const sessionsFile = join$1(agentPath, "sessions.json");
1824
- let sessionIds = [];
1825
- if (existsSync(sessionsFile)) try {
1826
- sessionIds = JSON.parse(readFileSync(sessionsFile, "utf-8"));
1827
- } catch {}
1828
- const stateFile = join$1(agentPath, "state.json");
1829
- let issueId = inferIssueId(agentDir);
1830
- let stateRole;
1831
- if (existsSync(stateFile)) try {
1832
- const state = JSON.parse(readFileSync(stateFile, "utf-8"));
1833
- if (state.issueId) issueId = state.issueId;
1834
- if (state.role) stateRole = state.role;
1835
- } catch {}
1836
- let sessionType = stateRole || "work";
1837
- const reviewSubRole = agentDir.match(/-review-(security|correctness|performance|requirements)$/i)?.[1]?.toLowerCase();
1838
- if (reviewSubRole) sessionType = `review.${reviewSubRole}`;
1839
- else if (agentDir.startsWith("planning-")) sessionType = "planning";
1840
- else if (agentDir.includes("review")) sessionType = "review";
1841
- else if (agentDir.includes("test")) sessionType = "test";
1842
- else if (agentDir.includes("merge")) sessionType = "merge";
1843
- for (const sid of sessionIds) index.set(sid, {
1844
- agentId: agentDir,
1845
- issueId: issueId ?? resolveUnmappedSessionIssueId({
1846
- sessionId: sid,
1847
- agentId: agentDir
1848
- }),
1849
- sessionType
1850
- });
1851
- }
1852
- return index;
1853
- }
1854
- /**
1855
- * Infer issue ID from a decoded path.
1856
- * Looks for patterns like "feature-min-787", "feature/pan-208", etc.
1857
- */
1858
- function inferIssueFromPath(decodedPath) {
1859
- const match = decodedPath.match(/(?:feature[-/])?(pan|min|aud|krux|cli)[-/](\d+)/i);
1860
- if (match) return `${match[1].toUpperCase()}-${match[2]}`;
1861
- return null;
1862
- }
1863
- /**
1864
- * Infer issue ID from agent directory name.
1865
- * e.g., 'agent-pan-105' → 'PAN-105', 'planning-min-663' → 'MIN-663'
1866
- */
1867
- function inferIssueId(agentDir) {
1868
- const match = agentDir.replace(/^(agent|planning|specialist)-/, "").match(/^(?:.*-)?(pan|min|aud|krux|cli)-(\d+)$/i);
1869
- if (match) return `${match[1].toUpperCase()}-${match[2]}`;
1870
- return null;
1871
- }
1872
- function getSessionOffset(_sessionId) {
1873
- return 0;
1874
- }
1875
- function saveSessionOffset(sessionId, byteOffset, newEvents, agentId, issueId, transcriptPath) {}
1876
- /**
1877
- * Read new bytes from a transcript file starting at the given offset.
1878
- */
1879
- function readNewBytes(filePath, fromOffset) {
1880
- let fd;
1881
- try {
1882
- fd = openSync(filePath, "r");
1883
- } catch {
1884
- return null;
1885
- }
1886
- try {
1887
- const stat = fstatSync(fd);
1888
- if (stat.size <= fromOffset) return {
1889
- content: "",
1890
- newSize: stat.size
1891
- };
1892
- const bytesToRead = stat.size - fromOffset;
1893
- const buffer = Buffer.alloc(bytesToRead);
1894
- readSync(fd, buffer, 0, bytesToRead, fromOffset);
1895
- return {
1896
- content: buffer.toString("utf-8"),
1897
- newSize: stat.size
1898
- };
1899
- } finally {
1900
- closeSync(fd);
1901
- }
1902
- }
1903
- /**
1904
- * Parse transcript content and extract cost events.
1905
- * Only processes assistant messages with usage data and a requestId.
1906
- */
1907
- function extractCostEvents(content, agentId, issueId, sessionType, sessionId) {
1908
- const events = [];
1909
- const lines = content.split("\n");
1910
- for (const line of lines) {
1911
- if (!line.trim()) continue;
1912
- try {
1913
- const entry = JSON.parse(line);
1914
- if (entry.type !== "assistant" || !entry.message?.usage) continue;
1915
- const requestId = entry.requestId ?? void 0;
1916
- const usage = entry.message.usage;
1917
- const model = entry.message.model || "claude-sonnet-4";
1918
- const inputTokens = usage.input_tokens || 0;
1919
- const outputTokens = usage.output_tokens || 0;
1920
- const cacheReadTokens = usage.cache_read_input_tokens || 0;
1921
- const cacheWriteTokens = usage.cache_creation_input_tokens || 0;
1922
- if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
1923
- let provider = "anthropic";
1924
- if (model.includes("gpt")) provider = "openai";
1925
- else if (model.includes("gemini")) provider = "google";
1926
- else if (model.includes("kimi")) provider = "custom";
1927
- else if (model.toLowerCase().startsWith("minimax")) provider = "custom";
1928
- const pricingModel = model.replace(/^(?:oai|cx|go)@/, "");
1929
- const pricing = getPricingSync(provider, pricingModel);
1930
- if (!pricing) continue;
1931
- const cost = calculateCostSync({
1932
- inputTokens,
1933
- outputTokens,
1934
- cacheReadTokens,
1935
- cacheWriteTokens,
1936
- cacheTTL: "5m"
1937
- }, pricing);
1938
- const timestamp = entry.timestamp || entry.ts || entry.created_at || (/* @__PURE__ */ new Date()).toISOString();
1939
- events.push({
1940
- ts: timestamp,
1941
- type: "cost",
1942
- agentId,
1943
- issueId,
1944
- sessionType,
1945
- provider,
1946
- model,
1947
- input: inputTokens,
1948
- output: outputTokens,
1949
- cacheRead: cacheReadTokens,
1950
- cacheWrite: cacheWriteTokens,
1951
- cost,
1952
- requestId,
1953
- sessionId
1954
- });
1955
- } catch {}
1956
- }
1957
- return events;
1958
- }
1959
- /**
1960
- * Parse Pi/oh-my-pi transcript content and extract cost events (PAN-1935).
1961
- *
1962
- * Pi's `message.usage` uses short camelCase keys (`input`, `output`,
1963
- * `cacheRead`, `cacheWrite`) and the real model/provider live on `message`
1964
- * (not inferred from a Claude-style `model` field). Cost is always computed
1965
- * from tokens × pricing because pi reports `cost.total = 0` for non-Anthropic
1966
- * providers. Exported for unit testing.
1967
- */
1968
- function extractPiCostEvents(content, agentId, issueId, sessionType, sessionId) {
1969
- const events = [];
1970
- for (const line of content.split("\n")) {
1971
- if (!line.trim()) continue;
1972
- let entry;
1973
- try {
1974
- entry = JSON.parse(line);
1975
- } catch {
1976
- continue;
1977
- }
1978
- if (entry.type !== "message") continue;
1979
- const usage = entry.message?.usage;
1980
- if (!usage) continue;
1981
- const inputTokens = usage.input ?? 0;
1982
- const outputTokens = usage.output ?? 0;
1983
- const cacheReadTokens = usage.cacheRead ?? 0;
1984
- const cacheWriteTokens = usage.cacheWrite ?? 0;
1985
- if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
1986
- const model = entry.message?.model || "unknown";
1987
- const provider = piProviderToAiProvider(entry.message?.provider);
1988
- const pricing = getPricingSync(provider, model.replace(/^(?:oai|cx|go)@/, ""));
1989
- if (!pricing) continue;
1990
- const cost = calculateCostSync({
1991
- inputTokens,
1992
- outputTokens,
1993
- cacheReadTokens,
1994
- cacheWriteTokens,
1995
- cacheTTL: "5m"
1996
- }, pricing);
1997
- const requestId = entry.message?.responseId ?? (entry.id ? `${sessionId}#${entry.id}` : void 0);
1998
- const timestamp = entry.timestamp || (/* @__PURE__ */ new Date()).toISOString();
1999
- events.push({
2000
- ts: timestamp,
2001
- type: "cost",
2002
- agentId,
2003
- issueId,
2004
- sessionType,
2005
- provider,
2006
- model,
2007
- input: inputTokens,
2008
- output: outputTokens,
2009
- cacheRead: cacheReadTokens,
2010
- cacheWrite: cacheWriteTokens,
2011
- cost,
2012
- requestId,
2013
- sessionId
2014
- });
2015
- }
2016
- return events;
2017
- }
2018
- /**
2019
- * Pi session transcripts in an agent dir. Pi transcripts begin with a
2020
- * `{"type":"session","version":3,...}` header; we detect that and skip the
2021
- * sibling non-transcripts (activity.jsonl, cost-events.jsonl, pending-events).
2022
- */
2023
- function findPiTranscriptFiles(agentDir) {
2024
- let files;
2025
- try {
2026
- files = readdirSync(agentDir).filter((f) => f.endsWith(".jsonl"));
2027
- } catch {
2028
- return [];
2029
- }
2030
- const transcripts = [];
2031
- for (const f of files) {
2032
- if (f === "activity.jsonl" || f === "cost-events.jsonl" || f === "pending-events.jsonl") continue;
2033
- const full = join$1(agentDir, f);
2034
- try {
2035
- const fd = openSync(full, "r");
2036
- const buf = Buffer.alloc(128);
2037
- const bytesRead = readSync(fd, buf, 0, 128, 0);
2038
- closeSync(fd);
2039
- const head = buf.toString("utf-8", 0, bytesRead);
2040
- if (/"type"\s*:\s*"session"/.test(head)) transcripts.push(full);
2041
- } catch {}
2042
- }
2043
- return transcripts;
2044
- }
2045
- /**
2046
- * Sweep pi session transcripts under the per-agent dirs (~/.overdeck/agents)
2047
- * and import their cost events through the same Overdeck cost writer the Claude
2048
- * path uses (PAN-1935).
2049
- * Independent of the pi extension hook, so it captures cost even when the
2050
- * extension emits null usage or the wrong model label.
2051
- */
2052
- async function reconcilePiTranscripts() {
2053
- const result = {
2054
- sessionsScanned: 0,
2055
- sessionsWithNewData: 0,
2056
- eventsImported: 0,
2057
- duplicatesSkipped: 0,
2058
- errors: [],
2059
- earliestEventTs: null,
2060
- latestEventTs: null
2061
- };
2062
- const agentsDir = getAgentsDir();
2063
- if (!existsSync(agentsDir)) return result;
2064
- let agentDirs;
2065
- try {
2066
- agentDirs = readdirSync(agentsDir);
2067
- } catch {
2068
- return result;
2069
- }
2070
- for (const agentDirName of agentDirs) {
2071
- const agentPath = join$1(agentsDir, agentDirName);
2072
- let issueId = inferIssueId(agentDirName);
2073
- let sessionType = "work";
2074
- const stateFile = join$1(agentPath, "state.json");
2075
- if (existsSync(stateFile)) try {
2076
- const st = JSON.parse(readFileSync(stateFile, "utf-8"));
2077
- if (st.issueId) issueId = st.issueId;
2078
- if (st.role) sessionType = st.role;
2079
- } catch {}
2080
- if (agentDirName.startsWith("planning-")) sessionType = "planning";
2081
- const transcripts = findPiTranscriptFiles(agentPath);
2082
- for (const transcriptPath of transcripts) {
2083
- const sessionId = basename$1(transcriptPath, ".jsonl");
2084
- const resolvedIssueId = issueId ?? resolveUnmappedSessionIssueId({
2085
- sessionId,
2086
- agentId: agentDirName
2087
- });
2088
- result.sessionsScanned++;
2089
- try {
2090
- const events = extractPiCostEvents(readFileSync(transcriptPath, "utf-8"), agentDirName, resolvedIssueId, sessionType, sessionId);
2091
- if (events.length === 0) continue;
2092
- result.sessionsWithNewData++;
2093
- const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`);
2094
- result.eventsImported += inserted;
2095
- result.duplicatesSkipped += duplicates;
2096
- mergeCoverage(result, {
2097
- earliestEventTs,
2098
- latestEventTs
2099
- });
2100
- } catch (err) {
2101
- result.errors.push({
2102
- path: transcriptPath,
2103
- error: err instanceof Error ? err.message : String(err)
2104
- });
2105
- }
2106
- }
2107
- }
2108
- return result;
2109
- }
2110
- function toOverdeckCostEvent$1(event, sourceFile) {
2111
- return {
2112
- ts: new Date(event.ts),
2113
- issueId: event.issueId ? event.issueId : null,
2114
- agentId: event.agentId ?? null,
2115
- sessionId: event.sessionId ?? null,
2116
- sessionType: event.sessionType ?? null,
2117
- provider: event.provider ?? null,
2118
- model: event.model ?? null,
2119
- input: event.input ?? 0,
2120
- output: event.output ?? 0,
2121
- cacheRead: event.cacheRead ?? 0,
2122
- cacheWrite: event.cacheWrite ?? 0,
2123
- cost: event.cost ?? 0,
2124
- requestId: event.requestId ?? null,
2125
- sourceFile
2126
- };
2127
- }
2128
- async function recordCostEventsThroughOverdeck$1(events, sourceFile, opts = {}) {
2129
- let inserted = 0;
2130
- let duplicates = 0;
2131
- let earliestEventTs = null;
2132
- let latestEventTs = null;
2133
- for (const event of events) if (await Effect.runPromise(CostWriter.use((writer) => writer.record(toOverdeckCostEvent$1(event, sourceFile), { dryRun: opts.dryRun })).pipe(Effect.provide(CostDoorLive)))) {
2134
- inserted++;
2135
- const iso = new Date(event.ts).toISOString();
2136
- if (earliestEventTs == null || iso < earliestEventTs) earliestEventTs = iso;
2137
- if (latestEventTs == null || iso > latestEventTs) latestEventTs = iso;
2138
- } else duplicates++;
2139
- return {
2140
- inserted,
2141
- duplicates,
2142
- earliestEventTs,
2143
- latestEventTs
2144
- };
2145
- }
2146
- function mergeCoverage(result, coverage) {
2147
- if (coverage.earliestEventTs != null && (result.earliestEventTs == null || coverage.earliestEventTs < result.earliestEventTs)) result.earliestEventTs = coverage.earliestEventTs;
2148
- if (coverage.latestEventTs != null && (result.latestEventTs == null || coverage.latestEventTs > result.latestEventTs)) result.latestEventTs = coverage.latestEventTs;
2149
- }
2150
- async function reconcilePromise(opts = {}) {
2151
- const result = {
2152
- sessionsScanned: 0,
2153
- sessionsWithNewData: 0,
2154
- eventsImported: 0,
2155
- duplicatesSkipped: 0,
2156
- errors: [],
2157
- earliestEventTs: null,
2158
- latestEventTs: null
2159
- };
2160
- const claudeProjectsDir = getClaudeProjectsDir();
2161
- if (!existsSync(claudeProjectsDir)) return result;
2162
- const sessionIndex = buildSessionIndex();
2163
- let projectDirs;
2164
- try {
2165
- projectDirs = readdirSync(claudeProjectsDir);
2166
- } catch {
2167
- return result;
2168
- }
2169
- for (const dirName of projectDirs) {
2170
- const projectDir = join$1(claudeProjectsDir, dirName);
2171
- try {
2172
- fstatSync(openSync(projectDir, "r"));
2173
- } catch {}
2174
- const pathIssueId = inferIssueFromPath(decodeClaudeDirName(dirName));
2175
- let files;
2176
- try {
2177
- files = readdirSync(projectDir).filter((f) => f.endsWith(".jsonl"));
2178
- } catch {
2179
- continue;
2180
- }
2181
- for (const file of files) {
2182
- const sessionId = extractSessionId(file);
2183
- const transcriptPath = join$1(projectDir, file);
2184
- result.sessionsScanned++;
2185
- try {
2186
- const mapping = sessionIndex.get(sessionId);
2187
- const agentId = mapping?.agentId || "unattributed";
2188
- const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
2189
- sessionId,
2190
- agentId
2191
- });
2192
- const sessionType = mapping?.sessionType || "implementation";
2193
- const lastOffset = getSessionOffset(sessionId);
2194
- const readResult = readNewBytes(transcriptPath, lastOffset);
2195
- if (!readResult || !readResult.content) {
2196
- if (!opts.dryRun && readResult && readResult.newSize > lastOffset) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
2197
- continue;
2198
- }
2199
- const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
2200
- if (events.length === 0) {
2201
- if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
2202
- continue;
2203
- }
2204
- result.sessionsWithNewData++;
2205
- const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
2206
- result.eventsImported += inserted;
2207
- result.duplicatesSkipped += duplicates;
2208
- mergeCoverage(result, {
2209
- earliestEventTs,
2210
- latestEventTs
2211
- });
2212
- if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
2213
- } catch (err) {
2214
- result.errors.push({
2215
- path: transcriptPath,
2216
- error: err instanceof Error ? err.message : String(err)
2217
- });
2218
- }
2219
- }
2220
- const subagentsDir = join$1(projectDir, "subagents");
2221
- if (existsSync(subagentsDir)) try {
2222
- const subFiles = readdirSync(subagentsDir).filter((f) => f.endsWith(".jsonl"));
2223
- for (const file of subFiles) {
2224
- const sessionId = `sub-${extractSessionId(file)}`;
2225
- const transcriptPath = join$1(subagentsDir, file);
2226
- result.sessionsScanned++;
2227
- try {
2228
- const mapping = sessionIndex.get(sessionId);
2229
- const agentId = mapping?.agentId || "unattributed-subagent";
2230
- const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
2231
- sessionId,
2232
- agentId
2233
- });
2234
- const sessionType = mapping?.sessionType || "implementation";
2235
- const readResult = readNewBytes(transcriptPath, getSessionOffset(sessionId));
2236
- if (!readResult || !readResult.content) continue;
2237
- const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
2238
- if (events.length === 0) {
2239
- if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
2240
- continue;
2241
- }
2242
- result.sessionsWithNewData++;
2243
- const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck$1(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
2244
- result.eventsImported += inserted;
2245
- result.duplicatesSkipped += duplicates;
2246
- mergeCoverage(result, {
2247
- earliestEventTs,
2248
- latestEventTs
2249
- });
2250
- if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
2251
- } catch (err) {
2252
- result.errors.push({
2253
- path: transcriptPath,
2254
- error: err instanceof Error ? err.message : String(err)
2255
- });
2256
- }
2257
- }
2258
- } catch {}
2259
- }
2260
- if (opts.includePi ?? true) {
2261
- const piResult = await reconcilePiTranscripts();
2262
- result.sessionsScanned += piResult.sessionsScanned;
2263
- result.sessionsWithNewData += piResult.sessionsWithNewData;
2264
- result.eventsImported += piResult.eventsImported;
2265
- result.duplicatesSkipped += piResult.duplicatesSkipped;
2266
- result.errors.push(...piResult.errors);
2267
- mergeCoverage(result, piResult);
2268
- }
2269
- return result;
2270
- }
2271
- /**
2272
- * Effect variant of reconcile. Per-file errors are still surfaced via
2273
- * `result.errors`; only catastrophic failures (e.g. SQLite open failure)
2274
- * surface on the Effect error channel.
2275
- */
2276
- const reconcile = (opts = {}) => Effect.tryPromise({
2277
- try: () => reconcilePromise(opts),
2278
- catch: (cause) => new FsError({
2279
- path: "<reconciler>",
2280
- operation: "reconcile",
2281
- cause
2282
- })
2283
- });
2284
- //#endregion
2285
1712
  //#region ../../lib/costs/retention.ts
2286
1713
  init_events();
2287
1714
  init_errors();
@@ -2821,9 +2248,9 @@ function mergeVerificationOptions(request) {
2821
2248
  */
2822
2249
  async function recordCiGreenVerificationVerdict(issueId, workspacePath) {
2823
2250
  try {
2824
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-Y0zG25ez.js");
2251
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-BAMwn9Nf.js");
2825
2252
  const verifiedAnchor = await snapshotWorkspaceHeadsPromise(issueId, workspacePath).catch(() => void 0);
2826
- const { setReviewStatusSync } = await import("./review-status-CUnjjOUu.js");
2253
+ const { setReviewStatusSync } = await import("./review-status-Bge_3XTR.js");
2827
2254
  setReviewStatusSync(issueId, {
2828
2255
  verificationStatus: "passed",
2829
2256
  verificationNotes: "merge-verify: CI green on the merged tip (PAN-2487 local-gate skip)",
@@ -2842,7 +2269,7 @@ async function recordCiGreenVerificationVerdict(issueId, workspacePath) {
2842
2269
  * the workspaces-route import cycle.
2843
2270
  */
2844
2271
  async function prepareWorkAgentForRebase(opts) {
2845
- const { appendShipLog } = await import("./ship-log-7BnQHuKU.js");
2272
+ const { appendShipLog } = await import("./ship-log-D-CphNZx.js");
2846
2273
  opts.setStatus({
2847
2274
  mergeStep: "preparing-work-agent",
2848
2275
  mergeNotes: `Preparing work agent ${opts.agentId} to rebase ${opts.scopeNote}…`
@@ -3267,7 +2694,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
3267
2694
  const prRef = parseGitHubPullRequestUrl(status.prUrl);
3268
2695
  if (!prRef) return false;
3269
2696
  try {
3270
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
2697
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
3271
2698
  if (!isGitHubAppConfigured()) return false;
3272
2699
  const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
3273
2700
  console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
@@ -3317,24 +2744,28 @@ async function ensurePRExists(issueId, options) {
3317
2744
  const targetBranch = options?.targetBranch ?? "main";
3318
2745
  const execOptions = { encoding: "utf-8" };
3319
2746
  if (options?.cwd) execOptions.cwd = options.cwd;
3320
- let existingOut = "";
3321
2747
  try {
3322
2748
  const { stdout } = await execFileAsync$4("gh", [
3323
2749
  "pr",
3324
- "view",
2750
+ "list",
2751
+ "--head",
3325
2752
  branchName,
2753
+ "--base",
2754
+ targetBranch,
2755
+ "--state",
2756
+ "all",
3326
2757
  "--json",
3327
- "url",
3328
- "--jq",
3329
- ".url"
2758
+ "url,state",
2759
+ "--limit",
2760
+ "100"
3330
2761
  ], execOptions);
3331
- existingOut = String(stdout);
2762
+ const pullRequests = JSON.parse(String(stdout));
2763
+ const existing = pullRequests.find((pr) => pr.state === "OPEN") ?? pullRequests.find((pr) => pr.state === "MERGED");
2764
+ if (existing?.url) return {
2765
+ created: false,
2766
+ prUrl: existing.url
2767
+ };
3332
2768
  } catch {}
3333
- const existing = existingOut.trim();
3334
- if (existing) return {
3335
- created: false,
3336
- prUrl: existing
3337
- };
3338
2769
  const prBody = options?.cwd ? await buildRichPRBody(issueId, options.cwd) : `Automated PR for ${issueId}`;
3339
2770
  const { tmpdir } = await import("os");
3340
2771
  const { join: pathJoin } = await import("path");
@@ -3534,8 +2965,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3534
2965
  try {
3535
2966
  if (request.kind === "normal" && workspaceInfo.isRemote && workspaceInfo.vmName) {
3536
2967
  console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
3537
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DsGW8fmc.js");
3538
- const { getForgeAdapter } = await import("./forge-CrP1L3i6.js");
2968
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-CVfEM57p.js");
2969
+ const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
3539
2970
  const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3540
2971
  const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
3541
2972
  const remoteForge = remotePrimaryRepo?.forge || "github";
@@ -3571,7 +3002,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3571
3002
  ...mergeCompletionStatus(request)
3572
3003
  });
3573
3004
  completePendingOperation(issueId, null);
3574
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
3005
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
3575
3006
  await postMergeLifecycle(issueId, projectPath);
3576
3007
  return {
3577
3008
  success: true,
@@ -3616,11 +3047,11 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3616
3047
  }
3617
3048
  if (isPolyrepo && projectConfig?.workspace?.repos) {
3618
3049
  console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
3619
- const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-DsGW8fmc.js");
3620
- const { runQualityGates } = await import("./validation-BdCjzWLN.js");
3621
- const { reconcileStrandedRepos } = await import("./merge-completeness-7ajHAIR-.js");
3622
- const { getForgeAdapter } = await import("./forge-CrP1L3i6.js");
3623
- const { messageAgent } = await import("./agents-megfmQHM.js");
3050
+ const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
3051
+ const { runQualityGates } = await import("./validation-nSrYiYvA.js");
3052
+ const { reconcileStrandedRepos } = await import("./merge-completeness-CoLJxfUY.js");
3053
+ const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
3054
+ const { messageAgent } = await import("./agents-DixZjXWm.js");
3624
3055
  let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
3625
3056
  if (!mergeSet) {
3626
3057
  const error = `No merge set found for ${issueId}`;
@@ -3678,7 +3109,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3678
3109
  ...mergeCompletionStatus(request)
3679
3110
  });
3680
3111
  completePendingOperation(issueId, null);
3681
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
3112
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
3682
3113
  advanceQueue();
3683
3114
  await postMergeLifecycle(issueId, projectPath);
3684
3115
  return {
@@ -3932,7 +3363,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3932
3363
  ...mergeCompletionStatus(request)
3933
3364
  });
3934
3365
  completePendingOperation(issueId, null);
3935
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
3366
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
3936
3367
  advanceQueue();
3937
3368
  await postMergeLifecycle(issueId, projectPath);
3938
3369
  return {
@@ -3943,8 +3374,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3943
3374
  repos: mergeResults
3944
3375
  };
3945
3376
  }
3946
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DsGW8fmc.js");
3947
- const { getForgeAdapter } = await import("./forge-CrP1L3i6.js");
3377
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-CVfEM57p.js");
3378
+ const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
3948
3379
  const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3949
3380
  const targetBranch = primaryRepo?.targetBranch || "main";
3950
3381
  const primaryForge = primaryRepo?.forge || "github";
@@ -3987,7 +3418,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
3987
3418
  }
3988
3419
  let preMergePrState;
3989
3420
  if (githubPrRef) try {
3990
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
3421
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
3991
3422
  if (isGitHubAppConfigured()) {
3992
3423
  const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
3993
3424
  preMergePrState = prState;
@@ -4050,7 +3481,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4050
3481
  ...mergeCompletionStatus(request)
4051
3482
  });
4052
3483
  completePendingOperation(issueId, null);
4053
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
3484
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
4054
3485
  await postMergeLifecycle(issueId, projectPath, branchName);
4055
3486
  return {
4056
3487
  success: true,
@@ -4064,8 +3495,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4064
3495
  } catch (prStateErr) {
4065
3496
  console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
4066
3497
  }
4067
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
4068
- const { beginShipLog, appendShipLog } = await import("./ship-log-7BnQHuKU.js");
3498
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
3499
+ const { beginShipLog, appendShipLog } = await import("./ship-log-D-CphNZx.js");
4069
3500
  let rebaseResult;
4070
3501
  if (preMergePrState?.mergeable === true && preMergePrState.mergeableState === "clean" && !preMergePrState.checksFailed && !preMergePrState.checksPending && !preMergePrState.draft && !preMergePrState.merged) {
4071
3502
  console.log(`[merge] PR is CLEAN — merging directly without rebase for ${issueId}`);
@@ -4174,7 +3605,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4174
3605
  });
4175
3606
  let skipLocalVerification = false;
4176
3607
  if (primaryForge === "github" && artifactUrl) try {
4177
- const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
3608
+ const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
4178
3609
  if (isGitHubAppConfigured()) {
4179
3610
  const ref = parsePullRequestRef({ url: artifactUrl });
4180
3611
  if (ref) {
@@ -4199,7 +3630,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4199
3630
  const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
4200
3631
  console.log(`[merge] Running post-rebase verification for ${issueId}...`);
4201
3632
  appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
4202
- const { runVerificationForIssue } = await import("./verification-runner-C6wdZda2.js");
3633
+ const { runVerificationForIssue } = await import("./verification-runner-CFjAuv9u.js");
4203
3634
  return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
4204
3635
  ...mergeVerificationOptions(request),
4205
3636
  onGateLog: (line) => appendShipLog(issueId, line, "verifying")
@@ -4244,7 +3675,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4244
3675
  if (skipLocalVerification) await recordCiGreenVerificationVerdict(issueId, workspacePath);
4245
3676
  setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
4246
3677
  try {
4247
- const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-C33lDk9Z.js");
3678
+ const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-BWziYCf3.js");
4248
3679
  if (githubPrRef && isGitHubAppConfigured()) {
4249
3680
  const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
4250
3681
  if (sha) {
@@ -4272,7 +3703,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
4272
3703
  } catch (prMergeErr) {
4273
3704
  console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
4274
3705
  try {
4275
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
3706
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
4276
3707
  if (githubPrRef && isGitHubAppConfigured()) {
4277
3708
  artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
4278
3709
  if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
@@ -4391,8 +3822,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
4391
3822
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4392
3823
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
4393
3824
  return yield* Effect.promise(async () => {
4394
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DsGW8fmc.js");
4395
- const { getForgeAdapter } = await import("./forge-CrP1L3i6.js");
3825
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
3826
+ const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
4396
3827
  let mergeSet = getMergeSetSync(issueId);
4397
3828
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
4398
3829
  const results = [];
@@ -4453,7 +3884,7 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
4453
3884
  }
4454
3885
  }
4455
3886
  if (results.filter((r) => r.approved).length > 0) {
4456
- const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-BejO16Am.js");
3887
+ const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-B0X2JJwM.js");
4457
3888
  emitActivityEntrySync({
4458
3889
  source: "dashboard",
4459
3890
  level: "success",
@@ -4480,9 +3911,9 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
4480
3911
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4481
3912
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
4482
3913
  return yield* Effect.promise(async () => {
4483
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DsGW8fmc.js");
4484
- const { getForgeAdapter } = await import("./forge-CrP1L3i6.js");
4485
- const { assessRepoMergeCompleteness } = await import("./merge-completeness-7ajHAIR-.js");
3914
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-CVfEM57p.js");
3915
+ const { getForgeAdapter } = await import("./forge-4VVCRcF7.js");
3916
+ const { assessRepoMergeCompleteness } = await import("./merge-completeness-CoLJxfUY.js");
4486
3917
  let mergeSet = getMergeSetSync(issueId);
4487
3918
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
4488
3919
  const results = [];
@@ -4560,7 +3991,7 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
4560
3991
  }
4561
3992
  }
4562
3993
  if (results.filter((r) => r.merged).length > 0) {
4563
- const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-BejO16Am.js");
3994
+ const { emitActivityEntrySync, emitActivityTtsSync } = await import("./activity-logger-B0X2JJwM.js");
4564
3995
  emitActivityEntrySync({
4565
3996
  source: "dashboard",
4566
3997
  level: "success",
@@ -4685,7 +4116,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4685
4116
  console.log(`[approve] Starting role pipeline for ${issueId}...`);
4686
4117
  let reviewResult;
4687
4118
  try {
4688
- const { spawnReviewRoleForIssue } = await import("./review-agent-BUNTVJK2.js");
4119
+ const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
4689
4120
  reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
4690
4121
  issueId,
4691
4122
  workspace: workspacePath,
@@ -4732,7 +4163,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4732
4163
  }
4733
4164
  console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
4734
4165
  try {
4735
- const { rebaseFeatureBranch } = await import("./merge-rebase-BvB4UuNS.js");
4166
+ const { rebaseFeatureBranch } = await import("./merge-rebase-Bj7eJAG4.js");
4736
4167
  const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4737
4168
  const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
4738
4169
  if (!rebaseResult.success) {
@@ -4752,7 +4183,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4752
4183
  completePendingOperation(issueId, pushResult.error);
4753
4184
  return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
4754
4185
  }
4755
- const { approve: lifecycleApprove } = await import("./lifecycle-B0rL38D3.js");
4186
+ const { approve: lifecycleApprove } = await import("./lifecycle-DDZ7w-BY.js");
4756
4187
  const ghResolved = resolveGitHubIssueSync(issueId);
4757
4188
  const isGitHubIssueFlag = ghResolved.isGitHub;
4758
4189
  const lifecycleCtx = {
@@ -4786,7 +4217,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
4786
4217
  })));
4787
4218
  const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
4788
4219
  const request = yield* HttpServerRequest.HttpServerRequest;
4789
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-B-z-sGBH.js"));
4220
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BCTEqUCX.js"));
4790
4221
  const expected = getInternalTokenSync();
4791
4222
  if (!expected) return jsonResponse({
4792
4223
  ok: false,
@@ -4800,7 +4231,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
4800
4231
  }, 403);
4801
4232
  const event = yield* readJsonBody;
4802
4233
  const type = event.type;
4803
- const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-C4fZ2ito.js"));
4234
+ const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-B5DPXvnr.js"));
4804
4235
  switch (type) {
4805
4236
  case "status_changed": {
4806
4237
  const issueId = event.issueId;
@@ -5607,7 +5038,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
5607
5038
  if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
5608
5039
  const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
5609
5040
  if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
5610
- yield* Effect.promise(() => import("./record-By-wp6pg.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
5041
+ yield* Effect.promise(() => import("./record-DYOg97Iv.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
5611
5042
  const projectPath = project.path;
5612
5043
  const location = yield* resolvePlanLocation(projectPath, issueId);
5613
5044
  if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
@@ -6022,7 +5453,7 @@ async function startDashboardDurableReviewPipeline(input, dependencies) {
6022
5453
  });
6023
5454
  if (!result.success) {
6024
5455
  setReviewPending({
6025
- reviewStatus: "pending",
5456
+ reviewStatus: "failed",
6026
5457
  reviewNotes: result.error || result.message || "Failed to dispatch review"
6027
5458
  });
6028
5459
  return;
@@ -6209,7 +5640,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
6209
5640
  }
6210
5641
  if (!workspaceInfo.exists) return jsonResponse({ error: "Workspace does not exist" }, { status: 400 });
6211
5642
  const reviewModeProject = requestedReviewMode.mode === void 0 ? null : yield* Effect.promise(async () => {
6212
- const { resolveProjectForIssue } = await import("./record-By-wp6pg.js");
5643
+ const { resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
6213
5644
  return resolveProjectForIssue(issueId);
6214
5645
  });
6215
5646
  if (requestedReviewMode.mode !== void 0 && !reviewModeProject) return jsonResponse({ error: `No project configured for ${issueId}` }, { status: 500 });
@@ -6246,7 +5677,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
6246
5677
  }
6247
5678
  if (requestedReviewMode.mode !== void 0 && reviewModeProject) {
6248
5679
  const persistenceError = yield* Effect.promise(async () => {
6249
- const { updateIssueRecord } = await import("./record-update-ByGtIlUK.js");
5680
+ const { updateIssueRecord } = await import("./record-update-CDPEX7BH.js");
6250
5681
  await updateIssueRecord(reviewModeProject, issueId, (record) => {
6251
5682
  record.reviewMode = requestedReviewMode.mode;
6252
5683
  });
@@ -6275,7 +5706,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
6275
5706
  console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
6276
5707
  }
6277
5708
  try {
6278
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-BJeEfm2r.js");
5709
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-DgaDlbO4.js");
6279
5710
  const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
6280
5711
  const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
6281
5712
  artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
@@ -6335,7 +5766,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
6335
5766
  completePendingOperation(issueId, verifyOutcome.reason);
6336
5767
  return;
6337
5768
  }
6338
- const { spawnReviewRoleForIssue } = await import("./review-agent-BUNTVJK2.js");
5769
+ const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
6339
5770
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
6340
5771
  const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
6341
5772
  issueId,
@@ -6471,7 +5902,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
6471
5902
  console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
6472
5903
  }
6473
5904
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
6474
- const { spawnReviewRoleForIssue } = await import("./review-agent-BUNTVJK2.js");
5905
+ const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
6475
5906
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
6476
5907
  issueId,
6477
5908
  workspace: workspacePathRerun,
@@ -6521,7 +5952,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
6521
5952
  });
6522
5953
  } else {
6523
5954
  const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
6524
- const { spawnRun } = yield* Effect.promise(() => import("./agents-megfmQHM.js"));
5955
+ const { spawnRun } = yield* Effect.promise(() => import("./agents-DixZjXWm.js"));
6525
5956
  try {
6526
5957
  const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
6527
5958
  setReviewStatus(issueId, { testStatus: "testing" });
@@ -6636,7 +6067,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
6636
6067
  testStatus: "pending",
6637
6068
  reviewNotes
6638
6069
  });
6639
- const { spawnReviewRoleForIssue } = await import("./review-agent-BUNTVJK2.js");
6070
+ const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
6640
6071
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
6641
6072
  issueId,
6642
6073
  workspace: workspacePath,
@@ -6986,7 +6417,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6986
6417
  const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
6987
6418
  if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
6988
6419
  try {
6989
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-BRSz26Oh.js"));
6420
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-D-4_iQgy.js"));
6990
6421
  resetPostMergeState(issueId);
6991
6422
  } catch (err) {
6992
6423
  console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
@@ -6995,7 +6426,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
6995
6426
  const rerun = body?.rerun === true;
6996
6427
  if (rerun) try {
6997
6428
  yield* Effect.promise(async () => {
6998
- const { spawnReviewRoleForIssue } = await import("./review-agent-BUNTVJK2.js");
6429
+ const { spawnReviewRoleForIssue } = await import("./review-agent-Caodi0PX.js");
6999
6430
  const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
7000
6431
  if (dispatchArgs) {
7001
6432
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
@@ -7030,7 +6461,7 @@ const postReviewResyncRoute = HttpRouter.add("POST", "/api/review/:issueId/resyn
7030
6461
  const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
7031
6462
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
7032
6463
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7033
- const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-BUNTVJK2.js"));
6464
+ const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-Caodi0PX.js"));
7034
6465
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
7035
6466
  const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
7036
6467
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
@@ -7060,8 +6491,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
7060
6491
  success: false,
7061
6492
  error: "Workspace does not exist"
7062
6493
  }, { status: 400 });
7063
- const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-DvPEAP18.js"));
7064
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-BUNTVJK2.js"));
6494
+ const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BMuEf14J.js"));
6495
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-Caodi0PX.js"));
7065
6496
  const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
7066
6497
  setReviewStatus(issueId, {
7067
6498
  reviewStatus: "pending",
@@ -7134,8 +6565,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
7134
6565
  const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
7135
6566
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7136
6567
  return jsonResponse(yield* Effect.promise(async () => {
7137
- const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-By-wp6pg.js");
7138
- const { resolveReviewMode } = await import("./review-agent-BUNTVJK2.js");
6568
+ const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
6569
+ const { resolveReviewMode } = await import("./review-agent-Caodi0PX.js");
7139
6570
  const project = resolveProjectForIssue(issueId);
7140
6571
  const record = project ? readIssueRecordSync(project, issueId) : null;
7141
6572
  return {
@@ -7166,9 +6597,9 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
7166
6597
  return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
7167
6598
  }
7168
6599
  return jsonResponse(yield* Effect.promise(async () => {
7169
- const { resolveProjectForIssue } = await import("./record-By-wp6pg.js");
7170
- const { updateIssueRecord } = await import("./record-update-ByGtIlUK.js");
7171
- const { resolveReviewMode } = await import("./review-agent-BUNTVJK2.js");
6600
+ const { resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
6601
+ const { updateIssueRecord } = await import("./record-update-CDPEX7BH.js");
6602
+ const { resolveReviewMode } = await import("./review-agent-Caodi0PX.js");
7172
6603
  const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
7173
6604
  if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
7174
6605
  else current.reviewMode = body.reviewMode;
@@ -7595,7 +7026,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
7595
7026
  */
7596
7027
  async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
7597
7028
  try {
7598
- const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-By-wp6pg.js");
7029
+ const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-DYOg97Iv.js");
7599
7030
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
7600
7031
  return recordView ? JSON.stringify(recordView, null, 2) : null;
7601
7032
  } catch {
@@ -8375,7 +7806,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
8375
7806
  if (queuePosition === null) try {
8376
7807
  const resolved = resolveProjectFromIssueSync(issueId);
8377
7808
  if (resolved) {
8378
- const { getQueueForProject } = yield* Effect.promise(() => import("./merge-BGWcBxku.js"));
7809
+ const { getQueueForProject } = yield* Effect.promise(() => import("./merge-DOCR6pHi.js"));
8379
7810
  const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
8380
7811
  id: String(e.id),
8381
7812
  type: "task",
@@ -8415,7 +7846,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
8415
7846
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
8416
7847
  if (workspaceInfo.exists && workspaceInfo.localPath) {
8417
7848
  const localPath = workspaceInfo.localPath;
8418
- const { snapshotWorkspaceHeadsPromise } = yield* Effect.promise(() => import("./git-utils-Y0zG25ez.js"));
7849
+ const { snapshotWorkspaceHeadsPromise } = yield* Effect.promise(() => import("./git-utils-BAMwn9Nf.js"));
8419
7850
  try {
8420
7851
  const headAnchor = yield* Effect.promise(() => snapshotWorkspaceHeadsPromise(issueId, localPath));
8421
7852
  if (headAnchor) update.reviewedAtCommit = headAnchor;
@@ -8432,7 +7863,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
8432
7863
  if (verificationStatus) update.verificationStatus = verificationStatus;
8433
7864
  if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
8434
7865
  const status = setReviewStatus(issueId, update);
8435
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-D8gsOCwh.js"));
7866
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-CYt1U3Zm.js"));
8436
7867
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
8437
7868
  if (reviewStatus && [
8438
7869
  "passed",
@@ -8450,7 +7881,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
8450
7881
  const agentId = `agent-${issueId.toLowerCase()}`;
8451
7882
  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.`;
8452
7883
  yield* Effect.gen(function* () {
8453
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DfuVjvH0.js"));
7884
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BzN4qvaP.js"));
8454
7885
  const fileResult = yield* writeFeedbackFile({
8455
7886
  issueId,
8456
7887
  workspacePath: getWorkspaceInfoForIssue(issueId).localPath,
@@ -8513,7 +7944,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
8513
7944
  const agentId = `agent-${issueId.toLowerCase()}`;
8514
7945
  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.`;
8515
7946
  yield* Effect.gen(function* () {
8516
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DfuVjvH0.js"));
7947
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-BzN4qvaP.js"));
8517
7948
  const fileResult = yield* writeFeedbackFile({
8518
7949
  issueId,
8519
7950
  workspacePath: getWorkspaceInfoForIssue(issueId).localPath,
@@ -8546,14 +7977,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
8546
7977
  } else console.log(`[review-status] ${issueId} automated tests passed, but another gate remains unresolved (uat=${status.uatStatus ?? "not-required"})`);
8547
7978
  yield* Effect.promise(async () => {
8548
7979
  try {
8549
- const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-DvPEAP18.js");
7980
+ const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BMuEf14J.js");
8550
7981
  const project = resolveProjectFromIssueSync(issueId);
8551
7982
  const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
8552
7983
  if (!repo || !repo.includes("/")) return;
8553
7984
  const [owner, name] = repo.split("/");
8554
7985
  const wsInfo = getWorkspaceInfoForIssue(issueId);
8555
7986
  if (!wsInfo?.localPath) return;
8556
- const { postOverdeckTestsStatus } = await import("./github-app-C33lDk9Z.js");
7987
+ const { postOverdeckTestsStatus } = await import("./github-app-BWziYCf3.js");
8557
7988
  await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
8558
7989
  } catch (err) {
8559
7990
  console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
@@ -8597,7 +8028,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
8597
8028
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
8598
8029
  const issueLower = issueId.toLowerCase();
8599
8030
  const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
8600
- const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-C33lDk9Z.js"));
8031
+ const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-BWziYCf3.js"));
8601
8032
  if (!isGitHubAppConfigured()) return jsonResponse({
8602
8033
  success: false,
8603
8034
  error: "GitHub App not configured"
@@ -8617,6 +8048,6 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
8617
8048
  })));
8618
8049
  const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspaceRebuildRoute, postWorkspaceRebuildAndStartRoute, uatStackActionRouteLayer, getWorkspaceStateMdRoute, getWorkspaceInferenceMdRoute, stashCleanRouteLayer, containerOpsRouteLayer, postWorkspaceStartRoute, getWorkspaceReviewStatusRoute, postWorkspaceReviewStatusRoute, reviewPipelineRouteLayer, reviewControlRouteLayer, mergeOpsRouteLayer, postWorkspaceRefreshTokenRoute);
8619
8050
  //#endregion
8620
- 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 };
8051
+ export { startAgentOutputService as C, retainAgentOutputInterest as S, syncCacheSync as _, mergeOpsRouteLayer as a, resolveIssueHeadlineCost as b, shouldBlockApproveForDirtyStatus as c, eventsRouteLayer as d, resumeQueuedMerges as f, rebuildCacheSync as g, getCostsForIssueSync as h, isBranchAlreadyRebased as i, triggerMerge as l, migrateAllSessionsSync as m, buildRichPRBody as n, pushApproveMain as o, syncWalFromAllProjects as p, ensurePRExists as r, reconcileGitHubMergeStatus as s, workspacesRouteLayer as t, internalEventsRouteLayer as u, processPendingFeedbackDeliveries as v, stopAgentOutputService as w, getWorkspacePathForIssue as x, getCachedRunningAgents as y };
8621
8052
 
8622
- //# sourceMappingURL=workspaces-BlpbOPZ7.js.map
8053
+ //# sourceMappingURL=workspaces-C7LAuZfe.js.map