@overdeck/desktop 0.45.10 → 0.45.12

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 (603) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +6 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-l0DSvFFS.js → acceptance-criteria-1LHgD9vg.js} +2 -2
  4. package/server/{advancing-selfheal-CMlGznKv.js → advancing-selfheal-BqsLWqEM.js} +4 -4
  5. package/server/{agent-gc-BtAzj8QN.js → agent-gc-CUb52n7s.js} +3 -3
  6. package/server/{agent-state-xk_G8t90.js → agent-state-D-moNwhA.js} +1 -1
  7. package/server/{agent-state-service-C1iUF9Ft.js → agent-state-service-BaZH7sXJ.js} +1 -1
  8. package/server/{agent-state-service-5ge9xxhx.js → agent-state-service-BzESvLOf.js} +4 -4
  9. package/server/{agents-DHvsjsuP.js → agents-B5LfpLPv.js} +256 -185
  10. package/server/{agents-BIggLvi_.js → agents-C4kZ8a2r.js} +1 -1
  11. package/server/{archive-planning-B4Qi02bk.js → archive-planning-BbZe-8IK.js} +1 -1
  12. package/server/{archive-planning-zTvWWHG_.js → archive-planning-oX1pj6nY.js} +3 -3
  13. package/server/{artifact-index-jobs-BrByqVkB.js → artifact-index-jobs-DGr6bxev.js} +3 -3
  14. package/server/{auto-commit-DoIPFoEs.js → auto-commit-CGQlb4rV.js} +1 -1
  15. package/server/{backlog-auto-trigger-COm_R96V.js → backlog-auto-trigger-BlJHikOm.js} +2 -2
  16. package/server/{bd-process-lock-CJkoG7hW.js → bd-process-lock-i3CYMS-B.js} +3 -3
  17. package/server/{beads-AmCXEv_E.js → beads-BNU-fb48.js} +1 -1
  18. package/server/{beads-DlZm-vrG.js → beads-DD7fYCl5.js} +4 -4
  19. package/server/{beads-query-BrVNWoSL.js → beads-query-e6oku4P5.js} +2 -2
  20. package/server/{behavior-By-2Wipv.js → behavior-CPf0pbOt.js} +2 -2
  21. package/server/{briefing-freshness-CXhZdnB8.js → briefing-freshness-B2FdLwIv.js} +27 -15
  22. package/server/{checkpoint-manager-CfNpHOp4.js → checkpoint-manager-JryW6MpM.js} +2 -2
  23. package/server/{checkpoint-manager-CPw51H2n.js → checkpoint-manager-eFgaMMu4.js} +1 -1
  24. package/server/checkpoint-worker.js +1 -1
  25. package/server/{checkpoints-BjlBWOA8.js → checkpoints-BK17oicz.js} +1 -1
  26. package/server/{checkpoints-BbfH1EIy.js → checkpoints-qvOqvMuC.js} +2 -2
  27. package/server/{claude-permissions-DrRAs_0F.js → claude-permissions-B6bWGh9d.js} +3 -3
  28. package/server/{claude-settings-overlay-CEWlIFL-.js → claude-settings-overlay-BPdhTPjo.js} +1 -1
  29. package/server/{claude-settings-overlay-BSeS7Ki3.js → claude-settings-overlay-CRyyKKXQ.js} +2 -2
  30. package/server/{cli-CvK9xuSS.js → cli-B75AieAM.js} +9 -9
  31. package/server/cli-Ch_BWJB2.js +3 -0
  32. package/server/{cliproxy-J-_1iIXe.js → cliproxy-CCzwuSNe.js} +2 -2
  33. package/server/{cliproxy-BOcmOK6l.js → cliproxy-DOQf66G9.js} +1 -1
  34. package/server/{close-issue-BnpErnD1.js → close-issue-_X3MXJyG.js} +4 -4
  35. package/server/{closed-issue-reaper-DRqK5k39.js → closed-issue-reaper-BsUfBSjM.js} +13 -13
  36. package/server/{closed-issue-reaper-BLCQwTpF.js → closed-issue-reaper-CLR7ClsO.js} +1 -1
  37. package/server/{codex-DcInrhok.js → codex-B4KEpX5V.js} +5 -5
  38. package/server/{codex-BUZjrnqH.js → codex-CY-QRuU9.js} +1 -1
  39. package/server/{compact-beads-omhUgj5b.js → compact-beads-cZds2MTr.js} +1 -1
  40. package/server/{compact-beads-RFwdZFPA.js → compact-beads-uEDccC76.js} +3 -3
  41. package/server/{config-oWoKf5jO.js → config-8sjaU6jZ.js} +2 -2
  42. package/server/{config-CzcWQ24p.js → config-DARrpYWA.js} +1 -1
  43. package/server/{config-yaml-DPAieL_G.js → config-yaml-ClpGgrf6.js} +100 -99
  44. package/server/{conflict-gate-BhKvrPxn.js → conflict-gate-BtB_o-Vi.js} +3 -3
  45. package/server/{conflict-gate-JdFuhKuF.js → conflict-gate-Ds9_2yjd.js} +1 -1
  46. package/server/{context-layers-DxKsseHI.js → context-layers-CRCk1QG7.js} +2 -2
  47. package/server/{context-layers-CTjQwcEQ.js → context-layers-r2ywnQYA.js} +3 -3
  48. package/server/{control-settings-BMqUkXmR.js → control-settings-D1B3u6HP.js} +4 -4
  49. package/server/{conversation-compaction-Ba5aZdrb.js → conversation-compaction-CZRVk4hg.js} +1 -1
  50. package/server/{conversation-compaction-C5o_eKEm.js → conversation-compaction-D86Zo2Ci.js} +9 -9
  51. package/server/{conversation-service-WKl-sw58.js → conversation-service-CkL-6MuG.js} +1 -1
  52. package/server/{conversation-service-DvG8vZSV.js → conversation-service-CuTVU8dV.js} +5 -5
  53. package/server/{conversations-Dcx6LeIh.js → conversations-BmWEluPL.js} +1 -1
  54. package/server/{conversations-DL_BAWVk.js → conversations-DfJKBDwB.js} +5 -5
  55. package/server/{cost-C2CuA66z.js → cost-CCnqa5xK.js} +2 -2
  56. package/server/{cost-DaOG8sUB.js → cost-DAPYN6iA.js} +3 -3
  57. package/server/{cost-sync-8lkDeL9g.js → cost-sync-BDL10Nwu.js} +3 -3
  58. package/server/{dag-jH8ZkewR.js → dag-Dv2r5bVD.js} +3 -3
  59. package/server/dashboard-db-worker.js +6 -6
  60. package/server/{deacon-j3qSZ7--.js → deacon-CM0MxbS8.js} +235 -178
  61. package/server/{deacon-Cv2RMfHs.js → deacon-DYnZH7kC.js} +3 -3
  62. package/server/{deacon-nudge-log-CJGA6aSQ.js → deacon-nudge-log-B-naf89q.js} +2 -2
  63. package/server/{deacon-swarm-DadWNi5J.js → deacon-swarm-BstYoz8Q.js} +17 -17
  64. package/server/deacon-swarm-CSWGRfzr.js +2 -0
  65. package/server/deacon.js +7 -7
  66. package/server/{devcontainer-renderer-DUJYYRQB.js → devcontainer-renderer-CaYOG9JN.js} +2 -2
  67. package/server/{docker-Q4bphryk.js → docker-DDI1shu3.js} +2 -2
  68. package/server/{ensure-devcontainer-BCB6fHp9.js → ensure-devcontainer-CbSXvN9W.js} +1 -1
  69. package/server/{ensure-devcontainer-XLL0vtgV.js → ensure-devcontainer-DCAg3ksz.js} +3 -3
  70. package/server/{event-store-DTJXZjCl.js → event-store-DCMqyI07.js} +3 -3
  71. package/server/{event-store-DIk9wvnS.js → event-store-DU3HkZlN.js} +1 -1
  72. package/server/{events-DGWZzye2.js → events-BfiosVAn.js} +3 -3
  73. package/server/{events-BlzVUyTx.js → events-DLRxpSuV.js} +1 -1
  74. package/server/{factory-rG4T40su.js → factory-BMtWV9iv.js} +4 -4
  75. package/server/{feature-registry-population-Dwyj9gEM.js → feature-registry-population-DA7bO6Zn.js} +5 -5
  76. package/server/{feature-registry-storage-CnGyNgAq.js → feature-registry-storage-nAY1fbBt.js} +3 -3
  77. package/server/{features-CYY2_Eeh.js → features-DMu7eGmU.js} +2 -2
  78. package/server/{feedback-target-C4DaDSZ8.js → feedback-target-B2SEai8-.js} +1 -1
  79. package/server/{feedback-target-oE4-Esxl.js → feedback-target-DHqcw3cN.js} +6 -6
  80. package/server/{feedback-writer-thrdxYpK.js → feedback-writer-DMBdS_jL.js} +1 -1
  81. package/server/{feedback-writer-DMaO0XXa.js → feedback-writer-qvm7UON7.js} +4 -4
  82. package/server/{flywheel-DefHRzY4.js → flywheel-D2LdPSic.js} +13 -13
  83. package/server/{flywheel-ClMjGW_u.js → flywheel-Dfpx4bIV.js} +11 -11
  84. package/server/{flywheel-BqDdGvrQ.js → flywheel-k4FPtCQ_.js} +1 -1
  85. package/server/{flywheel-merge-order-CuDcqTRJ.js → flywheel-merge-order-CB4lbXeJ.js} +6 -6
  86. package/server/{flywheel-merge-order-B6YDSElh.js → flywheel-merge-order-CttTazRY.js} +1 -1
  87. package/server/{forge-BixzckB0.js → forge-CoPFXFyl.js} +3 -3
  88. package/server/forge-IgLR0Ist.js +2 -0
  89. package/server/{from-D4xmArTA.js → from-B0YoJl9-.js} +2 -2
  90. package/server/{fts-db-DPtxOAjp.js → fts-db-DAHW1yA_.js} +2 -2
  91. package/server/{fts-operations-VrGjsT0w.js → fts-operations-DDXDBi0d.js} +3 -3
  92. package/server/{git-utils-D_cax3fD.js → git-utils-B90Zjzfl.js} +2 -2
  93. package/server/{git-utils-RAmTwjFB.js → git-utils-DbfC0zls.js} +1 -1
  94. package/server/{github-app-FMXgo3vK.js → github-app-BecAnXRX.js} +2 -2
  95. package/server/{github-app-B5PDHMyn.js → github-app-C7lftMNj.js} +1 -1
  96. package/server/{github-client-VRiB6N-4.js → github-client-BwtKZtM0.js} +1 -1
  97. package/server/{github-client-yjbXaqpR.js → github-client-D21rCIXk.js} +2 -2
  98. package/server/{github-pr-lookup-t8X8R0c0.js → github-pr-lookup-CzVWuysl.js} +2 -2
  99. package/server/{harness-resolve-DKeSVsJL.js → harness-resolve-SkRJm4a7.js} +3 -3
  100. package/server/{health-events-DaLX4-0a.js → health-events-BT0aAfeA.js} +2 -2
  101. package/server/{health-events-CD6q47ub.js → health-events-DA_JLpgZ.js} +1 -1
  102. package/server/{hooks-D-cbMUzQ.js → hooks-BQxRXtRb.js} +1 -1
  103. package/server/{hooks-CmHFSj_Z.js → hooks-DxEn2BoY.js} +2 -2
  104. package/server/{idle-stack-reaper-DdnERp3G.js → idle-stack-reaper-C7fJL8jH.js} +1 -1
  105. package/server/{idle-stack-reaper-DBKQ9SKu.js → idle-stack-reaper-DGy7tvC9.js} +2 -2
  106. package/server/{infra-CpKlYZA9.js → infra-DE3C4PMr.js} +22 -4
  107. package/server/{injection-CszhePD2.js → injection-Cc4Qt8LZ.js} +7 -7
  108. package/server/{injection-DKzL2Axk.js → injection-Dt22tGvS.js} +1 -1
  109. package/server/inspect-agent-CYoWAeeB.js +2 -0
  110. package/server/{inspect-agent-BKKc0XnB.js → inspect-agent-DOaCDkCF.js} +9 -9
  111. package/server/{internal-token-CQUx9YLc.js → internal-token-B_1YLWLI.js} +3 -3
  112. package/server/{internal-token-DrGdpLFo.js → internal-token-nobT6FhA.js} +1 -1
  113. package/server/{io-Wy8YpFeP.js → io-A7ZuOBkz.js} +2 -2
  114. package/server/{issue-closed-BO84g03t.js → issue-closed-Da3DeomA.js} +4 -4
  115. package/server/{issue-lifecycle-DnhQgddB.js → issue-lifecycle-543pQX9D.js} +28 -28
  116. package/server/{issue-lifecycle-nY4esZn8.js → issue-lifecycle-Bd9XBJAQ.js} +1 -1
  117. package/server/{issue-service-singleton-Bnqv1uaa.js → issue-service-singleton-BC2JLZi7.js} +1 -1
  118. package/server/{issue-service-singleton-_AquSBTl.js → issue-service-singleton-Brc3t0SV.js} +8 -8
  119. package/server/{issues-ChNcfHta.js → issues-D3kt9UWE.js} +2 -2
  120. package/server/{label-cleanup-bVXCGWBM.js → label-cleanup-w9X_T3AQ.js} +2 -2
  121. package/server/{layers-vdvlpFki.js → layers-Cwe1J-9o.js} +2 -2
  122. package/server/{lifecycle-CGKm7doE.js → lifecycle-f1GbDK33.js} +6 -6
  123. package/server/{lifecycle-io-DSrv9xGh.js → lifecycle-io-Bqvj0m3i.js} +4 -4
  124. package/server/{lifecycle-io-CdqPkCyk.js → lifecycle-io-D56q8zlO.js} +1 -1
  125. package/server/{linear-client-BxKvL6U8.js → linear-client-Bh4T4S-c.js} +1 -1
  126. package/server/{linear-client-E0HdXtWs.js → linear-client-CfJMTAYd.js} +2 -2
  127. package/server/memory-fts-worker.js +1 -1
  128. package/server/{merge-D3wEbmUJ.js → merge-DRMPa8CQ.js} +1 -1
  129. package/server/{merge-UlAwCk80.js → merge-ZrXFM3jv.js} +3 -3
  130. package/server/{merge-agent-BcgAYStl.js → merge-agent-CHHs5S_0.js} +25 -25
  131. package/server/{merge-agent-Dh8Y9PDO.js → merge-agent-CfohxFWM.js} +1 -1
  132. package/server/{merge-blockers-DwdQNsYD.js → merge-blockers-BMhDpMl_.js} +2 -2
  133. package/server/merge-ops-Czke6UAp.js +2 -0
  134. package/server/{merge-rebase-CH12_ufi.js → merge-rebase-R7MfqpiE.js} +2 -2
  135. package/server/{merge-set-TRxJwR-w.js → merge-set-B3Breacq.js} +3 -3
  136. package/server/{merge-set-rXK3ehnB.js → merge-set-D-iXNP0I.js} +1 -1
  137. package/server/{merge-sync-CaLRt2cB.js → merge-sync-DHWbGtjR.js} +2 -2
  138. package/server/{merge-sync-BKLKu9kz.js → merge-sync-bOOtfeXR.js} +1 -1
  139. package/server/{merge-train-DmxlYbEo.js → merge-train-98ptZrPT.js} +3 -3
  140. package/server/{merge-train-deps-DBHsOWt9.js → merge-train-deps-B5FWJTE2.js} +4 -4
  141. package/server/{merge-verification-DA9rvqsE.js → merge-verification-BGiuiXAK.js} +4 -4
  142. package/server/{multipart-parser-DtIEUW2B.js → multipart-parser-D7mzNNDm.js} +2 -2
  143. package/server/node_modules/.package-lock.json +1 -0
  144. package/server/{orphan-proposed-reconciler-Db8tUhce.js → orphan-proposed-reconciler-BSGCNJ6X.js} +9 -9
  145. package/server/{orphan-proposed-reconciler-mXV--tcB.js → orphan-proposed-reconciler-CSuxivr9.js} +1 -1
  146. package/server/package-lock.json +2 -0
  147. package/server/package.json +1 -0
  148. package/server/{pan-dir-BgBeeZDX.js → pan-dir-DoPtdHrp.js} +3 -3
  149. package/server/{paths-TE1GOZDr.js → paths-CVDLPxXp.js} +2 -2
  150. package/server/{pipeline-notifier-lwMa--Gz.js → pipeline-notifier-BtYHbBPl.js} +1 -1
  151. package/server/{pipeline-notifier-aX_5EqQO.js → pipeline-notifier-WD2dnOsR.js} +2 -2
  152. package/server/{projects-BNmVxnNt.js → projects-Bqfwuqet.js} +1 -1
  153. package/server/{prompts-CelsUdrx.js → prompts-Cg7e9FPb.js} +2 -2
  154. package/server/{providers-BOnRq5XK.js → providers-JjK6izqX.js} +1 -1
  155. package/server/{providers-4-xOzHQu.js → providers-fLduChnX.js} +7 -7
  156. package/server/public/assets/{chunk-BO2N2NFS-BjULspib.js → chunk-BO2N2NFS-aNlsGDCu.js} +4 -4
  157. package/server/public/assets/{diagram-OG6HWLK6-4ER5ovy_.js → diagram-OG6HWLK6-CnjkrvT8.js} +1 -1
  158. package/server/public/assets/{dist-CBUe_1pC.js → dist-Bg3Sbsx4.js} +3 -3
  159. package/server/public/assets/{dist-DVM-OI65.js → dist-CGKBCieA.js} +1 -1
  160. package/server/public/assets/{ganttDiagram-6RSMTGT7-DQ3nocJU.js → ganttDiagram-6RSMTGT7-C8LLKj23.js} +1 -1
  161. package/server/public/assets/{highlighted-body-OFNGDK62-BcLOHe75.js → highlighted-body-OFNGDK62-BSDEUvhW.js} +1 -1
  162. package/server/public/assets/{index-B-m-cSFg.css → index-CZiADHcL.css} +1 -1
  163. package/server/public/assets/index-LQIfhmgI.js +796 -0
  164. package/server/public/assets/{linear-Acq5WFAt.js → linear-DEbYZoxg.js} +1 -1
  165. package/server/public/assets/mermaid-GHXKKRXX-CZOsRYoT.js +1 -0
  166. package/server/public/assets/{pieDiagram-4H26LBE5-BEmjmqLh.js → pieDiagram-4H26LBE5-BtZL5pXE.js} +1 -1
  167. package/server/public/assets/{prod-D-3YYika.js → prod-DYVvIyuh.js} +4 -4
  168. package/server/public/assets/{quadrantDiagram-W4KKPZXB-DyeZ0jBC.js → quadrantDiagram-W4KKPZXB-a7vS8Jc8.js} +1 -1
  169. package/server/public/assets/{sankeyDiagram-5OEKKPKP-DSD--Pbl.js → sankeyDiagram-5OEKKPKP-Ckbq2SWH.js} +1 -1
  170. package/server/public/assets/{xychartDiagram-2RQKCTM6-idS7x7Bb.js → xychartDiagram-2RQKCTM6-DJyeNa99.js} +1 -1
  171. package/server/public/index.html +2 -2
  172. package/server/{pull-requests-CH4iBFLl.js → pull-requests-1WXmTBlo.js} +3 -3
  173. package/server/{pull-requests-DL_4klIb.js → pull-requests-D2SjJIwY.js} +1 -1
  174. package/server/{rally-D0mKv2t8.js → rally-8aQlLLVj.js} +3 -3
  175. package/server/rally-Ba9QoNYc.js +3 -0
  176. package/server/{rally-api-CcCdecF-.js → rally-api-BtvwdX6d.js} +1 -1
  177. package/server/{rally-api-DgAt6FbN.js → rally-api-H5I2CBO0.js} +2 -2
  178. package/server/{rally-client-DYjtgTOu.js → rally-client-33CYZYYu.js} +4 -4
  179. package/server/{rally-client-X0bEEN2B.js → rally-client-Bt-qHiOh.js} +1 -1
  180. package/server/{rebuild-stack-ByFCMqTK.js → rebuild-stack-CXSgAGPR.js} +1 -1
  181. package/server/{rebuild-stack-BLG3rlWa.js → rebuild-stack-KHkkrGjx.js} +6 -6
  182. package/server/{reconstruct-cache-_tDZ2D72.js → reconstruct-cache-D_Ml65_6.js} +7 -7
  183. package/server/{record-DjPikotp.js → record-De2syxNB.js} +1 -1
  184. package/server/{remote-TN0cV8k-.js → remote-CGuognN3.js} +3 -3
  185. package/server/{remote-B1Trmr0N.js → remote-D0Old0Cv.js} +3 -3
  186. package/server/{remote-agents-CmbIKw7E.js → remote-agents-DfhMq6kQ.js} +5 -5
  187. package/server/{remote-agents-DNuaAgU6.js → remote-agents-UHoi4oGr.js} +1 -1
  188. package/server/{remote-completion-Bklh6loJ.js → remote-completion-RZYePR_0.js} +12 -12
  189. package/server/resume-CmxF3Kjz.js +3 -0
  190. package/server/{review-agent-phzqNqIs.js → review-agent-sZBCpEVv.js} +35 -26
  191. package/server/review-agent-uwVftH98.js +3 -0
  192. package/server/{review-artifacts-BGc69epg.js → review-artifacts-C7a45b1_.js} +7 -7
  193. package/server/{review-context-CCq56O_Y.js → review-context-CErbQpKL.js} +7 -7
  194. package/server/{review-monitor-BKG2ubt5.js → review-monitor-DHD9m_kh.js} +2 -2
  195. package/server/{review-status-bBkqUj5i.js → review-status-JhQ3qlDS.js} +1 -1
  196. package/server/{review-status-enrichment-CGlcApSn.js → review-status-enrichment-qWvWckYN.js} +3 -3
  197. package/server/{review-status-BQjqQXZG.js → review-status-gPndPUBc.js} +66 -30
  198. package/server/{review-status-sync-BxHBVH8s.js → review-status-sync-B_GrEke8.js} +1 -1
  199. package/server/{review-status-sync-BWHnrq-k.js → review-status-sync-D3A9KX95.js} +2 -2
  200. package/server/{review-verdict-feedback-wqnikhMK.js → review-verdict-feedback-4WZ5ZdbC.js} +7 -7
  201. package/server/{review-verdict-feedback-cZh9Wi9G.js → review-verdict-feedback-Zo0r_z4m.js} +1 -1
  202. package/server/{rollup-DBNy1yFB.js → rollup-Bmhn80tB.js} +1 -1
  203. package/server/{rollup-BJE-Vc7H.js → rollup-BrUIKMv_.js} +7 -7
  204. package/server/{scanner-CUGpdp4i.js → scanner-BIGumel_.js} +7 -7
  205. package/server/{sequence-io-B2GmilSI.js → sequence-io-DA0akEQN.js} +5 -5
  206. package/server/{sequencer-agent-D8pW2aU_.js → sequencer-agent-DeflKafB.js} +6 -6
  207. package/server/server.js +576 -552
  208. package/server/{service-CILd-uOt.js → service-V0sUK-OR.js} +64 -64
  209. package/server/{session-fork-DDSDVoIK.js → session-fork-Yx3UcAQf.js} +2 -2
  210. package/server/{settings-CBrei_kx.js → settings-CFEeQRj2.js} +2 -2
  211. package/server/{settings-D2wt4nku.js → settings-CxVate0h.js} +3 -3
  212. package/server/settings-DEhYpW0k.js +2 -0
  213. package/server/{shadow-engineering-Ba1D0QUN.js → shadow-engineering-BRxnVSDk.js} +2 -2
  214. package/server/{shadow-state-BOaq8BrD.js → shadow-state-1aS8FijU.js} +1 -1
  215. package/server/{shadow-state-DTC7AMHc.js → shadow-state-BiMwdyl1.js} +2 -2
  216. package/server/{smart-compaction-CrP90OFE.js → smart-compaction-Bw1K_Sbl.js} +7 -7
  217. package/server/{smart-compaction-Bgp_gwcA.js → smart-compaction-xblMyVpT.js} +1 -1
  218. package/server/{spawn-planning-session-D15KbPOy.js → spawn-planning-session-CzDFSKAQ.js} +1 -1
  219. package/server/{spawn-planning-session-BmJWHSCu.js → spawn-planning-session-DxLxcM7m.js} +15 -15
  220. package/server/{specialist-context-CwKkcXL9.js → specialist-context-BfkTA81h.js} +5 -5
  221. package/server/{specialist-handoff-logger-B_2VsWli.js → specialist-handoff-logger-BiKuLtNm.js} +2 -2
  222. package/server/{specialist-logs-CvDxquV_.js → specialist-logs-CFJjGsLC.js} +3 -3
  223. package/server/{specialists-D07ybnam.js → specialists-B4byf18k.js} +156 -156
  224. package/server/{specialists-BCjcG4uE.js → specialists-BLIreoE7.js} +1 -1
  225. package/server/{specialists-F2uMO4QS.js → specialists-DdvpFNt1.js} +1 -1
  226. package/server/{specialists-BYi0k8CZ.js → specialists-DjHbwQ_p.js} +18 -18
  227. package/server/specs-CVH1kvz3.js +3 -0
  228. package/server/{src-Dp0WHgDZ.js → src-CALBEUMX.js} +3 -3
  229. package/server/{src-BswtmojL.js → src-mK_M_ZIj.js} +3 -3
  230. package/server/{stack-health-Deel1mSW.js → stack-health-BFM8YlHw.js} +1 -1
  231. package/server/{stack-health-BJVh1TCg.js → stack-health-Qd7rPiVe.js} +3 -3
  232. package/server/{state-home-Bgj7i-C7.js → state-home-C2Bicw9N.js} +6 -6
  233. package/server/{summary-fork-EjvOkEPl.js → summary-fork-DezPkJSm.js} +16 -16
  234. package/server/{summary-fork-DedqguZb.js → summary-fork-EWWBvzgE.js} +2 -2
  235. package/server/supervisor/chunk-ruWRV7i3.js +30 -0
  236. package/server/supervisor/paths-3R6b989k.js +224 -0
  237. package/server/supervisor/pty-supervisor.js +391 -0
  238. package/server/supervisor/pty-token-CScQ32Rj.js +43 -0
  239. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/LICENSE +69 -0
  240. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/README.md +67 -0
  241. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/binding.gyp +123 -0
  242. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/.editorconfig +2 -0
  243. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/.drone.yml +17 -0
  244. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/.gitattributes +19 -0
  245. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/LICENSE +21 -0
  246. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/Makefile +166 -0
  247. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/README.md +151 -0
  248. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/RELEASES.md +280 -0
  249. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/VERSION.txt +1 -0
  250. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/configure +167 -0
  251. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/BufferResizeTests.cc +90 -0
  252. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ChangeScreenBuffer.cc +53 -0
  253. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ClearConsole.cc +72 -0
  254. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ConinMode.cc +117 -0
  255. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ConinMode.ps1 +116 -0
  256. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ConoutMode.cc +113 -0
  257. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/DebugClient.py +42 -0
  258. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/DebugServer.py +63 -0
  259. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/DumpLines.py +5 -0
  260. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/EnableExtendedFlags.txt +46 -0
  261. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +528 -0
  262. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +633 -0
  263. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP932.txt +630 -0
  264. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP936.txt +630 -0
  265. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP949.txt +630 -0
  266. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/CP950.txt +630 -0
  267. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +16 -0
  268. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/Results.txt +4 -0
  269. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +144 -0
  270. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/FontSurvey.cc +100 -0
  271. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/FormatChar.h +21 -0
  272. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/FreezePerfTest.cc +62 -0
  273. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/GetCh.cc +20 -0
  274. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/GetConsolePos.cc +41 -0
  275. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/GetFont.cc +261 -0
  276. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/IdentifyConsoleWindow.ps1 +51 -0
  277. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/IsNewConsole.cc +87 -0
  278. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/MouseInputNotes.txt +90 -0
  279. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/MoveConsoleWindow.cc +34 -0
  280. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Notes.txt +219 -0
  281. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/OSVersion.cc +27 -0
  282. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ScreenBufferFreezeInactive.cc +101 -0
  283. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ScreenBufferTest.cc +671 -0
  284. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ScreenBufferTest2.cc +151 -0
  285. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/SelectAllTest.cc +45 -0
  286. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/SetBufferSize.cc +32 -0
  287. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/SetCursorPos.cc +10 -0
  288. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/SetFont.cc +145 -0
  289. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/SetWindowRect.cc +36 -0
  290. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ShowArgv.cc +12 -0
  291. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/ShowConsoleInput.cc +40 -0
  292. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Spew.py +5 -0
  293. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/TestUtil.cc +172 -0
  294. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/UnicodeDoubleWidthTest.cc +102 -0
  295. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/UnicodeWideTest1.cc +246 -0
  296. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/UnicodeWideTest2.cc +130 -0
  297. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/UnixEcho.cc +89 -0
  298. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Utf16Echo.cc +46 -0
  299. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/VeryLargeRead.cc +122 -0
  300. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/VkEscapeTest.cc +56 -0
  301. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win10ResizeWhileFrozen.cc +52 -0
  302. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win10WrapTest1.cc +57 -0
  303. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win10WrapTest2.cc +30 -0
  304. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Echo1.cc +26 -0
  305. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Echo2.cc +19 -0
  306. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Test1.cc +46 -0
  307. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Test2.cc +70 -0
  308. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Test3.cc +78 -0
  309. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/Win32Write1.cc +44 -0
  310. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/WindowsBugCrashReader.cc +27 -0
  311. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/WriteConsole.cc +106 -0
  312. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/build32.sh +9 -0
  313. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/build64.sh +9 -0
  314. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/color-test.sh +212 -0
  315. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/font-notes.txt +300 -0
  316. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/misc/winbug-15048.cc +201 -0
  317. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/ship/build-pty4j-libpty.bat +36 -0
  318. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/ship/common_ship.py +53 -0
  319. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/ship/make_msvc_package.py +165 -0
  320. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/ship/ship.py +108 -0
  321. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Agent.cc +613 -0
  322. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Agent.h +103 -0
  323. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/AgentCreateDesktop.cc +84 -0
  324. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/AgentCreateDesktop.h +28 -0
  325. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleFont.cc +632 -0
  326. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleFont.h +28 -0
  327. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleInput.cc +852 -0
  328. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleInput.h +109 -0
  329. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleInputReencoding.cc +121 -0
  330. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleInputReencoding.h +36 -0
  331. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleLine.cc +152 -0
  332. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/ConsoleLine.h +41 -0
  333. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Coord.h +87 -0
  334. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/DebugShowInput.cc +239 -0
  335. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/DebugShowInput.h +32 -0
  336. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/DefaultInputMap.cc +422 -0
  337. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/DefaultInputMap.h +28 -0
  338. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/DsrSender.h +30 -0
  339. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/EventLoop.cc +99 -0
  340. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/EventLoop.h +47 -0
  341. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/InputMap.cc +246 -0
  342. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/InputMap.h +114 -0
  343. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/LargeConsoleRead.cc +71 -0
  344. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/LargeConsoleRead.h +68 -0
  345. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/NamedPipe.cc +378 -0
  346. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/NamedPipe.h +125 -0
  347. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Scraper.cc +699 -0
  348. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Scraper.h +103 -0
  349. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/SimplePool.h +75 -0
  350. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/SmallRect.h +143 -0
  351. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Terminal.cc +535 -0
  352. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Terminal.h +69 -0
  353. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/UnicodeEncoding.h +157 -0
  354. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/UnicodeEncodingTest.cc +189 -0
  355. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Win32Console.cc +107 -0
  356. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Win32Console.h +67 -0
  357. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Win32ConsoleBuffer.cc +193 -0
  358. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/Win32ConsoleBuffer.h +99 -0
  359. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/main.cc +114 -0
  360. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/agent/subdir.mk +61 -0
  361. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/configurations.gypi +60 -0
  362. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/debugserver/DebugServer.cc +117 -0
  363. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/debugserver/subdir.mk +41 -0
  364. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/include/winpty.h +242 -0
  365. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/include/winpty_constants.h +131 -0
  366. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/AgentLocation.cc +75 -0
  367. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/AgentLocation.h +28 -0
  368. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/LibWinptyException.h +54 -0
  369. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/WinptyInternal.h +72 -0
  370. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/subdir.mk +46 -0
  371. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/libwinpty/winpty.cc +970 -0
  372. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/AgentMsg.h +38 -0
  373. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/BackgroundDesktop.cc +122 -0
  374. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/BackgroundDesktop.h +73 -0
  375. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/Buffer.cc +103 -0
  376. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/Buffer.h +102 -0
  377. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/DebugClient.cc +187 -0
  378. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/DebugClient.h +38 -0
  379. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/GenRandom.cc +138 -0
  380. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/GenRandom.h +55 -0
  381. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/GetCommitHash.bat +13 -0
  382. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/Mutex.h +54 -0
  383. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/OsModule.h +63 -0
  384. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/OwnedHandle.cc +36 -0
  385. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/OwnedHandle.h +45 -0
  386. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/PrecompiledHeader.h +43 -0
  387. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/StringBuilder.h +227 -0
  388. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/StringBuilderTest.cc +114 -0
  389. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/StringUtil.cc +55 -0
  390. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/StringUtil.h +80 -0
  391. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/TimeMeasurement.h +63 -0
  392. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/UnixCtrlChars.h +45 -0
  393. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/UpdateGenVersion.bat +20 -0
  394. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WindowsSecurity.cc +460 -0
  395. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WindowsSecurity.h +104 -0
  396. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WindowsVersion.cc +252 -0
  397. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WindowsVersion.h +29 -0
  398. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyAssert.cc +55 -0
  399. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyAssert.h +64 -0
  400. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyException.cc +57 -0
  401. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyException.h +43 -0
  402. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyVersion.cc +42 -0
  403. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/WinptyVersion.h +27 -0
  404. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/shared/winpty_snprintf.h +99 -0
  405. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/subdir.mk +5 -0
  406. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/tests/subdir.mk +28 -0
  407. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/tests/trivial_test.cc +158 -0
  408. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/InputHandler.cc +114 -0
  409. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/InputHandler.h +56 -0
  410. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/OutputHandler.cc +80 -0
  411. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/OutputHandler.h +53 -0
  412. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/Util.cc +86 -0
  413. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/Util.h +31 -0
  414. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/WakeupFd.cc +70 -0
  415. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/WakeupFd.h +42 -0
  416. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/main.cc +729 -0
  417. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/unix-adapter/subdir.mk +41 -0
  418. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/src/winpty.gyp +235 -0
  419. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/deps/winpty/vcbuild.bat +83 -0
  420. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/conpty_console_list_agent.js +20 -0
  421. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/conpty_console_list_agent.js.map +1 -0
  422. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/eventEmitter2.js +47 -0
  423. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/eventEmitter2.js.map +1 -0
  424. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/eventEmitter2.test.js +30 -0
  425. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/eventEmitter2.test.js.map +1 -0
  426. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/index.js +52 -0
  427. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/index.js.map +1 -0
  428. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/interfaces.js +7 -0
  429. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/interfaces.js.map +1 -0
  430. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-file-path.js +18 -0
  431. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-file-path.js.map +1 -0
  432. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js +19 -0
  433. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js.map +1 -0
  434. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/shared/conout.js +11 -0
  435. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/shared/conout.js.map +1 -0
  436. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/terminal.js +190 -0
  437. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/terminal.js.map +1 -0
  438. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/terminal.test.js +139 -0
  439. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/terminal.test.js.map +1 -0
  440. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/testUtils.test.js +28 -0
  441. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/testUtils.test.js.map +1 -0
  442. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/types.js +7 -0
  443. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/types.js.map +1 -0
  444. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.js +290 -0
  445. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.js.map +1 -0
  446. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.test.js +352 -0
  447. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.test.js.map +1 -0
  448. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/utils.js +17 -0
  449. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/utils.js.map +1 -0
  450. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsConoutConnection.js +125 -0
  451. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsConoutConnection.js.map +1 -0
  452. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsPtyAgent.js +345 -0
  453. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsPtyAgent.js.map +1 -0
  454. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsPtyAgent.test.js +90 -0
  455. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsPtyAgent.test.js.map +1 -0
  456. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsTerminal.js +201 -0
  457. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsTerminal.js.map +1 -0
  458. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsTerminal.test.js +217 -0
  459. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/windowsTerminal.test.js.map +1 -0
  460. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/worker/conoutSocketWorker.js +22 -0
  461. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/lib/worker/conoutSocketWorker.js.map +1 -0
  462. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/package.json +79 -0
  463. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi102.musl.node +0 -0
  464. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi102.node +0 -0
  465. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi108.musl.node +0 -0
  466. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi108.node +0 -0
  467. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi111.musl.node +0 -0
  468. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi111.node +0 -0
  469. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi115.musl.node +0 -0
  470. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi115.node +0 -0
  471. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi120.musl.node +0 -0
  472. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi120.node +0 -0
  473. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi127.musl.node +0 -0
  474. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi127.node +0 -0
  475. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi131.musl.node +0 -0
  476. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi131.node +0 -0
  477. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi137.musl.node +0 -0
  478. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm/node.abi137.node +0 -0
  479. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi102.musl.node +0 -0
  480. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi108.musl.node +0 -0
  481. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi108.node +0 -0
  482. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi111.musl.node +0 -0
  483. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi111.node +0 -0
  484. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi115.musl.node +0 -0
  485. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi115.node +0 -0
  486. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi120.musl.node +0 -0
  487. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi120.node +0 -0
  488. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi127.musl.node +0 -0
  489. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi127.node +0 -0
  490. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi131.musl.node +0 -0
  491. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi131.node +0 -0
  492. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi137.musl.node +0 -0
  493. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-arm64/node.abi137.node +0 -0
  494. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi108.node +0 -0
  495. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi111.node +0 -0
  496. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi115.node +0 -0
  497. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi120.node +0 -0
  498. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi127.node +0 -0
  499. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi131.node +0 -0
  500. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-ia32/node.abi137.node +0 -0
  501. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi102.musl.node +0 -0
  502. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi108.musl.node +0 -0
  503. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi108.node +0 -0
  504. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi111.musl.node +0 -0
  505. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi111.node +0 -0
  506. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi115.musl.node +0 -0
  507. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi115.node +0 -0
  508. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi120.musl.node +0 -0
  509. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi120.node +0 -0
  510. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi127.musl.node +0 -0
  511. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi127.node +0 -0
  512. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi131.musl.node +0 -0
  513. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi131.node +0 -0
  514. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi137.musl.node +0 -0
  515. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/prebuilds/linux-x64/node.abi137.node +0 -0
  516. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/scripts/check-prebuild.js +15 -0
  517. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/scripts/increment-version.js +54 -0
  518. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/scripts/install.js +18 -0
  519. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/scripts/post-install.js +83 -0
  520. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/conpty_console_list_agent.ts +19 -0
  521. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/eventEmitter2.test.ts +30 -0
  522. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/eventEmitter2.ts +48 -0
  523. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/index.ts +53 -0
  524. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/interfaces.ts +130 -0
  525. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/native.d.ts +54 -0
  526. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/prebuild-file-path.ts +21 -0
  527. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/prebuild-loader.ts +17 -0
  528. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/shared/conout.ts +15 -0
  529. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/terminal.test.ts +119 -0
  530. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/terminal.ts +211 -0
  531. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/testUtils.test.ts +23 -0
  532. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/tsconfig.json +22 -0
  533. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/types.ts +15 -0
  534. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/unix/pty.cc +796 -0
  535. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/unix/spawn-helper.cc +23 -0
  536. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/unixTerminal.test.ts +368 -0
  537. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/unixTerminal.ts +318 -0
  538. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/utils.ts +9 -0
  539. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/conpty.cc +583 -0
  540. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/conpty.h +41 -0
  541. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/conpty_console_list.cc +44 -0
  542. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/path_util.cc +95 -0
  543. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/path_util.h +26 -0
  544. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/win/winpty.cc +333 -0
  545. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/windowsConoutConnection.ts +82 -0
  546. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/windowsPtyAgent.test.ts +94 -0
  547. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/windowsPtyAgent.ts +342 -0
  548. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/windowsTerminal.test.ts +227 -0
  549. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/windowsTerminal.ts +208 -0
  550. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/src/worker/conoutSocketWorker.ts +22 -0
  551. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/third_party/conpty/1.22.250204002/win10-arm64/OpenConsole.exe +0 -0
  552. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/third_party/conpty/1.22.250204002/win10-arm64/conpty.dll +0 -0
  553. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/third_party/conpty/1.22.250204002/win10-x64/OpenConsole.exe +0 -0
  554. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/third_party/conpty/1.22.250204002/win10-x64/conpty.dll +0 -0
  555. package/server/supervisor/vendor/@homebridge/node-pty-prebuilt-multiarch/typings/node-pty.d.ts +230 -0
  556. package/server/{supervisor-0oXvLwyC.js → supervisor-D5GC5jUM.js} +8 -8
  557. package/server/supervisor-DQMK2e3I.js +2 -0
  558. package/server/{swarm-readiness-OBgamRql.js → swarm-readiness-Cf9mommA.js} +3 -3
  559. package/server/system-prerequisites-BsI9hxh9.js +166 -0
  560. package/server/{teardown-workspace-5LCVbjfq.js → teardown-workspace-CWz1pbEK.js} +12 -12
  561. package/server/{test-agent-queue-qfsq6uaC.js → test-agent-queue-TiVXe3ZT.js} +6 -6
  562. package/server/{test-verdict-D3Il7cBK.js → test-verdict-Bm4uv_AA.js} +2 -2
  563. package/server/{test-verdict-BkubHtti.js → test-verdict-CCDd25uN.js} +1 -1
  564. package/server/{tldr-daemon-CJqGsDFh.js → tldr-daemon-Big5IZ_M.js} +1 -1
  565. package/server/{tldr-daemon-CJW_P4On.js → tldr-daemon-C_1frSDj.js} +2 -2
  566. package/server/{tmux-ePNhMIMU.js → tmux-D57f-XNv.js} +2 -2
  567. package/server/{tmux-CeDD14p1.js → tmux-DClqWwb8.js} +1 -1
  568. package/server/{tracker-config-Drt_tx4D.js → tracker-config-B_Ubts1Z.js} +1 -1
  569. package/server/{tracker-config-C3hiPVAM.js → tracker-config-BmdJU_w6.js} +2 -2
  570. package/server/{tracker-utils-D6B8scEw.js → tracker-utils-Bg-Sevcv.js} +1 -1
  571. package/server/{tracker-utils-bpWs7Xyx.js → tracker-utils-CWFt6jjV.js} +2 -2
  572. package/server/{tunnel-3Ve8BS4H.js → tunnel-UBf2vyAL.js} +2 -2
  573. package/server/{tunnel-AporWhoi.js → tunnel-hOBNQbmF.js} +1 -1
  574. package/server/{uat-train-C3hWXtip.js → uat-train-DGkIkLxu.js} +1 -1
  575. package/server/{uat-train-CtNGgXxj.js → uat-train-qNanv5hN.js} +54 -54
  576. package/server/{validation-CbqP_dze.js → validation-B0QaLIHP.js} +1 -1
  577. package/server/{validation-BmUB-26g.js → validation-C4wegCvH.js} +3 -3
  578. package/server/{verification-runner-BPAhPWR7.js → verification-runner-CntudBes.js} +11 -11
  579. package/server/{verification-runner-DuZRHjPU.js → verification-runner-DdleMNLq.js} +1 -1
  580. package/server/{work-agent-prompt-DCdHsm-V.js → work-agent-prompt-CG5jFV9A.js} +11 -11
  581. package/server/{workflows-H-COJ84X.js → workflows-BK2xs_a8.js} +13 -13
  582. package/server/workflows-pKw9yRSV.js +2 -0
  583. package/server/{workspace-DYv9kBg6.js → workspace-C9lC5o3E.js} +1 -1
  584. package/server/{workspace-4ZufqeMe.js → workspace-CLrSIRCx.js} +3 -3
  585. package/server/{workspace-manager-CEWK-OXd.js → workspace-manager-BJhW2sky.js} +10 -10
  586. package/server/{workspace-manager-B3PqQQSM.js → workspace-manager-Cb2a7bg9.js} +1 -1
  587. package/server/{workspace-metadata-C0I-nIDL.js → workspace-metadata-CTRnr323.js} +1 -1
  588. package/server/{workspace-metadata-1eu1RvAT.js → workspace-metadata-QQmo_Z0l.js} +2 -2
  589. package/server/{workspaces-CRU9_vRn.js → workspaces-Ca4zZs12.js} +223 -223
  590. package/server/cli-CJDWXE_Y.js +0 -3
  591. package/server/deacon-swarm-D1iAUX-P.js +0 -2
  592. package/server/forge-BfP7OJwK.js +0 -2
  593. package/server/inspect-agent-vm88mLYr.js +0 -2
  594. package/server/merge-ops-QdBiQ8XB.js +0 -2
  595. package/server/public/assets/index-DdqPXf3T.js +0 -796
  596. package/server/public/assets/mermaid-GHXKKRXX-BTHbMU88.js +0 -1
  597. package/server/rally-DffLLIdl.js +0 -3
  598. package/server/resume-DnIsmIgC.js +0 -3
  599. package/server/review-agent-DgySDb-G.js +0 -3
  600. package/server/settings-vLoKyghx.js +0 -2
  601. package/server/specs-DeS98l_p.js +0 -3
  602. package/server/supervisor-D1-XwmZ7.js +0 -2
  603. package/server/workflows-Cz8OtiB4.js +0 -2
@@ -1,49 +1,49 @@
1
- import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Nn as init_projects, Qn as extractNumberSync, Sn as findProjectByTeamSync, Vr as init_paths, cr as FsError, er as init_issue_id, ln as init_state_plane, lr as GitError, nr as parseIssueIdSync, un as isStatePlaneOnlyStatus, vn as extractTeamPrefix, vr as init_errors } from "./config-yaml-DPAieL_G.js";
2
- import { D as jsonResponse, E as httpHandler, S as normalizeOrigin, b as getTrustedOrigins, f as getWorkAgentLifecycleStateSync, n as _serverManagedMerges, y as getHeaderFromMap } from "./specialists-D07ybnam.js";
1
+ import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Nn as init_projects, Qn as extractNumberSync, Sn as findProjectByTeamSync, Vr as init_paths, cr as FsError, er as init_issue_id, ln as init_state_plane, lr as GitError, nr as parseIssueIdSync, un as isStatePlaneOnlyStatus, vn as extractTeamPrefix, vr as init_errors } from "./config-yaml-ClpGgrf6.js";
2
+ import { D as jsonResponse, E as httpHandler, S as normalizeOrigin, b as getTrustedOrigins, f as getWorkAgentLifecycleStateSync, n as _serverManagedMerges, y as getHeaderFromMap } from "./specialists-B4byf18k.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CpKlYZA9.js";
5
- import { K as buildChildEnvWithoutTmuxSync, L as sessionExists, O as listSessionNames, i as capturePane, q as init_child_env, x as init_tmux } from "./tmux-ePNhMIMU.js";
6
- import { _ as setDeaconIgnored, c as init_review_status, f as markWorkspaceStuck, g as setAutoMerge, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
7
- import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-DnhQgddB.js";
8
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-C2CuA66z.js";
9
- import { Mn as getAgentState, Rt as transitionIssueToInReview, U as spawnAgent, Z as listRunningAgents, gr as saveAgentRuntimeState, j as messageAgent, mr as getAgentRuntimeStateSync, t as init_agents } from "./agents-DHvsjsuP.js";
10
- import { f as CostWriter, l as CostDoorLive } from "./service-CILd-uOt.js";
11
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-C3hiPVAM.js";
12
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
13
- import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-CQUx9YLc.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-DE3C4PMr.js";
5
+ import { K as buildChildEnvWithoutTmuxSync, L as sessionExists, O as listSessionNames, i as capturePane, q as init_child_env, x as init_tmux } from "./tmux-D57f-XNv.js";
6
+ import { _ as setDeaconIgnored, c as init_review_status, f as markWorkspaceStuck, g as setAutoMerge, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-gPndPUBc.js";
7
+ import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-543pQX9D.js";
8
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CCnqa5xK.js";
9
+ import { Mn as getAgentState, Rt as transitionIssueToInReview, U as spawnAgent, Z as listRunningAgents, gr as getAgentRuntimeStateSync, j as messageAgent, t as init_agents, vr as saveAgentRuntimeState } from "./agents-B5LfpLPv.js";
10
+ import { f as CostWriter, l as CostDoorLive } from "./service-V0sUK-OR.js";
11
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-BmdJU_w6.js";
12
+ import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CWFt6jjV.js";
13
+ import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-B_1YLWLI.js";
14
14
  import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-CE1m_daD.js";
15
- import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-CaLRt2cB.js";
16
- import { A as findVBriefByIssue, N as readVBriefDocument, b as init_types$1, c as mergeRecordStatusOverrides, j as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, y as VBRIEF_INSPECTION_POLICIES } from "./io-Wy8YpFeP.js";
17
- import { f as init_config, m as loadConfigSync$1 } from "./config-oWoKf5jO.js";
18
- import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-DL_BAWVk.js";
19
- import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-BJVh1TCg.js";
20
- import { o as criticalPath, t as actionableDoc, u as init_dag } from "./dag-jH8ZkewR.js";
21
- import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-BrVNWoSL.js";
22
- import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-DGWZzye2.js";
23
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CEWK-OXd.js";
24
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-DUJYYRQB.js";
25
- import { at as init_jsonl_parser, nt as getActiveSessionModelSync } from "./specialists-BYi0k8CZ.js";
15
+ import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-DHWbGtjR.js";
16
+ import { A as findVBriefByIssue, N as readVBriefDocument, b as init_types$1, c as mergeRecordStatusOverrides, j as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, y as VBRIEF_INSPECTION_POLICIES } from "./io-A7ZuOBkz.js";
17
+ import { f as init_config, m as loadConfigSync$1 } from "./config-8sjaU6jZ.js";
18
+ import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-DfJKBDwB.js";
19
+ import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-Qd7rPiVe.js";
20
+ import { o as criticalPath, t as actionableDoc, u as init_dag } from "./dag-Dv2r5bVD.js";
21
+ import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-e6oku4P5.js";
22
+ import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-BfiosVAn.js";
23
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-BJhW2sky.js";
24
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-CaYOG9JN.js";
25
+ import { at as init_jsonl_parser, nt as getActiveSessionModelSync } from "./specialists-DjHbwQ_p.js";
26
26
  import { n as restoreTrackedBeadsExport, t as init_beads_restore } from "./beads-restore-CMbDSB5R.js";
27
- import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-zTvWWHG_.js";
28
- import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-FMXgo3vK.js";
29
- import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-1eu1RvAT.js";
30
- import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-CGlcApSn.js";
31
- import { n as generateDailySummary, r as init_cli } from "./cli-CvK9xuSS.js";
32
- import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-CCq56O_Y.js";
33
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CJW_P4On.js";
34
- import { C as init_git_activity, S as init_operations, a as init_merge_agent, b as MainDivergedError, w as listGitOperationsSync, x as gitPush, y as syncMainIntoWorkspace } from "./merge-agent-BcgAYStl.js";
35
- import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-UlAwCk80.js";
36
- import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BhKvrPxn.js";
37
- import { n as runVerificationForIssue } from "./verification-runner-BPAhPWR7.js";
38
- import { t as teardownWorkspace } from "./teardown-workspace-5LCVbjfq.js";
39
- import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-BLG3rlWa.js";
27
+ import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-oX1pj6nY.js";
28
+ import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-BecAnXRX.js";
29
+ import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-QQmo_Z0l.js";
30
+ import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-qWvWckYN.js";
31
+ import { n as generateDailySummary, r as init_cli } from "./cli-B75AieAM.js";
32
+ import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-CErbQpKL.js";
33
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-C_1frSDj.js";
34
+ import { C as init_git_activity, S as init_operations, a as init_merge_agent, b as MainDivergedError, w as listGitOperationsSync, x as gitPush, y as syncMainIntoWorkspace } from "./merge-agent-CHHs5S_0.js";
35
+ import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-ZrXFM3jv.js";
36
+ import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BtB_o-Vi.js";
37
+ import { n as runVerificationForIssue } from "./verification-runner-CntudBes.js";
38
+ import { t as teardownWorkspace } from "./teardown-workspace-CWz1pbEK.js";
39
+ import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-KHkkrGjx.js";
40
+ import { basename, dirname, join, resolve, sep } from "node:path";
40
41
  import { Effect, Layer, Option } from "effect";
41
42
  import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
42
- import { basename, join } from "path";
43
+ import { basename as basename$1, join as join$1 } from "path";
43
44
  import { homedir } from "os";
44
45
  import { homedir as homedir$1, networkInterfaces } from "node:os";
45
46
  import { existsSync as existsSync$1, mkdirSync as mkdirSync$1, readFileSync as readFileSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
46
- import { basename as basename$1, dirname as dirname$1, join as join$1, resolve as resolve$1, sep as sep$1 } from "node:path";
47
47
  import { HttpRouter, HttpServerRequest } from "effect/unstable/http";
48
48
  import { access, chmod, mkdir, readFile, readdir, stat as stat$1, symlink, unlink, writeFile } from "node:fs/promises";
49
49
  import { readFile as readFile$1, readdir as readdir$1 } from "fs/promises";
@@ -57,9 +57,9 @@ init_issue_id();
57
57
  function getWorkspacePathForIssue(projectPath, rawIssueId) {
58
58
  const parsed = parseIssueIdSync(rawIssueId);
59
59
  if (!parsed) throw new Error("Invalid issue ID");
60
- const workspaceRoot = resolve$1(join$1(projectPath, "workspaces"));
61
- const workspacePath = resolve$1(join$1(workspaceRoot, `feature-${parsed.normalized}`));
62
- if (workspacePath !== workspaceRoot && !workspacePath.startsWith(`${workspaceRoot}${sep$1}`)) throw new Error("Invalid workspace path");
60
+ const workspaceRoot = resolve(join(projectPath, "workspaces"));
61
+ const workspacePath = resolve(join(workspaceRoot, `feature-${parsed.normalized}`));
62
+ if (workspacePath !== workspaceRoot && !workspacePath.startsWith(`${workspaceRoot}${sep}`)) throw new Error("Invalid workspace path");
63
63
  return {
64
64
  parsedIssueId: parsed.raw,
65
65
  workspacePath
@@ -334,7 +334,7 @@ init_agents();
334
334
  init_review_status();
335
335
  init_paths();
336
336
  init_activity_logger();
337
- const PENDING_FEEDBACK_FILE = join$1(getOverdeckHome(), "pending-feedback-deliveries.json");
337
+ const PENDING_FEEDBACK_FILE = join(getOverdeckHome(), "pending-feedback-deliveries.json");
338
338
  const STALE_THRESHOLD_MS = 10080 * 60 * 1e3;
339
339
  async function readStore(filePath) {
340
340
  if (!existsSync$1(filePath)) return { deliveries: [] };
@@ -348,7 +348,7 @@ async function readStore(filePath) {
348
348
  }
349
349
  }
350
350
  async function writeStore(filePath, store) {
351
- await mkdir(dirname$1(filePath), { recursive: true });
351
+ await mkdir(dirname(filePath), { recursive: true });
352
352
  await writeFile(filePath, JSON.stringify(store, null, 2), "utf-8");
353
353
  }
354
354
  function isDeliveryStillRelevant(delivery, status) {
@@ -468,7 +468,7 @@ function requireLogger(logger, prefix) {
468
468
  return logger ?? defaultLogger(prefix);
469
469
  }
470
470
  function getFlywayBaselineFile(seedFile) {
471
- return join$1(dirname$1(seedFile), "zzz-flyway-workspace-baseline.sql");
471
+ return join(dirname(seedFile), "zzz-flyway-workspace-baseline.sql");
472
472
  }
473
473
  function getSnapshotCommand(dbConfig) {
474
474
  if (dbConfig.snapshot_command) return dbConfig.snapshot_command;
@@ -535,7 +535,7 @@ async function repairFlywayIfNeeded$1(issueId, pgContainer, dbName, projectConfi
535
535
  repaired: false,
536
536
  message: "No seed_file configured, cannot locate Flyway baseline"
537
537
  };
538
- const flywayFile = getFlywayBaselineFile(join$1(projectConfig.path, seedRelPath));
538
+ const flywayFile = getFlywayBaselineFile(join(projectConfig.path, seedRelPath));
539
539
  if (!existsSync$1(flywayFile)) return {
540
540
  repaired: false,
541
541
  message: `Flyway baseline not found: ${flywayFile}`
@@ -547,7 +547,7 @@ async function repairFlywayIfNeeded$1(issueId, pgContainer, dbName, projectConfi
547
547
  });
548
548
  const migrationsRelPath = projectConfig.workspace?.database?.migrations?.path;
549
549
  if (migrationsRelPath) {
550
- const migrationsDir = join$1(workspacePath, migrationsRelPath);
550
+ const migrationsDir = join(workspacePath, migrationsRelPath);
551
551
  if (existsSync$1(migrationsDir)) {
552
552
  emit(`Syncing Flyway checksums from workspace migrations`);
553
553
  const migrationFiles = (await readdir(migrationsDir)).filter((f) => /^V\d+__.*\.sql$/.test(f));
@@ -555,7 +555,7 @@ async function repairFlywayIfNeeded$1(issueId, pgContainer, dbName, projectConfi
555
555
  for (const file of migrationFiles) {
556
556
  const version = file.match(/^V(\d+)__/)?.[1];
557
557
  if (!version) continue;
558
- let content = await readFile(join$1(migrationsDir, file));
558
+ let content = await readFile(join(migrationsDir, file));
559
559
  if (content[0] === 239 && content[1] === 187 && content[2] === 191) content = content.slice(3);
560
560
  const lines = content.toString("utf-8").split(/\r?\n/);
561
561
  const checksum = crc32(Buffer.from(lines.join(""), "utf-8")) | 0;
@@ -709,8 +709,8 @@ const flywayPostgresProvisioner = {
709
709
  async snapshot(ctx) {
710
710
  const logger = requireLogger(ctx.logger, "[db-snapshot]");
711
711
  if (!ctx.dbConfig.snapshot_command && !ctx.dbConfig.external_db) throw new DatabaseProvisionerError(`No snapshot configuration for project ${"key" in ctx.projectConfig ? String(ctx.projectConfig.key) : ctx.projectConfig.name}`);
712
- const outputPath = ctx.output || ctx.dbConfig.seed_file || join$1(ctx.projectConfig.path, "infra", "seed", "seed.sql");
713
- const outputDir = dirname$1(outputPath);
712
+ const outputPath = ctx.output || ctx.dbConfig.seed_file || join(ctx.projectConfig.path, "infra", "seed", "seed.sql");
713
+ const outputDir = dirname(outputPath);
714
714
  if (!existsSync$1(outputDir)) mkdirSync$1(outputDir, { recursive: true });
715
715
  logger.setText("Running snapshot command...");
716
716
  const snapshotCmd = getSnapshotCommand(ctx.dbConfig);
@@ -852,9 +852,9 @@ const postWorkspaceContainerizeRoute = HttpRouter.add("POST", "/api/workspaces/:
852
852
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
853
853
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
854
854
  const issueLower = issueId.toLowerCase();
855
- if (!existsSync$1(join$1(projectPath, "infra", "new-feature"))) return jsonResponse({ error: "Project does not support containerization (no infra/new-feature script)" }, { status: 400 });
856
- const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
857
- if (existsSync$1(join$1(workspacePath, ".devcontainer"))) return jsonResponse({ error: "Workspace is already containerized" }, { status: 400 });
855
+ if (!existsSync$1(join(projectPath, "infra", "new-feature"))) return jsonResponse({ error: "Project does not support containerization (no infra/new-feature script)" }, { status: 400 });
856
+ const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
857
+ if (existsSync$1(join(workspacePath, ".devcontainer"))) return jsonResponse({ error: "Workspace is already containerized" }, { status: 400 });
858
858
  try {
859
859
  yield* Effect.promise(() => execAsync$7("docker info >/dev/null 2>&1", { encoding: "utf-8" }));
860
860
  } catch {
@@ -871,7 +871,7 @@ const postWorkspaceContainerizeRoute = HttpRouter.add("POST", "/api/workspaces/:
871
871
  output: []
872
872
  });
873
873
  const child = spawn("./new-feature", [featureName], {
874
- cwd: join$1(projectPath, "infra"),
874
+ cwd: join(projectPath, "infra"),
875
875
  detached: true,
876
876
  stdio: [
877
877
  "ignore",
@@ -894,7 +894,7 @@ const postWorkspaceContainerizeRoute = HttpRouter.add("POST", "/api/workspaces/:
894
894
  if (code === 0) {
895
895
  appendActivityOutput(activityId, "");
896
896
  appendActivityOutput(activityId, "=== Starting containers ===");
897
- const workspaceDir = join$1(projectPath, "workspaces", `feature-${featureName}`);
897
+ const workspaceDir = join(projectPath, "workspaces", `feature-${featureName}`);
898
898
  const uid = process.getuid?.() ?? 1e3;
899
899
  const gid = process.getgid?.() ?? 1e3;
900
900
  const devUp = spawn("./dev", ["all"], {
@@ -955,15 +955,15 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
955
955
  ].includes(action)) return jsonResponse({ error: "Invalid action. Must be start, stop, or restart." }, { status: 400 });
956
956
  const teamPrefix = extractTeamPrefix(issueId);
957
957
  const containerProjectConfig = teamPrefix ? findProjectByTeamSync(teamPrefix) : null;
958
- const projectPaths = containerProjectConfig ? [join$1(containerProjectConfig.path, "workspaces", `feature-${issueId.toLowerCase()}`)] : listProjectsSync().map((p) => join$1(p.config.path, "workspaces", `feature-${issueId.toLowerCase()}`));
958
+ const projectPaths = containerProjectConfig ? [join(containerProjectConfig.path, "workspaces", `feature-${issueId.toLowerCase()}`)] : listProjectsSync().map((p) => join(p.config.path, "workspaces", `feature-${issueId.toLowerCase()}`));
959
959
  let workspacePath = null;
960
960
  let composeFile = null;
961
961
  for (const path of projectPaths) if (existsSync$1(path)) {
962
962
  workspacePath = path;
963
963
  const composePaths = [
964
- join$1(path, ".devcontainer/docker-compose.devcontainer.yml"),
965
- join$1(path, "docker-compose.yml"),
966
- join$1(path, "docker-compose.yaml")
964
+ join(path, ".devcontainer/docker-compose.devcontainer.yml"),
965
+ join(path, "docker-compose.yml"),
966
+ join(path, "docker-compose.yaml")
967
967
  ];
968
968
  for (const cp of composePaths) if (existsSync$1(cp)) {
969
969
  composeFile = cp;
@@ -973,15 +973,15 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
973
973
  }
974
974
  if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
975
975
  if (!composeFile && ["start", "restart"].includes(action)) {
976
- const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-BCB6fHp9.js"));
976
+ const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-CbSXvN9W.js"));
977
977
  if (ensureDevcontainerSync({
978
978
  workspacePath,
979
979
  issueId
980
980
  }).rendered) console.log(`[container-control] Re-rendered ${DEVCONTAINER_DIRNAME}/ from project template`);
981
981
  const composePaths = [
982
- join$1(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"),
983
- join$1(workspacePath, "docker-compose.yml"),
984
- join$1(workspacePath, "docker-compose.yaml")
982
+ join(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"),
983
+ join(workspacePath, "docker-compose.yml"),
984
+ join(workspacePath, "docker-compose.yaml")
985
985
  ];
986
986
  for (const cp of composePaths) if (existsSync$1(cp)) {
987
987
  composeFile = cp;
@@ -1056,7 +1056,7 @@ const postWorkspaceMemorySummaryRoute = HttpRouter.add("POST", "/api/workspaces/
1056
1056
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
1057
1057
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
1058
1058
  return jsonResponse(yield* Effect.promise(() => generateDailySummary({
1059
- projectId: basename$1(projectPath),
1059
+ projectId: basename(projectPath),
1060
1060
  issueId
1061
1061
  })));
1062
1062
  })));
@@ -1071,7 +1071,7 @@ const postWorkspaceRefreshDbRoute = HttpRouter.add("POST", "/api/workspaces/:iss
1071
1071
  if (!provisioner) return jsonResponse({ error: "No database configuration found in projects.yaml" }, { status: 400 });
1072
1072
  if (!dbConfig?.seed_file) return jsonResponse({ error: "No seed_file configured in projects.yaml database config" }, { status: 400 });
1073
1073
  const databaseName = requireDatabaseName(dbConfig);
1074
- const seedFile = join$1(projectConfig.path, dbConfig.seed_file);
1074
+ const seedFile = join(projectConfig.path, dbConfig.seed_file);
1075
1075
  if (!existsSync$1(seedFile)) return jsonResponse({ error: `Seed file not found: ${seedFile}` }, { status: 400 });
1076
1076
  try {
1077
1077
  provisioner.validateRefreshDatabase({ seedFile });
@@ -1081,12 +1081,12 @@ const postWorkspaceRefreshDbRoute = HttpRouter.add("POST", "/api/workspaces/:iss
1081
1081
  }
1082
1082
  const featureFolder = `feature-${issueId.toLowerCase()}`;
1083
1083
  const workspacesDir = projectConfig.workspace?.workspaces_dir || "workspaces";
1084
- const workspacePath = join$1(projectConfig.path, workspacesDir, featureFolder);
1084
+ const workspacePath = join(projectConfig.path, workspacesDir, featureFolder);
1085
1085
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: `Workspace not found: ${featureFolder}` }, { status: 404 });
1086
1086
  const composePaths = [
1087
- join$1(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"),
1088
- join$1(workspacePath, "docker-compose.yml"),
1089
- join$1(workspacePath, "docker-compose.yaml")
1087
+ join(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"),
1088
+ join(workspacePath, "docker-compose.yml"),
1089
+ join(workspacePath, "docker-compose.yaml")
1090
1090
  ];
1091
1091
  let composeFile = null;
1092
1092
  for (const cp of composePaths) if (existsSync$1(cp)) {
@@ -1285,10 +1285,10 @@ init_errors();
1285
1285
  const CACHE_VERSION = 3;
1286
1286
  const DEFAULT_RETENTION_DAYS = 90;
1287
1287
  function getCostsDir() {
1288
- return join(process.env.HOME || homedir(), ".overdeck", "costs");
1288
+ return join$1(process.env.HOME || homedir(), ".overdeck", "costs");
1289
1289
  }
1290
1290
  function getCacheFile() {
1291
- return join(getCostsDir(), "by-issue.json");
1291
+ return join$1(getCostsDir(), "by-issue.json");
1292
1292
  }
1293
1293
  /**
1294
1294
  * Load the cache from disk
@@ -1463,13 +1463,13 @@ init_events();
1463
1463
  init_cost();
1464
1464
  init_errors();
1465
1465
  function getAgentsDir$1() {
1466
- return join(process.env.HOME || homedir(), ".overdeck", "agents");
1466
+ return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
1467
1467
  }
1468
1468
  function getClaudeProjectsDir$1() {
1469
- return join(process.env.HOME || homedir(), ".claude", "projects");
1469
+ return join$1(process.env.HOME || homedir(), ".claude", "projects");
1470
1470
  }
1471
1471
  function getProjectsYamlPath() {
1472
- return join(process.env.HOME || homedir(), ".overdeck", "projects.yaml");
1472
+ return join$1(process.env.HOME || homedir(), ".overdeck", "projects.yaml");
1473
1473
  }
1474
1474
  /**
1475
1475
  * Infer issueId from agent directory name
@@ -1505,7 +1505,7 @@ function resolveWorkspace(issueId) {
1505
1505
  const issueLower = issueId.toLowerCase();
1506
1506
  const projectPaths = getProjectPaths();
1507
1507
  for (const projectPath of projectPaths) {
1508
- const wsPath = join(projectPath, "workspaces", `feature-${issueLower}`);
1508
+ const wsPath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
1509
1509
  if (existsSync(wsPath)) return wsPath;
1510
1510
  }
1511
1511
  return null;
@@ -1521,7 +1521,7 @@ function findSessionDirsByIssue(issueId) {
1521
1521
  try {
1522
1522
  const entries = readdirSync(claudeDir);
1523
1523
  for (const entry of entries) if (entry.includes(`feature-${issueLower}`)) {
1524
- const fullPath = join(claudeDir, entry);
1524
+ const fullPath = join$1(claudeDir, entry);
1525
1525
  dirs.push(fullPath);
1526
1526
  }
1527
1527
  } catch {}
@@ -1594,7 +1594,7 @@ function usageToCostEvents(usages, context) {
1594
1594
  */
1595
1595
  function getSessionDir(workspacePath) {
1596
1596
  const sessionDirName = encodeClaudeProjectDir(workspacePath);
1597
- const sessionDir = join(getClaudeProjectsDir$1(), sessionDirName);
1597
+ const sessionDir = join$1(getClaudeProjectsDir$1(), sessionDirName);
1598
1598
  if (existsSync(sessionDir)) return sessionDir;
1599
1599
  return null;
1600
1600
  }
@@ -1602,7 +1602,7 @@ function getSessionDir(workspacePath) {
1602
1602
  * Migrate a single agent's session data
1603
1603
  */
1604
1604
  function migrateAgent(agentDir, stats) {
1605
- const stateFile = join(getAgentsDir$1(), agentDir, "state.json");
1605
+ const stateFile = join$1(getAgentsDir$1(), agentDir, "state.json");
1606
1606
  if (!existsSync(stateFile)) {
1607
1607
  stats.warnings.push({
1608
1608
  file: stateFile,
@@ -1648,7 +1648,7 @@ function migrateAgent(agentDir, stats) {
1648
1648
  try {
1649
1649
  const files = readdirSync(sessionDir).filter((f) => f.endsWith(".jsonl"));
1650
1650
  for (const file of files) {
1651
- const filePath = join(sessionDir, file);
1651
+ const filePath = join$1(sessionDir, file);
1652
1652
  try {
1653
1653
  const events = usageToCostEvents(parseSessionFile(filePath), context);
1654
1654
  for (const event of events) {
@@ -1671,11 +1671,11 @@ function migrateAgent(agentDir, stats) {
1671
1671
  error: `Failed to read session directory: ${err}`
1672
1672
  });
1673
1673
  }
1674
- const subagentsDir = join(sessionDir, "subagents");
1674
+ const subagentsDir = join$1(sessionDir, "subagents");
1675
1675
  if (existsSync(subagentsDir)) try {
1676
1676
  const subagentFiles = readdirSync(subagentsDir).filter((f) => f.endsWith(".jsonl"));
1677
1677
  for (const file of subagentFiles) {
1678
- const filePath = join(subagentsDir, file);
1678
+ const filePath = join$1(subagentsDir, file);
1679
1679
  try {
1680
1680
  const events = usageToCostEvents(parseSessionFile(filePath), {
1681
1681
  ...context,
@@ -1815,17 +1815,17 @@ function piProviderToAiProvider(provider) {
1815
1815
  return "custom";
1816
1816
  }
1817
1817
  function getAgentsDir() {
1818
- return join(process.env.HOME || homedir(), ".overdeck", "agents");
1818
+ return join$1(process.env.HOME || homedir(), ".overdeck", "agents");
1819
1819
  }
1820
1820
  function getClaudeProjectsDir() {
1821
- return join(process.env.HOME || homedir(), ".claude", "projects");
1821
+ return join$1(process.env.HOME || homedir(), ".claude", "projects");
1822
1822
  }
1823
1823
  /**
1824
1824
  * Extract session UUID from a transcript filename.
1825
1825
  * e.g., "678c8d8d-cefe-45ca-bebc-bafe602aff93.jsonl" → "678c8d8d-cefe-45ca-bebc-bafe602aff93"
1826
1826
  */
1827
1827
  function extractSessionId(filename) {
1828
- return basename(filename, ".jsonl");
1828
+ return basename$1(filename, ".jsonl");
1829
1829
  }
1830
1830
  function resolveUnmappedSessionIssueId(input, lookup = findConversationForCostSessionSync) {
1831
1831
  return classifySessionBucket(input, lookup);
@@ -1854,13 +1854,13 @@ function buildSessionIndex() {
1854
1854
  return index;
1855
1855
  }
1856
1856
  for (const agentDir of entries) {
1857
- const agentPath = join(agentsDir, agentDir);
1858
- const sessionsFile = join(agentPath, "sessions.json");
1857
+ const agentPath = join$1(agentsDir, agentDir);
1858
+ const sessionsFile = join$1(agentPath, "sessions.json");
1859
1859
  let sessionIds = [];
1860
1860
  if (existsSync(sessionsFile)) try {
1861
1861
  sessionIds = JSON.parse(readFileSync(sessionsFile, "utf-8"));
1862
1862
  } catch {}
1863
- const stateFile = join(agentPath, "state.json");
1863
+ const stateFile = join$1(agentPath, "state.json");
1864
1864
  let issueId = inferIssueId(agentDir);
1865
1865
  let stateRole;
1866
1866
  if (existsSync(stateFile)) try {
@@ -2065,7 +2065,7 @@ function findPiTranscriptFiles(agentDir) {
2065
2065
  const transcripts = [];
2066
2066
  for (const f of files) {
2067
2067
  if (f === "activity.jsonl" || f === "cost-events.jsonl" || f === "pending-events.jsonl") continue;
2068
- const full = join(agentDir, f);
2068
+ const full = join$1(agentDir, f);
2069
2069
  try {
2070
2070
  const fd = openSync(full, "r");
2071
2071
  const buf = Buffer.alloc(128);
@@ -2103,10 +2103,10 @@ async function reconcilePiTranscripts() {
2103
2103
  return result;
2104
2104
  }
2105
2105
  for (const agentDirName of agentDirs) {
2106
- const agentPath = join(agentsDir, agentDirName);
2106
+ const agentPath = join$1(agentsDir, agentDirName);
2107
2107
  let issueId = inferIssueId(agentDirName);
2108
2108
  let sessionType = "work";
2109
- const stateFile = join(agentPath, "state.json");
2109
+ const stateFile = join$1(agentPath, "state.json");
2110
2110
  if (existsSync(stateFile)) try {
2111
2111
  const st = JSON.parse(readFileSync(stateFile, "utf-8"));
2112
2112
  if (st.issueId) issueId = st.issueId;
@@ -2115,7 +2115,7 @@ async function reconcilePiTranscripts() {
2115
2115
  if (agentDirName.startsWith("planning-")) sessionType = "planning";
2116
2116
  const transcripts = findPiTranscriptFiles(agentPath);
2117
2117
  for (const transcriptPath of transcripts) {
2118
- const sessionId = basename(transcriptPath, ".jsonl");
2118
+ const sessionId = basename$1(transcriptPath, ".jsonl");
2119
2119
  const resolvedIssueId = issueId ?? resolveUnmappedSessionIssueId({
2120
2120
  sessionId,
2121
2121
  agentId: agentDirName
@@ -2202,7 +2202,7 @@ async function reconcilePromise(opts = {}) {
2202
2202
  return result;
2203
2203
  }
2204
2204
  for (const dirName of projectDirs) {
2205
- const projectDir = join(claudeProjectsDir, dirName);
2205
+ const projectDir = join$1(claudeProjectsDir, dirName);
2206
2206
  try {
2207
2207
  fstatSync(openSync(projectDir, "r"));
2208
2208
  } catch {}
@@ -2215,7 +2215,7 @@ async function reconcilePromise(opts = {}) {
2215
2215
  }
2216
2216
  for (const file of files) {
2217
2217
  const sessionId = extractSessionId(file);
2218
- const transcriptPath = join(projectDir, file);
2218
+ const transcriptPath = join$1(projectDir, file);
2219
2219
  result.sessionsScanned++;
2220
2220
  try {
2221
2221
  const mapping = sessionIndex.get(sessionId);
@@ -2252,12 +2252,12 @@ async function reconcilePromise(opts = {}) {
2252
2252
  });
2253
2253
  }
2254
2254
  }
2255
- const subagentsDir = join(projectDir, "subagents");
2255
+ const subagentsDir = join$1(projectDir, "subagents");
2256
2256
  if (existsSync(subagentsDir)) try {
2257
2257
  const subFiles = readdirSync(subagentsDir).filter((f) => f.endsWith(".jsonl"));
2258
2258
  for (const file of subFiles) {
2259
2259
  const sessionId = `sub-${extractSessionId(file)}`;
2260
- const transcriptPath = join(subagentsDir, file);
2260
+ const transcriptPath = join$1(subagentsDir, file);
2261
2261
  result.sessionsScanned++;
2262
2262
  try {
2263
2263
  const mapping = sessionIndex.get(sessionId);
@@ -2342,7 +2342,7 @@ async function syncWalFromAllProjectsPromise() {
2342
2342
  };
2343
2343
  const projects = listProjectsSync();
2344
2344
  for (const { key, config } of projects) {
2345
- const eventsDir = join(config.events_repo ?? config.path, config.events_path ?? DEFAULT_EVENTS_SUBDIR);
2345
+ const eventsDir = join$1(config.events_repo ?? config.path, config.events_path ?? DEFAULT_EVENTS_SUBDIR);
2346
2346
  if (!existsSync(eventsDir)) continue;
2347
2347
  const projectStats = {
2348
2348
  imported: 0,
@@ -2357,7 +2357,7 @@ async function syncWalFromAllProjectsPromise() {
2357
2357
  continue;
2358
2358
  }
2359
2359
  for (const file of files) {
2360
- const filePath = join(eventsDir, file);
2360
+ const filePath = join$1(eventsDir, file);
2361
2361
  const events = await parseWalFile(filePath, result.errors);
2362
2362
  if (events.length === 0) continue;
2363
2363
  try {
@@ -2593,7 +2593,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2593
2593
  const prRef = parseGitHubPullRequestUrl(status.prUrl);
2594
2594
  if (!prRef) return false;
2595
2595
  try {
2596
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
2596
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C7lftMNj.js");
2597
2597
  if (!isGitHubAppConfigured()) return false;
2598
2598
  const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
2599
2599
  console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
@@ -2612,7 +2612,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
2612
2612
  }
2613
2613
  async function readBeadsFromJsonl(workspacePath, issueId) {
2614
2614
  try {
2615
- const jsonlPath = join$1(workspacePath, ".beads", "issues.jsonl");
2615
+ const jsonlPath = join(workspacePath, ".beads", "issues.jsonl");
2616
2616
  if (!existsSync$1(jsonlPath)) return [];
2617
2617
  const raw = await readFile(jsonlPath, "utf-8");
2618
2618
  const issueLower = issueId.toLowerCase();
@@ -2766,7 +2766,7 @@ const postWorkspaceSyncMainRoute = HttpRouter.add("POST", "/api/issues/:issueId/
2766
2766
  success: false,
2767
2767
  error: "Sync with Main is not supported for remote workspaces"
2768
2768
  }, { status: 400 });
2769
- const workspacePath = workspaceInfo.localPath || join$1(projectPath, "workspaces", `feature-${issueLower}`);
2769
+ const workspacePath = workspaceInfo.localPath || join(projectPath, "workspaces", `feature-${issueLower}`);
2770
2770
  if (!existsSync$1(workspacePath)) return jsonResponse({
2771
2771
  success: false,
2772
2772
  error: "Workspace does not exist"
@@ -2851,8 +2851,8 @@ async function triggerMerge(issueId) {
2851
2851
  enqueueMerge(projectKey, normalizedId);
2852
2852
  markMergeProcessing(projectKey, normalizedId);
2853
2853
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
2854
- const workspacePath = !workspaceInfo.isRemote && workspaceInfo.localPath ? workspaceInfo.localPath : join$1(projectPath, "workspaces", `feature-${issueLower}`);
2855
- const workspaceDirName = basename$1(workspacePath);
2854
+ const workspacePath = !workspaceInfo.isRemote && workspaceInfo.localPath ? workspaceInfo.localPath : join(projectPath, "workspaces", `feature-${issueLower}`);
2855
+ const workspaceDirName = basename(workspacePath);
2856
2856
  const branchName = workspaceDirName.startsWith("feature-") ? `feature/${workspaceDirName.slice(8)}` : `feature/${issueLower}`;
2857
2857
  setReviewStatus(issueId, {
2858
2858
  mergeStatus: "merging",
@@ -2871,8 +2871,8 @@ async function triggerMerge(issueId) {
2871
2871
  try {
2872
2872
  if (workspaceInfo.isRemote && workspaceInfo.vmName) {
2873
2873
  console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
2874
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-rXK3ehnB.js");
2875
- const { getForgeAdapter } = await import("./forge-BfP7OJwK.js");
2874
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-D-iXNP0I.js");
2875
+ const { getForgeAdapter } = await import("./forge-IgLR0Ist.js");
2876
2876
  const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
2877
2877
  const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
2878
2878
  const remoteForge = remotePrimaryRepo?.forge || "github";
@@ -2907,7 +2907,7 @@ async function triggerMerge(issueId) {
2907
2907
  readyForMerge: false
2908
2908
  });
2909
2909
  completePendingOperation(issueId, null);
2910
- const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
2910
+ const { postMergeLifecycle } = await import("./merge-agent-CfohxFWM.js");
2911
2911
  await postMergeLifecycle(issueId, projectPath);
2912
2912
  return {
2913
2913
  success: true,
@@ -2944,10 +2944,10 @@ async function triggerMerge(issueId) {
2944
2944
  const projectConfig = findProjectByTeamSync(issuePrefix);
2945
2945
  if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
2946
2946
  console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
2947
- const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-rXK3ehnB.js");
2948
- const { runQualityGates } = await import("./validation-CbqP_dze.js");
2949
- const { getForgeAdapter } = await import("./forge-BfP7OJwK.js");
2950
- const { messageAgent } = await import("./agents-BIggLvi_.js");
2947
+ const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-D-iXNP0I.js");
2948
+ const { runQualityGates } = await import("./validation-B0QaLIHP.js");
2949
+ const { getForgeAdapter } = await import("./forge-IgLR0Ist.js");
2950
+ const { messageAgent } = await import("./agents-C4kZ8a2r.js");
2951
2951
  let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
2952
2952
  if (!mergeSet) {
2953
2953
  const error = `No merge set found for ${issueId}`;
@@ -2989,8 +2989,8 @@ async function triggerMerge(issueId) {
2989
2989
  const repoHeadsBefore = /* @__PURE__ */ new Map();
2990
2990
  const alreadyRebased = /* @__PURE__ */ new Set();
2991
2991
  for (const repo of activeRepos) {
2992
- const repoWorkspacePath = join$1(workspacePath, repo.repoKey);
2993
- if (!existsSync$1(repoWorkspacePath) || !existsSync$1(join$1(repoWorkspacePath, ".git"))) {
2992
+ const repoWorkspacePath = join(workspacePath, repo.repoKey);
2993
+ if (!existsSync$1(repoWorkspacePath) || !existsSync$1(join(repoWorkspacePath, ".git"))) {
2994
2994
  const error = `Workspace repo ${repo.repoKey} is missing`;
2995
2995
  mergeResults.push({
2996
2996
  repo: repo.repoKey,
@@ -3063,7 +3063,7 @@ async function triggerMerge(issueId) {
3063
3063
  await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
3064
3064
  for (const repo of activeRepos) {
3065
3065
  if (pushedRepos.has(repo.repoKey)) continue;
3066
- const repoWorkspacePath = join$1(workspacePath, repo.repoKey);
3066
+ const repoWorkspacePath = join(workspacePath, repo.repoKey);
3067
3067
  try {
3068
3068
  await execAsync$5("git fetch origin", {
3069
3069
  cwd: repoWorkspacePath,
@@ -3105,16 +3105,16 @@ async function triggerMerge(issueId) {
3105
3105
  mergeStatus: "verifying",
3106
3106
  mergeNotes: void 0
3107
3107
  });
3108
- const featureFolder = basename$1(workspacePath);
3108
+ const featureFolder = basename(workspacePath);
3109
3109
  const gatePlaceholders = {
3110
3110
  FEATURE_NAME: featureFolder.replace(/^feature-/, ""),
3111
3111
  FEATURE_FOLDER: featureFolder,
3112
3112
  BRANCH_NAME: `feature/${featureFolder.replace(/^feature-/, "")}`,
3113
- COMPOSE_PROJECT: `${basename$1(projectPath)}-${featureFolder}`,
3113
+ COMPOSE_PROJECT: `${basename(projectPath)}-${featureFolder}`,
3114
3114
  DOMAIN: projectConfig?.workspace?.dns?.domain || "localhost",
3115
- PROJECT_NAME: basename$1(projectPath),
3115
+ PROJECT_NAME: basename(projectPath),
3116
3116
  PROJECT_PATH: projectPath,
3117
- PROJECTS_DIR: dirname$1(projectPath),
3117
+ PROJECTS_DIR: dirname(projectPath),
3118
3118
  WORKSPACE_PATH: workspacePath
3119
3119
  };
3120
3120
  for (const repo of activeRepos) {
@@ -3153,7 +3153,7 @@ async function triggerMerge(issueId) {
3153
3153
  }
3154
3154
  setReviewStatus(issueId, { mergeStatus: "merging" });
3155
3155
  for (const repo of activeRepos) {
3156
- const repoWorkspacePath = join$1(workspacePath, repo.repoKey);
3156
+ const repoWorkspacePath = join(workspacePath, repo.repoKey);
3157
3157
  try {
3158
3158
  mergeSet = withRepoStateSync(mergeSet, repo.repoKey, { mergeStatus: "merging" });
3159
3159
  upsertMergeSetSync(mergeSet);
@@ -3217,7 +3217,7 @@ async function triggerMerge(issueId) {
3217
3217
  readyForMerge: false
3218
3218
  });
3219
3219
  completePendingOperation(issueId, null);
3220
- const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
3220
+ const { postMergeLifecycle } = await import("./merge-agent-CfohxFWM.js");
3221
3221
  advanceQueue();
3222
3222
  await postMergeLifecycle(issueId, projectPath);
3223
3223
  return {
@@ -3228,8 +3228,8 @@ async function triggerMerge(issueId) {
3228
3228
  repos: mergeResults
3229
3229
  };
3230
3230
  }
3231
- const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-rXK3ehnB.js");
3232
- const { getForgeAdapter } = await import("./forge-BfP7OJwK.js");
3231
+ const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-D-iXNP0I.js");
3232
+ const { getForgeAdapter } = await import("./forge-IgLR0Ist.js");
3233
3233
  const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
3234
3234
  const targetBranch = primaryRepo?.targetBranch || "main";
3235
3235
  const primaryForge = primaryRepo?.forge || "github";
@@ -3271,7 +3271,7 @@ async function triggerMerge(issueId) {
3271
3271
  };
3272
3272
  }
3273
3273
  if (githubPrRef) try {
3274
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
3274
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C7lftMNj.js");
3275
3275
  if (isGitHubAppConfigured()) {
3276
3276
  const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
3277
3277
  if (prState.state !== "OPEN" && !prState.merged) {
@@ -3332,7 +3332,7 @@ async function triggerMerge(issueId) {
3332
3332
  readyForMerge: false
3333
3333
  });
3334
3334
  completePendingOperation(issueId, null);
3335
- const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
3335
+ const { postMergeLifecycle } = await import("./merge-agent-CfohxFWM.js");
3336
3336
  await postMergeLifecycle(issueId, projectPath, branchName);
3337
3337
  return {
3338
3338
  success: true,
@@ -3346,7 +3346,7 @@ async function triggerMerge(issueId) {
3346
3346
  } catch (prStateErr) {
3347
3347
  console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
3348
3348
  }
3349
- const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
3349
+ const { postMergeLifecycle } = await import("./merge-agent-CfohxFWM.js");
3350
3350
  const agentId = `agent-${issueId.toLowerCase()}`;
3351
3351
  const rebaseMsg = `MERGE REQUESTED: The human has clicked MERGE for ${issueId}. Please rebase onto ${targetBranch} and push:\n\n1. git fetch origin ${targetBranch}\n2. git rebase origin/${targetBranch}\n3. If conflicts: resolve them, git add, git rebase --continue\n4. git push --force-with-lease\n\nAfter pushing, the server will handle verification and merge automatically. Do NOT run gh pr merge yourself.`;
3352
3352
  setReviewStatus(issueId, { mergeStep: "rebasing" });
@@ -3480,7 +3480,7 @@ async function triggerMerge(issueId) {
3480
3480
  });
3481
3481
  let skipLocalVerification = false;
3482
3482
  if (primaryForge === "github" && artifactUrl) try {
3483
- const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
3483
+ const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-C7lftMNj.js");
3484
3484
  if (isGitHubAppConfigured()) {
3485
3485
  const ref = parsePullRequestRef({ url: artifactUrl });
3486
3486
  if (ref) {
@@ -3506,7 +3506,7 @@ async function triggerMerge(issueId) {
3506
3506
  const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
3507
3507
  console.log(`[merge] Running post-rebase verification for ${issueId}...`);
3508
3508
  appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
3509
- const { runVerificationForIssue } = await import("./verification-runner-DuZRHjPU.js");
3509
+ const { runVerificationForIssue } = await import("./verification-runner-DdleMNLq.js");
3510
3510
  return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
3511
3511
  syncTargetBranch: false,
3512
3512
  onGateLog: (line) => appendShipLog(issueId, line, "verifying")
@@ -3539,7 +3539,7 @@ async function triggerMerge(issueId) {
3539
3539
  console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
3540
3540
  setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
3541
3541
  try {
3542
- const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-B5PDHMyn.js");
3542
+ const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-C7lftMNj.js");
3543
3543
  if (githubPrRef && isGitHubAppConfigured()) {
3544
3544
  const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
3545
3545
  if (sha) {
@@ -3567,7 +3567,7 @@ async function triggerMerge(issueId) {
3567
3567
  } catch (prMergeErr) {
3568
3568
  console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
3569
3569
  try {
3570
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
3570
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C7lftMNj.js");
3571
3571
  if (githubPrRef && isGitHubAppConfigured()) {
3572
3572
  artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
3573
3573
  if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
@@ -3684,8 +3684,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
3684
3684
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3685
3685
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3686
3686
  return yield* Effect.promise(async () => {
3687
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-rXK3ehnB.js");
3688
- const { getForgeAdapter } = await import("./forge-BfP7OJwK.js");
3687
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-D-iXNP0I.js");
3688
+ const { getForgeAdapter } = await import("./forge-IgLR0Ist.js");
3689
3689
  let mergeSet = getMergeSetSync(issueId);
3690
3690
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3691
3691
  const results = [];
@@ -3698,7 +3698,7 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
3698
3698
  continue;
3699
3699
  }
3700
3700
  const adapter = getForgeAdapter(repo.forge);
3701
- const workspacePath = mergeSet.workspaceType === "polyrepo" ? join$1(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`, repo.repoKey) : join$1(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
3701
+ const workspacePath = mergeSet.workspaceType === "polyrepo" ? join(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`, repo.repoKey) : join(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
3702
3702
  let artifactUrl = repo.artifactUrl;
3703
3703
  let artifactId = repo.artifactId;
3704
3704
  if (!artifactUrl && !artifactId) try {
@@ -3773,8 +3773,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
3773
3773
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
3774
3774
  if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
3775
3775
  return yield* Effect.promise(async () => {
3776
- const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-rXK3ehnB.js");
3777
- const { getForgeAdapter } = await import("./forge-BfP7OJwK.js");
3776
+ const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-D-iXNP0I.js");
3777
+ const { getForgeAdapter } = await import("./forge-IgLR0Ist.js");
3778
3778
  let mergeSet = getMergeSetSync(issueId);
3779
3779
  if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
3780
3780
  const results = [];
@@ -3787,7 +3787,7 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
3787
3787
  continue;
3788
3788
  }
3789
3789
  const adapter = getForgeAdapter(repo.forge);
3790
- const workspacePath = mergeSet.workspaceType === "polyrepo" ? join$1(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`, repo.repoKey) : join$1(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
3790
+ const workspacePath = mergeSet.workspaceType === "polyrepo" ? join(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`, repo.repoKey) : join(mergeSet.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
3791
3791
  let artifactUrl = repo.artifactUrl;
3792
3792
  let artifactId = repo.artifactId;
3793
3793
  if (!artifactUrl && !artifactId) try {
@@ -3884,7 +3884,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
3884
3884
  return yield* Effect.promise(async () => {
3885
3885
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
3886
3886
  const issueLower = issueId.toLowerCase();
3887
- const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
3887
+ const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
3888
3888
  const branchName = `feature/${issueLower}`;
3889
3889
  setPendingOperation(issueId, "approve");
3890
3890
  if (!existsSync$1(workspacePath)) {
@@ -3967,7 +3967,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
3967
3967
  console.log(`[approve] Starting role pipeline for ${issueId}...`);
3968
3968
  let reviewResult;
3969
3969
  try {
3970
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
3970
+ const { spawnReviewRoleForIssue } = await import("./review-agent-uwVftH98.js");
3971
3971
  reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
3972
3972
  issueId,
3973
3973
  workspace: workspacePath,
@@ -4014,8 +4014,8 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4014
4014
  }
4015
4015
  console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
4016
4016
  try {
4017
- const { rebaseFeatureBranch } = await import("./merge-rebase-CH12_ufi.js");
4018
- const workspacePathForRebase = join$1(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4017
+ const { rebaseFeatureBranch } = await import("./merge-rebase-R7MfqpiE.js");
4018
+ const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4019
4019
  const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
4020
4020
  if (!rebaseResult.success) {
4021
4021
  const conflictDetail = rebaseResult.conflictFiles?.length ? `\nConflict files: ${rebaseResult.conflictFiles.join(", ")}` : "";
@@ -4034,7 +4034,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
4034
4034
  completePendingOperation(issueId, pushResult.error);
4035
4035
  return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
4036
4036
  }
4037
- const { approve: lifecycleApprove } = await import("./lifecycle-CGKm7doE.js");
4037
+ const { approve: lifecycleApprove } = await import("./lifecycle-f1GbDK33.js");
4038
4038
  const ghResolved = resolveGitHubIssueSync(issueId);
4039
4039
  const isGitHubIssueFlag = ghResolved.isGitHub;
4040
4040
  const lifecycleCtx = {
@@ -4068,7 +4068,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
4068
4068
  })));
4069
4069
  const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
4070
4070
  const request = yield* HttpServerRequest.HttpServerRequest;
4071
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-DrGdpLFo.js"));
4071
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-nobT6FhA.js"));
4072
4072
  const expected = getInternalTokenSync();
4073
4073
  if (!expected) return jsonResponse({
4074
4074
  ok: false,
@@ -4082,7 +4082,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
4082
4082
  }, 403);
4083
4083
  const event = yield* readJsonBody;
4084
4084
  const type = event.type;
4085
- const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-lwMa--Gz.js"));
4085
+ const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-BtYHbBPl.js"));
4086
4086
  switch (type) {
4087
4087
  case "status_changed": {
4088
4088
  const issueId = event.issueId;
@@ -4327,11 +4327,11 @@ async function getMrUrlAsync(issueId, workspacePath) {
4327
4327
  }
4328
4328
  }
4329
4329
  async function getIndexStats(workspacePath) {
4330
- const tldrPath = join$1(workspacePath, ".tldr");
4330
+ const tldrPath = join(workspacePath, ".tldr");
4331
4331
  if (!await access(tldrPath).then(() => true, () => false)) return {};
4332
4332
  try {
4333
4333
  let indexAge;
4334
- const langContent = await readFile(join$1(tldrPath, "languages.json"), "utf-8").catch(() => null);
4334
+ const langContent = await readFile(join(tldrPath, "languages.json"), "utf-8").catch(() => null);
4335
4335
  if (langContent) {
4336
4336
  const langData = JSON.parse(langContent);
4337
4337
  if (langData.timestamp) {
@@ -4348,7 +4348,7 @@ async function getIndexStats(workspacePath) {
4348
4348
  }
4349
4349
  let fileCount;
4350
4350
  let edgeCount;
4351
- const cgContent = await readFile(join$1(tldrPath, "cache", "call_graph.json"), "utf-8").catch(() => null);
4351
+ const cgContent = await readFile(join(tldrPath, "cache", "call_graph.json"), "utf-8").catch(() => null);
4352
4352
  if (cgContent) {
4353
4353
  const cg = JSON.parse(cgContent);
4354
4354
  edgeCount = Array.isArray(cg.edges) ? cg.edges.length : void 0;
@@ -4373,7 +4373,7 @@ async function getIndexStats(workspacePath) {
4373
4373
  }
4374
4374
  function resolvePlanLocation(projectPath, issueId) {
4375
4375
  return Effect.gen(function* () {
4376
- const workspacePath = join$1(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4376
+ const workspacePath = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
4377
4377
  const found = yield* findVBriefByIssue(projectPath, issueId);
4378
4378
  if (found) {
4379
4379
  const doc = yield* readVBriefDocument(found.path);
@@ -4512,7 +4512,7 @@ const getWorkspaceStackHealthBatchRoute = HttpRouter.add("GET", "/api/workspace-
4512
4512
  issueId: normalizedIssueId
4513
4513
  }
4514
4514
  };
4515
- const workspacePath = join$1(resolved.projectPath, projectConfig.workspace?.workspaces_dir ?? "workspaces", `feature-${parsed.normalized}`);
4515
+ const workspacePath = join(resolved.projectPath, projectConfig.workspace?.workspaces_dir ?? "workspaces", `feature-${parsed.normalized}`);
4516
4516
  if (!existsSync$1(workspacePath)) return {
4517
4517
  kind: "response",
4518
4518
  normalizedIssueId,
@@ -4571,17 +4571,17 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
4571
4571
  location: "remote",
4572
4572
  message: `Workspace is on remote Fly machine: ${workspaceInfo.vmName}`
4573
4573
  });
4574
- const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
4574
+ const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
4575
4575
  if (!existsSync$1(workspacePath)) return jsonResponse({
4576
4576
  exists: false,
4577
4577
  issueId
4578
4578
  });
4579
- const gitFile = join$1(workspacePath, ".git");
4580
- const apiGit = join$1(workspacePath, "api", ".git");
4581
- const feGit = join$1(workspacePath, "fe", ".git");
4582
- const srcGit = join$1(workspacePath, "src", ".git");
4583
- const devcontainer = join$1(workspacePath, ".devcontainer");
4584
- const claudeMd = join$1(workspacePath, "CLAUDE.md");
4579
+ const gitFile = join(workspacePath, ".git");
4580
+ const apiGit = join(workspacePath, "api", ".git");
4581
+ const feGit = join(workspacePath, "fe", ".git");
4582
+ const srcGit = join(workspacePath, "src", ".git");
4583
+ const devcontainer = join(workspacePath, ".devcontainer");
4584
+ const claudeMd = join(workspacePath, "CLAUDE.md");
4585
4585
  if (!(existsSync$1(gitFile) || existsSync$1(apiGit) || existsSync$1(feGit) || existsSync$1(srcGit) || existsSync$1(devcontainer) || existsSync$1(claudeMd))) return jsonResponse({
4586
4586
  exists: true,
4587
4587
  corrupted: true,
@@ -4601,9 +4601,9 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
4601
4601
  if (entries[1]) apiUrl = `https://${entries[1].replace("{{FEATURE_FOLDER}}", featureFolder).replace("{{DOMAIN}}", dnsDomain)}`;
4602
4602
  }
4603
4603
  let services = [];
4604
- const panContinueFile = join$1(workspacePath, PAN_DIRNAME, PAN_CONTINUE_FILENAME);
4605
- const workspaceMd = join$1(workspacePath, "WORKSPACE.md");
4606
- const dockerCompose = join$1(workspacePath, "docker-compose.yml");
4604
+ const panContinueFile = join(workspacePath, PAN_DIRNAME, PAN_CONTINUE_FILENAME);
4605
+ const workspaceMd = join(workspacePath, "WORKSPACE.md");
4606
+ const dockerCompose = join(workspacePath, "docker-compose.yml");
4607
4607
  const urlSourceFile = existsSync$1(panContinueFile) ? panContinueFile : existsSync$1(workspaceMd) ? workspaceMd : null;
4608
4608
  if (urlSourceFile) try {
4609
4609
  const urlMatches = (yield* Effect.promise(() => readFile(urlSourceFile, "utf-8"))).matchAll(/(\w+):\s*(https?:\/\/[^\s\n]+)/gi);
@@ -4619,11 +4619,11 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
4619
4619
  name: "API",
4620
4620
  url: apiUrl
4621
4621
  }];
4622
- const devcontainerPath = join$1(workspacePath, ".devcontainer");
4623
- let hasDocker = existsSync$1(dockerCompose) || existsSync$1(join$1(workspacePath, "compose.yaml")) || existsSync$1(join$1(devcontainerPath, "docker-compose.yml")) || existsSync$1(join$1(devcontainerPath, "docker-compose.devcontainer.yml")) || existsSync$1(join$1(devcontainerPath, "compose.yaml")) || existsSync$1(join$1(devcontainerPath, "compose.infra.yml")) || existsSync$1(devcontainerPath);
4622
+ const devcontainerPath = join(workspacePath, ".devcontainer");
4623
+ let hasDocker = existsSync$1(dockerCompose) || existsSync$1(join(workspacePath, "compose.yaml")) || existsSync$1(join(devcontainerPath, "docker-compose.yml")) || existsSync$1(join(devcontainerPath, "docker-compose.devcontainer.yml")) || existsSync$1(join(devcontainerPath, "compose.yaml")) || existsSync$1(join(devcontainerPath, "compose.infra.yml")) || existsSync$1(devcontainerPath);
4624
4624
  if (!hasDocker && projectConfig?.workspace?.repos) for (const repo of projectConfig.workspace.repos) {
4625
- const repoPath = join$1(workspacePath, repo.path);
4626
- if (existsSync$1(join$1(repoPath, "docker-compose.yml")) || existsSync$1(join$1(repoPath, "docker-compose.yaml")) || existsSync$1(join$1(repoPath, "compose.yaml"))) {
4625
+ const repoPath = join(workspacePath, repo.path);
4626
+ if (existsSync$1(join(repoPath, "docker-compose.yml")) || existsSync$1(join(repoPath, "docker-compose.yaml")) || existsSync$1(join(repoPath, "compose.yaml"))) {
4627
4627
  hasDocker = true;
4628
4628
  break;
4629
4629
  }
@@ -4827,8 +4827,8 @@ const getWorkspaceTldrRoute = HttpRouter.add("GET", "/api/workspaces/:issueId/tl
4827
4827
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
4828
4828
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
4829
4829
  return yield* Effect.promise(async () => {
4830
- const workspacePath = join$1(process.cwd(), "workspaces", `feature-${issueId.toLowerCase()}`);
4831
- const venvPath = join$1(workspacePath, ".venv");
4830
+ const workspacePath = join(process.cwd(), "workspaces", `feature-${issueId.toLowerCase()}`);
4831
+ const venvPath = join(workspacePath, ".venv");
4832
4832
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
4833
4833
  if (!existsSync$1(venvPath)) return jsonResponse({
4834
4834
  available: false,
@@ -4857,7 +4857,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
4857
4857
  if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
4858
4858
  const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
4859
4859
  if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
4860
- yield* Effect.promise(() => import("./record-DjPikotp.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
4860
+ yield* Effect.promise(() => import("./record-De2syxNB.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
4861
4861
  const projectPath = project.path;
4862
4862
  const location = yield* resolvePlanLocation(projectPath, issueId);
4863
4863
  if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
@@ -4964,7 +4964,7 @@ const getWorkspaceCleanPreviewRoute = HttpRouter.add("GET", "/api/workspaces/:is
4964
4964
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
4965
4965
  const issueLower = issueId.toLowerCase();
4966
4966
  const workspaceName = `feature-${issueLower}`;
4967
- const workspacePath = join$1(projectPath, "workspaces", workspaceName);
4967
+ const workspacePath = join(projectPath, "workspaces", workspaceName);
4968
4968
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace does not exist" }, { status: 404 });
4969
4969
  return yield* Effect.promise(async () => {
4970
4970
  const { stdout: filesOutput } = await execAsync$3(`find "${workspacePath}" \\( ${[
@@ -5011,8 +5011,8 @@ const getWorkspaceCleanPreviewRoute = HttpRouter.add("GET", "/api/workspaces/:is
5011
5011
  "web",
5012
5012
  "server"
5013
5013
  ]) {
5014
- const subdirPath = join$1(workspacePath, subdir);
5015
- if (existsSync$1(join$1(subdirPath, ".git"))) subrepos.push({
5014
+ const subdirPath = join(workspacePath, subdir);
5015
+ if (existsSync$1(join(subdirPath, ".git"))) subrepos.push({
5016
5016
  prefix: subdir + "/",
5017
5017
  gitRoot: subdirPath
5018
5018
  });
@@ -5020,17 +5020,17 @@ const getWorkspaceCleanPreviewRoute = HttpRouter.add("GET", "/api/workspaces/:is
5020
5020
  let mainGitRoot = null;
5021
5021
  const possibleRoots = [
5022
5022
  projectPath,
5023
- join$1(projectPath, ".."),
5023
+ join(projectPath, ".."),
5024
5024
  workspacePath
5025
5025
  ];
5026
- for (const root of possibleRoots) if (existsSync$1(join$1(root, ".git"))) {
5026
+ for (const root of possibleRoots) if (existsSync$1(join(root, ".git"))) {
5027
5027
  mainGitRoot = root;
5028
5028
  break;
5029
5029
  }
5030
5030
  const filesToCheck = codeFiles.slice(0, 100);
5031
5031
  const reposUsed = [];
5032
5032
  for (const file of filesToCheck) {
5033
- const workspaceFilePath = join$1(workspacePath, file);
5033
+ const workspaceFilePath = join(workspacePath, file);
5034
5034
  let gitRoot = null;
5035
5035
  let relativePath = file;
5036
5036
  for (const { prefix, gitRoot: subGitRoot } of subrepos) if (file.startsWith(prefix)) {
@@ -5092,7 +5092,7 @@ const getWorkspaceCleanPreviewRoute = HttpRouter.add("GET", "/api/workspaces/:is
5092
5092
  configFiles: configFiles.slice(0, 30),
5093
5093
  otherFiles: otherFiles.slice(0, 20),
5094
5094
  hasMore: files.length > 100,
5095
- backupPath: join$1(projectPath, "workspaces", `.backup-${workspaceName}-${Date.now()}`),
5095
+ backupPath: join(projectPath, "workspaces", `.backup-${workspaceName}-${Date.now()}`),
5096
5096
  diffAnalysis
5097
5097
  });
5098
5098
  });
@@ -5103,11 +5103,11 @@ const postWorkspaceCleanRoute = HttpRouter.add("POST", "/api/workspaces/:issueId
5103
5103
  const { createBackup } = yield* readJsonBody;
5104
5104
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
5105
5105
  const workspaceName = `feature-${issueId.toLowerCase()}`;
5106
- const workspacePath = join$1(projectPath, "workspaces", workspaceName);
5106
+ const workspacePath = join(projectPath, "workspaces", workspaceName);
5107
5107
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace does not exist" }, { status: 404 });
5108
5108
  let backupPath = null;
5109
5109
  if (createBackup) {
5110
- backupPath = join$1(projectPath, "workspaces", `.backup-${workspaceName}-${Date.now()}`);
5110
+ backupPath = join(projectPath, "workspaces", `.backup-${workspaceName}-${Date.now()}`);
5111
5111
  console.log(`Creating backup: ${workspacePath} -> ${backupPath}`);
5112
5112
  yield* Effect.promise(() => execAsync$3(`rsync -a --quiet --exclude=node_modules --exclude=target --exclude=dist --exclude=.git --exclude=__pycache__ --exclude=.cache --exclude=.next --exclude=coverage "${workspacePath}/" "${backupPath}/"`, {
5113
5113
  encoding: "utf-8",
@@ -5206,7 +5206,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5206
5206
  const branchName = `feature/${numericSuffix}`;
5207
5207
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
5208
5208
  if (workspaceInfo.isRemote) return jsonResponse({ error: `${issueId} is executing remotely on ${workspaceInfo.vmName ?? "a fly machine"} — run 'pan admin remote reap --issue ${issueId}' after the agent finishes, then review.` }, { status: 409 });
5209
- const workspacePath = workspaceInfo.localPath || join$1(projectPath, "workspaces", `feature-${numericSuffix}`);
5209
+ const workspacePath = workspaceInfo.localPath || join(projectPath, "workspaces", `feature-${numericSuffix}`);
5210
5210
  const existingStatus = getReviewStatusSync(issueId);
5211
5211
  if (existingStatus?.reviewNotes && ["blocked", "failed"].includes(existingStatus.reviewStatus || "")) {
5212
5212
  const isInfraFailure = [
@@ -5290,7 +5290,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5290
5290
  console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
5291
5291
  }
5292
5292
  try {
5293
- const { createReviewArtifactsForIssue } = await import("./review-artifacts-BGc69epg.js");
5293
+ const { createReviewArtifactsForIssue } = await import("./review-artifacts-C7a45b1_.js");
5294
5294
  const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
5295
5295
  const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
5296
5296
  artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
@@ -5345,7 +5345,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
5345
5345
  } catch {}
5346
5346
  return;
5347
5347
  }
5348
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
5348
+ const { spawnReviewRoleForIssue } = await import("./review-agent-uwVftH98.js");
5349
5349
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5350
5350
  const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
5351
5351
  issueId,
@@ -5445,7 +5445,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5445
5445
  success: false,
5446
5446
  message: `${canonicalIssueId} is executing remotely on ${wsInfoRerun.vmName ?? "a fly machine"} — run 'pan admin remote reap --issue ${canonicalIssueId}' after the agent finishes, then review.`
5447
5447
  }, { status: 409 });
5448
- const workspacePathRerun = wsInfoRerun.localPath || join$1(projectPathRerun, "workspaces", `feature-${issueLowerRerun}`);
5448
+ const workspacePathRerun = wsInfoRerun.localPath || join(projectPathRerun, "workspaces", `feature-${issueLowerRerun}`);
5449
5449
  if (!wsInfoRerun.isRemote) yield* restoreTrackedBeadsExport(workspacePathRerun);
5450
5450
  const dirtyError = yield* Effect.promise(() => getDirtyWorkspaceErrorForReviewRequest(workspacePathRerun, wsInfoRerun));
5451
5451
  if (dirtyError) {
@@ -5485,7 +5485,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5485
5485
  console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
5486
5486
  }
5487
5487
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5488
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
5488
+ const { spawnReviewRoleForIssue } = await import("./review-agent-uwVftH98.js");
5489
5489
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
5490
5490
  issueId,
5491
5491
  workspace: workspacePathRerun,
@@ -5534,8 +5534,8 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5534
5534
  testNotes: "No project configured"
5535
5535
  });
5536
5536
  } else {
5537
- const workspacePath = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
5538
- const { spawnRun } = yield* Effect.promise(() => import("./agents-BIggLvi_.js"));
5537
+ const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
5538
+ const { spawnRun } = yield* Effect.promise(() => import("./agents-C4kZ8a2r.js"));
5539
5539
  try {
5540
5540
  const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
5541
5541
  setReviewStatus(issueId, { testStatus: "testing" });
@@ -5580,7 +5580,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5580
5580
  const issueLower = issueId.toLowerCase();
5581
5581
  const branchName = `feature/${issueLower}`;
5582
5582
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
5583
- const workspacePath = workspaceInfo.isRemote ? workspaceInfo.remotePath : workspaceInfo.localPath || join$1(projectPath, "workspaces", `feature-${issueLower}`);
5583
+ const workspacePath = workspaceInfo.isRemote ? workspaceInfo.remotePath : workspaceInfo.localPath || join(projectPath, "workspaces", `feature-${issueLower}`);
5584
5584
  if (!workspaceInfo.exists) return jsonResponse({
5585
5585
  success: false,
5586
5586
  error: "Workspace does not exist"
@@ -5624,7 +5624,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
5624
5624
  autoRequeueCount: newCount
5625
5625
  }, { status: 500 });
5626
5626
  const result = yield* Effect.promise(async () => {
5627
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
5627
+ const { spawnReviewRoleForIssue } = await import("./review-agent-uwVftH98.js");
5628
5628
  return await Effect.runPromise(spawnReviewRoleForIssue({
5629
5629
  issueId,
5630
5630
  workspace: workspacePath,
@@ -5803,7 +5803,7 @@ function buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resol
5803
5803
  if (!resolved) return null;
5804
5804
  const issueLower = issueId.toLowerCase();
5805
5805
  const numericSuffix = issueLower.replace(/^[a-z]+-/, "");
5806
- const wsPath = resetWorkspace.localPath || workspaceInfo.localPath || findWorkspacePath(resolved.projectPath, issueLower) || join$1(resolved.projectPath, "workspaces", `feature-${numericSuffix}`);
5806
+ const wsPath = resetWorkspace.localPath || workspaceInfo.localPath || findWorkspacePath(resolved.projectPath, issueLower) || join(resolved.projectPath, "workspaces", `feature-${numericSuffix}`);
5807
5807
  return {
5808
5808
  workspace: wsPath,
5809
5809
  branch: wsPath.endsWith("-strike") ? `strike/${issueLower}` : `feature/${numericSuffix}`
@@ -5921,7 +5921,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5921
5921
  const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
5922
5922
  if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
5923
5923
  try {
5924
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-Dh8Y9PDO.js"));
5924
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CfohxFWM.js"));
5925
5925
  resetPostMergeState(issueId);
5926
5926
  } catch (err) {
5927
5927
  console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
@@ -5930,7 +5930,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5930
5930
  const rerun = body?.rerun === true;
5931
5931
  if (rerun) try {
5932
5932
  yield* Effect.promise(async () => {
5933
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
5933
+ const { spawnReviewRoleForIssue } = await import("./review-agent-uwVftH98.js");
5934
5934
  const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
5935
5935
  if (dispatchArgs) {
5936
5936
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
@@ -5959,7 +5959,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5959
5959
  const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
5960
5960
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
5961
5961
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
5962
- const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-DgySDb-G.js"));
5962
+ const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-uwVftH98.js"));
5963
5963
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
5964
5964
  const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
5965
5965
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
@@ -5989,8 +5989,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
5989
5989
  success: false,
5990
5990
  error: "Workspace does not exist"
5991
5991
  }, { status: 400 });
5992
- const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BNmVxnNt.js"));
5993
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DgySDb-G.js"));
5992
+ const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-Bqfwuqet.js"));
5993
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-uwVftH98.js"));
5994
5994
  const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
5995
5995
  setReviewStatus(issueId, {
5996
5996
  reviewStatus: "pending",
@@ -6062,8 +6062,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
6062
6062
  const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
6063
6063
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
6064
6064
  return jsonResponse(yield* Effect.promise(async () => {
6065
- const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-DjPikotp.js");
6066
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DgySDb-G.js");
6065
+ const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-De2syxNB.js");
6066
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-uwVftH98.js");
6067
6067
  const project = resolveProjectForIssue(issueId);
6068
6068
  const record = project ? readIssueRecordSync(project, issueId) : null;
6069
6069
  return {
@@ -6089,8 +6089,8 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
6089
6089
  if (hasMode && body.reviewMode !== null && body.reviewMode !== "quick" && body.reviewMode !== "full" && body.reviewMode !== "none") return jsonResponse({ error: "reviewMode must be quick, full, none, or null" }, { status: 400 });
6090
6090
  if (hasScope && body.reReviewScope !== null && body.reReviewScope !== "all" && body.reReviewScope !== "changed" && body.reReviewScope !== "blockers") return jsonResponse({ error: "reReviewScope must be all, changed, blockers, or null" }, { status: 400 });
6091
6091
  return jsonResponse(yield* Effect.promise(async () => {
6092
- const { ensureIssueRecordSync, readIssueRecordSync, resolveProjectForIssue, writeIssueRecordSync } = await import("./record-DjPikotp.js");
6093
- const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DgySDb-G.js");
6092
+ const { ensureIssueRecordSync, readIssueRecordSync, resolveProjectForIssue, writeIssueRecordSync } = await import("./record-De2syxNB.js");
6093
+ const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-uwVftH98.js");
6094
6094
  const project = resolveProjectForIssue(issueId);
6095
6095
  const record = readIssueRecordSync(project, issueId) ?? ensureIssueRecordSync(project, issueId);
6096
6096
  if (hasMode) if (body.reviewMode === null) delete record.reviewMode;
@@ -6129,9 +6129,9 @@ const WORKSPACE_COMPOSE_FILES = [
6129
6129
  "compose.yaml"
6130
6130
  ];
6131
6131
  function findWorkspaceComposeFile(workspacePath) {
6132
- const devcontainerDir = join$1(workspacePath, DEVCONTAINER_DIRNAME);
6132
+ const devcontainerDir = join(workspacePath, DEVCONTAINER_DIRNAME);
6133
6133
  for (const file of WORKSPACE_COMPOSE_FILES) {
6134
- const fullPath = join$1(devcontainerDir, file);
6134
+ const fullPath = join(devcontainerDir, file);
6135
6135
  if (existsSync$1(fullPath)) return fullPath;
6136
6136
  }
6137
6137
  return null;
@@ -6148,7 +6148,7 @@ function resolveWorkspaceStackContext(issueId) {
6148
6148
  const projectConfig = resolvedProject ? getProjectSync(resolvedProject.projectKey) : null;
6149
6149
  const issuePrefix = extractPrefixSync(normalizedIssueId) ?? normalizedIssueId.split("-")[0];
6150
6150
  const projectPath = resolvedProject?.projectPath ?? getProjectPath(void 0, issuePrefix);
6151
- const workspacePath = join$1(projectPath, projectConfig?.workspace?.workspaces_dir ?? "workspaces", `feature-${issueLower}`);
6151
+ const workspacePath = join(projectPath, projectConfig?.workspace?.workspaces_dir ?? "workspaces", `feature-${issueLower}`);
6152
6152
  if (!existsSync$1(workspacePath)) return {
6153
6153
  error: `Workspace not found for ${normalizedIssueId}`,
6154
6154
  status: 404
@@ -6279,7 +6279,7 @@ const postWorkspaceStackActionRoute = HttpRouter.add("POST", "/api/workspaces/:i
6279
6279
  "-p",
6280
6280
  context.composeProjectName,
6281
6281
  action
6282
- ], description, dirname$1(context.composeFile), {
6282
+ ], description, dirname(context.composeFile), {
6283
6283
  issueId: context.issueId,
6284
6284
  pendingOperation
6285
6285
  });
@@ -6475,7 +6475,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
6475
6475
  const { parsedIssueId, workspacePath } = getWorkspacePathForIssue(getProjectPath(void 0, parseIssueIdSync(issueId)?.prefix ?? extractPrefixSync(issueId) ?? issueId.split("-")[0]), issueId);
6476
6476
  return {
6477
6477
  issueId: parsedIssueId,
6478
- body: await readFile(join$1(workspacePath, PAN_DIRNAME, fileName), "utf-8")
6478
+ body: await readFile(join(workspacePath, PAN_DIRNAME, fileName), "utf-8")
6479
6479
  };
6480
6480
  }
6481
6481
  /**
@@ -6484,7 +6484,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
6484
6484
  */
6485
6485
  async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
6486
6486
  try {
6487
- const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-DjPikotp.js");
6487
+ const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-De2syxNB.js");
6488
6488
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
6489
6489
  return recordView ? JSON.stringify(recordView, null, 2) : null;
6490
6490
  } catch {
@@ -6547,15 +6547,15 @@ function getProjectPath(linearProjectId, issuePrefix) {
6547
6547
  if (config) {
6548
6548
  for (const { owner, repo, prefix } of config.repos) if ((prefix || repo.toUpperCase().replace(/-CLI$/, "").replace(/-/g, "")).toUpperCase() === issuePrefix.toUpperCase()) {
6549
6549
  const possiblePaths = [
6550
- join$1(homedir$1(), "Projects", repo),
6551
- join$1(homedir$1(), "Projects", repo.replace(/-cli$/, "")),
6552
- join$1(homedir$1(), "Projects", owner, repo)
6550
+ join(homedir$1(), "Projects", repo),
6551
+ join(homedir$1(), "Projects", repo.replace(/-cli$/, "")),
6552
+ join(homedir$1(), "Projects", owner, repo)
6553
6553
  ];
6554
6554
  for (const path of possiblePaths) if (existsSync$1(path)) return path;
6555
6555
  }
6556
6556
  }
6557
6557
  }
6558
- return join$1(homedir$1(), "Projects");
6558
+ return join(homedir$1(), "Projects");
6559
6559
  }
6560
6560
  function requireTrustedMutationOrigin(request) {
6561
6561
  const origin = (() => {
@@ -6610,7 +6610,7 @@ function getWorkspaceInfoForIssue(issueId) {
6610
6610
  for (const { config } of listProjectsSync()) {
6611
6611
  if (!config.path) continue;
6612
6612
  for (const candidate of [`feature-${issueLower}`, `feature-${numericSuffix}`]) {
6613
- const p = join$1(config.path, "workspaces", candidate);
6613
+ const p = join(config.path, "workspaces", candidate);
6614
6614
  if (existsSync$1(p)) return {
6615
6615
  exists: true,
6616
6616
  isRemote: false,
@@ -6618,7 +6618,7 @@ function getWorkspaceInfoForIssue(issueId) {
6618
6618
  };
6619
6619
  }
6620
6620
  }
6621
- const workspacePath = join$1(getProjectPath(void 0, issuePrefix), "workspaces", `feature-${issueLower}`);
6621
+ const workspacePath = join(getProjectPath(void 0, issuePrefix), "workspaces", `feature-${issueLower}`);
6622
6622
  if (existsSync$1(workspacePath)) return {
6623
6623
  exists: true,
6624
6624
  isRemote: false,
@@ -6907,7 +6907,7 @@ async function repairFlywayIfNeeded(issueId, pgContainer, dbName, projectConfig,
6907
6907
  repaired: false,
6908
6908
  message: "No seed_file configured, cannot locate Flyway baseline"
6909
6909
  };
6910
- const flywayFile = join$1(dirname$1(join$1(projectConfig.path, seedRelPath)), "zzz-flyway-workspace-baseline.sql");
6910
+ const flywayFile = join(dirname(join(projectConfig.path, seedRelPath)), "zzz-flyway-workspace-baseline.sql");
6911
6911
  if (!existsSync$1(flywayFile)) return {
6912
6912
  repaired: false,
6913
6913
  message: `Flyway baseline not found: ${flywayFile}`
@@ -6919,7 +6919,7 @@ async function repairFlywayIfNeeded(issueId, pgContainer, dbName, projectConfig,
6919
6919
  });
6920
6920
  const migrationsRelPath = projectConfig.workspace?.database?.migrations?.path;
6921
6921
  if (migrationsRelPath) {
6922
- const migrationsDir = join$1(workspacePath, migrationsRelPath);
6922
+ const migrationsDir = join(workspacePath, migrationsRelPath);
6923
6923
  if (existsSync$1(migrationsDir)) {
6924
6924
  emit(`Syncing Flyway checksums from workspace migrations`);
6925
6925
  const migrationFiles = (await readdir(migrationsDir)).filter((f) => /^V\d+__.*\.sql$/.test(f));
@@ -6927,7 +6927,7 @@ async function repairFlywayIfNeeded(issueId, pgContainer, dbName, projectConfig,
6927
6927
  for (const file of migrationFiles) {
6928
6928
  const version = file.match(/^V(\d+)__/)?.[1];
6929
6929
  if (!version) continue;
6930
- let content = await readFile(join$1(migrationsDir, file));
6930
+ let content = await readFile(join(migrationsDir, file));
6931
6931
  if (content[0] === 239 && content[1] === 187 && content[2] === 191) content = content.slice(3);
6932
6932
  const lines = content.toString("utf-8").split(/\r?\n/);
6933
6933
  const checksum = crc32(Buffer.from(lines.join(""), "utf-8")) | 0;
@@ -7046,11 +7046,11 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7046
7046
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7047
7047
  const projectPath = getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
7048
7048
  const issueLower = issueId.toLowerCase();
7049
- const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
7049
+ const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
7050
7050
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace does not exist" }, { status: 400 });
7051
- const workspaceBeadsDir = join$1(workspacePath, ".beads");
7051
+ const workspaceBeadsDir = join(workspacePath, ".beads");
7052
7052
  if (!existsSync$1(workspaceBeadsDir)) {
7053
- const projectRootBeadsDir = join$1(projectPath, ".beads");
7053
+ const projectRootBeadsDir = join(projectPath, ".beads");
7054
7054
  if (existsSync$1(projectRootBeadsDir)) try {
7055
7055
  yield* Effect.promise(() => execAsync(`cp -r "${projectRootBeadsDir}" "${workspaceBeadsDir}"`, { encoding: "utf-8" }));
7056
7056
  console.log(`[workspace/start] Copied beads from project root to workspace for ${issueId}`);
@@ -7058,8 +7058,8 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7058
7058
  console.warn(`[workspace/start] Could not copy beads: ${e}`);
7059
7059
  }
7060
7060
  }
7061
- const devScript = join$1(workspacePath, "dev");
7062
- const devScriptInContainer = join$1(workspacePath, ".devcontainer", "dev");
7061
+ const devScript = join(workspacePath, "dev");
7062
+ const devScriptInContainer = join(workspacePath, ".devcontainer", "dev");
7063
7063
  if (!existsSync$1(devScript)) if (existsSync$1(devScriptInContainer)) try {
7064
7064
  yield* Effect.promise(() => symlink(".devcontainer/dev", devScript));
7065
7065
  yield* Effect.promise(() => chmod(devScriptInContainer, 493));
@@ -7068,7 +7068,7 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7068
7068
  return jsonResponse({ error: `Workspace has no ./dev script and repair failed: ${repairErr}` }, { status: 400 });
7069
7069
  }
7070
7070
  else return jsonResponse({ error: "Workspace has no ./dev script (checked root and .devcontainer/)" }, { status: 400 });
7071
- const envFilePath = join$1(workspacePath, ".env");
7071
+ const envFilePath = join(workspacePath, ".env");
7072
7072
  const teamPrefix = extractTeamPrefix(issueId);
7073
7073
  const projectConfig = teamPrefix ? findProjectByTeamSync(teamPrefix) : null;
7074
7074
  if (projectConfig?.workspace?.ports && projectConfig?.workspace?.env?.template) {
@@ -7087,7 +7087,7 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7087
7087
  if (needsRepair) try {
7088
7088
  const placeholders = { FEATURE_FOLDER: featureFolder };
7089
7089
  for (const [portName, portConfig] of Object.entries(projectConfig.workspace.ports)) {
7090
- const portFile = join$1(projectPath, `.${portName}-ports`);
7090
+ const portFile = join(projectPath, `.${portName}-ports`);
7091
7091
  const range = portConfig.range;
7092
7092
  let content = "";
7093
7093
  if (existsSync$1(portFile)) content = yield* Effect.promise(() => readFile(portFile, "utf-8"));
@@ -7124,7 +7124,7 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7124
7124
  return jsonResponse({ error: "Docker is not running. Start Docker Desktop first." }, { status: 400 });
7125
7125
  }
7126
7126
  if (projectConfig?.workspace?.database?.migrations?.type === "flyway") try {
7127
- const composePaths = [join$1(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"), join$1(workspacePath, "docker-compose.yml")];
7127
+ const composePaths = [join(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"), join(workspacePath, "docker-compose.yml")];
7128
7128
  let compFile;
7129
7129
  for (const cp of composePaths) if (existsSync$1(cp)) {
7130
7130
  compFile = cp;
@@ -7180,7 +7180,7 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
7180
7180
  appendActivityOutput(activityId, `[${(/* @__PURE__ */ new Date()).toISOString()}] ./dev all exited with code ${code}`);
7181
7181
  if (code !== 0 && projectConfig?.workspace?.database?.migrations?.type === "flyway") (async () => {
7182
7182
  try {
7183
- const composePaths = [join$1(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"), join$1(workspacePath, "docker-compose.yml")];
7183
+ const composePaths = [join(workspacePath, ".devcontainer/docker-compose.devcontainer.yml"), join(workspacePath, "docker-compose.yml")];
7184
7184
  let composeFile;
7185
7185
  for (const cp of composePaths) if (existsSync$1(cp)) {
7186
7186
  composeFile = cp;
@@ -7253,7 +7253,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
7253
7253
  if (queuePosition === null) try {
7254
7254
  const resolved = resolveProjectFromIssueSync(issueId);
7255
7255
  if (resolved) {
7256
- const { getQueueForProject } = yield* Effect.promise(() => import("./merge-D3wEbmUJ.js"));
7256
+ const { getQueueForProject } = yield* Effect.promise(() => import("./merge-DRMPa8CQ.js"));
7257
7257
  const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
7258
7258
  id: String(e.id),
7259
7259
  type: "task",
@@ -7291,7 +7291,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7291
7291
  const workspaceInfo = getWorkspaceInfoForIssue(issueId);
7292
7292
  if (workspaceInfo.exists && workspaceInfo.localPath) {
7293
7293
  const localPath = workspaceInfo.localPath;
7294
- const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-RAmTwjFB.js"));
7294
+ const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-DbfC0zls.js"));
7295
7295
  try {
7296
7296
  const gitInfo = yield* getWorkspaceGitInfo(localPath);
7297
7297
  if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
@@ -7306,7 +7306,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7306
7306
  if (verificationStatus) update.verificationStatus = verificationStatus;
7307
7307
  if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
7308
7308
  const status = setReviewStatus(issueId, update);
7309
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
7309
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DdvpFNt1.js"));
7310
7310
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
7311
7311
  if (reviewStatus && [
7312
7312
  "passed",
@@ -7324,7 +7324,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7324
7324
  const agentId = `agent-${issueId.toLowerCase()}`;
7325
7325
  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.`;
7326
7326
  try {
7327
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-thrdxYpK.js"));
7327
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DMBdS_jL.js"));
7328
7328
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7329
7329
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7330
7330
  issueId,
@@ -7388,7 +7388,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7388
7388
  const agentId = `agent-${issueId.toLowerCase()}`;
7389
7389
  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.`;
7390
7390
  try {
7391
- const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-thrdxYpK.js"));
7391
+ const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DMBdS_jL.js"));
7392
7392
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7393
7393
  const fileResult = yield* Effect.promise(() => writeFeedbackFile({
7394
7394
  issueId,
@@ -7413,14 +7413,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
7413
7413
  console.log(`[review-status] ${issueId} marked ready for merge after test=passed`);
7414
7414
  yield* Effect.promise(async () => {
7415
7415
  try {
7416
- const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BNmVxnNt.js");
7416
+ const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-Bqfwuqet.js");
7417
7417
  const project = resolveProjectFromIssueSync(issueId);
7418
7418
  const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
7419
7419
  if (!repo || !repo.includes("/")) return;
7420
7420
  const [owner, name] = repo.split("/");
7421
7421
  const wsInfo = getWorkspaceInfoForIssue(issueId);
7422
7422
  if (!wsInfo?.localPath) return;
7423
- const { postOverdeckTestsStatus } = await import("./github-app-B5PDHMyn.js");
7423
+ const { postOverdeckTestsStatus } = await import("./github-app-C7lftMNj.js");
7424
7424
  await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
7425
7425
  } catch (err) {
7426
7426
  console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
@@ -7461,8 +7461,8 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
7461
7461
  const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
7462
7462
  if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
7463
7463
  const issueLower = issueId.toLowerCase();
7464
- const workspacePath = join$1(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
7465
- const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-B5PDHMyn.js"));
7464
+ const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
7465
+ const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-C7lftMNj.js"));
7466
7466
  if (!isGitHubAppConfigured()) return jsonResponse({
7467
7467
  success: false,
7468
7468
  error: "GitHub App not configured"
@@ -7477,4 +7477,4 @@ const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspa
7477
7477
  //#endregion
7478
7478
  export { hasDashboardInternalToken as C, getWorkspacePathForIssue as D, rejectUnsafeDashboardMutationRequest as E, dashboardSessionCookieHeader as S, rejectUnauthorizedDashboardSessionMintRequest as T, syncCacheSync as _, pushApproveMain as a, resolveIssueHeadlineCost as b, triggerMerge as c, reconcile as d, reconcilePiTranscripts as f, rebuildCacheSync as g, getCostsForIssueSync as h, mergeOpsRouteLayer as i, resumeQueuedMerges as l, migrateAllSessionsSync as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reclassifyUnknownCostEventsSync as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, syncWalFromAllProjects as u, processPendingFeedbackDeliveries as v, rejectUnauthorizedDashboardRequest as w, dashboardCsrfToken as x, getCachedRunningAgents as y };
7479
7479
 
7480
- //# sourceMappingURL=workspaces-CRU9_vRn.js.map
7480
+ //# sourceMappingURL=workspaces-Ca4zZs12.js.map