@workglow/util 0.2.29 → 0.2.31
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.
- package/dist/browser.js +71 -34
- package/dist/browser.js.map +8 -8
- package/dist/bun.js +71 -34
- package/dist/bun.js.map +8 -8
- package/dist/credentials/CredentialStoreRegistry.d.ts +19 -6
- package/dist/credentials/CredentialStoreRegistry.d.ts.map +1 -1
- package/dist/di/InputCompactorRegistry.d.ts +8 -4
- package/dist/di/InputCompactorRegistry.d.ts.map +1 -1
- package/dist/di/InputResolverRegistry.d.ts +8 -4
- package/dist/di/InputResolverRegistry.d.ts.map +1 -1
- package/dist/logging/LoggerRegistry.d.ts +10 -4
- package/dist/logging/LoggerRegistry.d.ts.map +1 -1
- package/dist/media/imageHydrationResolver.d.ts +6 -1
- package/dist/media/imageHydrationResolver.d.ts.map +1 -1
- package/dist/media-browser.d.ts +1 -0
- package/dist/media-browser.d.ts.map +1 -1
- package/dist/media-browser.js +17 -8
- package/dist/media-browser.js.map +5 -5
- package/dist/media-node.d.ts +1 -0
- package/dist/media-node.d.ts.map +1 -1
- package/dist/media-node.js +17 -8
- package/dist/media-node.js.map +5 -5
- package/dist/node.js +71 -34
- package/dist/node.js.map +8 -8
- package/dist/telemetry/TelemetryRegistry.d.ts +10 -4
- package/dist/telemetry/TelemetryRegistry.d.ts.map +1 -1
- package/dist/worker/WorkerManager.d.ts +5 -0
- package/dist/worker/WorkerManager.d.ts.map +1 -1
- package/dist/worker-browser.js +42 -17
- package/dist/worker-browser.js.map +6 -6
- package/dist/worker-bun.js +42 -17
- package/dist/worker-bun.js.map +6 -6
- package/dist/worker-node.js +42 -17
- package/dist/worker-node.js.map +6 -6
- package/package.json +1 -1
package/dist/bun.js.map
CHANGED
|
@@ -6,24 +6,24 @@
|
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { serialize } from \"../utilities/Misc\";\n\nexport async function sha256(data: string): Promise<string> {\n const encoder = new TextEncoder();\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport async function makeFingerprint(input: any): Promise<string> {\n const serializedObj = serialize(input);\n const hash = await sha256(serializedObj);\n return hash;\n}\n\nexport type uuid4 = `${string}-${string}-${string}-${string}-${string}`;\n\nexport function uuid4(): uuid4 {\n return crypto.randomUUID() as uuid4;\n}\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Simple dependency injection container for managing service instances and dependencies\n */\nexport class Container {\n private services: Map<string, any> = new Map();\n private factories: Map<string, () => any> = new Map();\n private singletons: Set<string> = new Set();\n private resolving: string[] = [];\n\n /**\n * Register a service factory\n * @param token The identifier token for the service\n * @param factory A factory function that creates the service\n * @param singleton Whether the service should be a singleton (created once)\n */\n register<T>(token: string, factory: () => T, singleton = true): void {\n this.factories.set(token, factory);\n if (singleton) {\n this.singletons.add(token);\n }\n }\n\n /**\n * Register a service factory only if the token is not already registered.\n * This is an atomic check-and-register to avoid TOCTOU races.\n * @param token The identifier token for the service\n * @param factory A factory function that creates the service\n * @param singleton Whether the service should be a singleton (created once)\n */\n registerIfAbsent<T>(token: string, factory: () => T, singleton = true): void {\n if (this.factories.has(token) || this.services.has(token)) {\n return;\n }\n this.register(token, factory, singleton);\n }\n\n /**\n * Register an instance as a service\n * @param token The identifier token for the service\n * @param instance The instance to register\n */\n registerInstance<T>(token: string, instance: T): void {\n this.services.set(token, instance);\n this.singletons.add(token);\n }\n\n /**\n * Get a service by its token\n * @param token The identifier token for the service\n * @returns The service instance\n */\n get<T>(token: string): T {\n if (this.services.has(token)) {\n return this.services.get(token) as T;\n }\n\n const factory = this.factories.get(token);\n if (!factory) {\n throw new Error(`Service not registered: ${String(token)}`);\n }\n\n if (this.resolving.includes(token)) {\n const cycle = [...this.resolving.slice(this.resolving.indexOf(token)), token];\n throw new Error(`Circular dependency detected: ${cycle.join(\" -> \")}`);\n }\n\n this.resolving.push(token);\n try {\n const instance = factory();\n\n if (this.singletons.has(token)) {\n this.services.set(token, instance);\n }\n\n return instance as T;\n } finally {\n this.resolving.pop();\n }\n }\n\n /**\n * Check if a service is registered\n * @param token The identifier token for the service\n * @returns True if the service is registered\n */\n has(token: string): boolean {\n return this.services.has(token) || this.factories.has(token);\n }\n\n /**\n * Remove a service registration\n * @param token The identifier token for the service\n */\n remove(token: string): void {\n this.services.delete(token);\n this.factories.delete(token);\n this.singletons.delete(token);\n }\n\n /**\n * Dispose all instantiated singleton services and clear registrations.\n * Services implementing dispose(), Symbol.asyncDispose, or Symbol.dispose will be cleaned up.\n */\n async dispose(): Promise<void> {\n const errors: unknown[] = [];\n try {\n for (const service of this.services.values()) {\n if (service == null) continue;\n try {\n if (typeof service[Symbol.asyncDispose] === \"function\") {\n await service[Symbol.asyncDispose]();\n } else if (typeof service[Symbol.dispose] === \"function\") {\n service[Symbol.dispose]();\n } else if (typeof service.dispose === \"function\") {\n await service.dispose();\n }\n } catch (err) {\n errors.push(err);\n }\n }\n } finally {\n this.services.clear();\n this.factories.clear();\n this.singletons.clear();\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more services failed to dispose\");\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n /**\n * Create a child container that inherits registrations from the parent\n * @returns A new child container\n */\n createChildContainer(): Container {\n const child = new Container();\n\n // Copy all registrations to the child\n this.factories.forEach((factory, token) => {\n child.factories.set(token, factory);\n if (this.singletons.has(token)) {\n child.singletons.add(token);\n }\n });\n\n // Copy all singleton instances to the child\n this.services.forEach((service, token) => {\n if (this.singletons.has(token)) {\n child.services.set(token, service);\n child.singletons.add(token);\n }\n });\n\n return child;\n }\n}\n\n/**\n * Global container instance — shared across all bundle copies of this module\n * via a Symbol.for key so that split entry points (e.g. @workglow/util/media)\n * resolve to the same DI registry as @workglow/util.\n */\nconst GLOBAL_CONTAINER_KEY = Symbol.for(\"@workglow/util/di/globalContainer\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!_g[GLOBAL_CONTAINER_KEY]) {\n _g[GLOBAL_CONTAINER_KEY] = new Container();\n}\nexport const globalContainer = _g[GLOBAL_CONTAINER_KEY] as Container;\n",
|
|
8
8
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Container, globalContainer } from \"./Container\";\n\n/**\n * Service token type for type-safe dependency injection\n */\nexport interface ServiceToken<T> {\n readonly _type: T;\n readonly id: string;\n}\n\n/**\n * Create a typed service token\n * @param id Unique identifier for the service\n * @returns A typed service token\n */\nexport function createServiceToken<T>(id: string): ServiceToken<T> {\n return { id, _type: null as any };\n}\n\n/**\n * Service registry for managing and accessing services\n */\nexport class ServiceRegistry {\n public container: Container;\n\n /**\n * Create a new service registry\n * @param container Optional container to use (defaults to global container)\n */\n constructor(container: Container = globalContainer) {\n this.container = container;\n }\n\n /**\n * Register a service factory\n * @param token Service token\n * @param factory Factory function to create the service\n * @param singleton Whether the service should be a singleton\n */\n register<T>(token: ServiceToken<T>, factory: () => T, singleton = true): void {\n this.container.register(token.id, factory, singleton);\n }\n\n /**\n * Register a service factory only if the token is not already registered.\n * @param token Service token\n * @param factory Factory function to create the service\n * @param singleton Whether the service should be a singleton\n */\n registerIfAbsent<T>(token: ServiceToken<T>, factory: () => T, singleton = true): void {\n this.container.registerIfAbsent(token.id, factory, singleton);\n }\n\n /**\n * Register a service instance\n * @param token Service token\n * @param instance Service instance to register\n */\n registerInstance<T>(token: ServiceToken<T>, instance: T): void {\n this.container.registerInstance(token.id, instance);\n }\n\n /**\n * Get a service by its token\n * @param token Service token\n * @returns The service instance\n */\n get<T>(token: ServiceToken<T>): T {\n return this.container.get<T>(token.id);\n }\n\n /**\n * Check if a service is registered\n * @param token Service token\n * @returns True if the service is registered\n */\n has<T>(token: ServiceToken<T>): boolean {\n return this.container.has(token.id);\n }\n\n /**\n * Dispose all instantiated services and clear registrations.\n */\n async dispose(): Promise<void> {\n await this.container.dispose();\n }\n}\n\n/**\n * Global service registry instance\n */\nexport const globalServiceRegistry = new ServiceRegistry(globalContainer);\n",
|
|
9
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"./ServiceRegistry\";\nimport { createServiceToken, globalServiceRegistry } from \"./ServiceRegistry\";\n\n/**\n * A compactor function that converts a resolved instance back to its string ID.\n * Returns undefined if the value cannot be compacted (e.g., missing ID field).\n *\n * @param value The resolved instance to compact\n * @param format The full format string (e.g., \"model:TextEmbedding\", \"storage:tabular\")\n * @param registry The service registry to use for lookups\n */\nexport type InputCompactorFn = (\n value: unknown,\n format: string,\n registry: ServiceRegistry\n) => string | undefined | Promise<string | undefined>;\n\n/**\n * Service token for the input compactor registry.\n * Maps format prefixes to compactor functions.\n */\nexport const INPUT_COMPACTORS =\n createServiceToken<Map<string, InputCompactorFn>>(\"task.input.compactors\");\n\n
|
|
10
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"./ServiceRegistry\";\nimport { createServiceToken, globalServiceRegistry } from \"./ServiceRegistry\";\n\n/**\n * A resolver function that converts a string ID to an instance.\n * Returns undefined if the resolver cannot handle this format.\n * Throws an error if the ID is not found.\n *\n * @param id The string ID to resolve\n * @param format The full format string (e.g., \"model:TextEmbedding\", \"storage:tabular\")\n * @param registry The service registry to use for lookups\n */\nexport type InputResolverFn = (\n id: string,\n format: string,\n registry: ServiceRegistry\n) => unknown | Promise<unknown>;\n\n/**\n * Service token for the input resolver registry.\n * Maps format prefixes to resolver functions.\n */\nexport const INPUT_RESOLVERS =\n createServiceToken<Map<string, InputResolverFn>>(\"task.input.resolvers\");\n\n
|
|
9
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"./ServiceRegistry\";\nimport { createServiceToken, globalServiceRegistry } from \"./ServiceRegistry\";\n\n/**\n * A compactor function that converts a resolved instance back to its string ID.\n * Returns undefined if the value cannot be compacted (e.g., missing ID field).\n *\n * @param value The resolved instance to compact\n * @param format The full format string (e.g., \"model:TextEmbedding\", \"storage:tabular\")\n * @param registry The service registry to use for lookups\n */\nexport type InputCompactorFn = (\n value: unknown,\n format: string,\n registry: ServiceRegistry\n) => string | undefined | Promise<string | undefined>;\n\n/**\n * Service token for the input compactor registry.\n * Maps format prefixes to compactor functions.\n */\nexport const INPUT_COMPACTORS =\n createServiceToken<Map<string, InputCompactorFn>>(\"task.input.compactors\");\n\n/**\n * Registers an empty compactor map on the given registry if absent.\n * Called as part of `bootstrapWorkglow` / `createOrchestrationContext`.\n */\nexport function registerInputCompactorDefaults(\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerIfAbsent(INPUT_COMPACTORS, (): Map<string, InputCompactorFn> => new Map(), true);\n}\n\n// Self-register on the global registry. Idempotent.\nregisterInputCompactorDefaults();\n\n/**\n * Gets the input compactor registry from the given registry (defaults to global).\n */\nexport function getInputCompactors(\n registry: ServiceRegistry = globalServiceRegistry\n): Map<string, InputCompactorFn> {\n if (!registry.has(INPUT_COMPACTORS)) {\n registerInputCompactorDefaults(registry);\n }\n return registry.get(INPUT_COMPACTORS);\n}\n\n/**\n * Registers an input compactor for a format prefix.\n * The compactor will be called to convert resolved instances back to string IDs.\n *\n * @param formatPrefix The format prefix to match (e.g., \"model\", \"knowledge-base\")\n * @param compactor The compactor function\n *\n * @example\n * ```typescript\n * // Register model compactor — extracts model_id from a ModelConfig\n * registerInputCompactor(\"model\", (value) => {\n * if (typeof value === \"object\" && value !== null && \"model_id\" in value) {\n * const id = (value as Record<string, unknown>).model_id;\n * return typeof id === \"string\" ? id : undefined;\n * }\n * return undefined;\n * });\n * ```\n */\nexport function registerInputCompactor(\n formatPrefix: string,\n compactor: InputCompactorFn,\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n const compactors = getInputCompactors(registry);\n compactors.set(formatPrefix, compactor);\n}\n",
|
|
10
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"./ServiceRegistry\";\nimport { createServiceToken, globalServiceRegistry } from \"./ServiceRegistry\";\n\n/**\n * A resolver function that converts a string ID to an instance.\n * Returns undefined if the resolver cannot handle this format.\n * Throws an error if the ID is not found.\n *\n * @param id The string ID to resolve\n * @param format The full format string (e.g., \"model:TextEmbedding\", \"storage:tabular\")\n * @param registry The service registry to use for lookups\n */\nexport type InputResolverFn = (\n id: string,\n format: string,\n registry: ServiceRegistry\n) => unknown | Promise<unknown>;\n\n/**\n * Service token for the input resolver registry.\n * Maps format prefixes to resolver functions.\n */\nexport const INPUT_RESOLVERS =\n createServiceToken<Map<string, InputResolverFn>>(\"task.input.resolvers\");\n\n/**\n * Registers an empty resolver map on the given registry if absent.\n * Called as part of `bootstrapWorkglow` / `createOrchestrationContext`.\n */\nexport function registerInputResolverDefaults(\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerIfAbsent(INPUT_RESOLVERS, (): Map<string, InputResolverFn> => new Map(), true);\n}\n\n// Self-register on the global registry. Idempotent.\nregisterInputResolverDefaults();\n\n/**\n * Gets the input resolver registry from the given registry (defaults to global).\n */\nexport function getInputResolvers(\n registry: ServiceRegistry = globalServiceRegistry\n): Map<string, InputResolverFn> {\n if (!registry.has(INPUT_RESOLVERS)) {\n registerInputResolverDefaults(registry);\n }\n return registry.get(INPUT_RESOLVERS);\n}\n\n/**\n * Registers an input resolver for a format prefix.\n * The resolver will be called for any format that starts with this prefix.\n *\n * @param formatPrefix The format prefix to match (e.g., \"model\", \"dataset\")\n * @param resolver The resolver function\n *\n * @example\n * ```typescript\n * // Register model resolver\n * registerInputResolver(\"model\", async (id, format, registry) => {\n * const modelRepo = registry.get(MODEL_REPOSITORY);\n * const model = await modelRepo.findByName(id);\n * if (!model) throw new Error(`Model \"${id}\" not found`);\n * return model;\n * });\n *\n * // Register dataset resolver\n * registerInputResolver(\"dataset\", (id, format, registry) => {\n * const datasetType = format.split(\":\")[1]; // \"tabular\", \"vector\", etc.\n * if (datasetType === \"tabular\") {\n * const datasets = registry.get(TABULAR_DATASETS);\n * const dataset = datasets.get(id);\n * if (!dataset) throw new Error(`Dataset \"${id}\" not found`);\n * return dataset;\n * }\n * throw new Error(`Unknown dataset type: ${datasetType}`);\n * });\n * ```\n */\nexport function registerInputResolver(\n formatPrefix: string,\n resolver: InputResolverFn,\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n const resolvers = getInputResolvers(registry);\n resolvers.set(formatPrefix, resolver);\n}\n",
|
|
11
11
|
"/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\n\nexport interface PortCodec<Live = unknown, Wire = unknown> {\n serialize(value: Live): Promise<Wire>;\n deserialize(value: Wire): Promise<Live>;\n}\n\n/**\n * Codec registry shared across bundle copies via a Symbol.for key — same pattern\n * as globalContainer. Without this, split entry points (e.g. @workglow/util,\n * @workglow/util/media, @workglow/task-graph) could each see their own Map and\n * fail to find codecs registered by sibling entries.\n */\nconst GLOBAL_CODECS_KEY = Symbol.for(\"@workglow/util/di/portCodecs\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!_g[GLOBAL_CODECS_KEY]) {\n _g[GLOBAL_CODECS_KEY] = new Map<string, PortCodec>();\n}\nconst codecs = _g[GLOBAL_CODECS_KEY] as Map<string, PortCodec>;\n\nexport function registerPortCodec<Live = unknown, Wire = unknown>(\n formatPrefix: string,\n codec: PortCodec<Live, Wire>\n): void {\n codecs.set(formatPrefix, codec as PortCodec);\n}\n\nexport function getPortCodec(format: string): PortCodec | undefined {\n if (codecs.has(format)) return codecs.get(format);\n const colon = format.indexOf(\":\");\n if (colon > 0) {\n const prefix = format.slice(0, colon);\n return codecs.get(prefix);\n }\n return undefined;\n}\n\n/** @internal — test affordance only. */\nexport function _resetPortCodecsForTests(): void {\n codecs.clear();\n}\n",
|
|
12
12
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A type that represents a listener function for an event.\n * @template Events - A record of event names and their corresponding listener functions\n * @template EventType - The name of the event\n */\ntype EventListener<Events, EventType extends keyof Events> = Events[EventType];\n\n/**\n * A type that represents a list of listener functions for an event.\n * @template Events - A record of event names and their corresponding listener functions\n * @template EventType - The name of the event\n */\ntype EventListeners<Events, EventType extends keyof Events> = Array<{\n listener: EventListener<Events, EventType>;\n once?: boolean;\n}>;\n\n/**\n * A type that represents the parameters of an event.\n * @template Events - A record of event names and their corresponding listener functions\n * @template EventType - The name of the event\n */\nexport type EventParameters<Events, EventType extends keyof Events> = {\n [Event in EventType]: EventListener<Events, EventType> extends (...args: infer P) => any\n ? P\n : never;\n}[EventType];\n\n/**\n * A type that represents the return type of the emitted method.\n * @template Events - A record of event names and their corresponding listener functions\n * @template EventType - The name of the event\n */\nexport type EmittedReturnType<Events, EventType extends keyof Events> = EventParameters<\n Events,\n EventType\n>;\n\n/**\n * A class that implements an event emitter pattern.\n * @template EventListenerTypes - A record of event names and their corresponding listener functions\n */\nexport class EventEmitter<EventListenerTypes extends Record<string, (...args: any) => any>> {\n private listeners: {\n [Event in keyof EventListenerTypes]?: EventListeners<EventListenerTypes, Event>;\n } = {};\n private maxListeners: number = 0;\n private warnedEvents = new Set<keyof EventListenerTypes>();\n\n /**\n * Set the maximum number of listeners per event before a warning is emitted.\n * 0 means unlimited (default).\n */\n setMaxListeners(n: number): this {\n if (!Number.isFinite(n) || n < 0) {\n throw new RangeError(`\"n\" must be a non-negative finite number. Got ${n}.`);\n }\n this.maxListeners = Math.trunc(n);\n this.warnedEvents.clear();\n return this;\n }\n\n /**\n * Get the number of listeners for a specific event\n */\n listenerCount<Event extends keyof EventListenerTypes>(event: Event): number {\n return this.listeners[event]?.length ?? 0;\n }\n\n /**\n * Get all event names that have registered listeners\n */\n eventNames(): Array<keyof EventListenerTypes> {\n return (Object.keys(this.listeners) as Array<keyof EventListenerTypes>).filter(\n (k) => (this.listeners[k]?.length ?? 0) > 0\n );\n }\n\n /**\n * Remove all listeners for a specific event or all events\n * @param event - Optional event name. If not provided, removes all listeners for all events\n * @returns this, so that calls can be chained\n */\n removeAllListeners<Event extends keyof EventListenerTypes>(event?: Event): this {\n if (event) {\n delete this.listeners[event];\n this.warnedEvents.delete(event);\n } else {\n this.listeners = {};\n this.warnedEvents.clear();\n }\n return this;\n }\n\n /**\n * Adds a listener function for the event\n * @param event - The event name to listen for\n * @param listener - The listener function to add\n * @returns this, so that calls can be chained\n */\n on<Event extends keyof EventListenerTypes>(\n event: Event,\n listener: EventListener<EventListenerTypes, Event>\n ): this {\n const listeners: EventListeners<EventListenerTypes, Event> =\n this.listeners[event] || (this.listeners[event] = []);\n listeners.push({ listener });\n this.checkMaxListeners(event, listeners.length);\n return this;\n }\n\n /**\n * Removes a listener function for the event\n * @param event - The event name to remove the listener from\n * @param listener - The listener function to remove\n * @returns this, so that calls can be chained\n */\n off<Event extends keyof EventListenerTypes>(\n event: Event,\n listener: EventListener<EventListenerTypes, Event>\n ): this {\n const listeners = this.listeners[event];\n if (!listeners) return this;\n\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n if (this.maxListeners > 0 && listeners.length <= this.maxListeners) {\n this.warnedEvents.delete(event);\n }\n }\n return this;\n }\n\n /**\n * Adds a listener function for the event that will be called only once\n * @param event - The event name to listen for\n * @param listener - The listener function to add\n * @returns this, so that calls can be chained\n */\n once<Event extends keyof EventListenerTypes>(\n event: Event,\n listener: EventListener<EventListenerTypes, Event>\n ): this {\n const listeners: EventListeners<EventListenerTypes, Event> =\n this.listeners[event] || (this.listeners[event] = []);\n listeners.push({ listener, once: true });\n this.checkMaxListeners(event, listeners.length);\n return this;\n }\n\n /**\n * Returns a promise that resolves when the event is emitted\n * @param event - The event name to listen for\n * @returns a promise that resolves to an array of all parameters of the event (empty array for events with no parameters)\n */\n waitOn<Event extends keyof EventListenerTypes>(\n event: Event\n ): Promise<EmittedReturnType<EventListenerTypes, Event>> {\n return new Promise((resolve) => {\n // Create an anonymous function that captures all arguments and passes them to resolve\n const listener = ((...args: any[]) => {\n // Always resolve with the array of arguments (which may be empty)\n resolve(args as any);\n }) as EventListener<EventListenerTypes, Event>;\n\n this.once(event, listener);\n });\n }\n\n /**\n * Emits an event with the specified name and arguments\n * @param event - The event name to emit\n * @param args - Arguments to pass to the event listeners\n */\n public emit<Event extends keyof EventListenerTypes>(\n this: EventEmitter<EventListenerTypes>,\n event: Event,\n ...args: EventParameters<EventListenerTypes, Event>\n ) {\n const listeners: EventListeners<EventListenerTypes, Event> | undefined = this.listeners[event];\n if (listeners) {\n // Snapshot the listener array to avoid issues with concurrent modification\n const snapshot = [...listeners];\n const errors: unknown[] = [];\n for (const { listener } of snapshot) {\n try {\n listener(...args);\n } catch (e) {\n errors.push(e);\n }\n }\n // Remove once listeners we just called\n this.listeners[event] = listeners.filter((l) => !l.once);\n if (this.maxListeners > 0 && (this.listeners[event]?.length ?? 0) <= this.maxListeners) {\n this.warnedEvents.delete(event);\n }\n // Re-throw errors after all listeners have been called\n if (errors.length > 1) {\n throw new AggregateError(\n errors,\n `${errors.length} listener(s) threw on \"${String(event)}\"`\n );\n } else if (errors.length === 1) {\n throw errors[0];\n }\n }\n }\n\n private checkMaxListeners<Event extends keyof EventListenerTypes>(\n event: Event,\n count: number\n ): void {\n if (this.maxListeners > 0 && count > this.maxListeners && !this.warnedEvents.has(event)) {\n this.warnedEvents.add(event);\n console.warn(\n `MaxListenersExceededWarning: Possible EventEmitter memory leak detected. ` +\n `${count} listeners added for event \"${String(event)}\". ` +\n `Use setMaxListeners() to increase limit (current: ${this.maxListeners}).`\n );\n }\n }\n\n /**\n * Subscribes to an event and returns a function to unsubscribe\n * @param event - The event name to subscribe to\n * @param listener - The listener function to add\n * @returns a function to unsubscribe from the event\n */\n public subscribe<Event extends keyof EventListenerTypes>(\n event: Event,\n listener: EventListener<EventListenerTypes, Event>\n ): () => void {\n this.on(event, listener);\n return () => this.off(event, listener);\n }\n}\n",
|
|
13
13
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema } from \"../json-schema/DataPortSchema\";\nimport { createServiceToken } from \"../di/ServiceRegistry\";\n\n/**\n * The kind of interaction being requested.\n *\n * - \"notify\": One-way message, no response expected. Fire-and-forget.\n * - \"display\": Present rich content (markdown, data, visualization hints).\n * Response optional (acknowledgment).\n * - \"elicit\": Request structured input via a form schema (MCP elicitation).\n * Response expected with user-submitted data.\n */\nexport type HumanInteractionKind = \"notify\" | \"display\" | \"elicit\";\n\n/** User action in response to an interaction (MCP-aligned for \"elicit\" kind) */\nexport type HumanResponseAction = \"accept\" | \"decline\" | \"cancel\";\n\n/**\n * A unified request sent to a human via an IHumanConnector.\n *\n * The `kind` field determines the interaction pattern. The `content` schema\n * describes WHAT to render — the UI layer interprets it based on `kind`.\n */\nexport interface IHumanRequest {\n /** Unique identifier for this request (used to correlate responses) */\n readonly requestId: string;\n /** Target human identifier — \"default\" for the main user, or a specific user/role ID */\n readonly targetHumanId: string;\n /** What kind of interaction this is */\n readonly kind: HumanInteractionKind;\n /** Explanatory message shown to the human */\n readonly message: string;\n /**\n * Content schema — describes what to render.\n *\n * For \"notify\": Describes notification content (may be empty, message suffices).\n * For \"display\": Describes the data/visualization to present. Properties contain\n * the actual data to render. Use x-ui-viewer annotations for hints.\n * For \"elicit\": Describes the form fields for user input (MCP requestedSchema).\n */\n readonly contentSchema: DataPortSchema;\n /**\n * Concrete data to display (for \"notify\" and \"display\" kinds).\n * For \"elicit\", this is typically empty — the human provides the data.\n */\n readonly contentData: Record<string, unknown> | undefined;\n /** Whether a response is expected. Default: true for \"elicit\", false for \"notify\"/\"display\". */\n readonly expectsResponse: boolean;\n /** Interaction mode: single request-response or multi-turn conversation */\n readonly mode: \"single\" | \"multi-turn\";\n /** Arbitrary context data passed through to the connector */\n readonly metadata: Record<string, unknown> | undefined;\n}\n\n/**\n * A response from a human, collected by the IHumanConnector.\n * For \"notify\"/\"display\" interactions, this may just be an acknowledgment.\n */\nexport interface IHumanResponse {\n /** Correlates to the IHumanRequest.requestId */\n readonly requestId: string;\n /**\n * The human's action:\n * - \"accept\": user submitted data or acknowledged\n * - \"decline\": user explicitly refused\n * - \"cancel\": user dismissed without choosing\n */\n readonly action: HumanResponseAction;\n /** The human's response data (present when action is \"accept\" and kind is \"elicit\") */\n readonly content: Record<string, unknown> | undefined;\n /** Whether the conversation is complete. Always true for \"single\" mode. */\n readonly done: boolean;\n}\n\n/**\n * Interface for reaching a human and sending interactions.\n *\n * Unified schema-driven: the `kind` field in IHumanRequest determines the\n * interaction pattern. The connector renders accordingly — a notification\n * toast, a data visualization, or an input form.\n */\nexport interface IHumanConnector {\n /**\n * Send an interaction to a human.\n *\n * For \"notify\" and \"display\" kinds that don't expect a response, the\n * connector may resolve immediately with action \"accept\" and no content.\n *\n * For \"elicit\" kind, blocks until the human submits, declines, or cancels.\n * Must respect the AbortSignal for cancellation.\n */\n send(request: IHumanRequest, signal: AbortSignal): Promise<IHumanResponse>;\n\n /**\n * Send a follow-up in a multi-turn conversation.\n * Only called when mode is \"multi-turn\" and the previous response had done=false.\n */\n followUp?(\n request: IHumanRequest,\n previousResponse: IHumanResponse,\n signal: AbortSignal\n ): Promise<IHumanResponse>;\n}\n\n/** Service token for resolving the IHumanConnector from ServiceRegistry */\nexport const HUMAN_CONNECTOR = createServiceToken<IHumanConnector>(\"HUMAN_CONNECTOR\");\n\n/**\n * Resolves the IHumanConnector from the execution context's ServiceRegistry.\n *\n * Throws a plain `Error` (not TaskConfigurationError, to avoid a dependency on\n * @workglow/task-graph). Callers that need a typed error may catch and rewrap.\n */\nexport function resolveHumanConnector(context: {\n readonly registry: {\n has(token: typeof HUMAN_CONNECTOR): boolean;\n get(token: typeof HUMAN_CONNECTOR): IHumanConnector;\n };\n}): IHumanConnector {\n if (!context.registry.has(HUMAN_CONNECTOR)) {\n throw new Error(\n \"HUMAN_CONNECTOR not registered. Register one via \" +\n \"registry.registerInstance(HUMAN_CONNECTOR, connector) before running a human-in-the-loop task.\"\n );\n }\n return context.registry.get(HUMAN_CONNECTOR);\n}\n",
|
|
14
14
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ILogger } from \"./ILogger\";\n\n/**\n * Log-level names in ascending severity order.\n */\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nconst LOG_LEVEL_ORDER: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n fatal: 4,\n};\n\nexport interface ConsoleLoggerOptions {\n readonly bindings?: Record<string, unknown>;\n readonly level?: LogLevel;\n readonly timings?: boolean;\n}\n\n/**\n * Logger that delegates to the global `console` object.\n * When created via {@link child}, accumulated bindings are passed\n * as a second argument to every console call.\n *\n * Supports optional level filtering (messages below the configured\n * level are silently discarded) and an opt-in `timings` flag that\n * controls whether {@link time}/{@link timeEnd} produce output.\n */\nexport class ConsoleLogger implements ILogger {\n private readonly bindings: Record<string, unknown>;\n private readonly level: LogLevel;\n private readonly timings: boolean;\n\n constructor(options: ConsoleLoggerOptions = {}) {\n this.bindings = options.bindings ?? {};\n this.level = options.level ?? \"debug\";\n this.timings = options.timings ?? false;\n }\n\n private enabled(level: LogLevel): boolean {\n return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[this.level];\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (!this.enabled(\"info\")) return;\n const merged = this.merge(meta);\n if (merged) {\n console.info(message, merged);\n } else {\n console.info(message);\n }\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (!this.enabled(\"warn\")) return;\n const merged = this.merge(meta);\n if (merged) {\n console.warn(message, merged);\n } else {\n console.warn(message);\n }\n }\n\n error(message: string, meta?: Record<string, unknown>): void {\n if (!this.enabled(\"error\")) return;\n const merged = this.merge(meta);\n if (merged) {\n console.error(message, merged);\n } else {\n console.error(message);\n }\n }\n\n debug(message: string, meta?: Record<string, unknown>): void {\n if (!this.enabled(\"debug\")) return;\n const merged = this.merge(meta);\n if (merged) {\n console.debug(message, merged);\n } else {\n console.debug(message);\n }\n }\n\n fatal(err: Error, message: string, meta?: Record<string, unknown>): void {\n if (!this.enabled(\"fatal\")) return;\n const merged = this.merge(meta);\n if (merged) {\n console.error(message, { ...merged, error: err });\n } else {\n console.error(message, { error: err });\n }\n }\n\n time(label: string, meta?: Record<string, unknown>): void {\n if (!this.timings) return;\n const merged = this.merge(meta);\n if (merged) {\n console.info(`[time] ${label}`, merged);\n }\n console.time(label);\n }\n\n timeEnd(label: string, meta?: Record<string, unknown>): void {\n if (!this.timings) return;\n console.timeEnd(label);\n const merged = this.merge(meta);\n if (merged) {\n console.info(`[timeEnd] ${label}`, merged);\n }\n }\n\n group(label: string, meta?: Record<string, unknown>): void {\n const merged = this.merge(meta);\n if (merged) {\n console.group(label, merged);\n } else {\n console.group(label);\n }\n }\n\n groupEnd(): void {\n console.groupEnd();\n }\n\n child(bindings: Record<string, unknown>): ILogger {\n return new ConsoleLogger({\n bindings: { ...this.bindings, ...bindings },\n level: this.level,\n timings: this.timings,\n });\n }\n\n private merge(meta: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n const hasBindings = Object.keys(this.bindings).length > 0;\n if (!hasBindings && !meta) return undefined;\n if (!hasBindings) return meta;\n if (!meta) return this.bindings;\n return { ...this.bindings, ...meta };\n }\n}\n",
|
|
15
15
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ILogger } from \"./ILogger\";\n\n/**\n * Silent logger that discards all output.\n * Useful for suppressing log noise in tests.\n */\nexport class NullLogger implements ILogger {\n info(_message: string, _meta?: Record<string, unknown>): void {}\n error(_message: string, _meta?: Record<string, unknown>): void {}\n warn(_message: string, _meta?: Record<string, unknown>): void {}\n debug(_message: string, _meta?: Record<string, unknown>): void {}\n fatal(_err: Error, _message: string, _meta?: Record<string, unknown>): void {}\n time(_label: string, _meta?: Record<string, unknown>): void {}\n timeEnd(_label: string, _meta?: Record<string, unknown>): void {}\n group(_label: string, _meta?: Record<string, unknown>): void {}\n groupEnd(): void {}\n child(_bindings: Record<string, unknown>): ILogger {\n return this;\n }\n}\n",
|
|
16
16
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Read an environment value from Node `process.env` when defined, otherwise from\n * Vite/browser `import.meta.env`.\n *\n * In Vite dev, `process` is often polyfilled without `DEV`, so reading only\n * `process.env` misses `import.meta.env.DEV` and disables dev-only features\n * (e.g. console telemetry).\n *\n * Boolean `import.meta.env` flags become `\"true\"` or are treated as unset when false\n * so callers using simple truthiness behave as expected.\n */\nexport function readRuntimeEnv(name: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) {\n const fromProcess = process.env[name];\n if (fromProcess !== undefined) {\n return fromProcess;\n }\n }\n\n const meta = (import.meta as ImportMeta & { env?: Record<string, string | boolean | undefined> })\n .env;\n if (!meta) {\n return undefined;\n }\n\n const value = meta[name];\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : undefined;\n }\n return String(value);\n}\n",
|
|
17
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport { readRuntimeEnv } from \"../utilities/runtimeEnv\";\nimport type { LogLevel } from \"./ConsoleLogger\";\nimport { ConsoleLogger } from \"./ConsoleLogger\";\nimport type { ILogger } from \"./ILogger\";\nimport { NullLogger } from \"./NullLogger\";\n\n/**\n * Service token for the global logger instance.\n */\nexport const LOGGER = createServiceToken<ILogger>(\"logger\");\n\nconst VALID_LOG_LEVELS: ReadonlySet<string> = new Set<string>([\n \"debug\",\n \"info\",\n \"warn\",\n \"error\",\n \"fatal\",\n]);\n\nfunction isTruthy(value: string | undefined): boolean {\n return value !== undefined && value !== \"\" && value !== \"0\" && value !== \"false\";\n}\n\nfunction createDefaultLogger(): ILogger {\n const levelEnv = readRuntimeEnv(\"LOGGER_LEVEL\")?.toLowerCase();\n if (levelEnv && VALID_LOG_LEVELS.has(levelEnv)) {\n return new ConsoleLogger({\n level: levelEnv as LogLevel,\n timings: isTruthy(readRuntimeEnv(\"LOGGER_TIMINGS\")),\n });\n }\n if (isTruthy(readRuntimeEnv(\"DEV\"))) {\n return new ConsoleLogger({\n level: \"debug\" as LogLevel,\n timings: true,\n });\n }\n return new NullLogger();\n}\n\n
|
|
17
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport { readRuntimeEnv } from \"../utilities/runtimeEnv\";\nimport type { LogLevel } from \"./ConsoleLogger\";\nimport { ConsoleLogger } from \"./ConsoleLogger\";\nimport type { ILogger } from \"./ILogger\";\nimport { NullLogger } from \"./NullLogger\";\n\n/**\n * Service token for the global logger instance.\n */\nexport const LOGGER = createServiceToken<ILogger>(\"logger\");\n\nconst VALID_LOG_LEVELS: ReadonlySet<string> = new Set<string>([\n \"debug\",\n \"info\",\n \"warn\",\n \"error\",\n \"fatal\",\n]);\n\nfunction isTruthy(value: string | undefined): boolean {\n return value !== undefined && value !== \"\" && value !== \"0\" && value !== \"false\";\n}\n\nfunction createDefaultLogger(): ILogger {\n const levelEnv = readRuntimeEnv(\"LOGGER_LEVEL\")?.toLowerCase();\n if (levelEnv && VALID_LOG_LEVELS.has(levelEnv)) {\n return new ConsoleLogger({\n level: levelEnv as LogLevel,\n timings: isTruthy(readRuntimeEnv(\"LOGGER_TIMINGS\")),\n });\n }\n if (isTruthy(readRuntimeEnv(\"DEV\"))) {\n return new ConsoleLogger({\n level: \"debug\" as LogLevel,\n timings: true,\n });\n }\n return new NullLogger();\n}\n\n/**\n * Registers the default logger factory on the given registry if absent.\n * Called by `bootstrapWorkglow` / `createOrchestrationContext`.\n */\nexport function registerLoggerDefaults(\n registry: import(\"../di/ServiceRegistry\").ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerIfAbsent(LOGGER, createDefaultLogger, true);\n}\n\n// Self-register on the global registry. Idempotent.\nregisterLoggerDefaults();\n\n/**\n * Returns the logger from the given registry (defaults to global).\n * If no logger is registered yet, a NullLogger is returned via the default factory.\n */\nexport function getLogger(\n registry: import(\"../di/ServiceRegistry\").ServiceRegistry = globalServiceRegistry\n): ILogger {\n if (!registry.has(LOGGER)) {\n registerLoggerDefaults(registry);\n }\n return registry.get(LOGGER);\n}\n\n/**\n * Replaces the logger instance on the given registry (defaults to global).\n */\nexport function setLogger(\n logger: ILogger,\n registry: import(\"../di/ServiceRegistry\").ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerInstance(LOGGER, logger);\n}\n",
|
|
18
18
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport class BaseError {\n public static type: string = \"BaseError\";\n public message: string;\n public name: string;\n public stack?: string;\n\n constructor(message: string = \"\") {\n this.message = message;\n const constructor = this.constructor as any;\n this.name = constructor.type ?? this.constructor.name;\n\n // Capture stack trace if available\n if (typeof Error !== \"undefined\" && Error.captureStackTrace) {\n const temp = { stack: \"\" };\n Error.captureStackTrace(temp, this.constructor);\n this.stack = temp.stack;\n } else {\n try {\n throw new Error(message);\n } catch (err) {\n if (err instanceof Error) {\n this.stack = err.stack;\n }\n }\n }\n }\n\n toString(): string {\n return `${this.name}: ${this.message}`;\n }\n}\n",
|
|
19
19
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type Cursor<T> = {\n length: number;\n next: () => IteratorResult<T>;\n [Symbol.iterator]: () => Iterator<T>;\n};\n/**\n * Creates a proxy that treats an object-of-arrays as an array-of-objects.\n * It lazily computes each row when accessed and lets you update or add new rows.\n *\n * When adding a new object (either via .push or assignment to the next index),\n * the underlying arrays are updated accordingly.\n *\n * @param data An object whose properties are arrays (assumed to have equal lengths)\n * @returns A proxy that behaves like an array of objects backed by the input arrays\n */\nexport function objectOfArraysAsArrayOfObjects<T extends Record<string, any>>(data: {\n [K in keyof T]: T[K][];\n}): Array<T> & { cursor: () => Cursor<T> } {\n const keys = Object.keys(data) as (keyof T)[];\n const length = data[keys[0]].length;\n for (const key of keys) {\n if (data[key].length !== length) {\n console.error(\"All arrays must have the same length\", key, data[key].length, length, data);\n throw new Error(\"All arrays must have the same length\");\n }\n }\n\n const indexSymbol = Symbol(\"index\");\n\n /**\n * Creates a live row proxy for the given index.\n * The proxy intercepts get/set operations so that reads and writes\n * go directly to data[key][index].\n */\n function createRowProxy(index: number): T & { [indexSymbol]: number } {\n let currentIndex = index;\n return new Proxy({} as T & { [indexSymbol]: number }, {\n get(_target, prop, receiver) {\n if (currentIndex < 0 || currentIndex >= data[keys[0]].length) {\n return undefined;\n }\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n return data[prop as keyof T][currentIndex];\n }\n if (prop === indexSymbol) {\n return currentIndex;\n }\n return Reflect.get(_target, prop, receiver);\n },\n set(_target, prop, value, receiver) {\n if (currentIndex < 0 || currentIndex >= data[keys[0]].length) {\n return false;\n }\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n data[prop as keyof T][currentIndex] = value;\n return true;\n }\n if (prop === indexSymbol) {\n currentIndex = value;\n return true;\n }\n return Reflect.set(_target, prop, value, receiver);\n },\n ownKeys(_target) {\n return keys as string[];\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n return { enumerable: true, configurable: true };\n }\n return undefined;\n },\n });\n }\n\n function createCursor(): Cursor<T> {\n // Determine the keys and the effective number of rows.\n let currentIndex = 0;\n\n // The cursor object that will be updated for each row.\n const cursor = createRowProxy(0);\n\n const obj = {\n get length() {\n return data[keys[0]].length;\n },\n /**\n * Returns the next row via the cursor.\n */\n next(): IteratorResult<T> {\n if (currentIndex < length) {\n cursor[indexSymbol] = currentIndex;\n currentIndex++;\n return { done: false, value: cursor };\n } else {\n return { done: true, value: undefined as any };\n }\n },\n /**\n * Makes the object iterable.\n */\n [Symbol.iterator](): Iterator<T> {\n // Reset the cursor for a fresh iteration.\n currentIndex = 0;\n cursor[indexSymbol] = currentIndex;\n return obj;\n },\n };\n return obj as Cursor<T>;\n }\n\n // Helper: shallow equality comparison between two rows.\n function shallowEqual(index: number, row: T): boolean {\n for (const key of keys) {\n if (data[key][index] !== row[key]) return false;\n }\n return true;\n }\n\n return new Proxy([] as Array<T>, {\n get(target, prop, receiver) {\n // Always return the current length dynamically.\n if (prop === \"length\") {\n return data[keys[0]].length;\n }\n\n // Create a cursor iterator.\n if (prop === \"cursor\") {\n return function () {\n return createCursor();\n };\n }\n\n // Override reverse to reverse the underlying arrays.\n if (prop === \"reverse\") {\n return function () {\n for (const key of keys) {\n data[key].reverse();\n }\n return receiver;\n };\n }\n\n // Override push to add a new object to the underlying arrays.\n if (prop === \"push\") {\n return function (...args: T[]) {\n for (const item of args) {\n for (const key of keys) {\n data[key].push(item[key]);\n }\n }\n return data[keys[0]].length;\n };\n }\n\n // Override pop to remove the last row from the underlying arrays and return it.\n if (prop === \"pop\") {\n return function () {\n const len = data[keys[0]].length;\n if (len === 0) return undefined;\n const poppedRow = {} as T;\n // Remove last element from each array and assemble the row to return.\n for (const key of keys) {\n poppedRow[key] = data[key].pop() as T[keyof T];\n }\n return poppedRow;\n };\n }\n\n // Override unshift to add a new row (or rows) at the beginning.\n if (prop === \"unshift\") {\n return function (...args: T[]) {\n // To preserve order, iterate from the last argument to the first.\n for (let i = args.length - 1; i >= 0; i--) {\n const item = args[i];\n for (const key of keys) {\n data[key].unshift(item[key]);\n }\n }\n return data[keys[0]].length;\n };\n }\n\n // Override shift to remove the first row from the underlying arrays and return it.\n if (prop === \"shift\") {\n return function () {\n if (data[keys[0]].length === 0) return undefined;\n const shiftedRow = {} as T;\n for (const key of keys) {\n shiftedRow[key] = data[key].shift() as T[keyof T];\n }\n return shiftedRow;\n };\n }\n\n // Override splice to remove or replace elements at a specific index.\n if (prop === \"splice\") {\n return function (start: number, deleteCount?: number, ...items: T[]) {\n const len = data[keys[0]].length;\n // Normalize start index.\n if (start < 0) {\n start = len + start;\n if (start < 0) start = 0;\n }\n if (deleteCount === undefined) {\n deleteCount = len - start;\n }\n // For each key, perform splice and capture removed elements.\n const removedByKey: { [K in keyof T]: T[K][] } = {} as any;\n for (const key of keys) {\n removedByKey[key] = data[key].splice(\n start,\n deleteCount,\n ...items.map((item) => item[key])\n );\n }\n // Combine removed elements into an array of objects.\n const removed: T[] = [];\n for (let i = 0; i < deleteCount; i++) {\n const row = {} as T;\n for (const key of keys) {\n row[key] = removedByKey[key][i];\n }\n removed.push(row);\n }\n return removed;\n };\n }\n\n // Override sort to sort the underlying arrays.\n // TODO(str): This is a bit of a hack. We should probably use a more efficient\n // way to do this.\n if (prop === \"sort\") {\n return function (compareFn?: (a: T, b: T) => number) {\n // Build an array of rows.\n const rows = [...receiver];\n // Sort rows.\n rows.sort(compareFn);\n // Write back sorted rows.\n for (const key of keys) {\n data[key] = rows.map((row) => row[key]);\n }\n return receiver;\n };\n }\n\n // Non-mutating Methods: now rewritten as follows.\n if (prop === \"includes\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n let start = fromIndex ?? 0;\n if (start < 0) {\n start = Math.max(0, len + start);\n }\n for (let i = start; i < len; i++) {\n if (shallowEqual(i, searchElement)) return true;\n }\n return false;\n };\n }\n if (prop === \"indexOf\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n let start = fromIndex ?? 0;\n if (start < 0) {\n start = Math.max(0, len + start);\n }\n for (let i = start; i < len; i++) {\n if (shallowEqual(i, searchElement)) return i;\n }\n return -1;\n };\n }\n if (prop === \"lastIndexOf\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n // Default start index is the last element.\n let start = fromIndex ?? len - 1;\n if (start < 0) {\n start = len + start;\n }\n for (let i = start; i >= 0; i--) {\n if (shallowEqual(i, searchElement)) return i;\n }\n return -1;\n };\n }\n\n // Non-mutating methods implemented via an array of object row proxies.\n if (prop === \"forEach\") {\n return function (callback: (value: T, index: number, array: T[]) => void, thisArg?: any) {\n return [...receiver].forEach(callback, thisArg);\n };\n }\n if (prop === \"map\") {\n return function (callback: (value: T, index: number, array: T[]) => any, thisArg?: any) {\n return [...receiver].map(callback, thisArg);\n };\n }\n if (prop === \"filter\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].filter(callback, thisArg);\n };\n }\n if (prop === \"reduce\") {\n return function (\n callback: (accumulator: any, currentValue: T, currentIndex: number, array: T[]) => any,\n initialValue?: any\n ) {\n return [...receiver].reduce(callback, initialValue);\n };\n }\n if (prop === \"find\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].find(callback, thisArg);\n };\n }\n if (prop === \"every\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].every(callback, thisArg);\n };\n }\n if (prop === \"some\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].some(callback, thisArg);\n };\n }\n\n // When a numeric index is accessed, build and return the corresponding row.\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index < 0 || index >= data[keys[0]].length) {\n return undefined;\n }\n return createRowProxy(index);\n }\n\n // Allow iteration over the rows.\n if (prop === Symbol.iterator) {\n return function* () {\n for (let i = 0; i < data[keys[0]].length; i++) {\n yield createRowProxy(i);\n }\n };\n }\n\n // Delegate any other property access.\n return Reflect.get(target, prop, receiver);\n },\n set(target, prop, value, receiver) {\n // Intercept numeric index assignments.\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index === data[keys[0]].length) {\n // Appending a new row.\n for (const key of keys) {\n data[key].push(value[key]);\n }\n return true;\n } else if (index < data[keys[0]].length) {\n // Updating an existing row.\n for (const key of keys) {\n if (value.hasOwnProperty(key)) {\n data[key][index] = value[key];\n }\n }\n return true;\n }\n }\n return Reflect.set(target, prop, value, receiver);\n },\n // Intercept deletion of properties to remove a row from each underlying array.\n deleteProperty(target, prop) {\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index >= 0 && index < data[keys[0]].length) {\n // Remove the element at this index from every underlying array.\n for (const key of keys) {\n // slice mutates the array in place\n data[key].splice(index, 1);\n }\n return true;\n }\n }\n return Reflect.deleteProperty(target, prop);\n },\n }) as Array<T> & { cursor: () => Cursor<T> };\n}\n",
|
|
20
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di\";\nimport { getLogger } from \"../logging\";\n\nexport class WorkerManager {\n private workers: Map<string, Worker> = new Map();\n private readyWorkers: Map<string, Promise<void>> = new Map();\n /** Function names registered on each worker, populated from the ready message. */\n private workerFunctions: Map<string, Set<string>> = new Map();\n private workerStreamFunctions: Map<string, Set<string>> = new Map();\n private workerPreviewFunctions: Map<string, Set<string>> = new Map();\n /** Persistent factories for workers that can be recreated after termination. */\n private workerFactories: Map<string, () => Worker> = new Map();\n /** Idle timeout configuration per registered worker. */\n private idleTimeouts: Map<string, number> = new Map();\n /** Single-flight init promise per name (lazy path). */\n private lazyInitPromises: Map<string, Promise<void>> = new Map();\n /** In-flight call count per worker name. */\n private activeCallCounts: Map<string, number> = new Map();\n /** Scheduled idle termination timer per worker name. */\n private idleTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();\n /** In-flight termination promise per worker name. */\n private terminationPromises: Map<string, Promise<void>> = new Map();\n\n registerWorker(\n name: string,\n workerOrFactory: Worker | (() => Worker),\n options?: { idleTimeoutMs?: number }\n ): void {\n if (this.workers.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n if (this.workerFactories.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n this.idleTimeouts.set(name, options?.idleTimeoutMs ?? 0);\n if (typeof workerOrFactory === \"function\") {\n this.workerFactories.set(name, workerOrFactory);\n } else {\n this.attachWorkerInstance(name, workerOrFactory);\n }\n }\n\n private attachWorkerInstance(name: string, worker: Worker): void {\n this.clearIdleTimer(name);\n this.workers.set(name, worker);\n worker.addEventListener(\"error\", (event) => {\n console.error(\"Worker Error:\", event.message, \"at\", event.filename, \"line:\", event.lineno);\n });\n worker.addEventListener(\"messageerror\", (event) => {\n console.error(\"Worker message error:\", event);\n });\n\n const readyPromise = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n reject(new Error(`Worker \"${name}\" did not become ready within 10s`));\n }, 10_000);\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n reject(\n new Error(`Worker \"${name}\" initialization error: ${event.message ?? \"unknown error\"}`)\n );\n };\n\n const handleReady = (event: MessageEvent) => {\n if (event.data?.type === \"ready\") {\n clearTimeout(timeout);\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n this.workerFunctions.set(name, new Set(event.data.functions ?? []));\n this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));\n this.workerPreviewFunctions.set(name, new Set(event.data.previewFunctions ?? []));\n resolve();\n }\n };\n\n worker.addEventListener(\"message\", handleReady);\n worker.addEventListener(\"error\", handleError);\n });\n\n this.readyWorkers.set(name, readyPromise);\n }\n\n /**\n * Ensures a lazy worker is constructed and ready. No-op if already\n * registered eagerly.\n */\n private async ensureWorkerReady(name: string): Promise<void> {\n await this.terminationPromises.get(name);\n\n if (this.workers.has(name)) {\n await this.readyWorkers.get(name)!;\n return;\n }\n const factory = this.workerFactories.get(name);\n if (!factory) {\n throw new Error(`Worker ${name} not found.`);\n }\n let init = this.lazyInitPromises.get(name);\n if (!init) {\n init = (async () => {\n let worker: Worker | undefined;\n try {\n const f = this.workerFactories.get(name)!;\n worker = f();\n this.attachWorkerInstance(name, worker);\n await this.readyWorkers.get(name)!;\n } catch (error) {\n await this.cleanupFailedInitialization(name, worker);\n throw error;\n } finally {\n this.lazyInitPromises.delete(name);\n }\n })();\n this.lazyInitPromises.set(name, init);\n }\n await init;\n }\n\n getWorker(name: string): Worker {\n const worker = this.workers.get(name);\n if (!worker) throw new Error(`Worker ${name} not found.`);\n return worker;\n }\n\n private beginWorkerActivity(name: string): void {\n this.clearIdleTimer(name);\n this.activeCallCounts.set(name, (this.activeCallCounts.get(name) ?? 0) + 1);\n }\n\n private endWorkerActivity(name: string): void {\n const nextCount = (this.activeCallCounts.get(name) ?? 0) - 1;\n if (nextCount > 0) {\n this.activeCallCounts.set(name, nextCount);\n return;\n }\n this.activeCallCounts.delete(name);\n this.scheduleIdleTermination(name);\n }\n\n private clearIdleTimer(name: string): void {\n const timer = this.idleTimers.get(name);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.idleTimers.delete(name);\n }\n }\n\n private scheduleIdleTermination(name: string): void {\n this.clearIdleTimer(name);\n\n const idleTimeoutMs = this.idleTimeouts.get(name) ?? 0;\n if (idleTimeoutMs <= 0 || !this.workerFactories.has(name) || !this.workers.has(name)) {\n return;\n }\n\n const timer = setTimeout(() => {\n this.idleTimers.delete(name);\n if ((this.activeCallCounts.get(name) ?? 0) > 0 || !this.workers.has(name)) {\n return;\n }\n void this.terminateWorkerInstance(name).catch((error) => {\n getLogger().warn(`Worker ${name} idle termination failed.`, { error });\n });\n }, idleTimeoutMs);\n\n this.idleTimers.set(name, timer);\n }\n\n private async cleanupFailedInitialization(\n name: string,\n worker: Worker | undefined\n ): Promise<void> {\n this.clearIdleTimer(name);\n if (worker !== undefined && this.workers.get(name) === worker) {\n this.workers.delete(name);\n }\n this.readyWorkers.delete(name);\n this.workerFunctions.delete(name);\n this.workerStreamFunctions.delete(name);\n this.workerPreviewFunctions.delete(name);\n this.activeCallCounts.delete(name);\n if (worker && \"terminate\" in worker && typeof worker.terminate === \"function\") {\n try {\n await worker.terminate();\n } catch {\n // Best-effort cleanup after failed startup.\n }\n }\n }\n\n private async terminateWorkerInstance(name: string): Promise<void> {\n const existing = this.terminationPromises.get(name);\n if (existing) {\n await existing;\n return;\n }\n\n const termination = (async () => {\n this.clearIdleTimer(name);\n const worker = this.workers.get(name);\n this.workers.delete(name);\n this.readyWorkers.delete(name);\n this.workerFunctions.delete(name);\n this.workerStreamFunctions.delete(name);\n this.workerPreviewFunctions.delete(name);\n this.activeCallCounts.delete(name);\n try {\n if (worker && \"terminate\" in worker && typeof worker.terminate === \"function\") {\n await worker.terminate();\n }\n } catch {\n // Best-effort termination; runtime state is already cleaned up above.\n }\n })();\n\n this.terminationPromises.set(name, termination);\n try {\n await termination;\n } finally {\n this.terminationPromises.delete(name);\n }\n }\n\n async callWorkerFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: {\n signal?: AbortSignal;\n onProgress?: (progress: number, message?: string, details?: any) => void;\n }\n ): Promise<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n this.beginWorkerActivity(workerName);\n\n try {\n const knownFunctions = this.workerFunctions.get(workerName);\n if (knownFunctions && !knownFunctions.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n return await new Promise<T>((resolve, reject) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"progress\" && options?.onProgress) {\n options.onProgress(data.progress, data.message, data.details);\n getLogger().debug(\n `Worker ${workerName} function ${functionName} progress: ${data.progress}, `,\n { data }\n );\n } else if (type === \"complete\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} complete.`, { data });\n resolve(data);\n } else if (type === \"error\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} error.`, { data });\n const err =\n typeof data === \"object\" && data !== null\n ? Object.assign(new Error(data.message ?? String(data)), {\n name: data.name ?? \"Error\",\n })\n : new Error(String(data));\n reject(err);\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Note: We intentionally do NOT transfer TypedArrays from the main thread to the worker.\n // Transferring detaches the buffers on the main thread, which breaks downstream tasks\n // that still need those TypedArrays (e.g., the embedding vectors flowing through the\n // task graph). Workers send results back with transferables (zero-copy), but the\n // main thread always clones data going to workers to preserve its own references.\n const message = { id: requestId, type: \"call\", functionName, args };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} function ${functionName} called.`);\n });\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n\n /**\n * Call a preview function on a worker. Returns undefined (rather than throwing)\n * if the worker has no preview function registered for the given name, so callers\n * can treat the result as an optional preview.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the preview function registered on the worker\n * @param args - Arguments to pass: [input, output, model]\n * @returns The preview result, or undefined if not registered / on error\n */\n async callWorkerPreviewFunction<T>(\n workerName: string,\n functionName: string,\n args: any[]\n ): Promise<T | undefined> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) return undefined;\n this.beginWorkerActivity(workerName);\n\n try {\n // Skip the roundtrip if the worker didn't register a preview function for this name.\n const knownPreview = this.workerPreviewFunctions.get(workerName);\n if (knownPreview && !knownPreview.has(functionName)) return undefined;\n\n return await new Promise((resolve) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"complete\") {\n cleanup();\n resolve(data as T | undefined);\n } else if (type === \"error\") {\n cleanup();\n getLogger().warn(`Worker ${workerName} preview function ${functionName} error:`, {\n error: data,\n });\n resolve(undefined);\n }\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n const message = { id: requestId, type: \"call\", functionName, args, preview: true };\n // Note: No transferables — same reasoning as callWorkerFunction above.\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} preview function ${functionName} called.`);\n });\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n\n /**\n * Terminate a single worker and clean up all associated state.\n */\n async terminateWorker(name: string): Promise<void> {\n await this.terminateWorkerInstance(name);\n this.workerFactories.delete(name);\n this.idleTimeouts.delete(name);\n this.lazyInitPromises.delete(name);\n }\n\n /**\n * Terminate all workers and release resources.\n */\n async dispose(): Promise<void> {\n const names = [...new Set([...this.workers.keys(), ...this.workerFactories.keys()])];\n for (const name of names) {\n await this.terminateWorker(name);\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n /**\n * Call a streaming function on a worker and return an AsyncGenerator that\n * yields each stream chunk sent by the worker. The worker sends `stream_chunk`\n * messages for each yielded event and a `complete` message when the generator\n * finishes. An `error` message from the worker causes the iterator to throw.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the stream function registered on the worker\n * @param args - Arguments to pass to the stream function\n * @param options - Optional abort signal\n * @returns AsyncGenerator yielding stream events from the worker\n */\n async *callWorkerStreamFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: { signal?: AbortSignal }\n ): AsyncGenerator<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n this.beginWorkerActivity(workerName);\n\n try {\n // The worker falls back to regular functions for stream calls, so either counts.\n const knownStream = this.workerStreamFunctions.get(workerName);\n const knownFns = this.workerFunctions.get(workerName);\n if (\n knownStream &&\n knownFns &&\n !knownStream.has(functionName) &&\n !knownFns.has(functionName)\n ) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n const requestId = crypto.randomUUID();\n\n // Push-queue pattern: messages push items, async generator pulls them\n type QueueItem =\n | { kind: \"event\"; data: T }\n | { kind: \"done\" }\n | { kind: \"error\"; error: Error };\n\n const queue: QueueItem[] = [];\n let waiting: ((value: void) => void) | null = null;\n\n const notify = () => {\n if (waiting) {\n const resolve = waiting;\n waiting = null;\n resolve();\n }\n };\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n\n if (type === \"stream_chunk\") {\n queue.push({ kind: \"event\", data });\n notify();\n } else if (type === \"complete\") {\n queue.push({ kind: \"done\" });\n notify();\n } else if (type === \"error\") {\n const err =\n typeof data === \"object\" && data !== null\n ? Object.assign(new Error(data.message ?? String(data)), {\n name: data.name ?? \"Error\",\n })\n : new Error(String(data));\n queue.push({ kind: \"error\", error: err });\n notify();\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n if (options.signal.aborted) {\n cleanup();\n throw new Error(\"Operation aborted\");\n }\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Send call message with stream flag\n // Note: No transferables — same reasoning as callWorkerFunction above.\n const message = { id: requestId, type: \"call\", functionName, args, stream: true };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} stream function ${functionName} called.`);\n\n let completedNormally = false;\n try {\n while (true) {\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (item.kind === \"event\") {\n yield item.data;\n } else if (item.kind === \"done\") {\n completedNormally = true;\n return;\n } else if (item.kind === \"error\") {\n completedNormally = true;\n throw item.error;\n }\n }\n\n // Wait for the next message to arrive\n await new Promise<void>((resolve) => {\n waiting = resolve;\n });\n }\n } finally {\n // If the consumer stopped iterating early (break/return), notify\n // the worker to abort so it doesn't continue generating tokens.\n if (!completedNormally) {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n }\n cleanup();\n }\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n}\n\nexport const WORKER_MANAGER = createServiceToken<WorkerManager>(\"worker.manager\");\n\nglobalServiceRegistry.register(WORKER_MANAGER, () => new WorkerManager(), true);\n",
|
|
20
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di\";\nimport { getLogger } from \"../logging\";\n\nexport class WorkerManager {\n private workers: Map<string, Worker> = new Map();\n private readyWorkers: Map<string, Promise<void>> = new Map();\n /** Function names registered on each worker, populated from the ready message. */\n private workerFunctions: Map<string, Set<string>> = new Map();\n private workerStreamFunctions: Map<string, Set<string>> = new Map();\n private workerPreviewFunctions: Map<string, Set<string>> = new Map();\n /** Persistent factories for workers that can be recreated after termination. */\n private workerFactories: Map<string, () => Worker> = new Map();\n /** Idle timeout configuration per registered worker. */\n private idleTimeouts: Map<string, number> = new Map();\n /** Single-flight init promise per name (lazy path). */\n private lazyInitPromises: Map<string, Promise<void>> = new Map();\n /** In-flight call count per worker name. */\n private activeCallCounts: Map<string, number> = new Map();\n /** Scheduled idle termination timer per worker name. */\n private idleTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();\n /** In-flight termination promise per worker name. */\n private terminationPromises: Map<string, Promise<void>> = new Map();\n\n registerWorker(\n name: string,\n workerOrFactory: Worker | (() => Worker),\n options?: { idleTimeoutMs?: number }\n ): void {\n if (this.workers.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n if (this.workerFactories.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n this.idleTimeouts.set(name, options?.idleTimeoutMs ?? 0);\n if (typeof workerOrFactory === \"function\") {\n this.workerFactories.set(name, workerOrFactory);\n } else {\n this.attachWorkerInstance(name, workerOrFactory);\n }\n }\n\n private attachWorkerInstance(name: string, worker: Worker): void {\n this.clearIdleTimer(name);\n this.workers.set(name, worker);\n worker.addEventListener(\"error\", (event) => {\n console.error(\"Worker Error:\", event.message, \"at\", event.filename, \"line:\", event.lineno);\n });\n worker.addEventListener(\"messageerror\", (event) => {\n console.error(\"Worker message error:\", event);\n });\n\n const readyPromise = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n reject(new Error(`Worker \"${name}\" did not become ready within 10s`));\n }, 10_000);\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n reject(\n new Error(`Worker \"${name}\" initialization error: ${event.message ?? \"unknown error\"}`)\n );\n };\n\n const handleReady = (event: MessageEvent) => {\n if (event.data?.type === \"ready\") {\n clearTimeout(timeout);\n worker.removeEventListener(\"message\", handleReady);\n worker.removeEventListener(\"error\", handleError);\n this.workerFunctions.set(name, new Set(event.data.functions ?? []));\n this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));\n this.workerPreviewFunctions.set(name, new Set(event.data.previewFunctions ?? []));\n resolve();\n }\n };\n\n worker.addEventListener(\"message\", handleReady);\n worker.addEventListener(\"error\", handleError);\n });\n\n this.readyWorkers.set(name, readyPromise);\n }\n\n /**\n * Ensures a lazy worker is constructed and ready. No-op if already\n * registered eagerly.\n */\n private async ensureWorkerReady(name: string): Promise<void> {\n await this.terminationPromises.get(name);\n\n if (this.workers.has(name)) {\n await this.readyWorkers.get(name)!;\n return;\n }\n const factory = this.workerFactories.get(name);\n if (!factory) {\n throw new Error(`Worker ${name} not found.`);\n }\n let init = this.lazyInitPromises.get(name);\n if (!init) {\n init = (async () => {\n let worker: Worker | undefined;\n try {\n const f = this.workerFactories.get(name)!;\n worker = f();\n this.attachWorkerInstance(name, worker);\n await this.readyWorkers.get(name)!;\n } catch (error) {\n await this.cleanupFailedInitialization(name, worker);\n throw error;\n } finally {\n this.lazyInitPromises.delete(name);\n }\n })();\n this.lazyInitPromises.set(name, init);\n }\n await init;\n }\n\n getWorker(name: string): Worker {\n const worker = this.workers.get(name);\n if (!worker) throw new Error(`Worker ${name} not found.`);\n return worker;\n }\n\n private beginWorkerActivity(name: string): void {\n this.clearIdleTimer(name);\n this.activeCallCounts.set(name, (this.activeCallCounts.get(name) ?? 0) + 1);\n }\n\n private endWorkerActivity(name: string): void {\n const nextCount = (this.activeCallCounts.get(name) ?? 0) - 1;\n if (nextCount > 0) {\n this.activeCallCounts.set(name, nextCount);\n return;\n }\n this.activeCallCounts.delete(name);\n this.scheduleIdleTermination(name);\n }\n\n private clearIdleTimer(name: string): void {\n const timer = this.idleTimers.get(name);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.idleTimers.delete(name);\n }\n }\n\n private scheduleIdleTermination(name: string): void {\n this.clearIdleTimer(name);\n\n const idleTimeoutMs = this.idleTimeouts.get(name) ?? 0;\n if (idleTimeoutMs <= 0 || !this.workerFactories.has(name) || !this.workers.has(name)) {\n return;\n }\n\n const timer = setTimeout(() => {\n this.idleTimers.delete(name);\n if ((this.activeCallCounts.get(name) ?? 0) > 0 || !this.workers.has(name)) {\n return;\n }\n void this.terminateWorkerInstance(name).catch((error) => {\n getLogger().warn(`Worker ${name} idle termination failed.`, { error });\n });\n }, idleTimeoutMs);\n\n this.idleTimers.set(name, timer);\n }\n\n private async cleanupFailedInitialization(\n name: string,\n worker: Worker | undefined\n ): Promise<void> {\n this.clearIdleTimer(name);\n if (worker !== undefined && this.workers.get(name) === worker) {\n this.workers.delete(name);\n }\n this.readyWorkers.delete(name);\n this.workerFunctions.delete(name);\n this.workerStreamFunctions.delete(name);\n this.workerPreviewFunctions.delete(name);\n this.activeCallCounts.delete(name);\n if (worker && \"terminate\" in worker && typeof worker.terminate === \"function\") {\n try {\n await worker.terminate();\n } catch {\n // Best-effort cleanup after failed startup.\n }\n }\n }\n\n private async terminateWorkerInstance(name: string): Promise<void> {\n const existing = this.terminationPromises.get(name);\n if (existing) {\n await existing;\n return;\n }\n\n const termination = (async () => {\n this.clearIdleTimer(name);\n const worker = this.workers.get(name);\n this.workers.delete(name);\n this.readyWorkers.delete(name);\n this.workerFunctions.delete(name);\n this.workerStreamFunctions.delete(name);\n this.workerPreviewFunctions.delete(name);\n this.activeCallCounts.delete(name);\n try {\n if (worker && \"terminate\" in worker && typeof worker.terminate === \"function\") {\n await worker.terminate();\n }\n } catch {\n // Best-effort termination; runtime state is already cleaned up above.\n }\n })();\n\n this.terminationPromises.set(name, termination);\n try {\n await termination;\n } finally {\n this.terminationPromises.delete(name);\n }\n }\n\n async callWorkerFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: {\n signal?: AbortSignal;\n onProgress?: (progress: number, message?: string, details?: any) => void;\n }\n ): Promise<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n this.beginWorkerActivity(workerName);\n\n try {\n const knownFunctions = this.workerFunctions.get(workerName);\n if (knownFunctions && !knownFunctions.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n return await new Promise<T>((resolve, reject) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"progress\" && options?.onProgress) {\n options.onProgress(data.progress, data.message, data.details);\n getLogger().debug(\n `Worker ${workerName} function ${functionName} progress: ${data.progress}, `,\n { data }\n );\n } else if (type === \"complete\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} complete.`, { data });\n resolve(data);\n } else if (type === \"error\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} error.`, { data });\n const err =\n typeof data === \"object\" && data !== null\n ? Object.assign(new Error(data.message ?? String(data)), {\n name: data.name ?? \"Error\",\n })\n : new Error(String(data));\n reject(err);\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Note: We intentionally do NOT transfer TypedArrays from the main thread to the worker.\n // Transferring detaches the buffers on the main thread, which breaks downstream tasks\n // that still need those TypedArrays (e.g., the embedding vectors flowing through the\n // task graph). Workers send results back with transferables (zero-copy), but the\n // main thread always clones data going to workers to preserve its own references.\n const message = { id: requestId, type: \"call\", functionName, args };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} function ${functionName} called.`);\n });\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n\n /**\n * Call a preview function on a worker. Returns undefined (rather than throwing)\n * if the worker has no preview function registered for the given name, so callers\n * can treat the result as an optional preview.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the preview function registered on the worker\n * @param args - Arguments to pass: [input, output, model]\n * @returns The preview result, or undefined if not registered / on error\n */\n async callWorkerPreviewFunction<T>(\n workerName: string,\n functionName: string,\n args: any[]\n ): Promise<T | undefined> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) return undefined;\n this.beginWorkerActivity(workerName);\n\n try {\n // Skip the roundtrip if the worker didn't register a preview function for this name.\n const knownPreview = this.workerPreviewFunctions.get(workerName);\n if (knownPreview && !knownPreview.has(functionName)) return undefined;\n\n return await new Promise((resolve) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"complete\") {\n cleanup();\n resolve(data as T | undefined);\n } else if (type === \"error\") {\n cleanup();\n getLogger().warn(`Worker ${workerName} preview function ${functionName} error:`, {\n error: data,\n });\n resolve(undefined);\n }\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n const message = { id: requestId, type: \"call\", functionName, args, preview: true };\n // Note: No transferables — same reasoning as callWorkerFunction above.\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} preview function ${functionName} called.`);\n });\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n\n /**\n * Terminate a single worker and clean up all associated state.\n */\n async terminateWorker(name: string): Promise<void> {\n await this.terminateWorkerInstance(name);\n this.workerFactories.delete(name);\n this.idleTimeouts.delete(name);\n this.lazyInitPromises.delete(name);\n }\n\n /**\n * Terminate all workers and release resources.\n */\n async dispose(): Promise<void> {\n const names = [...new Set([...this.workers.keys(), ...this.workerFactories.keys()])];\n for (const name of names) {\n await this.terminateWorker(name);\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n /**\n * Call a streaming function on a worker and return an AsyncGenerator that\n * yields each stream chunk sent by the worker. The worker sends `stream_chunk`\n * messages for each yielded event and a `complete` message when the generator\n * finishes. An `error` message from the worker causes the iterator to throw.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the stream function registered on the worker\n * @param args - Arguments to pass to the stream function\n * @param options - Optional abort signal\n * @returns AsyncGenerator yielding stream events from the worker\n */\n async *callWorkerStreamFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: { signal?: AbortSignal }\n ): AsyncGenerator<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n this.beginWorkerActivity(workerName);\n\n try {\n // The worker falls back to regular functions for stream calls, so either counts.\n const knownStream = this.workerStreamFunctions.get(workerName);\n const knownFns = this.workerFunctions.get(workerName);\n if (\n knownStream &&\n knownFns &&\n !knownStream.has(functionName) &&\n !knownFns.has(functionName)\n ) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n const requestId = crypto.randomUUID();\n\n // Push-queue pattern: messages push items, async generator pulls them\n type QueueItem =\n | { kind: \"event\"; data: T }\n | { kind: \"done\" }\n | { kind: \"error\"; error: Error };\n\n const queue: QueueItem[] = [];\n let waiting: ((value: void) => void) | null = null;\n\n const notify = () => {\n if (waiting) {\n const resolve = waiting;\n waiting = null;\n resolve();\n }\n };\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n\n if (type === \"stream_chunk\") {\n queue.push({ kind: \"event\", data });\n notify();\n } else if (type === \"complete\") {\n queue.push({ kind: \"done\" });\n notify();\n } else if (type === \"error\") {\n const err =\n typeof data === \"object\" && data !== null\n ? Object.assign(new Error(data.message ?? String(data)), {\n name: data.name ?? \"Error\",\n })\n : new Error(String(data));\n queue.push({ kind: \"error\", error: err });\n notify();\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n if (options.signal.aborted) {\n cleanup();\n throw new Error(\"Operation aborted\");\n }\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Send call message with stream flag\n // Note: No transferables — same reasoning as callWorkerFunction above.\n const message = { id: requestId, type: \"call\", functionName, args, stream: true };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} stream function ${functionName} called.`);\n\n let completedNormally = false;\n try {\n while (true) {\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (item.kind === \"event\") {\n yield item.data;\n } else if (item.kind === \"done\") {\n completedNormally = true;\n return;\n } else if (item.kind === \"error\") {\n completedNormally = true;\n throw item.error;\n }\n }\n\n // Wait for the next message to arrive\n await new Promise<void>((resolve) => {\n waiting = resolve;\n });\n }\n } finally {\n // If the consumer stopped iterating early (break/return), notify\n // the worker to abort so it doesn't continue generating tokens.\n if (!completedNormally) {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n }\n cleanup();\n }\n } finally {\n this.endWorkerActivity(workerName);\n }\n }\n}\n\nexport const WORKER_MANAGER = createServiceToken<WorkerManager>(\"worker.manager\");\n\n/**\n * Registers the WorkerManager default factory on the given registry.\n * Called by `bootstrapWorkglow` and `createOrchestrationContext`.\n */\nexport function registerWorkerManagerDefaults(\n registry: import(\"../di/ServiceRegistry\").ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerIfAbsent(WORKER_MANAGER, () => new WorkerManager(), true);\n}\n\n// Self-register on the global registry. Idempotent.\nregisterWorkerManagerDefaults();\n",
|
|
21
21
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CredentialPutOptions, ICredentialStore } from \"./ICredentialStore\";\n\n/**\n * A credential store that chains multiple stores together, trying each\n * in order until a value is found.\n *\n * Writes always go to the first (primary) store. Reads cascade through\n * the chain, returning the first match. This enables layered resolution:\n * explicit config → encrypted store → environment variables.\n *\n * @example\n * ```ts\n * const store = new ChainedCredentialStore([\n * new InMemoryCredentialStore(), // runtime overrides\n * new EncryptedKvCredentialStore(kv, passphrase), // persistent encrypted\n * new EnvCredentialStore({ ... }), // environment fallback\n * ]);\n * ```\n */\nexport class ChainedCredentialStore implements ICredentialStore {\n constructor(private readonly stores: readonly ICredentialStore[]) {\n if (stores.length === 0) {\n throw new Error(\"ChainedCredentialStore requires at least one store.\");\n }\n }\n\n async get(key: string): Promise<string | undefined> {\n for (const store of this.stores) {\n const value = await store.get(key);\n if (value !== undefined) return value;\n }\n return undefined;\n }\n\n async put(key: string, value: string, options?: CredentialPutOptions): Promise<void> {\n await this.stores[0].put(key, value, options);\n }\n\n async delete(key: string): Promise<boolean> {\n let deleted = false;\n for (const store of this.stores) {\n if (await store.delete(key)) {\n deleted = true;\n }\n }\n return deleted;\n }\n\n async has(key: string): Promise<boolean> {\n for (const store of this.stores) {\n if (await store.has(key)) return true;\n }\n return false;\n }\n\n async keys(): Promise<readonly string[]> {\n const seen = new Set<string>();\n for (const store of this.stores) {\n for (const key of await store.keys()) {\n seen.add(key);\n }\n }\n return [...seen];\n }\n\n async deleteAll(): Promise<void> {\n await Promise.all(this.stores.map((s) => s.deleteAll()));\n }\n}\n",
|
|
22
22
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nconst CREDENTIAL_PROVIDER_VALUES = [\n \"none\",\n \"anthropic\",\n \"openai\",\n \"google\",\n \"huggingface\",\n \"custom\",\n] as const;\n\n/**\n * Allowed provider values for credential metadata (CLI, builder UI, and JSON schema).\n */\nexport const CREDENTIAL_PROVIDER_SCHEMA_ENUM = CREDENTIAL_PROVIDER_VALUES;\n\n/** Sentinel stored in UI state; persist as empty / omit provider when this is selected. */\nexport const CREDENTIAL_PROVIDER_NONE = CREDENTIAL_PROVIDER_VALUES[0];\n\nexport type CredentialProviderValue = (typeof CREDENTIAL_PROVIDER_VALUES)[number];\n\n/**\n * Rows for select UIs (e.g. builder). Values must match {@link CREDENTIAL_PROVIDER_SCHEMA_ENUM}.\n */\nexport const CREDENTIAL_PROVIDER_OPTIONS = [\n { value: CREDENTIAL_PROVIDER_VALUES[0], label: \"None\" },\n { value: CREDENTIAL_PROVIDER_VALUES[1], label: \"Anthropic\" },\n { value: CREDENTIAL_PROVIDER_VALUES[2], label: \"OpenAI\" },\n { value: CREDENTIAL_PROVIDER_VALUES[3], label: \"Google\" },\n { value: CREDENTIAL_PROVIDER_VALUES[4], label: \"Hugging Face\" },\n { value: CREDENTIAL_PROVIDER_VALUES[5], label: \"Custom\" },\n] as const satisfies ReadonlyArray<{\n readonly value: CredentialProviderValue;\n readonly label: string;\n}>;\n\nexport type CredentialProviderOption = (typeof CREDENTIAL_PROVIDER_OPTIONS)[number];\n",
|
|
23
23
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchemaObject } from \"../json-schema/DataPortSchema\";\nimport { CREDENTIAL_PROVIDER_SCHEMA_ENUM } from \"./CredentialProviderOptions\";\n\n/**\n * CLI / form input for storing a credential (key, secret, optional metadata).\n */\nexport const CredentialPutInputSchema = {\n type: \"object\",\n properties: {\n key: {\n type: \"string\",\n title: \"Key\",\n description: 'Unique identifier (e.g. \"openai-api-key\")',\n },\n value: {\n type: \"string\",\n title: \"Value\",\n description: \"Secret value (API key, token, or password)\",\n format: \"password\",\n },\n label: {\n type: \"string\",\n title: \"Label\",\n description: \"Human-readable label (optional)\",\n },\n provider: {\n type: \"string\",\n title: \"Provider\",\n description: \"Optional provider this credential is associated with\",\n enum: [...CREDENTIAL_PROVIDER_SCHEMA_ENUM],\n },\n },\n required: [\"key\", \"value\"],\n} as const satisfies DataPortSchemaObject;\n",
|
|
24
24
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"../di/ServiceRegistry\";\n\n/**\n * Metadata associated with a stored credential\n */\nexport interface CredentialMetadata {\n /** Human-readable label for the credential */\n readonly label: string | undefined;\n /** The provider this credential is associated with (e.g., \"anthropic\", \"openai\") */\n readonly provider: string | undefined;\n /** When the credential was created */\n readonly createdAt: Date;\n /** When the credential was last updated */\n readonly updatedAt: Date;\n /** When the credential expires (undefined = never) */\n readonly expiresAt: Date | undefined;\n}\n\n/**\n * A stored credential entry combining the secret value with its metadata\n */\nexport interface CredentialEntry {\n /** The credential key/name */\n readonly key: string;\n /** The secret value */\n readonly value: string;\n /** Associated metadata */\n readonly metadata: CredentialMetadata;\n}\n\n/**\n * Options for storing a credential\n */\nexport interface CredentialPutOptions {\n /** Human-readable label */\n readonly label?: string;\n /** Associated provider name */\n readonly provider?: string;\n /** Expiration date */\n readonly expiresAt?: Date;\n}\n\n/**\n * Interface defining the contract for credential/secret storage.\n *\n * Provides a unified abstraction for storing and retrieving sensitive values\n * (API keys, tokens, passwords) across different backends: in-memory,\n * environment variables, encrypted KV stores, or external secret managers\n * (AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager).\n *\n * Implementations MUST NOT log or expose credential values in error messages.\n */\nexport interface ICredentialStore {\n /**\n * Retrieve a credential value by key.\n *\n * Returns the secret value if found and not expired, or `undefined` if the\n * credential does not exist or is expired.\n *\n * Implementations MAY reject the returned promise on backend, storage, or\n * cryptographic errors (e.g., I/O failure, decryption failure, corrupt data).\n * Such errors MUST NOT include credential secret values in their messages or\n * metadata.\n */\n get(key: string): Promise<string | undefined>;\n\n /**\n * Store a credential value.\n * @param key Unique identifier for the credential\n * @param value The secret value to store\n * @param options Optional metadata\n */\n put(key: string, value: string, options?: CredentialPutOptions): Promise<void>;\n\n /**\n * Delete a credential by key.\n * @returns true if the credential existed and was deleted, false otherwise.\n */\n delete(key: string): Promise<boolean>;\n\n /**\n * Check whether a credential exists (and is not expired).\n */\n has(key: string): Promise<boolean>;\n\n /**\n * List all credential keys (does NOT expose values).\n */\n keys(): Promise<readonly string[]>;\n\n /**\n * Delete all credentials.\n */\n deleteAll(): Promise<void>;\n}\n\n/**\n * Service token for the global credential store\n */\nexport const CREDENTIAL_STORE = createServiceToken<ICredentialStore>(\"credential.store\");\n",
|
|
25
25
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n CredentialEntry,\n CredentialMetadata,\n CredentialPutOptions,\n ICredentialStore,\n} from \"./ICredentialStore\";\n\n/**\n * In-memory credential store for development and testing.\n *\n * Credentials are stored in a plain Map and lost when the process exits.\n * NOT suitable for production use — use {@link EncryptedKvCredentialStore}\n * or an external secret manager integration instead.\n */\nexport class InMemoryCredentialStore implements ICredentialStore {\n private readonly store = new Map<string, CredentialEntry>();\n\n async get(key: string): Promise<string | undefined> {\n const entry = this.store.get(key);\n if (!entry) return undefined;\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= new Date()) {\n this.store.delete(key);\n return undefined;\n }\n return entry.value;\n }\n\n async put(key: string, value: string, options?: CredentialPutOptions): Promise<void> {\n const now = new Date();\n const existing = this.store.get(key);\n const metadata: CredentialMetadata = {\n label: options?.label ?? existing?.metadata.label,\n provider: options?.provider ?? existing?.metadata.provider,\n createdAt: existing?.metadata.createdAt ?? now,\n updatedAt: now,\n expiresAt: options?.expiresAt ?? existing?.metadata.expiresAt,\n };\n this.store.set(key, { key, value, metadata });\n }\n\n async delete(key: string): Promise<boolean> {\n return this.store.delete(key);\n }\n\n async has(key: string): Promise<boolean> {\n const entry = this.store.get(key);\n if (!entry) return false;\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= new Date()) {\n this.store.delete(key);\n return false;\n }\n return true;\n }\n\n async keys(): Promise<readonly string[]> {\n const now = new Date();\n const result: string[] = [];\n for (const [key, entry] of this.store) {\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= now) {\n this.store.delete(key);\n continue;\n }\n result.push(key);\n }\n return result;\n }\n\n async deleteAll(): Promise<void> {\n this.store.clear();\n }\n}\n",
|
|
26
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport type { ServiceRegistry } from \"../di/ServiceRegistry\";\nimport { registerInputCompactor } from \"../di/InputCompactorRegistry\";\nimport { registerInputResolver } from \"../di/InputResolverRegistry\";\nimport { CREDENTIAL_STORE } from \"./ICredentialStore\";\nimport type { ICredentialStore } from \"./ICredentialStore\";\nimport { InMemoryCredentialStore } from \"./InMemoryCredentialStore\";\n\n
|
|
26
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport type { ServiceRegistry } from \"../di/ServiceRegistry\";\nimport { registerInputCompactor } from \"../di/InputCompactorRegistry\";\nimport { registerInputResolver } from \"../di/InputResolverRegistry\";\nimport { CREDENTIAL_STORE } from \"./ICredentialStore\";\nimport type { ICredentialStore } from \"./ICredentialStore\";\nimport { InMemoryCredentialStore } from \"./InMemoryCredentialStore\";\n\n/**\n * Gets the credential store from the given registry (defaults to global).\n * If the registry hasn't had `registerCredentialDefaults(registry)` run yet,\n * the default in-memory store is registered lazily — same pattern as\n * `getLogger` / `getTelemetryProvider`. Makes scoped registries returned by\n * `createOrchestrationContext` safe to use without an explicit bootstrap.\n */\nexport function getGlobalCredentialStore(\n registry: ServiceRegistry = globalServiceRegistry\n): ICredentialStore {\n if (!registry.has(CREDENTIAL_STORE)) {\n registerCredentialDefaults(registry);\n }\n return registry.get(CREDENTIAL_STORE);\n}\n\n/**\n * Sets the credential store on the given registry (defaults to global).\n */\nexport function setGlobalCredentialStore(\n store: ICredentialStore,\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerInstance(CREDENTIAL_STORE, store);\n}\n\n/**\n * Resolves a credential from the store registered in the given registry.\n *\n * If `registry` is omitted, uses the global registry. If a `registry` is\n * passed but doesn't yet have `CREDENTIAL_STORE`, `getGlobalCredentialStore`\n * lazily registers the default in-memory store on it — so scoped registries\n * stay isolated from the global one.\n *\n * Intended for use in provider `getClient` functions and tasks.\n *\n * @param key The credential key to resolve\n * @param registry Optional service registry (e.g., from task context)\n * @returns The credential value, or undefined if not found\n */\nexport async function resolveCredential(\n key: string,\n registry?: ServiceRegistry\n): Promise<string | undefined> {\n const store = getGlobalCredentialStore(registry);\n return store.get(key);\n}\n\n/**\n * Registers the credential store default factory and the \"credential\" input resolver/compactor\n * on the given registry. Called by `bootstrapWorkglow` and `createOrchestrationContext`.\n */\nexport function registerCredentialDefaults(\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerIfAbsent(\n CREDENTIAL_STORE,\n (): ICredentialStore => new InMemoryCredentialStore(),\n true\n );\n registerInputResolver(\n \"credential\",\n async (id, _format, registry) => {\n return (await resolveCredential(id, registry)) ?? id;\n },\n registry\n );\n registerInputCompactor(\n \"credential\",\n (value) => (typeof value === \"string\" ? value : undefined),\n registry\n );\n}\n\n// Self-register on the global registry. Idempotent.\nregisterCredentialDefaults();\n",
|
|
27
27
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CredentialPutOptions, ICredentialStore } from \"./ICredentialStore\";\n\n/**\n * Credential store backed by environment variables.\n *\n * Keys are mapped to environment variable names via an explicit mapping\n * or an optional prefix convention. This store is read-only for env vars\n * that already exist, but `put` can be used to set them for the current\n * process lifetime.\n *\n * @example\n * ```ts\n * const store = new EnvCredentialStore({\n * \"anthropic-api-key\": \"ANTHROPIC_API_KEY\",\n * \"openai-api-key\": \"OPENAI_API_KEY\",\n * });\n * const key = await store.get(\"anthropic-api-key\"); // reads process.env.ANTHROPIC_API_KEY\n * ```\n */\nexport class EnvCredentialStore implements ICredentialStore {\n private readonly keyToEnvVar: Map<string, string>;\n private readonly prefix: string | undefined;\n\n /**\n * @param mapping Explicit credential-key → env-var-name mapping\n * @param prefix Optional prefix: if a key has no explicit mapping, try `PREFIX_KEY` (uppercased, hyphens → underscores)\n */\n constructor(mapping: Record<string, string> = {}, prefix?: string) {\n this.keyToEnvVar = new Map(Object.entries(mapping));\n this.prefix = prefix;\n }\n\n private resolveEnvVar(key: string): string {\n const explicit = this.keyToEnvVar.get(key);\n if (explicit) return explicit;\n\n if (this.prefix) {\n return `${this.prefix}_${key.toUpperCase().replace(/-/g, \"_\")}`;\n }\n\n return key.toUpperCase().replace(/-/g, \"_\");\n }\n\n private getEnv(envVar: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env[envVar];\n }\n return undefined;\n }\n\n async get(key: string): Promise<string | undefined> {\n const envVar = this.resolveEnvVar(key);\n return this.getEnv(envVar);\n }\n\n async put(key: string, value: string, _options?: CredentialPutOptions): Promise<void> {\n const envVar = this.resolveEnvVar(key);\n if (typeof process !== \"undefined\" && process.env) {\n process.env[envVar] = value;\n }\n if (!this.keyToEnvVar.has(key)) {\n this.keyToEnvVar.set(key, envVar);\n }\n }\n\n async delete(key: string): Promise<boolean> {\n const envVar = this.resolveEnvVar(key);\n if (typeof process !== \"undefined\" && process.env && envVar in process.env) {\n delete process.env[envVar];\n return true;\n }\n return false;\n }\n\n async has(key: string): Promise<boolean> {\n const envVar = this.resolveEnvVar(key);\n return this.getEnv(envVar) !== undefined;\n }\n\n async keys(): Promise<readonly string[]> {\n const result: string[] = [];\n for (const [credKey] of this.keyToEnvVar) {\n if (await this.has(credKey)) {\n result.push(credKey);\n }\n }\n return result;\n }\n\n async deleteAll(): Promise<void> {\n for (const [credKey] of this.keyToEnvVar) {\n await this.delete(credKey);\n }\n }\n}\n",
|
|
28
28
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Options for {@link OtpPassphraseCache}.\n */\nexport interface OtpPassphraseCacheOptions {\n /**\n * Absolute time-to-live in milliseconds. The cache is cleared unconditionally\n * after this duration regardless of access. Default: 6 hours.\n */\n readonly hardTtlMs?: number;\n\n /**\n * Idle time-to-live in milliseconds. The expiry timer resets on each\n * {@link OtpPassphraseCache.retrieve} call. If both `hardTtlMs` and\n * `idleTtlMs` are set, whichever fires first wins.\n */\n readonly idleTtlMs?: number;\n\n /**\n * Called when the cache expires (either hard or idle TTL). Useful for\n * locking a credential store when the passphrase is no longer available.\n */\n readonly onExpiry?: () => void;\n}\n\nconst DEFAULT_HARD_TTL_MS = 6 * 60 * 60 * 1000; // 6 hours\n\n/**\n * XOR-masks a passphrase with a random one-time pad so the cache does not\n * retain the plaintext in its internal storage. The masked value and pad are\n * stored as `Uint8Array` instances and zeroed on {@link clear}. Plaintext may\n * still exist transiently as a JavaScript `string` when passed to\n * {@link store} or returned from {@link retrieve}.\n *\n * @example\n * ```ts\n * const cache = new OtpPassphraseCache({ hardTtlMs: 6 * 60 * 60 * 1000 });\n * cache.store(\"my-secret-passphrase\");\n * const passphrase = cache.retrieve(); // \"my-secret-passphrase\"\n * cache.clear(); // zeroes buffers, fires onExpiry\n * cache.retrieve(); // undefined\n * ```\n */\nexport class OtpPassphraseCache {\n private masked: Uint8Array | undefined;\n private pad: Uint8Array | undefined;\n private hardTimer: ReturnType<typeof setTimeout> | undefined;\n private idleTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly options: OtpPassphraseCacheOptions;\n\n constructor(options?: OtpPassphraseCacheOptions) {\n this.options = options ?? {};\n }\n\n /**\n * Store a passphrase in the cache, XOR-masked with a random one-time pad.\n * Any previously cached passphrase is cleared first.\n */\n store(passphrase: string): void {\n this.clearInternal(false);\n\n const encoder = new TextEncoder();\n const raw = encoder.encode(passphrase);\n const pad = crypto.getRandomValues(new Uint8Array(raw.length));\n const masked = new Uint8Array(raw.length);\n\n for (let i = 0; i < raw.length; i++) {\n masked[i] = raw[i] ^ pad[i];\n }\n\n // Zero the raw bytes now that we have masked + pad\n raw.fill(0);\n\n this.masked = masked;\n this.pad = pad;\n\n this.startTimers();\n }\n\n /**\n * Recover the passphrase by XOR-ing masked + pad back together.\n * Returns `undefined` if the cache is empty or expired.\n * Resets the idle timer if `idleTtlMs` is configured.\n */\n retrieve(): string | undefined {\n if (!this.masked || !this.pad) return undefined;\n\n const raw = new Uint8Array(this.masked.length);\n for (let i = 0; i < this.masked.length; i++) {\n raw[i] = this.masked[i] ^ this.pad[i];\n }\n\n const result = new TextDecoder().decode(raw);\n raw.fill(0);\n\n this.resetIdleTimer();\n return result;\n }\n\n /**\n * Whether the cache currently holds a passphrase.\n */\n get hasValue(): boolean {\n return this.masked !== undefined && this.pad !== undefined;\n }\n\n /**\n * Zeroes both buffers, clears timers, and fires the `onExpiry` callback.\n */\n clear(): void {\n this.clearInternal(true);\n }\n\n private clearInternal(fireCallback: boolean): void {\n if (this.hardTimer !== undefined) {\n clearTimeout(this.hardTimer);\n this.hardTimer = undefined;\n }\n if (this.idleTimer !== undefined) {\n clearTimeout(this.idleTimer);\n this.idleTimer = undefined;\n }\n\n const hadValue = this.masked !== undefined;\n\n if (this.masked) {\n this.masked.fill(0);\n this.masked = undefined;\n }\n if (this.pad) {\n this.pad.fill(0);\n this.pad = undefined;\n }\n\n if (fireCallback && hadValue && this.options.onExpiry) {\n this.options.onExpiry();\n }\n }\n\n private startTimers(): void {\n const hardTtl = this.options.hardTtlMs ?? DEFAULT_HARD_TTL_MS;\n this.hardTimer = setTimeout(() => this.clear(), hardTtl);\n // Unref so the timer doesn't keep the process alive\n if (typeof this.hardTimer === \"object\" && \"unref\" in this.hardTimer) {\n this.hardTimer.unref();\n }\n\n this.resetIdleTimer();\n }\n\n private resetIdleTimer(): void {\n if (this.idleTimer !== undefined) {\n clearTimeout(this.idleTimer);\n this.idleTimer = undefined;\n }\n\n const idleTtl = this.options.idleTtlMs;\n if (idleTtl !== undefined && this.masked !== undefined) {\n this.idleTimer = setTimeout(() => this.clear(), idleTtl);\n if (typeof this.idleTimer === \"object\" && \"unref\" in this.idleTimer) {\n this.idleTimer.unref();\n }\n }\n }\n}\n",
|
|
29
29
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Number of bytes used for the PBKDF2 salt prepended to each ciphertext. */\nconst SALT_LENGTH = 16;\n\n/**\n * Derives a 256-bit AES-GCM key from a passphrase using PBKDF2.\n */\nexport async function deriveKey(passphrase: string, salt: Uint8Array): Promise<CryptoKey> {\n const enc = new TextEncoder();\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n enc.encode(passphrase),\n \"PBKDF2\",\n false,\n [\"deriveKey\"]\n );\n return crypto.subtle.deriveKey(\n { name: \"PBKDF2\", salt: salt as unknown as ArrayBuffer, iterations: 600_000, hash: \"SHA-256\" },\n keyMaterial,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"]\n );\n}\n\n/**\n * Encrypts plaintext using AES-256-GCM with a random salt and IV.\n * The salt is prepended to the ciphertext bytes and stored in the `encrypted` field\n * so that decryption can reconstruct the same key.\n *\n * @param keyCache - Per-store cache of derived CryptoKey instances keyed by base64(salt).\n */\nexport async function encrypt(\n plaintext: string,\n passphrase: string,\n keyCache: Map<string, CryptoKey>\n): Promise<{ encrypted: string; iv: string }> {\n const enc = new TextEncoder();\n const salt = crypto.getRandomValues(new Uint8Array(SALT_LENGTH));\n const saltB64 = bufToBase64(salt);\n let key = keyCache.get(saltB64);\n if (!key) {\n key = await deriveKey(passphrase, salt);\n keyCache.set(saltB64, key);\n }\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const rawCiphertext = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n enc.encode(plaintext)\n );\n // Prepend the salt to the ciphertext so decrypt can recover it.\n const ciphertextBytes = new Uint8Array(rawCiphertext);\n const combined = new Uint8Array(SALT_LENGTH + ciphertextBytes.length);\n combined.set(salt, 0);\n combined.set(ciphertextBytes, SALT_LENGTH);\n return {\n encrypted: bufToBase64(combined),\n iv: bufToBase64(iv),\n };\n}\n\n/**\n * Decrypts ciphertext encrypted with {@link encrypt}.\n *\n * @param keyCache - Per-store cache of derived CryptoKey instances keyed by base64(salt).\n */\nexport async function decrypt(\n encrypted: string,\n iv: string,\n passphrase: string,\n keyCache: Map<string, CryptoKey>\n): Promise<string> {\n const encryptedBuf = base64ToBuf(encrypted);\n const salt = encryptedBuf.subarray(0, SALT_LENGTH);\n const ciphertextBytes = encryptedBuf.subarray(SALT_LENGTH);\n const saltB64 = bufToBase64(salt);\n let key = keyCache.get(saltB64);\n if (!key) {\n key = await deriveKey(passphrase, salt);\n keyCache.set(saltB64, key);\n }\n const plainBuf = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: base64ToBuf(iv) as unknown as ArrayBuffer },\n key,\n ciphertextBytes as unknown as ArrayBuffer\n );\n return new TextDecoder().decode(plainBuf);\n}\n\nexport function bufToBase64(buf: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < buf.length; i++) {\n binary += String.fromCharCode(buf[i]);\n }\n return btoa(binary);\n}\n\nexport function base64ToBuf(b64: string): Uint8Array {\n const binary = atob(b64);\n const buf = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n buf[i] = binary.charCodeAt(i);\n }\n return buf;\n}\n",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\ninterface SpanEvent {\n readonly name: string;\n readonly attributes: SpanAttributes | undefined;\n}\n\n/**\n * A span that prints a formatted summary to console when ended.\n */\nclass ConsoleSpan implements ISpan {\n private readonly name: string;\n private readonly startTime: number;\n private attributes: SpanAttributes = {};\n private readonly events: SpanEvent[] = [];\n private statusCode: SpanStatusCode = SpanStatusCode.UNSET;\n private statusMessage: string | undefined;\n\n constructor(name: string, options?: SpanOptions) {\n this.name = name;\n this.startTime = performance.now();\n if (options?.attributes) {\n this.attributes = { ...options.attributes };\n }\n }\n\n setAttributes(attributes: SpanAttributes): void {\n Object.assign(this.attributes, attributes);\n }\n\n addEvent(name: string, attributes?: SpanAttributes): void {\n this.events.push({ name, attributes });\n }\n\n setStatus(code: SpanStatusCode, message?: string): void {\n this.statusCode = code;\n this.statusMessage = message;\n }\n\n end(): void {\n const duration = performance.now() - this.startTime;\n const parts: string[] = [`[telemetry] ${this.name} (${duration.toFixed(2)}ms)`];\n\n const attrKeys = Object.keys(this.attributes);\n if (attrKeys.length > 0) {\n parts.push(` attributes: ${JSON.stringify(this.attributes)}`);\n }\n\n for (const event of this.events) {\n const eventStr = event.attributes\n ? `${event.name} ${JSON.stringify(event.attributes)}`\n : event.name;\n parts.push(` event: ${eventStr}`);\n }\n\n if (this.statusCode === SpanStatusCode.OK) {\n parts.push(\" status: OK\");\n } else if (this.statusCode === SpanStatusCode.ERROR) {\n parts.push(` status: ERROR${this.statusMessage ? ` - ${this.statusMessage}` : \"\"}`);\n }\n\n const message = parts.join(\"\\n\");\n\n if (this.statusCode === SpanStatusCode.ERROR) {\n console.error(message);\n } else {\n console.debug(message);\n }\n }\n}\n\n/**\n * Lightweight telemetry provider that prints span summaries to console.\n * Useful for local development without requiring a full OpenTelemetry stack.\n */\nexport class ConsoleTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = true;\n\n startSpan(name: string, options?: SpanOptions): ISpan {\n return new ConsoleSpan(name, options);\n }\n}\n",
|
|
32
32
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\n/**\n * A no-op span that does nothing. Used when telemetry is disabled.\n */\nconst NOOP_SPAN: ISpan = {\n setAttributes(_attributes: SpanAttributes): void {},\n addEvent(_name: string, _attributes?: SpanAttributes): void {},\n setStatus(_code: SpanStatusCode, _message?: string): void {},\n end(): void {},\n};\n\n/**\n * Default no-op telemetry provider. All methods are zero-cost stubs.\n * This is the default provider when no telemetry backend is configured.\n */\nexport class NoopTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = false;\n\n startSpan(_name: string, _options?: SpanOptions): ISpan {\n return NOOP_SPAN;\n }\n}\n",
|
|
33
33
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\n/**\n * Minimal subset of the OpenTelemetry `Tracer` interface that we depend on.\n * This avoids a hard dependency on `@opentelemetry/api` while still being\n * fully compatible with `trace.getTracer()`.\n */\nexport interface OTelTracer {\n startSpan(name: string, options?: any, context?: any): OTelSpan;\n}\n\n/**\n * Minimal subset of the OpenTelemetry `Span` interface.\n */\nexport interface OTelSpan {\n setAttribute(key: string, value: string | number | boolean): any;\n addEvent(name: string, attributes?: Record<string, any>): any;\n setStatus(status: { code: number; message?: string }): any;\n end(): void;\n}\n\n/** Maps our SpanStatusCode to the OTel StatusCode numeric values. */\nconst STATUS_MAP: Record<SpanStatusCode, number> = {\n [SpanStatusCode.UNSET]: 0,\n [SpanStatusCode.OK]: 1,\n [SpanStatusCode.ERROR]: 2,\n};\n\n/**\n * Wraps an OTel Span to implement our ISpan interface.\n */\nclass OTelSpanWrapper implements ISpan {\n constructor(private readonly otelSpan: OTelSpan) {}\n\n setAttributes(attributes: SpanAttributes): void {\n for (const [key, value] of Object.entries(attributes)) {\n if (value !== undefined) {\n this.otelSpan.setAttribute(key, value);\n }\n }\n }\n\n addEvent(name: string, attributes?: SpanAttributes): void {\n const filtered = attributes\n ? Object.fromEntries(Object.entries(attributes).filter(([, v]) => v !== undefined))\n : undefined;\n this.otelSpan.addEvent(name, filtered);\n }\n\n setStatus(code: SpanStatusCode, message?: string): void {\n this.otelSpan.setStatus({ code: STATUS_MAP[code], message });\n }\n\n end(): void {\n this.otelSpan.end();\n }\n}\n\n/**\n * Telemetry provider backed by a real OpenTelemetry tracer.\n *\n * @example\n * ```ts\n * import { trace } from \"@opentelemetry/api\";\n * import { OTelTelemetryProvider, setTelemetryProvider } from \"@workglow/util\";\n *\n * const tracer = trace.getTracer(\"my-app\", \"1.0.0\");\n * setTelemetryProvider(new OTelTelemetryProvider(tracer));\n * ```\n */\nexport class OTelTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = true;\n\n constructor(private readonly tracer: OTelTracer) {}\n\n startSpan(name: string, options?: SpanOptions): ISpan {\n const otelOptions: Record<string, any> = {};\n if (options?.attributes) {\n otelOptions.attributes = Object.fromEntries(\n Object.entries(options.attributes).filter(([, v]) => v !== undefined)\n );\n }\n const otelSpan = this.tracer.startSpan(name, otelOptions);\n return new OTelSpanWrapper(otelSpan);\n }\n}\n",
|
|
34
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport { readRuntimeEnv } from \"../utilities/runtimeEnv\";\nimport { ConsoleTelemetryProvider } from \"./ConsoleTelemetryProvider\";\nimport type { ITelemetryProvider } from \"./ITelemetryProvider\";\nimport { NoopTelemetryProvider } from \"./NoopTelemetryProvider\";\n\n/**\n * Service token for the global telemetry provider instance.\n */\nexport const TELEMETRY_PROVIDER = createServiceToken<ITelemetryProvider>(\"telemetry\");\n\nfunction isTruthy(value: string | undefined): boolean {\n return value !== undefined && value !== \"\" && value !== \"0\" && value !== \"false\";\n}\n\nfunction createDefaultTelemetryProvider(): ITelemetryProvider {\n if (readRuntimeEnv(\"TELEMETRY\")?.toLowerCase() === \"console\") {\n return new ConsoleTelemetryProvider();\n }\n if (\n isTruthy(readRuntimeEnv(\"DEV\")) &&\n readRuntimeEnv(\"NODE_ENV\") !== \"test\" &&\n !isTruthy(readRuntimeEnv(\"VITEST\")) &&\n !isTruthy(readRuntimeEnv(\"CI\"))\n ) {\n return new ConsoleTelemetryProvider();\n }\n return new NoopTelemetryProvider();\n}\n\n
|
|
34
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry, ServiceRegistry } from \"../di/ServiceRegistry\";\nimport { readRuntimeEnv } from \"../utilities/runtimeEnv\";\nimport { ConsoleTelemetryProvider } from \"./ConsoleTelemetryProvider\";\nimport type { ITelemetryProvider } from \"./ITelemetryProvider\";\nimport { NoopTelemetryProvider } from \"./NoopTelemetryProvider\";\n\n/**\n * Service token for the global telemetry provider instance.\n */\nexport const TELEMETRY_PROVIDER = createServiceToken<ITelemetryProvider>(\"telemetry\");\n\nfunction isTruthy(value: string | undefined): boolean {\n return value !== undefined && value !== \"\" && value !== \"0\" && value !== \"false\";\n}\n\nfunction createDefaultTelemetryProvider(): ITelemetryProvider {\n if (readRuntimeEnv(\"TELEMETRY\")?.toLowerCase() === \"console\") {\n return new ConsoleTelemetryProvider();\n }\n if (\n isTruthy(readRuntimeEnv(\"DEV\")) &&\n readRuntimeEnv(\"NODE_ENV\") !== \"test\" &&\n !isTruthy(readRuntimeEnv(\"VITEST\")) &&\n !isTruthy(readRuntimeEnv(\"CI\"))\n ) {\n return new ConsoleTelemetryProvider();\n }\n return new NoopTelemetryProvider();\n}\n\n/**\n * Registers the default telemetry provider factory on the given registry.\n * Called by `bootstrapWorkglow` / `createOrchestrationContext`.\n */\nexport function registerTelemetryDefaults(registry: ServiceRegistry = globalServiceRegistry): void {\n registry.registerIfAbsent(TELEMETRY_PROVIDER, createDefaultTelemetryProvider, true);\n}\n\n// Self-register on the global registry. Idempotent.\nregisterTelemetryDefaults();\n\n/**\n * Returns the telemetry provider from the given registry (defaults to global).\n */\nexport function getTelemetryProvider(\n registry: ServiceRegistry = globalServiceRegistry\n): ITelemetryProvider {\n if (!registry.has(TELEMETRY_PROVIDER)) {\n registerTelemetryDefaults(registry);\n }\n return registry.get(TELEMETRY_PROVIDER);\n}\n\n/**\n * Replaces the telemetry provider on the given registry (defaults to global).\n *\n * @example\n * ```ts\n * import { OTelTelemetryProvider } from \"@workglow/util\";\n * import { trace } from \"@opentelemetry/api\";\n *\n * setTelemetryProvider(new OTelTelemetryProvider(trace.getTracer(\"my-app\")));\n * ```\n */\nexport function setTelemetryProvider(\n provider: ITelemetryProvider,\n registry: ServiceRegistry = globalServiceRegistry\n): void {\n registry.registerInstance(TELEMETRY_PROVIDER, provider);\n}\n",
|
|
35
35
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\nimport { getTelemetryProvider } from \"./TelemetryRegistry\";\n\n/**\n * Executes an async function within a telemetry span.\n */\nexport async function traced<T>(\n spanName: string,\n storageName: string,\n fn: () => Promise<T>\n): Promise<T> {\n const telemetry = getTelemetryProvider();\n if (!telemetry.isEnabled) return fn();\n const span = telemetry.startSpan(spanName, {\n attributes: { \"workglow.storage.name\": storageName },\n });\n try {\n const result = await fn();\n span.setStatus(SpanStatusCode.OK);\n return result;\n } catch (err) {\n span.setStatus(SpanStatusCode.ERROR, err instanceof Error ? err.message : String(err));\n throw err;\n } finally {\n span.end();\n }\n}\n",
|
|
36
36
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A keyed collection of async disposer functions for heavyweight resources.\n *\n * Task authors register disposers during execution. The caller who created\n * the scope decides when (or whether) to invoke them.\n *\n * First-registration-wins: if a key is already present, subsequent\n * registrations for that key are silently ignored.\n */\nexport class ResourceScope {\n private readonly disposers = new Map<string, () => Promise<void>>();\n\n /**\n * Register a disposer under the given key.\n * If the key already exists, the call is a no-op (first registration wins).\n */\n register(key: string, disposer: () => Promise<void>): void {\n if (!this.disposers.has(key)) {\n this.disposers.set(key, disposer);\n }\n }\n\n /**\n * Call and remove the disposer for the given key.\n * No-op if the key does not exist. Errors propagate to the caller.\n */\n async dispose(key: string): Promise<void> {\n const disposer = this.disposers.get(key);\n if (disposer) {\n this.disposers.delete(key);\n await disposer();\n }\n }\n\n /**\n * Call all disposers via Promise.allSettled (best-effort), then clear.\n * Individual disposer errors are silently swallowed.\n */\n async disposeAll(): Promise<void> {\n const fns = [...this.disposers.values()];\n this.disposers.clear();\n await Promise.allSettled(fns.map((fn) => fn()));\n }\n\n /** Check if a key is registered. */\n has(key: string): boolean {\n return this.disposers.has(key);\n }\n\n /** Iterate registered keys. */\n keys(): IterableIterator<string> {\n return this.disposers.keys();\n }\n\n /** Number of registered disposers. */\n get size(): number {\n return this.disposers.size;\n }\n\n /** Support `await using scope = new ResourceScope()`. */\n async [Symbol.asyncDispose](): Promise<void> {\n await this.disposeAll();\n }\n}\n",
|
|
37
37
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"../di\";\n\n/** Service token for the platform-specific WorkerServer instance. */\nexport const WORKER_SERVER = createServiceToken<WorkerServerBase>(\"worker.server\");\n\n/**\n * Extracts transferables from an object.\n * @param obj - The object to extract transferables from.\n * @returns An array of transferables.\n */\nfunction extractTransferables(obj: any) {\n const transferables: Transferable[] = [];\n const seen = new WeakSet();\n\n function findTransferables(value: any) {\n // Avoid infinite recursion\n if (value && typeof value === \"object\" && seen.has(value)) {\n return;\n }\n if (value && typeof value === \"object\") {\n seen.add(value);\n }\n\n // Handle TypedArrays\n if (value instanceof Float32Array || value instanceof Int16Array) {\n transferables.push(value.buffer);\n }\n // Handle other TypedArrays\n else if (\n value instanceof Uint8Array ||\n value instanceof Uint8ClampedArray ||\n value instanceof Int8Array ||\n value instanceof Uint16Array ||\n value instanceof Int32Array ||\n value instanceof Uint32Array ||\n value instanceof Float64Array ||\n value instanceof BigInt64Array ||\n value instanceof BigUint64Array\n ) {\n transferables.push(value.buffer);\n }\n // Handle OffscreenCanvas\n else if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n transferables.push(value);\n }\n // Handle ImageBitmap\n else if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n transferables.push(value);\n }\n // Handle VideoFrame\n else if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n transferables.push(value);\n }\n // Handle MessagePort\n else if (typeof MessagePort !== \"undefined\" && value instanceof MessagePort) {\n transferables.push(value);\n }\n // Handle ArrayBuffer\n else if (value instanceof ArrayBuffer) {\n transferables.push(value);\n }\n // Recursively search arrays and objects\n else if (Array.isArray(value)) {\n value.forEach(findTransferables);\n } else if (value && typeof value === \"object\") {\n Object.values(value).forEach(findTransferables);\n }\n }\n\n findTransferables(obj);\n return transferables;\n}\n\n/**\n * WorkerServerBase is a class that handles messages from the main thread to the worker.\n * It is used to register functions that can be called from the main thread.\n * It also handles the transfer of transferables to the main thread.\n */\nexport class WorkerServerBase {\n constructor() {} // overridden in subclasses\n\n private functions: Record<string, (...args: any[]) => Promise<any>> = {};\n private streamFunctions: Record<string, (...args: any[]) => AsyncIterable<any>> = {};\n private previewFunctions: Record<string, (input: any, model: any) => Promise<any>> = {};\n\n // Keep track of each request's AbortController\n private requestControllers = new Map<string, AbortController>();\n // Keep track of requests that have already been responded to\n private completedRequests = new Set<string>();\n\n private postResult = (id: string, result: any) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n const transferables = extractTransferables(result);\n const uniqueTransferables = [...new Set(transferables)];\n // @ts-ignore - Ignore type mismatch between standard Transferable and Bun.Transferable\n postMessage({ id, type: \"complete\", data: result }, uniqueTransferables);\n };\n\n private postError = (id: string, error: unknown) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n let data: { message: string; name: string };\n if (typeof error === \"string\") {\n data = { message: error, name: \"Error\" };\n } else if (error instanceof Error) {\n data = { message: error.message, name: error.name };\n } else {\n data = { message: String(error), name: \"Error\" };\n }\n postMessage({ id, type: \"error\", data });\n };\n\n private postStreamChunk = (id: string, event: any) => {\n if (this.completedRequests.has(id)) {\n return;\n }\n postMessage({ id, type: \"stream_chunk\", data: event });\n };\n\n /**\n * Send the ready message to the main thread, advertising which functions are\n * registered in each category. Call this after all functions have been registered\n * so WorkerManager can skip unnecessary roundtrips for unregistered calls.\n */\n sendReady() {\n // @ts-ignore\n postMessage({\n type: \"ready\",\n functions: Object.keys(this.functions),\n streamFunctions: Object.keys(this.streamFunctions),\n previewFunctions: Object.keys(this.previewFunctions),\n });\n }\n\n registerFunction(name: string, fn: (...args: any[]) => Promise<any>) {\n this.functions[name] = fn;\n }\n\n /**\n * Register a preview function for lightweight preview execution.\n * Preview functions receive (input, model) and return a fast preview\n * without progress tracking or abort signals.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async function: (input, model) => Promise<output | undefined>\n */\n registerPreviewFunction(name: string, fn: (input: any, model: any) => Promise<any>) {\n this.previewFunctions[name] = fn;\n }\n\n /**\n * Register an async generator function for streaming execution.\n * When called via the worker protocol with `stream: true`, the server\n * iterates the generator and sends each yielded value as a `stream_chunk`\n * message, followed by a `complete` message when the generator finishes.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async generator function: (input, model, signal) => AsyncIterable\n */\n registerStreamFunction(name: string, fn: (...args: any[]) => AsyncIterable<any>) {\n this.streamFunctions[name] = fn;\n }\n\n // Handle messages from the main thread\n async handleMessage(event: { type: string; data: any }) {\n const { id, type, functionName, args, stream, preview } = event.data;\n if (type === \"abort\") {\n return await this.handleAbort(id);\n }\n if (type === \"call\") {\n if (stream) {\n return await this.handleStreamCall(id, functionName, args);\n }\n if (preview) {\n return await this.handlePreviewCall(id, functionName, args);\n }\n return await this.handleCall(id, functionName, args);\n }\n }\n\n async handleAbort(id: string) {\n if (this.requestControllers.has(id)) {\n const controller = this.requestControllers.get(id);\n controller?.abort();\n this.requestControllers.delete(id);\n // Send error response back to main thread so the promise rejects\n this.postError(id, \"Operation aborted\");\n this.scheduleCompletedRequestCleanup(id);\n }\n }\n\n /**\n * Handle a preview call. Returns undefined (non-error) if the preview\n * function is not registered, since not all task types expose a preview fn.\n */\n async handlePreviewCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (!(functionName in this.previewFunctions)) {\n this.postResult(id, undefined);\n return;\n }\n try {\n const fn = this.previewFunctions[functionName];\n const result = await fn(input, model);\n this.postResult(id, result);\n } catch (error) {\n this.postError(id, error);\n }\n }\n\n async handleCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (!(functionName in this.functions)) {\n this.postError(id, `Function ${functionName} not found`);\n return;\n }\n\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const postProgress = (progress: number, message?: string, details?: any) => {\n // Don't send progress updates after the request is completed/aborted\n if (!this.completedRequests.has(id)) {\n postMessage({ id, type: \"progress\", data: { progress, message, details } });\n }\n };\n const result = await fn(input, model, postProgress, abortController.signal);\n this.postResult(id, result);\n } catch (error) {\n this.postError(id, error);\n } finally {\n this.requestControllers.delete(id);\n this.scheduleCompletedRequestCleanup(id);\n }\n }\n\n /**\n * Handle a streaming call. If a stream function is registered for the given name,\n * iterate it and send each yielded event as a `stream_chunk` message. If only a\n * regular function is registered, run it and wrap the result as a single `finish`\n * stream event (graceful fallback for providers that don't implement streaming).\n */\n async handleStreamCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (functionName in this.streamFunctions) {\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.streamFunctions[functionName];\n const iterable = fn(input, model, abortController.signal);\n\n for await (const event of iterable) {\n if (this.completedRequests.has(id)) break;\n this.postStreamChunk(id, event);\n }\n\n this.postResult(id, undefined);\n } catch (error) {\n this.postError(id, error);\n } finally {\n this.requestControllers.delete(id);\n this.scheduleCompletedRequestCleanup(id);\n }\n } else if (functionName in this.functions) {\n // Fallback: run regular function and wrap result as a finish stream event\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const noopProgress = () => {};\n const result = await fn(input, model, noopProgress, abortController.signal);\n\n this.postStreamChunk(id, { type: \"finish\", data: result });\n this.postResult(id, undefined);\n } catch (error) {\n this.postError(id, error);\n } finally {\n this.requestControllers.delete(id);\n this.scheduleCompletedRequestCleanup(id);\n }\n } else {\n this.postError(id, `Function ${functionName} not found`);\n }\n }\n\n /**\n * Schedule cleanup of a completed request ID. Uses a 5-second delay to\n * handle late-arriving abort messages, and caps the completed set size\n * to prevent unbounded growth.\n */\n private scheduleCompletedRequestCleanup(id: string): void {\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 5000);\n\n // Safety cap: if the set grows too large, clear the oldest entries\n if (this.completedRequests.size > 1000) {\n const iter = this.completedRequests.values();\n for (let i = 0; i < 500; i++) {\n const entry = iter.next();\n if (entry.done) break;\n this.completedRequests.delete(entry.value);\n }\n }\n }\n}\n",
|
|
38
38
|
"const Worker = globalThis.Worker;\nconst parentPort = self;\nexport { Worker, parentPort };\n\nimport { WorkerServerBase, WORKER_SERVER } from \"./WorkerServerBase\";\nimport { globalServiceRegistry } from \"../di\";\nexport { WORKER_SERVER };\nexport class WorkerServer extends WorkerServerBase {\n constructor() {\n parentPort?.addEventListener(\"message\", async (event) => {\n const msg = {\n type: event.type,\n // @ts-ignore - Ignore type mismatch between standard MessageEvent and our message type\n data: event.data,\n };\n await this.handleMessage(msg);\n });\n super();\n }\n}\n\nglobalServiceRegistry.register(WORKER_SERVER, () => new WorkerServer(), true);\n"
|
|
39
39
|
],
|
|
40
|
-
"mappings": "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",
|
|
41
|
-
"debugId": "
|
|
40
|
+
"mappings": "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",
|
|
41
|
+
"debugId": "E4FFC4B43EA2A3AA64756E2164756E21",
|
|
42
42
|
"names": []
|
|
43
43
|
}
|