@telorun/kernel 0.24.2 → 0.26.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.
Files changed (68) hide show
  1. package/dist/application-env.d.ts +18 -0
  2. package/dist/application-env.d.ts.map +1 -1
  3. package/dist/application-env.js +36 -0
  4. package/dist/application-env.js.map +1 -1
  5. package/dist/controller-loader.d.ts +4 -0
  6. package/dist/controller-loader.d.ts.map +1 -1
  7. package/dist/controller-loader.js +4 -1
  8. package/dist/controller-loader.js.map +1 -1
  9. package/dist/controller-loaders/npm-loader.d.ts +51 -12
  10. package/dist/controller-loaders/npm-loader.d.ts.map +1 -1
  11. package/dist/controller-loaders/npm-loader.js +119 -52
  12. package/dist/controller-loaders/npm-loader.js.map +1 -1
  13. package/dist/controller-registry.d.ts +9 -0
  14. package/dist/controller-registry.d.ts.map +1 -1
  15. package/dist/controller-registry.js +18 -0
  16. package/dist/controller-registry.js.map +1 -1
  17. package/dist/controllers/module/import-controller.d.ts.map +1 -1
  18. package/dist/controllers/module/import-controller.js +50 -28
  19. package/dist/controllers/module/import-controller.js.map +1 -1
  20. package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -1
  21. package/dist/controllers/resource-definition/resource-definition-controller.js +1 -0
  22. package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -1
  23. package/dist/evaluation-context.d.ts.map +1 -1
  24. package/dist/evaluation-context.js +13 -5
  25. package/dist/evaluation-context.js.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/kernel.d.ts +8 -0
  31. package/dist/kernel.d.ts.map +1 -1
  32. package/dist/kernel.js +46 -15
  33. package/dist/kernel.js.map +1 -1
  34. package/dist/manifest-sources/analysis-stamp.d.ts +2 -2
  35. package/dist/manifest-sources/analysis-stamp.d.ts.map +1 -1
  36. package/dist/manifest-sources/analysis-stamp.js +9 -4
  37. package/dist/manifest-sources/analysis-stamp.js.map +1 -1
  38. package/dist/manifest-sources/local-manifest-cache-source.d.ts +13 -3
  39. package/dist/manifest-sources/local-manifest-cache-source.d.ts.map +1 -1
  40. package/dist/manifest-sources/local-manifest-cache-source.js +25 -6
  41. package/dist/manifest-sources/local-manifest-cache-source.js.map +1 -1
  42. package/dist/module-context.d.ts +56 -7
  43. package/dist/module-context.d.ts.map +1 -1
  44. package/dist/module-context.js +121 -10
  45. package/dist/module-context.js.map +1 -1
  46. package/dist/resource-context.d.ts +1 -0
  47. package/dist/resource-context.d.ts.map +1 -1
  48. package/dist/resource-context.js +3 -0
  49. package/dist/resource-context.js.map +1 -1
  50. package/dist/schema-validator.d.ts +8 -1
  51. package/dist/schema-validator.d.ts.map +1 -1
  52. package/dist/schema-validator.js +47 -5
  53. package/dist/schema-validator.js.map +1 -1
  54. package/package.json +3 -3
  55. package/src/application-env.ts +37 -0
  56. package/src/controller-loader.ts +8 -1
  57. package/src/controller-loaders/npm-loader.ts +136 -59
  58. package/src/controller-registry.ts +18 -0
  59. package/src/controllers/module/import-controller.ts +58 -28
  60. package/src/controllers/resource-definition/resource-definition-controller.ts +1 -0
  61. package/src/evaluation-context.ts +15 -5
  62. package/src/index.ts +1 -0
  63. package/src/kernel.ts +65 -16
  64. package/src/manifest-sources/analysis-stamp.ts +9 -2
  65. package/src/manifest-sources/local-manifest-cache-source.ts +29 -4
  66. package/src/module-context.ts +153 -11
  67. package/src/resource-context.ts +4 -0
  68. package/src/schema-validator.ts +49 -5
@@ -38,4 +38,22 @@ export declare function resolveApplicationEnv(manifest: Record<string, any>, env
38
38
  * schema surfaces through the normal analysis/runtime path, not here.
39
39
  */
40
40
  export declare function precompileApplicationEnvSchemas(manifest: Record<string, any>, validator: SchemaValidator): void;
41
+ /**
42
+ * Build-time cache warm for resource-config validators. The runtime
43
+ * `_createInstance` compiles `controller.schema` — which falls back to the
44
+ * declaring `Telo.Definition`'s own `schema` — to validate every resource's
45
+ * config, then validates inputs/outputs against `inputType` / `outputType`.
46
+ * The analyze-only warm pass stops before instantiation, so without this those
47
+ * validators are absent from the `__validators` cache and the runtime
48
+ * recompiles (and, on a read-only image, fails to persist) them on every boot.
49
+ *
50
+ * Compiling each definition's `schema` (plus any inline `inputType` /
51
+ * `outputType` object schemas) here writes them into the same content-addressed
52
+ * cache the runtime reads, keyed identically because the same schema object is
53
+ * fed to the same `validator.compile`. Definitions whose controller exports its
54
+ * own `schema` (rare) still recompile at runtime — that needs the controller
55
+ * loaded, which the warm pass does not do. Compile failures are swallowed; a
56
+ * genuinely broken schema surfaces through analysis / runtime, not here.
57
+ */
58
+ export declare function precompileDefinitionSchemas(manifests: Array<Record<string, any>>, validator: SchemaValidator): void;
41
59
  //# sourceMappingURL=application-env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"application-env.d.ts","sourceRoot":"","sources":["../src/application-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiBxD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,eAAe,GACzB,mBAAmB,CAyBrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,SAAS,EAAE,eAAe,GACzB,IAAI,CAwBN"}
1
+ {"version":3,"file":"application-env.d.ts","sourceRoot":"","sources":["../src/application-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiBxD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,eAAe,GACzB,mBAAmB,CAyBrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,SAAS,EAAE,eAAe,GACzB,IAAI,CAwBN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EACrC,SAAS,EAAE,eAAe,GACzB,IAAI,CAeN"}
@@ -77,6 +77,42 @@ export function precompileApplicationEnvSchemas(manifest, validator) {
77
77
  compile(PORT_RESIDUAL_SCHEMA);
78
78
  }
79
79
  }
80
+ /**
81
+ * Build-time cache warm for resource-config validators. The runtime
82
+ * `_createInstance` compiles `controller.schema` — which falls back to the
83
+ * declaring `Telo.Definition`'s own `schema` — to validate every resource's
84
+ * config, then validates inputs/outputs against `inputType` / `outputType`.
85
+ * The analyze-only warm pass stops before instantiation, so without this those
86
+ * validators are absent from the `__validators` cache and the runtime
87
+ * recompiles (and, on a read-only image, fails to persist) them on every boot.
88
+ *
89
+ * Compiling each definition's `schema` (plus any inline `inputType` /
90
+ * `outputType` object schemas) here writes them into the same content-addressed
91
+ * cache the runtime reads, keyed identically because the same schema object is
92
+ * fed to the same `validator.compile`. Definitions whose controller exports its
93
+ * own `schema` (rare) still recompile at runtime — that needs the controller
94
+ * loaded, which the warm pass does not do. Compile failures are swallowed; a
95
+ * genuinely broken schema surfaces through analysis / runtime, not here.
96
+ */
97
+ export function precompileDefinitionSchemas(manifests, validator) {
98
+ const compile = (schema) => {
99
+ if (!schema || typeof schema !== "object")
100
+ return;
101
+ try {
102
+ validator.compile(schema);
103
+ }
104
+ catch {
105
+ // Broken schemas are reported by analysis / runtime, not the warm pass.
106
+ }
107
+ };
108
+ for (const m of manifests) {
109
+ if (m?.kind !== "Telo.Definition")
110
+ continue;
111
+ compile(m.schema);
112
+ compile(m.inputType);
113
+ compile(m.outputType);
114
+ }
115
+ }
80
116
  /**
81
117
  * Populate the root Application's `ports` namespace from host environment
82
118
  * variables. Mirrors `resolveBlock` but fixes the value type to a port integer
@@ -1 +1 @@
1
- {"version":3,"file":"application-env.js","sourceRoot":"","sources":["../src/application-env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"application-env.js","sourceRoot":"","sources":["../src/application-env.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,10 @@ export interface ControllerLoaderOptions {
59
59
  * (cargo loader has its own per-crate cache and does not need this).
60
60
  */
61
61
  entryUrl?: string;
62
+ /** Explicit npm install root (`<cache-root>/npm`), threaded from the kernel's
63
+ * single `resolveCacheRoot`. Overrides the entry-anchored default so a
64
+ * relocated `TELO_CACHE_DIR` is honoured. */
65
+ installRoot?: string;
62
66
  }
63
67
  /**
64
68
  * Top-level controller-loader dispatcher. Picks a per-scheme sub-loader by
@@ -1 +1 @@
1
- {"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,cAAc,GACd,OAAO,GACP,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACxD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC5E;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,GAAE,uBAA4B;IAO3C,IAAI,CACR,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;YAqDhB,WAAW;CAe1B"}
1
+ {"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,cAAc,GACd,OAAO,GACP,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACxD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC5E;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;kDAE8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,GAAE,uBAA4B;IAU3C,IAAI,CACR,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;YAqDhB,WAAW;CAe1B"}
@@ -23,7 +23,10 @@ import { DEFAULT_POLICY, POLICY_WILDCARD } from "./runtime-registry.js";
23
23
  export class ControllerLoader {
24
24
  constructor(options = {}) {
25
25
  this.emit = options.emit;
26
- this.npmLoader = new NpmControllerLoader({ entryUrl: options.entryUrl });
26
+ this.npmLoader = new NpmControllerLoader({
27
+ entryUrl: options.entryUrl,
28
+ installRoot: options.installRoot,
29
+ });
27
30
  this.napiLoader = new NapiControllerLoader();
28
31
  this.bundleLoader = new BundleControllerLoader();
29
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"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"}
@@ -18,20 +18,31 @@ export interface NpmControllerLoaderOptions {
18
18
  * `pkg-name` cli command resolves it from its argument.
19
19
  */
20
20
  entryUrl?: string;
21
+ /**
22
+ * Explicit install root, threaded from the kernel's single `resolveCacheRoot`
23
+ * (`<cache-root>/npm`). When set it overrides the entry-anchored
24
+ * `computeInstallRoot`, so a relocated `TELO_CACHE_DIR` (e.g. a prebuilt
25
+ * image baking deps at `/telo-cache`) is honoured without this loader reading
26
+ * the env itself.
27
+ */
28
+ installRoot?: string;
21
29
  }
22
30
  /**
23
31
  * The npm-loader maintains a single install root per kernel process. For a
24
32
  * local entry manifest (`file://` URL or bare path) the root lives at
25
33
  * `<entry-manifest-dir>/.telo/npm/`; for an HTTP(S) entry URL it lives in a
26
34
  * user-level cache keyed by `sha256(entryUrl)` (see `computeInstallRoot`).
27
- * Every controller — registry tag or `local_path` — is installed via
28
- * `npm install <spec>` into this root, then imported from
29
- * `<root>/node_modules/<pkg>`. This collapses two parallel
30
- * module realms (kernel-side @telorun/sdk vs. controller-side @telorun/sdk)
31
- * into one: the kernel's own SDK is wired in as a `file:` dep, npm/pnpm
32
- * symlink it, and Node's ESM resolver follows the symlink to the same
33
- * realpath as the kernel so `Stream` (and any other class-identity-sensitive
34
- * type) has a single constructor across the process.
35
+ * Every controller — registry tag or `local_path` — is installed under a
36
+ * version-scoped npm alias (`npm install <alias>@<spec>`, see `installAlias`)
37
+ * into this root, then imported from `<root>/node_modules/<alias>`. The alias
38
+ * encodes `name@version`, so a graph that references one package at two
39
+ * versions keeps both in the single flat `node_modules` instead of the last
40
+ * `--save` clobbering the first. This still collapses two parallel module
41
+ * realms (kernel-side @telorun/sdk vs. controller-side @telorun/sdk) into one:
42
+ * `@telorun/sdk` is exempt from aliasing and wired in as a `file:` dep under
43
+ * its real name, npm/pnpm hoist a single copy, and Node's ESM resolver follows
44
+ * it to the same realpath as the kernel — so `Stream` (and any other
45
+ * class-identity-sensitive type) has a single constructor across the process.
35
46
  *
36
47
  * Per-kernel state lives on each `NpmControllerLoader` instance (one is
37
48
  * constructed per `ControllerLoader`, which is itself constructed per
@@ -44,6 +55,8 @@ export interface NpmControllerLoaderOptions {
44
55
  */
45
56
  export declare class NpmControllerLoader {
46
57
  private readonly entryUrl?;
58
+ /** Threaded install root (`<cache-root>/npm`); overrides `computeInstallRoot`. */
59
+ private readonly installRootOverride?;
47
60
  /**
48
61
  * Per-process cache of "this controller's package + version is already
49
62
  * installed in the root and matches our spec" so concurrent loads of the
@@ -94,11 +107,14 @@ export declare class NpmControllerLoader {
94
107
  */
95
108
  private seedDepCaches;
96
109
  /**
97
- * Install one controller spec into the existing root. Single-flight per
98
- * spec within the process; cross-process safety is the fs-lock around the
99
- * `npm install` call. If the spec is already present in the manifest's
100
- * package.json (under `dependencies`), skip reusing the previous install.
110
+ * Install one controller into the existing root under its version-scoped
111
+ * `alias` folder. Single-flight per alias within the process; cross-process
112
+ * safety is the fs-lock around the `npm install` call. If the alias is
113
+ * already installed (right version on disk, or a matching `file:` record),
114
+ * skip — reusing the previous install.
101
115
  *
116
+ * `spec` is the source half of the install (`npm:<name>@<version>` or
117
+ * `file:<abs>`); the package manager is invoked with `<alias>@<spec>`.
102
118
  * `kind` distinguishes a `local_path` source (loader synthesized `file:`
103
119
  * spec) from a registry tag. The CLI silences progress for both `cache`
104
120
  * and `local`; `npm-install` is the only event surfaced. Folding this
@@ -132,6 +148,28 @@ export declare class NpmControllerLoader {
132
148
  * advance to a non-npm candidate.
133
149
  */
134
150
  declare function computeInstallRoot(entryUrl: string): string;
151
+ /**
152
+ * Version-qualified install alias for a controller package. The kernel's single
153
+ * flat install root can hold only one folder per package name, but a manifest
154
+ * graph may legitimately reference the same package at multiple versions (e.g.
155
+ * a library pins `@telorun/mcp-client@0.3.1` while the app uses `0.4.0`).
156
+ * Installing each `name@version` under a distinct npm alias
157
+ * (`npm install <alias>@npm:<name>@<version>`) lets every version coexist in
158
+ * one `node_modules`, mirroring the per-(name, version) identity of a Telo
159
+ * module singleton. `@telorun/sdk` is intentionally NOT routed through here —
160
+ * it stays under its real name so realm-collapse hoists a single copy across
161
+ * the kernel/controller boundary (see REALM_COLLAPSE_NAMES).
162
+ *
163
+ * The result is a valid unscoped npm package name: the scope `@` is dropped,
164
+ * `/` becomes `__`, and any character outside npm's name grammar is replaced
165
+ * with `-`. Because that sanitization is lossy (e.g. build metadata `1.0.0+x`
166
+ * and prerelease `1.0.0-x` both fold to `1.0.0-x`, and a `__` already in a
167
+ * package name overlaps the scope separator), the alias ends with a short hash
168
+ * of the *exact* `name@version` — so two distinct pairs can never collide onto
169
+ * one folder regardless of how their readable prefixes sanitize. The readable
170
+ * prefix is kept purely so the install tree is greppable.
171
+ */
172
+ declare function installAlias(packageName: string, version: string | null): string;
135
173
  /**
136
174
  * Normalize a `file:` spec to an absolute path so two specs that point at the
137
175
  * same source — one absolute (what the loader synthesizes from `local_path`)
@@ -157,6 +195,7 @@ declare function resolveExportTargetValue(target: any, conditions: ReadonlyArray
157
195
  * Not part of the kernel's public API — consumers should not import these.
158
196
  */
159
197
  export declare const __testing__: {
198
+ installAlias: typeof installAlias;
160
199
  normalizeFileSpec: typeof normalizeFileSpec;
161
200
  resolvePackageExportTarget: typeof resolvePackageExportTarget;
162
201
  resolveExportTargetValue: typeof resolveExportTargetValue;
@@ -1 +1 @@
1
- {"version":3,"file":"npm-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA4DlD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;AAoBlF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAC,CAAkB;IAEpC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,GAAE,0BAA+B;IAI9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBjE;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;YAUX,sBAAsB;IAqFpC;;;;;;;OAOG;YACW,aAAa;IAU3B;;;;;;;;;;;OAWG;YACW,cAAc;CAuG7B;AA+ND;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2BpD;AAED;;;;;;GAMG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKpE;AA6KD;;;;GAIG;AACH,iBAAe,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOrE;AAED,iBAAS,0BAA0B,CACjC,YAAY,EAAE,GAAG,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,MAAM,GAAG,IAAI,CAIf;AAED,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;;;;;;;;CASvB,CAAC"}
1
+ {"version":3,"file":"npm-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA4DlD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;AAoBlF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAE9C;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAC,CAAkB;IAEpC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,GAAE,0BAA+B;IAK9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBjE;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;YAUX,sBAAsB;IAqFpC;;;;;;;OAOG;YACW,aAAa;IAe3B;;;;;;;;;;;;;;OAcG;YACW,cAAc;CAuH7B;AA+ND;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2BpD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,iBAAS,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMzE;AAED;;;;;;GAMG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKpE;AAkLD;;;;GAIG;AACH,iBAAe,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOrE;AAED,iBAAS,0BAA0B,CACjC,YAAY,EAAE,GAAG,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,MAAM,GAAG,IAAI,CAIf;AAED,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;CAUvB,CAAC"}
@@ -55,14 +55,17 @@ const LOCK_RETRY_MS = 500;
55
55
  * local entry manifest (`file://` URL or bare path) the root lives at
56
56
  * `<entry-manifest-dir>/.telo/npm/`; for an HTTP(S) entry URL it lives in a
57
57
  * user-level cache keyed by `sha256(entryUrl)` (see `computeInstallRoot`).
58
- * Every controller — registry tag or `local_path` — is installed via
59
- * `npm install <spec>` into this root, then imported from
60
- * `<root>/node_modules/<pkg>`. This collapses two parallel
61
- * module realms (kernel-side @telorun/sdk vs. controller-side @telorun/sdk)
62
- * into one: the kernel's own SDK is wired in as a `file:` dep, npm/pnpm
63
- * symlink it, and Node's ESM resolver follows the symlink to the same
64
- * realpath as the kernel so `Stream` (and any other class-identity-sensitive
65
- * type) has a single constructor across the process.
58
+ * Every controller — registry tag or `local_path` — is installed under a
59
+ * version-scoped npm alias (`npm install <alias>@<spec>`, see `installAlias`)
60
+ * into this root, then imported from `<root>/node_modules/<alias>`. The alias
61
+ * encodes `name@version`, so a graph that references one package at two
62
+ * versions keeps both in the single flat `node_modules` instead of the last
63
+ * `--save` clobbering the first. This still collapses two parallel module
64
+ * realms (kernel-side @telorun/sdk vs. controller-side @telorun/sdk) into one:
65
+ * `@telorun/sdk` is exempt from aliasing and wired in as a `file:` dep under
66
+ * its real name, npm/pnpm hoist a single copy, and Node's ESM resolver follows
67
+ * it to the same realpath as the kernel — so `Stream` (and any other
68
+ * class-identity-sensitive type) has a single constructor across the process.
66
69
  *
67
70
  * Per-kernel state lives on each `NpmControllerLoader` instance (one is
68
71
  * constructed per `ControllerLoader`, which is itself constructed per
@@ -100,6 +103,7 @@ export class NpmControllerLoader {
100
103
  */
101
104
  this.rootDeps = {};
102
105
  this.entryUrl = options.entryUrl;
106
+ this.installRootOverride = options.installRoot;
103
107
  }
104
108
  async load(purl, baseUri) {
105
109
  const parsed = PackageURL.fromString(purl);
@@ -107,10 +111,14 @@ export class NpmControllerLoader {
107
111
  throw new Error(`Invalid PURL '${purl}': missing package name`);
108
112
  }
109
113
  const packageName = parsed.namespace ? `${parsed.namespace}/${parsed.name}` : parsed.name;
114
+ const version = parsed.version ?? null;
115
+ // Version-scope the install under an alias so the same package at two
116
+ // versions can coexist in one flat node_modules (see installAlias).
117
+ const alias = installAlias(packageName, version);
110
118
  const installRoot = await this.ensureInstallRoot();
111
119
  const resolved = await resolveInstallSpec(parsed, packageName, baseUri);
112
- const source = await this.installPackage(installRoot, packageName, resolved.spec, resolved.kind, parsed.version ?? null);
113
- const instance = await loadFromInstall(installRoot, packageName, parsed.subpath ?? null, purl);
120
+ const source = await this.installPackage(installRoot, alias, resolved.spec, resolved.kind, version);
121
+ const instance = await loadFromInstall(installRoot, alias, parsed.subpath ?? null, purl);
114
122
  return { instance, source };
115
123
  }
116
124
  /**
@@ -140,7 +148,7 @@ export class NpmControllerLoader {
140
148
  "Kernel.load() records this; CLI: pass the manifest path).");
141
149
  }
142
150
  const entryUrlStr = this.entryUrl;
143
- const installRoot = computeInstallRoot(entryUrlStr);
151
+ const installRoot = this.installRootOverride ?? computeInstallRoot(entryUrlStr);
144
152
  // Build the install-root package.json: kernel-runtime deps as `file:` refs
145
153
  // pointing at the kernel-side realpath. Modules declare these names as
146
154
  // `peerDependencies`, so npm/pnpm resolve each controller's `import` to the
@@ -211,25 +219,33 @@ export class NpmControllerLoader {
211
219
  * reload where the writer is still racing).
212
220
  */
213
221
  async seedDepCaches(installRoot, dependencies) {
222
+ // `dependencies` is only the realm-collapse deps (`@telorun/sdk`), keyed by
223
+ // real `name@spec`. Controllers, by contrast, key `installedSpecs` by their
224
+ // version-scoped alias in `installPackage`. The two key spaces are
225
+ // intentionally disjoint — realm-collapse names are wired in here and never
226
+ // flow through `installPackage`, so an alias and a `name@spec` never clash.
214
227
  for (const [name, spec] of Object.entries(dependencies)) {
215
228
  this.installedSpecs.add(`${name}@${spec}`);
216
229
  }
217
230
  this.rootDeps = (await readPackageDeps(installRoot)) ?? { ...dependencies };
218
231
  }
219
232
  /**
220
- * Install one controller spec into the existing root. Single-flight per
221
- * spec within the process; cross-process safety is the fs-lock around the
222
- * `npm install` call. If the spec is already present in the manifest's
223
- * package.json (under `dependencies`), skip reusing the previous install.
233
+ * Install one controller into the existing root under its version-scoped
234
+ * `alias` folder. Single-flight per alias within the process; cross-process
235
+ * safety is the fs-lock around the `npm install` call. If the alias is
236
+ * already installed (right version on disk, or a matching `file:` record),
237
+ * skip — reusing the previous install.
224
238
  *
239
+ * `spec` is the source half of the install (`npm:<name>@<version>` or
240
+ * `file:<abs>`); the package manager is invoked with `<alias>@<spec>`.
225
241
  * `kind` distinguishes a `local_path` source (loader synthesized `file:`
226
242
  * spec) from a registry tag. The CLI silences progress for both `cache`
227
243
  * and `local`; `npm-install` is the only event surfaced. Folding this
228
244
  * decision in here means the caller no longer needs to override the
229
245
  * returned source after the fact.
230
246
  */
231
- async installPackage(installRoot, packageName, spec, kind, requestedVersion) {
232
- const cacheKey = `${packageName}@${spec}`;
247
+ async installPackage(installRoot, alias, spec, kind, requestedVersion) {
248
+ const cacheKey = alias;
233
249
  if (this.installedSpecs.has(cacheKey))
234
250
  return "cache";
235
251
  const inFlight = this.inFlight.get(cacheKey);
@@ -237,16 +253,19 @@ export class NpmControllerLoader {
237
253
  await inFlight;
238
254
  return "cache";
239
255
  }
240
- const targetPath = path.join(installRoot, "node_modules", ...packageName.split("/"));
256
+ // The package is installed under its version-scoped alias, so its folder
257
+ // name in node_modules is the alias, not the bare package name.
258
+ const targetPath = path.join(installRoot, "node_modules", alias);
241
259
  // Registry fast path: compare against the installed package's own
242
- // `package.json` version field. `rootDeps[packageName]` can't be used
243
- // here because npm rewrites registry specs on `--save` — we pass
244
- // `@scope/pkg@0.3.4`, npm writes `^0.3.4` — so a string comparison
245
- // never matches and every fresh `NpmControllerLoader` (one per
246
- // `Telo.Definition.init`) would fall through to a no-op but ~200ms
260
+ // `package.json` version field. The recorded dep spec can't be used here
261
+ // because npm rewrites registry specs on `--save` — we pass
262
+ // `<alias>@npm:@scope/pkg@0.3.4`, npm writes `npm:@scope/pkg@^0.3.4` — so a
263
+ // string comparison never matches and every fresh `NpmControllerLoader`
264
+ // (one per `Telo.Definition.init`) would fall through to a no-op but ~200ms
247
265
  // `npm install`. Reading the installed package.json sidesteps that
248
- // entirely: if the requested PURL version equals what's on disk, we
249
- // already have the right thing.
266
+ // entirely: if the requested PURL version equals what's on disk under this
267
+ // alias, we already have the right thing. Because the alias encodes the
268
+ // version, a present alias folder is always the requested version.
250
269
  //
251
270
  // Ranges (`^1.0.0`, `~2.3.0`) fall through to a real `npm install` —
252
271
  // they're rare in PURLs (which typically pin) and a proper range check
@@ -259,30 +278,41 @@ export class NpmControllerLoader {
259
278
  return "cache";
260
279
  }
261
280
  }
262
- // Local (`file:`) spec fast path: consult the in-process snapshot of the
263
- // install root's `dependencies` map (seeded by `materializeInstallRoot`).
264
- // Normalize because npm rewrites absolute `file:` deps to relative paths
265
- // inside the install root's `package.json` the loader passes the
266
- // absolute path, the on-disk record is `file:../../foo`.
267
- const cachedSpec = this.rootDeps[packageName];
268
- if (cachedSpec !== undefined &&
269
- normalizeFileSpec(cachedSpec, installRoot) === normalizeFileSpec(spec, installRoot) &&
270
- (await pathExists(targetPath))) {
271
- this.installedSpecs.add(cacheKey);
272
- return "cache";
281
+ else {
282
+ // Local (`file:`) spec fast path: consult the in-process snapshot of the
283
+ // install root's `dependencies` map (seeded by `materializeInstallRoot`).
284
+ // Normalize because npm rewrites absolute `file:` deps to relative paths
285
+ // inside the install root's `package.json` — the loader passes the
286
+ // absolute path, the on-disk record is `file:../../foo`.
287
+ const cachedSpec = this.rootDeps[alias];
288
+ if (cachedSpec !== undefined &&
289
+ normalizeFileSpec(cachedSpec, installRoot) === normalizeFileSpec(spec, installRoot) &&
290
+ (await pathExists(targetPath))) {
291
+ this.installedSpecs.add(cacheKey);
292
+ return "cache";
293
+ }
273
294
  }
274
295
  const work = (async () => {
275
296
  await withInstallLock(installRoot, async () => {
276
297
  // Re-check inside the lock: a peer process may have installed the
277
- // spec between the fast-path miss and our acquisition. Normalize
278
- // the on-disk record to absolute form before comparing — npm
279
- // rewrites `file:` deps to be relative to the install root.
280
- const lockedSpec = await readDepSpec(installRoot, packageName);
281
- if (lockedSpec !== undefined &&
282
- normalizeFileSpec(lockedSpec, installRoot) === normalizeFileSpec(spec, installRoot) &&
283
- (await pathExists(targetPath))) {
284
- this.rootDeps[packageName] = lockedSpec;
285
- return;
298
+ // spec between the fast-path miss and our acquisition.
299
+ if (kind === "registry") {
300
+ const installedVersion = await readInstalledVersion(targetPath);
301
+ if (installedVersion !== null &&
302
+ (requestedVersion === null || requestedVersion === installedVersion)) {
303
+ return;
304
+ }
305
+ }
306
+ else {
307
+ // Normalize the on-disk record to absolute form before comparing —
308
+ // npm rewrites `file:` deps to be relative to the install root.
309
+ const lockedSpec = await readDepSpec(installRoot, alias);
310
+ if (lockedSpec !== undefined &&
311
+ normalizeFileSpec(lockedSpec, installRoot) === normalizeFileSpec(spec, installRoot) &&
312
+ (await pathExists(targetPath))) {
313
+ this.rootDeps[alias] = lockedSpec;
314
+ return;
315
+ }
286
316
  }
287
317
  await runPackageManager(installRoot, [
288
318
  "install",
@@ -291,16 +321,19 @@ export class NpmControllerLoader {
291
321
  "--silent",
292
322
  ...PEER_INSTALL_FLAGS,
293
323
  "--save",
294
- spec,
324
+ // `<alias>@<source-spec>` installs the package under the alias folder
325
+ // (`npm:` for registry, `file:` for local) so multiple versions of
326
+ // one package name coexist in the single install root.
327
+ `${alias}@${spec}`,
295
328
  ]);
296
329
  // Re-read what npm actually wrote (it normalizes `file:` paths to
297
330
  // be relative to the install root). Caching the spec in its on-disk
298
331
  // form keeps subsequent fast-path comparisons stable.
299
- const written = await readDepSpec(installRoot, packageName);
332
+ const written = await readDepSpec(installRoot, alias);
300
333
  if (written !== undefined)
301
- this.rootDeps[packageName] = written;
334
+ this.rootDeps[alias] = written;
302
335
  else
303
- this.rootDeps[packageName] = spec;
336
+ this.rootDeps[alias] = spec;
304
337
  });
305
338
  })();
306
339
  this.inFlight.set(cacheKey, work);
@@ -589,6 +622,34 @@ function computeInstallRoot(entryUrl) {
589
622
  `loader. Supported schemes: file://, http://, https://, or a bare filesystem path. ` +
590
623
  `(entryUrl: ${entryUrl})`);
591
624
  }
625
+ /**
626
+ * Version-qualified install alias for a controller package. The kernel's single
627
+ * flat install root can hold only one folder per package name, but a manifest
628
+ * graph may legitimately reference the same package at multiple versions (e.g.
629
+ * a library pins `@telorun/mcp-client@0.3.1` while the app uses `0.4.0`).
630
+ * Installing each `name@version` under a distinct npm alias
631
+ * (`npm install <alias>@npm:<name>@<version>`) lets every version coexist in
632
+ * one `node_modules`, mirroring the per-(name, version) identity of a Telo
633
+ * module singleton. `@telorun/sdk` is intentionally NOT routed through here —
634
+ * it stays under its real name so realm-collapse hoists a single copy across
635
+ * the kernel/controller boundary (see REALM_COLLAPSE_NAMES).
636
+ *
637
+ * The result is a valid unscoped npm package name: the scope `@` is dropped,
638
+ * `/` becomes `__`, and any character outside npm's name grammar is replaced
639
+ * with `-`. Because that sanitization is lossy (e.g. build metadata `1.0.0+x`
640
+ * and prerelease `1.0.0-x` both fold to `1.0.0-x`, and a `__` already in a
641
+ * package name overlaps the scope separator), the alias ends with a short hash
642
+ * of the *exact* `name@version` — so two distinct pairs can never collide onto
643
+ * one folder regardless of how their readable prefixes sanitize. The readable
644
+ * prefix is kept purely so the install tree is greppable.
645
+ */
646
+ function installAlias(packageName, version) {
647
+ const prefix = `${packageName.replace(/^@/, "").replace(/\//g, "__")}__${version ?? "latest"}`
648
+ .replace(/[^a-zA-Z0-9._-]/g, "-")
649
+ .toLowerCase();
650
+ const digest = sha256(`${packageName}@${version ?? ""}`).slice(0, 8);
651
+ return `${prefix}__${digest}`;
652
+ }
592
653
  /**
593
654
  * Normalize a `file:` spec to an absolute path so two specs that point at the
594
655
  * same source — one absolute (what the loader synthesizes from `local_path`)
@@ -662,7 +723,10 @@ async function resolveInstallSpec(parsed, packageName, baseUri) {
662
723
  return { kind: "local", spec: `file:${absolutePath}`, absolutePath };
663
724
  }
664
725
  }
665
- const spec = parsed.version ? `${packageName}@${parsed.version}` : packageName;
726
+ // `npm:` source spec so the caller can install it under a version-scoped
727
+ // alias (`<alias>@npm:<name>@<version>`); both versions of one package name
728
+ // then coexist in the single flat install root.
729
+ const spec = parsed.version ? `npm:${packageName}@${parsed.version}` : `npm:${packageName}`;
666
730
  return { kind: "registry", spec };
667
731
  }
668
732
  /**
@@ -671,8 +735,10 @@ async function resolveInstallSpec(parsed, packageName, baseUri) {
671
735
  * `installPackage` decides whether work is needed, this function is pure
672
736
  * resolve-and-import once the tree is in place.
673
737
  */
674
- async function loadFromInstall(installRoot, packageName, subpath, purl) {
675
- const packageRoot = path.join(installRoot, "node_modules", ...packageName.split("/"));
738
+ async function loadFromInstall(installRoot, alias, subpath, purl) {
739
+ // The package lives under its version-scoped alias folder (see installAlias),
740
+ // not its bare scoped name.
741
+ const packageRoot = path.join(installRoot, "node_modules", alias);
676
742
  const entry = subpath ? `./${subpath}` : ".";
677
743
  const entryFile = await resolvePackageEntry(packageRoot, entry);
678
744
  // ESM dynamic `import()` accepts either a relative specifier or a `file://`
@@ -810,6 +876,7 @@ function resolveExportTargetValue(target, conditions, depth) {
810
876
  * Not part of the kernel's public API — consumers should not import these.
811
877
  */
812
878
  export const __testing__ = {
879
+ installAlias,
813
880
  normalizeFileSpec,
814
881
  resolvePackageExportTarget,
815
882
  resolveExportTargetValue,