@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.
- package/dist/client/assets/TerminalPanel-B6hpsMbz.js +1 -0
- package/dist/client/assets/{_basePickBy-Dx35lEgW.js → _basePickBy-DCmd5ciV.js} +1 -1
- package/dist/client/assets/{_baseUniq-CMkXBei9.js → _baseUniq-D9VK2Z8h.js} +1 -1
- package/dist/client/assets/{arc-DK3KeNW-.js → arc-CUv7R2hs.js} +1 -1
- package/dist/client/assets/{architectureDiagram-VXUJARFQ-_hgteJO2.js → architectureDiagram-VXUJARFQ-p6VpjWC_.js} +1 -1
- package/dist/client/assets/{blockDiagram-VD42YOAC-D4nK8NF5.js → blockDiagram-VD42YOAC-BqO2dZTh.js} +1 -1
- package/dist/client/assets/{c4Diagram-YG6GDRKO-D8ZrZiTI.js → c4Diagram-YG6GDRKO-Dj3Q1dN_.js} +1 -1
- package/dist/client/assets/channel-30zU4uX-.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-EqwJIY-C.js → chunk-4BX2VUAB-ZCRzpI76.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CHNR-VN7.js → chunk-55IACEB6-N8w7W4nW.js} +1 -1
- package/dist/client/assets/{chunk-B4BG7PRW-CVzCDJlc.js → chunk-B4BG7PRW-Bd2C6K3g.js} +1 -1
- package/dist/client/assets/{chunk-DI55MBZ5-oTBFM9ze.js → chunk-DI55MBZ5-CSmsIkhT.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-Bo-2Dikp.js → chunk-FMBD7UC4-CSFx-rdE.js} +1 -1
- package/dist/client/assets/{chunk-QN33PNHL-FqjvjGa_.js → chunk-QN33PNHL-OZhPV9ZW.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CKO815gH.js → chunk-QZHKN3VN-CmQTIqBs.js} +1 -1
- package/dist/client/assets/{chunk-TZMSLE5B-3zjd2CiU.js → chunk-TZMSLE5B-CZXFZkbf.js} +1 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-xMXNI9Qc.js +1 -0
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-xMXNI9Qc.js +1 -0
- package/dist/client/assets/clone-D1RDOFVG.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-4x0aq1rT.js → cose-bilkent-S5V4N54A-D2ZJ7fd6.js} +1 -1
- package/dist/client/assets/{dagre-6UL2VRFP-C685K4i3.js → dagre-6UL2VRFP-DWWSarQ5.js} +1 -1
- package/dist/client/assets/{diagram-PSM6KHXK-B6qGMKr7.js → diagram-PSM6KHXK-Brpmw2Hy.js} +1 -1
- package/dist/client/assets/{diagram-QEK2KX5R-Bfd-BbBX.js → diagram-QEK2KX5R-ChxL1lOj.js} +1 -1
- package/dist/client/assets/{diagram-S2PKOQOG-BwLaDVQ4.js → diagram-S2PKOQOG-CWk5ucVa.js} +1 -1
- package/dist/client/assets/{erDiagram-Q2GNP2WA-DoQMRnGW.js → erDiagram-Q2GNP2WA-TKtLKYBO.js} +1 -1
- package/dist/client/assets/{flowDiagram-NV44I4VS-2yTNMz0q.js → flowDiagram-NV44I4VS-CNkvODlq.js} +1 -1
- package/dist/client/assets/{ganttDiagram-JELNMOA3-DXqi-DbY.js → ganttDiagram-JELNMOA3-GpiTT-6g.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-C7CSi-Aw.js → gitGraphDiagram-V2S2FVAM-Dka5-Ebv.js} +1 -1
- package/dist/client/assets/{graph-DZMgyc4x.js → graph-BJfBQ-lk.js} +1 -1
- package/dist/client/assets/{highlighted-body-B3W2YXNL-CrQyrK8r.js → highlighted-body-B3W2YXNL-Dcw7_8Mg.js} +1 -1
- package/dist/client/assets/{index-1zFJtuaW.js → index-B55cfwG2.js} +1 -1
- package/dist/client/assets/{index-CKwJD7xz.js → index-B8-bfanc.js} +1 -1
- package/dist/client/assets/{index-C3LMxvTf.js → index-BBjfnWP1.js} +1 -1
- package/dist/client/assets/{index-DilFeEck.js → index-BVmOFLZL.js} +1 -1
- package/dist/client/assets/{index-BLIt4sly.js → index-Bf0KQTWS.js} +1 -1
- package/dist/client/assets/{index-CHYUiFs8.js → index-BqB0fXhh.js} +1 -1
- package/dist/client/assets/{index-DAIY6Xmz.js → index-Bw0gx-LL.js} +1 -1
- package/dist/client/assets/{index-CW98CyWe.js → index-C04T_A2n.js} +1 -1
- package/dist/client/assets/{index-CLyGoryJ.js → index-D4kWf9j1.js} +1 -1
- package/dist/client/assets/{index-C0k4s5Ib.js → index-D6AQfoh3.js} +1 -1
- package/dist/client/assets/{index-BqO-wiLH.js → index-D7ptzMHA.js} +1 -1
- package/dist/client/assets/{index-CIWfGOhs.js → index-DNCwYJJi.js} +1 -1
- package/dist/client/assets/{index-au-xsyz1.js → index-GWun5iKj.js} +1 -1
- package/dist/client/assets/{infoDiagram-HS3SLOUP-D_T5UsZX.js → infoDiagram-HS3SLOUP-yepsEzeD.js} +1 -1
- package/dist/client/assets/{journeyDiagram-XKPGCS4Q-DVkCPjcS.js → journeyDiagram-XKPGCS4Q-Ah-IVMRC.js} +1 -1
- package/dist/client/assets/{kanban-definition-3W4ZIXB7-DXhSxzi6.js → kanban-definition-3W4ZIXB7-4lmmn3Kf.js} +1 -1
- package/dist/client/assets/{layout-Cf3mHsPQ.js → layout-WnM58jJN.js} +1 -1
- package/dist/client/assets/main-C-PIkr2h.css +1 -0
- package/dist/client/assets/{main-KoITWpfm.js → main-D7maoxCk.js} +253 -248
- package/dist/client/assets/{mindmap-definition-VGOIOE7T-C2IQK3iT.js → mindmap-definition-VGOIOE7T-CW03vZML.js} +1 -1
- package/dist/client/assets/{pieDiagram-ADFJNKIX-BGQzh0tv.js → pieDiagram-ADFJNKIX-b38HzvV9.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-AYHSOK5B-LdhEGcnL.js → quadrantDiagram-AYHSOK5B-D7COvUcB.js} +1 -1
- package/dist/client/assets/{requirementDiagram-UZGBJVZJ-cnV0P1YE.js → requirementDiagram-UZGBJVZJ-Dbo91lMQ.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-TZEHDZUN-BoAgFD3l.js → sankeyDiagram-TZEHDZUN-DPpuI6f6.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WL72ISMW-CxF4TFvD.js → sequenceDiagram-WL72ISMW-osyniVrm.js} +1 -1
- package/dist/client/assets/{stateDiagram-FKZM4ZOC-wf-3-MA5.js → stateDiagram-FKZM4ZOC-CEtXxDG2.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DtnGHNEG.js +1 -0
- package/dist/client/assets/{timeline-definition-IT6M3QCI-W-q-JEwZ.js → timeline-definition-IT6M3QCI-Bbim-hJj.js} +1 -1
- package/dist/client/assets/{treemap-GDKQZRPO-Ct5obnww.js → treemap-GDKQZRPO-Bo5jz1c4.js} +1 -1
- package/dist/client/assets/{workspace._workspaceId-BUh7S3Ta.js → workspace._workspaceId-BAa7JD1w.js} +1 -1
- package/dist/client/assets/{workspace._workspaceId-CeUz5yMg.js → workspace._workspaceId-Dx3IQ0uo.js} +1 -1
- package/dist/client/assets/{xychartDiagram-PRI3JC2R-sXsIzR4l.js → xychartDiagram-PRI3JC2R-CwV1AnKv.js} +1 -1
- package/dist/openapi.json +18 -8
- package/dist/server/assets/{TerminalPanel-DlJiSPdF.js → TerminalPanel-oz5y-mkP.js} +6 -6
- package/dist/server/assets/{_basePickBy-DTbj2hwA.js → _basePickBy-DEzTaMUa.js} +2 -2
- package/dist/server/assets/{_baseUniq-pix9fqoH.js → _baseUniq-CnsXScTA.js} +1 -1
- package/dist/server/assets/_tanstack-start-manifest_v-CGO9e_6B.js +4 -0
- package/dist/server/assets/{arc-BMzVEd8n.js → arc-DFOFayWx.js} +1 -1
- package/dist/server/assets/{architecture-7HQA4BMR-DUwedg7M.js → architecture-7HQA4BMR-n9VmbCuR.js} +6 -6
- package/dist/server/assets/{architectureDiagram-VXUJARFQ-BVdUCEQJ.js → architectureDiagram-VXUJARFQ-IeNkR88v.js} +6 -6
- package/dist/server/assets/{blockDiagram-VD42YOAC-7f6jQaSI.js → blockDiagram-VD42YOAC-CWXr6KW7.js} +6 -6
- package/dist/server/assets/{c4Diagram-YG6GDRKO-Dyit97Cn.js → c4Diagram-YG6GDRKO-DIRimETA.js} +2 -2
- package/dist/server/assets/{channel-JMSLQrct.js → channel-Cdqq5j16.js} +1 -1
- package/dist/server/assets/{chunk-4BX2VUAB-DqntIakH.js → chunk-4BX2VUAB-Cozm9hqk.js} +1 -1
- package/dist/server/assets/{chunk-55IACEB6-CzZbYD81.js → chunk-55IACEB6-DRjrJM1L.js} +1 -1
- package/dist/server/assets/{chunk-B4BG7PRW-Cxs7LhtB.js → chunk-B4BG7PRW-BwiA7gAZ.js} +4 -4
- package/dist/server/assets/{chunk-DI55MBZ5-D82pXnd6.js → chunk-DI55MBZ5-DYx-lIkt.js} +3 -3
- package/dist/server/assets/{chunk-FMBD7UC4-GTnnxNFW.js → chunk-FMBD7UC4-Bd38Wnw9.js} +1 -1
- package/dist/server/assets/{chunk-QN33PNHL-B5OJJkcK.js → chunk-QN33PNHL-ONbSMsSY.js} +1 -1
- package/dist/server/assets/{chunk-QZHKN3VN-BWZGgInb.js → chunk-QZHKN3VN-fU_vVgPJ.js} +1 -1
- package/dist/server/assets/{chunk-TZMSLE5B-9TD1Q4Kc.js → chunk-TZMSLE5B-BBpSfNKJ.js} +1 -1
- package/dist/server/assets/{classDiagram-v2-WZHVMYZB-CaG6UQL6.js → classDiagram-2ON5EDUG-BLteCxZe.js} +5 -5
- package/dist/server/assets/{classDiagram-2ON5EDUG-CaG6UQL6.js → classDiagram-v2-WZHVMYZB-BLteCxZe.js} +5 -5
- package/dist/server/assets/{clone-DgeV5mya.js → clone-DHWXuNGD.js} +1 -1
- package/dist/server/assets/{cose-bilkent-S5V4N54A-DLdWU-b5.js → cose-bilkent-S5V4N54A-Dqv8g3XR.js} +1 -1
- package/dist/server/assets/{dagre-6UL2VRFP-B0nEEYz6.js → dagre-6UL2VRFP-DvvoFaVJ.js} +6 -6
- package/dist/server/assets/{diagram-PSM6KHXK-CheGKVJh.js → diagram-PSM6KHXK-CbKKlJvK.js} +7 -7
- package/dist/server/assets/{diagram-QEK2KX5R-CthFJNjb.js → diagram-QEK2KX5R-GLrYhnWw.js} +6 -6
- package/dist/server/assets/{diagram-S2PKOQOG-D07bUeWi.js → diagram-S2PKOQOG-uaww8JQd.js} +6 -6
- package/dist/server/assets/{erDiagram-Q2GNP2WA-Ci87z6gp.js → erDiagram-Q2GNP2WA-CBpgZJNk.js} +4 -4
- package/dist/server/assets/{flowDiagram-NV44I4VS-DivTbEjK.js → flowDiagram-NV44I4VS-DwqeGUt2.js} +5 -5
- package/dist/server/assets/{ganttDiagram-JELNMOA3-Bfi_i44A.js → ganttDiagram-JELNMOA3-CSDzrG3u.js} +1 -1
- package/dist/server/assets/{gitGraph-G5XIXVHT-DHmMmJEG.js → gitGraph-G5XIXVHT-CI6QTqC-.js} +6 -6
- package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-Czb_wB7o.js → gitGraphDiagram-V2S2FVAM-4Hraf1YX.js} +7 -7
- package/dist/server/assets/{graph-GE1fpS3M.js → graph-BKeol0ik.js} +2 -2
- package/dist/server/assets/{highlighted-body-B3W2YXNL-B9E1TIHZ.js → highlighted-body-B3W2YXNL-C_Th2vxh.js} +1 -1
- package/dist/server/assets/{index-BnjbnlDe.js → index-B-VeeFTd.js} +1 -1
- package/dist/server/assets/{index-DkEya4LL.js → index-BQEmg9fY.js} +1 -1
- package/dist/server/assets/{index-BAImbDDY.js → index-BVY32Ndh.js} +1 -1
- package/dist/server/assets/{index-DaNksnON.js → index-BmH5PL3t.js} +1 -1
- package/dist/server/assets/{index-C3C8EWaf.js → index-BtAQWAP4.js} +1 -1
- package/dist/server/assets/{index-CdUUMlBr.js → index-CXm0C-yc.js} +1 -1
- package/dist/server/assets/{index-wDH-Tiw_.js → index-CklLNUhb.js} +1 -1
- package/dist/server/assets/{index-D6JW20YV.js → index-CoOBJObR.js} +1 -1
- package/dist/server/assets/{index-CA0ijKgN.js → index-DOtn1sP2.js} +1 -1
- package/dist/server/assets/{index-mKjVv-iY.js → index-KTMc95HN.js} +1 -1
- package/dist/server/assets/{index-wHjghntc.js → index-SeV-ZdZi.js} +1 -1
- package/dist/server/assets/{index-CJ4gZHux.js → index-WYUrghvu.js} +1 -1
- package/dist/server/assets/{index-7UcRPUFC.js → index-dS3n7bt3.js} +1 -1
- package/dist/server/assets/{info-VBDWY6EO-DojEXGtR.js → info-VBDWY6EO-qXtU7fls.js} +6 -6
- package/dist/server/assets/{infoDiagram-HS3SLOUP-CMrDcNjJ.js → infoDiagram-HS3SLOUP-Bnhyc8dm.js} +5 -5
- package/dist/server/assets/{journeyDiagram-XKPGCS4Q-arif2oC4.js → journeyDiagram-XKPGCS4Q-DCeht2II.js} +4 -4
- package/dist/server/assets/{kanban-definition-3W4ZIXB7-Ue-uEk6t.js → kanban-definition-3W4ZIXB7-D2wyptyQ.js} +2 -2
- package/dist/server/assets/{layout-Jl8vkWvB.js → layout-D8oV2IEs.js} +4 -4
- package/dist/server/assets/{mermaid-3ZIDBTTL-BwTrF7xS.js → mermaid-3ZIDBTTL-BLpPLDqd.js} +1 -1
- package/dist/server/assets/{mermaid-parser.core-43ahKWIm.js → mermaid-parser.core-BbOvn3Uv.js} +11 -11
- package/dist/server/assets/{mindmap-definition-VGOIOE7T-DrtL2GtX.js → mindmap-definition-VGOIOE7T-CKJkiH58.js} +3 -3
- package/dist/server/assets/{packet-DYOGHKS2-qaKqUqmU.js → packet-DYOGHKS2-CnxepCEW.js} +6 -6
- package/dist/server/assets/{pie-VRWISCQL-sZSNfuEg.js → pie-VRWISCQL-KXauGON3.js} +6 -6
- package/dist/server/assets/{pieDiagram-ADFJNKIX-J90TL7dM.js → pieDiagram-ADFJNKIX-B8juLdbl.js} +7 -7
- package/dist/server/assets/{quadrantDiagram-AYHSOK5B-Ciqcx945.js → quadrantDiagram-AYHSOK5B-CLY3QLCC.js} +1 -1
- package/dist/server/assets/{radar-ZZBFDIW7-Wmt4lMQq.js → radar-ZZBFDIW7-CIRaA_9T.js} +6 -6
- package/dist/server/assets/{requirementDiagram-UZGBJVZJ-BKq7A1k7.js → requirementDiagram-UZGBJVZJ-CgDmK30l.js} +3 -3
- package/dist/server/assets/{router-Cj_mF2JU.js → router-G1mE-O-Q.js} +1677 -920
- package/dist/server/assets/{sankeyDiagram-TZEHDZUN-B5D47iqQ.js → sankeyDiagram-TZEHDZUN-B9355ZLW.js} +1 -1
- package/dist/server/assets/{sequenceDiagram-WL72ISMW-YT-X3Mpm.js → sequenceDiagram-WL72ISMW-SyLdlVhU.js} +3 -3
- package/dist/server/assets/{stateDiagram-FKZM4ZOC-D8X_Rq8R.js → stateDiagram-FKZM4ZOC-B8krws9Z.js} +8 -8
- package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-CHk9LeUj.js → stateDiagram-v2-4FDKWEC3-CqkUhCge.js} +4 -4
- package/dist/server/assets/{timeline-definition-IT6M3QCI-Cq-NLIUZ.js → timeline-definition-IT6M3QCI-eG_EzXZg.js} +2 -2
- package/dist/server/assets/{treemap-GDKQZRPO-f0Rq9dJ9.js → treemap-GDKQZRPO-DS3w9TMX.js} +6 -6
- package/dist/server/assets/{workspace._workspaceId-CzpW_AIO.js → workspace._workspaceId-Bd4v7PwG.js} +1 -1
- package/dist/server/assets/{workspace._workspaceId-CHDrJbrs.js → workspace._workspaceId-DMYkHS43.js} +1 -1
- package/dist/server/assets/{xychartDiagram-PRI3JC2R-zZQ-PeCr.js → xychartDiagram-PRI3JC2R-DAi7zkg3.js} +1 -1
- package/dist/server/server.js +2 -2
- package/dist/start-server.mjs +964 -586
- package/package.json +5 -5
- package/dist/client/assets/TerminalPanel-CX4dQ8jR.js +0 -1
- package/dist/client/assets/channel-DgStcXMV.js +0 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-DqJ8lUPo.js +0 -1
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-DqJ8lUPo.js +0 -1
- package/dist/client/assets/clone-BXDlHTU2.js +0 -1
- package/dist/client/assets/main-CXgf0iaP.css +0 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BZZ4iqpR.js +0 -1
- package/dist/server/assets/_tanstack-start-manifest_v-B5eaoRZw.js +0 -4
package/dist/start-server.mjs
CHANGED
|
@@ -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((
|
|
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
|
-
|
|
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
|
|
891
|
+
let resolve13;
|
|
892
892
|
let reject;
|
|
893
893
|
const promise2 = new Promise((_resolve, _reject) => {
|
|
894
|
-
|
|
894
|
+
resolve13 = _resolve;
|
|
895
895
|
reject = _reject;
|
|
896
896
|
});
|
|
897
897
|
return {
|
|
898
898
|
promise: promise2,
|
|
899
|
-
resolve:
|
|
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((
|
|
937
|
-
timer = setTimeout(() =>
|
|
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
|
|
982
|
+
let resolve13;
|
|
983
983
|
let reject;
|
|
984
984
|
const promise2 = new Promise((res, rej) => {
|
|
985
|
-
|
|
985
|
+
resolve13 = res;
|
|
986
986
|
reject = rej;
|
|
987
987
|
});
|
|
988
988
|
return {
|
|
989
989
|
promise: promise2,
|
|
990
|
-
resolve:
|
|
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:
|
|
2061
|
-
|
|
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:
|
|
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"] ||
|
|
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:
|
|
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"] ||
|
|
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"] ||
|
|
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
|
|
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
|
|
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
|
-
|
|
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 +=
|
|
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 += `${
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 +=
|
|
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 += `${
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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 +=
|
|
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 += `${
|
|
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
|
|
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,
|
|
10289
|
+
res += stringifyTypedArray(value, join40, maximumBreadth);
|
|
10290
10290
|
keys = keys.slice(value.length);
|
|
10291
10291
|
maximumPropertiesToStringify -= value.length;
|
|
10292
|
-
separator =
|
|
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 =
|
|
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 =
|
|
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,
|
|
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,
|
|
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)) :
|
|
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(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
11952
|
+
resolve13,
|
|
11953
11953
|
reject
|
|
11954
11954
|
);
|
|
11955
|
-
})) :
|
|
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(
|
|
37627
|
-
|
|
37626
|
+
return value instanceof P3 ? value : new P3(function(resolve13) {
|
|
37627
|
+
resolve13(value);
|
|
37628
37628
|
});
|
|
37629
37629
|
}
|
|
37630
|
-
return new (P3 || (P3 = Promise))(function(
|
|
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 ?
|
|
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(
|
|
37838
|
-
v2 = o[n](v2), settle(
|
|
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(
|
|
37842
|
+
function settle(resolve13, reject, d2, v2) {
|
|
37843
37843
|
Promise.resolve(v2).then(function(v3) {
|
|
37844
|
-
|
|
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((
|
|
72656
|
+
const promise2 = new Promise((resolve13, reject) => {
|
|
72657
72657
|
var _pendingItems;
|
|
72658
72658
|
item.reject = reject;
|
|
72659
|
-
item.resolve =
|
|
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
|
|
72783
|
+
let resolve13;
|
|
72784
72784
|
let reject;
|
|
72785
72785
|
const promise2 = new Promise((res, rej) => {
|
|
72786
|
-
|
|
72786
|
+
resolve13 = res;
|
|
72787
72787
|
reject = rej;
|
|
72788
72788
|
});
|
|
72789
72789
|
return {
|
|
72790
72790
|
promise: promise2,
|
|
72791
|
-
resolve:
|
|
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:
|
|
72810
|
+
const { promise: promise2, resolve: resolve13, reject } = withResolvers2();
|
|
72811
72811
|
ws.addEventListener("open", () => {
|
|
72812
72812
|
ws.removeEventListener("error", reject);
|
|
72813
|
-
|
|
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:
|
|
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
|
-
|
|
72979
|
+
resolve13();
|
|
72980
72980
|
},
|
|
72981
72981
|
error: (e) => {
|
|
72982
72982
|
callbacks.error(e);
|
|
72983
|
-
|
|
72983
|
+
resolve13();
|
|
72984
72984
|
}
|
|
72985
72985
|
}
|
|
72986
72986
|
});
|
|
72987
72987
|
return () => {
|
|
72988
72988
|
this.delete(message.id);
|
|
72989
72989
|
callbacks.complete();
|
|
72990
|
-
|
|
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((
|
|
78775
|
+
return new Promise((resolve13) => {
|
|
78776
78776
|
animation.onfinish = () => {
|
|
78777
78777
|
cleanup == null ? void 0 : cleanup();
|
|
78778
|
-
|
|
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 =
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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((
|
|
91285
|
-
abortController$1.signal.onabort = () =>
|
|
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
|
|
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((
|
|
105782
|
+
const response = new Promise((resolve13, reject) => {
|
|
105781
105783
|
const pendingResponse = {
|
|
105782
105784
|
resolve: (value) => {
|
|
105783
105785
|
try {
|
|
105784
|
-
|
|
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((
|
|
105842
|
-
this.abortController.signal.addEventListener("abort", () =>
|
|
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((
|
|
106737
|
-
this.waiters.push({ resolve:
|
|
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((
|
|
107407
|
-
child.once("spawn",
|
|
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,
|
|
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((
|
|
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
|
-
|
|
108286
|
+
resolve13(JSON.parse(stdout));
|
|
108216
108287
|
} catch {
|
|
108217
|
-
|
|
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((
|
|
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
|
-
|
|
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((
|
|
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
|
-
|
|
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((
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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((
|
|
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,
|
|
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:
|
|
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) ||
|
|
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((
|
|
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
|
|
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:
|
|
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
|
|
116090
|
-
import { homedir as
|
|
116091
|
-
import { dirname as dirname2, join as
|
|
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
|
|
116363
|
+
return join9(homedir6(), ".band");
|
|
116095
116364
|
}
|
|
116096
116365
|
function settingsFile() {
|
|
116097
|
-
return
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
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,
|
|
127338
|
+
setTimeout: (callback, delay2) => setTimeout(callback, delay2),
|
|
127058
127339
|
clearTimeout: (timeoutId) => clearTimeout(timeoutId),
|
|
127059
|
-
setInterval: (callback,
|
|
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,
|
|
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,
|
|
127370
|
+
return this.#provider.setTimeout(callback, delay2);
|
|
127090
127371
|
}
|
|
127091
127372
|
clearTimeout(timeoutId) {
|
|
127092
127373
|
this.#provider.clearTimeout(timeoutId);
|
|
127093
127374
|
}
|
|
127094
|
-
setInterval(callback,
|
|
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,
|
|
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((
|
|
127285
|
-
timeoutManager.setTimeout(
|
|
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
|
|
127704
|
+
let resolve13;
|
|
127424
127705
|
let reject;
|
|
127425
127706
|
const thenable = new Promise((_resolve, _reject) => {
|
|
127426
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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,
|
|
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
|
-
},
|
|
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,
|
|
131686
|
+
const setOpenAfter = (next, delay2) => {
|
|
131404
131687
|
cancelTimer();
|
|
131405
|
-
timerRef.current = setTimeout(() => setOpen(next),
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
132049
|
-
const [submitting, setSubmitting] = (0,
|
|
132050
|
-
const [error40, setError] = (0,
|
|
132051
|
-
const inputRef = (0,
|
|
132052
|
-
(0,
|
|
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,
|
|
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,
|
|
132809
|
+
const [expandedPaths, setExpandedPaths] = (0, import_react35.useState)(
|
|
132529
132810
|
() => new Set(getCachedExpanded(workspaceId2))
|
|
132530
132811
|
);
|
|
132531
|
-
const [dirContents, setDirContents] = (0,
|
|
132812
|
+
const [dirContents, setDirContents] = (0, import_react35.useState)(
|
|
132532
132813
|
() => new Map(getCachedContents(workspaceId2))
|
|
132533
132814
|
);
|
|
132534
|
-
const [loadingPaths, setLoadingPaths] = (0,
|
|
132535
|
-
const [newEntry, setNewEntry] = (0,
|
|
132536
|
-
const [pendingDelete, setPendingDelete] = (0,
|
|
132537
|
-
const [deleteError, setDeleteError] = (0,
|
|
132538
|
-
const [deleteSubmitting, setDeleteSubmitting] = (0,
|
|
132539
|
-
const [renamingPath, setRenamingPath] = (0,
|
|
132540
|
-
const [clipboard, setClipboard] = (0,
|
|
132541
|
-
const [operationError, setOperationError] = (0,
|
|
132542
|
-
const [treeSelection, setTreeSelection] = (0,
|
|
132543
|
-
const selectedRef = (0,
|
|
132544
|
-
const prevWorkspaceRef = (0,
|
|
132545
|
-
(0,
|
|
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,
|
|
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,
|
|
132847
|
+
const handleSelectRow = (0, import_react35.useCallback)((path, kind) => {
|
|
132567
132848
|
setTreeSelection({ path, kind });
|
|
132568
132849
|
}, []);
|
|
132569
|
-
const clearTreeSelection = (0,
|
|
132850
|
+
const clearTreeSelection = (0, import_react35.useCallback)(() => {
|
|
132570
132851
|
setTreeSelection(null);
|
|
132571
132852
|
}, []);
|
|
132572
|
-
const fetchDir = (0,
|
|
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,
|
|
132877
|
+
(0, import_react35.useEffect)(() => {
|
|
132597
132878
|
fetchDir("");
|
|
132598
132879
|
}, [fetchDir]);
|
|
132599
|
-
(0,
|
|
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,
|
|
132609
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
132960
|
+
const cancelNewEntry = (0, import_react35.useCallback)(() => {
|
|
132680
132961
|
setNewEntry(null);
|
|
132681
132962
|
}, []);
|
|
132682
|
-
const submitNewEntry = (0,
|
|
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,
|
|
132996
|
+
const requestDelete = (0, import_react35.useCallback)((path, kind) => {
|
|
132716
132997
|
setDeleteError(null);
|
|
132717
132998
|
setPendingDelete({ path, kind });
|
|
132718
132999
|
}, []);
|
|
132719
|
-
const cancelDelete = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
133076
|
+
const requestRename = (0, import_react35.useCallback)((path) => {
|
|
132796
133077
|
setRenamingPath(path);
|
|
132797
133078
|
}, []);
|
|
132798
|
-
const cancelRename = (0,
|
|
133079
|
+
const cancelRename = (0, import_react35.useCallback)(() => {
|
|
132799
133080
|
setRenamingPath(null);
|
|
132800
133081
|
}, []);
|
|
132801
|
-
const submitRename = (0,
|
|
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,
|
|
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,
|
|
133110
|
+
const cutPath = (0, import_react35.useCallback)((path, kind) => {
|
|
132830
133111
|
setClipboard({ path, kind, op: "cut" });
|
|
132831
133112
|
}, []);
|
|
132832
|
-
const copyPath = (0,
|
|
133113
|
+
const copyPath = (0, import_react35.useCallback)((path, kind) => {
|
|
132833
133114
|
setClipboard({ path, kind, op: "copy" });
|
|
132834
133115
|
}, []);
|
|
132835
|
-
const uniqueCopyName = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
132917
|
-
const [dropTarget, setDropTarget] = (0,
|
|
132918
|
-
const expandTimerRef = (0,
|
|
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,
|
|
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,
|
|
132926
|
-
const endDrag = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
133561
|
+
var import_react39 = __toESM(require_react(), 1);
|
|
133281
133562
|
|
|
133282
133563
|
// src/dashboard/lib/markdown-preview-width.ts
|
|
133283
|
-
var
|
|
133564
|
+
var import_react36 = __toESM(require_react(), 1);
|
|
133284
133565
|
|
|
133285
133566
|
// src/dashboard/components/ImagePreview.tsx
|
|
133286
|
-
var
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
133353
|
-
(0,
|
|
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,
|
|
133638
|
+
const toggleCase = (0, import_react41.useCallback)(() => {
|
|
133358
133639
|
onOptionsChange({ ...options2, caseSensitive: !options2.caseSensitive });
|
|
133359
133640
|
}, [options2, onOptionsChange]);
|
|
133360
|
-
const toggleWholeWord = (0,
|
|
133641
|
+
const toggleWholeWord = (0, import_react41.useCallback)(() => {
|
|
133361
133642
|
onOptionsChange({ ...options2, wholeWord: !options2.wholeWord });
|
|
133362
133643
|
}, [options2, onOptionsChange]);
|
|
133363
|
-
const toggleRegex = (0,
|
|
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
|
|
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
|
|
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
|
|
133758
|
+
var import_react44 = __toESM(require_react(), 1);
|
|
133478
133759
|
|
|
133479
133760
|
// src/dashboard/hooks/use-editor-history.ts
|
|
133480
|
-
var
|
|
133761
|
+
var import_react45 = __toESM(require_react(), 1);
|
|
133481
133762
|
|
|
133482
133763
|
// src/dashboard/hooks/use-search.ts
|
|
133483
|
-
var
|
|
133764
|
+
var import_react46 = __toESM(require_react(), 1);
|
|
133484
133765
|
|
|
133485
133766
|
// src/dashboard/hooks/use-workspace-path.ts
|
|
133486
|
-
var
|
|
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
|
|
135945
|
+
import { join as join11 } from "node:path";
|
|
135665
135946
|
|
|
135666
135947
|
// src/server/infra/process/exec-file-worker.ts
|
|
135667
|
-
import { execFile as
|
|
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((
|
|
135971
|
+
return new Promise((resolve13) => {
|
|
135691
135972
|
try {
|
|
135692
|
-
|
|
135693
|
-
|
|
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
|
-
|
|
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:
|
|
136015
|
+
for (const { request, resolve: resolve13 } of orphaned) void execOnThisThread(request).then(resolve13);
|
|
135735
136016
|
return;
|
|
135736
136017
|
}
|
|
135737
|
-
for (const { resolve:
|
|
135738
|
-
|
|
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((
|
|
135754
|
-
pending.set(request.id, { request, resolve:
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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 ??
|
|
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((
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
141876
|
-
import { join as
|
|
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 =
|
|
142160
|
+
const configPath = join14(base3, ".band", "config.json");
|
|
141881
142161
|
if (existsSync6(configPath)) {
|
|
141882
142162
|
try {
|
|
141883
|
-
return JSON.parse(
|
|
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 =
|
|
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(
|
|
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
|
|
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(
|
|
141927
|
-
const scriptFile =
|
|
141928
|
-
const exitFile =
|
|
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((
|
|
141949
|
-
resolveExited =
|
|
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((
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
142354
|
+
statSync as statSync6,
|
|
142075
142355
|
unlinkSync
|
|
142076
142356
|
} from "node:fs";
|
|
142077
|
-
import { dirname as dirname3, join as
|
|
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
|
|
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 =
|
|
142139
|
-
const socket = Buffer.byteLength(inRunDir) <= MAX_SOCKET_PATH_BYTES ? inRunDir :
|
|
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:
|
|
142147
|
-
pid:
|
|
142148
|
-
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:
|
|
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
|
|
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((
|
|
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:
|
|
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((
|
|
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((
|
|
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
|
-
|
|
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((
|
|
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")
|
|
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
|
|
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 =
|
|
142753
|
+
const logFd = openSync2(paths.log, "a", 384);
|
|
142474
142754
|
let logSize = 0;
|
|
142475
142755
|
try {
|
|
142476
|
-
logSize =
|
|
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
|
-
|
|
142770
|
+
closeSync2(logFd);
|
|
142491
142771
|
}
|
|
142492
142772
|
})();
|
|
142493
142773
|
child.on("error", () => {
|
|
142494
142774
|
});
|
|
142495
|
-
return new Promise((
|
|
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
|
-
|
|
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 (
|
|
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 =
|
|
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(
|
|
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((
|
|
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((
|
|
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
|
|
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
|
|
143099
|
-
import { homedir as
|
|
143100
|
-
import { join as
|
|
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
|
|
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
|
|
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 =
|
|
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 || !
|
|
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
|
|
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
|
|
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
|
|
143451
|
+
return join19(this.historyDir, encodeURIComponent(terminalId));
|
|
143172
143452
|
}
|
|
143173
143453
|
readMeta(terminalId) {
|
|
143174
|
-
return readJson(
|
|
143454
|
+
return readJson(join19(this.sessionDir(terminalId), "meta.json"));
|
|
143175
143455
|
}
|
|
143176
143456
|
readCheckpoint(terminalId) {
|
|
143177
143457
|
return readJson(
|
|
143178
|
-
|
|
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 =
|
|
143225
|
-
const meta2 = readJson(
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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((
|
|
143859
|
-
session.headless.write("",
|
|
144138
|
+
await new Promise((resolve13) => {
|
|
144139
|
+
session.headless.write("", resolve13);
|
|
143860
144140
|
deathWatch = setInterval(() => {
|
|
143861
|
-
if (this.terminals.get(terminalId) !== session)
|
|
144141
|
+
if (this.terminals.get(terminalId) !== session) resolve13();
|
|
143862
144142
|
}, 50);
|
|
143863
144143
|
deathWatch.unref();
|
|
143864
|
-
drainCap = setTimeout(
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
144775
|
-
const bundledBin =
|
|
144776
|
-
const workspaceBin =
|
|
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((
|
|
144823
|
-
child.once("spawn",
|
|
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
|
|
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
|
|
144856
|
-
realpathSync,
|
|
144857
|
-
statSync as
|
|
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
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
145242
|
+
const abs = resolve5(projectPath, m3);
|
|
144963
145243
|
try {
|
|
144964
|
-
if (
|
|
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 =
|
|
145251
|
+
const abs = resolve5(projectPath, entry);
|
|
144972
145252
|
try {
|
|
144973
|
-
if (
|
|
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 =
|
|
145264
|
+
const includePath = join22(projectPath, ".worktreeinclude");
|
|
144985
145265
|
if (!existsSync9(includePath)) return [];
|
|
144986
|
-
const includeContent =
|
|
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(
|
|
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
|
|
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 =
|
|
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.
|
|
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(
|
|
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 =
|
|
147660
|
-
mkdirSync5(
|
|
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(
|
|
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 =
|
|
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
|
|
148754
|
+
const resolve13 = wake;
|
|
148475
148755
|
wake = null;
|
|
148476
|
-
|
|
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((
|
|
148505
|
-
if (exited || queue.length > 0 || signal?.aborted)
|
|
148506
|
-
else wake =
|
|
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((
|
|
148637
|
-
unsubscribeExit = terminalService.onExit(terminalId, () =>
|
|
148916
|
+
const closed = new Promise((resolve13) => {
|
|
148917
|
+
unsubscribeExit = terminalService.onExit(terminalId, () => resolve13({ kind: "closed" }));
|
|
148638
148918
|
});
|
|
148639
|
-
const timedOut = new Promise((
|
|
148919
|
+
const timedOut = new Promise((resolve13) => {
|
|
148640
148920
|
if (timeoutMs !== void 0) {
|
|
148641
|
-
timer = setTimeout(() =>
|
|
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 = {
|
|
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((
|
|
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
|
-
|
|
149848
|
+
resolve13(optionId ? { outcome: "selected", optionId } : { outcome: "cancelled" });
|
|
149520
149849
|
}
|
|
149521
149850
|
}),
|
|
149522
|
-
() =>
|
|
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((
|
|
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
|
-
|
|
149866
|
+
resolve13(response);
|
|
149538
149867
|
}
|
|
149539
149868
|
}),
|
|
149540
|
-
() =>
|
|
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
|
-
|
|
149655
|
-
|
|
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(
|
|
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
|
-
|
|
149959
|
-
|
|
149960
|
-
|
|
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
|
|
150389
|
-
var sessionIdSchema = external_exports2.string().regex(
|
|
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
|
|
150770
|
+
import { join as join26 } from "node:path";
|
|
150394
150771
|
async function saveUploadedFilesDetailed(fileParts) {
|
|
150395
|
-
const uploadDir =
|
|
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 =
|
|
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((
|
|
150799
|
+
return new Promise((resolve13, reject) => {
|
|
150423
150800
|
const chunks = [];
|
|
150424
150801
|
req.on("data", (chunk) => chunks.push(chunk));
|
|
150425
|
-
req.on("end", () =>
|
|
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 && !
|
|
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((
|
|
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((
|
|
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
|
-
|
|
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((
|
|
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(
|
|
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((
|
|
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((
|
|
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((
|
|
157432
|
+
return new Promise((resolve13) => {
|
|
157056
157433
|
this._streamMapping.set(streamId, {
|
|
157057
|
-
resolveJson:
|
|
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((
|
|
157491
|
-
resolveFn =
|
|
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
|
|
158090
|
+
let resolve13 = null;
|
|
157714
158091
|
const unsubscribe = browserHostService.onEnsureView((event) => {
|
|
157715
158092
|
queue.push(event);
|
|
157716
|
-
|
|
158093
|
+
resolve13?.();
|
|
157717
158094
|
});
|
|
157718
158095
|
opts.signal?.addEventListener("abort", () => {
|
|
157719
158096
|
unsubscribe();
|
|
157720
|
-
|
|
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
|
-
|
|
158105
|
+
resolve13 = r3;
|
|
157729
158106
|
});
|
|
157730
|
-
|
|
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
|
|
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
|
|
158318
|
-
realpathSync as
|
|
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
|
|
158324
|
-
import { basename as basename2, dirname as dirname7, join as
|
|
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 ||
|
|
158327
|
-
return
|
|
158703
|
+
const localAppData = process.env.LOCALAPPDATA || join27(homedir8(), "AppData", "Local");
|
|
158704
|
+
return join27(localAppData, "band", "bin");
|
|
158328
158705
|
}
|
|
158329
|
-
var SYMLINK_PATH = platform2() === "win32" ?
|
|
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
|
-
|
|
158712
|
+
resolve6(cwd, ".."),
|
|
158336
158713
|
// cwd = project root (fallback)
|
|
158337
|
-
|
|
158714
|
+
resolve6(cwd, "apps"),
|
|
158338
158715
|
// From this source file in dev (apps/web/src/server/services/ → apps/)
|
|
158339
|
-
|
|
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
|
-
|
|
158724
|
+
resolve6(dirname11, "..", "..", "..")
|
|
158348
158725
|
];
|
|
158349
158726
|
for (const appsDir of appsStrategies) {
|
|
158350
158727
|
for (const profile of ["release", "debug"]) {
|
|
158351
|
-
const p3 =
|
|
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
|
-
|
|
158738
|
+
resolve6(cwd, "..", "binaries", exe),
|
|
158362
158739
|
// From the bundled dist file (<Resources>/web/dist/start-server.mjs)
|
|
158363
158740
|
// → <Resources>/binaries/band
|
|
158364
|
-
|
|
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 =
|
|
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 =
|
|
158781
|
+
target = realpathSync4(SYMLINK_PATH);
|
|
158405
158782
|
} catch {
|
|
158406
158783
|
return "NotInstalled";
|
|
158407
158784
|
}
|
|
158408
|
-
const isCargoBuild = target.includes(
|
|
158409
|
-
const isElectronSidecar = target.endsWith(
|
|
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((
|
|
158452
|
-
|
|
158453
|
-
|
|
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
|
|
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
|
|
158741
|
-
import { basename as basename3, dirname as dirname8, isAbsolute as isAbsolute3, join as
|
|
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 :
|
|
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 =
|
|
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 =
|
|
159194
|
+
realFile = realpathSync5(absFile);
|
|
158818
159195
|
} catch {
|
|
158819
159196
|
try {
|
|
158820
|
-
realFile =
|
|
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 =
|
|
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) ?
|
|
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
|
|
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
|
|
159362
|
-
import { homedir as
|
|
159363
|
-
import { dirname as dirname9, join as
|
|
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
|
|
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
|
|
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(
|
|
159761
|
+
stack.push(join30(dir, entry.name));
|
|
159385
159762
|
} else if (entry.isFile()) {
|
|
159386
|
-
filePaths.push(
|
|
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((
|
|
159412
|
-
|
|
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
|
-
|
|
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
|
|
159811
|
+
import { execFile as execFile10 } from "node:child_process";
|
|
159435
159812
|
async function brewInstall(pkg, resolvedPath) {
|
|
159436
|
-
await new Promise((
|
|
159437
|
-
|
|
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
|
-
|
|
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((
|
|
159834
|
+
return new Promise((resolve13) => {
|
|
159458
159835
|
const grant = () => {
|
|
159459
159836
|
duInFlight++;
|
|
159460
|
-
|
|
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
|
|
159921
|
+
return join31(homedir9(), ".claude", "settings.json");
|
|
159545
159922
|
}
|
|
159546
159923
|
function loadClaudeSettings() {
|
|
159547
159924
|
try {
|
|
159548
|
-
const data2 =
|
|
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
|
|
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
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
160268
|
-
const isGitRepo = existsSync13(
|
|
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 =
|
|
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 =
|
|
160304
|
-
const kind = existsSync13(
|
|
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
|
|
160484
|
-
import { join as
|
|
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 =
|
|
160494
|
-
const normalized2 =
|
|
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 =
|
|
160500
|
-
const
|
|
160501
|
-
return
|
|
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 ?
|
|
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
|
|
161053
|
+
let resolve13 = null;
|
|
160677
161054
|
const unsubscribe = subscribeQueue((id2, messages) => {
|
|
160678
161055
|
if (id2 !== chatId) return;
|
|
160679
161056
|
queue.push({ messages });
|
|
160680
|
-
|
|
161057
|
+
resolve13?.();
|
|
160681
161058
|
});
|
|
160682
161059
|
opts.signal?.addEventListener("abort", () => {
|
|
160683
161060
|
unsubscribe();
|
|
160684
|
-
|
|
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
|
-
|
|
161072
|
+
resolve13 = r3;
|
|
160696
161073
|
});
|
|
160697
|
-
|
|
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
|
|
160751
|
-
return new Promise((
|
|
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
|
|
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
|
|
161735
|
+
let resolve13 = null;
|
|
161359
161736
|
const unsubscribe = watcherService.subscribe((event) => {
|
|
161360
161737
|
queue.push(event);
|
|
161361
|
-
|
|
161738
|
+
resolve13?.();
|
|
161362
161739
|
});
|
|
161363
161740
|
opts.signal?.addEventListener("abort", () => {
|
|
161364
161741
|
unsubscribe();
|
|
161365
|
-
|
|
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
|
-
|
|
161750
|
+
resolve13 = r3;
|
|
161374
161751
|
});
|
|
161375
|
-
|
|
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((
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
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((
|
|
163125
|
-
notify2 =
|
|
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((
|
|
163159
|
-
|
|
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
|
-
|
|
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((
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
164683
|
+
resolve13?.();
|
|
164307
164684
|
});
|
|
164308
|
-
const onAbort = () =>
|
|
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
|
-
|
|
164694
|
+
resolve13 = r3;
|
|
164318
164695
|
if (signal.aborted || watcherClosed) r3();
|
|
164319
164696
|
});
|
|
164320
|
-
|
|
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
|
|
165205
|
+
const resolve13 = waiter;
|
|
164829
165206
|
waiter = null;
|
|
164830
|
-
|
|
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((
|
|
164849
|
-
waiter =
|
|
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((
|
|
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)
|
|
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
|
|
165418
|
-
import { join as
|
|
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
|
-
|
|
165425
|
-
|
|
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 } =
|
|
165811
|
+
const { size: size4, mtimeMs } = statSync10(entry);
|
|
165435
165812
|
return new DaemonTerminalBackend({
|
|
165436
165813
|
entry,
|
|
165437
|
-
runDir:
|
|
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((
|
|
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
|
-
|
|
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
|
|
165478
|
-
import { statSync as
|
|
165479
|
-
import { homedir as
|
|
165480
|
-
import { join as
|
|
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
|
-
|
|
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((
|
|
165504
|
-
|
|
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
|
-
|
|
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 ??
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
166229
|
+
const filePath = join39(root, subdir, filename);
|
|
165853
166230
|
try {
|
|
165854
|
-
const fileStat =
|
|
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 =
|
|
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 =
|
|
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((
|
|
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", () =>
|
|
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((
|
|
166334
|
+
await new Promise((resolve13, reject) => {
|
|
165958
166335
|
const onDrain = () => {
|
|
165959
166336
|
res.removeListener("error", onError);
|
|
165960
|
-
|
|
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(),
|
|
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 =
|
|
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((
|
|
166311
|
-
phaseBStarted =
|
|
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((
|
|
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
|
};
|