@band-app/server 0.36.0 → 0.38.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-CddLlPAX.js +1 -0
- package/dist/client/assets/{_basePickBy-D1cW8RfA.js → _basePickBy-Mr2ui_ok.js} +1 -1
- package/dist/client/assets/{_baseUniq-DCImWVn2.js → _baseUniq-BbCun8O9.js} +1 -1
- package/dist/client/assets/{arc-Jv1JrzDM.js → arc-D72GLVnK.js} +1 -1
- package/dist/client/assets/{architectureDiagram-VXUJARFQ-DJTHV1y7.js → architectureDiagram-VXUJARFQ-CtL_pV38.js} +1 -1
- package/dist/client/assets/{blockDiagram-VD42YOAC-Cj_bRlht.js → blockDiagram-VD42YOAC-DqyIIG7r.js} +1 -1
- package/dist/client/assets/{c4Diagram-YG6GDRKO-xPUaEy7L.js → c4Diagram-YG6GDRKO-nrzjw8-Z.js} +1 -1
- package/dist/client/assets/channel-CLpfxzfv.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DWHXL8Ea.js → chunk-4BX2VUAB-CxMLZjJR.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Bd7QCFS0.js → chunk-55IACEB6-mmYFV3uk.js} +1 -1
- package/dist/client/assets/{chunk-B4BG7PRW-By14k0HA.js → chunk-B4BG7PRW-D5v9xl9X.js} +1 -1
- package/dist/client/assets/{chunk-DI55MBZ5-D6pCQEj8.js → chunk-DI55MBZ5-D265fj7U.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DYeXE4xT.js → chunk-FMBD7UC4-Dup-9g-C.js} +1 -1
- package/dist/client/assets/{chunk-QN33PNHL-DcLmw7kN.js → chunk-QN33PNHL-C-rWtyk3.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CRzbN_tm.js → chunk-QZHKN3VN-DFPCO41y.js} +1 -1
- package/dist/client/assets/{chunk-TZMSLE5B-B75f53t3.js → chunk-TZMSLE5B-DsmBPBDj.js} +1 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-CHqpXULX.js +1 -0
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-CHqpXULX.js +1 -0
- package/dist/client/assets/clone-kZf8-x5k.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BkAK4OL7.js → cose-bilkent-S5V4N54A-CCWn4YDT.js} +1 -1
- package/dist/client/assets/{dagre-6UL2VRFP-DncmS6YY.js → dagre-6UL2VRFP-CnSoXX5n.js} +1 -1
- package/dist/client/assets/{diagram-PSM6KHXK-Cn4L1emn.js → diagram-PSM6KHXK-D9Zqn5kT.js} +1 -1
- package/dist/client/assets/{diagram-QEK2KX5R-PfH1MBS7.js → diagram-QEK2KX5R-B22XMhhn.js} +1 -1
- package/dist/client/assets/{diagram-S2PKOQOG-DIyYe2yo.js → diagram-S2PKOQOG-CtPm91f8.js} +1 -1
- package/dist/client/assets/{erDiagram-Q2GNP2WA-DWSS5ilU.js → erDiagram-Q2GNP2WA-Ctgsmx_B.js} +1 -1
- package/dist/client/assets/{flowDiagram-NV44I4VS-D8sgfoe8.js → flowDiagram-NV44I4VS-BCt5r11U.js} +1 -1
- package/dist/client/assets/{ganttDiagram-JELNMOA3-CY0uwMQo.js → ganttDiagram-JELNMOA3-P1o9TA7p.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-C5HEaqeu.js → gitGraphDiagram-V2S2FVAM-CxVbFEsr.js} +1 -1
- package/dist/client/assets/{graph-CHdAVft2.js → graph-HCBV9xMB.js} +1 -1
- package/dist/client/assets/{highlighted-body-B3W2YXNL-fz7u7Bcv.js → highlighted-body-B3W2YXNL-Gaqu4_Bi.js} +1 -1
- package/dist/client/assets/{index-xQGEDauU.js → index-B8S7APPC.js} +1 -1
- package/dist/client/assets/{index-BooiqIu5.js → index-B9QUYOAR.js} +1 -1
- package/dist/client/assets/{index-Ru2Dc5A_.js → index-BQlNjJ1Y.js} +1 -1
- package/dist/client/assets/{index-Clbffg3I.js → index-BR7y3Gjm.js} +1 -1
- package/dist/client/assets/{index-DQOFyUau.js → index-Bl-ZW84y.js} +1 -1
- package/dist/client/assets/{index-8d72uArR.js → index-BsNWuo_5.js} +1 -1
- package/dist/client/assets/{index-Dz2ryCk3.js → index-C6aNqpcf.js} +1 -1
- package/dist/client/assets/{index-D-HgfXJR.js → index-CfHnPAjk.js} +1 -1
- package/dist/client/assets/{index-DMwXny-D.js → index-CnoZP7Fs.js} +1 -1
- package/dist/client/assets/{index-D6YofG76.js → index-D05HI19D.js} +1 -1
- package/dist/client/assets/{index-DZYkmDwN.js → index-D854qjw6.js} +1 -1
- package/dist/client/assets/{index-DWJFPU_5.js → index-DIJ2_F70.js} +1 -1
- package/dist/client/assets/{index-CrBImo8f.js → index-Gh5XAQRT.js} +1 -1
- package/dist/client/assets/{infoDiagram-HS3SLOUP-D0hp75aO.js → infoDiagram-HS3SLOUP-CmsTlZB8.js} +1 -1
- package/dist/client/assets/{journeyDiagram-XKPGCS4Q-91HWCjRU.js → journeyDiagram-XKPGCS4Q-D-GI9JIi.js} +1 -1
- package/dist/client/assets/{kanban-definition-3W4ZIXB7-BzioXfF6.js → kanban-definition-3W4ZIXB7-55Qs5mRI.js} +1 -1
- package/dist/client/assets/{layout-DfQbFp33.js → layout-B2VqN6hx.js} +1 -1
- package/dist/client/assets/{main-Dqe_6Q3-.js → main-BYGBqn5C.js} +253 -248
- package/dist/client/assets/main-uTpkFvkD.css +1 -0
- package/dist/client/assets/{mindmap-definition-VGOIOE7T-C_jxHaxD.js → mindmap-definition-VGOIOE7T-5E-mnLiw.js} +1 -1
- package/dist/client/assets/{pieDiagram-ADFJNKIX-Kn_LfuP0.js → pieDiagram-ADFJNKIX--iuEHqnb.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-AYHSOK5B-CbeGV886.js → quadrantDiagram-AYHSOK5B-DuZPB3Et.js} +1 -1
- package/dist/client/assets/{requirementDiagram-UZGBJVZJ-COoa_fat.js → requirementDiagram-UZGBJVZJ-CZiE6M78.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-TZEHDZUN-TXccJBqI.js → sankeyDiagram-TZEHDZUN-Dp81iX-I.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WL72ISMW-Llnk43Jx.js → sequenceDiagram-WL72ISMW-BHT8ZcM2.js} +1 -1
- package/dist/client/assets/{stateDiagram-FKZM4ZOC-DsQWz-Kg.js → stateDiagram-FKZM4ZOC-15v8J55n.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DKjPuiuj.js +1 -0
- package/dist/client/assets/{timeline-definition-IT6M3QCI-B16mbiqF.js → timeline-definition-IT6M3QCI-C4Y7a-dk.js} +1 -1
- package/dist/client/assets/{treemap-GDKQZRPO-CN_Il1TD.js → treemap-GDKQZRPO-1nZ3vFhH.js} +1 -1
- package/dist/client/assets/{workspace._workspaceId-CXgdRFSq.js → workspace._workspaceId-BflC9g6E.js} +1 -1
- package/dist/client/assets/{workspace._workspaceId-DJz9r6Bk.js → workspace._workspaceId-FEoumKx5.js} +1 -1
- package/dist/client/assets/{xychartDiagram-PRI3JC2R-RSssrHeJ.js → xychartDiagram-PRI3JC2R-Cdm6l1QL.js} +1 -1
- package/dist/openapi.json +118 -44
- package/dist/server/assets/{TerminalPanel-BE1IBqp5.js → TerminalPanel-DFfLVpnD.js} +6 -6
- package/dist/server/assets/{_basePickBy-CHo3_xmm.js → _basePickBy-BJp7LAxW.js} +2 -2
- package/dist/server/assets/{_baseUniq-CSupPFs6.js → _baseUniq-C6AsZ3Xv.js} +1 -1
- package/dist/server/assets/_tanstack-start-manifest_v-CY2brxDW.js +4 -0
- package/dist/server/assets/{arc-D44kAr9U.js → arc-CdG8tMD4.js} +1 -1
- package/dist/server/assets/{architecture-7HQA4BMR-vXckakYr.js → architecture-7HQA4BMR-DAiqr3_e.js} +6 -6
- package/dist/server/assets/{architectureDiagram-VXUJARFQ-CR2ITyvh.js → architectureDiagram-VXUJARFQ-B5KfJFud.js} +6 -6
- package/dist/server/assets/{blockDiagram-VD42YOAC-DEeR9cDU.js → blockDiagram-VD42YOAC-DHqCP2b4.js} +6 -6
- package/dist/server/assets/{c4Diagram-YG6GDRKO-DBRRCTXb.js → c4Diagram-YG6GDRKO-BxUADYG0.js} +2 -2
- package/dist/server/assets/{channel-C5tRsfJG.js → channel-AccynRMn.js} +1 -1
- package/dist/server/assets/{chunk-4BX2VUAB-bf7NCd3y.js → chunk-4BX2VUAB-Dr1erjpr.js} +1 -1
- package/dist/server/assets/{chunk-55IACEB6-DWdn6VWI.js → chunk-55IACEB6-Bp9fy_-K.js} +1 -1
- package/dist/server/assets/{chunk-B4BG7PRW-Dkh6IKnk.js → chunk-B4BG7PRW-DIekCOU0.js} +4 -4
- package/dist/server/assets/{chunk-DI55MBZ5-DBWVZkkA.js → chunk-DI55MBZ5-DdsSqZAU.js} +3 -3
- package/dist/server/assets/{chunk-FMBD7UC4-BdS42WOu.js → chunk-FMBD7UC4-yK1qgpi7.js} +1 -1
- package/dist/server/assets/{chunk-QN33PNHL-B8Ct7vG8.js → chunk-QN33PNHL-BbG6vBLZ.js} +1 -1
- package/dist/server/assets/{chunk-QZHKN3VN-B9nHGxsX.js → chunk-QZHKN3VN-x8T6uBe6.js} +1 -1
- package/dist/server/assets/{chunk-TZMSLE5B-BlzccDyU.js → chunk-TZMSLE5B-DLaeAZ2i.js} +1 -1
- package/dist/server/assets/{classDiagram-v2-WZHVMYZB-Chmrw_oF.js → classDiagram-2ON5EDUG-Dm_cGVOP.js} +5 -5
- package/dist/server/assets/{classDiagram-2ON5EDUG-Chmrw_oF.js → classDiagram-v2-WZHVMYZB-Dm_cGVOP.js} +5 -5
- package/dist/server/assets/{clone-aEnx_Sae.js → clone-CORmWwEs.js} +1 -1
- package/dist/server/assets/{cose-bilkent-S5V4N54A-Bc5NoQXq.js → cose-bilkent-S5V4N54A-BfBG7OY2.js} +1 -1
- package/dist/server/assets/{dagre-6UL2VRFP-H_kNmEPM.js → dagre-6UL2VRFP-LXGdLIDl.js} +6 -6
- package/dist/server/assets/{diagram-PSM6KHXK-BcsANBT1.js → diagram-PSM6KHXK-Dq-nGhg0.js} +7 -7
- package/dist/server/assets/{diagram-QEK2KX5R-k-zPaYMJ.js → diagram-QEK2KX5R-rd29zHZp.js} +6 -6
- package/dist/server/assets/{diagram-S2PKOQOG-DjbSY-6m.js → diagram-S2PKOQOG-pULTY82u.js} +6 -6
- package/dist/server/assets/{erDiagram-Q2GNP2WA-CydybEEO.js → erDiagram-Q2GNP2WA-BB0T0Xnn.js} +4 -4
- package/dist/server/assets/{flowDiagram-NV44I4VS-tA99onXp.js → flowDiagram-NV44I4VS-DpODroRz.js} +5 -5
- package/dist/server/assets/{ganttDiagram-JELNMOA3-DsJKSbMm.js → ganttDiagram-JELNMOA3-Cv3UNeb8.js} +1 -1
- package/dist/server/assets/{gitGraph-G5XIXVHT-BNHu-oQ-.js → gitGraph-G5XIXVHT-Gi_FOXtP.js} +6 -6
- package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-CzPNHl73.js → gitGraphDiagram-V2S2FVAM-BJPLdwXn.js} +7 -7
- package/dist/server/assets/{graph-BnMaPr50.js → graph-DZvAvEGU.js} +2 -2
- package/dist/server/assets/{highlighted-body-B3W2YXNL-BdiOjvlf.js → highlighted-body-B3W2YXNL-BpysDJ-x.js} +1 -1
- package/dist/server/assets/{index-Z2HsI7K-.js → index-1E-3f8Qq.js} +1 -1
- package/dist/server/assets/{index-BDjoQgaj.js → index-BERXawHP.js} +1 -1
- package/dist/server/assets/{index-C1sJw8Wd.js → index-BN_8r_Ld.js} +1 -1
- package/dist/server/assets/{index-BcHVcca2.js → index-C3lgs4G4.js} +1 -1
- package/dist/server/assets/{index-CGb2LUtT.js → index-CKDVINR-.js} +1 -1
- package/dist/server/assets/{index-DKZU081P.js → index-CSCKMAKA.js} +1 -1
- package/dist/server/assets/{index-BuEcvcgH.js → index-ChLbrNFl.js} +1 -1
- package/dist/server/assets/{index-CPWcRp4N.js → index-ChPBr3vZ.js} +1 -1
- package/dist/server/assets/{index-BbZG02I3.js → index-CzlCSrfR.js} +1 -1
- package/dist/server/assets/{index-CvQ9Ebcc.js → index-D1exxtRP.js} +1 -1
- package/dist/server/assets/{index-BdUQ01QB.js → index-U-1MZOIQ.js} +1 -1
- package/dist/server/assets/{index-DYrcmtj8.js → index-Y0CJ6FO8.js} +1 -1
- package/dist/server/assets/{index-B5Ou6PeY.js → index-iqainN_h.js} +1 -1
- package/dist/server/assets/{info-VBDWY6EO-C24hC3ph.js → info-VBDWY6EO-Ba8HLWBX.js} +6 -6
- package/dist/server/assets/{infoDiagram-HS3SLOUP-CSvzttKw.js → infoDiagram-HS3SLOUP-BYfrlW-j.js} +5 -5
- package/dist/server/assets/{journeyDiagram-XKPGCS4Q-Bb7ADiou.js → journeyDiagram-XKPGCS4Q-VV4qbZDl.js} +4 -4
- package/dist/server/assets/{kanban-definition-3W4ZIXB7-BCi9DXfZ.js → kanban-definition-3W4ZIXB7-TtjjtFt_.js} +2 -2
- package/dist/server/assets/{layout-CBoh_yzS.js → layout-CxNf3z_2.js} +4 -4
- package/dist/server/assets/{mermaid-3ZIDBTTL-DrE5sAWk.js → mermaid-3ZIDBTTL-ChndXjXw.js} +1 -1
- package/dist/server/assets/{mermaid-parser.core-C6_1Cugd.js → mermaid-parser.core-nvqu-aiP.js} +11 -11
- package/dist/server/assets/{mindmap-definition-VGOIOE7T-yqPdoOIb.js → mindmap-definition-VGOIOE7T-DME5Y_pR.js} +3 -3
- package/dist/server/assets/{packet-DYOGHKS2-DJmc50nE.js → packet-DYOGHKS2-Bt1WHvgh.js} +6 -6
- package/dist/server/assets/{pie-VRWISCQL-CvrR2-yk.js → pie-VRWISCQL-WTXmin9S.js} +6 -6
- package/dist/server/assets/{pieDiagram-ADFJNKIX-CFOW6PnN.js → pieDiagram-ADFJNKIX-CUbwYVab.js} +7 -7
- package/dist/server/assets/{quadrantDiagram-AYHSOK5B-3A-aZNyC.js → quadrantDiagram-AYHSOK5B-BB6u0IN3.js} +1 -1
- package/dist/server/assets/{radar-ZZBFDIW7-Cfbkh5bz.js → radar-ZZBFDIW7-BWKvWMhz.js} +6 -6
- package/dist/server/assets/{requirementDiagram-UZGBJVZJ-Dlll26uf.js → requirementDiagram-UZGBJVZJ-BLRtjxGN.js} +3 -3
- package/dist/server/assets/{router-B261twKF.js → router-BjXwm096.js} +1518 -885
- package/dist/server/assets/{sankeyDiagram-TZEHDZUN-BQaOXs3v.js → sankeyDiagram-TZEHDZUN-BF1Ts-tv.js} +1 -1
- package/dist/server/assets/{sequenceDiagram-WL72ISMW-BCAnfOwu.js → sequenceDiagram-WL72ISMW-DB8euEl-.js} +3 -3
- package/dist/server/assets/{stateDiagram-FKZM4ZOC-BqJZtxdF.js → stateDiagram-FKZM4ZOC-CgrYrlDa.js} +8 -8
- package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-1ifEjgYq.js → stateDiagram-v2-4FDKWEC3-Ch28pf2n.js} +4 -4
- package/dist/server/assets/{timeline-definition-IT6M3QCI-CAWbczQG.js → timeline-definition-IT6M3QCI-jW-suedf.js} +2 -2
- package/dist/server/assets/{treemap-GDKQZRPO-BK5fWRQl.js → treemap-GDKQZRPO-ClNoljcd.js} +6 -6
- package/dist/server/assets/{workspace._workspaceId-C895SrvA.js → workspace._workspaceId-CBpMR_kd.js} +1 -1
- package/dist/server/assets/{workspace._workspaceId-DJjGZFKN.js → workspace._workspaceId-CD0MjjsK.js} +1 -1
- package/dist/server/assets/{xychartDiagram-PRI3JC2R-DfSubvZj.js → xychartDiagram-PRI3JC2R-BKGpeSar.js} +1 -1
- package/dist/server/server.js +2 -2
- package/dist/start-server.mjs +677 -421
- package/package.json +5 -5
- package/dist/client/assets/TerminalPanel-6-rt7Tzp.js +0 -1
- package/dist/client/assets/channel-BObJvFJf.js +0 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-B4j3Xs8O.js +0 -1
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-B4j3Xs8O.js +0 -1
- package/dist/client/assets/clone-D1oJjm-k.js +0 -1
- package/dist/client/assets/main-CXgf0iaP.css +0 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BZgMRt9_.js +0 -1
- package/dist/server/assets/_tanstack-start-manifest_v-Cnfw-Mtl.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) => {
|
|
@@ -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,
|
|
@@ -91039,7 +91039,7 @@ var require_dist5 = __commonJS({
|
|
|
91039
91039
|
// start-server.ts
|
|
91040
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 join39, resolve 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;
|
|
@@ -92313,11 +92313,17 @@ function notify(chatId) {
|
|
|
92313
92313
|
}
|
|
92314
92314
|
function cloneMessage(msg) {
|
|
92315
92315
|
return {
|
|
92316
|
-
|
|
92317
|
-
text: msg.text,
|
|
92316
|
+
...msg,
|
|
92318
92317
|
files: msg.files ? msg.files.map((f2) => ({ ...f2 })) : void 0
|
|
92319
92318
|
};
|
|
92320
92319
|
}
|
|
92320
|
+
function turnOptions(input) {
|
|
92321
|
+
return {
|
|
92322
|
+
...input.mode !== void 0 && { mode: input.mode },
|
|
92323
|
+
...input.model !== void 0 && { model: input.model },
|
|
92324
|
+
...input.codingAgentId !== void 0 && { codingAgentId: input.codingAgentId }
|
|
92325
|
+
};
|
|
92326
|
+
}
|
|
92321
92327
|
function subscribeQueue(listener) {
|
|
92322
92328
|
queueListeners.add(listener);
|
|
92323
92329
|
return () => {
|
|
@@ -92328,7 +92334,8 @@ function pushQueuedMessage(chatId, input) {
|
|
|
92328
92334
|
const message = {
|
|
92329
92335
|
id: randomUUID(),
|
|
92330
92336
|
text: input.text,
|
|
92331
|
-
files: input.files && input.files.length > 0 ? input.files.map((f2) => ({ ...f2 })) : void 0
|
|
92337
|
+
files: input.files && input.files.length > 0 ? input.files.map((f2) => ({ ...f2 })) : void 0,
|
|
92338
|
+
...turnOptions(input)
|
|
92332
92339
|
};
|
|
92333
92340
|
const msgs = store.get(chatId);
|
|
92334
92341
|
if (msgs) {
|
|
@@ -92343,11 +92350,17 @@ function setQueuedMessages(chatId, messages) {
|
|
|
92343
92350
|
if (messages.length === 0) {
|
|
92344
92351
|
store.delete(chatId);
|
|
92345
92352
|
} else {
|
|
92346
|
-
const
|
|
92347
|
-
|
|
92348
|
-
|
|
92349
|
-
|
|
92350
|
-
|
|
92353
|
+
const previous = new Map((store.get(chatId) ?? []).map((m3) => [m3.id, m3]));
|
|
92354
|
+
const stored = messages.map((m3) => {
|
|
92355
|
+
const kept = m3.id !== void 0 ? previous.get(m3.id) : void 0;
|
|
92356
|
+
return {
|
|
92357
|
+
id: m3.id ?? randomUUID(),
|
|
92358
|
+
text: m3.text,
|
|
92359
|
+
files: m3.files && m3.files.length > 0 ? m3.files.map((f2) => ({ ...f2 })) : void 0,
|
|
92360
|
+
...kept && turnOptions(kept),
|
|
92361
|
+
...turnOptions(m3)
|
|
92362
|
+
};
|
|
92363
|
+
});
|
|
92351
92364
|
store.set(chatId, stored);
|
|
92352
92365
|
}
|
|
92353
92366
|
notify(chatId);
|
|
@@ -92355,6 +92368,13 @@ function setQueuedMessages(chatId, messages) {
|
|
|
92355
92368
|
function getQueuedMessages(chatId) {
|
|
92356
92369
|
return (store.get(chatId) ?? []).map(cloneMessage);
|
|
92357
92370
|
}
|
|
92371
|
+
function hasQueuedMessages(chatId) {
|
|
92372
|
+
return (store.get(chatId)?.length ?? 0) > 0;
|
|
92373
|
+
}
|
|
92374
|
+
function peekQueuedMessage(chatId) {
|
|
92375
|
+
const first = store.get(chatId)?.[0];
|
|
92376
|
+
return first ? cloneMessage(first) : null;
|
|
92377
|
+
}
|
|
92358
92378
|
function shiftQueuedMessage(chatId) {
|
|
92359
92379
|
const msgs = store.get(chatId);
|
|
92360
92380
|
if (!msgs || msgs.length === 0) return null;
|
|
@@ -92460,6 +92480,8 @@ import { join as join25 } from "node:path";
|
|
|
92460
92480
|
|
|
92461
92481
|
// src/server/infra/agents/acp-agent-process.ts
|
|
92462
92482
|
import { spawn } from "node:child_process";
|
|
92483
|
+
import { realpathSync } from "node:fs";
|
|
92484
|
+
import { resolve as resolve3 } from "node:path";
|
|
92463
92485
|
import { Readable, Writable } from "node:stream";
|
|
92464
92486
|
|
|
92465
92487
|
// ../../node_modules/.pnpm/@agentclientprotocol+sdk@1.5.0_zod@3.25.76/node_modules/@agentclientprotocol/sdk/dist/schema/index.js
|
|
@@ -105777,11 +105799,11 @@ var Connection = class {
|
|
|
105777
105799
|
const id2 = this.nextRequestId++;
|
|
105778
105800
|
let cancel = () => {
|
|
105779
105801
|
};
|
|
105780
|
-
const response = new Promise((
|
|
105802
|
+
const response = new Promise((resolve13, reject) => {
|
|
105781
105803
|
const pendingResponse = {
|
|
105782
105804
|
resolve: (value) => {
|
|
105783
105805
|
try {
|
|
105784
|
-
|
|
105806
|
+
resolve13(mapResponse ? mapResponse(value) : value);
|
|
105785
105807
|
} catch (error40) {
|
|
105786
105808
|
reject(error40);
|
|
105787
105809
|
}
|
|
@@ -105838,8 +105860,8 @@ var Connection = class {
|
|
|
105838
105860
|
this.stream = stream;
|
|
105839
105861
|
this.staticHandlers = handlers3;
|
|
105840
105862
|
this.allowBatches = options2?.allowBatches ?? true;
|
|
105841
|
-
this.closedPromise = new Promise((
|
|
105842
|
-
this.abortController.signal.addEventListener("abort", () =>
|
|
105863
|
+
this.closedPromise = new Promise((resolve13) => {
|
|
105864
|
+
this.abortController.signal.addEventListener("abort", () => resolve13());
|
|
105843
105865
|
});
|
|
105844
105866
|
void this.receive();
|
|
105845
105867
|
}
|
|
@@ -106733,8 +106755,8 @@ var AsyncQueue = class {
|
|
|
106733
106755
|
if (this.failed) {
|
|
106734
106756
|
return Promise.reject(this.failure);
|
|
106735
106757
|
}
|
|
106736
|
-
return new Promise((
|
|
106737
|
-
this.waiters.push({ resolve:
|
|
106758
|
+
return new Promise((resolve13, reject) => {
|
|
106759
|
+
this.waiters.push({ resolve: resolve13, reject });
|
|
106738
106760
|
});
|
|
106739
106761
|
}
|
|
106740
106762
|
};
|
|
@@ -107340,6 +107362,13 @@ var legacyClientNotificationMethods = /* @__PURE__ */ new Set([
|
|
|
107340
107362
|
|
|
107341
107363
|
// src/server/infra/agents/acp-agent-process.ts
|
|
107342
107364
|
var log = createLogger("acp-agent");
|
|
107365
|
+
function canonicalPath(path) {
|
|
107366
|
+
try {
|
|
107367
|
+
return realpathSync(path);
|
|
107368
|
+
} catch {
|
|
107369
|
+
return resolve3(path);
|
|
107370
|
+
}
|
|
107371
|
+
}
|
|
107343
107372
|
var STARTUP_TIMEOUT_MS = 6e4;
|
|
107344
107373
|
var LOAD_TIMEOUT_MS = 18e4;
|
|
107345
107374
|
var STOP_TIMEOUT_MS = 3e3;
|
|
@@ -107350,8 +107379,42 @@ var CLIENT_CAPABILITIES = {
|
|
|
107350
107379
|
// Claude Code's AskUserQuestion arrives as a form elicitation, and is
|
|
107351
107380
|
// disabled when the client can't render one.
|
|
107352
107381
|
elicitation: { form: {} },
|
|
107353
|
-
session: { notices: {} }
|
|
107354
|
-
|
|
107382
|
+
session: { notices: {} },
|
|
107383
|
+
// JetBrains AIR extension: the Claude adapter reports background work
|
|
107384
|
+
// (background Bash, Monitor, workflows) as `async_task_*` updates only to
|
|
107385
|
+
// a client that lists `asyncTasks`. Band uses them to keep the process
|
|
107386
|
+
// alive while that work runs.
|
|
107387
|
+
_meta: { jetbrains: { air: { version: 1, capabilities: ["asyncTasks"] } } }
|
|
107388
|
+
};
|
|
107389
|
+
function asAsyncTaskNotification(message) {
|
|
107390
|
+
if (!message || typeof message !== "object") return null;
|
|
107391
|
+
const m3 = message;
|
|
107392
|
+
if (m3.method !== methods.client.session.update) return null;
|
|
107393
|
+
const params = m3.params;
|
|
107394
|
+
const update = params?.update;
|
|
107395
|
+
if (typeof params?.sessionId !== "string" || typeof update?.sessionUpdate !== "string" || !update.sessionUpdate.startsWith("async_task_") || typeof update.asyncTaskId !== "string") {
|
|
107396
|
+
return null;
|
|
107397
|
+
}
|
|
107398
|
+
return params;
|
|
107399
|
+
}
|
|
107400
|
+
function splitAsyncTasks(readable, onAsyncTask) {
|
|
107401
|
+
return readable.pipeThrough(
|
|
107402
|
+
new TransformStream({
|
|
107403
|
+
transform(message, controller) {
|
|
107404
|
+
const task = asAsyncTaskNotification(message);
|
|
107405
|
+
if (!task) {
|
|
107406
|
+
controller.enqueue(message);
|
|
107407
|
+
return;
|
|
107408
|
+
}
|
|
107409
|
+
try {
|
|
107410
|
+
onAsyncTask(task);
|
|
107411
|
+
} catch (err) {
|
|
107412
|
+
log.warn({ err }, "async task handler threw");
|
|
107413
|
+
}
|
|
107414
|
+
}
|
|
107415
|
+
})
|
|
107416
|
+
);
|
|
107417
|
+
}
|
|
107355
107418
|
function stderrTail() {
|
|
107356
107419
|
let buf = "";
|
|
107357
107420
|
return {
|
|
@@ -107410,17 +107473,21 @@ var AcpAgentProcess = class _AcpAgentProcess {
|
|
|
107410
107473
|
if (child.pid === void 0) liveChildren.delete(child);
|
|
107411
107474
|
});
|
|
107412
107475
|
try {
|
|
107413
|
-
await new Promise((
|
|
107414
|
-
child.once("spawn",
|
|
107476
|
+
await new Promise((resolve13, reject) => {
|
|
107477
|
+
child.once("spawn", resolve13);
|
|
107415
107478
|
child.once("error", reject);
|
|
107416
107479
|
});
|
|
107417
107480
|
} catch (err) {
|
|
107418
107481
|
throw new Error(`Could not start ${label}: ${err.message}`);
|
|
107419
107482
|
}
|
|
107420
|
-
const
|
|
107483
|
+
const wire = ndJsonStream2(
|
|
107421
107484
|
Writable.toWeb(child.stdin),
|
|
107422
107485
|
Readable.toWeb(child.stdout)
|
|
107423
107486
|
);
|
|
107487
|
+
const stream = {
|
|
107488
|
+
writable: wire.writable,
|
|
107489
|
+
readable: splitAsyncTasks(wire.readable, (n) => handlers3.onAsyncTask?.(n))
|
|
107490
|
+
};
|
|
107424
107491
|
const connection = client({ name: "band" }).onNotification(methods.client.session.update, (ctx) => {
|
|
107425
107492
|
handlers3.onUpdate(ctx.params);
|
|
107426
107493
|
}).onRequest(methods.client.session.requestPermission, async (ctx) => ({
|
|
@@ -107525,6 +107592,16 @@ var AcpAgentProcess = class _AcpAgentProcess {
|
|
|
107525
107592
|
* the page cap bounds that walk.
|
|
107526
107593
|
*/
|
|
107527
107594
|
async listSessions(cwd, limit = 200) {
|
|
107595
|
+
const dir = canonicalPath(cwd);
|
|
107596
|
+
const resolved = /* @__PURE__ */ new Map();
|
|
107597
|
+
const inDir = (s2) => {
|
|
107598
|
+
let path = resolved.get(s2.cwd);
|
|
107599
|
+
if (path === void 0) {
|
|
107600
|
+
path = canonicalPath(s2.cwd);
|
|
107601
|
+
resolved.set(s2.cwd, path);
|
|
107602
|
+
}
|
|
107603
|
+
return path === dir;
|
|
107604
|
+
};
|
|
107528
107605
|
const sessions = [];
|
|
107529
107606
|
let cursor;
|
|
107530
107607
|
for (let page = 0; page < 10 && sessions.length < limit; page++) {
|
|
@@ -107534,7 +107611,7 @@ var AcpAgentProcess = class _AcpAgentProcess {
|
|
|
107534
107611
|
this.label
|
|
107535
107612
|
)
|
|
107536
107613
|
);
|
|
107537
|
-
sessions.push(...res.sessions);
|
|
107614
|
+
sessions.push(...res.sessions.filter(inDir));
|
|
107538
107615
|
cursor = res.nextCursor;
|
|
107539
107616
|
if (!cursor) break;
|
|
107540
107617
|
}
|
|
@@ -107620,16 +107697,16 @@ async function stopAllAgentProcesses() {
|
|
|
107620
107697
|
}
|
|
107621
107698
|
async function stopAgentProcess(child) {
|
|
107622
107699
|
if (child.pid === void 0) {
|
|
107623
|
-
await new Promise((
|
|
107624
|
-
child.once("spawn", () =>
|
|
107625
|
-
child.once("error", () =>
|
|
107700
|
+
await new Promise((resolve13) => {
|
|
107701
|
+
child.once("spawn", () => resolve13());
|
|
107702
|
+
child.once("error", () => resolve13());
|
|
107626
107703
|
});
|
|
107627
107704
|
}
|
|
107628
107705
|
const pid = child.pid;
|
|
107629
107706
|
if (pid === void 0) return;
|
|
107630
|
-
const exited = new Promise((
|
|
107631
|
-
if (child.exitCode !== null || child.signalCode !== null)
|
|
107632
|
-
else child.once("exit", () =>
|
|
107707
|
+
const exited = new Promise((resolve13) => {
|
|
107708
|
+
if (child.exitCode !== null || child.signalCode !== null) resolve13();
|
|
107709
|
+
else child.once("exit", () => resolve13());
|
|
107633
107710
|
});
|
|
107634
107711
|
const running = () => {
|
|
107635
107712
|
if (process.platform === "win32") return child.exitCode === null && child.signalCode === null;
|
|
@@ -107647,7 +107724,7 @@ async function stopAgentProcess(child) {
|
|
|
107647
107724
|
await Promise.race([exited, delay(1e3)]);
|
|
107648
107725
|
}
|
|
107649
107726
|
function delay(ms) {
|
|
107650
|
-
return new Promise((
|
|
107727
|
+
return new Promise((resolve13) => setTimeout(resolve13, ms));
|
|
107651
107728
|
}
|
|
107652
107729
|
function signalGroup(child, pid, signal) {
|
|
107653
107730
|
try {
|
|
@@ -107782,11 +107859,11 @@ function resumeCliInvocation(agentType, sessionId, opts) {
|
|
|
107782
107859
|
var CLAUDE_CODE_INTERACTIVE_TOOLS = /* @__PURE__ */ new Set(["AskUserQuestion", "ExitPlanMode"]);
|
|
107783
107860
|
function mapClaudeCodeHookStatus(payload) {
|
|
107784
107861
|
const hookEvent = typeof payload.hook_event_name === "string" ? payload.hook_event_name : "";
|
|
107785
|
-
const
|
|
107862
|
+
const toolName2 = typeof payload.tool_name === "string" ? payload.tool_name : "";
|
|
107786
107863
|
if (hookEvent === "Stop") {
|
|
107787
107864
|
return "needs_attention";
|
|
107788
107865
|
}
|
|
107789
|
-
if ((hookEvent === "PreToolUse" || hookEvent === "PermissionRequest") && CLAUDE_CODE_INTERACTIVE_TOOLS.has(
|
|
107866
|
+
if ((hookEvent === "PreToolUse" || hookEvent === "PermissionRequest") && CLAUDE_CODE_INTERACTIVE_TOOLS.has(toolName2)) {
|
|
107790
107867
|
return "needs_attention";
|
|
107791
107868
|
}
|
|
107792
107869
|
return "working";
|
|
@@ -108253,7 +108330,7 @@ import { execFile } from "node:child_process";
|
|
|
108253
108330
|
var log3 = createLogger("coding-agent:usage:opencode");
|
|
108254
108331
|
function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
|
|
108255
108332
|
async function listSessions3(dir) {
|
|
108256
|
-
const sessions = await new Promise((
|
|
108333
|
+
const sessions = await new Promise((resolve13, reject) => {
|
|
108257
108334
|
execFile(
|
|
108258
108335
|
command,
|
|
108259
108336
|
["session", "list", "--format", "json"],
|
|
@@ -108264,9 +108341,9 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
|
|
|
108264
108341
|
return;
|
|
108265
108342
|
}
|
|
108266
108343
|
try {
|
|
108267
|
-
|
|
108344
|
+
resolve13(JSON.parse(stdout));
|
|
108268
108345
|
} catch {
|
|
108269
|
-
|
|
108346
|
+
resolve13([]);
|
|
108270
108347
|
}
|
|
108271
108348
|
}
|
|
108272
108349
|
);
|
|
@@ -108277,7 +108354,7 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
|
|
|
108277
108354
|
async function getSessionUsage3(sessionId, _dir) {
|
|
108278
108355
|
let raw;
|
|
108279
108356
|
try {
|
|
108280
|
-
raw = await new Promise((
|
|
108357
|
+
raw = await new Promise((resolve13, reject) => {
|
|
108281
108358
|
execFile(
|
|
108282
108359
|
command,
|
|
108283
108360
|
["export", sessionId],
|
|
@@ -108287,7 +108364,7 @@ function createOpenCodeUsageReader(command = OPENCODE_DEFAULT_BINARY) {
|
|
|
108287
108364
|
reject(err);
|
|
108288
108365
|
return;
|
|
108289
108366
|
}
|
|
108290
|
-
|
|
108367
|
+
resolve13(stdout);
|
|
108291
108368
|
}
|
|
108292
108369
|
);
|
|
108293
108370
|
});
|
|
@@ -108423,13 +108500,13 @@ async function shellPath() {
|
|
|
108423
108500
|
}
|
|
108424
108501
|
const shell2 = defaultShell();
|
|
108425
108502
|
try {
|
|
108426
|
-
const result = await new Promise((
|
|
108503
|
+
const result = await new Promise((resolve13, reject) => {
|
|
108427
108504
|
execFile2(shell2, ["-li", "-c", "echo $PATH"], { timeout: 5e3 }, (err, stdout) => {
|
|
108428
108505
|
if (err) {
|
|
108429
108506
|
reject(err);
|
|
108430
108507
|
return;
|
|
108431
108508
|
}
|
|
108432
|
-
|
|
108509
|
+
resolve13(stdout.trim());
|
|
108433
108510
|
});
|
|
108434
108511
|
});
|
|
108435
108512
|
if (result) {
|
|
@@ -108446,13 +108523,13 @@ async function whichBinary(name3) {
|
|
|
108446
108523
|
const resolvedPath = await shellPath();
|
|
108447
108524
|
const locator = process.platform === "win32" ? "where" : "which";
|
|
108448
108525
|
try {
|
|
108449
|
-
const result = await new Promise((
|
|
108526
|
+
const result = await new Promise((resolve13, reject) => {
|
|
108450
108527
|
execFile2(locator, [name3], { env: { ...process.env, PATH: resolvedPath } }, (err, stdout) => {
|
|
108451
108528
|
if (err) {
|
|
108452
108529
|
reject(err);
|
|
108453
108530
|
return;
|
|
108454
108531
|
}
|
|
108455
|
-
|
|
108532
|
+
resolve13(stdout.trim());
|
|
108456
108533
|
});
|
|
108457
108534
|
});
|
|
108458
108535
|
const first = result.split(/\r?\n/)[0]?.trim();
|
|
@@ -108551,7 +108628,7 @@ async function resolveAcpLaunch(def2) {
|
|
|
108551
108628
|
|
|
108552
108629
|
// src/server/infra/agents/claude-defaults.ts
|
|
108553
108630
|
import { execFile as execFile3 } from "node:child_process";
|
|
108554
|
-
import { closeSync, openSync, readFileSync, readSync, realpathSync, statSync as statSync4 } from "node:fs";
|
|
108631
|
+
import { closeSync, openSync, readFileSync, readSync, realpathSync as realpathSync2, statSync as statSync4 } from "node:fs";
|
|
108555
108632
|
import { homedir as homedir5 } from "node:os";
|
|
108556
108633
|
import { join as join7, resolve as resolvePath2 } from "node:path";
|
|
108557
108634
|
var EFFORT_LEVELS = /* @__PURE__ */ new Set(["low", "medium", "high", "xhigh", "max"]);
|
|
@@ -108634,7 +108711,7 @@ function configuredClaudeDefaults(opts) {
|
|
|
108634
108711
|
function transcriptPath(env, cwd, sessionId) {
|
|
108635
108712
|
let real3 = cwd;
|
|
108636
108713
|
try {
|
|
108637
|
-
real3 =
|
|
108714
|
+
real3 = realpathSync2(cwd);
|
|
108638
108715
|
} catch {
|
|
108639
108716
|
}
|
|
108640
108717
|
return join7(
|
|
@@ -108700,19 +108777,19 @@ function parseClaudeCliArgs(commandLine) {
|
|
|
108700
108777
|
return out;
|
|
108701
108778
|
}
|
|
108702
108779
|
function listProcesses() {
|
|
108703
|
-
return new Promise((
|
|
108780
|
+
return new Promise((resolve13) => {
|
|
108704
108781
|
execFile3(
|
|
108705
108782
|
"ps",
|
|
108706
108783
|
["-A", "-o", "pid=,ppid=,args="],
|
|
108707
108784
|
{ maxBuffer: 16 * 1024 * 1024 },
|
|
108708
108785
|
(err, out) => {
|
|
108709
|
-
if (err) return
|
|
108786
|
+
if (err) return resolve13([]);
|
|
108710
108787
|
const rows = [];
|
|
108711
108788
|
for (const line2 of out.split("\n")) {
|
|
108712
108789
|
const m3 = /^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(line2);
|
|
108713
108790
|
if (m3) rows.push({ pid: Number(m3[1]), ppid: Number(m3[2]), args: m3[3] ?? "" });
|
|
108714
108791
|
}
|
|
108715
|
-
|
|
108792
|
+
resolve13(rows);
|
|
108716
108793
|
}
|
|
108717
108794
|
);
|
|
108718
108795
|
});
|
|
@@ -116817,7 +116894,7 @@ var ChatEventQueries = class {
|
|
|
116817
116894
|
...indexFields(input.event),
|
|
116818
116895
|
turnStart: input.turnStart ?? false,
|
|
116819
116896
|
payload: JSON.stringify(input.event),
|
|
116820
|
-
createdAt: Date.now()
|
|
116897
|
+
createdAt: input.createdAt ?? Date.now()
|
|
116821
116898
|
}).returning({ id: chatEvents.id }).get();
|
|
116822
116899
|
return row.id;
|
|
116823
116900
|
}
|
|
@@ -116917,6 +116994,101 @@ var ChatEventQueries = class {
|
|
|
116917
116994
|
}
|
|
116918
116995
|
};
|
|
116919
116996
|
|
|
116997
|
+
// src/server/services/_utils/agent-pending-work.ts
|
|
116998
|
+
var MAX_HOLD_MS = 8 * 60 * 6e4;
|
|
116999
|
+
var MONITOR_DEFAULT_TIMEOUT_MS = 5 * 6e4;
|
|
117000
|
+
function toolName(update) {
|
|
117001
|
+
const meta2 = update._meta;
|
|
117002
|
+
const name3 = meta2?.claudeCode?.toolName ?? update.name;
|
|
117003
|
+
return typeof name3 === "string" ? name3 : void 0;
|
|
117004
|
+
}
|
|
117005
|
+
function finiteNumber(value) {
|
|
117006
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
|
|
117007
|
+
}
|
|
117008
|
+
var PendingWork = class {
|
|
117009
|
+
holds = /* @__PURE__ */ new Map();
|
|
117010
|
+
/** Tool calls an async task was announced for. */
|
|
117011
|
+
taskToolCalls = /* @__PURE__ */ new Set();
|
|
117012
|
+
/** Notes what a `session/update` starts or ends. `inTurn` is whether a
|
|
117013
|
+
* Band-started turn is running. */
|
|
117014
|
+
observeUpdate(update, inTurn, now = Date.now()) {
|
|
117015
|
+
if (update.sessionUpdate !== "tool_call" && update.sessionUpdate !== "tool_call_update") return;
|
|
117016
|
+
const key2 = `tool:${update.toolCallId}`;
|
|
117017
|
+
if (this.taskToolCalls.has(update.toolCallId)) return;
|
|
117018
|
+
if (update.status === "failed") {
|
|
117019
|
+
this.holds.delete(key2);
|
|
117020
|
+
return;
|
|
117021
|
+
}
|
|
117022
|
+
const held = this.holds.get(key2);
|
|
117023
|
+
if (update.status === "completed") {
|
|
117024
|
+
if (held?.untilCompleted) this.holds.delete(key2);
|
|
117025
|
+
return;
|
|
117026
|
+
}
|
|
117027
|
+
if (held) return;
|
|
117028
|
+
const hold = this.toolHold(update, now);
|
|
117029
|
+
if (hold) {
|
|
117030
|
+
this.set(key2, hold, now);
|
|
117031
|
+
return;
|
|
117032
|
+
}
|
|
117033
|
+
if (!inTurn && update.sessionUpdate === "tool_call") {
|
|
117034
|
+
this.set(key2, { reason: "tool call", until: now + MAX_HOLD_MS, untilCompleted: true }, now);
|
|
117035
|
+
}
|
|
117036
|
+
}
|
|
117037
|
+
/** Notes an AIR async task starting or ending. */
|
|
117038
|
+
observeAsyncTask(update, now = Date.now()) {
|
|
117039
|
+
const key2 = `task:${update.asyncTaskId}`;
|
|
117040
|
+
if (update.sessionUpdate === "async_task_spawned") {
|
|
117041
|
+
if (update.toolCallId) {
|
|
117042
|
+
this.taskToolCalls.add(update.toolCallId);
|
|
117043
|
+
this.holds.delete(`tool:${update.toolCallId}`);
|
|
117044
|
+
}
|
|
117045
|
+
this.set(
|
|
117046
|
+
key2,
|
|
117047
|
+
{ reason: `${update.taskType ?? "background"} task`, until: now + MAX_HOLD_MS },
|
|
117048
|
+
now
|
|
117049
|
+
);
|
|
117050
|
+
} else if (update.sessionUpdate === "async_task_state_update" && (update.state === "completed" || update.state === "failed" || update.state === "stopped")) {
|
|
117051
|
+
this.holds.delete(key2);
|
|
117052
|
+
if (update.toolCallId) this.holds.delete(`tool:${update.toolCallId}`);
|
|
117053
|
+
}
|
|
117054
|
+
}
|
|
117055
|
+
/** The holds still in force, dropping the ones that lapsed. */
|
|
117056
|
+
outstanding(now = Date.now()) {
|
|
117057
|
+
for (const [key2, hold] of this.holds) {
|
|
117058
|
+
if (hold.until <= now) this.holds.delete(key2);
|
|
117059
|
+
}
|
|
117060
|
+
return [...this.holds.values()];
|
|
117061
|
+
}
|
|
117062
|
+
clear() {
|
|
117063
|
+
this.holds.clear();
|
|
117064
|
+
this.taskToolCalls.clear();
|
|
117065
|
+
}
|
|
117066
|
+
toolHold(update, now) {
|
|
117067
|
+
const input = update.rawInput;
|
|
117068
|
+
if (!input || typeof input !== "object") return null;
|
|
117069
|
+
switch (toolName(update)) {
|
|
117070
|
+
case "ScheduleWakeup": {
|
|
117071
|
+
const delaySeconds = finiteNumber(input.delaySeconds);
|
|
117072
|
+
return delaySeconds === void 0 ? null : { reason: "scheduled wakeup", until: now + delaySeconds * 1e3 };
|
|
117073
|
+
}
|
|
117074
|
+
case "CronCreate":
|
|
117075
|
+
return { reason: "cron job", until: now + MAX_HOLD_MS };
|
|
117076
|
+
case "Monitor": {
|
|
117077
|
+
const timeout = finiteNumber(input.timeout_ms) ?? MONITOR_DEFAULT_TIMEOUT_MS;
|
|
117078
|
+
return { reason: "monitor", until: now + timeout };
|
|
117079
|
+
}
|
|
117080
|
+
case "Bash":
|
|
117081
|
+
case "PowerShell":
|
|
117082
|
+
return input.run_in_background === true ? { reason: "background command", until: now + MAX_HOLD_MS, untilCompleted: true } : null;
|
|
117083
|
+
default:
|
|
117084
|
+
return null;
|
|
117085
|
+
}
|
|
117086
|
+
}
|
|
117087
|
+
set(key2, hold, now) {
|
|
117088
|
+
this.holds.set(key2, { ...hold, until: Math.min(hold.until, now + MAX_HOLD_MS) });
|
|
117089
|
+
}
|
|
117090
|
+
};
|
|
117091
|
+
|
|
116920
117092
|
// src/server/services/_utils/chat-log-replay.ts
|
|
116921
117093
|
function textChunk(row) {
|
|
116922
117094
|
const event = row.event;
|
|
@@ -116935,7 +117107,8 @@ function rowsToEvents(rows) {
|
|
|
116935
117107
|
out.push({
|
|
116936
117108
|
type: "update",
|
|
116937
117109
|
update: { ...run2.update, content: { type: "text", text: run2.text } },
|
|
116938
|
-
eventId: run2.lastId
|
|
117110
|
+
eventId: run2.lastId,
|
|
117111
|
+
createdAt: run2.createdAt
|
|
116939
117112
|
});
|
|
116940
117113
|
run2 = null;
|
|
116941
117114
|
};
|
|
@@ -116951,11 +117124,12 @@ function rowsToEvents(rows) {
|
|
|
116951
117124
|
run2 = {
|
|
116952
117125
|
update: chunk,
|
|
116953
117126
|
text: chunk.content.type === "text" ? chunk.content.text : "",
|
|
116954
|
-
lastId: row.id
|
|
117127
|
+
lastId: row.id,
|
|
117128
|
+
createdAt: row.createdAt
|
|
116955
117129
|
};
|
|
116956
117130
|
continue;
|
|
116957
117131
|
}
|
|
116958
|
-
out.push({ ...row.event, eventId: row.id });
|
|
117132
|
+
out.push({ ...row.event, eventId: row.id, createdAt: row.createdAt });
|
|
116959
117133
|
}
|
|
116960
117134
|
flush();
|
|
116961
117135
|
return out;
|
|
@@ -126543,6 +126717,10 @@ var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
|
|
|
126543
126717
|
// ../../packages/ui/src/components/input.tsx
|
|
126544
126718
|
var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
|
|
126545
126719
|
|
|
126720
|
+
// ../../packages/ui/src/popper.ts
|
|
126721
|
+
var POPPER_MAX_HEIGHT = "max-h-[min(var(--popper-max-height,100dvh),calc(var(--radix-popper-available-height)/var(--app-zoom,1)))]";
|
|
126722
|
+
var POPPER_MAX_WIDTH = "max-w-[calc(var(--radix-popper-available-width)/var(--app-zoom,1))]";
|
|
126723
|
+
|
|
126546
126724
|
// ../../packages/ui/src/components/popover.tsx
|
|
126547
126725
|
var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
|
|
126548
126726
|
function Popover2({ ...props }) {
|
|
@@ -126564,7 +126742,9 @@ function PopoverContent2({
|
|
|
126564
126742
|
align,
|
|
126565
126743
|
sideOffset,
|
|
126566
126744
|
className: cn(
|
|
126567
|
-
"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",
|
|
126745
|
+
"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",
|
|
126746
|
+
POPPER_MAX_HEIGHT,
|
|
126747
|
+
POPPER_MAX_WIDTH,
|
|
126568
126748
|
className
|
|
126569
126749
|
),
|
|
126570
126750
|
...props
|
|
@@ -126956,10 +127136,10 @@ var DIALOG_CONTENT_VARIANTS = {
|
|
|
126956
127136
|
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
|
|
126957
127137
|
// Mobile (< lg): bottom drawer
|
|
126958
127138
|
"inset-x-0 bottom-0 w-full max-w-none rounded-t-2xl border border-b-0 p-6",
|
|
126959
|
-
"max-h-[calc(100dvh-env(safe-area-inset-top)-1.5rem)]",
|
|
127139
|
+
"max-h-[calc(100dvh/var(--app-zoom,1)-env(safe-area-inset-top)-1.5rem)]",
|
|
126960
127140
|
"max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
|
|
126961
127141
|
// Desktop (lg+): revert to the centred modal
|
|
126962
|
-
"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",
|
|
127142
|
+
"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",
|
|
126963
127143
|
"lg:data-[state=open]:zoom-in-95 lg:data-[state=closed]:zoom-out-95"
|
|
126964
127144
|
].join(" "),
|
|
126965
127145
|
"command-palette": [
|
|
@@ -126975,13 +127155,13 @@ var DIALOG_CONTENT_VARIANTS = {
|
|
|
126975
127155
|
// floats at `bottom: var(--kb-inset)` (keyboard height; 0 when closed) so
|
|
126976
127156
|
// the input clears the on-screen keyboard — see `useKeyboardInset`.
|
|
126977
127157
|
"inset-x-0 bottom-[var(--kb-inset,0px)] w-full max-w-none rounded-t-2xl border border-b-0",
|
|
126978
|
-
"max-h-[calc(100dvh-var(--kb-inset,0px)-env(safe-area-inset-top)-1.5rem)]",
|
|
127158
|
+
"max-h-[calc(100dvh/var(--app-zoom,1)-var(--kb-inset,0px)-env(safe-area-inset-top)-1.5rem)]",
|
|
126979
127159
|
"max-lg:[&_[data-slot=command]]:flex-col-reverse",
|
|
126980
127160
|
"max-lg:[&_[cmdk-input-wrapper]]:border-t max-lg:[&_[cmdk-input-wrapper]]:border-b-0",
|
|
126981
127161
|
"max-lg:data-[state=open]:slide-in-from-bottom max-lg:data-[state=closed]:slide-out-to-bottom",
|
|
126982
127162
|
// Desktop (lg+): anchored in the upper third by its TOP edge — no
|
|
126983
127163
|
// `translate-y`, so the input never moves as the list grows downward.
|
|
126984
|
-
"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"
|
|
127164
|
+
"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"
|
|
126985
127165
|
].join(" ")
|
|
126986
127166
|
};
|
|
126987
127167
|
var keyboardInsetHolders = /* @__PURE__ */ new Set();
|
|
@@ -127148,7 +127328,8 @@ function ContextMenuContent2({
|
|
|
127148
127328
|
if (event.button === 2) event.stopPropagation();
|
|
127149
127329
|
},
|
|
127150
127330
|
className: cn(
|
|
127151
|
-
"ease-out duration-150 z-50
|
|
127331
|
+
"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",
|
|
127332
|
+
POPPER_MAX_HEIGHT,
|
|
127152
127333
|
className
|
|
127153
127334
|
),
|
|
127154
127335
|
...props
|
|
@@ -127534,8 +127715,8 @@ function hasObjectPrototype(o) {
|
|
|
127534
127715
|
return Object.prototype.toString.call(o) === "[object Object]";
|
|
127535
127716
|
}
|
|
127536
127717
|
function sleep2(timeout) {
|
|
127537
|
-
return new Promise((
|
|
127538
|
-
timeoutManager.setTimeout(
|
|
127718
|
+
return new Promise((resolve13) => {
|
|
127719
|
+
timeoutManager.setTimeout(resolve13, timeout);
|
|
127539
127720
|
});
|
|
127540
127721
|
}
|
|
127541
127722
|
function replaceData(prevData, data2, options2) {
|
|
@@ -127673,10 +127854,10 @@ var focusManager = new FocusManager();
|
|
|
127673
127854
|
|
|
127674
127855
|
// ../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/thenable.js
|
|
127675
127856
|
function pendingThenable() {
|
|
127676
|
-
let
|
|
127857
|
+
let resolve13;
|
|
127677
127858
|
let reject;
|
|
127678
127859
|
const thenable = new Promise((_resolve, _reject) => {
|
|
127679
|
-
|
|
127860
|
+
resolve13 = _resolve;
|
|
127680
127861
|
reject = _reject;
|
|
127681
127862
|
});
|
|
127682
127863
|
thenable.status = "pending";
|
|
@@ -127692,7 +127873,7 @@ function pendingThenable() {
|
|
|
127692
127873
|
status: "fulfilled",
|
|
127693
127874
|
value
|
|
127694
127875
|
});
|
|
127695
|
-
|
|
127876
|
+
resolve13(value);
|
|
127696
127877
|
};
|
|
127697
127878
|
thenable.reject = (reason) => {
|
|
127698
127879
|
finalize({
|
|
@@ -127871,7 +128052,7 @@ function createRetryer(config2) {
|
|
|
127871
128052
|
};
|
|
127872
128053
|
const canContinue = () => focusManager.isFocused() && (config2.networkMode === "always" || onlineManager.isOnline()) && config2.canRun();
|
|
127873
128054
|
const canStart = () => canFetch(config2.networkMode) && config2.canRun();
|
|
127874
|
-
const
|
|
128055
|
+
const resolve13 = (value) => {
|
|
127875
128056
|
if (!isResolved()) {
|
|
127876
128057
|
continueFn?.();
|
|
127877
128058
|
thenable.resolve(value);
|
|
@@ -127909,7 +128090,7 @@ function createRetryer(config2) {
|
|
|
127909
128090
|
} catch (error40) {
|
|
127910
128091
|
promiseOrValue = Promise.reject(error40);
|
|
127911
128092
|
}
|
|
127912
|
-
Promise.resolve(promiseOrValue).then(
|
|
128093
|
+
Promise.resolve(promiseOrValue).then(resolve13).catch((error40) => {
|
|
127913
128094
|
if (isResolved()) {
|
|
127914
128095
|
return;
|
|
127915
128096
|
}
|
|
@@ -130973,7 +131154,7 @@ var import_react16 = __toESM(require_react(), 1);
|
|
|
130973
131154
|
var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
|
|
130974
131155
|
|
|
130975
131156
|
// src/dashboard/components/DashboardShell.tsx
|
|
130976
|
-
var
|
|
131157
|
+
var import_react32 = __toESM(require_react(), 1);
|
|
130977
131158
|
|
|
130978
131159
|
// src/lib/toast-obstructions.ts
|
|
130979
131160
|
var import_react17 = __toESM(require_react(), 1);
|
|
@@ -131614,13 +131795,15 @@ function pullRequestTone(pr, ciState) {
|
|
|
131614
131795
|
}
|
|
131615
131796
|
}
|
|
131616
131797
|
var TONE_CLASS = {
|
|
131617
|
-
failure: "text-red-600 dark:text-red-400",
|
|
131618
|
-
pending: "text-yellow-700 dark:text-yellow-400",
|
|
131619
|
-
success: "text-green-700 dark:text-green-400",
|
|
131620
|
-
neutral: "text-muted-foreground",
|
|
131621
|
-
merged: "text-violet-600 dark:text-violet-400",
|
|
131622
|
-
closed: "text-muted-foreground line-through"
|
|
131623
|
-
};
|
|
131798
|
+
failure: "text-red-600 border-red-600/40 bg-red-500/10 dark:text-red-400 dark:border-red-400/40",
|
|
131799
|
+
pending: "text-yellow-700 border-yellow-600/50 bg-yellow-500/10 dark:text-yellow-400 dark:border-yellow-400/40",
|
|
131800
|
+
success: "text-green-700 border-green-600/40 bg-green-500/10 dark:text-green-400 dark:border-green-400/40",
|
|
131801
|
+
neutral: "text-muted-foreground border-border bg-muted/50",
|
|
131802
|
+
merged: "text-violet-600 border-violet-600/40 bg-violet-500/10 dark:text-violet-400 dark:border-violet-400/40",
|
|
131803
|
+
closed: "text-muted-foreground border-border bg-muted/50 line-through"
|
|
131804
|
+
};
|
|
131805
|
+
var TAG_CLASS = "inline-flex items-center rounded border px-1 py-px leading-none";
|
|
131806
|
+
var NUMBER_CLASS = `${TAG_CLASS} text-[11px] font-semibold tabular-nums`;
|
|
131624
131807
|
function statusLabel(pr, ciState) {
|
|
131625
131808
|
if (pr.state === "merged") return "Merged";
|
|
131626
131809
|
if (pr.state === "closed") return "Closed";
|
|
@@ -131682,7 +131865,7 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
|
|
|
131682
131865
|
"aria-expanded": open3,
|
|
131683
131866
|
"data-testid": "workspace-card__pr-badge",
|
|
131684
131867
|
"data-tone": tone,
|
|
131685
|
-
className: `shrink-0
|
|
131868
|
+
className: `shrink-0 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring ${NUMBER_CLASS} ${TONE_CLASS[tone]}`,
|
|
131686
131869
|
onPointerEnter: (e) => {
|
|
131687
131870
|
if (e.pointerType !== "touch") setOpenAfter(true, OPEN_DELAY_MS);
|
|
131688
131871
|
},
|
|
@@ -131757,7 +131940,8 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
|
|
|
131757
131940
|
"span",
|
|
131758
131941
|
{
|
|
131759
131942
|
"data-testid": "pr-popover__number",
|
|
131760
|
-
|
|
131943
|
+
"data-tone": tone,
|
|
131944
|
+
className: `${NUMBER_CLASS} ${TONE_CLASS[tone]}`,
|
|
131761
131945
|
children: [
|
|
131762
131946
|
"#",
|
|
131763
131947
|
pr.number
|
|
@@ -131768,7 +131952,7 @@ function PullRequestBadge({ pr, ciState, onOpenChecks }) {
|
|
|
131768
131952
|
"span",
|
|
131769
131953
|
{
|
|
131770
131954
|
"data-testid": "pr-popover__draft",
|
|
131771
|
-
className:
|
|
131955
|
+
className: `${TAG_CLASS} border-border text-[10px] font-medium text-muted-foreground`,
|
|
131772
131956
|
children: "Draft"
|
|
131773
131957
|
}
|
|
131774
131958
|
),
|
|
@@ -132108,14 +132292,11 @@ var WorkspaceCard = (0, import_react29.memo)(function WorkspaceCard2({
|
|
|
132108
132292
|
var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
|
|
132109
132293
|
|
|
132110
132294
|
// src/dashboard/components/SettingsPage.tsx
|
|
132111
|
-
var
|
|
132295
|
+
var import_react31 = __toESM(require_react(), 1);
|
|
132112
132296
|
|
|
132113
132297
|
// src/dashboard/hooks/use-terminal-daemon.ts
|
|
132114
132298
|
init_trpc_client();
|
|
132115
132299
|
|
|
132116
|
-
// src/dashboard/lib/experimental-flags.ts
|
|
132117
|
-
var import_react31 = __toESM(require_react(), 1);
|
|
132118
|
-
|
|
132119
132300
|
// src/dashboard/components/RestartTerminalDaemonDialog.tsx
|
|
132120
132301
|
var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
|
|
132121
132302
|
|
|
@@ -132141,7 +132322,7 @@ var isElectron = typeof window !== "undefined" && "__BAND_DESKTOP__" in window;
|
|
|
132141
132322
|
|
|
132142
132323
|
// src/dashboard/components/DiffFileContent.tsx
|
|
132143
132324
|
init_dist2();
|
|
132144
|
-
var
|
|
132325
|
+
var import_react33 = __toESM(require_react(), 1);
|
|
132145
132326
|
|
|
132146
132327
|
// src/dashboard/lib/language-map.ts
|
|
132147
132328
|
var SUPPORTED_LANGUAGES = [
|
|
@@ -132246,12 +132427,12 @@ var diffTheme = EditorView.theme({
|
|
|
132246
132427
|
});
|
|
132247
132428
|
|
|
132248
132429
|
// src/dashboard/components/DiffOverviewRuler.tsx
|
|
132249
|
-
var
|
|
132430
|
+
var import_react34 = __toESM(require_react(), 1);
|
|
132250
132431
|
var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
|
|
132251
132432
|
|
|
132252
132433
|
// src/dashboard/components/FileBrowser.tsx
|
|
132253
132434
|
var import_lucide_react7 = __toESM(require_lucide_react(), 1);
|
|
132254
|
-
var
|
|
132435
|
+
var import_react35 = __toESM(require_react(), 1);
|
|
132255
132436
|
var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
|
|
132256
132437
|
var DRAG_MIME = "application/x-band-tree-entry";
|
|
132257
132438
|
var DRAG_EXPAND_DELAY_MS = 600;
|
|
@@ -132298,11 +132479,11 @@ function EntryNameInput({
|
|
|
132298
132479
|
onSubmit,
|
|
132299
132480
|
onCancel
|
|
132300
132481
|
}) {
|
|
132301
|
-
const [value, setValue2] = (0,
|
|
132302
|
-
const [submitting, setSubmitting] = (0,
|
|
132303
|
-
const [error40, setError] = (0,
|
|
132304
|
-
const inputRef = (0,
|
|
132305
|
-
(0,
|
|
132482
|
+
const [value, setValue2] = (0, import_react35.useState)(initialValue);
|
|
132483
|
+
const [submitting, setSubmitting] = (0, import_react35.useState)(false);
|
|
132484
|
+
const [error40, setError] = (0, import_react35.useState)(null);
|
|
132485
|
+
const inputRef = (0, import_react35.useRef)(null);
|
|
132486
|
+
(0, import_react35.useEffect)(() => {
|
|
132306
132487
|
const el = inputRef.current;
|
|
132307
132488
|
if (!el) return;
|
|
132308
132489
|
el.focus();
|
|
@@ -132766,7 +132947,7 @@ function TreeNode2({
|
|
|
132766
132947
|
})()
|
|
132767
132948
|
] });
|
|
132768
132949
|
}
|
|
132769
|
-
var FileBrowser = (0,
|
|
132950
|
+
var FileBrowser = (0, import_react35.forwardRef)(function FileBrowser2({
|
|
132770
132951
|
workspaceId: workspaceId2,
|
|
132771
132952
|
workspacePath,
|
|
132772
132953
|
onOpenFile,
|
|
@@ -132778,24 +132959,24 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132778
132959
|
}, handleRef) {
|
|
132779
132960
|
const adapter = useAdapter();
|
|
132780
132961
|
const capabilities = useCapabilities();
|
|
132781
|
-
const [expandedPaths, setExpandedPaths] = (0,
|
|
132962
|
+
const [expandedPaths, setExpandedPaths] = (0, import_react35.useState)(
|
|
132782
132963
|
() => new Set(getCachedExpanded(workspaceId2))
|
|
132783
132964
|
);
|
|
132784
|
-
const [dirContents, setDirContents] = (0,
|
|
132965
|
+
const [dirContents, setDirContents] = (0, import_react35.useState)(
|
|
132785
132966
|
() => new Map(getCachedContents(workspaceId2))
|
|
132786
132967
|
);
|
|
132787
|
-
const [loadingPaths, setLoadingPaths] = (0,
|
|
132788
|
-
const [newEntry, setNewEntry] = (0,
|
|
132789
|
-
const [pendingDelete, setPendingDelete] = (0,
|
|
132790
|
-
const [deleteError, setDeleteError] = (0,
|
|
132791
|
-
const [deleteSubmitting, setDeleteSubmitting] = (0,
|
|
132792
|
-
const [renamingPath, setRenamingPath] = (0,
|
|
132793
|
-
const [clipboard, setClipboard] = (0,
|
|
132794
|
-
const [operationError, setOperationError] = (0,
|
|
132795
|
-
const [treeSelection, setTreeSelection] = (0,
|
|
132796
|
-
const selectedRef = (0,
|
|
132797
|
-
const prevWorkspaceRef = (0,
|
|
132798
|
-
(0,
|
|
132968
|
+
const [loadingPaths, setLoadingPaths] = (0, import_react35.useState)(/* @__PURE__ */ new Set());
|
|
132969
|
+
const [newEntry, setNewEntry] = (0, import_react35.useState)(null);
|
|
132970
|
+
const [pendingDelete, setPendingDelete] = (0, import_react35.useState)(null);
|
|
132971
|
+
const [deleteError, setDeleteError] = (0, import_react35.useState)(null);
|
|
132972
|
+
const [deleteSubmitting, setDeleteSubmitting] = (0, import_react35.useState)(false);
|
|
132973
|
+
const [renamingPath, setRenamingPath] = (0, import_react35.useState)(null);
|
|
132974
|
+
const [clipboard, setClipboard] = (0, import_react35.useState)(null);
|
|
132975
|
+
const [operationError, setOperationError] = (0, import_react35.useState)(null);
|
|
132976
|
+
const [treeSelection, setTreeSelection] = (0, import_react35.useState)(() => selectedFile ? { path: selectedFile, kind: "file" } : null);
|
|
132977
|
+
const selectedRef = (0, import_react35.useRef)(null);
|
|
132978
|
+
const prevWorkspaceRef = (0, import_react35.useRef)(workspaceId2);
|
|
132979
|
+
(0, import_react35.useEffect)(() => {
|
|
132799
132980
|
if (prevWorkspaceRef.current !== workspaceId2) {
|
|
132800
132981
|
prevWorkspaceRef.current = workspaceId2;
|
|
132801
132982
|
setExpandedPaths(new Set(getCachedExpanded(workspaceId2)));
|
|
@@ -132811,18 +132992,18 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132811
132992
|
setOperationError(null);
|
|
132812
132993
|
}
|
|
132813
132994
|
}, [workspaceId2]);
|
|
132814
|
-
(0,
|
|
132995
|
+
(0, import_react35.useEffect)(() => {
|
|
132815
132996
|
if (selectedFile) {
|
|
132816
132997
|
setTreeSelection({ path: selectedFile, kind: "file" });
|
|
132817
132998
|
}
|
|
132818
132999
|
}, [selectedFile]);
|
|
132819
|
-
const handleSelectRow = (0,
|
|
133000
|
+
const handleSelectRow = (0, import_react35.useCallback)((path, kind) => {
|
|
132820
133001
|
setTreeSelection({ path, kind });
|
|
132821
133002
|
}, []);
|
|
132822
|
-
const clearTreeSelection = (0,
|
|
133003
|
+
const clearTreeSelection = (0, import_react35.useCallback)(() => {
|
|
132823
133004
|
setTreeSelection(null);
|
|
132824
133005
|
}, []);
|
|
132825
|
-
const fetchDir = (0,
|
|
133006
|
+
const fetchDir = (0, import_react35.useCallback)(
|
|
132826
133007
|
async (dirPath, opts) => {
|
|
132827
133008
|
if (!adapter.listWorkspaceFiles) return;
|
|
132828
133009
|
const cache4 = getCachedContents(workspaceId2);
|
|
@@ -132846,10 +133027,10 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132846
133027
|
},
|
|
132847
133028
|
[adapter, workspaceId2]
|
|
132848
133029
|
);
|
|
132849
|
-
(0,
|
|
133030
|
+
(0, import_react35.useEffect)(() => {
|
|
132850
133031
|
fetchDir("");
|
|
132851
133032
|
}, [fetchDir]);
|
|
132852
|
-
(0,
|
|
133033
|
+
(0, import_react35.useEffect)(() => {
|
|
132853
133034
|
if (!adapter.subscribeFileChanges) return;
|
|
132854
133035
|
const unsubscribe = adapter.subscribeFileChanges(workspaceId2, (changedPath) => {
|
|
132855
133036
|
const cache4 = getCachedContents(workspaceId2);
|
|
@@ -132858,8 +133039,8 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132858
133039
|
});
|
|
132859
133040
|
return unsubscribe;
|
|
132860
133041
|
}, [adapter, workspaceId2, fetchDir]);
|
|
132861
|
-
const prevSelectedRef = (0,
|
|
132862
|
-
(0,
|
|
133042
|
+
const prevSelectedRef = (0, import_react35.useRef)(void 0);
|
|
133043
|
+
(0, import_react35.useEffect)(() => {
|
|
132863
133044
|
if (!selectedFile || selectedFile === prevSelectedRef.current) {
|
|
132864
133045
|
prevSelectedRef.current = selectedFile;
|
|
132865
133046
|
return;
|
|
@@ -132886,7 +133067,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132886
133067
|
fetchDir(dir);
|
|
132887
133068
|
}
|
|
132888
133069
|
}, [selectedFile, workspaceId2, fetchDir]);
|
|
132889
|
-
(0,
|
|
133070
|
+
(0, import_react35.useEffect)(() => {
|
|
132890
133071
|
if (selectedFile && selectedRef.current) {
|
|
132891
133072
|
const timer = setTimeout(() => {
|
|
132892
133073
|
selectedRef.current?.scrollIntoView({ block: "nearest" });
|
|
@@ -132894,7 +133075,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132894
133075
|
return () => clearTimeout(timer);
|
|
132895
133076
|
}
|
|
132896
133077
|
}, [selectedFile, dirContents]);
|
|
132897
|
-
const toggleExpand = (0,
|
|
133078
|
+
const toggleExpand = (0, import_react35.useCallback)(
|
|
132898
133079
|
(dirPath) => {
|
|
132899
133080
|
setExpandedPaths((prev) => {
|
|
132900
133081
|
const next = new Set(prev);
|
|
@@ -132910,7 +133091,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132910
133091
|
},
|
|
132911
133092
|
[workspaceId2, fetchDir]
|
|
132912
133093
|
);
|
|
132913
|
-
const ensureDirExpanded = (0,
|
|
133094
|
+
const ensureDirExpanded = (0, import_react35.useCallback)(
|
|
132914
133095
|
async (dirPath) => {
|
|
132915
133096
|
const cached2 = getCachedExpanded(workspaceId2);
|
|
132916
133097
|
if (!cached2.has(dirPath)) {
|
|
@@ -132922,17 +133103,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132922
133103
|
},
|
|
132923
133104
|
[workspaceId2, fetchDir]
|
|
132924
133105
|
);
|
|
132925
|
-
const requestNewEntry = (0,
|
|
133106
|
+
const requestNewEntry = (0, import_react35.useCallback)(
|
|
132926
133107
|
(parentPath, kind) => {
|
|
132927
133108
|
void ensureDirExpanded(parentPath);
|
|
132928
133109
|
setNewEntry({ parentPath, kind });
|
|
132929
133110
|
},
|
|
132930
133111
|
[ensureDirExpanded]
|
|
132931
133112
|
);
|
|
132932
|
-
const cancelNewEntry = (0,
|
|
133113
|
+
const cancelNewEntry = (0, import_react35.useCallback)(() => {
|
|
132933
133114
|
setNewEntry(null);
|
|
132934
133115
|
}, []);
|
|
132935
|
-
const submitNewEntry = (0,
|
|
133116
|
+
const submitNewEntry = (0, import_react35.useCallback)(
|
|
132936
133117
|
async (name3) => {
|
|
132937
133118
|
if (!newEntry) return;
|
|
132938
133119
|
const fullPath = newEntry.parentPath ? `${newEntry.parentPath}/${name3}` : name3;
|
|
@@ -132965,16 +133146,16 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
132965
133146
|
[adapter, newEntry, fetchDir, onOpenFile, workspaceId2]
|
|
132966
133147
|
);
|
|
132967
133148
|
const canDelete = Boolean(adapter.deleteWorkspacePath);
|
|
132968
|
-
const requestDelete = (0,
|
|
133149
|
+
const requestDelete = (0, import_react35.useCallback)((path, kind) => {
|
|
132969
133150
|
setDeleteError(null);
|
|
132970
133151
|
setPendingDelete({ path, kind });
|
|
132971
133152
|
}, []);
|
|
132972
|
-
const cancelDelete = (0,
|
|
133153
|
+
const cancelDelete = (0, import_react35.useCallback)(() => {
|
|
132973
133154
|
if (deleteSubmitting) return;
|
|
132974
133155
|
setPendingDelete(null);
|
|
132975
133156
|
setDeleteError(null);
|
|
132976
133157
|
}, [deleteSubmitting]);
|
|
132977
|
-
const confirmDelete = (0,
|
|
133158
|
+
const confirmDelete = (0, import_react35.useCallback)(async () => {
|
|
132978
133159
|
if (!pendingDelete || !adapter.deleteWorkspacePath) return;
|
|
132979
133160
|
setDeleteSubmitting(true);
|
|
132980
133161
|
setDeleteError(null);
|
|
@@ -133020,7 +133201,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133020
133201
|
}
|
|
133021
133202
|
}, [adapter, pendingDelete, fetchDir, workspaceId2, onPathDeleted]);
|
|
133022
133203
|
const canRename = Boolean(adapter.renameWorkspacePath);
|
|
133023
|
-
const remapCachesAfterMove = (0,
|
|
133204
|
+
const remapCachesAfterMove = (0, import_react35.useCallback)(
|
|
133024
133205
|
(from3, to) => {
|
|
133025
133206
|
const cache4 = getCachedContents(workspaceId2);
|
|
133026
133207
|
const remapped = /* @__PURE__ */ new Map();
|
|
@@ -133045,13 +133226,13 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133045
133226
|
},
|
|
133046
133227
|
[workspaceId2]
|
|
133047
133228
|
);
|
|
133048
|
-
const requestRename = (0,
|
|
133229
|
+
const requestRename = (0, import_react35.useCallback)((path) => {
|
|
133049
133230
|
setRenamingPath(path);
|
|
133050
133231
|
}, []);
|
|
133051
|
-
const cancelRename = (0,
|
|
133232
|
+
const cancelRename = (0, import_react35.useCallback)(() => {
|
|
133052
133233
|
setRenamingPath(null);
|
|
133053
133234
|
}, []);
|
|
133054
|
-
const submitRename = (0,
|
|
133235
|
+
const submitRename = (0, import_react35.useCallback)(
|
|
133055
133236
|
async (newName) => {
|
|
133056
133237
|
if (renamingPath == null || !adapter.renameWorkspacePath) return;
|
|
133057
133238
|
const oldPath = renamingPath;
|
|
@@ -133066,7 +133247,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133066
133247
|
},
|
|
133067
133248
|
[adapter, renamingPath, fetchDir, onPathRenamed, remapCachesAfterMove, workspaceId2]
|
|
133068
133249
|
);
|
|
133069
|
-
const resolveDefaultTarget = (0,
|
|
133250
|
+
const resolveDefaultTarget = (0, import_react35.useCallback)(() => {
|
|
133070
133251
|
if (treeSelection?.kind === "directory") return treeSelection.path;
|
|
133071
133252
|
if (treeSelection?.kind === "file") {
|
|
133072
133253
|
const idx = treeSelection.path.lastIndexOf("/");
|
|
@@ -133079,13 +133260,13 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133079
133260
|
const canPaste = Boolean(
|
|
133080
133261
|
clipboard && (clipboard.op === "copy" && adapter.copyWorkspacePath || clipboard.op === "cut" && adapter.renameWorkspacePath)
|
|
133081
133262
|
);
|
|
133082
|
-
const cutPath = (0,
|
|
133263
|
+
const cutPath = (0, import_react35.useCallback)((path, kind) => {
|
|
133083
133264
|
setClipboard({ path, kind, op: "cut" });
|
|
133084
133265
|
}, []);
|
|
133085
|
-
const copyPath = (0,
|
|
133266
|
+
const copyPath = (0, import_react35.useCallback)((path, kind) => {
|
|
133086
133267
|
setClipboard({ path, kind, op: "copy" });
|
|
133087
133268
|
}, []);
|
|
133088
|
-
const uniqueCopyName = (0,
|
|
133269
|
+
const uniqueCopyName = (0, import_react35.useCallback)(
|
|
133089
133270
|
(baseName, destFolder, kind) => {
|
|
133090
133271
|
const siblings = new Set(
|
|
133091
133272
|
(getCachedContents(workspaceId2).get(destFolder) ?? []).map((e) => e.name)
|
|
@@ -133103,7 +133284,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133103
133284
|
},
|
|
133104
133285
|
[workspaceId2]
|
|
133105
133286
|
);
|
|
133106
|
-
const canTransferInto = (0,
|
|
133287
|
+
const canTransferInto = (0, import_react35.useCallback)(
|
|
133107
133288
|
(source, destFolder, op) => {
|
|
133108
133289
|
if (source.kind === "directory" && (destFolder === source.path || destFolder.startsWith(`${source.path}/`))) {
|
|
133109
133290
|
return false;
|
|
@@ -133113,7 +133294,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133113
133294
|
},
|
|
133114
133295
|
[canCopyOp, canCutCopy]
|
|
133115
133296
|
);
|
|
133116
|
-
const transferInto = (0,
|
|
133297
|
+
const transferInto = (0, import_react35.useCallback)(
|
|
133117
133298
|
async (source, destFolder, op) => {
|
|
133118
133299
|
if (!canTransferInto(source, destFolder, op)) return false;
|
|
133119
133300
|
const baseName = baseNameOf(source.path);
|
|
@@ -133150,7 +133331,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133150
133331
|
workspaceId2
|
|
133151
133332
|
]
|
|
133152
133333
|
);
|
|
133153
|
-
const runOperation = (0,
|
|
133334
|
+
const runOperation = (0, import_react35.useCallback)(async (op) => {
|
|
133154
133335
|
setOperationError(null);
|
|
133155
133336
|
try {
|
|
133156
133337
|
await op();
|
|
@@ -133158,7 +133339,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133158
133339
|
setOperationError(err instanceof Error ? err.message : String(err));
|
|
133159
133340
|
}
|
|
133160
133341
|
}, []);
|
|
133161
|
-
const pasteInto = (0,
|
|
133342
|
+
const pasteInto = (0, import_react35.useCallback)(
|
|
133162
133343
|
(destFolder) => runOperation(async () => {
|
|
133163
133344
|
if (!clipboard) return;
|
|
133164
133345
|
const moved = await transferInto(clipboard, destFolder, clipboard.op);
|
|
@@ -133166,22 +133347,22 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133166
133347
|
}),
|
|
133167
133348
|
[clipboard, runOperation, transferInto]
|
|
133168
133349
|
);
|
|
133169
|
-
const dragSourceRef = (0,
|
|
133170
|
-
const [dropTarget, setDropTarget] = (0,
|
|
133171
|
-
const expandTimerRef = (0,
|
|
133350
|
+
const dragSourceRef = (0, import_react35.useRef)(null);
|
|
133351
|
+
const [dropTarget, setDropTarget] = (0, import_react35.useState)(null);
|
|
133352
|
+
const expandTimerRef = (0, import_react35.useRef)(
|
|
133172
133353
|
null
|
|
133173
133354
|
);
|
|
133174
|
-
const clearExpandTimer = (0,
|
|
133355
|
+
const clearExpandTimer = (0, import_react35.useCallback)(() => {
|
|
133175
133356
|
if (expandTimerRef.current) clearTimeout(expandTimerRef.current.timer);
|
|
133176
133357
|
expandTimerRef.current = null;
|
|
133177
133358
|
}, []);
|
|
133178
|
-
(0,
|
|
133179
|
-
const endDrag = (0,
|
|
133359
|
+
(0, import_react35.useEffect)(() => clearExpandTimer, [clearExpandTimer]);
|
|
133360
|
+
const endDrag = (0, import_react35.useCallback)(() => {
|
|
133180
133361
|
dragSourceRef.current = null;
|
|
133181
133362
|
setDropTarget(null);
|
|
133182
133363
|
clearExpandTimer();
|
|
133183
133364
|
}, [clearExpandTimer]);
|
|
133184
|
-
const dnd = (0,
|
|
133365
|
+
const dnd = (0, import_react35.useMemo)(
|
|
133185
133366
|
() => ({
|
|
133186
133367
|
dropTarget,
|
|
133187
133368
|
onDragStart(path, kind, e) {
|
|
@@ -133238,7 +133419,7 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133238
133419
|
workspaceId2
|
|
133239
133420
|
]
|
|
133240
133421
|
);
|
|
133241
|
-
const refreshTree = (0,
|
|
133422
|
+
const refreshTree = (0, import_react35.useCallback)(async () => {
|
|
133242
133423
|
const cache4 = getCachedContents(workspaceId2);
|
|
133243
133424
|
const expanded = getCachedExpanded(workspaceId2);
|
|
133244
133425
|
for (const key2 of Array.from(cache4.keys())) {
|
|
@@ -133247,17 +133428,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133247
133428
|
setDirContents(new Map(cache4));
|
|
133248
133429
|
await Promise.all(Array.from(expanded, (dir) => fetchDir(dir, { force: true })));
|
|
133249
133430
|
}, [fetchDir, workspaceId2]);
|
|
133250
|
-
const collapseAll = (0,
|
|
133431
|
+
const collapseAll = (0, import_react35.useCallback)(() => {
|
|
133251
133432
|
const root = /* @__PURE__ */ new Set([""]);
|
|
133252
133433
|
expandedStateCache.set(workspaceId2, root);
|
|
133253
133434
|
setExpandedPaths(new Set(root));
|
|
133254
133435
|
}, [workspaceId2]);
|
|
133255
133436
|
const revealInFinder = capabilities.revealInFinder;
|
|
133256
|
-
const onRevealInFinder = (0,
|
|
133437
|
+
const onRevealInFinder = (0, import_react35.useMemo)(
|
|
133257
133438
|
() => revealInFinder && workspacePath ? (path) => void revealInFinder(joinWorkspacePath(workspacePath, path)) : void 0,
|
|
133258
133439
|
[revealInFinder, workspacePath]
|
|
133259
133440
|
);
|
|
133260
|
-
(0,
|
|
133441
|
+
(0, import_react35.useImperativeHandle)(
|
|
133261
133442
|
handleRef,
|
|
133262
133443
|
() => ({
|
|
133263
133444
|
startNewFile(parentPath) {
|
|
@@ -133530,17 +133711,17 @@ var FileBrowser = (0, import_react36.forwardRef)(function FileBrowser2({
|
|
|
133530
133711
|
});
|
|
133531
133712
|
|
|
133532
133713
|
// src/dashboard/components/FileViewer.tsx
|
|
133533
|
-
var
|
|
133714
|
+
var import_react39 = __toESM(require_react(), 1);
|
|
133534
133715
|
|
|
133535
133716
|
// src/dashboard/lib/markdown-preview-width.ts
|
|
133536
|
-
var
|
|
133717
|
+
var import_react36 = __toESM(require_react(), 1);
|
|
133537
133718
|
|
|
133538
133719
|
// src/dashboard/components/ImagePreview.tsx
|
|
133539
|
-
var
|
|
133720
|
+
var import_react37 = __toESM(require_react(), 1);
|
|
133540
133721
|
var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
|
|
133541
133722
|
|
|
133542
133723
|
// src/dashboard/components/LanguagePickerDialog.tsx
|
|
133543
|
-
var
|
|
133724
|
+
var import_react38 = __toESM(require_react(), 1);
|
|
133544
133725
|
var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
|
|
133545
133726
|
|
|
133546
133727
|
// src/dashboard/components/PdfPreview.tsx
|
|
@@ -133550,7 +133731,7 @@ var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
|
|
|
133550
133731
|
var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1);
|
|
133551
133732
|
|
|
133552
133733
|
// src/dashboard/components/QuickOpenDialog.tsx
|
|
133553
|
-
var
|
|
133734
|
+
var import_react40 = __toESM(require_react(), 1);
|
|
133554
133735
|
|
|
133555
133736
|
// src/dashboard/lib/file-location.ts
|
|
133556
133737
|
function formatFileLocation(filePath, line2, options2) {
|
|
@@ -133565,7 +133746,7 @@ var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1);
|
|
|
133565
133746
|
|
|
133566
133747
|
// src/dashboard/components/SearchBar.tsx
|
|
133567
133748
|
var import_lucide_react8 = __toESM(require_lucide_react(), 1);
|
|
133568
|
-
var
|
|
133749
|
+
var import_react41 = __toESM(require_react(), 1);
|
|
133569
133750
|
var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
|
|
133570
133751
|
var DEFAULT_VISIBLE_OPTIONS = ["caseSensitive", "wholeWord", "regex"];
|
|
133571
133752
|
function ToggleButton({
|
|
@@ -133585,7 +133766,7 @@ function ToggleButton({
|
|
|
133585
133766
|
}
|
|
133586
133767
|
);
|
|
133587
133768
|
}
|
|
133588
|
-
var SearchBar = (0,
|
|
133769
|
+
var SearchBar = (0, import_react41.forwardRef)(function SearchBar2({
|
|
133589
133770
|
query,
|
|
133590
133771
|
onQueryChange,
|
|
133591
133772
|
options: options2,
|
|
@@ -133602,18 +133783,18 @@ var SearchBar = (0, import_react42.forwardRef)(function SearchBar2({
|
|
|
133602
133783
|
const showCase = visibleOptions.includes("caseSensitive");
|
|
133603
133784
|
const showWholeWord = visibleOptions.includes("wholeWord");
|
|
133604
133785
|
const showRegex = visibleOptions.includes("regex");
|
|
133605
|
-
const inputRef = (0,
|
|
133606
|
-
(0,
|
|
133786
|
+
const inputRef = (0, import_react41.useRef)(null);
|
|
133787
|
+
(0, import_react41.useImperativeHandle)(ref, () => ({
|
|
133607
133788
|
focus: () => inputRef.current?.focus(),
|
|
133608
133789
|
select: () => inputRef.current?.select()
|
|
133609
133790
|
}));
|
|
133610
|
-
const toggleCase = (0,
|
|
133791
|
+
const toggleCase = (0, import_react41.useCallback)(() => {
|
|
133611
133792
|
onOptionsChange({ ...options2, caseSensitive: !options2.caseSensitive });
|
|
133612
133793
|
}, [options2, onOptionsChange]);
|
|
133613
|
-
const toggleWholeWord = (0,
|
|
133794
|
+
const toggleWholeWord = (0, import_react41.useCallback)(() => {
|
|
133614
133795
|
onOptionsChange({ ...options2, wholeWord: !options2.wholeWord });
|
|
133615
133796
|
}, [options2, onOptionsChange]);
|
|
133616
|
-
const toggleRegex = (0,
|
|
133797
|
+
const toggleRegex = (0, import_react41.useCallback)(() => {
|
|
133617
133798
|
onOptionsChange({ ...options2, regex: !options2.regex });
|
|
133618
133799
|
}, [options2, onOptionsChange]);
|
|
133619
133800
|
const floating = variant === "floating";
|
|
@@ -133716,27 +133897,27 @@ var SearchBar = (0, import_react42.forwardRef)(function SearchBar2({
|
|
|
133716
133897
|
});
|
|
133717
133898
|
|
|
133718
133899
|
// src/dashboard/components/SearchFilesDialog.tsx
|
|
133719
|
-
var
|
|
133900
|
+
var import_react42 = __toESM(require_react(), 1);
|
|
133720
133901
|
var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
|
|
133721
133902
|
|
|
133722
133903
|
// src/dashboard/components/WorkspacePickerDialog.tsx
|
|
133723
|
-
var
|
|
133904
|
+
var import_react43 = __toESM(require_react(), 1);
|
|
133724
133905
|
var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1);
|
|
133725
133906
|
|
|
133726
133907
|
// src/dashboard/components/WorkspaceTabNav.tsx
|
|
133727
133908
|
var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1);
|
|
133728
133909
|
|
|
133729
133910
|
// src/dashboard/hooks/use-diff-target.ts
|
|
133730
|
-
var
|
|
133911
|
+
var import_react44 = __toESM(require_react(), 1);
|
|
133731
133912
|
|
|
133732
133913
|
// src/dashboard/hooks/use-editor-history.ts
|
|
133733
|
-
var
|
|
133914
|
+
var import_react45 = __toESM(require_react(), 1);
|
|
133734
133915
|
|
|
133735
133916
|
// src/dashboard/hooks/use-search.ts
|
|
133736
|
-
var
|
|
133917
|
+
var import_react46 = __toESM(require_react(), 1);
|
|
133737
133918
|
|
|
133738
133919
|
// src/dashboard/hooks/use-workspace-path.ts
|
|
133739
|
-
var
|
|
133920
|
+
var import_react47 = __toESM(require_react(), 1);
|
|
133740
133921
|
|
|
133741
133922
|
// ../../node_modules/.pnpm/marked@15.0.12/node_modules/marked/lib/marked.esm.js
|
|
133742
133923
|
function _getDefaults() {
|
|
@@ -135940,13 +136121,13 @@ var startFailures = 0;
|
|
|
135940
136121
|
var nextId = 1;
|
|
135941
136122
|
var pending = /* @__PURE__ */ new Map();
|
|
135942
136123
|
function execOnThisThread({ command, args, options: options2 }) {
|
|
135943
|
-
return new Promise((
|
|
136124
|
+
return new Promise((resolve13) => {
|
|
135944
136125
|
try {
|
|
135945
136126
|
execFile4(command, args, { ...options2, encoding: "utf8" }, (err, stdout, stderr) => {
|
|
135946
|
-
|
|
136127
|
+
resolve13({ stdout, stderr, error: err ? err.message : null });
|
|
135947
136128
|
});
|
|
135948
136129
|
} catch (err) {
|
|
135949
|
-
|
|
136130
|
+
resolve13({ stdout: "", stderr: "", error: err instanceof Error ? err.message : String(err) });
|
|
135950
136131
|
}
|
|
135951
136132
|
});
|
|
135952
136133
|
}
|
|
@@ -135984,11 +136165,11 @@ function getWorker() {
|
|
|
135984
136165
|
workerUnavailable = true;
|
|
135985
136166
|
log6.warn("exec-file worker won't start, spawning on the main thread");
|
|
135986
136167
|
}
|
|
135987
|
-
for (const { request, resolve:
|
|
136168
|
+
for (const { request, resolve: resolve13 } of orphaned) void execOnThisThread(request).then(resolve13);
|
|
135988
136169
|
return;
|
|
135989
136170
|
}
|
|
135990
|
-
for (const { resolve:
|
|
135991
|
-
|
|
136171
|
+
for (const { resolve: resolve13 } of orphaned) {
|
|
136172
|
+
resolve13({ stdout: "", stderr: "", error: `exec-file worker exited (code ${code})` });
|
|
135992
136173
|
}
|
|
135993
136174
|
});
|
|
135994
136175
|
worker = created;
|
|
@@ -136003,8 +136184,8 @@ function execFileOffThread(command, args, options2) {
|
|
|
136003
136184
|
};
|
|
136004
136185
|
const target = getWorker();
|
|
136005
136186
|
if (!target) return execOnThisThread(request);
|
|
136006
|
-
return new Promise((
|
|
136007
|
-
pending.set(request.id, { request, resolve:
|
|
136187
|
+
return new Promise((resolve13) => {
|
|
136188
|
+
pending.set(request.id, { request, resolve: resolve13 });
|
|
136008
136189
|
if (pending.size === 1) target.ref();
|
|
136009
136190
|
target.postMessage(request);
|
|
136010
136191
|
});
|
|
@@ -141601,7 +141782,7 @@ var PluginHost = class {
|
|
|
141601
141782
|
warn: (message, ...args) => pluginLog.warn(message, ...args),
|
|
141602
141783
|
error: (message, ...args) => pluginLog.error(message, ...args)
|
|
141603
141784
|
},
|
|
141604
|
-
exec: (bin, args, options2) => new Promise((
|
|
141785
|
+
exec: (bin, args, options2) => new Promise((resolve13, reject) => {
|
|
141605
141786
|
const env = { ...process.env, ...options2.env };
|
|
141606
141787
|
env.PATH = prependBinDirs(process.env.PATH);
|
|
141607
141788
|
execFile5(
|
|
@@ -141613,7 +141794,7 @@ var PluginHost = class {
|
|
|
141613
141794
|
reject(new Error(stderr.trim() || err.message));
|
|
141614
141795
|
return;
|
|
141615
141796
|
}
|
|
141616
|
-
|
|
141797
|
+
resolve13({ stdout, stderr });
|
|
141617
141798
|
}
|
|
141618
141799
|
);
|
|
141619
141800
|
}),
|
|
@@ -142197,8 +142378,8 @@ async function prepareScriptRun(script, label) {
|
|
|
142197
142378
|
let poll = null;
|
|
142198
142379
|
let disposed = false;
|
|
142199
142380
|
let resolveExited;
|
|
142200
|
-
const exited = new Promise((
|
|
142201
|
-
resolveExited =
|
|
142381
|
+
const exited = new Promise((resolve13) => {
|
|
142382
|
+
resolveExited = resolve13;
|
|
142202
142383
|
});
|
|
142203
142384
|
const check2 = () => {
|
|
142204
142385
|
if (disposed) return;
|
|
@@ -142236,7 +142417,7 @@ async function prepareScriptRun(script, label) {
|
|
|
142236
142417
|
return { command, exited, dispose };
|
|
142237
142418
|
}
|
|
142238
142419
|
function runScriptHidden(script, cwd, timeoutMs) {
|
|
142239
|
-
return new Promise((
|
|
142420
|
+
return new Promise((resolve13, reject) => {
|
|
142240
142421
|
const { PORT: _port, ...parentEnv } = process.env;
|
|
142241
142422
|
const child = spawn2(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", script], {
|
|
142242
142423
|
cwd,
|
|
@@ -142246,7 +142427,7 @@ function runScriptHidden(script, cwd, timeoutMs) {
|
|
|
142246
142427
|
});
|
|
142247
142428
|
const timer = timeoutMs === void 0 ? void 0 : setTimeout(() => {
|
|
142248
142429
|
child.kill();
|
|
142249
|
-
|
|
142430
|
+
resolve13(null);
|
|
142250
142431
|
}, timeoutMs);
|
|
142251
142432
|
child.on("error", (err) => {
|
|
142252
142433
|
clearTimeout(timer);
|
|
@@ -142254,7 +142435,7 @@ function runScriptHidden(script, cwd, timeoutMs) {
|
|
|
142254
142435
|
});
|
|
142255
142436
|
child.on("exit", (code) => {
|
|
142256
142437
|
clearTimeout(timer);
|
|
142257
|
-
|
|
142438
|
+
resolve13(code ?? 1);
|
|
142258
142439
|
});
|
|
142259
142440
|
});
|
|
142260
142441
|
}
|
|
@@ -142553,13 +142734,13 @@ var DaemonClient = class _DaemonClient {
|
|
|
142553
142734
|
request(t4, params) {
|
|
142554
142735
|
if (this.closed) return Promise.reject(new Error("Terminal daemon connection closed"));
|
|
142555
142736
|
const id2 = this.nextId++;
|
|
142556
|
-
return new Promise((
|
|
142737
|
+
return new Promise((resolve13, reject) => {
|
|
142557
142738
|
const timer = setTimeout(() => {
|
|
142558
142739
|
this.pending.delete(id2);
|
|
142559
142740
|
reject(new Error(`Terminal daemon did not answer ${t4} within ${REQUEST_TIMEOUT_MS} ms`));
|
|
142560
142741
|
}, REQUEST_TIMEOUT_MS);
|
|
142561
142742
|
this.pending.set(id2, {
|
|
142562
|
-
resolve:
|
|
142743
|
+
resolve: resolve13,
|
|
142563
142744
|
reject,
|
|
142564
142745
|
timer
|
|
142565
142746
|
});
|
|
@@ -142621,7 +142802,7 @@ async function retireDaemon(paths, buildId) {
|
|
|
142621
142802
|
return false;
|
|
142622
142803
|
} catch (err) {
|
|
142623
142804
|
if (!(err instanceof DaemonRejectedError) || err.reply.t !== "mismatch") throw err;
|
|
142624
|
-
const closed = new Promise((
|
|
142805
|
+
const closed = new Promise((resolve13) => socket.once("close", () => resolve13()));
|
|
142625
142806
|
writeFrame(socket, { t: "shutdown" });
|
|
142626
142807
|
await closed;
|
|
142627
142808
|
return true;
|
|
@@ -142657,7 +142838,7 @@ function openSocket(path) {
|
|
|
142657
142838
|
} catch (err) {
|
|
142658
142839
|
return Promise.reject(err);
|
|
142659
142840
|
}
|
|
142660
|
-
return new Promise((
|
|
142841
|
+
return new Promise((resolve13, reject) => {
|
|
142661
142842
|
const socket = connect({ path });
|
|
142662
142843
|
const timer = setTimeout(() => {
|
|
142663
142844
|
socket.destroy();
|
|
@@ -142666,7 +142847,7 @@ function openSocket(path) {
|
|
|
142666
142847
|
socket.once("connect", () => {
|
|
142667
142848
|
clearTimeout(timer);
|
|
142668
142849
|
socket.removeAllListeners("error");
|
|
142669
|
-
|
|
142850
|
+
resolve13(socket);
|
|
142670
142851
|
});
|
|
142671
142852
|
socket.once("error", (err) => {
|
|
142672
142853
|
clearTimeout(timer);
|
|
@@ -142680,7 +142861,7 @@ function openSocket(path) {
|
|
|
142680
142861
|
});
|
|
142681
142862
|
}
|
|
142682
142863
|
function handshake(socket, frames, hello) {
|
|
142683
|
-
return new Promise((
|
|
142864
|
+
return new Promise((resolve13, reject) => {
|
|
142684
142865
|
const timer = setTimeout(() => {
|
|
142685
142866
|
socket.destroy();
|
|
142686
142867
|
reject(new Error("Terminal daemon did not answer hello"));
|
|
@@ -142697,7 +142878,7 @@ function handshake(socket, frames, hello) {
|
|
|
142697
142878
|
clearTimeout(timer);
|
|
142698
142879
|
socket.off("close", onClose);
|
|
142699
142880
|
const reply = frame;
|
|
142700
|
-
if (reply.t === "ready")
|
|
142881
|
+
if (reply.t === "ready") resolve13(reply);
|
|
142701
142882
|
else reject(new DaemonRejectedError(reply));
|
|
142702
142883
|
});
|
|
142703
142884
|
writeFrame(socket, hello);
|
|
@@ -142744,7 +142925,7 @@ async function launchDaemon(options2) {
|
|
|
142744
142925
|
})();
|
|
142745
142926
|
child.on("error", () => {
|
|
142746
142927
|
});
|
|
142747
|
-
return new Promise((
|
|
142928
|
+
return new Promise((resolve13, reject) => {
|
|
142748
142929
|
let settled = false;
|
|
142749
142930
|
const finish = (outcome) => {
|
|
142750
142931
|
if (settled) return;
|
|
@@ -142762,7 +142943,7 @@ async function launchDaemon(options2) {
|
|
|
142762
142943
|
Daemon log:
|
|
142763
142944
|
${tail}`) : outcome);
|
|
142764
142945
|
} else {
|
|
142765
|
-
|
|
142946
|
+
resolve13(outcome);
|
|
142766
142947
|
}
|
|
142767
142948
|
};
|
|
142768
142949
|
const onMessage = (message) => {
|
|
@@ -143310,7 +143491,7 @@ function readPidRecord(path) {
|
|
|
143310
143491
|
async function waitForExit(pid, timeoutMs) {
|
|
143311
143492
|
const deadline = Date.now() + timeoutMs;
|
|
143312
143493
|
while (isProcessAlive(pid) && Date.now() < deadline) {
|
|
143313
|
-
await new Promise((
|
|
143494
|
+
await new Promise((resolve13) => setTimeout(resolve13, RESTART_POLL_INTERVAL_MS));
|
|
143314
143495
|
}
|
|
143315
143496
|
}
|
|
143316
143497
|
function isProcessAlive(pid) {
|
|
@@ -143328,7 +143509,7 @@ async function connectWithRetry(paths, buildId) {
|
|
|
143328
143509
|
} catch (err) {
|
|
143329
143510
|
const retriable = err instanceof DaemonRejectedError && err.reply.t === "rejected" && attempt < CONNECT_RETRIES;
|
|
143330
143511
|
if (!retriable) throw err;
|
|
143331
|
-
await new Promise((
|
|
143512
|
+
await new Promise((resolve13) => setTimeout(resolve13, CONNECT_RETRY_DELAY_MS));
|
|
143332
143513
|
}
|
|
143333
143514
|
}
|
|
143334
143515
|
}
|
|
@@ -144107,13 +144288,13 @@ var TerminalPool = class {
|
|
|
144107
144288
|
let deathWatch;
|
|
144108
144289
|
let drainCap;
|
|
144109
144290
|
try {
|
|
144110
|
-
await new Promise((
|
|
144111
|
-
session.headless.write("",
|
|
144291
|
+
await new Promise((resolve13) => {
|
|
144292
|
+
session.headless.write("", resolve13);
|
|
144112
144293
|
deathWatch = setInterval(() => {
|
|
144113
|
-
if (this.terminals.get(terminalId) !== session)
|
|
144294
|
+
if (this.terminals.get(terminalId) !== session) resolve13();
|
|
144114
144295
|
}, 50);
|
|
144115
144296
|
deathWatch.unref();
|
|
144116
|
-
drainCap = setTimeout(
|
|
144297
|
+
drainCap = setTimeout(resolve13, 1e3);
|
|
144117
144298
|
drainCap.unref();
|
|
144118
144299
|
});
|
|
144119
144300
|
if (this.terminals.get(terminalId) !== session) return null;
|
|
@@ -144996,7 +145177,7 @@ function formatFileList(files) {
|
|
|
144996
145177
|
|
|
144997
145178
|
// src/server/infra/lsp/lsp-manager.ts
|
|
144998
145179
|
import { spawn as spawn3 } from "node:child_process";
|
|
144999
|
-
import { dirname as dirname5, join as join21, resolve as
|
|
145180
|
+
import { dirname as dirname5, join as join21, resolve as resolve4 } from "node:path";
|
|
145000
145181
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
145001
145182
|
var workspaceQueries = new WorkspaceQueries();
|
|
145002
145183
|
var __dirname2 = dirname5(fileURLToPath2(import.meta.url));
|
|
@@ -145023,8 +145204,8 @@ async function getOrSpawnServer(workspaceId2, lang) {
|
|
|
145023
145204
|
}
|
|
145024
145205
|
const resolvedPath = await shellPath();
|
|
145025
145206
|
const cwd = workspace.worktreePath;
|
|
145026
|
-
const appBin =
|
|
145027
|
-
const bundledBin =
|
|
145207
|
+
const appBin = resolve4(__dirname2, "../../../../node_modules/.bin");
|
|
145208
|
+
const bundledBin = resolve4(__dirname2, "node_modules/.bin");
|
|
145028
145209
|
const workspaceBin = join21(cwd, "node_modules/.bin");
|
|
145029
145210
|
const pathSep = process.platform === "win32" ? ";" : ":";
|
|
145030
145211
|
const combinedPath = [bundledBin, appBin, workspaceBin, resolvedPath].join(pathSep);
|
|
@@ -145071,8 +145252,8 @@ async function getOrSpawnServer(workspaceId2, lang) {
|
|
|
145071
145252
|
child.stderr?.on("data", (chunk) => {
|
|
145072
145253
|
log17.debug("LSP stderr [%s]: %s", serverId, chunk.toString().trimEnd());
|
|
145073
145254
|
});
|
|
145074
|
-
await new Promise((
|
|
145075
|
-
child.once("spawn",
|
|
145255
|
+
await new Promise((resolve13, reject) => {
|
|
145256
|
+
child.once("spawn", resolve13);
|
|
145076
145257
|
child.once("error", (err) => reject(err));
|
|
145077
145258
|
});
|
|
145078
145259
|
return session;
|
|
@@ -145105,10 +145286,10 @@ import {
|
|
|
145105
145286
|
globSync,
|
|
145106
145287
|
mkdirSync as mkdirSync4,
|
|
145107
145288
|
readFileSync as readFileSync7,
|
|
145108
|
-
realpathSync as
|
|
145289
|
+
realpathSync as realpathSync3,
|
|
145109
145290
|
statSync as statSync9
|
|
145110
145291
|
} from "node:fs";
|
|
145111
|
-
import { dirname as dirname6, isAbsolute, join as join22, relative, resolve as
|
|
145292
|
+
import { dirname as dirname6, isAbsolute, join as join22, relative, resolve as resolve5, sep as sep3 } from "node:path";
|
|
145112
145293
|
import { promisify } from "node:util";
|
|
145113
145294
|
var log18 = createLogger("workspace-files");
|
|
145114
145295
|
var execFileAsync = promisify(execFile6);
|
|
@@ -145134,7 +145315,7 @@ async function copyWorkspaceFiles(projectPath, worktreePath) {
|
|
|
145134
145315
|
const copied = [];
|
|
145135
145316
|
let canonicalProjectRoot;
|
|
145136
145317
|
try {
|
|
145137
|
-
canonicalProjectRoot =
|
|
145318
|
+
canonicalProjectRoot = realpathSync3(projectPath);
|
|
145138
145319
|
} catch (err) {
|
|
145139
145320
|
log18.warn({ err, projectPath }, "failed to resolve project root \u2014 skipping workspace file copy");
|
|
145140
145321
|
return copied;
|
|
@@ -145150,7 +145331,7 @@ async function copyWorkspaceFiles(projectPath, worktreePath) {
|
|
|
145150
145331
|
continue;
|
|
145151
145332
|
}
|
|
145152
145333
|
try {
|
|
145153
|
-
const canonicalSource =
|
|
145334
|
+
const canonicalSource = realpathSync3(absSource);
|
|
145154
145335
|
const insideRoot = canonicalSource === canonicalProjectRoot || canonicalSource.startsWith(canonicalProjectRoot + sep3);
|
|
145155
145336
|
if (!insideRoot) {
|
|
145156
145337
|
log18.warn(
|
|
@@ -145211,7 +145392,7 @@ function resolveFromConfig(projectPath, missing) {
|
|
|
145211
145392
|
);
|
|
145212
145393
|
break;
|
|
145213
145394
|
}
|
|
145214
|
-
const abs =
|
|
145395
|
+
const abs = resolve5(projectPath, m3);
|
|
145215
145396
|
try {
|
|
145216
145397
|
if (statSync9(abs).isFile()) {
|
|
145217
145398
|
out.push(abs);
|
|
@@ -145220,7 +145401,7 @@ function resolveFromConfig(projectPath, missing) {
|
|
|
145220
145401
|
}
|
|
145221
145402
|
}
|
|
145222
145403
|
} else {
|
|
145223
|
-
const abs =
|
|
145404
|
+
const abs = resolve5(projectPath, entry);
|
|
145224
145405
|
try {
|
|
145225
145406
|
if (statSync9(abs).isFile()) {
|
|
145226
145407
|
out.push(abs);
|
|
@@ -145260,7 +145441,7 @@ async function resolveFromWorktreeInclude(projectPath) {
|
|
|
145260
145441
|
const out = [];
|
|
145261
145442
|
for (const rel of matchingWorktreeInclude) {
|
|
145262
145443
|
if (!standardSet.has(rel)) continue;
|
|
145263
|
-
out.push(
|
|
145444
|
+
out.push(resolve5(projectPath, rel));
|
|
145264
145445
|
}
|
|
145265
145446
|
return out;
|
|
145266
145447
|
}
|
|
@@ -145475,6 +145656,25 @@ function submitTask(options2) {
|
|
|
145475
145656
|
});
|
|
145476
145657
|
return toTaskInfo(task);
|
|
145477
145658
|
}
|
|
145659
|
+
function submitOrQueueTask(options2) {
|
|
145660
|
+
const { workspaceId: workspaceId2, chatId } = options2;
|
|
145661
|
+
if (!workspaceService.resolve(workspaceId2)) {
|
|
145662
|
+
throw new WorkspaceNotFoundError(workspaceId2);
|
|
145663
|
+
}
|
|
145664
|
+
const running = tasks2.get(chatId)?.status === "running";
|
|
145665
|
+
if (!running && !hasQueuedMessages(chatId)) {
|
|
145666
|
+
return { queued: false, task: submitTask(options2) };
|
|
145667
|
+
}
|
|
145668
|
+
const queued = pushQueuedMessage(chatId, {
|
|
145669
|
+
text: options2.prompt,
|
|
145670
|
+
files: options2.attachments,
|
|
145671
|
+
mode: options2.mode,
|
|
145672
|
+
model: options2.model,
|
|
145673
|
+
codingAgentId: options2.codingAgentId
|
|
145674
|
+
});
|
|
145675
|
+
if (!running) drainQueue(workspaceId2, chatId);
|
|
145676
|
+
return { queued: true, queuedMessageId: queued.id };
|
|
145677
|
+
}
|
|
145478
145678
|
async function runTask(task) {
|
|
145479
145679
|
const { chatId } = task;
|
|
145480
145680
|
chatService.updateStatus(chatId, "running");
|
|
@@ -145545,9 +145745,7 @@ async function runTask(task) {
|
|
|
145545
145745
|
});
|
|
145546
145746
|
}
|
|
145547
145747
|
});
|
|
145548
|
-
const previousCost = agentSessionService.
|
|
145549
|
-
resolveDefaults: false
|
|
145550
|
-
}).costUsd;
|
|
145748
|
+
const previousCost = agentSessionService.sessionCostUsd(chatId);
|
|
145551
145749
|
agentSessionService.record(
|
|
145552
145750
|
chatId,
|
|
145553
145751
|
{
|
|
@@ -145606,7 +145804,7 @@ function finishTask(task, outcome) {
|
|
|
145606
145804
|
task.completedAt = Date.now();
|
|
145607
145805
|
persistTask(task);
|
|
145608
145806
|
if (tasks2.get(task.chatId) === task) tasks2.delete(task.chatId);
|
|
145609
|
-
if (status === "completed" && drainQueue(task)) return;
|
|
145807
|
+
if (status === "completed" && drainQueue(task.workspaceId, task.chatId)) return;
|
|
145610
145808
|
chatService.updateStatus(task.chatId, status === "completed" ? "idle" : "error");
|
|
145611
145809
|
const stopped = outcome === "cancelled" || task.cancelRequested === true;
|
|
145612
145810
|
const updated = setWorkspaceSourceStatus(task.workspaceId, chatStatusSource(task.chatId), {
|
|
@@ -145614,20 +145812,24 @@ function finishTask(task, outcome) {
|
|
|
145614
145812
|
});
|
|
145615
145813
|
emit({ kind: "update", status: updated });
|
|
145616
145814
|
}
|
|
145617
|
-
function drainQueue(
|
|
145618
|
-
const queued =
|
|
145815
|
+
function drainQueue(workspaceId2, chatId) {
|
|
145816
|
+
const queued = peekQueuedMessage(chatId);
|
|
145619
145817
|
if (!queued) return false;
|
|
145620
145818
|
try {
|
|
145621
145819
|
const attachments = (queued.files ?? []).filter((f2) => f2.path).map((f2) => ({ path: f2.path, mediaType: f2.mediaType, url: f2.url, filename: f2.filename }));
|
|
145622
145820
|
submitTask({
|
|
145623
|
-
workspaceId:
|
|
145624
|
-
chatId
|
|
145821
|
+
workspaceId: workspaceId2,
|
|
145822
|
+
chatId,
|
|
145625
145823
|
prompt: queued.text,
|
|
145626
|
-
attachments
|
|
145824
|
+
attachments,
|
|
145825
|
+
mode: queued.mode,
|
|
145826
|
+
model: queued.model,
|
|
145827
|
+
codingAgentId: queued.codingAgentId
|
|
145627
145828
|
});
|
|
145829
|
+
removeQueuedMessage(chatId, queued.id);
|
|
145628
145830
|
return true;
|
|
145629
145831
|
} catch (err) {
|
|
145630
|
-
log19.warn({ chatId
|
|
145832
|
+
log19.warn({ chatId, err }, "failed to auto-start queued task");
|
|
145631
145833
|
return false;
|
|
145632
145834
|
}
|
|
145633
145835
|
}
|
|
@@ -145674,6 +145876,9 @@ var TaskService = class {
|
|
|
145674
145876
|
submitTask(options2) {
|
|
145675
145877
|
return submitTask(options2);
|
|
145676
145878
|
}
|
|
145879
|
+
submitOrQueueTask(options2) {
|
|
145880
|
+
return submitOrQueueTask(options2);
|
|
145881
|
+
}
|
|
145677
145882
|
abortTask(chatId) {
|
|
145678
145883
|
return abortTask(chatId);
|
|
145679
145884
|
}
|
|
@@ -148725,9 +148930,9 @@ var TerminalService = class {
|
|
|
148725
148930
|
let exited = false;
|
|
148726
148931
|
let wake = null;
|
|
148727
148932
|
const notify2 = () => {
|
|
148728
|
-
const
|
|
148933
|
+
const resolve13 = wake;
|
|
148729
148934
|
wake = null;
|
|
148730
|
-
|
|
148935
|
+
resolve13?.();
|
|
148731
148936
|
};
|
|
148732
148937
|
const unsubscribeExit = this.onExit(terminalId, () => {
|
|
148733
148938
|
exited = true;
|
|
@@ -148755,9 +148960,9 @@ var TerminalService = class {
|
|
|
148755
148960
|
yield { kind: "exit" };
|
|
148756
148961
|
return;
|
|
148757
148962
|
}
|
|
148758
|
-
await new Promise((
|
|
148759
|
-
if (exited || queue.length > 0 || signal?.aborted)
|
|
148760
|
-
else wake =
|
|
148963
|
+
await new Promise((resolve13) => {
|
|
148964
|
+
if (exited || queue.length > 0 || signal?.aborted) resolve13();
|
|
148965
|
+
else wake = resolve13;
|
|
148761
148966
|
});
|
|
148762
148967
|
}
|
|
148763
148968
|
} finally {
|
|
@@ -148887,12 +149092,12 @@ var WorkspaceScriptService = class {
|
|
|
148887
149092
|
try {
|
|
148888
149093
|
prepared = await prepareScriptRun(command, script);
|
|
148889
149094
|
const { exited } = prepared;
|
|
148890
|
-
const closed = new Promise((
|
|
148891
|
-
unsubscribeExit = terminalService.onExit(terminalId, () =>
|
|
149095
|
+
const closed = new Promise((resolve13) => {
|
|
149096
|
+
unsubscribeExit = terminalService.onExit(terminalId, () => resolve13({ kind: "closed" }));
|
|
148892
149097
|
});
|
|
148893
|
-
const timedOut = new Promise((
|
|
149098
|
+
const timedOut = new Promise((resolve13) => {
|
|
148894
149099
|
if (timeoutMs !== void 0) {
|
|
148895
|
-
timer = setTimeout(() =>
|
|
149100
|
+
timer = setTimeout(() => resolve13({ kind: "timeout" }), timeoutMs);
|
|
148896
149101
|
}
|
|
148897
149102
|
});
|
|
148898
149103
|
await terminalService.spawn(workspaceId2, terminalId, { command: prepared.command });
|
|
@@ -149558,6 +149763,7 @@ var chatService = new ChatService();
|
|
|
149558
149763
|
var log31 = createLogger("agent-sessions");
|
|
149559
149764
|
var IDLE_TIMEOUT_MS = 15 * 6e4;
|
|
149560
149765
|
var CANCEL_GRACE_MS = 15e3;
|
|
149766
|
+
var MAX_TIMER_MS = 2 ** 31 - 1;
|
|
149561
149767
|
var PROBE_SETTLE_MS = 1500;
|
|
149562
149768
|
var events = new ChatEventQueries();
|
|
149563
149769
|
var settings = new SettingsQueries();
|
|
@@ -149636,6 +149842,7 @@ function runtimeFor(chat, def2) {
|
|
|
149636
149842
|
turnSeq: 0,
|
|
149637
149843
|
live: emptyLive(),
|
|
149638
149844
|
pending: /* @__PURE__ */ new Map(),
|
|
149845
|
+
work: new PendingWork(),
|
|
149639
149846
|
idleTimer: null,
|
|
149640
149847
|
claudeCli: null
|
|
149641
149848
|
};
|
|
@@ -149651,35 +149858,59 @@ function stopRuntime(rt) {
|
|
|
149651
149858
|
rt.sessionId = null;
|
|
149652
149859
|
runtimes.delete(rt.chatId);
|
|
149653
149860
|
}
|
|
149654
|
-
function
|
|
149861
|
+
function idleTimeoutMs() {
|
|
149862
|
+
const override = Number(process.env.BAND_AGENT_IDLE_TIMEOUT_MS);
|
|
149863
|
+
return Number.isFinite(override) && override > 0 ? override : IDLE_TIMEOUT_MS;
|
|
149864
|
+
}
|
|
149865
|
+
function scheduleIdle(rt, delayMs = idleTimeoutMs()) {
|
|
149655
149866
|
if (rt.idleTimer) clearTimeout(rt.idleTimer);
|
|
149867
|
+
const delay2 = Math.min(delayMs, MAX_TIMER_MS);
|
|
149656
149868
|
rt.idleTimer = setTimeout(() => {
|
|
149657
149869
|
rt.idleTimer = null;
|
|
149658
149870
|
if (rt.inTurn || rt.pending.size > 0 || rt.attaching) return;
|
|
149871
|
+
const now = Date.now();
|
|
149872
|
+
const holds = rt.work.outstanding(now);
|
|
149873
|
+
if (holds.length > 0) {
|
|
149874
|
+
const until = Math.max(...holds.map((h) => h.until));
|
|
149875
|
+
log31.info(
|
|
149876
|
+
{
|
|
149877
|
+
chatId: rt.chatId,
|
|
149878
|
+
work: holds.map((h) => ({ reason: h.reason, until: new Date(h.until).toISOString() }))
|
|
149879
|
+
},
|
|
149880
|
+
"idle agent has pending work; not stopping it"
|
|
149881
|
+
);
|
|
149882
|
+
scheduleIdle(rt, until - now + idleTimeoutMs());
|
|
149883
|
+
return;
|
|
149884
|
+
}
|
|
149659
149885
|
log31.info({ chatId: rt.chatId }, "stopping idle agent");
|
|
149660
149886
|
rt.process?.close();
|
|
149661
149887
|
rt.process = null;
|
|
149662
149888
|
rt.sessionId = null;
|
|
149663
149889
|
if (runtimes.get(rt.chatId) === rt) runtimes.delete(rt.chatId);
|
|
149664
|
-
},
|
|
149890
|
+
}, delay2);
|
|
149665
149891
|
rt.idleTimer.unref?.();
|
|
149666
149892
|
}
|
|
149893
|
+
function agentActive(rt) {
|
|
149894
|
+
if (!rt.inTurn && !rt.attaching && rt.process) scheduleIdle(rt);
|
|
149895
|
+
}
|
|
149667
149896
|
function record2(rt, event, turnStart = false) {
|
|
149668
149897
|
if (!rt.sessionId) {
|
|
149669
149898
|
broadcastTransient(rt.chatId, event);
|
|
149670
149899
|
return;
|
|
149671
149900
|
}
|
|
149901
|
+
const createdAt = Date.now();
|
|
149672
149902
|
const id2 = events.append({
|
|
149673
149903
|
chatId: rt.chatId,
|
|
149674
149904
|
sessionId: rt.sessionId,
|
|
149675
149905
|
revision: rt.revision,
|
|
149676
149906
|
event,
|
|
149677
|
-
turnStart
|
|
149907
|
+
turnStart,
|
|
149908
|
+
createdAt
|
|
149678
149909
|
});
|
|
149679
|
-
emit2(rt.chatId, { ...event, eventId: id2 });
|
|
149910
|
+
emit2(rt.chatId, { ...event, eventId: id2, createdAt });
|
|
149680
149911
|
}
|
|
149681
149912
|
function broadcastTransient(chatId, event) {
|
|
149682
|
-
emit2(chatId, { ...event, eventId: transientId
|
|
149913
|
+
emit2(chatId, { ...event, eventId: transientId--, createdAt: Date.now() });
|
|
149683
149914
|
}
|
|
149684
149915
|
function remember(def2, patch) {
|
|
149685
149916
|
const prev = catalog.get(def2.id);
|
|
@@ -149747,7 +149978,11 @@ function applyLive(rt, update) {
|
|
|
149747
149978
|
if (rt.live.modes) rt.live.modes = { ...rt.live.modes, currentModeId: update.currentModeId };
|
|
149748
149979
|
break;
|
|
149749
149980
|
case "usage_update":
|
|
149750
|
-
rt.live.usage = {
|
|
149981
|
+
rt.live.usage = {
|
|
149982
|
+
used: update.used,
|
|
149983
|
+
size: update.size,
|
|
149984
|
+
cost: update.cost ?? rt.live.usage?.cost ?? null
|
|
149985
|
+
};
|
|
149751
149986
|
break;
|
|
149752
149987
|
case "session_info_update":
|
|
149753
149988
|
if (update.title !== void 0) {
|
|
@@ -149773,6 +150008,10 @@ function routeUpdate(rt, notification) {
|
|
|
149773
150008
|
}
|
|
149774
150009
|
const update = notification.update;
|
|
149775
150010
|
applyLive(rt, update);
|
|
150011
|
+
if (!rt.attaching) {
|
|
150012
|
+
rt.work.observeUpdate(update, rt.inTurn);
|
|
150013
|
+
agentActive(rt);
|
|
150014
|
+
}
|
|
149776
150015
|
if (rt.routing === "drop") return;
|
|
149777
150016
|
if (update.sessionUpdate === "user_message_chunk") {
|
|
149778
150017
|
if (rt.inTurn) return;
|
|
@@ -149805,7 +150044,7 @@ function openRequest(rt, signal, make, onCancel) {
|
|
|
149805
150044
|
return requestId;
|
|
149806
150045
|
}
|
|
149807
150046
|
function requestPermission(rt, request, signal) {
|
|
149808
|
-
return new Promise((
|
|
150047
|
+
return new Promise((resolve13) => {
|
|
149809
150048
|
const requestId = openRequest(
|
|
149810
150049
|
rt,
|
|
149811
150050
|
signal,
|
|
@@ -149813,10 +150052,10 @@ function requestPermission(rt, request, signal) {
|
|
|
149813
150052
|
optionIds: request.options.map((o) => o.optionId),
|
|
149814
150053
|
permission: (optionId) => {
|
|
149815
150054
|
done(optionId ?? "cancelled");
|
|
149816
|
-
|
|
150055
|
+
resolve13(optionId ? { outcome: "selected", optionId } : { outcome: "cancelled" });
|
|
149817
150056
|
}
|
|
149818
150057
|
}),
|
|
149819
|
-
() =>
|
|
150058
|
+
() => resolve13({ outcome: "cancelled" })
|
|
149820
150059
|
);
|
|
149821
150060
|
record2(rt, { type: "permission", requestId, request });
|
|
149822
150061
|
pendingObserver?.(rt.chatId, rt.workspaceId);
|
|
@@ -149824,17 +150063,17 @@ function requestPermission(rt, request, signal) {
|
|
|
149824
150063
|
}
|
|
149825
150064
|
function requestElicitation(rt, request, signal) {
|
|
149826
150065
|
if (request.mode !== "form") return Promise.resolve({ action: "decline" });
|
|
149827
|
-
return new Promise((
|
|
150066
|
+
return new Promise((resolve13) => {
|
|
149828
150067
|
const requestId = openRequest(
|
|
149829
150068
|
rt,
|
|
149830
150069
|
signal,
|
|
149831
150070
|
(done) => ({
|
|
149832
150071
|
elicitation: (response) => {
|
|
149833
150072
|
done(response.action);
|
|
149834
|
-
|
|
150073
|
+
resolve13(response);
|
|
149835
150074
|
}
|
|
149836
150075
|
}),
|
|
149837
|
-
() =>
|
|
150076
|
+
() => resolve13({ action: "cancel" })
|
|
149838
150077
|
);
|
|
149839
150078
|
record2(rt, { type: "elicitation", requestId, request });
|
|
149840
150079
|
pendingObserver?.(rt.chatId, rt.workspaceId);
|
|
@@ -149843,6 +150082,11 @@ function requestElicitation(rt, request, signal) {
|
|
|
149843
150082
|
function handlersFor(rt, generation) {
|
|
149844
150083
|
return {
|
|
149845
150084
|
onUpdate: (n) => routeUpdate(rt, n),
|
|
150085
|
+
onAsyncTask: (n) => {
|
|
150086
|
+
if (n.sessionId !== rt.sessionId || rt.attaching) return;
|
|
150087
|
+
rt.work.observeAsyncTask(n.update);
|
|
150088
|
+
agentActive(rt);
|
|
150089
|
+
},
|
|
149846
150090
|
onPermission: (req, signal) => requestPermission(rt, req, signal),
|
|
149847
150091
|
onElicitation: (req, signal) => requestElicitation(rt, req, signal),
|
|
149848
150092
|
onExit: (code, stderr) => {
|
|
@@ -149850,6 +150094,7 @@ function handlersFor(rt, generation) {
|
|
|
149850
150094
|
log31.info({ chatId: rt.chatId, code }, "agent exited");
|
|
149851
150095
|
log31.debug({ chatId: rt.chatId, stderr: stderr.slice(-500) }, "agent stderr");
|
|
149852
150096
|
for (const p3 of [...rt.pending.values()]) p3.cancel();
|
|
150097
|
+
rt.work.clear();
|
|
149853
150098
|
rt.process = null;
|
|
149854
150099
|
rt.starting = null;
|
|
149855
150100
|
}
|
|
@@ -150110,6 +150355,15 @@ var AgentSessionService = class {
|
|
|
150110
150355
|
const cost = runtimes.get(chatId)?.live.usage?.cost;
|
|
150111
150356
|
return cost && cost.currency === "USD" ? cost.amount : void 0;
|
|
150112
150357
|
}
|
|
150358
|
+
/** The session's cumulative cost in USD so far: the agent's own figure
|
|
150359
|
+
* when it reports one, else Band's estimate from the last finished turn.
|
|
150360
|
+
* The next turn's estimate builds on it. */
|
|
150361
|
+
sessionCostUsd(chatId) {
|
|
150362
|
+
const reported = this.reportedCost(chatId);
|
|
150363
|
+
if (reported !== void 0) return reported;
|
|
150364
|
+
const sessionId = chatService.get(chatId)?.activeSessionId;
|
|
150365
|
+
return sessionId ? sessionCost(sessionId) : null;
|
|
150366
|
+
}
|
|
150113
150367
|
/** Runs one prompt turn on the attached session. */
|
|
150114
150368
|
async prompt(chatId, blocks) {
|
|
150115
150369
|
const rt = runtimes.get(chatId);
|
|
@@ -150309,11 +150563,7 @@ var AgentSessionService = class {
|
|
|
150309
150563
|
const rt = runtimes.get(chatId);
|
|
150310
150564
|
const sessionId = chat.activeSessionId;
|
|
150311
150565
|
if (rt?.process?.alive && rt.sessionId && rt.sessionId === sessionId) {
|
|
150312
|
-
return {
|
|
150313
|
-
source: "live",
|
|
150314
|
-
...rt.live,
|
|
150315
|
-
costUsd: this.reportedCost(chatId) ?? sessionCost(sessionId)
|
|
150316
|
-
};
|
|
150566
|
+
return { source: "live", ...rt.live };
|
|
150317
150567
|
}
|
|
150318
150568
|
const revision = sessionId ? events.currentRevision(sessionId) : 0;
|
|
150319
150569
|
if (sessionId && revision > 0) {
|
|
@@ -150335,7 +150585,6 @@ var AgentSessionService = class {
|
|
|
150335
150585
|
models: base3?.models ?? null,
|
|
150336
150586
|
commands: commands?.type === "update" && commands.update.sessionUpdate === "available_commands_update" ? commands.update.availableCommands : catalog.get(def2.id)?.commands ?? [],
|
|
150337
150587
|
usage: usageUpdate,
|
|
150338
|
-
costUsd: usageUpdate?.cost?.currency === "USD" ? usageUpdate.cost.amount : sessionCost(sessionId),
|
|
150339
150588
|
title: info?.type === "update" && info.update.sessionUpdate === "session_info_update" ? info.update.title ?? null : null
|
|
150340
150589
|
};
|
|
150341
150590
|
}
|
|
@@ -150355,7 +150604,6 @@ var AgentSessionService = class {
|
|
|
150355
150604
|
models: models && modelChoice && models.availableModels.some((m3) => m3.modelId === modelChoice) ? { ...models, currentModelId: modelChoice } : models,
|
|
150356
150605
|
commands: cached2?.commands ?? [],
|
|
150357
150606
|
usage: null,
|
|
150358
|
-
costUsd: null,
|
|
150359
150607
|
title: null
|
|
150360
150608
|
};
|
|
150361
150609
|
}
|
|
@@ -150537,13 +150785,13 @@ var AgentSessionService = class {
|
|
|
150537
150785
|
}
|
|
150538
150786
|
}
|
|
150539
150787
|
};
|
|
150788
|
+
var agentSessionService = new AgentSessionService();
|
|
150540
150789
|
function sessionCost(sessionId) {
|
|
150541
150790
|
const revision = events.currentRevision(sessionId);
|
|
150542
150791
|
if (revision === 0) return null;
|
|
150543
150792
|
const row = events.latest(sessionId, revision, { kind: "turn-ended" });
|
|
150544
150793
|
return row?.event.type === "turn-ended" ? row.event.usage?.costUsd ?? null : null;
|
|
150545
150794
|
}
|
|
150546
|
-
var agentSessionService = new AgentSessionService();
|
|
150547
150795
|
|
|
150548
150796
|
// src/shared/chat-events.ts
|
|
150549
150797
|
var HISTORY_PAGE_SIZE = 20;
|
|
@@ -150761,10 +151009,10 @@ async function saveUploadedFilesDetailed(fileParts) {
|
|
|
150761
151009
|
// src/api/chat-submit.ts
|
|
150762
151010
|
var log33 = createLogger("chat-submit");
|
|
150763
151011
|
function readBody(req) {
|
|
150764
|
-
return new Promise((
|
|
151012
|
+
return new Promise((resolve13, reject) => {
|
|
150765
151013
|
const chunks = [];
|
|
150766
151014
|
req.on("data", (chunk) => chunks.push(chunk));
|
|
150767
|
-
req.on("end", () =>
|
|
151015
|
+
req.on("end", () => resolve13(Buffer.concat(chunks).toString("utf-8")));
|
|
150768
151016
|
req.on("error", reject);
|
|
150769
151017
|
});
|
|
150770
151018
|
}
|
|
@@ -150809,7 +151057,7 @@ async function handleChatSubmit(req, res, chatId) {
|
|
|
150809
151057
|
}));
|
|
150810
151058
|
}
|
|
150811
151059
|
try {
|
|
150812
|
-
taskService.
|
|
151060
|
+
const result = taskService.submitOrQueueTask({
|
|
150813
151061
|
workspaceId: workspaceId2,
|
|
150814
151062
|
chatId,
|
|
150815
151063
|
prompt: text3,
|
|
@@ -150819,18 +151067,12 @@ async function handleChatSubmit(req, res, chatId) {
|
|
|
150819
151067
|
model,
|
|
150820
151068
|
codingAgentId
|
|
150821
151069
|
});
|
|
150822
|
-
log33.info(
|
|
150823
|
-
|
|
151070
|
+
log33.info(
|
|
151071
|
+
{ chatId, workspaceId: workspaceId2 },
|
|
151072
|
+
result.queued ? "chat-submit: chat busy, message queued" : "chat-submit: task started"
|
|
151073
|
+
);
|
|
151074
|
+
sendJson2(res, 200, { ok: true, queued: result.queued });
|
|
150824
151075
|
} catch (err) {
|
|
150825
|
-
if (err instanceof TaskConflictError) {
|
|
150826
|
-
pushQueuedMessage(chatId, {
|
|
150827
|
-
text: text3,
|
|
150828
|
-
...attachments.length > 0 && { files: attachments }
|
|
150829
|
-
});
|
|
150830
|
-
log33.info({ chatId, workspaceId: workspaceId2 }, "chat-submit: task busy, message queued");
|
|
150831
|
-
sendJson2(res, 200, { ok: true, queued: true });
|
|
150832
|
-
return;
|
|
150833
|
-
}
|
|
150834
151076
|
if (err instanceof WorkspaceNotFoundError) {
|
|
150835
151077
|
sendJson2(res, 404, { error: err.message });
|
|
150836
151078
|
return;
|
|
@@ -154394,7 +154636,7 @@ var Protocol = class {
|
|
|
154394
154636
|
return;
|
|
154395
154637
|
}
|
|
154396
154638
|
const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
|
|
154397
|
-
await new Promise((
|
|
154639
|
+
await new Promise((resolve13) => setTimeout(resolve13, pollInterval));
|
|
154398
154640
|
options2?.signal?.throwIfAborted();
|
|
154399
154641
|
}
|
|
154400
154642
|
} catch (error40) {
|
|
@@ -154411,7 +154653,7 @@ var Protocol = class {
|
|
|
154411
154653
|
*/
|
|
154412
154654
|
request(request, resultSchema, options2) {
|
|
154413
154655
|
const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options2 ?? {};
|
|
154414
|
-
return new Promise((
|
|
154656
|
+
return new Promise((resolve13, reject) => {
|
|
154415
154657
|
const earlyReject = (error40) => {
|
|
154416
154658
|
reject(error40);
|
|
154417
154659
|
};
|
|
@@ -154489,7 +154731,7 @@ var Protocol = class {
|
|
|
154489
154731
|
if (!parseResult.success) {
|
|
154490
154732
|
reject(parseResult.error);
|
|
154491
154733
|
} else {
|
|
154492
|
-
|
|
154734
|
+
resolve13(parseResult.data);
|
|
154493
154735
|
}
|
|
154494
154736
|
} catch (error40) {
|
|
154495
154737
|
reject(error40);
|
|
@@ -154750,12 +154992,12 @@ var Protocol = class {
|
|
|
154750
154992
|
}
|
|
154751
154993
|
} catch {
|
|
154752
154994
|
}
|
|
154753
|
-
return new Promise((
|
|
154995
|
+
return new Promise((resolve13, reject) => {
|
|
154754
154996
|
if (signal.aborted) {
|
|
154755
154997
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
154756
154998
|
return;
|
|
154757
154999
|
}
|
|
154758
|
-
const timeoutId = setTimeout(
|
|
155000
|
+
const timeoutId = setTimeout(resolve13, interval2);
|
|
154759
155001
|
signal.addEventListener("abort", () => {
|
|
154760
155002
|
clearTimeout(timeoutId);
|
|
154761
155003
|
reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
|
|
@@ -155772,7 +156014,7 @@ var McpServer = class {
|
|
|
155772
156014
|
/**
|
|
155773
156015
|
* Validates tool input arguments against the tool's input schema.
|
|
155774
156016
|
*/
|
|
155775
|
-
async validateToolInput(tool, args,
|
|
156017
|
+
async validateToolInput(tool, args, toolName2) {
|
|
155776
156018
|
if (!tool.inputSchema) {
|
|
155777
156019
|
return void 0;
|
|
155778
156020
|
}
|
|
@@ -155782,14 +156024,14 @@ var McpServer = class {
|
|
|
155782
156024
|
if (!parseResult.success) {
|
|
155783
156025
|
const error40 = "error" in parseResult ? parseResult.error : "Unknown error";
|
|
155784
156026
|
const errorMessage = getParseErrorMessage(error40);
|
|
155785
|
-
throw new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${
|
|
156027
|
+
throw new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${toolName2}: ${errorMessage}`);
|
|
155786
156028
|
}
|
|
155787
156029
|
return parseResult.data;
|
|
155788
156030
|
}
|
|
155789
156031
|
/**
|
|
155790
156032
|
* Validates tool output against the tool's output schema.
|
|
155791
156033
|
*/
|
|
155792
|
-
async validateToolOutput(tool, result,
|
|
156034
|
+
async validateToolOutput(tool, result, toolName2) {
|
|
155793
156035
|
if (!tool.outputSchema) {
|
|
155794
156036
|
return;
|
|
155795
156037
|
}
|
|
@@ -155800,14 +156042,14 @@ var McpServer = class {
|
|
|
155800
156042
|
return;
|
|
155801
156043
|
}
|
|
155802
156044
|
if (!result.structuredContent) {
|
|
155803
|
-
throw new McpError(ErrorCode.InvalidParams, `Output validation error: Tool ${
|
|
156045
|
+
throw new McpError(ErrorCode.InvalidParams, `Output validation error: Tool ${toolName2} has an output schema but no structured content was provided`);
|
|
155804
156046
|
}
|
|
155805
156047
|
const outputObj = normalizeObjectSchema(tool.outputSchema);
|
|
155806
156048
|
const parseResult = await safeParseAsync3(outputObj, result.structuredContent);
|
|
155807
156049
|
if (!parseResult.success) {
|
|
155808
156050
|
const error40 = "error" in parseResult ? parseResult.error : "Unknown error";
|
|
155809
156051
|
const errorMessage = getParseErrorMessage(error40);
|
|
155810
|
-
throw new McpError(ErrorCode.InvalidParams, `Output validation error: Invalid structured content for tool ${
|
|
156052
|
+
throw new McpError(ErrorCode.InvalidParams, `Output validation error: Invalid structured content for tool ${toolName2}: ${errorMessage}`);
|
|
155811
156053
|
}
|
|
155812
156054
|
}
|
|
155813
156055
|
/**
|
|
@@ -155855,7 +156097,7 @@ var McpServer = class {
|
|
|
155855
156097
|
let task = createTaskResult.task;
|
|
155856
156098
|
const pollInterval = task.pollInterval ?? 5e3;
|
|
155857
156099
|
while (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") {
|
|
155858
|
-
await new Promise((
|
|
156100
|
+
await new Promise((resolve13) => setTimeout(resolve13, pollInterval));
|
|
155859
156101
|
const updatedTask = await extra.taskStore.getTask(taskId);
|
|
155860
156102
|
if (!updatedTask) {
|
|
155861
156103
|
throw new McpError(ErrorCode.InternalError, `Task ${taskId} not found during polling`);
|
|
@@ -156894,7 +157136,7 @@ var responseViaResponseObject = async (res, outgoing, options2 = {}) => {
|
|
|
156894
157136
|
});
|
|
156895
157137
|
if (!chunk) {
|
|
156896
157138
|
if (i === 1) {
|
|
156897
|
-
await new Promise((
|
|
157139
|
+
await new Promise((resolve13) => setTimeout(resolve13));
|
|
156898
157140
|
maxReadCount = 3;
|
|
156899
157141
|
continue;
|
|
156900
157142
|
}
|
|
@@ -157394,9 +157636,9 @@ data:
|
|
|
157394
157636
|
const initRequest = messages.find((m3) => isInitializeRequest(m3));
|
|
157395
157637
|
const clientProtocolVersion = initRequest ? initRequest.params.protocolVersion : req.headers.get("mcp-protocol-version") ?? DEFAULT_NEGOTIATED_PROTOCOL_VERSION;
|
|
157396
157638
|
if (this._enableJsonResponse) {
|
|
157397
|
-
return new Promise((
|
|
157639
|
+
return new Promise((resolve13) => {
|
|
157398
157640
|
this._streamMapping.set(streamId, {
|
|
157399
|
-
resolveJson:
|
|
157641
|
+
resolveJson: resolve13,
|
|
157400
157642
|
cleanup: () => {
|
|
157401
157643
|
this._streamMapping.delete(streamId);
|
|
157402
157644
|
}
|
|
@@ -157829,8 +158071,8 @@ async function ensureCdpTargetId(bandTabId) {
|
|
|
157829
158071
|
};
|
|
157830
158072
|
let rejectFn = () => {
|
|
157831
158073
|
};
|
|
157832
|
-
const promise2 = new Promise((
|
|
157833
|
-
resolveFn =
|
|
158074
|
+
const promise2 = new Promise((resolve13, reject) => {
|
|
158075
|
+
resolveFn = resolve13;
|
|
157834
158076
|
rejectFn = reject;
|
|
157835
158077
|
});
|
|
157836
158078
|
const timeoutId = setTimeout(() => {
|
|
@@ -158052,14 +158294,14 @@ var browserHostRouter = t3.router({
|
|
|
158052
158294
|
}),
|
|
158053
158295
|
ensureView: publicProcedure.subscription(async function* (opts) {
|
|
158054
158296
|
const queue = [];
|
|
158055
|
-
let
|
|
158297
|
+
let resolve13 = null;
|
|
158056
158298
|
const unsubscribe = browserHostService.onEnsureView((event) => {
|
|
158057
158299
|
queue.push(event);
|
|
158058
|
-
|
|
158300
|
+
resolve13?.();
|
|
158059
158301
|
});
|
|
158060
158302
|
opts.signal?.addEventListener("abort", () => {
|
|
158061
158303
|
unsubscribe();
|
|
158062
|
-
|
|
158304
|
+
resolve13?.();
|
|
158063
158305
|
});
|
|
158064
158306
|
try {
|
|
158065
158307
|
while (!opts.signal?.aborted) {
|
|
@@ -158067,9 +158309,9 @@ var browserHostRouter = t3.router({
|
|
|
158067
158309
|
yield queue.shift();
|
|
158068
158310
|
}
|
|
158069
158311
|
await new Promise((r3) => {
|
|
158070
|
-
|
|
158312
|
+
resolve13 = r3;
|
|
158071
158313
|
});
|
|
158072
|
-
|
|
158314
|
+
resolve13 = null;
|
|
158073
158315
|
}
|
|
158074
158316
|
} finally {
|
|
158075
158317
|
unsubscribe();
|
|
@@ -158592,23 +158834,25 @@ var chatsRouter = t3.router({
|
|
|
158592
158834
|
if (!chat) {
|
|
158593
158835
|
chat = chatService.create(input.workspaceId, { id: input.chatId, name: "Chat" });
|
|
158594
158836
|
}
|
|
158595
|
-
|
|
158596
|
-
|
|
158597
|
-
|
|
158598
|
-
|
|
158599
|
-
|
|
158600
|
-
|
|
158601
|
-
|
|
158602
|
-
return {
|
|
158603
|
-
|
|
158604
|
-
|
|
158605
|
-
|
|
158606
|
-
|
|
158607
|
-
|
|
158608
|
-
});
|
|
158609
|
-
}
|
|
158610
|
-
throw err;
|
|
158837
|
+
const result = taskService.submitOrQueueTask({
|
|
158838
|
+
workspaceId: chat.workspaceId,
|
|
158839
|
+
chatId: chat.id,
|
|
158840
|
+
prompt: input.message,
|
|
158841
|
+
sessionId: input.sessionId
|
|
158842
|
+
});
|
|
158843
|
+
if (result.queued) {
|
|
158844
|
+
return {
|
|
158845
|
+
queued: true,
|
|
158846
|
+
queuedMessageId: result.queuedMessageId,
|
|
158847
|
+
taskId: null,
|
|
158848
|
+
sessionId: null
|
|
158849
|
+
};
|
|
158611
158850
|
}
|
|
158851
|
+
return {
|
|
158852
|
+
queued: false,
|
|
158853
|
+
taskId: result.task.id,
|
|
158854
|
+
sessionId: result.task.sessionId
|
|
158855
|
+
};
|
|
158612
158856
|
}),
|
|
158613
158857
|
stop: publicProcedure.input(external_exports2.object({ chatId: external_exports2.string() })).mutation(({ input }) => {
|
|
158614
158858
|
taskService.abortTask(input.chatId);
|
|
@@ -158657,13 +158901,13 @@ import {
|
|
|
158657
158901
|
lstatSync as lstatSync3,
|
|
158658
158902
|
mkdirSync as mkdirSync6,
|
|
158659
158903
|
readFileSync as readFileSync8,
|
|
158660
|
-
realpathSync as
|
|
158904
|
+
realpathSync as realpathSync4,
|
|
158661
158905
|
symlinkSync,
|
|
158662
158906
|
unlinkSync as unlinkSync4,
|
|
158663
158907
|
writeFileSync as writeFileSync3
|
|
158664
158908
|
} from "node:fs";
|
|
158665
158909
|
import { homedir as homedir8, platform as platform2 } from "node:os";
|
|
158666
|
-
import { basename as basename2, dirname as dirname7, join as join27, resolve as
|
|
158910
|
+
import { basename as basename2, dirname as dirname7, join as join27, resolve as resolve6 } from "node:path";
|
|
158667
158911
|
function windowsBinDir() {
|
|
158668
158912
|
const localAppData = process.env.LOCALAPPDATA || join27(homedir8(), "AppData", "Local");
|
|
158669
158913
|
return join27(localAppData, "band", "bin");
|
|
@@ -158674,11 +158918,11 @@ function findCliBinaryAt(opts) {
|
|
|
158674
158918
|
const exe = platform2() === "win32" ? "band.exe" : "band";
|
|
158675
158919
|
const appsStrategies = [
|
|
158676
158920
|
// cwd = apps/web/ (Vite dev and production server)
|
|
158677
|
-
|
|
158921
|
+
resolve6(cwd, ".."),
|
|
158678
158922
|
// cwd = project root (fallback)
|
|
158679
|
-
|
|
158923
|
+
resolve6(cwd, "apps"),
|
|
158680
158924
|
// From this source file in dev (apps/web/src/server/services/ → apps/)
|
|
158681
|
-
|
|
158925
|
+
resolve6(dirname11, "..", "..", "..", ".."),
|
|
158682
158926
|
// From bundled `dist/` file (<Resources>/web/dist/ → <Resources>/) only
|
|
158683
158927
|
// — in dev mode this resolves to `apps/web/src/`, which has no
|
|
158684
158928
|
// `cli/target/<profile>/band` and is harmless; the four-level walk
|
|
@@ -158686,7 +158930,7 @@ function findCliBinaryAt(opts) {
|
|
|
158686
158930
|
// layout under <Resources>/cli/ would still resolve. Today's Electron
|
|
158687
158931
|
// bundle ships the binary under `binaries/` (handled by Strategy B),
|
|
158688
158932
|
// so this strategy never hits in production either.
|
|
158689
|
-
|
|
158933
|
+
resolve6(dirname11, "..", "..", "..")
|
|
158690
158934
|
];
|
|
158691
158935
|
for (const appsDir of appsStrategies) {
|
|
158692
158936
|
for (const profile of ["release", "debug"]) {
|
|
@@ -158700,10 +158944,10 @@ function findCliBinaryAt(opts) {
|
|
|
158700
158944
|
}
|
|
158701
158945
|
const electronCandidates = [
|
|
158702
158946
|
// From cwd (<Resources>/web) → <Resources>/binaries/band
|
|
158703
|
-
|
|
158947
|
+
resolve6(cwd, "..", "binaries", exe),
|
|
158704
158948
|
// From the bundled dist file (<Resources>/web/dist/start-server.mjs)
|
|
158705
158949
|
// → <Resources>/binaries/band
|
|
158706
|
-
|
|
158950
|
+
resolve6(dirname11, "..", "..", "binaries", exe)
|
|
158707
158951
|
];
|
|
158708
158952
|
for (const p3 of electronCandidates) {
|
|
158709
158953
|
try {
|
|
@@ -158743,7 +158987,7 @@ async function checkCli() {
|
|
|
158743
158987
|
}
|
|
158744
158988
|
let target;
|
|
158745
158989
|
try {
|
|
158746
|
-
target =
|
|
158990
|
+
target = realpathSync4(SYMLINK_PATH);
|
|
158747
158991
|
} catch {
|
|
158748
158992
|
return "NotInstalled";
|
|
158749
158993
|
}
|
|
@@ -158790,9 +159034,9 @@ function noBinaryError(env = process.env) {
|
|
|
158790
159034
|
);
|
|
158791
159035
|
}
|
|
158792
159036
|
function runReg(args) {
|
|
158793
|
-
return new Promise((
|
|
159037
|
+
return new Promise((resolve13) => {
|
|
158794
159038
|
execFile8("reg", args, { windowsHide: true }, (err, stdout) => {
|
|
158795
|
-
|
|
159039
|
+
resolve13(err ? "" : stdout ?? "");
|
|
158796
159040
|
});
|
|
158797
159041
|
});
|
|
158798
159042
|
}
|
|
@@ -158984,7 +159228,7 @@ init_dist38();
|
|
|
158984
159228
|
|
|
158985
159229
|
// src/server/services/editor-service.ts
|
|
158986
159230
|
import { realpath as realpath2, stat as stat4 } from "node:fs/promises";
|
|
158987
|
-
import { isAbsolute as isAbsolute4, join as join29, resolve as
|
|
159231
|
+
import { isAbsolute as isAbsolute4, join as join29, resolve as resolve7, sep as sep4 } from "node:path";
|
|
158988
159232
|
|
|
158989
159233
|
// src/server/services/file-watcher.ts
|
|
158990
159234
|
import { watch as fsWatch } from "node:fs";
|
|
@@ -159079,7 +159323,7 @@ function subscribeToFileChanges(workspaceId2, listener) {
|
|
|
159079
159323
|
}
|
|
159080
159324
|
|
|
159081
159325
|
// src/server/services/formatter.ts
|
|
159082
|
-
import { existsSync as existsSync12, realpathSync as
|
|
159326
|
+
import { existsSync as existsSync12, realpathSync as realpathSync5 } from "node:fs";
|
|
159083
159327
|
import { basename as basename3, dirname as dirname8, isAbsolute as isAbsolute3, join as join28, resolve as resolvePath3 } from "node:path";
|
|
159084
159328
|
import prettier from "prettier";
|
|
159085
159329
|
var log37 = createLogger("formatter");
|
|
@@ -159156,17 +159400,17 @@ async function formatFile(worktreePath, filePath, content2, options2 = {}) {
|
|
|
159156
159400
|
function isInsideWorktree(absFile, worktreePath) {
|
|
159157
159401
|
let realFile;
|
|
159158
159402
|
try {
|
|
159159
|
-
realFile =
|
|
159403
|
+
realFile = realpathSync5(absFile);
|
|
159160
159404
|
} catch {
|
|
159161
159405
|
try {
|
|
159162
|
-
realFile = join28(
|
|
159406
|
+
realFile = join28(realpathSync5(dirname8(absFile)), basename3(absFile));
|
|
159163
159407
|
} catch {
|
|
159164
159408
|
realFile = absFile;
|
|
159165
159409
|
}
|
|
159166
159410
|
}
|
|
159167
159411
|
let realWorktree;
|
|
159168
159412
|
try {
|
|
159169
|
-
realWorktree =
|
|
159413
|
+
realWorktree = realpathSync5(worktreePath);
|
|
159170
159414
|
} catch {
|
|
159171
159415
|
realWorktree = worktreePath;
|
|
159172
159416
|
}
|
|
@@ -159293,7 +159537,7 @@ var EditorService = class {
|
|
|
159293
159537
|
* segment-aware containment check against the canonicalized worktree root.
|
|
159294
159538
|
*/
|
|
159295
159539
|
async resolveTarget(root, filePath) {
|
|
159296
|
-
const absoluteTarget = isAbsolute4(filePath) ?
|
|
159540
|
+
const absoluteTarget = isAbsolute4(filePath) ? resolve7(filePath) : resolve7(root, filePath);
|
|
159297
159541
|
let canonicalRoot = root;
|
|
159298
159542
|
try {
|
|
159299
159543
|
canonicalRoot = await realpath2(root);
|
|
@@ -159750,7 +159994,7 @@ async function duBytes(path) {
|
|
|
159750
159994
|
if (process.platform === "win32") {
|
|
159751
159995
|
return duBytesNodeWalk(path);
|
|
159752
159996
|
}
|
|
159753
|
-
const stdout = await new Promise((
|
|
159997
|
+
const stdout = await new Promise((resolve13, reject) => {
|
|
159754
159998
|
execFile9(
|
|
159755
159999
|
"du",
|
|
159756
160000
|
["-sk", path],
|
|
@@ -159760,7 +160004,7 @@ async function duBytes(path) {
|
|
|
159760
160004
|
reject(err);
|
|
159761
160005
|
return;
|
|
159762
160006
|
}
|
|
159763
|
-
|
|
160007
|
+
resolve13(out);
|
|
159764
160008
|
}
|
|
159765
160009
|
);
|
|
159766
160010
|
});
|
|
@@ -159775,7 +160019,7 @@ async function duBytes(path) {
|
|
|
159775
160019
|
// src/server/infra/process/install.ts
|
|
159776
160020
|
import { execFile as execFile10 } from "node:child_process";
|
|
159777
160021
|
async function brewInstall(pkg, resolvedPath) {
|
|
159778
|
-
await new Promise((
|
|
160022
|
+
await new Promise((resolve13, reject) => {
|
|
159779
160023
|
execFile10(
|
|
159780
160024
|
"brew",
|
|
159781
160025
|
["install", pkg],
|
|
@@ -159785,7 +160029,7 @@ async function brewInstall(pkg, resolvedPath) {
|
|
|
159785
160029
|
reject(new Error(stderr || err.message));
|
|
159786
160030
|
return;
|
|
159787
160031
|
}
|
|
159788
|
-
|
|
160032
|
+
resolve13();
|
|
159789
160033
|
}
|
|
159790
160034
|
);
|
|
159791
160035
|
});
|
|
@@ -159796,10 +160040,10 @@ var DU_GLOBAL_CONCURRENCY = 8;
|
|
|
159796
160040
|
var duInFlight = 0;
|
|
159797
160041
|
var duWaiting = [];
|
|
159798
160042
|
function acquireDuSlot() {
|
|
159799
|
-
return new Promise((
|
|
160043
|
+
return new Promise((resolve13) => {
|
|
159800
160044
|
const grant = () => {
|
|
159801
160045
|
duInFlight++;
|
|
159802
|
-
|
|
160046
|
+
resolve13(() => {
|
|
159803
160047
|
duInFlight--;
|
|
159804
160048
|
const next = duWaiting.shift();
|
|
159805
160049
|
if (next) next();
|
|
@@ -160307,7 +160551,7 @@ var prereqsRouter = t3.router({
|
|
|
160307
160551
|
// src/server/services/project-service.ts
|
|
160308
160552
|
init_dist38();
|
|
160309
160553
|
import { existsSync as existsSync13 } from "node:fs";
|
|
160310
|
-
import { basename as basename4, join as join33, resolve as
|
|
160554
|
+
import { basename as basename4, join as join33, resolve as resolve8 } from "node:path";
|
|
160311
160555
|
|
|
160312
160556
|
// src/server/services/project-avatar-service.ts
|
|
160313
160557
|
import { mkdir as mkdir4, readFile as readFile5, rename as rename2, writeFile as writeFile4 } from "node:fs/promises";
|
|
@@ -160606,7 +160850,7 @@ var ProjectService = class {
|
|
|
160606
160850
|
* `git init` checkbox. Read-only — never touches state.
|
|
160607
160851
|
*/
|
|
160608
160852
|
checkPath(path) {
|
|
160609
|
-
const resolvedPath =
|
|
160853
|
+
const resolvedPath = resolve8(path);
|
|
160610
160854
|
const isGitRepo = existsSync13(join33(resolvedPath, ".git"));
|
|
160611
160855
|
return { isGitRepo };
|
|
160612
160856
|
}
|
|
@@ -160616,7 +160860,7 @@ var ProjectService = class {
|
|
|
160616
160860
|
* features at the same time as registering the project.
|
|
160617
160861
|
*/
|
|
160618
160862
|
async gitInit(path) {
|
|
160619
|
-
const resolvedPath =
|
|
160863
|
+
const resolvedPath = resolve8(path);
|
|
160620
160864
|
await this.git.init(resolvedPath);
|
|
160621
160865
|
}
|
|
160622
160866
|
/**
|
|
@@ -160642,7 +160886,7 @@ var ProjectService = class {
|
|
|
160642
160886
|
);
|
|
160643
160887
|
}
|
|
160644
160888
|
}
|
|
160645
|
-
const resolvedPath =
|
|
160889
|
+
const resolvedPath = resolve8(path);
|
|
160646
160890
|
const kind = existsSync13(join33(resolvedPath, ".git")) ? "git" : "plain";
|
|
160647
160891
|
let defaultBranch = "main";
|
|
160648
160892
|
let worktrees2 = [];
|
|
@@ -160822,8 +161066,8 @@ var projectsRouter = t3.router({
|
|
|
160822
161066
|
});
|
|
160823
161067
|
|
|
160824
161068
|
// src/server/api/queue/router.ts
|
|
160825
|
-
import { realpathSync as
|
|
160826
|
-
import { join as join34, resolve as
|
|
161069
|
+
import { realpathSync as realpathSync6 } from "node:fs";
|
|
161070
|
+
import { join as join34, resolve as resolve9, sep as sep5 } from "node:path";
|
|
160827
161071
|
var log40 = createLogger("trpc.queue");
|
|
160828
161072
|
var queuedFileSchema = external_exports2.object({
|
|
160829
161073
|
mediaType: external_exports2.string(),
|
|
@@ -160833,14 +161077,14 @@ var queuedFileSchema = external_exports2.object({
|
|
|
160833
161077
|
});
|
|
160834
161078
|
function isPathWithinUploadDir(p3) {
|
|
160835
161079
|
const uploadDir = join34(bandHome(), "uploads");
|
|
160836
|
-
const normalized2 =
|
|
161080
|
+
const normalized2 = resolve9(p3);
|
|
160837
161081
|
if (normalized2 !== uploadDir && !normalized2.startsWith(uploadDir + sep5)) {
|
|
160838
161082
|
return false;
|
|
160839
161083
|
}
|
|
160840
161084
|
try {
|
|
160841
|
-
const canonicalUploadDir =
|
|
160842
|
-
const
|
|
160843
|
-
return
|
|
161085
|
+
const canonicalUploadDir = realpathSync6(uploadDir);
|
|
161086
|
+
const canonicalPath2 = realpathSync6(p3);
|
|
161087
|
+
return canonicalPath2 === canonicalUploadDir || canonicalPath2.startsWith(canonicalUploadDir + sep5);
|
|
160844
161088
|
} catch {
|
|
160845
161089
|
return true;
|
|
160846
161090
|
}
|
|
@@ -161015,15 +161259,15 @@ var queueRouter = t3.router({
|
|
|
161015
161259
|
stream: publicProcedure.input(external_exports2.object({ workspaceId: external_exports2.string(), chatId: external_exports2.string().optional() })).subscription(async function* (opts) {
|
|
161016
161260
|
const chatId = opts.input.chatId ?? chatService.getOrCreateDefault(opts.input.workspaceId).id;
|
|
161017
161261
|
const queue = [];
|
|
161018
|
-
let
|
|
161262
|
+
let resolve13 = null;
|
|
161019
161263
|
const unsubscribe = subscribeQueue((id2, messages) => {
|
|
161020
161264
|
if (id2 !== chatId) return;
|
|
161021
161265
|
queue.push({ messages });
|
|
161022
|
-
|
|
161266
|
+
resolve13?.();
|
|
161023
161267
|
});
|
|
161024
161268
|
opts.signal?.addEventListener("abort", () => {
|
|
161025
161269
|
unsubscribe();
|
|
161026
|
-
|
|
161270
|
+
resolve13?.();
|
|
161027
161271
|
});
|
|
161028
161272
|
yield { messages: toWireQueuedMessages(getQueuedMessages(chatId)) };
|
|
161029
161273
|
queue.length = 0;
|
|
@@ -161034,9 +161278,9 @@ var queueRouter = t3.router({
|
|
|
161034
161278
|
yield { messages: toWireQueuedMessages(update.messages) };
|
|
161035
161279
|
}
|
|
161036
161280
|
await new Promise((r3) => {
|
|
161037
|
-
|
|
161281
|
+
resolve13 = r3;
|
|
161038
161282
|
});
|
|
161039
|
-
|
|
161283
|
+
resolve13 = null;
|
|
161040
161284
|
}
|
|
161041
161285
|
} finally {
|
|
161042
161286
|
unsubscribe();
|
|
@@ -161090,7 +161334,7 @@ var USAGE_SCAN_INTERVAL_MS = 5 * 60 * 1e3;
|
|
|
161090
161334
|
var MAX_SESSIONS_PER_TICK = 100;
|
|
161091
161335
|
var EPOCH_SENTINEL = 0;
|
|
161092
161336
|
function yieldToEventLoop2() {
|
|
161093
|
-
return new Promise((
|
|
161337
|
+
return new Promise((resolve13) => setImmediate(resolve13));
|
|
161094
161338
|
}
|
|
161095
161339
|
var UsageScannerService = class {
|
|
161096
161340
|
usageEvents;
|
|
@@ -161697,14 +161941,14 @@ var statusesRouter = t3.router({
|
|
|
161697
161941
|
var statusRouter = t3.router({
|
|
161698
161942
|
stream: publicProcedure.subscription(async function* (opts) {
|
|
161699
161943
|
const queue = [];
|
|
161700
|
-
let
|
|
161944
|
+
let resolve13 = null;
|
|
161701
161945
|
const unsubscribe = watcherService.subscribe((event) => {
|
|
161702
161946
|
queue.push(event);
|
|
161703
|
-
|
|
161947
|
+
resolve13?.();
|
|
161704
161948
|
});
|
|
161705
161949
|
opts.signal?.addEventListener("abort", () => {
|
|
161706
161950
|
unsubscribe();
|
|
161707
|
-
|
|
161951
|
+
resolve13?.();
|
|
161708
161952
|
});
|
|
161709
161953
|
try {
|
|
161710
161954
|
while (!opts.signal?.aborted) {
|
|
@@ -161712,9 +161956,9 @@ var statusRouter = t3.router({
|
|
|
161712
161956
|
yield queue.shift();
|
|
161713
161957
|
}
|
|
161714
161958
|
await new Promise((r3) => {
|
|
161715
|
-
|
|
161959
|
+
resolve13 = r3;
|
|
161716
161960
|
});
|
|
161717
|
-
|
|
161961
|
+
resolve13 = null;
|
|
161718
161962
|
}
|
|
161719
161963
|
} finally {
|
|
161720
161964
|
unsubscribe();
|
|
@@ -161761,7 +162005,7 @@ var TunnelClient = class _TunnelClient {
|
|
|
161761
162005
|
const nullDevice = process.platform === "win32" ? "NUL" : "/dev/null";
|
|
161762
162006
|
const args = ["tunnel", "--config", nullDevice, "--url", `http://localhost:${options2.port}`];
|
|
161763
162007
|
log44.debug("spawning cloudflared %s", args.join(" "));
|
|
161764
|
-
return new Promise((
|
|
162008
|
+
return new Promise((resolve13, reject) => {
|
|
161765
162009
|
const child = spawn4("cloudflared", args, {
|
|
161766
162010
|
env: { ...process.env, PATH: resolvedPath },
|
|
161767
162011
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -161783,7 +162027,7 @@ var TunnelClient = class _TunnelClient {
|
|
|
161783
162027
|
emit({ kind: "tunnel-url", url: this.tunnelUrl });
|
|
161784
162028
|
if (!settled) {
|
|
161785
162029
|
settled = true;
|
|
161786
|
-
|
|
162030
|
+
resolve13();
|
|
161787
162031
|
}
|
|
161788
162032
|
}
|
|
161789
162033
|
}
|
|
@@ -161815,7 +162059,7 @@ var TunnelClient = class _TunnelClient {
|
|
|
161815
162059
|
new Error(`cloudflared exited with code ${code}: ${stderrChunks.join("").trim()}`)
|
|
161816
162060
|
);
|
|
161817
162061
|
} else {
|
|
161818
|
-
|
|
162062
|
+
resolve13();
|
|
161819
162063
|
}
|
|
161820
162064
|
} else if (wasRunning && code !== 0) {
|
|
161821
162065
|
emit({
|
|
@@ -161828,7 +162072,7 @@ var TunnelClient = class _TunnelClient {
|
|
|
161828
162072
|
if (!settled) {
|
|
161829
162073
|
log44.debug("30s timeout reached, resolving without URL");
|
|
161830
162074
|
settled = true;
|
|
161831
|
-
|
|
162075
|
+
resolve13();
|
|
161832
162076
|
}
|
|
161833
162077
|
}, 3e4);
|
|
161834
162078
|
});
|
|
@@ -162113,7 +162357,7 @@ var tasksRouter = t3.router({
|
|
|
162113
162357
|
}));
|
|
162114
162358
|
}
|
|
162115
162359
|
try {
|
|
162116
|
-
const
|
|
162360
|
+
const result = taskService.submitOrQueueTask({
|
|
162117
162361
|
workspaceId: input.workspaceId,
|
|
162118
162362
|
chatId,
|
|
162119
162363
|
prompt: input.prompt,
|
|
@@ -162123,7 +162367,19 @@ var tasksRouter = t3.router({
|
|
|
162123
162367
|
model: input.model,
|
|
162124
162368
|
codingAgentId: input.codingAgentId
|
|
162125
162369
|
});
|
|
162370
|
+
if (result.queued) {
|
|
162371
|
+
return {
|
|
162372
|
+
queued: true,
|
|
162373
|
+
id: null,
|
|
162374
|
+
queuedMessageId: result.queuedMessageId,
|
|
162375
|
+
workspaceId: input.workspaceId,
|
|
162376
|
+
chatId,
|
|
162377
|
+
sessionId: null
|
|
162378
|
+
};
|
|
162379
|
+
}
|
|
162380
|
+
const { task } = result;
|
|
162126
162381
|
return {
|
|
162382
|
+
queued: false,
|
|
162127
162383
|
id: task.id,
|
|
162128
162384
|
workspaceId: task.workspaceId,
|
|
162129
162385
|
chatId: task.chatId,
|
|
@@ -162332,7 +162588,7 @@ init_dist38();
|
|
|
162332
162588
|
// src/server/services/diff-service.ts
|
|
162333
162589
|
import { existsSync as existsSync14 } from "node:fs";
|
|
162334
162590
|
import { readFile as readFile6, rm as rm3, stat as stat6 } from "node:fs/promises";
|
|
162335
|
-
import { join as join35, resolve as
|
|
162591
|
+
import { join as join35, resolve as resolve10, sep as sep6 } from "node:path";
|
|
162336
162592
|
var log48 = createLogger("diff-service");
|
|
162337
162593
|
var EMPTY_TREE_ARGS = ["hash-object", "-t", "tree", "/dev/null"];
|
|
162338
162594
|
var DEFAULT_BRANCH_LIMIT = 50;
|
|
@@ -162429,7 +162685,7 @@ function parseFileStatuses(nameStatusOutput) {
|
|
|
162429
162685
|
return fileStatuses;
|
|
162430
162686
|
}
|
|
162431
162687
|
function assertWorktreeRelative(cwd, filePath) {
|
|
162432
|
-
const target =
|
|
162688
|
+
const target = resolve10(join35(cwd, filePath));
|
|
162433
162689
|
if (target !== cwd && !target.startsWith(cwd + sep6)) {
|
|
162434
162690
|
throw new Error("Invalid path");
|
|
162435
162691
|
}
|
|
@@ -162961,7 +163217,7 @@ var diffService = new DiffService();
|
|
|
162961
163217
|
// src/server/services/files-service.ts
|
|
162962
163218
|
import { existsSync as existsSync15 } from "node:fs";
|
|
162963
163219
|
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";
|
|
162964
|
-
import { dirname as dirname10, extname as extname3, join as join36, resolve as
|
|
163220
|
+
import { dirname as dirname10, extname as extname3, join as join36, resolve as resolve11, sep as sep7 } from "node:path";
|
|
162965
163221
|
var MAX_FILE_SIZE2 = 1024 * 1024;
|
|
162966
163222
|
var LANG_MAP2 = {
|
|
162967
163223
|
".js": "javascript",
|
|
@@ -163009,7 +163265,7 @@ var FilesService = class {
|
|
|
163009
163265
|
throw new WorkspaceNotFoundError(workspaceId2);
|
|
163010
163266
|
}
|
|
163011
163267
|
const root = workspace.worktree.path;
|
|
163012
|
-
const target =
|
|
163268
|
+
const target = resolve11(join36(root, relative2));
|
|
163013
163269
|
const insideRoot = target === root || target.startsWith(root + sep7);
|
|
163014
163270
|
if (!insideRoot) {
|
|
163015
163271
|
throw new Error("Invalid path");
|
|
@@ -163463,8 +163719,8 @@ function createIterator(options2) {
|
|
|
163463
163719
|
}
|
|
163464
163720
|
if (error40) throw error40;
|
|
163465
163721
|
if (done) return { value: void 0, done: true };
|
|
163466
|
-
await new Promise((
|
|
163467
|
-
notify2 =
|
|
163722
|
+
await new Promise((resolve13) => {
|
|
163723
|
+
notify2 = resolve13;
|
|
163468
163724
|
});
|
|
163469
163725
|
}
|
|
163470
163726
|
},
|
|
@@ -163497,7 +163753,7 @@ function listFiles2(cwd) {
|
|
|
163497
163753
|
"-g",
|
|
163498
163754
|
"!**/.DS_Store"
|
|
163499
163755
|
];
|
|
163500
|
-
return new Promise((
|
|
163756
|
+
return new Promise((resolve13, reject) => {
|
|
163501
163757
|
execFile11(
|
|
163502
163758
|
rgPath,
|
|
163503
163759
|
args,
|
|
@@ -163508,7 +163764,7 @@ function listFiles2(cwd) {
|
|
|
163508
163764
|
return;
|
|
163509
163765
|
}
|
|
163510
163766
|
const files = stdout.split("\n").filter(Boolean);
|
|
163511
|
-
|
|
163767
|
+
resolve13(files);
|
|
163512
163768
|
}
|
|
163513
163769
|
);
|
|
163514
163770
|
});
|
|
@@ -164356,7 +164612,7 @@ function basicMatch(query) {
|
|
|
164356
164612
|
}
|
|
164357
164613
|
var isNode2 = typeof __require !== "undefined" && typeof window === "undefined";
|
|
164358
164614
|
function asyncMatcher(token, len, iter2, onFinish) {
|
|
164359
|
-
return new Promise((
|
|
164615
|
+
return new Promise((resolve13, reject) => {
|
|
164360
164616
|
const INCREMENT = 1e3;
|
|
164361
164617
|
let i = 0, end = Math.min(INCREMENT, len);
|
|
164362
164618
|
const step = () => {
|
|
@@ -164369,7 +164625,7 @@ function asyncMatcher(token, len, iter2, onFinish) {
|
|
|
164369
164625
|
end = Math.min(end + INCREMENT, len);
|
|
164370
164626
|
isNode2 ? setImmediate(step) : setTimeout(step);
|
|
164371
164627
|
} else {
|
|
164372
|
-
|
|
164628
|
+
resolve13(onFinish());
|
|
164373
164629
|
}
|
|
164374
164630
|
};
|
|
164375
164631
|
step();
|
|
@@ -164637,7 +164893,7 @@ var workspaceRouter = t3.router({
|
|
|
164637
164893
|
}
|
|
164638
164894
|
const signal = opts.signal;
|
|
164639
164895
|
const queue = [];
|
|
164640
|
-
let
|
|
164896
|
+
let resolve13 = null;
|
|
164641
164897
|
let watcherClosed = false;
|
|
164642
164898
|
const unsubscribe = editorService.subscribeToFileChanges(opts.input.workspaceId, (path) => {
|
|
164643
164899
|
if (path === null) {
|
|
@@ -164645,9 +164901,9 @@ var workspaceRouter = t3.router({
|
|
|
164645
164901
|
} else {
|
|
164646
164902
|
queue.push({ path });
|
|
164647
164903
|
}
|
|
164648
|
-
|
|
164904
|
+
resolve13?.();
|
|
164649
164905
|
});
|
|
164650
|
-
const onAbort = () =>
|
|
164906
|
+
const onAbort = () => resolve13?.();
|
|
164651
164907
|
signal.addEventListener("abort", onAbort);
|
|
164652
164908
|
try {
|
|
164653
164909
|
while (!signal.aborted && !watcherClosed) {
|
|
@@ -164656,10 +164912,10 @@ var workspaceRouter = t3.router({
|
|
|
164656
164912
|
}
|
|
164657
164913
|
if (signal.aborted || watcherClosed) break;
|
|
164658
164914
|
await new Promise((r3) => {
|
|
164659
|
-
|
|
164915
|
+
resolve13 = r3;
|
|
164660
164916
|
if (signal.aborted || watcherClosed) r3();
|
|
164661
164917
|
});
|
|
164662
|
-
|
|
164918
|
+
resolve13 = null;
|
|
164663
164919
|
}
|
|
164664
164920
|
} finally {
|
|
164665
164921
|
signal.removeEventListener("abort", onAbort);
|
|
@@ -164958,10 +165214,10 @@ function discoverProcedures() {
|
|
|
164958
165214
|
for (const [path, procedure] of Object.entries(procRecord)) {
|
|
164959
165215
|
const type = procedure._def.type;
|
|
164960
165216
|
if (type === "subscription") continue;
|
|
164961
|
-
const
|
|
165217
|
+
const toolName2 = `band_${path.replace(/\./g, "_")}`;
|
|
164962
165218
|
const inputs = procedure._def.inputs;
|
|
164963
165219
|
const inputSchema = inputs.length > 0 ? inputs[0] : void 0;
|
|
164964
|
-
procedures.push({ path, toolName, type, inputSchema });
|
|
165220
|
+
procedures.push({ path, toolName: toolName2, type, inputSchema });
|
|
164965
165221
|
}
|
|
164966
165222
|
return procedures;
|
|
164967
165223
|
}
|
|
@@ -165167,9 +165423,9 @@ function createInbox(ws) {
|
|
|
165167
165423
|
if (handler) {
|
|
165168
165424
|
handler(message);
|
|
165169
165425
|
} else if (waiter) {
|
|
165170
|
-
const
|
|
165426
|
+
const resolve13 = waiter;
|
|
165171
165427
|
waiter = null;
|
|
165172
|
-
|
|
165428
|
+
resolve13(message);
|
|
165173
165429
|
} else {
|
|
165174
165430
|
queue.push(message);
|
|
165175
165431
|
}
|
|
@@ -165187,8 +165443,8 @@ function createInbox(ws) {
|
|
|
165187
165443
|
const queued = queue.shift();
|
|
165188
165444
|
if (queued !== void 0) return Promise.resolve(queued);
|
|
165189
165445
|
if (closed) return Promise.resolve(null);
|
|
165190
|
-
return new Promise((
|
|
165191
|
-
waiter =
|
|
165446
|
+
return new Promise((resolve13) => {
|
|
165447
|
+
waiter = resolve13;
|
|
165192
165448
|
});
|
|
165193
165449
|
},
|
|
165194
165450
|
listen(next) {
|
|
@@ -165511,7 +165767,7 @@ var CdpUnreachableError = class extends Error {
|
|
|
165511
165767
|
async function captureSnapshot(bandTabId) {
|
|
165512
165768
|
const cdpTargetId = await ensureCdpTargetId(bandTabId);
|
|
165513
165769
|
const wsUrl = `ws://${DESKTOP_CDP_HOST}:${DESKTOP_CDP_PORT}/devtools/page/${encodeURIComponent(cdpTargetId)}`;
|
|
165514
|
-
return await new Promise((
|
|
165770
|
+
return await new Promise((resolve13, reject) => {
|
|
165515
165771
|
const ws = new wrapper_default(wsUrl);
|
|
165516
165772
|
let nextId2 = 1;
|
|
165517
165773
|
let settled = false;
|
|
@@ -165523,7 +165779,7 @@ async function captureSnapshot(bandTabId) {
|
|
|
165523
165779
|
} catch {
|
|
165524
165780
|
}
|
|
165525
165781
|
if (err) reject(err);
|
|
165526
|
-
else if (data2)
|
|
165782
|
+
else if (data2) resolve13(data2);
|
|
165527
165783
|
else reject(new Error("captureSnapshot: no data and no error"));
|
|
165528
165784
|
};
|
|
165529
165785
|
const timeout = setTimeout(() => {
|
|
@@ -165786,14 +166042,14 @@ function createTerminalBackend(serverRoot, bandHome2) {
|
|
|
165786
166042
|
async function listenWithFallback(server, startPort, attempts = 20) {
|
|
165787
166043
|
for (let port = startPort; port < startPort + attempts; port++) {
|
|
165788
166044
|
try {
|
|
165789
|
-
await new Promise((
|
|
166045
|
+
await new Promise((resolve13, reject) => {
|
|
165790
166046
|
const onError = (err) => {
|
|
165791
166047
|
server.removeListener("listening", onListening);
|
|
165792
166048
|
reject(err);
|
|
165793
166049
|
};
|
|
165794
166050
|
const onListening = () => {
|
|
165795
166051
|
server.removeListener("error", onError);
|
|
165796
|
-
|
|
166052
|
+
resolve13();
|
|
165797
166053
|
};
|
|
165798
166054
|
server.once("error", onError);
|
|
165799
166055
|
server.once("listening", onListening);
|
|
@@ -165842,7 +166098,7 @@ async function findBandBinary() {
|
|
|
165842
166098
|
return findCliBinary();
|
|
165843
166099
|
}
|
|
165844
166100
|
async function runBandSkillsInstall(bandPath, home) {
|
|
165845
|
-
return new Promise((
|
|
166101
|
+
return new Promise((resolve13, reject) => {
|
|
165846
166102
|
execFile12(
|
|
165847
166103
|
bandPath,
|
|
165848
166104
|
["--output", "json", "skills", "install", "--home", home],
|
|
@@ -165853,7 +166109,7 @@ async function runBandSkillsInstall(bandPath, home) {
|
|
|
165853
166109
|
reject(new Error(detail ? `${err.message}: ${detail}` : err.message));
|
|
165854
166110
|
return;
|
|
165855
166111
|
}
|
|
165856
|
-
|
|
166112
|
+
resolve13(stdout.toString());
|
|
165857
166113
|
}
|
|
165858
166114
|
);
|
|
165859
166115
|
});
|
|
@@ -166214,7 +166470,7 @@ function serveWorkspaceFile(res, workspaceId2, rawPath) {
|
|
|
166214
166470
|
return;
|
|
166215
166471
|
}
|
|
166216
166472
|
const root = workspace.worktree.path;
|
|
166217
|
-
const target =
|
|
166473
|
+
const target = resolve12(join39(root, rawPath));
|
|
166218
166474
|
if (!target.startsWith(root + sep8) && target !== root) {
|
|
166219
166475
|
res.writeHead(400);
|
|
166220
166476
|
res.end("Bad request");
|
|
@@ -166250,7 +166506,7 @@ async function nodeRequestToWeb(req) {
|
|
|
166250
166506
|
let body;
|
|
166251
166507
|
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
166252
166508
|
const MAX_REQUEST_BODY_BYTES = 100 * 1024 * 1024;
|
|
166253
|
-
body = await new Promise((
|
|
166509
|
+
body = await new Promise((resolve13, reject) => {
|
|
166254
166510
|
const chunks = [];
|
|
166255
166511
|
let bytesSoFar = 0;
|
|
166256
166512
|
req.on("data", (chunk) => {
|
|
@@ -166262,7 +166518,7 @@ async function nodeRequestToWeb(req) {
|
|
|
166262
166518
|
}
|
|
166263
166519
|
chunks.push(chunk);
|
|
166264
166520
|
});
|
|
166265
|
-
req.on("end", () =>
|
|
166521
|
+
req.on("end", () => resolve13(Buffer.concat(chunks)));
|
|
166266
166522
|
req.on("error", reject);
|
|
166267
166523
|
});
|
|
166268
166524
|
}
|
|
@@ -166296,10 +166552,10 @@ function pipeWebResponseToNodeRes(response, res) {
|
|
|
166296
166552
|
break;
|
|
166297
166553
|
}
|
|
166298
166554
|
if (!res.write(value)) {
|
|
166299
|
-
await new Promise((
|
|
166555
|
+
await new Promise((resolve13, reject) => {
|
|
166300
166556
|
const onDrain = () => {
|
|
166301
166557
|
res.removeListener("error", onError);
|
|
166302
|
-
|
|
166558
|
+
resolve13();
|
|
166303
166559
|
};
|
|
166304
166560
|
const onError = (err) => {
|
|
166305
166561
|
res.removeListener("drain", onDrain);
|
|
@@ -166649,8 +166905,8 @@ async function main() {
|
|
|
166649
166905
|
});
|
|
166650
166906
|
});
|
|
166651
166907
|
let phaseBStarted;
|
|
166652
|
-
const phaseBSettlePromise = new Promise((
|
|
166653
|
-
phaseBStarted =
|
|
166908
|
+
const phaseBSettlePromise = new Promise((resolve13) => {
|
|
166909
|
+
phaseBStarted = resolve13;
|
|
166654
166910
|
});
|
|
166655
166911
|
let boundPort;
|
|
166656
166912
|
try {
|
|
@@ -166723,7 +166979,7 @@ Failed to bind any port in ${initialPort}..${initialPort + 19}:
|
|
|
166723
166979
|
killAllServers();
|
|
166724
166980
|
await Promise.race([
|
|
166725
166981
|
phaseBSettlePromise,
|
|
166726
|
-
new Promise((
|
|
166982
|
+
new Promise((resolve13) => setTimeout(resolve13, 5e3).unref())
|
|
166727
166983
|
]);
|
|
166728
166984
|
await tunnelService.stop().catch(() => {
|
|
166729
166985
|
});
|