@band-app/server 0.3.0 → 0.3.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 (167) hide show
  1. package/dist/client/assets/DockviewTerminalContainer-7Pkqfotg.js +2 -0
  2. package/dist/client/assets/{TerminalPanel-B_7JSCCc.js → TerminalPanel-DAjuH-1U.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-OQ1l2y4N.js → _basePickBy-B02OZLcK.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-DP68ni3r.js → _baseUniq-DxmC1mRo.js} +1 -1
  5. package/dist/client/assets/{arc-BsOTNMJP.js → arc-BxtlwYEK.js} +1 -1
  6. package/dist/client/assets/{architectureDiagram-VXUJARFQ-5ctkZyKm.js → architectureDiagram-VXUJARFQ-BnYx6bly.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-VD42YOAC-JKAkJdAV.js → blockDiagram-VD42YOAC-HBOCmfSX.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-YG6GDRKO-RuKjDs_5.js → c4Diagram-YG6GDRKO-SWifZ63q.js} +1 -1
  9. package/dist/client/assets/channel-AmzbAQB9.js +1 -0
  10. package/dist/client/assets/{chunk-4BX2VUAB-BhHxyh-d.js → chunk-4BX2VUAB-CHmUyEof.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-CYm2wbN6.js → chunk-55IACEB6-CPjk6PkV.js} +1 -1
  12. package/dist/client/assets/{chunk-B4BG7PRW-C9lN0wb3.js → chunk-B4BG7PRW-wibRuvxs.js} +1 -1
  13. package/dist/client/assets/{chunk-DI55MBZ5-Bt2XM7pP.js → chunk-DI55MBZ5-3Os9hWPG.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-CD7Uflt_.js → chunk-FMBD7UC4-CyyZMRYx.js} +1 -1
  15. package/dist/client/assets/{chunk-QN33PNHL-BU5wcW-Y.js → chunk-QN33PNHL-OjyZvCLX.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-BfxuPp_p.js → chunk-QZHKN3VN-DvKGTNd6.js} +1 -1
  17. package/dist/client/assets/{chunk-TZMSLE5B-BRxuGNcy.js → chunk-TZMSLE5B-CiDjoyCu.js} +1 -1
  18. package/dist/client/assets/classDiagram-2ON5EDUG-B7NSG0Se.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-WZHVMYZB-B7NSG0Se.js +1 -0
  20. package/dist/client/assets/clone-DGVvqALc.js +1 -0
  21. package/dist/client/assets/{cose-bilkent-S5V4N54A-BRSOoelM.js → cose-bilkent-S5V4N54A-Xt9mkXow.js} +1 -1
  22. package/dist/client/assets/{dagre-6UL2VRFP-CqEPGLG_.js → dagre-6UL2VRFP-iKb8-8az.js} +1 -1
  23. package/dist/client/assets/{diagram-PSM6KHXK-CW6lQAph.js → diagram-PSM6KHXK-5EN_OWwE.js} +1 -1
  24. package/dist/client/assets/{diagram-QEK2KX5R-DXpQB09y.js → diagram-QEK2KX5R-Bspa_oIP.js} +1 -1
  25. package/dist/client/assets/{diagram-S2PKOQOG-BuKSc7hj.js → diagram-S2PKOQOG-rMh8HVTX.js} +1 -1
  26. package/dist/client/assets/{erDiagram-Q2GNP2WA-DCOsaIMe.js → erDiagram-Q2GNP2WA-DDIi6KEO.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-NV44I4VS-DcrleJ78.js → flowDiagram-NV44I4VS-keexbyTE.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-JELNMOA3-DvQNO27q.js → ganttDiagram-JELNMOA3-BJDtoWV3.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-DvTlrniW.js → gitGraphDiagram-V2S2FVAM-C3U_yDok.js} +1 -1
  30. package/dist/client/assets/{graph-BVOV61MY.js → graph-CXIustk1.js} +1 -1
  31. package/dist/client/assets/{highlighted-body-B3W2YXNL-s73Py2xy.js → highlighted-body-B3W2YXNL-Wrr4mAYt.js} +1 -1
  32. package/dist/client/assets/{index-DGRRlzO8.js → index--YcOjZeH.js} +1 -1
  33. package/dist/client/assets/{index-xFYSTaUY.js → index-6JEkkDo8.js} +1 -1
  34. package/dist/client/assets/{index-ouQJCO_a.js → index-Aitm1TDm.js} +1 -1
  35. package/dist/client/assets/{index-D3UFDKZm.js → index-BQnMh5Ey.js} +1 -1
  36. package/dist/client/assets/{index-CF9PCIXP.js → index-BW_n511W.js} +1 -1
  37. package/dist/client/assets/{index-V0GcGOe-.js → index-Bc5chL-g.js} +1 -1
  38. package/dist/client/assets/{index-D7QbmAu4.js → index-Br9YzqZk.js} +1 -1
  39. package/dist/client/assets/{index-CK-BTC9O.js → index-C49Jfk-p.js} +1 -1
  40. package/dist/client/assets/{index-DcHmgA8z.js → index-CImHE-vf.js} +1 -1
  41. package/dist/client/assets/{index-DpO1oBiD.js → index-CP6eh1me.js} +1 -1
  42. package/dist/client/assets/{index-0hkPM41a.js → index-DQZeHe3T.js} +1 -1
  43. package/dist/client/assets/{index-D8qAYkE6.js → index-DVb3uzxJ.js} +1 -1
  44. package/dist/client/assets/{index-DzkW40bH.js → index-DbV1dJqS.js} +1 -1
  45. package/dist/client/assets/{index-CNvrx9RT.js → index-Dp56OOnl.js} +1 -1
  46. package/dist/client/assets/{index-DLckpD-5.js → index-DyG7IfDO.js} +1 -1
  47. package/dist/client/assets/{index-DeXx_AuY.js → index-MvOIOMkW.js} +1 -1
  48. package/dist/client/assets/{index-BSkZi14t.js → index-XciBSftr.js} +1 -1
  49. package/dist/client/assets/{index-LSBeIErX.js → index-oZQsTqMq.js} +1 -1
  50. package/dist/client/assets/{infoDiagram-HS3SLOUP-BkIrT0lS.js → infoDiagram-HS3SLOUP-Coba2Ecg.js} +1 -1
  51. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-CuAJwUYZ.js → journeyDiagram-XKPGCS4Q-DcRdN5Jw.js} +1 -1
  52. package/dist/client/assets/{kanban-definition-3W4ZIXB7-C5oojjKn.js → kanban-definition-3W4ZIXB7-B4rTq8FU.js} +1 -1
  53. package/dist/client/assets/{layout-VixgcoEh.js → layout-CS8um6L3.js} +1 -1
  54. package/dist/client/assets/{linear-B8GEtbtI.js → linear-BN5Y0XM-.js} +1 -1
  55. package/dist/client/assets/{main-CaSLsHIV.js → main-BIlcXlzs.js} +235 -235
  56. package/dist/client/assets/main-BnrSCdeV.css +1 -0
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-ChF2Jy20.js → mindmap-definition-VGOIOE7T-Ds51PqE9.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-Cs7BVmqM.js → pieDiagram-ADFJNKIX-gYVi9omj.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-V83WZ4fh.js → quadrantDiagram-AYHSOK5B-C5iqQQKZ.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-D2GE0VK5.js → requirementDiagram-UZGBJVZJ-BqKUhE2H.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-C-ahmW9t.js → sankeyDiagram-TZEHDZUN-BkDgrkkQ.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-CeikJo7j.js → sequenceDiagram-WL72ISMW-DOxbfZhn.js} +1 -1
  63. package/dist/client/assets/{stateDiagram-FKZM4ZOC-BxMm9YXu.js → stateDiagram-FKZM4ZOC-B3TrsBb9.js} +1 -1
  64. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-CQVcKuBa.js +1 -0
  65. package/dist/client/assets/{timeline-definition-IT6M3QCI-gFAlmUmY.js → timeline-definition-IT6M3QCI-DG2Hs4KW.js} +1 -1
  66. package/dist/client/assets/{treemap-GDKQZRPO-DKt9bIHO.js → treemap-GDKQZRPO-BgXNPM_M.js} +1 -1
  67. package/dist/client/assets/{useSessionListContext-DeLrvh5j.js → useSessionListContext-C4FLYEE-.js} +1 -1
  68. package/dist/client/assets/{workspace._workspaceId-Dm5LPp7D.js → workspace._workspaceId-B2-qsdVH.js} +1 -1
  69. package/dist/client/assets/{workspace._workspaceId.changes-DixHvPIg.js → workspace._workspaceId.changes-ah5-NQ9M.js} +1 -1
  70. package/dist/client/assets/workspace._workspaceId.code-BUlNqyPU.js +1 -0
  71. package/dist/client/assets/{workspace._workspaceId.code._-DWgmdTsF.js → workspace._workspaceId.code._-DebwiKyc.js} +1 -1
  72. package/dist/client/assets/{workspace._workspaceId.code.index-k3jnNrmM.js → workspace._workspaceId.code.index-BoCEbFIx.js} +1 -1
  73. package/dist/client/assets/{workspace._workspaceId.index-L6dOjOuf.js → workspace._workspaceId.index-sal33uc0.js} +1 -1
  74. package/dist/client/assets/{workspace._workspaceId.terminal-j5zlufNR.js → workspace._workspaceId.terminal-BquerOxc.js} +2 -2
  75. package/dist/client/assets/{xychartDiagram-PRI3JC2R-DCzhNdgu.js → xychartDiagram-PRI3JC2R-C25x1FNe.js} +1 -1
  76. package/dist/server/assets/{DockviewTerminalContainer-0lBzSHAB.js → DockviewTerminalContainer-BJRCcV8V.js} +10 -2
  77. package/dist/server/assets/{TerminalPanel-DlyqXpg4.js → TerminalPanel-C-Tqzsb9.js} +1 -1
  78. package/dist/server/assets/{_basePickBy-Uvw-ZCjq.js → _basePickBy-DnnQYRPA.js} +2 -2
  79. package/dist/server/assets/{_baseUniq-DJi3N8KD.js → _baseUniq-DK15vf9R.js} +1 -1
  80. package/dist/server/assets/{_tanstack-start-manifest_v-CLW7JNBK.js → _tanstack-start-manifest_v-51-y0m60.js} +1 -1
  81. package/dist/server/assets/{arc-B2OUCIV1.js → arc-NNeAZNFP.js} +1 -1
  82. package/dist/server/assets/{architecture-7HQA4BMR-BhS6ObWP.js → architecture-7HQA4BMR-CFBQ6v0L.js} +6 -6
  83. package/dist/server/assets/{architectureDiagram-VXUJARFQ-Zlx9bJA4.js → architectureDiagram-VXUJARFQ-C5DZiZyi.js} +6 -6
  84. package/dist/server/assets/{blockDiagram-VD42YOAC-D4Kk0Ngg.js → blockDiagram-VD42YOAC-L5ieGxFF.js} +6 -6
  85. package/dist/server/assets/{c4Diagram-YG6GDRKO-DyIulYvs.js → c4Diagram-YG6GDRKO-Bv39r0cE.js} +2 -2
  86. package/dist/server/assets/{channel-D5u33HGQ.js → channel-BJm48Wp9.js} +1 -1
  87. package/dist/server/assets/{chunk-4BX2VUAB-xAm1S4cV.js → chunk-4BX2VUAB-DJ-pm5Zg.js} +1 -1
  88. package/dist/server/assets/{chunk-55IACEB6-BKYzWPC-.js → chunk-55IACEB6-B6e_cQv2.js} +1 -1
  89. package/dist/server/assets/{chunk-B4BG7PRW-0GA7TpHM.js → chunk-B4BG7PRW-BuDzYmK0.js} +4 -4
  90. package/dist/server/assets/{chunk-DI55MBZ5-BZgnoUtH.js → chunk-DI55MBZ5-DjAWM8Pq.js} +3 -3
  91. package/dist/server/assets/{chunk-FMBD7UC4-D4-haik2.js → chunk-FMBD7UC4-DYB3IL_G.js} +1 -1
  92. package/dist/server/assets/{chunk-QN33PNHL-cz0i18Kh.js → chunk-QN33PNHL-CehfCXvD.js} +1 -1
  93. package/dist/server/assets/{chunk-QZHKN3VN-B6EetbPS.js → chunk-QZHKN3VN-BmLwAQLo.js} +1 -1
  94. package/dist/server/assets/{chunk-TZMSLE5B-Bs97HrcS.js → chunk-TZMSLE5B-7ME36Awr.js} +1 -1
  95. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-DX-De1xE.js → classDiagram-2ON5EDUG-Bm6tgj68.js} +5 -5
  96. package/dist/server/assets/{classDiagram-2ON5EDUG-DX-De1xE.js → classDiagram-v2-WZHVMYZB-Bm6tgj68.js} +5 -5
  97. package/dist/server/assets/{clone-B8d9SkTy.js → clone-BcVyfejn.js} +1 -1
  98. package/dist/server/assets/{cose-bilkent-S5V4N54A-9mJAWvad.js → cose-bilkent-S5V4N54A-DmleNa4v.js} +1 -1
  99. package/dist/server/assets/{dagre-6UL2VRFP-C1atBmRs.js → dagre-6UL2VRFP-L-yKb3Zq.js} +6 -6
  100. package/dist/server/assets/{diagram-PSM6KHXK-CyGQvN3g.js → diagram-PSM6KHXK-CLQUsOvK.js} +7 -7
  101. package/dist/server/assets/{diagram-QEK2KX5R-DzfTH21h.js → diagram-QEK2KX5R-CPIjUINK.js} +6 -6
  102. package/dist/server/assets/{diagram-S2PKOQOG-Bn4ENm4_.js → diagram-S2PKOQOG-CT98niKC.js} +6 -6
  103. package/dist/server/assets/{erDiagram-Q2GNP2WA-DqzNX--h.js → erDiagram-Q2GNP2WA-B8SLNOhT.js} +4 -4
  104. package/dist/server/assets/{flowDiagram-NV44I4VS-qQuNi_ek.js → flowDiagram-NV44I4VS-CKOlpEYf.js} +5 -5
  105. package/dist/server/assets/{ganttDiagram-JELNMOA3-CvxepebM.js → ganttDiagram-JELNMOA3-Cz_3Y_fm.js} +2 -2
  106. package/dist/server/assets/{gitGraph-G5XIXVHT-BmYVGvm7.js → gitGraph-G5XIXVHT-Bd-Xnyvl.js} +6 -6
  107. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-BIMAii04.js → gitGraphDiagram-V2S2FVAM-LTcGOQh8.js} +7 -7
  108. package/dist/server/assets/{graph-DXLb-QKT.js → graph-NUwJV50a.js} +2 -2
  109. package/dist/server/assets/{highlighted-body-B3W2YXNL-imCkdLOn.js → highlighted-body-B3W2YXNL-uXJZSUGv.js} +1 -1
  110. package/dist/server/assets/{index-RhBuqPPl.js → index-BL6ldRfC.js} +2 -2
  111. package/dist/server/assets/{index-D5lNe_xt.js → index-BR3UKwL5.js} +2 -2
  112. package/dist/server/assets/{index-vnItYDqO.js → index-BfIGXl0c.js} +2 -2
  113. package/dist/server/assets/{index-BR76j4Vk.js → index-BsiXULyc.js} +2 -2
  114. package/dist/server/assets/{index-BA0UwY9Z.js → index-Cc7MEkFb.js} +1 -1
  115. package/dist/server/assets/{index-xMc3ZlRc.js → index-CiwZb3K7.js} +2 -2
  116. package/dist/server/assets/{index-BG9HkusL.js → index-CjogWqmh.js} +5 -5
  117. package/dist/server/assets/{index-cStp1vpB.js → index-D3nc-6Y6.js} +3 -3
  118. package/dist/server/assets/{index-Du735q5O.js → index-DLBp1ZlP.js} +2 -2
  119. package/dist/server/assets/{index-CA8DyWtN.js → index-DTO2Bghw.js} +2 -2
  120. package/dist/server/assets/{index-CnuRAKgr.js → index-DcSGnX9Y.js} +3 -3
  121. package/dist/server/assets/{index-E4GEYitW.js → index-Dpdg8d2x.js} +4 -4
  122. package/dist/server/assets/{index-BZuMEWyk.js → index-GifGhqSy.js} +1 -1
  123. package/dist/server/assets/{index-CS3QeU4e.js → index-TSafpX9w.js} +5 -5
  124. package/dist/server/assets/{index-Cj7do86C.js → index-ehJX-x7u.js} +2 -2
  125. package/dist/server/assets/{index-CQTgGi5V.js → index-kawf-mXU.js} +2 -2
  126. package/dist/server/assets/{index-BOtyo6Nx.js → index-lgqrOY_d.js} +2 -2
  127. package/dist/server/assets/{index-A_IwCrQa.js → index-v2ZoIblX.js} +2 -2
  128. package/dist/server/assets/{info-VBDWY6EO-Dw4W0VYI.js → info-VBDWY6EO-CK3UQKwB.js} +6 -6
  129. package/dist/server/assets/{infoDiagram-HS3SLOUP-C2Qm4J_0.js → infoDiagram-HS3SLOUP-CHCI1AvB.js} +5 -5
  130. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-C0cd_WBg.js → journeyDiagram-XKPGCS4Q-DnaN-6ze.js} +4 -4
  131. package/dist/server/assets/{kanban-definition-3W4ZIXB7-kcejmLgx.js → kanban-definition-3W4ZIXB7-JU-5yrQV.js} +2 -2
  132. package/dist/server/assets/{layout-EA-crFYK.js → layout-CdOTdZJ1.js} +4 -4
  133. package/dist/server/assets/{linear-DWOAXyT_.js → linear-BxoHwVMJ.js} +1 -1
  134. package/dist/server/assets/{mermaid-3ZIDBTTL-B3JY0bnx.js → mermaid-3ZIDBTTL-CKq41YLn.js} +1 -1
  135. package/dist/server/assets/{mermaid-parser.core-CxYB8AxK.js → mermaid-parser.core-DZVkd7yV.js} +11 -11
  136. package/dist/server/assets/{mindmap-definition-VGOIOE7T-C2uLj2ri.js → mindmap-definition-VGOIOE7T-D4mbSp8m.js} +3 -3
  137. package/dist/server/assets/{packet-DYOGHKS2-bCkPivks.js → packet-DYOGHKS2-nhhZIGJC.js} +6 -6
  138. package/dist/server/assets/{pie-VRWISCQL-cbn_jdq6.js → pie-VRWISCQL-kCISsi8U.js} +6 -6
  139. package/dist/server/assets/{pieDiagram-ADFJNKIX-BYnq3CiI.js → pieDiagram-ADFJNKIX-CHCBgglI.js} +7 -7
  140. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-Bg0bur0-.js → quadrantDiagram-AYHSOK5B-D1Es_GIX.js} +2 -2
  141. package/dist/server/assets/{radar-ZZBFDIW7-CjGOJm-y.js → radar-ZZBFDIW7-_TLemglD.js} +6 -6
  142. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-BiHrf5LP.js → requirementDiagram-UZGBJVZJ-CgQ8ccM0.js} +3 -3
  143. package/dist/server/assets/{router-BejKXIrT.js → router-ui6wVh7X.js} +444 -98
  144. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-BLGAaS-t.js → sankeyDiagram-TZEHDZUN-dV-3kXAD.js} +1 -1
  145. package/dist/server/assets/{sequenceDiagram-WL72ISMW-CSRhSSG0.js → sequenceDiagram-WL72ISMW-DSjsmvhJ.js} +3 -3
  146. package/dist/server/assets/{stateDiagram-FKZM4ZOC-B_CCwVLH.js → stateDiagram-FKZM4ZOC-D1P44e7A.js} +8 -8
  147. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-Br6BE9Dl.js → stateDiagram-v2-4FDKWEC3-BUB-g8R5.js} +4 -4
  148. package/dist/server/assets/{timeline-definition-IT6M3QCI-CpqSODIH.js → timeline-definition-IT6M3QCI-o0TWDfVE.js} +2 -2
  149. package/dist/server/assets/{treemap-GDKQZRPO-BqVJj6g2.js → treemap-GDKQZRPO-BnU8dMVn.js} +6 -6
  150. package/dist/server/assets/{workspace._workspaceId-BbEoQ0xz.js → workspace._workspaceId-BKa2ZK9u.js} +1 -1
  151. package/dist/server/assets/{workspace._workspaceId.changes-DRDZGvmq.js → workspace._workspaceId.changes-B8i8BeUK.js} +1 -1
  152. package/dist/server/assets/{workspace._workspaceId.code._-B5vvVD15.js → workspace._workspaceId.code._-4IwwK8EO.js} +1 -1
  153. package/dist/server/assets/{workspace._workspaceId.code.index-BDyHn77d.js → workspace._workspaceId.code.index-BTqIEfGL.js} +1 -1
  154. package/dist/server/assets/{workspace._workspaceId.index-ZhjhoB2w.js → workspace._workspaceId.index-ac3z18YW.js} +1 -1
  155. package/dist/server/assets/{workspace._workspaceId.terminal-Bi68U-9c.js → workspace._workspaceId.terminal-CvQaDekl.js} +2 -2
  156. package/dist/server/assets/{xychartDiagram-PRI3JC2R-AnGllwBT.js → xychartDiagram-PRI3JC2R-_U_JrS6w.js} +2 -2
  157. package/dist/server/server.js +2 -2
  158. package/dist/start-server.mjs +1111 -713
  159. package/package.json +5 -5
  160. package/dist/client/assets/DockviewTerminalContainer-C0Z9VUwT.js +0 -2
  161. package/dist/client/assets/channel-BJ7kvLrw.js +0 -1
  162. package/dist/client/assets/classDiagram-2ON5EDUG-DtIBgqOd.js +0 -1
  163. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DtIBgqOd.js +0 -1
  164. package/dist/client/assets/clone-BC8-cd9B.js +0 -1
  165. package/dist/client/assets/main-DunGnoXJ.css +0 -1
  166. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-CMecyWp7.js +0 -1
  167. package/dist/client/assets/workspace._workspaceId.code-ClgjzVFK.js +0 -1
@@ -40420,53 +40420,53 @@ async function loadLanguage(lang) {
40420
40420
  try {
40421
40421
  switch (lang) {
40422
40422
  case "javascript":
40423
- return import("./index-A_IwCrQa.js").then((m2) => m2.javascript());
40423
+ return import("./index-v2ZoIblX.js").then((m2) => m2.javascript());
40424
40424
  case "jsx":
40425
- return import("./index-A_IwCrQa.js").then((m2) => m2.javascript({ jsx: true }));
40425
+ return import("./index-v2ZoIblX.js").then((m2) => m2.javascript({ jsx: true }));
40426
40426
  case "typescript":
40427
- return import("./index-A_IwCrQa.js").then(
40427
+ return import("./index-v2ZoIblX.js").then(
40428
40428
  (m2) => m2.javascript({ typescript: true })
40429
40429
  );
40430
40430
  case "tsx":
40431
- return import("./index-A_IwCrQa.js").then(
40431
+ return import("./index-v2ZoIblX.js").then(
40432
40432
  (m2) => m2.javascript({ jsx: true, typescript: true })
40433
40433
  );
40434
40434
  case "python":
40435
- return import("./index-Cj7do86C.js").then((m2) => m2.python());
40435
+ return import("./index-ehJX-x7u.js").then((m2) => m2.python());
40436
40436
  case "html":
40437
- return import("./index-E4GEYitW.js").then((m2) => m2.html());
40437
+ return import("./index-Dpdg8d2x.js").then((m2) => m2.html());
40438
40438
  case "css":
40439
- return import("./index-xMc3ZlRc.js").then((m2) => m2.css());
40439
+ return import("./index-CiwZb3K7.js").then((m2) => m2.css());
40440
40440
  case "scss":
40441
40441
  case "sass":
40442
- return import("./index-CnuRAKgr.js").then((m2) => m2.sass());
40442
+ return import("./index-DcSGnX9Y.js").then((m2) => m2.sass());
40443
40443
  case "less":
40444
- return import("./index-cStp1vpB.js").then((m2) => m2.less());
40444
+ return import("./index-D3nc-6Y6.js").then((m2) => m2.less());
40445
40445
  case "json":
40446
40446
  case "jsonc":
40447
- return import("./index-BR76j4Vk.js").then((m2) => m2.json());
40447
+ return import("./index-BsiXULyc.js").then((m2) => m2.json());
40448
40448
  case "markdown":
40449
40449
  case "mdx":
40450
- return import("./index-CS3QeU4e.js").then((m2) => m2.markdown());
40450
+ return import("./index-TSafpX9w.js").then((m2) => m2.markdown());
40451
40451
  case "xml":
40452
- return import("./index-D5lNe_xt.js").then((m2) => m2.xml());
40452
+ return import("./index-BR3UKwL5.js").then((m2) => m2.xml());
40453
40453
  case "yaml":
40454
- return import("./index-CQTgGi5V.js").then((m2) => m2.yaml());
40454
+ return import("./index-kawf-mXU.js").then((m2) => m2.yaml());
40455
40455
  case "sql":
40456
- return import("./index-vnItYDqO.js").then((m2) => m2.sql());
40456
+ return import("./index-BfIGXl0c.js").then((m2) => m2.sql());
40457
40457
  case "rust":
40458
- return import("./index-CA8DyWtN.js").then((m2) => m2.rust());
40458
+ return import("./index-DTO2Bghw.js").then((m2) => m2.rust());
40459
40459
  case "go":
40460
- return import("./index-Du735q5O.js").then((m2) => m2.go());
40460
+ return import("./index-DLBp1ZlP.js").then((m2) => m2.go());
40461
40461
  case "java":
40462
- return import("./index-RhBuqPPl.js").then((m2) => m2.java());
40462
+ return import("./index-BL6ldRfC.js").then((m2) => m2.java());
40463
40463
  case "kotlin":
40464
- return import("./index-RhBuqPPl.js").then((m2) => m2.java());
40464
+ return import("./index-BL6ldRfC.js").then((m2) => m2.java());
40465
40465
  case "c":
40466
40466
  case "cpp":
40467
- return import("./index-BOtyo6Nx.js").then((m2) => m2.cpp());
40467
+ return import("./index-lgqrOY_d.js").then((m2) => m2.cpp());
40468
40468
  case "php":
40469
- return import("./index-BG9HkusL.js").then((m2) => m2.php());
40469
+ return import("./index-CjogWqmh.js").then((m2) => m2.php());
40470
40470
  // Legacy modes via StreamLanguage
40471
40471
  case "bash":
40472
40472
  case "fish":
@@ -46546,6 +46546,44 @@ function useUpdateSettings() {
46546
46546
  }
46547
46547
  });
46548
46548
  }
46549
+ const EXPERIMENTAL_FLAG_KEYS = {
46550
+ contextMeter: "band.experimental.context-meter"
46551
+ };
46552
+ function readFlag(key2) {
46553
+ if (typeof window === "undefined") return false;
46554
+ return window.localStorage.getItem(key2) === "true";
46555
+ }
46556
+ function writeFlag(key2, value) {
46557
+ if (typeof window === "undefined") return;
46558
+ window.localStorage.setItem(key2, value ? "true" : "false");
46559
+ window.dispatchEvent(new CustomEvent("band:experimental-flag-change", { detail: { key: key2 } }));
46560
+ }
46561
+ function useExperimentalFlag(key2) {
46562
+ const [enabled, setEnabled] = reactExports.useState(() => readFlag(key2));
46563
+ reactExports.useEffect(() => {
46564
+ const sync = (e2) => {
46565
+ if (e2 instanceof CustomEvent && e2.detail?.key !== key2) return;
46566
+ setEnabled(readFlag(key2));
46567
+ };
46568
+ window.addEventListener("band:experimental-flag-change", sync);
46569
+ window.addEventListener("storage", sync);
46570
+ return () => {
46571
+ window.removeEventListener("band:experimental-flag-change", sync);
46572
+ window.removeEventListener("storage", sync);
46573
+ };
46574
+ }, [key2]);
46575
+ const set2 = reactExports.useCallback(
46576
+ (value) => {
46577
+ writeFlag(key2, value);
46578
+ setEnabled(value);
46579
+ },
46580
+ [key2]
46581
+ );
46582
+ return [enabled, set2];
46583
+ }
46584
+ function useExperimentalContextMeter() {
46585
+ return useExperimentalFlag(EXPERIMENTAL_FLAG_KEYS.contextMeter);
46586
+ }
46549
46587
  function SettingsRow({
46550
46588
  label,
46551
46589
  description,
@@ -46625,6 +46663,14 @@ const KNOWN_AGENTS = [
46625
46663
  { id: "opencode", type: "opencode", label: "OpenCode", defaultCommand: "opencode" }
46626
46664
  ];
46627
46665
  const MODEL_DEFAULT_SENTINEL = "__band_default__";
46666
+ function formatCtxWindow$1(n2) {
46667
+ if (n2 >= 1e6) {
46668
+ const m2 = n2 / 1e6;
46669
+ return `${Number.isInteger(m2) ? m2.toFixed(0) : m2.toFixed(1)}M`;
46670
+ }
46671
+ if (n2 >= 1e3) return `${Math.round(n2 / 1e3)}k`;
46672
+ return String(n2);
46673
+ }
46628
46674
  function SettingsPage({ open: open2, onOpenChange }) {
46629
46675
  const { settings } = useSettingsQuery();
46630
46676
  const updateSettingsMutation = useUpdateSettings();
@@ -46649,6 +46695,7 @@ function SettingsPage({ open: open2, onOpenChange }) {
46649
46695
  );
46650
46696
  const [selectedTheme, setSelectedTheme] = reactExports.useState(settings.theme ?? "system");
46651
46697
  const [agentModels, setAgentModels] = reactExports.useState({});
46698
+ const [contextMeterEnabled, setContextMeterEnabled] = useExperimentalContextMeter();
46652
46699
  const adapter2 = useAdapter();
46653
46700
  reactExports.useEffect(() => {
46654
46701
  if (!adapter2.listModels) return;
@@ -46977,6 +47024,22 @@ function SettingsPage({ open: open2, onOpenChange }) {
46977
47024
  )
46978
47025
  }
46979
47026
  ),
47027
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
47028
+ SettingsRow,
47029
+ {
47030
+ htmlFor: "agents-context-meter",
47031
+ label: "Context window meter",
47032
+ description: "Show a context-usage donut next to the session-history button in the chat input. Token counting accuracy varies by agent — disable if numbers look wrong.",
47033
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
47034
+ Switch,
47035
+ {
47036
+ id: "agents-context-meter",
47037
+ checked: contextMeterEnabled,
47038
+ onCheckedChange: setContextMeterEnabled
47039
+ }
47040
+ )
47041
+ }
47042
+ ),
46980
47043
  /* @__PURE__ */ jsxRuntimeExports.jsx(Accordion, { type: "multiple", className: "w-full", children: KNOWN_AGENTS.map((known) => {
46981
47044
  const agent = codingAgents.find((a2) => a2.type === known.type);
46982
47045
  const enabled = !!agent;
@@ -47075,7 +47138,13 @@ function SettingsPage({ open: open2, onOpenChange }) {
47075
47138
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-8 text-xs", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Default" }) }),
47076
47139
  /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
47077
47140
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: MODEL_DEFAULT_SENTINEL, children: "Default" }),
47078
- models.map((m2) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: m2.id, children: m2.name }, m2.id))
47141
+ models.map((m2) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: m2.id, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex w-full items-baseline justify-between gap-2", children: [
47142
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: m2.name }),
47143
+ m2.contextWindow !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] uppercase tabular-nums text-muted-foreground", children: [
47144
+ formatCtxWindow$1(m2.contextWindow),
47145
+ " ctx"
47146
+ ] })
47147
+ ] }) }, m2.id))
47079
47148
  ] })
47080
47149
  ]
47081
47150
  }
@@ -47298,7 +47367,7 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47298
47367
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Menu$1, { className: "size-5" })
47299
47368
  }
47300
47369
  ) }) }),
47301
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "More" })
47370
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", children: "More" })
47302
47371
  ] }),
47303
47372
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuContent, { align: "start", children: [
47304
47373
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuItem, { onClick: () => setEditMode((v2) => !v2), children: [
@@ -47370,7 +47439,7 @@ function DashboardShell({ toolbarMenuItems, hideTitleBar }) {
47370
47439
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { className: "size-5" })
47371
47440
  }
47372
47441
  ) }),
47373
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Add project" })
47442
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { side: "bottom", children: "Add project" })
47374
47443
  ] }) })
47375
47444
  ] }),
47376
47445
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -51791,7 +51860,7 @@ function WorkspacePickerDialog({ open: open2, onOpenChange }) {
51791
51860
  workspaceId,
51792
51861
  projectName: project.name,
51793
51862
  branch: worktree.branch,
51794
- agent: statuses[workspaceId]?.agent ?? worktree.agent
51863
+ agent: statuses.get(workspaceId)?.agent
51795
51864
  });
51796
51865
  }
51797
51866
  }
@@ -131842,12 +131911,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
131842
131911
  registerLayoutLoaders([
131843
131912
  {
131844
131913
  name: "dagre",
131845
- loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-C1atBmRs.js"), "loader")
131914
+ loader: /* @__PURE__ */ __name(async () => await import("./dagre-6UL2VRFP-L-yKb3Zq.js"), "loader")
131846
131915
  },
131847
131916
  ...[
131848
131917
  {
131849
131918
  name: "cose-bilkent",
131850
- loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-9mJAWvad.js"), "loader")
131919
+ loader: /* @__PURE__ */ __name(async () => await import("./cose-bilkent-S5V4N54A-DmleNa4v.js"), "loader")
131851
131920
  }
131852
131921
  ]
131853
131922
  ]);
@@ -132286,7 +132355,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
132286
132355
  return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
132287
132356
  }, "detector");
132288
132357
  var loader = /* @__PURE__ */ __name(async () => {
132289
- const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-DyIulYvs.js");
132358
+ const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-Bv39r0cE.js");
132290
132359
  return { id, diagram: diagram2 };
132291
132360
  }, "loader");
132292
132361
  var plugin = {
@@ -132303,7 +132372,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
132303
132372
  return /^\s*graph/.test(txt);
132304
132373
  }, "detector");
132305
132374
  var loader2 = /* @__PURE__ */ __name(async () => {
132306
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-qQuNi_ek.js");
132375
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CKOlpEYf.js");
132307
132376
  return { id: id2, diagram: diagram2 };
132308
132377
  }, "loader");
132309
132378
  var plugin2 = {
@@ -132326,7 +132395,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
132326
132395
  return /^\s*flowchart/.test(txt);
132327
132396
  }, "detector");
132328
132397
  var loader3 = /* @__PURE__ */ __name(async () => {
132329
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-qQuNi_ek.js");
132398
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CKOlpEYf.js");
132330
132399
  return { id: id3, diagram: diagram2 };
132331
132400
  }, "loader");
132332
132401
  var plugin3 = {
@@ -132340,7 +132409,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
132340
132409
  return /^\s*erDiagram/.test(txt);
132341
132410
  }, "detector");
132342
132411
  var loader4 = /* @__PURE__ */ __name(async () => {
132343
- const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-DqzNX--h.js");
132412
+ const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-B8SLNOhT.js");
132344
132413
  return { id: id4, diagram: diagram2 };
132345
132414
  }, "loader");
132346
132415
  var plugin4 = {
@@ -132354,7 +132423,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
132354
132423
  return /^\s*gitGraph/.test(txt);
132355
132424
  }, "detector");
132356
132425
  var loader5 = /* @__PURE__ */ __name(async () => {
132357
- const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-BIMAii04.js");
132426
+ const { diagram: diagram2 } = await import("./gitGraphDiagram-V2S2FVAM-LTcGOQh8.js");
132358
132427
  return { id: id5, diagram: diagram2 };
132359
132428
  }, "loader");
132360
132429
  var plugin5 = {
@@ -132368,7 +132437,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
132368
132437
  return /^\s*gantt/.test(txt);
132369
132438
  }, "detector");
132370
132439
  var loader6 = /* @__PURE__ */ __name(async () => {
132371
- const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-CvxepebM.js");
132440
+ const { diagram: diagram2 } = await import("./ganttDiagram-JELNMOA3-Cz_3Y_fm.js");
132372
132441
  return { id: id6, diagram: diagram2 };
132373
132442
  }, "loader");
132374
132443
  var plugin6 = {
@@ -132382,7 +132451,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
132382
132451
  return /^\s*info/.test(txt);
132383
132452
  }, "detector");
132384
132453
  var loader7 = /* @__PURE__ */ __name(async () => {
132385
- const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-C2Qm4J_0.js");
132454
+ const { diagram: diagram2 } = await import("./infoDiagram-HS3SLOUP-CHCI1AvB.js");
132386
132455
  return { id: id7, diagram: diagram2 };
132387
132456
  }, "loader");
132388
132457
  var info = {
@@ -132395,7 +132464,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
132395
132464
  return /^\s*pie/.test(txt);
132396
132465
  }, "detector");
132397
132466
  var loader8 = /* @__PURE__ */ __name(async () => {
132398
- const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-BYnq3CiI.js");
132467
+ const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-CHCBgglI.js");
132399
132468
  return { id: id8, diagram: diagram2 };
132400
132469
  }, "loader");
132401
132470
  var pie = {
@@ -132408,7 +132477,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
132408
132477
  return /^\s*quadrantChart/.test(txt);
132409
132478
  }, "detector");
132410
132479
  var loader9 = /* @__PURE__ */ __name(async () => {
132411
- const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-Bg0bur0-.js");
132480
+ const { diagram: diagram2 } = await import("./quadrantDiagram-AYHSOK5B-D1Es_GIX.js");
132412
132481
  return { id: id9, diagram: diagram2 };
132413
132482
  }, "loader");
132414
132483
  var plugin7 = {
@@ -132422,7 +132491,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
132422
132491
  return /^\s*xychart(-beta)?/.test(txt);
132423
132492
  }, "detector");
132424
132493
  var loader10 = /* @__PURE__ */ __name(async () => {
132425
- const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-AnGllwBT.js");
132494
+ const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-_U_JrS6w.js");
132426
132495
  return { id: id10, diagram: diagram2 };
132427
132496
  }, "loader");
132428
132497
  var plugin8 = {
@@ -132436,7 +132505,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
132436
132505
  return /^\s*requirement(Diagram)?/.test(txt);
132437
132506
  }, "detector");
132438
132507
  var loader11 = /* @__PURE__ */ __name(async () => {
132439
- const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-BiHrf5LP.js");
132508
+ const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-CgQ8ccM0.js");
132440
132509
  return { id: id11, diagram: diagram2 };
132441
132510
  }, "loader");
132442
132511
  var plugin9 = {
@@ -132450,7 +132519,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
132450
132519
  return /^\s*sequenceDiagram/.test(txt);
132451
132520
  }, "detector");
132452
132521
  var loader12 = /* @__PURE__ */ __name(async () => {
132453
- const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-CSRhSSG0.js");
132522
+ const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-DSjsmvhJ.js");
132454
132523
  return { id: id12, diagram: diagram2 };
132455
132524
  }, "loader");
132456
132525
  var plugin10 = {
@@ -132467,7 +132536,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
132467
132536
  return /^\s*classDiagram/.test(txt);
132468
132537
  }, "detector");
132469
132538
  var loader13 = /* @__PURE__ */ __name(async () => {
132470
- const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-DX-De1xE.js");
132539
+ const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-Bm6tgj68.js");
132471
132540
  return { id: id13, diagram: diagram2 };
132472
132541
  }, "loader");
132473
132542
  var plugin11 = {
@@ -132484,7 +132553,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
132484
132553
  return /^\s*classDiagram-v2/.test(txt);
132485
132554
  }, "detector");
132486
132555
  var loader14 = /* @__PURE__ */ __name(async () => {
132487
- const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-DX-De1xE.js");
132556
+ const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-Bm6tgj68.js");
132488
132557
  return { id: id14, diagram: diagram2 };
132489
132558
  }, "loader");
132490
132559
  var plugin12 = {
@@ -132501,7 +132570,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
132501
132570
  return /^\s*stateDiagram/.test(txt);
132502
132571
  }, "detector");
132503
132572
  var loader15 = /* @__PURE__ */ __name(async () => {
132504
- const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-B_CCwVLH.js");
132573
+ const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-D1P44e7A.js");
132505
132574
  return { id: id15, diagram: diagram2 };
132506
132575
  }, "loader");
132507
132576
  var plugin13 = {
@@ -132521,7 +132590,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
132521
132590
  return false;
132522
132591
  }, "detector");
132523
132592
  var loader16 = /* @__PURE__ */ __name(async () => {
132524
- const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-Br6BE9Dl.js");
132593
+ const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-BUB-g8R5.js");
132525
132594
  return { id: id16, diagram: diagram2 };
132526
132595
  }, "loader");
132527
132596
  var plugin14 = {
@@ -132535,7 +132604,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
132535
132604
  return /^\s*journey/.test(txt);
132536
132605
  }, "detector");
132537
132606
  var loader17 = /* @__PURE__ */ __name(async () => {
132538
- const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-C0cd_WBg.js");
132607
+ const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-DnaN-6ze.js");
132539
132608
  return { id: id17, diagram: diagram2 };
132540
132609
  }, "loader");
132541
132610
  var plugin15 = {
@@ -132602,7 +132671,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
132602
132671
  return false;
132603
132672
  }, "detector");
132604
132673
  var loader18 = /* @__PURE__ */ __name(async () => {
132605
- const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-qQuNi_ek.js");
132674
+ const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-CKOlpEYf.js");
132606
132675
  return { id: id18, diagram: diagram2 };
132607
132676
  }, "loader");
132608
132677
  var plugin16 = {
@@ -132616,7 +132685,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
132616
132685
  return /^\s*timeline/.test(txt);
132617
132686
  }, "detector");
132618
132687
  var loader19 = /* @__PURE__ */ __name(async () => {
132619
- const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-CpqSODIH.js");
132688
+ const { diagram: diagram2 } = await import("./timeline-definition-IT6M3QCI-o0TWDfVE.js");
132620
132689
  return { id: id19, diagram: diagram2 };
132621
132690
  }, "loader");
132622
132691
  var plugin17 = {
@@ -132630,7 +132699,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
132630
132699
  return /^\s*mindmap/.test(txt);
132631
132700
  }, "detector");
132632
132701
  var loader20 = /* @__PURE__ */ __name(async () => {
132633
- const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-C2uLj2ri.js");
132702
+ const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-D4mbSp8m.js");
132634
132703
  return { id: id20, diagram: diagram2 };
132635
132704
  }, "loader");
132636
132705
  var plugin18 = {
@@ -132644,7 +132713,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
132644
132713
  return /^\s*kanban/.test(txt);
132645
132714
  }, "detector");
132646
132715
  var loader21 = /* @__PURE__ */ __name(async () => {
132647
- const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-kcejmLgx.js");
132716
+ const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-JU-5yrQV.js");
132648
132717
  return { id: id21, diagram: diagram2 };
132649
132718
  }, "loader");
132650
132719
  var plugin19 = {
@@ -132658,7 +132727,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
132658
132727
  return /^\s*sankey(-beta)?/.test(txt);
132659
132728
  }, "detector");
132660
132729
  var loader22 = /* @__PURE__ */ __name(async () => {
132661
- const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-BLGAaS-t.js");
132730
+ const { diagram: diagram2 } = await import("./sankeyDiagram-TZEHDZUN-dV-3kXAD.js");
132662
132731
  return { id: id22, diagram: diagram2 };
132663
132732
  }, "loader");
132664
132733
  var plugin20 = {
@@ -132672,7 +132741,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
132672
132741
  return /^\s*packet(-beta)?/.test(txt);
132673
132742
  }, "detector");
132674
132743
  var loader23 = /* @__PURE__ */ __name(async () => {
132675
- const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-Bn4ENm4_.js");
132744
+ const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CT98niKC.js");
132676
132745
  return { id: id23, diagram: diagram2 };
132677
132746
  }, "loader");
132678
132747
  var packet = {
@@ -132685,7 +132754,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
132685
132754
  return /^\s*radar-beta/.test(txt);
132686
132755
  }, "detector");
132687
132756
  var loader24 = /* @__PURE__ */ __name(async () => {
132688
- const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-DzfTH21h.js");
132757
+ const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-CPIjUINK.js");
132689
132758
  return { id: id24, diagram: diagram2 };
132690
132759
  }, "loader");
132691
132760
  var radar = {
@@ -132698,7 +132767,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
132698
132767
  return /^\s*block(-beta)?/.test(txt);
132699
132768
  }, "detector");
132700
132769
  var loader25 = /* @__PURE__ */ __name(async () => {
132701
- const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-D4Kk0Ngg.js");
132770
+ const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-L5ieGxFF.js");
132702
132771
  return { id: id25, diagram: diagram2 };
132703
132772
  }, "loader");
132704
132773
  var plugin21 = {
@@ -132712,7 +132781,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
132712
132781
  return /^\s*architecture/.test(txt);
132713
132782
  }, "detector");
132714
132783
  var loader26 = /* @__PURE__ */ __name(async () => {
132715
- const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-Zlx9bJA4.js");
132784
+ const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-C5DZiZyi.js");
132716
132785
  return { id: id26, diagram: diagram2 };
132717
132786
  }, "loader");
132718
132787
  var architecture = {
@@ -132726,7 +132795,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
132726
132795
  return /^\s*treemap/.test(txt);
132727
132796
  }, "detector");
132728
132797
  var loader27 = /* @__PURE__ */ __name(async () => {
132729
- const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-CyGQvN3g.js");
132798
+ const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-CLQUsOvK.js");
132730
132799
  return { id: id27, diagram: diagram2 };
132731
132800
  }, "loader");
132732
132801
  var treemap = {
@@ -148404,7 +148473,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
148404
148473
  var et2 = ({ className: e2, language: t2, style: o3, isIncomplete: n2, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e2), "data-incomplete": n2 || void 0, "data-language": t2, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o3 }, ...s2 });
148405
148474
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
148406
148475
  var ot2 = ({ language: e2 }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e2, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e2 }) });
148407
- var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-imCkdLOn.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
148476
+ var cn = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-uXJZSUGv.js").then((e2) => ({ default: e2.HighlightedCodeBlockBody }))), rt = ({ code: e2, language: t2, className: o3, children: n2, isIncomplete: s2 = false, ...r2 }) => {
148408
148477
  let i2 = reactExports.useMemo(() => e2.replace(cn, ""), [e2]), c2 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i2.split(`
148409
148478
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i2]);
148410
148479
  return jsxRuntimeExports.jsx(Se.Provider, { value: { code: e2 }, children: jsxRuntimeExports.jsxs(et2, { isIncomplete: s2, language: t2, children: [jsxRuntimeExports.jsx(ot2, { language: t2 }), n2 ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n2 }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe, { className: o3, language: t2, result: c2, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o3, code: i2, language: t2, raw: c2, ...r2 }) })] }) });
@@ -148726,7 +148795,7 @@ var Dt = ({ children: e2, className: t2, onDownload: o3, onError: n2 }) => {
148726
148795
  }, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i2, children: [jsxRuntimeExports.jsx("button", { className: f("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", t2), disabled: c2, onClick: () => r2(!s2), title: "Download table", type: "button", children: e2 != null ? e2 : jsxRuntimeExports.jsx(Z, { size: 14 }) }), s2 ? jsxRuntimeExports.jsxs("div", { className: "absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg", children: [jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("csv"), title: "Download table as CSV", type: "button", children: "CSV" }), jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("markdown"), title: "Download table as Markdown", type: "button", children: "Markdown" })] }) : null] });
148727
148796
  };
148728
148797
  var Vt = ({ children: e2, className: t2, showControls: o3, ...n2 }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o3 ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f("w-full divide-y divide-border", t2), "data-streamdown": "table", ...n2, children: e2 }) })] });
148729
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-B3JY0bnx.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
148798
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CKq41YLn.js").then((e2) => ({ default: e2.Mermaid }))), Kn = /language-([^\s]+)/;
148730
148799
  function ke(e2, t2) {
148731
148800
  if (!(e2 != null && e2.position || t2 != null && t2.position)) return true;
148732
148801
  if (!(e2 != null && e2.position && (t2 != null && t2.position))) return false;
@@ -151105,18 +151174,26 @@ function DockviewBrowserContainer({
151105
151174
  console.error("[DockviewBrowserContainer] fromJSON failed, creating default:", err);
151106
151175
  createDefaultPanel$1(event.api, workspaceId);
151107
151176
  }
151177
+ let dropped = 0;
151108
151178
  if (knownBrowserIds) {
151109
151179
  const orphans = event.api.panels.filter((p3) => !knownBrowserIds.has(p3.id));
151110
151180
  for (const orphan of orphans) {
151111
151181
  event.api.removePanel(orphan);
151182
+ dropped++;
151112
151183
  }
151113
151184
  if (event.api.panels.length === 0) {
151114
151185
  createDefaultPanel$1(event.api, workspaceId);
151186
+ dropped++;
151115
151187
  }
151116
151188
  }
151117
151189
  setTimeout(() => {
151118
151190
  isRestoringRef.current = false;
151119
151191
  }, 0);
151192
+ if (dropped > 0) {
151193
+ persistToServer$1(workspaceId, event.api.toJSON(), {
151194
+ queryClient: queryClientRef.current
151195
+ });
151196
+ }
151120
151197
  } else {
151121
151198
  createDefaultPanel$1(event.api, workspaceId);
151122
151199
  persistToServer$1(workspaceId, event.api.toJSON(), { queryClient: queryClientRef.current });
@@ -160473,12 +160550,14 @@ const PromptInputAttach = ({ className, ...props }) => {
160473
160550
  {
160474
160551
  type: "button",
160475
160552
  className: cn$2(
160476
- "inline-flex size-8 lg:size-7 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
160553
+ // Match the icon-button shell used by SessionHistoryMenu / ModeMenu /
160554
+ // AgentModelMenu in the action row so all affordances line up.
160555
+ "inline-flex shrink-0 items-center justify-center rounded-md px-1.5 py-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
160477
160556
  className
160478
160557
  ),
160479
160558
  onClick: () => fileInputRef.current?.click(),
160480
160559
  ...props,
160481
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Paperclip, { className: "size-5 lg:size-4" })
160560
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Paperclip, { className: "size-4" })
160482
160561
  }
160483
160562
  )
160484
160563
  ] });
@@ -160549,7 +160628,6 @@ const PromptInputSubmit = ({
160549
160628
  className,
160550
160629
  status,
160551
160630
  onStop,
160552
- queueCount,
160553
160631
  ...props
160554
160632
  }) => {
160555
160633
  const { hasContent: hasContent2 } = reactExports.useContext(PromptInputContext);
@@ -160557,15 +160635,11 @@ const PromptInputSubmit = ({
160557
160635
  const isStreaming = status === "streaming";
160558
160636
  const isBusy = isSubmitting || isStreaming;
160559
160637
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
160560
- queueCount != null && queueCount > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "secondary", className: "text-xs tabular-nums", children: [
160561
- /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
160562
- queueCount
160563
- ] }),
160564
160638
  isStreaming && /* @__PURE__ */ jsxRuntimeExports.jsx(
160565
160639
  "button",
160566
160640
  {
160567
160641
  type: "button",
160568
- className: "inline-flex size-8 lg:size-7 shrink-0 items-center justify-center rounded-full bg-foreground text-background transition-colors hover:bg-foreground/80",
160642
+ className: "inline-flex size-8 lg:size-7 shrink-0 items-center justify-center rounded-full bg-secondary text-secondary-foreground transition-colors hover:bg-secondary/80",
160569
160643
  onClick: onStop,
160570
160644
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Square, { className: "size-4 lg:size-3.5 fill-current" })
160571
160645
  }
@@ -161914,6 +161988,8 @@ function ChatView({
161914
161988
  const [initialSessionCleared, setInitialSessionCleared] = reactExports.useState(false);
161915
161989
  const currentSessionId = activeSessionId ?? (initialSessionCleared ? void 0 : initialSessionId);
161916
161990
  const [hasMore, setHasMore] = reactExports.useState(false);
161991
+ const [usage, setUsage] = reactExports.useState(void 0);
161992
+ const [contextMeterEnabled] = useExperimentalContextMeter();
161917
161993
  const [loadingOlder, setLoadingOlder] = reactExports.useState(false);
161918
161994
  const scrollHeightBeforePrependRef = reactExports.useRef(null);
161919
161995
  const sentinelRef = reactExports.useRef(null);
@@ -161982,6 +162058,18 @@ function ChatView({
161982
162058
  const [agentDefaultModel, setAgentDefaultModel] = reactExports.useState();
161983
162059
  const [userModelOverride, setUserModelOverride] = reactExports.useState();
161984
162060
  const selectedModel = userModelOverride ?? agentDefaultModel;
162061
+ const selectedModelInfo = reactExports.useMemo(
162062
+ () => models.find((m2) => m2.id === selectedModel),
162063
+ [models, selectedModel]
162064
+ );
162065
+ reactExports.useEffect(() => {
162066
+ if (!selectedModel) return;
162067
+ setUsage((prev2) => {
162068
+ if (!prev2 || prev2.maxContextTokens === void 0) return prev2;
162069
+ const { maxContextTokens: _drop, ...rest } = prev2;
162070
+ return rest;
162071
+ });
162072
+ }, [selectedModel]);
161985
162073
  reactExports.useEffect(() => {
161986
162074
  const modelsP = trpc.models.listAll.query().then((data) => {
161987
162075
  setAgentGroups(data.agents);
@@ -162055,6 +162143,25 @@ function ChatView({
162055
162143
  const sid = dataPart.data.sessionId;
162056
162144
  sessionIdRef.current = sid;
162057
162145
  onActiveSessionChange?.(sid);
162146
+ } else if (dataPart.type === "data-usage" && dataPart.data != null && typeof dataPart.data === "object") {
162147
+ const data = dataPart.data;
162148
+ if (typeof data.inputTokens === "number" && typeof data.outputTokens === "number") {
162149
+ const next2 = {
162150
+ provider: data.provider,
162151
+ inputTokens: data.inputTokens,
162152
+ outputTokens: data.outputTokens,
162153
+ cacheReadTokens: data.cacheReadTokens,
162154
+ cacheCreationTokens: data.cacheCreationTokens,
162155
+ reasoningOutputTokens: data.reasoningOutputTokens,
162156
+ contextTokens: data.contextTokens,
162157
+ totalProcessedTokens: data.totalProcessedTokens,
162158
+ maxContextTokens: data.maxContextTokens
162159
+ };
162160
+ setUsage((prev2) => {
162161
+ const shouldUseNext = prev2?.totalProcessedTokens !== void 0 && next2.totalProcessedTokens !== void 0 ? next2.totalProcessedTokens >= prev2.totalProcessedTokens : usageContextSize(next2) >= usageContextSize(prev2);
162162
+ return shouldUseNext ? next2 : prev2;
162163
+ });
162164
+ }
162058
162165
  }
162059
162166
  }
162060
162167
  });
@@ -162149,6 +162256,19 @@ function ChatView({
162149
162256
  firstEventIdRef.current = data.firstEventId ?? void 0;
162150
162257
  firstMessageIndexRef.current = data.firstMessageIndex ?? void 0;
162151
162258
  setHasMore(data.hasMore);
162259
+ if (data.lastUsage) {
162260
+ setUsage({
162261
+ provider: data.lastUsage.provider,
162262
+ inputTokens: data.lastUsage.inputTokens,
162263
+ outputTokens: data.lastUsage.outputTokens,
162264
+ cacheReadTokens: data.lastUsage.cacheReadTokens,
162265
+ cacheCreationTokens: data.lastUsage.cacheCreationTokens,
162266
+ reasoningOutputTokens: data.lastUsage.reasoningOutputTokens,
162267
+ contextTokens: data.lastUsage.contextTokens,
162268
+ totalProcessedTokens: data.lastUsage.totalProcessedTokens,
162269
+ maxContextTokens: data.lastUsage.maxContextTokens
162270
+ });
162271
+ }
162152
162272
  } finally {
162153
162273
  setLoadingHistory(false);
162154
162274
  }
@@ -162276,6 +162396,7 @@ function ChatView({
162276
162396
  onActiveSessionChange?.(sessionId);
162277
162397
  setMessages([]);
162278
162398
  setQueuedMessages([]);
162399
+ setUsage(void 0);
162279
162400
  trpc.queue.clear.mutate({ workspaceId, chatId }).catch(() => {
162280
162401
  });
162281
162402
  onShowSessionListChange(false);
@@ -162305,6 +162426,7 @@ function ChatView({
162305
162426
  onActiveSessionChange?.(void 0);
162306
162427
  setMessages([]);
162307
162428
  setQueuedMessages([]);
162429
+ setUsage(void 0);
162308
162430
  trpc.queue.clear.mutate({ workspaceId, chatId }).catch(() => {
162309
162431
  });
162310
162432
  onShowSessionListChange(false);
@@ -162561,6 +162683,17 @@ function ChatView({
162561
162683
  /* @__PURE__ */ jsxRuntimeExports.jsxs(PromptInputActions, { children: [
162562
162684
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5", children: [
162563
162685
  /* @__PURE__ */ jsxRuntimeExports.jsx(PromptInputAttach, {}),
162686
+ supportsSessionListing && /* @__PURE__ */ jsxRuntimeExports.jsx(
162687
+ SessionHistoryMenu,
162688
+ {
162689
+ workspaceId,
162690
+ chatId,
162691
+ activeSessionId: activeSessionId ?? sessionIdRef.current,
162692
+ onSelectSession: handleSelectSession,
162693
+ onNewSession: handleNewSession
162694
+ }
162695
+ ),
162696
+ contextMeterEnabled && /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMeter, { usage, model: selectedModel, modelInfo: selectedModelInfo }),
162564
162697
  (agentGroups.length > 0 || models.length > 0) && /* @__PURE__ */ jsxRuntimeExports.jsx(
162565
162698
  AgentModelMenu,
162566
162699
  {
@@ -162573,26 +162706,9 @@ function ChatView({
162573
162706
  disabled: status !== "ready" && status !== "error"
162574
162707
  }
162575
162708
  ),
162576
- modes.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ModeMenu, { modes, selected: selectedMode, onSelect: handleModeSelect }),
162577
- supportsSessionListing && /* @__PURE__ */ jsxRuntimeExports.jsx(
162578
- SessionHistoryMenu,
162579
- {
162580
- workspaceId,
162581
- chatId,
162582
- activeSessionId: activeSessionId ?? sessionIdRef.current,
162583
- onSelectSession: handleSelectSession,
162584
- onNewSession: handleNewSession
162585
- }
162586
- )
162709
+ modes.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ModeMenu, { modes, selected: selectedMode, onSelect: handleModeSelect })
162587
162710
  ] }),
162588
- /* @__PURE__ */ jsxRuntimeExports.jsx(
162589
- PromptInputSubmit,
162590
- {
162591
- status,
162592
- onStop: handleStop,
162593
- queueCount: queuedMessages.length
162594
- }
162595
- )
162711
+ /* @__PURE__ */ jsxRuntimeExports.jsx(PromptInputSubmit, { status, onStop: handleStop })
162596
162712
  ] })
162597
162713
  ]
162598
162714
  }
@@ -162622,7 +162738,7 @@ function ModeMenu({
162622
162738
  "button",
162623
162739
  {
162624
162740
  type: "button",
162625
- className: "inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162741
+ className: "inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162626
162742
  children: [
162627
162743
  /* @__PURE__ */ jsxRuntimeExports.jsx(ModeIcon, { modeId: current?.id ?? "", className: "size-3" }),
162628
162744
  current?.name ?? "Mode"
@@ -162672,7 +162788,7 @@ function AgentModelMenu({
162672
162788
  type: "button",
162673
162789
  disabled,
162674
162790
  className: cn$2(
162675
- "inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162791
+ "inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162676
162792
  disabled && "opacity-50 cursor-not-allowed"
162677
162793
  ),
162678
162794
  children: [
@@ -162704,7 +162820,7 @@ function AgentModelMenu({
162704
162820
  isCurrentAgent && model.id === selectedModel ? "bg-accent" : ""
162705
162821
  ),
162706
162822
  children: [
162707
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium", children: model.name }),
162823
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ModelLine, { model }),
162708
162824
  model.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground", children: model.description })
162709
162825
  ]
162710
162826
  },
@@ -162731,7 +162847,7 @@ function AgentModelMenu({
162731
162847
  model.id === selectedModel ? "bg-accent" : ""
162732
162848
  ),
162733
162849
  children: [
162734
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium", children: model.name }),
162850
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ModelLine, { model }),
162735
162851
  model.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground", children: model.description })
162736
162852
  ]
162737
162853
  },
@@ -162751,6 +162867,181 @@ function relativeTime$2(ms) {
162751
162867
  const months = Math.floor(days / 30);
162752
162868
  return `${months}mo ago`;
162753
162869
  }
162870
+ const MODEL_CONTEXT_WINDOWS = {
162871
+ // Claude — Opus 4.x ships a 200k default and a separate [1m] long-context
162872
+ // tier. Sonnet 4.6 is 1M GA at standard pricing (the [1m] suffix is a
162873
+ // legacy alias). Haiku 4.5 stays at 200k.
162874
+ "claude-opus-4-7[1m]": 1e6,
162875
+ "claude-opus-4-6[1m]": 1e6,
162876
+ "claude-opus-4-7": 2e5,
162877
+ "claude-opus-4-6": 2e5,
162878
+ "claude-sonnet-4-6[1m]": 1e6,
162879
+ "claude-sonnet-4-6": 1e6,
162880
+ "claude-haiku-4-5": 2e5,
162881
+ // OpenAI — GPT-5 family runs at 400k inside Codex CLI (the Responses API
162882
+ // tier is 1M but Band shells out to the codex binary which caps at 400k).
162883
+ "gpt-5": 4e5,
162884
+ "gpt-4.1": 1e6,
162885
+ "gpt-4o": 128e3,
162886
+ // Gemini 2.5 Pro and Flash are both 1M (~1,048,576).
162887
+ "gemini-2.5-pro": 1e6,
162888
+ "gemini-2.5-flash": 1e6
162889
+ };
162890
+ function getContextWindow(model) {
162891
+ if (!model) return 2e5;
162892
+ if (MODEL_CONTEXT_WINDOWS[model]) return MODEL_CONTEXT_WINDOWS[model];
162893
+ const entries2 = Object.entries(MODEL_CONTEXT_WINDOWS).sort(([a2], [b2]) => b2.length - a2.length);
162894
+ for (const [key2, value] of entries2) {
162895
+ if (model.startsWith(key2)) return value;
162896
+ }
162897
+ return 2e5;
162898
+ }
162899
+ function formatTokens(n2) {
162900
+ if (n2 >= 1e6) return `${(n2 / 1e6).toFixed(1)}M`;
162901
+ if (n2 >= 1e3) return `${(n2 / 1e3).toFixed(n2 >= 1e4 ? 0 : 1)}k`;
162902
+ return String(n2);
162903
+ }
162904
+ function formatCtxWindow(n2) {
162905
+ if (n2 >= 1e6) {
162906
+ const m2 = n2 / 1e6;
162907
+ return `${Number.isInteger(m2) ? m2.toFixed(0) : m2.toFixed(1)}M`;
162908
+ }
162909
+ if (n2 >= 1e3) return `${Math.round(n2 / 1e3)}k`;
162910
+ return String(n2);
162911
+ }
162912
+ function ModelLine({ model }) {
162913
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex w-full items-baseline justify-between gap-2", children: [
162914
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium", children: model.name }),
162915
+ model.contextWindow !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] uppercase tabular-nums text-muted-foreground", children: [
162916
+ formatCtxWindow(model.contextWindow),
162917
+ " ctx"
162918
+ ] })
162919
+ ] });
162920
+ }
162921
+ const DONUT_RADIUS = 9;
162922
+ const DONUT_CIRCUMFERENCE = 2 * Math.PI * DONUT_RADIUS;
162923
+ function ContextMeter({
162924
+ usage,
162925
+ model,
162926
+ modelInfo
162927
+ }) {
162928
+ const contextSize = usage ? usage.contextTokens ?? legacyContextSize(usage) : 0;
162929
+ const window2 = usage?.maxContextTokens ?? modelInfo?.contextWindow ?? getContextWindow(model);
162930
+ const pct = Math.min(100, contextSize / window2 * 100);
162931
+ const pctRounded = Math.round(pct);
162932
+ const danger = pct >= 85;
162933
+ const warn = !danger && pct >= 65;
162934
+ const progressColor = danger ? "stroke-foreground" : warn ? "stroke-muted-foreground" : "stroke-muted-foreground/60";
162935
+ const dashOffset = pct <= 0 ? DONUT_CIRCUMFERENCE : DONUT_CIRCUMFERENCE * (1 - pct / 100);
162936
+ const [open2, setOpen] = reactExports.useState(false);
162937
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(Popover, { open: open2, onOpenChange: setOpen, children: [
162938
+ /* @__PURE__ */ jsxRuntimeExports.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
162939
+ "button",
162940
+ {
162941
+ type: "button",
162942
+ "aria-label": `Context window: ${pctRounded}% of ${formatTokens(window2)}`,
162943
+ className: "inline-flex items-center justify-center rounded-md px-1.5 py-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162944
+ onPointerEnter: (e2) => {
162945
+ if (e2.pointerType === "mouse") setOpen(true);
162946
+ },
162947
+ onPointerLeave: (e2) => {
162948
+ if (e2.pointerType === "mouse") setOpen(false);
162949
+ },
162950
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", className: "size-5 -rotate-90 shrink-0", "aria-hidden": "true", children: [
162951
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
162952
+ "circle",
162953
+ {
162954
+ cx: "12",
162955
+ cy: "12",
162956
+ r: DONUT_RADIUS,
162957
+ fill: "none",
162958
+ className: "stroke-muted-foreground/25",
162959
+ strokeWidth: "3"
162960
+ }
162961
+ ),
162962
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
162963
+ "circle",
162964
+ {
162965
+ cx: "12",
162966
+ cy: "12",
162967
+ r: DONUT_RADIUS,
162968
+ fill: "none",
162969
+ className: cn$2("transition-all", progressColor),
162970
+ strokeWidth: "3",
162971
+ strokeLinecap: "round",
162972
+ strokeDasharray: DONUT_CIRCUMFERENCE,
162973
+ strokeDashoffset: dashOffset
162974
+ }
162975
+ )
162976
+ ] })
162977
+ }
162978
+ ) }),
162979
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
162980
+ PopoverContent,
162981
+ {
162982
+ onPointerEnter: (e2) => {
162983
+ if (e2.pointerType === "mouse") setOpen(true);
162984
+ },
162985
+ onPointerLeave: (e2) => {
162986
+ if (e2.pointerType === "mouse") setOpen(false);
162987
+ },
162988
+ className: "w-auto p-2",
162989
+ side: "top",
162990
+ align: "end",
162991
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-0.5 text-xs", children: usage ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
162992
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
162993
+ "Input: ",
162994
+ usage.inputTokens.toLocaleString()
162995
+ ] }),
162996
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
162997
+ "Output: ",
162998
+ usage.outputTokens.toLocaleString()
162999
+ ] }),
163000
+ usage.cacheReadTokens !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
163001
+ "Cache read: ",
163002
+ usage.cacheReadTokens.toLocaleString()
163003
+ ] }),
163004
+ usage.cacheCreationTokens !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
163005
+ "Cache write: ",
163006
+ usage.cacheCreationTokens.toLocaleString()
163007
+ ] }),
163008
+ usage.reasoningOutputTokens !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
163009
+ "Reasoning output: ",
163010
+ usage.reasoningOutputTokens.toLocaleString()
163011
+ ] }),
163012
+ usage.totalProcessedTokens !== void 0 && usage.totalProcessedTokens > contextSize && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
163013
+ "Total processed: ",
163014
+ usage.totalProcessedTokens.toLocaleString()
163015
+ ] }),
163016
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 border-t pt-1", children: [
163017
+ "Context: ",
163018
+ contextSize.toLocaleString(),
163019
+ " / ",
163020
+ window2.toLocaleString(),
163021
+ " (",
163022
+ pctRounded,
163023
+ "%)"
163024
+ ] })
163025
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
163026
+ "Context window: ",
163027
+ window2.toLocaleString(),
163028
+ " tokens"
163029
+ ] }) })
163030
+ }
163031
+ )
163032
+ ] });
163033
+ }
163034
+ function usageContextSize(usage) {
163035
+ if (!usage) return 0;
163036
+ return usage.contextTokens ?? legacyContextSize(usage);
163037
+ }
163038
+ function legacyContextSize(usage) {
163039
+ const isClaude = usage.provider === "claude" || usage.cacheCreationTokens !== void 0;
163040
+ if (isClaude) {
163041
+ return usage.inputTokens + (usage.cacheReadTokens ?? 0) + (usage.cacheCreationTokens ?? 0) + (usage.reasoningOutputTokens ?? 0);
163042
+ }
163043
+ return usage.inputTokens + (usage.reasoningOutputTokens ?? 0);
163044
+ }
162754
163045
  function SessionHistoryMenu({
162755
163046
  workspaceId,
162756
163047
  chatId,
@@ -162772,8 +163063,8 @@ function SessionHistoryMenu({
162772
163063
  "button",
162773
163064
  {
162774
163065
  type: "button",
162775
- className: "inline-flex items-center justify-center rounded-md px-2 py-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
162776
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" })
163066
+ className: "inline-flex items-center justify-center rounded-md px-1.5 py-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
163067
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-4" })
162777
163068
  }
162778
163069
  ) }) }),
162779
163070
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Session history" })
@@ -163259,6 +163550,7 @@ function DockviewChatContainer({
163259
163550
  visible,
163260
163551
  wsActive
163261
163552
  }) {
163553
+ const adapter2 = useAdapter();
163262
163554
  const queryClient2 = useQueryClient();
163263
163555
  const apiRef = reactExports.useRef(null);
163264
163556
  const isRestoringRef = reactExports.useRef(false);
@@ -163266,8 +163558,14 @@ function DockviewChatContainer({
163266
163558
  const { data: initialData } = useQuery({
163267
163559
  queryKey: chatLayoutKey(workspaceId),
163268
163560
  queryFn: async () => {
163269
- const { tree } = await trpc.chatLayout.get.query({ workspaceId }).catch(() => ({ tree: null }));
163270
- return { layout: tree };
163561
+ const [{ tree }, { chats }] = await Promise.all([
163562
+ trpc.chatLayout.get.query({ workspaceId }).catch(() => ({ tree: null })),
163563
+ trpc.chats.list.query({ workspaceId }).catch(() => ({ chats: [] }))
163564
+ ]);
163565
+ return {
163566
+ layout: tree,
163567
+ chatIds: new Set(chats.map((c2) => c2.id))
163568
+ };
163271
163569
  },
163272
163570
  staleTime: Number.POSITIVE_INFINITY
163273
163571
  // never auto-refetch — we manage persistence ourselves
@@ -163362,6 +163660,9 @@ function DockviewChatContainer({
163362
163660
  if (panel) {
163363
163661
  api.removePanel(panel);
163364
163662
  }
163663
+ trpc.chats.remove.mutate({ chatId }).catch((err) => {
163664
+ console.error("[DockviewChatContainer] failed to remove chat:", err);
163665
+ });
163365
163666
  }, []);
163366
163667
  reactExports.useEffect(() => {
163367
163668
  if (!visible) return;
@@ -163410,14 +163711,42 @@ function DockviewChatContainer({
163410
163711
  window.addEventListener("keydown", handler, true);
163411
163712
  return () => window.removeEventListener("keydown", handler, true);
163412
163713
  }, [visible, closeTab, handleSplit, handleAddTab]);
163714
+ reactExports.useEffect(() => {
163715
+ return adapter2.subscribeStatusEvents((event) => {
163716
+ if (event.workspaceId !== workspaceId) return;
163717
+ const api = apiRef.current;
163718
+ if (!api) return;
163719
+ if (event.kind === "chat-created" && typeof event.chatId === "string") {
163720
+ if (api.getPanel(event.chatId)) return;
163721
+ api.addPanel({
163722
+ id: event.chatId,
163723
+ component: "chatTab",
163724
+ tabComponent: "chatTab",
163725
+ title: "Chat",
163726
+ params: { workspaceId, chatId: event.chatId }
163727
+ });
163728
+ } else if (event.kind === "chat-removed" && typeof event.chatId === "string") {
163729
+ const panel = api.getPanel(event.chatId);
163730
+ if (panel) {
163731
+ api.removePanel(panel);
163732
+ if (api.panels.length === 0) {
163733
+ createDefaultPanel(api, workspaceId);
163734
+ }
163735
+ }
163736
+ }
163737
+ });
163738
+ }, [adapter2, workspaceId]);
163413
163739
  addTabRef.current = { onAdd: handleAddTab, onSplit: handleSplit };
163414
163740
  closeTabRef.current = closeTab;
163415
163741
  const initialLayoutRef = reactExports.useRef(null);
163416
163742
  initialLayoutRef.current = initialData?.layout ?? null;
163743
+ const initialChatIdsRef = reactExports.useRef(null);
163744
+ initialChatIdsRef.current = initialData?.chatIds ?? null;
163417
163745
  const onReady = reactExports.useCallback(
163418
163746
  (event) => {
163419
163747
  apiRef.current = event.api;
163420
163748
  const savedLayout = initialLayoutRef.current;
163749
+ const knownChatIds = initialChatIdsRef.current;
163421
163750
  if (savedLayout && isDockviewLayout(savedLayout)) {
163422
163751
  isRestoringRef.current = true;
163423
163752
  try {
@@ -163426,9 +163755,26 @@ function DockviewChatContainer({
163426
163755
  console.error("[DockviewChatContainer] fromJSON failed, creating default:", err);
163427
163756
  createDefaultPanel(event.api, workspaceId);
163428
163757
  }
163758
+ let dropped = 0;
163759
+ if (knownChatIds) {
163760
+ const orphans = event.api.panels.filter((p3) => !knownChatIds.has(p3.id));
163761
+ for (const orphan of orphans) {
163762
+ event.api.removePanel(orphan);
163763
+ dropped++;
163764
+ }
163765
+ if (event.api.panels.length === 0) {
163766
+ createDefaultPanel(event.api, workspaceId);
163767
+ dropped++;
163768
+ }
163769
+ }
163429
163770
  setTimeout(() => {
163430
163771
  isRestoringRef.current = false;
163431
163772
  }, 0);
163773
+ if (dropped > 0) {
163774
+ persistToServer(workspaceId, event.api.toJSON(), {
163775
+ queryClient: queryClientRef.current
163776
+ });
163777
+ }
163432
163778
  } else {
163433
163779
  createDefaultPanel(event.api, workspaceId);
163434
163780
  persistToServer(workspaceId, event.api.toJSON(), { queryClient: queryClientRef.current });
@@ -163494,7 +163840,7 @@ const PANEL_SHORTCUTS = {
163494
163840
  browser: "⌘B"
163495
163841
  };
163496
163842
  const DockviewTerminalContainer = reactExports.lazy(
163497
- () => import("./DockviewTerminalContainer-0lBzSHAB.js").then((m2) => ({
163843
+ () => import("./DockviewTerminalContainer-BJRCcV8V.js").then((m2) => ({
163498
163844
  default: m2.DockviewTerminalContainer
163499
163845
  }))
163500
163846
  );
@@ -167455,11 +167801,11 @@ function RootLayout() {
167455
167801
  ] })
167456
167802
  ] });
167457
167803
  }
167458
- const $$splitComponentImporter$7 = () => import("./index-BZuMEWyk.js");
167804
+ const $$splitComponentImporter$7 = () => import("./index-GifGhqSy.js");
167459
167805
  const Route$7 = createFileRoute("/")({
167460
167806
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
167461
167807
  });
167462
- const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-BbEoQ0xz.js");
167808
+ const $$splitComponentImporter$6 = () => import("./workspace._workspaceId-BKa2ZK9u.js");
167463
167809
  const Route$6 = createFileRoute("/workspace/$workspaceId")({
167464
167810
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
167465
167811
  });
@@ -167478,11 +167824,11 @@ const FindInFileContext = reactExports.createContext({
167478
167824
  function useFindInFileContext() {
167479
167825
  return reactExports.useContext(FindInFileContext);
167480
167826
  }
167481
- const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-ZhjhoB2w.js");
167827
+ const $$splitComponentImporter$5 = () => import("./workspace._workspaceId.index-ac3z18YW.js");
167482
167828
  const Route$5 = createFileRoute("/workspace/$workspaceId/")({
167483
167829
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
167484
167830
  });
167485
- const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-Bi68U-9c.js");
167831
+ const $$splitComponentImporter$4 = () => import("./workspace._workspaceId.terminal-CvQaDekl.js");
167486
167832
  const Route$4 = createFileRoute("/workspace/$workspaceId/terminal")({
167487
167833
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
167488
167834
  });
@@ -167490,15 +167836,15 @@ const $$splitComponentImporter$3 = () => import("./workspace._workspaceId.code-C
167490
167836
  const Route$3 = createFileRoute("/workspace/$workspaceId/code")({
167491
167837
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
167492
167838
  });
167493
- const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-DRDZGvmq.js");
167839
+ const $$splitComponentImporter$2 = () => import("./workspace._workspaceId.changes-B8i8BeUK.js");
167494
167840
  const Route$2 = createFileRoute("/workspace/$workspaceId/changes")({
167495
167841
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
167496
167842
  });
167497
- const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-BDyHn77d.js");
167843
+ const $$splitComponentImporter$1 = () => import("./workspace._workspaceId.code.index-BTqIEfGL.js");
167498
167844
  const Route$1 = createFileRoute("/workspace/$workspaceId/code/")({
167499
167845
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
167500
167846
  });
167501
- const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-B5vvVD15.js");
167847
+ const $$splitComponentImporter = () => import("./workspace._workspaceId.code._-4IwwK8EO.js");
167502
167848
  const Route2 = createFileRoute("/workspace/$workspaceId/code/$")({
167503
167849
  component: lazyRouteComponent($$splitComponentImporter, "component")
167504
167850
  });