@overdeck/desktop 0.45.12 → 0.45.13

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 (323) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +33 -0
  2. package/package.json +7 -2
  3. package/server/{acceptance-criteria-1LHgD9vg.js → acceptance-criteria-CfujPRrz.js} +2 -2
  4. package/server/{advancing-selfheal-BqsLWqEM.js → advancing-selfheal-Bn5QiLtn.js} +4 -4
  5. package/server/{agent-gc-CUb52n7s.js → agent-gc-Cl9Nm0Zu.js} +3 -3
  6. package/server/{agent-state-D-moNwhA.js → agent-state-C6Rm6FPR.js} +1 -1
  7. package/server/{agent-state-service-BzESvLOf.js → agent-state-service-JhFzYCP_.js} +5 -5
  8. package/server/{agent-state-service-BaZH7sXJ.js → agent-state-service-U8feBf8t.js} +1 -1
  9. package/server/{agents-C4kZ8a2r.js → agents-CxbuBjID.js} +1 -1
  10. package/server/{agents-B5LfpLPv.js → agents-DqQa4Dq_.js} +88 -64
  11. package/server/{archive-planning-oX1pj6nY.js → archive-planning-CPitEZo4.js} +3 -3
  12. package/server/{archive-planning-BbZe-8IK.js → archive-planning-DmpT1_14.js} +1 -1
  13. package/server/{artifact-index-jobs-DGr6bxev.js → artifact-index-jobs-sMnNtPhy.js} +2 -2
  14. package/server/{auto-commit-CGQlb4rV.js → auto-commit-wZ9X7Isd.js} +1 -1
  15. package/server/{backlog-auto-trigger-BlJHikOm.js → backlog-auto-trigger-Cf9C8fwD.js} +2 -2
  16. package/server/{bd-process-lock-i3CYMS-B.js → bd-process-lock-D1aJxeYv.js} +2 -2
  17. package/server/{beads-BNU-fb48.js → beads-CivpXztb.js} +1 -1
  18. package/server/{beads-DD7fYCl5.js → beads-DRoj6-e1.js} +4 -4
  19. package/server/{beads-query-e6oku4P5.js → beads-query-tOsAYP5h.js} +2 -2
  20. package/server/{behavior-CPf0pbOt.js → behavior-D3d2mVyD.js} +3 -3
  21. package/server/{briefing-freshness-B2FdLwIv.js → briefing-freshness-BL3Q6p7R.js} +4 -4
  22. package/server/{checkpoint-manager-JryW6MpM.js → checkpoint-manager-DCxjQvP_.js} +2 -2
  23. package/server/{checkpoint-manager-eFgaMMu4.js → checkpoint-manager-j5URlFY7.js} +1 -1
  24. package/server/checkpoint-worker.js +1 -1
  25. package/server/{checkpoints-qvOqvMuC.js → checkpoints-BoX1H2Hf.js} +2 -2
  26. package/server/{checkpoints-BK17oicz.js → checkpoints-Bu_M_Q9W.js} +1 -1
  27. package/server/claude-hooks-provision-D-jGXmu1.js +360 -0
  28. package/server/{claude-permissions-B6bWGh9d.js → claude-permissions-DxIjkOVl.js} +2 -2
  29. package/server/{claude-settings-overlay-BPdhTPjo.js → claude-settings-overlay-5b9X2S0C.js} +1 -1
  30. package/server/{claude-settings-overlay-CRyyKKXQ.js → claude-settings-overlay-BPDS6GfE.js} +2 -2
  31. package/server/cli-CqgiSAU8.js +3 -0
  32. package/server/{cli-B75AieAM.js → cli-s7bPWy-E.js} +9 -9
  33. package/server/{cliproxy-CCzwuSNe.js → cliproxy-BituqWtR.js} +2 -2
  34. package/server/{cliproxy-DOQf66G9.js → cliproxy-D3sHB0sI.js} +1 -1
  35. package/server/{close-issue-_X3MXJyG.js → close-issue-CrBE7voz.js} +4 -4
  36. package/server/{closed-issue-reaper-CLR7ClsO.js → closed-issue-reaper-BRQBc7Xa.js} +1 -1
  37. package/server/{closed-issue-reaper-BsUfBSjM.js → closed-issue-reaper-DX9mYUji.js} +9 -9
  38. package/server/{codex-CY-QRuU9.js → codex-Bi1ITSOo.js} +1 -1
  39. package/server/{codex-B4KEpX5V.js → codex-CO0HrK3j.js} +5 -5
  40. package/server/{compact-beads-cZds2MTr.js → compact-beads-CrA8-k10.js} +1 -1
  41. package/server/{compact-beads-uEDccC76.js → compact-beads-DUkCUFxA.js} +3 -3
  42. package/server/{config-DARrpYWA.js → config-B4_d7z7z.js} +1 -1
  43. package/server/{config-8sjaU6jZ.js → config-DsCxzjXK.js} +2 -2
  44. package/server/{config-yaml-ClpGgrf6.js → config-yaml-C_djSurJ.js} +2 -2
  45. package/server/{conflict-gate-Ds9_2yjd.js → conflict-gate-CpOn9KC-.js} +1 -1
  46. package/server/{conflict-gate-BtB_o-Vi.js → conflict-gate-D47Kl78u.js} +3 -3
  47. package/server/{context-layers-r2ywnQYA.js → context-layers-BNhUBTkf.js} +3 -3
  48. package/server/{context-layers-CRCk1QG7.js → context-layers-CHl3Nroz.js} +2 -2
  49. package/server/{control-settings-D1B3u6HP.js → control-settings-KyYNXZLv.js} +4 -4
  50. package/server/{conversation-compaction-D86Zo2Ci.js → conversation-compaction-D3aS5PnS.js} +8 -8
  51. package/server/{conversation-compaction-CZRVk4hg.js → conversation-compaction-D4Wed1BJ.js} +1 -1
  52. package/server/{conversation-service-CuTVU8dV.js → conversation-service-CFZIjs-M.js} +5 -5
  53. package/server/{conversation-service-CkL-6MuG.js → conversation-service-DcDB5usR.js} +1 -1
  54. package/server/{conversations-DfJKBDwB.js → conversations-BSOU5qnu.js} +4 -4
  55. package/server/{conversations-BmWEluPL.js → conversations-BbDPrz89.js} +1 -1
  56. package/server/{cost-DAPYN6iA.js → cost-BE_ulOrw.js} +3 -3
  57. package/server/{cost-CCnqa5xK.js → cost-CaiG63FG.js} +2 -2
  58. package/server/{cost-sync-BDL10Nwu.js → cost-sync-D6AX8jv-.js} +3 -3
  59. package/server/{dag-Dv2r5bVD.js → dag-BQFtXOuJ.js} +3 -3
  60. package/server/{dangerous-git-ops-Dcw7PbYo.js → dangerous-git-ops-04Ba-Qu3.js} +1 -1
  61. package/server/dashboard-db-worker.js +6 -6
  62. package/server/{deacon-CM0MxbS8.js → deacon-2EvA9Ci3.js} +97 -97
  63. package/server/{deacon-DYnZH7kC.js → deacon-Bz-6Wjmn.js} +3 -3
  64. package/server/deacon-swarm-B8pgK2a7.js +2 -0
  65. package/server/{deacon-swarm-BstYoz8Q.js → deacon-swarm-DYYOzHRH.js} +10 -10
  66. package/server/deacon.js +7 -7
  67. package/server/{devcontainer-renderer-CaYOG9JN.js → devcontainer-renderer-Dx0C7VWJ.js} +2 -2
  68. package/server/dist-BYSj075e.js +3 -0
  69. package/server/{dist-BIC8spJ0.js → dist-ya66D9ze.js} +1 -1
  70. package/server/{docker-DDI1shu3.js → docker-D2TbXDO6.js} +2 -2
  71. package/server/{ensure-devcontainer-CbSXvN9W.js → ensure-devcontainer-BIShzs3M.js} +1 -1
  72. package/server/{ensure-devcontainer-DCAg3ksz.js → ensure-devcontainer-BTiMfFp5.js} +3 -3
  73. package/server/{event-store-DU3HkZlN.js → event-store-C02Gprug.js} +1 -1
  74. package/server/{event-store-DCMqyI07.js → event-store-C71x6h0i.js} +3 -3
  75. package/server/{events-BfiosVAn.js → events-BFDuPV6n.js} +3 -3
  76. package/server/{events-DLRxpSuV.js → events-D2gP2-Yv.js} +1 -1
  77. package/server/{factory-BMtWV9iv.js → factory-ByfbrCab.js} +4 -4
  78. package/server/{feature-registry-population-DA7bO6Zn.js → feature-registry-population-CSH66UO8.js} +4 -4
  79. package/server/{feature-registry-storage-nAY1fbBt.js → feature-registry-storage-DW7dUefc.js} +2 -2
  80. package/server/{features-DMu7eGmU.js → features-x_aLR7U9.js} +2 -2
  81. package/server/{feedback-target-DHqcw3cN.js → feedback-target-BFo9fScH.js} +6 -6
  82. package/server/{feedback-target-B2SEai8-.js → feedback-target-C4VMPTZu.js} +1 -1
  83. package/server/{feedback-writer-qvm7UON7.js → feedback-writer-B9ZqnnX3.js} +4 -4
  84. package/server/{feedback-writer-DMBdS_jL.js → feedback-writer-DCyd75yJ.js} +1 -1
  85. package/server/{flywheel-Dfpx4bIV.js → flywheel-D9NKvWqb.js} +11 -11
  86. package/server/{flywheel-k4FPtCQ_.js → flywheel-DB48X7Nn.js} +1 -1
  87. package/server/{flywheel-D2LdPSic.js → flywheel-DwQCoZQG.js} +13 -13
  88. package/server/{flywheel-merge-order-CB4lbXeJ.js → flywheel-merge-order-DrjmFXg4.js} +6 -6
  89. package/server/{flywheel-merge-order-CttTazRY.js → flywheel-merge-order-f1bi5XIf.js} +1 -1
  90. package/server/{forge-CoPFXFyl.js → forge-C-SoKy8U.js} +2 -2
  91. package/server/forge-CUCYK7h_.js +2 -0
  92. package/server/{from-B0YoJl9-.js → from-fu7ZumnY.js} +1 -1
  93. package/server/{fts-db-DAHW1yA_.js → fts-db-CL-YzSRG.js} +2 -2
  94. package/server/{fts-operations-DDXDBi0d.js → fts-operations-Bylu5NjM.js} +2 -2
  95. package/server/{git-utils-B90Zjzfl.js → git-utils-C8koBs8j.js} +2 -2
  96. package/server/{git-utils-DbfC0zls.js → git-utils-Ym380hJZ.js} +1 -1
  97. package/server/{github-app-C7lftMNj.js → github-app-DIr70YLg.js} +1 -1
  98. package/server/{github-app-BecAnXRX.js → github-app-DhycHVLF.js} +2 -2
  99. package/server/{github-client-D21rCIXk.js → github-client-7gkcXcBS.js} +2 -2
  100. package/server/{github-client-BwtKZtM0.js → github-client-Ji9lUTNF.js} +1 -1
  101. package/server/{github-pr-lookup-CzVWuysl.js → github-pr-lookup-rt7T9FwA.js} +2 -2
  102. package/server/{harness-resolve-SkRJm4a7.js → harness-resolve-CvGXUnAF.js} +3 -3
  103. package/server/{health-events-BT0aAfeA.js → health-events-D4E1DLN-.js} +2 -2
  104. package/server/{health-events-DA_JLpgZ.js → health-events-DDfkoO5a.js} +1 -1
  105. package/server/{hooks-DxEn2BoY.js → hooks-D_6pAbuJ.js} +2 -2
  106. package/server/{hooks-BQxRXtRb.js → hooks-DvdnCVv6.js} +1 -1
  107. package/server/{idle-stack-reaper-C7fJL8jH.js → idle-stack-reaper-DNbV9-fj.js} +1 -1
  108. package/server/{idle-stack-reaper-DGy7tvC9.js → idle-stack-reaper-cDRXDpgE.js} +2 -2
  109. package/server/{infra-DE3C4PMr.js → infra-Clew3DpF.js} +50 -3
  110. package/server/{injection-Dt22tGvS.js → injection-QCIHOpk6.js} +1 -1
  111. package/server/{injection-Cc4Qt8LZ.js → injection-ql0Nddcn.js} +7 -7
  112. package/server/inspect-agent-D8UBDgfR.js +2 -0
  113. package/server/{inspect-agent-DOaCDkCF.js → inspect-agent-DY18KEx4.js} +9 -9
  114. package/server/{internal-token-B_1YLWLI.js → internal-token-BeXjPLKy.js} +2 -2
  115. package/server/{internal-token-nobT6FhA.js → internal-token-C90jBp-y.js} +1 -1
  116. package/server/{io-A7ZuOBkz.js → io-CbAFXQge.js} +2 -2
  117. package/server/{issue-closed-Da3DeomA.js → issue-closed-BYC2TCk-.js} +4 -4
  118. package/server/{issue-lifecycle-543pQX9D.js → issue-lifecycle-BoJa6qIt.js} +21 -21
  119. package/server/{issue-lifecycle-Bd9XBJAQ.js → issue-lifecycle-CLHbj8RS.js} +1 -1
  120. package/server/{issue-service-singleton-BC2JLZi7.js → issue-service-singleton-3g_CCY-1.js} +1 -1
  121. package/server/{issue-service-singleton-Brc3t0SV.js → issue-service-singleton-BS9NENuR.js} +8 -8
  122. package/server/{issues-D3kt9UWE.js → issues-BPcqPqfV.js} +2 -2
  123. package/server/{label-cleanup-w9X_T3AQ.js → label-cleanup-CwiCSZrb.js} +2 -2
  124. package/server/{layers-Cwe1J-9o.js → layers-OHHLphl0.js} +2 -2
  125. package/server/{lifecycle-f1GbDK33.js → lifecycle-B8IdvUbt.js} +6 -6
  126. package/server/{lifecycle-io-D56q8zlO.js → lifecycle-io-BMCH1Bxg.js} +1 -1
  127. package/server/{lifecycle-io-Bqvj0m3i.js → lifecycle-io-C73m5e6R.js} +4 -4
  128. package/server/{linear-client-Bh4T4S-c.js → linear-client-BMxgycoy.js} +1 -1
  129. package/server/{linear-client-CfJMTAYd.js → linear-client-CgQlM4aT.js} +2 -2
  130. package/server/memory-fts-worker.js +1 -1
  131. package/server/{merge-ZrXFM3jv.js → merge-B7Oi-g6k.js} +3 -3
  132. package/server/{merge-DRMPa8CQ.js → merge-BRkVaIx-.js} +1 -1
  133. package/server/merge-agent-Bwm34MZ5.js +3 -0
  134. package/server/{merge-agent-CHHs5S_0.js → merge-agent-DNFFsiEm.js} +61 -26
  135. package/server/{merge-batch-BwhGdlh4.js → merge-batch-BpYXUaqJ.js} +1 -1
  136. package/server/{merge-blockers-BMhDpMl_.js → merge-blockers-DIOZmqdK.js} +2 -2
  137. package/server/merge-ops-B7m-hBEZ.js +2 -0
  138. package/server/{merge-rebase-R7MfqpiE.js → merge-rebase-C8WH39MB.js} +2 -2
  139. package/server/{merge-set-B3Breacq.js → merge-set-CsEE2CyQ.js} +9 -5
  140. package/server/{merge-set-D-iXNP0I.js → merge-set-DOsBTBQc.js} +1 -1
  141. package/server/{merge-sync-DHWbGtjR.js → merge-sync-C2B322Ot.js} +2 -2
  142. package/server/{merge-sync-bOOtfeXR.js → merge-sync-CcLM2vwW.js} +1 -1
  143. package/server/{merge-train-98ptZrPT.js → merge-train-BIm7-7cy.js} +3 -3
  144. package/server/{merge-train-deps-B5FWJTE2.js → merge-train-deps-DG1oQ2DT.js} +4 -4
  145. package/server/{merge-verification-BGiuiXAK.js → merge-verification-BAbjxEd5.js} +4 -4
  146. package/server/{multipart-parser-D7mzNNDm.js → multipart-parser-jKtKAXtl.js} +2 -2
  147. package/server/node_modules/.package-lock.json +1 -1
  148. package/server/{orphan-proposed-reconciler-CSuxivr9.js → orphan-proposed-reconciler-BqVGaOIj.js} +1 -1
  149. package/server/{orphan-proposed-reconciler-BSGCNJ6X.js → orphan-proposed-reconciler-zHrwJ3xr.js} +9 -9
  150. package/server/package-lock.json +2 -2
  151. package/server/package.json +1 -1
  152. package/server/{pan-dir-DoPtdHrp.js → pan-dir-BlNrLzW7.js} +3 -3
  153. package/server/{paths-CVDLPxXp.js → paths-CiVeo4N_.js} +2 -2
  154. package/server/{pipeline-notifier-WD2dnOsR.js → pipeline-notifier-DBF6dHxH.js} +2 -2
  155. package/server/{pipeline-notifier-BtYHbBPl.js → pipeline-notifier-nkWCe042.js} +1 -1
  156. package/server/{projects-Bqfwuqet.js → projects-BqRMlDOv.js} +1 -1
  157. package/server/{prompts-Cg7e9FPb.js → prompts-CXbQvevY.js} +2 -2
  158. package/server/{providers-fLduChnX.js → providers-CUdAb5Qu.js} +7 -7
  159. package/server/{providers-JjK6izqX.js → providers-gZ0cUgQM.js} +1 -1
  160. package/server/public/assets/{chunk-BO2N2NFS-aNlsGDCu.js → chunk-BO2N2NFS-C-6y8VFI.js} +4 -4
  161. package/server/public/assets/{diagram-OG6HWLK6-CnjkrvT8.js → diagram-OG6HWLK6-NACO1xW5.js} +1 -1
  162. package/server/public/assets/{dist-CGKBCieA.js → dist-D1FjqGgm.js} +1 -1
  163. package/server/public/assets/{dist-Bg3Sbsx4.js → dist-DQD-ZjQY.js} +3 -3
  164. package/server/public/assets/{ganttDiagram-6RSMTGT7-C8LLKj23.js → ganttDiagram-6RSMTGT7-CEMAKgmE.js} +1 -1
  165. package/server/public/assets/{highlighted-body-OFNGDK62-BSDEUvhW.js → highlighted-body-OFNGDK62-D5lC7FW8.js} +1 -1
  166. package/server/public/assets/{index-LQIfhmgI.js → index-BDqWyuZQ.js} +140 -140
  167. package/server/public/assets/{linear-DEbYZoxg.js → linear-DDHAMRPB.js} +1 -1
  168. package/server/public/assets/mermaid-GHXKKRXX-DRM2ANcR.js +1 -0
  169. package/server/public/assets/{pieDiagram-4H26LBE5-BtZL5pXE.js → pieDiagram-4H26LBE5-DwBdeKBb.js} +1 -1
  170. package/server/public/assets/{prod-DYVvIyuh.js → prod-DAZt0c4G.js} +4 -4
  171. package/server/public/assets/{quadrantDiagram-W4KKPZXB-a7vS8Jc8.js → quadrantDiagram-W4KKPZXB-CNDLp-_m.js} +1 -1
  172. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Ckbq2SWH.js → sankeyDiagram-5OEKKPKP-oIUL_uO1.js} +1 -1
  173. package/server/public/assets/{xychartDiagram-2RQKCTM6-DJyeNa99.js → xychartDiagram-2RQKCTM6-B-IM6Cck.js} +1 -1
  174. package/server/public/index.html +1 -1
  175. package/server/{pull-requests-D2SjJIwY.js → pull-requests-DZ-V7_LB.js} +1 -1
  176. package/server/{pull-requests-1WXmTBlo.js → pull-requests-kTRl7cWC.js} +3 -3
  177. package/server/rally-CRteqXe0.js +3 -0
  178. package/server/{rally-api-H5I2CBO0.js → rally-api-DpZo3WwF.js} +2 -2
  179. package/server/{rally-api-BtvwdX6d.js → rally-api-jOk4vit_.js} +1 -1
  180. package/server/{rally-client-Bt-qHiOh.js → rally-client-BQjm3aaq.js} +1 -1
  181. package/server/{rally-client-33CYZYYu.js → rally-client-CoWZeVEj.js} +4 -4
  182. package/server/{rally-8aQlLLVj.js → rally-xCTZ-UcI.js} +3 -3
  183. package/server/{rebuild-stack-KHkkrGjx.js → rebuild-stack-BZ7j27xY.js} +5 -5
  184. package/server/{rebuild-stack-CXSgAGPR.js → rebuild-stack-r-cxcr26.js} +1 -1
  185. package/server/{reconstruct-cache-D_Ml65_6.js → reconstruct-cache-13EkMg_i.js} +6 -6
  186. package/server/{record-De2syxNB.js → record-CJsjvRO4.js} +1 -1
  187. package/server/release-engine-YLTnEO_K.js +306 -0
  188. package/server/release-set-DwvT_Opu.js +125 -0
  189. package/server/{remote-CGuognN3.js → remote-9u9WL0NJ.js} +3 -3
  190. package/server/{remote-D0Old0Cv.js → remote-B062S1Kc.js} +3 -3
  191. package/server/{remote-agents-UHoi4oGr.js → remote-agents-B4eWgwNd.js} +1 -1
  192. package/server/{remote-agents-DfhMq6kQ.js → remote-agents-BBTg-vLT.js} +5 -5
  193. package/server/{remote-completion-RZYePR_0.js → remote-completion-B0rmBnbL.js} +12 -12
  194. package/server/resume-R7xkSmLW.js +3 -0
  195. package/server/{review-agent-uwVftH98.js → review-agent-Bf9XjLnl.js} +1 -1
  196. package/server/{review-agent-sZBCpEVv.js → review-agent-tfR5RDzG.js} +22 -22
  197. package/server/{review-artifacts-C7a45b1_.js → review-artifacts-D0_IE6DQ.js} +6 -6
  198. package/server/{review-context-CErbQpKL.js → review-context-CXO5ml5D.js} +7 -7
  199. package/server/{review-monitor-DHD9m_kh.js → review-monitor-DfFUSx0J.js} +2 -2
  200. package/server/{review-status-JhQ3qlDS.js → review-status-B0Axo-Ma.js} +1 -1
  201. package/server/{review-status-gPndPUBc.js → review-status-BcfwcAcO.js} +23 -16
  202. package/server/{review-status-enrichment-qWvWckYN.js → review-status-enrichment-Cp5kFTGl.js} +3 -3
  203. package/server/{review-status-sync-B_GrEke8.js → review-status-sync-Bc0c_u12.js} +1 -1
  204. package/server/{review-status-sync-D3A9KX95.js → review-status-sync-CEFty1pW.js} +9 -5
  205. package/server/{review-verdict-feedback-4WZ5ZdbC.js → review-verdict-feedback-BOKRLLDf.js} +6 -6
  206. package/server/{review-verdict-feedback-Zo0r_z4m.js → review-verdict-feedback-BnGtT0vN.js} +1 -1
  207. package/server/{rollup-Bmhn80tB.js → rollup-BVqFuiS9.js} +1 -1
  208. package/server/{rollup-BrUIKMv_.js → rollup-C22QDVxh.js} +8 -8
  209. package/server/{scanner-BIGumel_.js → scanner-BLCnuXqY.js} +7 -7
  210. package/server/{sequence-io-DA0akEQN.js → sequence-io-BozlUb6f.js} +4 -4
  211. package/server/{sequencer-agent-DeflKafB.js → sequencer-agent-BEDEHfd2.js} +5 -5
  212. package/server/server.js +251 -160
  213. package/server/{service-V0sUK-OR.js → service-C8jKYZ0w.js} +42 -42
  214. package/server/{session-fork-Yx3UcAQf.js → session-fork-BDGksK4e.js} +2 -2
  215. package/server/{settings-CFEeQRj2.js → settings-CSLhh6qR.js} +2 -2
  216. package/server/settings-CSaXtkoA.js +2 -0
  217. package/server/{settings-CxVate0h.js → settings-DrRQCren.js} +3 -3
  218. package/server/{shadow-engineering-BRxnVSDk.js → shadow-engineering-BMcBN-Of.js} +2 -2
  219. package/server/{shadow-state-BiMwdyl1.js → shadow-state-B4ayC7nx.js} +2 -2
  220. package/server/{shadow-state-1aS8FijU.js → shadow-state-CHqWHD3T.js} +1 -1
  221. package/server/{ship-log-CMWH3H5-.js → ship-log-CDVmOlZP.js} +1 -1
  222. package/server/{smart-compaction-Bw1K_Sbl.js → smart-compaction-C-F5sP9P.js} +7 -7
  223. package/server/{smart-compaction-xblMyVpT.js → smart-compaction-V9DBrGcr.js} +1 -1
  224. package/server/{spawn-planning-session-CzDFSKAQ.js → spawn-planning-session-Bz4_JES2.js} +1 -1
  225. package/server/{spawn-planning-session-DxLxcM7m.js → spawn-planning-session-dSpOU0lP.js} +15 -15
  226. package/server/{specialist-completion-BiEXUHfD.js → specialist-completion-Coz3eTSr.js} +1 -1
  227. package/server/{specialist-context-BfkTA81h.js → specialist-context-fmb03vXQ.js} +5 -5
  228. package/server/{specialist-handoff-logger-BiKuLtNm.js → specialist-handoff-logger-B9HK_lRu.js} +2 -2
  229. package/server/{specialist-logs-CFJjGsLC.js → specialist-logs-B24R2B9Y.js} +3 -3
  230. package/server/{specialists-BLIreoE7.js → specialists-B6f5-5nG.js} +1 -1
  231. package/server/{specialists-DjHbwQ_p.js → specialists-BGNZ0_ZW.js} +18 -18
  232. package/server/{specialists-B4byf18k.js → specialists-CL7E8yUg.js} +75 -75
  233. package/server/{specialists-DdvpFNt1.js → specialists-Chvvwf5z.js} +1 -1
  234. package/server/specs-oaaYaA5c.js +3 -0
  235. package/server/{src-CALBEUMX.js → src-BVxZuHMg.js} +3 -3
  236. package/server/{src-mK_M_ZIj.js → src-D-VXCC9C.js} +5 -5
  237. package/server/{src-fgbU-jJ-.js → src-DGAEtABV.js} +13 -2
  238. package/server/{stack-health-BFM8YlHw.js → stack-health-BKbTTOT2.js} +1 -1
  239. package/server/{stack-health-Qd7rPiVe.js → stack-health-C-le5erA.js} +2 -2
  240. package/server/{state-home-C2Bicw9N.js → state-home-CoyWsECg.js} +6 -6
  241. package/server/{summary-fork-EWWBvzgE.js → summary-fork-BF_0vxrq.js} +2 -2
  242. package/server/{summary-fork-DezPkJSm.js → summary-fork-BlE30Q-I.js} +8 -8
  243. package/server/supervisor-03Tj_Wra.js +2 -0
  244. package/server/{supervisor-D5GC5jUM.js → supervisor-BSeML_p0.js} +2 -2
  245. package/server/{swarm-readiness-Cf9mommA.js → swarm-readiness-CQ4sjrXc.js} +3 -3
  246. package/server/{system-prerequisites-BsI9hxh9.js → system-prerequisites-DnmLYOnU.js} +13 -1
  247. package/server/{teardown-workspace-CWz1pbEK.js → teardown-workspace-CpcjDrZ4.js} +12 -12
  248. package/server/{test-agent-queue-TiVXe3ZT.js → test-agent-queue-Bq298zZl.js} +5 -5
  249. package/server/{tldr-daemon-C_1frSDj.js → tldr-daemon-CaSUXd9r.js} +2 -2
  250. package/server/{tldr-daemon-Big5IZ_M.js → tldr-daemon-Rn1Zue0P.js} +1 -1
  251. package/server/{tmux-D57f-XNv.js → tmux-BVc-NeKM.js} +2 -2
  252. package/server/{tmux-DClqWwb8.js → tmux-CbcrkUx5.js} +1 -1
  253. package/server/{token-_qujO3JZ.js → token-D2OC_9ms.js} +1 -1
  254. package/server/{tracker-config-BmdJU_w6.js → tracker-config-C1Y_2CIo.js} +2 -2
  255. package/server/{tracker-config-B_Ubts1Z.js → tracker-config-EsBoOWEy.js} +1 -1
  256. package/server/{tracker-utils-Bg-Sevcv.js → tracker-utils-DSb9cfrF.js} +1 -1
  257. package/server/{tracker-utils-CWFt6jjV.js → tracker-utils-lph9C3Pw.js} +2 -2
  258. package/server/{tunnel-UBf2vyAL.js → tunnel-BFBCeo97.js} +2 -2
  259. package/server/{tunnel-hOBNQbmF.js → tunnel-DDe-ATFF.js} +1 -1
  260. package/server/{uat-train-DGkIkLxu.js → uat-train-8T24rPzc.js} +1 -1
  261. package/server/{uat-train-qNanv5hN.js → uat-train-DtKHHy1U.js} +23 -23
  262. package/server/{validation-B0QaLIHP.js → validation-COOXwNXU.js} +1 -1
  263. package/server/{validation-C4wegCvH.js → validation-lyudzPvD.js} +3 -3
  264. package/server/{verification-runner-CntudBes.js → verification-runner-DO0nYTJx.js} +11 -11
  265. package/server/{verification-runner-DdleMNLq.js → verification-runner-Dd1FX8Qk.js} +1 -1
  266. package/server/{vtt-parser-CKc-smWM.js → vtt-parser-C57tEF7-.js} +1 -1
  267. package/server/{work-agent-prompt-CG5jFV9A.js → work-agent-prompt-B2F3ZwKm.js} +11 -11
  268. package/server/workflows-B4fIN8VP.js +2 -0
  269. package/server/{workflows-BK2xs_a8.js → workflows-Clz_AFwR.js} +13 -13
  270. package/server/{workspace-CLrSIRCx.js → workspace-CY_2-Ddv.js} +3 -3
  271. package/server/{workspace-C9lC5o3E.js → workspace-D0rCFemz.js} +1 -1
  272. package/server/{workspace-manager-Cb2a7bg9.js → workspace-manager-BIfpzqdU.js} +1 -1
  273. package/server/{workspace-manager-BJhW2sky.js → workspace-manager-D6NgGkiF.js} +10 -10
  274. package/server/{workspace-metadata-QQmo_Z0l.js → workspace-metadata-C8yn8kAH.js} +2 -2
  275. package/server/{workspace-metadata-CTRnr323.js → workspace-metadata-DfgR40YU.js} +1 -1
  276. package/server/{workspaces-Ca4zZs12.js → workspaces-DOeHyKmA.js} +104 -92
  277. package/sync-sources/hooks/ask-user-question-hook +87 -0
  278. package/sync-sources/hooks/auto-approve-hook +96 -0
  279. package/sync-sources/hooks/codex-notify-hook +62 -0
  280. package/sync-sources/hooks/gh-issue-trailer-hook +4 -0
  281. package/sync-sources/hooks/gh-issue-trailer-hook.d.ts +7 -0
  282. package/sync-sources/hooks/gh-issue-trailer-hook.d.ts.map +1 -0
  283. package/sync-sources/hooks/gh-issue-trailer-hook.js +239 -0
  284. package/sync-sources/hooks/gh-issue-trailer-hook.js.map +1 -0
  285. package/sync-sources/hooks/gh-issue-trailer-hook.ts +296 -0
  286. package/sync-sources/hooks/git-hooks/post-checkout +109 -0
  287. package/sync-sources/hooks/heartbeat-hook +113 -0
  288. package/sync-sources/hooks/notification-hook +70 -0
  289. package/sync-sources/hooks/notify-complete +79 -0
  290. package/sync-sources/hooks/pan-hook-lib.sh +153 -0
  291. package/sync-sources/hooks/permission-event-hook +24 -0
  292. package/sync-sources/hooks/post-compact-hook +25 -0
  293. package/sync-sources/hooks/pre-compact-hook +26 -0
  294. package/sync-sources/hooks/pre-tool-hook +35 -0
  295. package/sync-sources/hooks/record-cost-event.d.ts +1 -0
  296. package/sync-sources/hooks/record-cost-event.js +31858 -0
  297. package/sync-sources/hooks/record-cost-event.js.map +1 -0
  298. package/sync-sources/hooks/record-cost-event.ts +267 -0
  299. package/sync-sources/hooks/rtk-bash-filter +152 -0
  300. package/sync-sources/hooks/session-start-hook +80 -0
  301. package/sync-sources/hooks/specialist-stop-hook +106 -0
  302. package/sync-sources/hooks/statusline.sh +169 -0
  303. package/sync-sources/hooks/stop-hook +217 -0
  304. package/sync-sources/hooks/tldr-post-edit +72 -0
  305. package/sync-sources/hooks/tldr-read-enforcer +340 -0
  306. package/sync-sources/hooks/tmux-send-keys-guard +87 -0
  307. package/sync-sources/hooks/tsdown.config.ts +14 -0
  308. package/sync-sources/hooks/user-prompt-submit-hook +57 -0
  309. package/sync-sources/hooks/work-agent-stop-hook +424 -0
  310. package/server/cli-Ch_BWJB2.js +0 -3
  311. package/server/deacon-swarm-CSWGRfzr.js +0 -2
  312. package/server/dist-BUplB3Od.js +0 -3
  313. package/server/forge-IgLR0Ist.js +0 -2
  314. package/server/inspect-agent-CYoWAeeB.js +0 -2
  315. package/server/merge-agent-CfohxFWM.js +0 -3
  316. package/server/merge-ops-Czke6UAp.js +0 -2
  317. package/server/public/assets/mermaid-GHXKKRXX-CZOsRYoT.js +0 -1
  318. package/server/rally-Ba9QoNYc.js +0 -3
  319. package/server/resume-CmxF3Kjz.js +0 -3
  320. package/server/settings-DEhYpW0k.js +0 -2
  321. package/server/specs-CVH1kvz3.js +0 -3
  322. package/server/supervisor-DQMK2e3I.js +0 -2
  323. package/server/workflows-pKw9yRSV.js +0 -2
@@ -0,0 +1,306 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { Dn as getProjectSync, Nn as init_projects, bn as findProjectByPathSync } from "./config-yaml-C_djSurJ.js";
3
+ import { c as init_review_status, y as setReviewStatusSync } from "./review-status-BcfwcAcO.js";
4
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CsEE2CyQ.js";
5
+ import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-DwvT_Opu.js";
6
+ import { exec } from "node:child_process";
7
+ import { promisify } from "node:util";
8
+ //#region ../../lib/release/release-plan.ts
9
+ function resolveReleasePlan(release) {
10
+ const components = release.components ?? {};
11
+ const activeComponentNames = Object.keys(components).filter((name) => components[name]?.trigger !== "skip");
12
+ const activeComponents = new Set(activeComponentNames);
13
+ const dependencyNotes = /* @__PURE__ */ new Map();
14
+ const activeDependencies = /* @__PURE__ */ new Map();
15
+ for (const name of activeComponentNames) {
16
+ const active = (components[name]?.depends_on ?? []).filter((dependency) => {
17
+ if (activeComponents.has(dependency)) return true;
18
+ const reason = components[dependency]?.trigger === "skip" ? "skipped" : "absent";
19
+ const notes = dependencyNotes.get(name) ?? [];
20
+ notes.push(`Dependency "${dependency}" is ${reason}; treated as satisfied.`);
21
+ dependencyNotes.set(name, notes);
22
+ return false;
23
+ });
24
+ activeDependencies.set(name, active);
25
+ }
26
+ const sorted = [];
27
+ const visitState = /* @__PURE__ */ new Map();
28
+ const stack = [];
29
+ const visit = (name) => {
30
+ const state = visitState.get(name);
31
+ if (state === "visited") return;
32
+ if (state === "visiting") {
33
+ const cycleStart = stack.indexOf(name);
34
+ const cycle = [...stack.slice(cycleStart), name];
35
+ throw new Error(`Release dependency cycle detected: ${cycle.join(" -> ")}`);
36
+ }
37
+ visitState.set(name, "visiting");
38
+ stack.push(name);
39
+ for (const dependency of activeDependencies.get(name) ?? []) visit(dependency);
40
+ stack.pop();
41
+ visitState.set(name, "visited");
42
+ sorted.push(name);
43
+ };
44
+ for (const name of activeComponentNames) visit(name);
45
+ return sorted.map((component, releaseOrder) => ({
46
+ component,
47
+ config: components[component],
48
+ dependsOn: activeDependencies.get(component) ?? [],
49
+ releaseOrder,
50
+ notes: dependencyNotes.get(component) ?? []
51
+ }));
52
+ }
53
+ var init_release_plan = __esmMin((() => {}));
54
+ //#endregion
55
+ //#region ../../lib/release/release-engine.ts
56
+ async function runRelease(issueId, projectPath, options = {}) {
57
+ const mergeSet = getMergeSetSync(issueId);
58
+ if (!mergeSet) throw new Error(`Cannot run release for ${issueId}: merge set not found`);
59
+ const project = getProjectSync(mergeSet.projectKey) ?? findProjectByPathSync(projectPath);
60
+ if (!project?.release) {
61
+ setReviewStatusSync(issueId, {
62
+ releaseStatus: "skipped",
63
+ releaseNotes: "No release config found for project."
64
+ });
65
+ return null;
66
+ }
67
+ const now = options.now ?? (() => /* @__PURE__ */ new Date());
68
+ options.commandCwd = options.commandCwd ?? projectPath;
69
+ const plan = resolveReleasePlan(project.release);
70
+ let releaseSet = buildReleaseSet(issueId, mergeSet, plan, now().toISOString());
71
+ upsertReleaseSetSync(releaseSet);
72
+ setReviewStatusSync(issueId, { releaseStatus: "releasing" });
73
+ let failure = null;
74
+ for (const entry of plan) {
75
+ if (entry.config.trigger === "manual") {
76
+ releaseSet = persistComponentPatch(releaseSet, entry.component, {
77
+ status: "blocked",
78
+ notes: "Awaiting manual release."
79
+ });
80
+ continue;
81
+ }
82
+ const unmetDependencies = entry.dependsOn.filter((dependencyKey) => {
83
+ const dependency = releaseSet.components.find((component) => component.componentKey === dependencyKey);
84
+ return !dependency || dependency.status !== "passed";
85
+ });
86
+ if (unmetDependencies.length > 0) {
87
+ const dependencyNames = unmetDependencies.join(", ");
88
+ releaseSet = persistComponentPatch(releaseSet, entry.component, {
89
+ status: "blocked",
90
+ notes: `Blocked: dependencies not passed: ${dependencyNames}.`
91
+ });
92
+ continue;
93
+ }
94
+ releaseSet = persistComponentPatch(releaseSet, entry.component, {
95
+ status: "releasing",
96
+ notes: entry.notes.join(" ") || void 0
97
+ });
98
+ const result = await runAutoComponent(entry.component, entry.config, options);
99
+ releaseSet = persistComponentPatch(releaseSet, entry.component, result.patch);
100
+ if (!result.passed) {
101
+ let rollbackRan = false;
102
+ if (entry.config.rollback) {
103
+ rollbackRan = await runConfiguredCommand(entry.config.rollback, options);
104
+ releaseSet = persistComponentPatch(releaseSet, entry.component, {
105
+ status: rollbackRan ? "rolled_back" : "failed",
106
+ rollbackStatus: rollbackRan ? "rolled_back" : "failed",
107
+ notes: appendNote(result.patch.notes, rollbackRan ? "Rollback completed." : "Rollback failed.")
108
+ });
109
+ }
110
+ failure = {
111
+ componentKey: entry.component,
112
+ rollbackRan
113
+ };
114
+ break;
115
+ }
116
+ }
117
+ if (failure) {
118
+ releaseSet = haltRemainingComponents(releaseSet, failure.componentKey);
119
+ const releaseStatus = finalFailureStatus(releaseSet, failure.rollbackRan);
120
+ releaseSet = persistReleaseSetStatus(releaseSet, releaseStatus);
121
+ setReviewStatusSync(issueId, {
122
+ releaseStatus,
123
+ releaseNotes: `Release halted at ${failure.componentKey}.`
124
+ });
125
+ return releaseSet;
126
+ }
127
+ const blockedComponents = releaseSet.components.filter((component) => component.status === "blocked");
128
+ if (blockedComponents.length > 0) {
129
+ const blockedKeys = blockedComponents.map((component) => component.componentKey).join(", ");
130
+ releaseSet = persistReleaseSetStatus(releaseSet, "partial");
131
+ setReviewStatusSync(issueId, {
132
+ releaseStatus: "partial",
133
+ releaseNotes: `Release awaiting manual step(s): ${blockedKeys}.`
134
+ });
135
+ return releaseSet;
136
+ }
137
+ releaseSet = persistReleaseSetStatus(releaseSet, "passed");
138
+ setReviewStatusSync(issueId, { releaseStatus: "passed" });
139
+ return releaseSet;
140
+ }
141
+ function buildReleaseSet(issueId, mergeSet, plan, timestamp) {
142
+ return {
143
+ issueId,
144
+ projectKey: mergeSet.projectKey,
145
+ projectPath: mergeSet.projectPath,
146
+ workspaceType: mergeSet.workspaceType,
147
+ status: "releasing",
148
+ createdAt: timestamp,
149
+ updatedAt: timestamp,
150
+ components: plan.map((entry) => ({
151
+ componentKey: entry.component,
152
+ provider: entry.config.provider,
153
+ trigger: entry.config.trigger,
154
+ releaseOrder: entry.releaseOrder,
155
+ required: true,
156
+ status: "pending",
157
+ healthStatus: entry.config.health_url ? "pending" : "skipped",
158
+ versionStatus: entry.config.version_check ? "pending" : "skipped",
159
+ smokeStatus: entry.config.smoke_test ? "pending" : "skipped",
160
+ rollbackStatus: entry.config.rollback ? "pending" : "skipped",
161
+ notes: entry.notes.join(" ") || void 0
162
+ }))
163
+ };
164
+ }
165
+ async function runAutoComponent(componentKey, config, options) {
166
+ if (config.health_url) {
167
+ if (!await waitForHealth(config.health_url, options)) return {
168
+ passed: false,
169
+ patch: {
170
+ status: "failed",
171
+ healthStatus: "failed",
172
+ notes: `Health check failed for ${componentKey}.`
173
+ }
174
+ };
175
+ }
176
+ if (config.version_check) {
177
+ if (!await runConfiguredCommand(config.version_check, options)) return {
178
+ passed: false,
179
+ patch: {
180
+ status: "failed",
181
+ healthStatus: config.health_url ? "passed" : "skipped",
182
+ versionStatus: "failed",
183
+ notes: `Version check failed for ${componentKey}.`
184
+ }
185
+ };
186
+ }
187
+ if (config.smoke_test) {
188
+ if (!await runConfiguredCommand(config.smoke_test, options)) return {
189
+ passed: false,
190
+ patch: {
191
+ status: "failed",
192
+ healthStatus: config.health_url ? "passed" : "skipped",
193
+ versionStatus: config.version_check ? "passed" : "skipped",
194
+ smokeStatus: "failed",
195
+ notes: `Smoke test failed for ${componentKey}.`
196
+ }
197
+ };
198
+ }
199
+ return {
200
+ passed: true,
201
+ patch: {
202
+ status: "passed",
203
+ healthStatus: config.health_url ? "passed" : "skipped",
204
+ versionStatus: config.version_check ? "passed" : "skipped",
205
+ smokeStatus: config.smoke_test ? "passed" : "skipped"
206
+ }
207
+ };
208
+ }
209
+ async function waitForHealth(url, options) {
210
+ const timeoutMs = options.healthTimeoutMs ?? DEFAULT_HEALTH_TIMEOUT_MS;
211
+ const intervalMs = options.healthPollIntervalMs ?? DEFAULT_HEALTH_POLL_INTERVAL_MS;
212
+ const fetchHealth = options.fetchHealth ?? defaultFetchHealth;
213
+ const sleep = options.sleep ?? defaultSleep;
214
+ const deadline = Date.now() + timeoutMs;
215
+ while (true) {
216
+ try {
217
+ if ((await fetchHealth(url, options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS)).ok) return true;
218
+ } catch {}
219
+ const remaining = deadline - Date.now();
220
+ if (remaining <= 0) return false;
221
+ await sleep(Math.min(intervalMs, remaining));
222
+ }
223
+ }
224
+ async function runConfiguredCommand(command, options) {
225
+ const timeoutMs = options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS;
226
+ const runCommand = options.runCommand ?? defaultRunCommand;
227
+ try {
228
+ await runCommand(command, timeoutMs, options.commandCwd);
229
+ return true;
230
+ } catch {
231
+ return false;
232
+ }
233
+ }
234
+ async function defaultRunCommand(command, timeoutMs, cwd) {
235
+ await execAsync(command, {
236
+ timeout: timeoutMs,
237
+ cwd
238
+ });
239
+ }
240
+ async function defaultFetchHealth(url, timeoutMs) {
241
+ const controller = new AbortController();
242
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
243
+ try {
244
+ const response = await fetch(url, { signal: controller.signal });
245
+ return {
246
+ ok: response.ok,
247
+ status: response.status
248
+ };
249
+ } finally {
250
+ clearTimeout(timeout);
251
+ }
252
+ }
253
+ function defaultSleep(ms) {
254
+ return new Promise((resolve) => setTimeout(resolve, ms));
255
+ }
256
+ function persistComponentPatch(releaseSet, componentKey, patch) {
257
+ const updated = withComponentStateSync(releaseSet, componentKey, patch);
258
+ upsertReleaseSetSync(updated);
259
+ return updated;
260
+ }
261
+ function persistReleaseSetStatus(releaseSet, status) {
262
+ const updated = {
263
+ ...releaseSet,
264
+ status,
265
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
266
+ };
267
+ upsertReleaseSetSync(updated);
268
+ return updated;
269
+ }
270
+ function haltRemainingComponents(releaseSet, failedComponentKey) {
271
+ const failed = releaseSet.components.find((component) => component.componentKey === failedComponentKey);
272
+ if (!failed) return releaseSet;
273
+ let updated = releaseSet;
274
+ for (const component of releaseSet.components) {
275
+ if (component.releaseOrder <= failed.releaseOrder || component.status !== "pending") continue;
276
+ updated = withComponentStateSync(updated, component.componentKey, {
277
+ status: "skipped",
278
+ notes: "Release halted before this component ran."
279
+ });
280
+ }
281
+ upsertReleaseSetSync(updated);
282
+ return updated;
283
+ }
284
+ function finalFailureStatus(releaseSet, rollbackRan) {
285
+ if (rollbackRan) return "rolled_back";
286
+ return releaseSet.components.some((component) => component.required && component.status === "passed") ? "partial" : "failed";
287
+ }
288
+ function appendNote(existing, note) {
289
+ return existing ? `${existing} ${note}` : note;
290
+ }
291
+ var execAsync, DEFAULT_COMMAND_TIMEOUT_MS, DEFAULT_HEALTH_TIMEOUT_MS, DEFAULT_HEALTH_POLL_INTERVAL_MS;
292
+ //#endregion
293
+ __esmMin((() => {
294
+ init_merge_set();
295
+ init_projects();
296
+ init_review_status();
297
+ init_release_set();
298
+ init_release_plan();
299
+ execAsync = promisify(exec);
300
+ DEFAULT_COMMAND_TIMEOUT_MS = 6e4;
301
+ DEFAULT_HEALTH_TIMEOUT_MS = 12e4;
302
+ DEFAULT_HEALTH_POLL_INTERVAL_MS = 2e3;
303
+ }))();
304
+ export { runRelease };
305
+
306
+ //# sourceMappingURL=release-engine-YLTnEO_K.js.map
@@ -0,0 +1,125 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { er as init_issue_id, ir as resolveIssueIdSync } from "./config-yaml-C_djSurJ.js";
3
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-Clew3DpF.js";
4
+ import "effect";
5
+ //#region ../../lib/overdeck/release-sync.ts
6
+ function isoFromMillis(value) {
7
+ return new Date(value).toISOString();
8
+ }
9
+ function millisFromIso(value) {
10
+ if (!value) return null;
11
+ const ms = Date.parse(value);
12
+ return Number.isFinite(ms) ? ms : null;
13
+ }
14
+ function nowMillis() {
15
+ return Date.now();
16
+ }
17
+ function rowToReleaseSet(row, components) {
18
+ return {
19
+ issueId: row.issue_id,
20
+ projectKey: row.project_key,
21
+ projectPath: row.project_path,
22
+ workspaceType: row.workspace_type,
23
+ status: row.status,
24
+ createdAt: isoFromMillis(row.created_at),
25
+ updatedAt: isoFromMillis(row.updated_at),
26
+ components
27
+ };
28
+ }
29
+ function rowToReleaseComponent(row) {
30
+ return {
31
+ componentKey: row.component_key,
32
+ provider: row.provider ?? void 0,
33
+ trigger: row.trigger,
34
+ releaseOrder: row.release_order,
35
+ required: row.required === 1,
36
+ status: row.status,
37
+ healthStatus: row.health_status ?? void 0,
38
+ versionStatus: row.version_status ?? void 0,
39
+ smokeStatus: row.smoke_status ?? void 0,
40
+ rollbackStatus: row.rollback_status ?? void 0,
41
+ notes: row.notes ?? void 0
42
+ };
43
+ }
44
+ function loadComponentsForReleaseSet(db, issueId) {
45
+ return db.prepare(`
46
+ SELECT component_key, provider, trigger, release_order, required, status,
47
+ health_status, version_status, smoke_status, rollback_status, notes
48
+ FROM release_set_components
49
+ WHERE issue_id = ?
50
+ ORDER BY release_order ASC, component_key ASC
51
+ `).all(issueId).map(rowToReleaseComponent);
52
+ }
53
+ /** Insert or replace a release set and its component rows. */
54
+ function upsertReleaseSet(releaseSet) {
55
+ const db = getOverdeckDatabaseSync();
56
+ const createdAtMs = millisFromIso(releaseSet.createdAt) ?? nowMillis();
57
+ const updatedAtMs = millisFromIso(releaseSet.updatedAt) ?? nowMillis();
58
+ db.transaction((set) => {
59
+ db.prepare(`
60
+ INSERT INTO release_sets (
61
+ issue_id, project_key, project_path, workspace_type, status, created_at, updated_at
62
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)
63
+ ON CONFLICT(issue_id) DO UPDATE SET
64
+ project_key = excluded.project_key,
65
+ project_path = excluded.project_path,
66
+ workspace_type = excluded.workspace_type,
67
+ status = excluded.status,
68
+ created_at = excluded.created_at,
69
+ updated_at = excluded.updated_at
70
+ `).run(set.issueId, set.projectKey, set.projectPath, set.workspaceType, set.status, createdAtMs, updatedAtMs);
71
+ db.prepare("DELETE FROM release_set_components WHERE issue_id = ?").run(set.issueId);
72
+ const insertComponent = db.prepare(`
73
+ INSERT INTO release_set_components (
74
+ issue_id, component_key, provider, trigger, release_order, required, status,
75
+ health_status, version_status, smoke_status, rollback_status, notes
76
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
77
+ `);
78
+ for (const component of set.components) insertComponent.run(set.issueId, component.componentKey, component.provider ?? null, component.trigger, component.releaseOrder, component.required ? 1 : 0, component.status, component.healthStatus ?? null, component.versionStatus ?? null, component.smokeStatus ?? null, component.rollbackStatus ?? null, component.notes ?? null);
79
+ })(releaseSet);
80
+ }
81
+ /** Fetch a release set by issue id, or null if none exists. */
82
+ function getReleaseSetFromDb(issueId) {
83
+ const db = getOverdeckDatabaseSync();
84
+ const row = db.prepare(`
85
+ SELECT issue_id, project_key, project_path, workspace_type, status, created_at, updated_at
86
+ FROM release_sets
87
+ WHERE issue_id = ?
88
+ `).get(issueId);
89
+ if (!row) return null;
90
+ return rowToReleaseSet(row, loadComponentsForReleaseSet(db, issueId));
91
+ }
92
+ var init_release_sync = __esmMin((() => {
93
+ init_infra();
94
+ }));
95
+ //#endregion
96
+ //#region ../../lib/release-set.ts
97
+ function upsertReleaseSetSync(releaseSet) {
98
+ upsertReleaseSet({
99
+ ...releaseSet,
100
+ issueId: resolveIssueIdSync(releaseSet.issueId)
101
+ });
102
+ }
103
+ function getReleaseSetSync(issueId) {
104
+ return getReleaseSetFromDb(resolveIssueIdSync(issueId));
105
+ }
106
+ function withComponentStateSync(releaseSet, componentKey, patch) {
107
+ const now = (/* @__PURE__ */ new Date()).toISOString();
108
+ return {
109
+ ...releaseSet,
110
+ updatedAt: now,
111
+ components: releaseSet.components.map((component) => component.componentKey === componentKey ? {
112
+ ...component,
113
+ ...patch,
114
+ componentKey
115
+ } : component)
116
+ };
117
+ }
118
+ var init_release_set = __esmMin((() => {
119
+ init_release_sync();
120
+ init_issue_id();
121
+ }));
122
+ //#endregion
123
+ export { withComponentStateSync as i, init_release_set as n, upsertReleaseSetSync as r, getReleaseSetSync as t };
124
+
125
+ //# sourceMappingURL=release-set-DwvT_Opu.js.map
@@ -1,5 +1,5 @@
1
- import "./workspace-metadata-QQmo_Z0l.js";
2
- import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-DfhMq6kQ.js";
1
+ import "./workspace-metadata-C8yn8kAH.js";
2
+ import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-BBTg-vLT.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/remote/index.ts
5
5
  init_fly_provider();
@@ -52,4 +52,4 @@ function createFlyProviderFromConfig(remoteConfig, tierOverride) {
52
52
  //#endregion
53
53
  export { getRemoteProvider as n, isRemoteAvailable as r, createFlyProviderFromConfig as t };
54
54
 
55
- //# sourceMappingURL=remote-CGuognN3.js.map
55
+ //# sourceMappingURL=remote-9u9WL0NJ.js.map
@@ -1,4 +1,4 @@
1
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-QQmo_Z0l.js";
2
- import { S as createFlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as FlyProvider, y as spawnRemoteAgent } from "./remote-agents-DfhMq6kQ.js";
3
- import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-CGuognN3.js";
1
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-C8yn8kAH.js";
2
+ import { S as createFlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as FlyProvider, y as spawnRemoteAgent } from "./remote-agents-BBTg-vLT.js";
3
+ import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-9u9WL0NJ.js";
4
4
  export { FlyProvider, WORKSPACES_DIR, checkRemoteSpendCap, createFlyProvider, createFlyProviderFromConfig, deleteWorkspaceMetadataSync, findRemoteWorkspaceMetadataSync, getRemoteAgentOutput, getRemoteProvider, isRemoteAgentRunning, isRemoteAvailable, killRemoteAgent, listRemoteAgents, listWorkspaceMetadataSync, loadRemoteAgentState, loadWorkspaceMetadataSync, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveWorkspaceMetadataSync, sendToRemoteAgent, spawnRemoteAgent };
@@ -1,3 +1,3 @@
1
- import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-DfhMq6kQ.js";
1
+ import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-BBTg-vLT.js";
2
2
  init_remote_agents();
3
3
  export { assertFlyRemoteStateSupported, checkRemoteDurabilityPreflight, checkRemoteSpendCap, generateEphemeralWatchdogScript, generatePushDaemonScript, getRemoteAgentOutput, installEphemeralWatchdog, installPushDaemon, isRemoteAgentRunning, killRemoteAgent, listActiveRemoteAgentStates, listRemoteAgents, loadRemoteAgentState, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveRemoteAgentState, sendToRemoteAgent, spawnRemoteAgent, writeRemoteFile };
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin, o as __toESM } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ft as resolveProjectForIssue, Ot as init_record, ir as require_dist, vr as init_errors } from "./config-yaml-ClpGgrf6.js";
3
- import { g as getManagedTmuxSocketName, x as init_tmux } from "./tmux-D57f-XNv.js";
4
- import { a as init_launcher_generator, i as generateLauncherScriptSync, n as init_state_home, r as isStateMigrated } from "./state-home-C2Bicw9N.js";
5
- import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-B6bWGh9d.js";
2
+ import { Ft as resolveProjectForIssue, Ot as init_record, ar as require_dist, yr as init_errors } from "./config-yaml-C_djSurJ.js";
3
+ import { g as getManagedTmuxSocketName, x as init_tmux } from "./tmux-BVc-NeKM.js";
4
+ import { a as init_launcher_generator, i as generateLauncherScriptSync, n as init_state_home, r as isStateMigrated } from "./state-home-CoyWsECg.js";
5
+ import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-DxIjkOVl.js";
6
6
  import { Data, Effect, Stream } from "effect";
7
7
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
8
8
  import { join } from "path";
@@ -1259,4 +1259,4 @@ var init_remote_agents = __esmMin((() => {
1259
1259
  //#endregion
1260
1260
  export { init_fly_provider as C, createFlyProvider as S, saveRemoteAgentState as _, generatePushDaemonScript as a, writeRemoteFile as b, installEphemeralWatchdog as c, killRemoteAgent as d, listActiveRemoteAgentStates as f, refreshHostHeartbeatForEphemeralVms as g, pollRemoteAgentStatus as h, generateEphemeralWatchdogScript as i, installPushDaemon as l, loadRemoteAgentState as m, checkRemoteDurabilityPreflight as n, getRemoteAgentOutput as o, listRemoteAgents as p, checkRemoteSpendCap as r, init_remote_agents as s, assertFlyRemoteStateSupported as t, isRemoteAgentRunning as u, sendToRemoteAgent as v, FlyProvider as x, spawnRemoteAgent as y };
1261
1261
 
1262
- //# sourceMappingURL=remote-agents-DfhMq6kQ.js.map
1262
+ //# sourceMappingURL=remote-agents-BBTg-vLT.js.map
@@ -1,10 +1,10 @@
1
- import { Gn as resolveProjectFromIssueSync, Nn as init_projects, Sn as findProjectByTeamSync, vn as extractTeamPrefix } from "./config-yaml-ClpGgrf6.js";
1
+ import { Gn as resolveProjectFromIssueSync, Nn as init_projects, Sn as findProjectByTeamSync, vn as extractTeamPrefix } from "./config-yaml-C_djSurJ.js";
2
2
  import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME } from "./types-CE1m_daD.js";
3
- import { f as init_config, m as loadConfigSync } from "./config-8sjaU6jZ.js";
4
- import { t as init_pan_dir } from "./pan-dir-DoPtdHrp.js";
5
- import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-BJhW2sky.js";
6
- import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-DfhMq6kQ.js";
7
- import { t as createFlyProviderFromConfig } from "./remote-CGuognN3.js";
3
+ import { f as init_config, m as loadConfigSync } from "./config-DsCxzjXK.js";
4
+ import { t as init_pan_dir } from "./pan-dir-BlNrLzW7.js";
5
+ import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-D6NgGkiF.js";
6
+ import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-BBTg-vLT.js";
7
+ import { t as createFlyProviderFromConfig } from "./remote-9u9WL0NJ.js";
8
8
  import { Effect } from "effect";
9
9
  import { existsSync, mkdirSync, statSync, unlinkSync, writeFileSync } from "fs";
10
10
  import { basename, join } from "path";
@@ -309,7 +309,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
309
309
  } catch {
310
310
  details.push("No continue.json retrieved from VM (skipped)");
311
311
  }
312
- const { getAgentStateSync, saveAgentStateSync } = await import("./agents-C4kZ8a2r.js");
312
+ const { getAgentStateSync, saveAgentStateSync } = await import("./agents-CxbuBjID.js");
313
313
  const existing = getAgentStateSync(agentId);
314
314
  if (existing) {
315
315
  existing.workspace = existing.workspace || workspacePath;
@@ -327,8 +327,8 @@ async function reapCompletedRemoteAgents(opts = {}) {
327
327
  startedAt: remoteState.startedAt,
328
328
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
329
329
  });
330
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-C7a45b1_.js");
331
- const { setReviewStatusSync } = await import("./review-status-JhQ3qlDS.js");
330
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-D0_IE6DQ.js");
331
+ const { setReviewStatusSync } = await import("./review-status-B0Axo-Ma.js");
332
332
  const primaryArtifact = (await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath))).mergeSet?.repos.find((repo) => !!repo.artifactUrl);
333
333
  if (primaryArtifact?.artifactUrl) {
334
334
  setReviewStatusSync(issueId, { prUrl: primaryArtifact.artifactUrl });
@@ -349,7 +349,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
349
349
  try {
350
350
  const fly = createFlyProviderFromConfig(loadConfigSync().remote);
351
351
  if (sessionAlive) {
352
- const { killRemoteAgent } = await import("./remote-agents-UHoi4oGr.js");
352
+ const { killRemoteAgent } = await import("./remote-agents-B4eWgwNd.js");
353
353
  await killRemoteAgent(agentId, vmName).catch(() => void 0);
354
354
  }
355
355
  await Effect.runPromise(fly.deleteVm(vmName));
@@ -357,7 +357,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
357
357
  } catch (err) {
358
358
  details.push(`Warning: could not destroy machine: ${err.message}`);
359
359
  }
360
- const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-CTRnr323.js");
360
+ const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-DfgR40YU.js");
361
361
  deleteWorkspaceMetadataSync(issueId);
362
362
  details.push("Removed remote workspace metadata (pipeline is local from here)");
363
363
  saveRemoteAgentState({
@@ -386,4 +386,4 @@ async function reapCompletedRemoteAgents(opts = {}) {
386
386
  //#endregion
387
387
  export { reapCompletedRemoteAgents, refreshClaudeCredentialsForActiveRemoteAgents };
388
388
 
389
- //# sourceMappingURL=remote-completion-RZYePR_0.js.map
389
+ //# sourceMappingURL=remote-completion-B0rmBnbL.js.map
@@ -0,0 +1,3 @@
1
+ import { E as resumeAgent, T as init_resume } from "./agents-DqQa4Dq_.js";
2
+ init_resume();
3
+ export { resumeAgent };
@@ -1,3 +1,3 @@
1
- import { a as isReviewStaleSync, c as purgeReviewAgentsForIssue, d as buildConvoyPrompt, f as handleReviewDiscoveryReady, h as reviewResumeDecision, i as isReviewSessionForIssue, l as resolveReviewMode, m as spawnReviewSubRoleForIssue, n as init_review_agent, o as killAllReviewSessions, p as resolveReReviewScope, r as isExtendedReviewEnabled, s as killAllReviewerSessions, t as PARENT_REVIEW_TIMEOUT_MS, u as spawnReviewRoleForIssue } from "./review-agent-sZBCpEVv.js";
1
+ import { a as isReviewStaleSync, c as purgeReviewAgentsForIssue, d as buildConvoyPrompt, f as handleReviewDiscoveryReady, h as reviewResumeDecision, i as isReviewSessionForIssue, l as resolveReviewMode, m as spawnReviewSubRoleForIssue, n as init_review_agent, o as killAllReviewSessions, p as resolveReReviewScope, r as isExtendedReviewEnabled, s as killAllReviewerSessions, t as PARENT_REVIEW_TIMEOUT_MS, u as spawnReviewRoleForIssue } from "./review-agent-tfR5RDzG.js";
2
2
  init_review_agent();
3
3
  export { PARENT_REVIEW_TIMEOUT_MS, buildConvoyPrompt, handleReviewDiscoveryReady, isExtendedReviewEnabled, isReviewSessionForIssue, isReviewStaleSync, killAllReviewSessions, killAllReviewerSessions, purgeReviewAgentsForIssue, resolveReReviewScope, resolveReviewMode, reviewResumeDecision, spawnReviewRoleForIssue, spawnReviewSubRoleForIssue };