@telorun/kernel 0.4.1 → 0.6.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 (89) hide show
  1. package/dist/controller-loader.d.ts +19 -20
  2. package/dist/controller-loader.d.ts.map +1 -1
  3. package/dist/controller-loader.js +67 -247
  4. package/dist/controller-loader.js.map +1 -1
  5. package/dist/controller-loaders/napi-loader.d.ts +27 -0
  6. package/dist/controller-loaders/napi-loader.d.ts.map +1 -0
  7. package/dist/controller-loaders/napi-loader.js +158 -0
  8. package/dist/controller-loaders/napi-loader.js.map +1 -0
  9. package/dist/controller-loaders/npm-loader.d.ts +20 -0
  10. package/dist/controller-loaders/npm-loader.d.ts.map +1 -0
  11. package/dist/controller-loaders/npm-loader.js +256 -0
  12. package/dist/controller-loaders/npm-loader.js.map +1 -0
  13. package/dist/controller-registry.d.ts +30 -20
  14. package/dist/controller-registry.d.ts.map +1 -1
  15. package/dist/controller-registry.js +50 -99
  16. package/dist/controller-registry.js.map +1 -1
  17. package/dist/controllers/module/import-controller.d.ts +11 -0
  18. package/dist/controllers/module/import-controller.d.ts.map +1 -1
  19. package/dist/controllers/module/import-controller.js +30 -3
  20. package/dist/controllers/module/import-controller.js.map +1 -1
  21. package/dist/controllers/resource-definition/abstract-controller.d.ts +35 -0
  22. package/dist/controllers/resource-definition/abstract-controller.d.ts.map +1 -0
  23. package/dist/controllers/resource-definition/abstract-controller.js +34 -0
  24. package/dist/controllers/resource-definition/abstract-controller.js.map +1 -0
  25. package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -1
  26. package/dist/controllers/resource-definition/resource-definition-controller.js +1 -1
  27. package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -1
  28. package/dist/evaluation-context.js +1 -1
  29. package/dist/evaluation-context.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/kernel.d.ts +14 -16
  35. package/dist/kernel.d.ts.map +1 -1
  36. package/dist/kernel.js +58 -49
  37. package/dist/kernel.js.map +1 -1
  38. package/dist/manifest-schemas.d.ts +50 -0
  39. package/dist/manifest-schemas.d.ts.map +1 -1
  40. package/dist/manifest-schemas.js +31 -0
  41. package/dist/manifest-schemas.js.map +1 -1
  42. package/dist/{manifest-adapters/local-file-adapter.d.ts → manifest-sources/local-file-source.d.ts} +3 -3
  43. package/dist/manifest-sources/local-file-source.d.ts.map +1 -0
  44. package/dist/{manifest-adapters/local-file-adapter.js → manifest-sources/local-file-source.js} +2 -2
  45. package/dist/manifest-sources/local-file-source.js.map +1 -0
  46. package/dist/manifest-sources/memory-source.d.ts +23 -0
  47. package/dist/manifest-sources/memory-source.d.ts.map +1 -0
  48. package/dist/manifest-sources/memory-source.js +83 -0
  49. package/dist/manifest-sources/memory-source.js.map +1 -0
  50. package/dist/module-context.d.ts +17 -3
  51. package/dist/module-context.d.ts.map +1 -1
  52. package/dist/module-context.js +19 -1
  53. package/dist/module-context.js.map +1 -1
  54. package/dist/registry.d.ts.map +1 -1
  55. package/dist/registry.js +0 -1
  56. package/dist/registry.js.map +1 -1
  57. package/dist/resource-context.d.ts +2 -7
  58. package/dist/resource-context.d.ts.map +1 -1
  59. package/dist/resource-context.js +8 -28
  60. package/dist/resource-context.js.map +1 -1
  61. package/dist/runtime-registry.d.ts +50 -0
  62. package/dist/runtime-registry.d.ts.map +1 -0
  63. package/dist/runtime-registry.js +140 -0
  64. package/dist/runtime-registry.js.map +1 -0
  65. package/package.json +16 -5
  66. package/src/controller-loader.ts +77 -273
  67. package/src/controller-loaders/napi-loader.ts +191 -0
  68. package/src/controller-loaders/npm-loader.ts +285 -0
  69. package/src/controller-registry.ts +66 -129
  70. package/src/controllers/module/import-controller.ts +32 -3
  71. package/src/controllers/resource-definition/abstract-controller.ts +56 -0
  72. package/src/controllers/resource-definition/resource-definition-controller.ts +1 -0
  73. package/src/evaluation-context.ts +1 -1
  74. package/src/index.ts +2 -1
  75. package/src/kernel.ts +86 -67
  76. package/src/manifest-schemas.ts +33 -0
  77. package/src/{manifest-adapters/local-file-adapter.ts → manifest-sources/local-file-source.ts} +2 -2
  78. package/src/manifest-sources/memory-source.ts +104 -0
  79. package/src/module-context.ts +36 -3
  80. package/src/registry.ts +0 -1
  81. package/src/resource-context.ts +11 -36
  82. package/src/runtime-registry.ts +170 -0
  83. package/dist/manifest-adapters/local-file-adapter.d.ts.map +0 -1
  84. package/dist/manifest-adapters/local-file-adapter.js.map +0 -1
  85. package/dist/manifest-adapters/manifest-adapter.d.ts +0 -35
  86. package/dist/manifest-adapters/manifest-adapter.d.ts.map +0 -1
  87. package/dist/manifest-adapters/manifest-adapter.js +0 -2
  88. package/dist/manifest-adapters/manifest-adapter.js.map +0 -1
  89. package/src/manifest-adapters/manifest-adapter.ts +0 -35
@@ -1,24 +1,23 @@
1
1
  import { ControllerInstance } from "@telorun/sdk";
2
+ import { ControllerPolicy } from "./runtime-registry.js";
3
+ export type { ControllerPolicy } from "./runtime-registry.js";
4
+ /**
5
+ * Top-level controller-loader dispatcher. Picks a per-scheme sub-loader by
6
+ * PURL type and applies the resolved selection policy:
7
+ *
8
+ * ControllerLoader.load(candidates, baseUri, policy)
9
+ * └─ orderCandidates(candidates, policy)
10
+ * ├─ pkg:npm → NpmControllerLoader
11
+ * └─ pkg:cargo → NapiControllerLoader
12
+ *
13
+ * Recovery: env-missing failures (`ControllerEnvMissingError`) advance to the
14
+ * next candidate. User-code failures (`RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | "ERR_CONTROLLER_INVALID")`)
15
+ * fail hard regardless of remaining candidates.
16
+ */
2
17
  export declare class ControllerLoader {
3
- /**
4
- * Load controller instance from URI in format:
5
- *
6
- * <runtime>:<registry>:<path>@<version-spec>
7
- */
8
- load(purlCandidates: string[], baseUri: string): Promise<ControllerInstance>;
9
- private ensureNpmPackageInstalled;
10
- private getPackageName;
11
- private getInstalledPackageRoot;
12
- private getLocalPackageName;
13
- private resolvePackageEntry;
14
- private resolvePackageExportTarget;
15
- private resolveExportTargetValue;
16
- /**
17
- * For Node.js, resolve .ts paths to their compiled .js equivalents in dist/.
18
- * Bun can load .ts directly, so it returns the path unchanged.
19
- */
20
- private resolveForRuntime;
21
- private findInNodeModules;
22
- private pathExists;
18
+ private npmLoader;
19
+ private napiLoader;
20
+ load(purlCandidates: string[], baseUri: string, policy?: ControllerPolicy): Promise<ControllerInstance>;
21
+ private dispatchOne;
23
22
  }
24
23
  //# sourceMappingURL=controller-loader.d.ts.map
@@ -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;AAgBhE,qBAAa,gBAAgB;IAC3B;;;;OAIG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAuDpE,yBAAyB;IAmCvC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,uBAAuB;YAKjB,mBAAmB;YAanB,mBAAmB;IAuEjC,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,wBAAwB;IAgChC;;;OAGG;YACW,iBAAiB;YAqBjB,iBAAiB;YAejB,UAAU;CAQzB"}
1
+ {"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,UAAU,CAA8B;IAE1C,IAAI,CACR,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;YA+BhB,WAAW;CAS1B"}
@@ -1,270 +1,90 @@
1
1
  import { RuntimeError } from "@telorun/sdk";
2
- import { execFile } from "child_process";
3
- import { createHash } from "crypto";
4
- import * as fs from "fs/promises";
5
- import * as os from "os";
6
- import { PackageURL } from "packageurl-js";
7
- import * as path from "path";
8
- import { promisify } from "util";
9
- const homedir = os.homedir();
10
- const cacheRoot = process.env.TELO_CACHE_DIR
11
- ? path.resolve(process.env.TELO_CACHE_DIR)
12
- : path.join(homedir, ".cache", "telo");
13
- const npmCacheRoot = path.join(cacheRoot, "npm");
14
- const isBun = typeof globalThis.Bun !== "undefined";
2
+ import { ControllerEnvMissingError, NapiControllerLoader } from "./controller-loaders/napi-loader.js";
3
+ import { NpmControllerLoader } from "./controller-loaders/npm-loader.js";
4
+ import { DEFAULT_POLICY, POLICY_WILDCARD } from "./runtime-registry.js";
5
+ /**
6
+ * Top-level controller-loader dispatcher. Picks a per-scheme sub-loader by
7
+ * PURL type and applies the resolved selection policy:
8
+ *
9
+ * ControllerLoader.load(candidates, baseUri, policy)
10
+ * └─ orderCandidates(candidates, policy)
11
+ * ├─ pkg:npm → NpmControllerLoader
12
+ * └─ pkg:cargo NapiControllerLoader
13
+ *
14
+ * Recovery: env-missing failures (`ControllerEnvMissingError`) advance to the
15
+ * next candidate. User-code failures (`RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | "ERR_CONTROLLER_INVALID")`)
16
+ * fail hard regardless of remaining candidates.
17
+ */
15
18
  export class ControllerLoader {
16
- /**
17
- * Load controller instance from URI in format:
18
- *
19
- * <runtime>:<registry>:<path>@<version-spec>
20
- */
21
- async load(purlCandidates, baseUri) {
19
+ constructor() {
20
+ this.npmLoader = new NpmControllerLoader();
21
+ this.napiLoader = new NapiControllerLoader();
22
+ }
23
+ async load(purlCandidates, baseUri, policy) {
22
24
  if (!purlCandidates || purlCandidates.length === 0) {
23
25
  throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", "Missing controller PURL candidates");
24
26
  }
25
- const purl = purlCandidates.find((p) => p.startsWith("pkg:npm"));
26
- if (!purl) {
27
- throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", "Controller PURL candidates not applicable");
28
- }
29
- const [type, namespace, name, versionSpec, qualifiers, entry] = PackageURL.parseString(purl);
30
- const localPath = qualifiers?.get("local_path");
31
- const cacheKey = createHash("sha256").update(purlCandidates[0]).digest("hex").slice(0, 12);
32
- const installDir = path.join(npmCacheRoot, cacheKey);
33
- let packageRoot;
34
- const isLocalManifest = baseUri && !baseUri.startsWith("http://") && !baseUri.startsWith("https://");
35
- if (localPath && isLocalManifest) {
36
- const baseUriPath = baseUri.startsWith("file://") ? baseUri.slice("file://".length) : baseUri;
37
- const manifestDir = path.dirname(baseUriPath);
38
- const resolvedLocalPath = path.resolve(manifestDir, localPath);
39
- if (await this.pathExists(resolvedLocalPath)) {
40
- packageRoot = resolvedLocalPath;
41
- }
42
- else {
43
- const nodeModulesPath = await this.findInNodeModules(`${namespace}/${name}`);
44
- if (nodeModulesPath) {
45
- packageRoot = nodeModulesPath;
46
- }
47
- else {
48
- await this.ensureNpmPackageInstalled(installDir, `${namespace}/${name}@${versionSpec}`);
49
- packageRoot = this.getInstalledPackageRoot(installDir, `${namespace}/${name}`);
50
- }
51
- }
52
- }
53
- else {
54
- const nodeModulesPath = await this.findInNodeModules(`${namespace}/${name}`);
55
- if (nodeModulesPath) {
56
- packageRoot = nodeModulesPath;
57
- }
58
- else {
59
- await this.ensureNpmPackageInstalled(installDir, `${namespace}/${name}@${versionSpec}`);
60
- packageRoot = this.getInstalledPackageRoot(installDir, `${namespace}/${name}`);
61
- }
62
- }
63
- const entryFile = await this.resolvePackageEntry(packageRoot, entry ? `./${entry}` : ".");
64
- const instance = await import(entryFile);
65
- if (!instance || (!instance.create && !instance.register)) {
66
- throw new Error(`Invalid controller loaded from "${purlCandidates[0]}": missing create or register function`);
67
- }
68
- return instance;
69
- }
70
- async ensureNpmPackageInstalled(installDir, packageSpec) {
71
- const packageName = this.getPackageName(packageSpec.startsWith(".") || path.isAbsolute(packageSpec)
72
- ? await this.getLocalPackageName(packageSpec)
73
- : packageSpec);
74
- const packageRoot = this.getInstalledPackageRoot(installDir, packageName);
75
- const packageJsonPath = path.join(packageRoot, "package.json");
76
- if (await this.pathExists(packageJsonPath)) {
77
- return;
78
- }
79
- await fs.mkdir(installDir, { recursive: true });
80
- const rootPackageJson = path.join(installDir, "package.json");
81
- if (!(await this.pathExists(rootPackageJson))) {
82
- await fs.writeFile(rootPackageJson, JSON.stringify({ name: "telo-cache", private: true }, null, 2));
83
- }
84
- const execFileAsync = promisify(execFile);
85
- const args = [
86
- "install",
87
- "--no-audit",
88
- "--no-fund",
89
- "--silent",
90
- "--prefix",
91
- installDir,
92
- packageSpec,
93
- ];
94
- await execFileAsync("npm", args);
95
- }
96
- getPackageName(packageSpec) {
97
- if (packageSpec.startsWith("@")) {
98
- const lastAt = packageSpec.lastIndexOf("@");
99
- return lastAt > 0 ? packageSpec.slice(0, lastAt) : packageSpec;
100
- }
101
- const [name] = packageSpec.split("@");
102
- return name;
103
- }
104
- getInstalledPackageRoot(installDir, packageName) {
105
- const nameParts = packageName.split("/");
106
- return path.join(installDir, "node_modules", ...nameParts);
107
- }
108
- async getLocalPackageName(packagePath) {
109
- const packageJsonPath = path.join(packagePath, "package.json");
110
- if (!(await this.pathExists(packageJsonPath))) {
111
- throw new Error(`Local package missing package.json: ${packagePath}`);
112
- }
113
- const content = await fs.readFile(packageJsonPath, "utf8");
114
- const parsed = JSON.parse(content);
115
- if (!parsed?.name) {
116
- throw new Error(`Local package missing name in package.json: ${packagePath}`);
117
- }
118
- return parsed.name;
119
- }
120
- async resolvePackageEntry(packageRoot, entry, packageName) {
121
- const packageJsonPath = path.join(packageRoot, "package.json");
122
- let resolvedPackageName = packageName;
123
- let packageJson = null;
124
- if (!resolvedPackageName && (await this.pathExists(packageJsonPath))) {
125
- const content = await fs.readFile(packageJsonPath, "utf8");
126
- try {
127
- packageJson = JSON.parse(content);
128
- resolvedPackageName = packageJson?.name;
129
- }
130
- catch {
131
- resolvedPackageName = packageName;
132
- }
27
+ const effectivePolicy = policy ?? DEFAULT_POLICY;
28
+ const ordered = orderCandidates(purlCandidates, effectivePolicy);
29
+ if (ordered.length === 0) {
30
+ throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `No controllers match runtime selection [${effectivePolicy.load.join(", ")}]; declared: ${purlCandidates.join(", ")}`);
133
31
  }
134
- else if (await this.pathExists(packageJsonPath)) {
32
+ const errors = [];
33
+ for (const purl of ordered) {
135
34
  try {
136
- packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf8"));
35
+ return await this.dispatchOne(purl, baseUri);
137
36
  }
138
- catch {
139
- packageJson = null;
140
- }
141
- }
142
- const entryValue = entry.trim();
143
- const exportTarget = this.resolvePackageExportTarget(packageJson?.exports, entryValue);
144
- if (exportTarget) {
145
- const resolved = path.resolve(packageRoot, exportTarget);
146
- if (await this.pathExists(resolved)) {
147
- return this.resolveForRuntime(resolved, packageRoot);
148
- }
149
- if (!path.extname(resolved)) {
150
- const withJs = `${resolved}.js`;
151
- if (await this.pathExists(withJs)) {
152
- return withJs;
37
+ catch (err) {
38
+ if (err instanceof ControllerEnvMissingError) {
39
+ errors.push(`${purl}: ${err.message}`);
40
+ continue;
153
41
  }
42
+ throw err;
154
43
  }
155
44
  }
156
- if ((entryValue === "." || entryValue === "./") && packageJson) {
157
- const mainFields = ["module", "main"];
158
- for (const field of mainFields) {
159
- const target = packageJson[field];
160
- if (typeof target === "string") {
161
- const resolved = path.resolve(packageRoot, target);
162
- if (await this.pathExists(resolved)) {
163
- return this.resolveForRuntime(resolved, packageRoot);
164
- }
165
- if (!path.extname(resolved)) {
166
- const withJs = `${resolved}.js`;
167
- if (await this.pathExists(withJs)) {
168
- return withJs;
169
- }
170
- }
171
- }
172
- }
173
- }
174
- const directPath = path.resolve(packageRoot, entryValue);
175
- if (await this.pathExists(directPath)) {
176
- return this.resolveForRuntime(directPath, packageRoot);
177
- }
178
- if (!path.extname(directPath)) {
179
- const withJs = `${directPath}.js`;
180
- if (await this.pathExists(withJs)) {
181
- return withJs;
182
- }
183
- }
184
- throw new Error(`Controller entry "${entryValue}" could not be resolved in ${packageRoot}`);
185
- }
186
- resolvePackageExportTarget(exportsField, entry) {
187
- if (!exportsField) {
188
- return null;
189
- }
190
- const key = entry === "." || entry === "./" ? "." : entry;
191
- const target = exportsField[key];
192
- return this.resolveExportTargetValue(target);
45
+ throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `No controller resolved. Tried ${ordered.length} candidate(s):\n${errors.join("\n")}`);
193
46
  }
194
- resolveExportTargetValue(target) {
195
- if (!target) {
196
- return null;
47
+ async dispatchOne(purl, baseUri) {
48
+ if (purl.startsWith("pkg:npm")) {
49
+ return this.npmLoader.load(purl, baseUri);
197
50
  }
198
- if (typeof target === "string") {
199
- return target;
51
+ if (purl.startsWith("pkg:cargo")) {
52
+ return this.napiLoader.load(purl, baseUri);
200
53
  }
201
- if (Array.isArray(target)) {
202
- for (const item of target) {
203
- const resolved = this.resolveExportTargetValue(item);
204
- if (resolved) {
205
- return resolved;
54
+ throw new ControllerEnvMissingError(`Unsupported PURL scheme: ${purl}`);
55
+ }
56
+ }
57
+ function getPurlType(purl) {
58
+ const slashIdx = purl.indexOf("/", purl.indexOf(":") + 1);
59
+ return slashIdx === -1 ? purl : purl.slice(0, slashIdx);
60
+ }
61
+ function orderCandidates(candidates, policy) {
62
+ const result = [];
63
+ const seen = new Set();
64
+ const explicitTypes = new Set(policy.load.filter((t) => t !== POLICY_WILDCARD));
65
+ for (const entry of policy.load) {
66
+ if (entry === POLICY_WILDCARD) {
67
+ for (const candidate of candidates) {
68
+ if (seen.has(candidate))
69
+ continue;
70
+ const type = getPurlType(candidate);
71
+ if (!explicitTypes.has(type)) {
72
+ result.push(candidate);
73
+ seen.add(candidate);
206
74
  }
207
75
  }
208
- return null;
209
76
  }
210
- if (typeof target === "object") {
211
- const preferredKeys = isBun
212
- ? ["bun", "import", "default", "require"]
213
- : ["import", "default", "require"];
214
- for (const key of preferredKeys) {
215
- if (target[key]) {
216
- const resolved = this.resolveExportTargetValue(target[key]);
217
- if (resolved) {
218
- return resolved;
219
- }
77
+ else {
78
+ for (const candidate of candidates) {
79
+ if (seen.has(candidate))
80
+ continue;
81
+ if (getPurlType(candidate) === entry) {
82
+ result.push(candidate);
83
+ seen.add(candidate);
220
84
  }
221
85
  }
222
86
  }
223
- return null;
224
- }
225
- /**
226
- * For Node.js, resolve .ts paths to their compiled .js equivalents in dist/.
227
- * Bun can load .ts directly, so it returns the path unchanged.
228
- */
229
- async resolveForRuntime(resolvedPath, packageRoot) {
230
- if (isBun || !resolvedPath.endsWith(".ts")) {
231
- return resolvedPath;
232
- }
233
- // Try dist/ equivalent: src/foo.ts -> dist/foo.js
234
- const relative = path.relative(packageRoot, resolvedPath);
235
- const distEquivalent = path.resolve(packageRoot, relative.replace(/^src\//, "dist/").replace(/\.ts$/, ".js"));
236
- if (await this.pathExists(distEquivalent)) {
237
- return distEquivalent;
238
- }
239
- // Fallback: same location but .js
240
- const jsPath = resolvedPath.replace(/\.ts$/, ".js");
241
- if (await this.pathExists(jsPath)) {
242
- return jsPath;
243
- }
244
- return resolvedPath;
245
- }
246
- async findInNodeModules(packageName) {
247
- const nameParts = packageName.split("/");
248
- const candidates = [
249
- path.join(process.cwd(), "node_modules", ...nameParts),
250
- path.join(process.cwd(), "node_modules", ".pnpm", "node_modules", ...nameParts),
251
- ];
252
- for (const candidate of candidates) {
253
- const packageJsonPath = path.join(candidate, "package.json");
254
- if (await this.pathExists(packageJsonPath)) {
255
- return candidate;
256
- }
257
- }
258
- return null;
259
- }
260
- async pathExists(filePath) {
261
- try {
262
- await fs.access(filePath);
263
- return true;
264
- }
265
- catch {
266
- return false;
267
- }
268
87
  }
88
+ return result;
269
89
  }
270
90
  //# sourceMappingURL=controller-loader.js.map
@@ -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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"}
@@ -0,0 +1,27 @@
1
+ import { ControllerInstance } from "@telorun/sdk";
2
+ /**
3
+ * Recoverable resolution failure — the loader could not find the artifact in the
4
+ * environment (missing rustc, missing local_path, missing prebuilt dylib in dist
5
+ * mode). The dispatcher may try the next candidate when wildcard fallback is
6
+ * enabled. Distinguished from `RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | …)`
7
+ * which is non-recoverable: those mean user code is broken and must surface.
8
+ */
9
+ export declare class ControllerEnvMissingError extends Error {
10
+ readonly _envMissing: true;
11
+ constructor(message: string);
12
+ }
13
+ export declare class NapiControllerLoader {
14
+ /**
15
+ * Resolve a `pkg:cargo/...` PURL to a controller module instance by building
16
+ * the crate and loading the resulting native addon.
17
+ *
18
+ * Dev mode (local_path qualifier present): probe rustc, run `cargo build
19
+ * --release`, locate the dylib via `cargo metadata`, copy to
20
+ * `<libname>.node`, load via createRequire. Cached on success.
21
+ *
22
+ * Distribution mode (no local_path): out of scope for the PoC; the hook is
23
+ * left in place so the dispatcher reports env-missing and falls through.
24
+ */
25
+ load(purl: string, baseUri: string): Promise<ControllerInstance>;
26
+ }
27
+ //# sourceMappingURL=napi-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"napi-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/napi-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAWhE;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAG,IAAI,CAAU;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAmBD,qBAAa,oBAAoB;IAC/B;;;;;;;;;;OAUG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwFvE"}
@@ -0,0 +1,158 @@
1
+ import { RuntimeError } from "@telorun/sdk";
2
+ import { execFile } from "child_process";
3
+ import * as fs from "fs/promises";
4
+ import { createRequire } from "module";
5
+ import { PackageURL } from "packageurl-js";
6
+ import * as path from "path";
7
+ import { promisify } from "util";
8
+ const execFileAsync = promisify(execFile);
9
+ const requireFromHere = createRequire(import.meta.url);
10
+ /**
11
+ * Recoverable resolution failure — the loader could not find the artifact in the
12
+ * environment (missing rustc, missing local_path, missing prebuilt dylib in dist
13
+ * mode). The dispatcher may try the next candidate when wildcard fallback is
14
+ * enabled. Distinguished from `RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | …)`
15
+ * which is non-recoverable: those mean user code is broken and must surface.
16
+ */
17
+ export class ControllerEnvMissingError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this._envMissing = true;
21
+ this.name = "ControllerEnvMissingError";
22
+ }
23
+ }
24
+ /**
25
+ * Process-lifetime cache of resolved native modules keyed by the realpath of
26
+ * the crate directory. The first call for a given crate does the cargo build,
27
+ * dylib rename, and `require()` work; subsequent calls (e.g. a second kernel
28
+ * registering the same controller, or two manifests reaching the crate via
29
+ * different — possibly symlinked — paths) skip straight to the cached module.
30
+ *
31
+ * Beyond the obvious cost saving, this is load-bearing for Node compatibility:
32
+ * `fs.copyFile` overwriting a `.node` file that Node has already mmapped, plus
33
+ * the secondary `cargo metadata` / build invocations, can leave Node's native
34
+ * addon machinery in a state where finalize callbacks for class instances
35
+ * created in a previous kernel race and segfault. Keying on the canonical
36
+ * crate path (not on the caller's baseUri) ensures two distinct paths that
37
+ * point at the same crate share one cache entry.
38
+ */
39
+ const _napiModuleCache = new Map();
40
+ export class NapiControllerLoader {
41
+ /**
42
+ * Resolve a `pkg:cargo/...` PURL to a controller module instance by building
43
+ * the crate and loading the resulting native addon.
44
+ *
45
+ * Dev mode (local_path qualifier present): probe rustc, run `cargo build
46
+ * --release`, locate the dylib via `cargo metadata`, copy to
47
+ * `<libname>.node`, load via createRequire. Cached on success.
48
+ *
49
+ * Distribution mode (no local_path): out of scope for the PoC; the hook is
50
+ * left in place so the dispatcher reports env-missing and falls through.
51
+ */
52
+ async load(purl, baseUri) {
53
+ const [, , name, , qualifiers] = PackageURL.parseString(purl);
54
+ const localPath = qualifiers?.get("local_path");
55
+ const isLocalManifest = baseUri && !baseUri.startsWith("http://") && !baseUri.startsWith("https://");
56
+ if (!localPath || !isLocalManifest) {
57
+ throw new ControllerEnvMissingError(`pkg:cargo distribution-mode resolution is not implemented for the PoC; supply ?local_path=...`);
58
+ }
59
+ const baseUriPath = baseUri.startsWith("file://") ? baseUri.slice("file://".length) : baseUri;
60
+ const manifestDir = path.dirname(baseUriPath);
61
+ const cratePath = path.resolve(manifestDir, localPath);
62
+ if (!(await pathExists(cratePath))) {
63
+ throw new ControllerEnvMissingError(`pkg:cargo local_path does not exist: ${cratePath}`);
64
+ }
65
+ // Key the cache on the canonical crate location (realpath) — two manifests
66
+ // that reach the same crate via different baseUris (e.g. through symlinked
67
+ // workspace paths) must share one cache entry. A miss here would re-run
68
+ // cargo build and `fs.copyFile` over an already-mmapped `.node`, which
69
+ // can leave napi finalize callbacks racing and crash Node.
70
+ const canonicalCratePath = await fs.realpath(cratePath);
71
+ const cacheKey = canonicalCratePath;
72
+ const cached = _napiModuleCache.get(cacheKey);
73
+ if (cached) {
74
+ return cached;
75
+ }
76
+ try {
77
+ await execFileAsync("rustc", ["--version"]);
78
+ }
79
+ catch {
80
+ throw new ControllerEnvMissingError("rustc not found on PATH");
81
+ }
82
+ try {
83
+ // Plain `cargo build --release` — no `--features` flag. The SDK's
84
+ // `default = ["napi"]` selects the napi backend transitively, so the
85
+ // controller crate's Cargo.toml stays free of any `[features]` block
86
+ // or napi-rs deps. A future Rust kernel passes
87
+ // `--no-default-features --features native` here instead.
88
+ await execFileAsync("cargo", ["build", "--release"], {
89
+ cwd: cratePath,
90
+ maxBuffer: 32 * 1024 * 1024,
91
+ });
92
+ }
93
+ catch (err) {
94
+ const stderr = err?.stderr ? `\n${err.stderr}` : "";
95
+ throw new RuntimeError("ERR_CONTROLLER_BUILD_FAILED", `cargo build failed for ${cratePath}:${stderr}`);
96
+ }
97
+ const { targetDir, libName } = await resolveCrateMetadata(cratePath, name ?? "");
98
+ const dylibPath = await findDylib(targetDir, libName);
99
+ if (!dylibPath) {
100
+ throw new RuntimeError("ERR_CONTROLLER_BUILD_FAILED", `cargo build succeeded but no cdylib found for ${libName} under ${path.join(targetDir, "release")}/`);
101
+ }
102
+ const nodePath = path.join(path.dirname(dylibPath), `${libName}.node`);
103
+ await fs.copyFile(dylibPath, nodePath);
104
+ let module;
105
+ try {
106
+ module = requireFromHere(nodePath);
107
+ }
108
+ catch (err) {
109
+ throw new RuntimeError("ERR_CONTROLLER_INVALID", `Failed to load native addon ${nodePath}: ${err.message}`);
110
+ }
111
+ if (!module || (!module.create && !module.register)) {
112
+ throw new RuntimeError("ERR_CONTROLLER_INVALID", `pkg:cargo controller at ${nodePath} exports neither create nor register`);
113
+ }
114
+ _napiModuleCache.set(cacheKey, module);
115
+ return module;
116
+ }
117
+ }
118
+ async function resolveCrateMetadata(cratePath, fallbackName) {
119
+ const result = await execFileAsync("cargo", [
120
+ "metadata",
121
+ "--format-version",
122
+ "1",
123
+ "--manifest-path",
124
+ path.join(cratePath, "Cargo.toml"),
125
+ "--no-deps",
126
+ ], { maxBuffer: 32 * 1024 * 1024 });
127
+ const metadata = JSON.parse(result.stdout);
128
+ const cratePackage = metadata.packages?.find((p) => p.manifest_path === path.join(cratePath, "Cargo.toml"));
129
+ const packageName = cratePackage?.name ?? fallbackName;
130
+ return {
131
+ targetDir: metadata.target_directory,
132
+ libName: packageName.replace(/-/g, "_"),
133
+ };
134
+ }
135
+ async function findDylib(targetDir, libName) {
136
+ const releaseDir = path.join(targetDir, "release");
137
+ const candidates = [
138
+ path.join(releaseDir, `lib${libName}.so`),
139
+ path.join(releaseDir, `lib${libName}.dylib`),
140
+ path.join(releaseDir, `${libName}.dll`),
141
+ ];
142
+ for (const candidate of candidates) {
143
+ if (await pathExists(candidate)) {
144
+ return candidate;
145
+ }
146
+ }
147
+ return null;
148
+ }
149
+ async function pathExists(filePath) {
150
+ try {
151
+ await fs.access(filePath);
152
+ return true;
153
+ }
154
+ catch {
155
+ return false;
156
+ }
157
+ }
158
+ //# sourceMappingURL=napi-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"napi-loader.js","sourceRoot":"","sources":["../../src/controller-loaders/napi-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ControllerInstance } from "@telorun/sdk";
2
+ export declare class NpmControllerLoader {
3
+ /**
4
+ * Resolve a `pkg:npm/...` PURL to a controller module instance. Tries, in order:
5
+ * a relative `local_path` qualifier, the workspace's `node_modules`, and finally
6
+ * an isolated install under `~/.cache/telo/npm/<hash>`.
7
+ */
8
+ load(purl: string, baseUri: string): Promise<ControllerInstance>;
9
+ private ensureNpmPackageInstalled;
10
+ private getPackageName;
11
+ private getInstalledPackageRoot;
12
+ private getLocalPackageName;
13
+ private resolvePackageEntry;
14
+ private resolvePackageExportTarget;
15
+ private resolveExportTargetValue;
16
+ private resolveForRuntime;
17
+ private findInNodeModules;
18
+ private pathExists;
19
+ }
20
+ //# sourceMappingURL=npm-loader.d.ts.map
@@ -0,0 +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;AAgBlD,qBAAa,mBAAmB;IAC9B;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA6CxD,yBAAyB;IAmCvC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,uBAAuB;YAKjB,mBAAmB;YAanB,mBAAmB;IAuEjC,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,wBAAwB;YAgClB,iBAAiB;YAmBjB,iBAAiB;YAejB,UAAU;CAQzB"}