tarsk 0.5.69 → 0.5.70
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/index.js +276 -165
- package/dist/public/assets/{account-view-Chzj6v7a.js → account-view-B3-h2Omm.js} +1 -1
- package/dist/public/assets/{alert-dialog-CLYxQdrK.js → alert-dialog-hMK0ERPv.js} +1 -1
- package/dist/public/assets/{async-error-boundary-CM6LU7nT.js → async-error-boundary-Ca8lx8YM.js} +1 -1
- package/dist/public/assets/{browser-tab--1iEoJGu.js → browser-tab-C6INAmPZ.js} +1 -1
- package/dist/public/assets/{chat-dock-context-Gg1jpamu.js → chat-dock-context-CjVDawH_.js} +1 -1
- package/dist/public/assets/{commit-dialog-BfdxNX_T.js → commit-dialog-ClrhP7Jd.js} +1 -1
- package/dist/public/assets/{commit-error-dialog-DrsDKL-B.js → commit-error-dialog-Clt0BgiE.js} +1 -1
- package/dist/public/assets/{commit-method-fields-o-xw2faT.js → commit-method-fields-BwX9cAYJ.js} +1 -1
- package/dist/public/assets/{context-menu-BLvLpqq7.js → context-menu-C5sSYyMw.js} +1 -1
- package/dist/public/assets/{conversation-history-view-ukfe_7qw.js → conversation-history-view-CcBBgh8V.js} +1 -1
- package/dist/public/assets/create-project-dialog-CPz95RZY.js +6 -0
- package/dist/public/assets/{create-repo-dialog-CkFACtMf.js → create-repo-dialog-CUm5YAtV.js} +1 -1
- package/dist/public/assets/{delete-confirm-dialog-D1zjctrX.js → delete-confirm-dialog-CUm3m7WO.js} +1 -1
- package/dist/public/assets/{diff-view-Cxf7v9t1.js → diff-view-BJga_mCE.js} +1 -1
- package/dist/public/assets/{explorer-tab-view-LkT0bDcR.js → explorer-tab-view-D9bH6cb1.js} +2 -2
- package/dist/public/assets/{explorer-tree-B6EZUVTn.js → explorer-tree-Bciwq7MW.js} +1 -1
- package/dist/public/assets/{explorer-view-D5y8Uxoi.js → explorer-view-Ufv--EPU.js} +1 -1
- package/dist/public/assets/{git-history-dialog-X6sVwgPT.js → git-history-dialog-NdDkNMAP.js} +1 -1
- package/dist/public/assets/{index-CJCQ4bTo.js → index-CsUbYVa9.js} +16 -16
- package/dist/public/assets/{mcp-server-card-DPakHrG9.js → mcp-server-card-CzXVgu1Z.js} +1 -1
- package/dist/public/assets/{merged-pr-dialog-C3euJvCu.js → merged-pr-dialog-ClxYJI_m.js} +1 -1
- package/dist/public/assets/{model-list-controls-2JtkzWsp.js → model-list-controls-KE0f0BLj.js} +1 -1
- package/dist/public/assets/{monaco-setup-b-rhUj5t.js → monaco-setup-Bpe6FBYw.js} +1 -1
- package/dist/public/assets/{onboarding-KBcwP-kU.js → onboarding-DTF0L4Nt.js} +1 -1
- package/dist/public/assets/{project-env-vars-view-D60J_-qQ.js → project-env-vars-view-xuiGkrnJ.js} +1 -1
- package/dist/public/assets/{project-model-aliases-view-EClnOgBH.js → project-model-aliases-view-BdbzKmYL.js} +1 -1
- package/dist/public/assets/{project-settings-view-Cb0iiyad.js → project-settings-view-CuwlpN98.js} +1 -1
- package/dist/public/assets/{project-tools-view-B_WnVICB.js → project-tools-view-kZysTxYq.js} +1 -1
- package/dist/public/assets/{providers-list-view-CYy82_hl.js → providers-list-view-BF3ctCjJ.js} +1 -1
- package/dist/public/assets/{pull-request-dialog-CitbRcub.js → pull-request-dialog-BC_tPcL-.js} +1 -1
- package/dist/public/assets/{pull-with-changes-dialog-CpgHqvKf.js → pull-with-changes-dialog-CaOxy8gu.js} +1 -1
- package/dist/public/assets/{push-before-pr-dialog-CrcNZDLb.js → push-before-pr-dialog-GZEUiZUR.js} +1 -1
- package/dist/public/assets/{react-vendor-7n7LyU5o.js → react-vendor-CCZMLxmy.js} +1 -1
- package/dist/public/assets/{settings-general-view-72s5xgPj.js → settings-general-view-CscBURgS.js} +1 -1
- package/dist/public/assets/{settings-instructions-view-DN4-73KP.js → settings-instructions-view-DcmFP_43.js} +1 -1
- package/dist/public/assets/{settings-list-CWdsaJKC.js → settings-list-XkmhqNbT.js} +1 -1
- package/dist/public/assets/{settings-logs-view-CkkVgGvv.js → settings-logs-view-CcjSlyGf.js} +1 -1
- package/dist/public/assets/{settings-mcp-servers-view-B8_vnfl6.js → settings-mcp-servers-view-dtuAjs13.js} +1 -1
- package/dist/public/assets/{settings-models-view-xIRY7PvW.js → settings-models-view-BxcooRk0.js} +1 -1
- package/dist/public/assets/{settings-rules-view-DIk0ghSW.js → settings-rules-view-C-ykSCar.js} +1 -1
- package/dist/public/assets/{settings-skills-view-qWbr0Vl2.js → settings-skills-view-B3mgDInQ.js} +1 -1
- package/dist/public/assets/{settings-slack-view-RFLP0USW.js → settings-slack-view-CppRZhMV.js} +1 -1
- package/dist/public/assets/{settings-slash-commands-view-zFWoR_R7.js → settings-slash-commands-view-DTjTThgi.js} +1 -1
- package/dist/public/assets/{settings-statistics-view-BgrzVn4R.js → settings-statistics-view-B88qkfOC.js} +1 -1
- package/dist/public/assets/{settings-storage-view-BS2k7E74.js → settings-storage-view-DR7vf1Zh.js} +1 -1
- package/dist/public/assets/{settings-subagents-view-BZr1NkVp.js → settings-subagents-view-B7vHT4_J.js} +1 -1
- package/dist/public/assets/{settings-system-prompt-view-mQErde93.js → settings-system-prompt-view-D5fjsQT6.js} +1 -1
- package/dist/public/assets/{settings-view-D4-XZz2V.js → settings-view-DOMStvOg.js} +2 -2
- package/dist/public/assets/{tasks-view-DgkXglqW.js → tasks-view-KcH0lX_t.js} +2 -2
- package/dist/public/assets/{terminal-panel-DCaBWV04.js → terminal-panel-ozKXkKxm.js} +1 -1
- package/dist/public/assets/{ui-components-1WsgZqWa.js → ui-components-D63KPVFX.js} +1 -1
- package/dist/public/assets/{use-active-dock-panel-instance-B9ao_JH2.js → use-active-dock-panel-instance-CN8Djesu.js} +1 -1
- package/dist/public/assets/{use-installed-ai-files-GpG9ZL8U.js → use-installed-ai-files-Bx9lPbQB.js} +1 -1
- package/dist/public/assets/{web-D7CwlITA.js → web-BdMnTk6x.js} +1 -1
- package/dist/public/assets/{web-BuYdGVW8.js → web-Brg1tgLR.js} +1 -1
- package/dist/public/assets/{web-CEfF0992.js → web-DUuz6a51.js} +1 -1
- package/dist/public/assets/{web-yeAPC2wm.js → web-DdKg_e2t.js} +1 -1
- package/dist/public/index.html +5 -5
- package/package.json +1 -1
- package/dist/public/assets/create-project-dialog-DrXo61FQ.js +0 -6
package/dist/index.js
CHANGED
|
@@ -89424,7 +89424,7 @@ var require_bignumber = __commonJS({
|
|
|
89424
89424
|
return arr.reverse();
|
|
89425
89425
|
}
|
|
89426
89426
|
return function(str3, baseIn, baseOut, sign, callerIsToString) {
|
|
89427
|
-
var alphabet, d, e2, k2, r2, x4, xc, y, i2 = str3.indexOf("."), dp = DECIMAL_PLACES,
|
|
89427
|
+
var alphabet, d, e2, k2, r2, x4, xc, y, i2 = str3.indexOf("."), dp = DECIMAL_PLACES, rm13 = ROUNDING_MODE;
|
|
89428
89428
|
if (i2 >= 0) {
|
|
89429
89429
|
k2 = POW_PRECISION;
|
|
89430
89430
|
POW_PRECISION = 0;
|
|
@@ -89450,7 +89450,7 @@ var require_bignumber = __commonJS({
|
|
|
89450
89450
|
x4.c = xc;
|
|
89451
89451
|
x4.e = e2;
|
|
89452
89452
|
x4.s = sign;
|
|
89453
|
-
x4 = div(x4, y, dp,
|
|
89453
|
+
x4 = div(x4, y, dp, rm13, baseOut);
|
|
89454
89454
|
xc = x4.c;
|
|
89455
89455
|
r2 = x4.r;
|
|
89456
89456
|
e2 = x4.e;
|
|
@@ -89459,7 +89459,7 @@ var require_bignumber = __commonJS({
|
|
|
89459
89459
|
i2 = xc[d];
|
|
89460
89460
|
k2 = baseOut / 2;
|
|
89461
89461
|
r2 = r2 || d < 0 || xc[d + 1] != null;
|
|
89462
|
-
r2 =
|
|
89462
|
+
r2 = rm13 < 4 ? (i2 != null || r2) && (rm13 == 0 || rm13 == (x4.s < 0 ? 3 : 2)) : i2 > k2 || i2 == k2 && (rm13 == 4 || r2 || rm13 == 6 && xc[d - 1] & 1 || rm13 == (x4.s < 0 ? 8 : 7));
|
|
89463
89463
|
if (d < 1 || !xc[0]) {
|
|
89464
89464
|
str3 = r2 ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
|
|
89465
89465
|
} else {
|
|
@@ -89517,7 +89517,7 @@ var require_bignumber = __commonJS({
|
|
|
89517
89517
|
}
|
|
89518
89518
|
for (; !a2[0] && a2.length > 1; a2.splice(0, 1)) ;
|
|
89519
89519
|
}
|
|
89520
|
-
return function(x4, y, dp,
|
|
89520
|
+
return function(x4, y, dp, rm13, base) {
|
|
89521
89521
|
var cmp, e2, i2, more, n7, prod, prodL, q3, qc, rem, remL, rem0, xi2, xL, yc0, yL, yz, s2 = x4.s == y.s ? 1 : -1, xc = x4.c, yc = y.c;
|
|
89522
89522
|
if (!xc || !xc[0] || !yc || !yc[0]) {
|
|
89523
89523
|
return new BigNumber2(
|
|
@@ -89614,7 +89614,7 @@ var require_bignumber = __commonJS({
|
|
|
89614
89614
|
}
|
|
89615
89615
|
if (base == BASE) {
|
|
89616
89616
|
for (i2 = 1, s2 = qc[0]; s2 >= 10; s2 /= 10, i2++) ;
|
|
89617
|
-
round(q3, dp + (q3.e = i2 + e2 * LOG_BASE - 1) + 1,
|
|
89617
|
+
round(q3, dp + (q3.e = i2 + e2 * LOG_BASE - 1) + 1, rm13, more);
|
|
89618
89618
|
} else {
|
|
89619
89619
|
q3.e = e2;
|
|
89620
89620
|
q3.r = +more;
|
|
@@ -89622,10 +89622,10 @@ var require_bignumber = __commonJS({
|
|
|
89622
89622
|
return q3;
|
|
89623
89623
|
};
|
|
89624
89624
|
})();
|
|
89625
|
-
function format3(n7, i2,
|
|
89625
|
+
function format3(n7, i2, rm13, id) {
|
|
89626
89626
|
var c0, e2, ne3, len, str3;
|
|
89627
|
-
if (
|
|
89628
|
-
else intCheck(
|
|
89627
|
+
if (rm13 == null) rm13 = ROUNDING_MODE;
|
|
89628
|
+
else intCheck(rm13, 0, 8);
|
|
89629
89629
|
if (!n7.c) return n7.toString();
|
|
89630
89630
|
c0 = n7.c[0];
|
|
89631
89631
|
ne3 = n7.e;
|
|
@@ -89633,7 +89633,7 @@ var require_bignumber = __commonJS({
|
|
|
89633
89633
|
str3 = coeffToString(n7.c);
|
|
89634
89634
|
str3 = id == 1 || id == 2 && (ne3 <= TO_EXP_NEG || ne3 >= TO_EXP_POS) ? toExponential(str3, ne3) : toFixedPoint(str3, ne3, "0");
|
|
89635
89635
|
} else {
|
|
89636
|
-
n7 = round(new BigNumber2(n7), i2,
|
|
89636
|
+
n7 = round(new BigNumber2(n7), i2, rm13);
|
|
89637
89637
|
e2 = n7.e;
|
|
89638
89638
|
str3 = coeffToString(n7.c);
|
|
89639
89639
|
len = str3.length;
|
|
@@ -89706,7 +89706,7 @@ var require_bignumber = __commonJS({
|
|
|
89706
89706
|
x4.c = x4.e = null;
|
|
89707
89707
|
};
|
|
89708
89708
|
})();
|
|
89709
|
-
function round(x4, sd,
|
|
89709
|
+
function round(x4, sd, rm13, r2) {
|
|
89710
89710
|
var d, i2, j3, k2, n7, ni2, rd, xc = x4.c, pows10 = POWS_TEN;
|
|
89711
89711
|
if (xc) {
|
|
89712
89712
|
out: {
|
|
@@ -89741,8 +89741,8 @@ var require_bignumber = __commonJS({
|
|
|
89741
89741
|
// The expression n % pows10[d - j - 1] returns all digits of n to the right
|
|
89742
89742
|
// of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
|
|
89743
89743
|
xc[ni2 + 1] != null || (j3 < 0 ? n7 : n7 % pows10[d - j3 - 1]);
|
|
89744
|
-
r2 =
|
|
89745
|
-
(i2 > 0 ? j3 > 0 ? n7 / pows10[d - j3] : 0 : xc[ni2 - 1]) % 10 & 1 ||
|
|
89744
|
+
r2 = rm13 < 4 ? (rd || r2) && (rm13 == 0 || rm13 == (x4.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm13 == 4 || r2 || rm13 == 6 && // Check whether the digit to the left of the rounding digit is odd.
|
|
89745
|
+
(i2 > 0 ? j3 > 0 ? n7 / pows10[d - j3] : 0 : xc[ni2 - 1]) % 10 & 1 || rm13 == (x4.s < 0 ? 8 : 7));
|
|
89746
89746
|
if (sd < 1 || !xc[0]) {
|
|
89747
89747
|
xc.length = 0;
|
|
89748
89748
|
if (r2) {
|
|
@@ -89807,13 +89807,13 @@ var require_bignumber = __commonJS({
|
|
|
89807
89807
|
P3.comparedTo = function(y, b2) {
|
|
89808
89808
|
return compare(this, new BigNumber2(y, b2));
|
|
89809
89809
|
};
|
|
89810
|
-
P3.decimalPlaces = P3.dp = function(dp,
|
|
89810
|
+
P3.decimalPlaces = P3.dp = function(dp, rm13) {
|
|
89811
89811
|
var c, n7, v3, x4 = this;
|
|
89812
89812
|
if (dp != null) {
|
|
89813
89813
|
intCheck(dp, 0, MAX);
|
|
89814
|
-
if (
|
|
89815
|
-
else intCheck(
|
|
89816
|
-
return round(new BigNumber2(x4), dp + x4.e + 1,
|
|
89814
|
+
if (rm13 == null) rm13 = ROUNDING_MODE;
|
|
89815
|
+
else intCheck(rm13, 0, 8);
|
|
89816
|
+
return round(new BigNumber2(x4), dp + x4.e + 1, rm13);
|
|
89817
89817
|
}
|
|
89818
89818
|
if (!(c = x4.c)) return null;
|
|
89819
89819
|
n7 = ((v3 = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;
|
|
@@ -89896,11 +89896,11 @@ var require_bignumber = __commonJS({
|
|
|
89896
89896
|
if (nIsNeg) y = ONE.div(y);
|
|
89897
89897
|
return m2 ? y.mod(m2) : k2 ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
|
|
89898
89898
|
};
|
|
89899
|
-
P3.integerValue = function(
|
|
89899
|
+
P3.integerValue = function(rm13) {
|
|
89900
89900
|
var n7 = new BigNumber2(this);
|
|
89901
|
-
if (
|
|
89902
|
-
else intCheck(
|
|
89903
|
-
return round(n7, n7.e + 1,
|
|
89901
|
+
if (rm13 == null) rm13 = ROUNDING_MODE;
|
|
89902
|
+
else intCheck(rm13, 0, 8);
|
|
89903
|
+
return round(n7, n7.e + 1, rm13);
|
|
89904
89904
|
};
|
|
89905
89905
|
P3.isEqualTo = P3.eq = function(y, b2) {
|
|
89906
89906
|
return compare(this, new BigNumber2(y, b2)) === 0;
|
|
@@ -90127,13 +90127,13 @@ var require_bignumber = __commonJS({
|
|
|
90127
90127
|
}
|
|
90128
90128
|
return normalise(y, xc, ye2);
|
|
90129
90129
|
};
|
|
90130
|
-
P3.precision = P3.sd = function(sd,
|
|
90130
|
+
P3.precision = P3.sd = function(sd, rm13) {
|
|
90131
90131
|
var c, n7, v3, x4 = this;
|
|
90132
90132
|
if (sd != null && sd !== !!sd) {
|
|
90133
90133
|
intCheck(sd, 1, MAX);
|
|
90134
|
-
if (
|
|
90135
|
-
else intCheck(
|
|
90136
|
-
return round(new BigNumber2(x4), sd,
|
|
90134
|
+
if (rm13 == null) rm13 = ROUNDING_MODE;
|
|
90135
|
+
else intCheck(rm13, 0, 8);
|
|
90136
|
+
return round(new BigNumber2(x4), sd, rm13);
|
|
90137
90137
|
}
|
|
90138
90138
|
if (!(c = x4.c)) return null;
|
|
90139
90139
|
v3 = c.length - 1;
|
|
@@ -90203,36 +90203,36 @@ var require_bignumber = __commonJS({
|
|
|
90203
90203
|
}
|
|
90204
90204
|
return round(r2, r2.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m2);
|
|
90205
90205
|
};
|
|
90206
|
-
P3.toExponential = function(dp,
|
|
90206
|
+
P3.toExponential = function(dp, rm13) {
|
|
90207
90207
|
if (dp != null) {
|
|
90208
90208
|
intCheck(dp, 0, MAX);
|
|
90209
90209
|
dp++;
|
|
90210
90210
|
}
|
|
90211
|
-
return format3(this, dp,
|
|
90211
|
+
return format3(this, dp, rm13, 1);
|
|
90212
90212
|
};
|
|
90213
|
-
P3.toFixed = function(dp,
|
|
90213
|
+
P3.toFixed = function(dp, rm13) {
|
|
90214
90214
|
if (dp != null) {
|
|
90215
90215
|
intCheck(dp, 0, MAX);
|
|
90216
90216
|
dp = dp + this.e + 1;
|
|
90217
90217
|
}
|
|
90218
|
-
return format3(this, dp,
|
|
90218
|
+
return format3(this, dp, rm13);
|
|
90219
90219
|
};
|
|
90220
|
-
P3.toFormat = function(dp,
|
|
90220
|
+
P3.toFormat = function(dp, rm13, format4) {
|
|
90221
90221
|
var str3, x4 = this;
|
|
90222
90222
|
if (format4 == null) {
|
|
90223
|
-
if (dp != null &&
|
|
90224
|
-
format4 =
|
|
90225
|
-
|
|
90223
|
+
if (dp != null && rm13 && typeof rm13 == "object") {
|
|
90224
|
+
format4 = rm13;
|
|
90225
|
+
rm13 = null;
|
|
90226
90226
|
} else if (dp && typeof dp == "object") {
|
|
90227
90227
|
format4 = dp;
|
|
90228
|
-
dp =
|
|
90228
|
+
dp = rm13 = null;
|
|
90229
90229
|
} else {
|
|
90230
90230
|
format4 = FORMAT;
|
|
90231
90231
|
}
|
|
90232
90232
|
} else if (typeof format4 != "object") {
|
|
90233
90233
|
throw Error(bignumberError + "Argument not an object: " + format4);
|
|
90234
90234
|
}
|
|
90235
|
-
str3 = x4.toFixed(dp,
|
|
90235
|
+
str3 = x4.toFixed(dp, rm13);
|
|
90236
90236
|
if (x4.c) {
|
|
90237
90237
|
var i2, arr = str3.split("."), g1 = +format4.groupSize, g2 = +format4.secondaryGroupSize, groupSeparator = format4.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x4.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length;
|
|
90238
90238
|
if (g2) {
|
|
@@ -90300,9 +90300,9 @@ var require_bignumber = __commonJS({
|
|
|
90300
90300
|
P3.toNumber = function() {
|
|
90301
90301
|
return +valueOf(this);
|
|
90302
90302
|
};
|
|
90303
|
-
P3.toPrecision = function(sd,
|
|
90303
|
+
P3.toPrecision = function(sd, rm13) {
|
|
90304
90304
|
if (sd != null) intCheck(sd, 1, MAX);
|
|
90305
|
-
return format3(this, sd,
|
|
90305
|
+
return format3(this, sd, rm13, 2);
|
|
90306
90306
|
};
|
|
90307
90307
|
P3.toString = function(b2) {
|
|
90308
90308
|
var str3, n7 = this, s2 = n7.s, e2 = n7.e;
|
|
@@ -250456,6 +250456,9 @@ function streamAsyncGenerator(c, generator, options2) {
|
|
|
250456
250456
|
await writer.write(JSON.stringify(event) + "\n");
|
|
250457
250457
|
} catch {
|
|
250458
250458
|
clientConnected = false;
|
|
250459
|
+
if (abortOnDisconnect) {
|
|
250460
|
+
options2?.abortController?.abort();
|
|
250461
|
+
}
|
|
250459
250462
|
}
|
|
250460
250463
|
}
|
|
250461
250464
|
} catch (error48) {
|
|
@@ -255303,7 +255306,12 @@ async function handleCreateProject(c, projectManager) {
|
|
|
255303
255306
|
);
|
|
255304
255307
|
}
|
|
255305
255308
|
const method = isValidCommitMethod(commitMethod) ? commitMethod : CommitMethods.PullRequest;
|
|
255306
|
-
|
|
255309
|
+
const abortController = new AbortController();
|
|
255310
|
+
return streamAsyncGenerator(
|
|
255311
|
+
c,
|
|
255312
|
+
projectManager.createProject(gitUrl, method, { signal: abortController.signal }),
|
|
255313
|
+
{ abortController }
|
|
255314
|
+
);
|
|
255307
255315
|
} catch (error48) {
|
|
255308
255316
|
return errorResponse(
|
|
255309
255317
|
c,
|
|
@@ -255326,7 +255334,10 @@ var init_projects_create_route = __esm({
|
|
|
255326
255334
|
|
|
255327
255335
|
// src/features/projects/projects-open-folder.route.ts
|
|
255328
255336
|
async function handleOpenFolderProject(c, projectManager) {
|
|
255329
|
-
const
|
|
255337
|
+
const abortController = new AbortController();
|
|
255338
|
+
const generator = projectManager.createProjectFromFolder({
|
|
255339
|
+
signal: abortController.signal
|
|
255340
|
+
});
|
|
255330
255341
|
const first2 = await generator.next();
|
|
255331
255342
|
if (first2.done) {
|
|
255332
255343
|
return c.body(null, 204);
|
|
@@ -255335,7 +255346,7 @@ async function handleOpenFolderProject(c, projectManager) {
|
|
|
255335
255346
|
yield first2.value;
|
|
255336
255347
|
yield* generator;
|
|
255337
255348
|
}
|
|
255338
|
-
return streamAsyncGenerator(c, prependFirst());
|
|
255349
|
+
return streamAsyncGenerator(c, prependFirst(), { abortController });
|
|
255339
255350
|
}
|
|
255340
255351
|
var init_projects_open_folder_route = __esm({
|
|
255341
255352
|
"src/features/projects/projects-open-folder.route.ts"() {
|
|
@@ -256265,7 +256276,14 @@ async function handleOpenPathProject(c, projectManager) {
|
|
|
256265
256276
|
if (typeof body.path !== "string" || body.path.trim().length === 0) {
|
|
256266
256277
|
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "path is required", 400);
|
|
256267
256278
|
}
|
|
256268
|
-
|
|
256279
|
+
const abortController = new AbortController();
|
|
256280
|
+
return streamAsyncGenerator(
|
|
256281
|
+
c,
|
|
256282
|
+
projectManager.createProjectFromPath(body.path.trim(), {
|
|
256283
|
+
signal: abortController.signal
|
|
256284
|
+
}),
|
|
256285
|
+
{ abortController }
|
|
256286
|
+
);
|
|
256269
256287
|
}
|
|
256270
256288
|
var init_projects_open_path_route = __esm({
|
|
256271
256289
|
"src/features/projects/projects-open-path.route.ts"() {
|
|
@@ -256291,7 +256309,14 @@ async function handleCreateFolderProject(c, projectManager) {
|
|
|
256291
256309
|
);
|
|
256292
256310
|
return c.json(response, statusCode);
|
|
256293
256311
|
}
|
|
256294
|
-
|
|
256312
|
+
const abortController = new AbortController();
|
|
256313
|
+
return streamAsyncGenerator(
|
|
256314
|
+
c,
|
|
256315
|
+
projectManager.createProjectFromNewFolder(projectName.trim(), {
|
|
256316
|
+
signal: abortController.signal
|
|
256317
|
+
}),
|
|
256318
|
+
{ abortController }
|
|
256319
|
+
);
|
|
256295
256320
|
} catch (error48) {
|
|
256296
256321
|
const { response, statusCode } = ResponseBuilder.error(
|
|
256297
256322
|
"REQUEST_PARSE_ERROR",
|
|
@@ -256345,9 +256370,13 @@ async function handleCreateProjectFromZip(c, projectManager) {
|
|
|
256345
256370
|
}
|
|
256346
256371
|
const suggestedName = typeof name === "string" && name.trim() ? name.trim() : void 0;
|
|
256347
256372
|
const overrideId = typeof overrideProjectId === "string" && overrideProjectId.trim() ? overrideProjectId.trim() : void 0;
|
|
256373
|
+
const abortController = new AbortController();
|
|
256348
256374
|
return streamAsyncGenerator(
|
|
256349
256375
|
c,
|
|
256350
|
-
projectManager.createProjectFromZip(zipBuffer, suggestedName, overrideId
|
|
256376
|
+
projectManager.createProjectFromZip(zipBuffer, suggestedName, overrideId, {
|
|
256377
|
+
signal: abortController.signal
|
|
256378
|
+
}),
|
|
256379
|
+
{ abortController }
|
|
256351
256380
|
);
|
|
256352
256381
|
} catch (error48) {
|
|
256353
256382
|
const { response, statusCode } = ResponseBuilder.error(
|
|
@@ -263524,9 +263553,7 @@ var init_projects_creator = __esm({
|
|
|
263524
263553
|
}
|
|
263525
263554
|
async extractZipEntries(zip, folderPath) {
|
|
263526
263555
|
const entries = zip.getEntries().filter((entry) => !entry.isDirectory);
|
|
263527
|
-
const hasSrc = entries.some(
|
|
263528
|
-
(entry) => entry.entryName.replace(/\\/g, "/").startsWith("src/")
|
|
263529
|
-
);
|
|
263556
|
+
const hasSrc = entries.some((entry) => entry.entryName.replace(/\\/g, "/").startsWith("src/"));
|
|
263530
263557
|
const ignoredPrefixes = ["plugin.json", "mcp.json", "skills/"];
|
|
263531
263558
|
for (const entry of entries) {
|
|
263532
263559
|
const entryName = entry.entryName.replace(/\\/g, "/");
|
|
@@ -263548,7 +263575,7 @@ var init_projects_creator = __esm({
|
|
|
263548
263575
|
await writeFile11(output2, entry.getData());
|
|
263549
263576
|
}
|
|
263550
263577
|
}
|
|
263551
|
-
async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest) {
|
|
263578
|
+
async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest, options2) {
|
|
263552
263579
|
if (!this.gitManager.validateGitUrl(gitUrl)) {
|
|
263553
263580
|
yield {
|
|
263554
263581
|
type: "error",
|
|
@@ -263584,7 +263611,9 @@ var init_projects_creator = __esm({
|
|
|
263584
263611
|
threadId: initialThreadId,
|
|
263585
263612
|
projectId
|
|
263586
263613
|
};
|
|
263587
|
-
for await (const gitEvent of this.gitManager.cloneRepository(gitUrl, firstThreadPath
|
|
263614
|
+
for await (const gitEvent of this.gitManager.cloneRepository(gitUrl, firstThreadPath, {
|
|
263615
|
+
signal: options2?.signal
|
|
263616
|
+
})) {
|
|
263588
263617
|
if (gitEvent.type === "error") {
|
|
263589
263618
|
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
263590
263619
|
yield {
|
|
@@ -263599,6 +263628,12 @@ var init_projects_creator = __esm({
|
|
|
263599
263628
|
};
|
|
263600
263629
|
}
|
|
263601
263630
|
}
|
|
263631
|
+
if (options2?.signal?.aborted) {
|
|
263632
|
+
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
263633
|
+
await rm5(firstThreadPath, { recursive: true, force: true }).catch(() => {
|
|
263634
|
+
});
|
|
263635
|
+
return;
|
|
263636
|
+
}
|
|
263602
263637
|
let branchName = "main";
|
|
263603
263638
|
if (commitMethod === CommitMethods.PullRequest) {
|
|
263604
263639
|
const baseBranch = this.gitManager.sanitizeBranchName(generateRandomHyphenatedName());
|
|
@@ -263642,6 +263677,12 @@ var init_projects_creator = __esm({
|
|
|
263642
263677
|
};
|
|
263643
263678
|
}
|
|
263644
263679
|
const suggestedSetupScript = await this.detectSetupScript(firstThreadPath);
|
|
263680
|
+
if (options2?.signal?.aborted) {
|
|
263681
|
+
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
263682
|
+
await rm5(firstThreadPath, { recursive: true, force: true }).catch(() => {
|
|
263683
|
+
});
|
|
263684
|
+
return;
|
|
263685
|
+
}
|
|
263645
263686
|
const allSetupScripts = [];
|
|
263646
263687
|
await this.findAllPackageJsonFiles(firstThreadPath, firstThreadPath, allSetupScripts);
|
|
263647
263688
|
const project = {
|
|
@@ -263687,7 +263728,10 @@ var init_projects_creator = __esm({
|
|
|
263687
263728
|
};
|
|
263688
263729
|
}
|
|
263689
263730
|
}
|
|
263690
|
-
async *createProjectFromScaffold(projectName, templateId, packageManager) {
|
|
263731
|
+
async *createProjectFromScaffold(projectName, templateId, packageManager, options2) {
|
|
263732
|
+
if (options2?.signal?.aborted) {
|
|
263733
|
+
return;
|
|
263734
|
+
}
|
|
263691
263735
|
if (!isValidPackageManager(packageManager)) {
|
|
263692
263736
|
yield {
|
|
263693
263737
|
type: "error",
|
|
@@ -263739,6 +263783,12 @@ var init_projects_creator = __esm({
|
|
|
263739
263783
|
return;
|
|
263740
263784
|
}
|
|
263741
263785
|
const firstThreadPath = this.generateThreadPath(projectId, initialThreadId);
|
|
263786
|
+
if (options2?.signal?.aborted) {
|
|
263787
|
+
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
263788
|
+
await rm5(firstThreadPath, { recursive: true, force: true }).catch(() => {
|
|
263789
|
+
});
|
|
263790
|
+
return;
|
|
263791
|
+
}
|
|
263742
263792
|
yield {
|
|
263743
263793
|
type: "progress",
|
|
263744
263794
|
message: `Scaffolding project in folder: ${firstThreadPath}`
|
|
@@ -263787,7 +263837,10 @@ var init_projects_creator = __esm({
|
|
|
263787
263837
|
};
|
|
263788
263838
|
}
|
|
263789
263839
|
}
|
|
263790
|
-
async *createProjectFromNewFolder(projectName) {
|
|
263840
|
+
async *createProjectFromNewFolder(projectName, options2) {
|
|
263841
|
+
if (options2?.signal?.aborted) {
|
|
263842
|
+
return;
|
|
263843
|
+
}
|
|
263791
263844
|
const trimmedProjectName = projectName.trim();
|
|
263792
263845
|
const folderName = this.toFolderName(trimmedProjectName);
|
|
263793
263846
|
if (!trimmedProjectName || !folderName) {
|
|
@@ -263832,6 +263885,14 @@ var init_projects_creator = __esm({
|
|
|
263832
263885
|
currentBranch: "main",
|
|
263833
263886
|
createdAt: /* @__PURE__ */ new Date()
|
|
263834
263887
|
};
|
|
263888
|
+
if (options2?.signal?.aborted) {
|
|
263889
|
+
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
263890
|
+
try {
|
|
263891
|
+
await rm5(folderPath, { recursive: true, force: true });
|
|
263892
|
+
} catch {
|
|
263893
|
+
}
|
|
263894
|
+
return;
|
|
263895
|
+
}
|
|
263835
263896
|
await this.persistProject(project);
|
|
263836
263897
|
projectMetadataSaved = true;
|
|
263837
263898
|
await this.persistThread(initialThread);
|
|
@@ -263878,7 +263939,10 @@ var init_projects_creator = __esm({
|
|
|
263878
263939
|
* so URLs remain stable. The zip's manifest name is also unwrapped from the
|
|
263879
263940
|
* Share dialog's `-source-code` suffix so the project keeps its original name.
|
|
263880
263941
|
*/
|
|
263881
|
-
async *createProjectFromZip(zipBuffer, suggestedName, overrideProjectId) {
|
|
263942
|
+
async *createProjectFromZip(zipBuffer, suggestedName, overrideProjectId, options2) {
|
|
263943
|
+
if (options2?.signal?.aborted) {
|
|
263944
|
+
return;
|
|
263945
|
+
}
|
|
263882
263946
|
let zip;
|
|
263883
263947
|
try {
|
|
263884
263948
|
zip = new import_adm_zip3.default(zipBuffer);
|
|
@@ -263897,6 +263961,9 @@ var init_projects_creator = __esm({
|
|
|
263897
263961
|
}
|
|
263898
263962
|
let projectId = randomUUID14();
|
|
263899
263963
|
let projectNameToPersist = projectName;
|
|
263964
|
+
if (options2?.signal?.aborted) {
|
|
263965
|
+
return;
|
|
263966
|
+
}
|
|
263900
263967
|
if (overrideProjectId) {
|
|
263901
263968
|
const result = await this.teardownOverriddenProject(overrideProjectId, projectName);
|
|
263902
263969
|
if (!result.ok) {
|
|
@@ -264020,7 +264087,7 @@ var init_projects_creator = __esm({
|
|
|
264020
264087
|
}
|
|
264021
264088
|
return candidate;
|
|
264022
264089
|
}
|
|
264023
|
-
async *createProjectFromFolder() {
|
|
264090
|
+
async *createProjectFromFolder(options2) {
|
|
264024
264091
|
await loadUtils();
|
|
264025
264092
|
if (!Utils) {
|
|
264026
264093
|
yield { type: "error", message: "File dialog not available in server mode" };
|
|
@@ -264035,14 +264102,17 @@ var init_projects_creator = __esm({
|
|
|
264035
264102
|
if (!folderPath) {
|
|
264036
264103
|
return;
|
|
264037
264104
|
}
|
|
264038
|
-
yield* this.createProjectFromPath(folderPath);
|
|
264105
|
+
yield* this.createProjectFromPath(folderPath, options2);
|
|
264039
264106
|
}
|
|
264040
264107
|
/**
|
|
264041
264108
|
* Creates or reuses a project for an absolute folder path (no native dialog).
|
|
264042
264109
|
* Idempotent: if a project already uses this folder, returns that project.
|
|
264043
264110
|
*/
|
|
264044
|
-
async *createProjectFromPath(folderPath) {
|
|
264111
|
+
async *createProjectFromPath(folderPath, options2) {
|
|
264045
264112
|
const normalizedPath = normalizeFolderPath(folderPath);
|
|
264113
|
+
if (options2?.signal?.aborted) {
|
|
264114
|
+
return;
|
|
264115
|
+
}
|
|
264046
264116
|
try {
|
|
264047
264117
|
const stats = await stat10(normalizedPath);
|
|
264048
264118
|
if (!stats.isDirectory()) {
|
|
@@ -264119,6 +264189,10 @@ var init_projects_creator = __esm({
|
|
|
264119
264189
|
currentBranch: branchName,
|
|
264120
264190
|
createdAt: /* @__PURE__ */ new Date()
|
|
264121
264191
|
};
|
|
264192
|
+
if (options2?.signal?.aborted) {
|
|
264193
|
+
this.processingStateManager?.clearProcessing(initialThreadId);
|
|
264194
|
+
return;
|
|
264195
|
+
}
|
|
264122
264196
|
await this.persistProject(project);
|
|
264123
264197
|
await this.persistThread(initialThread);
|
|
264124
264198
|
await this.applySuggestedRunCommand(project, projectId);
|
|
@@ -264364,38 +264438,48 @@ var init_projects_manager = __esm({
|
|
|
264364
264438
|
* - 1.4 - THE CLI SHALL determine the storage path for each Project folder
|
|
264365
264439
|
* - 1.5 - WHEN a Project folder is created, THE System SHALL associate it with the provided git URL
|
|
264366
264440
|
*/
|
|
264367
|
-
async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest) {
|
|
264368
|
-
yield* this.projectCreator.createProject(gitUrl, commitMethod);
|
|
264441
|
+
async *createProject(gitUrl, commitMethod = CommitMethods.PullRequest, options2) {
|
|
264442
|
+
yield* this.projectCreator.createProject(gitUrl, commitMethod, options2);
|
|
264369
264443
|
}
|
|
264370
264444
|
/**
|
|
264371
264445
|
* Creates a new project from a local folder via native OS dialog.
|
|
264372
264446
|
*/
|
|
264373
|
-
async *createProjectFromFolder() {
|
|
264374
|
-
yield* this.projectCreator.createProjectFromFolder();
|
|
264447
|
+
async *createProjectFromFolder(options2) {
|
|
264448
|
+
yield* this.projectCreator.createProjectFromFolder(options2);
|
|
264375
264449
|
}
|
|
264376
264450
|
/**
|
|
264377
264451
|
* Creates or reuses a project for an absolute folder path.
|
|
264378
264452
|
*/
|
|
264379
|
-
async *createProjectFromPath(folderPath) {
|
|
264380
|
-
yield* this.projectCreator.createProjectFromPath(folderPath);
|
|
264453
|
+
async *createProjectFromPath(folderPath, options2) {
|
|
264454
|
+
yield* this.projectCreator.createProjectFromPath(folderPath, options2);
|
|
264381
264455
|
}
|
|
264382
264456
|
/**
|
|
264383
264457
|
* Creates a new project by scaffolding a web app, then git init and initial thread.
|
|
264384
264458
|
*/
|
|
264385
|
-
async *createProjectFromScaffold(projectName, templateId, packageManager) {
|
|
264386
|
-
yield* this.projectCreator.createProjectFromScaffold(
|
|
264459
|
+
async *createProjectFromScaffold(projectName, templateId, packageManager, options2) {
|
|
264460
|
+
yield* this.projectCreator.createProjectFromScaffold(
|
|
264461
|
+
projectName,
|
|
264462
|
+
templateId,
|
|
264463
|
+
packageManager,
|
|
264464
|
+
options2
|
|
264465
|
+
);
|
|
264387
264466
|
}
|
|
264388
264467
|
/**
|
|
264389
264468
|
* Creates a new empty folder project under the root folder.
|
|
264390
264469
|
*/
|
|
264391
|
-
async *createProjectFromNewFolder(projectName) {
|
|
264392
|
-
yield* this.projectCreator.createProjectFromNewFolder(projectName);
|
|
264470
|
+
async *createProjectFromNewFolder(projectName, options2) {
|
|
264471
|
+
yield* this.projectCreator.createProjectFromNewFolder(projectName, options2);
|
|
264393
264472
|
}
|
|
264394
264473
|
/**
|
|
264395
264474
|
* Creates a new project from a zip archive.
|
|
264396
264475
|
*/
|
|
264397
|
-
async *createProjectFromZip(zipBuffer, suggestedName, overrideProjectId) {
|
|
264398
|
-
yield* this.projectCreator.createProjectFromZip(
|
|
264476
|
+
async *createProjectFromZip(zipBuffer, suggestedName, overrideProjectId, options2) {
|
|
264477
|
+
yield* this.projectCreator.createProjectFromZip(
|
|
264478
|
+
zipBuffer,
|
|
264479
|
+
suggestedName,
|
|
264480
|
+
overrideProjectId,
|
|
264481
|
+
options2
|
|
264482
|
+
);
|
|
264399
264483
|
}
|
|
264400
264484
|
/**
|
|
264401
264485
|
* Gets a project by ID
|
|
@@ -265750,9 +265834,13 @@ async function postScaffold(c, projectManager) {
|
|
|
265750
265834
|
);
|
|
265751
265835
|
return c.json(response, statusCode);
|
|
265752
265836
|
}
|
|
265837
|
+
const abortController = new AbortController();
|
|
265753
265838
|
return streamAsyncGenerator(
|
|
265754
265839
|
c,
|
|
265755
|
-
projectManager.createProjectFromScaffold(projectName.trim(), templateId, packageManager
|
|
265840
|
+
projectManager.createProjectFromScaffold(projectName.trim(), templateId, packageManager, {
|
|
265841
|
+
signal: abortController.signal
|
|
265842
|
+
}),
|
|
265843
|
+
{ abortController }
|
|
265756
265844
|
);
|
|
265757
265845
|
} catch (error48) {
|
|
265758
265846
|
const { response, statusCode } = ResponseBuilder.error(
|
|
@@ -425094,14 +425182,15 @@ var init_threads_routes = __esm({
|
|
|
425094
425182
|
});
|
|
425095
425183
|
|
|
425096
425184
|
// src/features/git/git.manager.ts
|
|
425097
|
-
import { mkdir as mkdir16 } from "fs/promises";
|
|
425185
|
+
import { mkdir as mkdir16, rm as rm12 } from "fs/promises";
|
|
425098
425186
|
import { dirname as dirname20 } from "path";
|
|
425099
|
-
var GitManagerImpl;
|
|
425187
|
+
var FILTER_UNSUPPORTED_PATTERN, GitManagerImpl;
|
|
425100
425188
|
var init_git_manager = __esm({
|
|
425101
425189
|
"src/features/git/git.manager.ts"() {
|
|
425102
425190
|
"use strict";
|
|
425103
425191
|
init_utils5();
|
|
425104
425192
|
init_git_utils();
|
|
425193
|
+
FILTER_UNSUPPORTED_PATTERN = /filter|partial clone|blob/i;
|
|
425105
425194
|
GitManagerImpl = class {
|
|
425106
425195
|
/**
|
|
425107
425196
|
* Regular expressions for validating different git URL formats
|
|
@@ -425161,7 +425250,8 @@ var init_git_manager = __esm({
|
|
|
425161
425250
|
* - 7.2 - IF a git clone operation fails, THEN THE CLI SHALL return a descriptive error message
|
|
425162
425251
|
* - 7.3 - WHEN a clone operation is in progress, THE CLI SHALL stream git output to provide progress feedback
|
|
425163
425252
|
*/
|
|
425164
|
-
async *cloneRepository(gitUrl, targetPath) {
|
|
425253
|
+
async *cloneRepository(gitUrl, targetPath, options2) {
|
|
425254
|
+
const signal = options2?.signal;
|
|
425165
425255
|
if (!this.validateGitUrl(gitUrl)) {
|
|
425166
425256
|
yield {
|
|
425167
425257
|
type: "error",
|
|
@@ -425173,58 +425263,29 @@ var init_git_manager = __esm({
|
|
|
425173
425263
|
try {
|
|
425174
425264
|
const parentDir = dirname20(targetPath);
|
|
425175
425265
|
await mkdir16(parentDir, { recursive: true });
|
|
425176
|
-
|
|
425177
|
-
|
|
425178
|
-
|
|
425179
|
-
|
|
425180
|
-
|
|
425181
|
-
|
|
425182
|
-
|
|
425183
|
-
const output2 = data.toString();
|
|
425184
|
-
eventQueue.push({
|
|
425185
|
-
type: "stdout",
|
|
425186
|
-
data: output2
|
|
425187
|
-
});
|
|
425188
|
-
});
|
|
425189
|
-
}
|
|
425190
|
-
if (gitProcess.stderr) {
|
|
425191
|
-
gitProcess.stderr.on("data", (data) => {
|
|
425192
|
-
const output2 = data.toString();
|
|
425193
|
-
eventQueue.push({
|
|
425194
|
-
type: "stderr",
|
|
425195
|
-
data: output2
|
|
425196
|
-
});
|
|
425197
|
-
});
|
|
425198
|
-
}
|
|
425199
|
-
gitProcess.on("close", (code) => {
|
|
425200
|
-
exitCode = code;
|
|
425201
|
-
processExited = true;
|
|
425202
|
-
});
|
|
425203
|
-
gitProcess.on("error", (err2) => {
|
|
425204
|
-
processError = err2;
|
|
425205
|
-
processExited = true;
|
|
425206
|
-
});
|
|
425207
|
-
while (!processExited || eventQueue.length > 0) {
|
|
425208
|
-
if (eventQueue.length > 0) {
|
|
425209
|
-
const event = eventQueue.shift();
|
|
425210
|
-
if (event) {
|
|
425211
|
-
yield event;
|
|
425212
|
-
}
|
|
425213
|
-
} else {
|
|
425214
|
-
await new Promise((resolve18) => setTimeout(resolve18, 10));
|
|
425215
|
-
}
|
|
425266
|
+
let result = yield* this.spawnGitStreaming(
|
|
425267
|
+
["clone", "--progress", "--filter=blob:none", gitUrl, targetPath],
|
|
425268
|
+
signal
|
|
425269
|
+
);
|
|
425270
|
+
if (!result.ok && !result.aborted && FILTER_UNSUPPORTED_PATTERN.test(result.stderr)) {
|
|
425271
|
+
await rm12(targetPath, { recursive: true, force: true });
|
|
425272
|
+
result = yield* this.spawnGitStreaming(["clone", "--progress", gitUrl, targetPath], signal);
|
|
425216
425273
|
}
|
|
425217
|
-
if (processError) {
|
|
425218
|
-
const errorMessage2 = processError instanceof Error ? processError.message : JSON.stringify(processError);
|
|
425274
|
+
if (result.processError) {
|
|
425275
|
+
const errorMessage2 = result.processError instanceof Error ? result.processError.message : JSON.stringify(result.processError);
|
|
425219
425276
|
yield {
|
|
425220
425277
|
type: "error",
|
|
425221
425278
|
message: errorMessage2,
|
|
425222
|
-
error: processError
|
|
425279
|
+
error: result.processError
|
|
425223
425280
|
};
|
|
425224
425281
|
return;
|
|
425225
425282
|
}
|
|
425226
|
-
if (
|
|
425227
|
-
|
|
425283
|
+
if (!result.ok) {
|
|
425284
|
+
if (result.aborted) {
|
|
425285
|
+
await rm12(targetPath, { recursive: true, force: true });
|
|
425286
|
+
return;
|
|
425287
|
+
}
|
|
425288
|
+
const errorMsg = `Git clone failed with exit code ${result.exitCode}`;
|
|
425228
425289
|
yield {
|
|
425229
425290
|
type: "error",
|
|
425230
425291
|
message: errorMsg,
|
|
@@ -425243,6 +425304,96 @@ var init_git_manager = __esm({
|
|
|
425243
425304
|
};
|
|
425244
425305
|
}
|
|
425245
425306
|
}
|
|
425307
|
+
/**
|
|
425308
|
+
* Spawns a git process and streams its stdout/stderr as GitEvents
|
|
425309
|
+
*
|
|
425310
|
+
* Guarantees cleanup no matter how the generator ends:
|
|
425311
|
+
* - Aborting the signal kills the git process (prevents zombie clones
|
|
425312
|
+
* eating memory/disk after the client disconnects)
|
|
425313
|
+
* - A `finally` block removes all listeners and kills the process if the
|
|
425314
|
+
* generator is closed early (e.g. `generator.return()` by the consumer),
|
|
425315
|
+
* so the event queue cannot grow unboundedly
|
|
425316
|
+
*
|
|
425317
|
+
* @param args - Arguments passed to `git` (after the command name)
|
|
425318
|
+
* @param signal - Optional cancellation signal
|
|
425319
|
+
* @yields GitEvent objects for stdout and stderr
|
|
425320
|
+
* @returns The stream result once the process has exited and been drained
|
|
425321
|
+
*/
|
|
425322
|
+
async *spawnGitStreaming(args2, signal, cwd) {
|
|
425323
|
+
const gitProcess = spawnProcess("git", args2, cwd ? { cwd } : void 0);
|
|
425324
|
+
const eventQueue = [];
|
|
425325
|
+
let processExited = false;
|
|
425326
|
+
let exitCode = null;
|
|
425327
|
+
let processError = null;
|
|
425328
|
+
let stdoutText = "";
|
|
425329
|
+
let stderrText = "";
|
|
425330
|
+
let killed = false;
|
|
425331
|
+
const onStdout = (data) => {
|
|
425332
|
+
const output2 = data.toString();
|
|
425333
|
+
stdoutText += output2;
|
|
425334
|
+
eventQueue.push({
|
|
425335
|
+
type: "stdout",
|
|
425336
|
+
data: output2
|
|
425337
|
+
});
|
|
425338
|
+
};
|
|
425339
|
+
const onStderr = (data) => {
|
|
425340
|
+
const output2 = data.toString();
|
|
425341
|
+
stderrText += output2;
|
|
425342
|
+
eventQueue.push({
|
|
425343
|
+
type: "stderr",
|
|
425344
|
+
data: output2
|
|
425345
|
+
});
|
|
425346
|
+
};
|
|
425347
|
+
const onClose = (code) => {
|
|
425348
|
+
exitCode = code;
|
|
425349
|
+
processExited = true;
|
|
425350
|
+
};
|
|
425351
|
+
const onError = (err2) => {
|
|
425352
|
+
processError = err2;
|
|
425353
|
+
processExited = true;
|
|
425354
|
+
};
|
|
425355
|
+
gitProcess.stdout?.on("data", onStdout);
|
|
425356
|
+
gitProcess.stderr?.on("data", onStderr);
|
|
425357
|
+
gitProcess.on("close", onClose);
|
|
425358
|
+
gitProcess.on("error", onError);
|
|
425359
|
+
try {
|
|
425360
|
+
while (!processExited || eventQueue.length > 0) {
|
|
425361
|
+
if (signal?.aborted && !processExited && !killed) {
|
|
425362
|
+
killed = true;
|
|
425363
|
+
gitProcess.kill("SIGTERM");
|
|
425364
|
+
}
|
|
425365
|
+
if (eventQueue.length > 0) {
|
|
425366
|
+
const event = eventQueue.shift();
|
|
425367
|
+
if (event) {
|
|
425368
|
+
yield event;
|
|
425369
|
+
}
|
|
425370
|
+
} else {
|
|
425371
|
+
await new Promise((resolve18) => setTimeout(resolve18, 10));
|
|
425372
|
+
}
|
|
425373
|
+
}
|
|
425374
|
+
} finally {
|
|
425375
|
+
gitProcess.stdout?.off("data", onStdout);
|
|
425376
|
+
gitProcess.stderr?.off("data", onStderr);
|
|
425377
|
+
gitProcess.off("close", onClose);
|
|
425378
|
+
gitProcess.off("error", onError);
|
|
425379
|
+
if (!processExited) {
|
|
425380
|
+
killed = true;
|
|
425381
|
+
gitProcess.kill("SIGTERM");
|
|
425382
|
+
}
|
|
425383
|
+
}
|
|
425384
|
+
const aborted2 = signal?.aborted === true;
|
|
425385
|
+
if (processError) {
|
|
425386
|
+
return { ok: false, exitCode, stdout: stdoutText, stderr: stderrText, processError, aborted: aborted2 };
|
|
425387
|
+
}
|
|
425388
|
+
return {
|
|
425389
|
+
ok: exitCode === 0,
|
|
425390
|
+
exitCode,
|
|
425391
|
+
stdout: stdoutText,
|
|
425392
|
+
stderr: stderrText,
|
|
425393
|
+
processError,
|
|
425394
|
+
aborted: aborted2
|
|
425395
|
+
};
|
|
425396
|
+
}
|
|
425246
425397
|
/**
|
|
425247
425398
|
* Sanitizes a branch name to ensure it only contains valid git branch characters
|
|
425248
425399
|
*
|
|
@@ -425286,63 +425437,23 @@ var init_git_manager = __esm({
|
|
|
425286
425437
|
*/
|
|
425287
425438
|
async *createAndCheckoutBranch(repoPath, branchName) {
|
|
425288
425439
|
try {
|
|
425289
|
-
const
|
|
425290
|
-
|
|
425291
|
-
|
|
425292
|
-
|
|
425293
|
-
|
|
425294
|
-
|
|
425295
|
-
|
|
425296
|
-
let stderrOutput = "";
|
|
425297
|
-
if (gitProcess.stdout) {
|
|
425298
|
-
gitProcess.stdout.on("data", (data) => {
|
|
425299
|
-
const output2 = data.toString();
|
|
425300
|
-
eventQueue.push({
|
|
425301
|
-
type: "stdout",
|
|
425302
|
-
data: output2
|
|
425303
|
-
});
|
|
425304
|
-
});
|
|
425305
|
-
}
|
|
425306
|
-
if (gitProcess.stderr) {
|
|
425307
|
-
gitProcess.stderr.on("data", (data) => {
|
|
425308
|
-
const output2 = data.toString();
|
|
425309
|
-
stderrOutput += output2;
|
|
425310
|
-
eventQueue.push({
|
|
425311
|
-
type: "stderr",
|
|
425312
|
-
data: output2
|
|
425313
|
-
});
|
|
425314
|
-
});
|
|
425315
|
-
}
|
|
425316
|
-
gitProcess.on("close", (code) => {
|
|
425317
|
-
exitCode = code;
|
|
425318
|
-
processExited = true;
|
|
425319
|
-
});
|
|
425320
|
-
gitProcess.on("error", (err2) => {
|
|
425321
|
-
processError = err2;
|
|
425322
|
-
processExited = true;
|
|
425323
|
-
});
|
|
425324
|
-
while (!processExited || eventQueue.length > 0) {
|
|
425325
|
-
if (eventQueue.length > 0) {
|
|
425326
|
-
const event = eventQueue.shift();
|
|
425327
|
-
if (event) {
|
|
425328
|
-
yield event;
|
|
425329
|
-
}
|
|
425330
|
-
} else {
|
|
425331
|
-
await new Promise((resolve18) => setTimeout(resolve18, 10));
|
|
425332
|
-
}
|
|
425333
|
-
}
|
|
425334
|
-
if (processError) {
|
|
425335
|
-
const errorMessage2 = processError instanceof Error ? processError.message : JSON.stringify(processError);
|
|
425440
|
+
const result = yield* this.spawnGitStreaming(
|
|
425441
|
+
["checkout", "-b", branchName],
|
|
425442
|
+
void 0,
|
|
425443
|
+
repoPath
|
|
425444
|
+
);
|
|
425445
|
+
if (result.processError) {
|
|
425446
|
+
const errorMessage2 = result.processError instanceof Error ? result.processError.message : JSON.stringify(result.processError);
|
|
425336
425447
|
yield {
|
|
425337
425448
|
type: "error",
|
|
425338
425449
|
message: errorMessage2,
|
|
425339
|
-
error: processError
|
|
425450
|
+
error: result.processError
|
|
425340
425451
|
};
|
|
425341
425452
|
return;
|
|
425342
425453
|
}
|
|
425343
|
-
if (
|
|
425344
|
-
const detail =
|
|
425345
|
-
const errorMsg = `Failed to create and checkout branch '${branchName}' with exit code ${exitCode}${detail ? `: ${detail}` : ""}`;
|
|
425454
|
+
if (!result.ok) {
|
|
425455
|
+
const detail = result.stderr.trim();
|
|
425456
|
+
const errorMsg = `Failed to create and checkout branch '${branchName}' with exit code ${result.exitCode}${detail ? `: ${detail}` : ""}`;
|
|
425346
425457
|
yield {
|
|
425347
425458
|
type: "error",
|
|
425348
425459
|
message: errorMsg,
|