@telorun/kernel 0.39.0 → 0.40.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 (51) hide show
  1. package/README.md +6 -2
  2. package/dist/application-env.d.ts +7 -0
  3. package/dist/application-env.d.ts.map +1 -1
  4. package/dist/application-env.js +19 -0
  5. package/dist/application-env.js.map +1 -1
  6. package/dist/controller-loaders/bundle-builder.d.ts.map +1 -1
  7. package/dist/controller-loaders/bundle-builder.js +4 -3
  8. package/dist/controller-loaders/bundle-builder.js.map +1 -1
  9. package/dist/controller-loaders/napi-loader.d.ts.map +1 -1
  10. package/dist/controller-loaders/napi-loader.js +4 -2
  11. package/dist/controller-loaders/napi-loader.js.map +1 -1
  12. package/dist/controller-loaders/npm-loader.d.ts.map +1 -1
  13. package/dist/controller-loaders/npm-loader.js +7 -5
  14. package/dist/controller-loaders/npm-loader.js.map +1 -1
  15. package/dist/evaluation-context.d.ts +1 -2
  16. package/dist/evaluation-context.d.ts.map +1 -1
  17. package/dist/evaluation-context.js +1 -2
  18. package/dist/evaluation-context.js.map +1 -1
  19. package/dist/host-env.d.ts +66 -0
  20. package/dist/host-env.d.ts.map +1 -0
  21. package/dist/host-env.js +130 -0
  22. package/dist/host-env.js.map +1 -0
  23. package/dist/kernel.d.ts +1 -0
  24. package/dist/kernel.d.ts.map +1 -1
  25. package/dist/kernel.js +18 -3
  26. package/dist/kernel.js.map +1 -1
  27. package/dist/manifest-sources/local-manifest-cache-source.d.ts.map +1 -1
  28. package/dist/manifest-sources/local-manifest-cache-source.js +2 -1
  29. package/dist/manifest-sources/local-manifest-cache-source.js.map +1 -1
  30. package/dist/module-context.d.ts +1 -2
  31. package/dist/module-context.d.ts.map +1 -1
  32. package/dist/module-context.js +1 -30
  33. package/dist/module-context.js.map +1 -1
  34. package/dist/resource-context.d.ts.map +1 -1
  35. package/dist/resource-context.js +4 -1
  36. package/dist/resource-context.js.map +1 -1
  37. package/dist/schema-validator.d.ts.map +1 -1
  38. package/dist/schema-validator.js +46 -23
  39. package/dist/schema-validator.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/application-env.ts +19 -0
  42. package/src/controller-loaders/bundle-builder.ts +4 -3
  43. package/src/controller-loaders/napi-loader.ts +5 -2
  44. package/src/controller-loaders/npm-loader.ts +7 -5
  45. package/src/evaluation-context.ts +1 -2
  46. package/src/host-env.ts +142 -0
  47. package/src/kernel.ts +22 -2
  48. package/src/manifest-sources/local-manifest-cache-source.ts +3 -1
  49. package/src/module-context.ts +0 -27
  50. package/src/resource-context.ts +4 -1
  51. package/src/schema-validator.ts +52 -23
@@ -1 +1 @@
1
- {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telorun/kernel",
3
- "version": "0.39.0",
3
+ "version": "0.40.0",
4
4
  "description": "Telo Runtime - A lightweight, polyglot execution host.",
5
5
  "keywords": [
6
6
  "telo",
@@ -47,7 +47,7 @@
47
47
  "dependencies": {
48
48
  "@marcbachmann/cel-js": "^7.6.1",
49
49
  "@sinclair/typebox": "^0.34.48",
50
- "@telorun/analyzer": "0.29.0",
50
+ "@telorun/analyzer": "0.30.0",
51
51
  "@telorun/glob": "0.2.0",
52
52
  "@telorun/templating": "0.10.0",
53
53
  "ajv": "^8.17.1",
@@ -80,6 +80,25 @@ export function resolveApplicationEnv(
80
80
  return { variables, secrets, ports };
81
81
  }
82
82
 
83
+ /**
84
+ * Collect the host env-var *names* the root Application binds — the `env:` key
85
+ * of every `variables` / `secrets` / `ports` entry. This is the denied set for
86
+ * the controller `process.env` guardrail (see `host-env.ts`): a controller must
87
+ * read these through `ctx.env` / the declared binding, never the raw env var.
88
+ */
89
+ export function collectDeclaredEnvKeys(manifest: Record<string, any>): string[] {
90
+ const keys: string[] = [];
91
+ for (const block of [manifest.variables, manifest.secrets, manifest.ports]) {
92
+ if (!block || typeof block !== "object" || Array.isArray(block)) continue;
93
+ for (const entry of Object.values(block as Record<string, { env?: unknown }>)) {
94
+ if (entry && typeof entry === "object" && typeof entry.env === "string") {
95
+ keys.push(entry.env);
96
+ }
97
+ }
98
+ }
99
+ return keys;
100
+ }
101
+
83
102
  /**
84
103
  * Build-time cache warm: compile — but do NOT validate — the residual schema
85
104
  * for every `variables` / `secrets` / `ports` entry the runtime
@@ -2,6 +2,7 @@ import { existsSync } from "node:fs";
2
2
  import * as fs from "node:fs/promises";
3
3
  import * as path from "node:path";
4
4
 
5
+ import { hostEnv } from "../host-env.js";
5
6
  import { REALM_COLLAPSE_NAMES } from "./realm.js";
6
7
 
7
8
  /**
@@ -27,7 +28,7 @@ import { REALM_COLLAPSE_NAMES } from "./realm.js";
27
28
  const BUNDLE_PREFIX = ".telobundle.";
28
29
 
29
30
  function bundlingEnabled(): boolean {
30
- const v = process.env.TELO_CONTROLLER_BUNDLE?.trim().toLowerCase();
31
+ const v = hostEnv().TELO_CONTROLLER_BUNDLE?.trim().toLowerCase();
31
32
  return !(v === "0" || v === "false" || v === "no" || v === "off");
32
33
  }
33
34
 
@@ -224,7 +225,7 @@ async function buildBundle(bundleFile: string, entryFile: string): Promise<strin
224
225
  // location. esbuild rewrites `__dirname`/`__filename` to `import.meta.url`,
225
226
  // so its presence flags this — fall back to the loose import for those.
226
227
  if (DIR_RELATIVE.test(out.text)) {
227
- if (process.env.TELO_BUNDLE_DEBUG) {
228
+ if (hostEnv().TELO_BUNDLE_DEBUG) {
228
229
  process.stderr.write(`[bundle] skipped ${entryFile}: directory-relative asset resolution\n`);
229
230
  }
230
231
  return null;
@@ -236,7 +237,7 @@ async function buildBundle(bundleFile: string, entryFile: string): Promise<strin
236
237
  await fs.writeFile(okMarker(bundleFile), "").catch(() => {});
237
238
  return bundleFile;
238
239
  } catch (err) {
239
- if (process.env.TELO_BUNDLE_DEBUG) {
240
+ if (hostEnv().TELO_BUNDLE_DEBUG) {
240
241
  process.stderr.write(
241
242
  `[bundle] skipped ${entryFile}: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}\n`,
242
243
  );
@@ -6,6 +6,8 @@ import { PackageURL } from "packageurl-js";
6
6
  import * as path from "path";
7
7
  import { promisify } from "util";
8
8
 
9
+ import { hostEnv } from "../host-env.js";
10
+
9
11
  const execFileAsync = promisify(execFile);
10
12
  const requireFromHere = createRequire(import.meta.url);
11
13
 
@@ -211,7 +213,7 @@ export class NapiControllerLoader {
211
213
  ): Promise<BuildAndLoadResult> {
212
214
  _napiBuildAttempts++;
213
215
  try {
214
- await execFileAsync("rustc", ["--version"]);
216
+ await execFileAsync("rustc", ["--version"], { env: hostEnv() });
215
217
  } catch {
216
218
  throw new ControllerEnvMissingError("rustc not found on PATH");
217
219
  }
@@ -225,6 +227,7 @@ export class NapiControllerLoader {
225
227
  await execFileAsync("cargo", ["build", "--release"], {
226
228
  cwd: cratePath,
227
229
  maxBuffer: 32 * 1024 * 1024,
230
+ env: hostEnv(),
228
231
  });
229
232
  } catch (err: any) {
230
233
  const stderr = err?.stderr ? `\n${err.stderr}` : "";
@@ -308,7 +311,7 @@ async function resolveCrateMetadata(
308
311
  "--manifest-path",
309
312
  path.join(cratePath, "Cargo.toml"),
310
313
  "--no-deps",
311
- ], { maxBuffer: 32 * 1024 * 1024 });
314
+ ], { maxBuffer: 32 * 1024 * 1024, env: hostEnv() });
312
315
  const metadata = JSON.parse(result.stdout);
313
316
  const cratePackage = metadata.packages?.find(
314
317
  (p: any) => p.manifest_path === path.join(cratePath, "Cargo.toml"),
@@ -8,6 +8,7 @@ import { PackageURL } from "packageurl-js";
8
8
  import * as path from "path";
9
9
  import { fileURLToPath, pathToFileURL } from "url";
10
10
  import { promisify } from "util";
11
+ import { hostEnv } from "../host-env.js";
11
12
  import { tryBuildControllerBundle } from "./bundle-builder.js";
12
13
  import { ControllerEnvMissingError } from "./napi-loader.js";
13
14
  import { REALM_COLLAPSE_NAMES } from "./realm.js";
@@ -22,7 +23,7 @@ const requireFromHere = createRequire(import.meta.url);
22
23
  * sequenced, but predictability beats late-binding here. Override via
23
24
  * `TELO_PKG_MANAGER` (e.g. `pnpm`, `bun`).
24
25
  */
25
- const PACKAGE_MANAGER = process.env.TELO_PKG_MANAGER ?? "npm";
26
+ const PACKAGE_MANAGER = hostEnv().TELO_PKG_MANAGER ?? "npm";
26
27
 
27
28
  /**
28
29
  * Make the installer ignore controllers' declared `peerDependencies` ranges.
@@ -637,7 +638,7 @@ async function isLockStale(lockPath: string): Promise<boolean> {
637
638
 
638
639
  async function runPackageManager(cwd: string, args: string[]): Promise<void> {
639
640
  try {
640
- await execFileAsync(PACKAGE_MANAGER, args, { cwd, maxBuffer: 32 * 1024 * 1024 });
641
+ await execFileAsync(PACKAGE_MANAGER, args, { cwd, maxBuffer: 32 * 1024 * 1024, env: hostEnv() });
641
642
  } catch (err: any) {
642
643
  const isMissing =
643
644
  err?.code === "ENOENT" ||
@@ -736,10 +737,11 @@ function computeInstallRoot(entryUrl: string): string {
736
737
  }
737
738
  const scheme = schemeMatch[1].toLowerCase();
738
739
  if (scheme === "http" || scheme === "https") {
740
+ const env = hostEnv();
739
741
  const cacheBase =
740
- process.env.TELO_NPM_CACHE_DIR ||
741
- (process.env.XDG_CACHE_HOME
742
- ? path.join(process.env.XDG_CACHE_HOME, "telo", "remote")
742
+ env.TELO_NPM_CACHE_DIR ||
743
+ (env.XDG_CACHE_HOME
744
+ ? path.join(env.XDG_CACHE_HOME, "telo", "remote")
743
745
  : path.join(os.homedir(), ".cache", "telo", "remote"));
744
746
  return path.join(cacheBase, sha256(entryUrl), "npm");
745
747
  }
@@ -794,8 +794,7 @@ export class EvaluationContext implements IEvaluationContext {
794
794
  * trace — `variables`, masked `secrets`, resource `snapshots`, `ports`. Attached
795
795
  * to a trace's *root* span so the consumer can inspect what data the execution
796
796
  * could reference (beyond its own inputs/outputs). Only a `ModuleContext` owns a
797
- * root scope; child scopes return undefined. Host `env` is deliberately omitted
798
- * (it is the raw process environment — too broad/sensitive to dump).
797
+ * root scope; child scopes return undefined.
799
798
  */
800
799
  protected traceRootScope(): Record<string, unknown> | undefined {
801
800
  return undefined;
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Host-environment access for the kernel, and the controller `process.env`
3
+ * guardrail.
4
+ *
5
+ * Controllers (and their dependencies) should not bypass a declared binding by
6
+ * reading its raw host env var: host configuration reaches a controller only
7
+ * through `ctx.env` (the snapshot the kernel threads in) or its declared
8
+ * `variables` / `secrets` / `ports`. To enforce that, {@link lockControllerEnv}
9
+ * replaces the global `process.env` with a Proxy that denies reads of exactly
10
+ * the env-var names the manifest binds — every other key (`NODE_ENV`, an SDK's
11
+ * own `AWS_*` / `SMITHY_*` config, `~/.aws` path lookups, …) passes through
12
+ * untouched. The kernel carries no allowlist of vendor env conventions; the
13
+ * denied set is derived from the manifest.
14
+ *
15
+ * This is a **guardrail, not an isolation boundary**: controllers run in the
16
+ * same process, so a determined one can still reach the OS environment by other
17
+ * means (a child process, `/proc/self/environ`, re-`defineProperty`). The Proxy
18
+ * stops casual / accidental bypass of a declared binding and makes it visible.
19
+ *
20
+ * The kernel itself still needs a handful of `TELO_*` / cache env vars. Those
21
+ * reads go through {@link hostEnv}, which returns a reference captured at module
22
+ * import — before any lock — so they keep working once the Proxy is installed.
23
+ */
24
+
25
+ // The real environment, captured before any lock — and stored on `globalThis`
26
+ // under a process-global symbol so it is shared across *every* `@telorun/kernel`
27
+ // module instance in the process. This matters because a controller can load a
28
+ // second copy of the kernel: the `@telorun/test` suite runner imports `Kernel`
29
+ // to spawn child kernels in-process. That second copy's module body runs *after*
30
+ // the main kernel already locked `process.env`, so a plain `process.env` capture
31
+ // there would grab the (proxied) env. Reading the shared snapshot instead keeps
32
+ // every instance's `hostEnv()` — and the subprocess env it feeds — real.
33
+ //
34
+ // `lockControllerEnv` only rebinds the `process.env` *property*; it never mutates
35
+ // the original object, so this reference keeps yielding real values after a lock.
36
+ const REAL_ENV_KEY = Symbol.for("@telorun/kernel:host-env:real-env");
37
+ const LOCKED_KEY = Symbol.for("@telorun/kernel:host-env:locked");
38
+ const DENIED_KEYS_KEY = Symbol.for("@telorun/kernel:host-env:denied-keys");
39
+ const globals = globalThis as Record<symbol, unknown>;
40
+ const REAL_ENV: NodeJS.ProcessEnv = (globals[REAL_ENV_KEY] ??=
41
+ process.env) as NodeJS.ProcessEnv;
42
+
43
+ // Process-global set of denied env-var names — the union of every booted
44
+ // kernel's declared `variables` / `secrets` / `ports` env keys. Shared on
45
+ // `globalThis` so a second in-process `@telorun/kernel` copy (the test suite
46
+ // runner spawns child kernels) and the already-installed Proxy read the same
47
+ // live set: a kernel that boots *after* the Proxy is installed still contributes
48
+ // its declared keys (see {@link lockControllerEnv}).
49
+ const DENIED_KEYS: Set<string> = (globals[DENIED_KEYS_KEY] ??= new Set<string>()) as Set<string>;
50
+
51
+ /** The real host environment. Kernel-internal use only — never handed to
52
+ * controllers (they get the sanctioned `ctx.env` snapshot instead). */
53
+ export function hostEnv(): NodeJS.ProcessEnv {
54
+ return REAL_ENV;
55
+ }
56
+
57
+ /**
58
+ * Build the guardrail Proxy over `backing`. A key in `deniedKeys` reads back
59
+ * `undefined` — even when set — and is hidden from `in` / enumeration, with the
60
+ * first read of each such key reported via `warn`. Every other key passes
61
+ * through transparently (real value, no warning, visible to `in` /
62
+ * enumeration). Writes pass through to `backing`.
63
+ *
64
+ * `deniedKeys` is consulted live on every trap, so keys added after the Proxy
65
+ * is installed take effect immediately (a later kernel's bindings).
66
+ *
67
+ * Exported for testing; production installs it via {@link lockControllerEnv}.
68
+ */
69
+ export function createLockedEnv(
70
+ backing: NodeJS.ProcessEnv,
71
+ deniedKeys: ReadonlySet<string>,
72
+ warn: (key: string) => void,
73
+ ): NodeJS.ProcessEnv {
74
+ const warned = new Set<string>();
75
+ const denied = (key: string | symbol): boolean =>
76
+ typeof key === "string" && deniedKeys.has(key);
77
+
78
+ return new Proxy(backing, {
79
+ get(target, key) {
80
+ if (!denied(key)) return Reflect.get(target, key);
81
+ const name = key as string;
82
+ if (!warned.has(name)) {
83
+ warned.add(name);
84
+ warn(name);
85
+ }
86
+ return undefined;
87
+ },
88
+ has(target, key) {
89
+ return !denied(key) && Reflect.has(target, key);
90
+ },
91
+ ownKeys(target) {
92
+ return Reflect.ownKeys(target).filter((key) => !denied(key));
93
+ },
94
+ getOwnPropertyDescriptor(target, key) {
95
+ return denied(key) ? undefined : Reflect.getOwnPropertyDescriptor(target, key);
96
+ },
97
+ set(target, key, value) {
98
+ return Reflect.set(target, key, value);
99
+ },
100
+ });
101
+ }
102
+
103
+ /**
104
+ * Install the {@link createLockedEnv} guardrail over the global `process.env`,
105
+ * denying reads of `deniedKeys` — the booting kernel's declared `variables` /
106
+ * `secrets` / `ports` env-var names.
107
+ *
108
+ * The denied set is process-global and additive: every call unions its keys
109
+ * into the shared {@link DENIED_KEYS} set, even after the Proxy is installed, so
110
+ * each kernel that boots in the process contributes its bindings. Several
111
+ * `Kernel` instances can boot in one process (the test suite runs child kernels
112
+ * in-process), each with its own manifest; the union denies any key declared by
113
+ * any of them — strictly safe, since a controller has no reason to read a
114
+ * sibling app's declared key from the raw env.
115
+ *
116
+ * The Proxy install itself is idempotent — the flag lives on `globalThis`, so a
117
+ * second `@telorun/kernel` instance sees the first instance's lock and does not
118
+ * re-wrap. The property is left non-writable so a casual `process.env = {…}`
119
+ * cannot drop the guardrail (`configurable` stays true so tooling can still
120
+ * manage it).
121
+ *
122
+ * `warn` binds to the first kernel that boots in the process. In the common
123
+ * one-kernel-per-process case that is the right sink; with in-process child
124
+ * kernels a stray read warns to the first kernel's stderr (and dedup is
125
+ * process-global). Acceptable — child kernels receive an explicit env and have
126
+ * no reason to read a declared key from `process.env`.
127
+ */
128
+ export function lockControllerEnv(
129
+ deniedKeys: Iterable<string>,
130
+ warn: (key: string) => void,
131
+ ): void {
132
+ for (const key of deniedKeys) DENIED_KEYS.add(key);
133
+ if (globals[LOCKED_KEY]) return;
134
+ globals[LOCKED_KEY] = true;
135
+
136
+ Object.defineProperty(process, "env", {
137
+ value: createLockedEnv(REAL_ENV, DENIED_KEYS, warn),
138
+ writable: false,
139
+ enumerable: true,
140
+ configurable: true,
141
+ });
142
+ }
package/src/kernel.ts CHANGED
@@ -32,6 +32,7 @@ import {
32
32
  import { parseArgs } from "util";
33
33
  import { ControllerRegistry } from "./controller-registry.js";
34
34
  import { EventBus } from "./events.js";
35
+ import { hostEnv, lockControllerEnv } from "./host-env.js";
35
36
  import { KernelTracer } from "./tracing.js";
36
37
  import { ModuleContext } from "./module-context.js";
37
38
  import { ResourceContextImpl } from "./resource-context.js";
@@ -48,6 +49,7 @@ import {
48
49
  resolveCacheRoot,
49
50
  } from "./manifest-sources/local-manifest-cache-source.js";
50
51
  import {
52
+ collectDeclaredEnvKeys,
51
53
  precompileApplicationEnvSchemas,
52
54
  precompileDefinitionSchemas,
53
55
  resolveApplicationEnv,
@@ -119,6 +121,9 @@ export class Kernel implements IKernel {
119
121
  * per name. Surfaced via {@link getResolvedPorts} so a host can advertise where
120
122
  * the running app is reachable. */
121
123
  private _resolvedPorts: Array<{ name: string; port: number; protocol: "tcp" | "udp" }> = [];
124
+ // Host env-var names the root Application binds via `variables`/`secrets`/
125
+ // `ports`; the denied set for the `process.env` guardrail installed at boot.
126
+ private _declaredEnvKeys: string[] = [];
122
127
  /** The `.telo` cache root for this load, resolved once in `load()` and
123
128
  * threaded to the validator, analysis stamp, and npm install root. */
124
129
  private _cacheRoot?: string | null;
@@ -148,7 +153,7 @@ export class Kernel implements IKernel {
148
153
  this.stdin = options.stdin ?? process.stdin;
149
154
  this.stdout = options.stdout ?? process.stdout;
150
155
  this.stderr = options.stderr ?? process.stderr;
151
- this.env = options.env ?? process.env;
156
+ this.env = options.env ?? hostEnv();
152
157
  this.argv = options.argv ?? [];
153
158
  this.registryUrl = options.registryUrl;
154
159
  this.loader = new Loader(defaultSources(this.registryUrl), { celHandlers: nodeCelHandlers });
@@ -338,7 +343,6 @@ export class Kernel implements IKernel {
338
343
  [],
339
344
  this._createInstance.bind(this),
340
345
  (event, payload, metadata) => this.eventBus.emit(event, payload, metadata),
341
- this.env,
342
346
  );
343
347
  this.rootContext.tracer = this.tracer;
344
348
  // Initialize built-in Runtime definitions first
@@ -551,6 +555,9 @@ export class Kernel implements IKernel {
551
555
  }
552
556
 
553
557
  if (rootApplicationManifest) {
558
+ this._declaredEnvKeys = collectDeclaredEnvKeys(
559
+ rootApplicationManifest as Record<string, any>,
560
+ );
554
561
  const { variables, secrets, ports } = resolveApplicationEnv(
555
562
  rootApplicationManifest as Record<string, any>,
556
563
  this.env,
@@ -606,6 +613,19 @@ export class Kernel implements IKernel {
606
613
  }
607
614
  this._bootCalled = true;
608
615
 
616
+ // Lock the ambient host environment before any controller runs: a key the
617
+ // manifest binds via `variables`/`secrets`/`ports` must be read through
618
+ // `ctx.env` or the declared binding, never the raw `process.env` var. Every
619
+ // other key passes through. Only real runs reach boot() — analyzeOnly loads
620
+ // return earlier — so analysis/editor are unaffected. The denied set is
621
+ // process-global and additive across in-process kernels.
622
+ lockControllerEnv(this._declaredEnvKeys, (key) => {
623
+ this.stderr.write(
624
+ `[telo] controller read process.env.${key} directly — ${key} is a declared ` +
625
+ `binding; read it through ctx.env or its variable/secret, not raw process.env.\n`,
626
+ );
627
+ });
628
+
609
629
  // Call register hooks for controllers actually loaded at this point (built-ins).
610
630
  // User-module kinds load their controllers during Phase 3 (Telo.Definition.init),
611
631
  // and registerController() fires their register hook there.
@@ -5,6 +5,8 @@ import * as fs from "fs/promises";
5
5
  import * as path from "path";
6
6
  import { fileURLToPath, pathToFileURL } from "url";
7
7
 
8
+ import { hostEnv } from "../host-env.js";
9
+
8
10
  const CACHE_SUBDIR = ".telo/manifests";
9
11
  const HTTP_NAMESPACE = "__http";
10
12
  const DEFAULT_MANIFEST_FILENAME = "telo.yaml";
@@ -274,7 +276,7 @@ export function resolveEntryDir(entryPath: string): string | null {
274
276
  * Consumers append the conventional subdirs: `manifests/`, `manifests/__validators/`,
275
277
  * `npm/`. */
276
278
  export function resolveCacheRoot(entryPath: string): string | null {
277
- const override = process.env.TELO_CACHE_DIR;
279
+ const override = hostEnv().TELO_CACHE_DIR;
278
280
  if (override && override.trim()) return path.resolve(override.trim());
279
281
  const entryDir = resolveEntryDir(entryPath);
280
282
  return entryDir ? path.join(entryDir, ".telo") : null;
@@ -12,31 +12,6 @@ import type {
12
12
  import type { EmitEvent, InstanceFactory } from "@telorun/sdk";
13
13
  import { EvaluationContext } from "./evaluation-context.js";
14
14
 
15
- /** Wraps process.env so that missing keys return null instead of throwing in CEL.
16
- * cel-js uses Object.hasOwn(obj, key) before accessing obj[key], so we must
17
- * intercept getOwnPropertyDescriptor to report every string key as "own".
18
- * The `constructor` key is special-cased to return `Object` so cel-js's dyn
19
- * value-type matcher recognises the proxy as a plain map; Node's process.env
20
- * has an anonymous-function constructor that cel-js otherwise rejects with
21
- * "Unsupported type: object". */
22
- function lenientEnv(env: Record<string, string | undefined>): Record<string, string | null> {
23
- return new Proxy(env as Record<string, string | null>, {
24
- get(target, key) {
25
- if (typeof key !== "string") return (target as any)[key];
26
- if (key === "constructor") return Object as unknown as string;
27
- return key in target ? (target[key] ?? null) : null;
28
- },
29
- has() {
30
- return true;
31
- },
32
- getOwnPropertyDescriptor(target, key) {
33
- if (typeof key !== "string") return Object.getOwnPropertyDescriptor(target, key);
34
- const value = key in target ? (target[key] ?? null) : null;
35
- return { configurable: true, enumerable: true, writable: true, value };
36
- },
37
- });
38
- }
39
-
40
15
  function collectSecretValues(secrets: Record<string, unknown>): Set<string> {
41
16
  const values = new Set<string>();
42
17
  for (const value of Object.values(secrets)) {
@@ -155,7 +130,6 @@ export class ModuleContext extends EvaluationContext implements IModuleContext {
155
130
  private targets: BootTarget[] = [],
156
131
  createInstance: InstanceFactory = async () => null,
157
132
  emit: EmitEvent,
158
- private readonly _hostEnv?: Record<string, string | undefined>,
159
133
  ) {
160
134
  super(source, {}, createInstance, new Set(), emit);
161
135
  this._variables = variables;
@@ -461,7 +435,6 @@ export class ModuleContext extends EvaluationContext implements IModuleContext {
461
435
  secrets: this._secrets,
462
436
  resources: this._resources,
463
437
  ports: this._ports,
464
- ...(this._hostEnv ? { env: lenientEnv(this._hostEnv) } : {}),
465
438
  };
466
439
  this._secretValues = collectSecretValues(this._secrets);
467
440
  }
@@ -18,6 +18,7 @@ import {
18
18
  type TypeRule,
19
19
  } from "@telorun/sdk";
20
20
  import { isRefSentinel } from "@telorun/templating";
21
+ import { hostEnv } from "./host-env.js";
21
22
  import { stripCompiledValues } from "./schema-compiled-values.js";
22
23
  import AjvModule from "ajv";
23
24
  import addFormats from "ajv-formats";
@@ -55,7 +56,9 @@ export class ResourceContextImpl implements ResourceContext {
55
56
  args?: ParsedArgs,
56
57
  ownerPrefix = "",
57
58
  ) {
58
- this.env = env ?? process.env;
59
+ // `ctx.env` is the sanctioned host-env channel for controllers — always the
60
+ // real environment (kernel passes its snapshot), never the locked Proxy.
61
+ this.env = env ?? hostEnv();
59
62
  this.stdin = stdin ?? process.stdin;
60
63
  this.stdout = stdout ?? process.stdout;
61
64
  this.stderr = stderr ?? process.stderr;
@@ -8,7 +8,12 @@ import * as fs from "node:fs";
8
8
  import { createRequire } from "node:module";
9
9
  import * as path from "node:path";
10
10
  import { formatAjvErrors } from "./manifest-schemas.js";
11
- import { isTaggedSentinel, ManifestRootSchema, normalizeRefSlots } from "@telorun/templating";
11
+ import {
12
+ EXACT_TEMPLATE_REGEX,
13
+ isTaggedSentinel,
14
+ ManifestRootSchema,
15
+ normalizeRefSlots,
16
+ } from "@telorun/templating";
12
17
 
13
18
  const Ajv = AjvModule.default ?? AjvModule;
14
19
  // AJV's standalone subpath is CJS — the default export shows up as either
@@ -78,33 +83,49 @@ function verifyAndExtractBody(text: string): string | null {
78
83
  return actual === match[1] ? body : null;
79
84
  }
80
85
 
81
- /** Deep-clone `value` collapsing every CEL/template sentinel to its original
82
- * `source` string, for use as the validator cache *key* only.
86
+ /** Deep-clone `value`, canonicalizing every CEL/template carrier to the bare
87
+ * source text `compileString` records applied to the schema *before* both
88
+ * AJV compilation and cache hashing.
83
89
  *
84
- * The same `Telo.Definition` schema reaches `compile()` in two forms: the
85
- * build-time validator warm feeds the raw analysis graph (parse-time
86
- * `{__tagged, engine, source}` sentinels, or plain `${{ }}` strings for inline
87
- * templates), while the runtime feeds the compile-loader output (`{__compiled,
88
- * source, parts}`). A `!cel` / `!sql` tag embedded anywhere in a schema — most
89
- * commonly inside `examples` / `description`, but the loader rewrites them at
90
- * any position therefore serialises differently between the two, so without
91
- * normalisation the same kind hashes differently and the runtime misses the
92
- * warmed cache (and fails to persist it read-only). Both sentinel shapes carry
93
- * the same original `source`, so collapsing each to that string converges them.
90
+ * A `Telo.Definition` schema carries inline `${{ }}` templates and `!cel` /
91
+ * `!sql` tags (most commonly inside `description` / `examples`, but the loader
92
+ * rewrites them at any position), and reaches `compile()` in two forms:
93
+ * - the runtime feeds the precompiled tree, where each carrier is a sentinel
94
+ * object (`{__compiled, source, parts}` / `{__tagged, engine, source}`);
95
+ * - the build-time validator warm (`precompileDefinitionSchemas`) feeds the
96
+ * raw analysis graph, where an inline `${{ }}` is still a plain string and a
97
+ * `!cel` tag is a `{__tagged}` sentinel.
94
98
  *
95
- * This rewrites only the hash key AJV still compiles the full `injected`
96
- * schema. Unlike dropping keys by name, it never removes a structural node, so
97
- * a property literally named `description` / `examples` keeps its schema in the
98
- * key and two genuinely different shapes never collide. */
99
- function normalizeSentinelsForHash(value: unknown): unknown {
99
+ * AJV meta-validates the schema it compiles and rejects a sentinel object
100
+ * where a keyword (`description`, …) expects a scalar, so the precompiled tree
101
+ * throws "schema is invalid: …/description must be string" on a cache miss.
102
+ * Canonicalizing fixes that *and* converges the two forms onto one cache key,
103
+ * so the runtime hits the warmed `__validators` entry instead of recompiling
104
+ * (and, on a read-only image, failing to persist) every boot:
105
+ * - a sentinel collapses to its `source` (interpolated → full string, exact
106
+ * `${{ expr }}` → bare `expr`, matching `compileString`);
107
+ * - a raw exact-form `"${{ expr }}"` string is reduced to the same bare `expr`,
108
+ * so the warm path's plain string lands on the sentinel's stripped source.
109
+ * Interpolated raw strings already equal the sentinel's full-string source,
110
+ * so they pass through untouched.
111
+ *
112
+ * Canonicalizing never removes a structural node — a property literally named
113
+ * `description` / `examples` keeps its schema — so two genuinely different
114
+ * shapes never collide and the produced validator accepts the same data. A
115
+ * sentinel with no captured `source` collapses to `""` (a valid scalar). */
116
+ function collapseSentinelsToSource(value: unknown): unknown {
100
117
  if (isCompiledValue(value) || isTaggedSentinel(value)) {
101
- return typeof value.source === "string" ? value.source : { __teloSentinel: true };
118
+ return typeof value.source === "string" ? value.source : "";
119
+ }
120
+ if (typeof value === "string") {
121
+ const exact = value.match(EXACT_TEMPLATE_REGEX);
122
+ return exact ? exact[1].trim() : value;
102
123
  }
103
- if (Array.isArray(value)) return value.map(normalizeSentinelsForHash);
124
+ if (Array.isArray(value)) return value.map(collapseSentinelsToSource);
104
125
  if (value && typeof value === "object") {
105
126
  const out: Record<string, unknown> = {};
106
127
  for (const [k, v] of Object.entries(value as Record<string, unknown>)) {
107
- out[k] = normalizeSentinelsForHash(v);
128
+ out[k] = collapseSentinelsToSource(v);
108
129
  }
109
130
  return out;
110
131
  }
@@ -232,11 +253,19 @@ export class SchemaValidator {
232
253
  // would otherwise reject.
233
254
  const injected = normalizeRefSlots(withImplicit) as typeof withImplicit;
234
255
 
256
+ // Canonicalize CEL/template carriers (an inline `${{ }}` left in a
257
+ // `description`, a `!cel` tag, …) to their bare source text so AJV can
258
+ // meta-validate the schema it compiles, and so the raw (warm-pass) and
259
+ // precompiled (runtime) views of one schema land on the same cache key. The
260
+ // hashed and the compiled schema are this same canonical form. See
261
+ // `collapseSentinelsToSource`.
262
+ const sanitized = collapseSentinelsToSource(injected);
263
+
235
264
  const hash = createHash("sha256")
236
265
  .update(
237
266
  JSON.stringify({
238
267
  runtime: VALIDATOR_RUNTIME_TAG,
239
- schema: normalizeSentinelsForHash(injected),
268
+ schema: sanitized,
240
269
  }),
241
270
  )
242
271
  .digest("hex")
@@ -249,7 +278,7 @@ export class SchemaValidator {
249
278
  return cachedByHash;
250
279
  }
251
280
 
252
- const validate = this.compileAjvOrLoadCached(injected, hash);
281
+ const validate = this.compileAjvOrLoadCached(sanitized, hash);
253
282
 
254
283
  const validator = {
255
284
  validate: (data: any) => {