@band-app/server 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/client/assets/{DockviewBrowserContainer-BiS2PXe9.js → DockviewBrowserContainer-CGJxcrlC.js} +2 -2
  2. package/dist/client/assets/DockviewTerminalContainer-Ch1hGjB3.js +2 -0
  3. package/dist/client/assets/{TerminalPanel-CcBKJ24l.js → TerminalPanel-D6316IRS.js} +1 -1
  4. package/dist/client/assets/{_basePickBy-CIajkJdO.js → _basePickBy-CmBV18rc.js} +1 -1
  5. package/dist/client/assets/_baseUniq-U0BTd0Rz.js +1 -0
  6. package/dist/client/assets/{arc-DexZNm0-.js → arc-BsQxyIE1.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-VXUJARFQ-DAFvsZAd.js → architectureDiagram-VXUJARFQ-utzNWMoy.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-VD42YOAC-AWnBKy9Q.js → blockDiagram-VD42YOAC-xxfCrQvu.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-YG6GDRKO-BddbyIic.js → c4Diagram-YG6GDRKO-CYbkaWJ4.js} +1 -1
  10. package/dist/client/assets/channel-CpSzKNMk.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-DnMh7Pc9.js → chunk-4BX2VUAB-DKCxjb37.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-24SitHr9.js → chunk-55IACEB6-B9W9ltjh.js} +1 -1
  13. package/dist/client/assets/{chunk-B4BG7PRW-BOb93Gpn.js → chunk-B4BG7PRW-0MSaUsdv.js} +1 -1
  14. package/dist/client/assets/{chunk-DI55MBZ5-oSbpJBti.js → chunk-DI55MBZ5-K1HZY-B4.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-Dqfg6wVO.js → chunk-FMBD7UC4-DL19-zkO.js} +1 -1
  16. package/dist/client/assets/{chunk-QN33PNHL-C2cIUL6l.js → chunk-QN33PNHL-Bjj5Xo40.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-Ox_MiYok.js → chunk-QZHKN3VN-B7u9UlRD.js} +1 -1
  18. package/dist/client/assets/{chunk-TZMSLE5B-CGaUt5wn.js → chunk-TZMSLE5B-1C4Ii4Su.js} +1 -1
  19. package/dist/client/assets/classDiagram-2ON5EDUG-BgIuIwCk.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-WZHVMYZB-BgIuIwCk.js +1 -0
  21. package/dist/client/assets/clone-BnxcJIG7.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-D_3-w0MJ.js → cose-bilkent-S5V4N54A-PGTI-4nv.js} +1 -1
  23. package/dist/client/assets/{dagre-6UL2VRFP-DTrojOKw.js → dagre-6UL2VRFP-SduuRX7O.js} +1 -1
  24. package/dist/client/assets/{diagram-PSM6KHXK-D3nSuJ59.js → diagram-PSM6KHXK-CBSJaBQx.js} +1 -1
  25. package/dist/client/assets/{diagram-QEK2KX5R-h0Gm6yRs.js → diagram-QEK2KX5R-BtO_0TYR.js} +1 -1
  26. package/dist/client/assets/{diagram-S2PKOQOG-DIOqbA5d.js → diagram-S2PKOQOG-CU-3HUn7.js} +1 -1
  27. package/dist/client/assets/{erDiagram-Q2GNP2WA-BGWtWskF.js → erDiagram-Q2GNP2WA-B7YcBWa7.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-NV44I4VS-BHqUj91h.js → flowDiagram-NV44I4VS-B_exjXhH.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-JELNMOA3-CCA7lEel.js → ganttDiagram-JELNMOA3-K_s2lhZo.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-CXisBbMV.js → gitGraphDiagram-V2S2FVAM-Cy8dWU3T.js} +1 -1
  31. package/dist/client/assets/{graph-C8GKZaWf.js → graph-F7Go3eb_.js} +1 -1
  32. package/dist/client/assets/{highlighted-body-B3W2YXNL-Ckz9HnyE.js → highlighted-body-B3W2YXNL-JIbcl_Gj.js} +1 -1
  33. package/dist/client/assets/{index-DfZlU-44.js → index-2I1ScAnS.js} +1 -1
  34. package/dist/client/assets/{index-DPLAjlSm.js → index-BwLCRFTA.js} +1 -1
  35. package/dist/client/assets/{index-BasWn2BQ.js → index-C8kfQI4r.js} +1 -1
  36. package/dist/client/assets/{index-BROqtYkO.js → index-Cg4Lw3Yz.js} +1 -1
  37. package/dist/client/assets/{index-s1AHxiWE.js → index-Ckir_3bE.js} +1 -1
  38. package/dist/client/assets/{index-CN7sJN1E.js → index-CpaiC9qY.js} +1 -1
  39. package/dist/client/assets/{index-CyfIec3L.js → index-Cy5Bsovp.js} +1 -1
  40. package/dist/client/assets/{index-1qpYuqGB.js → index-CyKK9pLi.js} +1 -1
  41. package/dist/client/assets/{index-CmpISwt5.js → index-D2dWAqXm.js} +1 -1
  42. package/dist/client/assets/{index-B7L6_ylA.js → index-D3_75AIk.js} +1 -1
  43. package/dist/client/assets/{index-D2Sje321.js → index-DKc3v7ID.js} +1 -1
  44. package/dist/client/assets/{index-D5Pn_WYc.js → index-DR5Cdr17.js} +1 -1
  45. package/dist/client/assets/{index-D0m_DHVt.js → index-DtwjNrea.js} +1 -1
  46. package/dist/client/assets/{index-UViDhopU.js → index-O8FbcZ5P.js} +1 -1
  47. package/dist/client/assets/{index-C22P_3Ba.js → index-QMtr_UY_.js} +1 -1
  48. package/dist/client/assets/{index-CNSO_MYp.js → index-T2mcmOLE.js} +1 -1
  49. package/dist/client/assets/{index-TsR4AJCf.js → index-VnMyG1bC.js} +1 -1
  50. package/dist/client/assets/{index-rwBKhhdF.js → index-qr9Za9SW.js} +1 -1
  51. package/dist/client/assets/{infoDiagram-HS3SLOUP-CbFZ5guu.js → infoDiagram-HS3SLOUP-DwTbDgO5.js} +1 -1
  52. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-DgIR2fwH.js → journeyDiagram-XKPGCS4Q-Di8V2Erc.js} +1 -1
  53. package/dist/client/assets/{kanban-definition-3W4ZIXB7-BvaiOaK8.js → kanban-definition-3W4ZIXB7-CsLOWnzV.js} +1 -1
  54. package/dist/client/assets/{layout-BHFL_-2i.js → layout-C3qPiTeF.js} +1 -1
  55. package/dist/client/assets/{main-Dtbkl2jA.js → main-C0_EuI87.js} +208 -208
  56. package/dist/client/assets/{main-DpPgdfV2.css → main-DFLn265W.css} +1 -1
  57. package/dist/client/assets/{mindmap-definition-VGOIOE7T-BXmDj_SN.js → mindmap-definition-VGOIOE7T-CTcR694h.js} +1 -1
  58. package/dist/client/assets/{pieDiagram-ADFJNKIX-DWBhs-q-.js → pieDiagram-ADFJNKIX-B-gdfE-T.js} +1 -1
  59. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-BLczU7TW.js → quadrantDiagram-AYHSOK5B-B0wmCtBi.js} +1 -1
  60. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-lm071pmC.js → requirementDiagram-UZGBJVZJ-B1DgDXmR.js} +1 -1
  61. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-CWgkQuq0.js → sankeyDiagram-TZEHDZUN-B-onab8X.js} +1 -1
  62. package/dist/client/assets/{sequenceDiagram-WL72ISMW-DR0quDCJ.js → sequenceDiagram-WL72ISMW-B8sIiN1d.js} +1 -1
  63. package/dist/client/assets/{square-terminal-ByCNqakb.js → square-terminal-Bi7EDEf7.js} +1 -1
  64. package/dist/client/assets/{stateDiagram-FKZM4ZOC-CWjWCPZ4.js → stateDiagram-FKZM4ZOC-CTETJ7q1.js} +1 -1
  65. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BvVewf6E.js +1 -0
  66. package/dist/client/assets/{timeline-definition-IT6M3QCI-BMaR6Nuo.js → timeline-definition-IT6M3QCI-DYNUQPry.js} +1 -1
  67. package/dist/client/assets/{treemap-GDKQZRPO-CbRLz23z.js → treemap-GDKQZRPO-extyB4z8.js} +1 -1
  68. package/dist/client/assets/workspace._workspaceId-C8Z_0tr5.js +2 -0
  69. package/dist/client/assets/{workspace._workspaceId-4ah7xBuS.js → workspace._workspaceId-D0Fj26bF.js} +1 -1
  70. package/dist/client/assets/{xychartDiagram-PRI3JC2R-DNMYDMAj.js → xychartDiagram-PRI3JC2R-BtUY3rKA.js} +1 -1
  71. package/dist/server/assets/{DockviewBrowserContainer-BuItINME.js → DockviewBrowserContainer-BjdfNGy8.js} +14 -9
  72. package/dist/server/assets/{DockviewTerminalContainer-TX2ecJ9k.js → DockviewTerminalContainer-CwXOWGN4.js} +16 -11
  73. package/dist/server/assets/{TerminalPanel-CvEpdUzO.js → TerminalPanel-BkB-gDqg.js} +1 -1
  74. package/dist/server/assets/{_basePickBy-7qoOGcXD.js → _basePickBy-8tzGwV15.js} +2 -2
  75. package/dist/server/assets/{_baseUniq-Cm0aWwLl.js → _baseUniq-CTXsu8pj.js} +1 -1
  76. package/dist/server/assets/_tanstack-start-manifest_v-Bu_aDRUe.js +4 -0
  77. package/dist/server/assets/{arc-DH5jD29O.js → arc-DfLShGGX.js} +1 -1
  78. package/dist/server/assets/{architecture-7HQA4BMR-BQSW1CNO.js → architecture-7HQA4BMR-B3ThBUTU.js} +6 -6
  79. package/dist/server/assets/{architectureDiagram-VXUJARFQ-DgTZkqMC.js → architectureDiagram-VXUJARFQ-CWzfFX__.js} +6 -6
  80. package/dist/server/assets/{blockDiagram-VD42YOAC-CHY_BpPT.js → blockDiagram-VD42YOAC-DCaPOrQR.js} +6 -6
  81. package/dist/server/assets/{c4Diagram-YG6GDRKO-Buvaq10G.js → c4Diagram-YG6GDRKO-BU-dO_db.js} +2 -2
  82. package/dist/server/assets/{channel-CSV_0Wq9.js → channel-Bs5JejOk.js} +1 -1
  83. package/dist/server/assets/{chunk-4BX2VUAB-B4TPMkRz.js → chunk-4BX2VUAB-BuiyFSiN.js} +1 -1
  84. package/dist/server/assets/{chunk-55IACEB6-CTFAFIsE.js → chunk-55IACEB6-CPYazKTg.js} +1 -1
  85. package/dist/server/assets/{chunk-B4BG7PRW-CR8829ZP.js → chunk-B4BG7PRW-Kknt_fVn.js} +4 -4
  86. package/dist/server/assets/{chunk-DI55MBZ5-DetqjIc9.js → chunk-DI55MBZ5-9Ix3Oo-P.js} +3 -3
  87. package/dist/server/assets/{chunk-FMBD7UC4-D6DpqSQ8.js → chunk-FMBD7UC4-OhxFQXHM.js} +1 -1
  88. package/dist/server/assets/{chunk-QN33PNHL-U9pD23ft.js → chunk-QN33PNHL-LsrLj9Ip.js} +1 -1
  89. package/dist/server/assets/{chunk-QZHKN3VN-BK2E8m4j.js → chunk-QZHKN3VN-BwJQ_Q1g.js} +1 -1
  90. package/dist/server/assets/{chunk-TZMSLE5B-DRLbWC_A.js → chunk-TZMSLE5B-Bl5v6Ae6.js} +1 -1
  91. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-BNcG92nY.js → classDiagram-2ON5EDUG-C6GK2Aoj.js} +5 -5
  92. package/dist/server/assets/{classDiagram-2ON5EDUG-BNcG92nY.js → classDiagram-v2-WZHVMYZB-C6GK2Aoj.js} +5 -5
  93. package/dist/server/assets/{clone-CHpwEW-O.js → clone-DqNWgXxT.js} +1 -1
  94. package/dist/server/assets/{cose-bilkent-S5V4N54A-700evsrQ.js → cose-bilkent-S5V4N54A-qzfBNLDd.js} +1 -1
  95. package/dist/server/assets/{dagre-6UL2VRFP-B8Qw2znf.js → dagre-6UL2VRFP-DNZS86ly.js} +6 -6
  96. package/dist/server/assets/{diagram-PSM6KHXK-C6EJCqfL.js → diagram-PSM6KHXK-C6ImURyq.js} +7 -7
  97. package/dist/server/assets/{diagram-QEK2KX5R-CQAcI4L4.js → diagram-QEK2KX5R-diOF3OBK.js} +6 -6
  98. package/dist/server/assets/{diagram-S2PKOQOG-DsDqxdmS.js → diagram-S2PKOQOG-CP1GoHeA.js} +6 -6
  99. package/dist/server/assets/{erDiagram-Q2GNP2WA-DGEMY_JO.js → erDiagram-Q2GNP2WA-DnkGfUio.js} +4 -4
  100. package/dist/server/assets/{flowDiagram-NV44I4VS-DCV18CNa.js → flowDiagram-NV44I4VS-B1dpItw0.js} +5 -5
  101. package/dist/server/assets/{ganttDiagram-JELNMOA3-Cf9uIRTp.js → ganttDiagram-JELNMOA3-CfB_h9HP.js} +1 -1
  102. package/dist/server/assets/{gitGraph-G5XIXVHT-Bphh3EfC.js → gitGraph-G5XIXVHT-uIxmtjOh.js} +6 -6
  103. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-_q2n-s2e.js → gitGraphDiagram-V2S2FVAM-BWi1KybI.js} +7 -7
  104. package/dist/server/assets/{graph-Ccd2dFz0.js → graph-BpINl381.js} +2 -2
  105. package/dist/server/assets/{highlighted-body-B3W2YXNL-DYwYCtBU.js → highlighted-body-B3W2YXNL-X1-_bh6z.js} +1 -1
  106. package/dist/server/assets/{index-DXSqtFcT.js → index-BIn7ueGd.js} +2 -2
  107. package/dist/server/assets/{index-C06ZyGGj.js → index-BUCj1Yl_.js} +4 -4
  108. package/dist/server/assets/{index-BCTaINbC.js → index-B_uZBCQp.js} +2 -2
  109. package/dist/server/assets/{index-tV4Tdk7z.js → index-Bcu0C2js.js} +3 -3
  110. package/dist/server/assets/{index-rF-uGnt9.js → index-Bm4xacwx.js} +1 -1
  111. package/dist/server/assets/{index-DGyXXlV8.js → index-Bqv1Yqbp.js} +2 -2
  112. package/dist/server/assets/{index-B1VfjVjc.js → index-CF9A2ZU-.js} +2 -2
  113. package/dist/server/assets/{index-B1aJ0zMt.js → index-CGqMcWZv.js} +5 -5
  114. package/dist/server/assets/{index-4y021XhL.js → index-CecHlx7n.js} +1 -1
  115. package/dist/server/assets/{index-CprdJ8Lo.js → index-Ch5w2qx-.js} +2 -2
  116. package/dist/server/assets/{index-DHt4VQNS.js → index-Cuy6v4sQ.js} +5 -5
  117. package/dist/server/assets/{index-CXEg-eDA.js → index-CyY0UzHL.js} +2 -2
  118. package/dist/server/assets/{index-e4ZKMFB1.js → index-D3oif9Da.js} +2 -2
  119. package/dist/server/assets/{index-BhpCZORq.js → index-DEYBFbnW.js} +2 -2
  120. package/dist/server/assets/{index-BCLSgPI1.js → index-DXfbzq6y.js} +2 -2
  121. package/dist/server/assets/{index-CD62n4Wy.js → index-IM5Lznch.js} +3 -3
  122. package/dist/server/assets/{index-dJOmGf_o.js → index-YfWUTx8U.js} +2 -2
  123. package/dist/server/assets/{index-WOVU_Ptt.js → index-oLF27Nfu.js} +2 -2
  124. package/dist/server/assets/{info-VBDWY6EO-CtEo3hWH.js → info-VBDWY6EO-CqVqNO_U.js} +6 -6
  125. package/dist/server/assets/{infoDiagram-HS3SLOUP-DlVfYs3y.js → infoDiagram-HS3SLOUP-LstCwT5M.js} +5 -5
  126. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-DEvLjN67.js → journeyDiagram-XKPGCS4Q-Bq4xdGvc.js} +4 -4
  127. package/dist/server/assets/{kanban-definition-3W4ZIXB7-C8wt29HD.js → kanban-definition-3W4ZIXB7-Cz8QJrE-.js} +2 -2
  128. package/dist/server/assets/{layout-B3YZdVGY.js → layout-BR6KziPh.js} +4 -4
  129. package/dist/server/assets/{mermaid-3ZIDBTTL-Drwee8F2.js → mermaid-3ZIDBTTL-CX1H3heG.js} +1 -1
  130. package/dist/server/assets/{mermaid-parser.core-BArH7IDC.js → mermaid-parser.core-DErnTWrV.js} +11 -11
  131. package/dist/server/assets/{mindmap-definition-VGOIOE7T-CLGmFN8m.js → mindmap-definition-VGOIOE7T-OX1eekPS.js} +3 -3
  132. package/dist/server/assets/{packet-DYOGHKS2-BuBX0bTH.js → packet-DYOGHKS2-C8FvmUVf.js} +6 -6
  133. package/dist/server/assets/{pie-VRWISCQL-CaZ9Z0V-.js → pie-VRWISCQL-Bb_jFdxC.js} +6 -6
  134. package/dist/server/assets/{pieDiagram-ADFJNKIX-jGuNgZxo.js → pieDiagram-ADFJNKIX-CyhwaYTd.js} +7 -7
  135. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-DAAEbR4l.js → quadrantDiagram-AYHSOK5B-BRzFRm7k.js} +1 -1
  136. package/dist/server/assets/{radar-ZZBFDIW7-D80s-gzM.js → radar-ZZBFDIW7-C2cWeYfK.js} +6 -6
  137. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-DmT06vgs.js → requirementDiagram-UZGBJVZJ-fJ6FCY2X.js} +3 -3
  138. package/dist/server/assets/{router-PslJYw0K.js → router-BSilWMbB.js} +409 -450
  139. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-DubOMd7c.js → sankeyDiagram-TZEHDZUN-DkGxRBc4.js} +1 -1
  140. package/dist/server/assets/{sequenceDiagram-WL72ISMW-V8TCpuJa.js → sequenceDiagram-WL72ISMW-Y9h8QzpA.js} +3 -3
  141. package/dist/server/assets/{square-terminal-DqxGkh8h.js → square-terminal-lPOPYTqx.js} +1 -1
  142. package/dist/server/assets/{stateDiagram-FKZM4ZOC-DDhvvfjL.js → stateDiagram-FKZM4ZOC-D9Xo5bg5.js} +8 -8
  143. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-CrVhacjl.js → stateDiagram-v2-4FDKWEC3-BBj6Aiwx.js} +4 -4
  144. package/dist/server/assets/{timeline-definition-IT6M3QCI-PRx7QaX4.js → timeline-definition-IT6M3QCI-oAS-tbgM.js} +2 -2
  145. package/dist/server/assets/{treemap-GDKQZRPO-DDEerlZp.js → treemap-GDKQZRPO-BA7EQwOb.js} +6 -6
  146. package/dist/server/assets/{workspace._workspaceId-B_ziNHiq.js → workspace._workspaceId-BAO3HXDS.js} +1 -1
  147. package/dist/server/assets/{workspace._workspaceId-CO8mKKZW.js → workspace._workspaceId-CREreypp.js} +9 -3
  148. package/dist/server/assets/{xychartDiagram-PRI3JC2R-Cdaq77X5.js → xychartDiagram-PRI3JC2R-CYgqsSC_.js} +1 -1
  149. package/dist/server/server.js +2 -2
  150. package/dist/start-server.mjs +211 -170
  151. package/package.json +4 -4
  152. package/dist/client/assets/DockviewTerminalContainer-BFBZVril.js +0 -2
  153. package/dist/client/assets/_baseUniq-DHw48s_G.js +0 -1
  154. package/dist/client/assets/channel-BSRbBCzT.js +0 -1
  155. package/dist/client/assets/classDiagram-2ON5EDUG-ntGI3hWd.js +0 -1
  156. package/dist/client/assets/classDiagram-v2-WZHVMYZB-ntGI3hWd.js +0 -1
  157. package/dist/client/assets/clone-Q7bdnWu2.js +0 -1
  158. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-CPppMgt3.js +0 -1
  159. package/dist/client/assets/workspace._workspaceId-Dg3ERq5R.js +0 -2
  160. package/dist/server/assets/_tanstack-start-manifest_v-DuTbaj5T.js +0 -4
@@ -114150,9 +114150,9 @@ var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1);
114150
114150
  // src/dashboard/components/AgentStatusIndicator.tsx
114151
114151
  var import_lucide_react2 = __toESM(require_lucide_react(), 1);
114152
114152
  var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
114153
- function AgentStatusIndicator({ agent, isActive }) {
114153
+ function AgentStatusIndicator({ agent, isActive, fallback }) {
114154
114154
  if (!agent || agent.status !== "working" && agent.status !== "needs_attention") {
114155
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
114155
+ return fallback ?? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
114156
114156
  import_lucide_react2.GitBranch,
114157
114157
  {
114158
114158
  className: `size-3 shrink-0 ${isActive ? "text-primary" : "text-muted-foreground"}`
@@ -114164,7 +114164,13 @@ function AgentStatusIndicator({ agent, isActive }) {
114164
114164
  const tooltip = isWorking ? "Agent running..." : "Needs your attention";
114165
114165
  const animation = isWorking ? "" : "animate-status-pulse";
114166
114166
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Tooltip2, { children: [
114167
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: `inline-block size-2 shrink-0 rounded-full ${color} ${animation}` }) }),
114167
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
114168
+ "span",
114169
+ {
114170
+ "data-testid": "workspace-card__agent-status",
114171
+ className: `inline-block size-2 shrink-0 rounded-full ${color} ${animation}`
114172
+ }
114173
+ ) }),
114168
114174
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipContent2, { side: "top", children: tooltip })
114169
114175
  ] });
114170
114176
  }
@@ -114722,8 +114728,24 @@ function SetupStatusIndicator({ setup }) {
114722
114728
  return null;
114723
114729
  }
114724
114730
 
114725
- // src/dashboard/components/WorkspaceCard.tsx
114731
+ // src/dashboard/components/WorkspaceLabel.tsx
114726
114732
  var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
114733
+ function WorkspaceLabel({
114734
+ name: name3,
114735
+ projectName,
114736
+ isActive,
114737
+ tone = "sidebar"
114738
+ }) {
114739
+ const nameClass = tone === "switcher" ? `text-foreground ${isActive ? "font-semibold" : "font-medium"}` : isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground";
114740
+ const projectClass = tone === "switcher" ? "text-foreground/70" : isActive ? "text-foreground/80" : "text-muted-foreground";
114741
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex flex-col min-w-0 leading-tight", children: [
114742
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: cn("text-sm truncate", nameClass), children: name3 }),
114743
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: cn("text-xs truncate", projectClass), children: projectName })
114744
+ ] });
114745
+ }
114746
+
114747
+ // src/dashboard/components/WorkspaceCard.tsx
114748
+ var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1);
114727
114749
  var RECENT_ACTIVATION_WINDOW_MS = 300;
114728
114750
  var recentlyActivatedWorkspaceId = null;
114729
114751
  var recentlyActivatedTimer = null;
@@ -114768,7 +114790,6 @@ var WorkspaceCard = (0, import_react22.memo)(function WorkspaceCard2({
114768
114790
  const removeWorkspaceMutation = useRemoveWorkspace();
114769
114791
  const isPinned = worktree.pinned;
114770
114792
  const isRoot = !isPlain && worktree.name === defaultBranch;
114771
- const agentActive = status?.agent?.status === "working" || status?.agent?.status === "needs_attention";
114772
114793
  const workspaceId = toWorkspaceId(projectName, worktree.name);
114773
114794
  const isActive = useDashboardStore((s6) => s6.activeWorkspaceId === workspaceId);
114774
114795
  const href = capabilities.getWorkspaceHref?.(workspaceId);
@@ -114830,41 +114851,45 @@ var WorkspaceCard = (0, import_react22.memo)(function WorkspaceCard2({
114830
114851
  });
114831
114852
  }
114832
114853
  };
114833
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenu2, { children: [
114834
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ContextMenuTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { ...containerProps, children: [
114835
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Tooltip2, { delayDuration: 800, children: [
114836
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center gap-2 min-w-0 overflow-hidden", children: [
114837
- isRoot ? /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
114838
- agentActive && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AgentStatusIndicator, { agent: status?.agent, isActive }),
114839
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
114840
- import_lucide_react5.Home,
114854
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenu2, { children: [
114855
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ContextMenuTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { ...containerProps, children: [
114856
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Tooltip2, { delayDuration: 800, children: [
114857
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "flex items-center gap-2 min-w-0 overflow-hidden", children: [
114858
+ isRoot ? (
114859
+ // On the root card the house is AgentStatusIndicator's idle
114860
+ // fallback (the slot other cards use for the branch glyph),
114861
+ // so an active agent's status dot replaces the house rather
114862
+ // than sitting beside it.
114863
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
114864
+ AgentStatusIndicator,
114841
114865
  {
114842
- className: `size-3.5 shrink-0 ${isActive ? "text-primary" : "text-muted-foreground"}`
114866
+ agent: status?.agent,
114867
+ isActive,
114868
+ fallback: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
114869
+ import_lucide_react5.Home,
114870
+ {
114871
+ "data-testid": "workspace-card__home-icon",
114872
+ className: `size-3.5 shrink-0 ${isActive ? "text-primary" : "text-muted-foreground"}`
114873
+ }
114874
+ )
114843
114875
  }
114844
114876
  )
114845
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AgentStatusIndicator, { agent: status?.agent, isActive }),
114877
+ ) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(AgentStatusIndicator, { agent: status?.agent, isActive }),
114846
114878
  showProjectName ? (
114847
114879
  // Pinned section: stack the branch name over the project name
114848
114880
  // as a compact two-line block so a mixed list of pinned cards
114849
114881
  // stays scannable without a long, mid-truncated
114850
- // `project/branch` string on one line.
114851
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex flex-col min-w-0 leading-tight", children: [
114852
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
114853
- "span",
114854
- {
114855
- className: `text-sm truncate ${isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground"}`,
114856
- children: worktree.name
114857
- }
114858
- ),
114859
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
114860
- "span",
114861
- {
114862
- className: `text-xs truncate ${isActive ? "text-foreground/80" : "text-muted-foreground"}`,
114863
- children: projectName
114864
- }
114865
- )
114866
- ] })
114867
- ) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
114882
+ // `project/branch` string on one line. Shared with the ⌘K
114883
+ // workspace picker via `WorkspaceLabel`.
114884
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
114885
+ WorkspaceLabel,
114886
+ {
114887
+ name: worktree.name,
114888
+ projectName,
114889
+ isActive
114890
+ }
114891
+ )
114892
+ ) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
114868
114893
  "span",
114869
114894
  {
114870
114895
  className: `text-sm truncate ${isActive ? "font-bold text-foreground" : "font-medium text-muted-foreground"}`,
@@ -114872,46 +114897,46 @@ var WorkspaceCard = (0, import_react22.memo)(function WorkspaceCard2({
114872
114897
  }
114873
114898
  )
114874
114899
  ] }) }),
114875
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(TooltipContent2, { side: "right", children: `${projectName}/${worktree.name}` })
114900
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(TooltipContent2, { side: "right", children: `${projectName}/${worktree.name}` })
114876
114901
  ] }),
114877
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "hidden @[10rem]:flex group-hover:flex items-center gap-2 shrink-0 ml-auto pl-2", children: [
114878
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SetupStatusIndicator, { setup: setupStatus }),
114879
- !isPlain && branchStatus && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(GitStatusIndicator, { git: branchStatus.git }),
114880
- !isPlain && branchStatus && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CIStatusIndicator, { ci: branchStatus.ci })
114902
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "hidden @[10rem]:flex group-hover:flex items-center gap-2 shrink-0 ml-auto pl-2", children: [
114903
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(SetupStatusIndicator, { setup: setupStatus }),
114904
+ !isPlain && branchStatus && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(GitStatusIndicator, { git: branchStatus.git }),
114905
+ !isPlain && branchStatus && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CIStatusIndicator, { ci: branchStatus.ci })
114881
114906
  ] })
114882
114907
  ] }) }),
114883
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuContent2, { children: [
114884
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => onTogglePinned(projectName, worktree.name, isPinned), children: [
114885
- isPinned ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.PinOff, {}) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.Pin, {}),
114908
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuContent2, { children: [
114909
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => onTogglePinned(projectName, worktree.name, isPinned), children: [
114910
+ isPinned ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.PinOff, {}) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.Pin, {}),
114886
114911
  isPinned ? "Unpin workspace" : "Pin workspace"
114887
114912
  ] }),
114888
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ContextMenuSeparator2, {}),
114889
- capabilities.copyPath && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => navigator.clipboard.writeText(worktree.path), children: [
114890
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.Clipboard, {}),
114913
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ContextMenuSeparator2, {}),
114914
+ capabilities.copyPath && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => navigator.clipboard.writeText(worktree.path), children: [
114915
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.Clipboard, {}),
114891
114916
  "Copy path"
114892
114917
  ] }),
114893
- capabilities.revealInFinder && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => capabilities.revealInFinder(worktree.path), children: [
114894
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.FolderOpen, {}),
114918
+ capabilities.revealInFinder && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => capabilities.revealInFinder(worktree.path), children: [
114919
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.FolderOpen, {}),
114895
114920
  "Open in Finder"
114896
114921
  ] }),
114897
- worktree.hasSetup && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => runScript(worktree.path, "setup"), children: [
114898
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.Play, {}),
114922
+ worktree.hasSetup && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => runScript(worktree.path, "setup"), children: [
114923
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.Play, {}),
114899
114924
  "Run setup"
114900
114925
  ] }),
114901
- worktree.hasTeardown && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => runScript(worktree.path, "teardown"), children: [
114902
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.Square, {}),
114926
+ worktree.hasTeardown && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => runScript(worktree.path, "teardown"), children: [
114927
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.Square, {}),
114903
114928
  "Run teardown"
114904
114929
  ] }),
114905
- !isPlain && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => gitPull(projectName, worktree.name), children: [
114906
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.ArrowDownToLine, {}),
114930
+ !isPlain && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => gitPull(projectName, worktree.name), children: [
114931
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.ArrowDownToLine, {}),
114907
114932
  "Git pull"
114908
114933
  ] }),
114909
- !isPlain && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { onClick: () => gitPush(projectName, worktree.name), children: [
114910
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.ArrowUpFromLine, {}),
114934
+ !isPlain && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { onClick: () => gitPush(projectName, worktree.name), children: [
114935
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.ArrowUpFromLine, {}),
114911
114936
  "Git push"
114912
114937
  ] }),
114913
- !isPlain && worktree.name !== defaultBranch && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(ContextMenuItem2, { variant: "destructive", onClick: handleDelete, children: [
114914
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react5.Trash2, {}),
114938
+ !isPlain && worktree.name !== defaultBranch && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ContextMenuItem2, { variant: "destructive", onClick: handleDelete, children: [
114939
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react5.Trash2, {}),
114915
114940
  "Delete workspace"
114916
114941
  ] })
114917
114942
  ] })
@@ -114919,7 +114944,7 @@ var WorkspaceCard = (0, import_react22.memo)(function WorkspaceCard2({
114919
114944
  });
114920
114945
 
114921
114946
  // src/dashboard/components/ProjectList.tsx
114922
- var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1);
114947
+ var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1);
114923
114948
 
114924
114949
  // src/dashboard/components/SettingsPage.tsx
114925
114950
  var import_react25 = __toESM(require_react(), 1);
@@ -114928,16 +114953,16 @@ var import_react25 = __toESM(require_react(), 1);
114928
114953
  var import_react24 = __toESM(require_react(), 1);
114929
114954
 
114930
114955
  // src/dashboard/components/settings/SettingsRow.tsx
114931
- var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1);
114956
+ var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1);
114932
114957
 
114933
114958
  // src/dashboard/components/settings/SettingsSection.tsx
114934
- var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1);
114959
+ var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1);
114935
114960
 
114936
114961
  // src/dashboard/components/SettingsPage.tsx
114937
- var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1);
114962
+ var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
114938
114963
 
114939
114964
  // src/dashboard/components/DashboardShell.tsx
114940
- var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
114965
+ var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1);
114941
114966
  var isElectron = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
114942
114967
 
114943
114968
  // src/dashboard/components/DiffView.tsx
@@ -115203,18 +115228,18 @@ function joinWorkspacePath(workspaceRoot, relativePath) {
115203
115228
  }
115204
115229
 
115205
115230
  // src/dashboard/components/FileStatusBadge.tsx
115206
- var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1);
115231
+ var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
115207
115232
 
115208
115233
  // src/dashboard/components/ChangesFileTree.tsx
115209
- var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
115234
+ var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
115210
115235
 
115211
115236
  // src/dashboard/components/RevertFileDialog.tsx
115212
- var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
115237
+ var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1);
115213
115238
 
115214
115239
  // src/dashboard/components/SearchBar.tsx
115215
115240
  var import_lucide_react6 = __toESM(require_lucide_react(), 1);
115216
115241
  var import_react34 = __toESM(require_react(), 1);
115217
- var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1);
115242
+ var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
115218
115243
  var DEFAULT_VISIBLE_OPTIONS = ["caseSensitive", "wholeWord", "regex"];
115219
115244
  function ToggleButton({
115220
115245
  active,
@@ -115222,7 +115247,7 @@ function ToggleButton({
115222
115247
  title,
115223
115248
  children
115224
115249
  }) {
115225
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
115250
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
115226
115251
  "button",
115227
115252
  {
115228
115253
  type: "button",
@@ -115263,7 +115288,7 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115263
115288
  const toggleRegex = (0, import_react34.useCallback)(() => {
115264
115289
  onOptionsChange({ ...options2, regex: !options2.regex });
115265
115290
  }, [options2, onOptionsChange]);
115266
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
115291
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
115267
115292
  "div",
115268
115293
  {
115269
115294
  className: cn(
@@ -115271,8 +115296,8 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115271
115296
  className
115272
115297
  ),
115273
115298
  children: [
115274
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.Search, { className: "size-3.5 shrink-0 text-muted-foreground" }),
115275
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
115299
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.Search, { className: "size-3.5 shrink-0 text-muted-foreground" }),
115300
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
115276
115301
  "input",
115277
115302
  {
115278
115303
  ref: inputRef,
@@ -115293,11 +115318,11 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115293
115318
  }
115294
115319
  }
115295
115320
  ),
115296
- showCase && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ToggleButton, { active: options2.caseSensitive, onClick: toggleCase, title: "Match Case", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.CaseSensitive, { className: "size-4" }) }),
115297
- showWholeWord && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ToggleButton, { active: options2.wholeWord, onClick: toggleWholeWord, title: "Match Whole Word", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.WholeWord, { className: "size-4" }) }),
115298
- showRegex && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ToggleButton, { active: options2.regex, onClick: toggleRegex, title: "Use Regular Expression", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.Regex, { className: "size-4" }) }),
115299
- matchInfo && query && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground tabular-nums", children: matchInfo.total > 0 ? `${matchInfo.current} of ${matchInfo.total}` : "No results" }),
115300
- onPrevious && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
115321
+ showCase && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ToggleButton, { active: options2.caseSensitive, onClick: toggleCase, title: "Match Case", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.CaseSensitive, { className: "size-4" }) }),
115322
+ showWholeWord && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ToggleButton, { active: options2.wholeWord, onClick: toggleWholeWord, title: "Match Whole Word", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.WholeWord, { className: "size-4" }) }),
115323
+ showRegex && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ToggleButton, { active: options2.regex, onClick: toggleRegex, title: "Use Regular Expression", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.Regex, { className: "size-4" }) }),
115324
+ matchInfo && query && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground tabular-nums", children: matchInfo.total > 0 ? `${matchInfo.current} of ${matchInfo.total}` : "No results" }),
115325
+ onPrevious && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
115301
115326
  "button",
115302
115327
  {
115303
115328
  type: "button",
@@ -115305,10 +115330,10 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115305
115330
  disabled: !matchInfo || matchInfo.total === 0,
115306
115331
  className: "inline-flex size-6 items-center justify-center rounded text-muted-foreground hover:text-foreground disabled:opacity-30",
115307
115332
  title: "Previous match (Shift+Enter)",
115308
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.ChevronUp, { className: "size-3.5" })
115333
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.ChevronUp, { className: "size-3.5" })
115309
115334
  }
115310
115335
  ),
115311
- onNext && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
115336
+ onNext && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
115312
115337
  "button",
115313
115338
  {
115314
115339
  type: "button",
@@ -115316,17 +115341,17 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115316
115341
  disabled: !matchInfo || matchInfo.total === 0,
115317
115342
  className: "inline-flex size-6 items-center justify-center rounded text-muted-foreground hover:text-foreground disabled:opacity-30",
115318
115343
  title: "Next match (Enter)",
115319
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.ChevronDown, { className: "size-3.5" })
115344
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.ChevronDown, { className: "size-3.5" })
115320
115345
  }
115321
115346
  ),
115322
- onClose && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
115347
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
115323
115348
  "button",
115324
115349
  {
115325
115350
  type: "button",
115326
115351
  onClick: onClose,
115327
115352
  className: "inline-flex size-6 items-center justify-center rounded text-muted-foreground hover:text-foreground",
115328
115353
  title: "Close (Escape)",
115329
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react6.X, { className: "size-3.5" })
115354
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react6.X, { className: "size-3.5" })
115330
115355
  }
115331
115356
  )
115332
115357
  ]
@@ -115335,7 +115360,7 @@ var SearchBar = (0, import_react34.forwardRef)(function SearchBar2({
115335
115360
  });
115336
115361
 
115337
115362
  // src/dashboard/components/DiffView.tsx
115338
- var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
115363
+ var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
115339
115364
  var diffTheme = EditorView.theme({
115340
115365
  ".cm-insertedLine": { backgroundColor: "rgba(34, 197, 94, 0.1)" },
115341
115366
  ".cm-deletedLine": { backgroundColor: "rgba(239, 68, 68, 0.1)" },
@@ -115387,7 +115412,7 @@ var diffTheme = EditorView.theme({
115387
115412
  // src/dashboard/components/FileBrowser.tsx
115388
115413
  var import_lucide_react7 = __toESM(require_lucide_react(), 1);
115389
115414
  var import_react36 = __toESM(require_react(), 1);
115390
- var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
115415
+ var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1);
115391
115416
  var expandedStateCache = /* @__PURE__ */ new Map();
115392
115417
  var dirContentsCache = /* @__PURE__ */ new Map();
115393
115418
  function getCachedExpanded(wsId) {
@@ -115468,21 +115493,21 @@ function EntryNameInput({
115468
115493
  }
115469
115494
  };
115470
115495
  const Icon = kind === "directory" ? import_lucide_react7.Folder : import_lucide_react7.File;
115471
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex w-full flex-col", style: { paddingLeft: `${depth * indent + basePad}px` }, children: [
115472
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115496
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex w-full flex-col", style: { paddingLeft: `${depth * indent + basePad}px` }, children: [
115497
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115473
115498
  "div",
115474
115499
  {
115475
115500
  className: `flex items-center ${compact ? "h-[28px] gap-1 pr-3 text-[13px]" : "h-[32px] gap-1.5 pr-4 text-[15px]"}`,
115476
115501
  style: { height },
115477
115502
  children: [
115478
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "size-3.5 shrink-0" }),
115479
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115503
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "size-3.5 shrink-0" }),
115504
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115480
115505
  Icon,
115481
115506
  {
115482
115507
  className: kind === "directory" ? "size-4 shrink-0 text-blue-600 dark:text-blue-400" : "size-4 shrink-0 text-muted-foreground"
115483
115508
  }
115484
115509
  ),
115485
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115510
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115486
115511
  "input",
115487
115512
  {
115488
115513
  ref: inputRef,
@@ -115519,7 +115544,7 @@ function EntryNameInput({
115519
115544
  ]
115520
115545
  }
115521
115546
  ),
115522
- error2 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115547
+ error2 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115523
115548
  "div",
115524
115549
  {
115525
115550
  className: "pointer-events-none text-xs text-destructive",
@@ -115587,7 +115612,7 @@ function TreeNode2({
115587
115612
  onOpenFilePinned(entryPath);
115588
115613
  }
115589
115614
  };
115590
- const button = /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115615
+ const button = /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115591
115616
  "button",
115592
115617
  {
115593
115618
  ref: isSelected ? selectedRef : void 0,
@@ -115601,15 +115626,15 @@ function TreeNode2({
115601
115626
  className: `flex w-full items-center text-left select-none hover:bg-accent/50 [-webkit-touch-callout:none] ${compact ? "h-[28px] gap-1 pr-3 text-[13px]" : "h-[32px] gap-1.5 pr-4 text-[15px]"} ${isSelected ? "bg-blue-500/30 text-foreground outline outline-1 -outline-offset-1 outline-blue-400/60 hover:bg-blue-500/30 dark:bg-blue-500/40 dark:outline-blue-400/70 dark:hover:bg-blue-500/40" : ""} ${isCut ? "opacity-50" : ""}`,
115602
115627
  style: { paddingLeft: `${depth * indent + basePad}px` },
115603
115628
  children: [
115604
- isDir ? isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ChevronDown, { className: "size-3.5 shrink-0 text-muted-foreground/70" }) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ChevronRight, { className: "size-3.5 shrink-0 text-muted-foreground/70" }) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "size-3.5 shrink-0" }),
115629
+ isDir ? isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ChevronDown, { className: "size-3.5 shrink-0 text-muted-foreground/70" }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ChevronRight, { className: "size-3.5 shrink-0 text-muted-foreground/70" }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "size-3.5 shrink-0" }),
115605
115630
  isDir ? (() => {
115606
115631
  const FolderIcon = getFolderIcon(entry.name, isExpanded);
115607
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(FolderIcon, { className: "size-4 shrink-0" });
115632
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(FolderIcon, { className: "size-4 shrink-0" });
115608
115633
  })() : (() => {
115609
115634
  const FileIcon = getFileIcon(entry.name);
115610
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(FileIcon, { className: "size-4 shrink-0" });
115635
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(FileIcon, { className: "size-4 shrink-0" });
115611
115636
  })(),
115612
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "min-w-0 flex-1 truncate", children: entry.name })
115637
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "min-w-0 flex-1 truncate", children: entry.name })
115613
115638
  ]
115614
115639
  }
115615
115640
  );
@@ -115631,7 +115656,7 @@ function TreeNode2({
115631
115656
  // a padding div with `depth={0}` would double-apply `basePad`, shifting
115632
115657
  // the input ~4px to the right and giving it visibly less horizontal
115633
115658
  // room than the rest of the tree.
115634
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115659
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115635
115660
  EntryNameInput,
115636
115661
  {
115637
115662
  kind: isDir ? "directory" : "file",
@@ -115645,97 +115670,97 @@ function TreeNode2({
115645
115670
  },
115646
115671
  `rename-${entryPath}`
115647
115672
  )
115648
- ) : /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115673
+ ) : /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115649
115674
  ContextMenu2,
115650
115675
  {
115651
115676
  onOpenChange: (open3) => {
115652
115677
  if (open3) onSelectRow(entryPath, isDir ? "directory" : "file");
115653
115678
  },
115654
115679
  children: [
115655
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuTrigger2, { asChild: true, children: button }),
115656
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuContent2, { onCloseAutoFocus: menu.flush, children: [
115657
- isDir && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
115658
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115680
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuTrigger2, { asChild: true, children: button }),
115681
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuContent2, { onCloseAutoFocus: menu.flush, children: [
115682
+ isDir && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
115683
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115659
115684
  ContextMenuItem2,
115660
115685
  {
115661
115686
  onSelect: () => menu.queue(() => onRequestNewEntry(entryPath, "file")),
115662
115687
  children: [
115663
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.File, { className: "size-4" }),
115688
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.File, { className: "size-4" }),
115664
115689
  "New File"
115665
115690
  ]
115666
115691
  }
115667
115692
  ),
115668
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115693
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115669
115694
  ContextMenuItem2,
115670
115695
  {
115671
115696
  onSelect: () => menu.queue(() => onRequestNewEntry(entryPath, "directory")),
115672
115697
  children: [
115673
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.FolderPlus, { className: "size-4" }),
115698
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.FolderPlus, { className: "size-4" }),
115674
115699
  "New Folder"
115675
115700
  ]
115676
115701
  }
115677
115702
  ),
115678
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuSeparator2, {})
115703
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuSeparator2, {})
115679
115704
  ] }),
115680
- canCut && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115705
+ canCut && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115681
115706
  ContextMenuItem2,
115682
115707
  {
115683
115708
  onSelect: () => menu.queue(() => onCut(entryPath, isDir ? "directory" : "file")),
115684
115709
  children: [
115685
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.Scissors, { className: "size-4" }),
115710
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.Scissors, { className: "size-4" }),
115686
115711
  "Cut"
115687
115712
  ]
115688
115713
  }
115689
115714
  ),
115690
- canCopy && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115715
+ canCopy && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115691
115716
  ContextMenuItem2,
115692
115717
  {
115693
115718
  onSelect: () => menu.queue(() => onCopy(entryPath, isDir ? "directory" : "file")),
115694
115719
  children: [
115695
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.Copy, { className: "size-4" }),
115720
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.Copy, { className: "size-4" }),
115696
115721
  "Copy"
115697
115722
  ]
115698
115723
  }
115699
115724
  ),
115700
- isDir && canPaste && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuItem2, { onSelect: () => menu.queue(() => void onPaste(entryPath)), children: [
115701
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ClipboardPaste, { className: "size-4" }),
115725
+ isDir && canPaste && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuItem2, { onSelect: () => menu.queue(() => void onPaste(entryPath)), children: [
115726
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ClipboardPaste, { className: "size-4" }),
115702
115727
  "Paste"
115703
115728
  ] }),
115704
- (canCut || canCopy || isDir && canPaste) && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuSeparator2, {}),
115705
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115729
+ (canCut || canCopy || isDir && canPaste) && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuSeparator2, {}),
115730
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115706
115731
  ContextMenuItem2,
115707
115732
  {
115708
115733
  "data-testid": "file-tree__copy-relative-path",
115709
115734
  onSelect: () => menu.queue(() => void writeClipboardText(entryPath)),
115710
115735
  children: [
115711
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ClipboardCopy, { className: "size-4" }),
115736
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ClipboardCopy, { className: "size-4" }),
115712
115737
  "Copy relative path"
115713
115738
  ]
115714
115739
  }
115715
115740
  ),
115716
- workspacePath && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115741
+ workspacePath && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115717
115742
  ContextMenuItem2,
115718
115743
  {
115719
115744
  "data-testid": "file-tree__copy-absolute-path",
115720
115745
  onSelect: () => menu.queue(() => void writeClipboardText(joinWorkspacePath(workspacePath, entryPath))),
115721
115746
  children: [
115722
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ClipboardCopy, { className: "size-4" }),
115747
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ClipboardCopy, { className: "size-4" }),
115723
115748
  "Copy absolute path"
115724
115749
  ]
115725
115750
  }
115726
115751
  ),
115727
- (canRename || canDelete) && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuSeparator2, {}),
115728
- canRename && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuItem2, { onSelect: () => menu.queue(() => onRequestRename(entryPath)), children: [
115729
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.Pencil, { className: "size-4" }),
115752
+ (canRename || canDelete) && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuSeparator2, {}),
115753
+ canRename && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuItem2, { onSelect: () => menu.queue(() => onRequestRename(entryPath)), children: [
115754
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.Pencil, { className: "size-4" }),
115730
115755
  "Rename"
115731
115756
  ] }),
115732
- canDelete && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
115757
+ canDelete && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
115733
115758
  ContextMenuItem2,
115734
115759
  {
115735
115760
  variant: "destructive",
115736
115761
  onSelect: () => menu.queue(() => onRequestDelete(entryPath, isDir ? "directory" : "file")),
115737
115762
  children: [
115738
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.Trash2, { className: "size-4" }),
115763
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.Trash2, { className: "size-4" }),
115739
115764
  "Delete"
115740
115765
  ]
115741
115766
  }
@@ -115745,13 +115770,13 @@ function TreeNode2({
115745
115770
  }
115746
115771
  );
115747
115772
  const showInlineInput = newEntry?.parentPath === entryPath;
115748
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
115773
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
115749
115774
  row,
115750
115775
  isExpanded && (() => {
115751
115776
  const splitIdx = children?.findIndex((c2) => c2.type === "file") ?? -1;
115752
115777
  const folderChildren = splitIdx === -1 ? children ?? [] : (children ?? []).slice(0, splitIdx);
115753
115778
  const fileChildren = splitIdx === -1 ? [] : (children ?? []).slice(splitIdx);
115754
- const renderChild = (child) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115779
+ const renderChild = (child) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115755
115780
  TreeNode2,
115756
115781
  {
115757
115782
  entry: child,
@@ -115789,7 +115814,7 @@ function TreeNode2({
115789
115814
  },
115790
115815
  child.name
115791
115816
  );
115792
- const newEntryInput = showInlineInput ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115817
+ const newEntryInput = showInlineInput ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115793
115818
  EntryNameInput,
115794
115819
  {
115795
115820
  kind: newEntry.kind,
@@ -115801,9 +115826,9 @@ function TreeNode2({
115801
115826
  },
115802
115827
  `new-${newEntry.kind}-${entryPath}`
115803
115828
  ) : null;
115804
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
115829
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
115805
115830
  showInlineInput && newEntry.kind === "directory" && newEntryInput,
115806
- isLoading && !children?.length && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115831
+ isLoading && !children?.length && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115807
115832
  "div",
115808
115833
  {
115809
115834
  className: `flex items-center text-muted-foreground/70 ${compact ? "text-[13px]" : "text-[15px]"}`,
@@ -115814,7 +115839,7 @@ function TreeNode2({
115814
115839
  children: "Loading\u2026"
115815
115840
  }
115816
115841
  ),
115817
- !isLoading && !showInlineInput && children && children.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
115842
+ !isLoading && !showInlineInput && children && children.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
115818
115843
  "div",
115819
115844
  {
115820
115845
  className: `flex items-center italic text-muted-foreground/50 ${compact ? "text-[13px]" : "text-[15px]"}`,
@@ -116260,7 +116285,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
116260
116285
  );
116261
116286
  const rootMenu = useDeferredMenuAction();
116262
116287
  if (!adapter.listWorkspaceFiles) {
116263
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "File browsing not supported" });
116288
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "File browsing not supported" });
116264
116289
  }
116265
116290
  const rootEntries = dirContents.get("") ?? [];
116266
116291
  const rootLoading = loadingPaths.has("");
@@ -116297,20 +116322,20 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
116297
116322
  void pasteInto(resolveDefaultTarget());
116298
116323
  }
116299
116324
  };
116300
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex h-full flex-col overflow-hidden", onKeyDown: handleKeyDown, children: [
116301
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
116325
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex h-full flex-col overflow-hidden", onKeyDown: handleKeyDown, children: [
116326
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
116302
116327
  ContextMenu2,
116303
116328
  {
116304
116329
  onOpenChange: (open3) => {
116305
116330
  if (open3) clearTreeSelection();
116306
116331
  },
116307
116332
  children: [
116308
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "min-h-0 flex-1 overflow-y-auto py-1 pl-px", children: [
116333
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuTrigger2, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "min-h-0 flex-1 overflow-y-auto py-1 pl-px", children: [
116309
116334
  (() => {
116310
116335
  const rootSplitIdx = rootEntries.findIndex((e2) => e2.type === "file");
116311
116336
  const rootFolders = rootSplitIdx === -1 ? rootEntries : rootEntries.slice(0, rootSplitIdx);
116312
116337
  const rootFiles = rootSplitIdx === -1 ? [] : rootEntries.slice(rootSplitIdx);
116313
- const renderRow = (entry) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
116338
+ const renderRow = (entry) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
116314
116339
  TreeNode2,
116315
116340
  {
116316
116341
  entry,
@@ -116348,7 +116373,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
116348
116373
  },
116349
116374
  entry.name
116350
116375
  );
116351
- const rootInput = showRootInput ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
116376
+ const rootInput = showRootInput ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
116352
116377
  EntryNameInput,
116353
116378
  {
116354
116379
  kind: newEntry.kind,
@@ -116360,30 +116385,30 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
116360
116385
  },
116361
116386
  `new-${newEntry.kind}-root`
116362
116387
  ) : null;
116363
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
116388
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
116364
116389
  showRootInput && newEntry.kind === "directory" && rootInput,
116365
- rootLoading && rootEntries.length === 0 && !showRootInput && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Loading\u2026" }),
116366
- !rootLoading && rootEntries.length === 0 && !showRootInput && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Empty directory" }),
116390
+ rootLoading && rootEntries.length === 0 && !showRootInput && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Loading\u2026" }),
116391
+ !rootLoading && rootEntries.length === 0 && !showRootInput && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "flex h-32 items-center justify-center text-sm text-muted-foreground", children: "Empty directory" }),
116367
116392
  rootFolders.map(renderRow),
116368
116393
  showRootInput && newEntry.kind === "file" && rootInput,
116369
116394
  rootFiles.map(renderRow)
116370
116395
  ] });
116371
116396
  })(),
116372
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "min-h-[40px] flex-1" })
116397
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "min-h-[40px] flex-1" })
116373
116398
  ] }) }),
116374
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuContent2, { onCloseAutoFocus: rootMenu.flush, children: [
116375
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => requestNewEntry("", "file")), children: [
116376
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.File, { className: "size-4" }),
116399
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuContent2, { onCloseAutoFocus: rootMenu.flush, children: [
116400
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => requestNewEntry("", "file")), children: [
116401
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.File, { className: "size-4" }),
116377
116402
  "New File"
116378
116403
  ] }),
116379
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => requestNewEntry("", "directory")), children: [
116380
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.FolderPlus, { className: "size-4" }),
116404
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => requestNewEntry("", "directory")), children: [
116405
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.FolderPlus, { className: "size-4" }),
116381
116406
  "New Folder"
116382
116407
  ] }),
116383
- canPaste && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
116384
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(ContextMenuSeparator2, {}),
116385
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => void pasteInto("")), children: [
116386
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.ClipboardPaste, { className: "size-4" }),
116408
+ canPaste && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
116409
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ContextMenuSeparator2, {}),
116410
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ContextMenuItem2, { onSelect: () => rootMenu.queue(() => void pasteInto("")), children: [
116411
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.ClipboardPaste, { className: "size-4" }),
116387
116412
  "Paste"
116388
116413
  ] })
116389
116414
  ] })
@@ -116391,42 +116416,42 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
116391
116416
  ]
116392
116417
  }
116393
116418
  ),
116394
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
116419
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
116395
116420
  Dialog2,
116396
116421
  {
116397
116422
  open: pendingDelete !== null,
116398
116423
  onOpenChange: (open3) => {
116399
116424
  if (!open3) cancelDelete();
116400
116425
  },
116401
- children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogContent2, { className: "sm:max-w-[425px]", onClick: (e2) => e2.stopPropagation(), children: [
116402
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogHeader, { children: [
116403
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogTitle2, { children: [
116426
+ children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(DialogContent2, { className: "sm:max-w-[425px]", onClick: (e2) => e2.stopPropagation(), children: [
116427
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(DialogHeader, { children: [
116428
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(DialogTitle2, { children: [
116404
116429
  "Delete ",
116405
116430
  pendingDelete?.kind === "directory" ? "folder" : "file"
116406
116431
  ] }),
116407
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogDescription2, { children: [
116432
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(DialogDescription2, { children: [
116408
116433
  "Are you sure you want to delete ",
116409
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("strong", { children: pendingDelete?.path }),
116434
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("strong", { children: pendingDelete?.path }),
116410
116435
  "?"
116411
116436
  ] })
116412
116437
  ] }),
116413
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex flex-col gap-2 text-sm", children: [
116414
- pendingDelete?.kind === "directory" && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-yellow-500/30 bg-yellow-500/10 p-3", children: [
116415
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 text-yellow-500 mt-0.5" }),
116416
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: "The folder and all of its contents will be deleted from disk. This cannot be undone." })
116438
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex flex-col gap-2 text-sm", children: [
116439
+ pendingDelete?.kind === "directory" && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-yellow-500/30 bg-yellow-500/10 p-3", children: [
116440
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 text-yellow-500 mt-0.5" }),
116441
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: "The folder and all of its contents will be deleted from disk. This cannot be undone." })
116417
116442
  ] }),
116418
- pendingDelete?.kind === "file" && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-yellow-500/30 bg-yellow-500/10 p-3", children: [
116419
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 text-yellow-500 mt-0.5" }),
116420
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: "The file will be deleted from disk. This cannot be undone." })
116443
+ pendingDelete?.kind === "file" && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-yellow-500/30 bg-yellow-500/10 p-3", children: [
116444
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 text-yellow-500 mt-0.5" }),
116445
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: "The file will be deleted from disk. This cannot be undone." })
116421
116446
  ] }),
116422
- deleteError && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 p-3 text-destructive", children: [
116423
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 mt-0.5" }),
116424
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: deleteError })
116447
+ deleteError && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 p-3 text-destructive", children: [
116448
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_lucide_react7.AlertTriangle, { className: "size-4 shrink-0 mt-0.5" }),
116449
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: deleteError })
116425
116450
  ] })
116426
116451
  ] }),
116427
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogFooter, { children: [
116428
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Button, { variant: "ghost", onClick: cancelDelete, disabled: deleteSubmitting, children: "Cancel" }),
116429
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
116452
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(DialogFooter, { children: [
116453
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Button, { variant: "ghost", onClick: cancelDelete, disabled: deleteSubmitting, children: "Cancel" }),
116454
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
116430
116455
  Button,
116431
116456
  {
116432
116457
  variant: "destructive",
@@ -116447,32 +116472,32 @@ var import_react39 = __toESM(require_react(), 1);
116447
116472
 
116448
116473
  // src/dashboard/components/ImagePreview.tsx
116449
116474
  var import_react37 = __toESM(require_react(), 1);
116450
- var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1);
116475
+ var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1);
116451
116476
 
116452
116477
  // src/dashboard/components/LanguagePickerDialog.tsx
116453
116478
  var import_react38 = __toESM(require_react(), 1);
116454
- var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1);
116479
+ var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1);
116455
116480
 
116456
116481
  // src/dashboard/components/PdfPreview.tsx
116457
- var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1);
116482
+ var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
116458
116483
 
116459
116484
  // src/dashboard/components/FileViewer.tsx
116460
- var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
116485
+ var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
116461
116486
 
116462
116487
  // src/dashboard/components/QuickOpenDialog.tsx
116463
116488
  var import_react40 = __toESM(require_react(), 1);
116464
- var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
116489
+ var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
116465
116490
 
116466
116491
  // src/dashboard/components/SearchFilesDialog.tsx
116467
116492
  var import_react41 = __toESM(require_react(), 1);
116468
- var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
116493
+ var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
116469
116494
 
116470
116495
  // src/dashboard/components/WorkspacePickerDialog.tsx
116471
116496
  var import_react42 = __toESM(require_react(), 1);
116472
- var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
116497
+ var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
116473
116498
 
116474
116499
  // src/dashboard/components/WorkspaceTabNav.tsx
116475
- var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
116500
+ var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1);
116476
116501
 
116477
116502
  // src/dashboard/hooks/use-editor-history.ts
116478
116503
  var import_react43 = __toESM(require_react(), 1);
@@ -123793,6 +123818,14 @@ var WorkspaceService = class {
123793
123818
  log24.warn({ err, workspaceId }, "teardown script failed");
123794
123819
  }
123795
123820
  }
123821
+ try {
123822
+ await execFileAsync2(command, ["worktree", "unlock", worktreePath], {
123823
+ cwd: projPath,
123824
+ env: gitEnv,
123825
+ encoding: "utf-8"
123826
+ });
123827
+ } catch {
123828
+ }
123796
123829
  try {
123797
123830
  await execFileAsync2(command, ["worktree", "remove", "--force", worktreePath], {
123798
123831
  cwd: projPath,
@@ -123805,6 +123838,14 @@ var WorkspaceService = class {
123805
123838
  } catch (err) {
123806
123839
  log24.warn({ err, workspaceId, worktreePath }, "manual worktree rm failed");
123807
123840
  }
123841
+ try {
123842
+ await execFileAsync2(command, ["worktree", "unlock", worktreePath], {
123843
+ cwd: projPath,
123844
+ env: gitEnv,
123845
+ encoding: "utf-8"
123846
+ });
123847
+ } catch {
123848
+ }
123808
123849
  try {
123809
123850
  await execFileAsync2(command, ["worktree", "prune"], {
123810
123851
  cwd: projPath,