@wrongstack/tools 0.292.1 → 0.295.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/_env.d.ts +1 -1
- package/dist/_env.d.ts.map +1 -1
- package/dist/_fetch-guard.d.ts.map +1 -1
- package/dist/_spawn-stream.d.ts +1 -1
- package/dist/_spawn-stream.d.ts.map +1 -1
- package/dist/_util.d.ts +1 -1
- package/dist/_util.d.ts.map +1 -1
- package/dist/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +81 -16
- package/dist/audit.js.map +2 -2
- package/dist/bash.d.ts +1 -1
- package/dist/bash.d.ts.map +1 -1
- package/dist/bash.js +66 -52
- package/dist/bash.js.map +3 -3
- package/dist/batch-tool-use.d.ts +1 -1
- package/dist/batch-tool-use.d.ts.map +1 -1
- package/dist/batch-tool-use.js +1 -1
- package/dist/batch-tool-use.js.map +1 -1
- package/dist/browser/index.js +10 -1
- package/dist/browser/index.js.map +2 -2
- package/dist/browser/manager.d.ts +2 -0
- package/dist/browser/manager.d.ts.map +1 -1
- package/dist/browser/tools.d.ts +1 -1
- package/dist/browser/tools.d.ts.map +1 -1
- package/dist/builtin.d.ts +1 -1
- package/dist/builtin.d.ts.map +1 -1
- package/dist/builtin.js +1394 -553
- package/dist/builtin.js.map +4 -4
- package/dist/codebase-index/background-indexer.d.ts +2 -2
- package/dist/codebase-index/background-indexer.d.ts.map +1 -1
- package/dist/codebase-index/bm25.d.ts +3 -1
- package/dist/codebase-index/bm25.d.ts.map +1 -1
- package/dist/codebase-index/codebase-index-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-index-tool.d.ts.map +1 -1
- package/dist/codebase-index/codebase-search-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-search-tool.d.ts.map +1 -1
- package/dist/codebase-index/codebase-stats-tool.d.ts +1 -1
- package/dist/codebase-index/codebase-stats-tool.d.ts.map +1 -1
- package/dist/codebase-index/generic-parser.d.ts +34 -0
- package/dist/codebase-index/generic-parser.d.ts.map +1 -0
- package/dist/codebase-index/go-parser.d.ts +1 -1
- package/dist/codebase-index/go-parser.d.ts.map +1 -1
- package/dist/codebase-index/index.d.ts +4 -2
- package/dist/codebase-index/index.d.ts.map +1 -1
- package/dist/codebase-index/index.js +1036 -341
- package/dist/codebase-index/index.js.map +4 -4
- package/dist/codebase-index/indexer.d.ts +6 -1
- package/dist/codebase-index/indexer.d.ts.map +1 -1
- package/dist/codebase-index/json-parser.d.ts +1 -1
- package/dist/codebase-index/languages.d.ts +25 -0
- package/dist/codebase-index/languages.d.ts.map +1 -0
- package/dist/codebase-index/py-parser.d.ts +9 -1
- package/dist/codebase-index/py-parser.d.ts.map +1 -1
- package/dist/codebase-index/refs-extractor.d.ts.map +1 -1
- package/dist/codebase-index/rs-parser.d.ts +1 -1
- package/dist/codebase-index/rs-parser.d.ts.map +1 -1
- package/dist/codebase-index/schema.d.ts +9 -2
- package/dist/codebase-index/schema.d.ts.map +1 -1
- package/dist/codebase-index/spawn-gate.d.ts +15 -0
- package/dist/codebase-index/spawn-gate.d.ts.map +1 -0
- package/dist/codebase-index/ts-parser.d.ts +2 -2
- package/dist/codebase-index/ts-parser.d.ts.map +1 -1
- package/dist/codebase-index/worker.js +961 -317
- package/dist/codebase-index/worker.js.map +4 -4
- package/dist/codebase-index/writer.d.ts +83 -4
- package/dist/codebase-index/writer.d.ts.map +1 -1
- package/dist/codebase-index/yaml-parser.d.ts +1 -1
- package/dist/design.d.ts +5 -2
- package/dist/design.d.ts.map +1 -1
- package/dist/design.js +36 -3
- package/dist/design.js.map +2 -2
- package/dist/diff.d.ts +1 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +2 -2
- package/dist/diff.js.map +1 -1
- package/dist/document.d.ts +1 -1
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +1 -1
- package/dist/document.js.map +1 -1
- package/dist/e2e.d.ts +1 -1
- package/dist/e2e.d.ts.map +1 -1
- package/dist/e2e.js +1 -1
- package/dist/e2e.js.map +1 -1
- package/dist/edit.d.ts +1 -1
- package/dist/edit.d.ts.map +1 -1
- package/dist/edit.js +3 -3
- package/dist/edit.js.map +2 -2
- package/dist/exec.d.ts +1 -1
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +60 -21
- package/dist/exec.js.map +3 -3
- package/dist/fetch.d.ts +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +4 -5
- package/dist/fetch.js.map +2 -2
- package/dist/format.d.ts +1 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +81 -16
- package/dist/format.js.map +2 -2
- package/dist/git.d.ts +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +3 -2
- package/dist/git.js.map +2 -2
- package/dist/glob.d.ts +1 -1
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +2 -2
- package/dist/glob.js.map +1 -1
- package/dist/grep.d.ts +1 -1
- package/dist/grep.d.ts.map +1 -1
- package/dist/grep.js +4 -3
- package/dist/grep.js.map +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1657 -705
- package/dist/index.js.map +4 -4
- package/dist/install.d.ts +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +85 -17
- package/dist/install.js.map +2 -2
- package/dist/json.d.ts +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +2 -2
- package/dist/json.js.map +2 -2
- package/dist/kanban.d.ts +4 -3
- package/dist/kanban.d.ts.map +1 -1
- package/dist/kanban.js +94 -27
- package/dist/kanban.js.map +2 -2
- package/dist/languages/execute-tool.d.ts +1 -1
- package/dist/languages/execute-tool.d.ts.map +1 -1
- package/dist/languages/execute.d.ts +1 -1
- package/dist/languages/execute.d.ts.map +1 -1
- package/dist/languages/index.d.ts +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +99 -17
- package/dist/languages/index.js.map +2 -2
- package/dist/languages/package-tool.d.ts +3 -4
- package/dist/languages/package-tool.d.ts.map +1 -1
- package/dist/languages/plan.d.ts.map +1 -1
- package/dist/languages/profiles/additional.d.ts.map +1 -1
- package/dist/languages/profiles/primary.d.ts.map +1 -1
- package/dist/languages/tool.d.ts +1 -1
- package/dist/languages/tool.d.ts.map +1 -1
- package/dist/lint.d.ts +1 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +81 -16
- package/dist/lint.js.map +2 -2
- package/dist/logs.d.ts +1 -1
- package/dist/logs.d.ts.map +1 -1
- package/dist/logs.js +2 -2
- package/dist/logs.js.map +1 -1
- package/dist/memory.d.ts +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +1 -1
- package/dist/memory.js.map +1 -1
- package/dist/mode.d.ts +1 -1
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js.map +1 -1
- package/dist/outdated.d.ts +1 -1
- package/dist/outdated.d.ts.map +1 -1
- package/dist/outdated.js +101 -19
- package/dist/outdated.js.map +2 -2
- package/dist/pack.d.ts +1 -1
- package/dist/pack.js +1394 -553
- package/dist/pack.js.map +4 -4
- package/dist/patch.d.ts +1 -1
- package/dist/patch.d.ts.map +1 -1
- package/dist/patch.js +2 -2
- package/dist/patch.js.map +1 -1
- package/dist/plan.d.ts +1 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +7 -7
- package/dist/plan.js.map +2 -2
- package/dist/process-guardian.d.ts +7 -0
- package/dist/process-guardian.d.ts.map +1 -1
- package/dist/process-registry-persistent.d.ts +5 -0
- package/dist/process-registry-persistent.d.ts.map +1 -1
- package/dist/process-registry.d.ts +9 -1
- package/dist/process-registry.d.ts.map +1 -1
- package/dist/process-registry.js +18 -3
- package/dist/process-registry.js.map +2 -2
- package/dist/ps-slash.js +54 -15
- package/dist/ps-slash.js.map +2 -2
- package/dist/read.d.ts +1 -1
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +3 -2
- package/dist/read.js.map +2 -2
- package/dist/replace.d.ts +1 -1
- package/dist/replace.d.ts.map +1 -1
- package/dist/replace.js +4 -4
- package/dist/replace.js.map +2 -2
- package/dist/scaffold.d.ts +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +2 -2
- package/dist/scaffold.js.map +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +4 -4
- package/dist/search.js.map +2 -2
- package/dist/session-kanban.d.ts +4 -1
- package/dist/session-kanban.d.ts.map +1 -1
- package/dist/session-kanban.js +23 -15
- package/dist/session-kanban.js.map +2 -2
- package/dist/set-working-dir.d.ts +1 -1
- package/dist/set-working-dir.d.ts.map +1 -1
- package/dist/skill.d.ts +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +2 -5
- package/dist/skill.js.map +2 -2
- package/dist/spawn-background.d.ts.map +1 -1
- package/dist/task.d.ts +3 -2
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +6 -8
- package/dist/task.js.map +2 -2
- package/dist/test.d.ts +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +81 -16
- package/dist/test.js.map +2 -2
- package/dist/todo.d.ts +2 -1
- package/dist/todo.d.ts.map +1 -1
- package/dist/todo.js +4 -4
- package/dist/todo.js.map +2 -2
- package/dist/tool-help.d.ts +1 -1
- package/dist/tool-help.d.ts.map +1 -1
- package/dist/tool-help.js.map +1 -1
- package/dist/tool-search.d.ts +1 -1
- package/dist/tool-search.d.ts.map +1 -1
- package/dist/tool-search.js.map +1 -1
- package/dist/tool-tier.d.ts +16 -0
- package/dist/tool-tier.d.ts.map +1 -0
- package/dist/tool-tier.js +22233 -0
- package/dist/tool-tier.js.map +7 -0
- package/dist/tool-use.d.ts +1 -1
- package/dist/tool-use.d.ts.map +1 -1
- package/dist/tool-use.js.map +1 -1
- package/dist/tree.d.ts +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +2 -2
- package/dist/tree.js.map +1 -1
- package/dist/typecheck.d.ts +1 -1
- package/dist/typecheck.d.ts.map +1 -1
- package/dist/typecheck.js +81 -16
- package/dist/typecheck.js.map +2 -2
- package/dist/write.d.ts +1 -1
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +3 -2
- package/dist/write.js.map +2 -2
- package/package.json +7 -3
package/dist/test.js
CHANGED
|
@@ -4,17 +4,17 @@ import * as path9 from "node:path";
|
|
|
4
4
|
// src/_spawn-stream.ts
|
|
5
5
|
import { spawn as spawn2 } from "node:child_process";
|
|
6
6
|
import {
|
|
7
|
-
buildChildEnv,
|
|
8
7
|
emitProcessCompleted,
|
|
9
8
|
emitProcessOutput,
|
|
10
9
|
emitProcessStarted
|
|
11
|
-
} from "@wrongstack/core";
|
|
10
|
+
} from "@wrongstack/core/observability";
|
|
11
|
+
import { buildChildEnv } from "@wrongstack/core/utils";
|
|
12
12
|
|
|
13
13
|
// src/_output-spool.ts
|
|
14
14
|
import { createWriteStream, mkdirSync } from "node:fs";
|
|
15
15
|
import * as fsp from "node:fs/promises";
|
|
16
16
|
import * as path from "node:path";
|
|
17
|
-
import { wstackGlobalRoot } from "@wrongstack/core";
|
|
17
|
+
import { wstackGlobalRoot } from "@wrongstack/core/utils";
|
|
18
18
|
var SPOOL_RETENTION_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
19
19
|
var SPOOL_WRITE_HWM_BYTES = 4 * 1024 * 1024;
|
|
20
20
|
var sweepStarted = false;
|
|
@@ -314,7 +314,7 @@ var CircuitBreaker = class {
|
|
|
314
314
|
};
|
|
315
315
|
|
|
316
316
|
// src/_redact-command.ts
|
|
317
|
-
import { expectDefined } from "@wrongstack/core";
|
|
317
|
+
import { expectDefined } from "@wrongstack/core/utils";
|
|
318
318
|
var SENSITIVE_FLAG_PATTERNS = [
|
|
319
319
|
// --flag=value or --flag "value" (value captured up to next space or comma)
|
|
320
320
|
/--(?:token|password|passwd|pwd|secret|api[-_]?key|api[-_]?secret|auth|credential|private[-_]?key|access[-_]?key|github[-_]?token|gh[-_]?token|bearer|jwt|oauth|pin|pincode|passphrase|access[-_]?token)(?:[=\s,][^\s]*)?/gi,
|
|
@@ -408,7 +408,12 @@ var ProcessRegistryImpl = class {
|
|
|
408
408
|
this.breaker.setEnabled(false);
|
|
409
409
|
}
|
|
410
410
|
register(info) {
|
|
411
|
-
this.processes.set(info.pid, {
|
|
411
|
+
this.processes.set(info.pid, {
|
|
412
|
+
...info,
|
|
413
|
+
killed: false,
|
|
414
|
+
protected: info.protected ?? false,
|
|
415
|
+
background: info.background ?? false
|
|
416
|
+
});
|
|
412
417
|
}
|
|
413
418
|
_isSafeSignalPid(pid) {
|
|
414
419
|
return Number.isInteger(pid) && pid > 1 && pid !== process.pid && pid !== process.ppid;
|
|
@@ -461,12 +466,21 @@ var ProcessRegistryImpl = class {
|
|
|
461
466
|
}
|
|
462
467
|
return n;
|
|
463
468
|
}
|
|
469
|
+
/** Count of active jobs explicitly launched in background mode. */
|
|
470
|
+
get activeBackgroundCount() {
|
|
471
|
+
let n = 0;
|
|
472
|
+
for (const p of this.processes.values()) {
|
|
473
|
+
if (p.background && !p.killed) n++;
|
|
474
|
+
}
|
|
475
|
+
return n;
|
|
476
|
+
}
|
|
464
477
|
/**
|
|
465
478
|
* Combined stats for observability — used by /ps and the TUI status bar.
|
|
466
479
|
*/
|
|
467
480
|
stats() {
|
|
468
481
|
return {
|
|
469
482
|
activeCount: this.activeCount,
|
|
483
|
+
backgroundCount: this.activeBackgroundCount,
|
|
470
484
|
totalCount: this.processes.size,
|
|
471
485
|
breaker: this.breaker.snapshot()
|
|
472
486
|
};
|
|
@@ -567,7 +581,7 @@ var ProcessRegistryImpl = class {
|
|
|
567
581
|
this.autoKillTimer = setTimeout(() => {
|
|
568
582
|
this.autoKillTimer = null;
|
|
569
583
|
this.autoKillArmedAt = null;
|
|
570
|
-
this.killAll({ force: false });
|
|
584
|
+
this.killAll({ force: false, preserveBackground: true });
|
|
571
585
|
this.breaker.forceReset();
|
|
572
586
|
this._emitBreakerCountdown();
|
|
573
587
|
}, this.autoKillResetMs);
|
|
@@ -607,6 +621,7 @@ var ProcessRegistryImpl = class {
|
|
|
607
621
|
if (!p) return false;
|
|
608
622
|
if (p.killed) return true;
|
|
609
623
|
if (p.protected) return false;
|
|
624
|
+
if (opts.preserveBackground && p.background) return false;
|
|
610
625
|
const { force = false, graceMs = DEFAULT_GRACE_MS } = opts;
|
|
611
626
|
const isWin2 = os.platform() === "win32";
|
|
612
627
|
if (isWin2) {
|
|
@@ -958,7 +973,7 @@ async function* spawnStream(opts) {
|
|
|
958
973
|
|
|
959
974
|
// src/_util.ts
|
|
960
975
|
import * as path3 from "node:path";
|
|
961
|
-
import * as Core from "@wrongstack/core";
|
|
976
|
+
import * as Core from "@wrongstack/core/utils";
|
|
962
977
|
function resolvePath(input, ctx) {
|
|
963
978
|
return path3.isAbsolute(input) ? path3.normalize(input) : path3.resolve(ctx.workingDir ?? ctx.cwd, input);
|
|
964
979
|
}
|
|
@@ -1144,7 +1159,20 @@ function pythonProfile() {
|
|
|
1144
1159
|
]),
|
|
1145
1160
|
ignoredDirectories: IGNORES,
|
|
1146
1161
|
packageManagers: Object.freeze(["pip", "poetry", "pipenv", "uv"]),
|
|
1147
|
-
executables: Object.freeze([
|
|
1162
|
+
executables: Object.freeze([
|
|
1163
|
+
"python",
|
|
1164
|
+
"python3",
|
|
1165
|
+
"pip",
|
|
1166
|
+
"pip3",
|
|
1167
|
+
"poetry",
|
|
1168
|
+
"pipenv",
|
|
1169
|
+
"uv",
|
|
1170
|
+
"ruff",
|
|
1171
|
+
"black",
|
|
1172
|
+
"pytest",
|
|
1173
|
+
"mypy",
|
|
1174
|
+
"pyright"
|
|
1175
|
+
]),
|
|
1148
1176
|
operations: Object.freeze({
|
|
1149
1177
|
syntax: async (ctx) => {
|
|
1150
1178
|
const py = ctx.options.target ? "python3" : "python3";
|
|
@@ -1204,6 +1232,14 @@ function pythonProfile() {
|
|
|
1204
1232
|
network: true
|
|
1205
1233
|
});
|
|
1206
1234
|
},
|
|
1235
|
+
"package-remove": async (ctx) => {
|
|
1236
|
+
const names = packageNames(ctx);
|
|
1237
|
+
return names.length === 0 ? unavailable(ctx, "package-remove", "At least one package name is required.") : processPlan(ctx, "package-remove", "pip", ["uninstall", "--yes", ...names], {
|
|
1238
|
+
parser: "package-text",
|
|
1239
|
+
reason: "Remove validated Python packages.",
|
|
1240
|
+
mutating: true
|
|
1241
|
+
});
|
|
1242
|
+
},
|
|
1207
1243
|
"package-audit": async (ctx) => processPlan(ctx, "package-audit", "pip", ["audit"], {
|
|
1208
1244
|
parser: "pip-audit",
|
|
1209
1245
|
reason: "Audit Python dependencies for vulnerabilities.",
|
|
@@ -1811,6 +1847,19 @@ function typescriptProfile() {
|
|
|
1811
1847
|
network: true
|
|
1812
1848
|
});
|
|
1813
1849
|
},
|
|
1850
|
+
"package-remove": async (ctx) => {
|
|
1851
|
+
const names = packageNames(ctx);
|
|
1852
|
+
if (names.length === 0)
|
|
1853
|
+
return unavailable(ctx, "package-remove", "At least one package name is required.");
|
|
1854
|
+
const manager = ctx.workspace.packageManager ?? "npm";
|
|
1855
|
+
const args = manager === "npm" ? ["uninstall", "--ignore-scripts", ...names] : ["remove", "--ignore-scripts", ...names];
|
|
1856
|
+
return processPlan(ctx, "package-remove", manager, args, {
|
|
1857
|
+
parser: "package-text",
|
|
1858
|
+
reason: `Remove validated packages with ${manager} and lifecycle scripts disabled.`,
|
|
1859
|
+
mutating: true,
|
|
1860
|
+
network: true
|
|
1861
|
+
});
|
|
1862
|
+
},
|
|
1814
1863
|
"package-audit": async (ctx) => {
|
|
1815
1864
|
const manager = ctx.workspace.packageManager ?? "npm";
|
|
1816
1865
|
return processPlan(ctx, "package-audit", manager, ["audit", "--json"], {
|
|
@@ -2246,13 +2295,28 @@ var csharpProfile = {
|
|
|
2246
2295
|
}),
|
|
2247
2296
|
"package-add": async (ctx) => {
|
|
2248
2297
|
const names = packageNames(ctx);
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2298
|
+
const [spec] = names;
|
|
2299
|
+
const versionAt = spec?.lastIndexOf("@") ?? -1;
|
|
2300
|
+
const packageName = versionAt > 0 ? spec?.slice(0, versionAt) : spec;
|
|
2301
|
+
const packageVersion = versionAt > 0 ? spec?.slice(versionAt + 1) : void 0;
|
|
2302
|
+
return names.length === 0 ? unavailable(ctx, "package-add", "At least one NuGet package is required.") : names.length > 1 ? unavailable(ctx, "package-add", "NuGet package changes run one package at a time.") : processPlan(
|
|
2303
|
+
ctx,
|
|
2304
|
+
"package-add",
|
|
2305
|
+
"dotnet",
|
|
2306
|
+
[
|
|
2307
|
+
"add",
|
|
2308
|
+
"package",
|
|
2309
|
+
packageName ?? "",
|
|
2310
|
+
...packageVersion ? ["--version", packageVersion] : []
|
|
2311
|
+
],
|
|
2312
|
+
{
|
|
2313
|
+
parser: "dotnet-package",
|
|
2314
|
+
reason: "Add validated NuGet packages.",
|
|
2315
|
+
mutating: true,
|
|
2316
|
+
network: true,
|
|
2317
|
+
executesProjectCode: true
|
|
2318
|
+
}
|
|
2319
|
+
);
|
|
2256
2320
|
},
|
|
2257
2321
|
"package-remove": async (ctx) => {
|
|
2258
2322
|
const names = packageNames(ctx);
|
|
@@ -2906,6 +2970,7 @@ var MAX_ARGUMENT_LENGTH = 4096;
|
|
|
2906
2970
|
var PACKAGE_NAME_RE = /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+(?:@[a-z0-9*+._~^<>=|-]+)?$/i;
|
|
2907
2971
|
var COMPOSER_PACKAGE_RE = /^[a-z0-9_.-]+\/[a-z0-9_.-]+(?::[a-z0-9*+._~^<>=|-]+)?$/i;
|
|
2908
2972
|
var GO_MODULE_RE = /^(?:[a-z0-9.-]+\.)+[a-z0-9.-]+\/[a-z0-9._~+/@-]+$/i;
|
|
2973
|
+
var PYTHON_PACKAGE_RE = /^[a-z0-9._-]+(?:\[[a-z0-9._,-]+\])?==[a-z0-9*+._!~-]+$/i;
|
|
2909
2974
|
async function planLanguageOperation(options) {
|
|
2910
2975
|
validateOperationOptions(options.operation, options.operationOptions?.packages);
|
|
2911
2976
|
const detection = await detectLanguageWorkspaces(options);
|
|
@@ -3089,7 +3154,7 @@ function validateOperationOptions(operation, packages) {
|
|
|
3089
3154
|
if (value.startsWith(".") || value.startsWith("/") || /^[A-Za-z]:/.test(value) || value.includes("://")) {
|
|
3090
3155
|
throw new Error(`Package paths and URLs are not supported: "${value}"`);
|
|
3091
3156
|
}
|
|
3092
|
-
if (!PACKAGE_NAME_RE.test(value) && !COMPOSER_PACKAGE_RE.test(value) && !GO_MODULE_RE.test(value)) {
|
|
3157
|
+
if (!PACKAGE_NAME_RE.test(value) && !COMPOSER_PACKAGE_RE.test(value) && !GO_MODULE_RE.test(value) && !PYTHON_PACKAGE_RE.test(value)) {
|
|
3093
3158
|
throw new Error(`Invalid package identifier "${value}"`);
|
|
3094
3159
|
}
|
|
3095
3160
|
}
|