@nodetool-ai/cli 0.8.3 → 0.8.4-a24.2
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/.nodetool-build-stamp +1 -1
- package/dist/app-debug/harness.js +1 -1
- package/dist/app-debug/harness.js.map +1 -1
- package/dist/command-errors.d.ts +7 -9
- package/dist/command-errors.d.ts.map +1 -1
- package/dist/command-errors.js +36 -2
- package/dist/command-errors.js.map +1 -1
- package/dist/commands/__tests__/jtbd.test.js +1 -1
- package/dist/commands/__tests__/jtbd.test.js.map +1 -1
- package/dist/commands/__tests__/runtime.test.d.ts +2 -0
- package/dist/commands/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/commands/__tests__/runtime.test.js +128 -0
- package/dist/commands/__tests__/runtime.test.js.map +1 -0
- package/dist/commands/agent.js +1 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +3 -5
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/apps.d.ts.map +1 -1
- package/dist/commands/apps.js +20 -20
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/authorized-pack-install.d.ts +7 -0
- package/dist/commands/authorized-pack-install.d.ts.map +1 -0
- package/dist/commands/authorized-pack-install.js +20 -0
- package/dist/commands/authorized-pack-install.js.map +1 -0
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +15 -3
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/eval.js +2 -2
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/game-benchmark.d.ts +4 -0
- package/dist/commands/game-benchmark.d.ts.map +1 -1
- package/dist/commands/game-benchmark.js +8 -0
- package/dist/commands/game-benchmark.js.map +1 -1
- package/dist/commands/game-smoke.d.ts.map +1 -1
- package/dist/commands/game-smoke.js +3 -3
- package/dist/commands/game-smoke.js.map +1 -1
- package/dist/commands/game.d.ts.map +1 -1
- package/dist/commands/game.js +72 -25
- package/dist/commands/game.js.map +1 -1
- package/dist/commands/harness.d.ts +21 -0
- package/dist/commands/harness.d.ts.map +1 -1
- package/dist/commands/harness.js +198 -10
- package/dist/commands/harness.js.map +1 -1
- package/dist/commands/install-missing-packs.d.ts +21 -0
- package/dist/commands/install-missing-packs.d.ts.map +1 -0
- package/dist/commands/install-missing-packs.js +48 -0
- package/dist/commands/install-missing-packs.js.map +1 -0
- package/dist/commands/js-script.d.ts.map +1 -1
- package/dist/commands/js-script.js +11 -9
- package/dist/commands/js-script.js.map +1 -1
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +15 -3
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/pack-install-authorization.d.ts +40 -0
- package/dist/commands/pack-install-authorization.d.ts.map +1 -0
- package/dist/commands/pack-install-authorization.js +131 -0
- package/dist/commands/pack-install-authorization.js.map +1 -0
- package/dist/commands/pack-management.d.ts +26 -0
- package/dist/commands/pack-management.d.ts.map +1 -0
- package/dist/commands/pack-management.js +74 -0
- package/dist/commands/pack-management.js.map +1 -0
- package/dist/commands/packs.d.ts +2 -1
- package/dist/commands/packs.d.ts.map +1 -1
- package/dist/commands/packs.js +7 -2
- package/dist/commands/packs.js.map +1 -1
- package/dist/commands/projects.d.ts +11 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +145 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/resource-read.d.ts.map +1 -1
- package/dist/commands/resource-read.js +6 -12
- package/dist/commands/resource-read.js.map +1 -1
- package/dist/commands/runs.js +1 -1
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/runtime.d.ts +3 -0
- package/dist/commands/runtime.d.ts.map +1 -0
- package/dist/commands/runtime.js +122 -0
- package/dist/commands/runtime.js.map +1 -0
- package/dist/commands/sketch.d.ts.map +1 -1
- package/dist/commands/sketch.js +2 -4
- package/dist/commands/sketch.js.map +1 -1
- package/dist/commands/timeline-render.d.ts +0 -10
- package/dist/commands/timeline-render.d.ts.map +1 -1
- package/dist/commands/timeline-render.js +18 -8
- package/dist/commands/timeline-render.js.map +1 -1
- package/dist/commands/timeline-score.d.ts.map +1 -1
- package/dist/commands/timeline-score.js +1 -2
- package/dist/commands/timeline-score.js.map +1 -1
- package/dist/commands/timeline.d.ts.map +1 -1
- package/dist/commands/timeline.js +2 -4
- package/dist/commands/timeline.js.map +1 -1
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +8 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version-commands.d.ts.map +1 -1
- package/dist/commands/version-commands.js +5 -10
- package/dist/commands/version-commands.js.map +1 -1
- package/dist/debug/server-runner.d.ts.map +1 -1
- package/dist/debug/server-runner.js +7 -1
- package/dist/debug/server-runner.js.map +1 -1
- package/dist/debug/target.d.ts.map +1 -1
- package/dist/debug/target.js +2 -11
- package/dist/debug/target.js.map +1 -1
- package/dist/evals/graph-runner.d.ts +1 -1
- package/dist/evals/graph-runner.d.ts.map +1 -1
- package/dist/evals/graph-runner.js +2 -2
- package/dist/evals/graph-runner.js.map +1 -1
- package/dist/harness/capability-table.d.ts.map +1 -1
- package/dist/harness/capability-table.js +17 -9
- package/dist/harness/capability-table.js.map +1 -1
- package/dist/harness/registry.d.ts.map +1 -1
- package/dist/harness/registry.js +131 -2
- package/dist/harness/registry.js.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/install-lock.d.ts +12 -0
- package/dist/install-lock.d.ts.map +1 -0
- package/dist/install-lock.js +139 -0
- package/dist/install-lock.js.map +1 -0
- package/dist/js-script-debug/harness.d.ts +4 -0
- package/dist/js-script-debug/harness.d.ts.map +1 -1
- package/dist/js-script-debug/harness.js.map +1 -1
- package/dist/node/run-node.d.ts +3 -0
- package/dist/node/run-node.d.ts.map +1 -1
- package/dist/node/run-node.js +18 -2
- package/dist/node/run-node.js.map +1 -1
- package/dist/node-registry.d.ts +6 -4
- package/dist/node-registry.d.ts.map +1 -1
- package/dist/node-registry.js +10 -5
- package/dist/node-registry.js.map +1 -1
- package/dist/nodetool-main.js +57 -62
- package/dist/nodetool-main.js.map +1 -1
- package/dist/nodetool.js +8 -1
- package/dist/nodetool.js.map +1 -1
- package/dist/npm-runner.d.ts +23 -0
- package/dist/npm-runner.d.ts.map +1 -0
- package/dist/npm-runner.js +160 -0
- package/dist/npm-runner.js.map +1 -0
- package/dist/optional-node-root.d.ts +10 -0
- package/dist/optional-node-root.d.ts.map +1 -0
- package/dist/optional-node-root.js +26 -0
- package/dist/optional-node-root.js.map +1 -0
- package/dist/packs/command-service.d.ts +14 -0
- package/dist/packs/command-service.d.ts.map +1 -0
- package/dist/packs/command-service.js +190 -0
- package/dist/packs/command-service.js.map +1 -0
- package/dist/packs/doctor-lock.d.ts +8 -0
- package/dist/packs/doctor-lock.d.ts.map +1 -0
- package/dist/packs/doctor-lock.js +50 -0
- package/dist/packs/doctor-lock.js.map +1 -0
- package/dist/packs/doctor.d.ts +25 -0
- package/dist/packs/doctor.d.ts.map +1 -0
- package/dist/packs/doctor.js +12 -0
- package/dist/packs/doctor.js.map +1 -0
- package/dist/packs/global-bootstrap.d.ts +11 -0
- package/dist/packs/global-bootstrap.d.ts.map +1 -0
- package/dist/packs/global-bootstrap.js +72 -0
- package/dist/packs/global-bootstrap.js.map +1 -0
- package/dist/packs/host.d.ts +17 -0
- package/dist/packs/host.d.ts.map +1 -0
- package/dist/packs/host.js +79 -0
- package/dist/packs/host.js.map +1 -0
- package/dist/packs/install-manifests.d.ts +2 -0
- package/dist/packs/install-manifests.d.ts.map +1 -0
- package/dist/packs/install-manifests.js +30 -0
- package/dist/packs/install-manifests.js.map +1 -0
- package/dist/packs/install-process.d.ts +4 -0
- package/dist/packs/install-process.d.ts.map +1 -0
- package/dist/packs/install-process.js +11 -0
- package/dist/packs/install-process.js.map +1 -0
- package/dist/packs/install-selection.d.ts +39 -0
- package/dist/packs/install-selection.d.ts.map +1 -0
- package/dist/packs/install-selection.js +67 -0
- package/dist/packs/install-selection.js.map +1 -0
- package/dist/packs/install-state.d.ts +21 -0
- package/dist/packs/install-state.d.ts.map +1 -0
- package/dist/packs/install-state.js +44 -0
- package/dist/packs/install-state.js.map +1 -0
- package/dist/packs/install-tree.d.ts +35 -0
- package/dist/packs/install-tree.d.ts.map +1 -0
- package/dist/packs/install-tree.js +253 -0
- package/dist/packs/install-tree.js.map +1 -0
- package/dist/packs/install-verification.d.ts +12 -0
- package/dist/packs/install-verification.d.ts.map +1 -0
- package/dist/packs/install-verification.js +76 -0
- package/dist/packs/install-verification.js.map +1 -0
- package/dist/packs/installed.d.ts +36 -0
- package/dist/packs/installed.d.ts.map +1 -0
- package/dist/packs/installed.js +87 -0
- package/dist/packs/installed.js.map +1 -0
- package/dist/packs/installer-load-check.d.ts +4 -0
- package/dist/packs/installer-load-check.d.ts.map +1 -0
- package/dist/packs/installer-load-check.js +52 -0
- package/dist/packs/installer-load-check.js.map +1 -0
- package/dist/packs/installer.d.ts +16 -0
- package/dist/packs/installer.d.ts.map +1 -0
- package/dist/packs/installer.js +142 -0
- package/dist/packs/installer.js.map +1 -0
- package/dist/packs/management.d.ts +51 -0
- package/dist/packs/management.d.ts.map +1 -0
- package/dist/packs/management.js +81 -0
- package/dist/packs/management.js.map +1 -0
- package/dist/packs/mode.d.ts +42 -0
- package/dist/packs/mode.d.ts.map +1 -0
- package/dist/packs/mode.js +215 -0
- package/dist/packs/mode.js.map +1 -0
- package/dist/packs/owned-replay-plan.d.ts +5 -0
- package/dist/packs/owned-replay-plan.d.ts.map +1 -0
- package/dist/packs/owned-replay-plan.js +68 -0
- package/dist/packs/owned-replay-plan.js.map +1 -0
- package/dist/packs/removal-selection.d.ts +12 -0
- package/dist/packs/removal-selection.d.ts.map +1 -0
- package/dist/packs/removal-selection.js +169 -0
- package/dist/packs/removal-selection.js.map +1 -0
- package/dist/packs/removal.d.ts +12 -0
- package/dist/packs/removal.d.ts.map +1 -0
- package/dist/packs/removal.js +138 -0
- package/dist/packs/removal.js.map +1 -0
- package/dist/packs/repair.d.ts +2 -0
- package/dist/packs/repair.d.ts.map +1 -0
- package/dist/packs/repair.js +2 -0
- package/dist/packs/repair.js.map +1 -0
- package/dist/packs/serve.d.ts +2 -0
- package/dist/packs/serve.d.ts.map +1 -0
- package/dist/packs/serve.js +14 -0
- package/dist/packs/serve.js.map +1 -0
- package/dist/providers.d.ts +1 -1
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +42 -6
- package/dist/providers.js.map +1 -1
- package/dist/run-dsl-supervised.d.ts.map +1 -1
- package/dist/run-dsl-supervised.js +8 -1
- package/dist/run-dsl-supervised.js.map +1 -1
- package/dist/runtime-env.d.ts +4 -0
- package/dist/runtime-env.d.ts.map +1 -0
- package/dist/runtime-env.js +31 -0
- package/dist/runtime-env.js.map +1 -0
- package/dist/sketch-debug/harness.d.ts +1 -1
- package/dist/sketch-debug/harness.d.ts.map +1 -1
- package/dist/sketch-debug/harness.js +2 -7
- package/dist/sketch-debug/harness.js.map +1 -1
- package/dist/validate/index.d.ts +3 -2
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +30 -2
- package/dist/validate/index.js.map +1 -1
- package/dist/workflow-file.d.ts +3 -0
- package/dist/workflow-file.d.ts.map +1 -0
- package/dist/workflow-file.js +176 -0
- package/dist/workflow-file.js.map +1 -0
- package/package.json +34 -41
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, posix, win32 } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
const NPX_REASON = 'Packs need a global or local install. Run "npm install -g @nodetool-ai/cli" or "npm install @nodetool-ai/cli" in a project.';
|
|
6
|
+
const DEV_REASON = "Node packs are workspaces in this checkout. Build the required workspace instead of installing it.";
|
|
7
|
+
const dependenciesSchema = z.record(z.string(), z.string());
|
|
8
|
+
const manifestSchema = z.object({
|
|
9
|
+
name: z.string().optional(),
|
|
10
|
+
version: z.string().min(1).optional(),
|
|
11
|
+
dependencies: dependenciesSchema.optional(),
|
|
12
|
+
devDependencies: dependenciesSchema.optional(),
|
|
13
|
+
optionalDependencies: dependenciesSchema.optional(),
|
|
14
|
+
workspaces: z.union([z.array(z.string()), z.object({ packages: z.array(z.string()) })]).optional()
|
|
15
|
+
});
|
|
16
|
+
function pathKey(path, style) {
|
|
17
|
+
const paths = style === "win32" ? win32 : posix;
|
|
18
|
+
const normalized = paths.normalize(path).replace(/[/\\]+$/, "");
|
|
19
|
+
return style === "win32" ? normalized.toLowerCase() : normalized;
|
|
20
|
+
}
|
|
21
|
+
/** Classify a known package root without filesystem reads or npm subprocesses. */
|
|
22
|
+
export function classifyInstallLayout(layout) {
|
|
23
|
+
const pathStyle = layout.pathStyle ?? "posix";
|
|
24
|
+
const paths = pathStyle === "win32" ? win32 : posix;
|
|
25
|
+
const cliRoot = paths.normalize(layout.cliRoot);
|
|
26
|
+
const segments = pathKey(cliRoot, pathStyle).split(paths.sep);
|
|
27
|
+
const modules = paths.dirname(paths.dirname(cliRoot));
|
|
28
|
+
const npmLayout = pathKey(paths.basename(modules), pathStyle) === "node_modules" &&
|
|
29
|
+
pathKey(paths.basename(paths.dirname(cliRoot)), pathStyle) === "@nodetool-ai";
|
|
30
|
+
const nodeModulesRoot = npmLayout ? modules : null;
|
|
31
|
+
const identity = { cliRoot, coreVersion: layout.coreVersion, pathStyle };
|
|
32
|
+
if (segments.includes("_npx")) {
|
|
33
|
+
return { ...identity, kind: "npx", reason: NPX_REASON, nodeModulesRoot };
|
|
34
|
+
}
|
|
35
|
+
if (segments.includes(".pnpm")) {
|
|
36
|
+
return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported in a pnpm store. Use an npm global or local install.", nodeModulesRoot };
|
|
37
|
+
}
|
|
38
|
+
if (layout.yarnPnp) {
|
|
39
|
+
return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported with Yarn PnP. Use an npm global or local install.", nodeModulesRoot };
|
|
40
|
+
}
|
|
41
|
+
const bunLayout = segments.some((part, index) => part === ".bun" && segments[index + 1] === "install" && segments[index + 2] === "global") ||
|
|
42
|
+
layout.bunGlobalRoots?.some((root) => pathKey(cliRoot, pathStyle).startsWith(pathKey(root, pathStyle) + paths.sep));
|
|
43
|
+
if (bunLayout) {
|
|
44
|
+
return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported in the Bun global directory. Use an npm global or local install.", nodeModulesRoot };
|
|
45
|
+
}
|
|
46
|
+
if (!segments.includes("node_modules")) {
|
|
47
|
+
return { ...identity, kind: "dev", reason: DEV_REASON,
|
|
48
|
+
nodeModulesRoot: layout.workspaceRoot ? paths.join(layout.workspaceRoot, "node_modules") : null };
|
|
49
|
+
}
|
|
50
|
+
if (nodeModulesRoot && layout.globalNodeModulesRoots?.some((root) => pathKey(root, pathStyle) === pathKey(nodeModulesRoot, pathStyle))) {
|
|
51
|
+
return { ...identity, kind: "global", installRoot: cliRoot, nodeModulesRoot: paths.join(cliRoot, "node_modules") };
|
|
52
|
+
}
|
|
53
|
+
if (nodeModulesRoot && layout.projectHasCli) {
|
|
54
|
+
return { ...identity, kind: "local", installRoot: paths.dirname(nodeModulesRoot), nodeModulesRoot };
|
|
55
|
+
}
|
|
56
|
+
return { ...identity, kind: "unsupported", reason: "The project does not list @nodetool-ai/cli as a dependency. Install it explicitly in the project or use an npm global install.", nodeModulesRoot };
|
|
57
|
+
}
|
|
58
|
+
function readManifest(root) {
|
|
59
|
+
const file = join(root, "package.json");
|
|
60
|
+
let content;
|
|
61
|
+
try {
|
|
62
|
+
content = readFileSync(file, "utf8");
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
return manifestSchema.parse(JSON.parse(content));
|
|
72
|
+
}
|
|
73
|
+
catch (cause) {
|
|
74
|
+
throw new Error(`Invalid package manifest: ${file}`, { cause });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function ancestorDirectories(start) {
|
|
78
|
+
const paths = process.platform === "win32" ? win32 : posix;
|
|
79
|
+
const result = [];
|
|
80
|
+
for (let current = start;; current = paths.dirname(current)) {
|
|
81
|
+
result.push(current);
|
|
82
|
+
if (paths.dirname(current) === current) {
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function prefixFromNpmrc() {
|
|
88
|
+
const file = process.env["npm_config_userconfig"] ?? process.env["NPM_CONFIG_USERCONFIG"] ?? join(homedir(), ".npmrc");
|
|
89
|
+
let content;
|
|
90
|
+
try {
|
|
91
|
+
content = readFileSync(file, "utf8");
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
let prefix;
|
|
100
|
+
for (const line of content.split(/\r?\n/)) {
|
|
101
|
+
// npm config sections do not define a top-level global prefix.
|
|
102
|
+
if (line.trimStart().startsWith("[")) {
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
const match = /^\s*prefix\s*=\s*(.*)$/.exec(line);
|
|
106
|
+
if (!match) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const raw = match[1].trim();
|
|
110
|
+
if (raw.startsWith('"') && raw.endsWith('"')) {
|
|
111
|
+
try {
|
|
112
|
+
prefix = z.string().parse(JSON.parse(raw));
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// A malformed prefix is not a reliable global installation root.
|
|
116
|
+
prefix = undefined;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (raw.startsWith("'") && raw.endsWith("'")) {
|
|
120
|
+
prefix = raw.slice(1, -1);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const chars = [];
|
|
124
|
+
for (let index = 0; index < raw.length; index++) {
|
|
125
|
+
const char = raw[index];
|
|
126
|
+
if (char === ";" || char === "#") {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
if (char === "\\" && ["\\", ";", "#"].includes(raw[index + 1])) {
|
|
130
|
+
index++;
|
|
131
|
+
chars.push(raw[index]);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
chars.push(char);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
prefix = chars.join("").trim();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return prefix;
|
|
141
|
+
}
|
|
142
|
+
function defaultGlobalRoots() {
|
|
143
|
+
const paths = process.platform === "win32" ? win32 : posix;
|
|
144
|
+
const roots = process.platform === "win32"
|
|
145
|
+
? [paths.join(paths.dirname(process.execPath), "node_modules")]
|
|
146
|
+
: [paths.resolve(paths.dirname(process.execPath), "../lib/node_modules"), "/usr/local/lib/node_modules", "/usr/lib/node_modules"];
|
|
147
|
+
const prefix = process.env["npm_config_prefix"] ?? process.env["NPM_CONFIG_PREFIX"] ?? prefixFromNpmrc();
|
|
148
|
+
if (prefix) {
|
|
149
|
+
let expanded = prefix.replace(/(?<!\\)\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (original, name) => process.env[name] ?? original);
|
|
150
|
+
if (expanded.startsWith("~/") || expanded.startsWith("~\\")) {
|
|
151
|
+
expanded = paths.join(homedir(), expanded.slice(2));
|
|
152
|
+
}
|
|
153
|
+
roots.push(paths.resolve(expanded, process.platform === "win32" ? "node_modules" : "lib/node_modules"));
|
|
154
|
+
}
|
|
155
|
+
const appData = process.env["APPDATA"];
|
|
156
|
+
if (process.platform === "win32" && appData) {
|
|
157
|
+
roots.push(paths.join(appData, "npm", "node_modules"));
|
|
158
|
+
}
|
|
159
|
+
return roots;
|
|
160
|
+
}
|
|
161
|
+
function canonicalGlobalRoot(root) {
|
|
162
|
+
try {
|
|
163
|
+
return realpathSync(root);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
167
|
+
return root;
|
|
168
|
+
}
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** Resolve the real CLI entry and inspect its layout only when the host requests it. */
|
|
173
|
+
export function detectInstallMode(entryPath, options = {}) {
|
|
174
|
+
const paths = process.platform === "win32" ? win32 : posix;
|
|
175
|
+
const entry = realpathSync(entryPath);
|
|
176
|
+
let cliRoot;
|
|
177
|
+
let coreVersion;
|
|
178
|
+
for (const directory of ancestorDirectories(paths.dirname(entry))) {
|
|
179
|
+
const manifest = readManifest(directory);
|
|
180
|
+
if (manifest?.name === "@nodetool-ai/cli") {
|
|
181
|
+
if (!manifest.version) {
|
|
182
|
+
throw new Error(`CLI package has no version: ${directory}`);
|
|
183
|
+
}
|
|
184
|
+
cliRoot = directory;
|
|
185
|
+
coreVersion = manifest.version;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (!cliRoot || !coreVersion) {
|
|
190
|
+
throw new Error(`Cannot find @nodetool-ai/cli package root for ${entry}`);
|
|
191
|
+
}
|
|
192
|
+
const ancestors = ancestorDirectories(cliRoot);
|
|
193
|
+
const yarnPnp = ancestors.some((directory) => [".pnp.cjs", ".pnp.js", ".pnp.loader.mjs"].some((file) => existsSync(paths.join(directory, file))));
|
|
194
|
+
const modules = paths.dirname(paths.dirname(cliRoot));
|
|
195
|
+
const project = readManifest(paths.dirname(modules));
|
|
196
|
+
const projectHasCli = Boolean(project?.dependencies?.["@nodetool-ai/cli"] ?? project?.devDependencies?.["@nodetool-ai/cli"] ?? project?.optionalDependencies?.["@nodetool-ai/cli"]);
|
|
197
|
+
const workspaceRoot = ancestors.find((directory) => readManifest(directory)?.workspaces !== undefined);
|
|
198
|
+
const layout = {
|
|
199
|
+
cliRoot, coreVersion, pathStyle: process.platform === "win32" ? "win32" : "posix",
|
|
200
|
+
globalNodeModulesRoots: (options.globalNodeModulesRoots ?? defaultGlobalRoots()).map(canonicalGlobalRoot), projectHasCli, yarnPnp,
|
|
201
|
+
bunGlobalRoots: options.bunGlobalRoots ?? [paths.join(process.env["BUN_INSTALL"] ?? paths.join(homedir(), ".bun"), "install", "global")]
|
|
202
|
+
};
|
|
203
|
+
if (workspaceRoot) {
|
|
204
|
+
return classifyInstallLayout({ ...layout, workspaceRoot });
|
|
205
|
+
}
|
|
206
|
+
return classifyInstallLayout(layout);
|
|
207
|
+
}
|
|
208
|
+
/** The catalog factory supplies the concrete closure when no ids are available yet. */
|
|
209
|
+
export function installDetailsForMode(mode, ids = []) {
|
|
210
|
+
if (mode.kind === "global" || mode.kind === "local") {
|
|
211
|
+
return { supported: true, reason: null, command: ids.length ? `nodetool packs add ${[...new Set(ids)].sort().join(" ")}` : null };
|
|
212
|
+
}
|
|
213
|
+
return { supported: false, reason: mode.reason, command: null };
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/packs/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiCxB,MAAM,UAAU,GAAG,6HAA6H,CAAC;AACjJ,MAAM,UAAU,GAAG,oGAAoG,CAAC;AACxH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,eAAe,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC9C,oBAAoB,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACnD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnG,CAAC,CAAC;AAGH,SAAS,OAAO,CAAC,IAAY,EAAE,KAAuB;IACpD,MAAM,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KAAK,cAAc;QAC9E,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,cAAc,CAAC;IAChF,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;IACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,4FAA4F,EAAE,eAAe,EAAE,CAAC;IACrK,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,0FAA0F,EAAE,eAAe,EAAE,CAAC;IACnK,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC;QACxI,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACtH,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,wGAAwG,EAAE,eAAe,EAAE,CAAC;IACjL,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;YACnD,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,eAAe,IAAI,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACvI,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;IACrH,CAAC;IACD,IAAI,eAAe,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAC5C,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;IACtG,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,gIAAgI,EAAE,eAAe,EAAE,CAAC;AACzM,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACxC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,OAAO,GAAG,KAAK,GAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvH,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,MAA0B,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,+DAA+D;QAC/D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;gBACjE,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACjC,MAAM;gBACR,CAAC;gBACD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,KAAK,EAAE,CAAC;oBACR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACxC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC,EAAE,6BAA6B,EAAE,uBAAuB,CAAC,CAAC;IACpI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,eAAe,EAAE,CAAC;IACzG,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,wCAAwC,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC3I,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,OAAO,GAAuB,EAAE;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAA2B,CAAC;IAChC,IAAI,WAA+B,CAAC;IACpC,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,GAAG,SAAS,CAAC;YACpB,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iDAAiD,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,kBAAkB,CAAC,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC,kBAAkB,CAAC,IAAI,OAAO,EAAE,oBAAoB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpL,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC;IACvG,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QACjF,sBAAsB,EAAE,CAAC,OAAO,CAAC,sBAAsB,IAAI,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,OAAO;QACjI,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;KACzI,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,qBAAqB,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,IAAiB,EAAE,GAAG,GAAsB,EAAE;IAClF,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpI,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeCatalogIndex } from "@nodetool-ai/node-catalog";
|
|
2
|
+
import type { InstallPlan, TreePackage } from "./install-tree.js";
|
|
3
|
+
/** npm labels replaying an exact no-save owned package as a change. */
|
|
4
|
+
export declare function normalizeOwnedPackReplay(plan: InstallPlan, before: readonly TreePackage[], catalog: NodeCatalogIndex, coreNames?: ReadonlySet<string>): InstallPlan;
|
|
5
|
+
//# sourceMappingURL=owned-replay-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-replay-plan.d.ts","sourceRoot":"","sources":["../../src/packs/owned-replay-plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,2BAA2B,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKlE,uEAAuE;AACvE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,GAAE,WAAW,CAAC,MAAM,CAA8F,GAAG,WAAW,CA6C/P"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RUNTIME_NPM_PACKAGES } from "@nodetool-ai/protocol/runtime-npm-packages";
|
|
3
|
+
const identity = z.object({ name: z.string(), version: z.string(), path: z.string() });
|
|
4
|
+
const replayChange = z.object({ from: identity, to: identity });
|
|
5
|
+
/** npm labels replaying an exact no-save owned package as a change. */
|
|
6
|
+
export function normalizeOwnedPackReplay(plan, before, catalog, coreNames = new Set(catalog.packs.filter((pack) => pack.kind === "core").map((pack) => pack.npm.name))) {
|
|
7
|
+
const table = new Map((catalog.installPins ?? []).map((pin) => [pin.installName ?? pin.name, pin]));
|
|
8
|
+
const excluded = new Set([
|
|
9
|
+
...coreNames,
|
|
10
|
+
...(catalog.installPins ?? []).filter((pin) => pin.shared).map((pin) => pin.name),
|
|
11
|
+
...Object.values(RUNTIME_NPM_PACKAGES).flatMap((group) => group.packageNames),
|
|
12
|
+
...Object.values(RUNTIME_NPM_PACKAGES).flatMap((group) => group.packageNames.map((name) => table.get(name)?.name).filter((name) => name !== undefined))
|
|
13
|
+
]);
|
|
14
|
+
const owned = new Map();
|
|
15
|
+
for (const pack of catalog.packs) {
|
|
16
|
+
if (pack.kind !== "node-pack") {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
for (const pin of [pack.npm, ...pack.provides.map((name) => table.get(name)).filter((pin) => pin !== undefined)]) {
|
|
20
|
+
if (!excluded.has(pin.name)) {
|
|
21
|
+
owned.set(pin.name, pin);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const paths = new Map(before.map((entry) => [entry.realPath, entry]));
|
|
26
|
+
const byName = new Map();
|
|
27
|
+
for (const entry of before) {
|
|
28
|
+
const entries = byName.get(entry.name) ?? [];
|
|
29
|
+
entries.push(entry);
|
|
30
|
+
byName.set(entry.name, entries);
|
|
31
|
+
}
|
|
32
|
+
const change = plan.change.filter((raw) => {
|
|
33
|
+
const text = z.string().safeParse(raw);
|
|
34
|
+
if (text.success) {
|
|
35
|
+
const match = /^change (\S+) (\S+) => (\S+)$/.exec(text.data);
|
|
36
|
+
if (!match || match[2] !== match[3]) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const pin = owned.get(match[1]);
|
|
40
|
+
const entries = byName.get(match[1]);
|
|
41
|
+
if (!pin || entries?.length !== 1) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
const previous = entries[0];
|
|
45
|
+
const folder = pin.installName ?? pin.name;
|
|
46
|
+
return previous.path !== `node_modules/${folder}` || !previous.realPath.replaceAll("\\", "/").endsWith(`/node_modules/${folder}`) ||
|
|
47
|
+
!previous.integrity || previous.integrity !== pin.integrity || previous.version !== match[2] ||
|
|
48
|
+
pin.version !== catalog.coreVersion || match[2] !== catalog.coreVersion;
|
|
49
|
+
}
|
|
50
|
+
const parsed = replayChange.safeParse(raw);
|
|
51
|
+
if (!parsed.success) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
const { from, to } = parsed.data;
|
|
55
|
+
if (from.name !== to.name || from.version !== to.version || from.path !== to.path) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const pin = owned.get(from.name);
|
|
59
|
+
const previous = paths.get(from.path);
|
|
60
|
+
if (!pin || !previous || !previous.integrity || previous.integrity !== pin.integrity || previous.name !== from.name ||
|
|
61
|
+
previous.version !== from.version || pin.version !== catalog.coreVersion || from.version !== catalog.coreVersion) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
});
|
|
66
|
+
return { ...plan, change };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=owned-replay-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-replay-plan.js","sourceRoot":"","sources":["../../src/packs/owned-replay-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type InstallPacksRequest, type InstallSelection } from "./install-selection.js";
|
|
2
|
+
export interface RemovalSelection {
|
|
3
|
+
readonly authorization: InstallSelection;
|
|
4
|
+
readonly remove: readonly string[];
|
|
5
|
+
readonly kept: readonly string[];
|
|
6
|
+
readonly removePaths: ReadonlySet<string>;
|
|
7
|
+
readonly npmNames: readonly string[];
|
|
8
|
+
readonly remainingPackIds: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
/** Preserve logical pack requirements and every dependency reachable from retained roots. */
|
|
11
|
+
export declare function preparePackRemoval(request: InstallPacksRequest): Promise<RemovalSelection>;
|
|
12
|
+
//# sourceMappingURL=removal-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removal-selection.d.ts","sourceRoot":"","sources":["../../src/packs/removal-selection.ts"],"names":[],"mappings":"AAMA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAElH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAaD,6FAA6F;AAC7F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsFhG"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { readFile, realpath } from "node:fs/promises";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
|
|
6
|
+
import { planPackRemoval } from "./management.js";
|
|
7
|
+
import { prepareInstallSelection } from "./install-selection.js";
|
|
8
|
+
const dependencySchema = z.object({ dependencies: z.record(z.string(), z.string()).optional(),
|
|
9
|
+
optionalDependencies: z.record(z.string(), z.string()).optional(), peerDependencies: z.record(z.string(), z.string()).optional(),
|
|
10
|
+
peerDependenciesMeta: z.record(z.string(), z.object({ optional: z.boolean().optional() })).optional() });
|
|
11
|
+
function reachable(roots, edges) {
|
|
12
|
+
const result = new Set();
|
|
13
|
+
const pending = [...roots];
|
|
14
|
+
while (pending.length) {
|
|
15
|
+
const path = pending.pop();
|
|
16
|
+
if (result.has(path)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
result.add(path);
|
|
20
|
+
pending.push(...(edges.get(path) ?? []));
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
/** Preserve logical pack requirements and every dependency reachable from retained roots. */
|
|
25
|
+
export async function preparePackRemoval(request) {
|
|
26
|
+
const selection = await prepareInstallSelection({ ...request, packs: [], runtimeLibraries: [] });
|
|
27
|
+
const logical = planPackRemoval(selection.catalog, selection.installedIds, request.packs);
|
|
28
|
+
const requestedLibraries = [...new Set([...(request.runtimeLibraries ?? []), ...logical.runtimeLibraries])];
|
|
29
|
+
for (const id of requestedLibraries) {
|
|
30
|
+
if (!isRuntimeNpmPackageId(id)) {
|
|
31
|
+
throw new Error(`Unknown runtime library: ${id}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const byPath = new Map(selection.before.map((entry) => [entry.path, entry]));
|
|
35
|
+
const byRealPath = new Map(selection.before.map((entry) => [entry.realPath, entry.path]));
|
|
36
|
+
const edges = new Map();
|
|
37
|
+
const dependencies = async (directory, omit = new Set()) => {
|
|
38
|
+
const manifest = dependencySchema.parse(JSON.parse(await readFile(join(directory, "package.json"), "utf8")));
|
|
39
|
+
const peers = Object.keys(manifest.peerDependencies ?? {}).filter((name) => !manifest.peerDependenciesMeta?.[name]?.optional);
|
|
40
|
+
const names = [...new Set([...Object.keys({ ...manifest.dependencies, ...manifest.optionalDependencies }), ...peers])];
|
|
41
|
+
const resolver = createRequire(join(directory, "package.json"));
|
|
42
|
+
const result = [];
|
|
43
|
+
for (const name of names) {
|
|
44
|
+
if (omit.has(name)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
for (const lookup of resolver.resolve.paths(name) ?? []) {
|
|
48
|
+
try {
|
|
49
|
+
const actual = await realpath(join(lookup, name));
|
|
50
|
+
const path = byRealPath.get(actual);
|
|
51
|
+
if (path) {
|
|
52
|
+
result.push(path);
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
};
|
|
65
|
+
for (const entry of selection.before) {
|
|
66
|
+
edges.set(entry.path, await dependencies(entry.realPath));
|
|
67
|
+
}
|
|
68
|
+
const catalogById = new Map(selection.catalog.packs.map((pack) => [pack.id, pack]));
|
|
69
|
+
const ownerRoots = new Map();
|
|
70
|
+
for (const id of logical.remove) {
|
|
71
|
+
const pack = catalogById.get(id);
|
|
72
|
+
ownerRoots.set(id, [pack.npm.name, ...pack.provides].map((name) => `node_modules/${name}`).filter((path) => byPath.has(path)));
|
|
73
|
+
}
|
|
74
|
+
const installedIds = new Set(selection.installedIds);
|
|
75
|
+
for (const id of request.packs) {
|
|
76
|
+
if (catalogById.get(id)?.kind === "node-pack" && !installedIds.has(id) && !logical.kept.includes(id)) {
|
|
77
|
+
ownerRoots.set(id, []);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const id of requestedLibraries) {
|
|
81
|
+
if (isRuntimeNpmPackageId(id)) {
|
|
82
|
+
const paths = RUNTIME_NPM_PACKAGES[id].packageNames.map((name) => `node_modules/${name}`).filter((path) => byPath.has(path));
|
|
83
|
+
ownerRoots.set(id, [...new Set([...(ownerRoots.get(id) ?? []), ...paths])]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const requestedRoots = new Set([...ownerRoots.values()].flat());
|
|
87
|
+
const targetClosure = reachable(requestedRoots, edges);
|
|
88
|
+
const requestedNames = new Set([...requestedRoots].map((path) => path.slice("node_modules/".length)));
|
|
89
|
+
const protectedRoots = new Set(await dependencies(selection.root, selection.mode === "global" ? new Set() : requestedNames));
|
|
90
|
+
if (request.mode.cliRoot !== selection.root) {
|
|
91
|
+
for (const path of await dependencies(request.mode.cliRoot)) {
|
|
92
|
+
protectedRoots.add(path);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const nodePackNames = new Set(selection.catalog.packs.filter((pack) => pack.kind === "node-pack").flatMap((pack) => [pack.npm.name, ...pack.provides]));
|
|
96
|
+
for (const entry of selection.before) {
|
|
97
|
+
const topLevel = !entry.path.slice("node_modules/".length).includes("/node_modules/");
|
|
98
|
+
if ((entry.name.startsWith("@nodetool-ai/") && !nodePackNames.has(entry.name)) || (topLevel && !targetClosure.has(entry.path))) {
|
|
99
|
+
protectedRoots.add(entry.path);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
for (const id of logical.remaining) {
|
|
103
|
+
const pack = catalogById.get(id);
|
|
104
|
+
for (const name of [pack.npm.name, ...pack.provides]) {
|
|
105
|
+
const path = `node_modules/${name}`;
|
|
106
|
+
if (byPath.has(path)) {
|
|
107
|
+
protectedRoots.add(path);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const library of pack.runtimeLibraries) {
|
|
111
|
+
if (isRuntimeNpmPackageId(library)) {
|
|
112
|
+
for (const name of RUNTIME_NPM_PACKAGES[library].packageNames) {
|
|
113
|
+
const path = `node_modules/${name}`;
|
|
114
|
+
if (byPath.has(path)) {
|
|
115
|
+
protectedRoots.add(path);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const wantedLibraries = new Set(requestedLibraries);
|
|
122
|
+
for (const id of selection.runtimeLibraries) {
|
|
123
|
+
if (!wantedLibraries.has(id) && isRuntimeNpmPackageId(id)) {
|
|
124
|
+
for (const name of RUNTIME_NPM_PACKAGES[id].packageNames) {
|
|
125
|
+
const path = `node_modules/${name}`;
|
|
126
|
+
if (byPath.has(path)) {
|
|
127
|
+
protectedRoots.add(path);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const kept = new Set(logical.kept);
|
|
133
|
+
let protectedPaths = reachable(protectedRoots, edges);
|
|
134
|
+
while (true) {
|
|
135
|
+
const protectedAncestors = new Set();
|
|
136
|
+
for (const path of protectedPaths) {
|
|
137
|
+
let prefix = "";
|
|
138
|
+
for (const segment of path.split("/")) {
|
|
139
|
+
prefix = prefix ? `${prefix}/${segment}` : segment;
|
|
140
|
+
protectedAncestors.add(prefix);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
let changed = false;
|
|
144
|
+
for (const [id, paths] of ownerRoots) {
|
|
145
|
+
if (kept.has(id)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (paths.some((path) => protectedAncestors.has(path))) {
|
|
149
|
+
kept.add(id);
|
|
150
|
+
for (const path of paths) {
|
|
151
|
+
protectedRoots.add(path);
|
|
152
|
+
}
|
|
153
|
+
changed = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (!changed) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
protectedPaths = reachable(protectedRoots, edges);
|
|
160
|
+
}
|
|
161
|
+
const remove = [...ownerRoots.keys()].filter((id) => !kept.has(id)).sort();
|
|
162
|
+
const removePaths = new Set([...reachable(remove.flatMap((id) => ownerRoots.get(id) ?? []), edges)].filter((path) => !protectedPaths.has(path)));
|
|
163
|
+
const npmNames = [...new Set(remove.flatMap((id) => ownerRoots.get(id) ?? []).map((path) => path.slice("node_modules/".length)))];
|
|
164
|
+
const authorization = { ...selection, packs: [...new Map([...selection.packs, ...request.packs.map((id) => catalogById.get(id)).filter((pack) => pack !== undefined)].map((pack) => [pack.id, pack])).values()],
|
|
165
|
+
runtimeLibraries: [...new Set([...selection.runtimeLibraries, ...requestedLibraries])].sort(), scripts: [], mutationPaths: [...removePaths] };
|
|
166
|
+
return { authorization, remove, kept: [...kept].sort(), removePaths, npmNames,
|
|
167
|
+
remainingPackIds: selection.installedIds.filter((id) => !remove.includes(id)) };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=removal-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removal-selection.js","sourceRoot":"","sources":["../../src/packs/removal-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type InstallAuthorization } from "../commands/pack-install-authorization.js";
|
|
2
|
+
import { type InstallerOperations } from "./installer.js";
|
|
3
|
+
import type { InstallPacksRequest, DesiredPackState } from "./install-selection.js";
|
|
4
|
+
export interface PackRemovalResult {
|
|
5
|
+
readonly desired: DesiredPackState;
|
|
6
|
+
readonly removed: readonly string[];
|
|
7
|
+
readonly kept: readonly string[];
|
|
8
|
+
readonly restartRequired: true;
|
|
9
|
+
}
|
|
10
|
+
/** Explicit removal mutates only packages exclusively owned by its authorized IDs. */
|
|
11
|
+
export declare function removePacks(request: InstallPacksRequest, authorization: InstallAuthorization, operations?: InstallerOperations): Promise<PackRemovalResult>;
|
|
12
|
+
//# sourceMappingURL=removal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removal.d.ts","sourceRoot":"","sources":["../../src/packs/removal.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmE,KAAK,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACvJ,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAOpF,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAA;CAAE;AA0BhL,sFAAsF;AACtF,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,GAAE,mBAAkD,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiE/L"}
|