@nodetool-ai/pack-manager 0.0.0-stage → 0.8.9-beta.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.
Files changed (127) hide show
  1. package/README.md +4 -2
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/child-exit.d.ts +3 -0
  4. package/dist/child-exit.d.ts.map +1 -0
  5. package/dist/child-exit.js +17 -0
  6. package/dist/child-exit.js.map +1 -0
  7. package/dist/cli-feature.d.ts +30 -0
  8. package/dist/cli-feature.d.ts.map +1 -0
  9. package/dist/cli-feature.js +89 -0
  10. package/dist/cli-feature.js.map +1 -0
  11. package/dist/command-errors.d.ts +8 -0
  12. package/dist/command-errors.d.ts.map +1 -0
  13. package/dist/command-errors.js +49 -0
  14. package/dist/command-errors.js.map +1 -0
  15. package/dist/commands/authorized-pack-install.d.ts +7 -0
  16. package/dist/commands/authorized-pack-install.d.ts.map +1 -0
  17. package/dist/commands/authorized-pack-install.js +20 -0
  18. package/dist/commands/authorized-pack-install.js.map +1 -0
  19. package/dist/commands/output.d.ts +32 -0
  20. package/dist/commands/output.d.ts.map +1 -0
  21. package/dist/commands/output.js +150 -0
  22. package/dist/commands/output.js.map +1 -0
  23. package/dist/commands/pack-install-authorization.d.ts +40 -0
  24. package/dist/commands/pack-install-authorization.d.ts.map +1 -0
  25. package/dist/commands/pack-install-authorization.js +132 -0
  26. package/dist/commands/pack-install-authorization.js.map +1 -0
  27. package/dist/commands/pack-management.d.ts +26 -0
  28. package/dist/commands/pack-management.d.ts.map +1 -0
  29. package/dist/commands/pack-management.js +74 -0
  30. package/dist/commands/pack-management.js.map +1 -0
  31. package/dist/commands/packs.d.ts +5 -0
  32. package/dist/commands/packs.d.ts.map +1 -0
  33. package/dist/commands/packs.js +12 -0
  34. package/dist/commands/packs.js.map +1 -0
  35. package/dist/index.d.ts +5 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +5 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/install-lock.d.ts +12 -0
  40. package/dist/install-lock.d.ts.map +1 -0
  41. package/dist/install-lock.js +139 -0
  42. package/dist/install-lock.js.map +1 -0
  43. package/dist/npm-runner.d.ts +23 -0
  44. package/dist/npm-runner.d.ts.map +1 -0
  45. package/dist/npm-runner.js +160 -0
  46. package/dist/npm-runner.js.map +1 -0
  47. package/dist/packs/command-service.d.ts +16 -0
  48. package/dist/packs/command-service.d.ts.map +1 -0
  49. package/dist/packs/command-service.js +203 -0
  50. package/dist/packs/command-service.js.map +1 -0
  51. package/dist/packs/doctor-lock.d.ts +8 -0
  52. package/dist/packs/doctor-lock.d.ts.map +1 -0
  53. package/dist/packs/doctor-lock.js +50 -0
  54. package/dist/packs/doctor-lock.js.map +1 -0
  55. package/dist/packs/doctor.d.ts +25 -0
  56. package/dist/packs/doctor.d.ts.map +1 -0
  57. package/dist/packs/doctor.js +12 -0
  58. package/dist/packs/doctor.js.map +1 -0
  59. package/dist/packs/global-bootstrap.d.ts +11 -0
  60. package/dist/packs/global-bootstrap.d.ts.map +1 -0
  61. package/dist/packs/global-bootstrap.js +72 -0
  62. package/dist/packs/global-bootstrap.js.map +1 -0
  63. package/dist/packs/host.d.ts +12 -0
  64. package/dist/packs/host.d.ts.map +1 -0
  65. package/dist/packs/host.js +69 -0
  66. package/dist/packs/host.js.map +1 -0
  67. package/dist/packs/install-manifests.d.ts +2 -0
  68. package/dist/packs/install-manifests.d.ts.map +1 -0
  69. package/dist/packs/install-manifests.js +30 -0
  70. package/dist/packs/install-manifests.js.map +1 -0
  71. package/dist/packs/install-process.d.ts +4 -0
  72. package/dist/packs/install-process.d.ts.map +1 -0
  73. package/dist/packs/install-process.js +11 -0
  74. package/dist/packs/install-process.js.map +1 -0
  75. package/dist/packs/install-selection.d.ts +39 -0
  76. package/dist/packs/install-selection.d.ts.map +1 -0
  77. package/dist/packs/install-selection.js +67 -0
  78. package/dist/packs/install-selection.js.map +1 -0
  79. package/dist/packs/install-state.d.ts +25 -0
  80. package/dist/packs/install-state.d.ts.map +1 -0
  81. package/dist/packs/install-state.js +45 -0
  82. package/dist/packs/install-state.js.map +1 -0
  83. package/dist/packs/install-tree.d.ts +35 -0
  84. package/dist/packs/install-tree.d.ts.map +1 -0
  85. package/dist/packs/install-tree.js +253 -0
  86. package/dist/packs/install-tree.js.map +1 -0
  87. package/dist/packs/install-verification.d.ts +12 -0
  88. package/dist/packs/install-verification.d.ts.map +1 -0
  89. package/dist/packs/install-verification.js +75 -0
  90. package/dist/packs/install-verification.js.map +1 -0
  91. package/dist/packs/installed.d.ts +36 -0
  92. package/dist/packs/installed.d.ts.map +1 -0
  93. package/dist/packs/installed.js +87 -0
  94. package/dist/packs/installed.js.map +1 -0
  95. package/dist/packs/installer-load-check.d.ts +5 -0
  96. package/dist/packs/installer-load-check.d.ts.map +1 -0
  97. package/dist/packs/installer-load-check.js +98 -0
  98. package/dist/packs/installer-load-check.js.map +1 -0
  99. package/dist/packs/installer.d.ts +16 -0
  100. package/dist/packs/installer.d.ts.map +1 -0
  101. package/dist/packs/installer.js +149 -0
  102. package/dist/packs/installer.js.map +1 -0
  103. package/dist/packs/management.d.ts +51 -0
  104. package/dist/packs/management.d.ts.map +1 -0
  105. package/dist/packs/management.js +78 -0
  106. package/dist/packs/management.js.map +1 -0
  107. package/dist/packs/mode.d.ts +48 -0
  108. package/dist/packs/mode.d.ts.map +1 -0
  109. package/dist/packs/mode.js +251 -0
  110. package/dist/packs/mode.js.map +1 -0
  111. package/dist/packs/owned-replay-plan.d.ts +5 -0
  112. package/dist/packs/owned-replay-plan.d.ts.map +1 -0
  113. package/dist/packs/owned-replay-plan.js +65 -0
  114. package/dist/packs/owned-replay-plan.js.map +1 -0
  115. package/dist/packs/removal-selection.d.ts +12 -0
  116. package/dist/packs/removal-selection.d.ts.map +1 -0
  117. package/dist/packs/removal-selection.js +186 -0
  118. package/dist/packs/removal-selection.js.map +1 -0
  119. package/dist/packs/removal.d.ts +12 -0
  120. package/dist/packs/removal.d.ts.map +1 -0
  121. package/dist/packs/removal.js +144 -0
  122. package/dist/packs/removal.js.map +1 -0
  123. package/dist/packs/repair.d.ts +2 -0
  124. package/dist/packs/repair.d.ts.map +1 -0
  125. package/dist/packs/repair.js +2 -0
  126. package/dist/packs/repair.js.map +1 -0
  127. package/package.json +51 -4
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
3
+ /** Initial global npm installs omit locks. Reify only catalog-owned existing roots. */
4
+ export function globalBootstrapPins(catalog, before, libraries) {
5
+ const table = new Map((catalog.installPins ?? []).map(pin => [pin.installName ?? pin.name, pin]));
6
+ const installed = new Set(before.map(entry => entry.name));
7
+ const packs = catalog.packs.filter(pack => installed.has(pack.npm.name));
8
+ const required = (name) => {
9
+ const pin = table.get(name);
10
+ if (!pin) {
11
+ throw new Error(`Global bootstrap has no integrity pin for ${name}`);
12
+ }
13
+ return pin;
14
+ };
15
+ const candidates = [...packs.flatMap(pack => [pack.npm, ...pack.provides.map(required), ...pack.scriptAllowlist]),
16
+ ...(catalog.installPins ?? []).filter(pin => pin.shared),
17
+ ...libraries.flatMap(id => isRuntimeNpmPackageId(id) ? RUNTIME_NPM_PACKAGES[id].packageNames.map(name => ({ ...required(name), installPath: `node_modules/${name}` })) : [])];
18
+ const result = new Map();
19
+ for (const pin of candidates) {
20
+ const entries = before.filter(entry => entry.name === pin.name && (!pin.installPath || entry.path === pin.installPath));
21
+ if (!entries.length) {
22
+ continue;
23
+ }
24
+ const path = `node_modules/${pin.installName ?? pin.name}`;
25
+ if (!pin.integrity || pin.integrity === "PENDING" || entries.length !== 1 || entries[0].path !== path ||
26
+ entries[0].version !== pin.version || entries[0].integrity !== undefined) {
27
+ throw new Error(`Global bootstrap requires one exact unrecorded root package: ${pin.name}`);
28
+ }
29
+ result.set(path, { ...pin, installPath: path, realPath: entries[0].realPath });
30
+ }
31
+ return [...result.values()].sort((a, b) => a.installPath.localeCompare(b.installPath));
32
+ }
33
+ const identity = z.object({ name: z.string(), version: z.string(), path: z.string() });
34
+ const changeSchema = z.object({ from: identity, to: identity });
35
+ /** Permit only explicitly authorized same-version root reification, never arbitrary changes. */
36
+ export function normalizeGlobalBootstrap(plan, pins) {
37
+ const byPath = new Map(pins.map(pin => [pin.realPath, pin]));
38
+ const byName = new Map();
39
+ for (const pin of pins) {
40
+ byName.set(pin.name, [...(byName.get(pin.name) ?? []), pin]);
41
+ }
42
+ const replayed = new Set();
43
+ return { ...plan, change: plan.change.filter(raw => {
44
+ const text = z.string().safeParse(raw);
45
+ if (text.success) {
46
+ const match = /^change (\S+) (\S+) => (\S+)$/.exec(text.data);
47
+ const candidates = match ? byName.get(match[1]) : undefined;
48
+ if (!match || candidates?.length !== 1) {
49
+ return true;
50
+ }
51
+ const pin = candidates[0];
52
+ if (replayed.has(pin.realPath) || match[2] !== pin.version || match[3] !== pin.version) {
53
+ return true;
54
+ }
55
+ replayed.add(pin.realPath);
56
+ return false;
57
+ }
58
+ const parsed = changeSchema.safeParse(raw);
59
+ if (!parsed.success) {
60
+ return true;
61
+ }
62
+ const { from, to } = parsed.data;
63
+ const pin = byPath.get(from.path);
64
+ if (!pin || replayed.has(pin.realPath) || from.path !== to.path || from.name !== pin.name || to.name !== pin.name ||
65
+ from.version !== pin.version || to.version !== pin.version) {
66
+ return true;
67
+ }
68
+ replayed.add(pin.realPath);
69
+ return false;
70
+ }) };
71
+ }
72
+ //# sourceMappingURL=global-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-bootstrap.js","sourceRoot":"","sources":["../../src/packs/global-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type PackLoaderContext } from "@nodetool-ai/pack-core/loader-context";
2
+ import type { NodeCatalogIndex } from "@nodetool-ai/pack-core/types";
3
+ import { type InstalledPackSnapshot } from "./installed.js";
4
+ export declare function loaderContextForSnapshot(value: InstalledPackSnapshot): PackLoaderContext;
5
+ /** Configure inventory lazily. Reading help does not read install state. */
6
+ export declare function configureCliPackHost(url: string, options?: {
7
+ readonly catalog?: NodeCatalogIndex;
8
+ readonly stateFile?: string;
9
+ }): void;
10
+ /** Return the same admitted snapshot used for package resolution. */
11
+ export declare function loadCliPackSnapshot(): Promise<InstalledPackSnapshot>;
12
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/packs/host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuD,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AACpI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAOhF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,qBAAqB,GAAG,iBAAiB,CAExF;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,IAAI,CA8B1I;AAED,qEAAqE;AACrE,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAK1E"}
@@ -0,0 +1,69 @@
1
+ import { existsSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { createRequire } from "node:module";
4
+ import { join } from "node:path";
5
+ import { realpath } from "node:fs/promises";
6
+ import { getNodetoolDataDir } from "@nodetool-ai/config";
7
+ import { loadPackLoaderContext, setPackLoaderContextProvider } from "@nodetool-ai/pack-core/loader-context";
8
+ import { readCatalogIndex } from "@nodetool-ai/pack-core/catalog-data";
9
+ import { CliRootNotFoundError, detectInstallMode, detectStandaloneFeatureMode, installDetailsForMode } from "./mode.js";
10
+ import { readInstalledPacks } from "./installed.js";
11
+ import { readDesiredState } from "./install-selection.js";
12
+ import { restoreWarning } from "./management.js";
13
+ let entryUrl;
14
+ let snapshot;
15
+ export function loaderContextForSnapshot(value) {
16
+ return { coreVersion: value.mode.coreVersion, packs: value.packs.map(pack => ({ id: pack.id, packages: [pack, ...pack.providedPackages] })), install: installDetailsForMode(value.mode) };
17
+ }
18
+ /** Configure inventory lazily. Reading help does not read install state. */
19
+ export function configureCliPackHost(url, options = {}) {
20
+ entryUrl = url;
21
+ snapshot = undefined;
22
+ setPackLoaderContextProvider(async () => {
23
+ let mode;
24
+ try {
25
+ mode = detectInstallMode(fileURLToPath(url));
26
+ }
27
+ catch (error) {
28
+ if (!(error instanceof CliRootNotFoundError)) {
29
+ throw error;
30
+ }
31
+ const resolver = createRequire(url);
32
+ try {
33
+ mode = detectInstallMode(resolver.resolve("@nodetool-ai/cli"));
34
+ }
35
+ catch (cause) {
36
+ const installedHost = (resolver.resolve.paths("@nodetool-ai/cli") ?? []).some(directory => existsSync(join(directory, "@nodetool-ai/cli")));
37
+ if (!(cause instanceof Error) || !("code" in cause) || cause.code !== "MODULE_NOT_FOUND" || installedHost) {
38
+ throw cause;
39
+ }
40
+ mode = detectStandaloneFeatureMode(fileURLToPath(url), options.catalog ?? readCatalogIndex());
41
+ }
42
+ }
43
+ snapshot = readInstalledPacks(mode, options.catalog);
44
+ if (mode.kind === "global" || mode.kind === "local") {
45
+ const root = await realpath(mode.installRoot);
46
+ const desired = (await readDesiredState(options.stateFile ?? join(getNodetoolDataDir(), "cli-packs.json")))[root];
47
+ if (desired?.dirty) {
48
+ process.stderr.write('Pack installation is dirty. Run "nodetool packs doctor --repair".\n');
49
+ }
50
+ const warning = restoreWarning(snapshot, desired);
51
+ if (warning) {
52
+ process.stderr.write(warning + "\n");
53
+ }
54
+ }
55
+ return loaderContextForSnapshot(snapshot);
56
+ });
57
+ }
58
+ /** Return the same admitted snapshot used for package resolution. */
59
+ export async function loadCliPackSnapshot() {
60
+ if (!entryUrl) {
61
+ throw new Error("CLI pack host is not configured");
62
+ }
63
+ await loadPackLoaderContext();
64
+ if (!snapshot) {
65
+ throw new Error("CLI installed pack snapshot is unavailable");
66
+ }
67
+ return snapshot;
68
+ }
69
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/packs/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function captureInstallManifests(root: string): Promise<() => Promise<void>>;
2
+ //# sourceMappingURL=install-manifests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-manifests.d.ts","sourceRoot":"","sources":["../../src/packs/install-manifests.ts"],"names":[],"mappings":"AAGA,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAgBxF"}
@@ -0,0 +1,30 @@
1
+ import { readFile, unlink, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export async function captureInstallManifests(root) {
4
+ const files = await Promise.all(["package.json", "package-lock.json"].map(async (name) => {
5
+ try {
6
+ return { name, bytes: await readFile(join(root, name)) };
7
+ }
8
+ catch (error) {
9
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
10
+ return { name, bytes: null };
11
+ }
12
+ throw error;
13
+ }
14
+ }));
15
+ return async () => {
16
+ for (const file of files) {
17
+ if (file.bytes) {
18
+ await writeFile(join(root, file.name), file.bytes);
19
+ }
20
+ else {
21
+ await unlink(join(root, file.name)).catch((error) => {
22
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
23
+ throw error;
24
+ }
25
+ });
26
+ }
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=install-manifests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-manifests.js","sourceRoot":"","sources":["../../src/packs/install-manifests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY;IACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvF,IAAI,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAAC,CAAC;QACjE,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAAC,CAAC;YAC3G,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;iBAClE,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBAClE,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBAAC,MAAM,KAAK,CAAC;oBAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;YAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Server entry points permanently disable installation in their process. */
2
+ export declare function refusePackInstallsInProcess(context: string): void;
3
+ export declare function assertPackInstallProcessAllowed(): void;
4
+ //# sourceMappingURL=install-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-process.d.ts","sourceRoot":"","sources":["../../src/packs/install-process.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AACD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD"}
@@ -0,0 +1,11 @@
1
+ let refusingContext;
2
+ /** Server entry points permanently disable installation in their process. */
3
+ export function refusePackInstallsInProcess(context) {
4
+ refusingContext ??= context;
5
+ }
6
+ export function assertPackInstallProcessAllowed() {
7
+ if (refusingContext) {
8
+ throw new Error(`Node pack installation is disabled in ${refusingContext} processes`);
9
+ }
10
+ }
11
+ //# sourceMappingURL=install-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-process.js","sourceRoot":"","sources":["../../src/packs/install-process.ts"],"names":[],"mappings":"AAAA,IAAI,eAAmC,CAAC;AAExC,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,eAAe,KAAK,OAAO,CAAC;AAC9B,CAAC;AACD,MAAM,UAAU,+BAA+B;IAC7C,IAAI,eAAe,EAAE,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,yCAAyC,eAAe,YAAY,CAAC,CAAC;IAAC,CAAC;AACjH,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type NodeCatalogIndex, type CatalogPack, type PinnedPackage } from "@nodetool-ai/pack-core";
2
+ import type { InstallMode } from "./mode.js";
3
+ import { type TreePackage } from "./install-tree.js";
4
+ import { type GlobalBootstrapPin } from "./global-bootstrap.js";
5
+ import { type DesiredPackState } from "./install-state.js";
6
+ export { readDesiredState } from "./install-state.js";
7
+ export type { DesiredPackState } from "./install-state.js";
8
+ export interface InstallPacksRequest {
9
+ readonly mode: InstallMode;
10
+ readonly packs: readonly string[];
11
+ readonly runtimeLibraries?: readonly string[];
12
+ readonly stateFile: string;
13
+ readonly catalog?: NodeCatalogIndex;
14
+ readonly signal?: AbortSignal;
15
+ readonly onWarning?: (warning: string) => void;
16
+ }
17
+ export interface InstallSelection {
18
+ readonly root: string;
19
+ readonly coreVersion: string;
20
+ readonly mode: "global" | "local";
21
+ readonly packs: readonly CatalogPack[];
22
+ readonly runtimeLibraries: readonly string[];
23
+ readonly scripts: readonly PinnedPackage[];
24
+ readonly previous: DesiredPackState;
25
+ readonly catalog: NodeCatalogIndex;
26
+ readonly before: readonly TreePackage[];
27
+ readonly replayLibraries: readonly string[];
28
+ readonly installedIds: readonly string[];
29
+ readonly initialGlobalLockMissing: boolean;
30
+ readonly bootstrap?: readonly GlobalBootstrapPin[];
31
+ readonly mutationPaths?: readonly string[];
32
+ }
33
+ export declare function expandCatalogPacks(catalog: NodeCatalogIndex, ids: readonly string[]): CatalogPack[];
34
+ /** Compute all specs that npm will replay. Desired intent alone adds no specs. */
35
+ export declare function prepareInstallSelection(request: InstallPacksRequest, options?: {
36
+ readonly allowDirty?: boolean;
37
+ readonly restoreDesired?: boolean;
38
+ }): Promise<InstallSelection>;
39
+ //# sourceMappingURL=install-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-selection.d.ts","sourceRoot":"","sources":["../../src/packs/install-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AACD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AACD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,EAAE,CAcnG;AAED,kFAAkF;AAClF,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2BzL"}
@@ -0,0 +1,67 @@
1
+ import { realpath } from "node:fs/promises";
2
+ import { readCatalogIndex } from "@nodetool-ai/pack-core";
3
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
4
+ import { readInstallTree } from "./install-tree.js";
5
+ import { globalBootstrapPins } from "./global-bootstrap.js";
6
+ import { readDesiredState } from "./install-state.js";
7
+ export { readDesiredState } from "./install-state.js";
8
+ export function expandCatalogPacks(catalog, ids) {
9
+ const byId = new Map(catalog.packs.map((pack) => [pack.id, pack]));
10
+ const visited = new Set();
11
+ const pending = [...ids];
12
+ const result = [];
13
+ while (pending.length) {
14
+ const id = pending.pop();
15
+ if (visited.has(id)) {
16
+ continue;
17
+ }
18
+ visited.add(id);
19
+ const pack = byId.get(id);
20
+ if (!pack) {
21
+ throw new Error(`Unknown node pack: ${id}`);
22
+ }
23
+ result.push(pack);
24
+ pending.push(...pack.requires);
25
+ }
26
+ return result.sort((a, b) => a.id.localeCompare(b.id));
27
+ }
28
+ /** Compute all specs that npm will replay. Desired intent alone adds no specs. */
29
+ export async function prepareInstallSelection(request, options = {}) {
30
+ const { mode } = request;
31
+ if (mode.kind !== "global" && mode.kind !== "local") {
32
+ throw new Error(mode.reason);
33
+ }
34
+ const catalog = request.catalog ?? readCatalogIndex();
35
+ if (catalog.coreVersion !== mode.coreVersion) {
36
+ throw new Error("Catalog and CLI versions differ");
37
+ }
38
+ const root = await realpath(mode.installRoot);
39
+ const previous = (await readDesiredState(request.stateFile))[root] ?? { root, coreVersion: mode.coreVersion, packs: [], runtimeLibraries: [] };
40
+ if (previous.dirty && !options.allowDirty) {
41
+ throw new Error("Pack installation is dirty. Run nodetool packs doctor --repair.");
42
+ }
43
+ const tree = await readInstallTree(root, mode.kind === "global");
44
+ const before = tree.packages;
45
+ const names = new Set(before.map((entry) => entry.name));
46
+ const installedIds = catalog.packs.filter((pack) => names.has(pack.npm.name)).map((pack) => pack.id);
47
+ const requested = expandCatalogPacks(catalog, [...request.packs, ...(options.restoreDesired ? previous.packs : [])]);
48
+ const packs = expandCatalogPacks(catalog, [...installedIds, ...requested.map((pack) => pack.id)]);
49
+ const byFolder = new Map((catalog.installPins ?? []).map((pin) => [pin.installName ?? pin.name, pin]));
50
+ const replayLibraries = previous.runtimeLibraries.filter((id) => isRuntimeNpmPackageId(id) && RUNTIME_NPM_PACKAGES[id].packageNames.every((name) => {
51
+ const pin = byFolder.get(name);
52
+ return pin && before.some((entry) => entry.path === `node_modules/${name}` && entry.name === pin.name && entry.version === pin.version &&
53
+ (entry.integrity === pin.integrity || (mode.kind === "global" && tree.missingLock && entry.integrity === undefined)));
54
+ }));
55
+ const explicitLibraries = [...(request.runtimeLibraries ?? []), ...(options.restoreDesired ? previous.runtimeLibraries : [])];
56
+ for (const id of explicitLibraries) {
57
+ if (!isRuntimeNpmPackageId(id)) {
58
+ throw new Error(`Runtime library ${id} cannot be installed by npm`);
59
+ }
60
+ }
61
+ const libraries = [...new Set([...replayLibraries, ...explicitLibraries, ...requested.flatMap((pack) => pack.runtimeLibraries).filter(isRuntimeNpmPackageId)])].sort();
62
+ const scripts = [...new Map(packs.flatMap((pack) => pack.scriptAllowlist).map((pin) => [JSON.stringify(pin), pin])).values()];
63
+ return { root, coreVersion: mode.coreVersion, mode: mode.kind, packs, runtimeLibraries: libraries, scripts, previous, catalog, before, replayLibraries, installedIds,
64
+ initialGlobalLockMissing: mode.kind === "global" && tree.missingLock,
65
+ bootstrap: mode.kind === "global" && tree.missingLock ? globalBootstrapPins(catalog, before, libraries) : [] };
66
+ }
67
+ //# sourceMappingURL=install-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-selection.js","sourceRoot":"","sources":["../../src/packs/install-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ declare const desiredSchema: z.ZodObject<{
3
+ root: z.ZodString;
4
+ coreVersion: z.ZodString;
5
+ packs: z.ZodArray<z.ZodString>;
6
+ runtimeLibraries: z.ZodArray<z.ZodString>;
7
+ requestedPacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
8
+ managedPacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ dirty: z.ZodOptional<z.ZodBoolean>;
10
+ }, z.core.$strip>;
11
+ declare const stateSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
12
+ root: z.ZodString;
13
+ coreVersion: z.ZodString;
14
+ packs: z.ZodArray<z.ZodString>;
15
+ runtimeLibraries: z.ZodArray<z.ZodString>;
16
+ requestedPacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ managedPacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ dirty: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.core.$strip>>;
20
+ export type DesiredPackState = z.infer<typeof desiredSchema>;
21
+ export declare function readDesiredState(file: string): Promise<z.infer<typeof stateSchema>>;
22
+ /** Each root transaction also serializes merging the shared desired-state file. */
23
+ export declare function writeDesiredState(file: string, value: DesiredPackState): Promise<void>;
24
+ export {};
25
+ //# sourceMappingURL=install-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../../src/packs/install-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,aAAa;;;;;;;;iBAE6G,CAAC;AACjI,QAAA,MAAM,WAAW;;;;;;;;kBAAsC,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE7D,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC,CAMzF;AAED,mFAAmF;AACnF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F"}
@@ -0,0 +1,45 @@
1
+ import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { z } from "zod";
5
+ import { acquireInstallLock } from "../install-lock.js";
6
+ const desiredSchema = z.object({ root: z.string(), coreVersion: z.string(), packs: z.array(z.string()),
7
+ runtimeLibraries: z.array(z.string()),
8
+ requestedPacks: z.array(z.string()).optional(), managedPacks: z.array(z.string()).optional(), dirty: z.boolean().optional() });
9
+ const stateSchema = z.record(z.string(), desiredSchema);
10
+ export async function readDesiredState(file) {
11
+ try {
12
+ return stateSchema.parse(JSON.parse(await readFile(file, "utf8")));
13
+ }
14
+ catch (error) {
15
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
16
+ return {};
17
+ }
18
+ throw error;
19
+ }
20
+ }
21
+ /** Each root transaction also serializes merging the shared desired-state file. */
22
+ export async function writeDesiredState(file, value) {
23
+ await mkdir(dirname(file), { recursive: true });
24
+ const release = await acquireInstallLock(dirname(file), ".cli-packs-state.lock");
25
+ const temporary = `${file}.${randomUUID()}.tmp`;
26
+ try {
27
+ const state = await readDesiredState(file);
28
+ state[value.root] = value;
29
+ await writeFile(temporary, JSON.stringify(state, null, 2), { flag: "wx", mode: 0o600 });
30
+ await rename(temporary, file);
31
+ }
32
+ finally {
33
+ try {
34
+ await unlink(temporary).catch((error) => {
35
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
36
+ throw error;
37
+ }
38
+ });
39
+ }
40
+ finally {
41
+ await release();
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=install-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-state.js","sourceRoot":"","sources":["../../src/packs/install-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { PinnedPackage } from "@nodetool-ai/pack-core";
2
+ export interface VerificationPin extends PinnedPackage {
3
+ readonly installName?: string;
4
+ readonly shared?: boolean;
5
+ readonly installPath?: string;
6
+ }
7
+ export interface TreePackage {
8
+ readonly path: string;
9
+ readonly name: string;
10
+ readonly version: string;
11
+ readonly integrity: string | undefined;
12
+ readonly realPath: string;
13
+ }
14
+ /** Inspect every nested package, including entries omitted by an invalid hidden lock. */
15
+ export declare function readInstallTree(root: string, allowMissingGlobalLock?: boolean): Promise<{
16
+ readonly packages: readonly TreePackage[];
17
+ readonly missingLock: boolean;
18
+ }>;
19
+ export declare function snapshotInstallTree(root: string): Promise<readonly TreePackage[]>;
20
+ export interface InstallPlan {
21
+ readonly add: readonly {
22
+ name: string;
23
+ version: string;
24
+ }[];
25
+ readonly change: readonly unknown[];
26
+ readonly remove: readonly unknown[];
27
+ }
28
+ export declare function parseInstallPlan(output: string, npmVersion: string): InstallPlan;
29
+ export declare function assertAdditivePlan(plan: InstallPlan, before: readonly TreePackage[], coreNames: ReadonlySet<string>, shared: readonly PinnedPackage[], coreVersion: string): void;
30
+ export declare function assertTreePins(before: readonly TreePackage[], after: readonly TreePackage[], pins: readonly VerificationPin[], coreNames: ReadonlySet<string>, coreVersion: string, initialGlobalLockMissing?: boolean): void;
31
+ export declare function installTreeRestored(before: readonly TreePackage[], after: readonly TreePackage[], initialGlobalLockMissing?: boolean): boolean;
32
+ export declare function assertSharedIdentities(tree: readonly TreePackage[], shared: readonly PinnedPackage[]): Promise<void>;
33
+ /** npm may retain extraneous --no-save additions even after uninstall. */
34
+ export declare function removeSnapshotAdditions(root: string, admittedModules: string, before: readonly TreePackage[]): Promise<void>;
35
+ //# sourceMappingURL=install-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-tree.d.ts","sourceRoot":"","sources":["../../src/packs/install-tree.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,MAAM,WAAW,eAAgB,SAAQ,aAAa;IAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAElJ,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD,yFAAyF;AACzF,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,UAAQ,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAyCzK;AACD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAEvF;AAED,MAAM,WAAW,WAAW;IAAG,QAAQ,CAAC,GAAG,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE;AAGrK,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CA+BhF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAYjL;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,eAAe,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,wBAAwB,UAAQ,GAAG,IAAI,CAyB3N;AACD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,wBAAwB,UAAQ,GAAG,OAAO,CAQ5I;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1H;AAED,0EAA0E;AAC1E,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkClI"}