@band-app/server 0.13.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/client/assets/{DockviewTerminalContainer-DY9YDc8o.js → DockviewTerminalContainer-DJBIrF63.js} +2 -2
  2. package/dist/client/assets/{TerminalPanel-TQGgFc5g.js → TerminalPanel-CJRwWyR3.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-CvS-VtsR.js → _basePickBy-Dc0lZvrW.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-DFCKF5vj.js → _baseUniq-Cf73kSyg.js} +1 -1
  5. package/dist/client/assets/{arc-BatjPjaN.js → arc-CwSM8pE7.js} +1 -1
  6. package/dist/client/assets/{architectureDiagram-VXUJARFQ-Cnb8SKvZ.js → architectureDiagram-VXUJARFQ-CH39Gb3A.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-VD42YOAC-B6-qvfYN.js → blockDiagram-VD42YOAC-DDxgl1uo.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-YG6GDRKO-DAjB1VyY.js → c4Diagram-YG6GDRKO-BfEjKk-g.js} +1 -1
  9. package/dist/client/assets/channel-CXGOk1aw.js +1 -0
  10. package/dist/client/assets/{chunk-4BX2VUAB-vjmc3quM.js → chunk-4BX2VUAB-m8XoXk_H.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-DDZjRfYY.js → chunk-55IACEB6-CtGE4lZU.js} +1 -1
  12. package/dist/client/assets/{chunk-B4BG7PRW-CKceWukV.js → chunk-B4BG7PRW-e8RHFxfZ.js} +1 -1
  13. package/dist/client/assets/{chunk-DI55MBZ5-CRnRm2L0.js → chunk-DI55MBZ5-6OH7qKMA.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-Cogf-yAQ.js → chunk-FMBD7UC4-OC-xaPXK.js} +1 -1
  15. package/dist/client/assets/{chunk-QN33PNHL-D72Zq7QV.js → chunk-QN33PNHL-OAk8wo3f.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-HUKu5hjd.js → chunk-QZHKN3VN-BQaX9Wrw.js} +1 -1
  17. package/dist/client/assets/{chunk-TZMSLE5B-I8YlhesW.js → chunk-TZMSLE5B-BB9WpJAf.js} +1 -1
  18. package/dist/client/assets/classDiagram-2ON5EDUG-CN-WyCFd.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-WZHVMYZB-CN-WyCFd.js +1 -0
  20. package/dist/client/assets/clone-BLJrTeWA.js +1 -0
  21. package/dist/client/assets/{cose-bilkent-S5V4N54A-CEay61-1.js → cose-bilkent-S5V4N54A-C9h_X8Kk.js} +1 -1
  22. package/dist/client/assets/{dagre-6UL2VRFP-BcAohjbk.js → dagre-6UL2VRFP-DqYC11ua.js} +1 -1
  23. package/dist/client/assets/{diagram-PSM6KHXK-DdrIOdqS.js → diagram-PSM6KHXK-CI1DRC6A.js} +1 -1
  24. package/dist/client/assets/{diagram-QEK2KX5R-Bn79GyS6.js → diagram-QEK2KX5R-fCfXFf0Y.js} +1 -1
  25. package/dist/client/assets/{diagram-S2PKOQOG-g66OM_Vs.js → diagram-S2PKOQOG-ShkC9z2o.js} +1 -1
  26. package/dist/client/assets/{erDiagram-Q2GNP2WA-BD0geyEq.js → erDiagram-Q2GNP2WA-CaIQw3Ar.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-NV44I4VS-B2LLnQ89.js → flowDiagram-NV44I4VS-CBTayrED.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-JELNMOA3-DsMjiqCd.js → ganttDiagram-JELNMOA3-BXX1Htdo.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-BXAPNFr2.js → gitGraphDiagram-V2S2FVAM-Dwzg4ngG.js} +1 -1
  30. package/dist/client/assets/{graph-CWoXix-C.js → graph-CiXo3Prx.js} +1 -1
  31. package/dist/client/assets/{highlighted-body-B3W2YXNL-DAdM8cs5.js → highlighted-body-B3W2YXNL-7aLtgz8i.js} +1 -1
  32. package/dist/client/assets/{index-B-RxFKXA.js → index-BCNUajNr.js} +1 -1
  33. package/dist/client/assets/{index-Bu7btU1P.js → index-BMWcJGJE.js} +1 -1
  34. package/dist/client/assets/{index-W_gE5gc5.js → index-C1zwysWn.js} +1 -1
  35. package/dist/client/assets/{index-6eC517Nz.js → index-CO6I2abN.js} +1 -1
  36. package/dist/client/assets/{index-GgiGfqqJ.js → index-CR-ehys5.js} +1 -1
  37. package/dist/client/assets/{index-D4Gbu0g1.js → index-CVm5Qdu2.js} +1 -1
  38. package/dist/client/assets/{index-iloqZ__Z.js → index-CfYqVQ5p.js} +1 -1
  39. package/dist/client/assets/{index-BSQYe-ie.js → index-Cg6YccFW.js} +1 -1
  40. package/dist/client/assets/{index-Dkltc6JL.js → index-DQmzIoYb.js} +1 -1
  41. package/dist/client/assets/{index-U42qt8_H.js → index-DRtcpY-M.js} +1 -1
  42. package/dist/client/assets/{index-DeUgVu9X.js → index-DZu_2Bx_.js} +1 -1
  43. package/dist/client/assets/{index-B_aLrZ9l.js → index-De1kIhJh.js} +1 -1
  44. package/dist/client/assets/{index-DgRC8NQ1.js → index-Di4toQJ5.js} +1 -1
  45. package/dist/client/assets/{index-C8jQlbkH.js → index-DmilV26W.js} +1 -1
  46. package/dist/client/assets/{index-D-NVfOaX.js → index-Du9yJkB_.js} +1 -1
  47. package/dist/client/assets/{index-BcC597Ty.js → index-DypgdPcb.js} +1 -1
  48. package/dist/client/assets/{index-B9fPtAFu.js → index-Gs7HImF7.js} +1 -1
  49. package/dist/client/assets/{index-HueLRLHI.js → index-eX1Ljh4a.js} +1 -1
  50. package/dist/client/assets/{infoDiagram-HS3SLOUP-DwKN27-C.js → infoDiagram-HS3SLOUP-CWD1TyOW.js} +1 -1
  51. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-BAhwB5gg.js → journeyDiagram-XKPGCS4Q-DhxNYqmd.js} +1 -1
  52. package/dist/client/assets/{kanban-definition-3W4ZIXB7-OI1AHf6B.js → kanban-definition-3W4ZIXB7-CnS4C6i0.js} +1 -1
  53. package/dist/client/assets/{layout-CC7J3tBc.js → layout-CSID7t17.js} +1 -1
  54. package/dist/client/assets/{linear-CVYb-eZl.js → linear-DoyBnBXg.js} +1 -1
  55. package/dist/client/assets/main-DYrDxnSM.css +1 -0
  56. package/dist/client/assets/main-DqsO5O95.js +993 -0
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-BPKIWA4L.js → mindmap-definition-VGOIOE7T-DInqVMnG.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-DeHQukcp.js → pieDiagram-ADFJNKIX-9NXrhDdT.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-DIA0izdW.js → quadrantDiagram-AYHSOK5B-C9V_pdwH.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-DsiZI-w_.js → requirementDiagram-UZGBJVZJ-D7InXBsj.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-B3Rxgvvo.js → sankeyDiagram-TZEHDZUN-wucasjR9.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-CdnagSZH.js → sequenceDiagram-WL72ISMW-z8y3Dw_f.js} +1 -1
  63. package/dist/client/assets/{square-terminal-BA_DN1Fj.js → square-terminal-BGmf1D-6.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-C9HYyYWO.js → stateDiagram-FKZM4ZOC-UgwHItEV.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-B0Y2fSqT.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-BQXhdJ4l.js → timeline-definition-IT6M3QCI-BFRCSYLj.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-DbtL6I-E.js → treemap-GDKQZRPO-aQmWnuZQ.js} +1 -1
  68. package/dist/client/assets/{useSessionListContext-BDhxj2sp.js → useSessionListContext-HoR6j8FY.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-DrdBQ3ad.js → workspace._workspaceId-DGCQw9gi.js} +1 -1
  70. package/dist/client/assets/{workspace._workspaceId.changes-CV01j_RF.js → workspace._workspaceId.changes-DBE9NcLH.js} +1 -1
  71. package/dist/client/assets/workspace._workspaceId.code-Cc2uBW1l.js +1 -0
  72. package/dist/client/assets/{workspace._workspaceId.code._-4eyD4Vu7.js → workspace._workspaceId.code._-CsnvG2rj.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.code.index-BazGXzJC.js → workspace._workspaceId.code.index-BdfNmZpz.js} +1 -1
  74. package/dist/client/assets/{workspace._workspaceId.index-CpmZsM_r.js → workspace._workspaceId.index-C7NyedGf.js} +1 -1
  75. package/dist/client/assets/{workspace._workspaceId.terminal-Sx7Ov6J4.js → workspace._workspaceId.terminal-C5ph2UWn.js} +2 -2
  76. package/dist/client/assets/{xychartDiagram-PRI3JC2R-B9LSl0HQ.js → xychartDiagram-PRI3JC2R-DElSdzdM.js} +1 -1
  77. package/dist/server/assets/{DockviewTerminalContainer-DVzWSMti.js → DockviewTerminalContainer-Btn06b30.js} +3 -3
  78. package/dist/server/assets/{TerminalPanel-BlWVFHNT.js → TerminalPanel-DiuUhPK5.js} +1 -1
  79. package/dist/server/assets/{_basePickBy-CTVBF0Kh.js → _basePickBy-D5WFbUhD.js} +2 -2
  80. package/dist/server/assets/{_baseUniq-BF3qFyKL.js → _baseUniq-DFZeWlPn.js} +1 -1
  81. package/dist/server/assets/{_tanstack-start-manifest_v-sqmMCsD8.js → _tanstack-start-manifest_v-UCApGYfd.js} +1 -1
  82. package/dist/server/assets/{arc-CKzdlSDJ.js → arc-B1QmYB3V.js} +1 -1
  83. package/dist/server/assets/{architecture-7HQA4BMR-C4KC3q3z.js → architecture-7HQA4BMR-SXElPY6g.js} +6 -6
  84. package/dist/server/assets/{architectureDiagram-VXUJARFQ-ARkeTUdc.js → architectureDiagram-VXUJARFQ-H4ZI6Opr.js} +6 -6
  85. package/dist/server/assets/{blockDiagram-VD42YOAC-lsOOO08K.js → blockDiagram-VD42YOAC-UhTmqpkK.js} +6 -6
  86. package/dist/server/assets/{c4Diagram-YG6GDRKO-CrZA0PWP.js → c4Diagram-YG6GDRKO-BcLh1QQl.js} +2 -2
  87. package/dist/server/assets/{channel-Dd6dv_cn.js → channel-DVtl256s.js} +1 -1
  88. package/dist/server/assets/{chunk-4BX2VUAB-CfcFinva.js → chunk-4BX2VUAB-BYUElNcW.js} +1 -1
  89. package/dist/server/assets/{chunk-55IACEB6-C_zn3X68.js → chunk-55IACEB6-CQXVz3Ix.js} +1 -1
  90. package/dist/server/assets/{chunk-B4BG7PRW-WqOdzIwb.js → chunk-B4BG7PRW-xbFaXlOL.js} +4 -4
  91. package/dist/server/assets/{chunk-DI55MBZ5-BazpEGnL.js → chunk-DI55MBZ5-BWUyQjGD.js} +3 -3
  92. package/dist/server/assets/{chunk-FMBD7UC4-abFXQK9X.js → chunk-FMBD7UC4-tuJ9minw.js} +1 -1
  93. package/dist/server/assets/{chunk-QN33PNHL-mQORkMwR.js → chunk-QN33PNHL-B9p522HA.js} +1 -1
  94. package/dist/server/assets/{chunk-QZHKN3VN-W_mObo75.js → chunk-QZHKN3VN-C6GPdMrh.js} +1 -1
  95. package/dist/server/assets/{chunk-TZMSLE5B-f9JxfLrS.js → chunk-TZMSLE5B-6Ng3t3Od.js} +1 -1
  96. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-D9B26ZaP.js → classDiagram-2ON5EDUG-BvOdRP7s.js} +5 -5
  97. package/dist/server/assets/{classDiagram-2ON5EDUG-D9B26ZaP.js → classDiagram-v2-WZHVMYZB-BvOdRP7s.js} +5 -5
  98. package/dist/server/assets/{clone-dm3Dgnj4.js → clone-CuDKCzEN.js} +1 -1
  99. package/dist/server/assets/{cose-bilkent-S5V4N54A-FP17KwdC.js → cose-bilkent-S5V4N54A-BhU6LMhN.js} +1 -1
  100. package/dist/server/assets/{dagre-6UL2VRFP-D3G7rpV5.js → dagre-6UL2VRFP-CH-VbyTI.js} +6 -6
  101. package/dist/server/assets/{diagram-PSM6KHXK-CblBgzmP.js → diagram-PSM6KHXK-BE0vVJdc.js} +7 -7
  102. package/dist/server/assets/{diagram-QEK2KX5R-GC4Djt9A.js → diagram-QEK2KX5R-rlYyF51_.js} +6 -6
  103. package/dist/server/assets/{diagram-S2PKOQOG-5B6KDW-y.js → diagram-S2PKOQOG-CsrxbKjr.js} +6 -6
  104. package/dist/server/assets/{erDiagram-Q2GNP2WA-Be8xw8rI.js → erDiagram-Q2GNP2WA-DeBKeqCX.js} +4 -4
  105. package/dist/server/assets/{flowDiagram-NV44I4VS-jzmSul5A.js → flowDiagram-NV44I4VS-hg6b4dSR.js} +5 -5
  106. package/dist/server/assets/{ganttDiagram-JELNMOA3-DWzYYJJD.js → ganttDiagram-JELNMOA3-oy5gzveG.js} +2 -2
  107. package/dist/server/assets/{gitGraph-G5XIXVHT-DBh_B9aL.js → gitGraph-G5XIXVHT-DyKGpXFt.js} +6 -6
  108. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-DtVbt-rt.js → gitGraphDiagram-V2S2FVAM-CN8rFh7o.js} +7 -7
  109. package/dist/server/assets/{graph-DX5yyy2e.js → graph-CdsnxBHP.js} +2 -2
  110. package/dist/server/assets/{highlighted-body-B3W2YXNL-jVL8aR3Z.js → highlighted-body-B3W2YXNL-D6ahbJdi.js} +1 -1
  111. package/dist/server/assets/{index-BjR3sOAq.js → index-7k2BqwZv.js} +2 -2
  112. package/dist/server/assets/{index-CeFUhbU-.js → index-B9hFfb3C.js} +2 -2
  113. package/dist/server/assets/{index-B5nFl_AI.js → index-BJorH749.js} +2 -2
  114. package/dist/server/assets/{index-BirnOPeb.js → index-BT8sxrq0.js} +2 -2
  115. package/dist/server/assets/{index-x1PcD09R.js → index-BhJN38EV.js} +2 -2
  116. package/dist/server/assets/{index-CBiZXyl4.js → index-BzYp7sVL.js} +1 -1
  117. package/dist/server/assets/{index-BsKQIZIq.js → index-C9H7VUtp.js} +2 -2
  118. package/dist/server/assets/{index-BoxcvdZf.js → index-CaRM9svU.js} +4 -4
  119. package/dist/server/assets/{index-BhOjaygO.js → index-CchdHjwq.js} +2 -2
  120. package/dist/server/assets/{index-CJFioIPI.js → index-Crgd09US.js} +2 -2
  121. package/dist/server/assets/{index-CD24s2ge.js → index-CsnrxvSd.js} +3 -3
  122. package/dist/server/assets/{index-BAdVYDyw.js → index-D2P0pxCr.js} +2 -2
  123. package/dist/server/assets/{index-DiZw5Slc.js → index-DBbuiN2t.js} +3 -3
  124. package/dist/server/assets/{index-icISvAHb.js → index-DIv5BUol.js} +2 -2
  125. package/dist/server/assets/{index-fJ18TF5w.js → index-Dp5TbN68.js} +5 -5
  126. package/dist/server/assets/{index-DHKWIWry.js → index-DsLZMKNC.js} +5 -5
  127. package/dist/server/assets/{index-DYzy4J8Y.js → index-XaoY6ovr.js} +2 -2
  128. package/dist/server/assets/{index-CVpPQcdL.js → index-aOrOBCQS.js} +1 -1
  129. package/dist/server/assets/{info-VBDWY6EO-CgGw-KWo.js → info-VBDWY6EO-HckNvgz-.js} +6 -6
  130. package/dist/server/assets/{infoDiagram-HS3SLOUP-Bm300kuC.js → infoDiagram-HS3SLOUP-P_hugt8D.js} +5 -5
  131. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-i8WJyl2v.js → journeyDiagram-XKPGCS4Q-lQfkL_-i.js} +4 -4
  132. package/dist/server/assets/{kanban-definition-3W4ZIXB7-BxqtaaIr.js → kanban-definition-3W4ZIXB7-CFh-YdaO.js} +2 -2
  133. package/dist/server/assets/{layout-C81zgoUj.js → layout-Ce1d_Ibk.js} +4 -4
  134. package/dist/server/assets/{linear-dyZZUN6P.js → linear-CuiUQTrq.js} +1 -1
  135. package/dist/server/assets/{mermaid-3ZIDBTTL-bTD72h2_.js → mermaid-3ZIDBTTL-C7xGj9Xg.js} +1 -1
  136. package/dist/server/assets/{mermaid-parser.core-BpodyVoJ.js → mermaid-parser.core-BOlp9l_E.js} +11 -11
  137. package/dist/server/assets/{mindmap-definition-VGOIOE7T-CGVjAsWC.js → mindmap-definition-VGOIOE7T-Byc-qFo2.js} +3 -3
  138. package/dist/server/assets/{packet-DYOGHKS2-BeHd7ss_.js → packet-DYOGHKS2-BiRLh9CC.js} +6 -6
  139. package/dist/server/assets/{pie-VRWISCQL-CtMn8fFZ.js → pie-VRWISCQL-hgf7Lgm4.js} +6 -6
  140. package/dist/server/assets/{pieDiagram-ADFJNKIX-CS0mGgZR.js → pieDiagram-ADFJNKIX-YXV3ET4_.js} +7 -7
  141. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-C0QMIITK.js → quadrantDiagram-AYHSOK5B-r_peNHCA.js} +2 -2
  142. package/dist/server/assets/{radar-ZZBFDIW7-DIYuMHay.js → radar-ZZBFDIW7-CGIDKJlK.js} +6 -6
  143. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-Cu_xdr4s.js → requirementDiagram-UZGBJVZJ-aI3jQPLf.js} +3 -3
  144. package/dist/server/assets/{router-emaiBwQ1.js → router-BNIoB7QX.js} +76862 -75665
  145. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-sK1eHAYK.js → sankeyDiagram-TZEHDZUN-B1Sb9Zvd.js} +1 -1
  146. package/dist/server/assets/{sequenceDiagram-WL72ISMW-BxdrIxsT.js → sequenceDiagram-WL72ISMW-DrJxigNy.js} +3 -3
  147. package/dist/server/assets/{square-terminal-DaamWbdC.js → square-terminal-DWTC1p8r.js} +1 -1
  148. package/dist/server/assets/{stateDiagram-FKZM4ZOC-YKAev_OI.js → stateDiagram-FKZM4ZOC-Dnsp85zH.js} +8 -8
  149. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-WXMNfM85.js → stateDiagram-v2-4FDKWEC3-C6x8SVRv.js} +4 -4
  150. package/dist/server/assets/{timeline-definition-IT6M3QCI-DrdVpYke.js → timeline-definition-IT6M3QCI-DSIrepaO.js} +2 -2
  151. package/dist/server/assets/{treemap-GDKQZRPO-DZHSpt06.js → treemap-GDKQZRPO-C9hefMmZ.js} +6 -6
  152. package/dist/server/assets/{workspace._workspaceId-KpmCwO8V.js → workspace._workspaceId-BY5hpCRH.js} +2 -2
  153. package/dist/server/assets/{workspace._workspaceId.changes-DF6oupkK.js → workspace._workspaceId.changes-CiekaeTG.js} +1 -1
  154. package/dist/server/assets/{workspace._workspaceId.code._-fbsbn7Pa.js → workspace._workspaceId.code._-Bi-RxK7c.js} +1 -1
  155. package/dist/server/assets/{workspace._workspaceId.code.index-D2dHFGQr.js → workspace._workspaceId.code.index-DRR8qo6z.js} +1 -1
  156. package/dist/server/assets/{workspace._workspaceId.index-DpLhp52B.js → workspace._workspaceId.index-BRFgw3FA.js} +1 -1
  157. package/dist/server/assets/{workspace._workspaceId.terminal-Dk3GXgkq.js → workspace._workspaceId.terminal-BhyASMi7.js} +2 -2
  158. package/dist/server/assets/{xychartDiagram-PRI3JC2R-BXCdvcf7.js → xychartDiagram-PRI3JC2R-0ftH7hFg.js} +2 -2
  159. package/dist/server/server.js +2 -2
  160. package/dist/start-server.mjs +461 -170
  161. package/package.json +6 -5
  162. package/dist/client/assets/channel-DSgmIANq.js +0 -1
  163. package/dist/client/assets/classDiagram-2ON5EDUG-D57JPCVZ.js +0 -1
  164. package/dist/client/assets/classDiagram-v2-WZHVMYZB-D57JPCVZ.js +0 -1
  165. package/dist/client/assets/clone-DAQJfloD.js +0 -1
  166. package/dist/client/assets/main-4FaYQ5DQ.css +0 -1
  167. package/dist/client/assets/main-CYVBBY3m.js +0 -993
  168. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-Jpp4ZnR3.js +0 -1
  169. package/dist/client/assets/workspace._workspaceId.code-Di11hnHW.js +0 -1
@@ -3181,7 +3181,7 @@ var require_stream = __commonJS({
3181
3181
  };
3182
3182
  duplex._final = function(callback) {
3183
3183
  if (ws.readyState === ws.CONNECTING) {
3184
- ws.once("open", function open2() {
3184
+ ws.once("open", function open3() {
3185
3185
  duplex._final(callback);
3186
3186
  });
3187
3187
  return;
@@ -3202,7 +3202,7 @@ var require_stream = __commonJS({
3202
3202
  };
3203
3203
  duplex._write = function(chunk, encoding, callback) {
3204
3204
  if (ws.readyState === ws.CONNECTING) {
3205
- ws.once("open", function open2() {
3205
+ ws.once("open", function open3() {
3206
3206
  duplex._write(chunk, encoding, callback);
3207
3207
  });
3208
3208
  return;
@@ -5648,7 +5648,7 @@ var require_thread_stream = __commonJS({
5648
5648
  var { version: version2 } = require_package();
5649
5649
  var { EventEmitter } = __require("events");
5650
5650
  var { Worker } = __require("worker_threads");
5651
- var { join: join24 } = __require("path");
5651
+ var { join: join25 } = __require("path");
5652
5652
  var { pathToFileURL } = __require("url");
5653
5653
  var { wait } = require_wait();
5654
5654
  var {
@@ -5684,7 +5684,7 @@ var require_thread_stream = __commonJS({
5684
5684
  function createWorker(stream, opts) {
5685
5685
  const { filename, workerData } = opts;
5686
5686
  const bundlerOverrides = "__bundlerPathsOverrides" in globalThis ? globalThis.__bundlerPathsOverrides : {};
5687
- const toExecute = bundlerOverrides["thread-stream-worker"] || join24(__dirname, "lib", "worker.js");
5687
+ const toExecute = bundlerOverrides["thread-stream-worker"] || join25(__dirname, "lib", "worker.js");
5688
5688
  const worker = new Worker(toExecute, {
5689
5689
  ...opts.workerOpts,
5690
5690
  trackUnmanagedFds: false,
@@ -6070,7 +6070,7 @@ var require_transport = __commonJS({
6070
6070
  "use strict";
6071
6071
  var { createRequire: createRequire2 } = __require("module");
6072
6072
  var getCallers = require_caller();
6073
- var { join: join24, isAbsolute, sep: sep3 } = __require("node:path");
6073
+ var { join: join25, isAbsolute: isAbsolute3, sep: sep3 } = __require("node:path");
6074
6074
  var sleep2 = require_atomic_sleep();
6075
6075
  var onExit = require_on_exit_leak_free();
6076
6076
  var ThreadStream = require_thread_stream();
@@ -6133,7 +6133,7 @@ var require_transport = __commonJS({
6133
6133
  throw new Error("only one of target or targets can be specified");
6134
6134
  }
6135
6135
  if (targets) {
6136
- target = bundlerOverrides["pino-worker"] || join24(__dirname, "worker.js");
6136
+ target = bundlerOverrides["pino-worker"] || join25(__dirname, "worker.js");
6137
6137
  options2.targets = targets.filter((dest) => dest.target).map((dest) => {
6138
6138
  return {
6139
6139
  ...dest,
@@ -6151,7 +6151,7 @@ var require_transport = __commonJS({
6151
6151
  });
6152
6152
  });
6153
6153
  } else if (pipeline) {
6154
- target = bundlerOverrides["pino-worker"] || join24(__dirname, "worker.js");
6154
+ target = bundlerOverrides["pino-worker"] || join25(__dirname, "worker.js");
6155
6155
  options2.pipelines = [pipeline.map((dest) => {
6156
6156
  return {
6157
6157
  ...dest,
@@ -6169,11 +6169,11 @@ var require_transport = __commonJS({
6169
6169
  return buildStream(fixTarget(target), options2, worker, sync);
6170
6170
  function fixTarget(origin) {
6171
6171
  origin = bundlerOverrides[origin] || origin;
6172
- if (isAbsolute(origin) || origin.indexOf("file://") === 0) {
6172
+ if (isAbsolute3(origin) || origin.indexOf("file://") === 0) {
6173
6173
  return origin;
6174
6174
  }
6175
6175
  if (origin === "pino/file") {
6176
- return join24(__dirname, "..", "file.js");
6176
+ return join25(__dirname, "..", "file.js");
6177
6177
  }
6178
6178
  let fixTarget2;
6179
6179
  for (const filePath of callers) {
@@ -6501,11 +6501,11 @@ var require_tools = __commonJS({
6501
6501
  }
6502
6502
  }
6503
6503
  }
6504
- function buildFormatters(level, bindings, log26) {
6504
+ function buildFormatters(level, bindings, log27) {
6505
6505
  return {
6506
6506
  level,
6507
6507
  bindings,
6508
- log: log26
6508
+ log: log27
6509
6509
  };
6510
6510
  }
6511
6511
  function normalizeDestFileDescriptor(destination) {
@@ -6888,11 +6888,11 @@ var require_proto = __commonJS({
6888
6888
  }
6889
6889
  } else instance[serializersSym] = serializers;
6890
6890
  if (options2.hasOwnProperty("formatters")) {
6891
- const { level, bindings: chindings, log: log26 } = options2.formatters;
6891
+ const { level, bindings: chindings, log: log27 } = options2.formatters;
6892
6892
  instance[formattersSym] = buildFormatters(
6893
6893
  level || formatters.level,
6894
6894
  chindings || resetChildingsFormatter,
6895
- log26 || formatters.log
6895
+ log27 || formatters.log
6896
6896
  );
6897
6897
  } else {
6898
6898
  instance[formattersSym] = buildFormatters(
@@ -7162,7 +7162,7 @@ var require_safe_stable_stringify = __commonJS({
7162
7162
  return circularValue;
7163
7163
  }
7164
7164
  let res = "";
7165
- let join24 = ",";
7165
+ let join25 = ",";
7166
7166
  const originalIndentation = indentation;
7167
7167
  if (Array.isArray(value)) {
7168
7168
  if (value.length === 0) {
@@ -7176,7 +7176,7 @@ var require_safe_stable_stringify = __commonJS({
7176
7176
  indentation += spacer;
7177
7177
  res += `
7178
7178
  ${indentation}`;
7179
- join24 = `,
7179
+ join25 = `,
7180
7180
  ${indentation}`;
7181
7181
  }
7182
7182
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -7184,13 +7184,13 @@ ${indentation}`;
7184
7184
  for (; i2 < maximumValuesToStringify - 1; i2++) {
7185
7185
  const tmp2 = stringifyFnReplacer(String(i2), value, stack, replacer, spacer, indentation);
7186
7186
  res += tmp2 !== void 0 ? tmp2 : "null";
7187
- res += join24;
7187
+ res += join25;
7188
7188
  }
7189
7189
  const tmp = stringifyFnReplacer(String(i2), value, stack, replacer, spacer, indentation);
7190
7190
  res += tmp !== void 0 ? tmp : "null";
7191
7191
  if (value.length - 1 > maximumBreadth) {
7192
7192
  const removedKeys = value.length - maximumBreadth - 1;
7193
- res += `${join24}"... ${getItemCount(removedKeys)} not stringified"`;
7193
+ res += `${join25}"... ${getItemCount(removedKeys)} not stringified"`;
7194
7194
  }
7195
7195
  if (spacer !== "") {
7196
7196
  res += `
@@ -7211,7 +7211,7 @@ ${originalIndentation}`;
7211
7211
  let separator = "";
7212
7212
  if (spacer !== "") {
7213
7213
  indentation += spacer;
7214
- join24 = `,
7214
+ join25 = `,
7215
7215
  ${indentation}`;
7216
7216
  whitespace = " ";
7217
7217
  }
@@ -7225,13 +7225,13 @@ ${indentation}`;
7225
7225
  const tmp = stringifyFnReplacer(key2, value, stack, replacer, spacer, indentation);
7226
7226
  if (tmp !== void 0) {
7227
7227
  res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
7228
- separator = join24;
7228
+ separator = join25;
7229
7229
  }
7230
7230
  }
7231
7231
  if (keyLength > maximumBreadth) {
7232
7232
  const removedKeys = keyLength - maximumBreadth;
7233
7233
  res += `${separator}"...":${whitespace}"${getItemCount(removedKeys)} not stringified"`;
7234
- separator = join24;
7234
+ separator = join25;
7235
7235
  }
7236
7236
  if (spacer !== "" && separator.length > 1) {
7237
7237
  res = `
@@ -7272,7 +7272,7 @@ ${originalIndentation}`;
7272
7272
  }
7273
7273
  const originalIndentation = indentation;
7274
7274
  let res = "";
7275
- let join24 = ",";
7275
+ let join25 = ",";
7276
7276
  if (Array.isArray(value)) {
7277
7277
  if (value.length === 0) {
7278
7278
  return "[]";
@@ -7285,7 +7285,7 @@ ${originalIndentation}`;
7285
7285
  indentation += spacer;
7286
7286
  res += `
7287
7287
  ${indentation}`;
7288
- join24 = `,
7288
+ join25 = `,
7289
7289
  ${indentation}`;
7290
7290
  }
7291
7291
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -7293,13 +7293,13 @@ ${indentation}`;
7293
7293
  for (; i2 < maximumValuesToStringify - 1; i2++) {
7294
7294
  const tmp2 = stringifyArrayReplacer(String(i2), value[i2], stack, replacer, spacer, indentation);
7295
7295
  res += tmp2 !== void 0 ? tmp2 : "null";
7296
- res += join24;
7296
+ res += join25;
7297
7297
  }
7298
7298
  const tmp = stringifyArrayReplacer(String(i2), value[i2], stack, replacer, spacer, indentation);
7299
7299
  res += tmp !== void 0 ? tmp : "null";
7300
7300
  if (value.length - 1 > maximumBreadth) {
7301
7301
  const removedKeys = value.length - maximumBreadth - 1;
7302
- res += `${join24}"... ${getItemCount(removedKeys)} not stringified"`;
7302
+ res += `${join25}"... ${getItemCount(removedKeys)} not stringified"`;
7303
7303
  }
7304
7304
  if (spacer !== "") {
7305
7305
  res += `
@@ -7312,7 +7312,7 @@ ${originalIndentation}`;
7312
7312
  let whitespace = "";
7313
7313
  if (spacer !== "") {
7314
7314
  indentation += spacer;
7315
- join24 = `,
7315
+ join25 = `,
7316
7316
  ${indentation}`;
7317
7317
  whitespace = " ";
7318
7318
  }
@@ -7321,7 +7321,7 @@ ${indentation}`;
7321
7321
  const tmp = stringifyArrayReplacer(key2, value[key2], stack, replacer, spacer, indentation);
7322
7322
  if (tmp !== void 0) {
7323
7323
  res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
7324
- separator = join24;
7324
+ separator = join25;
7325
7325
  }
7326
7326
  }
7327
7327
  if (spacer !== "" && separator.length > 1) {
@@ -7379,20 +7379,20 @@ ${originalIndentation}`;
7379
7379
  indentation += spacer;
7380
7380
  let res2 = `
7381
7381
  ${indentation}`;
7382
- const join25 = `,
7382
+ const join26 = `,
7383
7383
  ${indentation}`;
7384
7384
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
7385
7385
  let i2 = 0;
7386
7386
  for (; i2 < maximumValuesToStringify - 1; i2++) {
7387
7387
  const tmp2 = stringifyIndent(String(i2), value[i2], stack, spacer, indentation);
7388
7388
  res2 += tmp2 !== void 0 ? tmp2 : "null";
7389
- res2 += join25;
7389
+ res2 += join26;
7390
7390
  }
7391
7391
  const tmp = stringifyIndent(String(i2), value[i2], stack, spacer, indentation);
7392
7392
  res2 += tmp !== void 0 ? tmp : "null";
7393
7393
  if (value.length - 1 > maximumBreadth) {
7394
7394
  const removedKeys = value.length - maximumBreadth - 1;
7395
- res2 += `${join25}"... ${getItemCount(removedKeys)} not stringified"`;
7395
+ res2 += `${join26}"... ${getItemCount(removedKeys)} not stringified"`;
7396
7396
  }
7397
7397
  res2 += `
7398
7398
  ${originalIndentation}`;
@@ -7408,16 +7408,16 @@ ${originalIndentation}`;
7408
7408
  return '"[Object]"';
7409
7409
  }
7410
7410
  indentation += spacer;
7411
- const join24 = `,
7411
+ const join25 = `,
7412
7412
  ${indentation}`;
7413
7413
  let res = "";
7414
7414
  let separator = "";
7415
7415
  let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
7416
7416
  if (isTypedArrayWithEntries(value)) {
7417
- res += stringifyTypedArray(value, join24, maximumBreadth);
7417
+ res += stringifyTypedArray(value, join25, maximumBreadth);
7418
7418
  keys = keys.slice(value.length);
7419
7419
  maximumPropertiesToStringify -= value.length;
7420
- separator = join24;
7420
+ separator = join25;
7421
7421
  }
7422
7422
  if (deterministic) {
7423
7423
  keys = sort(keys, comparator);
@@ -7428,13 +7428,13 @@ ${indentation}`;
7428
7428
  const tmp = stringifyIndent(key2, value[key2], stack, spacer, indentation);
7429
7429
  if (tmp !== void 0) {
7430
7430
  res += `${separator}${strEscape(key2)}: ${tmp}`;
7431
- separator = join24;
7431
+ separator = join25;
7432
7432
  }
7433
7433
  }
7434
7434
  if (keyLength > maximumBreadth) {
7435
7435
  const removedKeys = keyLength - maximumBreadth;
7436
7436
  res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
7437
- separator = join24;
7437
+ separator = join25;
7438
7438
  }
7439
7439
  if (separator !== "") {
7440
7440
  res = `
@@ -61593,14 +61593,14 @@ function composeSets(setA, setB, mkSet = false) {
61593
61593
  let sections = [];
61594
61594
  let insert2 = mkSet ? [] : null;
61595
61595
  let a6 = new SectionIter(setA), b10 = new SectionIter(setB);
61596
- for (let open2 = false; ; ) {
61596
+ for (let open3 = false; ; ) {
61597
61597
  if (a6.done && b10.done) {
61598
61598
  return insert2 ? ChangeSet.createSet(sections, insert2) : ChangeDesc.create(sections);
61599
61599
  } else if (a6.ins == 0) {
61600
- addSection(sections, a6.len, 0, open2);
61600
+ addSection(sections, a6.len, 0, open3);
61601
61601
  a6.next();
61602
61602
  } else if (b10.len == 0 && !b10.done) {
61603
- addSection(sections, 0, b10.ins, open2);
61603
+ addSection(sections, 0, b10.ins, open3);
61604
61604
  if (insert2)
61605
61605
  addInsert(insert2, sections, b10.text);
61606
61606
  b10.next();
@@ -61610,19 +61610,19 @@ function composeSets(setA, setB, mkSet = false) {
61610
61610
  let len = Math.min(a6.len2, b10.len), sectionLen = sections.length;
61611
61611
  if (a6.ins == -1) {
61612
61612
  let insB = b10.ins == -1 ? -1 : b10.off ? 0 : b10.ins;
61613
- addSection(sections, len, insB, open2);
61613
+ addSection(sections, len, insB, open3);
61614
61614
  if (insert2 && insB)
61615
61615
  addInsert(insert2, sections, b10.text);
61616
61616
  } else if (b10.ins == -1) {
61617
- addSection(sections, a6.off ? 0 : a6.len, len, open2);
61617
+ addSection(sections, a6.off ? 0 : a6.len, len, open3);
61618
61618
  if (insert2)
61619
61619
  addInsert(insert2, sections, a6.textBit(len));
61620
61620
  } else {
61621
- addSection(sections, a6.off ? 0 : a6.len, b10.off ? 0 : b10.ins, open2);
61621
+ addSection(sections, a6.off ? 0 : a6.len, b10.off ? 0 : b10.ins, open3);
61622
61622
  if (insert2 && !b10.off)
61623
61623
  addInsert(insert2, sections, b10.text);
61624
61624
  }
61625
- open2 = (a6.ins > len || b10.ins >= 0 && b10.len > len) && (open2 || sections.length > sectionLen);
61625
+ open3 = (a6.ins > len || b10.ins >= 0 && b10.len > len) && (open3 || sections.length > sectionLen);
61626
61626
  a6.forward2(len);
61627
61627
  b10.forward(len);
61628
61628
  }
@@ -62188,9 +62188,9 @@ var init_dist3 = __esm({
62188
62188
  line2++;
62189
62189
  }
62190
62190
  }
62191
- decompose(from, to, target, open2) {
62191
+ decompose(from, to, target, open3) {
62192
62192
  let text4 = from <= 0 && to >= this.length ? this : new _TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));
62193
- if (open2 & 1) {
62193
+ if (open3 & 1) {
62194
62194
  let prev = target.pop();
62195
62195
  let joined = appendText(text4.text, prev.text.slice(), 0, text4.length);
62196
62196
  if (joined.length <= 32) {
@@ -62267,11 +62267,11 @@ var init_dist3 = __esm({
62267
62267
  line2 = endLine + 1;
62268
62268
  }
62269
62269
  }
62270
- decompose(from, to, target, open2) {
62270
+ decompose(from, to, target, open3) {
62271
62271
  for (let i2 = 0, pos = 0; pos <= to && i2 < this.children.length; i2++) {
62272
62272
  let child = this.children[i2], end = pos + child.length;
62273
62273
  if (from <= end && to >= pos) {
62274
- let childOpen = open2 & ((pos <= from ? 1 : 0) | (end >= to ? 2 : 0));
62274
+ let childOpen = open3 & ((pos <= from ? 1 : 0) | (end >= to ? 2 : 0));
62275
62275
  if (pos >= from && end <= to && !childOpen)
62276
62276
  target.push(child);
62277
62277
  else
@@ -64744,10 +64744,10 @@ var init_dist3 = __esm({
64744
64744
  return active.reverse();
64745
64745
  }
64746
64746
  openEnd(to) {
64747
- let open2 = 0;
64747
+ let open3 = 0;
64748
64748
  for (let i2 = this.activeTo.length - 1; i2 >= 0 && this.activeTo[i2] > to; i2--)
64749
- open2++;
64750
- return open2;
64749
+ open3++;
64750
+ return open3;
64751
64751
  }
64752
64752
  };
64753
64753
  }
@@ -65731,14 +65731,14 @@ function getIsolatedRanges(view, line2) {
65731
65731
  RangeSet.spans(sets, line2.from, line2.to, {
65732
65732
  point() {
65733
65733
  },
65734
- span(fromDoc, toDoc, active, open2) {
65734
+ span(fromDoc, toDoc, active, open3) {
65735
65735
  let from = fromDoc - line2.from, to = toDoc - line2.from;
65736
65736
  let level = result;
65737
- for (let i2 = active.length - 1; i2 >= 0; i2--, open2--) {
65737
+ for (let i2 = active.length - 1; i2 >= 0; i2--, open3--) {
65738
65738
  let direction = active[i2].spec.bidiIsolate, update;
65739
65739
  if (direction == null)
65740
65740
  direction = autoDirection(line2.text, from, to);
65741
- if (open2 > 0 && level.length && (update = level[level.length - 1]).to == from && update.direction == direction) {
65741
+ if (open3 > 0 && level.length && (update = level[level.length - 1]).to == from && update.direction == direction) {
65742
65742
  update.to = to;
65743
65743
  level = update.inner;
65744
65744
  } else {
@@ -86574,11 +86574,11 @@ var require_core = __commonJS({
86574
86574
  Ajv2.ValidationError = validation_error_1.default;
86575
86575
  Ajv2.MissingRefError = ref_error_1.default;
86576
86576
  exports.default = Ajv2;
86577
- function checkOptions(checkOpts, options2, msg, log26 = "error") {
86577
+ function checkOptions(checkOpts, options2, msg, log27 = "error") {
86578
86578
  for (const key in checkOpts) {
86579
86579
  const opt = key;
86580
86580
  if (opt in options2)
86581
- this.logger[log26](`${msg}: option ${key}. ${checkOpts[opt]}`);
86581
+ this.logger[log27](`${msg}: option ${key}. ${checkOpts[opt]}`);
86582
86582
  }
86583
86583
  }
86584
86584
  function getSchEnv(keyRef) {
@@ -89062,7 +89062,7 @@ var require_dist5 = __commonJS({
89062
89062
  // start-server.ts
89063
89063
  import { appendFileSync as appendFileSync2, createReadStream as createReadStream3, mkdirSync as mkdirSync8, readFileSync as readFileSync9, statSync as statSync7 } from "node:fs";
89064
89064
  import { createServer } from "node:http";
89065
- import { basename as basename2, join as join23, resolve as resolve7 } from "node:path";
89065
+ import { basename as basename3, join as join24, resolve as resolve7 } from "node:path";
89066
89066
 
89067
89067
  // ../../node_modules/.pnpm/@trpc+server@11.12.0_typescript@5.9.3/node_modules/@trpc/server/dist/codes-DagpWZLc.mjs
89068
89068
  function mergeWithoutOverrides(obj1, ...objs) {
@@ -109498,7 +109498,7 @@ var Dialog = (props) => {
109498
109498
  } = props;
109499
109499
  const triggerRef = React18.useRef(null);
109500
109500
  const contentRef = React18.useRef(null);
109501
- const [open2, setOpen] = useControllableState({
109501
+ const [open3, setOpen] = useControllableState({
109502
109502
  prop: openProp,
109503
109503
  defaultProp: defaultOpen ?? false,
109504
109504
  onChange: onOpenChange,
@@ -109513,7 +109513,7 @@ var Dialog = (props) => {
109513
109513
  contentId: useId(),
109514
109514
  titleId: useId(),
109515
109515
  descriptionId: useId(),
109516
- open: open2,
109516
+ open: open3,
109517
109517
  onOpenChange: setOpen,
109518
109518
  onOpenToggle: React18.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
109519
109519
  modal,
@@ -109741,8 +109741,8 @@ var DialogClose = React18.forwardRef(
109741
109741
  }
109742
109742
  );
109743
109743
  DialogClose.displayName = CLOSE_NAME;
109744
- function getState(open2) {
109745
- return open2 ? "open" : "closed";
109744
+ function getState(open3) {
109745
+ return open3 ? "open" : "closed";
109746
109746
  }
109747
109747
  var TITLE_WARNING_NAME = "DialogTitleWarning";
109748
109748
  var [WarningProvider, useWarningContext] = createContext2(TITLE_WARNING_NAME, {
@@ -111574,7 +111574,7 @@ function useFloating(options2) {
111574
111574
  } = {},
111575
111575
  transform: transform2 = true,
111576
111576
  whileElementsMounted,
111577
- open: open2
111577
+ open: open3
111578
111578
  } = options2;
111579
111579
  const [data, setData] = React20.useState({
111580
111580
  x: 0,
@@ -111610,7 +111610,7 @@ function useFloating(options2) {
111610
111610
  const hasWhileElementsMounted = whileElementsMounted != null;
111611
111611
  const whileElementsMountedRef = useLatestRef(whileElementsMounted);
111612
111612
  const platformRef = useLatestRef(platform3);
111613
- const openRef = useLatestRef(open2);
111613
+ const openRef = useLatestRef(open3);
111614
111614
  const update = React20.useCallback(() => {
111615
111615
  if (!referenceRef.current || !floatingRef.current) {
111616
111616
  return;
@@ -111641,14 +111641,14 @@ function useFloating(options2) {
111641
111641
  });
111642
111642
  }, [latestMiddleware, placement, strategy, platformRef, openRef]);
111643
111643
  index(() => {
111644
- if (open2 === false && dataRef.current.isPositioned) {
111644
+ if (open3 === false && dataRef.current.isPositioned) {
111645
111645
  dataRef.current.isPositioned = false;
111646
111646
  setData((data2) => ({
111647
111647
  ...data2,
111648
111648
  isPositioned: false
111649
111649
  }));
111650
111650
  }
111651
- }, [open2]);
111651
+ }, [open3]);
111652
111652
  const isMountedRef = React20.useRef(false);
111653
111653
  index(() => {
111654
111654
  isMountedRef.current = true;
@@ -112332,7 +112332,7 @@ var useRovingFocusGroupScope = createRovingFocusGroupScope();
112332
112332
  var [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);
112333
112333
  var [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);
112334
112334
  var Menu = (props) => {
112335
- const { __scopeMenu, open: open2 = false, children, dir, onOpenChange, modal = true } = props;
112335
+ const { __scopeMenu, open: open3 = false, children, dir, onOpenChange, modal = true } = props;
112336
112336
  const popperScope = usePopperScope(__scopeMenu);
112337
112337
  const [content2, setContent] = React27.useState(null);
112338
112338
  const isUsingKeyboardRef = React27.useRef(false);
@@ -112356,7 +112356,7 @@ var Menu = (props) => {
112356
112356
  MenuProvider,
112357
112357
  {
112358
112358
  scope: __scopeMenu,
112359
- open: open2,
112359
+ open: open3,
112360
112360
  onOpenChange: handleOpenChange,
112361
112361
  content: content2,
112362
112362
  onContentChange: setContent,
@@ -112866,7 +112866,7 @@ MenuArrow.displayName = ARROW_NAME2;
112866
112866
  var SUB_NAME = "MenuSub";
112867
112867
  var [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);
112868
112868
  var MenuSub = (props) => {
112869
- const { __scopeMenu, children, open: open2 = false, onOpenChange } = props;
112869
+ const { __scopeMenu, children, open: open3 = false, onOpenChange } = props;
112870
112870
  const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);
112871
112871
  const popperScope = usePopperScope(__scopeMenu);
112872
112872
  const [trigger, setTrigger] = React27.useState(null);
@@ -112880,7 +112880,7 @@ var MenuSub = (props) => {
112880
112880
  MenuProvider,
112881
112881
  {
112882
112882
  scope: __scopeMenu,
112883
- open: open2,
112883
+ open: open3,
112884
112884
  onOpenChange: handleOpenChange,
112885
112885
  content: content2,
112886
112886
  onContentChange: setContent,
@@ -113048,8 +113048,8 @@ var MenuSubContent = React27.forwardRef(
113048
113048
  }
113049
113049
  );
113050
113050
  MenuSubContent.displayName = SUB_CONTENT_NAME;
113051
- function getOpenState(open2) {
113052
- return open2 ? "open" : "closed";
113051
+ function getOpenState(open3) {
113052
+ return open3 ? "open" : "closed";
113053
113053
  }
113054
113054
  function isIndeterminate(checked) {
113055
113055
  return checked === "indeterminate";
@@ -113130,7 +113130,7 @@ var useMenuScope = createMenuScope();
113130
113130
  var [ContextMenuProvider, useContextMenuContext] = createContextMenuContext(CONTEXT_MENU_NAME);
113131
113131
  var ContextMenu = (props) => {
113132
113132
  const { __scopeContextMenu, children, onOpenChange, dir, modal = true } = props;
113133
- const [open2, setOpen] = React28.useState(false);
113133
+ const [open3, setOpen] = React28.useState(false);
113134
113134
  const menuScope = useMenuScope(__scopeContextMenu);
113135
113135
  const handleOpenChangeProp = useCallbackRef(onOpenChange);
113136
113136
  const handleOpenChange = React28.useCallback(
@@ -113144,7 +113144,7 @@ var ContextMenu = (props) => {
113144
113144
  ContextMenuProvider,
113145
113145
  {
113146
113146
  scope: __scopeContextMenu,
113147
- open: open2,
113147
+ open: open3,
113148
113148
  onOpenChange: handleOpenChange,
113149
113149
  modal,
113150
113150
  children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
@@ -113152,7 +113152,7 @@ var ContextMenu = (props) => {
113152
113152
  {
113153
113153
  ...menuScope,
113154
113154
  dir,
113155
- open: open2,
113155
+ open: open3,
113156
113156
  onOpenChange: handleOpenChange,
113157
113157
  modal,
113158
113158
  children
@@ -113339,13 +113339,13 @@ var SUB_NAME2 = "ContextMenuSub";
113339
113339
  var ContextMenuSub = (props) => {
113340
113340
  const { __scopeContextMenu, children, onOpenChange, open: openProp, defaultOpen } = props;
113341
113341
  const menuScope = useMenuScope(__scopeContextMenu);
113342
- const [open2, setOpen] = useControllableState({
113342
+ const [open3, setOpen] = useControllableState({
113343
113343
  prop: openProp,
113344
113344
  defaultProp: defaultOpen ?? false,
113345
113345
  onChange: onOpenChange,
113346
113346
  caller: SUB_NAME2
113347
113347
  });
113348
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Sub, { ...menuScope, open: open2, onOpenChange: setOpen, children });
113348
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Sub, { ...menuScope, open: open3, onOpenChange: setOpen, children });
113349
113349
  };
113350
113350
  ContextMenuSub.displayName = SUB_NAME2;
113351
113351
  var SUB_TRIGGER_NAME2 = "ContextMenuSubTrigger";
@@ -113489,7 +113489,7 @@ var Tooltip = (props) => {
113489
113489
  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
113490
113490
  const delayDuration = delayDurationProp ?? providerContext.delayDuration;
113491
113491
  const wasOpenDelayedRef = React29.useRef(false);
113492
- const [open2, setOpen] = useControllableState({
113492
+ const [open3, setOpen] = useControllableState({
113493
113493
  prop: openProp,
113494
113494
  defaultProp: defaultOpen ?? false,
113495
113495
  onChange: (open22) => {
@@ -113504,8 +113504,8 @@ var Tooltip = (props) => {
113504
113504
  caller: TOOLTIP_NAME
113505
113505
  });
113506
113506
  const stateAttribute = React29.useMemo(() => {
113507
- return open2 ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
113508
- }, [open2]);
113507
+ return open3 ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
113508
+ }, [open3]);
113509
113509
  const handleOpen = React29.useCallback(() => {
113510
113510
  window.clearTimeout(openTimerRef.current);
113511
113511
  openTimerRef.current = 0;
@@ -113538,7 +113538,7 @@ var Tooltip = (props) => {
113538
113538
  {
113539
113539
  scope: __scopeTooltip,
113540
113540
  contentId,
113541
- open: open2,
113541
+ open: open3,
113542
113542
  stateAttribute,
113543
113543
  trigger,
113544
113544
  onTriggerChange: setTrigger,
@@ -120411,6 +120411,58 @@ var import_react25 = __toESM(require_react(), 1);
120411
120411
  // ../../packages/dashboard-core/src/hooks/use-search.ts
120412
120412
  var import_react26 = __toESM(require_react(), 1);
120413
120413
 
120414
+ // ../../packages/dashboard-core/src/lib/language-map.ts
120415
+ var SUPPORTED_LANGUAGES = [
120416
+ { id: "plaintext", label: "Plain Text" },
120417
+ { id: "bash", label: "Bash / Shell" },
120418
+ { id: "c", label: "C" },
120419
+ { id: "clojure", label: "Clojure" },
120420
+ { id: "cpp", label: "C++" },
120421
+ { id: "csharp", label: "C#" },
120422
+ { id: "css", label: "CSS" },
120423
+ { id: "dart", label: "Dart" },
120424
+ { id: "diff", label: "Diff" },
120425
+ { id: "dockerfile", label: "Dockerfile" },
120426
+ { id: "elixir", label: "Elixir" },
120427
+ { id: "erlang", label: "Erlang" },
120428
+ { id: "go", label: "Go" },
120429
+ { id: "graphql", label: "GraphQL" },
120430
+ { id: "haskell", label: "Haskell" },
120431
+ { id: "hcl", label: "HCL / Terraform" },
120432
+ { id: "html", label: "HTML" },
120433
+ { id: "ini", label: "INI" },
120434
+ { id: "java", label: "Java" },
120435
+ { id: "javascript", label: "JavaScript" },
120436
+ { id: "json", label: "JSON" },
120437
+ { id: "jsonc", label: "JSON with Comments" },
120438
+ { id: "jsx", label: "JavaScript (JSX)" },
120439
+ { id: "kotlin", label: "Kotlin" },
120440
+ { id: "less", label: "Less" },
120441
+ { id: "lua", label: "Lua" },
120442
+ { id: "makefile", label: "Makefile" },
120443
+ { id: "markdown", label: "Markdown" },
120444
+ { id: "mdx", label: "MDX" },
120445
+ { id: "php", label: "PHP" },
120446
+ { id: "powershell", label: "PowerShell" },
120447
+ { id: "python", label: "Python" },
120448
+ { id: "r", label: "R" },
120449
+ { id: "ruby", label: "Ruby" },
120450
+ { id: "rust", label: "Rust" },
120451
+ { id: "sass", label: "Sass" },
120452
+ { id: "scala", label: "Scala" },
120453
+ { id: "scss", label: "SCSS" },
120454
+ { id: "sql", label: "SQL" },
120455
+ { id: "svelte", label: "Svelte" },
120456
+ { id: "swift", label: "Swift" },
120457
+ { id: "toml", label: "TOML" },
120458
+ { id: "typescript", label: "TypeScript" },
120459
+ { id: "tsx", label: "TypeScript (TSX)" },
120460
+ { id: "vue", label: "Vue" },
120461
+ { id: "xml", label: "XML" },
120462
+ { id: "yaml", label: "YAML" }
120463
+ ];
120464
+ var LANGUAGE_LABEL_BY_ID = new Map(SUPPORTED_LANGUAGES.map((l) => [l.id, l.label]));
120465
+
120414
120466
  // ../../packages/dashboard-core/src/components/ChangesFileTree.tsx
120415
120467
  var import_react28 = __toESM(require_react(), 1);
120416
120468
 
@@ -120555,13 +120607,13 @@ var filenameIconMap = {
120555
120607
  };
120556
120608
  function getFileIcon(filename) {
120557
120609
  const lower = filename.toLowerCase();
120558
- const basename3 = lower.split("/").pop() ?? lower;
120559
- if (filenameIconMap[basename3]) {
120560
- return filenameIconMap[basename3];
120610
+ const basename4 = lower.split("/").pop() ?? lower;
120611
+ if (filenameIconMap[basename4]) {
120612
+ return filenameIconMap[basename4];
120561
120613
  }
120562
- const dotIndex = basename3.lastIndexOf(".");
120614
+ const dotIndex = basename4.lastIndexOf(".");
120563
120615
  if (dotIndex !== -1) {
120564
- const ext = basename3.slice(dotIndex + 1);
120616
+ const ext = basename4.slice(dotIndex + 1);
120565
120617
  if (extensionIconMap[ext]) {
120566
120618
  return extensionIconMap[ext];
120567
120619
  }
@@ -121007,8 +121059,8 @@ function TreeNode2({
121007
121059
  ) : /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
121008
121060
  ContextMenu2,
121009
121061
  {
121010
- onOpenChange: (open2) => {
121011
- if (open2) onSelectRow(entryPath, isDir ? "directory" : "file");
121062
+ onOpenChange: (open3) => {
121063
+ if (open3) onSelectRow(entryPath, isDir ? "directory" : "file");
121012
121064
  },
121013
121065
  children: [
121014
121066
  /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ContextMenuTrigger2, { asChild: true, children: button }),
@@ -121635,8 +121687,8 @@ var FileBrowser = (0, import_react31.forwardRef)(function FileBrowser2({
121635
121687
  /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
121636
121688
  ContextMenu2,
121637
121689
  {
121638
- onOpenChange: (open2) => {
121639
- if (open2) clearTreeSelection();
121690
+ onOpenChange: (open3) => {
121691
+ if (open3) clearTreeSelection();
121640
121692
  },
121641
121693
  children: [
121642
121694
  /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ContextMenuTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "min-h-0 flex-1 overflow-y-auto py-1 pl-px", children: [
@@ -121728,8 +121780,8 @@ var FileBrowser = (0, import_react31.forwardRef)(function FileBrowser2({
121728
121780
  Dialog2,
121729
121781
  {
121730
121782
  open: pendingDelete !== null,
121731
- onOpenChange: (open2) => {
121732
- if (!open2) cancelDelete();
121783
+ onOpenChange: (open3) => {
121784
+ if (!open3) cancelDelete();
121733
121785
  },
121734
121786
  children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(DialogContent2, { className: "sm:max-w-[425px]", onClick: (e2) => e2.stopPropagation(), children: [
121735
121787
  /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(DialogHeader, { children: [
@@ -121776,35 +121828,39 @@ var FileBrowser = (0, import_react31.forwardRef)(function FileBrowser2({
121776
121828
  });
121777
121829
 
121778
121830
  // ../../packages/dashboard-core/src/components/FileViewer.tsx
121779
- var import_react33 = __toESM(require_react(), 1);
121831
+ var import_react34 = __toESM(require_react(), 1);
121780
121832
 
121781
121833
  // ../../packages/dashboard-core/src/components/ImagePreview.tsx
121782
121834
  var import_react32 = __toESM(require_react(), 1);
121783
121835
  var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
121784
121836
 
121785
- // ../../packages/dashboard-core/src/components/PdfPreview.tsx
121837
+ // ../../packages/dashboard-core/src/components/LanguagePickerDialog.tsx
121838
+ var import_react33 = __toESM(require_react(), 1);
121786
121839
  var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
121787
121840
 
121788
- // ../../packages/dashboard-core/src/components/FileViewer.tsx
121841
+ // ../../packages/dashboard-core/src/components/PdfPreview.tsx
121789
121842
  var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1);
121790
121843
 
121791
- // ../../packages/dashboard-core/src/components/QuickOpenDialog.tsx
121792
- var import_react34 = __toESM(require_react(), 1);
121844
+ // ../../packages/dashboard-core/src/components/FileViewer.tsx
121793
121845
  var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1);
121794
121846
 
121795
- // ../../packages/dashboard-core/src/components/SearchFilesDialog.tsx
121847
+ // ../../packages/dashboard-core/src/components/QuickOpenDialog.tsx
121796
121848
  var import_react35 = __toESM(require_react(), 1);
121797
121849
  var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1);
121798
121850
 
121799
- // ../../packages/dashboard-core/src/components/WorkspacePickerDialog.tsx
121851
+ // ../../packages/dashboard-core/src/components/SearchFilesDialog.tsx
121800
121852
  var import_react36 = __toESM(require_react(), 1);
121801
121853
  var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
121802
121854
 
121803
- // ../../packages/dashboard-core/src/components/WorkspaceTabNav.tsx
121855
+ // ../../packages/dashboard-core/src/components/WorkspacePickerDialog.tsx
121856
+ var import_react37 = __toESM(require_react(), 1);
121804
121857
  var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
121805
121858
 
121859
+ // ../../packages/dashboard-core/src/components/WorkspaceTabNav.tsx
121860
+ var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
121861
+
121806
121862
  // ../../packages/dashboard-core/src/hooks/use-editor-history.ts
121807
- var import_react37 = __toESM(require_react(), 1);
121863
+ var import_react38 = __toESM(require_react(), 1);
121808
121864
 
121809
121865
  // ../../node_modules/.pnpm/marked@15.0.12/node_modules/marked/lib/marked.esm.js
121810
121866
  function _getDefaults() {
@@ -124604,7 +124660,7 @@ function sql(strings, ...params) {
124604
124660
  return new SQL([new StringChunk(str)]);
124605
124661
  }
124606
124662
  _sql.raw = raw;
124607
- function join24(chunks, separator) {
124663
+ function join25(chunks, separator) {
124608
124664
  const result = [];
124609
124665
  for (const [i2, chunk] of chunks.entries()) {
124610
124666
  if (i2 > 0 && separator !== void 0) result.push(separator);
@@ -124612,7 +124668,7 @@ function sql(strings, ...params) {
124612
124668
  }
124613
124669
  return new SQL(result);
124614
124670
  }
124615
- _sql.join = join24;
124671
+ _sql.join = join25;
124616
124672
  function identifier(value) {
124617
124673
  return new Name(value);
124618
124674
  }
@@ -129114,7 +129170,7 @@ var SQLiteSelectQueryBuilderBase = class extends TypedQueryBuilder {
129114
129170
  const baseTableName = this.tableName;
129115
129171
  const tableName = getTableLikeName(table);
129116
129172
  for (const item of extractUsedTable(table)) this.usedTables.add(item);
129117
- if (typeof tableName === "string" && this.config.joins?.some((join24) => join24.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
129173
+ if (typeof tableName === "string" && this.config.joins?.some((join25) => join25.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
129118
129174
  if (!this.isPartialSelect) {
129119
129175
  if (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === "string") this.config.fields = { [baseTableName]: this.config.fields };
129120
129176
  if (typeof tableName === "string" && !is(table, SQL)) {
@@ -130322,7 +130378,7 @@ var SQLiteDialect = class {
130322
130378
  if (!joins2) return;
130323
130379
  const withEntries = Object.entries(joins2).filter(([_4, v4]) => v4);
130324
130380
  if (!withEntries.length) return;
130325
- return sql.join(withEntries.map(([k4, join24]) => {
130381
+ return sql.join(withEntries.map(([k4, join25]) => {
130326
130382
  const relation = tableConfig.relations[k4];
130327
130383
  const isSingle2 = is(relation, One);
130328
130384
  const targetTable = aliasedTable(relation.targetTable, `d${currentDepth + 1}`);
@@ -130333,7 +130389,7 @@ var SQLiteDialect = class {
130333
130389
  table: targetTable,
130334
130390
  mode: isSingle2 ? "first" : "many",
130335
130391
  schema,
130336
- queryConfig: join24,
130392
+ queryConfig: join25,
130337
130393
  tableConfig: schema[relation.targetTableName],
130338
130394
  relationWhere: filter2,
130339
130395
  isNested: true,
@@ -130347,7 +130403,7 @@ var SQLiteDialect = class {
130347
130403
  key: k4,
130348
130404
  selection: innerQuery.selection,
130349
130405
  isArray: !isSingle2,
130350
- isOptional: (relation.optional ?? false) || join24 !== true && !!join24.where
130406
+ isOptional: (relation.optional ?? false) || join25 !== true && !!join25.where
130351
130407
  });
130352
130408
  const jsonColumns = sql.join(innerQuery.selection.map((s6) => {
130353
130409
  return sql`${sql.raw(this.escapeString(s6.key))}, ${s6.selection ? sql`${jsonb2}(${sql.identifier(s6.key)})` : sql.identifier(s6.key)}`;
@@ -130816,7 +130872,7 @@ var SQLiteUpdateBase = class extends QueryPromise {
130816
130872
  createJoin(joinType) {
130817
130873
  return ((table, on) => {
130818
130874
  const tableName = getTableLikeName(table);
130819
- if (typeof tableName === "string" && this.config.joins.some((join24) => join24.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
130875
+ if (typeof tableName === "string" && this.config.joins.some((join25) => join25.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
130820
130876
  if (typeof on === "function") {
130821
130877
  const from = this.config.from ? is(table, SQLiteTable) ? table[Table.Symbol.Columns] : is(table, Subquery) ? table._.selectedFields : is(table, SQLiteViewBase) ? table[ViewBaseConfig].selectedFields : void 0 : void 0;
130822
130878
  on = on(new Proxy(this.config.table[Table.Symbol.Columns], new SelectionProxyHandler({
@@ -135961,14 +136017,14 @@ import { platform as platform2 } from "node:os";
135961
136017
  import { dirname as dirname3, join as join18, resolve as resolve5 } from "node:path";
135962
136018
  var SYMLINK_PATH = "/usr/local/bin/band";
135963
136019
  function findCliBinaryAt(opts) {
135964
- const { cwd, dirname: dirname7 } = opts;
136020
+ const { cwd, dirname: dirname8 } = opts;
135965
136021
  const appsStrategies = [
135966
136022
  // cwd = apps/web/ (Vite dev and production server)
135967
136023
  resolve5(cwd, ".."),
135968
136024
  // cwd = project root (fallback)
135969
136025
  resolve5(cwd, "apps"),
135970
136026
  // From this source file (apps/web/src/lib/ → apps/)
135971
- resolve5(dirname7, "..", "..", "..")
136027
+ resolve5(dirname8, "..", "..", "..")
135972
136028
  ];
135973
136029
  for (const appsDir of appsStrategies) {
135974
136030
  for (const profile of ["release", "debug"]) {
@@ -135986,7 +136042,7 @@ function findCliBinaryAt(opts) {
135986
136042
  resolve5(cwd, "..", "binaries", exe),
135987
136043
  // From the bundled dist file (<Resources>/web/dist/start-server.mjs)
135988
136044
  // → <Resources>/binaries/band
135989
- resolve5(dirname7, "..", "..", "binaries", exe)
136045
+ resolve5(dirname8, "..", "..", "binaries", exe)
135990
136046
  ];
135991
136047
  for (const p6 of electronCandidates) {
135992
136048
  try {
@@ -143947,9 +144003,9 @@ function createContext8() {
143947
144003
  // src/trpc/router.ts
143948
144004
  import { execFile as execFile5, execFileSync as execFileSync2, spawn as spawn8 } from "node:child_process";
143949
144005
  import { randomUUID as randomUUID2 } from "node:crypto";
143950
- import { existsSync as existsSync7, mkdirSync as mkdirSync7, unlinkSync as unlinkSync3 } from "node:fs";
143951
- import { cp, mkdir as mkdir2, readdir as readdir2, readFile as readFile2, rename, rm, stat as stat4, writeFile as writeFile2 } from "node:fs/promises";
143952
- import { basename, dirname as dirname6, extname as extname2, join as join22, resolve as resolve6, sep as sep2 } from "node:path";
144006
+ import { existsSync as existsSync8, constants as fsConstants, mkdirSync as mkdirSync7, unlinkSync as unlinkSync3 } from "node:fs";
144007
+ import { cp, mkdir as mkdir2, open as open2, readdir as readdir2, readFile as readFile2, rename, rm, stat as stat4, writeFile as writeFile2 } from "node:fs/promises";
144008
+ import { basename as basename2, dirname as dirname7, extname as extname2, isAbsolute as isAbsolute2, join as join23, resolve as resolve6, sep as sep2 } from "node:path";
143953
144009
  import { promisify } from "node:util";
143954
144010
  init_src();
143955
144011
  import { rgPath } from "@vscode/ripgrep";
@@ -144427,6 +144483,103 @@ function subscribeToFileChanges(workspaceId, listener) {
144427
144483
  };
144428
144484
  }
144429
144485
 
144486
+ // src/lib/formatter.ts
144487
+ init_src();
144488
+ import { existsSync as existsSync7, realpathSync as realpathSync4 } from "node:fs";
144489
+ import { basename, dirname as dirname6, isAbsolute, join as join22, resolve as resolvePath } from "node:path";
144490
+ import prettier from "prettier";
144491
+ var log24 = createLogger("formatter");
144492
+ var FormatterError = class extends Error {
144493
+ code;
144494
+ detail;
144495
+ constructor(code, message, detail) {
144496
+ super(message);
144497
+ this.name = "FormatterError";
144498
+ this.code = code;
144499
+ this.detail = detail;
144500
+ }
144501
+ };
144502
+ async function formatFile(worktreePath, filePath, content2, options2 = {}) {
144503
+ const absFile = isAbsolute(filePath) ? filePath : resolvePath(worktreePath, filePath);
144504
+ if (!isInsideWorktree(absFile, worktreePath)) {
144505
+ throw new FormatterError(
144506
+ "FILE_NOT_IN_WORKTREE",
144507
+ `File ${absFile} is outside the worktree ${worktreePath}`
144508
+ );
144509
+ }
144510
+ const start = Date.now();
144511
+ prettier.clearConfigCache();
144512
+ const ignorePath = resolvePath(worktreePath, ".prettierignore");
144513
+ const info = await prettier.getFileInfo(absFile, {
144514
+ resolveConfig: true,
144515
+ ignorePath: existsSync7(ignorePath) ? ignorePath : void 0
144516
+ });
144517
+ if (info.ignored) {
144518
+ return {
144519
+ skipped: true,
144520
+ file: absFile,
144521
+ reason: `Ignored by .prettierignore`,
144522
+ durationMs: Date.now() - start
144523
+ };
144524
+ }
144525
+ if (info.inferredParser === null) {
144526
+ return {
144527
+ skipped: true,
144528
+ file: absFile,
144529
+ reason: `Prettier has no parser for ${absFile}`,
144530
+ durationMs: Date.now() - start
144531
+ };
144532
+ }
144533
+ const config2 = options2.configOverride !== void 0 ? options2.configOverride : await prettier.resolveConfig(absFile);
144534
+ let formatted;
144535
+ try {
144536
+ formatted = await prettier.format(content2, {
144537
+ ...config2 ?? {},
144538
+ filepath: absFile
144539
+ });
144540
+ } catch (err) {
144541
+ const message = err instanceof Error ? err.message : String(err);
144542
+ throw new FormatterError("PRETTIER_FAILED", message);
144543
+ }
144544
+ const changed = formatted !== content2;
144545
+ if (changed) {
144546
+ log24.info(
144547
+ "Formatted %s with parser=%s (%d bytes in)",
144548
+ absFile,
144549
+ info.inferredParser,
144550
+ content2.length
144551
+ );
144552
+ }
144553
+ return {
144554
+ skipped: false,
144555
+ file: absFile,
144556
+ parser: info.inferredParser,
144557
+ formatted,
144558
+ changed,
144559
+ durationMs: Date.now() - start
144560
+ };
144561
+ }
144562
+ function isInsideWorktree(absFile, worktreePath) {
144563
+ let realFile;
144564
+ try {
144565
+ realFile = realpathSync4(absFile);
144566
+ } catch {
144567
+ try {
144568
+ realFile = join22(realpathSync4(dirname6(absFile)), basename(absFile));
144569
+ } catch {
144570
+ realFile = absFile;
144571
+ }
144572
+ }
144573
+ let realWorktree;
144574
+ try {
144575
+ realWorktree = realpathSync4(worktreePath);
144576
+ } catch {
144577
+ realWorktree = worktreePath;
144578
+ }
144579
+ const normalized = realWorktree.endsWith("/") ? realWorktree : `${realWorktree}/`;
144580
+ return realFile === realWorktree || realFile.startsWith(normalized);
144581
+ }
144582
+
144430
144583
  // src/lib/fuzzy-score.ts
144431
144584
  var SCORE_MATCH = 1;
144432
144585
  var BONUS_CONSECUTIVE = 8;
@@ -144529,7 +144682,7 @@ function fuzzyScore(query, filePath) {
144529
144682
  // src/lib/terminal-config.ts
144530
144683
  init_src();
144531
144684
  init_zod();
144532
- var log24 = createLogger("terminal-config");
144685
+ var log25 = createLogger("terminal-config");
144533
144686
  var TerminalPaneConfigSchema = external_exports2.object({
144534
144687
  name: external_exports2.string().optional(),
144535
144688
  command: external_exports2.string().optional(),
@@ -144560,7 +144713,7 @@ function loadWorkspaceTerminalConfig(worktreePath, projectPath) {
144560
144713
  if (!terminalBlock) return null;
144561
144714
  const result = WorkspaceTerminalConfigSchema.safeParse(terminalBlock);
144562
144715
  if (!result.success) {
144563
- log24.warn(
144716
+ log25.warn(
144564
144717
  "Invalid workspace.terminal config: %s",
144565
144718
  result.error.issues.map((i2) => `${i2.path.join(".")}: ${i2.message}`).join("; ")
144566
144719
  );
@@ -144571,7 +144724,7 @@ function loadWorkspaceTerminalConfig(worktreePath, projectPath) {
144571
144724
 
144572
144725
  // src/trpc/router.ts
144573
144726
  var execFileAsync = promisify(execFile5);
144574
- var log25 = createLogger("trpc");
144727
+ var log26 = createLogger("trpc");
144575
144728
  var t2 = initTRPC.context().create();
144576
144729
  var publicProcedure = t2.procedure;
144577
144730
  var projectsRouter = t2.router({
@@ -144616,7 +144769,7 @@ var projectsRouter = t2.router({
144616
144769
  }),
144617
144770
  checkPath: publicProcedure.input(external_exports2.object({ path: external_exports2.string() })).query(({ input }) => {
144618
144771
  const resolvedPath = resolve6(input.path);
144619
- const isGitRepo = existsSync7(join22(resolvedPath, ".git"));
144772
+ const isGitRepo = existsSync8(join23(resolvedPath, ".git"));
144620
144773
  return { isGitRepo };
144621
144774
  }),
144622
144775
  gitInit: publicProcedure.input(external_exports2.object({ path: external_exports2.string() })).mutation(async ({ input }) => {
@@ -144625,7 +144778,7 @@ var projectsRouter = t2.router({
144625
144778
  }),
144626
144779
  add: publicProcedure.input(external_exports2.object({ path: external_exports2.string(), label: external_exports2.string().optional() })).mutation(async ({ input }) => {
144627
144780
  const state2 = loadState();
144628
- const name24 = basename(input.path);
144781
+ const name24 = basename2(input.path);
144629
144782
  if (state2.projects.some((p6) => p6.name === name24)) {
144630
144783
  throw new Error(`Project "${name24}" already registered`);
144631
144784
  }
@@ -144725,8 +144878,8 @@ var workspacesRouter = t2.router({
144725
144878
  return { ok: true, path: existing.path };
144726
144879
  }
144727
144880
  const wtDir = worktreesDir();
144728
- const worktreePath = join22(wtDir, input.project, input.branch);
144729
- mkdirSync7(join22(wtDir, input.project), { recursive: true });
144881
+ const worktreePath = join23(wtDir, input.project, input.branch);
144882
+ mkdirSync7(join23(wtDir, input.project), { recursive: true });
144730
144883
  const { command, env } = gitCmd();
144731
144884
  const args = ["worktree", "add"];
144732
144885
  if (input.base) {
@@ -144790,7 +144943,7 @@ var workspacesRouter = t2.router({
144790
144943
  saveState(state2);
144791
144944
  const workspaceId = toWorkspaceId(input.project, input.branch);
144792
144945
  try {
144793
- unlinkSync3(join22(bandHome(), "workspace-prompts", `${workspaceId}.json`));
144946
+ unlinkSync3(join23(bandHome(), "workspace-prompts", `${workspaceId}.json`));
144794
144947
  } catch {
144795
144948
  }
144796
144949
  deleteWorkspaceStatus(workspaceId);
@@ -144807,13 +144960,13 @@ var workspacesRouter = t2.router({
144807
144960
  try {
144808
144961
  const deletedTasks = deleteWorkspaceTasks(workspaceId);
144809
144962
  if (deletedTasks > 0) {
144810
- log25.info(
144963
+ log26.info(
144811
144964
  { workspaceId, count: deletedTasks },
144812
144965
  "deleted workspace tasks on removal"
144813
144966
  );
144814
144967
  }
144815
144968
  } catch (err) {
144816
- log25.error({ workspaceId, err }, "failed to delete workspace tasks on removal");
144969
+ log26.error({ workspaceId, err }, "failed to delete workspace tasks on removal");
144817
144970
  }
144818
144971
  emit({ kind: "remove", workspaceId });
144819
144972
  const projPath = proj.path;
@@ -144831,7 +144984,7 @@ var workspacesRouter = t2.router({
144831
144984
  timeout: 6e4
144832
144985
  });
144833
144986
  } catch (err) {
144834
- log25.warn({ err, workspaceId }, "teardown script failed");
144987
+ log26.warn({ err, workspaceId }, "teardown script failed");
144835
144988
  }
144836
144989
  }
144837
144990
  try {
@@ -144849,7 +145002,7 @@ var workspacesRouter = t2.router({
144849
145002
  encoding: "utf-8"
144850
145003
  });
144851
145004
  } catch (err) {
144852
- log25.warn({ err, workspaceId }, "git worktree prune failed");
145005
+ log26.warn({ err, workspaceId }, "git worktree prune failed");
144853
145006
  }
144854
145007
  }
144855
145008
  try {
@@ -144861,7 +145014,7 @@ var workspacesRouter = t2.router({
144861
145014
  } catch {
144862
145015
  }
144863
145016
  })().catch((err) => {
144864
- log25.error({ err, workspaceId }, "background workspace cleanup failed");
145017
+ log26.error({ err, workspaceId }, "background workspace cleanup failed");
144865
145018
  });
144866
145019
  });
144867
145020
  return { ok: true };
@@ -144919,8 +145072,8 @@ var workspacesRouter = t2.router({
144919
145072
  return { ok: true };
144920
145073
  }),
144921
145074
  runScript: publicProcedure.input(external_exports2.object({ path: external_exports2.string(), scriptType: external_exports2.string() })).mutation(({ input }) => {
144922
- const scriptPath = join22(input.path, ".band", input.scriptType);
144923
- if (!existsSync7(scriptPath)) {
145075
+ const scriptPath = join23(input.path, ".band", input.scriptType);
145076
+ if (!existsSync8(scriptPath)) {
144924
145077
  throw new Error(`Script "${input.scriptType}" not found`);
144925
145078
  }
144926
145079
  return new Promise((resolve8, reject) => {
@@ -145057,7 +145210,7 @@ function parseFileStatuses(nameStatusOutput) {
145057
145210
  }
145058
145211
  async function readUntrackedFileLines(cwd, file2) {
145059
145212
  try {
145060
- const content2 = await readFile2(join22(cwd, file2), "utf-8");
145213
+ const content2 = await readFile2(join23(cwd, file2), "utf-8");
145061
145214
  const lines = content2.split("\n");
145062
145215
  if (lines.length > 0 && lines[lines.length - 1] === "") {
145063
145216
  lines.pop();
@@ -145074,6 +145227,54 @@ var workspaceRouter = t2.router({
145074
145227
  const config2 = loadWorkspaceTerminalConfig(workspace.worktree.path, workspace.project.path);
145075
145228
  return { config: config2 };
145076
145229
  }),
145230
+ /**
145231
+ * Format the supplied `content` using Prettier as if it were the file at
145232
+ * `filePath` inside `workspaceId`. The procedure is pure — it does not
145233
+ * read or write the file on disk. The client passes in the live editor
145234
+ * buffer and applies the returned `formatted` string back to the editor.
145235
+ * Persistence is the caller's responsibility via `workspace.saveFile`.
145236
+ *
145237
+ * Returns `{ skipped: true, reason }` when Prettier has no parser for
145238
+ * the file's extension (or it's covered by `.prettierignore`). Editors
145239
+ * fire this off Cmd+Alt+F without checking the file type first, so a
145240
+ * soft skip is the right outcome for unsupported files rather than a
145241
+ * surfaced error.
145242
+ *
145243
+ * Auth: enforced at the transport layer (the `band_token` cookie gates
145244
+ * the WebSocket upgrade and HTTP requests in start-server.ts) — same
145245
+ * pattern as the rest of `workspaceRouter`.
145246
+ */
145247
+ formatFile: publicProcedure.input(
145248
+ external_exports2.object({
145249
+ workspaceId: external_exports2.string(),
145250
+ filePath: external_exports2.string().min(1),
145251
+ // 1 MB ceiling — covers every realistic source file (the largest
145252
+ // human-authored .ts in the world is well under 500 KB) and stops a
145253
+ // pathological caller from blocking the event loop with a multi-MB
145254
+ // string while Prettier churns on it.
145255
+ content: external_exports2.string().max(1e6)
145256
+ })
145257
+ ).mutation(async ({ input }) => {
145258
+ const workspace = resolveWorkspace(input.workspaceId);
145259
+ if (!workspace) {
145260
+ throw new TRPCError({
145261
+ code: "NOT_FOUND",
145262
+ message: `Workspace ${input.workspaceId} not found`
145263
+ });
145264
+ }
145265
+ try {
145266
+ return await formatFile(workspace.worktree.path, input.filePath, input.content);
145267
+ } catch (err) {
145268
+ if (err instanceof FormatterError) {
145269
+ throw new TRPCError({
145270
+ code: "BAD_REQUEST",
145271
+ message: err.message,
145272
+ cause: err
145273
+ });
145274
+ }
145275
+ throw err;
145276
+ }
145277
+ }),
145077
145278
  /**
145078
145279
  * Subscribe to external file-system changes inside a single workspace.
145079
145280
  * The watcher is started on demand for that workspace and torn down when
@@ -145146,7 +145347,7 @@ var workspaceRouter = t2.router({
145146
145347
  );
145147
145348
  branches = output.trim().split("\n").map((b10) => b10.trim()).filter(Boolean);
145148
145349
  } catch (err) {
145149
- log25.error(
145350
+ log26.error(
145150
145351
  `listBranches: for-each-ref failed for ${cwd}: ${err instanceof Error ? err.message : err}`
145151
145352
  );
145152
145353
  }
@@ -145283,7 +145484,7 @@ var workspaceRouter = t2.router({
145283
145484
  const untrackedFiles = untrackedOutput.trim().split("\n").filter(Boolean);
145284
145485
  if (untrackedFiles.includes(input.filePath)) {
145285
145486
  try {
145286
- const content2 = await readFile2(join22(cwd, input.filePath), "utf-8");
145487
+ const content2 = await readFile2(join23(cwd, input.filePath), "utf-8");
145287
145488
  const lines = content2.split("\n");
145288
145489
  if (lines.length > 0 && lines[lines.length - 1] === "") {
145289
145490
  lines.pop();
@@ -145328,7 +145529,7 @@ var workspaceRouter = t2.router({
145328
145529
  const untrackedOutput = await execGit(["ls-files", "--others", "--exclude-standard"], cwd);
145329
145530
  const untrackedFiles = untrackedOutput.trim().split("\n").filter(Boolean);
145330
145531
  if (untrackedFiles.includes(filePath)) {
145331
- await rm(join22(cwd, filePath), { force: true });
145532
+ await rm(join23(cwd, filePath), { force: true });
145332
145533
  return { ok: true };
145333
145534
  }
145334
145535
  const { mergeBase: ref } = await resolveDiffContext(
@@ -145491,7 +145692,7 @@ var workspaceRouter = t2.router({
145491
145692
  throw new Error("Workspace not found");
145492
145693
  }
145493
145694
  const root = workspace.worktree.path;
145494
- const target = resolve6(join22(root, input.path));
145695
+ const target = resolve6(join23(root, input.path));
145495
145696
  if (!target.startsWith(root)) {
145496
145697
  throw new Error("Invalid path");
145497
145698
  }
@@ -145514,7 +145715,7 @@ var workspaceRouter = t2.router({
145514
145715
  throw new Error("Path is required");
145515
145716
  }
145516
145717
  const root = workspace.worktree.path;
145517
- const target = resolve6(join22(root, input.path));
145718
+ const target = resolve6(join23(root, input.path));
145518
145719
  if (!target.startsWith(root)) {
145519
145720
  throw new Error("Invalid path");
145520
145721
  }
@@ -145548,7 +145749,7 @@ var workspaceRouter = t2.router({
145548
145749
  throw new Error("Workspace not found");
145549
145750
  }
145550
145751
  const root = workspace.worktree.path;
145551
- const target = resolve6(join22(root, input.path));
145752
+ const target = resolve6(join23(root, input.path));
145552
145753
  if (!target.startsWith(root)) {
145553
145754
  throw new Error("Invalid path");
145554
145755
  }
@@ -145571,15 +145772,15 @@ var workspaceRouter = t2.router({
145571
145772
  throw new Error("Workspace not found");
145572
145773
  }
145573
145774
  const root = workspace.worktree.path;
145574
- const target = resolve6(join22(root, input.path));
145775
+ const target = resolve6(join23(root, input.path));
145575
145776
  if (!target.startsWith(root) || target === root) {
145576
145777
  throw new Error("Invalid path");
145577
145778
  }
145578
- if (existsSync7(target)) {
145779
+ if (existsSync8(target)) {
145579
145780
  throw new Error("A file or directory already exists at this path");
145580
145781
  }
145581
- const parent = dirname6(target);
145582
- if (!existsSync7(parent)) {
145782
+ const parent = dirname7(target);
145783
+ if (!existsSync8(parent)) {
145583
145784
  throw new Error("Parent directory does not exist");
145584
145785
  }
145585
145786
  const parentStat = await stat4(parent);
@@ -145600,15 +145801,15 @@ var workspaceRouter = t2.router({
145600
145801
  throw new Error("Workspace not found");
145601
145802
  }
145602
145803
  const root = workspace.worktree.path;
145603
- const target = resolve6(join22(root, input.path));
145804
+ const target = resolve6(join23(root, input.path));
145604
145805
  if (!target.startsWith(root) || target === root) {
145605
145806
  throw new Error("Invalid path");
145606
145807
  }
145607
- if (existsSync7(target)) {
145808
+ if (existsSync8(target)) {
145608
145809
  throw new Error("A file or directory already exists at this path");
145609
145810
  }
145610
- const parent = dirname6(target);
145611
- if (!existsSync7(parent)) {
145811
+ const parent = dirname7(target);
145812
+ if (!existsSync8(parent)) {
145612
145813
  throw new Error("Parent directory does not exist");
145613
145814
  }
145614
145815
  const parentStat = await stat4(parent);
@@ -145629,7 +145830,7 @@ var workspaceRouter = t2.router({
145629
145830
  throw new Error("Workspace not found");
145630
145831
  }
145631
145832
  const root = workspace.worktree.path;
145632
- const target = resolve6(join22(root, input.path));
145833
+ const target = resolve6(join23(root, input.path));
145633
145834
  if (!target.startsWith(root) || target === root) {
145634
145835
  throw new Error("Invalid path");
145635
145836
  }
@@ -145661,8 +145862,8 @@ var workspaceRouter = t2.router({
145661
145862
  throw new Error("Workspace not found");
145662
145863
  }
145663
145864
  const root = workspace.worktree.path;
145664
- const fromTarget = resolve6(join22(root, input.fromPath));
145665
- const toTarget = resolve6(join22(root, input.toPath));
145865
+ const fromTarget = resolve6(join23(root, input.fromPath));
145866
+ const toTarget = resolve6(join23(root, input.toPath));
145666
145867
  if (!fromTarget.startsWith(root) || fromTarget === root) {
145667
145868
  throw new Error("Invalid source path");
145668
145869
  }
@@ -145683,11 +145884,11 @@ var workspaceRouter = t2.router({
145683
145884
  } catch {
145684
145885
  throw new Error("Source path does not exist");
145685
145886
  }
145686
- if (existsSync7(toTarget)) {
145887
+ if (existsSync8(toTarget)) {
145687
145888
  throw new Error("A file or directory already exists at the destination");
145688
145889
  }
145689
- const toParent = dirname6(toTarget);
145690
- if (!existsSync7(toParent)) {
145890
+ const toParent = dirname7(toTarget);
145891
+ if (!existsSync8(toParent)) {
145691
145892
  throw new Error("Destination parent directory does not exist");
145692
145893
  }
145693
145894
  const toParentStat = await stat4(toParent);
@@ -145712,8 +145913,8 @@ var workspaceRouter = t2.router({
145712
145913
  throw new Error("Workspace not found");
145713
145914
  }
145714
145915
  const root = workspace.worktree.path;
145715
- const fromTarget = resolve6(join22(root, input.fromPath));
145716
- const toTarget = resolve6(join22(root, input.toPath));
145916
+ const fromTarget = resolve6(join23(root, input.fromPath));
145917
+ const toTarget = resolve6(join23(root, input.toPath));
145717
145918
  if (!fromTarget.startsWith(root) || fromTarget === root) {
145718
145919
  throw new Error("Invalid source path");
145719
145920
  }
@@ -145737,11 +145938,11 @@ var workspaceRouter = t2.router({
145737
145938
  if (entryStat.isDirectory() && toTarget.startsWith(fromTarget + sep2)) {
145738
145939
  throw new Error("Cannot copy a directory into itself");
145739
145940
  }
145740
- if (existsSync7(toTarget)) {
145941
+ if (existsSync8(toTarget)) {
145741
145942
  throw new Error("A file or directory already exists at the destination");
145742
145943
  }
145743
- const toParent = dirname6(toTarget);
145744
- if (!existsSync7(toParent)) {
145944
+ const toParent = dirname7(toTarget);
145945
+ if (!existsSync8(toParent)) {
145745
145946
  throw new Error("Destination parent directory does not exist");
145746
145947
  }
145747
145948
  const toParentStat = await stat4(toParent);
@@ -145900,26 +146101,115 @@ var workspaceRouter = t2.router({
145900
146101
  return { ok: true };
145901
146102
  })
145902
146103
  });
146104
+ function mapFsError(err) {
146105
+ const code = err.code;
146106
+ if (code === "ENOENT") return new Error("File not found");
146107
+ if (code === "ELOOP") return new Error("Symbolic links are not allowed");
146108
+ if (code === "EACCES" || code === "EPERM") return new Error("Permission denied");
146109
+ if (code === "EISDIR") return new Error("Cannot operate on a directory");
146110
+ return err;
146111
+ }
146112
+ var hostRouter = t2.router({
146113
+ readFile: publicProcedure.input(external_exports2.object({ absolutePath: external_exports2.string().min(1) })).query(async ({ input }) => {
146114
+ const target = input.absolutePath;
146115
+ if (!isAbsolute2(target)) {
146116
+ throw new Error("Absolute path required");
146117
+ }
146118
+ let fh;
146119
+ try {
146120
+ fh = await open2(target, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
146121
+ } catch (err) {
146122
+ throw mapFsError(err);
146123
+ }
146124
+ try {
146125
+ const stats = await fh.stat();
146126
+ if (stats.isDirectory()) {
146127
+ throw new Error("Cannot operate on a directory");
146128
+ }
146129
+ if (!stats.isFile()) {
146130
+ throw new Error("Not a regular file");
146131
+ }
146132
+ const size4 = stats.size;
146133
+ if (size4 > MAX_FILE_SIZE) {
146134
+ return { tooLarge: true, size: size4 };
146135
+ }
146136
+ const sampleLen = Math.min(8192, size4);
146137
+ const sample = Buffer.alloc(sampleLen);
146138
+ if (sampleLen > 0) {
146139
+ await fh.read(sample, 0, sampleLen, 0);
146140
+ if (sample.includes(0)) {
146141
+ return { binary: true, size: size4 };
146142
+ }
146143
+ }
146144
+ const buffer = await fh.readFile();
146145
+ const ext = extname2(target).toLowerCase();
146146
+ const language2 = LANG_MAP[ext];
146147
+ return {
146148
+ content: buffer.toString("utf-8"),
146149
+ size: size4,
146150
+ language: language2
146151
+ };
146152
+ } finally {
146153
+ await fh.close();
146154
+ }
146155
+ }),
146156
+ saveFile: publicProcedure.input(
146157
+ external_exports2.object({
146158
+ absolutePath: external_exports2.string().min(1),
146159
+ // Match the read-side cap so a misbehaving client can't fill
146160
+ // disk via the save endpoint while the read endpoint refuses
146161
+ // anything that wide.
146162
+ content: external_exports2.string().max(MAX_FILE_SIZE)
146163
+ })
146164
+ ).mutation(async ({ input }) => {
146165
+ const target = input.absolutePath;
146166
+ if (!isAbsolute2(target)) {
146167
+ throw new Error("Absolute path required");
146168
+ }
146169
+ let fh;
146170
+ try {
146171
+ fh = await open2(
146172
+ target,
146173
+ fsConstants.O_WRONLY | fsConstants.O_TRUNC | fsConstants.O_NOFOLLOW
146174
+ );
146175
+ } catch (err) {
146176
+ throw mapFsError(err);
146177
+ }
146178
+ try {
146179
+ const stats = await fh.stat();
146180
+ if (stats.isDirectory()) {
146181
+ throw new Error("Cannot operate on a directory");
146182
+ }
146183
+ if (!stats.isFile()) {
146184
+ throw new Error("Not a regular file");
146185
+ }
146186
+ await fh.writeFile(input.content, "utf-8");
146187
+ } finally {
146188
+ await fh.close();
146189
+ }
146190
+ return { ok: true };
146191
+ })
146192
+ });
145903
146193
  var tunnelRouter = t2.router({
145904
146194
  status: publicProcedure.query(() => {
145905
146195
  return getTunnelStatus();
145906
146196
  }),
145907
146197
  start: publicProcedure.input(external_exports2.object({}).optional()).mutation(async () => {
145908
- log25.debug("tunnel.start called");
146198
+ log26.debug("tunnel.start called");
145909
146199
  const port2 = parseInt(process.env.BAND_PORT || "3456", 10);
145910
- log25.debug("tunnel.start: port=%d", port2);
146200
+ log26.debug("tunnel.start: port=%d", port2);
145911
146201
  try {
145912
146202
  await startTunnel({ port: port2 });
145913
146203
  } catch (err) {
145914
- log25.debug({ err }, "tunnel.start: startTunnel failed");
146204
+ log26.debug({ err }, "tunnel.start: startTunnel failed");
145915
146205
  return { ok: true, url: null };
145916
146206
  }
145917
146207
  const status = getTunnelStatus();
145918
- log25.debug({ status }, "tunnel.start: after startTunnel");
146208
+ log26.debug({ status }, "tunnel.start: after startTunnel");
145919
146209
  if (status.url) {
145920
146210
  return { ok: true, url: status.url };
145921
146211
  }
145922
- log25.debug("tunnel.start: no URL available");
146212
+ log26.debug("tunnel.start: no URL available");
145923
146213
  return { ok: true, url: null };
145924
146214
  }),
145925
146215
  stop: publicProcedure.mutation(async () => {
@@ -146245,15 +146535,15 @@ async function loadJsonlPage(opts) {
146245
146535
  }
146246
146536
  var servicesRouter = t2.router({
146247
146537
  health: publicProcedure.query(() => {
146248
- log25.debug("services.health called");
146538
+ log26.debug("services.health called");
146249
146539
  const tunnel = getTunnelStatus();
146250
- log25.debug({ tunnel }, "services.health: tunnel status");
146540
+ log26.debug({ tunnel }, "services.health: tunnel status");
146251
146541
  const result = {
146252
146542
  webserver: true,
146253
146543
  tunnel: tunnel.running,
146254
146544
  tunnel_url: tunnel.url
146255
146545
  };
146256
- log25.debug({ result }, "services.health result");
146546
+ log26.debug({ result }, "services.health result");
146257
146547
  return result;
146258
146548
  }),
146259
146549
  // Activity level controls how often the branch-status poller fires.
@@ -146647,7 +146937,7 @@ var chatsRouter = t2.router({
146647
146937
  summary = info?.summary;
146648
146938
  lastModified = info?.lastModified;
146649
146939
  } catch (err) {
146650
- log25.warn(
146940
+ log26.warn(
146651
146941
  { chatId: input.chatId, sessionId: input.sessionId, err },
146652
146942
  "setActiveSession: getSessionInfo failed"
146653
146943
  );
@@ -146767,7 +147057,7 @@ var browserHostRouter = t2.router({
146767
147057
  // can confirm in the server log that the bridge component actually
146768
147058
  // executed. Drop once the experiment is stable.
146769
147059
  ping: publicProcedure.input(external_exports2.object({ where: external_exports2.string() })).mutation(({ input }) => {
146770
- log25.info("browserHost.ping from %s", input.where);
147060
+ log26.info("browserHost.ping from %s", input.where);
146771
147061
  return { ok: true };
146772
147062
  }),
146773
147063
  ensureView: publicProcedure.subscription(async function* (opts) {
@@ -147099,6 +147389,7 @@ var appRouter = t2.router({
147099
147389
  hooks: hooksRouter,
147100
147390
  cli: cliRouter,
147101
147391
  workspace: workspaceRouter,
147392
+ host: hostRouter,
147102
147393
  tunnel: tunnelRouter,
147103
147394
  prereqs: prereqsRouter,
147104
147395
  tasks: tasksRouter,
@@ -147232,7 +147523,7 @@ function getScalarHtml(specUrl) {
147232
147523
  function logCrash(message) {
147233
147524
  try {
147234
147525
  mkdirSync8(bandHome(), { recursive: true });
147235
- appendFileSync2(join23(bandHome(), "server.log"), message, "utf-8");
147526
+ appendFileSync2(join24(bandHome(), "server.log"), message, "utf-8");
147236
147527
  } catch {
147237
147528
  }
147238
147529
  }
@@ -147257,7 +147548,7 @@ ${error40.stack || error40.message}
147257
147548
  `);
147258
147549
  process.exit(1);
147259
147550
  });
147260
- var clientDir = join23(import.meta.dirname, "client");
147551
+ var clientDir = join24(import.meta.dirname, "client");
147261
147552
  var port = parseInt(process.env.PORT || "3456", 10);
147262
147553
  delete process.env.PORT;
147263
147554
  process.env.BAND_PORT = String(port);
@@ -147269,18 +147560,18 @@ var assets = build_default(clientDir, {
147269
147560
  gzip: true,
147270
147561
  etag: true
147271
147562
  });
147272
- var openApiDoc = JSON.parse(readFileSync9(join23(import.meta.dirname, "openapi.json"), "utf-8"));
147563
+ var openApiDoc = JSON.parse(readFileSync9(join24(import.meta.dirname, "openapi.json"), "utf-8"));
147273
147564
  openApiDoc.servers = [{ url: "/trpc" }];
147274
147565
  var openApiSpec = JSON.stringify(openApiDoc, null, 2);
147275
147566
  var scalarHtml = getScalarHtml("/api/openapi.json");
147276
147567
  function serveStaticFile(res, root, subdir, rawFilename) {
147277
- const filename = basename2(decodeURIComponent(rawFilename));
147568
+ const filename = basename3(decodeURIComponent(rawFilename));
147278
147569
  if (!filename || filename.includes("..")) {
147279
147570
  res.writeHead(400);
147280
147571
  res.end("Bad request");
147281
147572
  return;
147282
147573
  }
147283
- const filePath = join23(root, subdir, filename);
147574
+ const filePath = join24(root, subdir, filename);
147284
147575
  try {
147285
147576
  const fileStat = statSync7(filePath);
147286
147577
  const contentType = mimeTypeFromFilename(filename);
@@ -147303,7 +147594,7 @@ function serveWorkspaceFile(res, workspaceId, rawPath) {
147303
147594
  return;
147304
147595
  }
147305
147596
  const root = workspace.worktree.path;
147306
- const target = resolve7(join23(root, rawPath));
147597
+ const target = resolve7(join24(root, rawPath));
147307
147598
  if (!target.startsWith(`${root}/`) && target !== root) {
147308
147599
  res.writeHead(400);
147309
147600
  res.end("Bad request");
@@ -147311,7 +147602,7 @@ function serveWorkspaceFile(res, workspaceId, rawPath) {
147311
147602
  }
147312
147603
  try {
147313
147604
  const fileStat = statSync7(target);
147314
- const contentType = mimeTypeFromFilename(basename2(target));
147605
+ const contentType = mimeTypeFromFilename(basename3(target));
147315
147606
  res.writeHead(200, {
147316
147607
  "Content-Type": contentType,
147317
147608
  "Content-Length": fileStat.size.toString(),
@@ -147350,13 +147641,13 @@ async function main() {
147350
147641
  res.end("Bad request");
147351
147642
  return;
147352
147643
  }
147353
- const partition = basename2(decodeURIComponent(rest.slice(0, slashIdx)));
147644
+ const partition = basename3(decodeURIComponent(rest.slice(0, slashIdx)));
147354
147645
  if (!partition || partition === ".." || partition === ".") {
147355
147646
  res.writeHead(400);
147356
147647
  res.end("Bad request");
147357
147648
  return;
147358
147649
  }
147359
- serveStaticFile(res, bandHome(), join23("shared", partition), rest.slice(slashIdx + 1));
147650
+ serveStaticFile(res, bandHome(), join24("shared", partition), rest.slice(slashIdx + 1));
147360
147651
  return;
147361
147652
  }
147362
147653
  if (req.url?.startsWith("/api/workspace-file/")) {