@band-app/server 0.18.0 → 0.19.1

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 (189) hide show
  1. package/dist/client/assets/DockviewBrowserContainer-4SeBGy5m.js +5 -0
  2. package/dist/client/assets/DockviewTerminalContainer-DWva1wNl.js +2 -0
  3. package/dist/client/assets/TerminalPanel-CEmBYkjb.js +5 -0
  4. package/dist/client/assets/_basePickBy-CV44VSwA.js +1 -0
  5. package/dist/client/assets/{_baseUniq-P2cIT3Cg.js → _baseUniq-Bqa44Er5.js} +1 -1
  6. package/dist/client/assets/arc-4rU3SEWf.js +1 -0
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-Co2omcgc.js → architectureDiagram-VXUJARFQ-CapSrTlr.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-CawreF4Q.js → blockDiagram-VD42YOAC-DnapbSnI.js} +5 -5
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-DGgImgFg.js → c4Diagram-YG6GDRKO-9mZ9PPiM.js} +1 -1
  10. package/dist/client/assets/channel-NIcS3uxn.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-CdUSDb5d.js → chunk-4BX2VUAB--rr32b4E.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CZzsVv3f.js → chunk-55IACEB6-DfxuD1M3.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-CglmZrjp.js → chunk-B4BG7PRW-CxvnNatf.js} +5 -5
  14. package/dist/client/assets/{chunk-DI55MBZ5-Cj2wjbCm.js → chunk-DI55MBZ5-F51NTwRL.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-BNnnH8qi.js → chunk-FMBD7UC4-S03fYfOP.js} +1 -1
  16. package/dist/client/assets/chunk-QN33PNHL-BQWA4OqL.js +1 -0
  17. package/dist/client/assets/{chunk-QZHKN3VN-DQ2f1Og9.js → chunk-QZHKN3VN-DuLFP0og.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-BkXj9bDE.js → chunk-TZMSLE5B-BXGn_e4G.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-8p3oACYV.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-8p3oACYV.js +1 -0
  21. package/dist/client/assets/clike-B9uivgTg.js +1 -0
  22. package/dist/client/assets/clone-Be31g1pc.js +1 -0
  23. package/dist/client/assets/{cose-bilkent-S5V4N54A-CWt-uxWy.js → cose-bilkent-S5V4N54A-BD5JLmQ6.js} +1 -1
  24. package/dist/client/assets/dagre-6UL2VRFP-jd9MqFa1.js +4 -0
  25. package/dist/client/assets/diagram-PSM6KHXK-Bv0WGkj7.js +24 -0
  26. package/dist/client/assets/{diagram-QEK2KX5R-bcjaRpQy.js → diagram-QEK2KX5R-oszH6q3s.js} +2 -2
  27. package/dist/client/assets/diagram-S2PKOQOG-D7rVDuLY.js +24 -0
  28. package/dist/client/assets/{erDiagram-Q2GNP2WA-CaMPsNqm.js → erDiagram-Q2GNP2WA-BL9gntWo.js} +4 -4
  29. package/dist/client/assets/{flowDiagram-NV44I4VS-DGQOeo3P.js → flowDiagram-NV44I4VS-1FCz1fgN.js} +4 -4
  30. package/dist/client/assets/ganttDiagram-JELNMOA3-DggjOINy.js +267 -0
  31. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-DCGODyFn.js → gitGraphDiagram-V2S2FVAM-uoayvKXp.js} +3 -3
  32. package/dist/client/assets/{graph-CfCyZ7oE.js → graph-CKeOhxc0.js} +1 -1
  33. package/dist/client/assets/{highlighted-body-B3W2YXNL-CxMJmJBc.js → highlighted-body-B3W2YXNL-BfaZeU0X.js} +1 -1
  34. package/dist/client/assets/{index-DU9qIaIU.js → index-BOdO7r_p.js} +1 -1
  35. package/dist/client/assets/{index-6kWpovKB.js → index-BVhi8EPL.js} +1 -1
  36. package/dist/client/assets/{index-DTmrp96f.js → index-BZW8u43a.js} +1 -1
  37. package/dist/client/assets/{index-BomE98r3.js → index-Be24TlVT.js} +1 -1
  38. package/dist/client/assets/{index-DLyLpX_A.js → index-BhrvrUs_.js} +1 -1
  39. package/dist/client/assets/{index-BPTxGmQw.js → index-BmEmzTZO.js} +1 -1
  40. package/dist/client/assets/{index-plMivlE6.js → index-CdwShVnF.js} +1 -1
  41. package/dist/client/assets/{index-BkI1MMcx.js → index-ChvBXbK8.js} +1 -1
  42. package/dist/client/assets/{index-DgA9NKMV.js → index-Cx9QoFI1.js} +1 -1
  43. package/dist/client/assets/{index-DvwEAnql.js → index-DTOEFzQN.js} +1 -1
  44. package/dist/client/assets/{index-BahJEMSD.js → index-Ddvrjwlp.js} +1 -1
  45. package/dist/client/assets/{index-DyzP8Zt_.js → index-Doe-oMI1.js} +1 -1
  46. package/dist/client/assets/{index-CeneentR.js → index-DsvlvI8i.js} +1 -1
  47. package/dist/client/assets/{index-DxSYOqNl.js → index-DtoczokG.js} +1 -1
  48. package/dist/client/assets/{index-DawFiDM_.js → index-SC22AP5M.js} +1 -1
  49. package/dist/client/assets/{index-BJC5nbeg.js → index-bY8CiPGQ.js} +1 -1
  50. package/dist/client/assets/{index-DL6FOBAZ.js → index-kGHlsI7U.js} +1 -1
  51. package/dist/client/assets/{index-CUSuiGMh.js → index-ro4XgOVe.js} +1 -1
  52. package/dist/client/assets/infoDiagram-HS3SLOUP-9HRNM_Iq.js +2 -0
  53. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-DK-VcCfU.js → journeyDiagram-XKPGCS4Q-BYEjH_SV.js} +4 -4
  54. package/dist/client/assets/{kanban-definition-3W4ZIXB7-DqVZenrn.js → kanban-definition-3W4ZIXB7-s6ZYKbvm.js} +8 -8
  55. package/dist/client/assets/{layout-DBSNY4Lg.js → layout-DlcfRJkl.js} +1 -1
  56. package/dist/client/assets/{main-BMyWFWYN.js → main-Ct1o5WmJ.js} +386 -354
  57. package/dist/client/assets/main-DsoPLGrb.css +1 -0
  58. package/dist/client/assets/{mindmap-definition-VGOIOE7T-C0d6PFL2.js → mindmap-definition-VGOIOE7T-CDeQcF1U.js} +3 -3
  59. package/dist/client/assets/pieDiagram-ADFJNKIX-CWdMTKnD.js +30 -0
  60. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-CQyKjYLy.js → quadrantDiagram-AYHSOK5B-C-Zcxmv2.js} +3 -3
  61. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-DdSXmDi9.js → requirementDiagram-UZGBJVZJ-B3JunJUh.js} +4 -4
  62. package/dist/client/assets/sankeyDiagram-TZEHDZUN-BRUxMlQD.js +10 -0
  63. package/dist/client/assets/{sequenceDiagram-WL72ISMW-DyxawmBP.js → sequenceDiagram-WL72ISMW--nulyPWN.js} +6 -6
  64. package/dist/client/assets/{square-terminal-BXuSt2dW.js → square-terminal-xTmJg69x.js} +1 -1
  65. package/dist/client/assets/stateDiagram-FKZM4ZOC-DUZeZHou.js +1 -0
  66. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-nq3cGsuB.js +1 -0
  67. package/dist/client/assets/{timeline-definition-IT6M3QCI-BN5646-s.js → timeline-definition-IT6M3QCI-DgsIAJxu.js} +4 -4
  68. package/dist/client/assets/{treemap-GDKQZRPO-TYUv7aqt.js → treemap-GDKQZRPO-DzbbBVNz.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-BVuxUwhR.js → workspace._workspaceId-C2eftsxg.js} +1 -1
  70. package/dist/client/assets/workspace._workspaceId-CX0zbe5I.js +2 -0
  71. package/dist/client/assets/xychartDiagram-PRI3JC2R-B11oaEXR.js +7 -0
  72. package/dist/migrations/20260530114329_elite_smasher/migration.sql +22 -0
  73. package/dist/migrations/20260530114329_elite_smasher/snapshot.json +1091 -0
  74. package/dist/migrations/20260530141216_next_prowler/migration.sql +9 -0
  75. package/dist/migrations/20260530141216_next_prowler/snapshot.json +1167 -0
  76. package/dist/openapi.json +4461 -4127
  77. package/dist/server/assets/{DockviewBrowserContainer-BHlHNdlw.js → DockviewBrowserContainer-BcfLe0jL.js} +33 -14
  78. package/dist/server/assets/{DockviewTerminalContainer-B4s5M71S.js → DockviewTerminalContainer-zVckKR1x.js} +35 -20
  79. package/dist/server/assets/{TerminalPanel-NJ_oHfHq.js → TerminalPanel-7JfdUecD.js} +250 -143
  80. package/dist/server/assets/{_basePickBy-BstQwUjx.js → _basePickBy-3tZLkfZU.js} +2 -2
  81. package/dist/server/assets/{_baseUniq-BloU0u1p.js → _baseUniq-Dz_kdarY.js} +1 -1
  82. package/dist/server/assets/_tanstack-start-manifest_v-BBzH3QaA.js +4 -0
  83. package/dist/server/assets/{arc-D6eCV6DV.js → arc-B7a2pVpn.js} +1 -1
  84. package/dist/server/assets/{architecture-7HQA4BMR-CaZikjMP.js → architecture-7HQA4BMR-9XWqJEVf.js} +6 -6
  85. package/dist/server/assets/{architectureDiagram-VXUJARFQ-B4vqMbhE.js → architectureDiagram-VXUJARFQ-Vt3dNClh.js} +6 -6
  86. package/dist/server/assets/{blockDiagram-VD42YOAC-CO_-9S_E.js → blockDiagram-VD42YOAC-DR7gt_eL.js} +6 -6
  87. package/dist/server/assets/{c4Diagram-YG6GDRKO-CD7rCwaq.js → c4Diagram-YG6GDRKO-DYC3sqOW.js} +2 -2
  88. package/dist/server/assets/{channel-BMp2wZD3.js → channel-DzI1wGYl.js} +1 -1
  89. package/dist/server/assets/{chunk-4BX2VUAB-DepEjWoL.js → chunk-4BX2VUAB-DVHBGPAd.js} +1 -1
  90. package/dist/server/assets/{chunk-55IACEB6-Bi12nYoO.js → chunk-55IACEB6-BXeWT-V1.js} +1 -1
  91. package/dist/server/assets/{chunk-B4BG7PRW-C_aztpTA.js → chunk-B4BG7PRW-BngOdF6s.js} +4 -4
  92. package/dist/server/assets/{chunk-DI55MBZ5-DyEwLpXK.js → chunk-DI55MBZ5-Co1ugmE2.js} +3 -3
  93. package/dist/server/assets/{chunk-FMBD7UC4-BInQidDU.js → chunk-FMBD7UC4-BSvY40K1.js} +1 -1
  94. package/dist/server/assets/{chunk-QN33PNHL-BzMgQvmo.js → chunk-QN33PNHL-Bld2F-bV.js} +1 -1
  95. package/dist/server/assets/{chunk-QZHKN3VN-DyvushgJ.js → chunk-QZHKN3VN-CbcRrDQ5.js} +1 -1
  96. package/dist/server/assets/{chunk-TZMSLE5B-Gk23cBC5.js → chunk-TZMSLE5B-FZqT6NRx.js} +1 -1
  97. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-C2IXOi-1.js → classDiagram-2ON5EDUG-CqTf3oAt.js} +5 -5
  98. package/dist/server/assets/{classDiagram-2ON5EDUG-C2IXOi-1.js → classDiagram-v2-WZHVMYZB-CqTf3oAt.js} +5 -5
  99. package/dist/server/assets/clike-xqXYL6ge.js +805 -0
  100. package/dist/server/assets/{clone-Dw9tAHpg.js → clone-DFaP-n7G.js} +1 -1
  101. package/dist/server/assets/{cose-bilkent-S5V4N54A-CnP5PKtl.js → cose-bilkent-S5V4N54A-Cm4DnyNk.js} +1 -1
  102. package/dist/server/assets/{dagre-6UL2VRFP-Hm-Wejtu.js → dagre-6UL2VRFP-DWtR7ypz.js} +6 -6
  103. package/dist/server/assets/{diagram-PSM6KHXK-C6URVSbQ.js → diagram-PSM6KHXK-3K0tKsmi.js} +7 -10
  104. package/dist/server/assets/{diagram-QEK2KX5R-D595vsyp.js → diagram-QEK2KX5R-C_GABXU2.js} +6 -6
  105. package/dist/server/assets/{diagram-S2PKOQOG-C69I055N.js → diagram-S2PKOQOG-x_2H2okG.js} +6 -6
  106. package/dist/server/assets/{erDiagram-Q2GNP2WA-DKL3OoDz.js → erDiagram-Q2GNP2WA-DYAuTF-e.js} +4 -4
  107. package/dist/server/assets/{flowDiagram-NV44I4VS-vb-7BBaz.js → flowDiagram-NV44I4VS-CMgKpatm.js} +5 -5
  108. package/dist/server/assets/{ganttDiagram-JELNMOA3-CryNIjT5.js → ganttDiagram-JELNMOA3-BqUjIeN-.js} +11 -965
  109. package/dist/server/assets/{gitGraph-G5XIXVHT-DizYGNvA.js → gitGraph-G5XIXVHT-BOFl30qK.js} +6 -6
  110. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-BrIjiO3l.js → gitGraphDiagram-V2S2FVAM-CSFtzM0S.js} +7 -7
  111. package/dist/server/assets/{graph-mppr1RdG.js → graph-Da9wNyd4.js} +2 -2
  112. package/dist/server/assets/{highlighted-body-B3W2YXNL-CTUp2Nbw.js → highlighted-body-B3W2YXNL-CSDiX8tu.js} +1 -1
  113. package/dist/server/assets/{index-Be6X1xir.js → index-Av31QpwJ.js} +2 -2
  114. package/dist/server/assets/{index-HTfoqKS_.js → index-B9YQ_ief.js} +5 -5
  115. package/dist/server/assets/{index-D8W-WZ8Y.js → index-BXCk5sug.js} +1 -1
  116. package/dist/server/assets/{index-BCNeT6hv.js → index-BZPQn4AB.js} +3 -3
  117. package/dist/server/assets/{index-Cb8rr1Cd.js → index-C-7KLTyL.js} +2 -2
  118. package/dist/server/assets/{index-B69XH0ed.js → index-CFVkYUnG.js} +2 -2
  119. package/dist/server/assets/{index-CVOspA2K.js → index-CFt-wi4p.js} +2 -2
  120. package/dist/server/assets/{index-DJTGOXyp.js → index-CS2NcwnS.js} +2 -2
  121. package/dist/server/assets/{index-CDaDncKA.js → index-CjJe7VSH.js} +4 -4
  122. package/dist/server/assets/{index-Om1fUMxJ.js → index-CqNkm5pZ.js} +2 -2
  123. package/dist/server/assets/{index-BIskkFyK.js → index-CrGR0Fcd.js} +2 -2
  124. package/dist/server/assets/{index-BQJWbe4d.js → index-D9Pfuy6s.js} +2 -2
  125. package/dist/server/assets/{index-DC7cATF0.js → index-DC0ng9YX.js} +2 -2
  126. package/dist/server/assets/{index-CNkj1XIM.js → index-DkCUbYql.js} +2 -2
  127. package/dist/server/assets/{index-CIHMj9rA.js → index-DwBbgNmR.js} +5 -5
  128. package/dist/server/assets/{index-BzMgAG0v.js → index-ZFp3vFxe.js} +3 -3
  129. package/dist/server/assets/{index-CbH_b9nh.js → index-iQ9auLjI.js} +2 -2
  130. package/dist/server/assets/{index-Dpy7oNI-.js → index-ki-c1Gyj.js} +1 -1
  131. package/dist/server/assets/{info-VBDWY6EO-B627l6on.js → info-VBDWY6EO-mGUaI27c.js} +6 -6
  132. package/dist/server/assets/{infoDiagram-HS3SLOUP-Bx-2RIP1.js → infoDiagram-HS3SLOUP-CMic1Hhh.js} +5 -5
  133. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-COrw3Dj9.js → journeyDiagram-XKPGCS4Q-CravZq_h.js} +4 -4
  134. package/dist/server/assets/{kanban-definition-3W4ZIXB7-CexmIyEk.js → kanban-definition-3W4ZIXB7-Ik9j3Xny.js} +2 -2
  135. package/dist/server/assets/{layout-CpkjZ_rj.js → layout-DNctAx-v.js} +4 -4
  136. package/dist/server/assets/{mermaid-3ZIDBTTL-8k9Pr9Qn.js → mermaid-3ZIDBTTL-Bo2_mtnV.js} +1 -1
  137. package/dist/server/assets/{mermaid-parser.core-ueKoLtpn.js → mermaid-parser.core-oaV6PZnA.js} +11 -11
  138. package/dist/server/assets/{mindmap-definition-VGOIOE7T-Lf0rrgEi.js → mindmap-definition-VGOIOE7T-DNTQXwUn.js} +3 -3
  139. package/dist/server/assets/{packet-DYOGHKS2-Bv6REKYk.js → packet-DYOGHKS2-Bm5PEDRe.js} +6 -6
  140. package/dist/server/assets/{pie-VRWISCQL-DRcS7bNz.js → pie-VRWISCQL-BOs-4VKW.js} +6 -6
  141. package/dist/server/assets/{pieDiagram-ADFJNKIX-m0hjxyCj.js → pieDiagram-ADFJNKIX-CEDLfCSy.js} +7 -9
  142. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-omed34Wz.js → quadrantDiagram-AYHSOK5B-CWfJcZnB.js} +1 -4
  143. package/dist/server/assets/{radar-ZZBFDIW7-Ba1phWAD.js → radar-ZZBFDIW7-CMUO9a2O.js} +6 -6
  144. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-BCx5DoGU.js → requirementDiagram-UZGBJVZJ-0SINZ3cV.js} +3 -3
  145. package/dist/server/assets/{router-DXfwP2_o.js → router-PewB2VMR.js} +28930 -6188
  146. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-9M4Rn44L.js → sankeyDiagram-TZEHDZUN-U0rb6LX8.js} +1 -3
  147. package/dist/server/assets/{sequenceDiagram-WL72ISMW-DXMFuhl3.js → sequenceDiagram-WL72ISMW-BV5_vSVf.js} +3 -3
  148. package/dist/server/assets/{square-terminal-CfM5f-d7.js → square-terminal-DdT3sDE4.js} +1 -1
  149. package/dist/server/assets/{stateDiagram-FKZM4ZOC-CY6AEWa2.js → stateDiagram-FKZM4ZOC-C3wAlRbY.js} +8 -8
  150. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-BNKDdzaI.js → stateDiagram-v2-4FDKWEC3-BvzsTmR_.js} +4 -4
  151. package/dist/server/assets/{timeline-definition-IT6M3QCI-D_io-Tfq.js → timeline-definition-IT6M3QCI-BwVTrWyj.js} +2 -2
  152. package/dist/server/assets/{treemap-GDKQZRPO-p84SlzEZ.js → treemap-GDKQZRPO-Bohb153V.js} +6 -6
  153. package/dist/server/assets/{workspace._workspaceId-CJcudFN3.js → workspace._workspaceId-BWs5oKO5.js} +16 -14
  154. package/dist/server/assets/{workspace._workspaceId-BnLo-dj-.js → workspace._workspaceId-DkyiAy0e.js} +1 -1
  155. package/dist/server/assets/{xychartDiagram-PRI3JC2R-Y3f7rM8c.js → xychartDiagram-PRI3JC2R-XlYGoU4Z.js} +9 -71
  156. package/dist/server/server.js +17 -14
  157. package/dist/start-server.mjs +33664 -29191
  158. package/package.json +6 -4
  159. package/dist/client/assets/DockviewBrowserContainer-DjUjHPic.js +0 -5
  160. package/dist/client/assets/DockviewTerminalContainer-Ms5Ihp7N.js +0 -2
  161. package/dist/client/assets/TerminalPanel-DFA3TNjT.js +0 -5
  162. package/dist/client/assets/_basePickBy-arnwX_WB.js +0 -1
  163. package/dist/client/assets/arc-CQ9imgVi.js +0 -1
  164. package/dist/client/assets/channel-DufC8eM3.js +0 -1
  165. package/dist/client/assets/chunk-QN33PNHL-CPGopyck.js +0 -1
  166. package/dist/client/assets/classDiagram-2ON5EDUG-6OTp0Ijn.js +0 -1
  167. package/dist/client/assets/classDiagram-v2-WZHVMYZB-6OTp0Ijn.js +0 -1
  168. package/dist/client/assets/clone-BnAVnjoT.js +0 -1
  169. package/dist/client/assets/dagre-6UL2VRFP-CjtHExws.js +0 -4
  170. package/dist/client/assets/defaultLocale-DX6XiGOO.js +0 -1
  171. package/dist/client/assets/diagram-PSM6KHXK-D63FxUPX.js +0 -24
  172. package/dist/client/assets/diagram-S2PKOQOG-BNgqexx6.js +0 -24
  173. package/dist/client/assets/ganttDiagram-JELNMOA3-BFJUVCan.js +0 -267
  174. package/dist/client/assets/infoDiagram-HS3SLOUP-CNf_MNW6.js +0 -2
  175. package/dist/client/assets/init-Gi6I4Gst.js +0 -1
  176. package/dist/client/assets/linear-hC1V8gzM.js +0 -1
  177. package/dist/client/assets/main-evBJruhw.css +0 -1
  178. package/dist/client/assets/ordinal-Cboi1Yqb.js +0 -1
  179. package/dist/client/assets/pieDiagram-ADFJNKIX-BMZI-9Ki.js +0 -30
  180. package/dist/client/assets/sankeyDiagram-TZEHDZUN-BslS_Swn.js +0 -10
  181. package/dist/client/assets/stateDiagram-FKZM4ZOC-D_5xUVRu.js +0 -1
  182. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DDClSQGJ.js +0 -1
  183. package/dist/client/assets/workspace._workspaceId-DCDakxld.js +0 -2
  184. package/dist/client/assets/xychartDiagram-PRI3JC2R-TNRUAqXa.js +0 -7
  185. package/dist/server/assets/_tanstack-start-manifest_v-DxI647M-.js +0 -4
  186. package/dist/server/assets/defaultLocale-B2RvLBDe.js +0 -206
  187. package/dist/server/assets/init-ZxktEp_H.js +0 -16
  188. package/dist/server/assets/linear-DhOj0qpX.js +0 -340
  189. package/dist/server/assets/ordinal-CxptdPJm.js +0 -76
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../server.js";
2
- import { m as createLucideIcon, bS as ArrowLeft, c1 as ArrowRight, c2 as ArrowUp, c3 as ArrowDown, X, c4 as ClipboardPaste, bY as useSettingsQuery, c5 as getCurrentZoomLevel, c6 as openExternalUrl, c7 as subscribeToZoomChanges, c8 as SearchBar, c9 as ZOOM_CSS_VAR } from "./router-DXfwP2_o.js";
2
+ import { m as createLucideIcon, bX as ArrowLeft, cc as ArrowUp, cd as ArrowDown, ce as ArrowRight, X, cf as ClipboardPaste, c3 as useSettingsQuery, cg as getCurrentZoomLevel, ch as openExternalUrl, ci as subscribeToZoomChanges, cj as SearchBar, ck as ZOOM_CSS_VAR } from "./router-PewB2VMR.js";
3
3
  import "node:async_hooks";
4
4
  import "node:stream";
5
5
  import "util";
@@ -10,14 +10,21 @@ import "node:stream/web";
10
10
  import "node:process";
11
11
  import "node:path";
12
12
  import "node:url";
13
- const __iconNode$1 = [
13
+ const __iconNode$3 = [
14
14
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
15
15
  ["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2", key: "4jdomd" }],
16
16
  ["path", { d: "M16 4h2a2 2 0 0 1 2 2v4", key: "3hqy98" }],
17
17
  ["path", { d: "M21 14H11", key: "1bme5i" }],
18
18
  ["path", { d: "m15 10-4 4 4 4", key: "5dvupr" }]
19
19
  ];
20
- const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode$1);
20
+ const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode$3);
21
+ const __iconNode$2 = [
22
+ ["path", { d: "M20 4v7a4 4 0 0 1-4 4H4", key: "6o5b7l" }],
23
+ ["path", { d: "m9 10-5 5 5 5", key: "1kshq7" }]
24
+ ];
25
+ const CornerDownLeft = createLucideIcon("corner-down-left", __iconNode$2);
26
+ const __iconNode$1 = [["path", { d: "M22 2 2 22", key: "y4kqgn" }]];
27
+ const Slash = createLucideIcon("slash", __iconNode$1);
21
28
  const __iconNode = [
22
29
  ["path", { d: "M12 20h-1a2 2 0 0 1-2-2 2 2 0 0 1-2 2H6", key: "1528k5" }],
23
30
  ["path", { d: "M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7", key: "13ksps" }],
@@ -191,6 +198,8 @@ async function readClipboardText() {
191
198
  }
192
199
  const SEQ_ESC = "\x1B";
193
200
  const SEQ_TAB = " ";
201
+ const SEQ_ENTER = "\r";
202
+ const SEQ_SLASH = "/";
194
203
  const SEQ_ARROW_UP = "\x1B[A";
195
204
  const SEQ_ARROW_DOWN = "\x1B[B";
196
205
  const SEQ_ARROW_RIGHT = "\x1B[C";
@@ -235,18 +244,18 @@ function TerminalToolbar({
235
244
  const idleArrows = reactExports.useMemo(
236
245
  () => [
237
246
  { Icon: ArrowLeft, seq: SEQ_ARROW_LEFT, ariaLabel: "Arrow Left" },
238
- { Icon: ArrowRight, seq: SEQ_ARROW_RIGHT, ariaLabel: "Arrow Right" },
239
247
  { Icon: ArrowUp, seq: SEQ_ARROW_UP, ariaLabel: "Arrow Up" },
240
- { Icon: ArrowDown, seq: SEQ_ARROW_DOWN, ariaLabel: "Arrow Down" }
248
+ { Icon: ArrowDown, seq: SEQ_ARROW_DOWN, ariaLabel: "Arrow Down" },
249
+ { Icon: ArrowRight, seq: SEQ_ARROW_RIGHT, ariaLabel: "Arrow Right" }
241
250
  ],
242
251
  []
243
252
  );
244
253
  const selectionArrows = reactExports.useMemo(
245
254
  () => [
246
255
  { Icon: ArrowLeft, dir: "left", ariaLabel: "Extend selection left" },
247
- { Icon: ArrowRight, dir: "right", ariaLabel: "Extend selection right" },
248
256
  { Icon: ArrowUp, dir: "up", ariaLabel: "Extend selection up" },
249
- { Icon: ArrowDown, dir: "down", ariaLabel: "Extend selection down" }
257
+ { Icon: ArrowDown, dir: "down", ariaLabel: "Extend selection down" },
258
+ { Icon: ArrowRight, dir: "right", ariaLabel: "Extend selection right" }
250
259
  ],
251
260
  []
252
261
  );
@@ -260,109 +269,131 @@ function TerminalToolbar({
260
269
  "aria-label": selectionMode ? "Terminal selection controls" : "Terminal accessory keys",
261
270
  style: { bottom: bottomOffset },
262
271
  className: "fixed inset-x-0 z-50 flex justify-center border-t border-border bg-background/95 shadow-lg backdrop-blur-md",
263
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex w-full max-w-3xl items-center gap-1 overflow-x-auto px-2 py-1.5", children: selectionMode ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
264
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
265
- ToolbarButton,
266
- {
267
- ariaLabel: "Copy selection and exit",
268
- title: "Copy",
269
- onPointerDown: tap(handleCopyAndExit),
270
- variant: "primary",
271
- children: [
272
- /* @__PURE__ */ jsxRuntimeExports.jsx(ClipboardCopy, { className: "size-4" }),
273
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Copy" })
274
- ]
275
- }
276
- ),
277
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
278
- ToolbarButton,
279
- {
280
- ariaLabel: "Exit selection mode",
281
- title: "Done",
282
- onPointerDown: tap(onExitSelection),
283
- children: [
284
- /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "size-4" }),
285
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Done" })
286
- ]
287
- }
288
- ),
289
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
290
- /* @__PURE__ */ jsxRuntimeExports.jsx(
291
- "span",
292
- {
293
- className: "mr-1 shrink-0 select-none text-xs font-medium uppercase tracking-wide text-muted-foreground",
294
- "aria-hidden": "true",
295
- children: "Extend"
296
- }
297
- ),
298
- selectionArrows.map(({ Icon, dir, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
299
- ToolbarButton,
300
- {
301
- ariaLabel,
302
- title: ariaLabel,
303
- onPointerDown: tap(() => onExtendSelection(dir)),
304
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { className: "size-4" })
305
- },
306
- dir
307
- ))
308
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
309
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
310
- ToolbarButton,
311
- {
312
- ariaLabel: "Paste from clipboard",
313
- title: "Paste",
314
- onPointerDown: tap(handlePaste),
315
- children: [
316
- /* @__PURE__ */ jsxRuntimeExports.jsx(ClipboardPaste, { className: "size-4" }),
317
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Paste" })
318
- ]
319
- }
320
- ),
321
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
322
- ToolbarButton,
323
- {
324
- ariaLabel: "Select all",
325
- title: "Select all",
326
- onPointerDown: tap(onSelectAll),
327
- children: [
328
- /* @__PURE__ */ jsxRuntimeExports.jsx(TextCursorInput, { className: "size-4" }),
329
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "All" })
330
- ]
331
- }
332
- ),
333
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
334
- idleKeyButtons.map(({ label, seq, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
335
- ToolbarButton,
336
- {
337
- ariaLabel,
338
- title: label,
339
- onPointerDown: tap(() => sendInput(seq)),
340
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium", children: label })
341
- },
342
- label
343
- )),
272
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex w-full max-w-3xl items-center gap-1 px-2 py-1.5", children: [
273
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-x-auto", children: selectionMode ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
274
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
275
+ ToolbarButton,
276
+ {
277
+ ariaLabel: "Copy selection and exit",
278
+ title: "Copy",
279
+ onPointerDown: tap(handleCopyAndExit),
280
+ variant: "primary",
281
+ children: [
282
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ClipboardCopy, { className: "size-4" }),
283
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Copy" })
284
+ ]
285
+ }
286
+ ),
287
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
288
+ ToolbarButton,
289
+ {
290
+ ariaLabel: "Exit selection mode",
291
+ title: "Done",
292
+ onPointerDown: tap(onExitSelection),
293
+ children: [
294
+ /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "size-4" }),
295
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Done" })
296
+ ]
297
+ }
298
+ ),
299
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
300
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
301
+ "span",
302
+ {
303
+ className: "mr-1 shrink-0 select-none text-xs font-medium uppercase tracking-wide text-muted-foreground",
304
+ "aria-hidden": "true",
305
+ children: "Extend"
306
+ }
307
+ ),
308
+ selectionArrows.map(({ Icon, dir, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
309
+ ToolbarButton,
310
+ {
311
+ ariaLabel,
312
+ title: ariaLabel,
313
+ onPointerDown: tap(() => onExtendSelection(dir)),
314
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { className: "size-4" })
315
+ },
316
+ dir
317
+ ))
318
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
319
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
320
+ ToolbarButton,
321
+ {
322
+ ariaLabel: "Paste from clipboard",
323
+ title: "Paste",
324
+ onPointerDown: tap(handlePaste),
325
+ children: [
326
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ClipboardPaste, { className: "size-4" }),
327
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "Paste" })
328
+ ]
329
+ }
330
+ ),
331
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
332
+ ToolbarButton,
333
+ {
334
+ ariaLabel: "Select all",
335
+ title: "Select all",
336
+ onPointerDown: tap(onSelectAll),
337
+ children: [
338
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TextCursorInput, { className: "size-4" }),
339
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "All" })
340
+ ]
341
+ }
342
+ ),
343
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
344
+ idleKeyButtons.map(({ label, seq, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
345
+ ToolbarButton,
346
+ {
347
+ ariaLabel,
348
+ title: label,
349
+ onPointerDown: tap(() => sendInput(seq)),
350
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium", children: label })
351
+ },
352
+ label
353
+ )),
354
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
355
+ ToolbarButton,
356
+ {
357
+ ariaLabel: "Send slash",
358
+ title: "Slash command",
359
+ onPointerDown: tap(() => sendInput(SEQ_SLASH)),
360
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Slash, { className: "size-4" })
361
+ }
362
+ ),
363
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
364
+ ToolbarButton,
365
+ {
366
+ ariaLabel: pendingCtrl ? "Cancel pending Ctrl" : "Arm Ctrl modifier",
367
+ title: "Ctrl (sticky — taps the next key as Ctrl+key)",
368
+ onPointerDown: tap(onToggleCtrl),
369
+ active: pendingCtrl,
370
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium", children: "Ctrl" })
371
+ }
372
+ ),
373
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
374
+ idleArrows.map(({ Icon, seq, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
375
+ ToolbarButton,
376
+ {
377
+ ariaLabel,
378
+ title: ariaLabel,
379
+ onPointerDown: tap(() => sendInput(seq)),
380
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { className: "size-4" })
381
+ },
382
+ ariaLabel
383
+ ))
384
+ ] }) }),
385
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
344
386
  /* @__PURE__ */ jsxRuntimeExports.jsx(
345
387
  ToolbarButton,
346
388
  {
347
- ariaLabel: pendingCtrl ? "Cancel pending Ctrl" : "Arm Ctrl modifier",
348
- title: "Ctrl (sticky — taps the next key as Ctrl+key)",
349
- onPointerDown: tap(onToggleCtrl),
350
- active: pendingCtrl,
351
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-medium", children: "Ctrl" })
389
+ ariaLabel: "Send Enter",
390
+ title: "Enter",
391
+ onPointerDown: tap(() => sendInput(SEQ_ENTER)),
392
+ variant: "primary",
393
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(CornerDownLeft, { className: "size-4" })
352
394
  }
353
- ),
354
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-1 h-6 w-px shrink-0 bg-border", "aria-hidden": "true" }),
355
- idleArrows.map(({ Icon, seq, ariaLabel }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
356
- ToolbarButton,
357
- {
358
- ariaLabel,
359
- title: ariaLabel,
360
- onPointerDown: tap(() => sendInput(seq)),
361
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { className: "size-4" })
362
- },
363
- ariaLabel
364
- ))
365
- ] }) })
395
+ )
396
+ ] })
366
397
  }
367
398
  );
368
399
  }
@@ -774,50 +805,120 @@ function TerminalPanel({
774
805
  containerEl.addEventListener("touchend", onTapEnd, { passive: true });
775
806
  containerEl.addEventListener("touchcancel", onTapCancel, { passive: true });
776
807
  const proto = location.protocol === "https:" ? "wss:" : "ws:";
777
- const ws = new WebSocket(
778
- `${proto}//${location.host}/terminal?workspaceId=${encodeURIComponent(workspaceId)}&terminalId=${encodeURIComponent(terminalId)}`
779
- );
780
- wsRef.current = ws;
781
- ws.binaryType = "arraybuffer";
782
- ws.onopen = () => {
783
- if (paneMetadata && (paneMetadata.command || paneMetadata.cwd || paneMetadata.env)) {
784
- const initMsg = { type: "init" };
785
- if (paneMetadata.command) initMsg.command = paneMetadata.command;
786
- if (paneMetadata.cwd) initMsg.cwd = paneMetadata.cwd;
787
- if (paneMetadata.env) initMsg.env = paneMetadata.env;
788
- ws.send(JSON.stringify(initMsg));
808
+ const wsUrl = `${proto}//${location.host}/terminal?workspaceId=${encodeURIComponent(workspaceId)}&terminalId=${encodeURIComponent(terminalId)}`;
809
+ const HEARTBEAT_INTERVAL_MS = 1e4;
810
+ const HEARTBEAT_TIMEOUT_MS = 2e4;
811
+ const RECONNECT_BASE_MS = 500;
812
+ const RECONNECT_MAX_MS = 1e4;
813
+ let intentionalClose = false;
814
+ let didConnectOnce = false;
815
+ let reconnectAttempts = 0;
816
+ let reconnectTimer = null;
817
+ let heartbeatTimer = null;
818
+ let lastPongAt = 0;
819
+ const clearReconnectTimer = () => {
820
+ if (reconnectTimer !== null) {
821
+ clearTimeout(reconnectTimer);
822
+ reconnectTimer = null;
789
823
  }
790
- fitAddon.fit();
791
- ws.send(
792
- JSON.stringify({
793
- type: "resize",
794
- cols: terminal.cols,
795
- rows: terminal.rows
796
- })
797
- );
798
- if (autoFocus) {
799
- terminal.focus();
824
+ };
825
+ const stopHeartbeat = () => {
826
+ if (heartbeatTimer !== null) {
827
+ clearInterval(heartbeatTimer);
828
+ heartbeatTimer = null;
800
829
  }
801
830
  };
802
- ws.onmessage = (event) => {
803
- if (event.data instanceof ArrayBuffer) {
804
- terminal.write(new Uint8Array(event.data));
805
- } else {
806
- try {
807
- const msg = JSON.parse(event.data);
808
- if (msg.type === "title" && typeof msg.title === "string") {
809
- onTitleChangeRef.current?.(msg.title);
831
+ const probeConnection = () => {
832
+ const ws = wsRef.current;
833
+ if (!ws || ws.readyState !== WebSocket.OPEN) return;
834
+ if (Date.now() - lastPongAt > HEARTBEAT_TIMEOUT_MS) {
835
+ ws.close();
836
+ return;
837
+ }
838
+ try {
839
+ ws.send(JSON.stringify({ type: "ping" }));
840
+ } catch {
841
+ ws.close();
842
+ }
843
+ };
844
+ const scheduleReconnect = () => {
845
+ if (intentionalClose || reconnectTimer !== null) return;
846
+ const delay = Math.min(RECONNECT_BASE_MS * 2 ** reconnectAttempts, RECONNECT_MAX_MS);
847
+ if (delay < RECONNECT_MAX_MS) reconnectAttempts += 1;
848
+ reconnectTimer = setTimeout(() => {
849
+ reconnectTimer = null;
850
+ connect();
851
+ }, delay);
852
+ };
853
+ function connect() {
854
+ if (intentionalClose) return;
855
+ clearReconnectTimer();
856
+ const isReconnect = didConnectOnce;
857
+ const ws = new WebSocket(wsUrl);
858
+ wsRef.current = ws;
859
+ ws.binaryType = "arraybuffer";
860
+ ws.onopen = () => {
861
+ reconnectAttempts = 0;
862
+ lastPongAt = Date.now();
863
+ if (isReconnect) terminal.reset();
864
+ if (!didConnectOnce && paneMetadata && (paneMetadata.command || paneMetadata.cwd || paneMetadata.env)) {
865
+ const initMsg = { type: "init" };
866
+ if (paneMetadata.command) initMsg.command = paneMetadata.command;
867
+ if (paneMetadata.cwd) initMsg.cwd = paneMetadata.cwd;
868
+ if (paneMetadata.env) initMsg.env = paneMetadata.env;
869
+ ws.send(JSON.stringify(initMsg));
870
+ }
871
+ didConnectOnce = true;
872
+ fitAddon.fit();
873
+ ws.send(JSON.stringify({ type: "resize", cols: terminal.cols, rows: terminal.rows }));
874
+ if (autoFocus && !isReconnect) terminal.focus();
875
+ stopHeartbeat();
876
+ heartbeatTimer = setInterval(probeConnection, HEARTBEAT_INTERVAL_MS);
877
+ };
878
+ ws.onmessage = (event) => {
879
+ if (event.data instanceof ArrayBuffer) {
880
+ terminal.write(new Uint8Array(event.data));
881
+ } else {
882
+ try {
883
+ const msg = JSON.parse(event.data);
884
+ if (msg.type === "pong") {
885
+ lastPongAt = Date.now();
886
+ } else if (msg.type === "title" && typeof msg.title === "string") {
887
+ onTitleChangeRef.current?.(msg.title);
888
+ }
889
+ } catch {
890
+ terminal.write(event.data);
810
891
  }
811
- } catch {
812
- terminal.write(event.data);
813
892
  }
893
+ };
894
+ ws.onclose = () => {
895
+ if (wsRef.current !== ws) return;
896
+ stopHeartbeat();
897
+ if (intentionalClose) return;
898
+ terminal.write("\r\n\x1B[90m[Reconnecting…]\x1B[0m\r\n");
899
+ scheduleReconnect();
900
+ };
901
+ }
902
+ const handleResume = () => {
903
+ if (intentionalClose) return;
904
+ const ws = wsRef.current;
905
+ if (!ws || ws.readyState === WebSocket.CLOSED || ws.readyState === WebSocket.CLOSING) {
906
+ reconnectAttempts = 0;
907
+ clearReconnectTimer();
908
+ connect();
909
+ } else if (ws.readyState === WebSocket.OPEN) {
910
+ probeConnection();
814
911
  }
815
912
  };
816
- ws.onclose = () => {
817
- terminal.write("\r\n\x1B[90m[Terminal disconnected]\x1B[0m\r\n");
913
+ const handleVisibility = () => {
914
+ if (!document.hidden) handleResume();
818
915
  };
916
+ window.addEventListener("online", handleResume);
917
+ document.addEventListener("visibilitychange", handleVisibility);
918
+ connect();
819
919
  terminal.onData((data) => {
820
- if (ws.readyState === WebSocket.OPEN) {
920
+ const ws = wsRef.current;
921
+ if (ws && ws.readyState === WebSocket.OPEN) {
821
922
  ws.send(data);
822
923
  }
823
924
  });
@@ -838,7 +939,8 @@ function TerminalPanel({
838
939
  const selectionResizeDisposable = terminal.onResize(reapplySelectionOnNextFrame);
839
940
  let lastDpr = window.devicePixelRatio;
840
941
  const sendPtyResize = () => {
841
- if (ws.readyState !== WebSocket.OPEN) return;
942
+ const ws = wsRef.current;
943
+ if (!ws || ws.readyState !== WebSocket.OPEN) return;
842
944
  if (terminal.cols <= 0 || terminal.rows <= 0) return;
843
945
  ws.send(
844
946
  JSON.stringify({
@@ -903,6 +1005,11 @@ function TerminalPanel({
903
1005
  };
904
1006
  bindDprListener();
905
1007
  cleanup = () => {
1008
+ intentionalClose = true;
1009
+ clearReconnectTimer();
1010
+ stopHeartbeat();
1011
+ window.removeEventListener("online", handleResume);
1012
+ document.removeEventListener("visibilitychange", handleVisibility);
906
1013
  themeObserver.disconnect();
907
1014
  resizeObserver.disconnect();
908
1015
  searchResultsDisposable.dispose();
@@ -923,7 +1030,7 @@ function TerminalPanel({
923
1030
  containerEl.removeEventListener("touchstart", onTapStart);
924
1031
  containerEl.removeEventListener("touchend", onTapEnd);
925
1032
  containerEl.removeEventListener("touchcancel", onTapCancel);
926
- ws.close();
1033
+ wsRef.current?.close();
927
1034
  terminal.dispose();
928
1035
  terminalRef.current = null;
929
1036
  fitAddonRef.current = null;
@@ -1,5 +1,5 @@
1
- import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-BloU0u1p.js";
2
- import { ct as isObject, bp as baseRest, cu as isIterateeCall, cv as keysIn, cw as eq, cx as isArrayLike, cy as isArray, cz as identity, cA as isIndex, cB as assignValue } from "./router-DXfwP2_o.js";
1
+ import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-Dz_kdarY.js";
2
+ import { c_ as isObject, bv as baseRest, c$ as isIterateeCall, d0 as keysIn, d1 as eq, d2 as isArrayLike, d3 as isArray, d4 as identity, d5 as isIndex, d6 as assignValue } from "./router-PewB2VMR.js";
3
3
  var reWhitespace = /\s/;
4
4
  function trimmedEndIndex(string) {
5
5
  var index = string.length;
@@ -1,4 +1,4 @@
1
- import { cX as isObjectLike, cY as baseGetTag, cy as isArray, cZ as Symbol$1, cx as isArrayLike, c_ as arrayLikeKeys, c$ as baseKeys, d0 as memoize, d1 as isArguments, d2 as copyObject, cv as keysIn, d3 as getPrototype, d4 as cloneArrayBuffer, d5 as cloneTypedArray, d6 as getTag, cV as baseUnary, d7 as nodeUtil, ct as isObject, d8 as copyArray, d9 as isBuffer, da as cloneBuffer, db as initCloneObject, dc as Stack, cB as assignValue, dd as MapCache, cw as eq, de as Uint8Array, df as isTypedArray, dg as isLength, cA as isIndex, cz as identity, cT as baseFor, dh as Set } from "./router-DXfwP2_o.js";
1
+ import { dg as isObjectLike, dh as baseGetTag, d3 as isArray, di as Symbol$1, d2 as isArrayLike, dj as arrayLikeKeys, dk as baseKeys, dl as memoize, dm as isArguments, dn as copyObject, d0 as keysIn, dp as getPrototype, dq as cloneArrayBuffer, dr as cloneTypedArray, ds as getTag, de as baseUnary, dt as nodeUtil, c_ as isObject, du as copyArray, dv as isBuffer, dw as cloneBuffer, dx as initCloneObject, dy as Stack, d6 as assignValue, dz as MapCache, d1 as eq, dA as Uint8Array, dB as isTypedArray, dC as isLength, d5 as isIndex, d4 as identity, dc as baseFor, dD as Set } from "./router-PewB2VMR.js";
2
2
  var symbolTag$3 = "[object Symbol]";
3
3
  function isSymbol(value) {
4
4
  return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
@@ -0,0 +1,4 @@
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "/Users/runner/work/band/band/apps/web/src/routes/__root.tsx", "children": ["/", "/workspace/$workspaceId"], "preloads": ["/assets/main-Ct1o5WmJ.js"], "assets": [{ "tag": "link", "attrs": { "rel": "stylesheet", "href": "/assets/main-DsoPLGrb.css", "type": "text/css" } }] }, "/": { "filePath": "/Users/runner/work/band/band/apps/web/src/routes/index.tsx", "assets": [{ "tag": "link", "attrs": { "rel": "stylesheet", "href": "/assets/main-DsoPLGrb.css", "type": "text/css" } }], "preloads": ["/assets/index-Cx9QoFI1.js"] }, "/workspace/$workspaceId": { "filePath": "/Users/runner/work/band/band/apps/web/src/routes/workspace.$workspaceId.tsx", "assets": [{ "tag": "link", "attrs": { "rel": "stylesheet", "href": "/assets/main-DsoPLGrb.css", "type": "text/css" } }], "preloads": ["/assets/workspace._workspaceId-CX0zbe5I.js", "/assets/square-terminal-xTmJg69x.js"] } }, "clientEntry": "/assets/main-Ct1o5WmJ.js" });
2
+ export {
3
+ tsrStartManifest
4
+ };
@@ -1,4 +1,4 @@
1
- import { aq as withPath, ar as halfPi, as as epsilon, at as tau, au as cos, av as sin, aw as min, ax as abs, ay as pi, az as sqrt, aA as atan2, aB as constant, aC as asin, aD as acos, aE as max } from "./router-DXfwP2_o.js";
1
+ import { at as withPath, au as halfPi, av as epsilon, aw as tau, ax as cos, ay as sin, az as min, aA as abs, aB as pi, aC as sqrt, aD as atan2, aE as constant, aF as asin, aG as acos, aH as max } from "./router-PewB2VMR.js";
2
2
  function arcInnerRadius(d) {
3
3
  return d.innerRadius;
4
4
  }
@@ -1,6 +1,6 @@
1
- import { e as createArchitectureServices } from "./mermaid-parser.core-ueKoLtpn.js";
2
- import { A } from "./mermaid-parser.core-ueKoLtpn.js";
3
- import "./router-DXfwP2_o.js";
1
+ import { e as createArchitectureServices } from "./mermaid-parser.core-oaV6PZnA.js";
2
+ import { A } from "./mermaid-parser.core-oaV6PZnA.js";
3
+ import "./router-PewB2VMR.js";
4
4
  import "../server.js";
5
5
  import "node:async_hooks";
6
6
  import "node:stream";
@@ -12,9 +12,9 @@ import "node:stream/web";
12
12
  import "node:process";
13
13
  import "node:path";
14
14
  import "node:url";
15
- import "./_baseUniq-BloU0u1p.js";
16
- import "./_basePickBy-BstQwUjx.js";
17
- import "./clone-Dw9tAHpg.js";
15
+ import "./_baseUniq-Dz_kdarY.js";
16
+ import "./_basePickBy-3tZLkfZU.js";
17
+ import "./clone-DFaP-n7G.js";
18
18
  import "path";
19
19
  import "os";
20
20
  import "net";
@@ -1,15 +1,15 @@
1
1
  var _a;
2
- import { _ as __name, ao as selectSvgElement, aQ as setupGraphViewbox, S as log, J as setAccTitle, H as getAccTitle, a7 as setDiagramTitle, a8 as getDiagramTitle, G as getAccDescription, F as setAccDescription, ad as clear, ak as cleanAndMerge, al as defaultConfig_default, am as getConfig, M as getConfig2, a_ as createText, ca as getIconSVG, Y as sanitizeText, O as select, ac as getEdgeId, cb as registerIconPacks, cc as unknownIcon } from "./router-DXfwP2_o.js";
3
- import { p as populateCommonDb } from "./chunk-4BX2VUAB-DepEjWoL.js";
4
- import { p as parse } from "./mermaid-parser.core-ueKoLtpn.js";
2
+ import { _ as __name, ar as selectSvgElement, aW as setupGraphViewbox, W as log, S as setAccTitle, O as getAccTitle, aa as setDiagramTitle, ab as getDiagramTitle, M as getAccDescription, J as setAccDescription, ag as clear, an as cleanAndMerge, ao as defaultConfig_default, ap as getConfig, U as getConfig2, b4 as createText, c9 as getIconSVG, a0 as sanitizeText, V as select, af as getEdgeId, ca as registerIconPacks, cb as unknownIcon } from "./router-PewB2VMR.js";
3
+ import { p as populateCommonDb } from "./chunk-4BX2VUAB-DVHBGPAd.js";
4
+ import { p as parse } from "./mermaid-parser.core-oaV6PZnA.js";
5
5
  import { c as cytoscape$1 } from "./cytoscape.esm-Bm8DJGmZ.js";
6
6
  import { g as getDefaultExportFromCjs } from "../server.js";
7
7
  import "node:process";
8
8
  import "node:path";
9
9
  import "node:url";
10
- import "./_baseUniq-BloU0u1p.js";
11
- import "./_basePickBy-BstQwUjx.js";
12
- import "./clone-Dw9tAHpg.js";
10
+ import "./_baseUniq-Dz_kdarY.js";
11
+ import "./_basePickBy-3tZLkfZU.js";
12
+ import "./clone-DFaP-n7G.js";
13
13
  import "util";
14
14
  import "path";
15
15
  import "os";
@@ -1,8 +1,8 @@
1
- import { g as getIconStyles } from "./chunk-FMBD7UC4-BInQidDU.js";
2
- import { _ as __name, am as getConfig, O as select, U as configureSvgSize, S as log, ad as clear, af as rgba, aY as getLineFunctionsWithOffset, aN as line, aO as curveBasis, M as getConfig2, aK as getUrl, aZ as evaluate, a_ as createText, a$ as getSubGraphTitleMargins, a6 as utils_default, a0 as common_default, b0 as replaceIconSubstring, b1 as decodeEntities, Y as sanitizeText, b2 as getStylesFromArray } from "./router-DXfwP2_o.js";
3
- import { c as clone } from "./clone-Dw9tAHpg.js";
4
- import { G as Graph } from "./graph-mppr1RdG.js";
5
- import { c as channel } from "./channel-BMp2wZD3.js";
1
+ import { g as getIconStyles } from "./chunk-FMBD7UC4-BSvY40K1.js";
2
+ import { _ as __name, ap as getConfig, V as select, Y as configureSvgSize, W as log, ag as clear, ai as rgba, b2 as getLineFunctionsWithOffset, aM as line, aU as curveBasis, U as getConfig2, aR as getUrl, b3 as evaluate, b4 as createText, b5 as getSubGraphTitleMargins, a9 as utils_default, a3 as common_default, b6 as replaceIconSubstring, b7 as decodeEntities, a0 as sanitizeText, b8 as getStylesFromArray } from "./router-PewB2VMR.js";
3
+ import { c as clone } from "./clone-DFaP-n7G.js";
4
+ import { G as Graph } from "./graph-Da9wNyd4.js";
5
+ import { c as channel } from "./channel-DzI1wGYl.js";
6
6
  import "../server.js";
7
7
  import "node:async_hooks";
8
8
  import "node:stream";
@@ -14,7 +14,7 @@ import "node:stream/web";
14
14
  import "node:process";
15
15
  import "node:path";
16
16
  import "node:url";
17
- import "./_baseUniq-BloU0u1p.js";
17
+ import "./_baseUniq-Dz_kdarY.js";
18
18
  var parser = (function() {
19
19
  var o = /* @__PURE__ */ __name(function(k, v, o2, l) {
20
20
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;
@@ -1,6 +1,6 @@
1
1
  var _a, _b;
2
- import { g as getNoteRect, d as drawRect } from "./chunk-TZMSLE5B-Gk23cBC5.js";
3
- import { F as setAccDescription, G as getAccDescription, H as getAccTitle, J as setAccTitle, _ as __name, M as getConfig2, O as select, S as log, U as configureSvgSize, V as assignWithDepth_default, W as calculateTextWidth, Y as sanitizeText, Z as distExports, $ as wrapLabel, a0 as common_default, a1 as calculateTextHeight } from "./router-DXfwP2_o.js";
2
+ import { g as getNoteRect, d as drawRect } from "./chunk-TZMSLE5B-FZqT6NRx.js";
3
+ import { J as setAccDescription, M as getAccDescription, O as getAccTitle, S as setAccTitle, _ as __name, U as getConfig2, V as select, W as log, Y as configureSvgSize, Z as assignWithDepth_default, $ as calculateTextWidth, a0 as sanitizeText, a1 as distExports, a2 as wrapLabel, a3 as common_default, a4 as calculateTextHeight } from "./router-PewB2VMR.js";
4
4
  import "../server.js";
5
5
  import "node:async_hooks";
6
6
  import "node:stream";
@@ -1,4 +1,4 @@
1
- import { ag as Utils, ah as Color } from "./router-DXfwP2_o.js";
1
+ import { aj as Utils, ak as Color } from "./router-PewB2VMR.js";
2
2
  const channel = (color, channel2) => {
3
3
  return Utils.lang.round(Color.parse(color)[channel2]);
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as __name } from "./router-DXfwP2_o.js";
1
+ import { _ as __name } from "./router-PewB2VMR.js";
2
2
  function populateCommonDb(ast, db) {
3
3
  if (ast.accDescr) {
4
4
  db.setAccDescription?.(ast.accDescr);
@@ -1,4 +1,4 @@
1
- import { _ as __name, O as select } from "./router-DXfwP2_o.js";
1
+ import { _ as __name, V as select } from "./router-PewB2VMR.js";
2
2
  var getDiagramElement = /* @__PURE__ */ __name((id, securityLevel) => {
3
3
  let sandboxElement;
4
4
  if (securityLevel === "sandbox") {