tensorlake 0.5.131 → 0.5.133

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 (50) hide show
  1. package/README.md +27 -0
  2. package/dist/applications/index.cjs +492 -708
  3. package/dist/applications/index.cjs.map +1 -1
  4. package/dist/applications/index.d.cts +3 -3
  5. package/dist/applications/index.d.ts +3 -3
  6. package/dist/applications/index.js +493 -713
  7. package/dist/applications/index.js.map +1 -1
  8. package/dist/function-agent/main.cjs +5 -2
  9. package/dist/function-agent/main.cjs.map +1 -1
  10. package/dist/function-agent/main.js +6 -3
  11. package/dist/function-agent/main.js.map +1 -1
  12. package/dist/function-executor/main.cjs +6 -3
  13. package/dist/function-executor/main.cjs.map +1 -1
  14. package/dist/function-executor/main.js +7 -4
  15. package/dist/function-executor/main.js.map +1 -1
  16. package/dist/index.cjs +121 -418
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +8 -22
  19. package/dist/index.d.ts +8 -22
  20. package/dist/index.js +122 -423
  21. package/dist/index.js.map +1 -1
  22. package/dist/native-worker.cjs +1 -0
  23. package/dist/native-worker.cjs.map +1 -1
  24. package/dist/native-worker.js +1 -0
  25. package/dist/native-worker.js.map +1 -1
  26. package/dist/{remote-DRCCuRth.d.cts → remote-D95Y6Czr.d.cts} +1 -1
  27. package/dist/{remote-0dzBqScB.d.ts → remote-omwTzbfj.d.ts} +1 -1
  28. package/dist/{sandbox-image-Bf5bcxtO.d.cts → sandbox-image-ChzWDeZy.d.cts} +2 -0
  29. package/dist/{sandbox-image-Bf5bcxtO.d.ts → sandbox-image-ChzWDeZy.d.ts} +2 -0
  30. package/dist/sandbox-image.cjs +476 -453
  31. package/dist/sandbox-image.cjs.map +1 -1
  32. package/dist/sandbox-image.d.cts +1 -1
  33. package/dist/sandbox-image.d.ts +1 -1
  34. package/dist/sandbox-image.js +475 -456
  35. package/dist/sandbox-image.js.map +1 -1
  36. package/package.json +8 -8
  37. package/runtime/function-executor/manifest.json +14 -14
  38. package/runtime/function-executor/package/dist/function-executor/main.js +7 -4
  39. package/runtime/function-executor/package/dist/function-executor/main.js.map +1 -1
  40. package/runtime/function-executor/package/dist/native-worker.cjs +1 -0
  41. package/runtime/function-executor/package/dist/native-worker.cjs.map +1 -1
  42. package/runtime/function-executor/package/npm-shrinkwrap.json +2 -12
  43. package/runtime/function-executor/package/package.json +1 -2
  44. package/runtime/typescript-function-runner/manifest.json +13 -13
  45. package/runtime/typescript-function-runner/package/dist/function-agent/main.js +6 -3
  46. package/runtime/typescript-function-runner/package/dist/function-agent/main.js.map +1 -1
  47. package/runtime/typescript-function-runner/package/dist/native-worker.cjs +1 -0
  48. package/runtime/typescript-function-runner/package/dist/native-worker.cjs.map +1 -1
  49. package/runtime/typescript-function-runner/package/npm-shrinkwrap.json +20 -29
  50. package/runtime/typescript-function-runner/package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../lib/libc.cjs","../../src/function-agent/main.ts","../../src/native-binding.ts","../../src/native-worker-client.ts","../../src/native-worker-protocol.ts","../../src/url.ts","../../src/defaults.ts","../../src/function-agent/runner.ts","../../src/applications/context.ts","../../src/applications/errors.ts","../../src/applications/headers.ts","../../src/applications/serialization.ts","../../src/applications/file.ts","../../src/applications/http-body.ts","../../src/applications/function.ts","../../src/applications/schema.ts","../../src/applications/registry.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","// Read the ELF interpreter, rather than generating a process-wide diagnostic\n// report. Both supported Linux architectures use little-endian ELF64. Reads\n// are bounded to the header, program headers, and interpreter pathname.\nfunction detectLinuxLibc(fs, executable = process.execPath) {\n const override = process.env.TENSORLAKE_NODE_LIBC;\n if (override != null) {\n if (override === \"gnu\" || override === \"musl\") return override;\n throw new Error(\"TENSORLAKE_NODE_LIBC must be 'gnu' or 'musl'.\");\n }\n\n let fd;\n try {\n fd = fs.openSync(executable, \"r\");\n function read(size, offset) {\n if (!Number.isSafeInteger(offset) || offset < 0) {\n throw new Error(\"Invalid ELF offset\");\n }\n const buffer = Buffer.alloc(size);\n let count = 0;\n while (count < size) {\n const bytes = fs.readSync(fd, buffer, count, size - count, offset + count);\n if (bytes === 0) throw new Error(\"Truncated ELF executable\");\n count += bytes;\n }\n return buffer;\n }\n\n const header = read(64, 0);\n if (header.readUInt32BE(0) !== 0x7f454c46 || header[4] !== 2 || header[5] !== 1) {\n throw new Error(\"Expected a little-endian ELF64 executable\");\n }\n const entrySize = header.readUInt16LE(54);\n const count = header.readUInt16LE(56);\n if (entrySize !== 56 || count === 0 || count > 128) {\n throw new Error(\"Unsupported ELF program headers\");\n }\n const entries = read(entrySize * count, Number(header.readBigUInt64LE(32)));\n for (let i = 0; i < count; i++) {\n const offset = i * entrySize;\n if (entries.readUInt32LE(offset) !== 3) continue; // PT_INTERP\n const size = Number(entries.readBigUInt64LE(offset + 32));\n if (size < 2 || size > 4096) throw new Error(\"Invalid ELF interpreter size\");\n const interpreter = read(size, Number(entries.readBigUInt64LE(offset + 8)));\n if (interpreter[size - 1] !== 0) throw new Error(\"Unterminated ELF interpreter\");\n const name = interpreter.subarray(0, -1).toString(\"utf8\").split(\"/\").at(-1);\n if (name.startsWith(\"ld-musl-\")) return \"musl\";\n if (name.startsWith(\"ld-linux-\")) return \"gnu\";\n throw new Error(\"Unrecognized ELF interpreter\");\n }\n throw new Error(\"No ELF interpreter (statically linked executable)\");\n } catch (cause) {\n throw new Error(\n \"Unable to detect Linux libc from the Node executable. Set TENSORLAKE_NODE_LIBC to 'gnu' or 'musl' for a nonstandard runtime.\",\n { cause },\n );\n } finally {\n if (fd != null) fs.closeSync(fd);\n }\n}\n\nmodule.exports = { detectLinuxLibc };\n","import { loadNative } from \"../native-binding.js\";\nimport { configureNativeWorker } from \"../native-worker-client.js\";\nimport type { NativeFunctionAgentBinding, NativeFunctionAgentOptions } from \"./protocol.js\";\nimport { FunctionAgentRunner } from \"./runner.js\";\n\nfunction parseArgs(args: readonly string[]): NativeFunctionAgentOptions {\n const values = new Map<string, string>();\n for (let index = 0; index < args.length; index += 1) {\n const key = args[index];\n const value = args[index + 1];\n if (!key?.startsWith(\"--\") || value == null || value.startsWith(\"--\")) {\n throw new Error(`Expected --name value argument, got '${key ?? \"\"}'`);\n }\n values.set(key.slice(2), value);\n index += 1;\n }\n const functionServiceUrl = values.get(\"function-service-url\");\n const registrationToken = values.get(\"registration-token\");\n if (functionServiceUrl == null || registrationToken == null) {\n throw new Error(\"--function-service-url and --registration-token are required\");\n }\n return {\n functionServiceUrl,\n registrationToken,\n ...(values.has(\"agent-id\") ? { agentId: values.get(\"agent-id\") } : {}),\n ...(values.has(\"incarnation\") ? { incarnation: values.get(\"incarnation\") } : {}),\n ...(values.has(\"secret-service-workload-url\")\n ? { secretServiceWorkloadUrl: values.get(\"secret-service-workload-url\") }\n : {}),\n ...(values.has(\"credential-request-timeout-ms\")\n ? { credentialRequestTimeoutMs: Number(values.get(\"credential-request-timeout-ms\")) }\n : {}),\n };\n}\n\nexport async function main(args: readonly string[] = process.argv.slice(2)): Promise<void> {\n configureNativeWorker(() => new URL(\"../native-worker.cjs\", import.meta.url));\n const binding = loadNative<NativeFunctionAgentBinding>();\n const core = new binding.FunctionAgentCore(parseArgs(args));\n return new FunctionAgentRunner(core).run();\n}\n","import { detectLinuxLibc } from \"../lib/libc.cjs\";\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ninterface RuntimeReport {\n header?: {\n glibcVersionRuntime?: string;\n };\n}\n\ninterface TargetOptions {\n libc?: \"gnu\" | \"musl\";\n report?: RuntimeReport;\n}\n\ninterface NativeBindingPathOptions extends TargetOptions {\n packageRoot?: string;\n platform?: NodeJS.Platform;\n arch?: string;\n}\n\nconst NATIVE_PACKAGES: Readonly<Record<string, string>> = {\n \"darwin-arm64\": \"tensorlake-native-darwin-arm64\",\n \"linux-arm64\": \"tensorlake-native-linux-arm64-gnu\",\n \"linux-arm64-musl\": \"tensorlake-native-linux-arm64-musl\",\n \"linux-x64\": \"tensorlake-native-linux-x64-gnu\",\n \"linux-x64-musl\": \"tensorlake-native-linux-x64-musl\",\n \"win32-x64\": \"tensorlake-native-win32-x64\",\n};\n\nfunction packageRoot(): string {\n const parent = fileURLToPath(new URL(\"../\", import.meta.url));\n if (fs.existsSync(path.join(parent, \"package.json\"))) return parent;\n const grandparent = fileURLToPath(new URL(\"../../\", import.meta.url));\n if (fs.existsSync(path.join(grandparent, \"package.json\"))) return grandparent;\n return parent;\n}\n\nlet cachedLinuxLibc: \"gnu\" | \"musl\" | undefined;\n\nfunction linuxLibcFamily(options: TargetOptions): \"gnu\" | \"musl\" {\n if (options.libc != null) return options.libc;\n if (options.report != null) {\n return options.report.header?.glibcVersionRuntime ? \"gnu\" : \"musl\";\n }\n if (cachedLinuxLibc != null) return cachedLinuxLibc;\n\n cachedLinuxLibc = detectLinuxLibc(fs);\n return cachedLinuxLibc;\n}\n\nexport function nativeTargetId(\n platform: NodeJS.Platform = process.platform,\n arch: string = process.arch,\n options: TargetOptions = {},\n): string {\n const target = `${platform}-${arch}`;\n if (platform !== \"linux\") return target;\n if (options.libc == null && options.report == null && platform !== process.platform) {\n return target;\n }\n return linuxLibcFamily(options) === \"musl\" ? `${target}-musl` : target;\n}\n\nexport function nativeBindingPath(options: NativeBindingPathOptions = {}): string {\n const platform = options.platform ?? process.platform;\n const arch = options.arch ?? process.arch;\n return path.join(\n options.packageRoot ?? packageRoot(),\n \"dist\",\n \"native\",\n nativeTargetId(platform, arch, options),\n \"tensorlake-node.node\",\n );\n}\n\nexport function nativePackageName(\n platform: NodeJS.Platform = process.platform,\n arch: string = process.arch,\n options: TargetOptions = {},\n): string | undefined {\n return NATIVE_PACKAGES[nativeTargetId(platform, arch, options)];\n}\n\nexport function loadNative<T>(): T {\n const target = nativeTargetId();\n const bindingPath = nativeBindingPath();\n const require = createRequire(import.meta.url);\n\n // Local source builds stage the addon here. Published packages intentionally\n // omit this directory and resolve the platform-specific optional dependency.\n if (fs.existsSync(bindingPath)) return require(bindingPath) as T;\n\n const packageName = nativePackageName();\n if (!packageName) {\n throw new Error(\n `Tensorlake does not provide a native binding for ${target}.`,\n );\n }\n\n let packageEntry: string;\n try {\n packageEntry = require.resolve(packageName);\n } catch (cause) {\n throw new Error(\n `Missing native binding package ${packageName} for ${target}. Reinstall tensorlake without omitting optional dependencies, and install dependencies on the machine where they will run.`,\n { cause },\n );\n }\n return require(packageEntry) as T;\n}\n","import { createRequire } from \"node:module\";\nimport { SHARE_ENV, Worker } from \"node:worker_threads\";\nimport type { NativeEmit, NativeSandboxBinding } from \"./native-sandbox.js\";\nimport {\n cancelNativeCall,\n closeNativeHandle,\n type NativeCall,\n type NativeHandle,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./native-worker-protocol.js\";\nimport { resolveProxyTarget } from \"./url.js\";\n\ninterface PendingCall {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n emit?: NativeEmit;\n // Keep descriptors (and their parents) alive until the operation settles.\n handle?: NativeHandle;\n}\n\n/** One persistent worker per SDK installation and calling isolate. */\nexport class NativeWorkerClient {\n private worker?: Worker;\n private nextId = 1;\n private registered = new Set<number>();\n private pending = new Map<number, PendingCall>();\n private finalizers = new FinalizationRegistry<number>((id) =>\n this.release(id),\n );\n\n constructor(\n private readonly workerPath: () => string | URL = () =>\n createRequire(import.meta.url).resolve(\n \"tensorlake/internal/native-worker\",\n ),\n ) {}\n\n handle(\n kind: NativeHandle[\"kind\"],\n args: unknown[],\n parent?: NativeHandle,\n ): object {\n const handle: NativeHandle = { id: this.nextId++, kind, args, parent };\n this.finalizers.register(handle, handle.id);\n let closed = false;\n return new Proxy(\n {},\n {\n get: (_target, method) => {\n if (method === \"then\") return undefined;\n if (method === closeNativeHandle)\n return () => {\n closed = true;\n this.release(handle.id);\n };\n if (method === \"connectProxy\")\n return (...proxyArgs: unknown[]) => {\n if (closed) throw new Error(\"Tensorlake native client is closed\");\n return this.handle(\"NativeSandboxProxyClient\", proxyArgs, handle);\n };\n if (method === \"baseUrl\")\n return () =>\n resolveProxyTarget(String(args[0]), String(args[1])).baseUrl;\n if (typeof method !== \"string\") return undefined;\n return (...callArgs: unknown[]) => {\n if (closed)\n return Promise.reject(\n new Error(\"Tensorlake native client is closed\"),\n );\n const emit =\n typeof callArgs.at(-1) === \"function\"\n ? (callArgs.pop() as NativeEmit)\n : undefined;\n return this.call(handle, method, callArgs, emit);\n };\n },\n },\n );\n }\n\n call(\n handle: NativeHandle | undefined,\n method: string,\n args: unknown[],\n emit?: NativeEmit,\n ): NativeCall<any> {\n const id = this.nextId++;\n let worker: Worker | undefined;\n const promise: NativeCall<any> = new Promise((resolve, reject) => {\n try {\n worker = this.getWorker();\n this.pending.set(id, { resolve, reject, emit, handle });\n worker.ref();\n if (handle) this.register(handle, worker);\n this.send(worker, {\n type: \"call\",\n id,\n handleId: handle?.id,\n method,\n args,\n stream: !!emit,\n });\n } catch (error) {\n this.pending.delete(id);\n this.unrefIfIdle();\n reject(error);\n }\n });\n promise[cancelNativeCall] = () => {\n const pending = this.pending.get(id);\n if (pending && worker) {\n pending.emit = undefined;\n this.send(worker, { type: \"cancel\", id });\n }\n };\n return promise;\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n const worker = new Worker(this.workerPath(), {\n env: SHARE_ENV,\n name: \"tensorlake-native\",\n });\n this.worker = worker;\n worker.on(\"message\", (message: WorkerResponse) => {\n const pending = this.pending.get(message.id);\n if (!pending || this.worker !== worker) return;\n if (message.type === \"event\") {\n // Acknowledge only when the consumer asks for the next event. At most\n // one event per stream is outstanding across Rust, worker and caller.\n Promise.resolve()\n .then(() => pending.emit?.(message.value))\n .then(\n () => {\n if (this.worker === worker)\n this.send(worker, { type: \"ack\", id: message.id });\n },\n (error: Error) => {\n this.send(worker, { type: \"cancel\", id: message.id });\n pending.reject(error);\n },\n );\n return;\n }\n this.pending.delete(message.id);\n if (message.type === \"error\") {\n const error = new Error(message.error.message);\n error.name = message.error.name;\n error.stack = message.error.stack ?? error.stack;\n pending.reject(error);\n } else {\n pending.resolve(message.value);\n }\n this.unrefIfIdle();\n });\n const fail = (error: Error) => {\n if (this.worker !== worker) return;\n this.worker = undefined;\n this.registered.clear();\n for (const pending of this.pending.values()) pending.reject(error);\n this.pending.clear();\n // Never replay an in-flight request: it may already have taken effect.\n // A subsequent explicit call starts a fresh worker from descriptors.\n void worker.terminate();\n };\n worker.on(\"error\", fail);\n worker.on(\"messageerror\", fail);\n worker.on(\"exit\", (code) =>\n fail(\n new Error(\n `Tensorlake native worker exited (${code}); in-flight operations were not retried`,\n ),\n ),\n );\n worker.unref();\n return worker;\n }\n\n private register(handle: NativeHandle, worker: Worker): void {\n if (this.registered.has(handle.id)) return;\n if (handle.parent) this.register(handle.parent, worker);\n this.send(worker, {\n type: \"create\",\n handle: { id: handle.id, kind: handle.kind, args: handle.args },\n parentId: handle.parent?.id,\n });\n this.registered.add(handle.id);\n }\n\n private release(handleId: number): void {\n if (this.worker && this.registered.delete(handleId))\n this.send(this.worker, { type: \"release\", handleId });\n }\n\n private send(worker: Worker, message: WorkerRequest): void {\n worker.postMessage(message);\n }\n private unrefIfIdle(): void {\n if (this.pending.size === 0) this.worker?.unref();\n }\n}\n\nexport function createWorkerBinding(\n runtime: NativeWorkerClient,\n): NativeSandboxBinding {\n return {\n NativeSandboxClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxClient\", args);\n }\n },\n NativeSandboxProxyClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxProxyClient\", args);\n }\n },\n NativeRepositoryClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeRepositoryClient\", args);\n }\n },\n validateManagedName: (name: string) =>\n runtime.call(undefined, \"validateManagedName\", [name]),\n } as unknown as NativeSandboxBinding;\n}\n\n// ESM and CJS can coexist in one application. Share the worker across bundles\n// of this SDK version, while keeping incompatible installed versions separate.\ndeclare const __SDK_VERSION__: string;\nconst runtimeKey = Symbol.for(\n `tensorlake.native.worker.${typeof __SDK_VERSION__ === \"undefined\" ? \"source\" : __SDK_VERSION__}.v1`,\n);\nconst runtimes = globalThis as typeof globalThis & {\n [runtimeKey]?: NativeWorkerClient;\n};\nexport function workerBinding(): NativeSandboxBinding {\n return createWorkerBinding(\n (runtimes[runtimeKey] ??= new NativeWorkerClient()),\n );\n}\n\n/** Runtime capsules supply the worker alongside their bundled application SDK. */\nexport function configureNativeWorker(workerPath: () => string | URL): void {\n runtimes[runtimeKey] ??= new NativeWorkerClient(workerPath);\n}\n\nexport function releaseNativeHandle(handle: object | null): void {\n (handle as { [closeNativeHandle]?: () => void } | null)?.[\n closeNativeHandle\n ]?.();\n}\n","/** Internal protocol. Native objects never cross an isolate boundary. */\nexport type NativeClientKind =\n | \"NativeSandboxClient\"\n | \"NativeSandboxProxyClient\"\n | \"NativeRepositoryClient\";\n\nexport interface NativeHandle {\n id: number;\n kind: NativeClientKind;\n args: unknown[];\n parent?: NativeHandle;\n}\n\nexport type WorkerRequest =\n | { type: \"create\"; handle: Omit<NativeHandle, \"parent\">; parentId?: number }\n | {\n type: \"call\";\n id: number;\n handleId?: number;\n method: string;\n args: unknown[];\n stream: boolean;\n }\n | { type: \"release\"; handleId: number }\n | { type: \"ack\" | \"cancel\"; id: number };\n\nexport type WorkerResponse =\n | { type: \"result\"; id: number; value: unknown }\n | {\n type: \"error\";\n id: number;\n error: { name: string; message: string; stack?: string };\n }\n | { type: \"event\"; id: number; value: string };\n\nexport const cancelNativeCall = Symbol.for(\"tensorlake.native.cancel.v1\");\nexport const closeNativeHandle = Symbol.for(\"tensorlake.native.close.v1\");\nexport type NativeCall<T> = Promise<T> & { [cancelNativeCall]?: () => void };\n","import * as defaults from \"./defaults.js\";\n\n/** Remove a trailing slash from a URL string if present. */\nfunction trimTrailingSlashes(url: string): string {\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/** Check whether a URL points to localhost. */\nexport function isLocalhost(apiUrl: string): boolean {\n try {\n const parsed = new URL(apiUrl);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\n/** Return the explicit sandbox proxy env override, if the user set one. */\nexport function explicitProxyUrlOverride(): string | undefined {\n const explicit = process.env.TENSORLAKE_SANDBOX_PROXY_URL?.trim();\n return explicit && explicit.length > 0 ? explicit : undefined;\n}\n\n/**\n * Resolve the legacy default proxy URL for direct sandbox handles.\n *\n * Normal client connect/create flows use the server-returned `sandboxUrl`.\n * This helper keeps the old direct-handle behavior and treats the env var as\n * an explicit override.\n *\n * Legacy priority:\n * 1. TENSORLAKE_SANDBOX_PROXY_URL env var\n * 2. `http://localhost:9443` for localhost API URLs\n * 3. Transform `api.X` → `sandbox.X`\n * 4. Default fallback\n */\nexport function resolveProxyUrl(apiUrl: string): string {\n const explicit = explicitProxyUrlOverride();\n if (explicit) return explicit;\n\n if (isLocalhost(apiUrl)) return \"http://localhost:9443\";\n\n try {\n const parsed = new URL(apiUrl);\n const host = parsed.hostname;\n if (host.startsWith(\"api.\")) {\n const proxyHost = \"sandbox.\" + host.slice(4);\n return `${parsed.protocol}//${proxyHost}`;\n }\n } catch {\n // fall through to default\n }\n\n return defaults.SANDBOX_PROXY_URL;\n}\n\n/**\n * Resolve the proxy target for a specific sandbox.\n *\n * - Localhost: base URL stays the same, Host header set to `{sandboxId}.local`\n * - Cloud: selected proxy domain with `X-Tensorlake-Sandbox-Id` header\n *\n * Returns `{ baseUrl, hostHeader, sandboxIdHeader }`.\n */\nexport function resolveProxyTarget(\n proxyUrl: string,\n sandboxId: string,\n): { baseUrl: string; hostHeader: string | undefined; sandboxIdHeader: string | undefined } {\n try {\n const parsed = new URL(proxyUrl);\n const host = parsed.hostname;\n\n if (host === \"localhost\" || host === \"127.0.0.1\") {\n return {\n baseUrl: trimTrailingSlashes(proxyUrl),\n hostHeader: `${sandboxId}.local`,\n sandboxIdHeader: undefined,\n };\n }\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n return {\n baseUrl: `${parsed.protocol}//${host}${port}`,\n hostHeader: undefined,\n sandboxIdHeader: sandboxId,\n };\n } catch {\n return {\n baseUrl: `${trimTrailingSlashes(proxyUrl)}/${sandboxId}`,\n hostHeader: undefined,\n sandboxIdHeader: undefined,\n };\n }\n}\n\n/**\n * Build a public sandbox URL from a server-provided ingress endpoint.\n *\n * `port` omitted or `9501` returns the management URL:\n * `https://<sandbox-id>.<ingress-host>`. User ports use the public\n * `<port>-<sandbox-id>.<ingress-host>` form.\n */\nexport function sandboxUrlFromIngressEndpoint(\n ingressEndpoint: string,\n sandboxId: string,\n port = 9501,\n): string {\n const parsed = new URL(ingressEndpoint);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"ingressEndpoint must be an absolute http(s) URL\");\n }\n const label = port === 9501 ? sandboxId : `${port}-${sandboxId}`;\n return `${parsed.protocol}//${label}.${parsed.host}`;\n}\n\n/**\n * Derive the sandbox lifecycle URL from the API URL.\n *\n * Transforms `api.X` → `sandbox.X` for cloud. Returns the URL unchanged for\n * localhost or unrecognised patterns.\n */\nexport function resolveSandboxLifecycleUrl(apiUrl: string): string {\n if (isLocalhost(apiUrl)) return apiUrl;\n\n try {\n const parsed = new URL(apiUrl);\n if (parsed.hostname.startsWith(\"api.\")) {\n parsed.hostname = \"sandbox.\" + parsed.hostname.slice(4);\n return parsed.toString().replace(/\\/$/, \"\");\n }\n } catch {\n // fall through\n }\n\n return apiUrl;\n}\n\n/**\n * Build a lifecycle API path.\n *\n * - Localhost (namespaced): `/v1/namespaces/{namespace}/{path}`\n * - Cloud (flat): `/{path}`\n */\nexport function lifecyclePath(\n path: string,\n isLocal: boolean,\n namespace: string,\n): string {\n if (isLocal) {\n return `/v1/namespaces/${namespace}/${path}`;\n }\n return `/${path}`;\n}\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n\nexport const API_URL =\n process.env.TENSORLAKE_API_URL ?? \"https://api.tensorlake.ai\";\nexport const API_KEY = process.env.TENSORLAKE_API_KEY ?? undefined;\nexport const NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? \"default\";\nexport const SANDBOX_PROXY_URL =\n process.env.TENSORLAKE_SANDBOX_PROXY_URL ?? \"https://sandbox.tensorlake.ai\";\n\nexport const DEFAULT_HTTP_TIMEOUT_MS = 300_000;\nexport const MAX_RETRIES = 3;\nexport const RETRY_BACKOFF_MS = 500;\nexport const RETRYABLE_STATUS_CODES = new Set([429, 502, 503, 504]);\n","import { createHash } from \"node:crypto\";\nimport { mkdir, mkdtemp, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { compileFunction, constants as vmConstants } from \"node:vm\";\nimport { unzipSync } from \"fflate\";\nimport type { RequestContextValue } from \"../applications/context.js\";\nimport {\n runWithRequestContext,\n serializeRequestStateValue,\n validateCounterMetric,\n validateProgressUpdate,\n validateRequestStateKey,\n validateTimerMetric,\n} from \"../applications/context.js\";\nimport {\n FunctionError,\n RequestError,\n SDKUsageError,\n TimeoutError,\n isRequestError,\n} from \"../applications/errors.js\";\nimport { File } from \"../applications/file.js\";\nimport {\n executeHandlerResult,\n installPromiseInstrumentation,\n isTailCall,\n runWithFunctionRuntime,\n type FunctionFuture,\n type FunctionRuntime,\n type RegisteredDefinition,\n type TailCall,\n} from \"../applications/function.js\";\nimport { Headers } from \"../applications/headers.js\";\nimport { HttpBody } from \"../applications/http-body.js\";\nimport { deserializeJSON, serializeValue } from \"../applications/serialization.js\";\nimport type {\n AgentInput,\n AgentInputValue,\n Assignment,\n CallResult,\n NativeFunctionAgentCore,\n RequestStateResult,\n} from \"./protocol.js\";\n\ninstallPromiseInstrumentation();\n\ntype Message = Record<string, unknown>;\n\nconst RESERVED_ENVIRONMENT_TARGETS = new Set([\n \"PYTHONFAULTHANDLER\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"PYTHONHOME\",\n \"PYTHONPATH\",\n \"NODE_OPTIONS\",\n \"NODE_PATH\",\n]);\n\ninterface CodeManifest {\n format_version?: number;\n runtime?: string;\n minimum_node_major?: number;\n module?: string;\n functions?: Record<string, { name?: string }>;\n}\n\ninterface RuntimeModule {\n __tensorlakeGetFunction?(name: string): RegisteredDefinition;\n}\n\ninterface LoadedApplication {\n root: string;\n getFunction(name: string): RegisteredDefinition;\n}\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve(value: T): void;\n reject(error: unknown): void;\n}\n\nconst nativeImport = compileFunction(\n \"return import(specifier)\",\n [\"specifier\"],\n { importModuleDynamically: vmConstants.USE_MAIN_CONTEXT_DEFAULT_LOADER },\n) as (specifier: string) => Promise<unknown>;\n\nfunction deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((resolveValue, rejectValue) => {\n resolve = resolveValue;\n reject = rejectValue;\n });\n return { promise, resolve, reject };\n}\n\nfunction durableHash(values: readonly string[]): string {\n const hash = createHash(\"sha256\");\n for (const value of values) {\n const bytes = Buffer.from(value, \"utf8\");\n const length = Buffer.alloc(8);\n length.writeBigUInt64BE(BigInt(bytes.byteLength));\n hash.update(length);\n hash.update(bytes);\n hash.update(\"|\");\n }\n return hash.digest(\"hex\");\n}\n\nfunction safeArchivePath(root: string, archivePath: string): string {\n const output = path.resolve(root, archivePath);\n if (output !== root && !output.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Application archive contains unsafe path '${archivePath}'`);\n }\n return output;\n}\n\nfunction decodeBase64(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, \"base64\"));\n}\n\nfunction encodeBase64(value: Uint8Array): string {\n return Buffer.from(value).toString(\"base64\");\n}\n\nfunction deserializeValue(value: AgentInputValue): unknown {\n const data = decodeBase64(value.data_base64);\n if (value.content_type.toLowerCase().includes(\"json\")) return deserializeJSON(data);\n return new File(data, value.content_type || \"application/octet-stream\");\n}\n\nfunction serializeArgument(value: unknown): Message {\n const serialized = serializeValue(value);\n return {\n source: \"data\",\n data_base64: encodeBase64(serialized.data),\n metadata_base64: \"\",\n content_type: serialized.contentType,\n };\n}\n\nfunction applyResolvedEnvironment(assignment: Assignment): void {\n const rawEnvironment = assignment.resolved_environment ?? [];\n const targets = new Set<string>();\n for (const item of rawEnvironment) {\n if (\n item == null\n || typeof item.target !== \"string\"\n || !/^[A-Za-z_][A-Za-z0-9_]{0,255}$/.test(item.target)\n || RESERVED_ENVIRONMENT_TARGETS.has(item.target)\n || item.target.startsWith(\"TENSORLAKE_\")\n || targets.has(item.target)\n || typeof item.value !== \"string\"\n || item.value.includes(\"\\0\")\n ) {\n throw new Error(\"Resolved environment entry is invalid\");\n }\n targets.add(item.target);\n }\n for (const item of rawEnvironment) process.env[item.target] = item.value;\n for (const item of rawEnvironment) item.value = \"\";\n assignment.resolved_environment = [];\n}\n\nfunction failureFromResult(result: Exclude<CallResult, { outcome: \"success\" }>): Error {\n if (result.outcome === \"timed_out\") return new TimeoutError();\n if (result.reason === \"request_error\") return new RequestError(\"Function call failed\");\n return new FunctionError(`Function call failed: ${result.reason}`);\n}\n\nexport class FunctionAgentRunner {\n private readonly attempts = new Map<string, AttemptRuntime>();\n private readonly applications = new Map<string, Promise<LoadedApplication>>();\n private initializationSent = false;\n\n constructor(private readonly core: NativeFunctionAgentCore) {}\n\n async run(): Promise<void> {\n for (;;) {\n const input = JSON.parse(await this.core.nextInput()) as AgentInput;\n switch (input.type) {\n case \"assignment\":\n void this.startAssignment(input.assignment);\n break;\n case \"call_result\":\n this.attempts.get(input.attempt_id)?.deliverCallResult(\n input.function_call_id,\n input,\n );\n break;\n case \"request_state_result\":\n this.attempts.get(input.result.attempt_id)?.deliverStateResult(input.result);\n break;\n case \"cancel\":\n this.attempts.get(input.attempt_id)?.cancel();\n break;\n case \"shutdown\":\n return;\n }\n }\n }\n\n private async startAssignment(assignment: Assignment): Promise<void> {\n try {\n applyResolvedEnvironment(assignment);\n const application = await this.loadApplication(assignment);\n if (!this.initializationSent) {\n await this.submit({ type: \"initialized\" });\n this.initializationSent = true;\n }\n const definition = application.getFunction(assignment.function);\n const attempt = new AttemptRuntime(assignment, definition, this.submit.bind(this));\n this.attempts.set(assignment.attempt_id, attempt);\n await attempt.run();\n } catch (error) {\n // Initialization failures must be terminal user-code failures. Marking\n // the runner initialized before reporting the attempt avoids turning a\n // bad bundle into an unbounded infrastructure retry loop.\n if (!this.initializationSent) {\n await this.submit({ type: \"initialized\" });\n this.initializationSent = true;\n }\n await this.submit({\n type: \"failure\",\n attempt_id: assignment.attempt_id,\n reason: \"function_error\",\n message: error instanceof Error ? error.stack ?? error.message : String(error),\n });\n } finally {\n this.attempts.delete(assignment.attempt_id);\n }\n }\n\n private loadApplication(assignment: Assignment): Promise<LoadedApplication> {\n let application = this.applications.get(assignment.application_code_sha256);\n if (application == null) {\n application = unpackApplication(assignment);\n this.applications.set(assignment.application_code_sha256, application);\n }\n return application;\n }\n\n private submit(output: Message): Promise<void> {\n return this.core.submitOutput(JSON.stringify(output));\n }\n}\n\nclass AttemptRuntime implements FunctionRuntime {\n private readonly controller = new AbortController();\n private readonly callResults = new Map<string, Deferred<CallResult>>();\n private readonly stateResults = new Map<string, Deferred<RequestStateResult>>();\n private previousDurableId: string;\n private nextStateSequence = 1;\n\n constructor(\n private readonly assignment: Assignment,\n private readonly definition: RegisteredDefinition,\n private readonly submit: (output: Message) => Promise<void>,\n ) {\n this.previousDurableId = assignment.function_run_id;\n }\n\n async run(): Promise<void> {\n try {\n const args = await deserializeAssignmentArguments(this.definition, this.assignment.inputs);\n const output = await runWithFunctionRuntime(this, () =>\n runWithRequestContext(this.requestContext(), () =>\n executeHandlerResult(this.definition, args),\n ),\n );\n if (isTailCall(output)) {\n const callId = await this.createTailCall(output);\n await this.submit({\n type: \"success\",\n attempt_id: this.assignment.attempt_id,\n result: { type: \"call_graph\", output_function_call_id: callId },\n });\n return;\n }\n const serialized = serializeValue(output);\n await this.submit({\n type: \"success\",\n attempt_id: this.assignment.attempt_id,\n result: {\n type: \"value\",\n output_base64: encodeBase64(serialized.data),\n metadata_base64: \"\",\n content_type: serialized.contentType,\n },\n });\n } catch (error) {\n if (this.controller.signal.aborted) return;\n await this.submit({\n type: \"failure\",\n attempt_id: this.assignment.attempt_id,\n reason: isRequestError(error) ? \"request_error\" : \"function_error\",\n message: error instanceof Error ? error.stack ?? error.message : String(error),\n });\n }\n }\n\n cancel(): void {\n if (!this.controller.signal.aborted) {\n this.controller.abort(new FunctionError(\"Function execution was cancelled\"));\n }\n for (const waiter of this.callResults.values()) waiter.reject(this.controller.signal.reason);\n for (const waiter of this.stateResults.values()) waiter.reject(this.controller.signal.reason);\n this.callResults.clear();\n this.stateResults.clear();\n }\n\n deliverCallResult(functionCallId: string, result: CallResult): void {\n const waiter = this.callResults.get(functionCallId);\n if (waiter == null) return;\n this.callResults.delete(functionCallId);\n waiter.resolve(result);\n }\n\n deliverStateResult(result: RequestStateResult): void {\n const waiter = this.stateResults.get(result.operation_id);\n if (waiter == null) return;\n this.stateResults.delete(result.operation_id);\n waiter.resolve(result);\n }\n\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T> {\n return this.runChild<T>(definition, args, 0);\n }\n\n async runFuture<T>(future: FunctionFuture<T>): Promise<T> {\n if (future.delaySeconds > 0) {\n await this.submit({ type: \"suspend\", attempt_id: this.assignment.attempt_id });\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, future.delaySeconds * 1_000);\n this.controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timer);\n reject(this.controller.signal.reason);\n }, { once: true });\n });\n await this.submit({ type: \"resume\", attempt_id: this.assignment.attempt_id });\n }\n return this.runChild<T>(future.definition, future.args, 0);\n }\n\n async reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n let values = items;\n let accumulator = initial;\n if (!hasInitial) {\n if (items.length === 0) throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n [accumulator, ...values] = items;\n }\n if (values.length === 0) return accumulator as T;\n const calls: Message[] = [];\n let previous: string | undefined;\n for (const item of values) {\n const id = this.nextDurableId(definition, \"ReduceStep\");\n calls.push({\n function_call_id: id,\n function_name: definition.name,\n inputs: [\n previous == null\n ? serializeArgument(accumulator)\n : { source: \"function_run_output\", function_call_id: previous },\n serializeArgument(item),\n ],\n call_metadata_base64: this.callMetadata(id, definition.name, \"reduce\"),\n });\n previous = id;\n }\n await this.submit({ type: \"call_batch\", attempt_id: this.assignment.attempt_id, calls });\n return this.watch<T>(previous as string);\n }\n\n private async runChild<T>(\n definition: RegisteredDefinition,\n args: readonly unknown[],\n _delaySeconds: number,\n ): Promise<T> {\n const id = this.nextDurableId(definition);\n await this.submit({\n type: \"call_batch\",\n attempt_id: this.assignment.attempt_id,\n calls: [{\n function_call_id: id,\n function_name: definition.name,\n inputs: args.map(serializeArgument),\n call_metadata_base64: this.callMetadata(id, definition.name, \"call\"),\n }],\n });\n return this.watch<T>(id);\n }\n\n private async watch<T>(functionCallId: string): Promise<T> {\n const result = deferred<CallResult>();\n this.callResults.set(functionCallId, result);\n await this.submit({\n type: \"watch\",\n attempt_id: this.assignment.attempt_id,\n function_call_id: functionCallId,\n });\n const resolved = await result.promise;\n if (resolved.outcome !== \"success\") throw failureFromResult(resolved);\n return deserializeValue({\n data_base64: resolved.output_base64,\n metadata_base64: resolved.metadata_base64,\n content_type: resolved.content_type,\n }) as T;\n }\n\n private async createTailCall(tailCall: TailCall<unknown>): Promise<string> {\n const id = this.nextDurableId(tailCall.definition);\n await this.submit({\n type: \"call_batch\",\n attempt_id: this.assignment.attempt_id,\n calls: [{\n function_call_id: id,\n function_name: tailCall.definition.name,\n inputs: tailCall.args.map(serializeArgument),\n call_metadata_base64: this.callMetadata(id, tailCall.definition.name, \"tail_call\"),\n }],\n });\n return id;\n }\n\n private nextDurableId(definition: RegisteredDefinition, operation = \"FunctionCall\"): string {\n const id = durableHash([\n this.assignment.function_run_id,\n this.previousDurableId,\n operation,\n definition.name,\n ]);\n this.previousDurableId = id;\n return id;\n }\n\n private callMetadata(id: string, functionName: string, operation: string): string {\n return Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName,\n operation,\n })).toString(\"base64\");\n }\n\n private requestContext(): RequestContextValue {\n return {\n requestId: this.assignment.request_id,\n headers: new Headers(\n (this.assignment.request_headers ?? []).map(({ name, value }) => [name, value] as const),\n ),\n signal: this.controller.signal,\n state: {\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const result = await this.requestState({ operation: \"get\", key });\n if (result.result !== \"get\" || result.value_base64 == null) return defaultValue;\n return deserializeJSON(decodeBase64(result.value_base64)) as T;\n },\n set: async (key: string, value: unknown) => {\n validateRequestStateKey(key);\n const encoded = encodeBase64(serializeRequestStateValue(value));\n await this.requestState({ operation: \"set\", key, value_base64: encoded });\n },\n },\n metrics: {\n counter: async (name, value = 1) => validateCounterMetric(name, value),\n timer: async (name, value) => validateTimerMetric(name, value),\n },\n progress: {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n await this.submit({\n type: \"progress\",\n attempt_id: this.assignment.attempt_id,\n message: JSON.stringify({ current, total, ...options }),\n });\n },\n },\n };\n }\n\n private async requestState(operation: Message): Promise<RequestStateResult> {\n const operationId = `${this.assignment.attempt_id}:state:${this.nextStateSequence}`;\n this.nextStateSequence += 1;\n const result = deferred<RequestStateResult>();\n this.stateResults.set(operationId, result);\n await this.submit({\n type: \"request_state\",\n attempt_id: this.assignment.attempt_id,\n operation_id: operationId,\n operation,\n });\n return result.promise;\n }\n}\n\nasync function unpackApplication(assignment: Assignment): Promise<LoadedApplication> {\n const archive = decodeBase64(assignment.application_code_base64);\n const actualHash = createHash(\"sha256\").update(archive).digest(\"hex\");\n if (actualHash !== assignment.application_code_sha256) {\n throw new Error(\n `Application code hash mismatch: expected ${assignment.application_code_sha256}, got ${actualHash}`,\n );\n }\n const root = await mkdtemp(path.join(os.tmpdir(), \"tensorlake-typescript-app-\"));\n const files = unzipSync(archive);\n for (const [name, content] of Object.entries(files)) {\n const destination = safeArchivePath(root, name);\n if (name.endsWith(\"/\")) {\n await mkdir(destination, { recursive: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { mode: 0o600 });\n }\n const manifest = JSON.parse(\n await readFile(path.join(root, \".tensorlake_code_manifest.json\"), \"utf8\"),\n ) as CodeManifest;\n if (manifest.format_version !== 2 || manifest.runtime !== \"typescript\") {\n throw new Error(\"Application code is not a Tensorlake TypeScript bundle\");\n }\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if ((manifest.minimum_node_major ?? 24) > nodeMajor) {\n throw new Error(`Application requires Node ${manifest.minimum_node_major} or newer; runner has ${nodeMajor}`);\n }\n if (manifest.module == null) throw new Error(\"Application manifest does not name a runtime module\");\n const modulePath = safeArchivePath(root, manifest.module);\n const runtime = await nativeImport(pathToFileURL(modulePath).href) as RuntimeModule;\n if (typeof runtime.__tensorlakeGetFunction !== \"function\") {\n throw new Error(\"Application runtime does not export __tensorlakeGetFunction\");\n }\n return {\n root,\n getFunction(name: string): RegisteredDefinition {\n if (manifest.functions?.[name] == null) {\n throw new Error(`Function '${name}' is not present in the application bundle`);\n }\n const definition = runtime.__tensorlakeGetFunction?.(name);\n if (definition?.name !== name) {\n throw new Error(`Application runtime resolved '${name}' as '${String(definition?.name)}'`);\n }\n return definition;\n },\n };\n}\n\nasync function deserializeAssignmentArguments(\n definition: RegisteredDefinition,\n inputs: readonly AgentInputValue[],\n): Promise<unknown[]> {\n if (inputs.length === 0) return [];\n if (inputs.some((input) => input.source_function_call_id != null) || inputs.length > 1) {\n return inputs.map(deserializeValue);\n }\n let data = decodeBase64(inputs[0].data_base64);\n let contentType = inputs[0].content_type;\n if (contentType.toLowerCase().startsWith(\"message/http\")) {\n const marker = Buffer.from(\"\\r\\n\\r\\n\");\n const bytes = Buffer.from(data);\n const split = bytes.indexOf(marker);\n if (split < 0) throw new Error(\"Invalid message/http application input\");\n const lines = bytes.subarray(0, split).toString(\"utf8\").split(\"\\r\\n\");\n lines.shift();\n for (const line of lines) {\n const colon = line.indexOf(\":\");\n if (colon > 0 && line.slice(0, colon).trim().toLowerCase() === \"content-type\") {\n contentType = line.slice(colon + 1).trim();\n }\n }\n data = new Uint8Array(bytes.subarray(split + marker.byteLength));\n }\n if (definition.parameters.length === 0) return [];\n const first = definition.parameters[0];\n if (definition.parameters.length === 1 && first?.schema._httpBody) {\n return [new HttpBody(data, contentType)];\n }\n if (data.byteLength === 0 && !first?.schema._file) return [];\n if (first?.schema._file) return [new File(data, contentType || \"application/octet-stream\")];\n if (!contentType.toLowerCase().includes(\"json\")) {\n throw new Error(`Expected application/json input, got ${contentType}`);\n }\n return [deserializeJSON(data)];\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { SDKUsageError } from \"./errors.js\";\nimport { Headers, type HeadersInit } from \"./headers.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nexport interface ProgressOptions {\n message?: string;\n attributes?: Record<string, string>;\n}\n\nexport interface RequestState {\n set(key: string, value: unknown): Promise<void>;\n get<T>(key: string, defaultValue?: T): Promise<T | undefined>;\n}\n\nexport interface RequestMetrics {\n timer(name: string, value: number): Promise<void>;\n counter(name: string, value?: number): Promise<void>;\n}\n\nexport interface FunctionProgress {\n update(current: number, total: number, options?: ProgressOptions): Promise<void>;\n}\n\nexport function validateRequestStateKey(key: unknown): asserts key is string {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(`State key must be a string, got: ${String(key)}`);\n }\n}\n\nexport function serializeRequestStateValue(value: unknown): Uint8Array {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") {\n throw new SDKUsageError(\"Request state values must be JSON values\");\n }\n return serialized.data;\n}\n\nexport function validateCounterMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Counter name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n throw new SDKUsageError(`Counter value must be an int, got: ${String(value)}`);\n }\n if (!Number.isSafeInteger(value)) {\n throw new SDKUsageError(`Counter value must be a safe int, got: ${String(value)}`);\n }\n}\n\nexport function validateTimerMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Timer name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new SDKUsageError(`Timer value must be a finite number, got: ${String(value)}`);\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<PropertyKey, unknown> {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function validateProgressUpdate(\n current: number,\n total: number,\n options?: ProgressOptions,\n): void {\n if (!Number.isFinite(current) || !Number.isFinite(total) || total < 0 || current < 0) {\n throw new SDKUsageError(\"Progress current and total must be non-negative finite numbers\");\n }\n if (options != null && !isPlainRecord(options)) {\n throw new SDKUsageError(\"Progress options must be an object\");\n }\n if (options?.message != null && typeof options.message !== \"string\") {\n throw new SDKUsageError(\"Progress message must be a string\");\n }\n if (options?.attributes != null) {\n if (!isPlainRecord(options.attributes)) {\n throw new SDKUsageError(\"Progress attributes must be an object of string key/value pairs\");\n }\n for (const key of Reflect.ownKeys(options.attributes)) {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n const value = options.attributes[key];\n if (typeof value !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n }\n }\n}\n\nexport interface RequestContextValue {\n readonly requestId: string;\n readonly headers: Headers;\n readonly signal: AbortSignal;\n readonly state: RequestState;\n readonly metrics: RequestMetrics;\n readonly progress: FunctionProgress;\n}\n\n// A deployed application bundle contains its own copy of the applications SDK,\n// while the function executor has another copy in its runtime capsule. Both\n// copies execute in the same Node process and must observe the same context.\n// Symbol.for keeps the AsyncLocalStorage process-global without exposing it as\n// public API or coupling the application bundle to the executor package.\nconst REQUEST_CONTEXT_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.request-context-storage.v1\",\n);\n\nfunction requestContextStorage(): AsyncLocalStorage<RequestContextValue> {\n const target = globalThis as typeof globalThis & {\n [REQUEST_CONTEXT_STORAGE_KEY]?: AsyncLocalStorage<RequestContextValue>;\n };\n target[REQUEST_CONTEXT_STORAGE_KEY] ??= new AsyncLocalStorage<RequestContextValue>();\n return target[REQUEST_CONTEXT_STORAGE_KEY];\n}\n\nexport class RequestContext {\n static get(): RequestContextValue {\n const context = requestContextStorage().getStore();\n if (context == null) {\n throw new SDKUsageError(\"RequestContext.get() can only be called from a running Tensorlake function\");\n }\n return context;\n }\n}\n\nexport function runWithRequestContext<T>(\n context: RequestContextValue,\n callback: () => Promise<T>,\n): Promise<T> {\n return requestContextStorage().run(context, callback);\n}\n\nexport async function waitWithAbortSignal<T>(\n value: Promise<T>,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) throw signal.reason;\n let onAbort: (() => void) | undefined;\n try {\n return await Promise.race([\n value,\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort != null) signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nexport class MemoryRequestContext implements RequestContextValue {\n readonly headers: Headers;\n readonly signal: AbortSignal;\n private readonly values = new Map<string, Uint8Array>();\n private readonly counters = new Map<string, number>();\n private readonly timers = new Map<string, number[]>();\n private lastProgress?: { current: number; total: number; options?: ProgressOptions };\n\n constructor(\n readonly requestId: string,\n options: { signal?: AbortSignal; headers?: HeadersInit } = {},\n ) {\n this.headers = new Headers(options.headers);\n this.signal = options.signal ?? new AbortController().signal;\n }\n\n readonly state: RequestState = {\n set: async (key, value) => {\n validateRequestStateKey(key);\n this.values.set(key, serializeRequestStateValue(value).slice());\n },\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const value = this.values.get(key);\n return value == null ? defaultValue : deserializeJSON(value) as T;\n },\n };\n\n readonly metrics: RequestMetrics = {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.counters.set(name, (this.counters.get(name) ?? 0) + value);\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n const values = this.timers.get(name) ?? [];\n values.push(value);\n this.timers.set(name, values);\n },\n };\n\n readonly progress: FunctionProgress = {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.lastProgress = { current, total, options };\n },\n };\n}\n","const SDK_USAGE_ERROR_BRAND = Symbol.for(\"tensorlake.applications.sdk-usage-error.v1\");\nconst REQUEST_ERROR_BRAND = Symbol.for(\"tensorlake.applications.request-error.v1\");\nconst FUNCTION_ERROR_BRAND = Symbol.for(\"tensorlake.applications.function-error.v1\");\nconst TIMEOUT_ERROR_BRAND = Symbol.for(\"tensorlake.applications.timeout-error.v1\");\n\nexport class TensorlakeApplicationError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"TensorlakeApplicationError\";\n }\n}\n\nexport class SDKUsageError extends TensorlakeApplicationError {\n readonly [SDK_USAGE_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== SDKUsageError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isSDKUsageError(value);\n }\n\n constructor(message: string) {\n super(message);\n this.name = \"SDKUsageError\";\n }\n}\n\n/** Recognizes SDKUsageError instances thrown by independently bundled SDK copies. */\nfunction isSDKUsageError(value: unknown): value is SDKUsageError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[SDK_USAGE_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class SerializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"SerializationError\";\n }\n}\n\nexport class DeserializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"DeserializationError\";\n }\n}\n\nexport class FunctionError extends TensorlakeApplicationError {\n readonly [FUNCTION_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== FunctionError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFunctionError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"FunctionError\";\n }\n}\n\nexport class TimeoutError extends TensorlakeApplicationError {\n readonly [TIMEOUT_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== TimeoutError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isTimeoutError(value);\n }\n\n constructor() {\n super(\"Timed out.\");\n this.name = \"TimeoutError\";\n }\n}\n\n/** Recognizes TimeoutError instances thrown by independently bundled SDK copies. */\nfunction isTimeoutError(value: unknown): value is TimeoutError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[TIMEOUT_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\n/** Recognizes FunctionError instances thrown by independently bundled SDK copies. */\nfunction isFunctionError(value: unknown): value is FunctionError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FUNCTION_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class RequestError extends TensorlakeApplicationError {\n readonly [REQUEST_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== RequestError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isRequestError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"RequestError\";\n }\n}\n\n/** Recognizes RequestError instances thrown by independently bundled SDK copies. */\nexport function isRequestError(value: unknown): value is RequestError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[REQUEST_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class ReplayMismatchError extends TensorlakeApplicationError {\n constructor(message = \"Function execution diverged from its durable event history\") {\n super(message);\n this.name = \"ReplayMismatchError\";\n }\n}\n","export type HeadersInit =\n | Headers\n | Record<string, string>\n | Iterable<readonly [string, string]>;\n\nconst HEADERS_BRAND = Symbol.for(\"tensorlake.applications.headers.v1\");\n\n/** Immutable, case-insensitive application request headers. */\nexport class Headers implements Iterable<readonly [string, string]> {\n readonly [HEADERS_BRAND] = true;\n readonly #items: readonly (readonly [string, string])[];\n readonly #lookup: ReadonlyMap<string, readonly string[]>;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== Headers) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHeaders(value);\n }\n\n constructor(headers: HeadersInit = []) {\n const entries = headers instanceof Headers\n ? [...headers]\n : Symbol.iterator in Object(headers)\n ? [...headers as Iterable<readonly [string, string]>]\n : Object.entries(headers);\n const lookup = new Map<string, string[]>();\n this.#items = Object.freeze(entries.map(([name, value]) => {\n if (typeof name !== \"string\" || typeof value !== \"string\") {\n throw new TypeError(\"Headers require string names and values\");\n }\n const item = Object.freeze([name, value] as const);\n const key = name.toLowerCase();\n lookup.set(key, [...(lookup.get(key) ?? []), value]);\n return item;\n }));\n this.#lookup = lookup;\n Object.freeze(this);\n }\n\n get(name: string): string | undefined {\n return this.#lookup.get(name.toLowerCase())?.at(-1);\n }\n\n getAll(name: string): readonly string[] {\n return Object.freeze([...(this.#lookup.get(name.toLowerCase()) ?? [])]);\n }\n\n has(name: string): boolean {\n return this.#lookup.has(name.toLowerCase());\n }\n\n entries(): IterableIterator<readonly [string, string]> {\n return this.#items[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<readonly [string, string]> {\n return this.entries();\n }\n}\n\n/** Recognizes immutable request headers across independently bundled SDK copies. */\nexport function isHeaders(value: unknown): value is Headers {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HEADERS_BRAND] === true\n && typeof candidate.get === \"function\"\n && typeof candidate.getAll === \"function\"\n && typeof candidate.has === \"function\"\n && typeof candidate[Symbol.iterator] === \"function\";\n}\n","import { createHash } from \"node:crypto\";\nimport { DeserializationError, SerializationError } from \"./errors.js\";\nimport { isFile } from \"./file.js\";\nimport { isHttpBody } from \"./http-body.js\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport interface SerializedValue {\n data: Uint8Array;\n contentType: string;\n encoding: \"json\" | \"raw\";\n}\n\nfunction assertJSONValue(value: unknown, path: string, seen: Set<object>): void {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new SerializationError(`${path} contains a non-finite number`);\n return;\n }\n if (typeof value !== \"object\") {\n throw new SerializationError(`${path} contains unsupported ${typeof value}`);\n }\n if (isFile(value)) {\n throw new SerializationError(`${path} contains a nested File; File is only supported as a direct value`);\n }\n if (isHttpBody(value)) {\n throw new SerializationError(\n `${path} contains a nested HttpBody; HttpBody is only supported as a direct value`,\n );\n }\n if (seen.has(value)) throw new SerializationError(`${path} contains a cycle`);\n if (Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {\n throw new SerializationError(`${path} contains unsupported ${value.constructor?.name ?? \"object\"}`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SerializationError(`${path} contains a sparse array entry at index ${index}`);\n }\n assertJSONValue(value[index], `${path}[${index}]`, seen);\n }\n } else {\n for (const [key, item] of Object.entries(value)) {\n assertJSONValue(item, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nexport function serializeValue(value: unknown): SerializedValue {\n if (isFile(value)) {\n return { data: value.content, contentType: value.contentType, encoding: \"raw\" };\n }\n if (isHttpBody(value)) {\n return {\n data: value.content,\n contentType: value.contentType ?? \"\",\n encoding: \"raw\",\n };\n }\n try {\n assertJSONValue(value, \"value\", new Set());\n return {\n data: textEncoder.encode(JSON.stringify(value)),\n contentType: \"application/json; charset=UTF-8\",\n encoding: \"json\",\n };\n } catch (error) {\n if (error instanceof SerializationError) throw error;\n throw new SerializationError(\"Failed to serialize JSON value\", { cause: error });\n }\n}\n\nexport function deserializeJSON(data: Uint8Array): unknown {\n try {\n return JSON.parse(textDecoder.decode(data));\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize JSON value\", { cause: error });\n }\n}\n\nexport function jsonRoundTrip<T>(value: T): T {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") return value;\n return deserializeJSON(serialized.data) as T;\n}\n\nexport function canonicalJSON(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(\",\")}]`;\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJSON(item)}`).join(\",\")}}`;\n}\n\nexport function sha256(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n","import { SDKUsageError } from \"./errors.js\";\n\nconst FILE_BRAND = Symbol.for(\"tensorlake.applications.file.v1\");\n\nexport class File {\n readonly [FILE_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== File) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFile(value);\n }\n\n constructor(content: Uint8Array | ArrayBuffer, contentType: string) {\n if (!contentType.trim()) {\n throw new SDKUsageError(\"File contentType cannot be empty\");\n }\n this.content = content instanceof Uint8Array ? content : new Uint8Array(content);\n this.contentType = contentType;\n }\n}\n\n/**\n * Recognizes Tensorlake Files across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `File` constructors are not\n * referentially equal. The shared brand and `Symbol.hasInstance` keep\n * `instanceof File` useful across that boundary.\n */\nexport function isFile(value: unknown): value is File {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FILE_BRAND] === true\n && candidate.content instanceof Uint8Array\n && typeof candidate.contentType === \"string\"\n && candidate.contentType.trim().length > 0;\n}\n","const HTTP_BODY_BRAND = Symbol.for(\"tensorlake.applications.http-body.v1\");\n\nexport class HttpBody {\n readonly [HTTP_BODY_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType?: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== HttpBody) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHttpBody(value);\n }\n\n constructor(\n content: Uint8Array | ArrayBuffer,\n contentType?: string,\n ) {\n this.content = content instanceof Uint8Array\n ? content\n : new Uint8Array(content);\n this.contentType = contentType;\n }\n\n text(encoding = \"utf-8\"): string {\n return new TextDecoder(encoding, { fatal: true }).decode(this.content);\n }\n\n json<T = unknown>(): T {\n return JSON.parse(this.text()) as T;\n }\n}\n\n/**\n * Recognizes Tensorlake HTTP bodies across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `HttpBody` constructors are not\n * referentially equal.\n */\nexport function isHttpBody(value: unknown): value is HttpBody {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HTTP_BODY_BRAND] === true\n && candidate.content instanceof Uint8Array\n && (\n candidate.contentType === undefined\n || typeof candidate.contentType === \"string\"\n );\n}\n","import { AsyncLocalStorage, executionAsyncId } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Image } from \"../image.js\";\nimport { SDKUsageError } from \"./errors.js\";\nimport type { Parameter, ParameterValues, Schema } from \"./schema.js\";\nimport { schema, validateWithSchema } from \"./schema.js\";\nimport { registerDefinition } from \"./registry.js\";\n\nexport interface Retries {\n maxRetries: number;\n}\n\nexport function retries(options: Retries): Retries {\n if (\n typeof options !== \"object\"\n || options == null\n || !Number.isInteger(options.maxRetries)\n || options.maxRetries < 0\n || options.maxRetries > 10\n ) {\n throw new SDKUsageError(\"maxRetries must be an integer between 0 and 10\");\n }\n return Object.freeze({ ...options });\n}\n\nexport type Region = \"us-east-1\" | \"eu-west-1\";\n\nexport type ApplicationCapability = \"unauthenticated_requests\";\n\nexport interface FunctionOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> {\n name?: string;\n parameters: P;\n returns: Schema<R>;\n description?: string;\n cpu?: number;\n memory?: number;\n ephemeralDisk?: number;\n gpu?: string | string[] | null;\n timeout?: number;\n image?: Image;\n secrets?: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> extends FunctionOptions<P, R> {\n tags?: Record<string, string>;\n applicationRetries?: Retries;\n allow?: readonly ApplicationCapability[];\n}\n\n/** Options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleFunctionOptions = Omit<\n FunctionOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\n/** Application options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleApplicationOptions = Omit<\n ApplicationOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\nexport interface NormalizedFunctionOptions {\n description: string;\n cpu: number;\n memory: number;\n ephemeralDisk: number;\n gpu: string | string[] | null;\n timeout: number;\n image?: Image;\n secrets: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationConfiguration {\n tags: Record<string, string>;\n retries: Retries;\n allow: ApplicationCapability[];\n version: string;\n}\n\nexport interface RegisteredDefinition {\n readonly name: string;\n readonly handler: (...args: unknown[]) => Promise<unknown>;\n readonly parameters: readonly Parameter<unknown>[];\n readonly returns: Schema<unknown>;\n readonly options: NormalizedFunctionOptions;\n readonly application?: ApplicationConfiguration;\n}\n\n// A string discriminator alone is valid user JSON and cannot safely identify\n// an SDK control-flow value. Symbol.for keeps the brand stable when the user\n// application and executor load separate copies of the SDK in one process.\nconst TAIL_CALL_BRAND: unique symbol = Symbol.for(\n \"tensorlake.applications.tail-call.v1\",\n);\n\nexport interface TailCall<T> {\n readonly [TAIL_CALL_BRAND]: true;\n readonly kind: \"tensorlake-tail-call\";\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n readonly _result?: T;\n}\n\nexport interface WaitOptions {\n timeout?: number;\n returnWhen?: \"all_completed\" | \"first_completed\" | \"first_failure\";\n}\n\nexport interface WaitResult<T> {\n done: FunctionFuture<T>[];\n notDone: FunctionFuture<T>[];\n}\n\nexport interface FunctionRuntime {\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T>;\n runFuture<T>(future: FunctionFuture<T>): Promise<T>;\n wrapFutureWait?<T>(promise: Promise<T>): Promise<T>;\n trackMixedPromiseRace?(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void;\n trackPromiseSettlement?(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean;\n trackDurablePromiseConsumption?(promise: Promise<unknown>): void;\n runPromiseAggregateConstruction?<T>(callback: () => T): T;\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T>;\n}\n\n// FunctionFuture observes durable promises to update its public completion\n// fields. That bookkeeping must not look like an application-level await to\n// the strict replay causality tracker. Symbol.for keeps the private observer\n// available when the application and executor use separate SDK bundles.\nexport const DURABLE_PROMISE_OBSERVER = Symbol.for(\n \"tensorlake.applications.durable-promise-observer.v1\",\n);\n\n// SDK combinators must be able to compose durable promises without making\n// their private bookkeeping look like a user continuation. The aggregate\n// returned to user code is wrapped separately.\nexport const DURABLE_PROMISE_INTERNAL_THEN = Symbol.for(\n \"tensorlake.applications.durable-promise-internal-then.v1\",\n);\n\ninterface ObservableDurablePromise<T> extends Promise<T> {\n [DURABLE_PROMISE_OBSERVER]?: (\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ) => void;\n [DURABLE_PROMISE_INTERNAL_THEN]?: <TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ) => Promise<TResult1 | TResult2>;\n}\n\n// The user application and function executor are separate bundles loaded into\n// one Node process. Store the runtime on globalThis so durable calls made by the\n// application SDK copy reach the executor SDK copy that installed the runtime.\nconst FUNCTION_RUNTIME_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.function-runtime-storage.v1\",\n);\n\nconst PROMISE_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-instrumented.v3\",\n);\n\nconst PROMISE_THEN_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-then-instrumented.v1\",\n);\n\nconst DURABLE_THENABLE_REGISTRY_KEY = Symbol.for(\n \"tensorlake.applications.durable-thenable-registry.v2\",\n);\n\nconst INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY = Symbol.for(\n \"tensorlake.applications.internal-promise-aggregate-depth.v1\",\n);\n\ninterface DurableAssimilationRegistration {\n active: boolean;\n readonly detach: () => void;\n}\n\ninterface DurableThenableMetadata {\n readonly aggregateExpectations: DurableAggregateExpectation[];\n readonly provenanceExpectations: DurableProvenanceExpectation[];\n}\n\ninterface DurableThenableProvenance {\n readonly metadata: DurableThenableMetadata;\n readonly assimilation?: DurableAssimilationRegistration;\n readonly detached?: true;\n}\n\ninterface DurableAggregateScope {\n settled: boolean;\n readonly metadata: Set<DurableThenableMetadata>;\n}\n\ninterface DurableAggregateExpectation {\n readonly scope: DurableAggregateScope;\n readonly creatorAsyncId: number;\n}\n\ninterface DurableProvenanceExpectation {\n readonly value: object;\n readonly creatorAsyncId: number;\n}\n\nexport interface DurableAssimilation {\n finish(): void;\n link<T extends object>(value: T): T;\n}\n\nlet futureCompletionCounter = 0;\n\nfunction runtimeStorage(): AsyncLocalStorage<FunctionRuntime> {\n const target = globalThis as typeof globalThis & {\n [FUNCTION_RUNTIME_STORAGE_KEY]?: AsyncLocalStorage<FunctionRuntime>;\n };\n target[FUNCTION_RUNTIME_STORAGE_KEY] ??= new AsyncLocalStorage<FunctionRuntime>();\n return target[FUNCTION_RUNTIME_STORAGE_KEY];\n}\n\nexport function currentFunctionRuntime(): FunctionRuntime | undefined {\n return runtimeStorage().getStore();\n}\n\nexport function runWithFunctionRuntime<T>(\n runtime: FunctionRuntime,\n callback: () => Promise<T>,\n): Promise<T> {\n return runtimeStorage().run(runtime, callback);\n}\n\nexport class FunctionFuture<T> implements PromiseLike<T> {\n readonly id = randomUUID();\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n private promise?: Promise<T>;\n private startDelaySeconds = 0;\n private completionOrder?: number;\n private failed = false;\n exception?: unknown;\n done = false;\n\n constructor(definition: RegisteredDefinition, args: readonly unknown[]) {\n this.definition = definition;\n this.args = args;\n registerDurableThenable(this);\n }\n\n run(): this {\n if (this.promise != null) throw new SDKUsageError(`Future ${this.id} is already running`);\n const runtime = currentFunctionRuntime();\n const promise = runtime == null\n ? executeHandler<T>(this.definition, this.args)\n : runtime.runFuture(this);\n // The future and its runtime promise are two views of the same durable\n // operation. Sharing provenance lets Promise.resolve/fan-in wrappers keep\n // the exact durable contender identity.\n registerDurableThenable(promise, this);\n this.promise = promise;\n const onfulfilled = (value: T) => {\n this.done = true;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n return value;\n };\n const onrejected = (error: unknown) => {\n this.done = true;\n this.failed = true;\n this.exception = error;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n };\n const observer = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_OBSERVER];\n if (observer != null) {\n observer.call(promise, onfulfilled, onrejected);\n } else {\n void promise.then(\n (value) => {\n onfulfilled(value);\n },\n (error) => {\n onrejected(error);\n },\n );\n }\n // The completion observer handles rejection without changing `this.promise`,\n // so result()/await still receive the original rejection while Node does not\n // treat an intentionally unawaited future as an unhandled rejection.\n return this;\n }\n\n runLater(delaySeconds: number): this {\n if (!Number.isFinite(delaySeconds) || delaySeconds < 0) {\n throw new SDKUsageError(\"Future delay must be a non-negative finite number\");\n }\n if (this.promise != null) {\n throw new SDKUsageError(`Future ${this.id} is already running`);\n }\n this.startDelaySeconds = delaySeconds;\n return this.run();\n }\n\n get delaySeconds(): number {\n return this.startDelaySeconds;\n }\n\n result(): Promise<T> {\n if (this.promise == null) this.run();\n return this.promise as Promise<T>;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.result().then(onfulfilled, onrejected);\n }\n\n static wait<T>(futures: FunctionFuture<T>[], options: WaitOptions = {}): Promise<WaitResult<T>> {\n const completion = FunctionFuture.waitForFutures(futures, options);\n // Returning the runtime wrapper lets strict replay observe when user code\n // awaits this aggregate promise. Merely creating a Future.wait remains\n // fire-and-forget and must not trigger a mismatch.\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n }\n\n private static async waitForFutures<T>(\n futures: FunctionFuture<T>[],\n options: WaitOptions,\n ): Promise<WaitResult<T>> {\n const returnWhen = options.returnWhen ?? \"all_completed\";\n if (![\"all_completed\", \"first_completed\", \"first_failure\"].includes(returnWhen)) {\n throw new SDKUsageError(`Unsupported Future.wait returnWhen value '${returnWhen}'`);\n }\n if (options.timeout != null && (!Number.isFinite(options.timeout) || options.timeout < 0)) {\n throw new SDKUsageError(\"Future.wait timeout must be a non-negative finite number\");\n }\n futures.forEach((future) => {\n if (future.promise == null) future.run();\n });\n const alreadyDone = futures.filter((future) => future.done);\n if (\n alreadyDone.length > 0\n && (\n returnWhen === \"first_completed\"\n || (\n returnWhen === \"first_failure\"\n && alreadyDone.some((future) => future.failed)\n )\n )\n ) {\n return {\n done: alreadyDone,\n notDone: futures.filter((future) => !future.done),\n };\n }\n const pending = futures.filter((future) => !future.done);\n if (pending.length === 0) {\n return { done: [...futures], notDone: [] };\n }\n let wait: Promise<FutureWaitOutcome<T>>;\n if (returnWhen === \"all_completed\") {\n wait = internalPromiseAll(\n pending.map((future) => internalDurableThen(future.result(),\n () => undefined,\n () => undefined,\n )),\n ).then(() => ({ kind: \"all_completed\" }));\n } else if (returnWhen === \"first_completed\") {\n wait = internalPromiseRace(\n pending.map((future) => internalDurableThen(future.result(),\n () => ({ kind: \"cutoff\", future } as const),\n () => ({ kind: \"cutoff\", future } as const),\n )),\n );\n } else {\n wait = new Promise((resolve) => {\n let remaining = pending.length;\n for (const future of pending) {\n void internalDurableThen(\n future.result(),\n () => {\n remaining -= 1;\n if (remaining === 0) resolve({ kind: \"all_completed\" });\n },\n () => resolve({ kind: \"cutoff\", future }),\n );\n }\n });\n }\n const outcome = await waitUntilOrTimeout(wait, options.timeout);\n if (outcome.kind === \"cutoff\") {\n const completionCutoff = outcome.future.completionOrder;\n if (completionCutoff == null) {\n throw new SDKUsageError(\"Future.wait winner has no completion order\");\n }\n const doneSet = new Set(alreadyDone);\n for (const future of pending) {\n if (\n future.done\n && future.completionOrder != null\n && future.completionOrder <= completionCutoff\n ) {\n doneSet.add(future);\n }\n }\n return {\n done: futures.filter((future) => doneSet.has(future)),\n notDone: futures.filter((future) => !doneSet.has(future)),\n };\n }\n return {\n done: futures.filter((future) => future.done),\n notDone: futures.filter((future) => !future.done),\n };\n }\n}\n\ntype FutureWaitOutcome<T> =\n | { kind: \"all_completed\" }\n | { kind: \"cutoff\"; future: FunctionFuture<T> };\n\nasync function waitUntilOrTimeout<T>(\n promise: Promise<T>,\n timeoutSeconds?: number,\n): Promise<T | { kind: \"timeout\" }> {\n if (timeoutSeconds == null) {\n return promise;\n }\n let timer: NodeJS.Timeout | undefined;\n try {\n return await internalPromiseRace<T | { kind: \"timeout\" }>([\n promise,\n new Promise<{ kind: \"timeout\" }>((resolve) => {\n timer = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutSeconds * 1000);\n }),\n ]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\ntype Awaitable<T> = T | PromiseLike<T>;\ntype AwaitableIterable<T> = Iterable<Awaitable<T>> | PromiseLike<Iterable<Awaitable<T>>>;\n\nfunction isDurableThenable(value: unknown): boolean {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return false;\n }\n return durableThenableRegistry().has(value);\n}\n\nexport function isDetachedDurableThenable(value: unknown): boolean {\n const provenance = provenanceForDurableThenable(value);\n return provenance?.detached === true\n || (provenance?.assimilation != null && !provenance.assimilation.active);\n}\n\nfunction durableThenableRegistry(): WeakMap<object, DurableThenableProvenance> {\n const target = globalThis as typeof globalThis & {\n [DURABLE_THENABLE_REGISTRY_KEY]?: WeakMap<object, DurableThenableProvenance>;\n };\n target[DURABLE_THENABLE_REGISTRY_KEY] ??=\n new WeakMap<object, DurableThenableProvenance>();\n return target[DURABLE_THENABLE_REGISTRY_KEY];\n}\n\nfunction newDurableThenableMetadata(): DurableThenableMetadata {\n return {\n aggregateExpectations: [],\n provenanceExpectations: [],\n };\n}\n\nfunction metadataForDurableThenable(value: unknown): DurableThenableMetadata | undefined {\n return provenanceForDurableThenable(value)?.metadata;\n}\n\nfunction provenanceForDurableThenable(\n value: unknown,\n): DurableThenableProvenance | undefined {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return undefined;\n }\n return durableThenableRegistry().get(value);\n}\n\nexport function registerDurableThenable<T extends object>(\n value: T,\n source?: object,\n): T {\n const registry = durableThenableRegistry();\n const metadata = source == null\n ? registry.get(value)?.metadata ?? newDurableThenableMetadata()\n : registry.get(source)?.metadata ?? newDurableThenableMetadata();\n registry.set(value, { metadata });\n if (source != null && !registry.has(source)) registry.set(source, { metadata });\n return value;\n}\n\nfunction registerDetachedDurableThenable<T extends object>(value: T): T {\n const registry = durableThenableRegistry();\n registry.set(value, {\n metadata: registry.get(value)?.metadata ?? newDurableThenableMetadata(),\n detached: true,\n });\n return value;\n}\n\nfunction inheritDurableThenable<T extends object>(value: T, source: object): T {\n const provenance = durableThenableRegistry().get(source);\n if (provenance == null) return value;\n durableThenableRegistry().set(value, provenance);\n if (provenance.assimilation == null) {\n provenance.metadata.provenanceExpectations.push({\n value,\n creatorAsyncId: executionAsyncId(),\n });\n }\n return value;\n}\n\n/**\n * Associates a replay-aware durable assimilation with its durable provenance.\n *\n * The returned handle marks normal settlement and links derived promises to\n * this exact assimilation. Promise aggregate construction can detach the\n * aggregate's internal reaction so it is not mistaken for application code\n * awaiting the returned aggregate.\n */\nexport function registerDurableAssimilation(\n value: object,\n detach: () => void,\n): DurableAssimilation {\n const metadata = metadataForDurableThenable(value);\n if (metadata == null) {\n return {\n finish: () => undefined,\n link: (linked) => linked,\n };\n }\n const registration: DurableAssimilationRegistration = {\n active: true,\n detach,\n };\n const provenanceIndex = metadata.provenanceExpectations.findIndex((expectation) =>\n expectation.creatorAsyncId !== executionAsyncId()\n );\n if (provenanceIndex >= 0) {\n const [expectation] = metadata.provenanceExpectations.splice(provenanceIndex, 1);\n durableThenableRegistry().set(expectation.value, {\n metadata,\n assimilation: registration,\n });\n }\n const expectationIndex = metadata.aggregateExpectations.findIndex((expectation) =>\n !expectation.scope.settled\n && expectation.creatorAsyncId !== executionAsyncId()\n );\n if (expectationIndex >= 0) {\n const [expectation] = metadata.aggregateExpectations.splice(expectationIndex, 1);\n associateAssimilationWithAggregate(registration, expectation.scope);\n }\n return {\n finish: () => finishDurableAssimilation(registration),\n link: <T extends object>(linked: T): T => {\n durableThenableRegistry().set(linked, {\n metadata,\n assimilation: registration,\n });\n return linked;\n },\n };\n}\n\nfunction associateAssimilationWithAggregate(\n registration: DurableAssimilationRegistration,\n scope: DurableAggregateScope,\n): void {\n if (!registration.active || scope.settled) return;\n finishDurableAssimilation(registration);\n registration.detach();\n}\n\nfunction finishDurableAssimilation(registration: DurableAssimilationRegistration): void {\n if (!registration.active) return;\n registration.active = false;\n}\n\nfunction trackDurableAggregate(\n runtime: FunctionRuntime,\n result: Promise<unknown>,\n durableContenders: readonly unknown[],\n markResult: boolean,\n): void {\n const scope: DurableAggregateScope = {\n settled: false,\n metadata: new Set<DurableThenableMetadata>(),\n };\n if (markResult) {\n // Constructing an aggregate attaches internal reactions to its durable\n // inputs, but that does not mean application code is awaiting the result.\n // Mark the aggregate itself as detached so a later user reaction becomes\n // the durable assimilation observed by strict replay.\n registerDetachedDurableThenable(result);\n }\n const creatorAsyncId = executionAsyncId();\n for (const contender of durableContenders) {\n const provenance = provenanceForDurableThenable(contender);\n if (provenance == null) continue;\n if (provenance.assimilation != null) {\n associateAssimilationWithAggregate(provenance.assimilation, scope);\n } else {\n provenance.metadata.aggregateExpectations.push({\n scope,\n creatorAsyncId,\n });\n }\n if (scope.metadata.has(provenance.metadata)) continue;\n const { metadata } = provenance;\n scope.metadata.add(metadata);\n }\n const settle = () => {\n if (scope.settled) return;\n scope.settled = true;\n for (const metadata of scope.metadata) {\n for (let index = metadata.aggregateExpectations.length - 1; index >= 0; index -= 1) {\n if (metadata.aggregateExpectations[index].scope === scope) {\n metadata.aggregateExpectations.splice(index, 1);\n }\n }\n }\n scope.metadata.clear();\n };\n // Promise.prototype.then still performs a user-observable Symbol.species\n // lookup even when invoked directly. The executor observes the native\n // promiseResolve async hook instead, so bookkeeping cannot call user code or\n // construct an extra subclass promise.\n if (runtime.trackPromiseSettlement?.(result, settle) !== true) settle();\n}\n\ninterface PromiseAggregateObservation {\n readonly ordinaryLifetime: Promise<void>;\n allOrdinaryValuesObservable: boolean;\n observeFulfillment(): void;\n observeRejection(): void;\n finishIteration(contenderCount: number): void;\n}\n\nfunction promiseAggregateObservation(\n kind: \"all\" | \"all_settled\" | \"any\",\n): PromiseAggregateObservation {\n let settleLifetime!: () => void;\n const ordinaryLifetime = new Promise<void>((resolve) => {\n settleLifetime = resolve;\n });\n let contenderCount: number | undefined;\n let fulfillmentCount = 0;\n let rejectionCount = 0;\n let settled = false;\n const maybeSettle = () => {\n if (settled) return;\n const canNoLongerAdvance = kind === \"any\"\n ? contenderCount != null && rejectionCount === contenderCount\n : kind === \"all\"\n ? rejectionCount > 0\n || (contenderCount != null && fulfillmentCount === contenderCount)\n : contenderCount != null\n && fulfillmentCount + rejectionCount === contenderCount;\n if (!canNoLongerAdvance) return;\n settled = true;\n settleLifetime();\n };\n return {\n ordinaryLifetime,\n allOrdinaryValuesObservable: true,\n observeFulfillment: () => {\n fulfillmentCount += 1;\n maybeSettle();\n },\n observeRejection: () => {\n rejectionCount += 1;\n maybeSettle();\n },\n finishIteration: (count) => {\n contenderCount = count;\n maybeSettle();\n },\n };\n}\n\nfunction observePromiseAggregateContender(\n normalized: unknown,\n observation: PromiseAggregateObservation,\n): unknown {\n if (\n (typeof normalized !== \"object\" && typeof normalized !== \"function\")\n || normalized == null\n ) {\n observation.allOrdinaryValuesObservable = false;\n return normalized;\n }\n let observedSettled = false;\n const observed = Object.create(null) as object;\n Object.defineProperty(observed, \"then\", {\n configurable: true,\n get: () => {\n const then = Reflect.get(normalized, \"then\", normalized) as unknown;\n if (typeof then !== \"function\") return then;\n return function observedThen(\n this: unknown,\n onfulfilled: unknown,\n onrejected: unknown,\n ): unknown {\n return Reflect.apply(then, normalized, [\n function observedFulfillment(this: unknown, value: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeFulfillment();\n }\n return typeof onfulfilled === \"function\"\n ? Reflect.apply(onfulfilled, this, [value])\n : undefined;\n },\n function observedRejection(this: unknown, reason: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeRejection();\n }\n if (typeof onrejected === \"function\") {\n return Reflect.apply(onrejected, this, [reason]);\n }\n throw reason;\n },\n ]);\n };\n },\n });\n return observed;\n}\n\n/**\n * Lets a native Promise aggregate algorithm retain control of iteration and\n * settlement while exposing each constructor-normalized contender.\n *\n * The facade constructs the real Promise subclass and delegates its `resolve`\n * lookup and calls back to that subclass. This preserves custom static resolve\n * behavior and the public result type without resolving an input twice.\n */\nfunction observedPromiseConstructor(\n constructor: PromiseConstructor,\n observeNormalized: (normalized: unknown) => unknown,\n): PromiseConstructor {\n const facade = function PromiseAggregateObservedConstructor(\n executor: (\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n ) => void,\n ): Promise<unknown> {\n return Reflect.construct(\n constructor,\n [executor],\n constructor,\n ) as Promise<unknown>;\n } as unknown as PromiseConstructor;\n Object.defineProperty(facade, \"resolve\", {\n configurable: true,\n get: () => {\n const promiseResolve = Reflect.get(constructor, \"resolve\", constructor) as unknown;\n if (typeof promiseResolve !== \"function\") return promiseResolve;\n return (value: unknown): unknown => {\n const normalized = Reflect.apply(promiseResolve, constructor, [value]) as unknown;\n return observeNormalized(normalized);\n };\n },\n });\n return facade;\n}\n\nfunction internalDurableThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n): Promise<TResult1 | TResult2> {\n const internalThen = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n promise,\n onfulfilled,\n onrejected,\n ) as Promise<TResult1 | TResult2>;\n }\n return promise.then(onfulfilled, onrejected);\n}\n\nfunction internalAwaitable<T>(value: Awaitable<T>): Promise<T> {\n if ((typeof value === \"object\" || typeof value === \"function\") && value != null) {\n const internalThen = (\n value as Partial<ObservableDurablePromise<T>>\n )[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n value,\n (resolved) => resolved,\n (error) => {\n throw error;\n },\n ) as Promise<T>;\n }\n }\n return Promise.resolve(value);\n}\n\nasync function resolveAwaitableIterable<T>(\n items: AwaitableIterable<T>,\n): Promise<T[]> {\n const iterable = await internalAwaitable(items);\n return internalPromiseAll([...iterable].map((item) => internalAwaitable(item)));\n}\n\nfunction wrapDurableAggregate<T>(completion: Promise<T>): Promise<T> {\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n}\n\nfunction runInternalPromiseAggregate<T>(callback: () => T): T {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] =\n (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) + 1;\n try {\n return callback();\n } finally {\n const remaining = (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 1) - 1;\n if (remaining === 0) delete target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY];\n else target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] = remaining;\n }\n}\n\nfunction isInternalPromiseAggregate(): boolean {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n return (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) > 0;\n}\n\nfunction internalPromiseAll<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]> {\n return runInternalPromiseAggregate(() => Promise.all(values));\n}\n\nfunction internalPromiseRace<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>> {\n return runInternalPromiseAggregate(() => Promise.race(values));\n}\n\nexport function installPromiseInstrumentation(): void {\n const target = globalThis as typeof globalThis & {\n [PROMISE_INSTRUMENTED_KEY]?: true;\n [PROMISE_THEN_INSTRUMENTED_KEY]?: true;\n };\n if (target[PROMISE_THEN_INSTRUMENTED_KEY] !== true) {\n const originalThen = Promise.prototype.then;\n Object.defineProperty(Promise.prototype, \"then\", {\n ...Object.getOwnPropertyDescriptor(Promise.prototype, \"then\"),\n value: function then(\n this: Promise<unknown>,\n onfulfilled?: ((value: unknown) => unknown) | null,\n onrejected?: ((reason: unknown) => unknown) | null,\n ): Promise<unknown> {\n const result = Reflect.apply(\n originalThen,\n this,\n [onfulfilled, onrejected],\n ) as Promise<unknown>;\n if (isDetachedDurableThenable(this)) {\n currentFunctionRuntime()?.trackDurablePromiseConsumption?.(result);\n }\n return result;\n },\n });\n target[PROMISE_THEN_INSTRUMENTED_KEY] = true;\n }\n if (target[PROMISE_INSTRUMENTED_KEY] === true) return;\n const originalRace = Promise.race;\n const originalAny = Promise.any;\n const originalAll = Promise.all;\n const originalAllSettled = Promise.allSettled;\n const originalResolve = Promise.resolve;\n\n // Promise.resolve normally hides a durable Promise subclass inside a native\n // Promise. Preserve the durable provenance on that wrapper so a subsequent\n // all/allSettled/race/any can still distinguish it from an independent\n // contender.\n Object.defineProperty(Promise, \"resolve\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"resolve\"),\n value: function resolve<T>(\n this: PromiseConstructor,\n value: T | PromiseLike<T>,\n ): Promise<Awaited<T>> {\n const result = Reflect.apply(originalResolve, this, [value]) as Promise<Awaited<T>>;\n if (isDurableThenable(value)) inheritDurableThenable(result, value as object);\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"race\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"race\"),\n value: function race<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalRace, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n } else {\n ordinaryContenderCount += 1;\n }\n return normalized;\n },\n );\n const construct = () =>\n Reflect.apply(\n originalRace,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (\n durableContenders.length > 0\n && ordinaryContenderCount > 0\n ) {\n runtime.trackMixedPromiseRace(result);\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"any\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"any\"),\n value: function any<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAny, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"any\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAny,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Once every ordinary contender rejects, only a durable contender\n // can advance Promise.any. A fulfillment may itself be a pending\n // promise that the public aggregate adopts, so the ordinary gate\n // must not expire merely because its fulfillment callback ran.\n // Stop treating the ordinary path as a producer when either it or\n // the public aggregate settles. The latter covers a durable winner\n // as well as fulfilled-value adoption and abrupt iterator failures.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A non-object custom resolve result makes native Promise.any reject\n // the aggregate. Retain that aggregate as the producer until the\n // rejection becomes observable.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"all\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"all\"),\n value: function all<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAll, this, [values]) as Promise<Awaited<T>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAll,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Ordinary inputs can advance Promise.all until one rejects or all\n // fulfill. The non-rejecting lifetime gate models that boundary\n // without observing the public result or invoking a thenable twice.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A custom resolve result that is not thenable makes the public\n // aggregate reject. Its own settlement is the only observable\n // producer boundary available.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"allSettled\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"allSettled\"),\n value: function allSettled<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<PromiseSettledResult<Awaited<T>>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(\n originalAllSettled,\n this,\n [values],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all_settled\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) yield value;\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAllSettled,\n observedConstructor,\n [trackedValues],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (observation.allOrdinaryValuesObservable) {\n // Ordinary inputs can advance Promise.allSettled until every one has\n // settled. The aggregate itself covers abrupt iterator/resolve\n // failures and durable completion.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n target[PROMISE_INSTRUMENTED_KEY] = true;\n}\n\nexport interface RegisteredFunction<Args extends readonly unknown[], Result> {\n (...args: Args): Promise<Result>;\n readonly definition: RegisteredDefinition;\n future(...args: Args): FunctionFuture<Result>;\n map(items: AwaitableIterable<Args[0]>): Promise<Result[]>;\n reduce(\n items: AwaitableIterable<Args[1]>,\n initial?: Args[0],\n ): Promise<Result>;\n tailCall(...args: Args): TailCall<Result>;\n}\n\nfunction normalizeOptions(options: FunctionOptions<readonly Parameter<unknown>[], unknown>): NormalizedFunctionOptions {\n validateGPUOption(options.gpu);\n if (options.secrets != null && !Array.isArray(options.secrets)) {\n throw new SDKUsageError(\"secrets must be an array of non-empty strings\");\n }\n const normalizedRetries = options.retries == null\n ? undefined\n : retries(options.retries);\n const result: NormalizedFunctionOptions = {\n description: options.description ?? \"\",\n cpu: options.cpu ?? 1,\n memory: options.memory ?? 1,\n ephemeralDisk: options.ephemeralDisk ?? 10,\n gpu: Array.isArray(options.gpu) ? [...options.gpu] : options.gpu ?? null,\n timeout: options.timeout ?? 300,\n image: options.image,\n secrets: [...(options.secrets ?? [])],\n retries: normalizedRetries,\n region: options.region,\n warmContainers: options.warmContainers,\n minContainers: options.minContainers,\n maxContainers: options.maxContainers,\n };\n if (!Number.isFinite(result.cpu) || result.cpu <= 0) throw new SDKUsageError(\"cpu must be greater than zero\");\n if (!Number.isFinite(result.memory) || result.memory <= 0) throw new SDKUsageError(\"memory must be greater than zero\");\n if (!Number.isFinite(result.ephemeralDisk) || result.ephemeralDisk <= 0) throw new SDKUsageError(\"ephemeralDisk must be greater than zero\");\n if (!Number.isInteger(result.timeout) || result.timeout <= 0 || result.timeout > 86_400) {\n throw new SDKUsageError(\"timeout must be an integer between 1 and 86400 seconds\");\n }\n for (const [label, value] of [\n [\"warmContainers\", result.warmContainers],\n [\"minContainers\", result.minContainers],\n [\"maxContainers\", result.maxContainers],\n ] as const) {\n if (value != null && (!Number.isInteger(value) || value < 0)) {\n throw new SDKUsageError(`${label} must be a non-negative integer`);\n }\n }\n if (result.minContainers != null && result.maxContainers != null && result.minContainers > result.maxContainers) {\n throw new SDKUsageError(\"minContainers cannot exceed maxContainers\");\n }\n if (result.warmContainers != null && result.maxContainers != null && result.warmContainers > result.maxContainers) {\n throw new SDKUsageError(\"warmContainers cannot exceed maxContainers\");\n }\n if (result.region != null && ![\"us-east-1\", \"eu-west-1\"].includes(result.region)) {\n throw new SDKUsageError(`Unsupported region '${result.region}'`);\n }\n if (result.secrets.some((secret) => typeof secret !== \"string\" || secret.length === 0)) {\n throw new SDKUsageError(\"secrets must contain non-empty strings\");\n }\n return result;\n}\n\nfunction validateGPUOption(value: unknown): void {\n if (value == null) return;\n const values = Array.isArray(value) ? value : [value];\n for (const setting of values) {\n if (typeof setting !== \"string\") {\n throw new SDKUsageError(\"gpu must be a GPU model or an array of GPU models\");\n }\n const [model, countText, ...extra] = setting.split(\":\");\n const count = countText == null ? 1 : Number(countText);\n if (\n !model\n || extra.length > 0\n || !Number.isInteger(count)\n || count <= 0\n || (countText != null && String(count) !== countText)\n ) {\n throw new SDKUsageError(`Invalid GPU setting '${setting}'`);\n }\n }\n}\n\nfunction validateArguments(definition: RegisteredDefinition, supplied: readonly unknown[]): unknown[] {\n const args = [...supplied];\n if (args.length > definition.parameters.length) {\n throw new SDKUsageError(`${definition.name} expected at most ${definition.parameters.length} arguments, received ${args.length}`);\n }\n definition.parameters.forEach((parameter, index) => {\n if (index >= args.length || args[index] === undefined) {\n if (parameter.hasDefault) args[index] = parameter.defaultValue;\n else if (parameter.required) throw new SDKUsageError(`${definition.name} is missing argument '${parameter.name}'`);\n return;\n }\n validateWithSchema(parameter.schema, args[index], `${definition.name}.${parameter.name}`);\n });\n return args;\n}\n\nexport async function executeHandler<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T> {\n const output = await executeHandlerResult<T>(definition, suppliedArgs);\n if (isTailCall(output)) {\n const runtime = currentFunctionRuntime();\n if (runtime == null) return executeHandler<T>(output.definition, output.args);\n return runtime.invoke<T>(output.definition, output.args);\n }\n return output;\n}\n\n/** Runs one handler frame without resolving a tail call. Used by language executors. */\nexport async function executeHandlerResult<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T | TailCall<T>> {\n const args = validateArguments(definition, suppliedArgs);\n const result = definition.handler(...args);\n if (result == null || typeof (result as PromiseLike<unknown>).then !== \"function\") {\n throw new SDKUsageError(`Tensorlake handler '${definition.name}' must be async and return a Promise`);\n }\n const output = await result;\n if (isTailCall(output)) {\n return output as TailCall<T>;\n }\n validateWithSchema(definition.returns, output, `${definition.name} return value`);\n return output as T;\n}\n\nexport function isTailCall(value: unknown): value is TailCall<unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Partial<TailCall<unknown>>;\n return candidate[TAIL_CALL_BRAND] === true\n && candidate.kind === \"tensorlake-tail-call\"\n && typeof candidate.definition === \"object\"\n && candidate.definition != null\n && Array.isArray(candidate.args);\n}\n\nfunction createRegisteredFunction<Args extends readonly unknown[], Result>(\n definition: RegisteredDefinition,\n): RegisteredFunction<Args, Result> {\n const callable = ((...args: Args): Promise<Result> => {\n const runtime = currentFunctionRuntime();\n return runtime == null\n ? executeHandler<Result>(definition, args)\n : runtime.invoke<Result>(definition, args);\n }) as RegisteredFunction<Args, Result>;\n Object.defineProperties(callable, {\n definition: { value: definition, enumerable: true },\n future: { value: (...args: Args) => new FunctionFuture<Result>(definition, args) },\n map: {\n value: (items: AwaitableIterable<Args[0]>) => {\n // Resolve inputs before assigning durable IDs. Awaiting each input inside\n // the invocation loop would make call order depend on promise timing,\n // allowing strict replay to associate a recorded result with a different\n // input while still matching the durable event sequence.\n const completion = (async () => {\n const resolvedItems = await resolveAwaitableIterable(items);\n return internalPromiseAll(\n resolvedItems.map((item) =>\n internalAwaitable(callable(...([item] as unknown as Args)))\n ),\n );\n })();\n return wrapDurableAggregate(completion);\n },\n },\n reduce: {\n value: (\n items: AwaitableIterable<Args[1]>,\n ...initialValues: [] | [Args[0]]\n ) => {\n const completion = (async () => {\n let values = await resolveAwaitableIterable(items);\n const hasInitial = initialValues.length > 0;\n let initial: unknown = initialValues[0];\n const runtime = currentFunctionRuntime();\n if (runtime != null) {\n return internalAwaitable(\n runtime.reduce<Result>(definition, values, initial, hasInitial),\n );\n }\n if (!hasInitial) {\n if (values.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [initial, ...values] = values;\n }\n let accumulator = initial as Result | Args[0];\n for (const item of values) {\n accumulator = await internalAwaitable(\n callable(...([accumulator, item] as unknown as Args)),\n );\n }\n return accumulator as Result;\n })();\n return wrapDurableAggregate(completion);\n },\n },\n tailCall: {\n value: (...args: Args): TailCall<Result> => ({\n [TAIL_CALL_BRAND]: true,\n kind: \"tensorlake-tail-call\",\n definition,\n args,\n }),\n },\n });\n return callable;\n}\n\nfunction register<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result> | ApplicationOptions<P, Result>,\n application: boolean,\n): RegisteredFunction<ParameterValues<P>, Result> {\n const name = options.name ?? handler.name;\n if (!name) throw new SDKUsageError(\"Anonymous Tensorlake handlers require an explicit name\");\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) throw new SDKUsageError(`Invalid Tensorlake function name '${name}'`);\n let applicationRetries: Retries | undefined;\n if (application) {\n const appOptions = options as ApplicationOptions<P, Result>;\n applicationRetries = retries(appOptions.applicationRetries ?? { maxRetries: 0 });\n if (\n appOptions.allow != null\n && (\n !Array.isArray(appOptions.allow)\n || appOptions.allow.some((capability) =>\n capability !== \"unauthenticated_requests\"\n )\n )\n ) {\n throw new SDKUsageError(\n \"Application allow must contain only 'unauthenticated_requests'\",\n );\n }\n const tags = appOptions.tags;\n const tagsPrototype = tags == null || typeof tags !== \"object\"\n ? undefined\n : Object.getPrototypeOf(tags);\n if (\n tags != null\n && (\n typeof tags !== \"object\"\n || Array.isArray(tags)\n || (tagsPrototype !== Object.prototype && tagsPrototype !== null)\n || Reflect.ownKeys(tags).some((key) =>\n typeof key !== \"string\"\n || !key\n || typeof (tags as Record<PropertyKey, unknown>)[key] !== \"string\"\n )\n )\n ) {\n throw new SDKUsageError(\"Application tags require non-empty string keys and string values\");\n }\n }\n if (!Array.isArray(options.parameters)) {\n throw new SDKUsageError(\"Tensorlake registration parameters must be an array\");\n }\n if (\n typeof options.returns !== \"object\"\n || options.returns == null\n || typeof options.returns.jsonSchema !== \"object\"\n || options.returns.jsonSchema == null\n ) {\n throw new SDKUsageError(\"Tensorlake registration returns must be a schema\");\n }\n const parameterNames = new Set<string>();\n for (const parameter of options.parameters) {\n if (\n typeof parameter !== \"object\"\n || parameter == null\n || typeof parameter.name !== \"string\"\n || typeof parameter.schema !== \"object\"\n || parameter.schema == null\n || typeof parameter.schema.jsonSchema !== \"object\"\n || parameter.schema.jsonSchema == null\n || typeof parameter.required !== \"boolean\"\n || typeof parameter.hasDefault !== \"boolean\"\n ) {\n throw new SDKUsageError(\n \"Tensorlake registration parameters must be created with schema.parameter()\",\n );\n }\n if (parameterNames.has(parameter.name)) {\n throw new SDKUsageError(`Duplicate Tensorlake parameter name '${parameter.name}'`);\n }\n parameterNames.add(parameter.name);\n }\n const httpBodyParameter = options.parameters.find(\n (parameter) => parameter.schema._httpBody,\n );\n if (httpBodyParameter != null && !application) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters\",\n );\n }\n if (options.returns._httpBody) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters; \"\n + \"use schema.file() or a JSON-compatible return schema instead\",\n );\n }\n const definition: RegisteredDefinition = {\n name,\n handler: handler as (...args: unknown[]) => Promise<unknown>,\n parameters: [...options.parameters],\n returns: options.returns as Schema<unknown>,\n options: normalizeOptions(options as FunctionOptions<readonly Parameter<unknown>[], unknown>),\n application: application\n ? {\n tags: { ...((options as ApplicationOptions<P, Result>).tags ?? {}) },\n retries: applicationRetries as Retries,\n allow: [...((options as ApplicationOptions<P, Result>).allow ?? [])],\n version: randomUUID().replaceAll(\"-\", \"\"),\n }\n : undefined,\n };\n registerDefinition(definition, application);\n return createRegisteredFunction(definition);\n}\n\ntype SimpleResult<Output> = Output extends TailCall<infer Result> ? Result : Output;\ntype RuntimeHandler = (...args: never[]) => Promise<unknown>;\n\nfunction hasExplicitSchemas(\n value: unknown,\n): value is FunctionOptions<readonly Parameter<unknown>[], unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const hasParameters = Object.prototype.hasOwnProperty.call(value, \"parameters\");\n const hasReturns = Object.prototype.hasOwnProperty.call(value, \"returns\");\n if (hasParameters !== hasReturns) {\n throw new SDKUsageError(\"Tensorlake registrations must specify both parameters and returns\");\n }\n return hasParameters;\n}\n\nfunction skipJavaScriptLiteral(source: string, start: number): number {\n const quote = source[start];\n let escaped = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === quote) {\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptComment(source: string, start: number): number | undefined {\n if (source[start] !== \"/\") return undefined;\n if (source[start + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", start + 2);\n return newline < 0 ? source.length - 1 : newline;\n }\n if (source[start + 1] === \"*\") {\n const end = source.indexOf(\"*/\", start + 2);\n return end < 0 ? source.length - 1 : end + 1;\n }\n return undefined;\n}\n\nfunction skipJavaScriptTrivia(source: string, start: number): number {\n let index = start;\n while (index < source.length) {\n while (index < source.length && /\\s/.test(source[index])) index += 1;\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return index;\n}\n\nconst REGEX_PREFIX_KEYWORDS = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nfunction regexLiteralStartsAt(source: string, start: number): boolean {\n let expectsExpression = true;\n for (let index = 0; index < start; index += 1) {\n const character = source[index];\n if (/\\s/.test(character)) continue;\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n index = skipJavaScriptLiteral(source, index);\n expectsExpression = false;\n continue;\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) {\n index = commentEnd;\n continue;\n }\n if (/[A-Za-z_$]/.test(character)) {\n let tokenEnd = index + 1;\n while (tokenEnd < start && /[A-Za-z0-9_$]/.test(source[tokenEnd])) tokenEnd += 1;\n expectsExpression = REGEX_PREFIX_KEYWORDS.has(source.slice(index, tokenEnd));\n index = tokenEnd - 1;\n continue;\n }\n if (/[0-9]/.test(character) || (character === \".\" && /[0-9]/.test(source[index + 1]))) {\n while (index + 1 < start && /[A-Za-z0-9_.]/.test(source[index + 1])) index += 1;\n expectsExpression = false;\n continue;\n }\n if (character === \"/\") {\n if (expectsExpression) {\n index = skipJavaScriptRegex(source, index);\n expectsExpression = false;\n } else {\n if (source[index + 1] === \"=\") index += 1;\n expectsExpression = true;\n }\n continue;\n }\n if (character === \")\" || character === \"]\" || character === \"}\") {\n expectsExpression = false;\n continue;\n }\n if (character === \".\") {\n if (source.slice(index, index + 3) === \"...\") {\n index += 2;\n expectsExpression = true;\n } else {\n expectsExpression = false;\n }\n continue;\n }\n if ((character === \"+\" || character === \"-\") && source[index + 1] === character) {\n index += 1;\n continue;\n }\n expectsExpression = true;\n }\n return expectsExpression;\n}\n\nfunction skipJavaScriptRegex(source: string, start: number): number {\n let escaped = false;\n let characterClass = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === \"[\") {\n characterClass = true;\n } else if (character === \"]\") {\n characterClass = false;\n } else if (character === \"/\" && !characterClass) {\n while (index + 1 < source.length && /[A-Za-z]/.test(source[index + 1])) index += 1;\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptValue(source: string, index: number): number | undefined {\n const character = source[index];\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n return skipJavaScriptLiteral(source, index);\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) return commentEnd;\n if (character === \"/\" && regexLiteralStartsAt(source, index)) {\n return skipJavaScriptRegex(source, index);\n }\n return undefined;\n}\n\nfunction findTopLevelArrow(source: string): number {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length - 1; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") {\n // A top-level block before an arrow is a classic function or method\n // body. Its nested arrows cannot describe the handler parameters.\n if (parentheses === 0 && brackets === 0 && braces === 0) return -1;\n braces += 1;\n }\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && source[index + 1] === \">\" && parentheses === 0 && brackets === 0 && braces === 0) {\n return index;\n }\n }\n return -1;\n}\n\nfunction findClosingParenthesis(source: string, open: number): number {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") depth += 1;\n else if (character === \")\" && --depth === 0) return index;\n }\n return -1;\n}\n\nfunction findOpeningParenthesis(source: string): number {\n for (let index = 0; index < source.length; index += 1) {\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (source[index] === \"(\") return index;\n }\n return -1;\n}\n\nfunction splitTopLevelParameters(source: string): string[] {\n if (source.trim() === \"\") return [];\n const result: string[] = [];\n let start = 0;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \",\" && parentheses === 0 && brackets === 0 && braces === 0) {\n result.push(source.slice(start, index).trim());\n start = index + 1;\n }\n }\n const final = source.slice(start).trim();\n if (final !== \"\") result.push(final);\n return result;\n}\n\nfunction hasTopLevelDefault(source: string): boolean {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && parentheses === 0 && brackets === 0 && braces === 0) return true;\n }\n return false;\n}\n\nfunction declaredHandlerParameters(handler: RuntimeHandler): string[] {\n const source = Function.prototype.toString.call(handler).trim();\n if (source.includes(\"[native code]\")) {\n throw new SDKUsageError(\"Schema-free registration cannot inspect a native or bound handler; specify parameters and returns\");\n }\n const arrow = findTopLevelArrow(source);\n if (arrow >= 0) {\n let header = source.slice(0, arrow).trim();\n if (\n header.startsWith(\"async\")\n && !/[A-Za-z0-9_$]/.test(header[\"async\".length] ?? \"\")\n ) {\n header = header.slice(skipJavaScriptTrivia(header, \"async\".length));\n }\n if (!header.startsWith(\"(\")) return [header];\n const close = findClosingParenthesis(header, 0);\n if (close < 0) throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n return splitTopLevelParameters(header.slice(1, close));\n }\n const open = findOpeningParenthesis(source);\n const close = open < 0 ? -1 : findClosingParenthesis(source, open);\n if (open < 0 || close < 0) {\n throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n }\n return splitTopLevelParameters(source.slice(open + 1, close));\n}\n\nfunction inferredJSONParameters(handler: RuntimeHandler): readonly Parameter<unknown>[] {\n const parameters = declaredHandlerParameters(handler);\n if (parameters.some((parameter) => {\n let index = 0;\n while (index < parameter.length) {\n while (index < parameter.length && /\\s/.test(parameter[index])) index += 1;\n const commentEnd = skipJavaScriptComment(parameter, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return parameter.slice(index).startsWith(\"...\");\n })) {\n throw new SDKUsageError(\n \"Schema-free registration does not support rest parameters; specify explicit parameters and returns\",\n );\n }\n return parameters.map((parameter, index) => schema.parameter(\n parameters.length === 1 ? \"input\" : `arg${index}`,\n schema.json(),\n hasTopLevelDefault(parameter) ? { optional: true } : {},\n ));\n}\n\nfunction registerWithDefaults(\n name: string,\n handler: RuntimeHandler,\n options: SimpleFunctionOptions | SimpleApplicationOptions,\n application: boolean,\n): RegisteredFunction<readonly unknown[], unknown> {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n {\n ...options,\n name,\n parameters: inferredJSONParameters(handler),\n returns: schema.json(),\n },\n application,\n );\n}\n\nexport function registerFunction<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\n\nexport function registerFunction<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleFunctionOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerFunction(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleFunctionOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerFunction(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n false,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerFunction requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerFunction received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n false,\n );\n }\n throw new SDKUsageError(\n \"Schema-free functions require an explicit stable name: registerFunction(name, handler)\",\n );\n}\n\nexport function registerApplication<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: ApplicationOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\nexport function registerApplication<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleApplicationOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerApplication(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleApplicationOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerApplication(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n true,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerApplication requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerApplication received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n true,\n );\n }\n throw new SDKUsageError(\n \"Schema-free applications require an explicit stable name: registerApplication(name, handler)\",\n );\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport type JSONSchema = Record<string, unknown>;\n\nconst TYPE = Symbol(\"tensorlake.schema.type\");\n// SDK-generated schemas use JSON Schema 2020-12 features such as prefixItems.\n// Validate with the same dialect that we emit into application manifests so\n// local/executor checks cannot silently accept values the public schema rejects.\nconst ajvDraft7 = new Ajv({ allErrors: true, strict: false });\nconst ajv2020 = new Ajv2020({ allErrors: true, strict: false });\n\nexport interface Schema<T> {\n readonly jsonSchema: JSONSchema;\n readonly [TYPE]?: T;\n readonly _file?: boolean;\n readonly _httpBody?: boolean;\n}\n\nexport type Infer<S extends Schema<unknown>> = S extends Schema<infer T> ? T : never;\n\nexport interface ParameterOptions<T> {\n description?: string;\n optional?: boolean;\n default?: T;\n}\n\nexport interface Parameter<T> {\n readonly name: string;\n readonly schema: Schema<T>;\n readonly description?: string;\n readonly required: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: T;\n}\n\nexport type ParameterValues<P extends readonly Parameter<unknown>[]> = {\n [K in keyof P]: P[K] extends Parameter<infer T> ? T : never;\n};\n\nfunction snapshotJSONValue(\n value: unknown,\n label: string,\n ancestors: Set<object>,\n freeze: boolean,\n): unknown {\n if (\n value == null\n || typeof value === \"string\"\n || typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new SDKUsageError(`${label} contains a non-finite number`);\n }\n return value;\n }\n if (typeof value !== \"object\") {\n throw new SDKUsageError(`${label} contains unsupported ${typeof value}`);\n }\n if (ancestors.has(value)) {\n throw new SDKUsageError(`${label} contains a cycle`);\n }\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {\n throw new SDKUsageError(\n `${label} contains unsupported ${value.constructor?.name ?? \"object\"}`,\n );\n }\n\n ancestors.add(value);\n let result: unknown[] | Record<string, unknown>;\n if (Array.isArray(value)) {\n result = [];\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SDKUsageError(`${label} contains a sparse array entry at index ${index}`);\n }\n result.push(snapshotJSONValue(\n value[index],\n `${label}[${index}]`,\n ancestors,\n freeze,\n ));\n }\n } else {\n result = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n snapshotJSONValue(item, `${label}.${key}`, ancestors, freeze),\n ]),\n );\n }\n ancestors.delete(value);\n return freeze ? Object.freeze(result) : result;\n}\n\nfunction snapshotJSONSchema(jsonSchema: JSONSchema): JSONSchema {\n return snapshotJSONValue(\n jsonSchema,\n \"JSON schema\",\n new Set(),\n true,\n ) as JSONSchema;\n}\n\nfunction snapshotDefault<T>(valueSchema: Schema<T>, value: T): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake File\");\n }\n return new File(new Uint8Array(value.content), value.contentType) as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake HttpBody\");\n }\n return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n }\n return snapshotJSONValue(\n value,\n \"parameter default\",\n new Set(),\n false,\n ) as T;\n}\n\nfunction makeSchema<T>(\n jsonSchema: JSONSchema,\n rawBody?: \"file\" | \"httpBody\",\n): Schema<T> {\n return Object.freeze({\n jsonSchema: snapshotJSONSchema(jsonSchema),\n _file: rawBody === \"file\",\n _httpBody: rawBody === \"httpBody\",\n });\n}\n\nfunction rejectRawBodyComposition(\n operation: string,\n values: readonly Schema<unknown>[],\n): void {\n const rawBody = values.find((value) => value._file || value._httpBody);\n if (rawBody != null) {\n const factory = rawBody._httpBody ? \"httpBody\" : \"file\";\n const type = rawBody._httpBody ? \"HttpBody\" : \"File\";\n const supportedPosition = rawBody._httpBody\n ? \"as a direct application parameter\"\n : \"as a direct parameter or return value\";\n throw new SDKUsageError(\n `schema.${operation} cannot contain schema.${factory}(); ${type} is only supported`\n + ` ${supportedPosition}`,\n );\n }\n}\n\nfunction parameter<T>(\n name: string,\n valueSchema: Schema<T>,\n options: ParameterOptions<T> = {},\n): Parameter<T> {\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) {\n throw new SDKUsageError(`Invalid parameter name '${name}'`);\n }\n const hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n if (hasDefault) validateWithSchema(valueSchema, options.default, `default for '${name}'`);\n const defaultSnapshot = hasDefault\n ? snapshotDefault(valueSchema, options.default as T)\n : undefined;\n return Object.freeze({\n name,\n schema: valueSchema,\n description: options.description,\n required: options.optional !== true && !hasDefault,\n hasDefault,\n // Defaults cross two public boundaries: callers can inspect the registered\n // definition, and every invocation receives the default when an argument is\n // omitted. Return a fresh boundary copy so neither path can mutate the\n // registration snapshot, later invocations, or generated manifests.\n get defaultValue(): T | undefined {\n return hasDefault\n ? snapshotDefault(valueSchema, defaultSnapshot as T)\n : undefined;\n },\n });\n}\n\nexport const schema = {\n /** Any JSON-serializable value. Useful when strict runtime validation is not needed. */\n json: <T = unknown>() => makeSchema<T>({}),\n string: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<string>({ ...options, type: \"string\" }),\n number: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"number\" }),\n integer: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"integer\" }),\n boolean: () => makeSchema<boolean>({ type: \"boolean\" }),\n null: () => makeSchema<null>({ type: \"null\" }),\n literal: <T extends string | number | boolean | null>(value: T) =>\n makeSchema<T>({ const: value }),\n enum: <const T extends readonly (string | number)[]>(values: T) =>\n makeSchema<T[number]>({ enum: [...values] }),\n array: <S extends Schema<unknown>>(item: S, options: Omit<JSONSchema, \"type\" | \"items\"> = {}) => {\n rejectRawBodyComposition(\"array\", [item]);\n return makeSchema<Infer<S>[]>({ ...options, type: \"array\", items: item.jsonSchema });\n },\n tuple: <const S extends readonly Schema<unknown>[]>(items: S) => {\n rejectRawBodyComposition(\"tuple\", items);\n return makeSchema<{ [K in keyof S]: S[K] extends Schema<infer T> ? T : never }>({\n type: \"array\",\n prefixItems: items.map((item) => item.jsonSchema),\n minItems: items.length,\n maxItems: items.length,\n });\n },\n record: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"record\", [value]);\n return makeSchema<Record<string, Infer<S>>>({\n type: \"object\",\n additionalProperties: value.jsonSchema,\n });\n },\n object: <const P extends Record<string, Schema<unknown>>>(properties: P) => {\n rejectRawBodyComposition(\"object\", Object.values(properties));\n return makeSchema<{ [K in keyof P]: P[K] extends Schema<infer T> ? T : never }>({\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(properties).map(([key, item]) => [key, item.jsonSchema]),\n ),\n required: Object.keys(properties),\n additionalProperties: false,\n });\n },\n union: <const S extends readonly Schema<unknown>[]>(...choices: S) => {\n rejectRawBodyComposition(\"union\", choices);\n return makeSchema<Infer<S[number]>>({ anyOf: choices.map((choice) => choice.jsonSchema) });\n },\n nullable: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"nullable\", [value]);\n return makeSchema<Infer<S> | null>({ anyOf: [value.jsonSchema, { type: \"null\" }] });\n },\n file: () => makeSchema<File>({ type: \"tensorlake_file\" }, \"file\"),\n httpBody: () =>\n makeSchema<HttpBody>({ type: \"tensorlake_http_body\" }, \"httpBody\"),\n custom: <T>(jsonSchema: JSONSchema) => makeSchema<T>({ ...jsonSchema }),\n parameter,\n};\n\ninterface CachedValidator {\n readonly validate: ValidateFunction;\n readonly errorsText: (errors: ValidateFunction[\"errors\"]) => string;\n}\n\nconst validatorCache = new WeakMap<object, CachedValidator>();\n\nfunction compileValidator(jsonSchema: JSONSchema): CachedValidator {\n // Earlier SDK versions validated custom schemas with Ajv's draft-07\n // default. Preserve that behavior for explicitly declared draft-07 schemas\n // while using 2020-12 for SDK-generated schemas and custom schemas without a\n // dialect declaration.\n const dialect = jsonSchema.$schema;\n const engine = typeof dialect === \"string\" && /\\/draft-07\\/schema#?$/.test(dialect)\n ? ajvDraft7\n : ajv2020;\n const validate = engine.compile(jsonSchema);\n return {\n validate,\n errorsText: (errors) => engine.errorsText(errors, { separator: \"; \" }),\n };\n}\n\nexport function validateWithSchema<T>(valueSchema: Schema<T>, value: unknown, label: string): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake File`);\n }\n return value as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake HttpBody`);\n }\n return value as T;\n }\n if (isFile(value)) {\n throw new SDKUsageError(`${label} must use schema.file() for a Tensorlake File`);\n }\n if (isHttpBody(value)) {\n throw new SDKUsageError(\n `${label} must use schema.httpBody() for a Tensorlake HttpBody`,\n );\n }\n let cached = validatorCache.get(valueSchema as object);\n if (cached == null) {\n try {\n cached = compileValidator(valueSchema.jsonSchema);\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new SDKUsageError(`${label} uses an invalid JSON schema: ${details}`);\n }\n validatorCache.set(valueSchema as object, cached);\n }\n if (!cached.validate(value)) {\n const details = cached.errorsText(cached.validate.errors);\n throw new SDKUsageError(`${label} does not match its schema: ${details}`);\n }\n return value as T;\n}\n\nexport function parameterJSONSchema(parameter: Parameter<unknown>): JSONSchema {\n const result: JSONSchema = {\n ...parameter.schema.jsonSchema,\n title: parameter.name,\n parameter_kind: \"POSITIONAL_OR_KEYWORD\",\n };\n if (parameter.description != null) result.description = parameter.description;\n if (parameter.hasDefault) {\n result.default = parameter.schema._file || parameter.schema._httpBody\n ? true\n : parameter.defaultValue;\n }\n return result;\n}\n","import type { RegisteredDefinition } from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\ninterface RegistryState {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nexport interface RegistrySnapshot {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nconst REGISTRY_KEY = Symbol.for(\"tensorlake.applications.registry.v1\");\n\nfunction registry(): RegistryState {\n const target = globalThis as typeof globalThis & { [REGISTRY_KEY]?: RegistryState };\n target[REGISTRY_KEY] ??= { functions: new Map(), applications: new Map() };\n return target[REGISTRY_KEY];\n}\n\nexport function registerDefinition(definition: RegisteredDefinition, isApplication: boolean): void {\n const state = registry();\n const existing = state.functions.get(definition.name);\n if (existing != null && existing !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake functions are named '${definition.name}'`);\n }\n state.functions.set(definition.name, definition);\n if (isApplication) {\n const app = state.applications.get(definition.name);\n if (app != null && app !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake applications are named '${definition.name}'`);\n }\n state.applications.set(definition.name, definition);\n }\n}\n\nexport function getFunction(name: string): RegisteredDefinition {\n const result = registry().functions.get(name);\n if (result == null) throw new SDKUsageError(`Tensorlake function '${name}' is not registered`);\n return result;\n}\n\nexport function getFunctions(): RegisteredDefinition[] {\n return [...registry().functions.values()];\n}\n\nexport function getApplications(): RegisteredDefinition[] {\n return [...registry().applications.values()];\n}\n\nexport function snapshotRegistry(): RegistrySnapshot {\n const state = registry();\n return {\n functions: new Map(state.functions),\n applications: new Map(state.applications),\n };\n}\n\nexport function restoreRegistry(snapshot: RegistrySnapshot): void {\n const state = registry();\n state.functions.clear();\n state.applications.clear();\n for (const [name, definition] of snapshot.functions) state.functions.set(name, definition);\n for (const [name, definition] of snapshot.applications) state.applications.set(name, definition);\n}\n\nexport function clearRegistryForTest(): void {\n registry().functions.clear();\n registry().applications.clear();\n}\n"],"mappings":"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","names":["detectLinuxLibc","fs","read","count","path","fileURLToPath","require","createRequire","createRequire","createHash","path","path","AsyncLocalStorage","AsyncLocalStorage","createHash","path"]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../lib/libc.cjs","../../src/function-agent/main.ts","../../src/native-binding.ts","../../src/native-worker-client.ts","../../src/native-worker-protocol.ts","../../src/url.ts","../../src/defaults.ts","../../src/function-agent/runner.ts","../../src/applications/context.ts","../../src/applications/errors.ts","../../src/applications/headers.ts","../../src/applications/serialization.ts","../../src/applications/file.ts","../../src/applications/http-body.ts","../../src/applications/function.ts","../../src/applications/schema.ts","../../src/applications/registry.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","// Read the ELF interpreter, rather than generating a process-wide diagnostic\n// report. Both supported Linux architectures use little-endian ELF64. Reads\n// are bounded to the header, program headers, and interpreter pathname.\nfunction detectLinuxLibc(fs, executable = process.execPath) {\n const override = process.env.TENSORLAKE_NODE_LIBC;\n if (override != null) {\n if (override === \"gnu\" || override === \"musl\") return override;\n throw new Error(\"TENSORLAKE_NODE_LIBC must be 'gnu' or 'musl'.\");\n }\n\n let fd;\n try {\n fd = fs.openSync(executable, \"r\");\n function read(size, offset) {\n if (!Number.isSafeInteger(offset) || offset < 0) {\n throw new Error(\"Invalid ELF offset\");\n }\n const buffer = Buffer.alloc(size);\n let count = 0;\n while (count < size) {\n const bytes = fs.readSync(fd, buffer, count, size - count, offset + count);\n if (bytes === 0) throw new Error(\"Truncated ELF executable\");\n count += bytes;\n }\n return buffer;\n }\n\n const header = read(64, 0);\n if (header.readUInt32BE(0) !== 0x7f454c46 || header[4] !== 2 || header[5] !== 1) {\n throw new Error(\"Expected a little-endian ELF64 executable\");\n }\n const entrySize = header.readUInt16LE(54);\n const count = header.readUInt16LE(56);\n if (entrySize !== 56 || count === 0 || count > 128) {\n throw new Error(\"Unsupported ELF program headers\");\n }\n const entries = read(entrySize * count, Number(header.readBigUInt64LE(32)));\n for (let i = 0; i < count; i++) {\n const offset = i * entrySize;\n if (entries.readUInt32LE(offset) !== 3) continue; // PT_INTERP\n const size = Number(entries.readBigUInt64LE(offset + 32));\n if (size < 2 || size > 4096) throw new Error(\"Invalid ELF interpreter size\");\n const interpreter = read(size, Number(entries.readBigUInt64LE(offset + 8)));\n if (interpreter[size - 1] !== 0) throw new Error(\"Unterminated ELF interpreter\");\n const name = interpreter.subarray(0, -1).toString(\"utf8\").split(\"/\").at(-1);\n if (name.startsWith(\"ld-musl-\")) return \"musl\";\n if (name.startsWith(\"ld-linux-\")) return \"gnu\";\n throw new Error(\"Unrecognized ELF interpreter\");\n }\n throw new Error(\"No ELF interpreter (statically linked executable)\");\n } catch (cause) {\n throw new Error(\n \"Unable to detect Linux libc from the Node executable. Set TENSORLAKE_NODE_LIBC to 'gnu' or 'musl' for a nonstandard runtime.\",\n { cause },\n );\n } finally {\n if (fd != null) fs.closeSync(fd);\n }\n}\n\nmodule.exports = { detectLinuxLibc };\n","import { loadNative } from \"../native-binding.js\";\nimport { configureNativeWorker } from \"../native-worker-client.js\";\nimport type { NativeFunctionAgentBinding, NativeFunctionAgentOptions } from \"./protocol.js\";\nimport { FunctionAgentRunner } from \"./runner.js\";\n\nfunction parseArgs(args: readonly string[]): NativeFunctionAgentOptions {\n const values = new Map<string, string>();\n for (let index = 0; index < args.length; index += 1) {\n const key = args[index];\n const value = args[index + 1];\n if (!key?.startsWith(\"--\") || value == null || value.startsWith(\"--\")) {\n throw new Error(`Expected --name value argument, got '${key ?? \"\"}'`);\n }\n values.set(key.slice(2), value);\n index += 1;\n }\n const functionServiceUrl = values.get(\"function-service-url\");\n const registrationToken = values.get(\"registration-token\");\n if (functionServiceUrl == null || registrationToken == null) {\n throw new Error(\"--function-service-url and --registration-token are required\");\n }\n return {\n functionServiceUrl,\n registrationToken,\n ...(values.has(\"agent-id\") ? { agentId: values.get(\"agent-id\") } : {}),\n ...(values.has(\"incarnation\") ? { incarnation: values.get(\"incarnation\") } : {}),\n ...(values.has(\"secret-service-workload-url\")\n ? { secretServiceWorkloadUrl: values.get(\"secret-service-workload-url\") }\n : {}),\n ...(values.has(\"credential-request-timeout-ms\")\n ? { credentialRequestTimeoutMs: Number(values.get(\"credential-request-timeout-ms\")) }\n : {}),\n };\n}\n\nexport async function main(args: readonly string[] = process.argv.slice(2)): Promise<void> {\n configureNativeWorker(() => new URL(\"../native-worker.cjs\", import.meta.url));\n const binding = loadNative<NativeFunctionAgentBinding>();\n const core = new binding.FunctionAgentCore(parseArgs(args));\n return new FunctionAgentRunner(core).run();\n}\n","import { detectLinuxLibc } from \"../lib/libc.cjs\";\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ninterface RuntimeReport {\n header?: {\n glibcVersionRuntime?: string;\n };\n}\n\ninterface TargetOptions {\n libc?: \"gnu\" | \"musl\";\n report?: RuntimeReport;\n}\n\ninterface NativeBindingPathOptions extends TargetOptions {\n packageRoot?: string;\n platform?: NodeJS.Platform;\n arch?: string;\n}\n\nconst NATIVE_PACKAGES: Readonly<Record<string, string>> = {\n \"darwin-arm64\": \"tensorlake-native-darwin-arm64\",\n \"linux-arm64\": \"tensorlake-native-linux-arm64-gnu\",\n \"linux-arm64-musl\": \"tensorlake-native-linux-arm64-musl\",\n \"linux-x64\": \"tensorlake-native-linux-x64-gnu\",\n \"linux-x64-musl\": \"tensorlake-native-linux-x64-musl\",\n \"win32-x64\": \"tensorlake-native-win32-x64\",\n};\n\nfunction packageRoot(): string {\n const parent = fileURLToPath(new URL(\"../\", import.meta.url));\n if (fs.existsSync(path.join(parent, \"package.json\"))) return parent;\n const grandparent = fileURLToPath(new URL(\"../../\", import.meta.url));\n if (fs.existsSync(path.join(grandparent, \"package.json\"))) return grandparent;\n return parent;\n}\n\nlet cachedLinuxLibc: \"gnu\" | \"musl\" | undefined;\n\nfunction linuxLibcFamily(options: TargetOptions): \"gnu\" | \"musl\" {\n if (options.libc != null) return options.libc;\n if (options.report != null) {\n return options.report.header?.glibcVersionRuntime ? \"gnu\" : \"musl\";\n }\n if (cachedLinuxLibc != null) return cachedLinuxLibc;\n\n cachedLinuxLibc = detectLinuxLibc(fs);\n return cachedLinuxLibc;\n}\n\nexport function nativeTargetId(\n platform: NodeJS.Platform = process.platform,\n arch: string = process.arch,\n options: TargetOptions = {},\n): string {\n const target = `${platform}-${arch}`;\n if (platform !== \"linux\") return target;\n if (options.libc == null && options.report == null && platform !== process.platform) {\n return target;\n }\n return linuxLibcFamily(options) === \"musl\" ? `${target}-musl` : target;\n}\n\nexport function nativeBindingPath(options: NativeBindingPathOptions = {}): string {\n const platform = options.platform ?? process.platform;\n const arch = options.arch ?? process.arch;\n return path.join(\n options.packageRoot ?? packageRoot(),\n \"dist\",\n \"native\",\n nativeTargetId(platform, arch, options),\n \"tensorlake-node.node\",\n );\n}\n\nexport function nativePackageName(\n platform: NodeJS.Platform = process.platform,\n arch: string = process.arch,\n options: TargetOptions = {},\n): string | undefined {\n return NATIVE_PACKAGES[nativeTargetId(platform, arch, options)];\n}\n\nexport function loadNative<T>(): T {\n const target = nativeTargetId();\n const bindingPath = nativeBindingPath();\n const require = createRequire(import.meta.url);\n\n // Local source builds stage the addon here. Published packages intentionally\n // omit this directory and resolve the platform-specific optional dependency.\n if (fs.existsSync(bindingPath)) return require(bindingPath) as T;\n\n const packageName = nativePackageName();\n if (!packageName) {\n throw new Error(\n `Tensorlake does not provide a native binding for ${target}.`,\n );\n }\n\n let packageEntry: string;\n try {\n packageEntry = require.resolve(packageName);\n } catch (cause) {\n throw new Error(\n `Missing native binding package ${packageName} for ${target}. Reinstall tensorlake without omitting optional dependencies, and install dependencies on the machine where they will run.`,\n { cause },\n );\n }\n return require(packageEntry) as T;\n}\n","import { createRequire } from \"node:module\";\nimport { Worker } from \"node:worker_threads\";\nimport type { NativeEmit, NativeSandboxBinding } from \"./native-sandbox.js\";\nimport {\n cancelNativeCall,\n closeNativeHandle,\n type NativeCall,\n type NativeHandle,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./native-worker-protocol.js\";\nimport { resolveProxyTarget } from \"./url.js\";\n\ninterface PendingCall {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n emit?: NativeEmit;\n // Keep descriptors (and their parents) alive until the operation settles.\n handle?: NativeHandle;\n}\n\n/** One persistent worker per SDK installation and calling isolate. */\nexport class NativeWorkerClient {\n private worker?: Worker;\n private nextId = 1;\n private registered = new Set<number>();\n private pending = new Map<number, PendingCall>();\n private finalizers = new FinalizationRegistry<number>((id) =>\n this.release(id),\n );\n\n constructor(\n private readonly workerPath: () => string | URL = () =>\n createRequire(import.meta.url).resolve(\n \"tensorlake/internal/native-worker\",\n ),\n ) {}\n\n handle(\n kind: NativeHandle[\"kind\"],\n args: unknown[],\n parent?: NativeHandle,\n ): object {\n const handle: NativeHandle = { id: this.nextId++, kind, args, parent };\n this.finalizers.register(handle, handle.id);\n let closed = false;\n return new Proxy(\n {},\n {\n get: (_target, method) => {\n if (method === \"then\") return undefined;\n if (method === closeNativeHandle)\n return () => {\n closed = true;\n this.release(handle.id);\n };\n if (method === \"connectProxy\")\n return (...proxyArgs: unknown[]) => {\n if (closed) throw new Error(\"Tensorlake native client is closed\");\n return this.handle(\"NativeSandboxProxyClient\", proxyArgs, handle);\n };\n if (method === \"baseUrl\")\n return () =>\n resolveProxyTarget(String(args[0]), String(args[1])).baseUrl;\n if (typeof method !== \"string\") return undefined;\n return (...callArgs: unknown[]) => {\n if (closed)\n return Promise.reject(\n new Error(\"Tensorlake native client is closed\"),\n );\n const emit =\n typeof callArgs.at(-1) === \"function\"\n ? (callArgs.pop() as NativeEmit)\n : undefined;\n return this.call(handle, method, callArgs, emit);\n };\n },\n },\n );\n }\n\n call(\n handle: NativeHandle | undefined,\n method: string,\n args: unknown[],\n emit?: NativeEmit,\n ): NativeCall<any> {\n const id = this.nextId++;\n let worker: Worker | undefined;\n const promise: NativeCall<any> = new Promise((resolve, reject) => {\n try {\n worker = this.getWorker();\n this.pending.set(id, { resolve, reject, emit, handle });\n worker.ref();\n if (handle) this.register(handle, worker);\n this.send(worker, {\n type: \"call\",\n id,\n handleId: handle?.id,\n method,\n args,\n stream: !!emit,\n });\n } catch (error) {\n this.pending.delete(id);\n this.unrefIfIdle();\n reject(error);\n }\n });\n promise[cancelNativeCall] = () => {\n const pending = this.pending.get(id);\n if (pending && worker) {\n pending.emit = undefined;\n this.send(worker, { type: \"cancel\", id });\n }\n };\n return promise;\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n const worker = new Worker(this.workerPath(), {\n // The bundled worker needs no application loaders or telemetry preloads.\n // NODE_OPTIONS is parsed independently of execArgv by Node.\n execArgv: [],\n env: { ...process.env, NODE_OPTIONS: \"\" },\n name: \"tensorlake-native\",\n });\n this.worker = worker;\n worker.on(\"message\", (message: WorkerResponse) => {\n const pending = this.pending.get(message.id);\n if (!pending || this.worker !== worker) return;\n if (message.type === \"event\") {\n // Acknowledge only when the consumer asks for the next event. At most\n // one event per stream is outstanding across Rust, worker and caller.\n Promise.resolve()\n .then(() => pending.emit?.(message.value))\n .then(\n () => {\n if (this.worker === worker)\n this.send(worker, { type: \"ack\", id: message.id });\n },\n (error: Error) => {\n this.send(worker, { type: \"cancel\", id: message.id });\n pending.reject(error);\n },\n );\n return;\n }\n this.pending.delete(message.id);\n if (message.type === \"error\") {\n const error = new Error(message.error.message);\n error.name = message.error.name;\n error.stack = message.error.stack ?? error.stack;\n pending.reject(error);\n } else {\n pending.resolve(message.value);\n }\n this.unrefIfIdle();\n });\n const fail = (error: Error) => {\n if (this.worker !== worker) return;\n this.worker = undefined;\n this.registered.clear();\n for (const pending of this.pending.values()) pending.reject(error);\n this.pending.clear();\n // Never replay an in-flight request: it may already have taken effect.\n // A subsequent explicit call starts a fresh worker from descriptors.\n void worker.terminate();\n };\n worker.on(\"error\", fail);\n worker.on(\"messageerror\", fail);\n worker.on(\"exit\", (code) =>\n fail(\n new Error(\n `Tensorlake native worker exited (${code}); in-flight operations were not retried`,\n ),\n ),\n );\n worker.unref();\n return worker;\n }\n\n private register(handle: NativeHandle, worker: Worker): void {\n if (this.registered.has(handle.id)) return;\n if (handle.parent) this.register(handle.parent, worker);\n this.send(worker, {\n type: \"create\",\n handle: { id: handle.id, kind: handle.kind, args: handle.args },\n parentId: handle.parent?.id,\n });\n this.registered.add(handle.id);\n }\n\n private release(handleId: number): void {\n if (this.worker && this.registered.delete(handleId))\n this.send(this.worker, { type: \"release\", handleId });\n }\n\n private send(worker: Worker, message: WorkerRequest): void {\n worker.postMessage(message);\n }\n private unrefIfIdle(): void {\n if (this.pending.size === 0) this.worker?.unref();\n }\n}\n\nexport function createWorkerBinding(\n runtime: NativeWorkerClient,\n): NativeSandboxBinding {\n return {\n NativeCloudClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeCloudClient\", args);\n }\n },\n NativeSandboxClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxClient\", args);\n }\n },\n NativeSandboxProxyClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxProxyClient\", args);\n }\n },\n NativeRepositoryClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeRepositoryClient\", args);\n }\n },\n validateManagedName: (name: string) =>\n runtime.call(undefined, \"validateManagedName\", [name]),\n } as unknown as NativeSandboxBinding;\n}\n\n// ESM and CJS can coexist in one application. Share the worker across bundles\n// of this SDK version, while keeping incompatible installed versions separate.\ndeclare const __SDK_VERSION__: string;\nconst runtimeKey = Symbol.for(\n `tensorlake.native.worker.${typeof __SDK_VERSION__ === \"undefined\" ? \"source\" : __SDK_VERSION__}.v1`,\n);\nconst runtimes = globalThis as typeof globalThis & {\n [runtimeKey]?: NativeWorkerClient;\n};\nexport function workerBinding(): NativeSandboxBinding {\n return createWorkerBinding(\n (runtimes[runtimeKey] ??= new NativeWorkerClient()),\n );\n}\n\n/** Runtime capsules supply the worker alongside their bundled application SDK. */\nexport function configureNativeWorker(workerPath: () => string | URL): void {\n runtimes[runtimeKey] ??= new NativeWorkerClient(workerPath);\n}\n\nexport function releaseNativeHandle(handle: object | null): void {\n (handle as { [closeNativeHandle]?: () => void } | null)?.[\n closeNativeHandle\n ]?.();\n}\n","/** Internal protocol. Native objects never cross an isolate boundary. */\nexport type NativeClientKind =\n | \"NativeCloudClient\"\n | \"NativeSandboxClient\"\n | \"NativeSandboxProxyClient\"\n | \"NativeRepositoryClient\";\n\nexport interface NativeHandle {\n id: number;\n kind: NativeClientKind;\n args: unknown[];\n parent?: NativeHandle;\n}\n\nexport type WorkerRequest =\n | { type: \"create\"; handle: Omit<NativeHandle, \"parent\">; parentId?: number }\n | {\n type: \"call\";\n id: number;\n handleId?: number;\n method: string;\n args: unknown[];\n stream: boolean;\n }\n | { type: \"release\"; handleId: number }\n | { type: \"ack\" | \"cancel\"; id: number };\n\nexport type WorkerResponse =\n | { type: \"result\"; id: number; value: unknown }\n | {\n type: \"error\";\n id: number;\n error: { name: string; message: string; stack?: string };\n }\n | { type: \"event\"; id: number; value: string };\n\nexport const cancelNativeCall = Symbol.for(\"tensorlake.native.cancel.v1\");\nexport const closeNativeHandle = Symbol.for(\"tensorlake.native.close.v1\");\nexport type NativeCall<T> = Promise<T> & { [cancelNativeCall]?: () => void };\n","import * as defaults from \"./defaults.js\";\n\n/** Remove a trailing slash from a URL string if present. */\nfunction trimTrailingSlashes(url: string): string {\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/** Check whether a URL points to localhost. */\nexport function isLocalhost(apiUrl: string): boolean {\n try {\n const parsed = new URL(apiUrl);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\n/** Return the explicit sandbox proxy env override, if the user set one. */\nexport function explicitProxyUrlOverride(): string | undefined {\n const explicit = process.env.TENSORLAKE_SANDBOX_PROXY_URL?.trim();\n return explicit && explicit.length > 0 ? explicit : undefined;\n}\n\n/**\n * Resolve the legacy default proxy URL for direct sandbox handles.\n *\n * Normal client connect/create flows use the server-returned `sandboxUrl`.\n * This helper keeps the old direct-handle behavior and treats the env var as\n * an explicit override.\n *\n * Legacy priority:\n * 1. TENSORLAKE_SANDBOX_PROXY_URL env var\n * 2. `http://localhost:9443` for localhost API URLs\n * 3. Transform `api.X` → `sandbox.X`\n * 4. Default fallback\n */\nexport function resolveProxyUrl(apiUrl: string): string {\n const explicit = explicitProxyUrlOverride();\n if (explicit) return explicit;\n\n if (isLocalhost(apiUrl)) return \"http://localhost:9443\";\n\n try {\n const parsed = new URL(apiUrl);\n const host = parsed.hostname;\n if (host.startsWith(\"api.\")) {\n const proxyHost = \"sandbox.\" + host.slice(4);\n return `${parsed.protocol}//${proxyHost}`;\n }\n } catch {\n // fall through to default\n }\n\n return defaults.SANDBOX_PROXY_URL;\n}\n\n/**\n * Resolve the proxy target for a specific sandbox.\n *\n * - Localhost: base URL stays the same, Host header set to `{sandboxId}.local`\n * - Cloud: selected proxy domain with `X-Tensorlake-Sandbox-Id` header\n *\n * Returns `{ baseUrl, hostHeader, sandboxIdHeader }`.\n */\nexport function resolveProxyTarget(\n proxyUrl: string,\n sandboxId: string,\n): { baseUrl: string; hostHeader: string | undefined; sandboxIdHeader: string | undefined } {\n try {\n const parsed = new URL(proxyUrl);\n const host = parsed.hostname;\n\n if (host === \"localhost\" || host === \"127.0.0.1\") {\n return {\n baseUrl: trimTrailingSlashes(proxyUrl),\n hostHeader: `${sandboxId}.local`,\n sandboxIdHeader: undefined,\n };\n }\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n return {\n baseUrl: `${parsed.protocol}//${host}${port}`,\n hostHeader: undefined,\n sandboxIdHeader: sandboxId,\n };\n } catch {\n return {\n baseUrl: `${trimTrailingSlashes(proxyUrl)}/${sandboxId}`,\n hostHeader: undefined,\n sandboxIdHeader: undefined,\n };\n }\n}\n\n/**\n * Build a public sandbox URL from a server-provided ingress endpoint.\n *\n * `port` omitted or `9501` returns the management URL:\n * `https://<sandbox-id>.<ingress-host>`. User ports use the public\n * `<port>-<sandbox-id>.<ingress-host>` form.\n */\nexport function sandboxUrlFromIngressEndpoint(\n ingressEndpoint: string,\n sandboxId: string,\n port = 9501,\n): string {\n const parsed = new URL(ingressEndpoint);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"ingressEndpoint must be an absolute http(s) URL\");\n }\n const label = port === 9501 ? sandboxId : `${port}-${sandboxId}`;\n return `${parsed.protocol}//${label}.${parsed.host}`;\n}\n\n/**\n * Derive the sandbox lifecycle URL from the API URL.\n *\n * Transforms `api.X` → `sandbox.X` for cloud. Returns the URL unchanged for\n * localhost or unrecognised patterns.\n */\nexport function resolveSandboxLifecycleUrl(apiUrl: string): string {\n if (isLocalhost(apiUrl)) return apiUrl;\n\n try {\n const parsed = new URL(apiUrl);\n if (parsed.hostname.startsWith(\"api.\")) {\n parsed.hostname = \"sandbox.\" + parsed.hostname.slice(4);\n return parsed.toString().replace(/\\/$/, \"\");\n }\n } catch {\n // fall through\n }\n\n return apiUrl;\n}\n\n/**\n * Build a lifecycle API path.\n *\n * - Localhost (namespaced): `/v1/namespaces/{namespace}/{path}`\n * - Cloud (flat): `/{path}`\n */\nexport function lifecyclePath(\n path: string,\n isLocal: boolean,\n namespace: string,\n): string {\n if (isLocal) {\n return `/v1/namespaces/${namespace}/${path}`;\n }\n return `/${path}`;\n}\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n\nexport const API_URL =\n process.env.TENSORLAKE_API_URL ?? \"https://api.tensorlake.ai\";\nexport const API_KEY = process.env.TENSORLAKE_API_KEY ?? undefined;\nexport const NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? \"default\";\nexport const SANDBOX_PROXY_URL =\n process.env.TENSORLAKE_SANDBOX_PROXY_URL ?? \"https://sandbox.tensorlake.ai\";\n\nexport const DEFAULT_HTTP_TIMEOUT_MS = 300_000;\nexport const MAX_RETRIES = 3;\nexport const RETRY_BACKOFF_MS = 500;\n","import { createHash } from \"node:crypto\";\nimport { mkdir, mkdtemp, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { compileFunction, constants as vmConstants } from \"node:vm\";\nimport { unzipSync } from \"fflate\";\nimport type { RequestContextValue } from \"../applications/context.js\";\nimport {\n runWithRequestContext,\n serializeRequestStateValue,\n validateCounterMetric,\n validateProgressUpdate,\n validateRequestStateKey,\n validateTimerMetric,\n} from \"../applications/context.js\";\nimport {\n FunctionError,\n RequestError,\n SDKUsageError,\n TimeoutError,\n isRequestError,\n} from \"../applications/errors.js\";\nimport { File } from \"../applications/file.js\";\nimport {\n executeHandlerResult,\n installPromiseInstrumentation,\n isTailCall,\n runWithFunctionRuntime,\n type FunctionFuture,\n type FunctionRuntime,\n type RegisteredDefinition,\n type TailCall,\n} from \"../applications/function.js\";\nimport { Headers } from \"../applications/headers.js\";\nimport { HttpBody } from \"../applications/http-body.js\";\nimport { deserializeJSON, serializeValue } from \"../applications/serialization.js\";\nimport type {\n AgentInput,\n AgentInputValue,\n Assignment,\n CallResult,\n NativeFunctionAgentCore,\n RequestStateResult,\n} from \"./protocol.js\";\n\ninstallPromiseInstrumentation();\n\ntype Message = Record<string, unknown>;\n\nconst RESERVED_ENVIRONMENT_TARGETS = new Set([\n \"PYTHONFAULTHANDLER\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"PYTHONHOME\",\n \"PYTHONPATH\",\n \"NODE_OPTIONS\",\n \"NODE_PATH\",\n]);\n\ninterface CodeManifest {\n format_version?: number;\n runtime?: string;\n minimum_node_major?: number;\n module?: string;\n functions?: Record<string, { name?: string }>;\n}\n\ninterface RuntimeModule {\n __tensorlakeGetFunction?(name: string): RegisteredDefinition;\n}\n\ninterface LoadedApplication {\n root: string;\n getFunction(name: string): RegisteredDefinition;\n}\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve(value: T): void;\n reject(error: unknown): void;\n}\n\nconst nativeImport = compileFunction(\n \"return import(specifier)\",\n [\"specifier\"],\n { importModuleDynamically: vmConstants.USE_MAIN_CONTEXT_DEFAULT_LOADER },\n) as (specifier: string) => Promise<unknown>;\n\nfunction deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((resolveValue, rejectValue) => {\n resolve = resolveValue;\n reject = rejectValue;\n });\n return { promise, resolve, reject };\n}\n\nfunction durableHash(values: readonly string[]): string {\n const hash = createHash(\"sha256\");\n for (const value of values) {\n const bytes = Buffer.from(value, \"utf8\");\n const length = Buffer.alloc(8);\n length.writeBigUInt64BE(BigInt(bytes.byteLength));\n hash.update(length);\n hash.update(bytes);\n hash.update(\"|\");\n }\n return hash.digest(\"hex\");\n}\n\nfunction safeArchivePath(root: string, archivePath: string): string {\n const output = path.resolve(root, archivePath);\n if (output !== root && !output.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Application archive contains unsafe path '${archivePath}'`);\n }\n return output;\n}\n\nfunction decodeBase64(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, \"base64\"));\n}\n\nfunction encodeBase64(value: Uint8Array): string {\n return Buffer.from(value).toString(\"base64\");\n}\n\nfunction deserializeValue(value: AgentInputValue): unknown {\n const data = decodeBase64(value.data_base64);\n if (value.content_type.toLowerCase().includes(\"json\")) return deserializeJSON(data);\n return new File(data, value.content_type || \"application/octet-stream\");\n}\n\nfunction serializeArgument(value: unknown): Message {\n const serialized = serializeValue(value);\n return {\n source: \"data\",\n data_base64: encodeBase64(serialized.data),\n metadata_base64: \"\",\n content_type: serialized.contentType,\n };\n}\n\nfunction applyResolvedEnvironment(assignment: Assignment): void {\n const rawEnvironment = assignment.resolved_environment ?? [];\n const targets = new Set<string>();\n for (const item of rawEnvironment) {\n if (\n item == null\n || typeof item.target !== \"string\"\n || !/^[A-Za-z_][A-Za-z0-9_]{0,255}$/.test(item.target)\n || RESERVED_ENVIRONMENT_TARGETS.has(item.target)\n || item.target.startsWith(\"TENSORLAKE_\")\n || targets.has(item.target)\n || typeof item.value !== \"string\"\n || item.value.includes(\"\\0\")\n ) {\n throw new Error(\"Resolved environment entry is invalid\");\n }\n targets.add(item.target);\n }\n for (const item of rawEnvironment) process.env[item.target] = item.value;\n for (const item of rawEnvironment) item.value = \"\";\n assignment.resolved_environment = [];\n}\n\nfunction failureFromResult(result: Exclude<CallResult, { outcome: \"success\" }>): Error {\n if (result.outcome === \"timed_out\") return new TimeoutError();\n if (result.reason === \"request_error\") return new RequestError(\"Function call failed\");\n return new FunctionError(`Function call failed: ${result.reason}`);\n}\n\nexport class FunctionAgentRunner {\n private readonly attempts = new Map<string, AttemptRuntime>();\n private readonly applications = new Map<string, Promise<LoadedApplication>>();\n private initializationSent = false;\n\n constructor(private readonly core: NativeFunctionAgentCore) {}\n\n async run(): Promise<void> {\n for (;;) {\n const input = JSON.parse(await this.core.nextInput()) as AgentInput;\n switch (input.type) {\n case \"assignment\":\n void this.startAssignment(input.assignment);\n break;\n case \"call_result\":\n this.attempts.get(input.attempt_id)?.deliverCallResult(\n input.function_call_id,\n input,\n );\n break;\n case \"request_state_result\":\n this.attempts.get(input.result.attempt_id)?.deliverStateResult(input.result);\n break;\n case \"cancel\":\n this.attempts.get(input.attempt_id)?.cancel();\n break;\n case \"shutdown\":\n return;\n }\n }\n }\n\n private async startAssignment(assignment: Assignment): Promise<void> {\n try {\n applyResolvedEnvironment(assignment);\n const application = await this.loadApplication(assignment);\n if (!this.initializationSent) {\n await this.submit({ type: \"initialized\" });\n this.initializationSent = true;\n }\n const definition = application.getFunction(assignment.function);\n const attempt = new AttemptRuntime(assignment, definition, this.submit.bind(this));\n this.attempts.set(assignment.attempt_id, attempt);\n await attempt.run();\n } catch (error) {\n // Initialization failures must be terminal user-code failures. Marking\n // the runner initialized before reporting the attempt avoids turning a\n // bad bundle into an unbounded infrastructure retry loop.\n if (!this.initializationSent) {\n await this.submit({ type: \"initialized\" });\n this.initializationSent = true;\n }\n await this.submit({\n type: \"failure\",\n attempt_id: assignment.attempt_id,\n reason: \"function_error\",\n message: error instanceof Error ? error.stack ?? error.message : String(error),\n });\n } finally {\n this.attempts.delete(assignment.attempt_id);\n }\n }\n\n private loadApplication(assignment: Assignment): Promise<LoadedApplication> {\n let application = this.applications.get(assignment.application_code_sha256);\n if (application == null) {\n application = unpackApplication(assignment);\n this.applications.set(assignment.application_code_sha256, application);\n }\n return application;\n }\n\n private submit(output: Message): Promise<void> {\n return this.core.submitOutput(JSON.stringify(output));\n }\n}\n\nclass AttemptRuntime implements FunctionRuntime {\n private readonly controller = new AbortController();\n private readonly callResults = new Map<string, Deferred<CallResult>>();\n private readonly stateResults = new Map<string, Deferred<RequestStateResult>>();\n private previousDurableId: string;\n private nextStateSequence = 1;\n\n constructor(\n private readonly assignment: Assignment,\n private readonly definition: RegisteredDefinition,\n private readonly submit: (output: Message) => Promise<void>,\n ) {\n this.previousDurableId = assignment.function_run_id;\n }\n\n async run(): Promise<void> {\n try {\n const args = await deserializeAssignmentArguments(this.definition, this.assignment.inputs);\n const output = await runWithFunctionRuntime(this, () =>\n runWithRequestContext(this.requestContext(), () =>\n executeHandlerResult(this.definition, args),\n ),\n );\n if (isTailCall(output)) {\n const callId = await this.createTailCall(output);\n await this.submit({\n type: \"success\",\n attempt_id: this.assignment.attempt_id,\n result: { type: \"call_graph\", output_function_call_id: callId },\n });\n return;\n }\n const serialized = serializeValue(output);\n await this.submit({\n type: \"success\",\n attempt_id: this.assignment.attempt_id,\n result: {\n type: \"value\",\n output_base64: encodeBase64(serialized.data),\n metadata_base64: \"\",\n content_type: serialized.contentType,\n },\n });\n } catch (error) {\n if (this.controller.signal.aborted) return;\n await this.submit({\n type: \"failure\",\n attempt_id: this.assignment.attempt_id,\n reason: isRequestError(error) ? \"request_error\" : \"function_error\",\n message: error instanceof Error ? error.stack ?? error.message : String(error),\n });\n }\n }\n\n cancel(): void {\n if (!this.controller.signal.aborted) {\n this.controller.abort(new FunctionError(\"Function execution was cancelled\"));\n }\n for (const waiter of this.callResults.values()) waiter.reject(this.controller.signal.reason);\n for (const waiter of this.stateResults.values()) waiter.reject(this.controller.signal.reason);\n this.callResults.clear();\n this.stateResults.clear();\n }\n\n deliverCallResult(functionCallId: string, result: CallResult): void {\n const waiter = this.callResults.get(functionCallId);\n if (waiter == null) return;\n this.callResults.delete(functionCallId);\n waiter.resolve(result);\n }\n\n deliverStateResult(result: RequestStateResult): void {\n const waiter = this.stateResults.get(result.operation_id);\n if (waiter == null) return;\n this.stateResults.delete(result.operation_id);\n waiter.resolve(result);\n }\n\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T> {\n return this.runChild<T>(definition, args, 0);\n }\n\n async runFuture<T>(future: FunctionFuture<T>): Promise<T> {\n if (future.delaySeconds > 0) {\n await this.submit({ type: \"suspend\", attempt_id: this.assignment.attempt_id });\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, future.delaySeconds * 1_000);\n this.controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timer);\n reject(this.controller.signal.reason);\n }, { once: true });\n });\n await this.submit({ type: \"resume\", attempt_id: this.assignment.attempt_id });\n }\n return this.runChild<T>(future.definition, future.args, 0);\n }\n\n async reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n let values = items;\n let accumulator = initial;\n if (!hasInitial) {\n if (items.length === 0) throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n [accumulator, ...values] = items;\n }\n if (values.length === 0) return accumulator as T;\n const calls: Message[] = [];\n let previous: string | undefined;\n for (const item of values) {\n const id = this.nextDurableId(definition, \"ReduceStep\");\n calls.push({\n function_call_id: id,\n function_name: definition.name,\n inputs: [\n previous == null\n ? serializeArgument(accumulator)\n : { source: \"function_run_output\", function_call_id: previous },\n serializeArgument(item),\n ],\n call_metadata_base64: this.callMetadata(id, definition.name, \"reduce\"),\n });\n previous = id;\n }\n await this.submit({ type: \"call_batch\", attempt_id: this.assignment.attempt_id, calls });\n return this.watch<T>(previous as string);\n }\n\n private async runChild<T>(\n definition: RegisteredDefinition,\n args: readonly unknown[],\n _delaySeconds: number,\n ): Promise<T> {\n const id = this.nextDurableId(definition);\n await this.submit({\n type: \"call_batch\",\n attempt_id: this.assignment.attempt_id,\n calls: [{\n function_call_id: id,\n function_name: definition.name,\n inputs: args.map(serializeArgument),\n call_metadata_base64: this.callMetadata(id, definition.name, \"call\"),\n }],\n });\n return this.watch<T>(id);\n }\n\n private async watch<T>(functionCallId: string): Promise<T> {\n const result = deferred<CallResult>();\n this.callResults.set(functionCallId, result);\n await this.submit({\n type: \"watch\",\n attempt_id: this.assignment.attempt_id,\n function_call_id: functionCallId,\n });\n const resolved = await result.promise;\n if (resolved.outcome !== \"success\") throw failureFromResult(resolved);\n return deserializeValue({\n data_base64: resolved.output_base64,\n metadata_base64: resolved.metadata_base64,\n content_type: resolved.content_type,\n }) as T;\n }\n\n private async createTailCall(tailCall: TailCall<unknown>): Promise<string> {\n const id = this.nextDurableId(tailCall.definition);\n await this.submit({\n type: \"call_batch\",\n attempt_id: this.assignment.attempt_id,\n calls: [{\n function_call_id: id,\n function_name: tailCall.definition.name,\n inputs: tailCall.args.map(serializeArgument),\n call_metadata_base64: this.callMetadata(id, tailCall.definition.name, \"tail_call\"),\n }],\n });\n return id;\n }\n\n private nextDurableId(definition: RegisteredDefinition, operation = \"FunctionCall\"): string {\n const id = durableHash([\n this.assignment.function_run_id,\n this.previousDurableId,\n operation,\n definition.name,\n ]);\n this.previousDurableId = id;\n return id;\n }\n\n private callMetadata(id: string, functionName: string, operation: string): string {\n return Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName,\n operation,\n })).toString(\"base64\");\n }\n\n private requestContext(): RequestContextValue {\n return {\n requestId: this.assignment.request_id,\n headers: new Headers(\n (this.assignment.request_headers ?? []).map(({ name, value }) => [name, value] as const),\n ),\n signal: this.controller.signal,\n state: {\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const result = await this.requestState({ operation: \"get\", key });\n if (result.result !== \"get\" || result.value_base64 == null) return defaultValue;\n return deserializeJSON(decodeBase64(result.value_base64)) as T;\n },\n set: async (key: string, value: unknown) => {\n validateRequestStateKey(key);\n const encoded = encodeBase64(serializeRequestStateValue(value));\n await this.requestState({ operation: \"set\", key, value_base64: encoded });\n },\n },\n metrics: {\n counter: async (name, value = 1) => validateCounterMetric(name, value),\n timer: async (name, value) => validateTimerMetric(name, value),\n },\n progress: {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n await this.submit({\n type: \"progress\",\n attempt_id: this.assignment.attempt_id,\n message: JSON.stringify({ current, total, ...options }),\n });\n },\n },\n };\n }\n\n private async requestState(operation: Message): Promise<RequestStateResult> {\n const operationId = `${this.assignment.attempt_id}:state:${this.nextStateSequence}`;\n this.nextStateSequence += 1;\n const result = deferred<RequestStateResult>();\n this.stateResults.set(operationId, result);\n await this.submit({\n type: \"request_state\",\n attempt_id: this.assignment.attempt_id,\n operation_id: operationId,\n operation,\n });\n return result.promise;\n }\n}\n\nasync function unpackApplication(assignment: Assignment): Promise<LoadedApplication> {\n const archive = decodeBase64(assignment.application_code_base64);\n const actualHash = createHash(\"sha256\").update(archive).digest(\"hex\");\n if (actualHash !== assignment.application_code_sha256) {\n throw new Error(\n `Application code hash mismatch: expected ${assignment.application_code_sha256}, got ${actualHash}`,\n );\n }\n const root = await mkdtemp(path.join(os.tmpdir(), \"tensorlake-typescript-app-\"));\n const files = unzipSync(archive);\n for (const [name, content] of Object.entries(files)) {\n const destination = safeArchivePath(root, name);\n if (name.endsWith(\"/\")) {\n await mkdir(destination, { recursive: true });\n continue;\n }\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { mode: 0o600 });\n }\n const manifest = JSON.parse(\n await readFile(path.join(root, \".tensorlake_code_manifest.json\"), \"utf8\"),\n ) as CodeManifest;\n if (manifest.format_version !== 2 || manifest.runtime !== \"typescript\") {\n throw new Error(\"Application code is not a Tensorlake TypeScript bundle\");\n }\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if ((manifest.minimum_node_major ?? 24) > nodeMajor) {\n throw new Error(`Application requires Node ${manifest.minimum_node_major} or newer; runner has ${nodeMajor}`);\n }\n if (manifest.module == null) throw new Error(\"Application manifest does not name a runtime module\");\n const modulePath = safeArchivePath(root, manifest.module);\n const runtime = await nativeImport(pathToFileURL(modulePath).href) as RuntimeModule;\n if (typeof runtime.__tensorlakeGetFunction !== \"function\") {\n throw new Error(\"Application runtime does not export __tensorlakeGetFunction\");\n }\n return {\n root,\n getFunction(name: string): RegisteredDefinition {\n if (manifest.functions?.[name] == null) {\n throw new Error(`Function '${name}' is not present in the application bundle`);\n }\n const definition = runtime.__tensorlakeGetFunction?.(name);\n if (definition?.name !== name) {\n throw new Error(`Application runtime resolved '${name}' as '${String(definition?.name)}'`);\n }\n return definition;\n },\n };\n}\n\nasync function deserializeAssignmentArguments(\n definition: RegisteredDefinition,\n inputs: readonly AgentInputValue[],\n): Promise<unknown[]> {\n if (inputs.length === 0) return [];\n if (inputs.some((input) => input.source_function_call_id != null) || inputs.length > 1) {\n return inputs.map(deserializeValue);\n }\n let data = decodeBase64(inputs[0].data_base64);\n let contentType = inputs[0].content_type;\n if (contentType.toLowerCase().startsWith(\"message/http\")) {\n const marker = Buffer.from(\"\\r\\n\\r\\n\");\n const bytes = Buffer.from(data);\n const split = bytes.indexOf(marker);\n if (split < 0) throw new Error(\"Invalid message/http application input\");\n const lines = bytes.subarray(0, split).toString(\"utf8\").split(\"\\r\\n\");\n lines.shift();\n for (const line of lines) {\n const colon = line.indexOf(\":\");\n if (colon > 0 && line.slice(0, colon).trim().toLowerCase() === \"content-type\") {\n contentType = line.slice(colon + 1).trim();\n }\n }\n data = new Uint8Array(bytes.subarray(split + marker.byteLength));\n }\n if (definition.parameters.length === 0) return [];\n const first = definition.parameters[0];\n if (definition.parameters.length === 1 && first?.schema._httpBody) {\n return [new HttpBody(data, contentType)];\n }\n if (data.byteLength === 0 && !first?.schema._file) return [];\n if (first?.schema._file) return [new File(data, contentType || \"application/octet-stream\")];\n if (!contentType.toLowerCase().includes(\"json\")) {\n throw new Error(`Expected application/json input, got ${contentType}`);\n }\n return [deserializeJSON(data)];\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { SDKUsageError } from \"./errors.js\";\nimport { Headers, type HeadersInit } from \"./headers.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nexport interface ProgressOptions {\n message?: string;\n attributes?: Record<string, string>;\n}\n\nexport interface RequestState {\n set(key: string, value: unknown): Promise<void>;\n get<T>(key: string, defaultValue?: T): Promise<T | undefined>;\n}\n\nexport interface RequestMetrics {\n timer(name: string, value: number): Promise<void>;\n counter(name: string, value?: number): Promise<void>;\n}\n\nexport interface FunctionProgress {\n update(current: number, total: number, options?: ProgressOptions): Promise<void>;\n}\n\nexport function validateRequestStateKey(key: unknown): asserts key is string {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(`State key must be a string, got: ${String(key)}`);\n }\n}\n\nexport function serializeRequestStateValue(value: unknown): Uint8Array {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") {\n throw new SDKUsageError(\"Request state values must be JSON values\");\n }\n return serialized.data;\n}\n\nexport function validateCounterMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Counter name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n throw new SDKUsageError(`Counter value must be an int, got: ${String(value)}`);\n }\n if (!Number.isSafeInteger(value)) {\n throw new SDKUsageError(`Counter value must be a safe int, got: ${String(value)}`);\n }\n}\n\nexport function validateTimerMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Timer name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new SDKUsageError(`Timer value must be a finite number, got: ${String(value)}`);\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<PropertyKey, unknown> {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function validateProgressUpdate(\n current: number,\n total: number,\n options?: ProgressOptions,\n): void {\n if (!Number.isFinite(current) || !Number.isFinite(total) || total < 0 || current < 0) {\n throw new SDKUsageError(\"Progress current and total must be non-negative finite numbers\");\n }\n if (options != null && !isPlainRecord(options)) {\n throw new SDKUsageError(\"Progress options must be an object\");\n }\n if (options?.message != null && typeof options.message !== \"string\") {\n throw new SDKUsageError(\"Progress message must be a string\");\n }\n if (options?.attributes != null) {\n if (!isPlainRecord(options.attributes)) {\n throw new SDKUsageError(\"Progress attributes must be an object of string key/value pairs\");\n }\n for (const key of Reflect.ownKeys(options.attributes)) {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n const value = options.attributes[key];\n if (typeof value !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n }\n }\n}\n\nexport interface RequestContextValue {\n readonly requestId: string;\n readonly headers: Headers;\n readonly signal: AbortSignal;\n readonly state: RequestState;\n readonly metrics: RequestMetrics;\n readonly progress: FunctionProgress;\n}\n\n// A deployed application bundle contains its own copy of the applications SDK,\n// while the function executor has another copy in its runtime capsule. Both\n// copies execute in the same Node process and must observe the same context.\n// Symbol.for keeps the AsyncLocalStorage process-global without exposing it as\n// public API or coupling the application bundle to the executor package.\nconst REQUEST_CONTEXT_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.request-context-storage.v1\",\n);\n\nfunction requestContextStorage(): AsyncLocalStorage<RequestContextValue> {\n const target = globalThis as typeof globalThis & {\n [REQUEST_CONTEXT_STORAGE_KEY]?: AsyncLocalStorage<RequestContextValue>;\n };\n target[REQUEST_CONTEXT_STORAGE_KEY] ??= new AsyncLocalStorage<RequestContextValue>();\n return target[REQUEST_CONTEXT_STORAGE_KEY];\n}\n\nexport class RequestContext {\n static get(): RequestContextValue {\n const context = requestContextStorage().getStore();\n if (context == null) {\n throw new SDKUsageError(\"RequestContext.get() can only be called from a running Tensorlake function\");\n }\n return context;\n }\n}\n\nexport function runWithRequestContext<T>(\n context: RequestContextValue,\n callback: () => Promise<T>,\n): Promise<T> {\n return requestContextStorage().run(context, callback);\n}\n\nexport async function waitWithAbortSignal<T>(\n value: Promise<T>,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) throw signal.reason;\n let onAbort: (() => void) | undefined;\n try {\n return await Promise.race([\n value,\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort != null) signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nexport class MemoryRequestContext implements RequestContextValue {\n readonly headers: Headers;\n readonly signal: AbortSignal;\n private readonly values = new Map<string, Uint8Array>();\n private readonly counters = new Map<string, number>();\n private readonly timers = new Map<string, number[]>();\n private lastProgress?: { current: number; total: number; options?: ProgressOptions };\n\n constructor(\n readonly requestId: string,\n options: { signal?: AbortSignal; headers?: HeadersInit } = {},\n ) {\n this.headers = new Headers(options.headers);\n this.signal = options.signal ?? new AbortController().signal;\n }\n\n readonly state: RequestState = {\n set: async (key, value) => {\n validateRequestStateKey(key);\n this.values.set(key, serializeRequestStateValue(value).slice());\n },\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const value = this.values.get(key);\n return value == null ? defaultValue : deserializeJSON(value) as T;\n },\n };\n\n readonly metrics: RequestMetrics = {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.counters.set(name, (this.counters.get(name) ?? 0) + value);\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n const values = this.timers.get(name) ?? [];\n values.push(value);\n this.timers.set(name, values);\n },\n };\n\n readonly progress: FunctionProgress = {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.lastProgress = { current, total, options };\n },\n };\n}\n","const SDK_USAGE_ERROR_BRAND = Symbol.for(\"tensorlake.applications.sdk-usage-error.v1\");\nconst REQUEST_ERROR_BRAND = Symbol.for(\"tensorlake.applications.request-error.v1\");\nconst FUNCTION_ERROR_BRAND = Symbol.for(\"tensorlake.applications.function-error.v1\");\nconst TIMEOUT_ERROR_BRAND = Symbol.for(\"tensorlake.applications.timeout-error.v1\");\n\nexport class TensorlakeApplicationError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"TensorlakeApplicationError\";\n }\n}\n\nexport class SDKUsageError extends TensorlakeApplicationError {\n readonly [SDK_USAGE_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== SDKUsageError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isSDKUsageError(value);\n }\n\n constructor(message: string) {\n super(message);\n this.name = \"SDKUsageError\";\n }\n}\n\n/** Recognizes SDKUsageError instances thrown by independently bundled SDK copies. */\nfunction isSDKUsageError(value: unknown): value is SDKUsageError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[SDK_USAGE_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class SerializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"SerializationError\";\n }\n}\n\nexport class DeserializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"DeserializationError\";\n }\n}\n\nexport class FunctionError extends TensorlakeApplicationError {\n readonly [FUNCTION_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== FunctionError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFunctionError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"FunctionError\";\n }\n}\n\nexport class TimeoutError extends TensorlakeApplicationError {\n readonly [TIMEOUT_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== TimeoutError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isTimeoutError(value);\n }\n\n constructor() {\n super(\"Timed out.\");\n this.name = \"TimeoutError\";\n }\n}\n\n/** Recognizes TimeoutError instances thrown by independently bundled SDK copies. */\nfunction isTimeoutError(value: unknown): value is TimeoutError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[TIMEOUT_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\n/** Recognizes FunctionError instances thrown by independently bundled SDK copies. */\nfunction isFunctionError(value: unknown): value is FunctionError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FUNCTION_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class RequestError extends TensorlakeApplicationError {\n readonly [REQUEST_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== RequestError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isRequestError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"RequestError\";\n }\n}\n\n/** Recognizes RequestError instances thrown by independently bundled SDK copies. */\nexport function isRequestError(value: unknown): value is RequestError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[REQUEST_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class ReplayMismatchError extends TensorlakeApplicationError {\n constructor(message = \"Function execution diverged from its durable event history\") {\n super(message);\n this.name = \"ReplayMismatchError\";\n }\n}\n","export type HeadersInit =\n | Headers\n | Record<string, string>\n | Iterable<readonly [string, string]>;\n\nconst HEADERS_BRAND = Symbol.for(\"tensorlake.applications.headers.v1\");\n\n/** Immutable, case-insensitive application request headers. */\nexport class Headers implements Iterable<readonly [string, string]> {\n readonly [HEADERS_BRAND] = true;\n readonly #items: readonly (readonly [string, string])[];\n readonly #lookup: ReadonlyMap<string, readonly string[]>;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== Headers) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHeaders(value);\n }\n\n constructor(headers: HeadersInit = []) {\n const entries = headers instanceof Headers\n ? [...headers]\n : Symbol.iterator in Object(headers)\n ? [...headers as Iterable<readonly [string, string]>]\n : Object.entries(headers);\n const lookup = new Map<string, string[]>();\n this.#items = Object.freeze(entries.map(([name, value]) => {\n if (typeof name !== \"string\" || typeof value !== \"string\") {\n throw new TypeError(\"Headers require string names and values\");\n }\n const item = Object.freeze([name, value] as const);\n const key = name.toLowerCase();\n lookup.set(key, [...(lookup.get(key) ?? []), value]);\n return item;\n }));\n this.#lookup = lookup;\n Object.freeze(this);\n }\n\n get(name: string): string | undefined {\n return this.#lookup.get(name.toLowerCase())?.at(-1);\n }\n\n getAll(name: string): readonly string[] {\n return Object.freeze([...(this.#lookup.get(name.toLowerCase()) ?? [])]);\n }\n\n has(name: string): boolean {\n return this.#lookup.has(name.toLowerCase());\n }\n\n entries(): IterableIterator<readonly [string, string]> {\n return this.#items[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<readonly [string, string]> {\n return this.entries();\n }\n}\n\n/** Recognizes immutable request headers across independently bundled SDK copies. */\nexport function isHeaders(value: unknown): value is Headers {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HEADERS_BRAND] === true\n && typeof candidate.get === \"function\"\n && typeof candidate.getAll === \"function\"\n && typeof candidate.has === \"function\"\n && typeof candidate[Symbol.iterator] === \"function\";\n}\n","import { createHash } from \"node:crypto\";\nimport { DeserializationError, SerializationError } from \"./errors.js\";\nimport { isFile } from \"./file.js\";\nimport { isHttpBody } from \"./http-body.js\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport interface SerializedValue {\n data: Uint8Array;\n contentType: string;\n encoding: \"json\" | \"raw\";\n}\n\nfunction assertJSONValue(value: unknown, path: string, seen: Set<object>): void {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new SerializationError(`${path} contains a non-finite number`);\n return;\n }\n if (typeof value !== \"object\") {\n throw new SerializationError(`${path} contains unsupported ${typeof value}`);\n }\n if (isFile(value)) {\n throw new SerializationError(`${path} contains a nested File; File is only supported as a direct value`);\n }\n if (isHttpBody(value)) {\n throw new SerializationError(\n `${path} contains a nested HttpBody; HttpBody is only supported as a direct value`,\n );\n }\n if (seen.has(value)) throw new SerializationError(`${path} contains a cycle`);\n if (Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {\n throw new SerializationError(`${path} contains unsupported ${value.constructor?.name ?? \"object\"}`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SerializationError(`${path} contains a sparse array entry at index ${index}`);\n }\n assertJSONValue(value[index], `${path}[${index}]`, seen);\n }\n } else {\n for (const [key, item] of Object.entries(value)) {\n assertJSONValue(item, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nexport function serializeValue(value: unknown): SerializedValue {\n if (isFile(value)) {\n return { data: value.content, contentType: value.contentType, encoding: \"raw\" };\n }\n if (isHttpBody(value)) {\n return {\n data: value.content,\n contentType: value.contentType ?? \"\",\n encoding: \"raw\",\n };\n }\n try {\n assertJSONValue(value, \"value\", new Set());\n return {\n data: textEncoder.encode(JSON.stringify(value)),\n contentType: \"application/json; charset=UTF-8\",\n encoding: \"json\",\n };\n } catch (error) {\n if (error instanceof SerializationError) throw error;\n throw new SerializationError(\"Failed to serialize JSON value\", { cause: error });\n }\n}\n\nexport function deserializeJSON(data: Uint8Array): unknown {\n try {\n return JSON.parse(textDecoder.decode(data));\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize JSON value\", { cause: error });\n }\n}\n\nexport function jsonRoundTrip<T>(value: T): T {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") return value;\n return deserializeJSON(serialized.data) as T;\n}\n\nexport function canonicalJSON(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(\",\")}]`;\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJSON(item)}`).join(\",\")}}`;\n}\n\nexport function sha256(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n","import { SDKUsageError } from \"./errors.js\";\n\nconst FILE_BRAND = Symbol.for(\"tensorlake.applications.file.v1\");\n\nexport class File {\n readonly [FILE_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== File) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFile(value);\n }\n\n constructor(content: Uint8Array | ArrayBuffer, contentType: string) {\n if (!contentType.trim()) {\n throw new SDKUsageError(\"File contentType cannot be empty\");\n }\n this.content = content instanceof Uint8Array ? content : new Uint8Array(content);\n this.contentType = contentType;\n }\n}\n\n/**\n * Recognizes Tensorlake Files across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `File` constructors are not\n * referentially equal. The shared brand and `Symbol.hasInstance` keep\n * `instanceof File` useful across that boundary.\n */\nexport function isFile(value: unknown): value is File {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FILE_BRAND] === true\n && candidate.content instanceof Uint8Array\n && typeof candidate.contentType === \"string\"\n && candidate.contentType.trim().length > 0;\n}\n","const HTTP_BODY_BRAND = Symbol.for(\"tensorlake.applications.http-body.v1\");\n\nexport class HttpBody {\n readonly [HTTP_BODY_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType?: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== HttpBody) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHttpBody(value);\n }\n\n constructor(\n content: Uint8Array | ArrayBuffer,\n contentType?: string,\n ) {\n this.content = content instanceof Uint8Array\n ? content\n : new Uint8Array(content);\n this.contentType = contentType;\n }\n\n text(encoding = \"utf-8\"): string {\n return new TextDecoder(encoding, { fatal: true }).decode(this.content);\n }\n\n json<T = unknown>(): T {\n return JSON.parse(this.text()) as T;\n }\n}\n\n/**\n * Recognizes Tensorlake HTTP bodies across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `HttpBody` constructors are not\n * referentially equal.\n */\nexport function isHttpBody(value: unknown): value is HttpBody {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HTTP_BODY_BRAND] === true\n && candidate.content instanceof Uint8Array\n && (\n candidate.contentType === undefined\n || typeof candidate.contentType === \"string\"\n );\n}\n","import { AsyncLocalStorage, executionAsyncId } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Image } from \"../image.js\";\nimport { SDKUsageError } from \"./errors.js\";\nimport type { Parameter, ParameterValues, Schema } from \"./schema.js\";\nimport { schema, validateWithSchema } from \"./schema.js\";\nimport { registerDefinition } from \"./registry.js\";\n\nexport interface Retries {\n maxRetries: number;\n}\n\nexport function retries(options: Retries): Retries {\n if (\n typeof options !== \"object\"\n || options == null\n || !Number.isInteger(options.maxRetries)\n || options.maxRetries < 0\n || options.maxRetries > 10\n ) {\n throw new SDKUsageError(\"maxRetries must be an integer between 0 and 10\");\n }\n return Object.freeze({ ...options });\n}\n\nexport type Region = \"us-east-1\" | \"eu-west-1\";\n\nexport type ApplicationCapability = \"unauthenticated_requests\";\n\nexport interface FunctionOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> {\n name?: string;\n parameters: P;\n returns: Schema<R>;\n description?: string;\n cpu?: number;\n memory?: number;\n ephemeralDisk?: number;\n gpu?: string | string[] | null;\n timeout?: number;\n image?: Image;\n secrets?: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> extends FunctionOptions<P, R> {\n tags?: Record<string, string>;\n applicationRetries?: Retries;\n allow?: readonly ApplicationCapability[];\n}\n\n/** Options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleFunctionOptions = Omit<\n FunctionOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\n/** Application options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleApplicationOptions = Omit<\n ApplicationOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\nexport interface NormalizedFunctionOptions {\n description: string;\n cpu: number;\n memory: number;\n ephemeralDisk: number;\n gpu: string | string[] | null;\n timeout: number;\n image?: Image;\n secrets: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationConfiguration {\n tags: Record<string, string>;\n retries: Retries;\n allow: ApplicationCapability[];\n version: string;\n}\n\nexport interface RegisteredDefinition {\n readonly name: string;\n readonly handler: (...args: unknown[]) => Promise<unknown>;\n readonly parameters: readonly Parameter<unknown>[];\n readonly returns: Schema<unknown>;\n readonly options: NormalizedFunctionOptions;\n readonly application?: ApplicationConfiguration;\n}\n\n// A string discriminator alone is valid user JSON and cannot safely identify\n// an SDK control-flow value. Symbol.for keeps the brand stable when the user\n// application and executor load separate copies of the SDK in one process.\nconst TAIL_CALL_BRAND: unique symbol = Symbol.for(\n \"tensorlake.applications.tail-call.v1\",\n);\n\nexport interface TailCall<T> {\n readonly [TAIL_CALL_BRAND]: true;\n readonly kind: \"tensorlake-tail-call\";\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n readonly _result?: T;\n}\n\nexport interface WaitOptions {\n timeout?: number;\n returnWhen?: \"all_completed\" | \"first_completed\" | \"first_failure\";\n}\n\nexport interface WaitResult<T> {\n done: FunctionFuture<T>[];\n notDone: FunctionFuture<T>[];\n}\n\nexport interface FunctionRuntime {\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T>;\n runFuture<T>(future: FunctionFuture<T>): Promise<T>;\n wrapFutureWait?<T>(promise: Promise<T>): Promise<T>;\n trackMixedPromiseRace?(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void;\n trackPromiseSettlement?(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean;\n trackDurablePromiseConsumption?(promise: Promise<unknown>): void;\n runPromiseAggregateConstruction?<T>(callback: () => T): T;\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T>;\n}\n\n// FunctionFuture observes durable promises to update its public completion\n// fields. That bookkeeping must not look like an application-level await to\n// the strict replay causality tracker. Symbol.for keeps the private observer\n// available when the application and executor use separate SDK bundles.\nexport const DURABLE_PROMISE_OBSERVER = Symbol.for(\n \"tensorlake.applications.durable-promise-observer.v1\",\n);\n\n// SDK combinators must be able to compose durable promises without making\n// their private bookkeeping look like a user continuation. The aggregate\n// returned to user code is wrapped separately.\nexport const DURABLE_PROMISE_INTERNAL_THEN = Symbol.for(\n \"tensorlake.applications.durable-promise-internal-then.v1\",\n);\n\ninterface ObservableDurablePromise<T> extends Promise<T> {\n [DURABLE_PROMISE_OBSERVER]?: (\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ) => void;\n [DURABLE_PROMISE_INTERNAL_THEN]?: <TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ) => Promise<TResult1 | TResult2>;\n}\n\n// The user application and function executor are separate bundles loaded into\n// one Node process. Store the runtime on globalThis so durable calls made by the\n// application SDK copy reach the executor SDK copy that installed the runtime.\nconst FUNCTION_RUNTIME_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.function-runtime-storage.v1\",\n);\n\nconst PROMISE_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-instrumented.v3\",\n);\n\nconst PROMISE_THEN_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-then-instrumented.v1\",\n);\n\nconst DURABLE_THENABLE_REGISTRY_KEY = Symbol.for(\n \"tensorlake.applications.durable-thenable-registry.v2\",\n);\n\nconst INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY = Symbol.for(\n \"tensorlake.applications.internal-promise-aggregate-depth.v1\",\n);\n\ninterface DurableAssimilationRegistration {\n active: boolean;\n readonly detach: () => void;\n}\n\ninterface DurableThenableMetadata {\n readonly aggregateExpectations: DurableAggregateExpectation[];\n readonly provenanceExpectations: DurableProvenanceExpectation[];\n}\n\ninterface DurableThenableProvenance {\n readonly metadata: DurableThenableMetadata;\n readonly assimilation?: DurableAssimilationRegistration;\n readonly detached?: true;\n}\n\ninterface DurableAggregateScope {\n settled: boolean;\n readonly metadata: Set<DurableThenableMetadata>;\n}\n\ninterface DurableAggregateExpectation {\n readonly scope: DurableAggregateScope;\n readonly creatorAsyncId: number;\n}\n\ninterface DurableProvenanceExpectation {\n readonly value: object;\n readonly creatorAsyncId: number;\n}\n\nexport interface DurableAssimilation {\n finish(): void;\n link<T extends object>(value: T): T;\n}\n\nlet futureCompletionCounter = 0;\n\nfunction runtimeStorage(): AsyncLocalStorage<FunctionRuntime> {\n const target = globalThis as typeof globalThis & {\n [FUNCTION_RUNTIME_STORAGE_KEY]?: AsyncLocalStorage<FunctionRuntime>;\n };\n target[FUNCTION_RUNTIME_STORAGE_KEY] ??= new AsyncLocalStorage<FunctionRuntime>();\n return target[FUNCTION_RUNTIME_STORAGE_KEY];\n}\n\nexport function currentFunctionRuntime(): FunctionRuntime | undefined {\n return runtimeStorage().getStore();\n}\n\nexport function runWithFunctionRuntime<T>(\n runtime: FunctionRuntime,\n callback: () => Promise<T>,\n): Promise<T> {\n return runtimeStorage().run(runtime, callback);\n}\n\nexport class FunctionFuture<T> implements PromiseLike<T> {\n readonly id = randomUUID();\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n private promise?: Promise<T>;\n private startDelaySeconds = 0;\n private completionOrder?: number;\n private failed = false;\n exception?: unknown;\n done = false;\n\n constructor(definition: RegisteredDefinition, args: readonly unknown[]) {\n this.definition = definition;\n this.args = args;\n registerDurableThenable(this);\n }\n\n run(): this {\n if (this.promise != null) throw new SDKUsageError(`Future ${this.id} is already running`);\n const runtime = currentFunctionRuntime();\n const promise = runtime == null\n ? executeHandler<T>(this.definition, this.args)\n : runtime.runFuture(this);\n // The future and its runtime promise are two views of the same durable\n // operation. Sharing provenance lets Promise.resolve/fan-in wrappers keep\n // the exact durable contender identity.\n registerDurableThenable(promise, this);\n this.promise = promise;\n const onfulfilled = (value: T) => {\n this.done = true;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n return value;\n };\n const onrejected = (error: unknown) => {\n this.done = true;\n this.failed = true;\n this.exception = error;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n };\n const observer = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_OBSERVER];\n if (observer != null) {\n observer.call(promise, onfulfilled, onrejected);\n } else {\n void promise.then(\n (value) => {\n onfulfilled(value);\n },\n (error) => {\n onrejected(error);\n },\n );\n }\n // The completion observer handles rejection without changing `this.promise`,\n // so result()/await still receive the original rejection while Node does not\n // treat an intentionally unawaited future as an unhandled rejection.\n return this;\n }\n\n runLater(delaySeconds: number): this {\n if (!Number.isFinite(delaySeconds) || delaySeconds < 0) {\n throw new SDKUsageError(\"Future delay must be a non-negative finite number\");\n }\n if (this.promise != null) {\n throw new SDKUsageError(`Future ${this.id} is already running`);\n }\n this.startDelaySeconds = delaySeconds;\n return this.run();\n }\n\n get delaySeconds(): number {\n return this.startDelaySeconds;\n }\n\n result(): Promise<T> {\n if (this.promise == null) this.run();\n return this.promise as Promise<T>;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.result().then(onfulfilled, onrejected);\n }\n\n static wait<T>(futures: FunctionFuture<T>[], options: WaitOptions = {}): Promise<WaitResult<T>> {\n const completion = FunctionFuture.waitForFutures(futures, options);\n // Returning the runtime wrapper lets strict replay observe when user code\n // awaits this aggregate promise. Merely creating a Future.wait remains\n // fire-and-forget and must not trigger a mismatch.\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n }\n\n private static async waitForFutures<T>(\n futures: FunctionFuture<T>[],\n options: WaitOptions,\n ): Promise<WaitResult<T>> {\n const returnWhen = options.returnWhen ?? \"all_completed\";\n if (![\"all_completed\", \"first_completed\", \"first_failure\"].includes(returnWhen)) {\n throw new SDKUsageError(`Unsupported Future.wait returnWhen value '${returnWhen}'`);\n }\n if (options.timeout != null && (!Number.isFinite(options.timeout) || options.timeout < 0)) {\n throw new SDKUsageError(\"Future.wait timeout must be a non-negative finite number\");\n }\n futures.forEach((future) => {\n if (future.promise == null) future.run();\n });\n const alreadyDone = futures.filter((future) => future.done);\n if (\n alreadyDone.length > 0\n && (\n returnWhen === \"first_completed\"\n || (\n returnWhen === \"first_failure\"\n && alreadyDone.some((future) => future.failed)\n )\n )\n ) {\n return {\n done: alreadyDone,\n notDone: futures.filter((future) => !future.done),\n };\n }\n const pending = futures.filter((future) => !future.done);\n if (pending.length === 0) {\n return { done: [...futures], notDone: [] };\n }\n let wait: Promise<FutureWaitOutcome<T>>;\n if (returnWhen === \"all_completed\") {\n wait = internalPromiseAll(\n pending.map((future) => internalDurableThen(future.result(),\n () => undefined,\n () => undefined,\n )),\n ).then(() => ({ kind: \"all_completed\" }));\n } else if (returnWhen === \"first_completed\") {\n wait = internalPromiseRace(\n pending.map((future) => internalDurableThen(future.result(),\n () => ({ kind: \"cutoff\", future } as const),\n () => ({ kind: \"cutoff\", future } as const),\n )),\n );\n } else {\n wait = new Promise((resolve) => {\n let remaining = pending.length;\n for (const future of pending) {\n void internalDurableThen(\n future.result(),\n () => {\n remaining -= 1;\n if (remaining === 0) resolve({ kind: \"all_completed\" });\n },\n () => resolve({ kind: \"cutoff\", future }),\n );\n }\n });\n }\n const outcome = await waitUntilOrTimeout(wait, options.timeout);\n if (outcome.kind === \"cutoff\") {\n const completionCutoff = outcome.future.completionOrder;\n if (completionCutoff == null) {\n throw new SDKUsageError(\"Future.wait winner has no completion order\");\n }\n const doneSet = new Set(alreadyDone);\n for (const future of pending) {\n if (\n future.done\n && future.completionOrder != null\n && future.completionOrder <= completionCutoff\n ) {\n doneSet.add(future);\n }\n }\n return {\n done: futures.filter((future) => doneSet.has(future)),\n notDone: futures.filter((future) => !doneSet.has(future)),\n };\n }\n return {\n done: futures.filter((future) => future.done),\n notDone: futures.filter((future) => !future.done),\n };\n }\n}\n\ntype FutureWaitOutcome<T> =\n | { kind: \"all_completed\" }\n | { kind: \"cutoff\"; future: FunctionFuture<T> };\n\nasync function waitUntilOrTimeout<T>(\n promise: Promise<T>,\n timeoutSeconds?: number,\n): Promise<T | { kind: \"timeout\" }> {\n if (timeoutSeconds == null) {\n return promise;\n }\n let timer: NodeJS.Timeout | undefined;\n try {\n return await internalPromiseRace<T | { kind: \"timeout\" }>([\n promise,\n new Promise<{ kind: \"timeout\" }>((resolve) => {\n timer = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutSeconds * 1000);\n }),\n ]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\ntype Awaitable<T> = T | PromiseLike<T>;\ntype AwaitableIterable<T> = Iterable<Awaitable<T>> | PromiseLike<Iterable<Awaitable<T>>>;\n\nfunction isDurableThenable(value: unknown): boolean {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return false;\n }\n return durableThenableRegistry().has(value);\n}\n\nexport function isDetachedDurableThenable(value: unknown): boolean {\n const provenance = provenanceForDurableThenable(value);\n return provenance?.detached === true\n || (provenance?.assimilation != null && !provenance.assimilation.active);\n}\n\nfunction durableThenableRegistry(): WeakMap<object, DurableThenableProvenance> {\n const target = globalThis as typeof globalThis & {\n [DURABLE_THENABLE_REGISTRY_KEY]?: WeakMap<object, DurableThenableProvenance>;\n };\n target[DURABLE_THENABLE_REGISTRY_KEY] ??=\n new WeakMap<object, DurableThenableProvenance>();\n return target[DURABLE_THENABLE_REGISTRY_KEY];\n}\n\nfunction newDurableThenableMetadata(): DurableThenableMetadata {\n return {\n aggregateExpectations: [],\n provenanceExpectations: [],\n };\n}\n\nfunction metadataForDurableThenable(value: unknown): DurableThenableMetadata | undefined {\n return provenanceForDurableThenable(value)?.metadata;\n}\n\nfunction provenanceForDurableThenable(\n value: unknown,\n): DurableThenableProvenance | undefined {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return undefined;\n }\n return durableThenableRegistry().get(value);\n}\n\nexport function registerDurableThenable<T extends object>(\n value: T,\n source?: object,\n): T {\n const registry = durableThenableRegistry();\n const metadata = source == null\n ? registry.get(value)?.metadata ?? newDurableThenableMetadata()\n : registry.get(source)?.metadata ?? newDurableThenableMetadata();\n registry.set(value, { metadata });\n if (source != null && !registry.has(source)) registry.set(source, { metadata });\n return value;\n}\n\nfunction registerDetachedDurableThenable<T extends object>(value: T): T {\n const registry = durableThenableRegistry();\n registry.set(value, {\n metadata: registry.get(value)?.metadata ?? newDurableThenableMetadata(),\n detached: true,\n });\n return value;\n}\n\nfunction inheritDurableThenable<T extends object>(value: T, source: object): T {\n const provenance = durableThenableRegistry().get(source);\n if (provenance == null) return value;\n durableThenableRegistry().set(value, provenance);\n if (provenance.assimilation == null) {\n provenance.metadata.provenanceExpectations.push({\n value,\n creatorAsyncId: executionAsyncId(),\n });\n }\n return value;\n}\n\n/**\n * Associates a replay-aware durable assimilation with its durable provenance.\n *\n * The returned handle marks normal settlement and links derived promises to\n * this exact assimilation. Promise aggregate construction can detach the\n * aggregate's internal reaction so it is not mistaken for application code\n * awaiting the returned aggregate.\n */\nexport function registerDurableAssimilation(\n value: object,\n detach: () => void,\n): DurableAssimilation {\n const metadata = metadataForDurableThenable(value);\n if (metadata == null) {\n return {\n finish: () => undefined,\n link: (linked) => linked,\n };\n }\n const registration: DurableAssimilationRegistration = {\n active: true,\n detach,\n };\n const provenanceIndex = metadata.provenanceExpectations.findIndex((expectation) =>\n expectation.creatorAsyncId !== executionAsyncId()\n );\n if (provenanceIndex >= 0) {\n const [expectation] = metadata.provenanceExpectations.splice(provenanceIndex, 1);\n durableThenableRegistry().set(expectation.value, {\n metadata,\n assimilation: registration,\n });\n }\n const expectationIndex = metadata.aggregateExpectations.findIndex((expectation) =>\n !expectation.scope.settled\n && expectation.creatorAsyncId !== executionAsyncId()\n );\n if (expectationIndex >= 0) {\n const [expectation] = metadata.aggregateExpectations.splice(expectationIndex, 1);\n associateAssimilationWithAggregate(registration, expectation.scope);\n }\n return {\n finish: () => finishDurableAssimilation(registration),\n link: <T extends object>(linked: T): T => {\n durableThenableRegistry().set(linked, {\n metadata,\n assimilation: registration,\n });\n return linked;\n },\n };\n}\n\nfunction associateAssimilationWithAggregate(\n registration: DurableAssimilationRegistration,\n scope: DurableAggregateScope,\n): void {\n if (!registration.active || scope.settled) return;\n finishDurableAssimilation(registration);\n registration.detach();\n}\n\nfunction finishDurableAssimilation(registration: DurableAssimilationRegistration): void {\n if (!registration.active) return;\n registration.active = false;\n}\n\nfunction trackDurableAggregate(\n runtime: FunctionRuntime,\n result: Promise<unknown>,\n durableContenders: readonly unknown[],\n markResult: boolean,\n): void {\n const scope: DurableAggregateScope = {\n settled: false,\n metadata: new Set<DurableThenableMetadata>(),\n };\n if (markResult) {\n // Constructing an aggregate attaches internal reactions to its durable\n // inputs, but that does not mean application code is awaiting the result.\n // Mark the aggregate itself as detached so a later user reaction becomes\n // the durable assimilation observed by strict replay.\n registerDetachedDurableThenable(result);\n }\n const creatorAsyncId = executionAsyncId();\n for (const contender of durableContenders) {\n const provenance = provenanceForDurableThenable(contender);\n if (provenance == null) continue;\n if (provenance.assimilation != null) {\n associateAssimilationWithAggregate(provenance.assimilation, scope);\n } else {\n provenance.metadata.aggregateExpectations.push({\n scope,\n creatorAsyncId,\n });\n }\n if (scope.metadata.has(provenance.metadata)) continue;\n const { metadata } = provenance;\n scope.metadata.add(metadata);\n }\n const settle = () => {\n if (scope.settled) return;\n scope.settled = true;\n for (const metadata of scope.metadata) {\n for (let index = metadata.aggregateExpectations.length - 1; index >= 0; index -= 1) {\n if (metadata.aggregateExpectations[index].scope === scope) {\n metadata.aggregateExpectations.splice(index, 1);\n }\n }\n }\n scope.metadata.clear();\n };\n // Promise.prototype.then still performs a user-observable Symbol.species\n // lookup even when invoked directly. The executor observes the native\n // promiseResolve async hook instead, so bookkeeping cannot call user code or\n // construct an extra subclass promise.\n if (runtime.trackPromiseSettlement?.(result, settle) !== true) settle();\n}\n\ninterface PromiseAggregateObservation {\n readonly ordinaryLifetime: Promise<void>;\n allOrdinaryValuesObservable: boolean;\n observeFulfillment(): void;\n observeRejection(): void;\n finishIteration(contenderCount: number): void;\n}\n\nfunction promiseAggregateObservation(\n kind: \"all\" | \"all_settled\" | \"any\",\n): PromiseAggregateObservation {\n let settleLifetime!: () => void;\n const ordinaryLifetime = new Promise<void>((resolve) => {\n settleLifetime = resolve;\n });\n let contenderCount: number | undefined;\n let fulfillmentCount = 0;\n let rejectionCount = 0;\n let settled = false;\n const maybeSettle = () => {\n if (settled) return;\n const canNoLongerAdvance = kind === \"any\"\n ? contenderCount != null && rejectionCount === contenderCount\n : kind === \"all\"\n ? rejectionCount > 0\n || (contenderCount != null && fulfillmentCount === contenderCount)\n : contenderCount != null\n && fulfillmentCount + rejectionCount === contenderCount;\n if (!canNoLongerAdvance) return;\n settled = true;\n settleLifetime();\n };\n return {\n ordinaryLifetime,\n allOrdinaryValuesObservable: true,\n observeFulfillment: () => {\n fulfillmentCount += 1;\n maybeSettle();\n },\n observeRejection: () => {\n rejectionCount += 1;\n maybeSettle();\n },\n finishIteration: (count) => {\n contenderCount = count;\n maybeSettle();\n },\n };\n}\n\nfunction observePromiseAggregateContender(\n normalized: unknown,\n observation: PromiseAggregateObservation,\n): unknown {\n if (\n (typeof normalized !== \"object\" && typeof normalized !== \"function\")\n || normalized == null\n ) {\n observation.allOrdinaryValuesObservable = false;\n return normalized;\n }\n let observedSettled = false;\n const observed = Object.create(null) as object;\n Object.defineProperty(observed, \"then\", {\n configurable: true,\n get: () => {\n const then = Reflect.get(normalized, \"then\", normalized) as unknown;\n if (typeof then !== \"function\") return then;\n return function observedThen(\n this: unknown,\n onfulfilled: unknown,\n onrejected: unknown,\n ): unknown {\n return Reflect.apply(then, normalized, [\n function observedFulfillment(this: unknown, value: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeFulfillment();\n }\n return typeof onfulfilled === \"function\"\n ? Reflect.apply(onfulfilled, this, [value])\n : undefined;\n },\n function observedRejection(this: unknown, reason: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeRejection();\n }\n if (typeof onrejected === \"function\") {\n return Reflect.apply(onrejected, this, [reason]);\n }\n throw reason;\n },\n ]);\n };\n },\n });\n return observed;\n}\n\n/**\n * Lets a native Promise aggregate algorithm retain control of iteration and\n * settlement while exposing each constructor-normalized contender.\n *\n * The facade constructs the real Promise subclass and delegates its `resolve`\n * lookup and calls back to that subclass. This preserves custom static resolve\n * behavior and the public result type without resolving an input twice.\n */\nfunction observedPromiseConstructor(\n constructor: PromiseConstructor,\n observeNormalized: (normalized: unknown) => unknown,\n): PromiseConstructor {\n const facade = function PromiseAggregateObservedConstructor(\n executor: (\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n ) => void,\n ): Promise<unknown> {\n return Reflect.construct(\n constructor,\n [executor],\n constructor,\n ) as Promise<unknown>;\n } as unknown as PromiseConstructor;\n Object.defineProperty(facade, \"resolve\", {\n configurable: true,\n get: () => {\n const promiseResolve = Reflect.get(constructor, \"resolve\", constructor) as unknown;\n if (typeof promiseResolve !== \"function\") return promiseResolve;\n return (value: unknown): unknown => {\n const normalized = Reflect.apply(promiseResolve, constructor, [value]) as unknown;\n return observeNormalized(normalized);\n };\n },\n });\n return facade;\n}\n\nfunction internalDurableThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n): Promise<TResult1 | TResult2> {\n const internalThen = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n promise,\n onfulfilled,\n onrejected,\n ) as Promise<TResult1 | TResult2>;\n }\n return promise.then(onfulfilled, onrejected);\n}\n\nfunction internalAwaitable<T>(value: Awaitable<T>): Promise<T> {\n if ((typeof value === \"object\" || typeof value === \"function\") && value != null) {\n const internalThen = (\n value as Partial<ObservableDurablePromise<T>>\n )[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n value,\n (resolved) => resolved,\n (error) => {\n throw error;\n },\n ) as Promise<T>;\n }\n }\n return Promise.resolve(value);\n}\n\nasync function resolveAwaitableIterable<T>(\n items: AwaitableIterable<T>,\n): Promise<T[]> {\n const iterable = await internalAwaitable(items);\n return internalPromiseAll([...iterable].map((item) => internalAwaitable(item)));\n}\n\nfunction wrapDurableAggregate<T>(completion: Promise<T>): Promise<T> {\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n}\n\nfunction runInternalPromiseAggregate<T>(callback: () => T): T {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] =\n (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) + 1;\n try {\n return callback();\n } finally {\n const remaining = (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 1) - 1;\n if (remaining === 0) delete target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY];\n else target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] = remaining;\n }\n}\n\nfunction isInternalPromiseAggregate(): boolean {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n return (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) > 0;\n}\n\nfunction internalPromiseAll<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]> {\n return runInternalPromiseAggregate(() => Promise.all(values));\n}\n\nfunction internalPromiseRace<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>> {\n return runInternalPromiseAggregate(() => Promise.race(values));\n}\n\nexport function installPromiseInstrumentation(): void {\n const target = globalThis as typeof globalThis & {\n [PROMISE_INSTRUMENTED_KEY]?: true;\n [PROMISE_THEN_INSTRUMENTED_KEY]?: true;\n };\n if (target[PROMISE_THEN_INSTRUMENTED_KEY] !== true) {\n const originalThen = Promise.prototype.then;\n Object.defineProperty(Promise.prototype, \"then\", {\n ...Object.getOwnPropertyDescriptor(Promise.prototype, \"then\"),\n value: function then(\n this: Promise<unknown>,\n onfulfilled?: ((value: unknown) => unknown) | null,\n onrejected?: ((reason: unknown) => unknown) | null,\n ): Promise<unknown> {\n const result = Reflect.apply(\n originalThen,\n this,\n [onfulfilled, onrejected],\n ) as Promise<unknown>;\n if (isDetachedDurableThenable(this)) {\n currentFunctionRuntime()?.trackDurablePromiseConsumption?.(result);\n }\n return result;\n },\n });\n target[PROMISE_THEN_INSTRUMENTED_KEY] = true;\n }\n if (target[PROMISE_INSTRUMENTED_KEY] === true) return;\n const originalRace = Promise.race;\n const originalAny = Promise.any;\n const originalAll = Promise.all;\n const originalAllSettled = Promise.allSettled;\n const originalResolve = Promise.resolve;\n\n // Promise.resolve normally hides a durable Promise subclass inside a native\n // Promise. Preserve the durable provenance on that wrapper so a subsequent\n // all/allSettled/race/any can still distinguish it from an independent\n // contender.\n Object.defineProperty(Promise, \"resolve\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"resolve\"),\n value: function resolve<T>(\n this: PromiseConstructor,\n value: T | PromiseLike<T>,\n ): Promise<Awaited<T>> {\n const result = Reflect.apply(originalResolve, this, [value]) as Promise<Awaited<T>>;\n if (isDurableThenable(value)) inheritDurableThenable(result, value as object);\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"race\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"race\"),\n value: function race<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalRace, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n } else {\n ordinaryContenderCount += 1;\n }\n return normalized;\n },\n );\n const construct = () =>\n Reflect.apply(\n originalRace,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (\n durableContenders.length > 0\n && ordinaryContenderCount > 0\n ) {\n runtime.trackMixedPromiseRace(result);\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"any\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"any\"),\n value: function any<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAny, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"any\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAny,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Once every ordinary contender rejects, only a durable contender\n // can advance Promise.any. A fulfillment may itself be a pending\n // promise that the public aggregate adopts, so the ordinary gate\n // must not expire merely because its fulfillment callback ran.\n // Stop treating the ordinary path as a producer when either it or\n // the public aggregate settles. The latter covers a durable winner\n // as well as fulfilled-value adoption and abrupt iterator failures.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A non-object custom resolve result makes native Promise.any reject\n // the aggregate. Retain that aggregate as the producer until the\n // rejection becomes observable.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"all\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"all\"),\n value: function all<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAll, this, [values]) as Promise<Awaited<T>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAll,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Ordinary inputs can advance Promise.all until one rejects or all\n // fulfill. The non-rejecting lifetime gate models that boundary\n // without observing the public result or invoking a thenable twice.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A custom resolve result that is not thenable makes the public\n // aggregate reject. Its own settlement is the only observable\n // producer boundary available.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"allSettled\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"allSettled\"),\n value: function allSettled<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<PromiseSettledResult<Awaited<T>>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(\n originalAllSettled,\n this,\n [values],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all_settled\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) yield value;\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAllSettled,\n observedConstructor,\n [trackedValues],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (observation.allOrdinaryValuesObservable) {\n // Ordinary inputs can advance Promise.allSettled until every one has\n // settled. The aggregate itself covers abrupt iterator/resolve\n // failures and durable completion.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n target[PROMISE_INSTRUMENTED_KEY] = true;\n}\n\nexport interface RegisteredFunction<Args extends readonly unknown[], Result> {\n (...args: Args): Promise<Result>;\n readonly definition: RegisteredDefinition;\n future(...args: Args): FunctionFuture<Result>;\n map(items: AwaitableIterable<Args[0]>): Promise<Result[]>;\n reduce(\n items: AwaitableIterable<Args[1]>,\n initial?: Args[0],\n ): Promise<Result>;\n tailCall(...args: Args): TailCall<Result>;\n}\n\nfunction normalizeOptions(options: FunctionOptions<readonly Parameter<unknown>[], unknown>): NormalizedFunctionOptions {\n validateGPUOption(options.gpu);\n if (options.secrets != null && !Array.isArray(options.secrets)) {\n throw new SDKUsageError(\"secrets must be an array of non-empty strings\");\n }\n const normalizedRetries = options.retries == null\n ? undefined\n : retries(options.retries);\n const result: NormalizedFunctionOptions = {\n description: options.description ?? \"\",\n cpu: options.cpu ?? 1,\n memory: options.memory ?? 1,\n ephemeralDisk: options.ephemeralDisk ?? 10,\n gpu: Array.isArray(options.gpu) ? [...options.gpu] : options.gpu ?? null,\n timeout: options.timeout ?? 300,\n image: options.image,\n secrets: [...(options.secrets ?? [])],\n retries: normalizedRetries,\n region: options.region,\n warmContainers: options.warmContainers,\n minContainers: options.minContainers,\n maxContainers: options.maxContainers,\n };\n if (!Number.isFinite(result.cpu) || result.cpu <= 0) throw new SDKUsageError(\"cpu must be greater than zero\");\n if (!Number.isFinite(result.memory) || result.memory <= 0) throw new SDKUsageError(\"memory must be greater than zero\");\n if (!Number.isFinite(result.ephemeralDisk) || result.ephemeralDisk <= 0) throw new SDKUsageError(\"ephemeralDisk must be greater than zero\");\n if (!Number.isInteger(result.timeout) || result.timeout <= 0 || result.timeout > 86_400) {\n throw new SDKUsageError(\"timeout must be an integer between 1 and 86400 seconds\");\n }\n for (const [label, value] of [\n [\"warmContainers\", result.warmContainers],\n [\"minContainers\", result.minContainers],\n [\"maxContainers\", result.maxContainers],\n ] as const) {\n if (value != null && (!Number.isInteger(value) || value < 0)) {\n throw new SDKUsageError(`${label} must be a non-negative integer`);\n }\n }\n if (result.minContainers != null && result.maxContainers != null && result.minContainers > result.maxContainers) {\n throw new SDKUsageError(\"minContainers cannot exceed maxContainers\");\n }\n if (result.warmContainers != null && result.maxContainers != null && result.warmContainers > result.maxContainers) {\n throw new SDKUsageError(\"warmContainers cannot exceed maxContainers\");\n }\n if (result.region != null && ![\"us-east-1\", \"eu-west-1\"].includes(result.region)) {\n throw new SDKUsageError(`Unsupported region '${result.region}'`);\n }\n if (result.secrets.some((secret) => typeof secret !== \"string\" || secret.length === 0)) {\n throw new SDKUsageError(\"secrets must contain non-empty strings\");\n }\n return result;\n}\n\nfunction validateGPUOption(value: unknown): void {\n if (value == null) return;\n const values = Array.isArray(value) ? value : [value];\n for (const setting of values) {\n if (typeof setting !== \"string\") {\n throw new SDKUsageError(\"gpu must be a GPU model or an array of GPU models\");\n }\n const [model, countText, ...extra] = setting.split(\":\");\n const count = countText == null ? 1 : Number(countText);\n if (\n !model\n || extra.length > 0\n || !Number.isInteger(count)\n || count <= 0\n || (countText != null && String(count) !== countText)\n ) {\n throw new SDKUsageError(`Invalid GPU setting '${setting}'`);\n }\n }\n}\n\nfunction validateArguments(definition: RegisteredDefinition, supplied: readonly unknown[]): unknown[] {\n const args = [...supplied];\n if (args.length > definition.parameters.length) {\n throw new SDKUsageError(`${definition.name} expected at most ${definition.parameters.length} arguments, received ${args.length}`);\n }\n definition.parameters.forEach((parameter, index) => {\n if (index >= args.length || args[index] === undefined) {\n if (parameter.hasDefault) args[index] = parameter.defaultValue;\n else if (parameter.required) throw new SDKUsageError(`${definition.name} is missing argument '${parameter.name}'`);\n return;\n }\n validateWithSchema(parameter.schema, args[index], `${definition.name}.${parameter.name}`);\n });\n return args;\n}\n\nexport async function executeHandler<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T> {\n const output = await executeHandlerResult<T>(definition, suppliedArgs);\n if (isTailCall(output)) {\n const runtime = currentFunctionRuntime();\n if (runtime == null) return executeHandler<T>(output.definition, output.args);\n return runtime.invoke<T>(output.definition, output.args);\n }\n return output;\n}\n\n/** Runs one handler frame without resolving a tail call. Used by language executors. */\nexport async function executeHandlerResult<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T | TailCall<T>> {\n const args = validateArguments(definition, suppliedArgs);\n const result = definition.handler(...args);\n if (result == null || typeof (result as PromiseLike<unknown>).then !== \"function\") {\n throw new SDKUsageError(`Tensorlake handler '${definition.name}' must be async and return a Promise`);\n }\n const output = await result;\n if (isTailCall(output)) {\n return output as TailCall<T>;\n }\n validateWithSchema(definition.returns, output, `${definition.name} return value`);\n return output as T;\n}\n\nexport function isTailCall(value: unknown): value is TailCall<unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Partial<TailCall<unknown>>;\n return candidate[TAIL_CALL_BRAND] === true\n && candidate.kind === \"tensorlake-tail-call\"\n && typeof candidate.definition === \"object\"\n && candidate.definition != null\n && Array.isArray(candidate.args);\n}\n\nfunction createRegisteredFunction<Args extends readonly unknown[], Result>(\n definition: RegisteredDefinition,\n): RegisteredFunction<Args, Result> {\n const callable = ((...args: Args): Promise<Result> => {\n const runtime = currentFunctionRuntime();\n return runtime == null\n ? executeHandler<Result>(definition, args)\n : runtime.invoke<Result>(definition, args);\n }) as RegisteredFunction<Args, Result>;\n Object.defineProperties(callable, {\n definition: { value: definition, enumerable: true },\n future: { value: (...args: Args) => new FunctionFuture<Result>(definition, args) },\n map: {\n value: (items: AwaitableIterable<Args[0]>) => {\n // Resolve inputs before assigning durable IDs. Awaiting each input inside\n // the invocation loop would make call order depend on promise timing,\n // allowing strict replay to associate a recorded result with a different\n // input while still matching the durable event sequence.\n const completion = (async () => {\n const resolvedItems = await resolveAwaitableIterable(items);\n return internalPromiseAll(\n resolvedItems.map((item) =>\n internalAwaitable(callable(...([item] as unknown as Args)))\n ),\n );\n })();\n return wrapDurableAggregate(completion);\n },\n },\n reduce: {\n value: (\n items: AwaitableIterable<Args[1]>,\n ...initialValues: [] | [Args[0]]\n ) => {\n const completion = (async () => {\n let values = await resolveAwaitableIterable(items);\n const hasInitial = initialValues.length > 0;\n let initial: unknown = initialValues[0];\n const runtime = currentFunctionRuntime();\n if (runtime != null) {\n return internalAwaitable(\n runtime.reduce<Result>(definition, values, initial, hasInitial),\n );\n }\n if (!hasInitial) {\n if (values.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [initial, ...values] = values;\n }\n let accumulator = initial as Result | Args[0];\n for (const item of values) {\n accumulator = await internalAwaitable(\n callable(...([accumulator, item] as unknown as Args)),\n );\n }\n return accumulator as Result;\n })();\n return wrapDurableAggregate(completion);\n },\n },\n tailCall: {\n value: (...args: Args): TailCall<Result> => ({\n [TAIL_CALL_BRAND]: true,\n kind: \"tensorlake-tail-call\",\n definition,\n args,\n }),\n },\n });\n return callable;\n}\n\nfunction register<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result> | ApplicationOptions<P, Result>,\n application: boolean,\n): RegisteredFunction<ParameterValues<P>, Result> {\n const name = options.name ?? handler.name;\n if (!name) throw new SDKUsageError(\"Anonymous Tensorlake handlers require an explicit name\");\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) throw new SDKUsageError(`Invalid Tensorlake function name '${name}'`);\n let applicationRetries: Retries | undefined;\n if (application) {\n const appOptions = options as ApplicationOptions<P, Result>;\n applicationRetries = retries(appOptions.applicationRetries ?? { maxRetries: 0 });\n if (\n appOptions.allow != null\n && (\n !Array.isArray(appOptions.allow)\n || appOptions.allow.some((capability) =>\n capability !== \"unauthenticated_requests\"\n )\n )\n ) {\n throw new SDKUsageError(\n \"Application allow must contain only 'unauthenticated_requests'\",\n );\n }\n const tags = appOptions.tags;\n const tagsPrototype = tags == null || typeof tags !== \"object\"\n ? undefined\n : Object.getPrototypeOf(tags);\n if (\n tags != null\n && (\n typeof tags !== \"object\"\n || Array.isArray(tags)\n || (tagsPrototype !== Object.prototype && tagsPrototype !== null)\n || Reflect.ownKeys(tags).some((key) =>\n typeof key !== \"string\"\n || !key\n || typeof (tags as Record<PropertyKey, unknown>)[key] !== \"string\"\n )\n )\n ) {\n throw new SDKUsageError(\"Application tags require non-empty string keys and string values\");\n }\n }\n if (!Array.isArray(options.parameters)) {\n throw new SDKUsageError(\"Tensorlake registration parameters must be an array\");\n }\n if (\n typeof options.returns !== \"object\"\n || options.returns == null\n || typeof options.returns.jsonSchema !== \"object\"\n || options.returns.jsonSchema == null\n ) {\n throw new SDKUsageError(\"Tensorlake registration returns must be a schema\");\n }\n const parameterNames = new Set<string>();\n for (const parameter of options.parameters) {\n if (\n typeof parameter !== \"object\"\n || parameter == null\n || typeof parameter.name !== \"string\"\n || typeof parameter.schema !== \"object\"\n || parameter.schema == null\n || typeof parameter.schema.jsonSchema !== \"object\"\n || parameter.schema.jsonSchema == null\n || typeof parameter.required !== \"boolean\"\n || typeof parameter.hasDefault !== \"boolean\"\n ) {\n throw new SDKUsageError(\n \"Tensorlake registration parameters must be created with schema.parameter()\",\n );\n }\n if (parameterNames.has(parameter.name)) {\n throw new SDKUsageError(`Duplicate Tensorlake parameter name '${parameter.name}'`);\n }\n parameterNames.add(parameter.name);\n }\n const httpBodyParameter = options.parameters.find(\n (parameter) => parameter.schema._httpBody,\n );\n if (httpBodyParameter != null && !application) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters\",\n );\n }\n if (options.returns._httpBody) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters; \"\n + \"use schema.file() or a JSON-compatible return schema instead\",\n );\n }\n const definition: RegisteredDefinition = {\n name,\n handler: handler as (...args: unknown[]) => Promise<unknown>,\n parameters: [...options.parameters],\n returns: options.returns as Schema<unknown>,\n options: normalizeOptions(options as FunctionOptions<readonly Parameter<unknown>[], unknown>),\n application: application\n ? {\n tags: { ...((options as ApplicationOptions<P, Result>).tags ?? {}) },\n retries: applicationRetries as Retries,\n allow: [...((options as ApplicationOptions<P, Result>).allow ?? [])],\n version: randomUUID().replaceAll(\"-\", \"\"),\n }\n : undefined,\n };\n registerDefinition(definition, application);\n return createRegisteredFunction(definition);\n}\n\ntype SimpleResult<Output> = Output extends TailCall<infer Result> ? Result : Output;\ntype RuntimeHandler = (...args: never[]) => Promise<unknown>;\n\nfunction hasExplicitSchemas(\n value: unknown,\n): value is FunctionOptions<readonly Parameter<unknown>[], unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const hasParameters = Object.prototype.hasOwnProperty.call(value, \"parameters\");\n const hasReturns = Object.prototype.hasOwnProperty.call(value, \"returns\");\n if (hasParameters !== hasReturns) {\n throw new SDKUsageError(\"Tensorlake registrations must specify both parameters and returns\");\n }\n return hasParameters;\n}\n\nfunction skipJavaScriptLiteral(source: string, start: number): number {\n const quote = source[start];\n let escaped = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === quote) {\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptComment(source: string, start: number): number | undefined {\n if (source[start] !== \"/\") return undefined;\n if (source[start + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", start + 2);\n return newline < 0 ? source.length - 1 : newline;\n }\n if (source[start + 1] === \"*\") {\n const end = source.indexOf(\"*/\", start + 2);\n return end < 0 ? source.length - 1 : end + 1;\n }\n return undefined;\n}\n\nfunction skipJavaScriptTrivia(source: string, start: number): number {\n let index = start;\n while (index < source.length) {\n while (index < source.length && /\\s/.test(source[index])) index += 1;\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return index;\n}\n\nconst REGEX_PREFIX_KEYWORDS = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nfunction regexLiteralStartsAt(source: string, start: number): boolean {\n let expectsExpression = true;\n for (let index = 0; index < start; index += 1) {\n const character = source[index];\n if (/\\s/.test(character)) continue;\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n index = skipJavaScriptLiteral(source, index);\n expectsExpression = false;\n continue;\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) {\n index = commentEnd;\n continue;\n }\n if (/[A-Za-z_$]/.test(character)) {\n let tokenEnd = index + 1;\n while (tokenEnd < start && /[A-Za-z0-9_$]/.test(source[tokenEnd])) tokenEnd += 1;\n expectsExpression = REGEX_PREFIX_KEYWORDS.has(source.slice(index, tokenEnd));\n index = tokenEnd - 1;\n continue;\n }\n if (/[0-9]/.test(character) || (character === \".\" && /[0-9]/.test(source[index + 1]))) {\n while (index + 1 < start && /[A-Za-z0-9_.]/.test(source[index + 1])) index += 1;\n expectsExpression = false;\n continue;\n }\n if (character === \"/\") {\n if (expectsExpression) {\n index = skipJavaScriptRegex(source, index);\n expectsExpression = false;\n } else {\n if (source[index + 1] === \"=\") index += 1;\n expectsExpression = true;\n }\n continue;\n }\n if (character === \")\" || character === \"]\" || character === \"}\") {\n expectsExpression = false;\n continue;\n }\n if (character === \".\") {\n if (source.slice(index, index + 3) === \"...\") {\n index += 2;\n expectsExpression = true;\n } else {\n expectsExpression = false;\n }\n continue;\n }\n if ((character === \"+\" || character === \"-\") && source[index + 1] === character) {\n index += 1;\n continue;\n }\n expectsExpression = true;\n }\n return expectsExpression;\n}\n\nfunction skipJavaScriptRegex(source: string, start: number): number {\n let escaped = false;\n let characterClass = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === \"[\") {\n characterClass = true;\n } else if (character === \"]\") {\n characterClass = false;\n } else if (character === \"/\" && !characterClass) {\n while (index + 1 < source.length && /[A-Za-z]/.test(source[index + 1])) index += 1;\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptValue(source: string, index: number): number | undefined {\n const character = source[index];\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n return skipJavaScriptLiteral(source, index);\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) return commentEnd;\n if (character === \"/\" && regexLiteralStartsAt(source, index)) {\n return skipJavaScriptRegex(source, index);\n }\n return undefined;\n}\n\nfunction findTopLevelArrow(source: string): number {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length - 1; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") {\n // A top-level block before an arrow is a classic function or method\n // body. Its nested arrows cannot describe the handler parameters.\n if (parentheses === 0 && brackets === 0 && braces === 0) return -1;\n braces += 1;\n }\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && source[index + 1] === \">\" && parentheses === 0 && brackets === 0 && braces === 0) {\n return index;\n }\n }\n return -1;\n}\n\nfunction findClosingParenthesis(source: string, open: number): number {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") depth += 1;\n else if (character === \")\" && --depth === 0) return index;\n }\n return -1;\n}\n\nfunction findOpeningParenthesis(source: string): number {\n for (let index = 0; index < source.length; index += 1) {\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (source[index] === \"(\") return index;\n }\n return -1;\n}\n\nfunction splitTopLevelParameters(source: string): string[] {\n if (source.trim() === \"\") return [];\n const result: string[] = [];\n let start = 0;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \",\" && parentheses === 0 && brackets === 0 && braces === 0) {\n result.push(source.slice(start, index).trim());\n start = index + 1;\n }\n }\n const final = source.slice(start).trim();\n if (final !== \"\") result.push(final);\n return result;\n}\n\nfunction hasTopLevelDefault(source: string): boolean {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && parentheses === 0 && brackets === 0 && braces === 0) return true;\n }\n return false;\n}\n\nfunction declaredHandlerParameters(handler: RuntimeHandler): string[] {\n const source = Function.prototype.toString.call(handler).trim();\n if (source.includes(\"[native code]\")) {\n throw new SDKUsageError(\"Schema-free registration cannot inspect a native or bound handler; specify parameters and returns\");\n }\n const arrow = findTopLevelArrow(source);\n if (arrow >= 0) {\n let header = source.slice(0, arrow).trim();\n if (\n header.startsWith(\"async\")\n && !/[A-Za-z0-9_$]/.test(header[\"async\".length] ?? \"\")\n ) {\n header = header.slice(skipJavaScriptTrivia(header, \"async\".length));\n }\n if (!header.startsWith(\"(\")) return [header];\n const close = findClosingParenthesis(header, 0);\n if (close < 0) throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n return splitTopLevelParameters(header.slice(1, close));\n }\n const open = findOpeningParenthesis(source);\n const close = open < 0 ? -1 : findClosingParenthesis(source, open);\n if (open < 0 || close < 0) {\n throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n }\n return splitTopLevelParameters(source.slice(open + 1, close));\n}\n\nfunction inferredJSONParameters(handler: RuntimeHandler): readonly Parameter<unknown>[] {\n const parameters = declaredHandlerParameters(handler);\n if (parameters.some((parameter) => {\n let index = 0;\n while (index < parameter.length) {\n while (index < parameter.length && /\\s/.test(parameter[index])) index += 1;\n const commentEnd = skipJavaScriptComment(parameter, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return parameter.slice(index).startsWith(\"...\");\n })) {\n throw new SDKUsageError(\n \"Schema-free registration does not support rest parameters; specify explicit parameters and returns\",\n );\n }\n return parameters.map((parameter, index) => schema.parameter(\n parameters.length === 1 ? \"input\" : `arg${index}`,\n schema.json(),\n hasTopLevelDefault(parameter) ? { optional: true } : {},\n ));\n}\n\nfunction registerWithDefaults(\n name: string,\n handler: RuntimeHandler,\n options: SimpleFunctionOptions | SimpleApplicationOptions,\n application: boolean,\n): RegisteredFunction<readonly unknown[], unknown> {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n {\n ...options,\n name,\n parameters: inferredJSONParameters(handler),\n returns: schema.json(),\n },\n application,\n );\n}\n\nexport function registerFunction<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\n\nexport function registerFunction<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleFunctionOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerFunction(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleFunctionOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerFunction(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n false,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerFunction requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerFunction received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n false,\n );\n }\n throw new SDKUsageError(\n \"Schema-free functions require an explicit stable name: registerFunction(name, handler)\",\n );\n}\n\nexport function registerApplication<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: ApplicationOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\nexport function registerApplication<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleApplicationOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerApplication(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleApplicationOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerApplication(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n true,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerApplication requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerApplication received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n true,\n );\n }\n throw new SDKUsageError(\n \"Schema-free applications require an explicit stable name: registerApplication(name, handler)\",\n );\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport type JSONSchema = Record<string, unknown>;\n\nconst TYPE = Symbol(\"tensorlake.schema.type\");\n// SDK-generated schemas use JSON Schema 2020-12 features such as prefixItems.\n// Validate with the same dialect that we emit into application manifests so\n// local/executor checks cannot silently accept values the public schema rejects.\nconst ajvDraft7 = new Ajv({ allErrors: true, strict: false });\nconst ajv2020 = new Ajv2020({ allErrors: true, strict: false });\n\nexport interface Schema<T> {\n readonly jsonSchema: JSONSchema;\n readonly [TYPE]?: T;\n readonly _file?: boolean;\n readonly _httpBody?: boolean;\n}\n\nexport type Infer<S extends Schema<unknown>> = S extends Schema<infer T> ? T : never;\n\nexport interface ParameterOptions<T> {\n description?: string;\n optional?: boolean;\n default?: T;\n}\n\nexport interface Parameter<T> {\n readonly name: string;\n readonly schema: Schema<T>;\n readonly description?: string;\n readonly required: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: T;\n}\n\nexport type ParameterValues<P extends readonly Parameter<unknown>[]> = {\n [K in keyof P]: P[K] extends Parameter<infer T> ? T : never;\n};\n\nfunction snapshotJSONValue(\n value: unknown,\n label: string,\n ancestors: Set<object>,\n freeze: boolean,\n): unknown {\n if (\n value == null\n || typeof value === \"string\"\n || typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new SDKUsageError(`${label} contains a non-finite number`);\n }\n return value;\n }\n if (typeof value !== \"object\") {\n throw new SDKUsageError(`${label} contains unsupported ${typeof value}`);\n }\n if (ancestors.has(value)) {\n throw new SDKUsageError(`${label} contains a cycle`);\n }\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {\n throw new SDKUsageError(\n `${label} contains unsupported ${value.constructor?.name ?? \"object\"}`,\n );\n }\n\n ancestors.add(value);\n let result: unknown[] | Record<string, unknown>;\n if (Array.isArray(value)) {\n result = [];\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SDKUsageError(`${label} contains a sparse array entry at index ${index}`);\n }\n result.push(snapshotJSONValue(\n value[index],\n `${label}[${index}]`,\n ancestors,\n freeze,\n ));\n }\n } else {\n result = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n snapshotJSONValue(item, `${label}.${key}`, ancestors, freeze),\n ]),\n );\n }\n ancestors.delete(value);\n return freeze ? Object.freeze(result) : result;\n}\n\nfunction snapshotJSONSchema(jsonSchema: JSONSchema): JSONSchema {\n return snapshotJSONValue(\n jsonSchema,\n \"JSON schema\",\n new Set(),\n true,\n ) as JSONSchema;\n}\n\nfunction snapshotDefault<T>(valueSchema: Schema<T>, value: T): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake File\");\n }\n return new File(new Uint8Array(value.content), value.contentType) as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake HttpBody\");\n }\n return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n }\n return snapshotJSONValue(\n value,\n \"parameter default\",\n new Set(),\n false,\n ) as T;\n}\n\nfunction makeSchema<T>(\n jsonSchema: JSONSchema,\n rawBody?: \"file\" | \"httpBody\",\n): Schema<T> {\n return Object.freeze({\n jsonSchema: snapshotJSONSchema(jsonSchema),\n _file: rawBody === \"file\",\n _httpBody: rawBody === \"httpBody\",\n });\n}\n\nfunction rejectRawBodyComposition(\n operation: string,\n values: readonly Schema<unknown>[],\n): void {\n const rawBody = values.find((value) => value._file || value._httpBody);\n if (rawBody != null) {\n const factory = rawBody._httpBody ? \"httpBody\" : \"file\";\n const type = rawBody._httpBody ? \"HttpBody\" : \"File\";\n const supportedPosition = rawBody._httpBody\n ? \"as a direct application parameter\"\n : \"as a direct parameter or return value\";\n throw new SDKUsageError(\n `schema.${operation} cannot contain schema.${factory}(); ${type} is only supported`\n + ` ${supportedPosition}`,\n );\n }\n}\n\nfunction parameter<T>(\n name: string,\n valueSchema: Schema<T>,\n options: ParameterOptions<T> = {},\n): Parameter<T> {\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) {\n throw new SDKUsageError(`Invalid parameter name '${name}'`);\n }\n const hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n if (hasDefault) validateWithSchema(valueSchema, options.default, `default for '${name}'`);\n const defaultSnapshot = hasDefault\n ? snapshotDefault(valueSchema, options.default as T)\n : undefined;\n return Object.freeze({\n name,\n schema: valueSchema,\n description: options.description,\n required: options.optional !== true && !hasDefault,\n hasDefault,\n // Defaults cross two public boundaries: callers can inspect the registered\n // definition, and every invocation receives the default when an argument is\n // omitted. Return a fresh boundary copy so neither path can mutate the\n // registration snapshot, later invocations, or generated manifests.\n get defaultValue(): T | undefined {\n return hasDefault\n ? snapshotDefault(valueSchema, defaultSnapshot as T)\n : undefined;\n },\n });\n}\n\nexport const schema = {\n /** Any JSON-serializable value. Useful when strict runtime validation is not needed. */\n json: <T = unknown>() => makeSchema<T>({}),\n string: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<string>({ ...options, type: \"string\" }),\n number: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"number\" }),\n integer: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"integer\" }),\n boolean: () => makeSchema<boolean>({ type: \"boolean\" }),\n null: () => makeSchema<null>({ type: \"null\" }),\n literal: <T extends string | number | boolean | null>(value: T) =>\n makeSchema<T>({ const: value }),\n enum: <const T extends readonly (string | number)[]>(values: T) =>\n makeSchema<T[number]>({ enum: [...values] }),\n array: <S extends Schema<unknown>>(item: S, options: Omit<JSONSchema, \"type\" | \"items\"> = {}) => {\n rejectRawBodyComposition(\"array\", [item]);\n return makeSchema<Infer<S>[]>({ ...options, type: \"array\", items: item.jsonSchema });\n },\n tuple: <const S extends readonly Schema<unknown>[]>(items: S) => {\n rejectRawBodyComposition(\"tuple\", items);\n return makeSchema<{ [K in keyof S]: S[K] extends Schema<infer T> ? T : never }>({\n type: \"array\",\n prefixItems: items.map((item) => item.jsonSchema),\n minItems: items.length,\n maxItems: items.length,\n });\n },\n record: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"record\", [value]);\n return makeSchema<Record<string, Infer<S>>>({\n type: \"object\",\n additionalProperties: value.jsonSchema,\n });\n },\n object: <const P extends Record<string, Schema<unknown>>>(properties: P) => {\n rejectRawBodyComposition(\"object\", Object.values(properties));\n return makeSchema<{ [K in keyof P]: P[K] extends Schema<infer T> ? T : never }>({\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(properties).map(([key, item]) => [key, item.jsonSchema]),\n ),\n required: Object.keys(properties),\n additionalProperties: false,\n });\n },\n union: <const S extends readonly Schema<unknown>[]>(...choices: S) => {\n rejectRawBodyComposition(\"union\", choices);\n return makeSchema<Infer<S[number]>>({ anyOf: choices.map((choice) => choice.jsonSchema) });\n },\n nullable: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"nullable\", [value]);\n return makeSchema<Infer<S> | null>({ anyOf: [value.jsonSchema, { type: \"null\" }] });\n },\n file: () => makeSchema<File>({ type: \"tensorlake_file\" }, \"file\"),\n httpBody: () =>\n makeSchema<HttpBody>({ type: \"tensorlake_http_body\" }, \"httpBody\"),\n custom: <T>(jsonSchema: JSONSchema) => makeSchema<T>({ ...jsonSchema }),\n parameter,\n};\n\ninterface CachedValidator {\n readonly validate: ValidateFunction;\n readonly errorsText: (errors: ValidateFunction[\"errors\"]) => string;\n}\n\nconst validatorCache = new WeakMap<object, CachedValidator>();\n\nfunction compileValidator(jsonSchema: JSONSchema): CachedValidator {\n // Earlier SDK versions validated custom schemas with Ajv's draft-07\n // default. Preserve that behavior for explicitly declared draft-07 schemas\n // while using 2020-12 for SDK-generated schemas and custom schemas without a\n // dialect declaration.\n const dialect = jsonSchema.$schema;\n const engine = typeof dialect === \"string\" && /\\/draft-07\\/schema#?$/.test(dialect)\n ? ajvDraft7\n : ajv2020;\n const validate = engine.compile(jsonSchema);\n return {\n validate,\n errorsText: (errors) => engine.errorsText(errors, { separator: \"; \" }),\n };\n}\n\nexport function validateWithSchema<T>(valueSchema: Schema<T>, value: unknown, label: string): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake File`);\n }\n return value as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake HttpBody`);\n }\n return value as T;\n }\n if (isFile(value)) {\n throw new SDKUsageError(`${label} must use schema.file() for a Tensorlake File`);\n }\n if (isHttpBody(value)) {\n throw new SDKUsageError(\n `${label} must use schema.httpBody() for a Tensorlake HttpBody`,\n );\n }\n let cached = validatorCache.get(valueSchema as object);\n if (cached == null) {\n try {\n cached = compileValidator(valueSchema.jsonSchema);\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new SDKUsageError(`${label} uses an invalid JSON schema: ${details}`);\n }\n validatorCache.set(valueSchema as object, cached);\n }\n if (!cached.validate(value)) {\n const details = cached.errorsText(cached.validate.errors);\n throw new SDKUsageError(`${label} does not match its schema: ${details}`);\n }\n return value as T;\n}\n\nexport function parameterJSONSchema(parameter: Parameter<unknown>): JSONSchema {\n const result: JSONSchema = {\n ...parameter.schema.jsonSchema,\n title: parameter.name,\n parameter_kind: \"POSITIONAL_OR_KEYWORD\",\n };\n if (parameter.description != null) result.description = parameter.description;\n if (parameter.hasDefault) {\n result.default = parameter.schema._file || parameter.schema._httpBody\n ? true\n : parameter.defaultValue;\n }\n return result;\n}\n","import type { RegisteredDefinition } from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\ninterface RegistryState {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nexport interface RegistrySnapshot {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nconst REGISTRY_KEY = Symbol.for(\"tensorlake.applications.registry.v1\");\n\nfunction registry(): RegistryState {\n const target = globalThis as typeof globalThis & { [REGISTRY_KEY]?: RegistryState };\n target[REGISTRY_KEY] ??= { functions: new Map(), applications: new Map() };\n return target[REGISTRY_KEY];\n}\n\nexport function registerDefinition(definition: RegisteredDefinition, isApplication: boolean): void {\n const state = registry();\n const existing = state.functions.get(definition.name);\n if (existing != null && existing !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake functions are named '${definition.name}'`);\n }\n state.functions.set(definition.name, definition);\n if (isApplication) {\n const app = state.applications.get(definition.name);\n if (app != null && app !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake applications are named '${definition.name}'`);\n }\n state.applications.set(definition.name, definition);\n }\n}\n\nexport function getFunction(name: string): RegisteredDefinition {\n const result = registry().functions.get(name);\n if (result == null) throw new SDKUsageError(`Tensorlake function '${name}' is not registered`);\n return result;\n}\n\nexport function getFunctions(): RegisteredDefinition[] {\n return [...registry().functions.values()];\n}\n\nexport function getApplications(): RegisteredDefinition[] {\n return [...registry().applications.values()];\n}\n\nexport function snapshotRegistry(): RegistrySnapshot {\n const state = registry();\n return {\n functions: new Map(state.functions),\n applications: new Map(state.applications),\n };\n}\n\nexport function restoreRegistry(snapshot: RegistrySnapshot): void {\n const state = registry();\n state.functions.clear();\n state.applications.clear();\n for (const [name, definition] of snapshot.functions) state.functions.set(name, definition);\n for (const [name, definition] of snapshot.applications) state.applications.set(name, definition);\n}\n\nexport function clearRegistryForTest(): void {\n registry().functions.clear();\n registry().applications.clear();\n}\n"],"mappings":"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","names":["detectLinuxLibc","fs","read","count","path","fileURLToPath","require","createRequire","createRequire","createHash","path","path","AsyncLocalStorage","AsyncLocalStorage","createHash","path"]}