@band-app/server 0.16.8 → 0.16.9

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 (172) hide show
  1. package/dist/client/assets/DockviewBrowserContainer-CCBAkU1p.js +5 -0
  2. package/dist/client/assets/DockviewTerminalContainer-B9hdDoMz.js +2 -0
  3. package/dist/client/assets/{TerminalPanel-C6VJtwdn.js → TerminalPanel-BKfWmj6W.js} +1 -1
  4. package/dist/client/assets/_basePickBy-uVqvgsJc.js +1 -0
  5. package/dist/client/assets/{_baseUniq-K3DMbXu0.js → _baseUniq-7i7L1uNE.js} +1 -1
  6. package/dist/client/assets/{arc-BkgOQsVG.js → arc-DiYEQGs3.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-CD44Dllc.js → architectureDiagram-VXUJARFQ-C5z8L1iK.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-BKiU7fF0.js → blockDiagram-VD42YOAC-CXQSSz3O.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-CYISxlyF.js → c4Diagram-YG6GDRKO-DplRXCR2.js} +1 -1
  10. package/dist/client/assets/channel-BnMJuhcI.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-Bphc00nU.js → chunk-4BX2VUAB-B4Mk_d7A.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-CfN6hb2c.js → chunk-55IACEB6-B0hf8Eje.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-DltWViHS.js → chunk-B4BG7PRW-DlN9tUxh.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-51JXB972.js → chunk-DI55MBZ5-a11zyhq4.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-CynepQnx.js → chunk-FMBD7UC4-aGGVV1yn.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-B45qeM-p.js → chunk-QN33PNHL-Dit4S-yJ.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-1ObdmeeM.js → chunk-QZHKN3VN-L-h1VSi0.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-CWtn_mgw.js → chunk-TZMSLE5B-DpK-hWaC.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-D89oCSXI.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-D89oCSXI.js +1 -0
  21. package/dist/client/assets/clone-X7FA7kE2.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-B4IAbafd.js → cose-bilkent-S5V4N54A-CzoIK-3W.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-BGoRZDH9.js → dagre-6UL2VRFP-BhfXeb7k.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-DIkN7d-V.js → diagram-PSM6KHXK-BwFVwR1b.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-B-hPXzou.js → diagram-QEK2KX5R-BO-CEopy.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-BlUeis_2.js → diagram-S2PKOQOG-BxiH83lN.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-DZUjamhk.js → erDiagram-Q2GNP2WA-kUd-gmjz.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-oIHer-h-.js → flowDiagram-NV44I4VS-CHbLqCKB.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-D8LfLthv.js → ganttDiagram-JELNMOA3-B7gBcAFl.js} +4 -4
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-BgFUKaMK.js → gitGraphDiagram-V2S2FVAM-gca_jqKQ.js} +1 -1
  31. package/dist/client/assets/{graph-r-V7AF54.js → graph-CSi_akmB.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-BHkeGyHR.js → highlighted-body-B3W2YXNL-C2a-lsk8.js} +1 -1
  33. package/dist/client/assets/{index-fbwZk1fH.js → index-2F-slvqo.js} +1 -1
  34. package/dist/client/assets/{index-BDQWeqNk.js → index-5X7JRvnK.js} +1 -1
  35. package/dist/client/assets/{index-u_2V_RF4.js → index-B0ZcEU4c.js} +1 -1
  36. package/dist/client/assets/{index-CYvgC-U1.js → index-BJP1qdPz.js} +1 -1
  37. package/dist/client/assets/{index-W1CPMGYX.js → index-BPf6S9f1.js} +1 -1
  38. package/dist/client/assets/{index-BiUUT09K.js → index-C-3PAt1d.js} +1 -1
  39. package/dist/client/assets/{index-DQixQE5Y.js → index-C-6dsPog.js} +1 -1
  40. package/dist/client/assets/{index-DLFTwdhm.js → index-C4PISrIW.js} +1 -1
  41. package/dist/client/assets/{index-foc9a7eE.js → index-C4ee_PQ0.js} +1 -1
  42. package/dist/client/assets/{index-BvWkKnfY.js → index-CA1NuCd_.js} +1 -1
  43. package/dist/client/assets/{index-NMjGSNmU.js → index-CNQHGhCu.js} +1 -1
  44. package/dist/client/assets/{index-CXHZbHRT.js → index-CiKTedrx.js} +1 -1
  45. package/dist/client/assets/{index-CNerXIiJ.js → index-DNrK0iIn.js} +1 -1
  46. package/dist/client/assets/{index-DhTLiwux.js → index-DfHcm4JM.js} +1 -1
  47. package/dist/client/assets/{index-CdJ3WH3f.js → index-T_1b5WRg.js} +1 -1
  48. package/dist/client/assets/{index-CFEu-Cf9.js → index-oolizINO.js} +1 -1
  49. package/dist/client/assets/{index-y0IIofTa.js → index-spwNnd85.js} +1 -1
  50. package/dist/client/assets/{index-DAMgQMyn.js → index-udv0M-ix.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-xB0m1ffH.js → infoDiagram-HS3SLOUP-BK3MmhkJ.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-E4OGYZo3.js → journeyDiagram-XKPGCS4Q-DIY8FE8Z.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-DDOW42i6.js → kanban-definition-3W4ZIXB7-Cd_JJ8FN.js} +1 -1
  54. package/dist/client/assets/{layout-BU7n9QQq.js → layout-Bhb5FQCr.js} +1 -1
  55. package/dist/client/assets/{linear-CFFUeqRn.js → linear-Cmk2RyH_.js} +1 -1
  56. package/dist/client/assets/{main-onb8WwfN.js → main-BlRcPsmZ.js} +231 -235
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-BQlhTP7t.js → mindmap-definition-VGOIOE7T-B-WhBVeY.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-khlEdX5z.js → pieDiagram-ADFJNKIX-CYoHsaM9.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-D7D_64Ur.js → quadrantDiagram-AYHSOK5B-DHBoMUCQ.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-Dd-Qxkau.js → requirementDiagram-UZGBJVZJ-DjS5RONh.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BxF-L0mm.js → sankeyDiagram-TZEHDZUN-DmhEbBY-.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-UH13bSlf.js → sequenceDiagram-WL72ISMW-CzqbRfb_.js} +1 -1
  63. package/dist/client/assets/{square-terminal-BgnPkQhG.js → square-terminal-CNHJa6OY.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-DJXW-Mwx.js → stateDiagram-FKZM4ZOC-CafvdTb3.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BkKHK-CQ.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-DoLvii7e.js → timeline-definition-IT6M3QCI-CNKMKDwq.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-C6cooeby.js → treemap-GDKQZRPO-DCEPrZh7.js} +1 -1
  68. package/dist/client/assets/{useSessionListContext-DJKT08Su.js → useSessionListContext-xer-Wcmf.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId-BZyIo0Fq.js → workspace._workspaceId-CgG1n_1x.js} +1 -1
  70. package/dist/client/assets/{workspace._workspaceId.changes-WzxDrDHA.js → workspace._workspaceId.changes-BKX7lUhX.js} +1 -1
  71. package/dist/client/assets/workspace._workspaceId.code-BcnxRdZi.js +1 -0
  72. package/dist/client/assets/{workspace._workspaceId.code._-DjAaAaSY.js → workspace._workspaceId.code._-BbOt6tOD.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.code.index-D0PytT4F.js → workspace._workspaceId.code.index-DC2535x-.js} +1 -1
  74. package/dist/client/assets/workspace._workspaceId.index-CNjq1nDf.js +1 -0
  75. package/dist/client/assets/{workspace._workspaceId.terminal-BeG77FAq.js → workspace._workspaceId.terminal-DhYn8I5t.js} +2 -2
  76. package/dist/client/assets/{xychartDiagram-PRI3JC2R-DjUMVf0W.js → xychartDiagram-PRI3JC2R-Cr18I3A3.js} +1 -1
  77. package/dist/openapi.json +17 -12
  78. package/dist/server/assets/DockviewBrowserContainer-Bm7ARaqd.js +1934 -0
  79. package/dist/server/assets/{DockviewTerminalContainer-Dl-H-7q5.js → DockviewTerminalContainer-BbMZgBJ8.js} +32 -3
  80. package/dist/server/assets/{TerminalPanel-Nx4CmvlW.js → TerminalPanel-BmhYCf33.js} +1 -1
  81. package/dist/server/assets/{_basePickBy-BG2OhlJc.js → _basePickBy-C7CNOUDi.js} +2 -2
  82. package/dist/server/assets/{_baseUniq-DB6mvOCI.js → _baseUniq-DeF47vVO.js} +1 -1
  83. package/dist/server/assets/{_tanstack-start-manifest_v-2XlZMknZ.js → _tanstack-start-manifest_v-BNCQ-izx.js} +1 -1
  84. package/dist/server/assets/{arc-DaVwrLrM.js → arc-P5FY7IYH.js} +1 -1
  85. package/dist/server/assets/{architecture-7HQA4BMR-DIi4TM4E.js → architecture-7HQA4BMR-LvprLHYS.js} +6 -6
  86. package/dist/server/assets/{architectureDiagram-VXUJARFQ-DBRmPh1t.js → architectureDiagram-VXUJARFQ-Br4iiUzH.js} +6 -6
  87. package/dist/server/assets/{blockDiagram-VD42YOAC-CFdPLnD-.js → blockDiagram-VD42YOAC-BahODDhX.js} +6 -6
  88. package/dist/server/assets/{c4Diagram-YG6GDRKO-BJi6gbIt.js → c4Diagram-YG6GDRKO-CQcZX6cr.js} +2 -2
  89. package/dist/server/assets/{channel-DkntTxx0.js → channel-BmAB_ZKU.js} +1 -1
  90. package/dist/server/assets/{chunk-4BX2VUAB-D2FiW3aP.js → chunk-4BX2VUAB-YUvszr4w.js} +1 -1
  91. package/dist/server/assets/{chunk-55IACEB6-jZmh1Z5I.js → chunk-55IACEB6-BUgBPiJd.js} +1 -1
  92. package/dist/server/assets/{chunk-B4BG7PRW-CNZgnxgA.js → chunk-B4BG7PRW-BxuWeZlV.js} +4 -4
  93. package/dist/server/assets/{chunk-DI55MBZ5-q0pODS0a.js → chunk-DI55MBZ5-DuGkdvte.js} +3 -3
  94. package/dist/server/assets/{chunk-FMBD7UC4-C96aN_Us.js → chunk-FMBD7UC4-qY-BVG34.js} +1 -1
  95. package/dist/server/assets/{chunk-QN33PNHL-Dam5gy0m.js → chunk-QN33PNHL-BM_oi8-e.js} +1 -1
  96. package/dist/server/assets/{chunk-QZHKN3VN-CXCmBbbu.js → chunk-QZHKN3VN-BL6_-at8.js} +1 -1
  97. package/dist/server/assets/{chunk-TZMSLE5B-CbK3gIHb.js → chunk-TZMSLE5B-38NhX5at.js} +1 -1
  98. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-BHB2vhDs.js → classDiagram-2ON5EDUG-CwIsZ53p.js} +5 -5
  99. package/dist/server/assets/{classDiagram-2ON5EDUG-BHB2vhDs.js → classDiagram-v2-WZHVMYZB-CwIsZ53p.js} +5 -5
  100. package/dist/server/assets/{clone-CN5lfg2Z.js → clone-BXHuGM8i.js} +1 -1
  101. package/dist/server/assets/{cose-bilkent-S5V4N54A-Bq-O80sc.js → cose-bilkent-S5V4N54A-D1CdgGvI.js} +1 -1
  102. package/dist/server/assets/{dagre-6UL2VRFP-U80sNC8f.js → dagre-6UL2VRFP-UMvdMLG3.js} +6 -6
  103. package/dist/server/assets/{diagram-PSM6KHXK-5ksUDb2Z.js → diagram-PSM6KHXK-DtOD93m7.js} +7 -7
  104. package/dist/server/assets/{diagram-QEK2KX5R-COmUOoRU.js → diagram-QEK2KX5R-DViyYq-y.js} +6 -6
  105. package/dist/server/assets/{diagram-S2PKOQOG-BOTznhFu.js → diagram-S2PKOQOG-C42mRVEn.js} +6 -6
  106. package/dist/server/assets/{erDiagram-Q2GNP2WA-CZOlCzBi.js → erDiagram-Q2GNP2WA-D14z9IvB.js} +4 -4
  107. package/dist/server/assets/{flowDiagram-NV44I4VS-ObYcdqyZ.js → flowDiagram-NV44I4VS-BYBNOZwM.js} +5 -5
  108. package/dist/server/assets/{ganttDiagram-JELNMOA3-6c9A3Tfv.js → ganttDiagram-JELNMOA3-CaG3uoK-.js} +2 -2
  109. package/dist/server/assets/{gitGraph-G5XIXVHT-Q_zXZbiJ.js → gitGraph-G5XIXVHT-Dsx3dV0R.js} +6 -6
  110. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-C-GqaejI.js → gitGraphDiagram-V2S2FVAM-CrSfx7b3.js} +7 -7
  111. package/dist/server/assets/{graph-CGXsNa6T.js → graph-gBFInK6H.js} +2 -2
  112. package/dist/server/assets/{highlighted-body-B3W2YXNL-CjyCfwez.js → highlighted-body-B3W2YXNL-DjTWk17l.js} +1 -1
  113. package/dist/server/assets/{index-BaYLnq50.js → index-2gWBdIrR.js} +2 -2
  114. package/dist/server/assets/{index-CAfRymUE.js → index-3wtbr7va.js} +3 -3
  115. package/dist/server/assets/{index-C0kihLnk.js → index-5N2Gh0ba.js} +2 -2
  116. package/dist/server/assets/{index-DIdSfU9-.js → index-6Zof9vm8.js} +1 -1
  117. package/dist/server/assets/{index-DIahp6rS.js → index-B84Urg23.js} +2 -2
  118. package/dist/server/assets/{index-D_0vKELK.js → index-Bd5jTryJ.js} +2 -2
  119. package/dist/server/assets/{index-BBvVnzgd.js → index-Bs6a6-xI.js} +5 -5
  120. package/dist/server/assets/{index-DnWmaxai.js → index-Bw42FDwO.js} +2 -2
  121. package/dist/server/assets/{index-DKtCHZcS.js → index-C245EJn1.js} +2 -2
  122. package/dist/server/assets/{index-C-7vS9m8.js → index-C3N_Nx6h.js} +2 -2
  123. package/dist/server/assets/{index-DU_XVqOC.js → index-CD97pPmc.js} +1 -1
  124. package/dist/server/assets/{index-BfyUYDbk.js → index-CwQ5qWPC.js} +5 -5
  125. package/dist/server/assets/{index-C71uG8NB.js → index-DXgP0Lsu.js} +2 -2
  126. package/dist/server/assets/{index-CxSyZwen.js → index-DZZ6NiTf.js} +3 -3
  127. package/dist/server/assets/{index-DejplVdQ.js → index-DsGPaWHg.js} +2 -2
  128. package/dist/server/assets/{index-73YfcfUk.js → index-Dv-16VYI.js} +2 -2
  129. package/dist/server/assets/{index-B3U9PRLr.js → index-QxgXX0fb.js} +2 -2
  130. package/dist/server/assets/{index-ukALXr65.js → index-egmIrLx2.js} +4 -4
  131. package/dist/server/assets/{info-VBDWY6EO-BsWgc-Ym.js → info-VBDWY6EO-CueOsYFZ.js} +6 -6
  132. package/dist/server/assets/{infoDiagram-HS3SLOUP-C04udjz-.js → infoDiagram-HS3SLOUP-CeyMzohL.js} +5 -5
  133. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-D3MBfJwF.js → journeyDiagram-XKPGCS4Q-ANqeM_TM.js} +4 -4
  134. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Czuz4I_Q.js → kanban-definition-3W4ZIXB7-B0RkH45q.js} +2 -2
  135. package/dist/server/assets/{layout-D6n2z2ff.js → layout-JjP5jdu6.js} +4 -4
  136. package/dist/server/assets/{linear-BDP9KC1O.js → linear-BJgoq5J4.js} +1 -1
  137. package/dist/server/assets/{mermaid-3ZIDBTTL-oS_2f_Id.js → mermaid-3ZIDBTTL-CFPuUseQ.js} +1 -1
  138. package/dist/server/assets/{mermaid-parser.core-DRwka5gl.js → mermaid-parser.core-CKKZ1VFr.js} +11 -11
  139. package/dist/server/assets/{mindmap-definition-VGOIOE7T-BPhhfr5z.js → mindmap-definition-VGOIOE7T-DlEXF5z8.js} +3 -3
  140. package/dist/server/assets/{packet-DYOGHKS2-XJIQk327.js → packet-DYOGHKS2-CvyxHTRM.js} +6 -6
  141. package/dist/server/assets/{pie-VRWISCQL-BEbH9jgO.js → pie-VRWISCQL-DfpVZlpC.js} +6 -6
  142. package/dist/server/assets/{pieDiagram-ADFJNKIX-oLEFnRFT.js → pieDiagram-ADFJNKIX-CWkrHsNk.js} +7 -7
  143. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-nsrtyikJ.js → quadrantDiagram-AYHSOK5B-C25p2xz7.js} +2 -2
  144. package/dist/server/assets/{radar-ZZBFDIW7-XJaR0sVv.js → radar-ZZBFDIW7-DWqPsDMi.js} +6 -6
  145. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-CHkWIv3O.js → requirementDiagram-UZGBJVZJ-ACRVXQGO.js} +3 -3
  146. package/dist/server/assets/{router-DqGeMR0F.js → router-GhGSLKfP.js} +415 -2225
  147. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-XynupQoy.js → sankeyDiagram-TZEHDZUN-uzNSHudY.js} +1 -1
  148. package/dist/server/assets/{sequenceDiagram-WL72ISMW-Cnkmy2xq.js → sequenceDiagram-WL72ISMW-C_wFtq8b.js} +3 -3
  149. package/dist/server/assets/{square-terminal-D7AxF9nB.js → square-terminal-cghvb5Il.js} +1 -1
  150. package/dist/server/assets/{stateDiagram-FKZM4ZOC-Chk4nsf_.js → stateDiagram-FKZM4ZOC-B9MGwsuS.js} +8 -8
  151. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-DNIM2ODr.js → stateDiagram-v2-4FDKWEC3-CLHd8oUa.js} +4 -4
  152. package/dist/server/assets/{timeline-definition-IT6M3QCI-Fz2nlxYj.js → timeline-definition-IT6M3QCI-CqKot5RT.js} +2 -2
  153. package/dist/server/assets/{treemap-GDKQZRPO-DNxd_7q0.js → treemap-GDKQZRPO-mMRojqRQ.js} +6 -6
  154. package/dist/server/assets/{workspace._workspaceId-KoR0msx0.js → workspace._workspaceId-DwsRTXCg.js} +2 -2
  155. package/dist/server/assets/{workspace._workspaceId.changes-BJoSmFXW.js → workspace._workspaceId.changes-C6vwSbUh.js} +1 -1
  156. package/dist/server/assets/{workspace._workspaceId.code._-D3Ifnqrr.js → workspace._workspaceId.code._-BJdg1-Gs.js} +1 -1
  157. package/dist/server/assets/{workspace._workspaceId.code.index-DZZZQ6sT.js → workspace._workspaceId.code.index-CE_CMD_I.js} +1 -1
  158. package/dist/server/assets/{workspace._workspaceId.index-D1ULJxZJ.js → workspace._workspaceId.index-BPhXMwl8.js} +18 -2
  159. package/dist/server/assets/{workspace._workspaceId.terminal-BaKW7ZGQ.js → workspace._workspaceId.terminal-BdVDaWNH.js} +2 -2
  160. package/dist/server/assets/{xychartDiagram-PRI3JC2R-DtoxEUbW.js → xychartDiagram-PRI3JC2R-j8PckQEj.js} +2 -2
  161. package/dist/server/server.js +2 -2
  162. package/dist/start-server.mjs +211 -61
  163. package/package.json +4 -4
  164. package/dist/client/assets/DockviewTerminalContainer-CfWqm1iB.js +0 -2
  165. package/dist/client/assets/_basePickBy-CIXRHkYC.js +0 -1
  166. package/dist/client/assets/channel-DjN8EGMy.js +0 -1
  167. package/dist/client/assets/classDiagram-2ON5EDUG-C3N3Omm0.js +0 -1
  168. package/dist/client/assets/classDiagram-v2-WZHVMYZB-C3N3Omm0.js +0 -1
  169. package/dist/client/assets/clone-Co6N-TQN.js +0 -1
  170. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BCtCzm2C.js +0 -1
  171. package/dist/client/assets/workspace._workspaceId.code-DGeXE4KO.js +0 -1
  172. package/dist/client/assets/workspace._workspaceId.index-DUzba27e.js +0 -1
@@ -1,5 +1,5 @@
1
1
  var _a, _b, _c;
2
- import { ai as setDiagramTitle, aj as getDiagramTitle, Z as setAccDescription, _ as getAccDescription, a0 as setAccTitle, $ as getAccTitle, a1 as __name, a2 as getConfig2, ap as defaultConfig2, a3 as select, a$ as setupGraphViewbox, ao as clear, ab as common_default } from "./router-DqGeMR0F.js";
2
+ import { ai as setDiagramTitle, aj as getDiagramTitle, Z as setAccDescription, _ as getAccDescription, a0 as setAccTitle, $ as getAccTitle, a1 as __name, a2 as getConfig2, ap as defaultConfig2, a3 as select, a$ as setupGraphViewbox, ao as clear, ab as common_default } from "./router-GhGSLKfP.js";
3
3
  import { o as ordinal } from "./ordinal-CxptdPJm.js";
4
4
  import "../server.js";
5
5
  import "node:async_hooks";
@@ -1,7 +1,7 @@
1
1
  var _a;
2
- import { a as drawBackgroundRect, b as getTextObj, g as getNoteRect, d as drawRect, c as drawEmbeddedImage, e as drawImage } from "./chunk-TZMSLE5B-CbK3gIHb.js";
3
- import { a1 as __name, ae as setConfig2, a2 as getConfig2, a3 as select, a4 as log, a9 as distExports, a5 as configureSvgSize, a6 as assignWithDepth_default, ab as common_default, a0 as setAccTitle, Z as setAccDescription, ai as setDiagramTitle, $ as getAccTitle, _ as getAccDescription, aj as getDiagramTitle, ak as load, al as JSON_SCHEMA, ao as clear, a8 as sanitizeText, ah as utils_default, aR as hasKatex, aS as calculateMathMLDimensions, aT as parseFontSize, aU as ZERO_WIDTH_SPACE, aV as getUrl, aW as renderKatexSanitized, ax as getConfig } from "./router-DqGeMR0F.js";
4
- import { I as ImperativeState } from "./chunk-QZHKN3VN-CXCmBbbu.js";
2
+ import { a as drawBackgroundRect, b as getTextObj, g as getNoteRect, d as drawRect, c as drawEmbeddedImage, e as drawImage } from "./chunk-TZMSLE5B-38NhX5at.js";
3
+ import { a1 as __name, ae as setConfig2, a2 as getConfig2, a3 as select, a4 as log, a9 as distExports, a5 as configureSvgSize, a6 as assignWithDepth_default, ab as common_default, a0 as setAccTitle, Z as setAccDescription, ai as setDiagramTitle, $ as getAccTitle, _ as getAccDescription, aj as getDiagramTitle, ak as load, al as JSON_SCHEMA, ao as clear, a8 as sanitizeText, ah as utils_default, aR as hasKatex, aS as calculateMathMLDimensions, aT as parseFontSize, aU as ZERO_WIDTH_SPACE, aV as getUrl, aW as renderKatexSanitized, ax as getConfig } from "./router-GhGSLKfP.js";
4
+ import { I as ImperativeState } from "./chunk-QZHKN3VN-BL6_-at8.js";
5
5
  import "../server.js";
6
6
  import "node:async_hooks";
7
7
  import "node:stream";
@@ -1,4 +1,4 @@
1
- import { E as createLucideIcon } from "./router-DqGeMR0F.js";
1
+ import { E as createLucideIcon } from "./router-GhGSLKfP.js";
2
2
  const __iconNode = [
3
3
  ["path", { d: "m7 11 2-2-2-2", key: "1lz0vl" }],
4
4
  ["path", { d: "M11 13h4", key: "1p7l4v" }],
@@ -1,9 +1,9 @@
1
- import { s as styles_default, a as stateDiagram_default, S as StateDB } from "./chunk-DI55MBZ5-q0pODS0a.js";
2
- import { a1 as __name, a2 as getConfig2, a3 as select, a4 as log, a5 as configureSvgSize, ab as common_default, aY as line, aZ as curveBasis, aV as getUrl, ah as utils_default } from "./router-DqGeMR0F.js";
3
- import { G as Graph } from "./graph-CGXsNa6T.js";
4
- import { l as layout } from "./layout-D6n2z2ff.js";
5
- import "./chunk-55IACEB6-jZmh1Z5I.js";
6
- import "./chunk-QN33PNHL-Dam5gy0m.js";
1
+ import { s as styles_default, a as stateDiagram_default, S as StateDB } from "./chunk-DI55MBZ5-DuGkdvte.js";
2
+ import { a1 as __name, a2 as getConfig2, a3 as select, a4 as log, a5 as configureSvgSize, ab as common_default, aY as line, aZ as curveBasis, aV as getUrl, ah as utils_default } from "./router-GhGSLKfP.js";
3
+ import { G as Graph } from "./graph-gBFInK6H.js";
4
+ import { l as layout } from "./layout-JjP5jdu6.js";
5
+ import "./chunk-55IACEB6-BUgBPiJd.js";
6
+ import "./chunk-QN33PNHL-BM_oi8-e.js";
7
7
  import "../server.js";
8
8
  import "node:async_hooks";
9
9
  import "node:stream";
@@ -15,8 +15,8 @@ import "node:stream/web";
15
15
  import "node:process";
16
16
  import "node:path";
17
17
  import "node:url";
18
- import "./_baseUniq-DB6mvOCI.js";
19
- import "./_basePickBy-BG2OhlJc.js";
18
+ import "./_baseUniq-DeF47vVO.js";
19
+ import "./_basePickBy-C7CNOUDi.js";
20
20
  var drawStartState = /* @__PURE__ */ __name((g) => g.append("circle").attr("class", "start-state").attr("r", getConfig2().state.sizeUnit).attr("cx", getConfig2().state.padding + getConfig2().state.sizeUnit).attr("cy", getConfig2().state.padding + getConfig2().state.sizeUnit), "drawStartState");
21
21
  var drawDivider = /* @__PURE__ */ __name((g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", getConfig2().state.textHeight).attr("class", "divider").attr("x2", getConfig2().state.textHeight * 2).attr("y1", 0).attr("y2", 0), "drawDivider");
22
22
  var drawSimpleState = /* @__PURE__ */ __name((g, stateDef) => {
@@ -1,7 +1,7 @@
1
- import { s as styles_default, b as stateRenderer_v3_unified_default, a as stateDiagram_default, S as StateDB } from "./chunk-DI55MBZ5-q0pODS0a.js";
2
- import { a1 as __name } from "./router-DqGeMR0F.js";
3
- import "./chunk-55IACEB6-jZmh1Z5I.js";
4
- import "./chunk-QN33PNHL-Dam5gy0m.js";
1
+ import { s as styles_default, b as stateRenderer_v3_unified_default, a as stateDiagram_default, S as StateDB } from "./chunk-DI55MBZ5-DuGkdvte.js";
2
+ import { a1 as __name } from "./router-GhGSLKfP.js";
3
+ import "./chunk-55IACEB6-BUgBPiJd.js";
4
+ import "./chunk-QN33PNHL-BM_oi8-e.js";
5
5
  import "../server.js";
6
6
  import "node:async_hooks";
7
7
  import "node:stream";
@@ -1,5 +1,5 @@
1
- import { a1 as __name, a2 as getConfig2, a4 as log, a3 as select, a$ as setupGraphViewbox, b0 as isDark, b1 as lighten, b2 as darken, at as __export, b3 as commonDb_exports, ao as clear } from "./router-DqGeMR0F.js";
2
- import { d as d3arc } from "./arc-DaVwrLrM.js";
1
+ import { a1 as __name, a2 as getConfig2, a4 as log, a3 as select, a$ as setupGraphViewbox, b0 as isDark, b1 as lighten, b2 as darken, at as __export, b3 as commonDb_exports, ao as clear } from "./router-GhGSLKfP.js";
2
+ import { d as d3arc } from "./arc-P5FY7IYH.js";
3
3
  import "../server.js";
4
4
  import "node:async_hooks";
5
5
  import "node:stream";
@@ -1,6 +1,6 @@
1
- import { h as createTreemapServices } from "./mermaid-parser.core-DRwka5gl.js";
2
- import { T } from "./mermaid-parser.core-DRwka5gl.js";
3
- import "./router-DqGeMR0F.js";
1
+ import { h as createTreemapServices } from "./mermaid-parser.core-CKKZ1VFr.js";
2
+ import { T } from "./mermaid-parser.core-CKKZ1VFr.js";
3
+ import "./router-GhGSLKfP.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-DB6mvOCI.js";
16
- import "./_basePickBy-BG2OhlJc.js";
17
- import "./clone-CN5lfg2Z.js";
15
+ import "./_baseUniq-DeF47vVO.js";
16
+ import "./_basePickBy-C7CNOUDi.js";
17
+ import "./clone-BXHuGM8i.js";
18
18
  import "path";
19
19
  import "os";
20
20
  import "net";
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports, u as useRouterState, O as Outlet } from "../server.js";
2
- import { be as MessageSquare, bf as GitCompare, bg as FolderOpen, bh as Route, u as useIsDesktop, bi as useDashboardStore, i as isDesktop, f as useNavigate, t as trpc, bj as DesktopDragRegion, bk as ArrowLeft, bl as QuickOpenDialog, bm as SearchFilesDialog, bn as useDiffTarget } from "./router-DqGeMR0F.js";
3
- import { S as SquareTerminal } from "./square-terminal-D7AxF9nB.js";
2
+ import { be as MessageSquare, bf as GitCompare, bg as FolderOpen, bh as Route, u as useIsDesktop, bi as useDashboardStore, i as isDesktop, f as useNavigate, t as trpc, bj as DesktopDragRegion, bk as ArrowLeft, bl as QuickOpenDialog, bm as SearchFilesDialog, bn as useDiffTarget } from "./router-GhGSLKfP.js";
3
+ import { S as SquareTerminal } from "./square-terminal-cghvb5Il.js";
4
4
  import { S as SessionListContext, A as AgentSwitcherContext } from "./useSessionListContext-D_vX6E2e.js";
5
5
  import "node:async_hooks";
6
6
  import "node:stream";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../server.js";
2
- import { e as Route, f as useNavigate, g as useDiffStatsContext, h as useFindInFileContext, D as DiffView } from "./router-DqGeMR0F.js";
2
+ import { e as Route, f as useNavigate, g as useDiffStatsContext, h as useFindInFileContext, D as DiffView } from "./router-GhGSLKfP.js";
3
3
  import "node:async_hooks";
4
4
  import "node:stream";
5
5
  import "util";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../server.js";
2
- import { l as Route, f as useNavigate, h as useFindInFileContext, k as CodeBrowserView } from "./router-DqGeMR0F.js";
2
+ import { l as Route, f as useNavigate, h as useFindInFileContext, k as CodeBrowserView } from "./router-GhGSLKfP.js";
3
3
  import "node:async_hooks";
4
4
  import "node:stream";
5
5
  import "util";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../server.js";
2
- import { j as Route, f as useNavigate, h as useFindInFileContext, k as CodeBrowserView } from "./router-DqGeMR0F.js";
2
+ import { j as Route, f as useNavigate, h as useFindInFileContext, k as CodeBrowserView } from "./router-GhGSLKfP.js";
3
3
  import "node:async_hooks";
4
4
  import "node:stream";
5
5
  import "util";
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../server.js";
2
- import { R as Route, u as useIsDesktop, a as Navigate, i as isDesktop, b as useSettingsQuery, t as trpc, c as agentTypeSupportsSessionListing, C as ChatView } from "./router-DqGeMR0F.js";
2
+ import { R as Route, u as useIsDesktop, a as Navigate, i as isDesktop, b as useSettingsQuery, t as trpc, c as agentTypeSupportsSessionListing, C as ChatView } from "./router-GhGSLKfP.js";
3
3
  import { u as useSessionListContext, a as useAgentSwitcherContext } from "./useSessionListContext-D_vX6E2e.js";
4
4
  import "node:async_hooks";
5
5
  import "node:stream";
@@ -35,6 +35,7 @@ function MobileChatContent({
35
35
  const [supportsSessionListing, setSupportsSessionListing] = reactExports.useState(false);
36
36
  const [initialSessionId, setInitialSessionId] = reactExports.useState(void 0);
37
37
  const [sessionQueryDone, setSessionQueryDone] = reactExports.useState(false);
38
+ const [sessionPaneKey, setSessionPaneKey] = reactExports.useState(0);
38
39
  const {
39
40
  showSessionList,
40
41
  setShowSessionList
@@ -88,8 +89,23 @@ function MobileChatContent({
88
89
  cancelled = true;
89
90
  };
90
91
  }, [workspaceId, chatId, chatKey, settings]);
92
+ const onSwitchSession = reactExports.useCallback(async (sessionId) => {
93
+ if (!chatId) return;
94
+ try {
95
+ await trpc.chats.setActiveSession.mutate({
96
+ workspaceId,
97
+ chatId,
98
+ sessionId: sessionId ?? void 0
99
+ });
100
+ } catch (err) {
101
+ console.error("[MobileChatContent] error persisting active session:", err);
102
+ return;
103
+ }
104
+ setInitialSessionId(sessionId);
105
+ setSessionPaneKey((k) => k + 1);
106
+ }, [workspaceId, chatId]);
91
107
  if (!chatId) return null;
92
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChatView, { chatKey, workspaceId, chatId, workspaceName: workspaceId, supportsSessionListing, initialSessionId, sessionQueryDone, showSessionList, onShowSessionListChange: setShowSessionList, onStreamingChange: setTaskRunning, onNewSessionRef: newSessionRef, agentType, codingAgentId, onSwitchAgent: switchAgent }, chatKey) });
108
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChatView, { chatKey, workspaceId, chatId, workspaceName: workspaceId, supportsSessionListing, initialSessionId, sessionQueryDone, showSessionList, onShowSessionListChange: setShowSessionList, onStreamingChange: setTaskRunning, onNewSessionRef: newSessionRef, onSwitchSession, agentType, codingAgentId, onSwitchAgent: switchAgent }, `${chatKey}-${sessionPaneKey}`) });
93
109
  }
94
110
  export {
95
111
  WorkspaceIndex as component
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../server.js";
2
- import { d as Route } from "./router-DqGeMR0F.js";
2
+ import { d as Route } from "./router-GhGSLKfP.js";
3
3
  import "node:async_hooks";
4
4
  import "node:stream";
5
5
  import "util";
@@ -10,7 +10,7 @@ import "node:stream/web";
10
10
  import "node:process";
11
11
  import "node:path";
12
12
  import "node:url";
13
- const DockviewTerminalContainer = reactExports.lazy(() => import("./DockviewTerminalContainer-Dl-H-7q5.js").then((m) => ({
13
+ const DockviewTerminalContainer = reactExports.lazy(() => import("./DockviewTerminalContainer-BbMZgBJ8.js").then((m) => ({
14
14
  default: m.DockviewTerminalContainer
15
15
  })));
16
16
  function WorkspaceTerminal() {
@@ -1,8 +1,8 @@
1
1
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2
- import { Z as setAccDescription, _ as getAccDescription, aj as getDiagramTitle, ai as setDiagramTitle, $ as getAccTitle, a0 as setAccTitle, a1 as __name, a4 as log, az as selectSvgElement, a5 as configureSvgSize, ao as clear, ax as getConfig, a8 as sanitizeText, av as cleanAndMerge, aw as defaultConfig_default, aQ as getThemeVariables3, bY as computeDimensionOfText, aY as line } from "./router-DqGeMR0F.js";
2
+ import { Z as setAccDescription, _ as getAccDescription, aj as getDiagramTitle, ai as setDiagramTitle, $ as getAccTitle, a0 as setAccTitle, a1 as __name, a4 as log, az as selectSvgElement, a5 as configureSvgSize, ao as clear, ax as getConfig, a8 as sanitizeText, av as cleanAndMerge, aw as defaultConfig_default, aQ as getThemeVariables3, bY as computeDimensionOfText, aY as line } from "./router-GhGSLKfP.js";
3
3
  import { i as initRange } from "./init-ZxktEp_H.js";
4
4
  import { o as ordinal } from "./ordinal-CxptdPJm.js";
5
- import { l as linear } from "./linear-BDP9KC1O.js";
5
+ import { l as linear } from "./linear-BJgoq5J4.js";
6
6
  import "../server.js";
7
7
  import "node:async_hooks";
8
8
  import "node:stream";
@@ -19380,7 +19380,7 @@ function getResponse() {
19380
19380
  return event.res;
19381
19381
  }
19382
19382
  async function getStartManifest(matchedRoutes) {
19383
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-2XlZMknZ.js");
19383
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-BNCQ-izx.js");
19384
19384
  const startManifest = tsrStartManifest();
19385
19385
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
19386
19386
  rootRoute.assets = rootRoute.assets || [];
@@ -19956,7 +19956,7 @@ let entriesPromise;
19956
19956
  let baseManifestPromise;
19957
19957
  let cachedFinalManifestPromise;
19958
19958
  async function loadEntries() {
19959
- const routerEntry = await import("./assets/router-DqGeMR0F.js").then((n2) => n2.d8);
19959
+ const routerEntry = await import("./assets/router-GhGSLKfP.js").then((n2) => n2.dp);
19960
19960
  const startEntry = await import("./assets/start-HYkvq4Ni.js");
19961
19961
  return { startEntry, routerEntry };
19962
19962
  }
@@ -118092,6 +118092,19 @@ function getOrCreateDefaultChat(workspaceId) {
118092
118092
 
118093
118093
  // src/lib/queued-message-store.ts
118094
118094
  import { randomUUID } from "node:crypto";
118095
+ function toWireQueuedMessages(messages) {
118096
+ return messages.map((m11) => ({
118097
+ id: m11.id,
118098
+ text: m11.text,
118099
+ ...m11.files && m11.files.length > 0 && {
118100
+ files: m11.files.map((f10) => ({
118101
+ mediaType: f10.mediaType,
118102
+ url: f10.url,
118103
+ ...f10.filename !== void 0 && { filename: f10.filename }
118104
+ }))
118105
+ }
118106
+ }));
118107
+ }
118095
118108
  var QUEUED_KEY = Symbol.for("band.queued-messages");
118096
118109
  var LISTENERS_KEY = Symbol.for("band.queued-messages.listeners");
118097
118110
  var g10 = globalThis;
@@ -118187,7 +118200,7 @@ function clearQueuedMessages(chatId) {
118187
118200
  // src/lib/task-runner.ts
118188
118201
  init_src();
118189
118202
  import { mkdirSync as mkdirSync4, readdirSync as readdirSync6 } from "node:fs";
118190
- import { join as join16 } from "node:path";
118203
+ import { join as join15 } from "node:path";
118191
118204
 
118192
118205
  // src/lib/mime-types.ts
118193
118206
  import { extname } from "node:path";
@@ -118420,38 +118433,6 @@ function rowToRecord(row) {
118420
118433
  };
118421
118434
  }
118422
118435
 
118423
- // src/lib/upload-utils.ts
118424
- import { mkdir, writeFile } from "node:fs/promises";
118425
- import { join as join15 } from "node:path";
118426
- async function saveUploadedFilesDetailed(fileParts) {
118427
- const uploadDir = join15(bandHome(), "uploads");
118428
- await mkdir(uploadDir, { recursive: true });
118429
- const baseTimestamp = Date.now();
118430
- const saved = [];
118431
- for (let i2 = 0; i2 < fileParts.length; i2++) {
118432
- const part = fileParts[i2];
118433
- const dataUrlMatch = part.url.match(/^data:[^;]+;base64,(.+)$/);
118434
- if (!dataUrlMatch) continue;
118435
- const buffer = Buffer.from(dataUrlMatch[1], "base64");
118436
- const filename = part.filename || `file-${baseTimestamp}`;
118437
- const safeOriginal = filename.replace(/[^a-zA-Z0-9._-]/g, "_");
118438
- const storedName = `${baseTimestamp}-${i2}-${safeOriginal}`;
118439
- const filePath = join15(uploadDir, storedName);
118440
- await writeFile(filePath, buffer);
118441
- saved.push({
118442
- path: filePath,
118443
- storedName,
118444
- mediaType: part.mediaType,
118445
- originalName: part.filename
118446
- });
118447
- }
118448
- return saved;
118449
- }
118450
- async function saveUploadedFiles(fileParts) {
118451
- const saved = await saveUploadedFilesDetailed(fileParts);
118452
- return saved.map((f10) => f10.path);
118453
- }
118454
-
118455
118436
  // src/lib/workspace.ts
118456
118437
  function resolveWorkspace(workspaceId) {
118457
118438
  const state2 = loadState();
@@ -118718,7 +118699,7 @@ async function runTask(chatId, task) {
118718
118699
  updateChatStatus(chatId, "running");
118719
118700
  const working = upsertWorkspaceStatus(task.workspaceId, { status: "working" });
118720
118701
  emit({ kind: "update", status: working });
118721
- const sharedDir = join16(bandHome(), "shared", task.workspaceId);
118702
+ const sharedDir = join15(bandHome(), "shared", task.workspaceId);
118722
118703
  mkdirSync4(sharedDir, { recursive: true });
118723
118704
  const INTERACTIVE_TOOLS = /* @__PURE__ */ new Set(["AskUserQuestion", "ExitPlanMode"]);
118724
118705
  let textPartId = "";
@@ -119030,17 +119011,17 @@ async function runTask(chatId, task) {
119030
119011
  let agentPrompt;
119031
119012
  let displayFiles;
119032
119013
  if (queued.files && queued.files.length > 0) {
119033
- const saved = await saveUploadedFilesDetailed(queued.files);
119034
- if (saved.length > 0) {
119035
- const fileList = saved.map((s6) => `- ${s6.path}`).join("\n");
119014
+ const usableFiles = queued.files.filter((f10) => f10.path);
119015
+ if (usableFiles.length > 0) {
119016
+ const fileList = usableFiles.map((f10) => `- ${f10.path}`).join("\n");
119036
119017
  agentPrompt = `I'm sharing these files with you:
119037
119018
  ${fileList}
119038
119019
 
119039
119020
  ${queued.text}`;
119040
- displayFiles = saved.map((s6) => ({
119041
- mediaType: s6.mediaType,
119042
- url: `/api/uploads/${s6.storedName}`,
119043
- filename: s6.originalName
119021
+ displayFiles = usableFiles.map((f10) => ({
119022
+ mediaType: f10.mediaType,
119023
+ url: f10.url,
119024
+ filename: f10.filename
119044
119025
  }));
119045
119026
  }
119046
119027
  }
@@ -119229,7 +119210,7 @@ async function handleChatEvents(req, res, chatId) {
119229
119210
  });
119230
119211
  emit2(writer, {
119231
119212
  type: "queue-updated",
119232
- messages: getQueuedMessages(chatId),
119213
+ messages: toWireQueuedMessages(getQueuedMessages(chatId)),
119233
119214
  eventId: nextSyntheticId--
119234
119215
  });
119235
119216
  if (resolvedSessionId) {
@@ -119270,7 +119251,7 @@ async function handleChatEvents(req, res, chatId) {
119270
119251
  if (qChatId !== chatId) return;
119271
119252
  queue.push({
119272
119253
  type: "queue-updated",
119273
- messages,
119254
+ messages: toWireQueuedMessages(messages),
119274
119255
  eventId: nextSyntheticId--
119275
119256
  });
119276
119257
  notify2?.();
@@ -119532,6 +119513,40 @@ function chunkToChatEvent(chunk, _sessionId) {
119532
119513
 
119533
119514
  // src/api/chat-submit.ts
119534
119515
  init_src();
119516
+
119517
+ // src/lib/upload-utils.ts
119518
+ import { mkdir, writeFile } from "node:fs/promises";
119519
+ import { join as join16 } from "node:path";
119520
+ async function saveUploadedFilesDetailed(fileParts) {
119521
+ const uploadDir = join16(bandHome(), "uploads");
119522
+ await mkdir(uploadDir, { recursive: true });
119523
+ const baseTimestamp = Date.now();
119524
+ const saved = [];
119525
+ for (let i2 = 0; i2 < fileParts.length; i2++) {
119526
+ const part = fileParts[i2];
119527
+ const dataUrlMatch = part.url.match(/^data:[^;]+;base64,(.+)$/);
119528
+ if (!dataUrlMatch) continue;
119529
+ const buffer = Buffer.from(dataUrlMatch[1], "base64");
119530
+ const filename = part.filename || `file-${baseTimestamp}`;
119531
+ const safeOriginal = filename.replace(/[^a-zA-Z0-9._-]/g, "_");
119532
+ const storedName = `${baseTimestamp}-${i2}-${safeOriginal}`;
119533
+ const filePath = join16(uploadDir, storedName);
119534
+ await writeFile(filePath, buffer);
119535
+ saved.push({
119536
+ path: filePath,
119537
+ storedName,
119538
+ mediaType: part.mediaType,
119539
+ originalName: part.filename
119540
+ });
119541
+ }
119542
+ return saved;
119543
+ }
119544
+ async function saveUploadedFiles(fileParts) {
119545
+ const saved = await saveUploadedFilesDetailed(fileParts);
119546
+ return saved.map((f10) => f10.path);
119547
+ }
119548
+
119549
+ // src/api/chat-submit.ts
119535
119550
  var log13 = createLogger("chat-submit");
119536
119551
  function readBody(req) {
119537
119552
  return new Promise((resolve7, reject) => {
@@ -119565,15 +119580,22 @@ async function handleChatSubmit(req, res, chatId) {
119565
119580
  const resumeSessionId = sessionId ?? getChat(chatId)?.activeSessionId;
119566
119581
  let agentPrompt;
119567
119582
  let displayFiles;
119583
+ let savedFiles = [];
119568
119584
  if (files && files.length > 0) {
119569
- const saved = await saveUploadedFilesDetailed(files);
119570
- if (saved.length > 0) {
119571
- const fileList = saved.map((s6) => `- ${s6.path}`).join("\n");
119585
+ savedFiles = await saveUploadedFilesDetailed(files);
119586
+ if (savedFiles.length !== files.length) {
119587
+ log13.warn(
119588
+ { chatId, submitted: files.length, saved: savedFiles.length },
119589
+ "chat-submit: some file uploads were dropped (malformed data URL?)"
119590
+ );
119591
+ }
119592
+ if (savedFiles.length > 0) {
119593
+ const fileList = savedFiles.map((s6) => `- ${s6.path}`).join("\n");
119572
119594
  agentPrompt = `I'm sharing these files with you:
119573
119595
  ${fileList}
119574
119596
 
119575
119597
  ${text3}`;
119576
- displayFiles = saved.map((s6) => ({
119598
+ displayFiles = savedFiles.map((s6) => ({
119577
119599
  mediaType: s6.mediaType,
119578
119600
  url: `/api/uploads/${s6.storedName}`,
119579
119601
  filename: s6.originalName
@@ -119599,7 +119621,14 @@ ${text3}`;
119599
119621
  if (err instanceof TaskConflictError) {
119600
119622
  pushQueuedMessage(chatId, {
119601
119623
  text: text3,
119602
- ...displayFiles && displayFiles.length > 0 && { files: displayFiles }
119624
+ ...savedFiles.length > 0 && {
119625
+ files: savedFiles.map((s6) => ({
119626
+ mediaType: s6.mediaType,
119627
+ url: `/api/uploads/${s6.storedName}`,
119628
+ path: s6.path,
119629
+ filename: s6.originalName
119630
+ }))
119631
+ }
119603
119632
  });
119604
119633
  log13.info({ chatId, workspaceId }, "chat-submit: task busy, message queued");
119605
119634
  sendJson(res, 200, { ok: true, queued: true });
@@ -136826,8 +136855,86 @@ var historyRouter = t2.router({
136826
136855
  var queuedFileSchema = external_exports.object({
136827
136856
  mediaType: external_exports.string(),
136828
136857
  url: external_exports.string(),
136858
+ path: external_exports.string().optional(),
136829
136859
  filename: external_exports.string().optional()
136830
136860
  });
136861
+ function isPathWithinUploadDir(p6) {
136862
+ const uploadDir = join23(bandHome(), "uploads");
136863
+ const normalized = resolve5(p6);
136864
+ if (normalized !== uploadDir && !normalized.startsWith(uploadDir + sep2)) {
136865
+ return false;
136866
+ }
136867
+ try {
136868
+ const canonicalUploadDir = realpathSync5(uploadDir);
136869
+ const canonicalPath = realpathSync5(p6);
136870
+ return canonicalPath === canonicalUploadDir || canonicalPath.startsWith(canonicalUploadDir + sep2);
136871
+ } catch {
136872
+ return true;
136873
+ }
136874
+ }
136875
+ async function resolveQueuedFiles(chatId, files) {
136876
+ if (!files || files.length === 0) return void 0;
136877
+ const resolved = [];
136878
+ const needsSave = [];
136879
+ const needsSaveIdx = [];
136880
+ for (let i2 = 0; i2 < files.length; i2++) {
136881
+ const file = files[i2];
136882
+ const uploadsUrlMatch = file.url.match(/^\/api\/uploads\/(.+)$/);
136883
+ const derivedPath = file.path ?? (uploadsUrlMatch ? join23(bandHome(), "uploads", uploadsUrlMatch[1]) : void 0);
136884
+ if (derivedPath) {
136885
+ if (!isPathWithinUploadDir(derivedPath)) {
136886
+ log28.warn(
136887
+ { chatId, path: derivedPath, filename: file.filename },
136888
+ "queue: dropping file with path outside uploads directory"
136889
+ );
136890
+ continue;
136891
+ }
136892
+ resolved.push({
136893
+ mediaType: file.mediaType,
136894
+ url: file.url,
136895
+ path: derivedPath,
136896
+ ...file.filename !== void 0 && { filename: file.filename }
136897
+ });
136898
+ continue;
136899
+ }
136900
+ if (file.url.startsWith("data:")) {
136901
+ needsSave.push(file);
136902
+ needsSaveIdx.push(resolved.length);
136903
+ resolved.push({
136904
+ mediaType: file.mediaType,
136905
+ url: file.url,
136906
+ path: "",
136907
+ filename: file.filename
136908
+ });
136909
+ continue;
136910
+ }
136911
+ log28.warn(
136912
+ { chatId, url: file.url, filename: file.filename },
136913
+ "queue: dropping file with no path and non-data URL \u2014 cannot recover disk path"
136914
+ );
136915
+ }
136916
+ if (needsSave.length > 0) {
136917
+ const saved = await saveUploadedFilesDetailed(needsSave);
136918
+ if (saved.length !== needsSave.length) {
136919
+ log28.error(
136920
+ { chatId, expected: needsSave.length, got: saved.length },
136921
+ "queue: saveUploadedFilesDetailed returned unexpected count \u2014 dropping data-URL files (cannot map 1:1)"
136922
+ );
136923
+ } else {
136924
+ for (let k4 = 0; k4 < saved.length; k4++) {
136925
+ const target = needsSaveIdx[k4];
136926
+ resolved[target] = {
136927
+ mediaType: saved[k4].mediaType,
136928
+ url: `/api/uploads/${saved[k4].storedName}`,
136929
+ path: saved[k4].path,
136930
+ ...saved[k4].originalName !== void 0 && { filename: saved[k4].originalName }
136931
+ };
136932
+ }
136933
+ }
136934
+ }
136935
+ const finalized = resolved.filter((f10) => f10.path !== "");
136936
+ return finalized.length > 0 ? finalized : void 0;
136937
+ }
136831
136938
  var queueRouter = t2.router({
136832
136939
  push: publicProcedure.input(
136833
136940
  external_exports.object({
@@ -136836,10 +136943,24 @@ var queueRouter = t2.router({
136836
136943
  text: external_exports.string(),
136837
136944
  files: external_exports.array(queuedFileSchema).optional()
136838
136945
  })
136839
- ).mutation(({ input }) => {
136946
+ ).mutation(async ({ input }) => {
136840
136947
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136841
- const message = pushQueuedMessage(chatId, { text: input.text, files: input.files });
136842
- return { ok: true, message, messages: getQueuedMessages(chatId) };
136948
+ let files;
136949
+ try {
136950
+ files = await resolveQueuedFiles(chatId, input.files);
136951
+ } catch (err) {
136952
+ log28.error(
136953
+ { chatId, err: err instanceof Error ? err.message : err },
136954
+ "queue.push: failed to persist file uploads; enqueuing text only"
136955
+ );
136956
+ files = void 0;
136957
+ }
136958
+ const message = pushQueuedMessage(chatId, { text: input.text, files });
136959
+ return {
136960
+ ok: true,
136961
+ message: toWireQueuedMessages([message])[0],
136962
+ messages: toWireQueuedMessages(getQueuedMessages(chatId))
136963
+ };
136843
136964
  }),
136844
136965
  set: publicProcedure.input(
136845
136966
  external_exports.object({
@@ -136853,20 +136974,44 @@ var queueRouter = t2.router({
136853
136974
  })
136854
136975
  )
136855
136976
  })
136856
- ).mutation(({ input }) => {
136977
+ ).mutation(async ({ input }) => {
136857
136978
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136858
- setQueuedMessages(chatId, input.messages);
136859
- return { ok: true, messages: getQueuedMessages(chatId) };
136979
+ const messages = await Promise.all(
136980
+ input.messages.map(async (m11) => {
136981
+ try {
136982
+ return {
136983
+ ...m11.id !== void 0 && { id: m11.id },
136984
+ text: m11.text,
136985
+ files: await resolveQueuedFiles(chatId, m11.files)
136986
+ };
136987
+ } catch (err) {
136988
+ log28.error(
136989
+ { chatId, messageId: m11.id, err: err instanceof Error ? err.message : err },
136990
+ "queue: failed to resolve files for queued message; dropping its files"
136991
+ );
136992
+ return {
136993
+ ...m11.id !== void 0 && { id: m11.id },
136994
+ text: m11.text,
136995
+ files: void 0
136996
+ };
136997
+ }
136998
+ })
136999
+ );
137000
+ setQueuedMessages(chatId, messages);
137001
+ return { ok: true, messages: toWireQueuedMessages(getQueuedMessages(chatId)) };
136860
137002
  }),
136861
137003
  get: publicProcedure.input(external_exports.object({ workspaceId: external_exports.string(), chatId: external_exports.string().optional() })).query(({ input }) => {
136862
137004
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136863
- const messages = getQueuedMessages(chatId);
136864
- return { messages };
137005
+ return { messages: toWireQueuedMessages(getQueuedMessages(chatId)) };
136865
137006
  }),
136866
137007
  remove: publicProcedure.input(external_exports.object({ workspaceId: external_exports.string(), chatId: external_exports.string().optional(), id: external_exports.string() })).mutation(({ input }) => {
136867
137008
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136868
137009
  const removed = removeQueuedMessage(chatId, input.id);
136869
- return { ok: true, removed, messages: getQueuedMessages(chatId) };
137010
+ return {
137011
+ ok: true,
137012
+ removed,
137013
+ messages: toWireQueuedMessages(getQueuedMessages(chatId))
137014
+ };
136870
137015
  }),
136871
137016
  update: publicProcedure.input(
136872
137017
  external_exports.object({
@@ -136878,12 +137023,16 @@ var queueRouter = t2.router({
136878
137023
  ).mutation(({ input }) => {
136879
137024
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136880
137025
  const updated = updateQueuedMessage(chatId, input.id, input.text);
136881
- return { ok: true, updated, messages: getQueuedMessages(chatId) };
137026
+ return {
137027
+ ok: true,
137028
+ updated,
137029
+ messages: toWireQueuedMessages(getQueuedMessages(chatId))
137030
+ };
136882
137031
  }),
136883
137032
  shift: publicProcedure.input(external_exports.object({ workspaceId: external_exports.string(), chatId: external_exports.string().optional() })).mutation(({ input }) => {
136884
137033
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
136885
137034
  const message = shiftQueuedMessage(chatId);
136886
- return { message };
137035
+ return { message: message ? toWireQueuedMessages([message])[0] : null };
136887
137036
  }),
136888
137037
  clear: publicProcedure.input(external_exports.object({ workspaceId: external_exports.string(), chatId: external_exports.string().optional() })).mutation(({ input }) => {
136889
137038
  const chatId = input.chatId ?? getOrCreateDefaultChat(input.workspaceId).id;
@@ -136903,12 +137052,13 @@ var queueRouter = t2.router({
136903
137052
  unsubscribe();
136904
137053
  resolve7?.();
136905
137054
  });
136906
- yield { messages: getQueuedMessages(chatId) };
137055
+ yield { messages: toWireQueuedMessages(getQueuedMessages(chatId)) };
136907
137056
  queue.length = 0;
136908
137057
  try {
136909
137058
  while (!opts.signal?.aborted) {
136910
137059
  while (queue.length > 0) {
136911
- yield queue.shift();
137060
+ const update = queue.shift();
137061
+ yield { messages: toWireQueuedMessages(update.messages) };
136912
137062
  }
136913
137063
  await new Promise((r6) => {
136914
137064
  resolve7 = r6;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@band-app/server",
3
- "version": "0.16.8",
3
+ "version": "0.16.9",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "band-server": "./bin/band-server.mjs"
@@ -114,9 +114,9 @@
114
114
  "ws": "^8.18.0",
115
115
  "zod": "^3.25.67",
116
116
  "zustand": "^5.0.0",
117
- "@band-app/coding-agent": "^0.16.8",
118
- "@band-app/ui": "^0.16.8",
119
- "@band-app/logger": "^0.16.8"
117
+ "@band-app/coding-agent": "^0.16.9",
118
+ "@band-app/ui": "^0.16.9",
119
+ "@band-app/logger": "^0.16.9"
120
120
  },
121
121
  "scripts": {
122
122
  "dev": "NODE_ENV=development tsx watch start-server.ts",