@band-app/server 0.35.0 → 0.37.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 (144) hide show
  1. package/dist/client/assets/TerminalPanel-B6hpsMbz.js +1 -0
  2. package/dist/client/assets/{_basePickBy-Dx35lEgW.js → _basePickBy-DCmd5ciV.js} +1 -1
  3. package/dist/client/assets/{_baseUniq-CMkXBei9.js → _baseUniq-D9VK2Z8h.js} +1 -1
  4. package/dist/client/assets/{arc-DK3KeNW-.js → arc-CUv7R2hs.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-VXUJARFQ-_hgteJO2.js → architectureDiagram-VXUJARFQ-p6VpjWC_.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-VD42YOAC-D4nK8NF5.js → blockDiagram-VD42YOAC-BqO2dZTh.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-YG6GDRKO-D8ZrZiTI.js → c4Diagram-YG6GDRKO-Dj3Q1dN_.js} +1 -1
  8. package/dist/client/assets/channel-30zU4uX-.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-EqwJIY-C.js → chunk-4BX2VUAB-ZCRzpI76.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-CHNR-VN7.js → chunk-55IACEB6-N8w7W4nW.js} +1 -1
  11. package/dist/client/assets/{chunk-B4BG7PRW-CVzCDJlc.js → chunk-B4BG7PRW-Bd2C6K3g.js} +1 -1
  12. package/dist/client/assets/{chunk-DI55MBZ5-oTBFM9ze.js → chunk-DI55MBZ5-CSmsIkhT.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-Bo-2Dikp.js → chunk-FMBD7UC4-CSFx-rdE.js} +1 -1
  14. package/dist/client/assets/{chunk-QN33PNHL-FqjvjGa_.js → chunk-QN33PNHL-OZhPV9ZW.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-CKO815gH.js → chunk-QZHKN3VN-CmQTIqBs.js} +1 -1
  16. package/dist/client/assets/{chunk-TZMSLE5B-3zjd2CiU.js → chunk-TZMSLE5B-CZXFZkbf.js} +1 -1
  17. package/dist/client/assets/classDiagram-2ON5EDUG-xMXNI9Qc.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-WZHVMYZB-xMXNI9Qc.js +1 -0
  19. package/dist/client/assets/clone-D1RDOFVG.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-4x0aq1rT.js → cose-bilkent-S5V4N54A-D2ZJ7fd6.js} +1 -1
  21. package/dist/client/assets/{dagre-6UL2VRFP-C685K4i3.js → dagre-6UL2VRFP-DWWSarQ5.js} +1 -1
  22. package/dist/client/assets/{diagram-PSM6KHXK-B6qGMKr7.js → diagram-PSM6KHXK-Brpmw2Hy.js} +1 -1
  23. package/dist/client/assets/{diagram-QEK2KX5R-Bfd-BbBX.js → diagram-QEK2KX5R-ChxL1lOj.js} +1 -1
  24. package/dist/client/assets/{diagram-S2PKOQOG-BwLaDVQ4.js → diagram-S2PKOQOG-CWk5ucVa.js} +1 -1
  25. package/dist/client/assets/{erDiagram-Q2GNP2WA-DoQMRnGW.js → erDiagram-Q2GNP2WA-TKtLKYBO.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-NV44I4VS-2yTNMz0q.js → flowDiagram-NV44I4VS-CNkvODlq.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-JELNMOA3-DXqi-DbY.js → ganttDiagram-JELNMOA3-GpiTT-6g.js} +1 -1
  28. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-C7CSi-Aw.js → gitGraphDiagram-V2S2FVAM-Dka5-Ebv.js} +1 -1
  29. package/dist/client/assets/{graph-DZMgyc4x.js → graph-BJfBQ-lk.js} +1 -1
  30. package/dist/client/assets/{highlighted-body-B3W2YXNL-CrQyrK8r.js → highlighted-body-B3W2YXNL-Dcw7_8Mg.js} +1 -1
  31. package/dist/client/assets/{index-1zFJtuaW.js → index-B55cfwG2.js} +1 -1
  32. package/dist/client/assets/{index-CKwJD7xz.js → index-B8-bfanc.js} +1 -1
  33. package/dist/client/assets/{index-C3LMxvTf.js → index-BBjfnWP1.js} +1 -1
  34. package/dist/client/assets/{index-DilFeEck.js → index-BVmOFLZL.js} +1 -1
  35. package/dist/client/assets/{index-BLIt4sly.js → index-Bf0KQTWS.js} +1 -1
  36. package/dist/client/assets/{index-CHYUiFs8.js → index-BqB0fXhh.js} +1 -1
  37. package/dist/client/assets/{index-DAIY6Xmz.js → index-Bw0gx-LL.js} +1 -1
  38. package/dist/client/assets/{index-CW98CyWe.js → index-C04T_A2n.js} +1 -1
  39. package/dist/client/assets/{index-CLyGoryJ.js → index-D4kWf9j1.js} +1 -1
  40. package/dist/client/assets/{index-C0k4s5Ib.js → index-D6AQfoh3.js} +1 -1
  41. package/dist/client/assets/{index-BqO-wiLH.js → index-D7ptzMHA.js} +1 -1
  42. package/dist/client/assets/{index-CIWfGOhs.js → index-DNCwYJJi.js} +1 -1
  43. package/dist/client/assets/{index-au-xsyz1.js → index-GWun5iKj.js} +1 -1
  44. package/dist/client/assets/{infoDiagram-HS3SLOUP-D_T5UsZX.js → infoDiagram-HS3SLOUP-yepsEzeD.js} +1 -1
  45. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-DVkCPjcS.js → journeyDiagram-XKPGCS4Q-Ah-IVMRC.js} +1 -1
  46. package/dist/client/assets/{kanban-definition-3W4ZIXB7-DXhSxzi6.js → kanban-definition-3W4ZIXB7-4lmmn3Kf.js} +1 -1
  47. package/dist/client/assets/{layout-Cf3mHsPQ.js → layout-WnM58jJN.js} +1 -1
  48. package/dist/client/assets/main-C-PIkr2h.css +1 -0
  49. package/dist/client/assets/{main-KoITWpfm.js → main-D7maoxCk.js} +253 -248
  50. package/dist/client/assets/{mindmap-definition-VGOIOE7T-C2IQK3iT.js → mindmap-definition-VGOIOE7T-CW03vZML.js} +1 -1
  51. package/dist/client/assets/{pieDiagram-ADFJNKIX-BGQzh0tv.js → pieDiagram-ADFJNKIX-b38HzvV9.js} +1 -1
  52. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-LdhEGcnL.js → quadrantDiagram-AYHSOK5B-D7COvUcB.js} +1 -1
  53. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-cnV0P1YE.js → requirementDiagram-UZGBJVZJ-Dbo91lMQ.js} +1 -1
  54. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BoAgFD3l.js → sankeyDiagram-TZEHDZUN-DPpuI6f6.js} +1 -1
  55. package/dist/client/assets/{sequenceDiagram-WL72ISMW-CxF4TFvD.js → sequenceDiagram-WL72ISMW-osyniVrm.js} +1 -1
  56. package/dist/client/assets/{stateDiagram-FKZM4ZOC-wf-3-MA5.js → stateDiagram-FKZM4ZOC-CEtXxDG2.js} +1 -1
  57. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DtnGHNEG.js +1 -0
  58. package/dist/client/assets/{timeline-definition-IT6M3QCI-W-q-JEwZ.js → timeline-definition-IT6M3QCI-Bbim-hJj.js} +1 -1
  59. package/dist/client/assets/{treemap-GDKQZRPO-Ct5obnww.js → treemap-GDKQZRPO-Bo5jz1c4.js} +1 -1
  60. package/dist/client/assets/{workspace._workspaceId-BUh7S3Ta.js → workspace._workspaceId-BAa7JD1w.js} +1 -1
  61. package/dist/client/assets/{workspace._workspaceId-CeUz5yMg.js → workspace._workspaceId-Dx3IQ0uo.js} +1 -1
  62. package/dist/client/assets/{xychartDiagram-PRI3JC2R-sXsIzR4l.js → xychartDiagram-PRI3JC2R-CwV1AnKv.js} +1 -1
  63. package/dist/openapi.json +18 -8
  64. package/dist/server/assets/{TerminalPanel-DlJiSPdF.js → TerminalPanel-oz5y-mkP.js} +6 -6
  65. package/dist/server/assets/{_basePickBy-DTbj2hwA.js → _basePickBy-DEzTaMUa.js} +2 -2
  66. package/dist/server/assets/{_baseUniq-pix9fqoH.js → _baseUniq-CnsXScTA.js} +1 -1
  67. package/dist/server/assets/_tanstack-start-manifest_v-CGO9e_6B.js +4 -0
  68. package/dist/server/assets/{arc-BMzVEd8n.js → arc-DFOFayWx.js} +1 -1
  69. package/dist/server/assets/{architecture-7HQA4BMR-DUwedg7M.js → architecture-7HQA4BMR-n9VmbCuR.js} +6 -6
  70. package/dist/server/assets/{architectureDiagram-VXUJARFQ-BVdUCEQJ.js → architectureDiagram-VXUJARFQ-IeNkR88v.js} +6 -6
  71. package/dist/server/assets/{blockDiagram-VD42YOAC-7f6jQaSI.js → blockDiagram-VD42YOAC-CWXr6KW7.js} +6 -6
  72. package/dist/server/assets/{c4Diagram-YG6GDRKO-Dyit97Cn.js → c4Diagram-YG6GDRKO-DIRimETA.js} +2 -2
  73. package/dist/server/assets/{channel-JMSLQrct.js → channel-Cdqq5j16.js} +1 -1
  74. package/dist/server/assets/{chunk-4BX2VUAB-DqntIakH.js → chunk-4BX2VUAB-Cozm9hqk.js} +1 -1
  75. package/dist/server/assets/{chunk-55IACEB6-CzZbYD81.js → chunk-55IACEB6-DRjrJM1L.js} +1 -1
  76. package/dist/server/assets/{chunk-B4BG7PRW-Cxs7LhtB.js → chunk-B4BG7PRW-BwiA7gAZ.js} +4 -4
  77. package/dist/server/assets/{chunk-DI55MBZ5-D82pXnd6.js → chunk-DI55MBZ5-DYx-lIkt.js} +3 -3
  78. package/dist/server/assets/{chunk-FMBD7UC4-GTnnxNFW.js → chunk-FMBD7UC4-Bd38Wnw9.js} +1 -1
  79. package/dist/server/assets/{chunk-QN33PNHL-B5OJJkcK.js → chunk-QN33PNHL-ONbSMsSY.js} +1 -1
  80. package/dist/server/assets/{chunk-QZHKN3VN-BWZGgInb.js → chunk-QZHKN3VN-fU_vVgPJ.js} +1 -1
  81. package/dist/server/assets/{chunk-TZMSLE5B-9TD1Q4Kc.js → chunk-TZMSLE5B-BBpSfNKJ.js} +1 -1
  82. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CaG6UQL6.js → classDiagram-2ON5EDUG-BLteCxZe.js} +5 -5
  83. package/dist/server/assets/{classDiagram-2ON5EDUG-CaG6UQL6.js → classDiagram-v2-WZHVMYZB-BLteCxZe.js} +5 -5
  84. package/dist/server/assets/{clone-DgeV5mya.js → clone-DHWXuNGD.js} +1 -1
  85. package/dist/server/assets/{cose-bilkent-S5V4N54A-DLdWU-b5.js → cose-bilkent-S5V4N54A-Dqv8g3XR.js} +1 -1
  86. package/dist/server/assets/{dagre-6UL2VRFP-B0nEEYz6.js → dagre-6UL2VRFP-DvvoFaVJ.js} +6 -6
  87. package/dist/server/assets/{diagram-PSM6KHXK-CheGKVJh.js → diagram-PSM6KHXK-CbKKlJvK.js} +7 -7
  88. package/dist/server/assets/{diagram-QEK2KX5R-CthFJNjb.js → diagram-QEK2KX5R-GLrYhnWw.js} +6 -6
  89. package/dist/server/assets/{diagram-S2PKOQOG-D07bUeWi.js → diagram-S2PKOQOG-uaww8JQd.js} +6 -6
  90. package/dist/server/assets/{erDiagram-Q2GNP2WA-Ci87z6gp.js → erDiagram-Q2GNP2WA-CBpgZJNk.js} +4 -4
  91. package/dist/server/assets/{flowDiagram-NV44I4VS-DivTbEjK.js → flowDiagram-NV44I4VS-DwqeGUt2.js} +5 -5
  92. package/dist/server/assets/{ganttDiagram-JELNMOA3-Bfi_i44A.js → ganttDiagram-JELNMOA3-CSDzrG3u.js} +1 -1
  93. package/dist/server/assets/{gitGraph-G5XIXVHT-DHmMmJEG.js → gitGraph-G5XIXVHT-CI6QTqC-.js} +6 -6
  94. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-Czb_wB7o.js → gitGraphDiagram-V2S2FVAM-4Hraf1YX.js} +7 -7
  95. package/dist/server/assets/{graph-GE1fpS3M.js → graph-BKeol0ik.js} +2 -2
  96. package/dist/server/assets/{highlighted-body-B3W2YXNL-B9E1TIHZ.js → highlighted-body-B3W2YXNL-C_Th2vxh.js} +1 -1
  97. package/dist/server/assets/{index-BnjbnlDe.js → index-B-VeeFTd.js} +1 -1
  98. package/dist/server/assets/{index-DkEya4LL.js → index-BQEmg9fY.js} +1 -1
  99. package/dist/server/assets/{index-BAImbDDY.js → index-BVY32Ndh.js} +1 -1
  100. package/dist/server/assets/{index-DaNksnON.js → index-BmH5PL3t.js} +1 -1
  101. package/dist/server/assets/{index-C3C8EWaf.js → index-BtAQWAP4.js} +1 -1
  102. package/dist/server/assets/{index-CdUUMlBr.js → index-CXm0C-yc.js} +1 -1
  103. package/dist/server/assets/{index-wDH-Tiw_.js → index-CklLNUhb.js} +1 -1
  104. package/dist/server/assets/{index-D6JW20YV.js → index-CoOBJObR.js} +1 -1
  105. package/dist/server/assets/{index-CA0ijKgN.js → index-DOtn1sP2.js} +1 -1
  106. package/dist/server/assets/{index-mKjVv-iY.js → index-KTMc95HN.js} +1 -1
  107. package/dist/server/assets/{index-wHjghntc.js → index-SeV-ZdZi.js} +1 -1
  108. package/dist/server/assets/{index-CJ4gZHux.js → index-WYUrghvu.js} +1 -1
  109. package/dist/server/assets/{index-7UcRPUFC.js → index-dS3n7bt3.js} +1 -1
  110. package/dist/server/assets/{info-VBDWY6EO-DojEXGtR.js → info-VBDWY6EO-qXtU7fls.js} +6 -6
  111. package/dist/server/assets/{infoDiagram-HS3SLOUP-CMrDcNjJ.js → infoDiagram-HS3SLOUP-Bnhyc8dm.js} +5 -5
  112. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-arif2oC4.js → journeyDiagram-XKPGCS4Q-DCeht2II.js} +4 -4
  113. package/dist/server/assets/{kanban-definition-3W4ZIXB7-Ue-uEk6t.js → kanban-definition-3W4ZIXB7-D2wyptyQ.js} +2 -2
  114. package/dist/server/assets/{layout-Jl8vkWvB.js → layout-D8oV2IEs.js} +4 -4
  115. package/dist/server/assets/{mermaid-3ZIDBTTL-BwTrF7xS.js → mermaid-3ZIDBTTL-BLpPLDqd.js} +1 -1
  116. package/dist/server/assets/{mermaid-parser.core-43ahKWIm.js → mermaid-parser.core-BbOvn3Uv.js} +11 -11
  117. package/dist/server/assets/{mindmap-definition-VGOIOE7T-DrtL2GtX.js → mindmap-definition-VGOIOE7T-CKJkiH58.js} +3 -3
  118. package/dist/server/assets/{packet-DYOGHKS2-qaKqUqmU.js → packet-DYOGHKS2-CnxepCEW.js} +6 -6
  119. package/dist/server/assets/{pie-VRWISCQL-sZSNfuEg.js → pie-VRWISCQL-KXauGON3.js} +6 -6
  120. package/dist/server/assets/{pieDiagram-ADFJNKIX-J90TL7dM.js → pieDiagram-ADFJNKIX-B8juLdbl.js} +7 -7
  121. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-Ciqcx945.js → quadrantDiagram-AYHSOK5B-CLY3QLCC.js} +1 -1
  122. package/dist/server/assets/{radar-ZZBFDIW7-Wmt4lMQq.js → radar-ZZBFDIW7-CIRaA_9T.js} +6 -6
  123. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-BKq7A1k7.js → requirementDiagram-UZGBJVZJ-CgDmK30l.js} +3 -3
  124. package/dist/server/assets/{router-Cj_mF2JU.js → router-G1mE-O-Q.js} +1677 -920
  125. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-B5D47iqQ.js → sankeyDiagram-TZEHDZUN-B9355ZLW.js} +1 -1
  126. package/dist/server/assets/{sequenceDiagram-WL72ISMW-YT-X3Mpm.js → sequenceDiagram-WL72ISMW-SyLdlVhU.js} +3 -3
  127. package/dist/server/assets/{stateDiagram-FKZM4ZOC-D8X_Rq8R.js → stateDiagram-FKZM4ZOC-B8krws9Z.js} +8 -8
  128. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-CHk9LeUj.js → stateDiagram-v2-4FDKWEC3-CqkUhCge.js} +4 -4
  129. package/dist/server/assets/{timeline-definition-IT6M3QCI-Cq-NLIUZ.js → timeline-definition-IT6M3QCI-eG_EzXZg.js} +2 -2
  130. package/dist/server/assets/{treemap-GDKQZRPO-f0Rq9dJ9.js → treemap-GDKQZRPO-DS3w9TMX.js} +6 -6
  131. package/dist/server/assets/{workspace._workspaceId-CzpW_AIO.js → workspace._workspaceId-Bd4v7PwG.js} +1 -1
  132. package/dist/server/assets/{workspace._workspaceId-CHDrJbrs.js → workspace._workspaceId-DMYkHS43.js} +1 -1
  133. package/dist/server/assets/{xychartDiagram-PRI3JC2R-zZQ-PeCr.js → xychartDiagram-PRI3JC2R-DAi7zkg3.js} +1 -1
  134. package/dist/server/server.js +2 -2
  135. package/dist/start-server.mjs +964 -586
  136. package/package.json +5 -5
  137. package/dist/client/assets/TerminalPanel-CX4dQ8jR.js +0 -1
  138. package/dist/client/assets/channel-DgStcXMV.js +0 -1
  139. package/dist/client/assets/classDiagram-2ON5EDUG-DqJ8lUPo.js +0 -1
  140. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DqJ8lUPo.js +0 -1
  141. package/dist/client/assets/clone-BXDlHTU2.js +0 -1
  142. package/dist/client/assets/main-CXgf0iaP.css +0 -1
  143. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BZZ4iqpR.js +0 -1
  144. package/dist/server/assets/_tanstack-start-manifest_v-B5eaoRZw.js +0 -4
@@ -702,7 +702,7 @@ function pipeReducer(prev, fn2) {
702
702
  }
703
703
  function observableToPromise(observable$1) {
704
704
  const ac = new AbortController();
705
- const promise2 = new Promise((resolve12, reject) => {
705
+ const promise2 = new Promise((resolve13, reject) => {
706
706
  let isDone = false;
707
707
  function onDone() {
708
708
  if (isDone) return;
@@ -715,7 +715,7 @@ function observableToPromise(observable$1) {
715
715
  const obs$ = observable$1.subscribe({
716
716
  next(data2) {
717
717
  isDone = true;
718
- resolve12(data2);
718
+ resolve13(data2);
719
719
  onDone();
720
720
  },
721
721
  error(data2) {
@@ -888,15 +888,15 @@ function resolveSelfTuple(promise2) {
888
888
  return Unpromise.proxy(promise2).then(() => [promise2]);
889
889
  }
890
890
  function withResolvers() {
891
- let resolve12;
891
+ let resolve13;
892
892
  let reject;
893
893
  const promise2 = new Promise((_resolve, _reject) => {
894
- resolve12 = _resolve;
894
+ resolve13 = _resolve;
895
895
  reject = _reject;
896
896
  });
897
897
  return {
898
898
  promise: promise2,
899
- resolve: resolve12,
899
+ resolve: resolve13,
900
900
  reject
901
901
  };
902
902
  }
@@ -933,8 +933,8 @@ function timerResource(ms) {
933
933
  let timer = null;
934
934
  return makeResource({ start() {
935
935
  if (timer) throw new Error("Timer already started");
936
- const promise2 = new Promise((resolve12) => {
937
- timer = setTimeout(() => resolve12(disposablePromiseTimerResult), ms);
936
+ const promise2 = new Promise((resolve13) => {
937
+ timer = setTimeout(() => resolve13(disposablePromiseTimerResult), ms);
938
938
  });
939
939
  return promise2;
940
940
  } }, () => {
@@ -979,15 +979,15 @@ function _takeWithGrace() {
979
979
  return _takeWithGrace.apply(this, arguments);
980
980
  }
981
981
  function createDeferred() {
982
- let resolve12;
982
+ let resolve13;
983
983
  let reject;
984
984
  const promise2 = new Promise((res, rej) => {
985
- resolve12 = res;
985
+ resolve13 = res;
986
986
  reject = rej;
987
987
  });
988
988
  return {
989
989
  promise: promise2,
990
- resolve: resolve12,
990
+ resolve: resolve13,
991
991
  reject
992
992
  };
993
993
  }
@@ -2057,8 +2057,8 @@ var init_resolveResponse_BLZa62_J = __esm({
2057
2057
  status: "fulfilled",
2058
2058
  value
2059
2059
  };
2060
- subscribers === null || subscribers === void 0 || subscribers.forEach(({ resolve: resolve12 }) => {
2061
- resolve12(value);
2060
+ subscribers === null || subscribers === void 0 || subscribers.forEach(({ resolve: resolve13 }) => {
2061
+ resolve13(value);
2062
2062
  });
2063
2063
  });
2064
2064
  if ("catch" in thenReturn) thenReturn.catch((reason) => {
@@ -8520,7 +8520,7 @@ var require_thread_stream = __commonJS({
8520
8520
  var { version: version2 } = require_package();
8521
8521
  var { EventEmitter } = __require("events");
8522
8522
  var { Worker: Worker2 } = __require("worker_threads");
8523
- var { join: join39 } = __require("path");
8523
+ var { join: join40 } = __require("path");
8524
8524
  var { pathToFileURL } = __require("url");
8525
8525
  var { wait } = require_wait();
8526
8526
  var {
@@ -8556,7 +8556,7 @@ var require_thread_stream = __commonJS({
8556
8556
  function createWorker(stream, opts) {
8557
8557
  const { filename, workerData } = opts;
8558
8558
  const bundlerOverrides = "__bundlerPathsOverrides" in globalThis ? globalThis.__bundlerPathsOverrides : {};
8559
- const toExecute = bundlerOverrides["thread-stream-worker"] || join39(__dirname, "lib", "worker.js");
8559
+ const toExecute = bundlerOverrides["thread-stream-worker"] || join40(__dirname, "lib", "worker.js");
8560
8560
  const worker2 = new Worker2(toExecute, {
8561
8561
  ...opts.workerOpts,
8562
8562
  trackUnmanagedFds: false,
@@ -8942,7 +8942,7 @@ var require_transport = __commonJS({
8942
8942
  "use strict";
8943
8943
  var { createRequire: createRequire2 } = __require("module");
8944
8944
  var getCallers = require_caller();
8945
- var { join: join39, isAbsolute: isAbsolute5, sep: sep9 } = __require("node:path");
8945
+ var { join: join40, isAbsolute: isAbsolute5, sep: sep9 } = __require("node:path");
8946
8946
  var sleep3 = require_atomic_sleep();
8947
8947
  var onExit = require_on_exit_leak_free();
8948
8948
  var ThreadStream = require_thread_stream();
@@ -9005,7 +9005,7 @@ var require_transport = __commonJS({
9005
9005
  throw new Error("only one of target or targets can be specified");
9006
9006
  }
9007
9007
  if (targets) {
9008
- target = bundlerOverrides["pino-worker"] || join39(__dirname, "worker.js");
9008
+ target = bundlerOverrides["pino-worker"] || join40(__dirname, "worker.js");
9009
9009
  options2.targets = targets.filter((dest) => dest.target).map((dest) => {
9010
9010
  return {
9011
9011
  ...dest,
@@ -9023,7 +9023,7 @@ var require_transport = __commonJS({
9023
9023
  });
9024
9024
  });
9025
9025
  } else if (pipeline) {
9026
- target = bundlerOverrides["pino-worker"] || join39(__dirname, "worker.js");
9026
+ target = bundlerOverrides["pino-worker"] || join40(__dirname, "worker.js");
9027
9027
  options2.pipelines = [pipeline.map((dest) => {
9028
9028
  return {
9029
9029
  ...dest,
@@ -9045,7 +9045,7 @@ var require_transport = __commonJS({
9045
9045
  return origin;
9046
9046
  }
9047
9047
  if (origin === "pino/file") {
9048
- return join39(__dirname, "..", "file.js");
9048
+ return join40(__dirname, "..", "file.js");
9049
9049
  }
9050
9050
  let fixTarget2;
9051
9051
  for (const filePath of callers) {
@@ -10034,7 +10034,7 @@ var require_safe_stable_stringify = __commonJS({
10034
10034
  return circularValue;
10035
10035
  }
10036
10036
  let res = "";
10037
- let join39 = ",";
10037
+ let join40 = ",";
10038
10038
  const originalIndentation = indentation4;
10039
10039
  if (Array.isArray(value)) {
10040
10040
  if (value.length === 0) {
@@ -10048,7 +10048,7 @@ var require_safe_stable_stringify = __commonJS({
10048
10048
  indentation4 += spacer;
10049
10049
  res += `
10050
10050
  ${indentation4}`;
10051
- join39 = `,
10051
+ join40 = `,
10052
10052
  ${indentation4}`;
10053
10053
  }
10054
10054
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -10056,13 +10056,13 @@ ${indentation4}`;
10056
10056
  for (; i < maximumValuesToStringify - 1; i++) {
10057
10057
  const tmp2 = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation4);
10058
10058
  res += tmp2 !== void 0 ? tmp2 : "null";
10059
- res += join39;
10059
+ res += join40;
10060
10060
  }
10061
10061
  const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation4);
10062
10062
  res += tmp !== void 0 ? tmp : "null";
10063
10063
  if (value.length - 1 > maximumBreadth) {
10064
10064
  const removedKeys = value.length - maximumBreadth - 1;
10065
- res += `${join39}"... ${getItemCount(removedKeys)} not stringified"`;
10065
+ res += `${join40}"... ${getItemCount(removedKeys)} not stringified"`;
10066
10066
  }
10067
10067
  if (spacer !== "") {
10068
10068
  res += `
@@ -10083,7 +10083,7 @@ ${originalIndentation}`;
10083
10083
  let separator = "";
10084
10084
  if (spacer !== "") {
10085
10085
  indentation4 += spacer;
10086
- join39 = `,
10086
+ join40 = `,
10087
10087
  ${indentation4}`;
10088
10088
  whitespace3 = " ";
10089
10089
  }
@@ -10097,13 +10097,13 @@ ${indentation4}`;
10097
10097
  const tmp = stringifyFnReplacer(key3, value, stack, replacer, spacer, indentation4);
10098
10098
  if (tmp !== void 0) {
10099
10099
  res += `${separator}${strEscape(key3)}:${whitespace3}${tmp}`;
10100
- separator = join39;
10100
+ separator = join40;
10101
10101
  }
10102
10102
  }
10103
10103
  if (keyLength > maximumBreadth) {
10104
10104
  const removedKeys = keyLength - maximumBreadth;
10105
10105
  res += `${separator}"...":${whitespace3}"${getItemCount(removedKeys)} not stringified"`;
10106
- separator = join39;
10106
+ separator = join40;
10107
10107
  }
10108
10108
  if (spacer !== "" && separator.length > 1) {
10109
10109
  res = `
@@ -10144,7 +10144,7 @@ ${originalIndentation}`;
10144
10144
  }
10145
10145
  const originalIndentation = indentation4;
10146
10146
  let res = "";
10147
- let join39 = ",";
10147
+ let join40 = ",";
10148
10148
  if (Array.isArray(value)) {
10149
10149
  if (value.length === 0) {
10150
10150
  return "[]";
@@ -10157,7 +10157,7 @@ ${originalIndentation}`;
10157
10157
  indentation4 += spacer;
10158
10158
  res += `
10159
10159
  ${indentation4}`;
10160
- join39 = `,
10160
+ join40 = `,
10161
10161
  ${indentation4}`;
10162
10162
  }
10163
10163
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -10165,13 +10165,13 @@ ${indentation4}`;
10165
10165
  for (; i < maximumValuesToStringify - 1; i++) {
10166
10166
  const tmp2 = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation4);
10167
10167
  res += tmp2 !== void 0 ? tmp2 : "null";
10168
- res += join39;
10168
+ res += join40;
10169
10169
  }
10170
10170
  const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation4);
10171
10171
  res += tmp !== void 0 ? tmp : "null";
10172
10172
  if (value.length - 1 > maximumBreadth) {
10173
10173
  const removedKeys = value.length - maximumBreadth - 1;
10174
- res += `${join39}"... ${getItemCount(removedKeys)} not stringified"`;
10174
+ res += `${join40}"... ${getItemCount(removedKeys)} not stringified"`;
10175
10175
  }
10176
10176
  if (spacer !== "") {
10177
10177
  res += `
@@ -10184,7 +10184,7 @@ ${originalIndentation}`;
10184
10184
  let whitespace3 = "";
10185
10185
  if (spacer !== "") {
10186
10186
  indentation4 += spacer;
10187
- join39 = `,
10187
+ join40 = `,
10188
10188
  ${indentation4}`;
10189
10189
  whitespace3 = " ";
10190
10190
  }
@@ -10193,7 +10193,7 @@ ${indentation4}`;
10193
10193
  const tmp = stringifyArrayReplacer(key3, value[key3], stack, replacer, spacer, indentation4);
10194
10194
  if (tmp !== void 0) {
10195
10195
  res += `${separator}${strEscape(key3)}:${whitespace3}${tmp}`;
10196
- separator = join39;
10196
+ separator = join40;
10197
10197
  }
10198
10198
  }
10199
10199
  if (spacer !== "" && separator.length > 1) {
@@ -10251,20 +10251,20 @@ ${originalIndentation}`;
10251
10251
  indentation4 += spacer;
10252
10252
  let res2 = `
10253
10253
  ${indentation4}`;
10254
- const join40 = `,
10254
+ const join41 = `,
10255
10255
  ${indentation4}`;
10256
10256
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
10257
10257
  let i = 0;
10258
10258
  for (; i < maximumValuesToStringify - 1; i++) {
10259
10259
  const tmp2 = stringifyIndent(String(i), value[i], stack, spacer, indentation4);
10260
10260
  res2 += tmp2 !== void 0 ? tmp2 : "null";
10261
- res2 += join40;
10261
+ res2 += join41;
10262
10262
  }
10263
10263
  const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation4);
10264
10264
  res2 += tmp !== void 0 ? tmp : "null";
10265
10265
  if (value.length - 1 > maximumBreadth) {
10266
10266
  const removedKeys = value.length - maximumBreadth - 1;
10267
- res2 += `${join40}"... ${getItemCount(removedKeys)} not stringified"`;
10267
+ res2 += `${join41}"... ${getItemCount(removedKeys)} not stringified"`;
10268
10268
  }
10269
10269
  res2 += `
10270
10270
  ${originalIndentation}`;
@@ -10280,16 +10280,16 @@ ${originalIndentation}`;
10280
10280
  return '"[Object]"';
10281
10281
  }
10282
10282
  indentation4 += spacer;
10283
- const join39 = `,
10283
+ const join40 = `,
10284
10284
  ${indentation4}`;
10285
10285
  let res = "";
10286
10286
  let separator = "";
10287
10287
  let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
10288
10288
  if (isTypedArrayWithEntries(value)) {
10289
- res += stringifyTypedArray(value, join39, maximumBreadth);
10289
+ res += stringifyTypedArray(value, join40, maximumBreadth);
10290
10290
  keys = keys.slice(value.length);
10291
10291
  maximumPropertiesToStringify -= value.length;
10292
- separator = join39;
10292
+ separator = join40;
10293
10293
  }
10294
10294
  if (deterministic) {
10295
10295
  keys = sort(keys, comparator);
@@ -10300,13 +10300,13 @@ ${indentation4}`;
10300
10300
  const tmp = stringifyIndent(key3, value[key3], stack, spacer, indentation4);
10301
10301
  if (tmp !== void 0) {
10302
10302
  res += `${separator}${strEscape(key3)}: ${tmp}`;
10303
- separator = join39;
10303
+ separator = join40;
10304
10304
  }
10305
10305
  }
10306
10306
  if (keyLength > maximumBreadth) {
10307
10307
  const removedKeys = keyLength - maximumBreadth;
10308
10308
  res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
10309
- separator = join39;
10309
+ separator = join40;
10310
10310
  }
10311
10311
  if (separator !== "") {
10312
10312
  res = `
@@ -11697,21 +11697,21 @@ var require_react_development = __commonJS({
11697
11697
  );
11698
11698
  actScopeDepth = prevActScopeDepth;
11699
11699
  }
11700
- function recursivelyFlushAsyncActWork(returnValue, resolve12, reject) {
11700
+ function recursivelyFlushAsyncActWork(returnValue, resolve13, reject) {
11701
11701
  var queue = ReactSharedInternals.actQueue;
11702
11702
  if (null !== queue)
11703
11703
  if (0 !== queue.length)
11704
11704
  try {
11705
11705
  flushActQueue(queue);
11706
11706
  enqueueTask(function() {
11707
- return recursivelyFlushAsyncActWork(returnValue, resolve12, reject);
11707
+ return recursivelyFlushAsyncActWork(returnValue, resolve13, reject);
11708
11708
  });
11709
11709
  return;
11710
11710
  } catch (error40) {
11711
11711
  ReactSharedInternals.thrownErrors.push(error40);
11712
11712
  }
11713
11713
  else ReactSharedInternals.actQueue = null;
11714
- 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve12(returnValue);
11714
+ 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve13(returnValue);
11715
11715
  }
11716
11716
  function flushActQueue(queue) {
11717
11717
  if (!isFlushing) {
@@ -11898,7 +11898,7 @@ var require_react_development = __commonJS({
11898
11898
  ));
11899
11899
  });
11900
11900
  return {
11901
- then: function(resolve12, reject) {
11901
+ then: function(resolve13, reject) {
11902
11902
  didAwaitActCall = true;
11903
11903
  thenable.then(
11904
11904
  function(returnValue) {
@@ -11908,7 +11908,7 @@ var require_react_development = __commonJS({
11908
11908
  flushActQueue(queue), enqueueTask(function() {
11909
11909
  return recursivelyFlushAsyncActWork(
11910
11910
  returnValue,
11911
- resolve12,
11911
+ resolve13,
11912
11912
  reject
11913
11913
  );
11914
11914
  });
@@ -11922,7 +11922,7 @@ var require_react_development = __commonJS({
11922
11922
  ReactSharedInternals.thrownErrors.length = 0;
11923
11923
  reject(_thrownError);
11924
11924
  }
11925
- } else resolve12(returnValue);
11925
+ } else resolve13(returnValue);
11926
11926
  },
11927
11927
  function(error40) {
11928
11928
  popActScope(prevActQueue, prevActScopeDepth);
@@ -11944,15 +11944,15 @@ var require_react_development = __commonJS({
11944
11944
  if (0 < ReactSharedInternals.thrownErrors.length)
11945
11945
  throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
11946
11946
  return {
11947
- then: function(resolve12, reject) {
11947
+ then: function(resolve13, reject) {
11948
11948
  didAwaitActCall = true;
11949
11949
  0 === prevActScopeDepth ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
11950
11950
  return recursivelyFlushAsyncActWork(
11951
11951
  returnValue$jscomp$0,
11952
- resolve12,
11952
+ resolve13,
11953
11953
  reject
11954
11954
  );
11955
- })) : resolve12(returnValue$jscomp$0);
11955
+ })) : resolve13(returnValue$jscomp$0);
11956
11956
  }
11957
11957
  };
11958
11958
  };
@@ -37623,11 +37623,11 @@ function __metadata(metadataKey, metadataValue) {
37623
37623
  }
37624
37624
  function __awaiter(thisArg, _arguments, P3, generator) {
37625
37625
  function adopt(value) {
37626
- return value instanceof P3 ? value : new P3(function(resolve12) {
37627
- resolve12(value);
37626
+ return value instanceof P3 ? value : new P3(function(resolve13) {
37627
+ resolve13(value);
37628
37628
  });
37629
37629
  }
37630
- return new (P3 || (P3 = Promise))(function(resolve12, reject) {
37630
+ return new (P3 || (P3 = Promise))(function(resolve13, reject) {
37631
37631
  function fulfilled(value) {
37632
37632
  try {
37633
37633
  step(generator.next(value));
@@ -37643,7 +37643,7 @@ function __awaiter(thisArg, _arguments, P3, generator) {
37643
37643
  }
37644
37644
  }
37645
37645
  function step(result) {
37646
- result.done ? resolve12(result.value) : adopt(result.value).then(fulfilled, rejected);
37646
+ result.done ? resolve13(result.value) : adopt(result.value).then(fulfilled, rejected);
37647
37647
  }
37648
37648
  step((generator = generator.apply(thisArg, _arguments || [])).next());
37649
37649
  });
@@ -37834,14 +37834,14 @@ function __asyncValues(o) {
37834
37834
  }, i);
37835
37835
  function verb(n) {
37836
37836
  i[n] = o[n] && function(v2) {
37837
- return new Promise(function(resolve12, reject) {
37838
- v2 = o[n](v2), settle(resolve12, reject, v2.done, v2.value);
37837
+ return new Promise(function(resolve13, reject) {
37838
+ v2 = o[n](v2), settle(resolve13, reject, v2.done, v2.value);
37839
37839
  });
37840
37840
  };
37841
37841
  }
37842
- function settle(resolve12, reject, d2, v2) {
37842
+ function settle(resolve13, reject, d2, v2) {
37843
37843
  Promise.resolve(v2).then(function(v3) {
37844
- resolve12({ value: v3, done: d2 });
37844
+ resolve13({ value: v3, done: d2 });
37845
37845
  }, reject);
37846
37846
  }
37847
37847
  }
@@ -72653,10 +72653,10 @@ function dataLoader(batchLoader) {
72653
72653
  resolve: throwFatalError,
72654
72654
  reject: throwFatalError
72655
72655
  };
72656
- const promise2 = new Promise((resolve12, reject) => {
72656
+ const promise2 = new Promise((resolve13, reject) => {
72657
72657
  var _pendingItems;
72658
72658
  item.reject = reject;
72659
- item.resolve = resolve12;
72659
+ item.resolve = resolve13;
72660
72660
  (_pendingItems = pendingItems) !== null && _pendingItems !== void 0 || (pendingItems = []);
72661
72661
  pendingItems.push(item);
72662
72662
  });
@@ -72780,15 +72780,15 @@ var init_loggerLink_ineCN1PO = __esm({
72780
72780
 
72781
72781
  // ../../node_modules/.pnpm/@trpc+client@11.12.0_@trpc+server@11.12.0_typescript@5.9.3__typescript@5.9.3/node_modules/@trpc/client/dist/wsLink-DSf4KOdW.mjs
72782
72782
  function withResolvers2() {
72783
- let resolve12;
72783
+ let resolve13;
72784
72784
  let reject;
72785
72785
  const promise2 = new Promise((res, rej) => {
72786
- resolve12 = res;
72786
+ resolve13 = res;
72787
72787
  reject = rej;
72788
72788
  });
72789
72789
  return {
72790
72790
  promise: promise2,
72791
- resolve: resolve12,
72791
+ resolve: resolve13,
72792
72792
  reject
72793
72793
  };
72794
72794
  }
@@ -72807,10 +72807,10 @@ async function buildConnectionMessage(connectionParams, encoder) {
72807
72807
  return encoder.encode(message);
72808
72808
  }
72809
72809
  function asyncWsOpen(ws) {
72810
- const { promise: promise2, resolve: resolve12, reject } = withResolvers2();
72810
+ const { promise: promise2, resolve: resolve13, reject } = withResolvers2();
72811
72811
  ws.addEventListener("open", () => {
72812
72812
  ws.removeEventListener("error", reject);
72813
- resolve12();
72813
+ resolve13();
72814
72814
  });
72815
72815
  ws.addEventListener("error", reject);
72816
72816
  return promise2;
@@ -72967,7 +72967,7 @@ var init_wsLink_DSf4KOdW = __esm({
72967
72967
  * @returns A cleanup function to manually remove the request.
72968
72968
  */
72969
72969
  register(message, callbacks) {
72970
- const { promise: end, resolve: resolve12 } = withResolvers2();
72970
+ const { promise: end, resolve: resolve13 } = withResolvers2();
72971
72971
  this.outgoingRequests.push({
72972
72972
  id: String(message.id),
72973
72973
  message,
@@ -72976,18 +72976,18 @@ var init_wsLink_DSf4KOdW = __esm({
72976
72976
  next: callbacks.next,
72977
72977
  complete: () => {
72978
72978
  callbacks.complete();
72979
- resolve12();
72979
+ resolve13();
72980
72980
  },
72981
72981
  error: (e) => {
72982
72982
  callbacks.error(e);
72983
- resolve12();
72983
+ resolve13();
72984
72984
  }
72985
72985
  }
72986
72986
  });
72987
72987
  return () => {
72988
72988
  this.delete(message.id);
72989
72989
  callbacks.complete();
72990
- resolve12();
72990
+ resolve13();
72991
72991
  };
72992
72992
  }
72993
72993
  /**
@@ -78772,10 +78772,10 @@ var require_core_cjs_development = __commonJS({
78772
78772
  easing,
78773
78773
  fill: "forwards"
78774
78774
  });
78775
- return new Promise((resolve12) => {
78775
+ return new Promise((resolve13) => {
78776
78776
  animation.onfinish = () => {
78777
78777
  cleanup == null ? void 0 : cleanup();
78778
- resolve12();
78778
+ resolve13();
78779
78779
  };
78780
78780
  });
78781
78781
  };
@@ -87218,7 +87218,7 @@ var require_compile = __commonJS({
87218
87218
  const schOrFunc = root.refs[ref];
87219
87219
  if (schOrFunc)
87220
87220
  return schOrFunc;
87221
- let _sch = resolve12.call(this, root, ref);
87221
+ let _sch = resolve13.call(this, root, ref);
87222
87222
  if (_sch === void 0) {
87223
87223
  const schema = (_a2 = root.localRefs) === null || _a2 === void 0 ? void 0 : _a2[ref];
87224
87224
  const { schemaId } = this.opts;
@@ -87245,7 +87245,7 @@ var require_compile = __commonJS({
87245
87245
  function sameSchemaEnv(s1, s2) {
87246
87246
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
87247
87247
  }
87248
- function resolve12(root, ref) {
87248
+ function resolve13(root, ref) {
87249
87249
  let sch;
87250
87250
  while (typeof (sch = this.refs[ref]) == "string")
87251
87251
  ref = sch;
@@ -87820,7 +87820,7 @@ var require_fast_uri = __commonJS({
87820
87820
  }
87821
87821
  return uri;
87822
87822
  }
87823
- function resolve12(baseURI, relativeURI, options2) {
87823
+ function resolve13(baseURI, relativeURI, options2) {
87824
87824
  const schemelessOptions = options2 ? Object.assign({ scheme: "null" }, options2) : { scheme: "null" };
87825
87825
  const resolved = resolveComponent(parse5(baseURI, schemelessOptions), parse5(relativeURI, schemelessOptions), schemelessOptions, true);
87826
87826
  schemelessOptions.skipEscape = true;
@@ -88047,7 +88047,7 @@ var require_fast_uri = __commonJS({
88047
88047
  var fastUri = {
88048
88048
  SCHEMES,
88049
88049
  normalize: normalize3,
88050
- resolve: resolve12,
88050
+ resolve: resolve13,
88051
88051
  resolveComponent,
88052
88052
  equal,
88053
88053
  serialize,
@@ -91037,9 +91037,9 @@ var require_dist5 = __commonJS({
91037
91037
  });
91038
91038
 
91039
91039
  // start-server.ts
91040
- import { appendFileSync, createReadStream as createReadStream3, mkdirSync as mkdirSync8, readFileSync as readFileSync9, statSync as statSync11 } from "node:fs";
91040
+ import { appendFileSync, createReadStream as createReadStream3, mkdirSync as mkdirSync8, readFileSync as readFileSync10, statSync as statSync12 } from "node:fs";
91041
91041
  import { createServer } from "node:http";
91042
- import { basename as basename5, join as join38, resolve as resolve11, sep as sep8 } from "node:path";
91042
+ import { basename as basename5, join as join39, resolve as resolve12, sep as sep8 } from "node:path";
91043
91043
 
91044
91044
  // ../../node_modules/.pnpm/@trpc+server@11.12.0_typescript@5.9.3/node_modules/@trpc/server/dist/adapters/fetch/index.mjs
91045
91045
  init_getErrorShape_vC8mUXJD();
@@ -91281,8 +91281,8 @@ function getWSConnectionHandler(opts) {
91281
91281
  try {
91282
91282
  var _usingCtx = (0, import_usingCtx2.default)();
91283
91283
  const iterator = _usingCtx.a(iteratorResource(iterable));
91284
- const abortPromise = new Promise((resolve12) => {
91285
- abortController$1.signal.onabort = () => resolve12("abort");
91284
+ const abortPromise = new Promise((resolve13) => {
91285
+ abortController$1.signal.onabort = () => resolve13("abort");
91286
91286
  });
91287
91287
  let next;
91288
91288
  let result$1;
@@ -92456,10 +92456,12 @@ function openSseStream(res) {
92456
92456
 
92457
92457
  // src/server/services/agent-session-service.ts
92458
92458
  import { randomUUID as randomUUID9 } from "node:crypto";
92459
- import { join as join24 } from "node:path";
92459
+ import { join as join25 } from "node:path";
92460
92460
 
92461
92461
  // src/server/infra/agents/acp-agent-process.ts
92462
92462
  import { spawn } from "node:child_process";
92463
+ import { realpathSync } from "node:fs";
92464
+ import { resolve as resolve3 } from "node:path";
92463
92465
  import { Readable, Writable } from "node:stream";
92464
92466
 
92465
92467
  // ../../node_modules/.pnpm/@agentclientprotocol+sdk@1.5.0_zod@3.25.76/node_modules/@agentclientprotocol/sdk/dist/schema/index.js
@@ -105777,11 +105779,11 @@ var Connection = class {
105777
105779
  const id2 = this.nextRequestId++;
105778
105780
  let cancel = () => {
105779
105781
  };
105780
- const response = new Promise((resolve12, reject) => {
105782
+ const response = new Promise((resolve13, reject) => {
105781
105783
  const pendingResponse = {
105782
105784
  resolve: (value) => {
105783
105785
  try {
105784
- resolve12(mapResponse ? mapResponse(value) : value);
105786
+ resolve13(mapResponse ? mapResponse(value) : value);
105785
105787
  } catch (error40) {
105786
105788
  reject(error40);
105787
105789
  }
@@ -105838,8 +105840,8 @@ var Connection = class {
105838
105840
  this.stream = stream;
105839
105841
  this.staticHandlers = handlers3;
105840
105842
  this.allowBatches = options2?.allowBatches ?? true;
105841
- this.closedPromise = new Promise((resolve12) => {
105842
- this.abortController.signal.addEventListener("abort", () => resolve12());
105843
+ this.closedPromise = new Promise((resolve13) => {
105844
+ this.abortController.signal.addEventListener("abort", () => resolve13());
105843
105845
  });
105844
105846
  void this.receive();
105845
105847
  }
@@ -106733,8 +106735,8 @@ var AsyncQueue = class {
106733
106735
  if (this.failed) {
106734
106736
  return Promise.reject(this.failure);
106735
106737
  }
106736
- return new Promise((resolve12, reject) => {
106737
- this.waiters.push({ resolve: resolve12, reject });
106738
+ return new Promise((resolve13, reject) => {
106739
+ this.waiters.push({ resolve: resolve13, reject });
106738
106740
  });
106739
106741
  }
106740
106742
  };
@@ -107340,8 +107342,17 @@ var legacyClientNotificationMethods = /* @__PURE__ */ new Set([
107340
107342
 
107341
107343
  // src/server/infra/agents/acp-agent-process.ts
107342
107344
  var log = createLogger("acp-agent");
107345
+ function canonicalPath(path) {
107346
+ try {
107347
+ return realpathSync(path);
107348
+ } catch {
107349
+ return resolve3(path);
107350
+ }
107351
+ }
107343
107352
  var STARTUP_TIMEOUT_MS = 6e4;
107344
107353
  var LOAD_TIMEOUT_MS = 18e4;
107354
+ var STOP_TIMEOUT_MS = 3e3;
107355
+ var liveChildren = /* @__PURE__ */ new Set();
107345
107356
  var CLIENT_CAPABILITIES = {
107346
107357
  fs: { readTextFile: false, writeTextFile: false },
107347
107358
  terminal: false,
@@ -107402,9 +107413,14 @@ var AcpAgentProcess = class _AcpAgentProcess {
107402
107413
  detached: process.platform !== "win32"
107403
107414
  });
107404
107415
  child.stderr?.on("data", stderr.push);
107416
+ liveChildren.add(child);
107417
+ child.once("exit", () => liveChildren.delete(child));
107418
+ child.once("error", () => {
107419
+ if (child.pid === void 0) liveChildren.delete(child);
107420
+ });
107405
107421
  try {
107406
- await new Promise((resolve12, reject) => {
107407
- child.once("spawn", resolve12);
107422
+ await new Promise((resolve13, reject) => {
107423
+ child.once("spawn", resolve13);
107408
107424
  child.once("error", reject);
107409
107425
  });
107410
107426
  } catch (err) {
@@ -107445,6 +107461,10 @@ var AcpAgentProcess = class _AcpAgentProcess {
107445
107461
  throw withStderr(label, err, stderr.text());
107446
107462
  }
107447
107463
  }
107464
+ /** The agent process id, while it runs. */
107465
+ get pid() {
107466
+ return this.child.pid;
107467
+ }
107448
107468
  get alive() {
107449
107469
  return !this.closed && this.child.exitCode === null && this.child.signalCode === null;
107450
107470
  }
@@ -107514,6 +107534,16 @@ var AcpAgentProcess = class _AcpAgentProcess {
107514
107534
  * the page cap bounds that walk.
107515
107535
  */
107516
107536
  async listSessions(cwd, limit = 200) {
107537
+ const dir = canonicalPath(cwd);
107538
+ const resolved = /* @__PURE__ */ new Map();
107539
+ const inDir = (s2) => {
107540
+ let path = resolved.get(s2.cwd);
107541
+ if (path === void 0) {
107542
+ path = canonicalPath(s2.cwd);
107543
+ resolved.set(s2.cwd, path);
107544
+ }
107545
+ return path === dir;
107546
+ };
107517
107547
  const sessions = [];
107518
107548
  let cursor;
107519
107549
  for (let page = 0; page < 10 && sessions.length < limit; page++) {
@@ -107523,7 +107553,7 @@ var AcpAgentProcess = class _AcpAgentProcess {
107523
107553
  this.label
107524
107554
  )
107525
107555
  );
107526
- sessions.push(...res.sessions);
107556
+ sessions.push(...res.sessions.filter(inDir));
107527
107557
  cursor = res.nextCursor;
107528
107558
  if (!cursor) break;
107529
107559
  }
@@ -107565,10 +107595,10 @@ var AcpAgentProcess = class _AcpAgentProcess {
107565
107595
  }
107566
107596
  /** Unstable `session/set_model`, for agents that expose models without a
107567
107597
  * `model` config option (Gemini CLI). */
107568
- async setModel(sessionId, modelId) {
107598
+ async setModel(sessionId, modelId2) {
107569
107599
  await this.guard(
107570
107600
  withTimeout(
107571
- this.connection.agent.request("session/set_model", { sessionId, modelId }),
107601
+ this.connection.agent.request("session/set_model", { sessionId, modelId: modelId2 }),
107572
107602
  this.label
107573
107603
  )
107574
107604
  );
@@ -107604,6 +107634,47 @@ function describe(err) {
107604
107634
  }
107605
107635
  return String(err);
107606
107636
  }
107637
+ async function stopAllAgentProcesses() {
107638
+ await Promise.all([...liveChildren].map(stopAgentProcess));
107639
+ }
107640
+ async function stopAgentProcess(child) {
107641
+ if (child.pid === void 0) {
107642
+ await new Promise((resolve13) => {
107643
+ child.once("spawn", () => resolve13());
107644
+ child.once("error", () => resolve13());
107645
+ });
107646
+ }
107647
+ const pid = child.pid;
107648
+ if (pid === void 0) return;
107649
+ const exited = new Promise((resolve13) => {
107650
+ if (child.exitCode !== null || child.signalCode !== null) resolve13();
107651
+ else child.once("exit", () => resolve13());
107652
+ });
107653
+ const running = () => {
107654
+ if (process.platform === "win32") return child.exitCode === null && child.signalCode === null;
107655
+ try {
107656
+ process.kill(-pid, 0);
107657
+ return true;
107658
+ } catch {
107659
+ return false;
107660
+ }
107661
+ };
107662
+ killTree(child);
107663
+ const deadline = Date.now() + STOP_TIMEOUT_MS;
107664
+ while (running() && Date.now() < deadline) await delay(20);
107665
+ if (running()) signalGroup(child, pid, "SIGKILL");
107666
+ await Promise.race([exited, delay(1e3)]);
107667
+ }
107668
+ function delay(ms) {
107669
+ return new Promise((resolve13) => setTimeout(resolve13, ms));
107670
+ }
107671
+ function signalGroup(child, pid, signal) {
107672
+ try {
107673
+ if (process.platform === "win32") child.kill(signal);
107674
+ else process.kill(-pid, signal);
107675
+ } catch {
107676
+ }
107677
+ }
107607
107678
  function killTree(child) {
107608
107679
  if (child.exitCode !== null || child.signalCode !== null || child.pid === void 0) return;
107609
107680
  try {
@@ -108201,7 +108272,7 @@ import { execFile } from "node:child_process";
108201
108272
  var log3 = createLogger("coding-agent:usage:opencode");
108202
108273
  function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
108203
108274
  async function listSessions3(dir) {
108204
- const sessions = await new Promise((resolve12, reject) => {
108275
+ const sessions = await new Promise((resolve13, reject) => {
108205
108276
  execFile(
108206
108277
  command,
108207
108278
  ["session", "list", "--format", "json"],
@@ -108212,9 +108283,9 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
108212
108283
  return;
108213
108284
  }
108214
108285
  try {
108215
- resolve12(JSON.parse(stdout));
108286
+ resolve13(JSON.parse(stdout));
108216
108287
  } catch {
108217
- resolve12([]);
108288
+ resolve13([]);
108218
108289
  }
108219
108290
  }
108220
108291
  );
@@ -108225,7 +108296,7 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
108225
108296
  async function getSessionUsage3(sessionId, _dir) {
108226
108297
  let raw;
108227
108298
  try {
108228
- raw = await new Promise((resolve12, reject) => {
108299
+ raw = await new Promise((resolve13, reject) => {
108229
108300
  execFile(
108230
108301
  command,
108231
108302
  ["export", sessionId],
@@ -108235,7 +108306,7 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
108235
108306
  reject(err);
108236
108307
  return;
108237
108308
  }
108238
- resolve12(stdout);
108309
+ resolve13(stdout);
108239
108310
  }
108240
108311
  );
108241
108312
  });
@@ -108371,13 +108442,13 @@ async function shellPath() {
108371
108442
  }
108372
108443
  const shell2 = defaultShell();
108373
108444
  try {
108374
- const result = await new Promise((resolve12, reject) => {
108445
+ const result = await new Promise((resolve13, reject) => {
108375
108446
  execFile2(shell2, ["-li", "-c", "echo $PATH"], { timeout: 5e3 }, (err, stdout) => {
108376
108447
  if (err) {
108377
108448
  reject(err);
108378
108449
  return;
108379
108450
  }
108380
- resolve12(stdout.trim());
108451
+ resolve13(stdout.trim());
108381
108452
  });
108382
108453
  });
108383
108454
  if (result) {
@@ -108394,13 +108465,13 @@ async function whichBinary(name3) {
108394
108465
  const resolvedPath = await shellPath();
108395
108466
  const locator = process.platform === "win32" ? "where" : "which";
108396
108467
  try {
108397
- const result = await new Promise((resolve12, reject) => {
108468
+ const result = await new Promise((resolve13, reject) => {
108398
108469
  execFile2(locator, [name3], { env: { ...process.env, PATH: resolvedPath } }, (err, stdout) => {
108399
108470
  if (err) {
108400
108471
  reject(err);
108401
108472
  return;
108402
108473
  }
108403
- resolve12(stdout.trim());
108474
+ resolve13(stdout.trim());
108404
108475
  });
108405
108476
  });
108406
108477
  const first = result.split(/\r?\n/)[0]?.trim();
@@ -108497,6 +108568,204 @@ async function resolveAcpLaunch(def2) {
108497
108568
  }
108498
108569
  }
108499
108570
 
108571
+ // src/server/infra/agents/claude-defaults.ts
108572
+ import { execFile as execFile3 } from "node:child_process";
108573
+ import { closeSync, openSync, readFileSync, readSync, realpathSync as realpathSync2, statSync as statSync4 } from "node:fs";
108574
+ import { homedir as homedir5 } from "node:os";
108575
+ import { join as join7, resolve as resolvePath2 } from "node:path";
108576
+ var EFFORT_LEVELS = /* @__PURE__ */ new Set(["low", "medium", "high", "xhigh", "max"]);
108577
+ var TRANSCRIPT_TAIL_BYTES = 256 * 1024;
108578
+ var SESSION_ID_PATTERN = /^[\w-]+$/;
108579
+ function claudeConfigDir2(env) {
108580
+ return env.CLAUDE_CONFIG_DIR || join7(homedir5(), ".claude");
108581
+ }
108582
+ function managedSettingsPath() {
108583
+ if (process.platform === "darwin") {
108584
+ return "/Library/Application Support/ClaudeCode/managed-settings.json";
108585
+ }
108586
+ if (process.platform === "linux") return "/etc/claude-code/managed-settings.json";
108587
+ return null;
108588
+ }
108589
+ function readSettings(source, cwd) {
108590
+ try {
108591
+ const text3 = source.trimStart().startsWith("{") ? source : readFileSync(resolvePath2(cwd ?? homedir5(), source.replace(/^~(?=\/)/, homedir5())), "utf8");
108592
+ const parsed = JSON.parse(text3);
108593
+ return parsed && typeof parsed === "object" ? parsed : null;
108594
+ } catch {
108595
+ return null;
108596
+ }
108597
+ }
108598
+ function mergedSettings(cwd, env, extra) {
108599
+ const sources = [
108600
+ join7(claudeConfigDir2(env), "settings.json"),
108601
+ cwd && join7(cwd, ".claude", "settings.json"),
108602
+ cwd && join7(cwd, ".claude", "settings.local.json"),
108603
+ ...extra,
108604
+ managedSettingsPath()
108605
+ ];
108606
+ const merged = {};
108607
+ for (const source of sources) {
108608
+ if (!source) continue;
108609
+ const s2 = readSettings(source, cwd);
108610
+ if (!s2) continue;
108611
+ if (s2.model !== void 0) merged.model = s2.model;
108612
+ if (s2.effortLevel !== void 0) merged.effortLevel = s2.effortLevel;
108613
+ if (s2.modelSettings && typeof s2.modelSettings === "object") {
108614
+ merged.modelSettings = { ...merged.modelSettings, ...s2.modelSettings };
108615
+ }
108616
+ if (s2.env && typeof s2.env === "object") merged.env = { ...merged.env, ...s2.env };
108617
+ }
108618
+ return merged;
108619
+ }
108620
+ function effortLevel(value) {
108621
+ if (typeof value !== "string") return void 0;
108622
+ const level = value.trim().toLowerCase();
108623
+ if (level === "med") return "medium";
108624
+ return EFFORT_LEVELS.has(level) ? level : void 0;
108625
+ }
108626
+ function modelId(value) {
108627
+ if (typeof value !== "string") return void 0;
108628
+ const model = value.trim();
108629
+ return model && model.toLowerCase() !== "default" ? model : void 0;
108630
+ }
108631
+ function modelKey(model) {
108632
+ return model.trim().toLowerCase().replace(/\[\d+m\]$|-\d+m$/, "").replace(/-\d{8}$/, "").replace(/^claude-/, "");
108633
+ }
108634
+ function perModelEffort(settings2, model) {
108635
+ if (!model || !settings2.modelSettings) return void 0;
108636
+ const key2 = modelKey(model);
108637
+ const entries = Object.entries(settings2.modelSettings);
108638
+ const exact2 = entries.find(([k4]) => modelKey(k4) === key2);
108639
+ if (exact2) return effortLevel(exact2[1]?.effortLevel);
108640
+ const family = entries.filter(([k4]) => modelKey(k4).startsWith(`${key2}-`));
108641
+ return family.length === 1 ? effortLevel(family[0]?.[1]?.effortLevel) : void 0;
108642
+ }
108643
+ function configuredClaudeDefaults(opts) {
108644
+ const settings2 = mergedSettings(opts.cwd, opts.env, opts.cli?.settings ?? []);
108645
+ const envVar = (name3) => {
108646
+ const fromSettings = settings2.env?.[name3];
108647
+ return typeof fromSettings === "string" ? fromSettings : opts.env[name3];
108648
+ };
108649
+ const model = modelId(opts.cli?.model) ?? modelId(envVar("ANTHROPIC_MODEL")) ?? modelId(settings2.model);
108650
+ const effort = effortLevel(envVar("CLAUDE_CODE_EFFORT_LEVEL")) ?? effortLevel(opts.cli?.effort) ?? perModelEffort(settings2, model) ?? effortLevel(settings2.effortLevel);
108651
+ return { model, effort };
108652
+ }
108653
+ function transcriptPath(env, cwd, sessionId) {
108654
+ let real3 = cwd;
108655
+ try {
108656
+ real3 = realpathSync2(cwd);
108657
+ } catch {
108658
+ }
108659
+ return join7(
108660
+ claudeConfigDir2(env),
108661
+ "projects",
108662
+ real3.replace(/[^a-zA-Z0-9]/g, "-"),
108663
+ `${sessionId}.jsonl`
108664
+ );
108665
+ }
108666
+ function readTail(path, bytes) {
108667
+ let fd;
108668
+ try {
108669
+ const size4 = statSync4(path).size;
108670
+ const length = Math.min(size4, bytes);
108671
+ const buf = Buffer.alloc(length);
108672
+ fd = openSync(path, "r");
108673
+ readSync(fd, buf, 0, length, size4 - length);
108674
+ return buf.toString("utf8");
108675
+ } catch {
108676
+ return null;
108677
+ } finally {
108678
+ if (fd !== void 0) closeSync(fd);
108679
+ }
108680
+ }
108681
+ function reportedClaudeDefaults(opts) {
108682
+ if (!SESSION_ID_PATTERN.test(opts.sessionId)) return {};
108683
+ const tail = readTail(transcriptPath(opts.env, opts.cwd, opts.sessionId), TRANSCRIPT_TAIL_BYTES);
108684
+ if (!tail) return {};
108685
+ const lines = tail.split("\n");
108686
+ for (let i = lines.length - 1; i >= 0; i--) {
108687
+ const line2 = lines[i];
108688
+ if (!line2?.includes('"assistant"')) continue;
108689
+ let record3;
108690
+ try {
108691
+ record3 = JSON.parse(line2);
108692
+ } catch {
108693
+ continue;
108694
+ }
108695
+ const model = record3.message?.model;
108696
+ if (record3.type !== "assistant" || record3.isSidechain === true) continue;
108697
+ if (typeof model !== "string" || model.startsWith("<")) continue;
108698
+ const at = typeof record3.timestamp === "string" ? Date.parse(record3.timestamp) : Number.NaN;
108699
+ if (opts.since !== void 0 && !(at >= opts.since)) return {};
108700
+ return { model, effort: effortLevel(record3.effort) };
108701
+ }
108702
+ return {};
108703
+ }
108704
+ function flagValue(args, i, flag) {
108705
+ const arg = args[i];
108706
+ if (arg === flag) return args[i + 1];
108707
+ if (arg?.startsWith(`${flag}=`)) return arg.slice(flag.length + 1);
108708
+ return void 0;
108709
+ }
108710
+ function parseClaudeCliArgs(commandLine) {
108711
+ const args = commandLine.split(/\s+/).filter(Boolean);
108712
+ const out = { settings: [] };
108713
+ for (let i = 0; i < args.length; i++) {
108714
+ const settings2 = flagValue(args, i, "--settings");
108715
+ if (settings2) out.settings.push(settings2);
108716
+ out.model = flagValue(args, i, "--model") ?? out.model;
108717
+ out.effort = flagValue(args, i, "--effort") ?? out.effort;
108718
+ }
108719
+ return out;
108720
+ }
108721
+ function listProcesses() {
108722
+ return new Promise((resolve13) => {
108723
+ execFile3(
108724
+ "ps",
108725
+ ["-A", "-o", "pid=,ppid=,args="],
108726
+ { maxBuffer: 16 * 1024 * 1024 },
108727
+ (err, out) => {
108728
+ if (err) return resolve13([]);
108729
+ const rows = [];
108730
+ for (const line2 of out.split("\n")) {
108731
+ const m3 = /^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(line2);
108732
+ if (m3) rows.push({ pid: Number(m3[1]), ppid: Number(m3[2]), args: m3[3] ?? "" });
108733
+ }
108734
+ resolve13(rows);
108735
+ }
108736
+ );
108737
+ });
108738
+ }
108739
+ async function findClaudeCliArgs(rootPid, sessionId) {
108740
+ if (process.platform === "win32") return null;
108741
+ const rows = await listProcesses();
108742
+ const children = /* @__PURE__ */ new Map();
108743
+ for (const row of rows) {
108744
+ const list3 = children.get(row.ppid) ?? [];
108745
+ list3.push(row);
108746
+ children.set(row.ppid, list3);
108747
+ }
108748
+ const queue = [...children.get(rootPid) ?? []];
108749
+ let found = null;
108750
+ while (queue.length > 0) {
108751
+ const row = queue.shift();
108752
+ if (!row) break;
108753
+ if (row.args.includes(sessionId)) {
108754
+ const args = parseClaudeCliArgs(row.args);
108755
+ found = found ? {
108756
+ settings: [
108757
+ ...found.settings,
108758
+ ...args.settings.filter((s2) => !found?.settings.includes(s2))
108759
+ ],
108760
+ model: args.model ?? found.model,
108761
+ effort: args.effort ?? found.effort
108762
+ } : args;
108763
+ }
108764
+ queue.push(...children.get(row.pid) ?? []);
108765
+ }
108766
+ return found;
108767
+ }
108768
+
108500
108769
  // ../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.1_@opentelemetry+api@1.9.0_@types+better-sqlite3@7.6.13_better-sql_95478898f63cc8c3fbbd0c5f8c1e464f/node_modules/drizzle-orm/entity.js
108501
108770
  var entityKind = Symbol.for("drizzle:entityKind");
108502
108771
  var hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
@@ -109053,7 +109322,7 @@ function sql(strings2, ...params) {
109053
109322
  return new SQL([new StringChunk(str)]);
109054
109323
  }
109055
109324
  _sql.raw = raw;
109056
- function join39(chunks, separator) {
109325
+ function join40(chunks, separator) {
109057
109326
  const result = [];
109058
109327
  for (const [i, chunk] of chunks.entries()) {
109059
109328
  if (i > 0 && separator !== void 0) result.push(separator);
@@ -109061,7 +109330,7 @@ function sql(strings2, ...params) {
109061
109330
  }
109062
109331
  return new SQL(result);
109063
109332
  }
109064
- _sql.join = join39;
109333
+ _sql.join = join40;
109065
109334
  function identifier7(value) {
109066
109335
  return new Name(value);
109067
109336
  }
@@ -110339,7 +110608,7 @@ function max(expression2) {
110339
110608
 
110340
110609
  // src/server/infra/db/connection.ts
110341
110610
  import { mkdirSync as mkdirSync2 } from "node:fs";
110342
- import { join as join9 } from "node:path";
110611
+ import { join as join10 } from "node:path";
110343
110612
  import { DatabaseSync as DatabaseSync2 } from "node:sqlite";
110344
110613
 
110345
110614
  // ../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.1_@opentelemetry+api@1.9.0_@types+better-sqlite3@7.6.13_better-sql_95478898f63cc8c3fbbd0c5f8c1e464f/node_modules/drizzle-orm/pg-core/foreign-keys.js
@@ -113604,7 +113873,7 @@ var SQLiteSelectQueryBuilderBase = class extends TypedQueryBuilder {
113604
113873
  const baseTableName = this.tableName;
113605
113874
  const tableName = getTableLikeName(table);
113606
113875
  for (const item of extractUsedTable(table)) this.usedTables.add(item);
113607
- if (typeof tableName === "string" && this.config.joins?.some((join39) => join39.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
113876
+ if (typeof tableName === "string" && this.config.joins?.some((join40) => join40.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
113608
113877
  if (!this.isPartialSelect) {
113609
113878
  if (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === "string") this.config.fields = { [baseTableName]: this.config.fields };
113610
113879
  if (typeof tableName === "string" && !is(table, SQL)) {
@@ -114812,7 +115081,7 @@ var SQLiteDialect = class {
114812
115081
  if (!joins2) return;
114813
115082
  const withEntries = Object.entries(joins2).filter(([_2, v2]) => v2);
114814
115083
  if (!withEntries.length) return;
114815
- return sql.join(withEntries.map(([k4, join39]) => {
115084
+ return sql.join(withEntries.map(([k4, join40]) => {
114816
115085
  const relation = tableConfig.relations[k4];
114817
115086
  const isSingle2 = is(relation, One);
114818
115087
  const targetTable = aliasedTable(relation.targetTable, `d${currentDepth + 1}`);
@@ -114823,7 +115092,7 @@ var SQLiteDialect = class {
114823
115092
  table: targetTable,
114824
115093
  mode: isSingle2 ? "first" : "many",
114825
115094
  schema,
114826
- queryConfig: join39,
115095
+ queryConfig: join40,
114827
115096
  tableConfig: schema[relation.targetTableName],
114828
115097
  relationWhere: filter,
114829
115098
  isNested: true,
@@ -114837,7 +115106,7 @@ var SQLiteDialect = class {
114837
115106
  key: k4,
114838
115107
  selection: innerQuery.selection,
114839
115108
  isArray: !isSingle2,
114840
- isOptional: (relation.optional ?? false) || join39 !== true && !!join39.where
115109
+ isOptional: (relation.optional ?? false) || join40 !== true && !!join40.where
114841
115110
  });
114842
115111
  const jsonColumns = sql.join(innerQuery.selection.map((s2) => {
114843
115112
  return sql`${sql.raw(this.escapeString(s2.key))}, ${s2.selection ? sql`${jsonb2}(${sql.identifier(s2.key)})` : sql.identifier(s2.key)}`;
@@ -115306,7 +115575,7 @@ var SQLiteUpdateBase = class extends QueryPromise {
115306
115575
  createJoin(joinType) {
115307
115576
  return ((table, on) => {
115308
115577
  const tableName = getTableLikeName(table);
115309
- if (typeof tableName === "string" && this.config.joins.some((join39) => join39.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
115578
+ if (typeof tableName === "string" && this.config.joins.some((join40) => join40.alias === tableName)) throw new Error(`Alias "${tableName}" is already used in this query`);
115310
115579
  if (typeof on === "function") {
115311
115580
  const from3 = this.config.from ? is(table, SQLiteTable) ? table[Table.Symbol.Columns] : is(table, Subquery) ? table._.selectedFields : is(table, SQLiteViewBase) ? table[ViewBaseConfig].selectedFields : void 0 : void 0;
115312
115581
  on = on(new Proxy(this.config.table[Table.Symbol.Columns], new SelectionProxyHandler({
@@ -116049,13 +116318,13 @@ function drizzle(...params) {
116049
116318
  // ../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.1_@opentelemetry+api@1.9.0_@types+better-sqlite3@7.6.13_better-sql_95478898f63cc8c3fbbd0c5f8c1e464f/node_modules/drizzle-orm/migrator.js
116050
116319
  import crypto2 from "node:crypto";
116051
116320
  import fs2, { existsSync as existsSync4, readdirSync as readdirSync2 } from "node:fs";
116052
- import { join as join7 } from "node:path";
116321
+ import { join as join8 } from "node:path";
116053
116322
  function readMigrationFiles(config2) {
116054
116323
  if (fs2.existsSync(`${config2.migrationsFolder}/meta/_journal.json`)) throw Error('We detected that you have old drizzle-kit migration folders. You must upgrade drizzle-kit and run "drizzle-kit up"');
116055
116324
  const migrationFolderTo = config2.migrationsFolder;
116056
116325
  const migrationQueries = [];
116057
116326
  const migrations = readdirSync2(migrationFolderTo).map((subdir) => ({
116058
- path: join7(migrationFolderTo, subdir, "migration.sql"),
116327
+ path: join8(migrationFolderTo, subdir, "migration.sql"),
116059
116328
  name: subdir
116060
116329
  })).filter((it) => existsSync4(it.path));
116061
116330
  migrations.sort((a2, b2) => a2.name.localeCompare(b2.name));
@@ -116086,15 +116355,15 @@ function migrate(db, config2) {
116086
116355
 
116087
116356
  // src/server/infra/db/queries/settings.ts
116088
116357
  import { randomBytes } from "node:crypto";
116089
- import { mkdirSync, readFileSync, renameSync, statSync as statSync4, writeFileSync } from "node:fs";
116090
- import { homedir as homedir5 } from "node:os";
116091
- import { dirname as dirname2, join as join8 } from "node:path";
116358
+ import { mkdirSync, readFileSync as readFileSync2, renameSync, statSync as statSync5, writeFileSync } from "node:fs";
116359
+ import { homedir as homedir6 } from "node:os";
116360
+ import { dirname as dirname2, join as join9 } from "node:path";
116092
116361
  function bandHome() {
116093
116362
  if (process.env.BAND_HOME) return process.env.BAND_HOME;
116094
- return join8(homedir5(), ".band");
116363
+ return join9(homedir6(), ".band");
116095
116364
  }
116096
116365
  function settingsFile() {
116097
- return join8(bandHome(), "settings.json");
116366
+ return join9(bandHome(), "settings.json");
116098
116367
  }
116099
116368
  function resolveAgentDefinition(settings2, agentId) {
116100
116369
  const agents = settings2.codingAgents ?? [];
@@ -116123,7 +116392,7 @@ var SettingsQueries = class {
116123
116392
  const filePath = settingsFile();
116124
116393
  let mtimeMs;
116125
116394
  try {
116126
- mtimeMs = statSync4(filePath).mtimeMs;
116395
+ mtimeMs = statSync5(filePath).mtimeMs;
116127
116396
  } catch {
116128
116397
  settingsCache.delete(filePath);
116129
116398
  return {};
@@ -116133,7 +116402,7 @@ var SettingsQueries = class {
116133
116402
  return cached2.value;
116134
116403
  }
116135
116404
  try {
116136
- const value = JSON.parse(readFileSync(filePath, "utf-8"));
116405
+ const value = JSON.parse(readFileSync2(filePath, "utf-8"));
116137
116406
  settingsCache.set(filePath, { mtimeMs, value });
116138
116407
  return value;
116139
116408
  } catch {
@@ -116160,7 +116429,7 @@ var SettingsQueries = class {
116160
116429
  const filePath = settingsFile();
116161
116430
  let existing = {};
116162
116431
  try {
116163
- existing = JSON.parse(readFileSync(filePath, "utf-8"));
116432
+ existing = JSON.parse(readFileSync2(filePath, "utf-8"));
116164
116433
  } catch {
116165
116434
  }
116166
116435
  const merged = { ...existing, ...patch };
@@ -116495,14 +116764,14 @@ var clientState = sqliteTable(
116495
116764
 
116496
116765
  // src/server/infra/db/connection.ts
116497
116766
  var log4 = createLogger("db");
116498
- var migrationsFolder = join9(import.meta.dirname, "migrations");
116767
+ var migrationsFolder = join10(import.meta.dirname, "migrations");
116499
116768
  var _db = null;
116500
116769
  var _sqlite = null;
116501
116770
  function getDb() {
116502
116771
  if (_db) return _db;
116503
116772
  const home = bandHome();
116504
116773
  mkdirSync2(home, { recursive: true });
116505
- const dbPath = join9(home, "band.db");
116774
+ const dbPath = join10(home, "band.db");
116506
116775
  _sqlite = new DatabaseSync2(dbPath);
116507
116776
  _sqlite.exec("PRAGMA journal_mode = WAL");
116508
116777
  _sqlite.exec("PRAGMA synchronous = NORMAL");
@@ -116567,7 +116836,7 @@ var ChatEventQueries = class {
116567
116836
  ...indexFields(input.event),
116568
116837
  turnStart: input.turnStart ?? false,
116569
116838
  payload: JSON.stringify(input.event),
116570
- createdAt: Date.now()
116839
+ createdAt: input.createdAt ?? Date.now()
116571
116840
  }).returning({ id: chatEvents.id }).get();
116572
116841
  return row.id;
116573
116842
  }
@@ -116685,7 +116954,8 @@ function rowsToEvents(rows) {
116685
116954
  out.push({
116686
116955
  type: "update",
116687
116956
  update: { ...run2.update, content: { type: "text", text: run2.text } },
116688
- eventId: run2.lastId
116957
+ eventId: run2.lastId,
116958
+ createdAt: run2.createdAt
116689
116959
  });
116690
116960
  run2 = null;
116691
116961
  };
@@ -116701,11 +116971,12 @@ function rowsToEvents(rows) {
116701
116971
  run2 = {
116702
116972
  update: chunk,
116703
116973
  text: chunk.content.type === "text" ? chunk.content.text : "",
116704
- lastId: row.id
116974
+ lastId: row.id,
116975
+ createdAt: row.createdAt
116705
116976
  };
116706
116977
  continue;
116707
116978
  }
116708
- out.push({ ...row.event, eventId: row.id });
116979
+ out.push({ ...row.event, eventId: row.id, createdAt: row.createdAt });
116709
116980
  }
116710
116981
  flush();
116711
116982
  return out;
@@ -117140,6 +117411,9 @@ function listenerCount() {
117140
117411
  return listeners.size;
117141
117412
  }
117142
117413
 
117414
+ // src/server/services/branch-status-poller.ts
117415
+ import { setImmediate as yieldToEventLoop } from "node:timers/promises";
117416
+
117143
117417
  // ../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.14__@ty_fa89646d7248b32d1762bf88948f6339/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
117144
117418
  var React4 = __toESM(require_react(), 1);
117145
117419
 
@@ -126290,6 +126564,10 @@ var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
126290
126564
  // ../../packages/ui/src/components/input.tsx
126291
126565
  var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
126292
126566
 
126567
+ // ../../packages/ui/src/popper.ts
126568
+ var POPPER_MAX_HEIGHT = "max-h-[min(var(--popper-max-height,100dvh),calc(var(--radix-popper-available-height)/var(--app-zoom,1)))]";
126569
+ var POPPER_MAX_WIDTH = "max-w-[calc(var(--radix-popper-available-width)/var(--app-zoom,1))]";
126570
+
126293
126571
  // ../../packages/ui/src/components/popover.tsx
126294
126572
  var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
126295
126573
  function Popover2({ ...props }) {
@@ -126311,7 +126589,9 @@ function PopoverContent2({
126311
126589
  align,
126312
126590
  sideOffset,
126313
126591
  className: cn(
126314
- "ease-out duration-150 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
126592
+ "ease-out duration-150 z-50 w-72 origin-(--radix-popover-content-transform-origin) overflow-y-auto rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
126593
+ POPPER_MAX_HEIGHT,
126594
+ POPPER_MAX_WIDTH,
126315
126595
  className
126316
126596
  ),
126317
126597
  ...props
@@ -126703,10 +126983,10 @@ var DIALOG_CONTENT_VARIANTS = {
126703
126983
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
126704
126984
  // Mobile (< lg): bottom drawer
126705
126985
  "inset-x-0 bottom-0 w-full max-w-none rounded-t-2xl border border-b-0 p-6",
126706
- "max-h-[calc(100dvh-env(safe-area-inset-top)-1.5rem)]",
126986
+ "max-h-[calc(100dvh/var(--app-zoom,1)-env(safe-area-inset-top)-1.5rem)]",
126707
126987
  "max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
126708
126988
  // Desktop (lg+): revert to the centred modal
126709
- "lg:inset-auto lg:top-[50%] lg:left-[50%] lg:bottom-auto lg:w-full lg:max-w-lg lg:max-h-[85vh] lg:translate-x-[-50%] lg:translate-y-[-50%] lg:rounded-lg lg:border-b",
126989
+ "lg:inset-auto lg:top-[50%] lg:left-[50%] lg:bottom-auto lg:w-full lg:max-w-lg lg:max-h-[calc(85vh/var(--app-zoom,1))] lg:translate-x-[-50%] lg:translate-y-[-50%] lg:rounded-lg lg:border-b",
126710
126990
  "lg:data-[state=open]:zoom-in-95 lg:data-[state=closed]:zoom-out-95"
126711
126991
  ].join(" "),
126712
126992
  "command-palette": [
@@ -126722,13 +127002,13 @@ var DIALOG_CONTENT_VARIANTS = {
126722
127002
  // floats at `bottom: var(--kb-inset)` (keyboard height; 0 when closed) so
126723
127003
  // the input clears the on-screen keyboard — see `useKeyboardInset`.
126724
127004
  "inset-x-0 bottom-[var(--kb-inset,0px)] w-full max-w-none rounded-t-2xl border border-b-0",
126725
- "max-h-[calc(100dvh-var(--kb-inset,0px)-env(safe-area-inset-top)-1.5rem)]",
127005
+ "max-h-[calc(100dvh/var(--app-zoom,1)-var(--kb-inset,0px)-env(safe-area-inset-top)-1.5rem)]",
126726
127006
  "max-lg:[&_[data-slot=command]]:flex-col-reverse",
126727
127007
  "max-lg:[&_[cmdk-input-wrapper]]:border-t max-lg:[&_[cmdk-input-wrapper]]:border-b-0",
126728
127008
  "max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
126729
127009
  // Desktop (lg+): anchored in the upper third by its TOP edge — no
126730
127010
  // `translate-y`, so the input never moves as the list grows downward.
126731
- "lg:inset-x-auto lg:bottom-auto lg:top-[12vh] lg:left-1/2 lg:w-full lg:max-w-lg lg:max-h-[70vh] lg:-translate-x-1/2 lg:rounded-lg lg:border"
127011
+ "lg:inset-x-auto lg:bottom-auto lg:top-[calc(12vh/var(--app-zoom,1))] lg:left-1/2 lg:w-full lg:max-w-lg lg:max-h-[calc(70vh/var(--app-zoom,1))] lg:-translate-x-1/2 lg:rounded-lg lg:border"
126732
127012
  ].join(" ")
126733
127013
  };
126734
127014
  var keyboardInsetHolders = /* @__PURE__ */ new Set();
@@ -126895,7 +127175,8 @@ function ContextMenuContent2({
126895
127175
  if (event.button === 2) event.stopPropagation();
126896
127176
  },
126897
127177
  className: cn(
126898
- "ease-out duration-150 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md dark:text-neutral-50 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
127178
+ "ease-out duration-150 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md dark:text-neutral-50 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
127179
+ POPPER_MAX_HEIGHT,
126899
127180
  className
126900
127181
  ),
126901
127182
  ...props
@@ -127054,9 +127335,9 @@ var defaultTimeoutProvider = {
127054
127335
  // replace the global setTimeout (like tests) won't work since we'll already
127055
127336
  // have a hard reference to the original implementation at the time when this
127056
127337
  // file was imported.
127057
- setTimeout: (callback, delay) => setTimeout(callback, delay),
127338
+ setTimeout: (callback, delay2) => setTimeout(callback, delay2),
127058
127339
  clearTimeout: (timeoutId) => clearTimeout(timeoutId),
127059
- setInterval: (callback, delay) => setInterval(callback, delay),
127340
+ setInterval: (callback, delay2) => setInterval(callback, delay2),
127060
127341
  clearInterval: (intervalId) => clearInterval(intervalId)
127061
127342
  };
127062
127343
  var TimeoutManager = class {
@@ -127082,20 +127363,20 @@ var TimeoutManager = class {
127082
127363
  this.#providerCalled = false;
127083
127364
  }
127084
127365
  }
127085
- setTimeout(callback, delay) {
127366
+ setTimeout(callback, delay2) {
127086
127367
  if (process.env.NODE_ENV !== "production") {
127087
127368
  this.#providerCalled = true;
127088
127369
  }
127089
- return this.#provider.setTimeout(callback, delay);
127370
+ return this.#provider.setTimeout(callback, delay2);
127090
127371
  }
127091
127372
  clearTimeout(timeoutId) {
127092
127373
  this.#provider.clearTimeout(timeoutId);
127093
127374
  }
127094
- setInterval(callback, delay) {
127375
+ setInterval(callback, delay2) {
127095
127376
  if (process.env.NODE_ENV !== "production") {
127096
127377
  this.#providerCalled = true;
127097
127378
  }
127098
- return this.#provider.setInterval(callback, delay);
127379
+ return this.#provider.setInterval(callback, delay2);
127099
127380
  }
127100
127381
  clearInterval(intervalId) {
127101
127382
  this.#provider.clearInterval(intervalId);
@@ -127281,8 +127562,8 @@ function hasObjectPrototype(o) {
127281
127562
  return Object.prototype.toString.call(o) === "[object Object]";
127282
127563
  }
127283
127564
  function sleep2(timeout) {
127284
- return new Promise((resolve12) => {
127285
- timeoutManager.setTimeout(resolve12, timeout);
127565
+ return new Promise((resolve13) => {
127566
+ timeoutManager.setTimeout(resolve13, timeout);
127286
127567
  });
127287
127568
  }
127288
127569
  function replaceData(prevData, data2, options2) {
@@ -127420,10 +127701,10 @@ var focusManager = new FocusManager();
127420
127701
 
127421
127702
  // ../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/thenable.js
127422
127703
  function pendingThenable() {
127423
- let resolve12;
127704
+ let resolve13;
127424
127705
  let reject;
127425
127706
  const thenable = new Promise((_resolve, _reject) => {
127426
- resolve12 = _resolve;
127707
+ resolve13 = _resolve;
127427
127708
  reject = _reject;
127428
127709
  });
127429
127710
  thenable.status = "pending";
@@ -127439,7 +127720,7 @@ function pendingThenable() {
127439
127720
  status: "fulfilled",
127440
127721
  value
127441
127722
  });
127442
- resolve12(value);
127723
+ resolve13(value);
127443
127724
  };
127444
127725
  thenable.reject = (reason) => {
127445
127726
  finalize({
@@ -127618,7 +127899,7 @@ function createRetryer(config2) {
127618
127899
  };
127619
127900
  const canContinue = () => focusManager.isFocused() && (config2.networkMode === "always" || onlineManager.isOnline()) && config2.canRun();
127620
127901
  const canStart = () => canFetch(config2.networkMode) && config2.canRun();
127621
- const resolve12 = (value) => {
127902
+ const resolve13 = (value) => {
127622
127903
  if (!isResolved()) {
127623
127904
  continueFn?.();
127624
127905
  thenable.resolve(value);
@@ -127656,13 +127937,13 @@ function createRetryer(config2) {
127656
127937
  } catch (error40) {
127657
127938
  promiseOrValue = Promise.reject(error40);
127658
127939
  }
127659
- Promise.resolve(promiseOrValue).then(resolve12).catch((error40) => {
127940
+ Promise.resolve(promiseOrValue).then(resolve13).catch((error40) => {
127660
127941
  if (isResolved()) {
127661
127942
  return;
127662
127943
  }
127663
127944
  const retry = config2.retry ?? (isServer ? 0 : 3);
127664
127945
  const retryDelay = config2.retryDelay ?? defaultRetryDelay;
127665
- const delay = typeof retryDelay === "function" ? retryDelay(failureCount, error40) : retryDelay;
127946
+ const delay2 = typeof retryDelay === "function" ? retryDelay(failureCount, error40) : retryDelay;
127666
127947
  const shouldRetry = retry === true || typeof retry === "number" && failureCount < retry || typeof retry === "function" && retry(failureCount, error40);
127667
127948
  if (isRetryCancelled || !shouldRetry) {
127668
127949
  reject(error40);
@@ -127670,7 +127951,7 @@ function createRetryer(config2) {
127670
127951
  }
127671
127952
  failureCount++;
127672
127953
  config2.onFail?.(failureCount, error40);
127673
- sleep2(delay).then(() => {
127954
+ sleep2(delay2).then(() => {
127674
127955
  return canContinue() ? void 0 : pause();
127675
127956
  }).then(() => {
127676
127957
  if (isRetryCancelled) {
@@ -130720,7 +131001,7 @@ var import_react16 = __toESM(require_react(), 1);
130720
131001
  var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
130721
131002
 
130722
131003
  // src/dashboard/components/DashboardShell.tsx
130723
- var import_react33 = __toESM(require_react(), 1);
131004
+ var import_react32 = __toESM(require_react(), 1);
130724
131005
 
130725
131006
  // src/lib/toast-obstructions.ts
130726
131007
  var import_react17 = __toESM(require_react(), 1);
@@ -131011,7 +131292,7 @@ var ClientStateStore = class {
131011
131292
  if (this.hydrated.has(groupOf(matched.workspaceId))) this.schedule(id2);
131012
131293
  }
131013
131294
  }
131014
- schedule(id2, delay = PUSH_DELAY_MS) {
131295
+ schedule(id2, delay2 = PUSH_DELAY_MS) {
131015
131296
  const existing = this.timers.get(id2);
131016
131297
  if (existing) clearTimeout(existing);
131017
131298
  this.timers.set(
@@ -131019,7 +131300,7 @@ var ClientStateStore = class {
131019
131300
  setTimeout(() => {
131020
131301
  this.timers.delete(id2);
131021
131302
  void this.push(id2);
131022
- }, delay)
131303
+ }, delay2)
131023
131304
  );
131024
131305
  }
131025
131306
  async push(id2) {
@@ -131361,13 +131642,15 @@ function pullRequestTone(pr, ciState) {
131361
131642
  }
131362
131643
  }
131363
131644
  var TONE_CLASS = {
131364
- failure: "text-red-600 dark:text-red-400",
131365
- pending: "text-yellow-700 dark:text-yellow-400",
131366
- success: "text-green-700 dark:text-green-400",
131367
- neutral: "text-muted-foreground",
131368
- merged: "text-violet-600 dark:text-violet-400",
131369
- closed: "text-muted-foreground line-through"
131370
- };
131645
+ failure: "text-red-600 border-red-600/40 bg-red-500/10 dark:text-red-400 dark:border-red-400/40",
131646
+ pending: "text-yellow-700 border-yellow-600/50 bg-yellow-500/10 dark:text-yellow-400 dark:border-yellow-400/40",
131647
+ success: "text-green-700 border-green-600/40 bg-green-500/10 dark:text-green-400 dark:border-green-400/40",
131648
+ neutral: "text-muted-foreground border-border bg-muted/50",
131649
+ merged: "text-violet-600 border-violet-600/40 bg-violet-500/10 dark:text-violet-400 dark:border-violet-400/40",
131650
+ closed: "text-muted-foreground border-border bg-muted/50 line-through"
131651
+ };
131652
+ var TAG_CLASS = "inline-flex items-center rounded border px-1 py-px leading-none";
131653
+ var NUMBER_CLASS = `${TAG_CLASS} text-[11px] font-semibold tabular-nums`;
131371
131654
  function statusLabel(pr, ciState) {
131372
131655
  if (pr.state === "merged") return "Merged";
131373
131656
  if (pr.state === "closed") return "Closed";
@@ -131400,9 +131683,9 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
131400
131683
  if (timerRef.current) clearTimeout(timerRef.current);
131401
131684
  timerRef.current = null;
131402
131685
  };
131403
- const setOpenAfter = (next, delay) => {
131686
+ const setOpenAfter = (next, delay2) => {
131404
131687
  cancelTimer();
131405
- timerRef.current = setTimeout(() => setOpen(next), delay);
131688
+ timerRef.current = setTimeout(() => setOpen(next), delay2);
131406
131689
  };
131407
131690
  (0, import_react28.useEffect)(
131408
131691
  () => () => {
@@ -131429,7 +131712,7 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
131429
131712
  "aria-expanded": open3,
131430
131713
  "data-testid": "workspace-card__pr-badge",
131431
131714
  "data-tone": tone,
131432
- className: `shrink-0 rounded-sm px-0.5 text-[11px] font-semibold leading-none tabular-nums outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring ${TONE_CLASS[tone]}`,
131715
+ className: `shrink-0 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring ${NUMBER_CLASS} ${TONE_CLASS[tone]}`,
131433
131716
  onPointerEnter: (e) => {
131434
131717
  if (e.pointerType !== "touch") setOpenAfter(true, OPEN_DELAY_MS);
131435
131718
  },
@@ -131504,7 +131787,8 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
131504
131787
  "span",
131505
131788
  {
131506
131789
  "data-testid": "pr-popover__number",
131507
- className: `font-semibold tabular-nums ${TONE_CLASS[tone]}`,
131790
+ "data-tone": tone,
131791
+ className: `${NUMBER_CLASS} ${TONE_CLASS[tone]}`,
131508
131792
  children: [
131509
131793
  "#",
131510
131794
  pr.number
@@ -131515,7 +131799,7 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
131515
131799
  "span",
131516
131800
  {
131517
131801
  "data-testid": "pr-popover__draft",
131518
- className: "rounded-sm border border-border px-1 text-[10px] font-medium text-muted-foreground",
131802
+ className: `${TAG_CLASS} border-border text-[10px] font-medium text-muted-foreground`,
131519
131803
  children: "Draft"
131520
131804
  }
131521
131805
  ),
@@ -131855,14 +132139,11 @@ var WorkspaceCard = (0, import_react29.memo)(function WorkspaceCard2({
131855
132139
  var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
131856
132140
 
131857
132141
  // src/dashboard/components/SettingsPage.tsx
131858
- var import_react32 = __toESM(require_react(), 1);
132142
+ var import_react31 = __toESM(require_react(), 1);
131859
132143
 
131860
132144
  // src/dashboard/hooks/use-terminal-daemon.ts
131861
132145
  init_trpc_client();
131862
132146
 
131863
- // src/dashboard/lib/experimental-flags.ts
131864
- var import_react31 = __toESM(require_react(), 1);
131865
-
131866
132147
  // src/dashboard/components/RestartTerminalDaemonDialog.tsx
131867
132148
  var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
131868
132149
 
@@ -131888,7 +132169,7 @@ var isElectron = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
131888
132169
 
131889
132170
  // src/dashboard/components/DiffFileContent.tsx
131890
132171
  init_dist2();
131891
- var import_react34 = __toESM(require_react(), 1);
132172
+ var import_react33 = __toESM(require_react(), 1);
131892
132173
 
131893
132174
  // src/dashboard/lib/language-map.ts
131894
132175
  var SUPPORTED_LANGUAGES = [
@@ -131993,12 +132274,12 @@ var diffTheme = EditorView.theme({
131993
132274
  });
131994
132275
 
131995
132276
  // src/dashboard/components/DiffOverviewRuler.tsx
131996
- var import_react35 = __toESM(require_react(), 1);
132277
+ var import_react34 = __toESM(require_react(), 1);
131997
132278
  var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
131998
132279
 
131999
132280
  // src/dashboard/components/FileBrowser.tsx
132000
132281
  var import_lucide_react7 = __toESM(require_lucide_react(), 1);
132001
- var import_react36 = __toESM(require_react(), 1);
132282
+ var import_react35 = __toESM(require_react(), 1);
132002
132283
  var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
132003
132284
  var DRAG_MIME = "application/x-band-tree-entry";
132004
132285
  var DRAG_EXPAND_DELAY_MS = 600;
@@ -132045,11 +132326,11 @@ function EntryNameInput({
132045
132326
  onSubmit,
132046
132327
  onCancel
132047
132328
  }) {
132048
- const [value, setValue2] = (0, import_react36.useState)(initialValue);
132049
- const [submitting, setSubmitting] = (0, import_react36.useState)(false);
132050
- const [error40, setError] = (0, import_react36.useState)(null);
132051
- const inputRef = (0, import_react36.useRef)(null);
132052
- (0, import_react36.useEffect)(() => {
132329
+ const [value, setValue2] = (0, import_react35.useState)(initialValue);
132330
+ const [submitting, setSubmitting] = (0, import_react35.useState)(false);
132331
+ const [error40, setError] = (0, import_react35.useState)(null);
132332
+ const inputRef = (0, import_react35.useRef)(null);
132333
+ (0, import_react35.useEffect)(() => {
132053
132334
  const el = inputRef.current;
132054
132335
  if (!el) return;
132055
132336
  el.focus();
@@ -132513,7 +132794,7 @@ function TreeNode2({
132513
132794
  })()
132514
132795
  ] });
132515
132796
  }
132516
- var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132797
+ var FileBrowser = (0, import_react35.forwardRef)(function FileBrowser2({
132517
132798
  workspaceId: workspaceId2,
132518
132799
  workspacePath,
132519
132800
  onOpenFile,
@@ -132525,24 +132806,24 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132525
132806
  }, handleRef) {
132526
132807
  const adapter = useAdapter();
132527
132808
  const capabilities = useCapabilities();
132528
- const [expandedPaths, setExpandedPaths] = (0, import_react36.useState)(
132809
+ const [expandedPaths, setExpandedPaths] = (0, import_react35.useState)(
132529
132810
  () => new Set(getCachedExpanded(workspaceId2))
132530
132811
  );
132531
- const [dirContents, setDirContents] = (0, import_react36.useState)(
132812
+ const [dirContents, setDirContents] = (0, import_react35.useState)(
132532
132813
  () => new Map(getCachedContents(workspaceId2))
132533
132814
  );
132534
- const [loadingPaths, setLoadingPaths] = (0, import_react36.useState)(/* @__PURE__ */ new Set());
132535
- const [newEntry, setNewEntry] = (0, import_react36.useState)(null);
132536
- const [pendingDelete, setPendingDelete] = (0, import_react36.useState)(null);
132537
- const [deleteError, setDeleteError] = (0, import_react36.useState)(null);
132538
- const [deleteSubmitting, setDeleteSubmitting] = (0, import_react36.useState)(false);
132539
- const [renamingPath, setRenamingPath] = (0, import_react36.useState)(null);
132540
- const [clipboard, setClipboard] = (0, import_react36.useState)(null);
132541
- const [operationError, setOperationError] = (0, import_react36.useState)(null);
132542
- const [treeSelection, setTreeSelection] = (0, import_react36.useState)(() => selectedFile ? { path: selectedFile, kind: "file" } : null);
132543
- const selectedRef = (0, import_react36.useRef)(null);
132544
- const prevWorkspaceRef = (0, import_react36.useRef)(workspaceId2);
132545
- (0, import_react36.useEffect)(() => {
132815
+ const [loadingPaths, setLoadingPaths] = (0, import_react35.useState)(/* @__PURE__ */ new Set());
132816
+ const [newEntry, setNewEntry] = (0, import_react35.useState)(null);
132817
+ const [pendingDelete, setPendingDelete] = (0, import_react35.useState)(null);
132818
+ const [deleteError, setDeleteError] = (0, import_react35.useState)(null);
132819
+ const [deleteSubmitting, setDeleteSubmitting] = (0, import_react35.useState)(false);
132820
+ const [renamingPath, setRenamingPath] = (0, import_react35.useState)(null);
132821
+ const [clipboard, setClipboard] = (0, import_react35.useState)(null);
132822
+ const [operationError, setOperationError] = (0, import_react35.useState)(null);
132823
+ const [treeSelection, setTreeSelection] = (0, import_react35.useState)(() => selectedFile ? { path: selectedFile, kind: "file" } : null);
132824
+ const selectedRef = (0, import_react35.useRef)(null);
132825
+ const prevWorkspaceRef = (0, import_react35.useRef)(workspaceId2);
132826
+ (0, import_react35.useEffect)(() => {
132546
132827
  if (prevWorkspaceRef.current !== workspaceId2) {
132547
132828
  prevWorkspaceRef.current = workspaceId2;
132548
132829
  setExpandedPaths(new Set(getCachedExpanded(workspaceId2)));
@@ -132558,18 +132839,18 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132558
132839
  setOperationError(null);
132559
132840
  }
132560
132841
  }, [workspaceId2]);
132561
- (0, import_react36.useEffect)(() => {
132842
+ (0, import_react35.useEffect)(() => {
132562
132843
  if (selectedFile) {
132563
132844
  setTreeSelection({ path: selectedFile, kind: "file" });
132564
132845
  }
132565
132846
  }, [selectedFile]);
132566
- const handleSelectRow = (0, import_react36.useCallback)((path, kind) => {
132847
+ const handleSelectRow = (0, import_react35.useCallback)((path, kind) => {
132567
132848
  setTreeSelection({ path, kind });
132568
132849
  }, []);
132569
- const clearTreeSelection = (0, import_react36.useCallback)(() => {
132850
+ const clearTreeSelection = (0, import_react35.useCallback)(() => {
132570
132851
  setTreeSelection(null);
132571
132852
  }, []);
132572
- const fetchDir = (0, import_react36.useCallback)(
132853
+ const fetchDir = (0, import_react35.useCallback)(
132573
132854
  async (dirPath, opts) => {
132574
132855
  if (!adapter.listWorkspaceFiles) return;
132575
132856
  const cache4 = getCachedContents(workspaceId2);
@@ -132593,10 +132874,10 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132593
132874
  },
132594
132875
  [adapter, workspaceId2]
132595
132876
  );
132596
- (0, import_react36.useEffect)(() => {
132877
+ (0, import_react35.useEffect)(() => {
132597
132878
  fetchDir("");
132598
132879
  }, [fetchDir]);
132599
- (0, import_react36.useEffect)(() => {
132880
+ (0, import_react35.useEffect)(() => {
132600
132881
  if (!adapter.subscribeFileChanges) return;
132601
132882
  const unsubscribe = adapter.subscribeFileChanges(workspaceId2, (changedPath) => {
132602
132883
  const cache4 = getCachedContents(workspaceId2);
@@ -132605,8 +132886,8 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132605
132886
  });
132606
132887
  return unsubscribe;
132607
132888
  }, [adapter, workspaceId2, fetchDir]);
132608
- const prevSelectedRef = (0, import_react36.useRef)(void 0);
132609
- (0, import_react36.useEffect)(() => {
132889
+ const prevSelectedRef = (0, import_react35.useRef)(void 0);
132890
+ (0, import_react35.useEffect)(() => {
132610
132891
  if (!selectedFile || selectedFile === prevSelectedRef.current) {
132611
132892
  prevSelectedRef.current = selectedFile;
132612
132893
  return;
@@ -132633,7 +132914,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132633
132914
  fetchDir(dir);
132634
132915
  }
132635
132916
  }, [selectedFile, workspaceId2, fetchDir]);
132636
- (0, import_react36.useEffect)(() => {
132917
+ (0, import_react35.useEffect)(() => {
132637
132918
  if (selectedFile && selectedRef.current) {
132638
132919
  const timer = setTimeout(() => {
132639
132920
  selectedRef.current?.scrollIntoView({ block: "nearest" });
@@ -132641,7 +132922,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132641
132922
  return () => clearTimeout(timer);
132642
132923
  }
132643
132924
  }, [selectedFile, dirContents]);
132644
- const toggleExpand = (0, import_react36.useCallback)(
132925
+ const toggleExpand = (0, import_react35.useCallback)(
132645
132926
  (dirPath) => {
132646
132927
  setExpandedPaths((prev) => {
132647
132928
  const next = new Set(prev);
@@ -132657,7 +132938,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132657
132938
  },
132658
132939
  [workspaceId2, fetchDir]
132659
132940
  );
132660
- const ensureDirExpanded = (0, import_react36.useCallback)(
132941
+ const ensureDirExpanded = (0, import_react35.useCallback)(
132661
132942
  async (dirPath) => {
132662
132943
  const cached2 = getCachedExpanded(workspaceId2);
132663
132944
  if (!cached2.has(dirPath)) {
@@ -132669,17 +132950,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132669
132950
  },
132670
132951
  [workspaceId2, fetchDir]
132671
132952
  );
132672
- const requestNewEntry = (0, import_react36.useCallback)(
132953
+ const requestNewEntry = (0, import_react35.useCallback)(
132673
132954
  (parentPath, kind) => {
132674
132955
  void ensureDirExpanded(parentPath);
132675
132956
  setNewEntry({ parentPath, kind });
132676
132957
  },
132677
132958
  [ensureDirExpanded]
132678
132959
  );
132679
- const cancelNewEntry = (0, import_react36.useCallback)(() => {
132960
+ const cancelNewEntry = (0, import_react35.useCallback)(() => {
132680
132961
  setNewEntry(null);
132681
132962
  }, []);
132682
- const submitNewEntry = (0, import_react36.useCallback)(
132963
+ const submitNewEntry = (0, import_react35.useCallback)(
132683
132964
  async (name3) => {
132684
132965
  if (!newEntry) return;
132685
132966
  const fullPath = newEntry.parentPath ? `${newEntry.parentPath}/${name3}` : name3;
@@ -132712,16 +132993,16 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132712
132993
  [adapter, newEntry, fetchDir, onOpenFile, workspaceId2]
132713
132994
  );
132714
132995
  const canDelete = Boolean(adapter.deleteWorkspacePath);
132715
- const requestDelete = (0, import_react36.useCallback)((path, kind) => {
132996
+ const requestDelete = (0, import_react35.useCallback)((path, kind) => {
132716
132997
  setDeleteError(null);
132717
132998
  setPendingDelete({ path, kind });
132718
132999
  }, []);
132719
- const cancelDelete = (0, import_react36.useCallback)(() => {
133000
+ const cancelDelete = (0, import_react35.useCallback)(() => {
132720
133001
  if (deleteSubmitting) return;
132721
133002
  setPendingDelete(null);
132722
133003
  setDeleteError(null);
132723
133004
  }, [deleteSubmitting]);
132724
- const confirmDelete = (0, import_react36.useCallback)(async () => {
133005
+ const confirmDelete = (0, import_react35.useCallback)(async () => {
132725
133006
  if (!pendingDelete || !adapter.deleteWorkspacePath) return;
132726
133007
  setDeleteSubmitting(true);
132727
133008
  setDeleteError(null);
@@ -132767,7 +133048,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132767
133048
  }
132768
133049
  }, [adapter, pendingDelete, fetchDir, workspaceId2, onPathDeleted]);
132769
133050
  const canRename = Boolean(adapter.renameWorkspacePath);
132770
- const remapCachesAfterMove = (0, import_react36.useCallback)(
133051
+ const remapCachesAfterMove = (0, import_react35.useCallback)(
132771
133052
  (from3, to) => {
132772
133053
  const cache4 = getCachedContents(workspaceId2);
132773
133054
  const remapped = /* @__PURE__ */ new Map();
@@ -132792,13 +133073,13 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132792
133073
  },
132793
133074
  [workspaceId2]
132794
133075
  );
132795
- const requestRename = (0, import_react36.useCallback)((path) => {
133076
+ const requestRename = (0, import_react35.useCallback)((path) => {
132796
133077
  setRenamingPath(path);
132797
133078
  }, []);
132798
- const cancelRename = (0, import_react36.useCallback)(() => {
133079
+ const cancelRename = (0, import_react35.useCallback)(() => {
132799
133080
  setRenamingPath(null);
132800
133081
  }, []);
132801
- const submitRename = (0, import_react36.useCallback)(
133082
+ const submitRename = (0, import_react35.useCallback)(
132802
133083
  async (newName) => {
132803
133084
  if (renamingPath == null || !adapter.renameWorkspacePath) return;
132804
133085
  const oldPath = renamingPath;
@@ -132813,7 +133094,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132813
133094
  },
132814
133095
  [adapter, renamingPath, fetchDir, onPathRenamed, remapCachesAfterMove, workspaceId2]
132815
133096
  );
132816
- const resolveDefaultTarget = (0, import_react36.useCallback)(() => {
133097
+ const resolveDefaultTarget = (0, import_react35.useCallback)(() => {
132817
133098
  if (treeSelection?.kind === "directory") return treeSelection.path;
132818
133099
  if (treeSelection?.kind === "file") {
132819
133100
  const idx = treeSelection.path.lastIndexOf("/");
@@ -132826,13 +133107,13 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132826
133107
  const canPaste = Boolean(
132827
133108
  clipboard && (clipboard.op === "copy" && adapter.copyWorkspacePath || clipboard.op === "cut" && adapter.renameWorkspacePath)
132828
133109
  );
132829
- const cutPath = (0, import_react36.useCallback)((path, kind) => {
133110
+ const cutPath = (0, import_react35.useCallback)((path, kind) => {
132830
133111
  setClipboard({ path, kind, op: "cut" });
132831
133112
  }, []);
132832
- const copyPath = (0, import_react36.useCallback)((path, kind) => {
133113
+ const copyPath = (0, import_react35.useCallback)((path, kind) => {
132833
133114
  setClipboard({ path, kind, op: "copy" });
132834
133115
  }, []);
132835
- const uniqueCopyName = (0, import_react36.useCallback)(
133116
+ const uniqueCopyName = (0, import_react35.useCallback)(
132836
133117
  (baseName, destFolder, kind) => {
132837
133118
  const siblings = new Set(
132838
133119
  (getCachedContents(workspaceId2).get(destFolder) ?? []).map((e) => e.name)
@@ -132850,7 +133131,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132850
133131
  },
132851
133132
  [workspaceId2]
132852
133133
  );
132853
- const canTransferInto = (0, import_react36.useCallback)(
133134
+ const canTransferInto = (0, import_react35.useCallback)(
132854
133135
  (source, destFolder, op) => {
132855
133136
  if (source.kind === "directory" && (destFolder === source.path || destFolder.startsWith(`${source.path}/`))) {
132856
133137
  return false;
@@ -132860,7 +133141,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132860
133141
  },
132861
133142
  [canCopyOp, canCutCopy]
132862
133143
  );
132863
- const transferInto = (0, import_react36.useCallback)(
133144
+ const transferInto = (0, import_react35.useCallback)(
132864
133145
  async (source, destFolder, op) => {
132865
133146
  if (!canTransferInto(source, destFolder, op)) return false;
132866
133147
  const baseName = baseNameOf(source.path);
@@ -132897,7 +133178,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132897
133178
  workspaceId2
132898
133179
  ]
132899
133180
  );
132900
- const runOperation = (0, import_react36.useCallback)(async (op) => {
133181
+ const runOperation = (0, import_react35.useCallback)(async (op) => {
132901
133182
  setOperationError(null);
132902
133183
  try {
132903
133184
  await op();
@@ -132905,7 +133186,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132905
133186
  setOperationError(err instanceof Error ? err.message : String(err));
132906
133187
  }
132907
133188
  }, []);
132908
- const pasteInto = (0, import_react36.useCallback)(
133189
+ const pasteInto = (0, import_react35.useCallback)(
132909
133190
  (destFolder) => runOperation(async () => {
132910
133191
  if (!clipboard) return;
132911
133192
  const moved = await transferInto(clipboard, destFolder, clipboard.op);
@@ -132913,22 +133194,22 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132913
133194
  }),
132914
133195
  [clipboard, runOperation, transferInto]
132915
133196
  );
132916
- const dragSourceRef = (0, import_react36.useRef)(null);
132917
- const [dropTarget, setDropTarget] = (0, import_react36.useState)(null);
132918
- const expandTimerRef = (0, import_react36.useRef)(
133197
+ const dragSourceRef = (0, import_react35.useRef)(null);
133198
+ const [dropTarget, setDropTarget] = (0, import_react35.useState)(null);
133199
+ const expandTimerRef = (0, import_react35.useRef)(
132919
133200
  null
132920
133201
  );
132921
- const clearExpandTimer = (0, import_react36.useCallback)(() => {
133202
+ const clearExpandTimer = (0, import_react35.useCallback)(() => {
132922
133203
  if (expandTimerRef.current) clearTimeout(expandTimerRef.current.timer);
132923
133204
  expandTimerRef.current = null;
132924
133205
  }, []);
132925
- (0, import_react36.useEffect)(() => clearExpandTimer, [clearExpandTimer]);
132926
- const endDrag = (0, import_react36.useCallback)(() => {
133206
+ (0, import_react35.useEffect)(() => clearExpandTimer, [clearExpandTimer]);
133207
+ const endDrag = (0, import_react35.useCallback)(() => {
132927
133208
  dragSourceRef.current = null;
132928
133209
  setDropTarget(null);
132929
133210
  clearExpandTimer();
132930
133211
  }, [clearExpandTimer]);
132931
- const dnd = (0, import_react36.useMemo)(
133212
+ const dnd = (0, import_react35.useMemo)(
132932
133213
  () => ({
132933
133214
  dropTarget,
132934
133215
  onDragStart(path, kind, e) {
@@ -132985,7 +133266,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132985
133266
  workspaceId2
132986
133267
  ]
132987
133268
  );
132988
- const refreshTree = (0, import_react36.useCallback)(async () => {
133269
+ const refreshTree = (0, import_react35.useCallback)(async () => {
132989
133270
  const cache4 = getCachedContents(workspaceId2);
132990
133271
  const expanded = getCachedExpanded(workspaceId2);
132991
133272
  for (const key2 of Array.from(cache4.keys())) {
@@ -132994,17 +133275,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
132994
133275
  setDirContents(new Map(cache4));
132995
133276
  await Promise.all(Array.from(expanded, (dir) => fetchDir(dir, { force: true })));
132996
133277
  }, [fetchDir, workspaceId2]);
132997
- const collapseAll = (0, import_react36.useCallback)(() => {
133278
+ const collapseAll = (0, import_react35.useCallback)(() => {
132998
133279
  const root = /* @__PURE__ */ new Set([""]);
132999
133280
  expandedStateCache.set(workspaceId2, root);
133000
133281
  setExpandedPaths(new Set(root));
133001
133282
  }, [workspaceId2]);
133002
133283
  const revealInFinder = capabilities.revealInFinder;
133003
- const onRevealInFinder = (0, import_react36.useMemo)(
133284
+ const onRevealInFinder = (0, import_react35.useMemo)(
133004
133285
  () => revealInFinder && workspacePath ? (path) => void revealInFinder(joinWorkspacePath(workspacePath, path)) : void 0,
133005
133286
  [revealInFinder, workspacePath]
133006
133287
  );
133007
- (0, import_react36.useImperativeHandle)(
133288
+ (0, import_react35.useImperativeHandle)(
133008
133289
  handleRef,
133009
133290
  () => ({
133010
133291
  startNewFile(parentPath) {
@@ -133277,17 +133558,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
133277
133558
  });
133278
133559
 
133279
133560
  // src/dashboard/components/FileViewer.tsx
133280
- var import_react40 = __toESM(require_react(), 1);
133561
+ var import_react39 = __toESM(require_react(), 1);
133281
133562
 
133282
133563
  // src/dashboard/lib/markdown-preview-width.ts
133283
- var import_react37 = __toESM(require_react(), 1);
133564
+ var import_react36 = __toESM(require_react(), 1);
133284
133565
 
133285
133566
  // src/dashboard/components/ImagePreview.tsx
133286
- var import_react38 = __toESM(require_react(), 1);
133567
+ var import_react37 = __toESM(require_react(), 1);
133287
133568
  var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
133288
133569
 
133289
133570
  // src/dashboard/components/LanguagePickerDialog.tsx
133290
- var import_react39 = __toESM(require_react(), 1);
133571
+ var import_react38 = __toESM(require_react(), 1);
133291
133572
  var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
133292
133573
 
133293
133574
  // src/dashboard/components/PdfPreview.tsx
@@ -133297,7 +133578,7 @@ var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
133297
133578
  var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1);
133298
133579
 
133299
133580
  // src/dashboard/components/QuickOpenDialog.tsx
133300
- var import_react41 = __toESM(require_react(), 1);
133581
+ var import_react40 = __toESM(require_react(), 1);
133301
133582
 
133302
133583
  // src/dashboard/lib/file-location.ts
133303
133584
  function formatFileLocation(filePath, line2, options2) {
@@ -133312,7 +133593,7 @@ var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1);
133312
133593
 
133313
133594
  // src/dashboard/components/SearchBar.tsx
133314
133595
  var import_lucide_react8 = __toESM(require_lucide_react(), 1);
133315
- var import_react42 = __toESM(require_react(), 1);
133596
+ var import_react41 = __toESM(require_react(), 1);
133316
133597
  var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
133317
133598
  var DEFAULT_VISIBLE_OPTIONS = ["caseSensitive", "wholeWord", "regex"];
133318
133599
  function ToggleButton({
@@ -133332,7 +133613,7 @@ function ToggleButton({
133332
133613
  }
133333
133614
  );
133334
133615
  }
133335
- var SearchBar = (0, import_react42.forwardRef)(function SearchBar2({
133616
+ var SearchBar = (0, import_react41.forwardRef)(function SearchBar2({
133336
133617
  query,
133337
133618
  onQueryChange,
133338
133619
  options: options2,
@@ -133349,18 +133630,18 @@ var SearchBar = (0, import_react42.forwardRef)(function SearchBar2({
133349
133630
  const showCase = visibleOptions.includes("caseSensitive");
133350
133631
  const showWholeWord = visibleOptions.includes("wholeWord");
133351
133632
  const showRegex = visibleOptions.includes("regex");
133352
- const inputRef = (0, import_react42.useRef)(null);
133353
- (0, import_react42.useImperativeHandle)(ref, () => ({
133633
+ const inputRef = (0, import_react41.useRef)(null);
133634
+ (0, import_react41.useImperativeHandle)(ref, () => ({
133354
133635
  focus: () => inputRef.current?.focus(),
133355
133636
  select: () => inputRef.current?.select()
133356
133637
  }));
133357
- const toggleCase = (0, import_react42.useCallback)(() => {
133638
+ const toggleCase = (0, import_react41.useCallback)(() => {
133358
133639
  onOptionsChange({ ...options2, caseSensitive: !options2.caseSensitive });
133359
133640
  }, [options2, onOptionsChange]);
133360
- const toggleWholeWord = (0, import_react42.useCallback)(() => {
133641
+ const toggleWholeWord = (0, import_react41.useCallback)(() => {
133361
133642
  onOptionsChange({ ...options2, wholeWord: !options2.wholeWord });
133362
133643
  }, [options2, onOptionsChange]);
133363
- const toggleRegex = (0, import_react42.useCallback)(() => {
133644
+ const toggleRegex = (0, import_react41.useCallback)(() => {
133364
133645
  onOptionsChange({ ...options2, regex: !options2.regex });
133365
133646
  }, [options2, onOptionsChange]);
133366
133647
  const floating = variant === "floating";
@@ -133463,27 +133744,27 @@ var SearchBar = (0, import_react42.forwardRef)(function SearchBar2({
133463
133744
  });
133464
133745
 
133465
133746
  // src/dashboard/components/SearchFilesDialog.tsx
133466
- var import_react43 = __toESM(require_react(), 1);
133747
+ var import_react42 = __toESM(require_react(), 1);
133467
133748
  var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
133468
133749
 
133469
133750
  // src/dashboard/components/WorkspacePickerDialog.tsx
133470
- var import_react44 = __toESM(require_react(), 1);
133751
+ var import_react43 = __toESM(require_react(), 1);
133471
133752
  var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1);
133472
133753
 
133473
133754
  // src/dashboard/components/WorkspaceTabNav.tsx
133474
133755
  var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1);
133475
133756
 
133476
133757
  // src/dashboard/hooks/use-diff-target.ts
133477
- var import_react45 = __toESM(require_react(), 1);
133758
+ var import_react44 = __toESM(require_react(), 1);
133478
133759
 
133479
133760
  // src/dashboard/hooks/use-editor-history.ts
133480
- var import_react46 = __toESM(require_react(), 1);
133761
+ var import_react45 = __toESM(require_react(), 1);
133481
133762
 
133482
133763
  // src/dashboard/hooks/use-search.ts
133483
- var import_react47 = __toESM(require_react(), 1);
133764
+ var import_react46 = __toESM(require_react(), 1);
133484
133765
 
133485
133766
  // src/dashboard/hooks/use-workspace-path.ts
133486
- var import_react48 = __toESM(require_react(), 1);
133767
+ var import_react47 = __toESM(require_react(), 1);
133487
133768
 
133488
133769
  // ../../node_modules/.pnpm/marked@15.0.12/node_modules/marked/lib/marked.esm.js
133489
133770
  function _getDefaults() {
@@ -135661,10 +135942,10 @@ var cmdClickLinkTheme = EditorView.baseTheme({
135661
135942
 
135662
135943
  // src/server/infra/git/git-client.ts
135663
135944
  import { readFile, stat as stat3 } from "node:fs/promises";
135664
- import { join as join10 } from "node:path";
135945
+ import { join as join11 } from "node:path";
135665
135946
 
135666
135947
  // src/server/infra/process/exec-file-worker.ts
135667
- import { execFile as execFile3 } from "node:child_process";
135948
+ import { execFile as execFile4 } from "node:child_process";
135668
135949
  import { Worker } from "node:worker_threads";
135669
135950
  var log6 = createLogger("exec-file-worker");
135670
135951
  var WORKER_SOURCE = `
@@ -135687,13 +135968,13 @@ var startFailures = 0;
135687
135968
  var nextId = 1;
135688
135969
  var pending = /* @__PURE__ */ new Map();
135689
135970
  function execOnThisThread({ command, args, options: options2 }) {
135690
- return new Promise((resolve12) => {
135971
+ return new Promise((resolve13) => {
135691
135972
  try {
135692
- execFile3(command, args, { ...options2, encoding: "utf8" }, (err, stdout, stderr) => {
135693
- resolve12({ stdout, stderr, error: err ? err.message : null });
135973
+ execFile4(command, args, { ...options2, encoding: "utf8" }, (err, stdout, stderr) => {
135974
+ resolve13({ stdout, stderr, error: err ? err.message : null });
135694
135975
  });
135695
135976
  } catch (err) {
135696
- resolve12({ stdout: "", stderr: "", error: err instanceof Error ? err.message : String(err) });
135977
+ resolve13({ stdout: "", stderr: "", error: err instanceof Error ? err.message : String(err) });
135697
135978
  }
135698
135979
  });
135699
135980
  }
@@ -135731,11 +136012,11 @@ function getWorker() {
135731
136012
  workerUnavailable = true;
135732
136013
  log6.warn("exec-file worker won't start, spawning on the main thread");
135733
136014
  }
135734
- for (const { request, resolve: resolve12 } of orphaned) void execOnThisThread(request).then(resolve12);
136015
+ for (const { request, resolve: resolve13 } of orphaned) void execOnThisThread(request).then(resolve13);
135735
136016
  return;
135736
136017
  }
135737
- for (const { resolve: resolve12 } of orphaned) {
135738
- resolve12({ stdout: "", stderr: "", error: `exec-file worker exited (code ${code})` });
136018
+ for (const { resolve: resolve13 } of orphaned) {
136019
+ resolve13({ stdout: "", stderr: "", error: `exec-file worker exited (code ${code})` });
135739
136020
  }
135740
136021
  });
135741
136022
  worker = created;
@@ -135750,8 +136031,8 @@ function execFileOffThread(command, args, options2) {
135750
136031
  };
135751
136032
  const target = getWorker();
135752
136033
  if (!target) return execOnThisThread(request);
135753
- return new Promise((resolve12) => {
135754
- pending.set(request.id, { request, resolve: resolve12 });
136034
+ return new Promise((resolve13) => {
136035
+ pending.set(request.id, { request, resolve: resolve13 });
135755
136036
  if (pending.size === 1) target.ref();
135756
136037
  target.postMessage(request);
135757
136038
  });
@@ -135787,7 +136068,7 @@ function detachedShaLabel(head) {
135787
136068
  return sha ? `${DETACHED_BRANCH_PREFIX}${sha}` : "detached";
135788
136069
  }
135789
136070
  async function resolveDetachedBranch(worktreePath) {
135790
- const dotGit = join10(worktreePath, ".git");
136071
+ const dotGit = join11(worktreePath, ".git");
135791
136072
  let gitdir;
135792
136073
  try {
135793
136074
  const st = await stat3(dotGit);
@@ -135804,7 +136085,7 @@ async function resolveDetachedBranch(worktreePath) {
135804
136085
  }
135805
136086
  for (const rebaseDir of ["rebase-merge", "rebase-apply"]) {
135806
136087
  try {
135807
- const headName = await readFile(join10(gitdir, rebaseDir, "head-name"), "utf-8");
136088
+ const headName = await readFile(join11(gitdir, rebaseDir, "head-name"), "utf-8");
135808
136089
  const name3 = headName.trim();
135809
136090
  return name3.startsWith("refs/heads/") ? name3.slice("refs/heads/".length) : name3;
135810
136091
  } catch {
@@ -136088,7 +136369,7 @@ async function mapLimited(items, limit, fn2) {
136088
136369
  }
136089
136370
 
136090
136371
  // src/server/services/plugin-host-service.ts
136091
- import { execFile as execFile4 } from "node:child_process";
136372
+ import { execFile as execFile5 } from "node:child_process";
136092
136373
 
136093
136374
  // ../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
136094
136375
  var external_exports2 = {};
@@ -140512,10 +140793,10 @@ var BUNDLED_PLUGINS = [
140512
140793
 
140513
140794
  // src/server/infra/db/queries/projects.ts
140514
140795
  import { existsSync as existsSync5 } from "node:fs";
140515
- import { join as join11 } from "node:path";
140796
+ import { join as join12 } from "node:path";
140516
140797
  function reconcileKindForProject(project) {
140517
140798
  if (!existsSync5(project.path)) return false;
140518
- const detectedKind = existsSync5(join11(project.path, ".git")) ? "git" : "plain";
140799
+ const detectedKind = existsSync5(join12(project.path, ".git")) ? "git" : "plain";
140519
140800
  if (detectedKind === project.kind) return false;
140520
140801
  project.kind = detectedKind;
140521
140802
  if (detectedKind === "plain") {
@@ -140830,7 +141111,7 @@ var WorkspaceQueries = class {
140830
141111
  };
140831
141112
 
140832
141113
  // src/server/services/settings-service.ts
140833
- import { join as join12 } from "node:path";
141114
+ import { join as join13 } from "node:path";
140834
141115
  var settingsUpdateInput = external_exports2.object({
140835
141116
  // `null` is allowed because the dashboard sends `worktreesDir.trim() || null`
140836
141117
  // when the field is cleared — the legacy behavior preserved across the
@@ -140998,7 +141279,7 @@ var SettingsService = class _SettingsService {
140998
141279
  */
140999
141280
  worktreesDir() {
141000
141281
  const raw = this.rawWorktreesDir();
141001
- return raw ?? join12(bandHome(), "worktrees");
141282
+ return raw ?? join13(bandHome(), "worktrees");
141002
141283
  }
141003
141284
  /**
141004
141285
  * Return the raw `worktreesDir` value from settings without applying the
@@ -141348,10 +141629,10 @@ var PluginHost = class {
141348
141629
  warn: (message, ...args) => pluginLog.warn(message, ...args),
141349
141630
  error: (message, ...args) => pluginLog.error(message, ...args)
141350
141631
  },
141351
- exec: (bin, args, options2) => new Promise((resolve12, reject) => {
141632
+ exec: (bin, args, options2) => new Promise((resolve13, reject) => {
141352
141633
  const env = { ...process.env, ...options2.env };
141353
141634
  env.PATH = prependBinDirs(process.env.PATH);
141354
- execFile4(
141635
+ execFile5(
141355
141636
  bin,
141356
141637
  args,
141357
141638
  { cwd: options2.cwd, env, maxBuffer: EXEC_MAX_BUFFER, timeout: options2.timeoutMs },
@@ -141360,7 +141641,7 @@ var PluginHost = class {
141360
141641
  reject(new Error(stderr.trim() || err.message));
141361
141642
  return;
141362
141643
  }
141363
- resolve12({ stdout, stderr });
141644
+ resolve13({ stdout, stderr });
141364
141645
  }
141365
141646
  );
141366
141647
  }),
@@ -141721,25 +142002,27 @@ async function getBatchedCIStatuses(workspaces) {
141721
142002
  var pollCount = 0;
141722
142003
  var latestPollByWorkspace = /* @__PURE__ */ new Map();
141723
142004
  var pendingCIByWorkspace = /* @__PURE__ */ new Map();
142005
+ function isSameStatus(row, git, ci) {
142006
+ return row.gitDirty === git.dirty && row.gitConflict === git.conflict && row.gitAhead === git.ahead && row.gitBehind === git.behind && row.gitSyncState === git.sync_state && row.ciState === ci.state && row.ciUrl === (ci.url ?? null) && JSON.stringify(row.ciPr ?? null) === JSON.stringify(ci.pr ?? null);
142007
+ }
141724
142008
  async function pollWorkspace(ws, newCI) {
141725
142009
  const poll = ++pollCount;
141726
142010
  latestPollByWorkspace.set(ws.workspaceId, poll);
141727
142011
  if (newCI) pendingCIByWorkspace.set(ws.workspaceId, newCI);
141728
142012
  const git = await getGitStatus(ws.worktreePath);
142013
+ await yieldToEventLoop();
141729
142014
  if (latestPollByWorkspace.get(ws.workspaceId) !== poll) return;
141730
142015
  const db = getDb();
142016
+ const existing = db.select().from(branchStatuses).where(eq(branchStatuses.workspaceId, ws.workspaceId)).get();
141731
142017
  const pendingCI = pendingCIByWorkspace.get(ws.workspaceId);
141732
142018
  let ci = newCI ?? pendingCI ?? { state: "none" };
141733
- if (!newCI && !pendingCI) {
141734
- const existing = db.select({
141735
- ciState: branchStatuses.ciState,
141736
- ciUrl: branchStatuses.ciUrl,
141737
- ciPr: branchStatuses.ciPr
141738
- }).from(branchStatuses).where(eq(branchStatuses.workspaceId, ws.workspaceId)).get();
141739
- if (existing) {
141740
- ci = { state: existing.ciState, url: existing.ciUrl, pr: existing.ciPr };
141741
- }
142019
+ if (!newCI && !pendingCI && existing) {
142020
+ ci = { state: existing.ciState, url: existing.ciUrl, pr: existing.ciPr };
141742
142021
  }
142022
+ if (pendingCIByWorkspace.get(ws.workspaceId) === ci) {
142023
+ pendingCIByWorkspace.delete(ws.workspaceId);
142024
+ }
142025
+ if (existing && isSameStatus(existing, git, ci)) return;
141743
142026
  const now = Date.now();
141744
142027
  db.insert(branchStatuses).values({
141745
142028
  workspaceId: ws.workspaceId,
@@ -141766,14 +142049,11 @@ async function pollWorkspace(ws, newCI) {
141766
142049
  updatedAt: now
141767
142050
  }
141768
142051
  }).run();
141769
- if (pendingCIByWorkspace.get(ws.workspaceId) === ci) {
141770
- pendingCIByWorkspace.delete(ws.workspaceId);
141771
- }
141772
142052
  emit({
141773
142053
  kind: "branch-status",
141774
142054
  workspaceId: ws.workspaceId,
141775
142055
  git,
141776
- ci
142056
+ ci: { state: ci.state, url: ci.url ?? null, pr: ci.pr ?? null }
141777
142057
  });
141778
142058
  }
141779
142059
  var refreshesInFlight = /* @__PURE__ */ new Map();
@@ -141872,15 +142152,15 @@ var branchStatusPoller = new BranchStatusPoller();
141872
142152
  import { randomUUID as randomUUID7 } from "node:crypto";
141873
142153
 
141874
142154
  // src/server/infra/setup/project-config.ts
141875
- import { existsSync as existsSync6, readFileSync as readFileSync2 } from "node:fs";
141876
- import { join as join13 } from "node:path";
142155
+ import { existsSync as existsSync6, readFileSync as readFileSync3 } from "node:fs";
142156
+ import { join as join14 } from "node:path";
141877
142157
  var log10 = createLogger("project-config");
141878
142158
  function loadProjectConfig(worktreePath, projectPath) {
141879
142159
  for (const base3 of [worktreePath, projectPath]) {
141880
- const configPath = join13(base3, ".band", "config.json");
142160
+ const configPath = join14(base3, ".band", "config.json");
141881
142161
  if (existsSync6(configPath)) {
141882
142162
  try {
141883
- return JSON.parse(readFileSync2(configPath, "utf-8"));
142163
+ return JSON.parse(readFileSync3(configPath, "utf-8"));
141884
142164
  } catch {
141885
142165
  }
141886
142166
  }
@@ -141889,11 +142169,11 @@ function loadProjectConfig(worktreePath, projectPath) {
141889
142169
  }
141890
142170
  var CopyFilesSchema = external_exports2.array(external_exports2.string()).optional();
141891
142171
  function getCopyFiles(projectPath) {
141892
- const configPath = join13(projectPath, ".band", "config.json");
142172
+ const configPath = join14(projectPath, ".band", "config.json");
141893
142173
  if (!existsSync6(configPath)) return null;
141894
142174
  let raw;
141895
142175
  try {
141896
- raw = JSON.parse(readFileSync2(configPath, "utf-8"));
142176
+ raw = JSON.parse(readFileSync3(configPath, "utf-8"));
141897
142177
  } catch (err) {
141898
142178
  log10.warn({ err, configPath }, "failed to parse .band/config.json");
141899
142179
  return null;
@@ -141916,16 +142196,16 @@ import { spawn as spawn2 } from "node:child_process";
141916
142196
  import { watch } from "node:fs";
141917
142197
  import { mkdtemp, readFile as readFile2, rm, writeFile } from "node:fs/promises";
141918
142198
  import { tmpdir } from "node:os";
141919
- import { join as join14 } from "node:path";
142199
+ import { join as join15 } from "node:path";
141920
142200
  var log11 = createLogger("script-run");
141921
142201
  var POLL_MS = 1e3;
141922
142202
  function quote2(value) {
141923
142203
  return `'${value.replace(/'/g, `'\\''`)}'`;
141924
142204
  }
141925
142205
  async function prepareScriptRun(script, label) {
141926
- const dir = await mkdtemp(join14(tmpdir(), "band-script-"));
141927
- const scriptFile = join14(dir, `${label}.sh`);
141928
- const exitFile = join14(dir, "exit-code");
142206
+ const dir = await mkdtemp(join15(tmpdir(), "band-script-"));
142207
+ const scriptFile = join15(dir, `${label}.sh`);
142208
+ const exitFile = join15(dir, "exit-code");
141929
142209
  const partialFile = `${exitFile}.partial`;
141930
142210
  const onExit = [
141931
142211
  "rc=$?",
@@ -141945,8 +142225,8 @@ async function prepareScriptRun(script, label) {
141945
142225
  let poll = null;
141946
142226
  let disposed = false;
141947
142227
  let resolveExited;
141948
- const exited = new Promise((resolve12) => {
141949
- resolveExited = resolve12;
142228
+ const exited = new Promise((resolve13) => {
142229
+ resolveExited = resolve13;
141950
142230
  });
141951
142231
  const check2 = () => {
141952
142232
  if (disposed) return;
@@ -141984,7 +142264,7 @@ async function prepareScriptRun(script, label) {
141984
142264
  return { command, exited, dispose };
141985
142265
  }
141986
142266
  function runScriptHidden(script, cwd, timeoutMs) {
141987
- return new Promise((resolve12, reject) => {
142267
+ return new Promise((resolve13, reject) => {
141988
142268
  const { PORT: _port, ...parentEnv } = process.env;
141989
142269
  const child = spawn2(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", script], {
141990
142270
  cwd,
@@ -141994,7 +142274,7 @@ function runScriptHidden(script, cwd, timeoutMs) {
141994
142274
  });
141995
142275
  const timer = timeoutMs === void 0 ? void 0 : setTimeout(() => {
141996
142276
  child.kill();
141997
- resolve12(null);
142277
+ resolve13(null);
141998
142278
  }, timeoutMs);
141999
142279
  child.on("error", (err) => {
142000
142280
  clearTimeout(timer);
@@ -142002,13 +142282,13 @@ function runScriptHidden(script, cwd, timeoutMs) {
142002
142282
  });
142003
142283
  child.on("exit", (code) => {
142004
142284
  clearTimeout(timer);
142005
- resolve12(code ?? 1);
142285
+ resolve13(code ?? 1);
142006
142286
  });
142007
142287
  });
142008
142288
  }
142009
142289
 
142010
142290
  // src/server/infra/terminals/daemon/daemon-backend.ts
142011
- import { existsSync as existsSync7, lstatSync as lstatSync2, readFileSync as readFileSync4 } from "node:fs";
142291
+ import { existsSync as existsSync7, lstatSync as lstatSync2, readFileSync as readFileSync5 } from "node:fs";
142012
142292
 
142013
142293
  // src/server/infra/terminals/terminal-backend.ts
142014
142294
  var AttachGate = class {
@@ -142071,10 +142351,10 @@ import {
142071
142351
  lstatSync,
142072
142352
  mkdirSync as mkdirSync3,
142073
142353
  renameSync as renameSync2,
142074
- statSync as statSync5,
142354
+ statSync as statSync6,
142075
142355
  unlinkSync
142076
142356
  } from "node:fs";
142077
- import { dirname as dirname3, join as join15 } from "node:path";
142357
+ import { dirname as dirname3, join as join16 } from "node:path";
142078
142358
  function ensurePrivateDir(dir) {
142079
142359
  mkdirSync3(dir, { recursive: true, mode: 448 });
142080
142360
  const stats = lstatSync(dir);
@@ -142128,30 +142408,30 @@ function errorCode(err) {
142128
142408
  // src/server/infra/terminals/daemon/protocol.ts
142129
142409
  import { createHash } from "node:crypto";
142130
142410
  import { readdirSync as readdirSync3 } from "node:fs";
142131
- import { basename, dirname as dirname4, join as join16 } from "node:path";
142411
+ import { basename, dirname as dirname4, join as join17 } from "node:path";
142132
142412
  var PROTOCOL_VERSION2 = 1;
142133
142413
  var EXIT_ENDPOINT_OCCUPIED = 20;
142134
142414
  var EXIT_NODE_PTY_UNAVAILABLE = 22;
142135
142415
  var ENDPOINT_LOST_ERROR = "Terminal daemon no longer owns its endpoint";
142136
142416
  var MAX_SOCKET_PATH_BYTES = 103;
142137
142417
  function daemonPaths(runDir, version2 = PROTOCOL_VERSION2) {
142138
- const inRunDir = join16(runDir, `terminal-daemon-v${version2}.sock`);
142139
- const socket = Buffer.byteLength(inRunDir) <= MAX_SOCKET_PATH_BYTES ? inRunDir : join16(
142418
+ const inRunDir = join17(runDir, `terminal-daemon-v${version2}.sock`);
142419
+ const socket = Buffer.byteLength(inRunDir) <= MAX_SOCKET_PATH_BYTES ? inRunDir : join17(
142140
142420
  shortSocketDir(),
142141
142421
  `td-${createHash("sha256").update(runDir).digest("hex").slice(0, 16)}-v${version2}.sock`
142142
142422
  );
142143
142423
  return {
142144
142424
  runDir,
142145
142425
  socket,
142146
- token: join16(runDir, `terminal-daemon-v${version2}.token`),
142147
- pid: join16(runDir, `terminal-daemon-v${version2}.pid`),
142148
- log: join16(runDir, "terminal-daemon.log")
142426
+ token: join17(runDir, `terminal-daemon-v${version2}.token`),
142427
+ pid: join17(runDir, `terminal-daemon-v${version2}.pid`),
142428
+ log: join17(runDir, "terminal-daemon.log")
142149
142429
  };
142150
142430
  }
142151
142431
  function retiredDaemonPaths(paths, tag2) {
142152
142432
  return {
142153
142433
  ...paths,
142154
- socket: join16(dirname4(paths.socket), `.r${tag2}`),
142434
+ socket: join17(dirname4(paths.socket), `.r${tag2}`),
142155
142435
  token: paths.token.replace(/\.token$/, `.retired-${tag2}.token`),
142156
142436
  pid: paths.pid.replace(/\.pid$/, `.retired-${tag2}.pid`)
142157
142437
  };
@@ -142167,7 +142447,7 @@ function listRetiredDaemons(paths) {
142167
142447
  return names.filter((name3) => name3.startsWith(prefix) && name3.endsWith(".token")).map((name3) => name3.slice(prefix.length, -".token".length)).filter((tag2) => /^[0-9a-f]{8}$/.test(tag2)).map((tag2) => retiredDaemonPaths(paths, tag2));
142168
142448
  }
142169
142449
  function shortSocketDir() {
142170
- return join16("/tmp", `band-${process.getuid?.() ?? "user"}`);
142450
+ return join17("/tmp", `band-${process.getuid?.() ?? "user"}`);
142171
142451
  }
142172
142452
  function writeFrame(socket, message) {
142173
142453
  socket.write(`${JSON.stringify(message)}
@@ -142301,13 +142581,13 @@ var DaemonClient = class _DaemonClient {
142301
142581
  request(t4, params) {
142302
142582
  if (this.closed) return Promise.reject(new Error("Terminal daemon connection closed"));
142303
142583
  const id2 = this.nextId++;
142304
- return new Promise((resolve12, reject) => {
142584
+ return new Promise((resolve13, reject) => {
142305
142585
  const timer = setTimeout(() => {
142306
142586
  this.pending.delete(id2);
142307
142587
  reject(new Error(`Terminal daemon did not answer ${t4} within ${REQUEST_TIMEOUT_MS} ms`));
142308
142588
  }, REQUEST_TIMEOUT_MS);
142309
142589
  this.pending.set(id2, {
142310
- resolve: resolve12,
142590
+ resolve: resolve13,
142311
142591
  reject,
142312
142592
  timer
142313
142593
  });
@@ -142369,7 +142649,7 @@ async function retireDaemon(paths, buildId) {
142369
142649
  return false;
142370
142650
  } catch (err) {
142371
142651
  if (!(err instanceof DaemonRejectedError) || err.reply.t !== "mismatch") throw err;
142372
- const closed = new Promise((resolve12) => socket.once("close", () => resolve12()));
142652
+ const closed = new Promise((resolve13) => socket.once("close", () => resolve13()));
142373
142653
  writeFrame(socket, { t: "shutdown" });
142374
142654
  await closed;
142375
142655
  return true;
@@ -142405,7 +142685,7 @@ function openSocket(path) {
142405
142685
  } catch (err) {
142406
142686
  return Promise.reject(err);
142407
142687
  }
142408
- return new Promise((resolve12, reject) => {
142688
+ return new Promise((resolve13, reject) => {
142409
142689
  const socket = connect({ path });
142410
142690
  const timer = setTimeout(() => {
142411
142691
  socket.destroy();
@@ -142414,7 +142694,7 @@ function openSocket(path) {
142414
142694
  socket.once("connect", () => {
142415
142695
  clearTimeout(timer);
142416
142696
  socket.removeAllListeners("error");
142417
- resolve12(socket);
142697
+ resolve13(socket);
142418
142698
  });
142419
142699
  socket.once("error", (err) => {
142420
142700
  clearTimeout(timer);
@@ -142428,7 +142708,7 @@ function openSocket(path) {
142428
142708
  });
142429
142709
  }
142430
142710
  function handshake(socket, frames, hello) {
142431
- return new Promise((resolve12, reject) => {
142711
+ return new Promise((resolve13, reject) => {
142432
142712
  const timer = setTimeout(() => {
142433
142713
  socket.destroy();
142434
142714
  reject(new Error("Terminal daemon did not answer hello"));
@@ -142445,7 +142725,7 @@ function handshake(socket, frames, hello) {
142445
142725
  clearTimeout(timer);
142446
142726
  socket.off("close", onClose);
142447
142727
  const reply = frame;
142448
- if (reply.t === "ready") resolve12(reply);
142728
+ if (reply.t === "ready") resolve13(reply);
142449
142729
  else reject(new DaemonRejectedError(reply));
142450
142730
  });
142451
142731
  writeFrame(socket, hello);
@@ -142462,7 +142742,7 @@ async function readToken3(path) {
142462
142742
 
142463
142743
  // src/server/infra/terminals/daemon/launch.ts
142464
142744
  import { fork } from "node:child_process";
142465
- import { closeSync, openSync, readFileSync as readFileSync3, renameSync as renameSync3, statSync as statSync6 } from "node:fs";
142745
+ import { closeSync as closeSync2, openSync as openSync2, readFileSync as readFileSync4, renameSync as renameSync3, statSync as statSync7 } from "node:fs";
142466
142746
  var READY_TIMEOUT_MS = 1e4;
142467
142747
  var LOG_ROTATE_BYTES = 5 * 1024 * 1024;
142468
142748
  var LOG_TAIL_BYTES = 4096;
@@ -142470,10 +142750,10 @@ async function launchDaemon(options2) {
142470
142750
  const { entry, paths, cwd, buildId, supersede } = options2;
142471
142751
  ensurePrivateDir(paths.runDir);
142472
142752
  rotateLog(paths.log);
142473
- const logFd = openSync(paths.log, "a", 384);
142753
+ const logFd = openSync2(paths.log, "a", 384);
142474
142754
  let logSize = 0;
142475
142755
  try {
142476
- logSize = statSync6(paths.log).size;
142756
+ logSize = statSync7(paths.log).size;
142477
142757
  } catch {
142478
142758
  }
142479
142759
  const child = (() => {
@@ -142487,12 +142767,12 @@ async function launchDaemon(options2) {
142487
142767
  env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" }
142488
142768
  });
142489
142769
  } finally {
142490
- closeSync(logFd);
142770
+ closeSync2(logFd);
142491
142771
  }
142492
142772
  })();
142493
142773
  child.on("error", () => {
142494
142774
  });
142495
- return new Promise((resolve12, reject) => {
142775
+ return new Promise((resolve13, reject) => {
142496
142776
  let settled = false;
142497
142777
  const finish = (outcome) => {
142498
142778
  if (settled) return;
@@ -142510,7 +142790,7 @@ async function launchDaemon(options2) {
142510
142790
  Daemon log:
142511
142791
  ${tail}`) : outcome);
142512
142792
  } else {
142513
- resolve12(outcome);
142793
+ resolve13(outcome);
142514
142794
  }
142515
142795
  };
142516
142796
  const onMessage = (message) => {
@@ -142543,13 +142823,13 @@ async function retireOlderDaemons(runDir, buildId) {
142543
142823
  }
142544
142824
  function rotateLog(path) {
142545
142825
  try {
142546
- if (statSync6(path).size > LOG_ROTATE_BYTES) renameSync3(path, `${path}.1`);
142826
+ if (statSync7(path).size > LOG_ROTATE_BYTES) renameSync3(path, `${path}.1`);
142547
142827
  } catch {
142548
142828
  }
142549
142829
  }
142550
142830
  function readLogTail(path, from3) {
142551
142831
  try {
142552
- const content2 = readFileSync3(path, "utf8").slice(from3);
142832
+ const content2 = readFileSync4(path, "utf8").slice(from3);
142553
142833
  return content2.slice(-LOG_TAIL_BYTES).trim();
142554
142834
  } catch {
142555
142835
  return "";
@@ -143050,7 +143330,7 @@ function sameEntry(a2, b2) {
143050
143330
  }
143051
143331
  function readPidRecord(path) {
143052
143332
  try {
143053
- return JSON.parse(readFileSync4(path, "utf8"));
143333
+ return JSON.parse(readFileSync5(path, "utf8"));
143054
143334
  } catch {
143055
143335
  return null;
143056
143336
  }
@@ -143058,7 +143338,7 @@ function readPidRecord(path) {
143058
143338
  async function waitForExit(pid, timeoutMs) {
143059
143339
  const deadline = Date.now() + timeoutMs;
143060
143340
  while (isProcessAlive(pid) && Date.now() < deadline) {
143061
- await new Promise((resolve12) => setTimeout(resolve12, RESTART_POLL_INTERVAL_MS));
143341
+ await new Promise((resolve13) => setTimeout(resolve13, RESTART_POLL_INTERVAL_MS));
143062
143342
  }
143063
143343
  }
143064
143344
  function isProcessAlive(pid) {
@@ -143076,7 +143356,7 @@ async function connectWithRetry(paths, buildId) {
143076
143356
  } catch (err) {
143077
143357
  const retriable = err instanceof DaemonRejectedError && err.reply.t === "rejected" && attempt < CONNECT_RETRIES;
143078
143358
  if (!retriable) throw err;
143079
- await new Promise((resolve12) => setTimeout(resolve12, CONNECT_RETRY_DELAY_MS));
143359
+ await new Promise((resolve13) => setTimeout(resolve13, CONNECT_RETRY_DELAY_MS));
143080
143360
  }
143081
143361
  }
143082
143362
  }
@@ -143092,22 +143372,22 @@ function stringEnv(env) {
143092
143372
  import { randomUUID as randomUUID3 } from "node:crypto";
143093
143373
  import { existsSync as existsSync8, unlinkSync as unlinkSync2, writeFileSync as writeFileSync2 } from "node:fs";
143094
143374
  import { tmpdir as tmpdir2 } from "node:os";
143095
- import { join as join19, sep as sep2 } from "node:path";
143375
+ import { join as join20, sep as sep2 } from "node:path";
143096
143376
 
143097
143377
  // src/server/infra/terminals/claude-resume.ts
143098
- import { readdirSync as readdirSync4, statSync as statSync7 } from "node:fs";
143099
- import { homedir as homedir6 } from "node:os";
143100
- import { join as join17 } from "node:path";
143378
+ import { readdirSync as readdirSync4, statSync as statSync8 } from "node:fs";
143379
+ import { homedir as homedir7 } from "node:os";
143380
+ import { join as join18 } from "node:path";
143101
143381
  var CLAUDE_COMMAND_PATTERN = /^claude(\s|$)/;
143102
143382
  var CLAUDE_RESUME_FLAG_PATTERN = /(^|\s)(--resume|-r)(\s|$)/;
143103
- var SESSION_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
143383
+ var SESSION_ID_PATTERN2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
143104
143384
  function isResumableClaudeCommand(command) {
143105
143385
  if (!command) return false;
143106
143386
  const trimmed = command.trim();
143107
143387
  return CLAUDE_COMMAND_PATTERN.test(trimmed) && !CLAUDE_RESUME_FLAG_PATTERN.test(trimmed);
143108
143388
  }
143109
143389
  function claudeProjectDir(cwd) {
143110
- return join17(homedir6(), ".claude", "projects", cwd.replaceAll("/", "-"));
143390
+ return join18(homedir7(), ".claude", "projects", cwd.replaceAll("/", "-"));
143111
143391
  }
143112
143392
  function findLatestClaudeSessionId(cwd) {
143113
143393
  const dir = claudeProjectDir(cwd);
@@ -143121,7 +143401,7 @@ function findLatestClaudeSessionId(cwd) {
143121
143401
  for (const name3 of names) {
143122
143402
  let mtimeMs;
143123
143403
  try {
143124
- mtimeMs = statSync7(join17(dir, name3)).mtimeMs;
143404
+ mtimeMs = statSync8(join18(dir, name3)).mtimeMs;
143125
143405
  } catch {
143126
143406
  continue;
143127
143407
  }
@@ -143129,7 +143409,7 @@ function findLatestClaudeSessionId(cwd) {
143129
143409
  newest = { id: name3.slice(0, -".jsonl".length), mtimeMs };
143130
143410
  }
143131
143411
  }
143132
- if (!newest || !SESSION_ID_PATTERN.test(newest.id)) return null;
143412
+ if (!newest || !SESSION_ID_PATTERN2.test(newest.id)) return null;
143133
143413
  return newest.id;
143134
143414
  }
143135
143415
  function buildClaudeResumeCommand(originalCommand, sessionId) {
@@ -143158,9 +143438,9 @@ function hintForPtySpawnError(err) {
143158
143438
  }
143159
143439
 
143160
143440
  // src/server/infra/terminals/terminal-history.ts
143161
- import { readdirSync as readdirSync5, readFileSync as readFileSync5, rmSync } from "node:fs";
143441
+ import { readdirSync as readdirSync5, readFileSync as readFileSync6, rmSync } from "node:fs";
143162
143442
  import { mkdir, rename, writeFile as writeFile2 } from "node:fs/promises";
143163
- import { join as join18 } from "node:path";
143443
+ import { join as join19 } from "node:path";
143164
143444
  var log13 = createLogger("terminal-history");
143165
143445
  var CHECKPOINT_MAX_BYTES = 5 * 1024 * 1024;
143166
143446
  var TerminalHistoryManager = class {
@@ -143168,14 +143448,14 @@ var TerminalHistoryManager = class {
143168
143448
  this.historyDir = historyDir;
143169
143449
  }
143170
143450
  sessionDir(terminalId) {
143171
- return join18(this.historyDir, encodeURIComponent(terminalId));
143451
+ return join19(this.historyDir, encodeURIComponent(terminalId));
143172
143452
  }
143173
143453
  readMeta(terminalId) {
143174
- return readJson(join18(this.sessionDir(terminalId), "meta.json"));
143454
+ return readJson(join19(this.sessionDir(terminalId), "meta.json"));
143175
143455
  }
143176
143456
  readCheckpoint(terminalId) {
143177
143457
  return readJson(
143178
- join18(this.sessionDir(terminalId), "checkpoint.json")
143458
+ join19(this.sessionDir(terminalId), "checkpoint.json")
143179
143459
  );
143180
143460
  }
143181
143461
  /**
@@ -143221,8 +143501,8 @@ var TerminalHistoryManager = class {
143221
143501
  return;
143222
143502
  }
143223
143503
  for (const name3 of names) {
143224
- const dir = join18(this.historyDir, name3);
143225
- const meta2 = readJson(join18(dir, "meta.json"));
143504
+ const dir = join19(this.historyDir, name3);
143505
+ const meta2 = readJson(join19(dir, "meta.json"));
143226
143506
  if (meta2?.workspaceId !== workspaceId2) continue;
143227
143507
  try {
143228
143508
  rmSync(dir, { recursive: true, force: true });
@@ -143234,7 +143514,7 @@ var TerminalHistoryManager = class {
143234
143514
  };
143235
143515
  function readJson(path) {
143236
143516
  try {
143237
- return JSON.parse(readFileSync5(path, "utf8"));
143517
+ return JSON.parse(readFileSync6(path, "utf8"));
143238
143518
  } catch {
143239
143519
  return null;
143240
143520
  }
@@ -143242,7 +143522,7 @@ function readJson(path) {
143242
143522
  async function writeJson(dir, name3, value, serialized) {
143243
143523
  try {
143244
143524
  await mkdir(dir, { recursive: true, mode: 448 });
143245
- const path = join18(dir, name3);
143525
+ const path = join19(dir, name3);
143246
143526
  const tmp = `${path}.${process.pid}.${Date.now()}.tmp`;
143247
143527
  await writeFile2(tmp, serialized ?? JSON.stringify(value), { mode: 384 });
143248
143528
  await rename(tmp, path);
@@ -143383,7 +143663,7 @@ var TerminalPool = class {
143383
143663
  env.BAND_TERMINAL_ID = terminalId;
143384
143664
  let cwd = workspaceRoot;
143385
143665
  if (options2?.cwd) {
143386
- cwd = resolveSafeCwd(join19(workspaceRoot, options2.cwd), workspaceRoot, "cwd", options2.cwd) ?? cwd;
143666
+ cwd = resolveSafeCwd(join20(workspaceRoot, options2.cwd), workspaceRoot, "cwd", options2.cwd) ?? cwd;
143387
143667
  } else if (checkpoint?.cwd) {
143388
143668
  cwd = resolveSafeCwd(
143389
143669
  checkpoint.cwd,
@@ -143645,7 +143925,7 @@ var TerminalPool = class {
143645
143925
  const pty = session.pty;
143646
143926
  let cmdFile;
143647
143927
  try {
143648
- cmdFile = join19(tmpdir2(), `band-autorun-${randomUUID3()}.sh`);
143928
+ cmdFile = join20(tmpdir2(), `band-autorun-${randomUUID3()}.sh`);
143649
143929
  writeFileSync2(cmdFile, `${command}
143650
143930
  `, { encoding: "utf-8", mode: 384, flag: "wx" });
143651
143931
  session.autoRunFile = cmdFile;
@@ -143855,13 +144135,13 @@ var TerminalPool = class {
143855
144135
  let deathWatch;
143856
144136
  let drainCap;
143857
144137
  try {
143858
- await new Promise((resolve12) => {
143859
- session.headless.write("", resolve12);
144138
+ await new Promise((resolve13) => {
144139
+ session.headless.write("", resolve13);
143860
144140
  deathWatch = setInterval(() => {
143861
- if (this.terminals.get(terminalId) !== session) resolve12();
144141
+ if (this.terminals.get(terminalId) !== session) resolve13();
143862
144142
  }, 50);
143863
144143
  deathWatch.unref();
143864
- drainCap = setTimeout(resolve12, 1e3);
144144
+ drainCap = setTimeout(resolve13, 1e3);
143865
144145
  drainCap.unref();
143866
144146
  });
143867
144147
  if (this.terminals.get(terminalId) !== session) return null;
@@ -144166,11 +144446,11 @@ function removeTerminalFromLayout(workspaceId2, terminalId) {
144166
144446
  }
144167
144447
 
144168
144448
  // src/server/services/workspace-service.ts
144169
- import { execFile as execFile6 } from "node:child_process";
144449
+ import { execFile as execFile7 } from "node:child_process";
144170
144450
  import { randomUUID as randomUUID6 } from "node:crypto";
144171
144451
  import { existsSync as existsSync10, mkdirSync as mkdirSync5, unlinkSync as unlinkSync3 } from "node:fs";
144172
144452
  import { rm as rm2 } from "node:fs/promises";
144173
- import { join as join23 } from "node:path";
144453
+ import { join as join24 } from "node:path";
144174
144454
  import { promisify as promisify2 } from "node:util";
144175
144455
 
144176
144456
  // src/server/errors.ts
@@ -144744,7 +145024,7 @@ function formatFileList(files) {
144744
145024
 
144745
145025
  // src/server/infra/lsp/lsp-manager.ts
144746
145026
  import { spawn as spawn3 } from "node:child_process";
144747
- import { dirname as dirname5, join as join20, resolve as resolve3 } from "node:path";
145027
+ import { dirname as dirname5, join as join21, resolve as resolve4 } from "node:path";
144748
145028
  import { fileURLToPath as fileURLToPath2 } from "node:url";
144749
145029
  var workspaceQueries = new WorkspaceQueries();
144750
145030
  var __dirname2 = dirname5(fileURLToPath2(import.meta.url));
@@ -144771,9 +145051,9 @@ async function getOrSpawnServer(workspaceId2, lang) {
144771
145051
  }
144772
145052
  const resolvedPath = await shellPath();
144773
145053
  const cwd = workspace.worktreePath;
144774
- const appBin = resolve3(__dirname2, "../../../../node_modules/.bin");
144775
- const bundledBin = resolve3(__dirname2, "node_modules/.bin");
144776
- const workspaceBin = join20(cwd, "node_modules/.bin");
145054
+ const appBin = resolve4(__dirname2, "../../../../node_modules/.bin");
145055
+ const bundledBin = resolve4(__dirname2, "node_modules/.bin");
145056
+ const workspaceBin = join21(cwd, "node_modules/.bin");
144777
145057
  const pathSep = process.platform === "win32" ? ";" : ":";
144778
145058
  const combinedPath = [bundledBin, appBin, workspaceBin, resolvedPath].join(pathSep);
144779
145059
  log17.debug("Spawning %s language server in %s for workspace %s", lang, cwd, workspaceId2);
@@ -144819,8 +145099,8 @@ async function getOrSpawnServer(workspaceId2, lang) {
144819
145099
  child.stderr?.on("data", (chunk) => {
144820
145100
  log17.debug("LSP stderr [%s]: %s", serverId, chunk.toString().trimEnd());
144821
145101
  });
144822
- await new Promise((resolve12, reject) => {
144823
- child.once("spawn", resolve12);
145102
+ await new Promise((resolve13, reject) => {
145103
+ child.once("spawn", resolve13);
144824
145104
  child.once("error", (err) => reject(err));
144825
145105
  });
144826
145106
  return session;
@@ -144846,20 +145126,20 @@ function killAllServers() {
144846
145126
  }
144847
145127
 
144848
145128
  // src/server/infra/setup/workspace-files.ts
144849
- import { execFile as execFile5 } from "node:child_process";
145129
+ import { execFile as execFile6 } from "node:child_process";
144850
145130
  import {
144851
145131
  copyFileSync,
144852
145132
  existsSync as existsSync9,
144853
145133
  globSync,
144854
145134
  mkdirSync as mkdirSync4,
144855
- readFileSync as readFileSync6,
144856
- realpathSync,
144857
- statSync as statSync8
145135
+ readFileSync as readFileSync7,
145136
+ realpathSync as realpathSync3,
145137
+ statSync as statSync9
144858
145138
  } from "node:fs";
144859
- import { dirname as dirname6, isAbsolute, join as join21, relative, resolve as resolve4, sep as sep3 } from "node:path";
145139
+ import { dirname as dirname6, isAbsolute, join as join22, relative, resolve as resolve5, sep as sep3 } from "node:path";
144860
145140
  import { promisify } from "node:util";
144861
145141
  var log18 = createLogger("workspace-files");
144862
- var execFileAsync = promisify(execFile5);
145142
+ var execFileAsync = promisify(execFile6);
144863
145143
  var MAX_COPY_FILES_ENTRIES = 100;
144864
145144
  var MAX_COPY_FILES_MATCHES = 500;
144865
145145
  async function copyWorkspaceFiles(projectPath, worktreePath) {
@@ -144882,14 +145162,14 @@ async function copyWorkspaceFiles(projectPath, worktreePath) {
144882
145162
  const copied = [];
144883
145163
  let canonicalProjectRoot;
144884
145164
  try {
144885
- canonicalProjectRoot = realpathSync(projectPath);
145165
+ canonicalProjectRoot = realpathSync3(projectPath);
144886
145166
  } catch (err) {
144887
145167
  log18.warn({ err, projectPath }, "failed to resolve project root \u2014 skipping workspace file copy");
144888
145168
  return copied;
144889
145169
  }
144890
145170
  for (const [absSource, source] of byAbs) {
144891
145171
  const rel = relative(projectPath, absSource);
144892
- const dest = join21(worktreePath, rel);
145172
+ const dest = join22(worktreePath, rel);
144893
145173
  if (rel.startsWith("..") || isAbsolute(rel)) {
144894
145174
  log18.warn(
144895
145175
  { source, entry: absSource },
@@ -144898,7 +145178,7 @@ async function copyWorkspaceFiles(projectPath, worktreePath) {
144898
145178
  continue;
144899
145179
  }
144900
145180
  try {
144901
- const canonicalSource = realpathSync(absSource);
145181
+ const canonicalSource = realpathSync3(absSource);
144902
145182
  const insideRoot = canonicalSource === canonicalProjectRoot || canonicalSource.startsWith(canonicalProjectRoot + sep3);
144903
145183
  if (!insideRoot) {
144904
145184
  log18.warn(
@@ -144959,18 +145239,18 @@ function resolveFromConfig(projectPath, missing) {
144959
145239
  );
144960
145240
  break;
144961
145241
  }
144962
- const abs = resolve4(projectPath, m3);
145242
+ const abs = resolve5(projectPath, m3);
144963
145243
  try {
144964
- if (statSync8(abs).isFile()) {
145244
+ if (statSync9(abs).isFile()) {
144965
145245
  out.push(abs);
144966
145246
  }
144967
145247
  } catch {
144968
145248
  }
144969
145249
  }
144970
145250
  } else {
144971
- const abs = resolve4(projectPath, entry);
145251
+ const abs = resolve5(projectPath, entry);
144972
145252
  try {
144973
- if (statSync8(abs).isFile()) {
145253
+ if (statSync9(abs).isFile()) {
144974
145254
  out.push(abs);
144975
145255
  }
144976
145256
  } catch {
@@ -144981,9 +145261,9 @@ function resolveFromConfig(projectPath, missing) {
144981
145261
  return out;
144982
145262
  }
144983
145263
  async function resolveFromWorktreeInclude(projectPath) {
144984
- const includePath = join21(projectPath, ".worktreeinclude");
145264
+ const includePath = join22(projectPath, ".worktreeinclude");
144985
145265
  if (!existsSync9(includePath)) return [];
144986
- const includeContent = readFileSync6(includePath, "utf-8");
145266
+ const includeContent = readFileSync7(includePath, "utf-8");
144987
145267
  const hasPatterns = includeContent.split(/\r?\n/).some((line2) => {
144988
145268
  const trimmed = line2.trim();
144989
145269
  return trimmed.length > 0 && !trimmed.startsWith("#");
@@ -145008,7 +145288,7 @@ async function resolveFromWorktreeInclude(projectPath) {
145008
145288
  const out = [];
145009
145289
  for (const rel of matchingWorktreeInclude) {
145010
145290
  if (!standardSet.has(rel)) continue;
145011
- out.push(resolve4(projectPath, rel));
145291
+ out.push(resolve5(projectPath, rel));
145012
145292
  }
145013
145293
  return out;
145014
145294
  }
@@ -145037,7 +145317,7 @@ import { randomUUID as randomUUID4 } from "node:crypto";
145037
145317
  // src/server/services/task-service.ts
145038
145318
  import { readdirSync as readdirSync6 } from "node:fs";
145039
145319
  import { mkdir as mkdir2, readFile as readFile4 } from "node:fs/promises";
145040
- import { join as join22 } from "node:path";
145320
+ import { join as join23 } from "node:path";
145041
145321
 
145042
145322
  // src/server/services/_utils/mime-types.ts
145043
145323
  import { extname } from "node:path";
@@ -145275,7 +145555,7 @@ async function runTask(task) {
145275
145555
  }
145276
145556
  if (task.model) await applyTurnChoice(chatId, "model", task.model);
145277
145557
  if (task.mode) await applyTurnChoice(chatId, "mode", task.mode);
145278
- const sharedDir = join22(bandHome(), "shared", task.workspaceId);
145558
+ const sharedDir = join23(bandHome(), "shared", task.workspaceId);
145279
145559
  await mkdir2(sharedDir, { recursive: true });
145280
145560
  const seenShared = listFiles(sharedDir);
145281
145561
  const unsubscribe = agentSessionService.subscribe(chatId, (event) => {
@@ -145293,7 +145573,7 @@ async function runTask(task) {
145293
145573
  });
145294
145574
  }
145295
145575
  });
145296
- const previousCost = agentSessionService.getSessionState(chatId).costUsd;
145576
+ const previousCost = agentSessionService.sessionCostUsd(chatId);
145297
145577
  agentSessionService.record(
145298
145578
  chatId,
145299
145579
  {
@@ -145337,7 +145617,7 @@ async function runTask(task) {
145337
145617
  }
145338
145618
  async function applyTurnChoice(chatId, category, value) {
145339
145619
  try {
145340
- const state = agentSessionService.getSessionState(chatId);
145620
+ const state = agentSessionService.getSessionState(chatId, { resolveDefaults: false });
145341
145621
  const option = findOption(state.configOptions, category);
145342
145622
  const configId = option?.id ?? (category === "model" ? "__legacy_model" : "__legacy_mode");
145343
145623
  await agentSessionService.setConfigOption(chatId, configId, value);
@@ -147464,7 +147744,7 @@ var PanelFocusService = class {
147464
147744
  var panelFocusService = new PanelFocusService();
147465
147745
 
147466
147746
  // src/server/services/workspace-service.ts
147467
- var execFileAsync2 = promisify2(execFile6);
147747
+ var execFileAsync2 = promisify2(execFile7);
147468
147748
  var TEARDOWN_TIMEOUT_MS = 6e4;
147469
147749
  var log26 = createLogger("workspace-service");
147470
147750
  var workspaceVia = external_exports2.enum(["chat", "terminal"]);
@@ -147656,8 +147936,8 @@ var WorkspaceService = class {
147656
147936
  return { ok: true, path: existing.path };
147657
147937
  }
147658
147938
  const wtDir = worktreesDir();
147659
- const worktreePath = join23(wtDir, input.project, input.branch);
147660
- mkdirSync5(join23(wtDir, input.project), { recursive: true });
147939
+ const worktreePath = join24(wtDir, input.project, input.branch);
147940
+ mkdirSync5(join24(wtDir, input.project), { recursive: true });
147661
147941
  const { command, env } = gitCmd();
147662
147942
  const args = ["worktree", "add"];
147663
147943
  if (input.base) {
@@ -147867,7 +148147,7 @@ var WorkspaceService = class {
147867
148147
  saveState(state);
147868
148148
  removal.commit();
147869
148149
  try {
147870
- unlinkSync3(join23(bandHome(), "workspace-prompts", `${workspaceId2}.json`));
148150
+ unlinkSync3(join24(bandHome(), "workspace-prompts", `${workspaceId2}.json`));
147871
148151
  } catch {
147872
148152
  }
147873
148153
  deleteWorkspaceStatus(workspaceId2);
@@ -148216,7 +148496,7 @@ var WorkspaceService = class {
148216
148496
  if (!/^[a-zA-Z0-9._-]+$/.test(input.scriptType) || input.scriptType.includes("..")) {
148217
148497
  throw new Error(`Invalid script type "${input.scriptType}"`);
148218
148498
  }
148219
- const scriptPath = join23(input.path, ".band", input.scriptType);
148499
+ const scriptPath = join24(input.path, ".band", input.scriptType);
148220
148500
  if (!existsSync10(scriptPath)) {
148221
148501
  throw new Error(`Script "${input.scriptType}" not found`);
148222
148502
  }
@@ -148471,9 +148751,9 @@ var TerminalService = class {
148471
148751
  let exited = false;
148472
148752
  let wake = null;
148473
148753
  const notify2 = () => {
148474
- const resolve12 = wake;
148754
+ const resolve13 = wake;
148475
148755
  wake = null;
148476
- resolve12?.();
148756
+ resolve13?.();
148477
148757
  };
148478
148758
  const unsubscribeExit = this.onExit(terminalId, () => {
148479
148759
  exited = true;
@@ -148501,9 +148781,9 @@ var TerminalService = class {
148501
148781
  yield { kind: "exit" };
148502
148782
  return;
148503
148783
  }
148504
- await new Promise((resolve12) => {
148505
- if (exited || queue.length > 0 || signal?.aborted) resolve12();
148506
- else wake = resolve12;
148784
+ await new Promise((resolve13) => {
148785
+ if (exited || queue.length > 0 || signal?.aborted) resolve13();
148786
+ else wake = resolve13;
148507
148787
  });
148508
148788
  }
148509
148789
  } finally {
@@ -148633,12 +148913,12 @@ var WorkspaceScriptService = class {
148633
148913
  try {
148634
148914
  prepared = await prepareScriptRun(command, script);
148635
148915
  const { exited } = prepared;
148636
- const closed = new Promise((resolve12) => {
148637
- unsubscribeExit = terminalService.onExit(terminalId, () => resolve12({ kind: "closed" }));
148916
+ const closed = new Promise((resolve13) => {
148917
+ unsubscribeExit = terminalService.onExit(terminalId, () => resolve13({ kind: "closed" }));
148638
148918
  });
148639
- const timedOut = new Promise((resolve12) => {
148919
+ const timedOut = new Promise((resolve13) => {
148640
148920
  if (timeoutMs !== void 0) {
148641
- timer = setTimeout(() => resolve12({ kind: "timeout" }), timeoutMs);
148921
+ timer = setTimeout(() => resolve13({ kind: "timeout" }), timeoutMs);
148642
148922
  }
148643
148923
  });
148644
148924
  await terminalService.spawn(workspaceId2, terminalId, { command: prepared.command });
@@ -149310,13 +149590,16 @@ var settings = new SettingsQueries();
149310
149590
  var RUNTIMES_KEY = Symbol.for("band.acp.runtimes");
149311
149591
  var LISTENERS_KEY2 = Symbol.for("band.acp.listeners");
149312
149592
  var CATALOG_KEY = Symbol.for("band.acp.catalog");
149593
+ var DEFAULTS_CHANGED_KEY = Symbol.for("band.acp.defaultsChangedAt");
149313
149594
  var g5 = globalThis;
149314
149595
  g5[RUNTIMES_KEY] ??= /* @__PURE__ */ new Map();
149315
149596
  g5[LISTENERS_KEY2] ??= /* @__PURE__ */ new Map();
149316
149597
  g5[CATALOG_KEY] ??= /* @__PURE__ */ new Map();
149598
+ g5[DEFAULTS_CHANGED_KEY] ??= /* @__PURE__ */ new Map();
149317
149599
  var runtimes = g5[RUNTIMES_KEY];
149318
149600
  var listeners2 = g5[LISTENERS_KEY2];
149319
149601
  var catalog = g5[CATALOG_KEY];
149602
+ var defaultsChangedAt = g5[DEFAULTS_CHANGED_KEY];
149320
149603
  var transientId = -1e9;
149321
149604
  var pendingObserver = null;
149322
149605
  function emptyLive() {
@@ -149379,7 +149662,8 @@ function runtimeFor(chat, def2) {
149379
149662
  turnSeq: 0,
149380
149663
  live: emptyLive(),
149381
149664
  pending: /* @__PURE__ */ new Map(),
149382
- idleTimer: null
149665
+ idleTimer: null,
149666
+ claudeCli: null
149383
149667
  };
149384
149668
  runtimes.set(chat.id, rt);
149385
149669
  }
@@ -149411,17 +149695,19 @@ function record2(rt, event, turnStart = false) {
149411
149695
  broadcastTransient(rt.chatId, event);
149412
149696
  return;
149413
149697
  }
149698
+ const createdAt = Date.now();
149414
149699
  const id2 = events.append({
149415
149700
  chatId: rt.chatId,
149416
149701
  sessionId: rt.sessionId,
149417
149702
  revision: rt.revision,
149418
149703
  event,
149419
- turnStart
149704
+ turnStart,
149705
+ createdAt
149420
149706
  });
149421
- emit2(rt.chatId, { ...event, eventId: id2 });
149707
+ emit2(rt.chatId, { ...event, eventId: id2, createdAt });
149422
149708
  }
149423
149709
  function broadcastTransient(chatId, event) {
149424
- emit2(chatId, { ...event, eventId: transientId-- });
149710
+ emit2(chatId, { ...event, eventId: transientId--, createdAt: Date.now() });
149425
149711
  }
149426
149712
  function remember(def2, patch) {
149427
149713
  const prev = catalog.get(def2.id);
@@ -149432,10 +149718,49 @@ function remember(def2, patch) {
149432
149718
  models: prev?.models ?? null,
149433
149719
  commands: prev?.commands ?? [],
149434
149720
  canList: prev?.canList ?? false,
149721
+ learnedDefaults: prev?.learnedDefaults,
149435
149722
  ...patch,
149436
149723
  updatedAt: Date.now()
149437
149724
  });
149438
149725
  }
149726
+ function findEffortOption(options2) {
149727
+ return options2.find(
149728
+ (o) => o.type === "select" && (o.category === "thought_level" || o.id === "effort")
149729
+ );
149730
+ }
149731
+ function claudeDefaults(chatId, chat, def2, configOptions, learn = false) {
149732
+ if (def2.type !== "claude-code") return void 0;
149733
+ const cwd = chat ? workspaceService.resolve(chat.workspaceId)?.worktree.path : void 0;
149734
+ const configured = configuredClaudeDefaults({
149735
+ cwd,
149736
+ env: process.env,
149737
+ cli: runtimes.get(chatId)?.claudeCli ?? void 0
149738
+ });
149739
+ const reported = cwd && chat?.activeSessionId ? reportedClaudeDefaults({
149740
+ cwd,
149741
+ env: process.env,
149742
+ sessionId: chat.activeSessionId,
149743
+ since: defaultsChangedAt.get(chatId)
149744
+ }) : {};
149745
+ const modelOption = findOption(configOptions, "model");
149746
+ const modelChoice = modelOption?.type === "select" ? String(modelOption.currentValue) : void 0;
149747
+ const effortOption = findEffortOption(configOptions);
149748
+ const model = modelChoice === "default" ? reported.model : void 0;
149749
+ const effort = effortOption?.type === "select" && effortOption.currentValue === "default" ? reported.effort : void 0;
149750
+ const entry = catalog.get(def2.id);
149751
+ if (learn && entry && (model && !configured.model || effort && !configured.effort)) {
149752
+ const learned2 = entry.learnedDefaults ?? { effort: {} };
149753
+ entry.learnedDefaults = {
149754
+ model: !configured.model && model || learned2.model,
149755
+ effort: effort && !configured.effort && modelChoice ? { ...learned2.effort, [modelChoice]: effort } : learned2.effort
149756
+ };
149757
+ }
149758
+ const learned = entry?.learnedDefaults;
149759
+ return {
149760
+ model: model ?? configured.model ?? learned?.model,
149761
+ effort: effort ?? configured.effort ?? (modelChoice ? learned?.effort[modelChoice] : void 0)
149762
+ };
149763
+ }
149439
149764
  function applyLive(rt, update) {
149440
149765
  const def2 = { id: rt.agentDefId };
149441
149766
  switch (update.sessionUpdate) {
@@ -149450,7 +149775,11 @@ function applyLive(rt, update) {
149450
149775
  if (rt.live.modes) rt.live.modes = { ...rt.live.modes, currentModeId: update.currentModeId };
149451
149776
  break;
149452
149777
  case "usage_update":
149453
- rt.live.usage = { used: update.used, size: update.size, cost: update.cost ?? null };
149778
+ rt.live.usage = {
149779
+ used: update.used,
149780
+ size: update.size,
149781
+ cost: update.cost ?? rt.live.usage?.cost ?? null
149782
+ };
149454
149783
  break;
149455
149784
  case "session_info_update":
149456
149785
  if (update.title !== void 0) {
@@ -149508,7 +149837,7 @@ function openRequest(rt, signal, make, onCancel) {
149508
149837
  return requestId;
149509
149838
  }
149510
149839
  function requestPermission(rt, request, signal) {
149511
- return new Promise((resolve12) => {
149840
+ return new Promise((resolve13) => {
149512
149841
  const requestId = openRequest(
149513
149842
  rt,
149514
149843
  signal,
@@ -149516,10 +149845,10 @@ function requestPermission(rt, request, signal) {
149516
149845
  optionIds: request.options.map((o) => o.optionId),
149517
149846
  permission: (optionId) => {
149518
149847
  done(optionId ?? "cancelled");
149519
- resolve12(optionId ? { outcome: "selected", optionId } : { outcome: "cancelled" });
149848
+ resolve13(optionId ? { outcome: "selected", optionId } : { outcome: "cancelled" });
149520
149849
  }
149521
149850
  }),
149522
- () => resolve12({ outcome: "cancelled" })
149851
+ () => resolve13({ outcome: "cancelled" })
149523
149852
  );
149524
149853
  record2(rt, { type: "permission", requestId, request });
149525
149854
  pendingObserver?.(rt.chatId, rt.workspaceId);
@@ -149527,17 +149856,17 @@ function requestPermission(rt, request, signal) {
149527
149856
  }
149528
149857
  function requestElicitation(rt, request, signal) {
149529
149858
  if (request.mode !== "form") return Promise.resolve({ action: "decline" });
149530
- return new Promise((resolve12) => {
149859
+ return new Promise((resolve13) => {
149531
149860
  const requestId = openRequest(
149532
149861
  rt,
149533
149862
  signal,
149534
149863
  (done) => ({
149535
149864
  elicitation: (response) => {
149536
149865
  done(response.action);
149537
- resolve12(response);
149866
+ resolve13(response);
149538
149867
  }
149539
149868
  }),
149540
- () => resolve12({ action: "cancel" })
149869
+ () => resolve13({ action: "cancel" })
149541
149870
  );
149542
149871
  record2(rt, { type: "elicitation", requestId, request });
149543
149872
  pendingObserver?.(rt.chatId, rt.workspaceId);
@@ -149651,8 +149980,8 @@ async function attachNew(rt, proc, chat, def2, cwd) {
149651
149980
  let attached;
149652
149981
  try {
149653
149982
  attached = await proc.newSession(cwd, [
149654
- join24(bandHome(), "uploads"),
149655
- join24(bandHome(), "shared")
149983
+ join25(bandHome(), "uploads"),
149984
+ join25(bandHome(), "shared")
149656
149985
  ]);
149657
149986
  } catch (err) {
149658
149987
  rt.routing = "log";
@@ -149782,12 +150111,17 @@ var AgentSessionService = class {
149782
150111
  const rt = runtimeFor(chat, def2);
149783
150112
  while (rt.attaching) await rt.attaching.catch(() => void 0);
149784
150113
  const fresh = chatService.get(chatId) ?? chat;
150114
+ const attachedBefore = rt.sessionId;
149785
150115
  rt.attaching = attach(rt, fresh, def2, workspace.worktree.path, purpose);
149786
150116
  try {
149787
150117
  await rt.attaching;
149788
150118
  } finally {
149789
150119
  rt.attaching = null;
149790
150120
  }
150121
+ if (def2.type === "claude-code" && rt.sessionId && rt.sessionId !== attachedBefore) {
150122
+ rt.claudeCli = null;
150123
+ void this.readClaudeCli(rt).catch((err) => log31.debug({ chatId, err }, "no CLI flags"));
150124
+ }
149791
150125
  if (!rt.inTurn && rt.process) scheduleIdle(rt);
149792
150126
  return rt.sessionId;
149793
150127
  }
@@ -149808,6 +150142,15 @@ var AgentSessionService = class {
149808
150142
  const cost = runtimes.get(chatId)?.live.usage?.cost;
149809
150143
  return cost && cost.currency === "USD" ? cost.amount : void 0;
149810
150144
  }
150145
+ /** The session's cumulative cost in USD so far: the agent's own figure
150146
+ * when it reports one, else Band's estimate from the last finished turn.
150147
+ * The next turn's estimate builds on it. */
150148
+ sessionCostUsd(chatId) {
150149
+ const reported = this.reportedCost(chatId);
150150
+ if (reported !== void 0) return reported;
150151
+ const sessionId = chatService.get(chatId)?.activeSessionId;
150152
+ return sessionId ? sessionCost(sessionId) : null;
150153
+ }
149811
150154
  /** Runs one prompt turn on the attached session. */
149812
150155
  async prompt(chatId, blocks) {
149813
150156
  const rt = runtimes.get(chatId);
@@ -149823,8 +150166,35 @@ var AgentSessionService = class {
149823
150166
  } finally {
149824
150167
  rt.inTurn = false;
149825
150168
  if (rt.process) scheduleIdle(rt);
150169
+ try {
150170
+ this.pushClaudeDefaults(chatId, true);
150171
+ } catch (err) {
150172
+ log31.debug({ chatId, err }, "could not push Claude defaults");
150173
+ }
149826
150174
  }
149827
150175
  }
150176
+ /** Sends a Claude Code chat's session state again once the turn wrote what
150177
+ * its `default` choices ran with, or the CLI's flags are known. */
150178
+ pushClaudeDefaults(chatId, learn) {
150179
+ const chat = chatService.get(chatId);
150180
+ if (!chat) return;
150181
+ const def2 = definitionFor(chat);
150182
+ if (def2.type !== "claude-code") return;
150183
+ const state = this.getSessionState(chatId, { resolveDefaults: false });
150184
+ const resolvedDefaults = claudeDefaults(chatId, chat, def2, state.configOptions, learn);
150185
+ broadcastTransient(chatId, { type: "session-state", state: { ...state, resolvedDefaults } });
150186
+ }
150187
+ /** Reads the Claude Code CLI's command line once per attached session, for
150188
+ * a `--settings` file or flags a wrapper script added. */
150189
+ async readClaudeCli(rt) {
150190
+ const pid = rt.process?.pid;
150191
+ const sessionId = rt.sessionId;
150192
+ if (!pid || !sessionId) return;
150193
+ const args = await findClaudeCliArgs(pid, sessionId);
150194
+ if (!args || rt.sessionId !== sessionId) return;
150195
+ rt.claudeCli = args;
150196
+ this.pushClaudeDefaults(rt.chatId, false);
150197
+ }
149828
150198
  /**
149829
150199
  * Stops the chat's current turn. ACP requires open permission requests to
149830
150200
  * be answered `cancelled` first. If the agent doesn't stop in time, its
@@ -149907,10 +150277,14 @@ var AgentSessionService = class {
149907
150277
  async setConfigOption(chatId, configId, value, workspaceId2) {
149908
150278
  const chat = chatService.get(chatId) ?? (workspaceId2 ? chatService.create(workspaceId2, { id: chatId, name: "Chat" }) : void 0);
149909
150279
  if (!chat) throw new ChatNotFoundError(chatId);
149910
- const option = this.getSessionState(chatId).configOptions.find((o) => o.id === configId);
150280
+ const option = this.getSessionState(chatId, { resolveDefaults: false }).configOptions.find(
150281
+ (o) => o.id === configId
150282
+ );
149911
150283
  const category = option?.category === "model" || configId === "model" ? "model" : option?.category === "mode" || configId === "mode" ? "mode" : configId === "__legacy_model" ? "model" : configId === "__legacy_mode" ? "mode" : void 0;
149912
150284
  if (category === "model") chatService.update(chatId, { model: value });
149913
150285
  if (category === "mode") chatService.update(chatId, { mode: value });
150286
+ const isEffort = option?.category === "thought_level" || configId === "effort";
150287
+ if (category === "model" || isEffort) defaultsChangedAt.set(chatId, Date.now());
149914
150288
  const live = runtimes.get(chatId);
149915
150289
  const attached = live?.process?.alive && live.sessionId && live.sessionId === chat.activeSessionId;
149916
150290
  if (!attached && category !== "mode") {
@@ -149953,26 +150327,30 @@ var AgentSessionService = class {
149953
150327
  * chat's session, else rebuilt from the log, else the agent catalog with
149954
150328
  * the chat's saved choices applied. A chat the server has no row for yet
149955
150329
  * (a new pane, created lazily on its first message) gets the default
149956
- * agent's catalog entry.
149957
- */
149958
- getSessionState(chatId) {
149959
- const chat = chatService.get(
149960
- chatId
149961
- ) ?? {
150330
+ * agent's catalog entry. Claude Code chats also get what their `default`
150331
+ * choices resolve to, which reads Claude's settings files and transcript;
150332
+ * callers that only need the options or the cost pass
150333
+ * `resolveDefaults: false`.
150334
+ */
150335
+ getSessionState(chatId, opts = {}) {
150336
+ const saved = chatService.get(chatId);
150337
+ const chat = saved ?? {
149962
150338
  agent: void 0,
149963
150339
  activeSessionId: void 0,
149964
150340
  model: void 0,
149965
150341
  mode: void 0
149966
150342
  };
149967
150343
  const def2 = definitionFor(chat);
150344
+ const state = this.baseSessionState(chatId, chat, def2);
150345
+ if (opts.resolveDefaults === false) return state;
150346
+ const resolvedDefaults = claudeDefaults(chatId, saved, def2, state.configOptions);
150347
+ return resolvedDefaults ? { ...state, resolvedDefaults } : state;
150348
+ }
150349
+ baseSessionState(chatId, chat, def2) {
149968
150350
  const rt = runtimes.get(chatId);
149969
150351
  const sessionId = chat.activeSessionId;
149970
150352
  if (rt?.process?.alive && rt.sessionId && rt.sessionId === sessionId) {
149971
- return {
149972
- source: "live",
149973
- ...rt.live,
149974
- costUsd: this.reportedCost(chatId) ?? sessionCost(sessionId)
149975
- };
150353
+ return { source: "live", ...rt.live };
149976
150354
  }
149977
150355
  const revision = sessionId ? events.currentRevision(sessionId) : 0;
149978
150356
  if (sessionId && revision > 0) {
@@ -149994,7 +150372,6 @@ var AgentSessionService = class {
149994
150372
  models: base3?.models ?? null,
149995
150373
  commands: commands?.type === "update" && commands.update.sessionUpdate === "available_commands_update" ? commands.update.availableCommands : catalog.get(def2.id)?.commands ?? [],
149996
150374
  usage: usageUpdate,
149997
- costUsd: usageUpdate?.cost?.currency === "USD" ? usageUpdate.cost.amount : sessionCost(sessionId),
149998
150375
  title: info?.type === "update" && info.update.sessionUpdate === "session_info_update" ? info.update.title ?? null : null
149999
150376
  };
150000
150377
  }
@@ -150014,7 +150391,6 @@ var AgentSessionService = class {
150014
150391
  models: models && modelChoice && models.availableModels.some((m3) => m3.modelId === modelChoice) ? { ...models, currentModelId: modelChoice } : models,
150015
150392
  commands: cached2?.commands ?? [],
150016
150393
  usage: null,
150017
- costUsd: null,
150018
150394
  title: null
150019
150395
  };
150020
150396
  }
@@ -150081,6 +150457,7 @@ var AgentSessionService = class {
150081
150457
  }
150082
150458
  /** Stops the chat's agent. Used when the chat is removed or switches agent. */
150083
150459
  stop(chatId) {
150460
+ defaultsChangedAt.delete(chatId);
150084
150461
  const rt = runtimes.get(chatId);
150085
150462
  if (rt) stopRuntime(rt);
150086
150463
  }
@@ -150195,13 +150572,13 @@ var AgentSessionService = class {
150195
150572
  }
150196
150573
  }
150197
150574
  };
150575
+ var agentSessionService = new AgentSessionService();
150198
150576
  function sessionCost(sessionId) {
150199
150577
  const revision = events.currentRevision(sessionId);
150200
150578
  if (revision === 0) return null;
150201
150579
  const row = events.latest(sessionId, revision, { kind: "turn-ended" });
150202
150580
  return row?.event.type === "turn-ended" ? row.event.usage?.costUsd ?? null : null;
150203
150581
  }
150204
- var agentSessionService = new AgentSessionService();
150205
150582
 
150206
150583
  // src/shared/chat-events.ts
150207
150584
  var HISTORY_PAGE_SIZE = 20;
@@ -150385,14 +150762,14 @@ async function handleChatHistory(req, res, chatId) {
150385
150762
  }
150386
150763
 
150387
150764
  // src/server/services/_utils/session-id.ts
150388
- var SESSION_ID_PATTERN2 = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,511}$/;
150389
- var sessionIdSchema = external_exports2.string().regex(SESSION_ID_PATTERN2, "invalid session id");
150765
+ var SESSION_ID_PATTERN3 = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,511}$/;
150766
+ var sessionIdSchema = external_exports2.string().regex(SESSION_ID_PATTERN3, "invalid session id");
150390
150767
 
150391
150768
  // src/server/services/_utils/upload-utils.ts
150392
150769
  import { mkdir as mkdir3, writeFile as writeFile3 } from "node:fs/promises";
150393
- import { join as join25 } from "node:path";
150770
+ import { join as join26 } from "node:path";
150394
150771
  async function saveUploadedFilesDetailed(fileParts) {
150395
- const uploadDir = join25(bandHome(), "uploads");
150772
+ const uploadDir = join26(bandHome(), "uploads");
150396
150773
  await mkdir3(uploadDir, { recursive: true });
150397
150774
  const baseTimestamp = Date.now();
150398
150775
  const saved = [];
@@ -150404,7 +150781,7 @@ async function saveUploadedFilesDetailed(fileParts) {
150404
150781
  const filename = part.filename || `file-${baseTimestamp}`;
150405
150782
  const safeOriginal = filename.replace(/[^a-zA-Z0-9._-]/g, "_");
150406
150783
  const storedName = `${baseTimestamp}-${i}-${safeOriginal}`;
150407
- const filePath = join25(uploadDir, storedName);
150784
+ const filePath = join26(uploadDir, storedName);
150408
150785
  await writeFile3(filePath, buffer);
150409
150786
  saved.push({
150410
150787
  path: filePath,
@@ -150419,10 +150796,10 @@ async function saveUploadedFilesDetailed(fileParts) {
150419
150796
  // src/api/chat-submit.ts
150420
150797
  var log33 = createLogger("chat-submit");
150421
150798
  function readBody(req) {
150422
- return new Promise((resolve12, reject) => {
150799
+ return new Promise((resolve13, reject) => {
150423
150800
  const chunks = [];
150424
150801
  req.on("data", (chunk) => chunks.push(chunk));
150425
- req.on("end", () => resolve12(Buffer.concat(chunks).toString("utf-8")));
150802
+ req.on("end", () => resolve13(Buffer.concat(chunks).toString("utf-8")));
150426
150803
  req.on("error", reject);
150427
150804
  });
150428
150805
  }
@@ -150443,7 +150820,7 @@ async function handleChatSubmit(req, res, chatId) {
150443
150820
  sendJson2(res, 400, { error: "workspaceId and text are required" });
150444
150821
  return;
150445
150822
  }
150446
- if (sessionId !== void 0 && !SESSION_ID_PATTERN2.test(sessionId)) {
150823
+ if (sessionId !== void 0 && !SESSION_ID_PATTERN3.test(sessionId)) {
150447
150824
  sendJson2(res, 400, { error: "invalid sessionId" });
150448
150825
  return;
150449
150826
  }
@@ -154052,7 +154429,7 @@ var Protocol = class {
154052
154429
  return;
154053
154430
  }
154054
154431
  const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
154055
- await new Promise((resolve12) => setTimeout(resolve12, pollInterval));
154432
+ await new Promise((resolve13) => setTimeout(resolve13, pollInterval));
154056
154433
  options2?.signal?.throwIfAborted();
154057
154434
  }
154058
154435
  } catch (error40) {
@@ -154069,7 +154446,7 @@ var Protocol = class {
154069
154446
  */
154070
154447
  request(request, resultSchema, options2) {
154071
154448
  const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options2 ?? {};
154072
- return new Promise((resolve12, reject) => {
154449
+ return new Promise((resolve13, reject) => {
154073
154450
  const earlyReject = (error40) => {
154074
154451
  reject(error40);
154075
154452
  };
@@ -154147,7 +154524,7 @@ var Protocol = class {
154147
154524
  if (!parseResult.success) {
154148
154525
  reject(parseResult.error);
154149
154526
  } else {
154150
- resolve12(parseResult.data);
154527
+ resolve13(parseResult.data);
154151
154528
  }
154152
154529
  } catch (error40) {
154153
154530
  reject(error40);
@@ -154408,12 +154785,12 @@ var Protocol = class {
154408
154785
  }
154409
154786
  } catch {
154410
154787
  }
154411
- return new Promise((resolve12, reject) => {
154788
+ return new Promise((resolve13, reject) => {
154412
154789
  if (signal.aborted) {
154413
154790
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
154414
154791
  return;
154415
154792
  }
154416
- const timeoutId = setTimeout(resolve12, interval2);
154793
+ const timeoutId = setTimeout(resolve13, interval2);
154417
154794
  signal.addEventListener("abort", () => {
154418
154795
  clearTimeout(timeoutId);
154419
154796
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
@@ -155513,7 +155890,7 @@ var McpServer = class {
155513
155890
  let task = createTaskResult.task;
155514
155891
  const pollInterval = task.pollInterval ?? 5e3;
155515
155892
  while (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") {
155516
- await new Promise((resolve12) => setTimeout(resolve12, pollInterval));
155893
+ await new Promise((resolve13) => setTimeout(resolve13, pollInterval));
155517
155894
  const updatedTask = await extra.taskStore.getTask(taskId);
155518
155895
  if (!updatedTask) {
155519
155896
  throw new McpError(ErrorCode.InternalError, `Task ${taskId} not found during polling`);
@@ -156552,7 +156929,7 @@ var responseViaResponseObject = async (res, outgoing, options2 = {}) => {
156552
156929
  });
156553
156930
  if (!chunk) {
156554
156931
  if (i === 1) {
156555
- await new Promise((resolve12) => setTimeout(resolve12));
156932
+ await new Promise((resolve13) => setTimeout(resolve13));
156556
156933
  maxReadCount = 3;
156557
156934
  continue;
156558
156935
  }
@@ -157052,9 +157429,9 @@ data:
157052
157429
  const initRequest = messages.find((m3) => isInitializeRequest(m3));
157053
157430
  const clientProtocolVersion = initRequest ? initRequest.params.protocolVersion : req.headers.get("mcp-protocol-version") ?? DEFAULT_NEGOTIATED_PROTOCOL_VERSION;
157054
157431
  if (this._enableJsonResponse) {
157055
- return new Promise((resolve12) => {
157432
+ return new Promise((resolve13) => {
157056
157433
  this._streamMapping.set(streamId, {
157057
- resolveJson: resolve12,
157434
+ resolveJson: resolve13,
157058
157435
  cleanup: () => {
157059
157436
  this._streamMapping.delete(streamId);
157060
157437
  }
@@ -157487,8 +157864,8 @@ async function ensureCdpTargetId(bandTabId) {
157487
157864
  };
157488
157865
  let rejectFn = () => {
157489
157866
  };
157490
- const promise2 = new Promise((resolve12, reject) => {
157491
- resolveFn = resolve12;
157867
+ const promise2 = new Promise((resolve13, reject) => {
157868
+ resolveFn = resolve13;
157492
157869
  rejectFn = reject;
157493
157870
  });
157494
157871
  const timeoutId = setTimeout(() => {
@@ -157710,14 +158087,14 @@ var browserHostRouter = t3.router({
157710
158087
  }),
157711
158088
  ensureView: publicProcedure.subscription(async function* (opts) {
157712
158089
  const queue = [];
157713
- let resolve12 = null;
158090
+ let resolve13 = null;
157714
158091
  const unsubscribe = browserHostService.onEnsureView((event) => {
157715
158092
  queue.push(event);
157716
- resolve12?.();
158093
+ resolve13?.();
157717
158094
  });
157718
158095
  opts.signal?.addEventListener("abort", () => {
157719
158096
  unsubscribe();
157720
- resolve12?.();
158097
+ resolve13?.();
157721
158098
  });
157722
158099
  try {
157723
158100
  while (!opts.signal?.aborted) {
@@ -157725,9 +158102,9 @@ var browserHostRouter = t3.router({
157725
158102
  yield queue.shift();
157726
158103
  }
157727
158104
  await new Promise((r3) => {
157728
- resolve12 = r3;
158105
+ resolve13 = r3;
157729
158106
  });
157730
- resolve12 = null;
158107
+ resolve13 = null;
157731
158108
  }
157732
158109
  } finally {
157733
158110
  unsubscribe();
@@ -158307,36 +158684,36 @@ var chatsRouter = t3.router({
158307
158684
  });
158308
158685
 
158309
158686
  // src/server/services/cli-service.ts
158310
- import { execFile as execFile7 } from "node:child_process";
158687
+ import { execFile as execFile8 } from "node:child_process";
158311
158688
  import {
158312
158689
  accessSync as accessSync2,
158313
158690
  constants as constants2,
158314
158691
  existsSync as existsSync11,
158315
158692
  lstatSync as lstatSync3,
158316
158693
  mkdirSync as mkdirSync6,
158317
- readFileSync as readFileSync7,
158318
- realpathSync as realpathSync2,
158694
+ readFileSync as readFileSync8,
158695
+ realpathSync as realpathSync4,
158319
158696
  symlinkSync,
158320
158697
  unlinkSync as unlinkSync4,
158321
158698
  writeFileSync as writeFileSync3
158322
158699
  } from "node:fs";
158323
- import { homedir as homedir7, platform as platform2 } from "node:os";
158324
- import { basename as basename2, dirname as dirname7, join as join26, resolve as resolve5 } from "node:path";
158700
+ import { homedir as homedir8, platform as platform2 } from "node:os";
158701
+ import { basename as basename2, dirname as dirname7, join as join27, resolve as resolve6 } from "node:path";
158325
158702
  function windowsBinDir() {
158326
- const localAppData = process.env.LOCALAPPDATA || join26(homedir7(), "AppData", "Local");
158327
- return join26(localAppData, "band", "bin");
158703
+ const localAppData = process.env.LOCALAPPDATA || join27(homedir8(), "AppData", "Local");
158704
+ return join27(localAppData, "band", "bin");
158328
158705
  }
158329
- var SYMLINK_PATH = platform2() === "win32" ? join26(windowsBinDir(), "band.cmd") : "/usr/local/bin/band";
158706
+ var SYMLINK_PATH = platform2() === "win32" ? join27(windowsBinDir(), "band.cmd") : "/usr/local/bin/band";
158330
158707
  function findCliBinaryAt(opts) {
158331
158708
  const { cwd, dirname: dirname11 } = opts;
158332
158709
  const exe = platform2() === "win32" ? "band.exe" : "band";
158333
158710
  const appsStrategies = [
158334
158711
  // cwd = apps/web/ (Vite dev and production server)
158335
- resolve5(cwd, ".."),
158712
+ resolve6(cwd, ".."),
158336
158713
  // cwd = project root (fallback)
158337
- resolve5(cwd, "apps"),
158714
+ resolve6(cwd, "apps"),
158338
158715
  // From this source file in dev (apps/web/src/server/services/ → apps/)
158339
- resolve5(dirname11, "..", "..", "..", ".."),
158716
+ resolve6(dirname11, "..", "..", "..", ".."),
158340
158717
  // From bundled `dist/` file (<Resources>/web/dist/ → <Resources>/) only
158341
158718
  // — in dev mode this resolves to `apps/web/src/`, which has no
158342
158719
  // `cli/target/<profile>/band` and is harmless; the four-level walk
@@ -158344,11 +158721,11 @@ function findCliBinaryAt(opts) {
158344
158721
  // layout under <Resources>/cli/ would still resolve. Today's Electron
158345
158722
  // bundle ships the binary under `binaries/` (handled by Strategy B),
158346
158723
  // so this strategy never hits in production either.
158347
- resolve5(dirname11, "..", "..", "..")
158724
+ resolve6(dirname11, "..", "..", "..")
158348
158725
  ];
158349
158726
  for (const appsDir of appsStrategies) {
158350
158727
  for (const profile of ["release", "debug"]) {
158351
- const p3 = join26(appsDir, "cli", "target", profile, exe);
158728
+ const p3 = join27(appsDir, "cli", "target", profile, exe);
158352
158729
  try {
158353
158730
  lstatSync3(p3);
158354
158731
  return p3;
@@ -158358,10 +158735,10 @@ function findCliBinaryAt(opts) {
158358
158735
  }
158359
158736
  const electronCandidates = [
158360
158737
  // From cwd (<Resources>/web) → <Resources>/binaries/band
158361
- resolve5(cwd, "..", "binaries", exe),
158738
+ resolve6(cwd, "..", "binaries", exe),
158362
158739
  // From the bundled dist file (<Resources>/web/dist/start-server.mjs)
158363
158740
  // → <Resources>/binaries/band
158364
- resolve5(dirname11, "..", "..", "binaries", exe)
158741
+ resolve6(dirname11, "..", "..", "binaries", exe)
158365
158742
  ];
158366
158743
  for (const p3 of electronCandidates) {
158367
158744
  try {
@@ -158378,7 +158755,7 @@ function findCliBinary() {
158378
158755
  function checkCliWindows() {
158379
158756
  let contents;
158380
158757
  try {
158381
- contents = readFileSync7(SYMLINK_PATH, "utf-8");
158758
+ contents = readFileSync8(SYMLINK_PATH, "utf-8");
158382
158759
  } catch (err) {
158383
158760
  const code = err.code;
158384
158761
  if (code === "EACCES") return "NotWritable";
@@ -158401,12 +158778,12 @@ async function checkCli() {
158401
158778
  }
158402
158779
  let target;
158403
158780
  try {
158404
- target = realpathSync2(SYMLINK_PATH);
158781
+ target = realpathSync4(SYMLINK_PATH);
158405
158782
  } catch {
158406
158783
  return "NotInstalled";
158407
158784
  }
158408
- const isCargoBuild = target.includes(join26("apps", "cli", "target"));
158409
- const isElectronSidecar = target.endsWith(join26("binaries", "band"));
158785
+ const isCargoBuild = target.includes(join27("apps", "cli", "target"));
158786
+ const isElectronSidecar = target.endsWith(join27("binaries", "band"));
158410
158787
  if (isCargoBuild || isElectronSidecar) {
158411
158788
  return "Installed";
158412
158789
  }
@@ -158448,9 +158825,9 @@ function noBinaryError(env = process.env) {
158448
158825
  );
158449
158826
  }
158450
158827
  function runReg(args) {
158451
- return new Promise((resolve12) => {
158452
- execFile7("reg", args, { windowsHide: true }, (err, stdout) => {
158453
- resolve12(err ? "" : stdout ?? "");
158828
+ return new Promise((resolve13) => {
158829
+ execFile8("reg", args, { windowsHide: true }, (err, stdout) => {
158830
+ resolve13(err ? "" : stdout ?? "");
158454
158831
  });
158455
158832
  });
158456
158833
  }
@@ -158642,7 +159019,7 @@ init_dist38();
158642
159019
 
158643
159020
  // src/server/services/editor-service.ts
158644
159021
  import { realpath as realpath2, stat as stat4 } from "node:fs/promises";
158645
- import { isAbsolute as isAbsolute4, join as join28, resolve as resolve6, sep as sep4 } from "node:path";
159022
+ import { isAbsolute as isAbsolute4, join as join29, resolve as resolve7, sep as sep4 } from "node:path";
158646
159023
 
158647
159024
  // src/server/services/file-watcher.ts
158648
159025
  import { watch as fsWatch } from "node:fs";
@@ -158737,8 +159114,8 @@ function subscribeToFileChanges(workspaceId2, listener) {
158737
159114
  }
158738
159115
 
158739
159116
  // src/server/services/formatter.ts
158740
- import { existsSync as existsSync12, realpathSync as realpathSync3 } from "node:fs";
158741
- import { basename as basename3, dirname as dirname8, isAbsolute as isAbsolute3, join as join27, resolve as resolvePath2 } from "node:path";
159117
+ import { existsSync as existsSync12, realpathSync as realpathSync5 } from "node:fs";
159118
+ import { basename as basename3, dirname as dirname8, isAbsolute as isAbsolute3, join as join28, resolve as resolvePath3 } from "node:path";
158742
159119
  import prettier from "prettier";
158743
159120
  var log37 = createLogger("formatter");
158744
159121
  var FormatterError = class extends Error {
@@ -158752,7 +159129,7 @@ var FormatterError = class extends Error {
158752
159129
  }
158753
159130
  };
158754
159131
  async function formatFile(worktreePath, filePath, content2, options2 = {}) {
158755
- const absFile = isAbsolute3(filePath) ? filePath : resolvePath2(worktreePath, filePath);
159132
+ const absFile = isAbsolute3(filePath) ? filePath : resolvePath3(worktreePath, filePath);
158756
159133
  if (!isInsideWorktree(absFile, worktreePath)) {
158757
159134
  throw new FormatterError(
158758
159135
  "FILE_NOT_IN_WORKTREE",
@@ -158761,7 +159138,7 @@ async function formatFile(worktreePath, filePath, content2, options2 = {}) {
158761
159138
  }
158762
159139
  const start = Date.now();
158763
159140
  prettier.clearConfigCache();
158764
- const ignorePath = resolvePath2(worktreePath, ".prettierignore");
159141
+ const ignorePath = resolvePath3(worktreePath, ".prettierignore");
158765
159142
  const info = await prettier.getFileInfo(absFile, {
158766
159143
  resolveConfig: true,
158767
159144
  ignorePath: existsSync12(ignorePath) ? ignorePath : void 0
@@ -158814,17 +159191,17 @@ async function formatFile(worktreePath, filePath, content2, options2 = {}) {
158814
159191
  function isInsideWorktree(absFile, worktreePath) {
158815
159192
  let realFile;
158816
159193
  try {
158817
- realFile = realpathSync3(absFile);
159194
+ realFile = realpathSync5(absFile);
158818
159195
  } catch {
158819
159196
  try {
158820
- realFile = join27(realpathSync3(dirname8(absFile)), basename3(absFile));
159197
+ realFile = join28(realpathSync5(dirname8(absFile)), basename3(absFile));
158821
159198
  } catch {
158822
159199
  realFile = absFile;
158823
159200
  }
158824
159201
  }
158825
159202
  let realWorktree;
158826
159203
  try {
158827
- realWorktree = realpathSync3(worktreePath);
159204
+ realWorktree = realpathSync5(worktreePath);
158828
159205
  } catch {
158829
159206
  realWorktree = worktreePath;
158830
159207
  }
@@ -158951,7 +159328,7 @@ var EditorService = class {
158951
159328
  * segment-aware containment check against the canonicalized worktree root.
158952
159329
  */
158953
159330
  async resolveTarget(root, filePath) {
158954
- const absoluteTarget = isAbsolute4(filePath) ? resolve6(filePath) : resolve6(root, filePath);
159331
+ const absoluteTarget = isAbsolute4(filePath) ? resolve7(filePath) : resolve7(root, filePath);
158955
159332
  let canonicalRoot = root;
158956
159333
  try {
158957
159334
  canonicalRoot = await realpath2(root);
@@ -158993,7 +159370,7 @@ async function canonicalizeMaybeMissing(p3) {
158993
159370
  const prefix = parts.slice(0, i).join(sep4) || sep4;
158994
159371
  try {
158995
159372
  const canonicalPrefix = await realpath2(prefix);
158996
- return join28(canonicalPrefix, ...parts.slice(i));
159373
+ return join29(canonicalPrefix, ...parts.slice(i));
158997
159374
  } catch {
158998
159375
  }
158999
159376
  }
@@ -159358,14 +159735,14 @@ var historyRouter = t3.router({
159358
159735
  });
159359
159736
 
159360
159737
  // src/server/services/hooks-service.ts
159361
- import { mkdirSync as mkdirSync7, readFileSync as readFileSync8, writeFileSync as writeFileSync4 } from "node:fs";
159362
- import { homedir as homedir8 } from "node:os";
159363
- import { dirname as dirname9, join as join30 } from "node:path";
159738
+ import { mkdirSync as mkdirSync7, readFileSync as readFileSync9, writeFileSync as writeFileSync4 } from "node:fs";
159739
+ import { homedir as homedir9 } from "node:os";
159740
+ import { dirname as dirname9, join as join31 } from "node:path";
159364
159741
 
159365
159742
  // src/server/infra/process/du.ts
159366
- import { execFile as execFile8 } from "node:child_process";
159743
+ import { execFile as execFile9 } from "node:child_process";
159367
159744
  import { readdir as readdir3, stat as stat5 } from "node:fs/promises";
159368
- import { join as join29 } from "node:path";
159745
+ import { join as join30 } from "node:path";
159369
159746
  var MAX_DU_BUFFER = 10 * 1024 * 1024;
159370
159747
  var DU_TIMEOUT_MS = 3e4;
159371
159748
  var STAT_CHUNK = 256;
@@ -159381,9 +159758,9 @@ async function duBytesNodeWalk(path) {
159381
159758
  const filePaths = [];
159382
159759
  for (const entry of entries) {
159383
159760
  if (entry.isDirectory()) {
159384
- stack.push(join29(dir, entry.name));
159761
+ stack.push(join30(dir, entry.name));
159385
159762
  } else if (entry.isFile()) {
159386
- filePaths.push(join29(dir, entry.name));
159763
+ filePaths.push(join30(dir, entry.name));
159387
159764
  }
159388
159765
  }
159389
159766
  for (let i = 0; i < filePaths.length; i += STAT_CHUNK) {
@@ -159408,8 +159785,8 @@ async function duBytes(path) {
159408
159785
  if (process.platform === "win32") {
159409
159786
  return duBytesNodeWalk(path);
159410
159787
  }
159411
- const stdout = await new Promise((resolve12, reject) => {
159412
- execFile8(
159788
+ const stdout = await new Promise((resolve13, reject) => {
159789
+ execFile9(
159413
159790
  "du",
159414
159791
  ["-sk", path],
159415
159792
  { maxBuffer: MAX_DU_BUFFER, timeout: DU_TIMEOUT_MS },
@@ -159418,7 +159795,7 @@ async function duBytes(path) {
159418
159795
  reject(err);
159419
159796
  return;
159420
159797
  }
159421
- resolve12(out);
159798
+ resolve13(out);
159422
159799
  }
159423
159800
  );
159424
159801
  });
@@ -159431,10 +159808,10 @@ async function duBytes(path) {
159431
159808
  }
159432
159809
 
159433
159810
  // src/server/infra/process/install.ts
159434
- import { execFile as execFile9 } from "node:child_process";
159811
+ import { execFile as execFile10 } from "node:child_process";
159435
159812
  async function brewInstall(pkg, resolvedPath) {
159436
- await new Promise((resolve12, reject) => {
159437
- execFile9(
159813
+ await new Promise((resolve13, reject) => {
159814
+ execFile10(
159438
159815
  "brew",
159439
159816
  ["install", pkg],
159440
159817
  { env: { ...process.env, PATH: resolvedPath }, timeout: 12e4 },
@@ -159443,7 +159820,7 @@ async function brewInstall(pkg, resolvedPath) {
159443
159820
  reject(new Error(stderr || err.message));
159444
159821
  return;
159445
159822
  }
159446
- resolve12();
159823
+ resolve13();
159447
159824
  }
159448
159825
  );
159449
159826
  });
@@ -159454,10 +159831,10 @@ var DU_GLOBAL_CONCURRENCY = 8;
159454
159831
  var duInFlight = 0;
159455
159832
  var duWaiting = [];
159456
159833
  function acquireDuSlot() {
159457
- return new Promise((resolve12) => {
159834
+ return new Promise((resolve13) => {
159458
159835
  const grant = () => {
159459
159836
  duInFlight++;
159460
- resolve12(() => {
159837
+ resolve13(() => {
159461
159838
  duInFlight--;
159462
159839
  const next = duWaiting.shift();
159463
159840
  if (next) next();
@@ -159541,11 +159918,11 @@ var HOOK_EVENTS = [
159541
159918
  "SessionEnd"
159542
159919
  ];
159543
159920
  function claudeSettingsPath() {
159544
- return join30(homedir8(), ".claude", "settings.json");
159921
+ return join31(homedir9(), ".claude", "settings.json");
159545
159922
  }
159546
159923
  function loadClaudeSettings() {
159547
159924
  try {
159548
- const data2 = readFileSync8(claudeSettingsPath(), "utf-8");
159925
+ const data2 = readFileSync9(claudeSettingsPath(), "utf-8");
159549
159926
  return JSON.parse(data2);
159550
159927
  } catch {
159551
159928
  return {};
@@ -159965,11 +160342,11 @@ var prereqsRouter = t3.router({
159965
160342
  // src/server/services/project-service.ts
159966
160343
  init_dist38();
159967
160344
  import { existsSync as existsSync13 } from "node:fs";
159968
- import { basename as basename4, join as join32, resolve as resolve7 } from "node:path";
160345
+ import { basename as basename4, join as join33, resolve as resolve8 } from "node:path";
159969
160346
 
159970
160347
  // src/server/services/project-avatar-service.ts
159971
160348
  import { mkdir as mkdir4, readFile as readFile5, rename as rename2, writeFile as writeFile4 } from "node:fs/promises";
159972
- import { join as join31 } from "node:path";
160349
+ import { join as join32 } from "node:path";
159973
160350
 
159974
160351
  // src/server/infra/github/github-client.ts
159975
160352
  var FETCH_TIMEOUT_MS = 1e4;
@@ -160119,7 +160496,7 @@ var ProjectAvatarService = class {
160119
160496
  return null;
160120
160497
  }
160121
160498
  await mkdir4(cacheDir(), { recursive: true });
160122
- const imagePath = join31(cacheDir(), `${key2}.img`);
160499
+ const imagePath = join32(cacheDir(), `${key2}.img`);
160123
160500
  await writeFile4(`${imagePath}.tmp`, result.bytes);
160124
160501
  await rename2(`${imagePath}.tmp`, imagePath);
160125
160502
  await this.writeMeta(key2, entry, {
@@ -160137,7 +160514,7 @@ var ProjectAvatarService = class {
160137
160514
  async readCached(key2, meta2) {
160138
160515
  if (meta2?.status !== "ok" || !meta2.contentType) return null;
160139
160516
  try {
160140
- const bytes = await readFile5(join31(cacheDir(), `${key2}.img`));
160517
+ const bytes = await readFile5(join32(cacheDir(), `${key2}.img`));
160141
160518
  return { bytes, contentType: meta2.contentType };
160142
160519
  } catch {
160143
160520
  return null;
@@ -160147,7 +160524,7 @@ var ProjectAvatarService = class {
160147
160524
  entry.meta = meta2;
160148
160525
  entry.retryAfter = 0;
160149
160526
  await mkdir4(cacheDir(), { recursive: true });
160150
- await writeFile4(join31(cacheDir(), `${key2}.json`), JSON.stringify(meta2));
160527
+ await writeFile4(join32(cacheDir(), `${key2}.json`), JSON.stringify(meta2));
160151
160528
  }
160152
160529
  /** In-memory view of one owner's cache sidecar, loaded from disk once. */
160153
160530
  async entry(ref) {
@@ -160156,7 +160533,7 @@ var ProjectAvatarService = class {
160156
160533
  if (entry) return entry;
160157
160534
  let meta2 = null;
160158
160535
  try {
160159
- meta2 = JSON.parse(await readFile5(join31(cacheDir(), `${key2}.json`), "utf-8"));
160536
+ meta2 = JSON.parse(await readFile5(join32(cacheDir(), `${key2}.json`), "utf-8"));
160160
160537
  } catch {
160161
160538
  }
160162
160539
  entry = this.entries.get(key2) ?? { meta: meta2, retryAfter: 0 };
@@ -160175,7 +160552,7 @@ var ProjectAvatarService = class {
160175
160552
  }
160176
160553
  };
160177
160554
  function cacheDir() {
160178
- return join31(bandHome(), "cache", "github-avatars");
160555
+ return join32(bandHome(), "cache", "github-avatars");
160179
160556
  }
160180
160557
  function cacheKey2(ref) {
160181
160558
  return `${ref.host.replace(/[^a-z0-9.-]/g, "_")}__${ref.owner.toLowerCase()}`;
@@ -160264,8 +160641,8 @@ var ProjectService = class {
160264
160641
  * `git init` checkbox. Read-only — never touches state.
160265
160642
  */
160266
160643
  checkPath(path) {
160267
- const resolvedPath = resolve7(path);
160268
- const isGitRepo = existsSync13(join32(resolvedPath, ".git"));
160644
+ const resolvedPath = resolve8(path);
160645
+ const isGitRepo = existsSync13(join33(resolvedPath, ".git"));
160269
160646
  return { isGitRepo };
160270
160647
  }
160271
160648
  /**
@@ -160274,7 +160651,7 @@ var ProjectService = class {
160274
160651
  * features at the same time as registering the project.
160275
160652
  */
160276
160653
  async gitInit(path) {
160277
- const resolvedPath = resolve7(path);
160654
+ const resolvedPath = resolve8(path);
160278
160655
  await this.git.init(resolvedPath);
160279
160656
  }
160280
160657
  /**
@@ -160300,8 +160677,8 @@ var ProjectService = class {
160300
160677
  );
160301
160678
  }
160302
160679
  }
160303
- const resolvedPath = resolve7(path);
160304
- const kind = existsSync13(join32(resolvedPath, ".git")) ? "git" : "plain";
160680
+ const resolvedPath = resolve8(path);
160681
+ const kind = existsSync13(join33(resolvedPath, ".git")) ? "git" : "plain";
160305
160682
  let defaultBranch = "main";
160306
160683
  let worktrees2 = [];
160307
160684
  if (kind === "git") {
@@ -160480,8 +160857,8 @@ var projectsRouter = t3.router({
160480
160857
  });
160481
160858
 
160482
160859
  // src/server/api/queue/router.ts
160483
- import { realpathSync as realpathSync4 } from "node:fs";
160484
- import { join as join33, resolve as resolve8, sep as sep5 } from "node:path";
160860
+ import { realpathSync as realpathSync6 } from "node:fs";
160861
+ import { join as join34, resolve as resolve9, sep as sep5 } from "node:path";
160485
160862
  var log40 = createLogger("trpc.queue");
160486
160863
  var queuedFileSchema = external_exports2.object({
160487
160864
  mediaType: external_exports2.string(),
@@ -160490,15 +160867,15 @@ var queuedFileSchema = external_exports2.object({
160490
160867
  filename: external_exports2.string().optional()
160491
160868
  });
160492
160869
  function isPathWithinUploadDir(p3) {
160493
- const uploadDir = join33(bandHome(), "uploads");
160494
- const normalized2 = resolve8(p3);
160870
+ const uploadDir = join34(bandHome(), "uploads");
160871
+ const normalized2 = resolve9(p3);
160495
160872
  if (normalized2 !== uploadDir && !normalized2.startsWith(uploadDir + sep5)) {
160496
160873
  return false;
160497
160874
  }
160498
160875
  try {
160499
- const canonicalUploadDir = realpathSync4(uploadDir);
160500
- const canonicalPath = realpathSync4(p3);
160501
- return canonicalPath === canonicalUploadDir || canonicalPath.startsWith(canonicalUploadDir + sep5);
160876
+ const canonicalUploadDir = realpathSync6(uploadDir);
160877
+ const canonicalPath2 = realpathSync6(p3);
160878
+ return canonicalPath2 === canonicalUploadDir || canonicalPath2.startsWith(canonicalUploadDir + sep5);
160502
160879
  } catch {
160503
160880
  return true;
160504
160881
  }
@@ -160511,7 +160888,7 @@ async function resolveQueuedFiles(chatId, files) {
160511
160888
  for (let i = 0; i < files.length; i++) {
160512
160889
  const file2 = files[i];
160513
160890
  const uploadsUrlMatch = file2.url.match(/^\/api\/uploads\/(.+)$/);
160514
- const derivedPath = file2.path ?? (uploadsUrlMatch ? join33(bandHome(), "uploads", uploadsUrlMatch[1]) : void 0);
160891
+ const derivedPath = file2.path ?? (uploadsUrlMatch ? join34(bandHome(), "uploads", uploadsUrlMatch[1]) : void 0);
160515
160892
  if (derivedPath) {
160516
160893
  if (!isPathWithinUploadDir(derivedPath)) {
160517
160894
  log40.warn(
@@ -160673,15 +161050,15 @@ var queueRouter = t3.router({
160673
161050
  stream: publicProcedure.input(external_exports2.object({ workspaceId: external_exports2.string(), chatId: external_exports2.string().optional() })).subscription(async function* (opts) {
160674
161051
  const chatId = opts.input.chatId ?? chatService.getOrCreateDefault(opts.input.workspaceId).id;
160675
161052
  const queue = [];
160676
- let resolve12 = null;
161053
+ let resolve13 = null;
160677
161054
  const unsubscribe = subscribeQueue((id2, messages) => {
160678
161055
  if (id2 !== chatId) return;
160679
161056
  queue.push({ messages });
160680
- resolve12?.();
161057
+ resolve13?.();
160681
161058
  });
160682
161059
  opts.signal?.addEventListener("abort", () => {
160683
161060
  unsubscribe();
160684
- resolve12?.();
161061
+ resolve13?.();
160685
161062
  });
160686
161063
  yield { messages: toWireQueuedMessages(getQueuedMessages(chatId)) };
160687
161064
  queue.length = 0;
@@ -160692,9 +161069,9 @@ var queueRouter = t3.router({
160692
161069
  yield { messages: toWireQueuedMessages(update.messages) };
160693
161070
  }
160694
161071
  await new Promise((r3) => {
160695
- resolve12 = r3;
161072
+ resolve13 = r3;
160696
161073
  });
160697
- resolve12 = null;
161074
+ resolve13 = null;
160698
161075
  }
160699
161076
  } finally {
160700
161077
  unsubscribe();
@@ -160747,8 +161124,8 @@ var schedulerState2 = g6[SCHEDULER_KEY2];
160747
161124
  var USAGE_SCAN_INTERVAL_MS = 5 * 60 * 1e3;
160748
161125
  var MAX_SESSIONS_PER_TICK = 100;
160749
161126
  var EPOCH_SENTINEL = 0;
160750
- function yieldToEventLoop() {
160751
- return new Promise((resolve12) => setImmediate(resolve12));
161127
+ function yieldToEventLoop2() {
161128
+ return new Promise((resolve13) => setImmediate(resolve13));
160752
161129
  }
160753
161130
  var UsageScannerService = class {
160754
161131
  usageEvents;
@@ -160871,7 +161248,7 @@ var UsageScannerService = class {
160871
161248
  let rowsWritten = 0;
160872
161249
  let maxObserved = watermark;
160873
161250
  for (const s2 of slice) {
160874
- await yieldToEventLoop();
161251
+ await yieldToEventLoop2();
160875
161252
  let snap;
160876
161253
  try {
160877
161254
  snap = await reader.getSessionUsage(s2.sessionId, ws.worktreePath);
@@ -161355,14 +161732,14 @@ var statusesRouter = t3.router({
161355
161732
  var statusRouter = t3.router({
161356
161733
  stream: publicProcedure.subscription(async function* (opts) {
161357
161734
  const queue = [];
161358
- let resolve12 = null;
161735
+ let resolve13 = null;
161359
161736
  const unsubscribe = watcherService.subscribe((event) => {
161360
161737
  queue.push(event);
161361
- resolve12?.();
161738
+ resolve13?.();
161362
161739
  });
161363
161740
  opts.signal?.addEventListener("abort", () => {
161364
161741
  unsubscribe();
161365
- resolve12?.();
161742
+ resolve13?.();
161366
161743
  });
161367
161744
  try {
161368
161745
  while (!opts.signal?.aborted) {
@@ -161370,9 +161747,9 @@ var statusRouter = t3.router({
161370
161747
  yield queue.shift();
161371
161748
  }
161372
161749
  await new Promise((r3) => {
161373
- resolve12 = r3;
161750
+ resolve13 = r3;
161374
161751
  });
161375
- resolve12 = null;
161752
+ resolve13 = null;
161376
161753
  }
161377
161754
  } finally {
161378
161755
  unsubscribe();
@@ -161419,7 +161796,7 @@ var TunnelClient = class _TunnelClient {
161419
161796
  const nullDevice = process.platform === "win32" ? "NUL" : "/dev/null";
161420
161797
  const args = ["tunnel", "--config", nullDevice, "--url", `http://localhost:${options2.port}`];
161421
161798
  log44.debug("spawning cloudflared %s", args.join(" "));
161422
- return new Promise((resolve12, reject) => {
161799
+ return new Promise((resolve13, reject) => {
161423
161800
  const child = spawn4("cloudflared", args, {
161424
161801
  env: { ...process.env, PATH: resolvedPath },
161425
161802
  stdio: ["ignore", "pipe", "pipe"]
@@ -161441,7 +161818,7 @@ var TunnelClient = class _TunnelClient {
161441
161818
  emit({ kind: "tunnel-url", url: this.tunnelUrl });
161442
161819
  if (!settled) {
161443
161820
  settled = true;
161444
- resolve12();
161821
+ resolve13();
161445
161822
  }
161446
161823
  }
161447
161824
  }
@@ -161473,7 +161850,7 @@ var TunnelClient = class _TunnelClient {
161473
161850
  new Error(`cloudflared exited with code ${code}: ${stderrChunks.join("").trim()}`)
161474
161851
  );
161475
161852
  } else {
161476
- resolve12();
161853
+ resolve13();
161477
161854
  }
161478
161855
  } else if (wasRunning && code !== 0) {
161479
161856
  emit({
@@ -161486,7 +161863,7 @@ var TunnelClient = class _TunnelClient {
161486
161863
  if (!settled) {
161487
161864
  log44.debug("30s timeout reached, resolving without URL");
161488
161865
  settled = true;
161489
- resolve12();
161866
+ resolve13();
161490
161867
  }
161491
161868
  }, 3e4);
161492
161869
  });
@@ -161990,7 +162367,7 @@ init_dist38();
161990
162367
  // src/server/services/diff-service.ts
161991
162368
  import { existsSync as existsSync14 } from "node:fs";
161992
162369
  import { readFile as readFile6, rm as rm3, stat as stat6 } from "node:fs/promises";
161993
- import { join as join34, resolve as resolve9, sep as sep6 } from "node:path";
162370
+ import { join as join35, resolve as resolve10, sep as sep6 } from "node:path";
161994
162371
  var log48 = createLogger("diff-service");
161995
162372
  var EMPTY_TREE_ARGS = ["hash-object", "-t", "tree", "/dev/null"];
161996
162373
  var DEFAULT_BRANCH_LIMIT = 50;
@@ -162087,7 +162464,7 @@ function parseFileStatuses(nameStatusOutput) {
162087
162464
  return fileStatuses;
162088
162465
  }
162089
162466
  function assertWorktreeRelative(cwd, filePath) {
162090
- const target = resolve9(join34(cwd, filePath));
162467
+ const target = resolve10(join35(cwd, filePath));
162091
162468
  if (target !== cwd && !target.startsWith(cwd + sep6)) {
162092
162469
  throw new Error("Invalid path");
162093
162470
  }
@@ -162102,7 +162479,7 @@ function assertWorktreeRelative(cwd, filePath) {
162102
162479
  }
162103
162480
  async function readUntrackedFileLines(cwd, file2) {
162104
162481
  try {
162105
- const content2 = await readFile6(join34(cwd, file2), "utf-8");
162482
+ const content2 = await readFile6(join35(cwd, file2), "utf-8");
162106
162483
  const lines = content2.split("\n");
162107
162484
  if (lines.length > 0 && lines[lines.length - 1] === "") {
162108
162485
  lines.pop();
@@ -162445,7 +162822,7 @@ var DiffService = class {
162445
162822
  const defaultBranch = workspace.project.defaultBranch;
162446
162823
  const compareBranch = options2.compareBranch ?? defaultBranch;
162447
162824
  const cwd = workspace.worktree.path;
162448
- const hasGit = existsSync14(join34(cwd, ".git"));
162825
+ const hasGit = existsSync14(join35(cwd, ".git"));
162449
162826
  if (workspace.project.kind === "plain" || !hasGit) {
162450
162827
  return {
162451
162828
  headBranch: defaultBranch,
@@ -162477,7 +162854,7 @@ var DiffService = class {
162477
162854
  applyLineCounts(status.staged, parseNumstat(stagedNumstat));
162478
162855
  await Promise.all(
162479
162856
  status.untracked.map(async (entry) => {
162480
- const lines = await countUntrackedLines(join34(cwd, entry.path));
162857
+ const lines = await countUntrackedLines(join35(cwd, entry.path));
162481
162858
  if (lines !== null) {
162482
162859
  entry.additions = lines;
162483
162860
  entry.deletions = 0;
@@ -162619,7 +162996,7 @@ var diffService = new DiffService();
162619
162996
  // src/server/services/files-service.ts
162620
162997
  import { existsSync as existsSync15 } from "node:fs";
162621
162998
  import { cp, mkdir as mkdir5, readdir as readdir4, readFile as readFile7, rename as rename3, rm as rm4, stat as stat7, writeFile as writeFile5 } from "node:fs/promises";
162622
- import { dirname as dirname10, extname as extname3, join as join35, resolve as resolve10, sep as sep7 } from "node:path";
162999
+ import { dirname as dirname10, extname as extname3, join as join36, resolve as resolve11, sep as sep7 } from "node:path";
162623
163000
  var MAX_FILE_SIZE2 = 1024 * 1024;
162624
163001
  var LANG_MAP2 = {
162625
163002
  ".js": "javascript",
@@ -162667,7 +163044,7 @@ var FilesService = class {
162667
163044
  throw new WorkspaceNotFoundError(workspaceId2);
162668
163045
  }
162669
163046
  const root = workspace.worktree.path;
162670
- const target = resolve10(join35(root, relative2));
163047
+ const target = resolve11(join36(root, relative2));
162671
163048
  const insideRoot = target === root || target.startsWith(root + sep7);
162672
163049
  if (!insideRoot) {
162673
163050
  throw new Error("Invalid path");
@@ -163034,7 +163411,7 @@ var GitGraphService = class {
163034
163411
  var gitGraphService = new GitGraphService();
163035
163412
 
163036
163413
  // src/server/infra/search/ripgrep-client.ts
163037
- import { execFile as execFile10, spawn as spawn5 } from "node:child_process";
163414
+ import { execFile as execFile11, spawn as spawn5 } from "node:child_process";
163038
163415
  import { rgPath } from "@vscode/ripgrep";
163039
163416
  function streamMatches(options2) {
163040
163417
  return {
@@ -163121,8 +163498,8 @@ function createIterator(options2) {
163121
163498
  }
163122
163499
  if (error40) throw error40;
163123
163500
  if (done) return { value: void 0, done: true };
163124
- await new Promise((resolve12) => {
163125
- notify2 = resolve12;
163501
+ await new Promise((resolve13) => {
163502
+ notify2 = resolve13;
163126
163503
  });
163127
163504
  }
163128
163505
  },
@@ -163155,8 +163532,8 @@ function listFiles2(cwd) {
163155
163532
  "-g",
163156
163533
  "!**/.DS_Store"
163157
163534
  ];
163158
- return new Promise((resolve12, reject) => {
163159
- execFile10(
163535
+ return new Promise((resolve13, reject) => {
163536
+ execFile11(
163160
163537
  rgPath,
163161
163538
  args,
163162
163539
  { cwd, maxBuffer: LIST_FILES_MAX_BUFFER, encoding: "utf-8" },
@@ -163166,7 +163543,7 @@ function listFiles2(cwd) {
163166
163543
  return;
163167
163544
  }
163168
163545
  const files = stdout.split("\n").filter(Boolean);
163169
- resolve12(files);
163546
+ resolve13(files);
163170
163547
  }
163171
163548
  );
163172
163549
  });
@@ -164014,7 +164391,7 @@ function basicMatch(query) {
164014
164391
  }
164015
164392
  var isNode2 = typeof __require !== "undefined" && typeof window === "undefined";
164016
164393
  function asyncMatcher(token, len, iter2, onFinish) {
164017
- return new Promise((resolve12, reject) => {
164394
+ return new Promise((resolve13, reject) => {
164018
164395
  const INCREMENT = 1e3;
164019
164396
  let i = 0, end = Math.min(INCREMENT, len);
164020
164397
  const step = () => {
@@ -164027,7 +164404,7 @@ function asyncMatcher(token, len, iter2, onFinish) {
164027
164404
  end = Math.min(end + INCREMENT, len);
164028
164405
  isNode2 ? setImmediate(step) : setTimeout(step);
164029
164406
  } else {
164030
- resolve12(onFinish());
164407
+ resolve13(onFinish());
164031
164408
  }
164032
164409
  };
164033
164410
  step();
@@ -164295,7 +164672,7 @@ var workspaceRouter = t3.router({
164295
164672
  }
164296
164673
  const signal = opts.signal;
164297
164674
  const queue = [];
164298
- let resolve12 = null;
164675
+ let resolve13 = null;
164299
164676
  let watcherClosed = false;
164300
164677
  const unsubscribe = editorService.subscribeToFileChanges(opts.input.workspaceId, (path) => {
164301
164678
  if (path === null) {
@@ -164303,9 +164680,9 @@ var workspaceRouter = t3.router({
164303
164680
  } else {
164304
164681
  queue.push({ path });
164305
164682
  }
164306
- resolve12?.();
164683
+ resolve13?.();
164307
164684
  });
164308
- const onAbort = () => resolve12?.();
164685
+ const onAbort = () => resolve13?.();
164309
164686
  signal.addEventListener("abort", onAbort);
164310
164687
  try {
164311
164688
  while (!signal.aborted && !watcherClosed) {
@@ -164314,10 +164691,10 @@ var workspaceRouter = t3.router({
164314
164691
  }
164315
164692
  if (signal.aborted || watcherClosed) break;
164316
164693
  await new Promise((r3) => {
164317
- resolve12 = r3;
164694
+ resolve13 = r3;
164318
164695
  if (signal.aborted || watcherClosed) r3();
164319
164696
  });
164320
- resolve12 = null;
164697
+ resolve13 = null;
164321
164698
  }
164322
164699
  } finally {
164323
164700
  signal.removeEventListener("abort", onAbort);
@@ -164825,9 +165202,9 @@ function createInbox(ws) {
164825
165202
  if (handler) {
164826
165203
  handler(message);
164827
165204
  } else if (waiter) {
164828
- const resolve12 = waiter;
165205
+ const resolve13 = waiter;
164829
165206
  waiter = null;
164830
- resolve12(message);
165207
+ resolve13(message);
164831
165208
  } else {
164832
165209
  queue.push(message);
164833
165210
  }
@@ -164845,8 +165222,8 @@ function createInbox(ws) {
164845
165222
  const queued = queue.shift();
164846
165223
  if (queued !== void 0) return Promise.resolve(queued);
164847
165224
  if (closed) return Promise.resolve(null);
164848
- return new Promise((resolve12) => {
164849
- waiter = resolve12;
165225
+ return new Promise((resolve13) => {
165226
+ waiter = resolve13;
164850
165227
  });
164851
165228
  },
164852
165229
  listen(next) {
@@ -165169,7 +165546,7 @@ var CdpUnreachableError = class extends Error {
165169
165546
  async function captureSnapshot(bandTabId) {
165170
165547
  const cdpTargetId = await ensureCdpTargetId(bandTabId);
165171
165548
  const wsUrl = `ws://${DESKTOP_CDP_HOST}:${DESKTOP_CDP_PORT}/devtools/page/${encodeURIComponent(cdpTargetId)}`;
165172
- return await new Promise((resolve12, reject) => {
165549
+ return await new Promise((resolve13, reject) => {
165173
165550
  const ws = new wrapper_default(wsUrl);
165174
165551
  let nextId2 = 1;
165175
165552
  let settled = false;
@@ -165181,7 +165558,7 @@ async function captureSnapshot(bandTabId) {
165181
165558
  } catch {
165182
165559
  }
165183
165560
  if (err) reject(err);
165184
- else if (data2) resolve12(data2);
165561
+ else if (data2) resolve13(data2);
165185
165562
  else reject(new Error("captureSnapshot: no data and no error"));
165186
165563
  };
165187
165564
  const timeout = setTimeout(() => {
@@ -165414,15 +165791,15 @@ async function handleLspConnection(ws, req) {
165414
165791
  }
165415
165792
 
165416
165793
  // src/server/infra/terminals/create-backend.ts
165417
- import { existsSync as existsSync16, statSync as statSync9 } from "node:fs";
165418
- import { join as join36 } from "node:path";
165794
+ import { existsSync as existsSync16, statSync as statSync10 } from "node:fs";
165795
+ import { join as join37 } from "node:path";
165419
165796
  var log53 = createLogger("terminal-backend");
165420
165797
  function createTerminalBackend(serverRoot, bandHome2) {
165421
165798
  if (process.platform === "win32") return new InProcessTerminalBackend();
165422
165799
  if (process.env.BAND_TERMINAL_DAEMON === "0") return new InProcessTerminalBackend();
165423
165800
  const entry = [
165424
- join36(serverRoot, "terminal-daemon.mjs"),
165425
- join36(serverRoot, "terminal-daemon.ts")
165801
+ join37(serverRoot, "terminal-daemon.mjs"),
165802
+ join37(serverRoot, "terminal-daemon.ts")
165426
165803
  ].find((candidate) => existsSync16(candidate));
165427
165804
  if (!entry) {
165428
165805
  log53.error(
@@ -165431,10 +165808,10 @@ function createTerminalBackend(serverRoot, bandHome2) {
165431
165808
  );
165432
165809
  return new InProcessTerminalBackend();
165433
165810
  }
165434
- const { size: size4, mtimeMs } = statSync9(entry);
165811
+ const { size: size4, mtimeMs } = statSync10(entry);
165435
165812
  return new DaemonTerminalBackend({
165436
165813
  entry,
165437
- runDir: join36(bandHome2, "run"),
165814
+ runDir: join37(bandHome2, "run"),
165438
165815
  cwd: bandHome2,
165439
165816
  buildId: `${size4}-${Math.trunc(mtimeMs)}`
165440
165817
  });
@@ -165444,14 +165821,14 @@ function createTerminalBackend(serverRoot, bandHome2) {
165444
165821
  async function listenWithFallback(server, startPort, attempts = 20) {
165445
165822
  for (let port = startPort; port < startPort + attempts; port++) {
165446
165823
  try {
165447
- await new Promise((resolve12, reject) => {
165824
+ await new Promise((resolve13, reject) => {
165448
165825
  const onError = (err) => {
165449
165826
  server.removeListener("listening", onListening);
165450
165827
  reject(err);
165451
165828
  };
165452
165829
  const onListening = () => {
165453
165830
  server.removeListener("error", onError);
165454
- resolve12();
165831
+ resolve13();
165455
165832
  };
165456
165833
  server.once("error", onError);
165457
165834
  server.once("listening", onListening);
@@ -165474,10 +165851,10 @@ async function listenWithFallback(server, startPort, attempts = 20) {
165474
165851
  }
165475
165852
 
165476
165853
  // src/server/services/cli-skills-service.ts
165477
- import { execFile as execFile11 } from "node:child_process";
165478
- import { statSync as statSync10 } from "node:fs";
165479
- import { homedir as homedir9 } from "node:os";
165480
- import { join as join37 } from "node:path";
165854
+ import { execFile as execFile12 } from "node:child_process";
165855
+ import { statSync as statSync11 } from "node:fs";
165856
+ import { homedir as homedir10 } from "node:os";
165857
+ import { join as join38 } from "node:path";
165481
165858
  var BAND_SKILL_NAMES = [
165482
165859
  "band",
165483
165860
  "band-chat",
@@ -165490,7 +165867,7 @@ var SKILL_FILE = "SKILL.md";
165490
165867
  async function findBandBinary() {
165491
165868
  if (process.platform !== "win32") {
165492
165869
  try {
165493
- statSync10("/usr/local/bin/band");
165870
+ statSync11("/usr/local/bin/band");
165494
165871
  return "/usr/local/bin/band";
165495
165872
  } catch {
165496
165873
  }
@@ -165500,8 +165877,8 @@ async function findBandBinary() {
165500
165877
  return findCliBinary();
165501
165878
  }
165502
165879
  async function runBandSkillsInstall(bandPath, home) {
165503
- return new Promise((resolve12, reject) => {
165504
- execFile11(
165880
+ return new Promise((resolve13, reject) => {
165881
+ execFile12(
165505
165882
  bandPath,
165506
165883
  ["--output", "json", "skills", "install", "--home", home],
165507
165884
  { timeout: 3e4 },
@@ -165511,7 +165888,7 @@ async function runBandSkillsInstall(bandPath, home) {
165511
165888
  reject(new Error(detail ? `${err.message}: ${detail}` : err.message));
165512
165889
  return;
165513
165890
  }
165514
- resolve12(stdout.toString());
165891
+ resolve13(stdout.toString());
165515
165892
  }
165516
165893
  );
165517
165894
  });
@@ -165526,11 +165903,11 @@ async function installSkills(opts = {}) {
165526
165903
  conflicts: [],
165527
165904
  skipped: []
165528
165905
  };
165529
- const home = opts.home ?? homedir9();
165906
+ const home = opts.home ?? homedir10();
165530
165907
  const sharedDir = getSharedSkillsDir(home);
165531
165908
  const markAllSkipped = () => {
165532
165909
  for (const name3 of BAND_SKILL_NAMES) {
165533
- result.skipped.push(join37(sharedDir, name3, SKILL_FILE));
165910
+ result.skipped.push(join38(sharedDir, name3, SKILL_FILE));
165534
165911
  }
165535
165912
  };
165536
165913
  const bandPath = await findBandBinary();
@@ -165760,7 +166137,7 @@ var setupService = new SetupService();
165760
166137
  function logCrash(message) {
165761
166138
  try {
165762
166139
  mkdirSync8(bandHome(), { recursive: true });
165763
- appendFileSync(join38(bandHome(), "server.log"), message, "utf-8");
166140
+ appendFileSync(join39(bandHome(), "server.log"), message, "utf-8");
165764
166141
  } catch {
165765
166142
  }
165766
166143
  }
@@ -165790,7 +166167,7 @@ ${error40.stack || error40.message}
165790
166167
  process.exit(1);
165791
166168
  });
165792
166169
  var SERVER_ROOT = import.meta.dirname;
165793
- var clientDir = join38(SERVER_ROOT, "client");
166170
+ var clientDir = join39(SERVER_ROOT, "client");
165794
166171
  function resolveInitialPort() {
165795
166172
  const fromEnv = Number.parseInt(process.env.PORT ?? "", 10);
165796
166173
  if (Number.isFinite(fromEnv) && fromEnv > 0) return fromEnv;
@@ -165817,7 +166194,7 @@ function getOpenApiSpec() {
165817
166194
  if (isDev) {
165818
166195
  const { generateOpenAPIDocument } = await import("@trpc/openapi");
165819
166196
  const doc2 = await generateOpenAPIDocument(
165820
- join38(SERVER_ROOT, "src", "server", "api", "router.ts"),
166197
+ join39(SERVER_ROOT, "src", "server", "api", "router.ts"),
165821
166198
  {
165822
166199
  title: "Band API",
165823
166200
  version: "1.0.0"
@@ -165826,7 +166203,7 @@ function getOpenApiSpec() {
165826
166203
  doc2.servers = [{ url: "/trpc" }];
165827
166204
  return JSON.stringify(doc2, null, 2);
165828
166205
  }
165829
- const openApiDoc = JSON.parse(readFileSync9(join38(SERVER_ROOT, "openapi.json"), "utf-8"));
166206
+ const openApiDoc = JSON.parse(readFileSync10(join39(SERVER_ROOT, "openapi.json"), "utf-8"));
165830
166207
  openApiDoc.servers = [{ url: "/trpc" }];
165831
166208
  return JSON.stringify(openApiDoc, null, 2);
165832
166209
  })().catch((err) => {
@@ -165849,9 +166226,9 @@ function serveStaticFile(res, root, subdir, rawFilename) {
165849
166226
  res.end("Bad request");
165850
166227
  return;
165851
166228
  }
165852
- const filePath = join38(root, subdir, filename);
166229
+ const filePath = join39(root, subdir, filename);
165853
166230
  try {
165854
- const fileStat = statSync11(filePath);
166231
+ const fileStat = statSync12(filePath);
165855
166232
  const contentType = mimeTypeFromFilename(filename);
165856
166233
  res.writeHead(200, {
165857
166234
  "Content-Type": contentType,
@@ -165872,14 +166249,14 @@ function serveWorkspaceFile(res, workspaceId2, rawPath) {
165872
166249
  return;
165873
166250
  }
165874
166251
  const root = workspace.worktree.path;
165875
- const target = resolve11(join38(root, rawPath));
166252
+ const target = resolve12(join39(root, rawPath));
165876
166253
  if (!target.startsWith(root + sep8) && target !== root) {
165877
166254
  res.writeHead(400);
165878
166255
  res.end("Bad request");
165879
166256
  return;
165880
166257
  }
165881
166258
  try {
165882
- const fileStat = statSync11(target);
166259
+ const fileStat = statSync12(target);
165883
166260
  const contentType = mimeTypeFromFilename(basename5(target));
165884
166261
  res.writeHead(200, {
165885
166262
  "Content-Type": contentType,
@@ -165908,7 +166285,7 @@ async function nodeRequestToWeb(req) {
165908
166285
  let body;
165909
166286
  if (req.method !== "GET" && req.method !== "HEAD") {
165910
166287
  const MAX_REQUEST_BODY_BYTES = 100 * 1024 * 1024;
165911
- body = await new Promise((resolve12, reject) => {
166288
+ body = await new Promise((resolve13, reject) => {
165912
166289
  const chunks = [];
165913
166290
  let bytesSoFar = 0;
165914
166291
  req.on("data", (chunk) => {
@@ -165920,7 +166297,7 @@ async function nodeRequestToWeb(req) {
165920
166297
  }
165921
166298
  chunks.push(chunk);
165922
166299
  });
165923
- req.on("end", () => resolve12(Buffer.concat(chunks)));
166300
+ req.on("end", () => resolve13(Buffer.concat(chunks)));
165924
166301
  req.on("error", reject);
165925
166302
  });
165926
166303
  }
@@ -165954,10 +166331,10 @@ function pipeWebResponseToNodeRes(response, res) {
165954
166331
  break;
165955
166332
  }
165956
166333
  if (!res.write(value)) {
165957
- await new Promise((resolve12, reject) => {
166334
+ await new Promise((resolve13, reject) => {
165958
166335
  const onDrain = () => {
165959
166336
  res.removeListener("error", onError);
165960
- resolve12();
166337
+ resolve13();
165961
166338
  };
165962
166339
  const onError = (err) => {
165963
166340
  res.removeListener("drain", onDrain);
@@ -166069,7 +166446,7 @@ async function main() {
166069
166446
  res.end("Bad request");
166070
166447
  return;
166071
166448
  }
166072
- serveStaticFile(res, bandHome(), join38("shared", partition), rest.slice(slashIdx + 1));
166449
+ serveStaticFile(res, bandHome(), join39("shared", partition), rest.slice(slashIdx + 1));
166073
166450
  return;
166074
166451
  }
166075
166452
  if (req.url?.startsWith("/api/workspace-file/")) {
@@ -166250,7 +166627,7 @@ async function main() {
166250
166627
  const mod = await viteServer.ssrLoadModule("@tanstack/react-start/server-entry");
166251
166628
  return mod.default.fetch(request);
166252
166629
  };
166253
- const apiDir = join38(SERVER_ROOT, "src", "server", "api");
166630
+ const apiDir = join39(SERVER_ROOT, "src", "server", "api");
166254
166631
  viteServer.watcher.on("change", (file2) => {
166255
166632
  if (file2.startsWith(apiDir)) {
166256
166633
  _openApiSpec = null;
@@ -166307,8 +166684,8 @@ async function main() {
166307
166684
  });
166308
166685
  });
166309
166686
  let phaseBStarted;
166310
- const phaseBSettlePromise = new Promise((resolve12) => {
166311
- phaseBStarted = resolve12;
166687
+ const phaseBSettlePromise = new Promise((resolve13) => {
166688
+ phaseBStarted = resolve13;
166312
166689
  });
166313
166690
  let boundPort;
166314
166691
  try {
@@ -166381,7 +166758,7 @@ Failed to bind any port in ${initialPort}..${initialPort + 19}:
166381
166758
  killAllServers();
166382
166759
  await Promise.race([
166383
166760
  phaseBSettlePromise,
166384
- new Promise((resolve12) => setTimeout(resolve12, 5e3).unref())
166761
+ new Promise((resolve13) => setTimeout(resolve13, 5e3).unref())
166385
166762
  ]);
166386
166763
  await tunnelService.stop().catch(() => {
166387
166764
  });
@@ -166395,6 +166772,7 @@ Failed to bind any port in ${initialPort}..${initialPort + 19}:
166395
166772
  await viteServer.close().catch(() => {
166396
166773
  });
166397
166774
  }
166775
+ await stopAllAgentProcesses();
166398
166776
  closeDb();
166399
166777
  process.exit(0);
166400
166778
  };