@workglow/task-graph 0.2.17 → 0.2.18
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 +112 -5
- package/dist/browser.js.map +10 -7
- package/dist/bun.js +112 -5
- package/dist/bun.js.map +10 -7
- package/dist/common.d.ts +3 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/node.js +112 -5
- package/dist/node.js.map +10 -7
- package/dist/refcountable.d.ts +29 -0
- package/dist/refcountable.d.ts.map +1 -0
- package/dist/storage/PortCodecRegistry.d.ts +8 -0
- package/dist/storage/PortCodecRegistry.d.ts.map +1 -0
- package/dist/task/InputResolver.d.ts.map +1 -1
- package/dist/task/TaskRunner.d.ts.map +1 -1
- package/dist/task-graph/TaskGraphRunner.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/__tests__/public-exports.test.d.ts +0 -7
- package/dist/__tests__/public-exports.test.d.ts.map +0 -1
package/dist/node.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/task-graph/Dataflow.ts", "../src/task/TaskError.ts", "../src/task/TaskTypes.ts", "../src/task-graph/TransformRegistry.ts", "../src/task/TaskEntitlements.ts", "../src/task-graph/GraphEntitlementUtils.ts", "../src/task/InputResolver.ts", "../src/task-graph/GraphFormatScanner.ts", "../src/task-graph/GraphSchemaUtils.ts", "../src/task-graph/TaskGraph.ts", "../src/task/GraphAsTask.ts", "../src/task-graph/TaskGraphRunner.ts", "../src/storage/TaskOutputRepository.ts", "../src/task/ConditionalTask.ts", "../src/task/ConditionUtils.ts", "../src/task/Task.ts", "../src/task/TaskRunner.ts", "../src/task/StreamTypes.ts", "../src/task/EntitlementEnforcer.ts", "../src/task/EntitlementPolicy.ts", "../src/task/EntitlementResolver.ts", "../src/task-graph/TaskGraphScheduler.ts", "../src/task/GraphAsTaskRunner.ts", "../src/task-graph/Conversions.ts", "../src/task-graph/TaskGraphEvents.ts", "../src/task-graph/Workflow.ts", "../src/task-graph/autoConnect.ts", "../src/task-graph/ConditionalBuilder.ts", "../src/task-graph/GraphToWorkflowCode.ts", "../src/task-graph/transforms/pick.ts", "../src/task-graph/transforms/index-access.ts", "../src/task-graph/transforms/coalesce.ts", "../src/task-graph/transforms/string-casts.ts", "../src/task-graph/transforms/date-conversions.ts", "../src/task-graph/transforms/scalar-conversions.ts", "../src/task-graph/transforms/index.ts", "../src/task/EntitlementProfiles.ts", "../src/task/FallbackTaskRunner.ts", "../src/task/FallbackTask.ts", "../src/task/InputCompactor.ts", "../src/task/IteratorTaskRunner.ts", "../src/task/IteratorTask.ts", "../src/task/WhileTaskRunner.ts", "../src/task/WhileTask.ts", "../src/task/iterationSchema.ts", "../src/task/JobQueueFactory.ts", "../src/task/MapTask.ts", "../src/task/ReduceTask.ts", "../src/task/TaskRegistry.ts", "../src/task/TaskJSON.ts", "../src/task/TaskQueueRegistry.ts", "../src/task/index.ts", "../src/storage/TaskGraphRepository.ts", "../src/storage/TaskGraphTabularRepository.ts", "../src/storage/TaskOutputTabularRepository.ts"],
|
|
3
|
+
"sources": ["../src/task-graph/Dataflow.ts", "../src/task/TaskError.ts", "../src/task/TaskTypes.ts", "../src/task-graph/TransformRegistry.ts", "../src/task/TaskEntitlements.ts", "../src/task-graph/GraphEntitlementUtils.ts", "../src/task/InputResolver.ts", "../src/task-graph/GraphFormatScanner.ts", "../src/task-graph/GraphSchemaUtils.ts", "../src/task-graph/TaskGraph.ts", "../src/task/GraphAsTask.ts", "../src/task-graph/TaskGraphRunner.ts", "../src/refcountable.ts", "../src/storage/TaskOutputRepository.ts", "../src/task/ConditionalTask.ts", "../src/task/ConditionUtils.ts", "../src/task/Task.ts", "../src/task/TaskRunner.ts", "../src/task/StreamTypes.ts", "../src/task/EntitlementEnforcer.ts", "../src/task/EntitlementPolicy.ts", "../src/task/EntitlementResolver.ts", "../src/task-graph/TaskGraphScheduler.ts", "../src/task/GraphAsTaskRunner.ts", "../src/task-graph/Conversions.ts", "../src/task-graph/TaskGraphEvents.ts", "../src/task-graph/Workflow.ts", "../src/task-graph/autoConnect.ts", "../src/task-graph/ConditionalBuilder.ts", "../src/task-graph/GraphToWorkflowCode.ts", "../src/task-graph/transforms/pick.ts", "../src/task-graph/transforms/index-access.ts", "../src/task-graph/transforms/coalesce.ts", "../src/task-graph/transforms/string-casts.ts", "../src/task-graph/transforms/date-conversions.ts", "../src/task-graph/transforms/scalar-conversions.ts", "../src/task-graph/transforms/index.ts", "../src/task/EntitlementProfiles.ts", "../src/task/FallbackTaskRunner.ts", "../src/task/FallbackTask.ts", "../src/task/InputCompactor.ts", "../src/task/IteratorTaskRunner.ts", "../src/task/IteratorTask.ts", "../src/task/WhileTaskRunner.ts", "../src/task/WhileTask.ts", "../src/task/iterationSchema.ts", "../src/task/JobQueueFactory.ts", "../src/task/MapTask.ts", "../src/task/ReduceTask.ts", "../src/task/TaskRegistry.ts", "../src/task/TaskJSON.ts", "../src/task/TaskQueueRegistry.ts", "../src/task/index.ts", "../src/storage/TaskGraphRepository.ts", "../src/storage/TaskGraphTabularRepository.ts", "../src/storage/TaskOutputTabularRepository.ts", "../src/storage/PortCodecRegistry.ts", "../src/node.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { areSemanticallyCompatible } from \"@workglow/util/schema\";\nimport { EventEmitter } from \"@workglow/util\";\nimport type { StreamEvent } from \"../task/StreamTypes\";\nimport { TaskError } from \"../task/TaskError\";\nimport { DataflowJson } from \"../task/TaskJSON\";\nimport { TaskIdType, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport { Task } from \"../task/Task\";\nimport {\n DataflowEventListener,\n DataflowEventListeners,\n DataflowEventParameters,\n DataflowEvents,\n} from \"./DataflowEvents\";\nimport { TaskGraph } from \"./TaskGraph\";\nimport { TRANSFORM_DEFS, TransformRegistry } from \"./TransformRegistry\";\nimport type { ITransformStep } from \"./TransformTypes\";\nimport type { ServiceRegistry } from \"@workglow/util\";\n\nexport type DataflowIdType = `${string}[${string}] ==> ${string}[${string}]`;\n\nexport const DATAFLOW_ALL_PORTS = \"*\";\nexport const DATAFLOW_ERROR_PORT = \"[error]\";\n\n/**\n * Represents a data flow between two tasks, indicating how one task's output is used as input for another task\n */\nexport class Dataflow {\n constructor(\n public sourceTaskId: TaskIdType,\n public sourceTaskPortId: string,\n public targetTaskId: TaskIdType,\n public targetTaskPortId: string\n ) {}\n public static createId(\n sourceTaskId: TaskIdType,\n sourceTaskPortId: string,\n targetTaskId: TaskIdType,\n targetTaskPortId: string\n ): DataflowIdType {\n return `${sourceTaskId}[${sourceTaskPortId}] ==> ${targetTaskId}[${targetTaskPortId}]`;\n }\n get id(): DataflowIdType {\n return Dataflow.createId(\n this.sourceTaskId,\n this.sourceTaskPortId,\n this.targetTaskId,\n this.targetTaskPortId\n );\n }\n public value: any = undefined;\n public status: TaskStatus = TaskStatus.PENDING;\n public error: TaskError | undefined;\n\n /**\n * Active stream for this dataflow edge.\n * Set when a streaming upstream task begins producing chunks.\n * Multiple downstream consumers can each get an independent reader via tee().\n */\n public stream: ReadableStream<StreamEvent> | undefined = undefined;\n\n /**\n * Sets the active stream on this dataflow.\n * @param stream The ReadableStream of StreamEvents from the upstream task\n */\n public setStream(stream: ReadableStream<StreamEvent>): void {\n this.stream = stream;\n }\n\n /**\n * Gets the active stream from this dataflow, or undefined if not streaming.\n */\n public getStream(): ReadableStream<StreamEvent> | undefined {\n return this.stream;\n }\n\n /**\n * Consumes the active stream to completion and materializes the value.\n *\n * Accumulation of text-delta chunks is the responsibility of the **source\n * task** (via TaskRunner.executeStreamingTask when shouldAccumulate=true).\n * When accumulation is needed the source task emits an enriched finish event\n * that carries the fully-assembled port data. All downstream edges share that\n * enriched event through tee'd ReadableStreams, so no edge needs to\n * re-accumulate independently.\n *\n * This method therefore only reads snapshot and finish events:\n * - **snapshot**: used for replace-mode tasks that emit incremental snapshots.\n * - **finish**: the primary materialization path; carries complete data when\n * the source task accumulated, or provider-level data otherwise.\n * - text-delta / object-delta: ignored here (handled by source task).\n *\n * After consumption the stream reference is cleared. Calling this method on\n * a dataflow that has no stream is a no-op.\n */\n public async awaitStreamValue(): Promise<void> {\n if (!this.stream) return;\n\n const reader = this.stream.getReader();\n let lastSnapshotData: any = undefined;\n let finishData: any = undefined;\n let streamError: Error | undefined;\n\n try {\n while (true) {\n const { done, value: event } = await reader.read();\n if (done) break;\n\n switch (event.type) {\n case \"snapshot\":\n lastSnapshotData = event.data;\n break;\n case \"finish\":\n finishData = event.data;\n break;\n case \"error\":\n streamError = event.error;\n break;\n // text-delta, object-delta: source task handles accumulation\n }\n }\n } finally {\n reader.releaseLock();\n this.stream = undefined;\n }\n\n if (streamError) {\n this.error = streamError as TaskError;\n this.setStatus(TaskStatus.FAILED);\n throw streamError;\n }\n\n // Priority: snapshot > finish.\n // The source task enriches the finish event with accumulated text when\n // shouldAccumulate=true, so finishData carries complete port data.\n if (lastSnapshotData !== undefined) {\n this.setPortData(lastSnapshotData);\n } else if (finishData !== undefined) {\n this.setPortData(finishData);\n }\n }\n\n public reset() {\n this.status = TaskStatus.PENDING;\n this.error = undefined;\n this.value = undefined;\n this.stream = undefined;\n this._compatibilityCache = undefined;\n this.emit(\"reset\");\n this.emit(\"status\", this.status);\n }\n\n public setStatus(status: TaskStatus) {\n if (status === this.status) return;\n this.status = status;\n switch (status) {\n case TaskStatus.PROCESSING:\n this.emit(\"start\");\n break;\n case TaskStatus.STREAMING:\n this.emit(\"streaming\");\n break;\n case TaskStatus.COMPLETED:\n this.emit(\"complete\");\n break;\n case TaskStatus.ABORTING:\n this.emit(\"abort\");\n break;\n case TaskStatus.PENDING:\n this.emit(\"reset\");\n break;\n case TaskStatus.FAILED:\n this.emit(\"error\", this.error!);\n break;\n case TaskStatus.DISABLED:\n this.emit(\"disabled\");\n break;\n }\n this.emit(\"status\", this.status);\n }\n\n setPortData(entireDataBlock: any) {\n if (this.sourceTaskPortId === DATAFLOW_ALL_PORTS) {\n this.value = entireDataBlock;\n } else if (this.sourceTaskPortId === DATAFLOW_ERROR_PORT) {\n this.error = entireDataBlock;\n } else {\n this.value = entireDataBlock[this.sourceTaskPortId];\n }\n }\n\n getPortData(): TaskOutput {\n let result: TaskOutput;\n if (this.targetTaskPortId === DATAFLOW_ALL_PORTS) {\n result = this.value;\n } else if (this.targetTaskPortId === DATAFLOW_ERROR_PORT) {\n result = { [DATAFLOW_ERROR_PORT]: this.error };\n } else {\n result = { [this.targetTaskPortId]: this.value };\n }\n return result;\n }\n\n toJSON(): DataflowJson {\n const base: DataflowJson = {\n sourceTaskId: this.sourceTaskId,\n sourceTaskPortId: this.sourceTaskPortId,\n targetTaskId: this.targetTaskId,\n targetTaskPortId: this.targetTaskPortId,\n };\n if (this._transforms.length > 0) {\n base.transforms = this._transforms.map((s) => ({ id: s.id, params: s.params }));\n }\n return base;\n }\n\n /**\n * Cached result of the last semantic compatibility check.\n * Invalidated by calling {@link invalidateCompatibilityCache}.\n */\n protected _compatibilityCache?: \"static\" | \"runtime\" | \"incompatible\";\n\n /**\n * Transform steps applied to data flowing through this dataflow.\n */\n private _transforms: Array<ITransformStep> = [];\n\n /**\n * Returns the list of transform steps applied to this dataflow.\n */\n getTransforms(): ReadonlyArray<ITransformStep> {\n return this._transforms;\n }\n\n /**\n * Replaces the transform chain with the given steps and invalidates the compatibility cache.\n * Accepts either strict {@link ITransformStep} or steps whose `params` is omitted;\n * omitted `params` is normalised to `undefined`.\n */\n setTransforms(\n steps: ReadonlyArray<{ readonly id: string; readonly params?: Record<string, unknown> }>\n ): void {\n this._transforms = steps.map((s) => ({ id: s.id, params: s.params }));\n this.invalidateCompatibilityCache();\n }\n\n /**\n * Appends a single transform step to the chain and invalidates the compatibility cache.\n * Accepts either strict {@link ITransformStep} or a step whose `params` is omitted;\n * omitted `params` is normalised to `undefined`.\n */\n addTransform(step: { readonly id: string; readonly params?: Record<string, unknown> }): void {\n this._transforms.push({ id: step.id, params: step.params });\n this.invalidateCompatibilityCache();\n }\n\n /**\n * Removes the transform step at the given index and invalidates the compatibility cache.\n */\n removeTransform(index: number): void {\n this._transforms.splice(index, 1);\n this.invalidateCompatibilityCache();\n }\n\n /**\n * Fold the transform chain over `this.value`. On any throw, sets\n * `this.error` and TaskStatus.FAILED, then re-throws so the caller\n * (typically TaskGraphRunner) fails the run. Without the re-throw the\n * runner's status-push step would overwrite the FAILED edge state with\n * the source task's COMPLETED status, silently delivering corrupt data.\n */\n async applyTransforms(registry: ServiceRegistry): Promise<void> {\n if (this._transforms.length === 0) return;\n const defs = registry.get(TRANSFORM_DEFS);\n let cur: unknown = this.value;\n try {\n for (const step of this._transforms) {\n const def = defs.get(step.id);\n if (!def) {\n throw new Error(`Unknown transform: ${step.id}`);\n }\n cur = await def.apply(cur, step.params ?? {});\n }\n this.value = cur;\n } catch (e) {\n const error =\n e instanceof TaskError ? e : new TaskError(e instanceof Error ? e.message : String(e));\n if (!(e instanceof TaskError) && e instanceof Error && e.stack) {\n error.stack = e.stack;\n }\n this.error = error;\n this.setStatus(TaskStatus.FAILED);\n throw e;\n }\n }\n\n /**\n * Invalidates the cached semantic compatibility result so the next call\n * to {@link semanticallyCompatible} recomputes it. Call this when\n * either endpoint's schema changes (e.g., in response to a schemaChange event).\n */\n public invalidateCompatibilityCache(): void {\n this._compatibilityCache = undefined;\n }\n\n semanticallyCompatible(\n graph: TaskGraph,\n dataflow: Dataflow,\n registry?: ServiceRegistry\n ): \"static\" | \"runtime\" | \"incompatible\" {\n const sourceTask = graph.getTask(dataflow.sourceTaskId)!;\n const targetTask = graph.getTask(dataflow.targetTaskId)!;\n\n // Only use the cache when both endpoint tasks have stable (non-dynamic) schemas.\n // Tasks with dynamic schemas may emit `schemaChange` events, which would make\n // a cached result stale. Checking the static `hasDynamicSchemas` flag (defined\n // on Task with a default of `false`) is sufficient because tasks with stable\n // schemas never emit `schemaChange`. Unknown constructors default to no caching.\n const shouldCache =\n !((sourceTask.constructor as typeof Task).hasDynamicSchemas ?? true) &&\n !((targetTask.constructor as typeof Task).hasDynamicSchemas ?? true);\n\n if (shouldCache && this._compatibilityCache !== undefined) {\n return this._compatibilityCache;\n }\n\n const targetSchema = targetTask.inputSchema();\n const sourceSchema = sourceTask.outputSchema();\n\n if (typeof targetSchema === \"boolean\") {\n if (targetSchema === false) {\n return \"incompatible\";\n }\n return \"static\";\n }\n if (typeof sourceSchema === \"boolean\") {\n if (sourceSchema === false) {\n return \"incompatible\";\n }\n return \"runtime\";\n }\n\n let targetSchemaProperty =\n DATAFLOW_ALL_PORTS === dataflow.targetTaskPortId\n ? true // Accepts any schema (equivalent to Type.Any())\n : (targetSchema.properties as any)?.[dataflow.targetTaskPortId];\n // If the specific property doesn't exist but additionalProperties is true,\n // treat it as accepting any schema\n if (targetSchemaProperty === undefined && targetSchema.additionalProperties === true) {\n targetSchemaProperty = true;\n }\n let sourceSchemaProperty =\n DATAFLOW_ALL_PORTS === dataflow.sourceTaskPortId\n ? true // Accepts any schema (equivalent to Type.Any())\n : (sourceSchema.properties as any)?.[dataflow.sourceTaskPortId];\n // If the specific property doesn't exist but additionalProperties is true,\n // treat it as outputting any schema\n if (sourceSchemaProperty === undefined && sourceSchema.additionalProperties === true) {\n sourceSchemaProperty = true;\n }\n\n // Compose source schema through the transform chain before comparing.\n // Resolves transform defs from the same registry used by applyTransforms so\n // that custom TRANSFORM_DEFS overrides are reflected in both places.\n // When the source schema is `true` (accepts any — e.g. a boundary task\n // with `additionalProperties: true`), start the chain from `{}` so\n // transforms can still narrow the effective schema. Without this a chain\n // like `pick → unixToIsoDate` from an InputTask would short-circuit to\n // \"static\" against any target regardless of the transforms' output type.\n let effectiveSourceSchema = sourceSchemaProperty;\n if (this._transforms.length > 0) {\n const defs = registry ? registry.get(TRANSFORM_DEFS) : TransformRegistry.all;\n try {\n let cur: any = effectiveSourceSchema === true ? {} : effectiveSourceSchema;\n for (const step of this._transforms) {\n const def = defs.get(step.id);\n if (!def) {\n // Do not cache missing transform definitions because the registry\n // supports runtime registration and a later call may become compatible.\n return \"incompatible\";\n }\n cur = def.inferOutputSchema(cur, step.params ?? {});\n }\n effectiveSourceSchema = cur;\n } catch {\n if (shouldCache) this._compatibilityCache = \"incompatible\";\n return \"incompatible\";\n }\n }\n\n const result = areSemanticallyCompatible(effectiveSourceSchema, targetSchemaProperty);\n if (shouldCache) {\n this._compatibilityCache = result;\n }\n return result;\n }\n\n // ========================================================================\n // Event handling methods\n // ========================================================================\n\n /**\n * Event emitter for dataflow events\n */\n public get events(): EventEmitter<DataflowEventListeners> {\n if (!this._events) {\n this._events = new EventEmitter<DataflowEventListeners>();\n }\n return this._events;\n }\n protected _events: EventEmitter<DataflowEventListeners> | undefined;\n\n public subscribe<Event extends DataflowEvents>(\n name: Event,\n fn: DataflowEventListener<Event>\n ): () => void {\n return this.events.subscribe(name, fn);\n }\n\n /**\n * Registers an event listener\n */\n public on<Event extends DataflowEvents>(name: Event, fn: DataflowEventListener<Event>): void {\n this.events.on(name, fn);\n }\n\n /**\n * Removes an event listener\n */\n public off<Event extends DataflowEvents>(name: Event, fn: DataflowEventListener<Event>): void {\n this.events.off(name, fn);\n }\n\n /**\n * Registers a one-time event listener\n */\n public once<Event extends DataflowEvents>(name: Event, fn: DataflowEventListener<Event>): void {\n this.events.once(name, fn);\n }\n\n /**\n * Returns a promise that resolves when the specified event is emitted\n */\n public waitOn<Event extends DataflowEvents>(\n name: Event\n ): Promise<DataflowEventParameters<Event>> {\n return this.events.waitOn(name) as Promise<DataflowEventParameters<Event>>;\n }\n\n /**\n * Emits an event\n */\n public emit<Event extends DataflowEvents>(\n name: Event,\n ...args: DataflowEventParameters<Event>\n ): void {\n this._events?.emit(name, ...args);\n }\n}\n\n/**\n * Represents a data flow between two tasks, indicating how one task's output is used as input for another task\n *\n * This is a helper class that parses a data flow id string into a Dataflow object\n *\n * @param dataflow - The data flow string, e.g. \"sourceTaskId[sourceTaskPortId] ==> targetTaskId[targetTaskPortId]\"\n */\nexport class DataflowArrow extends Dataflow {\n constructor(dataflow: DataflowIdType) {\n // Parse the dataflow string using regex\n const pattern =\n /^([a-zA-Z0-9-]+?)\\[([a-zA-Z0-9-]+?)\\] ==> ([a-zA-Z0-9-]+?)\\[([a-zA-Z0-9-]+?)\\]$/;\n const match = dataflow.match(pattern);\n\n if (!match) {\n throw new Error(`Invalid dataflow format: ${dataflow}`);\n }\n\n const [, sourceTaskId, sourceTaskPortId, targetTaskId, targetTaskPortId] = match;\n super(sourceTaskId, sourceTaskPortId, targetTaskId, targetTaskPortId);\n }\n}\n",
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobError } from \"@workglow/job-queue\";\nimport { BaseError } from \"@workglow/util\";\n\nexport class TaskError extends BaseError {\n static override readonly type: string = \"TaskError\";\n /** The type of the task that produced this error, if available. */\n public taskType?: string;\n /** The ID of the task that produced this error, if available. */\n public taskId?: unknown;\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A task configuration error\n *\n */\nexport class TaskConfigurationError extends TaskError {\n static override readonly type: string = \"TaskConfigurationError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A task workflow error\n */\nexport class WorkflowError extends TaskError {\n static override readonly type: string = \"WorkflowError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A task error that is caused by a task being aborted\n *\n * Examples: task.abort() was called, or some other reason an abort signal was received\n */\nexport class TaskAbortedError extends TaskError {\n static override readonly type: string = \"TaskAbortedError\";\n constructor(message: string = \"Task aborted\") {\n super(message);\n }\n}\n\n/**\n * A task error that is caused by a task exceeding its timeout\n *\n * Examples: task.runConfig.timeout exceeded during execution\n */\nexport class TaskTimeoutError extends TaskAbortedError {\n static override readonly type: string = \"TaskTimeoutError\";\n constructor(timeoutMs?: number) {\n super(timeoutMs ? `Task timed out after ${timeoutMs}ms` : \"Task timed out\");\n }\n}\n\n/**\n * Thrown when graph-level execution exceeds the configured `timeout` in\n * {@link TaskGraphRunConfig}. Distinct from {@link TaskTimeoutError} (which is\n * thrown for individual-task timeouts) so callers can tell whether the timeout\n * was on a single task or on the entire graph run.\n */\nexport class TaskGraphTimeoutError extends TaskTimeoutError {\n static override readonly type: string = \"TaskGraphTimeoutError\";\n constructor(timeoutMs?: number) {\n super(timeoutMs);\n // Override the message set by TaskTimeoutError to make it graph-specific.\n this.message = timeoutMs\n ? `Graph execution timed out after ${timeoutMs}ms`\n : \"Graph execution timed out\";\n }\n}\n\n/**\n * A task error that is caused by a task failing\n *\n * Examples: task.run() threw an error\n */\nexport class TaskFailedError extends TaskError {\n static override readonly type: string = \"TaskFailedError\";\n constructor(message: string = \"Task failed\") {\n super(message);\n }\n}\n\nexport class JobTaskFailedError extends TaskFailedError {\n static override readonly type: string = \"JobTaskFailedError\";\n public jobError: JobError;\n constructor(err: JobError) {\n super(String(err));\n this.jobError = err;\n }\n}\n\n/**\n * A task error that is caused by an error converting JSON to a Task\n */\nexport class TaskJSONError extends TaskError {\n static override readonly type: string = \"TaskJSONError\";\n constructor(message: string = \"Error converting JSON to a Task\") {\n super(message);\n }\n}\n\n/**\n * A task error that is caused by invalid input data\n *\n * Examples: task.run() received invalid input data\n */\nexport class TaskInvalidInputError extends TaskError {\n static override readonly type: string = \"TaskInvalidInputError\";\n constructor(message: string = \"Invalid input data\") {\n super(message);\n }\n}\n\n/**\n * Thrown when required entitlements are denied by the registered enforcer.\n */\nexport class TaskEntitlementError extends TaskError {\n static override readonly type: string = \"TaskEntitlementError\";\n constructor(message: string = \"Required entitlements denied\") {\n super(message);\n }\n}\n\n/**\n * Thrown when toJSON is called on a task whose config contains non-serializable\n * values (e.g. functions). Tasks should override canSerializeConfig() to declare\n * whether they support serialization.\n */\nexport class TaskSerializationError extends TaskError {\n static override readonly type: string = \"TaskSerializationError\";\n constructor(taskType: string) {\n super(\n `Task \"${taskType}\" cannot be serialized: config contains non-serializable values. ` +\n `Use a declarative config alternative or remove function-valued config properties.`\n );\n }\n}\n",
|
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
"/**\n * @license Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"@workglow/util\";\nimport type { ITransformDef } from \"./TransformTypes\";\n\nconst transformDefs = new Map<string, ITransformDef<any>>();\n\n/** Register / unregister / inspect global transforms. */\nexport const TransformRegistry = {\n all: transformDefs,\n registerTransform(def: ITransformDef<any>): void {\n transformDefs.set(def.id, def);\n },\n unregisterTransform(id: string): void {\n transformDefs.delete(id);\n },\n};\n\n/** DI token — mirrors TASK_CONSTRUCTORS pattern. */\nexport const TRANSFORM_DEFS = createServiceToken<Map<string, ITransformDef<any>>>(\"transform.defs\");\n\nglobalServiceRegistry.registerIfAbsent(\n TRANSFORM_DEFS,\n (): Map<string, ITransformDef<any>> => TransformRegistry.all,\n true\n);\n",
|
|
9
9
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TaskIdType } from \"./TaskTypes\";\n\n// ========================================================================\n// Entitlement Types\n// ========================================================================\n\n/**\n * Hierarchical entitlement identifier.\n * Uses colon-separated namespacing: \"network\", \"network:http\", \"network:websocket\"\n * A grant of \"network\" implicitly covers \"network:http\" and \"network:websocket\".\n */\nexport type EntitlementId = string;\n\n/**\n * A single entitlement declaration.\n */\nexport interface TaskEntitlement {\n /** Hierarchical identifier, e.g. \"network:http\", \"credential:anthropic\", \"code-execution:javascript\" */\n readonly id: EntitlementId;\n /** Human-readable reason why this entitlement is needed */\n readonly reason?: string;\n /** Whether this entitlement is optional (task can degrade gracefully without it) */\n readonly optional?: boolean;\n /**\n * Specific resources this entitlement applies to.\n * E.g. URL patterns for network, model IDs for ai:model, server names for mcp.\n * When undefined, the entitlement applies broadly.\n */\n readonly resources?: readonly string[];\n}\n\n/**\n * Complete entitlement declaration for a task or graph.\n */\nexport interface TaskEntitlements {\n /** List of entitlements required */\n readonly entitlements: readonly TaskEntitlement[];\n}\n\n/**\n * An entitlement with origin tracking (which task(s) require it).\n */\nexport interface TrackedTaskEntitlement extends TaskEntitlement {\n /** Task IDs that require this entitlement */\n readonly sourceTaskIds: readonly TaskIdType[];\n}\n\n/**\n * Entitlements with optional origin tracking.\n */\nexport interface TrackedTaskEntitlements {\n readonly entitlements: readonly TrackedTaskEntitlement[];\n}\n\n// ========================================================================\n// Well-Known Entitlement Constants\n// ========================================================================\n\n/**\n * Well-known entitlement categories. Tasks may also use custom IDs beyond these.\n */\nexport const Entitlements = {\n // Network\n NETWORK: \"network\",\n NETWORK_HTTP: \"network:http\",\n NETWORK_WEBSOCKET: \"network:websocket\",\n NETWORK_PRIVATE: \"network:private\",\n\n // File system\n FILESYSTEM: \"filesystem\",\n FILESYSTEM_READ: \"filesystem:read\",\n FILESYSTEM_WRITE: \"filesystem:write\",\n\n // Code execution\n CODE_EXECUTION: \"code-execution\",\n CODE_EXECUTION_JS: \"code-execution:javascript\",\n\n // Credentials\n CREDENTIAL: \"credential\",\n\n // AI models\n AI: \"ai\",\n AI_MODEL: \"ai:model\",\n AI_INFERENCE: \"ai:inference\",\n\n // MCP\n MCP: \"mcp\",\n MCP_TOOL_CALL: \"mcp:tool-call\",\n MCP_RESOURCE_READ: \"mcp:resource-read\",\n MCP_PROMPT_GET: \"mcp:prompt-get\",\n MCP_STDIO: \"mcp:stdio\",\n\n // Storage / database\n STORAGE: \"storage\",\n STORAGE_READ: \"storage:read\",\n STORAGE_WRITE: \"storage:write\",\n\n // Browser automation\n BROWSER_CONTROL: \"browser\",\n BROWSER_CONTROL_LOCAL: \"browser:local\",\n BROWSER_CONTROL_CLOUD: \"browser:cloud\",\n BROWSER_CONTROL_NAVIGATE: \"browser:navigate\",\n BROWSER_CONTROL_EVALUATE: \"browser:evaluate\",\n BROWSER_CONTROL_CREDENTIAL: \"browser:credential\",\n} as const;\n\n// ========================================================================\n// Empty Entitlements Singleton\n// ========================================================================\n\n/** Shared empty entitlements object to avoid unnecessary allocations */\nexport const EMPTY_ENTITLEMENTS: TaskEntitlements = Object.freeze({\n entitlements: Object.freeze([]),\n});\n\n// ========================================================================\n// Utility Functions\n// ========================================================================\n\n/**\n * Check if a granted entitlement covers a required entitlement.\n * \"network\" covers \"network:http\" (parent covers child in hierarchy).\n */\nexport function entitlementCovers(granted: EntitlementId, required: EntitlementId): boolean {\n return required === granted || required.startsWith(granted + \":\");\n}\n\n/**\n * A grant declaration — what a consumer is willing to allow.\n * Unlike TaskEntitlement (which declares what a task *needs*), this declares what is *permitted*.\n */\nexport interface EntitlementGrant {\n /** Entitlement ID to grant. Hierarchy applies: granting \"network\" covers \"network:http\". */\n readonly id: EntitlementId;\n /**\n * Specific resources this grant covers.\n * - undefined → broad grant, covers all resources for this entitlement\n * - string[] → scoped grant, only covers requirements whose resources are a subset\n *\n * Supports glob-style patterns with any number of `*` wildcards.\n * Each `*` matches zero or more characters of any kind, including `/`.\n * - \"/tmp/*\" covers \"/tmp/data.json\" and \"/tmp/subdir/file.txt\"\n * - \"*.example.com\" covers \"api.example.com\"\n * - \"file-*-v*.json\" covers \"file-data-v2.json\"\n */\n readonly resources?: readonly string[];\n}\n\n/**\n * Check if a single grant resource pattern matches a single required resource.\n * Supports glob-style patterns with any number of `*` wildcards; each `*`\n * matches zero or more characters of any kind (including `/`).\n * - \"prefix*\" matches anything starting with \"prefix\"\n * - \"*.example.com\" matches anything ending with \".example.com\"\n * - \"pre*suf\" matches anything with the given prefix and suffix\n * - \"a*b*c\" matches anything containing \"a\", then \"b\", then \"c\" in order\n * Without `*`, requires exact match.\n */\nexport function resourcePatternMatches(grantPattern: string, requiredResource: string): boolean {\n if (grantPattern === requiredResource) return true;\n if (!grantPattern.includes(\"*\")) return false;\n\n const parts = grantPattern.split(\"*\");\n const first = parts[0];\n const last = parts[parts.length - 1];\n\n if (!requiredResource.startsWith(first)) return false;\n if (!requiredResource.endsWith(last)) return false;\n\n let fixedLength = 0;\n for (const p of parts) fixedLength += p.length;\n if (requiredResource.length < fixedLength) return false;\n\n let searchStart = first.length;\n const searchEnd = requiredResource.length - last.length;\n for (let i = 1; i < parts.length - 1; i++) {\n const part = parts[i];\n if (part.length === 0) continue; // consecutive wildcards collapse\n const idx = requiredResource.indexOf(part, searchStart);\n if (idx === -1 || idx + part.length > searchEnd) return false;\n searchStart = idx + part.length;\n }\n\n return true;\n}\n\n/**\n * Check if a grant covers the resource requirements of an entitlement.\n *\n * Matching rules:\n * - Grant has no resources (broad) → covers any resource requirement\n * - Requirement has no resources (broad need) → only a broad grant covers it\n * - Both have resources → every required resource must match at least one grant pattern\n */\nexport function grantCoversResources(grant: EntitlementGrant, required: TaskEntitlement): boolean {\n // Broad grant covers everything\n if (grant.resources === undefined) return true;\n // Scoped grant cannot cover a broad requirement\n if (required.resources === undefined) return false;\n // Every required resource must be covered by at least one grant pattern\n return required.resources.every((req) =>\n grant.resources!.some((pat) => resourcePatternMatches(pat, req))\n );\n}\n\n/**\n * Merge two TaskEntitlements into a union (deduplicating by ID).\n * If the same ID appears in both, optional is false if either is false (most restrictive wins).\n * Resources are merged (union of all resource arrays for the same ID).\n */\nexport function mergeEntitlements(a: TaskEntitlements, b: TaskEntitlements): TaskEntitlements {\n if (a.entitlements.length === 0) return b;\n if (b.entitlements.length === 0) return a;\n\n const merged = new Map<EntitlementId, TaskEntitlement>();\n\n for (const entitlement of a.entitlements) {\n merged.set(entitlement.id, entitlement);\n }\n\n for (const entitlement of b.entitlements) {\n const existing = merged.get(entitlement.id);\n if (existing) {\n merged.set(entitlement.id, mergeEntitlementPair(existing, entitlement));\n } else {\n merged.set(entitlement.id, entitlement);\n }\n }\n\n return { entitlements: Array.from(merged.values()) };\n}\n\n/**\n * Merge two entitlements with the same ID.\n * - optional: false wins (most restrictive)\n * - reason: first non-empty wins\n * - resources: union\n */\nexport function mergeEntitlementPair(a: TaskEntitlement, b: TaskEntitlement): TaskEntitlement {\n const optional = (a.optional ?? false) && (b.optional ?? false) ? true : undefined;\n const reason = a.reason ?? b.reason;\n const resources = mergeResources(a.resources, b.resources);\n\n const result: TaskEntitlement = {\n id: a.id,\n ...(reason !== undefined && { reason }),\n ...(optional === true && { optional: true }),\n ...(resources !== undefined && { resources }),\n };\n return result;\n}\n\nexport function mergeResources(\n a: readonly string[] | undefined,\n b: readonly string[] | undefined\n): readonly string[] | undefined {\n // undefined means \"all resources\" (broad), so if either side is broad the merged result stays broad\n if (a === undefined || b === undefined) return undefined;\n const set = new Set([...a, ...b]);\n return Array.from(set);\n}\n",
|
|
10
10
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type EntitlementId,\n type TaskEntitlement,\n type TaskEntitlements,\n type TrackedTaskEntitlement,\n type TrackedTaskEntitlements,\n EMPTY_ENTITLEMENTS,\n mergeEntitlementPair,\n} from \"../task/TaskEntitlements\";\nimport type { TaskIdType } from \"../task/TaskTypes\";\nimport { TaskStatus } from \"../task/TaskTypes\";\nimport type { TaskGraph } from \"./TaskGraph\";\n\n// ========================================================================\n// Options\n// ========================================================================\n\nexport interface GraphEntitlementOptions {\n /**\n * When true, annotate each entitlement with the source task IDs that require it.\n */\n readonly trackOrigins?: boolean;\n /**\n * Controls which ConditionalTask branches are included.\n * - \"all\" (default): Include entitlements from ALL branches (conservative, pre-execution analysis)\n * - \"active\": Only include entitlements from currently active branches (runtime, after conditions evaluated)\n */\n readonly conditionalBranches?: \"all\" | \"active\";\n}\n\n// ========================================================================\n// Graph Entitlement Computation\n// ========================================================================\n\n/**\n * Computes the aggregated entitlements for a TaskGraph.\n * Returns the union of all task entitlements in the graph.\n *\n * When `trackOrigins` is true, returns TrackedTaskEntitlements with source task IDs.\n */\nexport function computeGraphEntitlements(\n graph: TaskGraph,\n options?: GraphEntitlementOptions & { readonly trackOrigins: true }\n): TrackedTaskEntitlements;\nexport function computeGraphEntitlements(\n graph: TaskGraph,\n options?: GraphEntitlementOptions\n): TaskEntitlements;\nexport function computeGraphEntitlements(\n graph: TaskGraph,\n options?: GraphEntitlementOptions\n): TaskEntitlements | TrackedTaskEntitlements {\n const tasks = graph.getTasks();\n if (tasks.length === 0) return EMPTY_ENTITLEMENTS;\n\n const trackOrigins = options?.trackOrigins ?? false;\n const conditionalBranches = options?.conditionalBranches ?? \"all\";\n\n // Accumulate entitlements by ID\n const merged = new Map<\n EntitlementId,\n { entitlement: TaskEntitlement; sourceTaskIds: TaskIdType[] }\n >();\n\n for (const task of tasks) {\n // For ConditionalTask with \"active\" mode, skip disabled tasks\n if (conditionalBranches === \"active\" && task.status !== undefined) {\n if (task.status === TaskStatus.DISABLED) continue;\n }\n\n const taskEntitlements = task.entitlements();\n for (const entitlement of taskEntitlements.entitlements) {\n const existing = merged.get(entitlement.id);\n if (existing) {\n // Merge: optional=false wins, resources are unioned\n existing.entitlement = mergeEntitlementPair(existing.entitlement, entitlement);\n if (trackOrigins) {\n existing.sourceTaskIds.push(task.id);\n }\n } else {\n merged.set(entitlement.id, {\n entitlement,\n sourceTaskIds: trackOrigins ? [task.id] : [],\n });\n }\n }\n }\n\n if (merged.size === 0) return EMPTY_ENTITLEMENTS;\n\n if (trackOrigins) {\n const entitlements: TrackedTaskEntitlement[] = [];\n for (const { entitlement, sourceTaskIds } of merged.values()) {\n entitlements.push({ ...entitlement, sourceTaskIds });\n }\n return { entitlements };\n }\n\n return { entitlements: Array.from(merged.values()).map((e) => e.entitlement) };\n}\n",
|
|
11
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema } from \"@workglow/util/schema\";\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport { getInputResolvers } from \"@workglow/util\";\n\n/**\n * Configuration for the input resolver\n */\nexport interface InputResolverConfig {\n readonly registry: ServiceRegistry;\n}\n\n/**\n * Extracts the format string from a schema, handling oneOf/anyOf wrappers.\n */\nexport function getSchemaFormat(\n schema: unknown,\n visited: WeakSet<object> = new WeakSet()\n): string | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\n if (visited.has(schema)) return undefined;\n visited.add(schema);\n\n const s = schema as Record<string, unknown>;\n\n // Direct format\n if (typeof s.format === \"string\") return s.format;\n\n // Check oneOf/anyOf/allOf for format\n const variants = (s.oneOf ?? s.anyOf) as unknown[] | undefined;\n if (Array.isArray(variants)) {\n for (const variant of variants) {\n if (typeof variant === \"object\" && variant !== null) {\n const v = variant as Record<string, unknown>;\n if (typeof v.format === \"string\") return v.format;\n }\n }\n }\n\n const allOf = s.allOf as unknown[] | undefined;\n if (Array.isArray(allOf)) {\n for (const sub of allOf) {\n const fmt = getSchemaFormat(sub, visited);\n if (fmt !== undefined) return fmt;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extracts the object-typed schema from a property schema, handling oneOf/anyOf wrappers.\n * This is needed for patterns like `oneOf: [{ type: \"string\" }, { type: \"object\", properties: {...} }]`\n * where the model can be either a string ID or an inline config object.\n */\nexport function getObjectSchema(\n schema: unknown,\n visited: WeakSet<object> = new WeakSet()\n): (Record<string, unknown> & { properties: Record<string, unknown> }) | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\n if (visited.has(schema)) return undefined;\n visited.add(schema);\n\n const s = schema as Record<string, unknown>;\n\n // Direct object schema with properties\n if (s.type === \"object\" && s.properties && typeof s.properties === \"object\") {\n return s as Record<string, unknown> & { properties: Record<string, unknown> };\n }\n\n // Check oneOf/anyOf for object variant\n const variants = (s.oneOf ?? s.anyOf) as unknown[] | undefined;\n if (Array.isArray(variants)) {\n for (const variant of variants) {\n if (typeof variant === \"object\" && variant !== null) {\n const v = variant as Record<string, unknown>;\n if (v.type === \"object\" && v.properties && typeof v.properties === \"object\") {\n return v as Record<string, unknown> & { properties: Record<string, unknown> };\n }\n }\n }\n }\n\n // Check allOf for object variant\n const allOf = s.allOf as unknown[] | undefined;\n if (Array.isArray(allOf)) {\n for (const sub of allOf) {\n const result = getObjectSchema(sub, visited);\n if (result !== undefined) return result;\n }\n }\n\n return undefined;\n}\n\n/**\n * Gets the format prefix from a format string.\n * For \"model:TextEmbedding\" returns \"model\"\n * For \"storage:tabular\" returns \"storage\"\n */\nexport function getFormatPrefix(format: string): string {\n const colonIndex = format.indexOf(\":\");\n return colonIndex >= 0 ? format.substring(0, colonIndex) : format;\n}\n\n/**\n * Returns true if the schema has any properties with format annotations\n * (direct or in oneOf/anyOf variants). Used as a fast-path check to skip\n * resolution when no format-annotated properties exist.\n */\nexport function schemaHasFormatAnnotations(schema: DataPortSchema): boolean {\n if (typeof schema === \"boolean\") return false;\n\n const properties = schema.properties;\n if (!properties || typeof properties !== \"object\") return false;\n\n for (const propSchema of Object.values(properties)) {\n if (getSchemaFormat(propSchema) !== undefined) return true;\n }\n return false;\n}\n\n/**\n * Resolves schema-annotated inputs by looking up string IDs from registries.\n * String values with matching format annotations are resolved to their instances.\n * Non-string values (objects/instances) are passed through unchanged.\n *\n * @param input The task input object\n * @param schema The task's input schema\n * @param config Configuration including the service registry\n * @returns The input with resolved values\n *\n * @example\n * ```typescript\n * // In TaskRunner.run()\n * const resolvedInput = await resolveSchemaInputs(\n * this.task.runInputData,\n * (this.task.constructor as typeof Task).inputSchema(),\n * { registry: this.registry }\n * );\n * ```\n */\nexport async function resolveSchemaInputs<T extends Record<string, unknown>>(\n input: T,\n schema: DataPortSchema,\n config: InputResolverConfig,\n visited: Set<object> = new Set()\n): Promise<T> {\n if (typeof schema === \"boolean\") return input;\n\n const properties = schema.properties;\n if (!properties || typeof properties !== \"object\") return input;\n\n const resolvers = getInputResolvers();\n const resolved: Record<string, unknown> = { ...input };\n\n for (const [key, propSchema] of Object.entries(properties)) {\n let value = resolved[key];\n\n // Phase 1: Resolve format-annotated string values\n const format = getSchemaFormat(propSchema);\n if (format) {\n let resolver = resolvers.get(format);\n if (!resolver) {\n const prefix = getFormatPrefix(format);\n resolver = resolvers.get(prefix);\n }\n\n if (resolver) {\n // Handle string values\n if (typeof value === \"string\") {\n value = await resolver(value, format, config.registry);\n resolved[key] = value;\n }\n // Handle arrays - resolve string elements and pass through non-string elements unchanged\n else if (Array.isArray(value) && value.some((item) => typeof item === \"string\")) {\n const results = await Promise.all(\n value.map((item) =>\n typeof item === \"string\" ? resolver(item, format, config.registry) : item\n )\n );\n value = results.filter((result) => result !== undefined);\n resolved[key] = value;\n }\n }\n }\n\n // Phase 2: Recurse into object values if the schema defines nested properties\n if (\n value !== null &&\n value !== undefined &&\n typeof value === \"object\" &&\n !Array.isArray(value)\n ) {\n const objectSchema = getObjectSchema(propSchema);\n if (objectSchema && !visited.has(objectSchema)) {\n visited.add(objectSchema);\n try {\n resolved[key] = await resolveSchemaInputs(\n value as Record<string, unknown>,\n objectSchema as DataPortSchema,\n config,\n visited\n );\n } finally {\n visited.delete(objectSchema);\n }\n }\n }\n }\n\n return resolved as T;\n}\n",
|
|
11
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema } from \"@workglow/util/schema\";\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport { getInputResolvers } from \"@workglow/util\";\n\n/**\n * Configuration for the input resolver\n */\nexport interface InputResolverConfig {\n readonly registry: ServiceRegistry;\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Extracts the format string from a schema, handling oneOf/anyOf wrappers.\n */\nexport function getSchemaFormat(\n schema: unknown,\n visited: WeakSet<object> = new WeakSet()\n): string | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\n if (visited.has(schema)) return undefined;\n visited.add(schema);\n\n const s = schema as Record<string, unknown>;\n\n // Direct format\n if (typeof s.format === \"string\") return s.format;\n\n // Check oneOf/anyOf/allOf for format\n const variants = (s.oneOf ?? s.anyOf) as unknown[] | undefined;\n if (Array.isArray(variants)) {\n for (const variant of variants) {\n if (typeof variant === \"object\" && variant !== null) {\n const v = variant as Record<string, unknown>;\n if (typeof v.format === \"string\") return v.format;\n }\n }\n }\n\n const allOf = s.allOf as unknown[] | undefined;\n if (Array.isArray(allOf)) {\n for (const sub of allOf) {\n const fmt = getSchemaFormat(sub, visited);\n if (fmt !== undefined) return fmt;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extracts the object-typed schema from a property schema, handling oneOf/anyOf wrappers.\n * This is needed for patterns like `oneOf: [{ type: \"string\" }, { type: \"object\", properties: {...} }]`\n * where the model can be either a string ID or an inline config object.\n */\nexport function getObjectSchema(\n schema: unknown,\n visited: WeakSet<object> = new WeakSet()\n): (Record<string, unknown> & { properties: Record<string, unknown> }) | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\n if (visited.has(schema)) return undefined;\n visited.add(schema);\n\n const s = schema as Record<string, unknown>;\n\n // Direct object schema with properties\n if (s.type === \"object\" && s.properties && typeof s.properties === \"object\") {\n return s as Record<string, unknown> & { properties: Record<string, unknown> };\n }\n\n // Check oneOf/anyOf for object variant\n const variants = (s.oneOf ?? s.anyOf) as unknown[] | undefined;\n if (Array.isArray(variants)) {\n for (const variant of variants) {\n if (typeof variant === \"object\" && variant !== null) {\n const v = variant as Record<string, unknown>;\n if (v.type === \"object\" && v.properties && typeof v.properties === \"object\") {\n return v as Record<string, unknown> & { properties: Record<string, unknown> };\n }\n }\n }\n }\n\n // Check allOf for object variant\n const allOf = s.allOf as unknown[] | undefined;\n if (Array.isArray(allOf)) {\n for (const sub of allOf) {\n const result = getObjectSchema(sub, visited);\n if (result !== undefined) return result;\n }\n }\n\n return undefined;\n}\n\n/**\n * Gets the format prefix from a format string.\n * For \"model:TextEmbedding\" returns \"model\"\n * For \"storage:tabular\" returns \"storage\"\n */\nexport function getFormatPrefix(format: string): string {\n const colonIndex = format.indexOf(\":\");\n return colonIndex >= 0 ? format.substring(0, colonIndex) : format;\n}\n\n/**\n * Returns true if the schema has any properties with format annotations\n * (direct or in oneOf/anyOf variants). Used as a fast-path check to skip\n * resolution when no format-annotated properties exist.\n */\nexport function schemaHasFormatAnnotations(schema: DataPortSchema): boolean {\n if (typeof schema === \"boolean\") return false;\n\n const properties = schema.properties;\n if (!properties || typeof properties !== \"object\") return false;\n\n for (const propSchema of Object.values(properties)) {\n if (getSchemaFormat(propSchema) !== undefined) return true;\n }\n return false;\n}\n\n/**\n * Resolves schema-annotated inputs by looking up string IDs from registries.\n * String values with matching format annotations are resolved to their instances.\n * Non-string values (objects/instances) are passed through unchanged.\n *\n * @param input The task input object\n * @param schema The task's input schema\n * @param config Configuration including the service registry\n * @returns The input with resolved values\n *\n * @example\n * ```typescript\n * // In TaskRunner.run()\n * const resolvedInput = await resolveSchemaInputs(\n * this.task.runInputData,\n * (this.task.constructor as typeof Task).inputSchema(),\n * { registry: this.registry }\n * );\n * ```\n */\nexport async function resolveSchemaInputs<T extends Record<string, unknown>>(\n input: T,\n schema: DataPortSchema,\n config: InputResolverConfig,\n visited: Set<object> = new Set()\n): Promise<T> {\n if (typeof schema === \"boolean\") return input;\n\n const properties = schema.properties;\n if (!properties || typeof properties !== \"object\") return input;\n\n const resolvers = getInputResolvers();\n const resolved: Record<string, unknown> = { ...input };\n\n for (const [key, propSchema] of Object.entries(properties)) {\n let value = resolved[key];\n\n // Phase 1: Resolve format-annotated string values\n const format = getSchemaFormat(propSchema);\n let phase1Transformed = false;\n if (format) {\n let resolver = resolvers.get(format);\n if (!resolver) {\n const prefix = getFormatPrefix(format);\n resolver = resolvers.get(prefix);\n }\n\n if (resolver) {\n // Handle string values\n if (typeof value === \"string\") {\n value = await resolver(value, format, config.registry);\n resolved[key] = value;\n phase1Transformed = true;\n }\n // Handle arrays - resolve string elements and pass through non-string elements unchanged\n else if (Array.isArray(value) && value.some((item) => typeof item === \"string\")) {\n const results = await Promise.all(\n value.map((item) =>\n typeof item === \"string\" ? resolver(item, format, config.registry) : item\n )\n );\n value = results.filter((result) => result !== undefined);\n resolved[key] = value;\n phase1Transformed = true;\n }\n }\n }\n\n // Phase 2: Recurse into object values if the schema defines nested properties.\n // Skip class instances (non-plain objects like GpuImage) — recursing would\n // spread them into plain records and lose prototype methods. Plain objects\n // (including those returned by Phase 1 resolvers) still recurse so nested\n // format annotations get a chance to resolve.\n // Skip recursion when a format resolver owns the property AND Phase 1 did\n // NOT transform the value — those plain objects are raw forms (e.g. ImageBinary\n // for format:\"image\") that must pass through to the task as-is; spreading them\n // loses reference identity. When Phase 1 DID transform (string → object), the\n // resulting plain object still recurses so nested format annotations resolve.\n const hasFormatResolver = format\n ? !!(resolvers.get(format) ?? resolvers.get(getFormatPrefix(format)))\n : false;\n const skipPhase2 = hasFormatResolver && !phase1Transformed;\n if (\n !skipPhase2 &&\n value !== null &&\n value !== undefined &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n isPlainObject(value)\n ) {\n const objectSchema = getObjectSchema(propSchema);\n if (objectSchema && !visited.has(objectSchema)) {\n visited.add(objectSchema);\n try {\n resolved[key] = await resolveSchemaInputs(\n value as Record<string, unknown>,\n objectSchema as DataPortSchema,\n config,\n visited\n );\n } finally {\n visited.delete(objectSchema);\n }\n }\n }\n }\n\n return resolved as T;\n}\n",
|
|
12
12
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getObjectSchema, getSchemaFormat } from \"../task/InputResolver\";\nimport type { ITaskGraph } from \"./ITaskGraph\";\n\n/**\n * Result of scanning a task graph for credential format annotations.\n */\nexport interface GraphFormatScanResult {\n /** Whether any task in the graph has a `format: \"credential\"` property in its input or config schema. */\n readonly needsCredentials: boolean;\n /** The set of format strings found (e.g., `\"credential\"`). */\n readonly credentialFormats: ReadonlySet<string>;\n}\n\n/**\n * Recursively walks a JSON Schema's properties looking for any property whose\n * format annotation matches `targetFormat`. Handles nested objects and\n * `oneOf`/`anyOf` wrappers.\n */\nfunction schemaHasFormat(schema: unknown, targetFormat: string): boolean {\n if (typeof schema !== \"object\" || schema === null) return false;\n const s = schema as Record<string, unknown>;\n\n const properties = s.properties as Record<string, unknown> | undefined;\n if (properties && typeof properties === \"object\") {\n for (const propSchema of Object.values(properties)) {\n const format = getSchemaFormat(propSchema);\n if (format === targetFormat) return true;\n\n // Recurse into nested object schemas\n const objectSchema = getObjectSchema(propSchema);\n if (objectSchema && schemaHasFormat(objectSchema, targetFormat)) return true;\n }\n }\n\n return false;\n}\n\n/**\n * Scans a task graph for any task whose input or config schema contains a\n * property with the given format annotation.\n *\n * @param graph The task graph to scan\n * @param targetFormat The format string to search for (e.g., `\"credential\"`)\n * @returns `true` if at least one task has a matching format annotation\n */\nexport function scanGraphForFormat(graph: ITaskGraph, targetFormat: string): boolean {\n for (const task of graph.getTasks()) {\n const inputSchema = task.inputSchema();\n if (typeof inputSchema !== \"boolean\" && schemaHasFormat(inputSchema, targetFormat)) {\n return true;\n }\n\n const configSchema = task.configSchema();\n if (typeof configSchema !== \"boolean\" && schemaHasFormat(configSchema, targetFormat)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Scans a task graph for credential requirements.\n *\n * A task only counts as needing credentials when it has a schema property\n * annotated with `format: \"credential\"` **and** the corresponding value is\n * actually set on the task's config or input defaults (non-empty string).\n * Annotating a schema is not enough — plenty of model configs have\n * `provider_config.credential_key` available but unused (e.g. local ONNX\n * models).\n *\n * @example\n * ```ts\n * const result = scanGraphForCredentials(graph);\n * if (result.needsCredentials) {\n * await ensureCredentialStoreUnlocked();\n * }\n * ```\n */\nexport function scanGraphForCredentials(graph: ITaskGraph): GraphFormatScanResult {\n const credentialFormats = new Set<string>();\n\n for (const task of graph.getTasks()) {\n collectUsedCredentialFormats(task.inputSchema(), task.defaults ?? {}, credentialFormats);\n collectUsedCredentialFormats(\n task.configSchema(),\n (task as unknown as { config?: Record<string, unknown> }).config ?? {},\n credentialFormats\n );\n }\n\n return {\n needsCredentials: credentialFormats.size > 0,\n credentialFormats,\n };\n}\n\n/**\n * Walk schema and data in parallel. When a property is annotated with a\n * credential format AND the corresponding data value is a non-empty string,\n * record the format. Recurses into nested object schemas.\n */\nfunction collectUsedCredentialFormats(schema: unknown, data: unknown, formats: Set<string>): void {\n if (typeof schema === \"boolean\" || typeof schema !== \"object\" || schema === null) return;\n const s = schema as Record<string, unknown>;\n\n const properties = s.properties as Record<string, unknown> | undefined;\n if (!properties || typeof properties !== \"object\") return;\n\n const dataObj =\n typeof data === \"object\" && data !== null ? (data as Record<string, unknown>) : {};\n\n for (const [propName, propSchema] of Object.entries(properties)) {\n const format = getSchemaFormat(propSchema);\n const value = dataObj[propName];\n if (format === \"credential\" && typeof value === \"string\" && value.length > 0) {\n formats.add(format);\n }\n\n // Recurse into nested object schemas with the matching nested data\n const objectSchema = getObjectSchema(propSchema);\n if (objectSchema) {\n collectUsedCredentialFormats(objectSchema, value, formats);\n }\n }\n}\n",
|
|
13
13
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { uuid4 } from \"@workglow/util\";\nimport type { DataPortSchema } from \"@workglow/util/schema\";\nimport type {\n DataflowJson,\n JsonTaskItem,\n TaskGraphItemJson,\n TaskGraphJson,\n} from \"../task/TaskJSON\";\nimport type { TaskIdType } from \"../task/TaskTypes\";\nimport { DATAFLOW_ALL_PORTS } from \"./Dataflow\";\nimport type { TaskGraph } from \"./TaskGraph\";\n\nexport interface GraphSchemaOptions {\n /**\n * When true, annotate each property with `x-source-task-id` or `x-source-task-ids`\n * to identify which task(s) the property originates from.\n */\n readonly trackOrigins?: boolean;\n}\n\n/**\n * Calculates the depth (longest path from any starting node) for each task in the graph.\n * @returns A map of task IDs to their depths\n */\nexport function calculateNodeDepths(graph: TaskGraph): Map<TaskIdType, number> {\n const depths = new Map<TaskIdType, number>();\n const tasks = graph.getTasks();\n\n for (const task of tasks) {\n depths.set(task.id, 0);\n }\n\n const sortedTasks = graph.topologicallySortedNodes();\n\n for (const task of sortedTasks) {\n const currentDepth = depths.get(task.id) || 0;\n const targetTasks = graph.getTargetTasks(task.id);\n\n for (const targetTask of targetTasks) {\n const targetDepth = depths.get(targetTask.id) || 0;\n depths.set(targetTask.id, Math.max(targetDepth, currentDepth + 1));\n }\n }\n\n return depths;\n}\n\n/**\n * Computes the input schema for a graph by examining root tasks (no incoming edges)\n * and non-root tasks with unsatisfied required inputs.\n *\n * When `options.trackOrigins` is true, each property is annotated with\n * `x-source-task-id` (single origin) or `x-source-task-ids` (multiple origins).\n */\nexport function computeGraphInputSchema(\n graph: TaskGraph,\n options?: GraphSchemaOptions\n): DataPortSchema {\n const trackOrigins = options?.trackOrigins ?? false;\n const properties: Record<string, any> = {};\n const required: string[] = [];\n // Track which task IDs contribute each property name\n const propertyOrigins: Record<string, TaskIdType[]> = {};\n\n const tasks = graph.getTasks();\n const startingNodes = tasks.filter((task) => graph.getSourceDataflows(task.id).length === 0);\n\n // Collect all properties from root tasks\n for (const task of startingNodes) {\n const taskInputSchema = task.inputSchema();\n if (typeof taskInputSchema === \"boolean\") {\n if (taskInputSchema === false) {\n continue;\n }\n if (taskInputSchema === true) {\n properties[DATAFLOW_ALL_PORTS] = {};\n continue;\n }\n }\n const taskProperties = taskInputSchema.properties || {};\n\n for (const [inputName, inputProp] of Object.entries(taskProperties)) {\n if (!properties[inputName]) {\n properties[inputName] = inputProp;\n\n // A root task's property is only truly \"required\" from the outside if\n // the task itself marks it required AND it is not pre-populated by a\n // `defaults` value baked into the task at construction. Tasks wrapped\n // into a parent graph after being built with `{ defaults: ... }` (a\n // common pattern inside `task.execute` when assembling a subgraph)\n // would otherwise cause the wrapping graph/workflow to reject empty\n // external input even though every child input is already satisfied.\n // The non-root branch below already honors `task.defaults`; this keeps\n // root handling consistent.\n const isRequired =\n taskInputSchema.required?.includes(inputName) === true &&\n !(task.defaults && task.defaults[inputName] !== undefined);\n if (isRequired) {\n required.push(inputName);\n }\n\n if (trackOrigins) {\n propertyOrigins[inputName] = [task.id];\n }\n } else if (trackOrigins) {\n propertyOrigins[inputName].push(task.id);\n }\n }\n }\n\n // For non-root tasks, collect only REQUIRED properties not satisfied by dataflows.\n const sourceIds = new Set(startingNodes.map((t) => t.id));\n for (const task of tasks) {\n if (sourceIds.has(task.id)) continue;\n\n const taskInputSchema = task.inputSchema();\n if (typeof taskInputSchema === \"boolean\") continue;\n\n const requiredKeys = new Set<string>((taskInputSchema.required as string[] | undefined) || []);\n if (requiredKeys.size === 0) continue;\n\n const connectedPorts = new Set(\n graph.getSourceDataflows(task.id).map((df) => df.targetTaskPortId)\n );\n\n for (const key of requiredKeys) {\n if (connectedPorts.has(key)) continue;\n if (properties[key]) {\n // Property already collected — track additional origin\n if (trackOrigins) {\n propertyOrigins[key].push(task.id);\n }\n continue;\n }\n\n // Skip if the task already has a default value for this property\n if (task.defaults && task.defaults[key] !== undefined) continue;\n\n const prop = (taskInputSchema.properties || {})[key];\n if (!prop || typeof prop === \"boolean\") continue;\n\n properties[key] = prop;\n if (!required.includes(key)) {\n required.push(key);\n }\n\n if (trackOrigins) {\n propertyOrigins[key] = [task.id];\n }\n }\n }\n\n // Apply origin annotations\n if (trackOrigins) {\n for (const [propName, origins] of Object.entries(propertyOrigins)) {\n const prop = properties[propName];\n if (!prop || typeof prop === \"boolean\") continue;\n if (origins.length === 1) {\n properties[propName] = { ...prop, \"x-source-task-id\": origins[0] };\n } else {\n properties[propName] = { ...prop, \"x-source-task-ids\": origins };\n }\n }\n }\n\n return {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n}\n\n/**\n * Computes the output schema for a graph by examining leaf tasks (no outgoing edges)\n * at the maximum depth level.\n *\n * When `options.trackOrigins` is true, each property is annotated with\n * `x-source-task-id` (single origin) or `x-source-task-ids` (multiple origins).\n */\nexport function computeGraphOutputSchema(\n graph: TaskGraph,\n options?: GraphSchemaOptions\n): DataPortSchema {\n const trackOrigins = options?.trackOrigins ?? false;\n const properties: Record<string, any> = {};\n const required: string[] = [];\n // Track which task IDs contribute each property name\n const propertyOrigins: Record<string, TaskIdType[]> = {};\n\n // Find all ending nodes (nodes with no outgoing dataflows)\n const tasks = graph.getTasks();\n const endingNodes = tasks.filter((task) => graph.getTargetDataflows(task.id).length === 0);\n\n // Calculate depths for all nodes\n const depths = calculateNodeDepths(graph);\n\n // Find the maximum depth among ending nodes\n const maxDepth = Math.max(...endingNodes.map((task) => depths.get(task.id) || 0));\n\n // Filter ending nodes to only those at the maximum depth (last level)\n const lastLevelNodes = endingNodes.filter((task) => depths.get(task.id) === maxDepth);\n\n // Count how many ending nodes produce each property\n const propertyCount: Record<string, number> = {};\n const propertySchema: Record<string, any> = {};\n\n for (const task of lastLevelNodes) {\n const taskOutputSchema = task.outputSchema();\n if (typeof taskOutputSchema === \"boolean\") {\n if (taskOutputSchema === false) {\n continue;\n }\n if (taskOutputSchema === true) {\n properties[DATAFLOW_ALL_PORTS] = {};\n continue;\n }\n }\n const taskProperties = taskOutputSchema.properties || {};\n\n for (const [outputName, outputProp] of Object.entries(taskProperties)) {\n propertyCount[outputName] = (propertyCount[outputName] || 0) + 1;\n if (!propertySchema[outputName]) {\n propertySchema[outputName] = outputProp;\n }\n if (trackOrigins) {\n if (!propertyOrigins[outputName]) {\n propertyOrigins[outputName] = [task.id];\n } else {\n propertyOrigins[outputName].push(task.id);\n }\n }\n }\n }\n\n // Build the final schema: properties produced by multiple nodes become arrays\n for (const [outputName] of Object.entries(propertyCount)) {\n const outputProp = propertySchema[outputName];\n\n if (lastLevelNodes.length === 1) {\n properties[outputName] = outputProp;\n } else {\n properties[outputName] = {\n type: \"array\",\n items: outputProp as any,\n };\n }\n }\n\n // Apply origin annotations\n if (trackOrigins) {\n for (const [propName, origins] of Object.entries(propertyOrigins)) {\n const prop = properties[propName];\n if (!prop || typeof prop === \"boolean\") continue;\n if (origins.length === 1) {\n properties[propName] = { ...prop, \"x-source-task-id\": origins[0] };\n } else {\n properties[propName] = { ...prop, \"x-source-task-ids\": origins };\n }\n }\n }\n\n return {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n additionalProperties: false,\n } as DataPortSchema;\n}\n\n// ========================================================================\n// Boundary Node Injection\n// ========================================================================\n\n/**\n * Strips `x-source-task-id` and `x-source-task-ids` annotations from schema properties.\n */\nfunction stripOriginAnnotations(schema: DataPortSchema): DataPortSchema {\n if (typeof schema === \"boolean\" || !schema || typeof schema !== \"object\") return schema;\n const properties = schema.properties;\n if (!properties) return schema;\n\n const strippedProperties: Record<string, any> = {};\n for (const [key, prop] of Object.entries(properties)) {\n if (!prop || typeof prop !== \"object\") {\n strippedProperties[key] = prop;\n continue;\n }\n const {\n \"x-source-task-id\": _id,\n \"x-source-task-ids\": _ids,\n ...rest\n } = prop as Record<string, any>;\n strippedProperties[key] = rest;\n }\n\n return { ...schema, properties: strippedProperties } as DataPortSchema;\n}\n\n/**\n * Extracts origin task IDs from a schema property's `x-source-task-id` or `x-source-task-ids`.\n */\nfunction getOriginTaskIds(prop: Record<string, any>): TaskIdType[] {\n if (prop[\"x-source-task-ids\"]) {\n return prop[\"x-source-task-ids\"] as TaskIdType[];\n }\n if (prop[\"x-source-task-id\"] !== undefined) {\n return [prop[\"x-source-task-id\"] as TaskIdType];\n }\n return [];\n}\n\n/**\n * Adds synthetic InputTask and OutputTask boundary nodes to a TaskGraphJson.\n * The boundary nodes represent the graph's external interface.\n *\n * InputTask is placed first in the tasks array, OutputTask last.\n * Per-property dataflows connect them to the origin tasks using origin tracking annotations.\n */\nexport function addBoundaryNodesToGraphJson(json: TaskGraphJson, graph: TaskGraph): TaskGraphJson {\n const hasInputTask = json.tasks.some((t) => t.type === \"InputTask\");\n const hasOutputTask = json.tasks.some((t) => t.type === \"OutputTask\");\n\n // Skip entirely if both boundary tasks already exist\n if (hasInputTask && hasOutputTask) {\n return json;\n }\n\n const inputSchema = !hasInputTask\n ? computeGraphInputSchema(graph, { trackOrigins: true })\n : undefined;\n const outputSchema = !hasOutputTask\n ? computeGraphOutputSchema(graph, { trackOrigins: true })\n : undefined;\n\n const prependTasks: TaskGraphItemJson[] = [];\n const appendTasks: TaskGraphItemJson[] = [];\n const inputDataflows: DataflowJson[] = [];\n const outputDataflows: DataflowJson[] = [];\n\n if (!hasInputTask && inputSchema) {\n const inputTaskId = uuid4();\n const strippedInputSchema = stripOriginAnnotations(inputSchema);\n\n prependTasks.push({\n id: inputTaskId,\n type: \"InputTask\",\n config: {\n inputSchema: strippedInputSchema,\n outputSchema: strippedInputSchema,\n },\n });\n\n // Create per-property dataflows from InputTask to origin tasks\n if (typeof inputSchema !== \"boolean\" && inputSchema.properties) {\n for (const [propName, prop] of Object.entries(inputSchema.properties)) {\n if (!prop || typeof prop === \"boolean\") continue;\n const origins = getOriginTaskIds(prop as Record<string, any>);\n for (const originId of origins) {\n inputDataflows.push({\n sourceTaskId: inputTaskId,\n sourceTaskPortId: propName,\n targetTaskId: originId,\n targetTaskPortId: propName,\n });\n }\n }\n }\n }\n\n if (!hasOutputTask && outputSchema) {\n const outputTaskId = uuid4();\n const strippedOutputSchema = stripOriginAnnotations(outputSchema);\n\n appendTasks.push({\n id: outputTaskId,\n type: \"OutputTask\",\n config: {\n inputSchema: strippedOutputSchema,\n outputSchema: strippedOutputSchema,\n },\n });\n\n // Create per-property dataflows from origin tasks to OutputTask\n if (typeof outputSchema !== \"boolean\" && outputSchema.properties) {\n for (const [propName, prop] of Object.entries(outputSchema.properties)) {\n if (!prop || typeof prop === \"boolean\") continue;\n const origins = getOriginTaskIds(prop as Record<string, any>);\n for (const originId of origins) {\n outputDataflows.push({\n sourceTaskId: originId,\n sourceTaskPortId: propName,\n targetTaskId: outputTaskId,\n targetTaskPortId: propName,\n });\n }\n }\n }\n }\n\n return {\n tasks: [...prependTasks, ...json.tasks, ...appendTasks],\n dataflows: [...inputDataflows, ...json.dataflows, ...outputDataflows],\n };\n}\n\n/**\n * Adds synthetic InputTask and OutputTask boundary nodes to a dependency JSON items array.\n * Per-property dependencies connect them to the origin tasks using origin tracking annotations.\n */\nexport function addBoundaryNodesToDependencyJson(\n items: JsonTaskItem[],\n graph: TaskGraph\n): JsonTaskItem[] {\n const hasInputTask = items.some((t) => t.type === \"InputTask\");\n const hasOutputTask = items.some((t) => t.type === \"OutputTask\");\n\n // Skip entirely if both boundary tasks already exist\n if (hasInputTask && hasOutputTask) {\n return items;\n }\n\n const prependItems: JsonTaskItem[] = [];\n const appendItems: JsonTaskItem[] = [];\n\n if (!hasInputTask) {\n const inputSchema = computeGraphInputSchema(graph, { trackOrigins: true });\n const inputTaskId = uuid4();\n const strippedInputSchema = stripOriginAnnotations(inputSchema);\n\n prependItems.push({\n id: inputTaskId,\n type: \"InputTask\",\n config: {\n inputSchema: strippedInputSchema,\n outputSchema: strippedInputSchema,\n },\n });\n\n // Build dependencies for items that receive data from InputTask\n if (typeof inputSchema !== \"boolean\" && inputSchema.properties) {\n for (const [propName, prop] of Object.entries(inputSchema.properties)) {\n if (!prop || typeof prop === \"boolean\") continue;\n const origins = getOriginTaskIds(prop as Record<string, any>);\n for (const originId of origins) {\n const targetItem = items.find((item) => item.id === originId);\n if (!targetItem) continue;\n if (!targetItem.dependencies) {\n targetItem.dependencies = {};\n }\n const existing = targetItem.dependencies[propName];\n const dep = { id: inputTaskId, output: propName };\n if (!existing) {\n targetItem.dependencies[propName] = dep;\n } else if (Array.isArray(existing)) {\n existing.push(dep);\n } else {\n targetItem.dependencies[propName] = [existing, dep];\n }\n }\n }\n }\n }\n\n if (!hasOutputTask) {\n const outputSchema = computeGraphOutputSchema(graph, { trackOrigins: true });\n const outputTaskId = uuid4();\n const strippedOutputSchema = stripOriginAnnotations(outputSchema);\n\n // Build dependencies for OutputTask from origin tasks\n const outputDependencies: JsonTaskItem[\"dependencies\"] = {};\n if (typeof outputSchema !== \"boolean\" && outputSchema.properties) {\n for (const [propName, prop] of Object.entries(outputSchema.properties)) {\n if (!prop || typeof prop === \"boolean\") continue;\n const origins = getOriginTaskIds(prop as Record<string, any>);\n if (origins.length === 1) {\n outputDependencies[propName] = { id: origins[0], output: propName };\n } else if (origins.length > 1) {\n outputDependencies[propName] = origins.map((id) => ({ id, output: propName }));\n }\n }\n }\n\n appendItems.push({\n id: outputTaskId,\n type: \"OutputTask\",\n config: {\n inputSchema: strippedOutputSchema,\n outputSchema: strippedOutputSchema,\n },\n ...(Object.keys(outputDependencies).length > 0 ? { dependencies: outputDependencies } : {}),\n });\n }\n\n return [...prependItems, ...items, ...appendItems];\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 { ResourceScope } from \"@workglow/util\";\nimport { EventEmitter, ServiceRegistry, uuid4 } from \"@workglow/util\";\nimport { DirectedAcyclicGraph } from \"@workglow/util/graph\";\nimport { TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport type { ITask } from \"../task/ITask\";\nimport type { StreamEvent } from \"../task/StreamTypes\";\nimport type { TaskEntitlements } from \"../task/TaskEntitlements\";\nimport type { JsonTaskItem, TaskGraphJson, TaskGraphJsonOptions } from \"../task/TaskJSON\";\nimport type { TaskIdType, TaskInput, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport type { PipeFunction } from \"./Conversions\";\nimport { ensureTask } from \"./Conversions\";\nimport type { DataflowIdType } from \"./Dataflow\";\nimport { Dataflow } from \"./Dataflow\";\nimport { computeGraphEntitlements } from \"./GraphEntitlementUtils\";\nimport { addBoundaryNodesToDependencyJson, addBoundaryNodesToGraphJson } from \"./GraphSchemaUtils\";\nimport type { ITaskGraph } from \"./ITaskGraph\";\nimport {\n EventTaskGraphToDagMapping,\n GraphEventDagEvents,\n GraphEventDagParameters,\n TaskGraphEventListener,\n TaskGraphEvents,\n TaskGraphEventStatusParameters,\n TaskGraphStatusEvents,\n TaskGraphStatusListeners,\n} from \"./TaskGraphEvents\";\nimport type { GraphResultArray } from \"./TaskGraphRunner\";\nimport { CompoundMergeStrategy, GraphResult, TaskGraphRunner } from \"./TaskGraphRunner\";\n\n/**\n * Configuration for running a task graph\n */\nexport interface TaskGraphRunConfig {\n /** Optional output cache to use for this task graph */\n outputCache?: TaskOutputRepository | boolean;\n /** Optional if we should match all empty inputs with the graph input */\n matchAllEmptyInputs?: boolean;\n /** Optional signal to abort the task graph */\n parentSignal?: AbortSignal;\n /** Optional service registry to use for this task graph (creates child from global if not provided) */\n registry?: ServiceRegistry;\n /**\n * When true, streaming leaf tasks (no outgoing edges) accumulate their full\n * output so the workflow return value is complete. Defaults to true.\n * Pass false for subgraph runs where the parent handles streaming via\n * subscriptions and does not rely on the return value for stream data.\n */\n accumulateLeafOutputs?: boolean;\n /**\n * Maximum time in milliseconds for the entire graph execution.\n * When exceeded, all in-progress tasks are aborted and a TaskTimeoutError is thrown.\n */\n timeout?: number;\n /**\n * Maximum number of tasks allowed in the graph. Validated before execution starts.\n * Defaults to no limit. Set this to prevent runaway graph construction.\n */\n maxTasks?: number;\n /**\n * When true, check entitlements via the registered IEntitlementEnforcer before\n * graph execution begins. Throws TaskEntitlementError if any required (non-optional)\n * entitlements are denied. Default: false.\n */\n enforceEntitlements?: boolean;\n /**\n * Resource scope for collecting heavyweight resource disposers during graph execution.\n * Threaded to all tasks via IExecuteContext. The caller controls disposal.\n */\n resourceScope?: ResourceScope;\n}\n\nexport interface TaskGraphRunPreviewConfig extends Omit<\n TaskGraphRunConfig,\n \"enforceEntitlements\" | \"timeout\"\n> {\n /** Optional service registry to use for this task graph */\n registry?: ServiceRegistry;\n}\n\nclass TaskGraphDAG extends DirectedAcyclicGraph<\n ITask<any, any, any>,\n Dataflow,\n TaskIdType,\n DataflowIdType\n> {\n constructor() {\n super(\n (task: ITask<any, any, any>) => task.id,\n (dataflow: Dataflow) => dataflow.id\n );\n }\n}\n\ninterface TaskGraphConstructorConfig {\n outputCache?: TaskOutputRepository;\n dag?: TaskGraphDAG;\n}\n\n/**\n * Represents a task graph, a directed acyclic graph of tasks and data flows\n */\nexport class TaskGraph implements ITaskGraph {\n /** Optional output cache to use for this task graph */\n public outputCache?: TaskOutputRepository;\n\n /**\n * Constructor for TaskGraph\n * @param config Configuration for the task graph\n */\n constructor({ outputCache, dag }: TaskGraphConstructorConfig = {}) {\n this.outputCache = outputCache;\n this._dag = dag || new TaskGraphDAG();\n }\n\n private _dag: TaskGraphDAG;\n\n private _runner: TaskGraphRunner | undefined;\n public get runner(): TaskGraphRunner {\n if (!this._runner) {\n this._runner = new TaskGraphRunner(this, this.outputCache);\n }\n return this._runner;\n }\n\n // ========================================================================\n // Public methods\n // ========================================================================\n\n /**\n * Runs the task graph\n * @param config Configuration for the graph run\n * @returns A promise that resolves when all tasks are complete\n * @throws TaskError if any tasks have failed\n */\n public run<ExecuteOutput extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config: TaskGraphRunConfig = {}\n ): Promise<GraphResultArray<ExecuteOutput>> {\n return this.runner.runGraph<ExecuteOutput>(input, {\n outputCache: config?.outputCache || this.outputCache,\n parentSignal: config?.parentSignal || undefined,\n accumulateLeafOutputs: config?.accumulateLeafOutputs,\n registry: config?.registry,\n timeout: config?.timeout,\n maxTasks: config?.maxTasks,\n resourceScope: config?.resourceScope,\n });\n }\n\n /**\n * Runs the task graph in preview mode\n * @returns A promise that resolves when all tasks are complete\n * @throws TaskError if any tasks have failed\n */\n public runPreview<Output extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config: TaskGraphRunConfig = {}\n ): Promise<GraphResultArray<Output>> {\n return this.runner.runGraphPreview<Output>(input, config);\n }\n\n /**\n * Merges the execute output to the run output\n * @param results The execute output\n * @param compoundMerge The compound merge strategy to use\n * @returns The run output\n */\n\n public mergeExecuteOutputsToRunOutput<\n ExecuteOutput extends TaskOutput,\n Merge extends CompoundMergeStrategy = CompoundMergeStrategy,\n >(\n results: GraphResultArray<ExecuteOutput>,\n compoundMerge: Merge\n ): GraphResult<ExecuteOutput, Merge> {\n return this.runner.mergeExecuteOutputsToRunOutput(results, compoundMerge);\n }\n\n /**\n * Aborts the task graph\n */\n public abort() {\n this.runner.abort();\n }\n\n /**\n * Disables the task graph\n */\n public async disable() {\n await this.runner.disable();\n }\n\n /**\n * Retrieves a task from the task graph by its id\n * @param id The id of the task to retrieve\n * @returns The task with the given id, or undefined if not found\n */\n public getTask(id: TaskIdType): ITask<any, any, any> | undefined {\n return this._dag.getNode(id);\n }\n\n /**\n * Retrieves all tasks in the task graph\n * @returns An array of tasks in the task graph\n */\n public getTasks(): ITask<any, any, any>[] {\n return this._dag.getNodes();\n }\n\n /**\n * Retrieves all tasks in the task graph topologically sorted\n * @returns An array of tasks in the task graph topologically sorted\n */\n public topologicallySortedNodes(): ITask<any, any, any>[] {\n return this._dag.topologicallySortedNodes();\n }\n\n /**\n * Returns true if the underlying DAG is acyclic. Cycles are already rejected\n * synchronously by {@link addDataflow}, so this is a defensive check for\n * direct `_dag` manipulation or invariant re-assertion after cloning.\n */\n public isAcyclic(): boolean {\n return this._dag.isAcyclic();\n }\n\n /**\n * Adds a task to the task graph\n * @param task The task to add\n * @returns The current task graph\n */\n public addTask(fn: PipeFunction<any, any>, config?: any): unknown;\n public addTask(task: ITask<any, any, any>): unknown;\n public addTask(task: ITask<any, any, any> | PipeFunction<any, any>, config?: any): unknown {\n return this._dag.addNode(ensureTask(task, config));\n }\n\n /**\n * Adds multiple tasks to the task graph\n * @param tasks The tasks to add\n * @returns The current task graph\n */\n public addTasks(tasks: PipeFunction<any, any>[]): unknown[];\n public addTasks(tasks: ITask<any, any, any>[]): unknown[];\n public addTasks(tasks: ITask<any, any, any>[] | PipeFunction<any, any>[]): unknown[] {\n return this._dag.addNodes(tasks.map(ensureTask));\n }\n\n /**\n * Adds a data flow to the task graph\n * @param dataflow The data flow to add\n * @returns The current task graph\n */\n public addDataflow(dataflow: Dataflow) {\n return this._dag.addEdge(dataflow.sourceTaskId, dataflow.targetTaskId, dataflow);\n }\n\n /**\n * Adds multiple data flows to the task graph\n * @param dataflows The data flows to add\n * @returns The current task graph\n */\n public addDataflows(dataflows: Dataflow[]) {\n const addedEdges = dataflows.map<[s: unknown, t: unknown, e: Dataflow]>((edge) => {\n return [edge.sourceTaskId, edge.targetTaskId, edge];\n });\n return this._dag.addEdges(addedEdges);\n }\n\n /**\n * Retrieves a data flow from the task graph by its id\n * @param id The id of the data flow to retrieve\n * @returns The data flow with the given id, or undefined if not found\n */\n public getDataflow(id: DataflowIdType): Dataflow | undefined {\n for (const [, , edge] of this._dag.getEdges()) {\n if (edge.id === id) {\n return edge;\n }\n }\n return undefined;\n }\n\n /**\n * Retrieves all data flows in the task graph\n * @returns An array of data flows in the task graph\n */\n public getDataflows(): Dataflow[] {\n return this._dag.getEdges().map((edge) => edge[2]);\n }\n\n /**\n * Removes a data flow from the task graph\n * @param dataflow The data flow to remove\n * @returns The current task graph\n */\n public removeDataflow(dataflow: Dataflow) {\n return this._dag.removeEdge(dataflow.sourceTaskId, dataflow.targetTaskId, dataflow.id);\n }\n\n /**\n * Retrieves the data flows that are sources of a given task\n * @param taskId The id of the task to retrieve sources for\n * @returns An array of data flows that are sources of the given task\n */\n public getSourceDataflows(taskId: unknown): Dataflow[] {\n return this._dag.inEdges(taskId).map(([, , dataflow]) => dataflow);\n }\n\n /**\n * Retrieves the data flows that are targets of a given task\n * @param taskId The id of the task to retrieve targets for\n * @returns An array of data flows that are targets of the given task\n */\n public getTargetDataflows(taskId: unknown): Dataflow[] {\n return this._dag.outEdges(taskId).map(([, , dataflow]) => dataflow);\n }\n\n /**\n * Retrieves the tasks that are sources of a given task\n * @param taskId The id of the task to retrieve sources for\n * @returns An array of tasks that are sources of the given task\n */\n public getSourceTasks(taskId: unknown): ITask<any, any, any>[] {\n return this.getSourceDataflows(taskId).map((dataflow) => this.getTask(dataflow.sourceTaskId)!);\n }\n\n /**\n * Retrieves the tasks that are targets of a given task\n * @param taskId The id of the task to retrieve targets for\n * @returns An array of tasks that are targets of the given task\n */\n public getTargetTasks(taskId: unknown): ITask<any, any, any>[] {\n return this.getTargetDataflows(taskId).map((dataflow) => this.getTask(dataflow.targetTaskId)!);\n }\n\n /**\n * Removes a task from the task graph\n * @param taskId The id of the task to remove\n * @returns The current task graph\n */\n public removeTask(taskId: unknown) {\n return this._dag.removeNode(taskId);\n }\n\n public resetGraph() {\n this.runner.resetGraph(this, uuid4());\n }\n\n /**\n * Converts the task graph to a JSON format suitable for dependency tracking\n * @param options Options controlling serialization (e.g., boundary nodes)\n * @returns A TaskGraphJson object representing the tasks and dataflows\n */\n public toJSON(options?: TaskGraphJsonOptions): TaskGraphJson {\n const tasks = this.getTasks().map((node) => node.toJSON(options));\n const dataflows = this.getDataflows().map((df) => df.toJSON());\n let json: TaskGraphJson = {\n tasks,\n dataflows,\n };\n if (options?.withBoundaryNodes) {\n json = addBoundaryNodesToGraphJson(json, this);\n }\n return json;\n }\n\n /**\n * Converts the task graph to a JSON format suitable for dependency tracking\n * @param options Options controlling serialization (e.g., boundary nodes)\n * @returns An array of JsonTaskItem objects, each representing a task and its dependencies\n */\n public toDependencyJSON(options?: TaskGraphJsonOptions): JsonTaskItem[] {\n const tasks = this.getTasks().flatMap((node) => node.toDependencyJSON(options));\n this.getDataflows().forEach((df) => {\n const target = tasks.find((node) => node.id === df.targetTaskId)!;\n if (!target.dependencies) {\n target.dependencies = {};\n }\n const targetDeps = target.dependencies[df.targetTaskPortId];\n if (!targetDeps) {\n target.dependencies[df.targetTaskPortId] = {\n id: df.sourceTaskId,\n output: df.sourceTaskPortId,\n };\n } else {\n if (Array.isArray(targetDeps)) {\n targetDeps.push({\n id: df.sourceTaskId,\n output: df.sourceTaskPortId,\n });\n } else {\n target.dependencies[df.targetTaskPortId] = [\n targetDeps,\n { id: df.sourceTaskId, output: df.sourceTaskPortId },\n ];\n }\n }\n });\n if (options?.withBoundaryNodes) {\n return addBoundaryNodesToDependencyJson(tasks, this);\n }\n return tasks;\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n /**\n * Event emitter for task lifecycle events\n */\n public get events(): EventEmitter<TaskGraphStatusListeners> {\n if (!this._events) {\n this._events = new EventEmitter<TaskGraphStatusListeners>();\n }\n return this._events;\n }\n protected _events: EventEmitter<TaskGraphStatusListeners> | undefined;\n\n /**\n * Subscribes to an event\n * @param name - The event name to listen for\n * @param fn - The callback function to execute when the event occurs\n * @returns a function to unsubscribe from the event\n */\n public subscribe<Event extends TaskGraphEvents>(\n name: Event,\n fn: TaskGraphEventListener<Event>\n ): () => void {\n this.on(name, fn);\n return () => this.off(name, fn);\n }\n\n /**\n * Subscribes to status changes on all tasks (existing and future)\n * @param callback - Function called when any task's status changes\n * @param callback.taskId - The ID of the task whose status changed\n * @param callback.status - The new status of the task\n * @returns a function to unsubscribe from all task status events\n */\n public subscribeToTaskStatus(\n callback: (taskId: TaskIdType, status: TaskStatus) => void\n ): () => void {\n const unsubscribes: (() => void)[] = [];\n\n // Subscribe to status events on all existing tasks\n const tasks = this.getTasks();\n tasks.forEach((task) => {\n const unsub = task.subscribe(\"status\", (status) => {\n callback(task.id, status);\n });\n unsubscribes.push(unsub);\n });\n\n const handleTaskAdded = (taskId: TaskIdType) => {\n const task = this.getTask(taskId);\n if (!task || typeof task.subscribe !== \"function\") return;\n\n const unsub = task.subscribe(\"status\", (status) => {\n callback(task.id, status);\n });\n unsubscribes.push(unsub);\n };\n\n const graphUnsub = this.subscribe(\"task_added\", handleTaskAdded);\n unsubscribes.push(graphUnsub);\n\n return () => {\n unsubscribes.forEach((unsub) => unsub());\n };\n }\n\n /**\n * Subscribes to progress updates on all tasks (existing and future)\n * @param callback - Function called when any task reports progress\n * @param callback.taskId - The ID of the task reporting progress\n * @param callback.progress - The progress value (0-100)\n * @param callback.message - Optional progress message\n * @param callback.args - Additional arguments passed with the progress update\n * @returns a function to unsubscribe from all task progress events\n */\n public subscribeToTaskProgress(\n callback: (taskId: TaskIdType, progress: number, message?: string, ...args: any[]) => void\n ): () => void {\n const unsubscribes: (() => void)[] = [];\n\n // Subscribe to progress events on all existing tasks\n const tasks = this.getTasks();\n tasks.forEach((task) => {\n const unsub = task.subscribe(\"progress\", (progress, message, ...args) => {\n callback(task.id, progress, message, ...args);\n });\n unsubscribes.push(unsub);\n });\n\n const handleTaskAdded = (taskId: TaskIdType) => {\n const task = this.getTask(taskId);\n if (!task || typeof task.subscribe !== \"function\") return;\n\n const unsub = task.subscribe(\"progress\", (progress, message, ...args) => {\n callback(task.id, progress, message, ...args);\n });\n unsubscribes.push(unsub);\n };\n\n const graphUnsub = this.subscribe(\"task_added\", handleTaskAdded);\n unsubscribes.push(graphUnsub);\n\n return () => {\n unsubscribes.forEach((unsub) => unsub());\n };\n }\n\n /**\n * Subscribes to status changes on all dataflows (existing and future)\n * @param callback - Function called when any dataflow's status changes\n * @param callback.dataflowId - The ID of the dataflow whose status changed\n * @param callback.status - The new status of the dataflow\n * @returns a function to unsubscribe from all dataflow status events\n */\n public subscribeToDataflowStatus(\n callback: (dataflowId: DataflowIdType, status: TaskStatus) => void\n ): () => void {\n const unsubscribes: (() => void)[] = [];\n\n // Subscribe to status events on all existing dataflows\n const dataflows = this.getDataflows();\n dataflows.forEach((dataflow) => {\n const unsub = dataflow.subscribe(\"status\", (status) => {\n callback(dataflow.id, status);\n });\n unsubscribes.push(unsub);\n });\n\n const handleDataflowAdded = (dataflowId: DataflowIdType) => {\n const dataflow = this.getDataflow(dataflowId);\n if (!dataflow || typeof dataflow.subscribe !== \"function\") return;\n\n const unsub = dataflow.subscribe(\"status\", (status) => {\n callback(dataflow.id, status);\n });\n unsubscribes.push(unsub);\n };\n\n const graphUnsub = this.subscribe(\"dataflow_added\", handleDataflowAdded);\n unsubscribes.push(graphUnsub);\n\n return () => {\n unsubscribes.forEach((unsub) => unsub());\n };\n }\n\n /**\n * Subscribes to streaming events on the task graph.\n * Listens for task_stream_start, task_stream_chunk, and task_stream_end\n * events emitted by the TaskGraphRunner during streaming task execution.\n *\n * @param callbacks - Object with optional callbacks for each streaming event\n * @returns a function to unsubscribe from all streaming events\n */\n public subscribeToTaskStreaming(callbacks: {\n onStreamStart?: (taskId: TaskIdType) => void;\n onStreamChunk?: (taskId: TaskIdType, event: StreamEvent) => void;\n onStreamEnd?: (taskId: TaskIdType, output: Record<string, any>) => void;\n }): () => void {\n const unsubscribes: (() => void)[] = [];\n\n if (callbacks.onStreamStart) {\n const unsub = this.subscribe(\"task_stream_start\", callbacks.onStreamStart);\n unsubscribes.push(unsub);\n }\n\n if (callbacks.onStreamChunk) {\n const unsub = this.subscribe(\"task_stream_chunk\", callbacks.onStreamChunk);\n unsubscribes.push(unsub);\n }\n\n if (callbacks.onStreamEnd) {\n const unsub = this.subscribe(\"task_stream_end\", callbacks.onStreamEnd);\n unsubscribes.push(unsub);\n }\n\n return () => {\n unsubscribes.forEach((unsub) => unsub());\n };\n }\n\n /**\n * Subscribes to entitlement changes on all tasks (existing and future).\n * When any task's entitlements change, the graph recomputes and emits its own\n * `entitlementChange` event. Structural changes (task_added, task_removed) also trigger.\n *\n * @param callback - Function called with the aggregated entitlements whenever they change\n * @returns a function to unsubscribe from all entitlement events\n */\n public subscribeToTaskEntitlements(\n callback: (entitlements: TaskEntitlements) => void\n ): () => void {\n const globalUnsubs: (() => void)[] = [];\n const taskUnsubs = new Map<TaskIdType, () => void>();\n\n const emitChange = () => {\n const entitlements = computeGraphEntitlements(this);\n this.emit(\"entitlementChange\", entitlements);\n callback(entitlements);\n };\n\n const subscribeTask = (taskId: TaskIdType) => {\n const task = this.getTask(taskId);\n if (!task || typeof task.subscribe !== \"function\") return;\n const unsub = task.subscribe(\"entitlementChange\", () => emitChange());\n taskUnsubs.set(taskId, unsub);\n };\n\n // Subscribe to entitlementChange events on all existing tasks\n for (const task of this.getTasks()) {\n subscribeTask(task.id);\n }\n\n // Emit the initial state immediately so subscribers don't miss the current entitlements\n emitChange();\n\n // Subscribe to new tasks being added\n globalUnsubs.push(\n this.subscribe(\"task_added\", (taskId: TaskIdType) => {\n subscribeTask(taskId);\n emitChange();\n })\n );\n\n globalUnsubs.push(\n this.subscribe(\"task_removed\", (taskId: TaskIdType) => {\n const unsub = taskUnsubs.get(taskId);\n if (unsub) {\n unsub();\n taskUnsubs.delete(taskId);\n }\n emitChange();\n })\n );\n\n return () => {\n globalUnsubs.forEach((unsub) => unsub());\n taskUnsubs.forEach((unsub) => unsub());\n taskUnsubs.clear();\n };\n }\n\n /**\n * Registers an event listener for the specified event\n * @param name - The event name to listen for\n * @param fn - The callback function to execute when the event occurs\n */\n on<Event extends TaskGraphEvents>(name: Event, fn: TaskGraphEventListener<Event>) {\n const dagEvent = EventTaskGraphToDagMapping[name as keyof typeof EventTaskGraphToDagMapping];\n if (dagEvent) {\n // Safe cast: TaskGraph dag events (task_added, etc.) have the same signature as\n // the underlying DAG events (node-added, etc.) - both pass IDs, not full objects\n return this._dag.on(dagEvent, fn as Parameters<typeof this._dag.on>[1]);\n }\n return this.events.on(\n name as TaskGraphStatusEvents,\n fn as TaskGraphEventListener<TaskGraphStatusEvents>\n );\n }\n\n /**\n * Removes an event listener for the specified event\n * @param name - The event name to listen for\n * @param fn - The callback function to execute when the event occurs\n */\n off<Event extends TaskGraphEvents>(name: Event, fn: TaskGraphEventListener<Event>) {\n const dagEvent = EventTaskGraphToDagMapping[name as keyof typeof EventTaskGraphToDagMapping];\n if (dagEvent) {\n // Safe cast: TaskGraph dag events (task_added, etc.) have the same signature as\n // the underlying DAG events (node-added, etc.) - both pass IDs, not full objects\n return this._dag.off(dagEvent, fn as Parameters<typeof this._dag.off>[1]);\n }\n return this.events.off(\n name as TaskGraphStatusEvents,\n fn as TaskGraphEventListener<TaskGraphStatusEvents>\n );\n }\n\n /**\n * Emits an event for the specified event\n * @param name - The event name to emit\n * @param args - The arguments to pass to the event listener\n */\n emit<E extends GraphEventDagEvents>(name: E, ...args: GraphEventDagParameters<E>): void;\n emit<E extends TaskGraphStatusEvents>(name: E, ...args: TaskGraphEventStatusParameters<E>): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit(name: string, ...args: any[]): void {\n const dagEvent = EventTaskGraphToDagMapping[name as keyof typeof EventTaskGraphToDagMapping];\n if (dagEvent) {\n // Safe: overload signatures guarantee correct arg types at call sites\n return (this.emit_dag as Function).call(this, name, ...args);\n } else {\n return (this.emit_local as Function).call(this, name, ...args);\n }\n }\n\n /**\n * Emits an event for the specified event\n * @param name - The event name to emit\n * @param args - The arguments to pass to the event listener\n */\n protected emit_local<Event extends TaskGraphStatusEvents>(\n name: Event,\n ...args: TaskGraphEventStatusParameters<Event>\n ) {\n return this.events?.emit(name, ...args);\n }\n\n /**\n * Emits an event for the specified event\n * @param name - The event name to emit\n * @param args - The arguments to pass to the event listener\n */\n protected emit_dag<Event extends GraphEventDagEvents>(\n name: Event,\n ...args: GraphEventDagParameters<Event>\n ) {\n const dagEvent = EventTaskGraphToDagMapping[name as keyof typeof EventTaskGraphToDagMapping];\n // Safe cast: GraphEventDagParameters matches the DAG's emit parameters (both are ID-based)\n return this._dag.emit(dagEvent, ...(args as unknown as [unknown]));\n }\n}\n\n/**\n * Super simple helper if you know the input and output handles, and there is only one each\n *\n * @param tasks\n * @param inputHandle\n * @param outputHandle\n * @returns\n */\nfunction serialGraphEdges(\n tasks: ITask<any, any, any>[],\n inputHandle: string,\n outputHandle: string\n): Dataflow[] {\n const edges: Dataflow[] = [];\n for (let i = 0; i < tasks.length - 1; i++) {\n edges.push(new Dataflow(tasks[i].id, inputHandle, tasks[i + 1].id, outputHandle));\n }\n return edges;\n}\n\n/**\n * Super simple helper if you know the input and output handles, and there is only one each\n *\n * @param tasks\n * @param inputHandle\n * @param outputHandle\n * @returns\n */\nexport function serialGraph(\n tasks: ITask<any, any, any>[],\n inputHandle: string,\n outputHandle: string\n): TaskGraph {\n const graph = new TaskGraph();\n graph.addTasks(tasks);\n graph.addDataflows(serialGraphEdges(tasks, inputHandle, outputHandle));\n return graph;\n}\n",
|
|
15
15
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger } from \"@workglow/util\";\nimport { CycleError } from \"@workglow/util/graph\";\nimport type { DataPortSchema, SchemaNode } from \"@workglow/util/schema\";\nimport { compileSchema } from \"@workglow/util/schema\";\nimport { computeGraphEntitlements } from \"../task-graph/GraphEntitlementUtils\";\nimport { computeGraphInputSchema, computeGraphOutputSchema } from \"../task-graph/GraphSchemaUtils\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport { CompoundMergeStrategy, PROPERTY_ARRAY } from \"../task-graph/TaskGraphRunner\";\nimport type { CreateLoopWorkflow } from \"../task-graph/Workflow\";\nimport { GraphAsTaskRunner } from \"./GraphAsTaskRunner\";\nimport type { IExecuteContext, IRunConfig } from \"./ITask\";\nimport type { StreamEvent, StreamFinish } from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport type { TaskEntitlements } from \"./TaskEntitlements\";\nimport type { TaskEventListener, TaskEvents } from \"./TaskEvents\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport type { TaskConfig, TaskInput, TaskOutput, TaskTypeName } from \"./TaskTypes\";\nimport { TaskConfigSchema } from \"./TaskTypes\";\n\nexport const graphAsTaskConfigSchema = {\n type: \"object\",\n properties: {\n ...TaskConfigSchema[\"properties\"],\n compoundMerge: { type: \"string\", \"x-ui-hidden\": true },\n },\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type GraphAsTaskConfig<Input extends TaskInput = TaskInput> = TaskConfig<Input> & {\n /** subGraph is extracted in the constructor before validation — not in the JSON schema */\n subGraph?: TaskGraph;\n compoundMerge?: CompoundMergeStrategy;\n};\n\n/**\n * A task that contains a subgraph of tasks\n */\nexport class GraphAsTask<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends GraphAsTaskConfig<Input> = GraphAsTaskConfig<Input>,\n> extends Task<Input, Output, Config> {\n // ========================================================================\n // Static properties - should be overridden by subclasses\n // ========================================================================\n\n public static override type: TaskTypeName = \"GraphAsTask\";\n public static override title: string = \"Group\";\n public static override description: string = \"A group of tasks that are executed together\";\n public static override category: string = \"Flow Control\";\n public static compoundMerge: CompoundMergeStrategy = PROPERTY_ARRAY;\n\n /** This task has dynamic schemas that change based on the subgraph structure */\n public static override hasDynamicSchemas: boolean = true;\n\n /** Entitlements are always dynamic — they depend on child tasks in the subgraph */\n public static override hasDynamicEntitlements: boolean = true;\n\n // ========================================================================\n // Constructor\n // ========================================================================\n\n /**\n * @param config Task configuration; `subGraph` is applied to this instance and stripped before validating config.\n * @param runConfig Runtime configuration (forwarded to {@link Task}).\n */\n constructor(config: Partial<Config> = {}, runConfig: Partial<IRunConfig> = {}) {\n const { subGraph, ...rest } = config;\n super(rest as Partial<Config>, runConfig);\n if (subGraph) {\n this.subGraph = subGraph;\n }\n this.regenerateGraph();\n }\n\n // ========================================================================\n // TaskRunner delegation - Executes and manages the task\n // ========================================================================\n\n declare _runner: GraphAsTaskRunner<Input, Output, Config>;\n\n /**\n * Task runner for handling the task execution\n */\n override get runner(): GraphAsTaskRunner<Input, Output, Config> {\n if (!this._runner) {\n this._runner = new GraphAsTaskRunner<Input, Output, Config>(this);\n }\n return this._runner;\n }\n\n // ========================================================================\n // Static to Instance conversion methods\n // ========================================================================\n\n public static override configSchema(): DataPortSchema {\n return graphAsTaskConfigSchema;\n }\n\n public get compoundMerge(): CompoundMergeStrategy {\n return this.config?.compoundMerge || (this.constructor as typeof GraphAsTask).compoundMerge;\n }\n\n public override get cacheable(): boolean {\n return (\n this.runConfig?.cacheable ??\n this.config?.cacheable ??\n ((this.constructor as typeof GraphAsTask).cacheable && !this.hasChildren())\n );\n }\n\n // ========================================================================\n // Input/Output handling\n // ========================================================================\n\n /**\n * Override inputSchema to compute it dynamically from the subgraph at runtime.\n * For root tasks (no incoming edges) all input properties are collected.\n * For non-root tasks, only REQUIRED properties that are not satisfied by\n * any internal dataflow are added — this ensures that required inputs are\n * included in the graph's input schema without pulling in every optional\n * downstream property.\n */\n public override inputSchema(): DataPortSchema {\n // If there's no subgraph or it has no children, fall back to the static schema\n if (!this.hasChildren()) {\n return (this.constructor as typeof Task).inputSchema();\n }\n\n return computeGraphInputSchema(this.subGraph);\n }\n\n protected _inputSchemaNode: SchemaNode | undefined;\n /**\n * Gets the compiled input schema\n */\n protected override getInputSchemaNode(): SchemaNode {\n // every graph as task is different, so we need to compile the schema for each one\n if (!this._inputSchemaNode) {\n try {\n const dataPortSchema = this.inputSchema();\n const schemaNode = Task.generateInputSchemaNode(dataPortSchema);\n this._inputSchemaNode = schemaNode;\n } catch (error) {\n // If compilation fails, fall back to accepting any object structure.\n // This is a safety net for schemas that json-schema-library can't compile.\n getLogger().warn(\n `GraphAsTask \"${this.type}\" (${this.id}): Failed to compile input schema, ` +\n `falling back to permissive validation. Inputs will NOT be validated.`,\n { error, taskType: this.type, taskId: this.id }\n );\n this._inputSchemaNode = compileSchema({});\n }\n }\n return this._inputSchemaNode!;\n }\n\n /**\n\n * Override outputSchema to compute it dynamically from the subgraph at runtime\n * The output schema depends on the compoundMerge strategy and the nodes at the last level\n */\n\n public override outputSchema(): DataPortSchema {\n // If there's no subgraph or it has no children, fall back to the static schema\n if (!this.hasChildren()) {\n return (this.constructor as typeof Task).outputSchema();\n }\n\n return computeGraphOutputSchema(this.subGraph);\n }\n\n /**\n * Override entitlements to aggregate from all tasks in the subgraph.\n */\n public override entitlements(): TaskEntitlements {\n if (!this.hasChildren()) {\n return (this.constructor as typeof Task).entitlements();\n }\n return computeGraphEntitlements(this.subGraph);\n }\n\n /**\n * Resets input data to defaults\n */\n public override resetInputData(): void {\n super.resetInputData();\n if (this.hasChildren()) {\n this.subGraph!.getTasks().forEach((node) => {\n node.resetInputData();\n });\n this.subGraph!.getDataflows().forEach((dataflow) => {\n dataflow.reset();\n });\n }\n }\n\n // ========================================================================\n // Streaming pass-through\n // ========================================================================\n\n /**\n * Stream pass-through for compound tasks: runs the subgraph and forwards\n * streaming events from ending nodes to the outer graph. Also re-yields\n * any input streams from upstream for cases where this GraphAsTask is\n * itself downstream of another streaming task.\n */\n async *executeStream(input: Input, context: IExecuteContext): AsyncIterable<StreamEvent<Output>> {\n // Forward upstream input streams first (pass-through from outer graph)\n if (context.inputStreams) {\n for (const [, stream] of context.inputStreams) {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value.type === \"finish\") continue;\n yield value as StreamEvent<Output>;\n }\n } finally {\n reader.releaseLock();\n }\n }\n }\n\n // Run the subgraph and forward streaming events from ending nodes\n if (this.hasChildren()) {\n const endingNodeIds = new Set<unknown>();\n const tasks = this.subGraph.getTasks();\n for (const task of tasks) {\n if (this.subGraph.getTargetDataflows(task.id).length === 0) {\n endingNodeIds.add(task.id);\n }\n }\n\n const eventQueue: StreamEvent<Output>[] = [];\n let subgraphDone = false;\n\n // Eager promise/resolver — always available for producers to signal.\n // Prevents a race where producers call a stale or undefined resolver,\n // causing the generator to hang on a promise that never resolves.\n // `isWaiting` is true only while the generator is suspended at `await notifyPromise`.\n // `hasPending` records a notification that arrived while the generator was active,\n // so the generator skips the next wait without allocating a new promise.\n let { promise: notifyPromise, resolve: notifyResolve } = Promise.withResolvers<void>();\n let isWaiting = false;\n let hasPending = false;\n const notify = () => {\n if (isWaiting) {\n // Wake the generator and prepare a fresh deferred for the next wait.\n notifyResolve();\n ({ promise: notifyPromise, resolve: notifyResolve } = Promise.withResolvers<void>());\n isWaiting = false;\n } else {\n // Generator is still draining; skip the allocation.\n hasPending = true;\n }\n };\n\n const unsub = this.subGraph.subscribeToTaskStreaming({\n onStreamChunk: (taskId, event) => {\n if (endingNodeIds.has(taskId) && event.type !== \"finish\") {\n eventQueue.push(event as StreamEvent<Output>);\n notify();\n }\n },\n });\n\n const runPromise = this.subGraph\n .run<Output>(input, { parentSignal: context.signal, accumulateLeafOutputs: false })\n .then(\n (results) => {\n subgraphDone = true;\n notify();\n return results;\n },\n (err) => {\n subgraphDone = true;\n notify();\n throw err;\n }\n );\n\n // Yield events as they arrive from ending nodes\n while (!subgraphDone) {\n if (eventQueue.length === 0) {\n if (hasPending) {\n // A notification arrived while we were active; consume it without blocking.\n hasPending = false;\n } else {\n isWaiting = true;\n await notifyPromise;\n }\n }\n while (eventQueue.length > 0) {\n yield eventQueue.shift()!;\n }\n }\n // Drain any remaining events\n while (eventQueue.length > 0) {\n yield eventQueue.shift()!;\n }\n\n unsub();\n\n const results = await runPromise;\n const mergedOutput = this.subGraph.mergeExecuteOutputsToRunOutput(\n results,\n this.compoundMerge\n ) as Output;\n yield { type: \"finish\", data: mergedOutput } as StreamFinish<Output>;\n } else {\n yield { type: \"finish\", data: input as unknown as Output } as StreamFinish<Output>;\n }\n }\n\n // ========================================================================\n // Compound task methods\n // ========================================================================\n\n /**\n * Defensive re-assertion of the DAG invariant for the subgraph. `TaskGraph`\n * already rejects cycle-creating dataflows at `addDataflow` time, but this\n * runs a full topo sort so that any direct `_dag` manipulation or cycle\n * introduced via recursive subgraph composition surfaces here with a clear\n * error rather than deep inside the runner.\n */\n public validateAcyclic(): void {\n if (!this.hasChildren()) return;\n if (!this.subGraph.isAcyclic()) {\n throw new CycleError(\n `${this.type} (${this.id}): subgraph contains a cycle — loop tasks must wrap an acyclic subgraph.`\n );\n }\n for (const child of this.subGraph.getTasks()) {\n if (child instanceof GraphAsTask) {\n child.validateAcyclic();\n }\n }\n }\n\n /**\n * Regenerates the subtask graph and emits a \"regenerate\" event\n *\n * Subclasses should override this method to implement the actual graph\n * regeneration logic, but all they need to do is call this method to\n * emit the \"regenerate\" event.\n */\n public override regenerateGraph(): void {\n this._inputSchemaNode = undefined;\n this.events.emit(\"regenerate\");\n this.emitEntitlementChange();\n }\n\n // ========================================================================\n // SubGraph entitlement forwarding\n // ========================================================================\n\n /** Unsubscribe handle for the current subGraph entitlement subscription */\n private _entitlementUnsub: (() => void) | undefined;\n\n /**\n * Guards against re-entry while the synchronous initial emit of\n * `subscribeToTaskEntitlements` is unwinding. Without this, the initial\n * emit's callback re-reads `this.subGraph`, which would re-trigger\n * `_syncSubGraphEntitlementSubscription` before `_entitlementUnsub` has\n * been assigned and loop forever.\n */\n private _subscribingEntitlements: boolean = false;\n\n // ========================================================================\n // SubGraph entitlement subscription\n // ========================================================================\n\n /**\n * Subscribe to the subGraph's aggregated entitlement changes and forward\n * them as an entitlementChange event on this task so that the parent\n * TaskGraph / Workflow sees the update.\n */\n private _subscribeToSubGraphEntitlements(graph: TaskGraph): void {\n this._entitlementUnsub?.();\n this._entitlementUnsub = undefined;\n this._subscribingEntitlements = true;\n try {\n this._entitlementUnsub = graph.subscribeToTaskEntitlements(() => {\n this.emitEntitlementChange();\n });\n } finally {\n this._subscribingEntitlements = false;\n }\n }\n\n private _syncSubGraphEntitlementSubscription(\n graph: TaskGraph | undefined = this._subGraph\n ): void {\n if (this._subscribingEntitlements) return;\n\n if ((this._events?.listenerCount(\"entitlementChange\") ?? 0) === 0) {\n this._entitlementUnsub?.();\n this._entitlementUnsub = undefined;\n return;\n }\n\n if (!graph || this._entitlementUnsub) {\n return;\n }\n\n this._subscribeToSubGraphEntitlements(graph);\n }\n\n public override subscribe<Event extends TaskEvents>(\n name: Event,\n fn: TaskEventListener<Event>\n ): () => void {\n const unsub = super.subscribe(name, fn);\n if (name !== \"entitlementChange\") {\n return unsub;\n }\n\n this._syncSubGraphEntitlementSubscription();\n\n return () => {\n unsub();\n this._syncSubGraphEntitlementSubscription();\n };\n }\n\n public override on<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n super.on(name, fn);\n if (name === \"entitlementChange\") {\n this._syncSubGraphEntitlementSubscription();\n }\n }\n\n public override off<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n super.off(name, fn);\n if (name === \"entitlementChange\") {\n this._syncSubGraphEntitlementSubscription();\n }\n }\n\n public override once<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n super.once(name, fn);\n if (name === \"entitlementChange\") {\n this._syncSubGraphEntitlementSubscription();\n }\n }\n\n public override set subGraph(subGraph: TaskGraph) {\n this._entitlementUnsub?.();\n this._entitlementUnsub = undefined;\n super.subGraph = subGraph;\n this._syncSubGraphEntitlementSubscription(subGraph);\n }\n\n override get subGraph(): TaskGraph {\n const graph = super.subGraph;\n // The base getter may have lazily created a new graph — subscribe only when needed.\n this._syncSubGraphEntitlementSubscription(graph);\n return graph;\n }\n\n // ========================================================================\n // Serialization methods\n // ========================================================================\n\n /**\n * Serializes the task and its subtasks into a format that can be stored\n * @returns The serialized task and subtasks\n */\n public override toJSON(options?: TaskGraphJsonOptions): TaskGraphItemJson {\n let json = super.toJSON(options);\n const hasChildren = this.hasChildren();\n if (hasChildren) {\n json = {\n ...json,\n merge: this.compoundMerge,\n subgraph: this.subGraph!.toJSON(options),\n };\n }\n return json;\n }\n\n /**\n * Converts the task to a JSON format suitable for dependency tracking\n * @returns The task and subtasks in JSON thats easier for humans to read\n */\n public override toDependencyJSON(options?: TaskGraphJsonOptions): JsonTaskItem {\n const json = this.toJSON(options);\n if (this.hasChildren()) {\n if (\"subgraph\" in json) {\n delete json.subgraph;\n }\n return { ...json, subtasks: this.subGraph!.toDependencyJSON(options) };\n }\n return json;\n }\n}\n\ndeclare module \"../task-graph/Workflow\" {\n interface Workflow {\n /**\n * Starts a group that wraps inner tasks in a GraphAsTask subgraph.\n * Use .endGroup() to close the group and return to the parent workflow.\n */\n group: CreateLoopWorkflow<TaskInput, TaskOutput, GraphAsTaskConfig<TaskInput>>;\n\n /**\n * Ends the group and returns to the parent workflow.\n */\n endGroup(): Workflow;\n }\n}\n\n// Prototype assignments live in Workflow.ts (bottom of file) to avoid\n// circular-dependency issues at module evaluation time.\n",
|
|
16
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan } from \"@workglow/util\";\nimport {\n collectPropertyValues,\n ConvertAllToOptionalArray,\n getLogger,\n getTelemetryProvider,\n globalServiceRegistry,\n ResourceScope,\n ServiceRegistry,\n SpanStatusCode,\n uuid4,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { ConditionalTask } from \"../task/ConditionalTask\";\nimport type { IEntitlementEnforcer } from \"../task/EntitlementEnforcer\";\nimport { ENTITLEMENT_ENFORCER, formatEntitlementDenial } from \"../task/EntitlementEnforcer\";\nimport { ITask } from \"../task/ITask\";\nimport type { StreamEvent, StreamMode } from \"../task/StreamTypes\";\nimport {\n edgeNeedsAccumulation,\n getOutputStreamMode,\n getStreamingPorts,\n isTaskStreamable,\n} from \"../task/StreamTypes\";\nimport { Task } from \"../task/Task\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskEntitlementError,\n TaskError,\n TaskGraphTimeoutError,\n} from \"../task/TaskError\";\nimport { TaskInput, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport { DATAFLOW_ALL_PORTS, DATAFLOW_ERROR_PORT } from \"./Dataflow\";\nimport { computeGraphEntitlements } from \"./GraphEntitlementUtils\";\nimport { TaskGraph, TaskGraphRunConfig, TaskGraphRunPreviewConfig } from \"./TaskGraph\";\nimport { DependencyBasedScheduler, TopologicalScheduler } from \"./TaskGraphScheduler\";\n\n/**\n * Identifies tasks whose progress is meaningful to graph-level averaging. A task contributes when\n * it does real work — either because:\n *\n * - it declares its own `execute` on the subclass prototype (standard case), or\n * - it declares its own `executeStream` on the subclass prototype (streaming tasks keep their\n * `execute` on `Task.prototype` but still do real work), or\n * - it wraps a subgraph (`hasChildren()` — e.g. `GraphAsTask` / `WorkflowAsTask` /\n * `IteratorTask` / `WhileTask` / `FallbackTask`). Their runners route subgraph\n * `graph_progress` through {@link TaskRunner.handleProgress}, so `task.progress` tracks\n * the nested work and the averaging is accurate.\n *\n * Tasks flagged `isPassthrough` (e.g. `InputTask`, `OutputTask`) are always excluded: they only\n * forward data and would jump from 0% to 100%, diluting the bar.\n */\nexport function taskPrototypeHasOwnExecute(task: ITask): boolean {\n const Ctor = task.constructor as typeof Task;\n if (Ctor.isPassthrough) return false;\n return (\n Object.hasOwn(Ctor.prototype, \"execute\") ||\n Object.hasOwn(Ctor.prototype, \"executeStream\") ||\n task.hasChildren()\n );\n}\n\nexport type GraphSingleTaskResult<T> = {\n id: unknown;\n type: String;\n data: T;\n};\nexport type GraphResultArray<T> = Array<GraphSingleTaskResult<T>>;\nexport type PropertyArrayGraphResult<T> = ConvertAllToOptionalArray<T>;\nexport type AnyGraphResult<T> = PropertyArrayGraphResult<T> | GraphResultArray<T>;\n\nexport const PROPERTY_ARRAY = \"PROPERTY_ARRAY\" as const;\nexport const GRAPH_RESULT_ARRAY = \"GRAPH_RESULT_ARRAY\" as const;\n\nexport type GraphResultMap<T> = {\n // array of results with id for tasks that created them -- output is an array of {id, type, data}[]\n [GRAPH_RESULT_ARRAY]: GraphResultArray<T>;\n // property-array -- output is consolidation of each output property, with duplicate properties turned into an array\n [PROPERTY_ARRAY]: PropertyArrayGraphResult<T>;\n};\n\n/**\n * Enum representing the possible compound merge strategies\n */\nexport type CompoundMergeStrategy = typeof PROPERTY_ARRAY | typeof GRAPH_RESULT_ARRAY;\n\nexport type GraphResult<\n Output,\n Merge extends CompoundMergeStrategy,\n> = GraphResultMap<Output>[Merge];\n\n/**\n * Class for running a task graph\n * Manages the execution of tasks in a task graph, including caching\n */\nexport class TaskGraphRunner {\n /**\n * Whether the task graph is currently running\n */\n protected running = false;\n protected previewRunning = false;\n\n /**\n * The task graph to run\n */\n public readonly graph: TaskGraph;\n\n /**\n * Output cache repository\n */\n protected outputCache?: TaskOutputRepository;\n /**\n * Whether leaf tasks (no outgoing edges) should accumulate their streaming\n * output. True by default so workflow return values are complete.\n */\n protected accumulateLeafOutputs: boolean = true;\n /**\n * Service registry for this graph run\n */\n protected registry: ServiceRegistry = globalServiceRegistry;\n /**\n * Resource scope for this graph run\n */\n protected resourceScope?: ResourceScope;\n /**\n * AbortController for cancelling graph execution\n */\n protected abortController: AbortController | undefined;\n\n /**\n * Maps to track task execution state\n */\n protected inProgressTasks: Map<unknown, Promise<TaskOutput>> = new Map();\n protected inProgressFunctions: Map<unknown, Promise<void>> = new Map();\n protected failedTaskErrors: Map<unknown, TaskError> = new Map();\n\n /**\n * Active telemetry span for the current graph run.\n */\n protected telemetrySpan?: ISpan;\n\n /**\n * Timer handle for graph-level timeout. Cleared on completion, error, or abort.\n */\n protected graphTimeoutTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * When a graph-level timeout fires, this stores the error so handleAbort()\n * can surface the correct error type.\n */\n protected pendingGraphTimeoutError?: TaskGraphTimeoutError;\n\n /**\n * The entitlement enforcer for the current run, if enforcement is enabled.\n * Set during handleStart and cleared after the run completes.\n */\n protected activeEnforcer?: IEntitlementEnforcer;\n\n /**\n * Constructor for TaskGraphRunner\n * @param graph The task graph to run\n * @param outputCache The task output repository to use for caching task outputs\n * @param processScheduler The scheduler to use for task execution\n * @param previewScheduler The scheduler to use for preview task execution\n */\n constructor(\n graph: TaskGraph,\n outputCache?: TaskOutputRepository,\n protected processScheduler = new DependencyBasedScheduler(graph),\n protected previewScheduler = new TopologicalScheduler(graph)\n ) {\n this.graph = graph;\n graph.outputCache = outputCache;\n this.handleProgress = this.handleProgress.bind(this);\n }\n\n /**\n * Unique ID for the current run, used for timing labels.\n */\n protected runId: string = \"\";\n\n // ========================================================================\n // Public methods\n // ========================================================================\n\n public async runGraph<ExecuteOutput extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config?: TaskGraphRunConfig\n ): Promise<GraphResultArray<ExecuteOutput>> {\n await this.handleStart(config);\n\n const results: GraphResultArray<ExecuteOutput> = [];\n let error: TaskError | undefined;\n\n try {\n // TODO: A different graph runner may chunk tasks that are in parallel\n // rather them all currently available\n for await (const task of this.processScheduler.tasks()) {\n if (this.abortController?.signal.aborted) {\n break;\n }\n\n if (this.failedTaskErrors.size > 0) {\n break;\n }\n\n const isRootTask = this.graph.getSourceDataflows(task.id).length === 0;\n\n const runAsync = async () => {\n let errorRouted = false;\n try {\n // Root tasks (no incoming dataflows) receive the graph run input so e.g.\n // InputTask can seed the graph. Downstream tasks rely only on dataflow\n // edges plus task defaults — unless matchAllEmptyInputs is true, in which case\n // we filter the input to only include properties that are not connected via dataflows.\n const taskInput = isRootTask\n ? input\n : config?.matchAllEmptyInputs\n ? this.filterInputForTask(task, input)\n : {};\n\n const taskPromise = this.runTask(task, taskInput);\n this.inProgressTasks!.set(task.id, taskPromise);\n const taskResult = await taskPromise;\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n // we save the results of all the leaves\n results.push(taskResult as GraphSingleTaskResult<ExecuteOutput>);\n }\n } catch (error) {\n if (this.hasErrorOutputEdges(task)) {\n // Route the error through error-port dataflows instead of failing the graph.\n // pushErrorOutputToEdges sets edge statuses directly (COMPLETED for error\n // edges, DISABLED for normal edges), so we skip the normal status push.\n errorRouted = true;\n this.pushErrorOutputToEdges(task);\n } else {\n this.failedTaskErrors.set(task.id, error as TaskError);\n }\n } finally {\n // IMPORTANT: Push status to edges BEFORE notifying scheduler\n // This ensures dataflow statuses (including DISABLED) are set\n // before the scheduler checks which tasks are ready.\n // Skip normal status push when error routing already set edge statuses.\n if (!errorRouted) {\n this.pushStatusFromNodeToEdges(this.graph, task);\n this.pushErrorFromNodeToEdges(this.graph, task);\n }\n this.processScheduler.onTaskCompleted(task.id);\n }\n };\n\n // Start task execution without awaiting\n // so we can have many tasks running in parallel\n // but keep track of them to make sure they get awaited\n // otherwise, things will finish after this promise is resolved\n this.inProgressFunctions.set(Symbol(task.id as string), runAsync());\n }\n } catch (err) {\n error = err as Error;\n getLogger().error(\"Error running graph\", { error });\n }\n // Wait for all tasks to complete since we did not await runAsync()/this.runTaskWithProvenance()\n await Promise.allSettled(Array.from(this.inProgressTasks.values()));\n // Clean up stragglers to avoid unhandled promise rejections\n await Promise.allSettled(Array.from(this.inProgressFunctions.values()));\n\n // Check graph-level timeout first — it is the root cause when tasks fail due\n // to the graph abort signal, and should take precedence over any task-level\n // TaskAbortedError that was placed in failedTaskErrors as a consequence.\n if (this.pendingGraphTimeoutError) {\n await this.handleAbort();\n throw this.pendingGraphTimeoutError;\n }\n if (this.failedTaskErrors.size > 0) {\n const latestError = this.failedTaskErrors.values().next().value!;\n this.handleError(latestError);\n throw latestError;\n }\n if (this.abortController?.signal.aborted) {\n await this.handleAbort();\n throw new TaskAbortedError();\n }\n\n await this.handleComplete();\n\n return this.filterLeafResults(results);\n }\n\n /**\n * Runs the task graph in preview mode\n * @param input Optional input to pass to root tasks (tasks with no incoming dataflows)\n * @param config Optional configuration for the preview run. Supports overriding the\n * ServiceRegistry (`registry`), providing an output cache (`outputCache`), passing an\n * abort signal (`parentSignal`), and controlling whether streaming leaf task outputs are\n * accumulated into the return value (`accumulateLeafOutputs`).\n * @returns A promise that resolves when all tasks are complete\n * @throws TaskConfigurationError if the graph is already running in preview\n */\n public async runGraphPreview<Output extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config?: TaskGraphRunPreviewConfig\n ): Promise<GraphResultArray<Output>> {\n await this.handleStartPreview(config);\n\n // runPreview is on the UI preview hot path (fires per keystroke), so\n // instrumentation only runs when telemetry is enabled. Without the gate,\n // the four performance.now() calls per task and the per-run debug log\n // payload would burn cycles on every preview update.\n const telemetry = getTelemetryProvider();\n const telemetryEnabled = telemetry.isEnabled;\n const previewRunId = telemetryEnabled ? uuid4() : \"\";\n let previewSpan: ISpan | undefined;\n if (telemetryEnabled) {\n previewSpan = telemetry.startSpan(\"workglow.graph.runPreview\", {\n attributes: {\n \"workglow.graph.preview.run_id\": previewRunId,\n \"workglow.graph.task_count\": this.graph.getTasks().length,\n \"workglow.graph.dataflow_count\": this.graph.getDataflows().length,\n },\n });\n }\n\n const t0 = telemetryEnabled ? performance.now() : 0;\n const taskTimings: Array<{\n id: unknown;\n type: string;\n runPreviewMs: number;\n pushOutputMs: number;\n }> = [];\n\n const results: GraphResultArray<Output> = [];\n try {\n for await (const task of this.previewScheduler.tasks()) {\n const isRootTask = this.graph.getSourceDataflows(task.id).length === 0;\n\n if (task.status === TaskStatus.PENDING) {\n task.resetInputData();\n this.copyInputFromEdgesToNode(task);\n // TODO: cacheable here??\n // if (task.cacheable) {\n // const results = await this.outputCache?.getOutput(\n // (task.constructor as any).type,\n // task.runInputData\n // );\n // if (results) {\n // task.runOutputData = results;\n // }\n // }\n }\n\n // For root tasks (no incoming dataflows), apply the input parameter\n // This is important for GraphAsTask subgraphs where the InputTask needs\n // to receive the parent's input values\n const taskInput = isRootTask ? input : {};\n\n if (telemetryEnabled) {\n const taskType = String(\n (task.constructor as any).runtype || (task.constructor as typeof Task).type || \"?\"\n );\n const tPreview = performance.now();\n const taskResult = await task.runPreview(taskInput);\n const runPreviewMs = performance.now() - tPreview;\n const tPush = performance.now();\n await this.pushOutputFromNodeToEdges(task, taskResult);\n const pushOutputMs = performance.now() - tPush;\n taskTimings.push({ id: task.id, type: taskType, runPreviewMs, pushOutputMs });\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n results.push({\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: taskResult as Output,\n });\n }\n } else {\n const taskResult = await task.runPreview(taskInput);\n await this.pushOutputFromNodeToEdges(task, taskResult);\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n results.push({\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: taskResult as Output,\n });\n }\n }\n }\n await this.handleCompletePreview();\n\n if (previewSpan) {\n const totalMs = performance.now() - t0;\n previewSpan.setAttributes({\n \"workglow.graph.preview.duration_ms\": Math.round(totalMs * 1000) / 1000,\n \"workglow.graph.preview.tasks_executed\": taskTimings.length,\n });\n previewSpan.setStatus(SpanStatusCode.OK);\n previewSpan.end();\n getLogger().debug(\"task graph runPreview timings\", {\n previewRunId,\n totalMs: Math.round(totalMs * 1000) / 1000,\n taskTimings,\n });\n }\n\n return this.filterLeafResults(results);\n } catch (error) {\n await this.handleErrorPreview();\n\n if (previewSpan) {\n const totalMs = performance.now() - t0;\n const message = error instanceof Error ? error.message : String(error);\n previewSpan.setAttributes({\n \"workglow.graph.preview.duration_ms\": Math.round(totalMs * 1000) / 1000,\n \"workglow.graph.preview.tasks_executed\": taskTimings.length,\n });\n previewSpan.setStatus(SpanStatusCode.ERROR, message);\n previewSpan.end();\n getLogger().debug(\"task graph runPreview failed\", {\n previewRunId,\n totalMs: Math.round(totalMs * 1000) / 1000,\n taskTimings,\n error,\n });\n }\n\n throw error;\n }\n }\n\n /**\n * Aborts the task graph execution\n */\n public abort(): void {\n this.abortController?.abort();\n }\n\n /**\n * Disables the task graph execution\n */\n public async disable(): Promise<void> {\n await this.handleDisable();\n }\n\n /**\n * Filters graph-level input to only include properties that are not connected via dataflows for a given task\n * @param task The task to filter input for\n * @param input The graph-level input\n * @returns Filtered input containing only unconnected properties\n */\n protected filterInputForTask(task: ITask, input: TaskInput): TaskInput {\n // Get all inputs that are connected to this task via dataflows\n const sourceDataflows = this.graph.getSourceDataflows(task.id);\n const connectedInputs = new Set(sourceDataflows.map((df) => df.targetTaskPortId));\n\n // If DATAFLOW_ALL_PORTS (\"*\") is in the set, all inputs are connected\n const allPortsConnected = connectedInputs.has(DATAFLOW_ALL_PORTS);\n\n // Filter out connected inputs from the graph input\n const filteredInput: TaskInput = {};\n for (const [key, value] of Object.entries(input)) {\n // Skip this input if it's explicitly connected OR if all ports are connected\n if (!connectedInputs.has(key) && !allPortsConnected) {\n filteredInput[key] = value;\n }\n }\n\n return filteredInput;\n }\n\n /**\n * Adds input data to a task.\n * Delegates to {@link Task.addInput} for the actual merging logic.\n *\n * @param task The task to add input data to\n * @param overrides The input data to override (or add to if an array)\n */\n public addInputData(task: ITask, overrides: Partial<TaskInput> | undefined): void {\n if (!overrides) return;\n\n const changed = task.addInput(overrides);\n\n // TODO(str): This is a hack.\n if (changed && \"regenerateGraph\" in task && typeof task.regenerateGraph === \"function\") {\n task.regenerateGraph();\n }\n }\n\n // ========================================================================\n // Protected Handlers\n // ========================================================================\n\n /**\n * When leaf results include tasks with `isGraphOutput`, returns only those.\n * Otherwise returns all leaf results unchanged.\n */\n protected filterLeafResults<T>(results: GraphResultArray<T>): GraphResultArray<T> {\n if (results.length <= 1) return results;\n const graphOutputResults = results.filter((r) => {\n const task = this.graph.getTask(r.id);\n return task && (task.constructor as typeof Task).isGraphOutput;\n });\n return graphOutputResults.length > 0 ? graphOutputResults : results;\n }\n\n public mergeExecuteOutputsToRunOutput<\n ExecuteOutput extends TaskOutput,\n Merge extends CompoundMergeStrategy = CompoundMergeStrategy,\n >(\n results: GraphResultArray<ExecuteOutput>,\n compoundMerge: Merge\n ): GraphResult<ExecuteOutput, Merge> {\n if (compoundMerge === GRAPH_RESULT_ARRAY) {\n return results as GraphResult<ExecuteOutput, Merge>;\n }\n\n if (compoundMerge === PROPERTY_ARRAY) {\n let fixedOutput = {} as PropertyArrayGraphResult<ExecuteOutput>;\n const outputs = results.map((result: any) => result.data);\n if (outputs.length === 1) {\n fixedOutput = outputs[0];\n } else if (outputs.length > 1) {\n const collected = collectPropertyValues<ExecuteOutput>(outputs as ExecuteOutput[]);\n if (Object.keys(collected).length > 0) {\n fixedOutput = collected;\n }\n }\n return fixedOutput as GraphResult<ExecuteOutput, Merge>;\n }\n throw new TaskConfigurationError(`Unknown compound merge strategy: ${compoundMerge}`);\n }\n\n /**\n * Copies input data from edges to a task\n * @param task The task to copy input data to\n */\n protected copyInputFromEdgesToNode(task: ITask) {\n const dataflows = this.graph.getSourceDataflows(task.id);\n // Sort by dataflow id for deterministic input merging regardless of insertion order\n dataflows.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n for (const dataflow of dataflows) {\n this.addInputData(task, dataflow.getPortData());\n }\n }\n\n /**\n * Pushes the output of a task to its target tasks\n * @param node The task that produced the output\n * @param results The output of the task\n */\n protected async pushOutputFromNodeToEdges(node: ITask, results: TaskOutput) {\n const dataflows = this.graph.getTargetDataflows(node.id);\n for (const dataflow of dataflows) {\n // Edges with an active stream have their final value materialised by the\n // downstream task's awaitStreamInputs (which uses Dataflow.awaitStreamValue\n // to read the raw snapshot/finish data and then applies transforms).\n // Setting port data here would be overwritten by the finish event, and\n // applying transforms again on this path would double-apply\n // non-idempotent transforms, so skip the whole post-materialisation step.\n if (dataflow.stream !== undefined) continue;\n const compatibility = dataflow.semanticallyCompatible(this.graph, dataflow, this.registry);\n if (compatibility === \"static\") {\n dataflow.setPortData(results);\n await dataflow.applyTransforms(this.registry);\n } else if (compatibility === \"runtime\") {\n const task = this.graph.getTask(dataflow.targetTaskId)!;\n const narrowed = await task.narrowInput({ ...results }, this.registry);\n dataflow.setPortData(narrowed);\n await dataflow.applyTransforms(this.registry);\n } else {\n // Warn only when we had data to push; empty results (e.g. progress mid-run) are expected\n const resultsKeys = Object.keys(results);\n if (resultsKeys.length > 0) {\n getLogger().warn(\"pushOutputFromNodeToEdge not compatible, not setting port data\", {\n dataflowId: dataflow.id,\n compatibility,\n resultsKeys,\n });\n }\n }\n }\n }\n\n /**\n * Pushes the status of a task to its target edges\n * @param node The task that produced the status\n *\n * For ConditionalTask, this method handles selective dataflow status:\n * - Active branch dataflows get COMPLETED status\n * - Inactive branch dataflows get DISABLED status\n */\n protected pushStatusFromNodeToEdges(graph: TaskGraph, node: ITask, status?: TaskStatus): void {\n if (!node?.config?.id) return;\n\n const dataflows = graph.getTargetDataflows(node.id);\n const effectiveStatus = status ?? node.status;\n\n // Check if this is a ConditionalTask with selective branching\n if (node instanceof ConditionalTask && effectiveStatus === TaskStatus.COMPLETED) {\n // Build a map of output port -> branch ID for lookup\n const branches = node.config.branches ?? [];\n const portToBranch = new Map<string, string>();\n for (const branch of branches) {\n portToBranch.set(branch.outputPort, branch.id);\n }\n\n const activeBranches = node.getActiveBranches();\n\n for (const dataflow of dataflows) {\n // Preserve FAILED edges (e.g. transform chain failure) rather than\n // overwriting with the source task's completion status.\n if (dataflow.status === TaskStatus.FAILED) continue;\n const branchId = portToBranch.get(dataflow.sourceTaskPortId);\n if (branchId !== undefined) {\n // This dataflow is from a branch port\n if (activeBranches.has(branchId)) {\n // Branch is active - dataflow gets completed status\n dataflow.setStatus(TaskStatus.COMPLETED);\n } else {\n // Branch is inactive - dataflow gets disabled status\n dataflow.setStatus(TaskStatus.DISABLED);\n }\n } else {\n // Not a branch port (e.g., _activeBranches metadata) - use normal status\n dataflow.setStatus(effectiveStatus);\n }\n }\n\n // Cascade disabled status to downstream tasks\n this.propagateDisabledStatus(graph);\n return;\n }\n\n // Default behavior for non-conditional tasks\n dataflows.forEach((dataflow) => {\n // Preserve FAILED edges (e.g. transform chain failure) rather than\n // overwriting with the source task's completion status.\n if (dataflow.status === TaskStatus.FAILED) return;\n dataflow.setStatus(effectiveStatus);\n });\n }\n\n /**\n * Pushes the error of a task to its target edges\n * @param node The task that produced the error\n */\n protected pushErrorFromNodeToEdges(graph: TaskGraph, node: ITask): void {\n if (!node?.config?.id) return;\n graph.getTargetDataflows(node.id).forEach((dataflow) => {\n dataflow.error = node.error;\n });\n }\n\n /**\n * Returns true if the task has any outgoing dataflow edges that use the\n * error output port (`[error]`). These edges indicate that the task's\n * errors should be routed to downstream handler tasks instead of failing\n * the entire graph.\n */\n protected hasErrorOutputEdges(task: ITask): boolean {\n const dataflows = this.graph.getTargetDataflows(task.id);\n return dataflows.some((df) => df.sourceTaskPortId === DATAFLOW_ERROR_PORT);\n }\n\n /**\n * Routes a failed task's error through its error-port dataflow edges.\n *\n * For each outgoing dataflow:\n * - Error-port edges (`[error]`) receive the error data and get COMPLETED status\n * - Non-error-port edges get DISABLED status (the task didn't produce normal output)\n *\n * After setting edge statuses, propagateDisabledStatus() cascades DISABLED\n * through any downstream tasks that only had non-error inputs from this task.\n */\n protected pushErrorOutputToEdges(task: ITask): void {\n const taskError = task.error;\n const errorData = {\n error: taskError?.message ?? \"Unknown error\",\n errorType: (taskError?.constructor as { type?: string })?.type ?? \"TaskError\",\n };\n\n const dataflows = this.graph.getTargetDataflows(task.id);\n for (const df of dataflows) {\n if (df.sourceTaskPortId === DATAFLOW_ERROR_PORT) {\n // Route error data to the error-port edge\n df.value = errorData;\n df.setStatus(TaskStatus.COMPLETED);\n } else {\n // Normal output edges are disabled — this task didn't produce output\n df.setStatus(TaskStatus.DISABLED);\n }\n }\n\n // Cascade disabled status to downstream tasks whose ALL inputs are now disabled\n this.propagateDisabledStatus(this.graph);\n }\n\n /**\n * Propagates DISABLED status through the graph.\n *\n * When a task's ALL incoming dataflows are DISABLED, that task becomes unreachable\n * and should also be disabled. This cascades through the graph until no more\n * tasks can be disabled.\n *\n * This is used by ConditionalTask to disable downstream tasks on inactive branches.\n *\n * @param graph The task graph to propagate disabled status through\n */\n protected propagateDisabledStatus(graph: TaskGraph): void {\n let changed = true;\n\n // Keep iterating until no more changes (fixed-point iteration)\n while (changed) {\n changed = false;\n\n for (const task of graph.getTasks()) {\n // Only consider tasks that are still pending\n if (task.status !== TaskStatus.PENDING) {\n continue;\n }\n\n const incomingDataflows = graph.getSourceDataflows(task.id);\n\n // Skip tasks with no incoming dataflows (root tasks)\n if (incomingDataflows.length === 0) {\n continue;\n }\n\n // Check if ALL incoming dataflows are DISABLED\n const allDisabled = incomingDataflows.every((df) => df.status === TaskStatus.DISABLED);\n\n if (allDisabled) {\n // This task is unreachable - disable it synchronously\n // Set status directly to avoid async issues\n task.status = TaskStatus.DISABLED;\n task.progress = 100;\n task.completedAt = new Date();\n task.emit(\"disabled\");\n task.emit(\"status\", task.status);\n\n // Propagate disabled status to its outgoing dataflows\n graph.getTargetDataflows(task.id).forEach((dataflow) => {\n dataflow.setStatus(TaskStatus.DISABLED);\n });\n\n // Mark as completed in scheduler so it doesn't wait for this task\n this.processScheduler.onTaskCompleted(task.id);\n\n changed = true;\n }\n }\n }\n }\n\n /**\n * Determines whether a streaming task needs to accumulate its text-delta\n * chunks into an enriched finish event. Accumulation is needed when:\n *\n * 1. Output caching is active (the cached value must be fully materialised).\n * 2. Any outgoing dataflow edge connects a streaming output port to an input\n * port that is not streaming with the same mode (i.e. the downstream task\n * cannot consume a raw stream and needs a completed value).\n *\n * When accumulation is required the source task runs with shouldAccumulate=true,\n * emitting an enriched finish event that carries all accumulated port text.\n * All downstream dataflow edges share that event via tee'd streams so no\n * edge needs to re-accumulate independently.\n */\n protected taskNeedsAccumulation(task: ITask): boolean {\n if (this.outputCache) return true;\n\n const outEdges = this.graph.getTargetDataflows(task.id);\n if (outEdges.length === 0) return this.accumulateLeafOutputs;\n\n const outSchema = task.outputSchema();\n\n for (const df of outEdges) {\n if (df.sourceTaskPortId === DATAFLOW_ALL_PORTS) {\n // Conservative: if any streaming output port exists, accumulate.\n // This covers the case where all-ports edges fan into non-streaming tasks.\n if (getStreamingPorts(outSchema).length > 0) return true;\n continue;\n }\n\n const targetTask = this.graph.getTask(df.targetTaskId);\n if (!targetTask) continue;\n const inSchema = targetTask.inputSchema();\n\n if (edgeNeedsAccumulation(outSchema, df.sourceTaskPortId, inSchema, df.targetTaskPortId)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Runs a task\n * @param task The task to run\n * @param input The input for the task\n * @returns The output of the task\n */\n protected async runTask<T>(task: ITask, input: TaskInput): Promise<GraphSingleTaskResult<T>> {\n const isStreamable = isTaskStreamable(task);\n\n // For pass-through streaming tasks: if the task is streamable and has\n // streaming input edges, tee each stream so one copy is forwarded to\n // the task's executeStream() (via inputStreams) while the other stays\n // on the edge for materialization by awaitStreamInputs.\n if (isStreamable) {\n const dataflows = this.graph.getSourceDataflows(task.id);\n const streamingEdges = dataflows.filter((df) => df.stream !== undefined);\n if (streamingEdges.length > 0) {\n const inputStreams = new Map<string, ReadableStream<StreamEvent>>();\n for (const df of streamingEdges) {\n const stream = df.stream!;\n const [forwardCopy, materializeCopy] = stream.tee();\n inputStreams.set(df.targetTaskPortId, forwardCopy);\n df.setStream(materializeCopy);\n }\n task.runner.inputStreams = inputStreams;\n }\n }\n\n // Await any active streams on input dataflow edges so their values\n // are materialized before we read them. This applies to ALL downstream\n // tasks (both streaming and non-streaming) because copyInputFromEdgesToNode\n // reads via getPortData() which requires materialized values.\n // Streaming downstream tasks are still unblocked early by the scheduler\n // (they can start setup while upstream is streaming), but their actual\n // input data waits for upstream completion.\n await this.awaitStreamInputs(task);\n\n this.copyInputFromEdgesToNode(task);\n\n // Runtime entitlement enforcement for tasks with dynamic entitlements\n if (this.activeEnforcer && (task.constructor as typeof Task).hasDynamicEntitlements) {\n const denied = await this.activeEnforcer.checkTask(task);\n if (denied.length > 0) {\n throw new TaskEntitlementError(\n `Task ${(task.constructor as typeof Task).type} denied entitlements: ${denied.map(formatEntitlementDenial).join(\", \")}`\n );\n }\n }\n\n if (isStreamable) {\n return this.runStreamingTask<T>(task, input);\n }\n\n const results = await task.runner.run(input, {\n // Pass `false` when no cache so TaskRunner.handleStart explicitly clears\n // its own cached reference (undefined would leave the old value intact).\n outputCache: this.outputCache ?? false,\n updateProgress: async (task: ITask, progress: number, message?: string, ...args: any[]) =>\n await this.handleProgress(task, progress, message, ...args),\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n\n await this.pushOutputFromNodeToEdges(task, results);\n\n return {\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: results as T,\n };\n }\n\n /**\n * For non-streaming downstream tasks, awaits completion of any active\n * streams on input dataflow edges, materializing their values.\n *\n * Streaming upstream tasks set a ReadableStream on outgoing edges.\n * Non-streaming downstream tasks cannot consume streams directly, so\n * this method reads each stream to completion and accumulates the\n * value (via Dataflow.awaitStreamValue) before the task reads its\n * inputs through the normal getPortData() path.\n */\n protected async awaitStreamInputs(task: ITask): Promise<void> {\n const dataflows = this.graph.getSourceDataflows(task.id);\n const streamingDataflows = dataflows.filter((df) => df.stream !== undefined);\n if (streamingDataflows.length === 0) return;\n await Promise.all(\n streamingDataflows.map(async (df) => {\n await df.awaitStreamValue();\n // awaitStreamValue sets port data from the raw finish/snapshot event.\n // Apply the edge's transform chain over the materialised value so the\n // downstream task receives the transformed result. This is the sole\n // transform application for streaming edges (pushOutputFromNodeToEdges\n // deliberately skips them to avoid double-apply).\n await df.applyTransforms(this.registry);\n })\n );\n }\n\n /**\n * Runs a streaming task within the DAG.\n * Listens for stream events to:\n * - Notify the scheduler when streaming begins (unblocking downstream streamable tasks)\n * - Push stream data to outgoing dataflow edges\n * - Have the source task accumulate and emit enriched finish events for\n * non-streaming downstream tasks (when taskNeedsAccumulation() is true)\n */\n protected async runStreamingTask<T>(\n task: ITask,\n input: TaskInput\n ): Promise<GraphSingleTaskResult<T>> {\n const streamMode = getOutputStreamMode(task.outputSchema());\n const shouldAccumulate = this.taskNeedsAccumulation(task);\n\n let streamingNotified = false;\n\n const onStatus = (status: TaskStatus) => {\n if (status === TaskStatus.STREAMING && !streamingNotified) {\n streamingNotified = true;\n this.pushStatusFromNodeToEdges(this.graph, task, TaskStatus.STREAMING);\n this.pushStreamToEdges(task, streamMode);\n this.processScheduler.onTaskStreaming(task.id);\n }\n };\n\n const onStreamStart = () => {\n this.graph.emit(\"task_stream_start\", task.id);\n };\n\n const onStreamChunk = (event: StreamEvent) => {\n this.graph.emit(\"task_stream_chunk\", task.id, event);\n };\n\n const onStreamEnd = (output: Record<string, any>) => {\n this.graph.emit(\"task_stream_end\", task.id, output);\n };\n\n task.on(\"status\", onStatus);\n task.on(\"stream_start\", onStreamStart);\n task.on(\"stream_chunk\", onStreamChunk);\n task.on(\"stream_end\", onStreamEnd);\n\n try {\n const results = await task.runner.run(input, {\n outputCache: this.outputCache ?? false,\n shouldAccumulate,\n updateProgress: async (task: ITask, progress: number, message?: string, ...args: any[]) =>\n await this.handleProgress(task, progress, message, ...args),\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n\n await this.pushOutputFromNodeToEdges(task, results);\n\n return {\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: results as T,\n };\n } finally {\n task.off(\"status\", onStatus);\n task.off(\"stream_start\", onStreamStart);\n task.off(\"stream_chunk\", onStreamChunk);\n task.off(\"stream_end\", onStreamEnd);\n }\n }\n\n /**\n * Returns true if an event carries a port-specific delta (text-delta or object-delta).\n */\n private static isPortDelta(event: StreamEvent): event is StreamEvent & { port: string } {\n return event.type === \"text-delta\" || event.type === \"object-delta\";\n }\n\n /**\n * Creates a ReadableStream from task streaming events, optionally filtered\n * to a single port. When `portId` is undefined (DATAFLOW_ALL_PORTS), all\n * events pass through. When set, only delta events matching the port plus\n * control events (finish, error, snapshot) are enqueued.\n */\n private createStreamFromTaskEvents(task: ITask, portId?: string): ReadableStream<StreamEvent> {\n return new ReadableStream<StreamEvent>({\n start: (controller) => {\n const onChunk = (event: StreamEvent) => {\n try {\n if (\n portId !== undefined &&\n TaskGraphRunner.isPortDelta(event) &&\n event.port !== portId\n ) {\n return;\n }\n controller.enqueue(event);\n } catch {\n // Stream may be closed\n }\n };\n const onEnd = () => {\n try {\n controller.close();\n } catch {\n // Stream may already be closed\n }\n task.off(\"stream_chunk\", onChunk);\n task.off(\"stream_end\", onEnd);\n };\n task.on(\"stream_chunk\", onChunk);\n task.on(\"stream_end\", onEnd);\n },\n });\n }\n\n /**\n * Pushes stream events from a streaming task to its outgoing dataflow edges.\n * Creates per-port filtered ReadableStreams for specific-port edges and\n * unfiltered streams for DATAFLOW_ALL_PORTS edges. Within each port group,\n * uses tee() for fan-out to multiple consumers.\n */\n protected pushStreamToEdges(task: ITask, _streamMode: StreamMode): void {\n const targetDataflows = this.graph.getTargetDataflows(task.id);\n if (targetDataflows.length === 0) return;\n\n // Group edges by their source port\n const groups = new Map<string, typeof targetDataflows>();\n for (const df of targetDataflows) {\n const key = df.sourceTaskPortId;\n let group = groups.get(key);\n if (!group) {\n group = [];\n groups.set(key, group);\n }\n group.push(df);\n }\n\n for (const [portKey, edges] of groups) {\n const filterPort = portKey === DATAFLOW_ALL_PORTS ? undefined : portKey;\n const stream = this.createStreamFromTaskEvents(task, filterPort);\n\n if (edges.length === 1) {\n edges[0].setStream(stream);\n } else {\n let currentStream = stream;\n for (let i = 0; i < edges.length; i++) {\n if (i === edges.length - 1) {\n edges[i].setStream(currentStream);\n } else {\n const [s1, s2] = currentStream.tee();\n edges[i].setStream(s1);\n currentStream = s2;\n }\n }\n }\n }\n }\n\n /**\n * Resets a task\n * @param graph The task graph to reset\n * @param task The task to reset\n * @param runId The run ID\n */\n protected resetTask(graph: TaskGraph, task: ITask, runId: string) {\n task.status = TaskStatus.PENDING;\n task.resetInputData();\n task.runOutputData = {};\n task.error = undefined;\n task.progress = 0;\n task.runConfig = { ...task.runConfig, runnerId: runId };\n this.pushStatusFromNodeToEdges(graph, task);\n this.pushErrorFromNodeToEdges(graph, task);\n task.emit(\"reset\");\n task.emit(\"status\", task.status);\n }\n\n /**\n * Resets the task graph, recursively\n * @param graph The task graph to reset\n */\n public resetGraph(graph: TaskGraph, runnerId: string) {\n graph.getTasks().forEach((node) => {\n this.resetTask(graph, node, runnerId);\n node.regenerateGraph();\n if (node.hasChildren()) {\n this.resetGraph(node.subGraph, runnerId);\n }\n });\n graph.getDataflows().forEach((dataflow) => {\n dataflow.reset();\n });\n }\n\n /**\n * Handles the start of task graph execution\n * @param parentSignal Optional abort signal from parent\n */\n protected async handleStart(config?: TaskGraphRunConfig): Promise<void> {\n // Setup registry - create child from global if not provided\n if (config?.registry !== undefined) {\n this.registry = config.registry;\n } else if (this.registry === undefined) {\n // Create a child container that inherits from global but allows overrides\n this.registry = new ServiceRegistry(globalServiceRegistry.container.createChildContainer());\n }\n if (config?.resourceScope !== undefined) {\n this.resourceScope = config.resourceScope;\n }\n\n this.accumulateLeafOutputs = config?.accumulateLeafOutputs !== false;\n\n if (config?.outputCache !== undefined) {\n if (typeof config.outputCache === \"boolean\") {\n if (config.outputCache === true) {\n this.outputCache = this.registry.get(TASK_OUTPUT_REPOSITORY);\n } else {\n this.outputCache = undefined;\n }\n } else {\n this.outputCache = config.outputCache;\n }\n this.graph.outputCache = this.outputCache;\n }\n\n // Prevent reentrancy\n if (this.running || this.previewRunning) {\n throw new TaskConfigurationError(\"Graph is already running\");\n }\n\n this.running = true;\n this.abortController = new AbortController();\n this.abortController.signal.addEventListener(\"abort\", () => {\n this.handleAbort();\n });\n\n // Set up graph-level timeout if configured\n if (config?.timeout !== undefined && config.timeout > 0) {\n this.pendingGraphTimeoutError = undefined;\n this.graphTimeoutTimer = setTimeout(() => {\n this.pendingGraphTimeoutError = new TaskGraphTimeoutError(config.timeout);\n this.abortController?.abort();\n }, config.timeout);\n }\n\n // Listen first, then check — addEventListener on an already-aborted signal\n // does not fire, so checking .aborted after ensures we never miss an abort.\n if (config?.parentSignal) {\n const onParentAbort = () => {\n this.abortController?.abort();\n };\n config.parentSignal.addEventListener(\"abort\", onParentAbort, { once: true });\n if (config.parentSignal.aborted) {\n config.parentSignal.removeEventListener(\"abort\", onParentAbort);\n this.abortController.abort();\n return;\n }\n }\n\n this.runId = uuid4();\n this.resetGraph(this.graph, this.runId); // Reset graph and regenerate sub-graphs, changes task count / entitlements\n this.processScheduler.reset();\n this.inProgressTasks.clear();\n this.inProgressFunctions.clear();\n this.failedTaskErrors.clear();\n\n // Validate and enforce after resetGraph (which regenerates sub-graphs and may\n // change task count / entitlements). On failure, clean up running state so the\n // runner remains reusable.\n try {\n // Validate graph size limits\n if (config?.maxTasks !== undefined && config.maxTasks > 0) {\n const taskCount = this.graph.getTasks().length;\n if (taskCount > config.maxTasks) {\n throw new TaskConfigurationError(\n `Graph has ${taskCount} tasks, exceeding the limit of ${config.maxTasks}`\n );\n }\n }\n\n // Opt-in entitlement enforcement (preflight)\n if (config?.enforceEntitlements) {\n if (!this.registry.has(ENTITLEMENT_ENFORCER)) {\n throw new TaskConfigurationError(\n \"enforceEntitlements is enabled but no IEntitlementEnforcer is registered. \" +\n \"Register an enforcer via ENTITLEMENT_ENFORCER before running the graph.\"\n );\n }\n const enforcer = this.registry.get(ENTITLEMENT_ENFORCER);\n const denied = await enforcer.checkAll(computeGraphEntitlements(this.graph));\n if (denied.length > 0) {\n throw new TaskEntitlementError(\n `Denied entitlements: ${denied.map(formatEntitlementDenial).join(\", \")}`\n );\n }\n this.activeEnforcer = enforcer;\n } else {\n this.activeEnforcer = undefined;\n }\n } catch (err) {\n // Reset running state so the runner is reusable after validation failures\n if (this.graphTimeoutTimer !== undefined) {\n clearTimeout(this.graphTimeoutTimer);\n this.graphTimeoutTimer = undefined;\n }\n this.abortController = undefined;\n this.activeEnforcer = undefined;\n this.running = false;\n throw err;\n }\n\n // Start telemetry span for the graph run\n const telemetry = getTelemetryProvider();\n if (telemetry.isEnabled) {\n this.telemetrySpan = telemetry.startSpan(\"workglow.graph.run\", {\n attributes: {\n \"workglow.graph.run_id\": this.runId,\n \"workglow.graph.task_count\": this.graph.getTasks().length,\n \"workglow.graph.dataflow_count\": this.graph.getDataflows().length,\n },\n });\n }\n\n this.graph.emit(\"start\");\n }\n\n protected async handleStartPreview(config?: TaskGraphRunConfig): Promise<void> {\n if (this.previewRunning) {\n throw new TaskConfigurationError(\"Graph is already running in preview\");\n }\n\n // Use explicit registry if provided; otherwise keep the existing one\n // (which is either globalServiceRegistry by default, or whatever handleStart set).\n if (config?.registry !== undefined) {\n this.registry = config.registry;\n }\n\n // Validate graph size limits (same as handleStart)\n if (config?.maxTasks !== undefined && config.maxTasks > 0) {\n const taskCount = this.graph.getTasks().length;\n if (taskCount > config.maxTasks) {\n throw new TaskConfigurationError(\n `Graph has ${taskCount} tasks, exceeding the limit of ${config.maxTasks}`\n );\n }\n }\n\n // Note: `timeout` is not enforced for preview runs. Preview execution is\n // event-driven with no single completion point, so a graph-level timeout\n // does not apply. Use per-task timeouts for individual task time limits.\n\n this.previewScheduler.reset();\n this.previewRunning = true;\n }\n\n /**\n * Handles the completion of task graph execution\n */\n /**\n * Clears the graph-level timeout timer if active.\n */\n protected clearGraphTimeout(): void {\n if (this.graphTimeoutTimer !== undefined) {\n clearTimeout(this.graphTimeoutTimer);\n this.graphTimeoutTimer = undefined;\n }\n }\n\n protected async handleComplete(): Promise<void> {\n this.clearGraphTimeout();\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.OK);\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"complete\");\n }\n\n protected async handleCompletePreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles errors during task graph execution\n */\n protected async handleError(error: TaskError): Promise<void> {\n this.clearGraphTimeout();\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PROCESSING || task.status === TaskStatus.STREAMING) {\n return task.abort();\n }\n })\n );\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, error.message);\n this.telemetrySpan.setAttributes({ \"workglow.graph.error\": error.message });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"error\", error);\n }\n\n protected async handleErrorPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task graph abortion\n */\n protected async handleAbort(): Promise<void> {\n this.clearGraphTimeout();\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PROCESSING || task.status === TaskStatus.STREAMING) {\n return task.abort();\n }\n })\n );\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, \"aborted\");\n this.telemetrySpan.addEvent(\"workglow.graph.aborted\");\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"abort\");\n }\n\n protected async handleAbortPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task graph disabling\n */\n protected async handleDisable(): Promise<void> {\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PENDING) {\n return task.disable();\n }\n })\n );\n this.running = false;\n this.graph.emit(\"disabled\");\n }\n\n /**\n * Handles progress updates for the task graph by averaging `progress` across tasks whose class\n * declares its own `execute` ({@link taskPrototypeHasOwnExecute}). Other nodes are ignored.\n * @param progress Progress value (0-100)\n * @param message Optional message\n * @param args Additional arguments\n */\n protected async handleProgress(\n task: ITask,\n progress: number,\n message?: string,\n ...args: any[]\n ): Promise<void> {\n const contributors = this.graph.getTasks().filter(taskPrototypeHasOwnExecute);\n if (contributors.length > 1) {\n const sum = contributors.reduce((acc, t) => acc + t.progress, 0);\n progress = Math.round(sum / contributors.length);\n } else if (contributors.length === 1) {\n const [only] = contributors;\n progress = only.progress;\n }\n this.pushStatusFromNodeToEdges(this.graph, task);\n // Emit aggregate progress before awaiting output push so UIs (and task `emit(\"progress\")` in\n // TaskRunner) are not blocked when pushOutput/narrowInput is slow or stalls mid-run.\n this.graph.emit(\"graph_progress\", progress, message, args);\n // Only push output when the task has produced data; progress can fire mid-run with empty runOutputData\n if (task.runOutputData && Object.keys(task.runOutputData).length > 0) {\n await this.pushOutputFromNodeToEdges(task, task.runOutputData);\n }\n }\n}\n",
|
|
16
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan } from \"@workglow/util\";\nimport {\n collectPropertyValues,\n ConvertAllToOptionalArray,\n getLogger,\n getTelemetryProvider,\n globalServiceRegistry,\n ResourceScope,\n ServiceRegistry,\n SpanStatusCode,\n uuid4,\n} from \"@workglow/util\";\nimport { asRefcountable } from \"../refcountable\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { ConditionalTask } from \"../task/ConditionalTask\";\nimport type { IEntitlementEnforcer } from \"../task/EntitlementEnforcer\";\nimport { ENTITLEMENT_ENFORCER, formatEntitlementDenial } from \"../task/EntitlementEnforcer\";\nimport { ITask } from \"../task/ITask\";\nimport type { StreamEvent, StreamMode } from \"../task/StreamTypes\";\nimport {\n edgeNeedsAccumulation,\n getOutputStreamMode,\n getStreamingPorts,\n isTaskStreamable,\n} from \"../task/StreamTypes\";\nimport { Task } from \"../task/Task\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskEntitlementError,\n TaskError,\n TaskGraphTimeoutError,\n} from \"../task/TaskError\";\nimport { TaskInput, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport { DATAFLOW_ALL_PORTS, DATAFLOW_ERROR_PORT } from \"./Dataflow\";\nimport { computeGraphEntitlements } from \"./GraphEntitlementUtils\";\nimport { TaskGraph, TaskGraphRunConfig, TaskGraphRunPreviewConfig } from \"./TaskGraph\";\nimport { DependencyBasedScheduler, TopologicalScheduler } from \"./TaskGraphScheduler\";\n\n/**\n * Identifies tasks whose progress is meaningful to graph-level averaging. A task contributes when\n * it does real work — either because:\n *\n * - it declares its own `execute` on the subclass prototype (standard case), or\n * - it declares its own `executeStream` on the subclass prototype (streaming tasks keep their\n * `execute` on `Task.prototype` but still do real work), or\n * - it wraps a subgraph (`hasChildren()` — e.g. `GraphAsTask` / `WorkflowAsTask` /\n * `IteratorTask` / `WhileTask` / `FallbackTask`). Their runners route subgraph\n * `graph_progress` through {@link TaskRunner.handleProgress}, so `task.progress` tracks\n * the nested work and the averaging is accurate.\n *\n * Tasks flagged `isPassthrough` (e.g. `InputTask`, `OutputTask`) are always excluded: they only\n * forward data and would jump from 0% to 100%, diluting the bar.\n */\nexport function taskPrototypeHasOwnExecute(task: ITask): boolean {\n const Ctor = task.constructor as typeof Task;\n if (Ctor.isPassthrough) return false;\n return (\n Object.hasOwn(Ctor.prototype, \"execute\") ||\n Object.hasOwn(Ctor.prototype, \"executeStream\") ||\n task.hasChildren()\n );\n}\n\nexport type GraphSingleTaskResult<T> = {\n id: unknown;\n type: String;\n data: T;\n};\nexport type GraphResultArray<T> = Array<GraphSingleTaskResult<T>>;\nexport type PropertyArrayGraphResult<T> = ConvertAllToOptionalArray<T>;\nexport type AnyGraphResult<T> = PropertyArrayGraphResult<T> | GraphResultArray<T>;\n\nexport const PROPERTY_ARRAY = \"PROPERTY_ARRAY\" as const;\nexport const GRAPH_RESULT_ARRAY = \"GRAPH_RESULT_ARRAY\" as const;\n\nexport type GraphResultMap<T> = {\n // array of results with id for tasks that created them -- output is an array of {id, type, data}[]\n [GRAPH_RESULT_ARRAY]: GraphResultArray<T>;\n // property-array -- output is consolidation of each output property, with duplicate properties turned into an array\n [PROPERTY_ARRAY]: PropertyArrayGraphResult<T>;\n};\n\n/**\n * Enum representing the possible compound merge strategies\n */\nexport type CompoundMergeStrategy = typeof PROPERTY_ARRAY | typeof GRAPH_RESULT_ARRAY;\n\nexport type GraphResult<\n Output,\n Merge extends CompoundMergeStrategy,\n> = GraphResultMap<Output>[Merge];\n\n/**\n * Class for running a task graph\n * Manages the execution of tasks in a task graph, including caching\n */\nexport class TaskGraphRunner {\n /**\n * Whether the task graph is currently running\n */\n protected running = false;\n protected previewRunning = false;\n\n /**\n * The task graph to run\n */\n public readonly graph: TaskGraph;\n\n /**\n * Output cache repository\n */\n protected outputCache?: TaskOutputRepository;\n /**\n * Whether leaf tasks (no outgoing edges) should accumulate their streaming\n * output. True by default so workflow return values are complete.\n */\n protected accumulateLeafOutputs: boolean = true;\n /**\n * Service registry for this graph run\n */\n protected registry: ServiceRegistry = globalServiceRegistry;\n /**\n * Resource scope for this graph run\n */\n protected resourceScope?: ResourceScope;\n /**\n * AbortController for cancelling graph execution\n */\n protected abortController: AbortController | undefined;\n\n /**\n * Maps to track task execution state\n */\n protected inProgressTasks: Map<unknown, Promise<TaskOutput>> = new Map();\n protected inProgressFunctions: Map<unknown, Promise<void>> = new Map();\n protected failedTaskErrors: Map<unknown, TaskError> = new Map();\n\n /**\n * Active telemetry span for the current graph run.\n */\n protected telemetrySpan?: ISpan;\n\n /**\n * Timer handle for graph-level timeout. Cleared on completion, error, or abort.\n */\n protected graphTimeoutTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * When a graph-level timeout fires, this stores the error so handleAbort()\n * can surface the correct error type.\n */\n protected pendingGraphTimeoutError?: TaskGraphTimeoutError;\n\n /**\n * The entitlement enforcer for the current run, if enforcement is enabled.\n * Set during handleStart and cleared after the run completes.\n */\n protected activeEnforcer?: IEntitlementEnforcer;\n\n /**\n * Constructor for TaskGraphRunner\n * @param graph The task graph to run\n * @param outputCache The task output repository to use for caching task outputs\n * @param processScheduler The scheduler to use for task execution\n * @param previewScheduler The scheduler to use for preview task execution\n */\n constructor(\n graph: TaskGraph,\n outputCache?: TaskOutputRepository,\n protected processScheduler = new DependencyBasedScheduler(graph),\n protected previewScheduler = new TopologicalScheduler(graph)\n ) {\n this.graph = graph;\n graph.outputCache = outputCache;\n this.handleProgress = this.handleProgress.bind(this);\n }\n\n /**\n * Unique ID for the current run, used for timing labels.\n */\n protected runId: string = \"\";\n\n // ========================================================================\n // Public methods\n // ========================================================================\n\n public async runGraph<ExecuteOutput extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config?: TaskGraphRunConfig\n ): Promise<GraphResultArray<ExecuteOutput>> {\n await this.handleStart(config);\n\n const results: GraphResultArray<ExecuteOutput> = [];\n let error: TaskError | undefined;\n\n try {\n // TODO: A different graph runner may chunk tasks that are in parallel\n // rather them all currently available\n for await (const task of this.processScheduler.tasks()) {\n if (this.abortController?.signal.aborted) {\n break;\n }\n\n if (this.failedTaskErrors.size > 0) {\n break;\n }\n\n const isRootTask = this.graph.getSourceDataflows(task.id).length === 0;\n\n const runAsync = async () => {\n let errorRouted = false;\n try {\n // Root tasks (no incoming dataflows) receive the graph run input so e.g.\n // InputTask can seed the graph. Downstream tasks rely only on dataflow\n // edges plus task defaults — unless matchAllEmptyInputs is true, in which case\n // we filter the input to only include properties that are not connected via dataflows.\n const taskInput = isRootTask\n ? input\n : config?.matchAllEmptyInputs\n ? this.filterInputForTask(task, input)\n : {};\n\n const taskPromise = this.runTask(task, taskInput);\n this.inProgressTasks!.set(task.id, taskPromise);\n const taskResult = await taskPromise;\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n // we save the results of all the leaves\n results.push(taskResult as GraphSingleTaskResult<ExecuteOutput>);\n }\n } catch (error) {\n if (this.hasErrorOutputEdges(task)) {\n // Route the error through error-port dataflows instead of failing the graph.\n // pushErrorOutputToEdges sets edge statuses directly (COMPLETED for error\n // edges, DISABLED for normal edges), so we skip the normal status push.\n errorRouted = true;\n this.pushErrorOutputToEdges(task);\n } else {\n this.failedTaskErrors.set(task.id, error as TaskError);\n }\n } finally {\n // IMPORTANT: Push status to edges BEFORE notifying scheduler\n // This ensures dataflow statuses (including DISABLED) are set\n // before the scheduler checks which tasks are ready.\n // Skip normal status push when error routing already set edge statuses.\n if (!errorRouted) {\n this.pushStatusFromNodeToEdges(this.graph, task);\n this.pushErrorFromNodeToEdges(this.graph, task);\n }\n this.processScheduler.onTaskCompleted(task.id);\n }\n };\n\n // Start task execution without awaiting\n // so we can have many tasks running in parallel\n // but keep track of them to make sure they get awaited\n // otherwise, things will finish after this promise is resolved\n this.inProgressFunctions.set(Symbol(task.id as string), runAsync());\n }\n } catch (err) {\n error = err as Error;\n getLogger().error(\"Error running graph\", { error });\n }\n // Wait for all tasks to complete since we did not await runAsync()/this.runTaskWithProvenance()\n await Promise.allSettled(Array.from(this.inProgressTasks.values()));\n // Clean up stragglers to avoid unhandled promise rejections\n await Promise.allSettled(Array.from(this.inProgressFunctions.values()));\n\n // Check graph-level timeout first — it is the root cause when tasks fail due\n // to the graph abort signal, and should take precedence over any task-level\n // TaskAbortedError that was placed in failedTaskErrors as a consequence.\n if (this.pendingGraphTimeoutError) {\n await this.handleAbort();\n throw this.pendingGraphTimeoutError;\n }\n if (this.failedTaskErrors.size > 0) {\n const latestError = this.failedTaskErrors.values().next().value!;\n this.handleError(latestError);\n throw latestError;\n }\n if (this.abortController?.signal.aborted) {\n await this.handleAbort();\n throw new TaskAbortedError();\n }\n\n await this.handleComplete();\n\n return this.filterLeafResults(results);\n }\n\n /**\n * Runs the task graph in preview mode\n * @param input Optional input to pass to root tasks (tasks with no incoming dataflows)\n * @param config Optional configuration for the preview run. Supports overriding the\n * ServiceRegistry (`registry`), providing an output cache (`outputCache`), passing an\n * abort signal (`parentSignal`), and controlling whether streaming leaf task outputs are\n * accumulated into the return value (`accumulateLeafOutputs`).\n * @returns A promise that resolves when all tasks are complete\n * @throws TaskConfigurationError if the graph is already running in preview\n */\n public async runGraphPreview<Output extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config?: TaskGraphRunPreviewConfig\n ): Promise<GraphResultArray<Output>> {\n await this.handleStartPreview(config);\n\n // runPreview is on the UI preview hot path (fires per keystroke), so\n // instrumentation only runs when telemetry is enabled. Without the gate,\n // the four performance.now() calls per task and the per-run debug log\n // payload would burn cycles on every preview update.\n const telemetry = getTelemetryProvider();\n const telemetryEnabled = telemetry.isEnabled;\n const previewRunId = telemetryEnabled ? uuid4() : \"\";\n let previewSpan: ISpan | undefined;\n if (telemetryEnabled) {\n previewSpan = telemetry.startSpan(\"workglow.graph.runPreview\", {\n attributes: {\n \"workglow.graph.preview.run_id\": previewRunId,\n \"workglow.graph.task_count\": this.graph.getTasks().length,\n \"workglow.graph.dataflow_count\": this.graph.getDataflows().length,\n },\n });\n }\n\n const t0 = telemetryEnabled ? performance.now() : 0;\n const taskTimings: Array<{\n id: unknown;\n type: string;\n runPreviewMs: number;\n pushOutputMs: number;\n }> = [];\n\n const results: GraphResultArray<Output> = [];\n try {\n for await (const task of this.previewScheduler.tasks()) {\n const isRootTask = this.graph.getSourceDataflows(task.id).length === 0;\n\n if (task.status === TaskStatus.PENDING) {\n task.resetInputData();\n this.copyInputFromEdgesToNode(task);\n // TODO: cacheable here??\n // if (task.cacheable) {\n // const results = await this.outputCache?.getOutput(\n // (task.constructor as any).type,\n // task.runInputData\n // );\n // if (results) {\n // task.runOutputData = results;\n // }\n // }\n }\n\n // For root tasks (no incoming dataflows), apply the input parameter\n // This is important for GraphAsTask subgraphs where the InputTask needs\n // to receive the parent's input values\n const taskInput = isRootTask ? input : {};\n\n if (telemetryEnabled) {\n const taskType = String(\n (task.constructor as any).runtype || (task.constructor as typeof Task).type || \"?\"\n );\n const tPreview = performance.now();\n const taskResult = await task.runPreview(taskInput);\n const runPreviewMs = performance.now() - tPreview;\n const tPush = performance.now();\n await this.pushOutputFromNodeToEdges(task, taskResult);\n const pushOutputMs = performance.now() - tPush;\n taskTimings.push({ id: task.id, type: taskType, runPreviewMs, pushOutputMs });\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n results.push({\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: taskResult as Output,\n });\n }\n } else {\n const taskResult = await task.runPreview(taskInput);\n await this.pushOutputFromNodeToEdges(task, taskResult);\n\n if (this.graph.getTargetDataflows(task.id).length === 0) {\n results.push({\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: taskResult as Output,\n });\n }\n }\n }\n await this.handleCompletePreview();\n\n if (previewSpan) {\n const totalMs = performance.now() - t0;\n previewSpan.setAttributes({\n \"workglow.graph.preview.duration_ms\": Math.round(totalMs * 1000) / 1000,\n \"workglow.graph.preview.tasks_executed\": taskTimings.length,\n });\n previewSpan.setStatus(SpanStatusCode.OK);\n previewSpan.end();\n getLogger().debug(\"task graph runPreview timings\", {\n previewRunId,\n totalMs: Math.round(totalMs * 1000) / 1000,\n taskTimings,\n });\n }\n\n return this.filterLeafResults(results);\n } catch (error) {\n await this.handleErrorPreview();\n\n if (previewSpan) {\n const totalMs = performance.now() - t0;\n const message = error instanceof Error ? error.message : String(error);\n previewSpan.setAttributes({\n \"workglow.graph.preview.duration_ms\": Math.round(totalMs * 1000) / 1000,\n \"workglow.graph.preview.tasks_executed\": taskTimings.length,\n });\n previewSpan.setStatus(SpanStatusCode.ERROR, message);\n previewSpan.end();\n getLogger().debug(\"task graph runPreview failed\", {\n previewRunId,\n totalMs: Math.round(totalMs * 1000) / 1000,\n taskTimings,\n error,\n });\n }\n\n throw error;\n }\n }\n\n /**\n * Aborts the task graph execution\n */\n public abort(): void {\n this.abortController?.abort();\n }\n\n /**\n * Disables the task graph execution\n */\n public async disable(): Promise<void> {\n await this.handleDisable();\n }\n\n /**\n * Filters graph-level input to only include properties that are not connected via dataflows for a given task\n * @param task The task to filter input for\n * @param input The graph-level input\n * @returns Filtered input containing only unconnected properties\n */\n protected filterInputForTask(task: ITask, input: TaskInput): TaskInput {\n // Get all inputs that are connected to this task via dataflows\n const sourceDataflows = this.graph.getSourceDataflows(task.id);\n const connectedInputs = new Set(sourceDataflows.map((df) => df.targetTaskPortId));\n\n // If DATAFLOW_ALL_PORTS (\"*\") is in the set, all inputs are connected\n const allPortsConnected = connectedInputs.has(DATAFLOW_ALL_PORTS);\n\n // Filter out connected inputs from the graph input\n const filteredInput: TaskInput = {};\n for (const [key, value] of Object.entries(input)) {\n // Skip this input if it's explicitly connected OR if all ports are connected\n if (!connectedInputs.has(key) && !allPortsConnected) {\n filteredInput[key] = value;\n }\n }\n\n return filteredInput;\n }\n\n /**\n * Adds input data to a task.\n * Delegates to {@link Task.addInput} for the actual merging logic.\n *\n * @param task The task to add input data to\n * @param overrides The input data to override (or add to if an array)\n */\n public addInputData(task: ITask, overrides: Partial<TaskInput> | undefined): void {\n if (!overrides) return;\n\n const changed = task.addInput(overrides);\n\n // TODO(str): This is a hack.\n if (changed && \"regenerateGraph\" in task && typeof task.regenerateGraph === \"function\") {\n task.regenerateGraph();\n }\n }\n\n // ========================================================================\n // Protected Handlers\n // ========================================================================\n\n /**\n * When leaf results include tasks with `isGraphOutput`, returns only those.\n * Otherwise returns all leaf results unchanged.\n */\n protected filterLeafResults<T>(results: GraphResultArray<T>): GraphResultArray<T> {\n if (results.length <= 1) return results;\n const graphOutputResults = results.filter((r) => {\n const task = this.graph.getTask(r.id);\n return task && (task.constructor as typeof Task).isGraphOutput;\n });\n return graphOutputResults.length > 0 ? graphOutputResults : results;\n }\n\n public mergeExecuteOutputsToRunOutput<\n ExecuteOutput extends TaskOutput,\n Merge extends CompoundMergeStrategy = CompoundMergeStrategy,\n >(\n results: GraphResultArray<ExecuteOutput>,\n compoundMerge: Merge\n ): GraphResult<ExecuteOutput, Merge> {\n if (compoundMerge === GRAPH_RESULT_ARRAY) {\n return results as GraphResult<ExecuteOutput, Merge>;\n }\n\n if (compoundMerge === PROPERTY_ARRAY) {\n let fixedOutput = {} as PropertyArrayGraphResult<ExecuteOutput>;\n const outputs = results.map((result: any) => result.data);\n if (outputs.length === 1) {\n fixedOutput = outputs[0];\n } else if (outputs.length > 1) {\n const collected = collectPropertyValues<ExecuteOutput>(outputs as ExecuteOutput[]);\n if (Object.keys(collected).length > 0) {\n fixedOutput = collected;\n }\n }\n return fixedOutput as GraphResult<ExecuteOutput, Merge>;\n }\n throw new TaskConfigurationError(`Unknown compound merge strategy: ${compoundMerge}`);\n }\n\n /**\n * Copies input data from edges to a task\n * @param task The task to copy input data to\n */\n protected copyInputFromEdgesToNode(task: ITask) {\n const dataflows = this.graph.getSourceDataflows(task.id);\n // Sort by dataflow id for deterministic input merging regardless of insertion order\n dataflows.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n for (const dataflow of dataflows) {\n this.addInputData(task, dataflow.getPortData());\n }\n }\n\n /**\n * Pushes the output of a task to its target tasks\n * @param node The task that produced the output\n * @param results The output of the task\n */\n protected async pushOutputFromNodeToEdges(node: ITask, results: TaskOutput) {\n const dataflows = this.graph.getTargetDataflows(node.id);\n\n // Fanout retain: count consumers per source port. For any port whose\n // value is refcountable AND has > 1 consumer, retain(count - 1) so each\n // downstream release() decrements correctly. Without this, the first\n // consumer's release() would reclaim resources still in use elsewhere.\n if (Object.keys(results).length > 0) {\n const consumerCounts = new Map<string, number>();\n for (const dataflow of dataflows) {\n if (dataflow.stream !== undefined) continue; // streams handle materialization separately\n const port = dataflow.sourceTaskPortId;\n consumerCounts.set(port, (consumerCounts.get(port) ?? 0) + 1);\n }\n for (const [port, count] of consumerCounts) {\n if (count <= 1) continue;\n const value = results[port];\n const ref = asRefcountable(value);\n if (ref) ref.retain(count - 1);\n }\n }\n\n for (const dataflow of dataflows) {\n // Edges with an active stream have their final value materialised by the\n // downstream task's awaitStreamInputs (which uses Dataflow.awaitStreamValue\n // to read the raw snapshot/finish data and then applies transforms).\n // Setting port data here would be overwritten by the finish event, and\n // applying transforms again on this path would double-apply\n // non-idempotent transforms, so skip the whole post-materialisation step.\n if (dataflow.stream !== undefined) continue;\n const compatibility = dataflow.semanticallyCompatible(this.graph, dataflow, this.registry);\n if (compatibility === \"static\") {\n dataflow.setPortData(results);\n await dataflow.applyTransforms(this.registry);\n } else if (compatibility === \"runtime\") {\n const task = this.graph.getTask(dataflow.targetTaskId)!;\n const narrowed = await task.narrowInput({ ...results }, this.registry);\n dataflow.setPortData(narrowed);\n await dataflow.applyTransforms(this.registry);\n } else {\n // Warn only when we had data to push; empty results (e.g. progress mid-run) are expected\n const resultsKeys = Object.keys(results);\n if (resultsKeys.length > 0) {\n getLogger().warn(\"pushOutputFromNodeToEdge not compatible, not setting port data\", {\n dataflowId: dataflow.id,\n compatibility,\n resultsKeys,\n });\n }\n }\n }\n }\n\n /**\n * Pushes the status of a task to its target edges\n * @param node The task that produced the status\n *\n * For ConditionalTask, this method handles selective dataflow status:\n * - Active branch dataflows get COMPLETED status\n * - Inactive branch dataflows get DISABLED status\n */\n protected pushStatusFromNodeToEdges(graph: TaskGraph, node: ITask, status?: TaskStatus): void {\n if (!node?.config?.id) return;\n\n const dataflows = graph.getTargetDataflows(node.id);\n const effectiveStatus = status ?? node.status;\n\n // Check if this is a ConditionalTask with selective branching\n if (node instanceof ConditionalTask && effectiveStatus === TaskStatus.COMPLETED) {\n // Build a map of output port -> branch ID for lookup\n const branches = node.config.branches ?? [];\n const portToBranch = new Map<string, string>();\n for (const branch of branches) {\n portToBranch.set(branch.outputPort, branch.id);\n }\n\n const activeBranches = node.getActiveBranches();\n\n for (const dataflow of dataflows) {\n // Preserve FAILED edges (e.g. transform chain failure) rather than\n // overwriting with the source task's completion status.\n if (dataflow.status === TaskStatus.FAILED) continue;\n const branchId = portToBranch.get(dataflow.sourceTaskPortId);\n if (branchId !== undefined) {\n // This dataflow is from a branch port\n if (activeBranches.has(branchId)) {\n // Branch is active - dataflow gets completed status\n dataflow.setStatus(TaskStatus.COMPLETED);\n } else {\n // Branch is inactive - dataflow gets disabled status\n dataflow.setStatus(TaskStatus.DISABLED);\n }\n } else {\n // Not a branch port (e.g., _activeBranches metadata) - use normal status\n dataflow.setStatus(effectiveStatus);\n }\n }\n\n // Cascade disabled status to downstream tasks\n this.propagateDisabledStatus(graph);\n return;\n }\n\n // Default behavior for non-conditional tasks\n dataflows.forEach((dataflow) => {\n // Preserve FAILED edges (e.g. transform chain failure) rather than\n // overwriting with the source task's completion status.\n if (dataflow.status === TaskStatus.FAILED) return;\n dataflow.setStatus(effectiveStatus);\n });\n }\n\n /**\n * Pushes the error of a task to its target edges\n * @param node The task that produced the error\n */\n protected pushErrorFromNodeToEdges(graph: TaskGraph, node: ITask): void {\n if (!node?.config?.id) return;\n graph.getTargetDataflows(node.id).forEach((dataflow) => {\n dataflow.error = node.error;\n });\n }\n\n /**\n * Returns true if the task has any outgoing dataflow edges that use the\n * error output port (`[error]`). These edges indicate that the task's\n * errors should be routed to downstream handler tasks instead of failing\n * the entire graph.\n */\n protected hasErrorOutputEdges(task: ITask): boolean {\n const dataflows = this.graph.getTargetDataflows(task.id);\n return dataflows.some((df) => df.sourceTaskPortId === DATAFLOW_ERROR_PORT);\n }\n\n /**\n * Routes a failed task's error through its error-port dataflow edges.\n *\n * For each outgoing dataflow:\n * - Error-port edges (`[error]`) receive the error data and get COMPLETED status\n * - Non-error-port edges get DISABLED status (the task didn't produce normal output)\n *\n * After setting edge statuses, propagateDisabledStatus() cascades DISABLED\n * through any downstream tasks that only had non-error inputs from this task.\n */\n protected pushErrorOutputToEdges(task: ITask): void {\n const taskError = task.error;\n const errorData = {\n error: taskError?.message ?? \"Unknown error\",\n errorType: (taskError?.constructor as { type?: string })?.type ?? \"TaskError\",\n };\n\n const dataflows = this.graph.getTargetDataflows(task.id);\n for (const df of dataflows) {\n if (df.sourceTaskPortId === DATAFLOW_ERROR_PORT) {\n // Route error data to the error-port edge\n df.value = errorData;\n df.setStatus(TaskStatus.COMPLETED);\n } else {\n // Normal output edges are disabled — this task didn't produce output\n df.setStatus(TaskStatus.DISABLED);\n }\n }\n\n // Cascade disabled status to downstream tasks whose ALL inputs are now disabled\n this.propagateDisabledStatus(this.graph);\n }\n\n /**\n * Propagates DISABLED status through the graph.\n *\n * When a task's ALL incoming dataflows are DISABLED, that task becomes unreachable\n * and should also be disabled. This cascades through the graph until no more\n * tasks can be disabled.\n *\n * This is used by ConditionalTask to disable downstream tasks on inactive branches.\n *\n * @param graph The task graph to propagate disabled status through\n */\n protected propagateDisabledStatus(graph: TaskGraph): void {\n let changed = true;\n\n // Keep iterating until no more changes (fixed-point iteration)\n while (changed) {\n changed = false;\n\n for (const task of graph.getTasks()) {\n // Only consider tasks that are still pending\n if (task.status !== TaskStatus.PENDING) {\n continue;\n }\n\n const incomingDataflows = graph.getSourceDataflows(task.id);\n\n // Skip tasks with no incoming dataflows (root tasks)\n if (incomingDataflows.length === 0) {\n continue;\n }\n\n // Check if ALL incoming dataflows are DISABLED\n const allDisabled = incomingDataflows.every((df) => df.status === TaskStatus.DISABLED);\n\n if (allDisabled) {\n // This task is unreachable - disable it synchronously\n // Set status directly to avoid async issues\n task.status = TaskStatus.DISABLED;\n task.progress = 100;\n task.completedAt = new Date();\n task.emit(\"disabled\");\n task.emit(\"status\", task.status);\n\n // Propagate disabled status to its outgoing dataflows\n graph.getTargetDataflows(task.id).forEach((dataflow) => {\n dataflow.setStatus(TaskStatus.DISABLED);\n });\n\n // Mark as completed in scheduler so it doesn't wait for this task\n this.processScheduler.onTaskCompleted(task.id);\n\n changed = true;\n }\n }\n }\n }\n\n /**\n * Determines whether a streaming task needs to accumulate its text-delta\n * chunks into an enriched finish event. Accumulation is needed when:\n *\n * 1. Output caching is active (the cached value must be fully materialised).\n * 2. Any outgoing dataflow edge connects a streaming output port to an input\n * port that is not streaming with the same mode (i.e. the downstream task\n * cannot consume a raw stream and needs a completed value).\n *\n * When accumulation is required the source task runs with shouldAccumulate=true,\n * emitting an enriched finish event that carries all accumulated port text.\n * All downstream dataflow edges share that event via tee'd streams so no\n * edge needs to re-accumulate independently.\n */\n protected taskNeedsAccumulation(task: ITask): boolean {\n if (this.outputCache) return true;\n\n const outEdges = this.graph.getTargetDataflows(task.id);\n if (outEdges.length === 0) return this.accumulateLeafOutputs;\n\n const outSchema = task.outputSchema();\n\n for (const df of outEdges) {\n if (df.sourceTaskPortId === DATAFLOW_ALL_PORTS) {\n // Conservative: if any streaming output port exists, accumulate.\n // This covers the case where all-ports edges fan into non-streaming tasks.\n if (getStreamingPorts(outSchema).length > 0) return true;\n continue;\n }\n\n const targetTask = this.graph.getTask(df.targetTaskId);\n if (!targetTask) continue;\n const inSchema = targetTask.inputSchema();\n\n if (edgeNeedsAccumulation(outSchema, df.sourceTaskPortId, inSchema, df.targetTaskPortId)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Runs a task\n * @param task The task to run\n * @param input The input for the task\n * @returns The output of the task\n */\n protected async runTask<T>(task: ITask, input: TaskInput): Promise<GraphSingleTaskResult<T>> {\n const isStreamable = isTaskStreamable(task);\n\n // For pass-through streaming tasks: if the task is streamable and has\n // streaming input edges, tee each stream so one copy is forwarded to\n // the task's executeStream() (via inputStreams) while the other stays\n // on the edge for materialization by awaitStreamInputs.\n if (isStreamable) {\n const dataflows = this.graph.getSourceDataflows(task.id);\n const streamingEdges = dataflows.filter((df) => df.stream !== undefined);\n if (streamingEdges.length > 0) {\n const inputStreams = new Map<string, ReadableStream<StreamEvent>>();\n for (const df of streamingEdges) {\n const stream = df.stream!;\n const [forwardCopy, materializeCopy] = stream.tee();\n inputStreams.set(df.targetTaskPortId, forwardCopy);\n df.setStream(materializeCopy);\n }\n task.runner.inputStreams = inputStreams;\n }\n }\n\n // Await any active streams on input dataflow edges so their values\n // are materialized before we read them. This applies to ALL downstream\n // tasks (both streaming and non-streaming) because copyInputFromEdgesToNode\n // reads via getPortData() which requires materialized values.\n // Streaming downstream tasks are still unblocked early by the scheduler\n // (they can start setup while upstream is streaming), but their actual\n // input data waits for upstream completion.\n await this.awaitStreamInputs(task);\n\n this.copyInputFromEdgesToNode(task);\n\n // Runtime entitlement enforcement for tasks with dynamic entitlements\n if (this.activeEnforcer && (task.constructor as typeof Task).hasDynamicEntitlements) {\n const denied = await this.activeEnforcer.checkTask(task);\n if (denied.length > 0) {\n throw new TaskEntitlementError(\n `Task ${(task.constructor as typeof Task).type} denied entitlements: ${denied.map(formatEntitlementDenial).join(\", \")}`\n );\n }\n }\n\n if (isStreamable) {\n return this.runStreamingTask<T>(task, input);\n }\n\n const results = await task.runner.run(input, {\n // Pass `false` when no cache so TaskRunner.handleStart explicitly clears\n // its own cached reference (undefined would leave the old value intact).\n outputCache: this.outputCache ?? false,\n updateProgress: async (task: ITask, progress: number, message?: string, ...args: any[]) =>\n await this.handleProgress(task, progress, message, ...args),\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n\n await this.pushOutputFromNodeToEdges(task, results);\n\n return {\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: results as T,\n };\n }\n\n /**\n * For non-streaming downstream tasks, awaits completion of any active\n * streams on input dataflow edges, materializing their values.\n *\n * Streaming upstream tasks set a ReadableStream on outgoing edges.\n * Non-streaming downstream tasks cannot consume streams directly, so\n * this method reads each stream to completion and accumulates the\n * value (via Dataflow.awaitStreamValue) before the task reads its\n * inputs through the normal getPortData() path.\n */\n protected async awaitStreamInputs(task: ITask): Promise<void> {\n const dataflows = this.graph.getSourceDataflows(task.id);\n const streamingDataflows = dataflows.filter((df) => df.stream !== undefined);\n if (streamingDataflows.length === 0) return;\n await Promise.all(\n streamingDataflows.map(async (df) => {\n await df.awaitStreamValue();\n // awaitStreamValue sets port data from the raw finish/snapshot event.\n // Apply the edge's transform chain over the materialised value so the\n // downstream task receives the transformed result. This is the sole\n // transform application for streaming edges (pushOutputFromNodeToEdges\n // deliberately skips them to avoid double-apply).\n await df.applyTransforms(this.registry);\n })\n );\n }\n\n /**\n * Runs a streaming task within the DAG.\n * Listens for stream events to:\n * - Notify the scheduler when streaming begins (unblocking downstream streamable tasks)\n * - Push stream data to outgoing dataflow edges\n * - Have the source task accumulate and emit enriched finish events for\n * non-streaming downstream tasks (when taskNeedsAccumulation() is true)\n */\n protected async runStreamingTask<T>(\n task: ITask,\n input: TaskInput\n ): Promise<GraphSingleTaskResult<T>> {\n const streamMode = getOutputStreamMode(task.outputSchema());\n const shouldAccumulate = this.taskNeedsAccumulation(task);\n\n let streamingNotified = false;\n\n const onStatus = (status: TaskStatus) => {\n if (status === TaskStatus.STREAMING && !streamingNotified) {\n streamingNotified = true;\n this.pushStatusFromNodeToEdges(this.graph, task, TaskStatus.STREAMING);\n this.pushStreamToEdges(task, streamMode);\n this.processScheduler.onTaskStreaming(task.id);\n }\n };\n\n const onStreamStart = () => {\n this.graph.emit(\"task_stream_start\", task.id);\n };\n\n const onStreamChunk = (event: StreamEvent) => {\n this.graph.emit(\"task_stream_chunk\", task.id, event);\n };\n\n const onStreamEnd = (output: Record<string, any>) => {\n this.graph.emit(\"task_stream_end\", task.id, output);\n };\n\n task.on(\"status\", onStatus);\n task.on(\"stream_start\", onStreamStart);\n task.on(\"stream_chunk\", onStreamChunk);\n task.on(\"stream_end\", onStreamEnd);\n\n try {\n const results = await task.runner.run(input, {\n outputCache: this.outputCache ?? false,\n shouldAccumulate,\n updateProgress: async (task: ITask, progress: number, message?: string, ...args: any[]) =>\n await this.handleProgress(task, progress, message, ...args),\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n\n await this.pushOutputFromNodeToEdges(task, results);\n\n return {\n id: task.id,\n type: (task.constructor as any).runtype || (task.constructor as any).type,\n data: results as T,\n };\n } finally {\n task.off(\"status\", onStatus);\n task.off(\"stream_start\", onStreamStart);\n task.off(\"stream_chunk\", onStreamChunk);\n task.off(\"stream_end\", onStreamEnd);\n }\n }\n\n /**\n * Returns true if an event carries a port-specific delta (text-delta or object-delta).\n */\n private static isPortDelta(event: StreamEvent): event is StreamEvent & { port: string } {\n return event.type === \"text-delta\" || event.type === \"object-delta\";\n }\n\n /**\n * Creates a ReadableStream from task streaming events, optionally filtered\n * to a single port. When `portId` is undefined (DATAFLOW_ALL_PORTS), all\n * events pass through. When set, only delta events matching the port plus\n * control events (finish, error, snapshot) are enqueued.\n */\n private createStreamFromTaskEvents(task: ITask, portId?: string): ReadableStream<StreamEvent> {\n return new ReadableStream<StreamEvent>({\n start: (controller) => {\n const onChunk = (event: StreamEvent) => {\n try {\n if (\n portId !== undefined &&\n TaskGraphRunner.isPortDelta(event) &&\n event.port !== portId\n ) {\n return;\n }\n controller.enqueue(event);\n } catch {\n // Stream may be closed\n }\n };\n const onEnd = () => {\n try {\n controller.close();\n } catch {\n // Stream may already be closed\n }\n task.off(\"stream_chunk\", onChunk);\n task.off(\"stream_end\", onEnd);\n };\n task.on(\"stream_chunk\", onChunk);\n task.on(\"stream_end\", onEnd);\n },\n });\n }\n\n /**\n * Pushes stream events from a streaming task to its outgoing dataflow edges.\n * Creates per-port filtered ReadableStreams for specific-port edges and\n * unfiltered streams for DATAFLOW_ALL_PORTS edges. Within each port group,\n * uses tee() for fan-out to multiple consumers.\n */\n protected pushStreamToEdges(task: ITask, _streamMode: StreamMode): void {\n const targetDataflows = this.graph.getTargetDataflows(task.id);\n if (targetDataflows.length === 0) return;\n\n // Group edges by their source port\n const groups = new Map<string, typeof targetDataflows>();\n for (const df of targetDataflows) {\n const key = df.sourceTaskPortId;\n let group = groups.get(key);\n if (!group) {\n group = [];\n groups.set(key, group);\n }\n group.push(df);\n }\n\n for (const [portKey, edges] of groups) {\n const filterPort = portKey === DATAFLOW_ALL_PORTS ? undefined : portKey;\n const stream = this.createStreamFromTaskEvents(task, filterPort);\n\n if (edges.length === 1) {\n edges[0].setStream(stream);\n } else {\n let currentStream = stream;\n for (let i = 0; i < edges.length; i++) {\n if (i === edges.length - 1) {\n edges[i].setStream(currentStream);\n } else {\n const [s1, s2] = currentStream.tee();\n edges[i].setStream(s1);\n currentStream = s2;\n }\n }\n }\n }\n }\n\n /**\n * Resets a task\n * @param graph The task graph to reset\n * @param task The task to reset\n * @param runId The run ID\n */\n protected resetTask(graph: TaskGraph, task: ITask, runId: string) {\n task.status = TaskStatus.PENDING;\n task.resetInputData();\n task.runOutputData = {};\n task.error = undefined;\n task.progress = 0;\n task.runConfig = { ...task.runConfig, runnerId: runId };\n this.pushStatusFromNodeToEdges(graph, task);\n this.pushErrorFromNodeToEdges(graph, task);\n task.emit(\"reset\");\n task.emit(\"status\", task.status);\n }\n\n /**\n * Resets the task graph, recursively\n * @param graph The task graph to reset\n */\n public resetGraph(graph: TaskGraph, runnerId: string) {\n graph.getTasks().forEach((node) => {\n this.resetTask(graph, node, runnerId);\n node.regenerateGraph();\n if (node.hasChildren()) {\n this.resetGraph(node.subGraph, runnerId);\n }\n });\n graph.getDataflows().forEach((dataflow) => {\n dataflow.reset();\n });\n }\n\n /**\n * Handles the start of task graph execution\n * @param parentSignal Optional abort signal from parent\n */\n protected async handleStart(config?: TaskGraphRunConfig): Promise<void> {\n // Setup registry - create child from global if not provided\n if (config?.registry !== undefined) {\n this.registry = config.registry;\n } else if (this.registry === undefined) {\n // Create a child container that inherits from global but allows overrides\n this.registry = new ServiceRegistry(globalServiceRegistry.container.createChildContainer());\n }\n if (config?.resourceScope !== undefined) {\n this.resourceScope = config.resourceScope;\n }\n\n this.accumulateLeafOutputs = config?.accumulateLeafOutputs !== false;\n\n if (config?.outputCache !== undefined) {\n if (typeof config.outputCache === \"boolean\") {\n if (config.outputCache === true) {\n this.outputCache = this.registry.get(TASK_OUTPUT_REPOSITORY);\n } else {\n this.outputCache = undefined;\n }\n } else {\n this.outputCache = config.outputCache;\n }\n this.graph.outputCache = this.outputCache;\n }\n\n // Prevent reentrancy\n if (this.running || this.previewRunning) {\n throw new TaskConfigurationError(\"Graph is already running\");\n }\n\n this.running = true;\n this.abortController = new AbortController();\n this.abortController.signal.addEventListener(\"abort\", () => {\n this.handleAbort();\n });\n\n // Set up graph-level timeout if configured\n if (config?.timeout !== undefined && config.timeout > 0) {\n this.pendingGraphTimeoutError = undefined;\n this.graphTimeoutTimer = setTimeout(() => {\n this.pendingGraphTimeoutError = new TaskGraphTimeoutError(config.timeout);\n this.abortController?.abort();\n }, config.timeout);\n }\n\n // Listen first, then check — addEventListener on an already-aborted signal\n // does not fire, so checking .aborted after ensures we never miss an abort.\n if (config?.parentSignal) {\n const onParentAbort = () => {\n this.abortController?.abort();\n };\n config.parentSignal.addEventListener(\"abort\", onParentAbort, { once: true });\n if (config.parentSignal.aborted) {\n config.parentSignal.removeEventListener(\"abort\", onParentAbort);\n this.abortController.abort();\n return;\n }\n }\n\n this.runId = uuid4();\n this.resetGraph(this.graph, this.runId); // Reset graph and regenerate sub-graphs, changes task count / entitlements\n this.processScheduler.reset();\n this.inProgressTasks.clear();\n this.inProgressFunctions.clear();\n this.failedTaskErrors.clear();\n\n // Validate and enforce after resetGraph (which regenerates sub-graphs and may\n // change task count / entitlements). On failure, clean up running state so the\n // runner remains reusable.\n try {\n // Validate graph size limits\n if (config?.maxTasks !== undefined && config.maxTasks > 0) {\n const taskCount = this.graph.getTasks().length;\n if (taskCount > config.maxTasks) {\n throw new TaskConfigurationError(\n `Graph has ${taskCount} tasks, exceeding the limit of ${config.maxTasks}`\n );\n }\n }\n\n // Opt-in entitlement enforcement (preflight)\n if (config?.enforceEntitlements) {\n if (!this.registry.has(ENTITLEMENT_ENFORCER)) {\n throw new TaskConfigurationError(\n \"enforceEntitlements is enabled but no IEntitlementEnforcer is registered. \" +\n \"Register an enforcer via ENTITLEMENT_ENFORCER before running the graph.\"\n );\n }\n const enforcer = this.registry.get(ENTITLEMENT_ENFORCER);\n const denied = await enforcer.checkAll(computeGraphEntitlements(this.graph));\n if (denied.length > 0) {\n throw new TaskEntitlementError(\n `Denied entitlements: ${denied.map(formatEntitlementDenial).join(\", \")}`\n );\n }\n this.activeEnforcer = enforcer;\n } else {\n this.activeEnforcer = undefined;\n }\n } catch (err) {\n // Reset running state so the runner is reusable after validation failures\n if (this.graphTimeoutTimer !== undefined) {\n clearTimeout(this.graphTimeoutTimer);\n this.graphTimeoutTimer = undefined;\n }\n this.abortController = undefined;\n this.activeEnforcer = undefined;\n this.running = false;\n throw err;\n }\n\n // Start telemetry span for the graph run\n const telemetry = getTelemetryProvider();\n if (telemetry.isEnabled) {\n this.telemetrySpan = telemetry.startSpan(\"workglow.graph.run\", {\n attributes: {\n \"workglow.graph.run_id\": this.runId,\n \"workglow.graph.task_count\": this.graph.getTasks().length,\n \"workglow.graph.dataflow_count\": this.graph.getDataflows().length,\n },\n });\n }\n\n this.graph.emit(\"start\");\n }\n\n protected async handleStartPreview(config?: TaskGraphRunConfig): Promise<void> {\n if (this.previewRunning) {\n throw new TaskConfigurationError(\"Graph is already running in preview\");\n }\n\n // Use explicit registry if provided; otherwise keep the existing one\n // (which is either globalServiceRegistry by default, or whatever handleStart set).\n if (config?.registry !== undefined) {\n this.registry = config.registry;\n }\n\n // Validate graph size limits (same as handleStart)\n if (config?.maxTasks !== undefined && config.maxTasks > 0) {\n const taskCount = this.graph.getTasks().length;\n if (taskCount > config.maxTasks) {\n throw new TaskConfigurationError(\n `Graph has ${taskCount} tasks, exceeding the limit of ${config.maxTasks}`\n );\n }\n }\n\n // Note: `timeout` is not enforced for preview runs. Preview execution is\n // event-driven with no single completion point, so a graph-level timeout\n // does not apply. Use per-task timeouts for individual task time limits.\n\n this.previewScheduler.reset();\n this.previewRunning = true;\n }\n\n /**\n * Handles the completion of task graph execution\n */\n /**\n * Clears the graph-level timeout timer if active.\n */\n protected clearGraphTimeout(): void {\n if (this.graphTimeoutTimer !== undefined) {\n clearTimeout(this.graphTimeoutTimer);\n this.graphTimeoutTimer = undefined;\n }\n }\n\n protected async handleComplete(): Promise<void> {\n this.clearGraphTimeout();\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.OK);\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"complete\");\n }\n\n protected async handleCompletePreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles errors during task graph execution\n */\n protected async handleError(error: TaskError): Promise<void> {\n this.clearGraphTimeout();\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PROCESSING || task.status === TaskStatus.STREAMING) {\n return task.abort();\n }\n })\n );\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, error.message);\n this.telemetrySpan.setAttributes({ \"workglow.graph.error\": error.message });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"error\", error);\n }\n\n protected async handleErrorPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task graph abortion\n */\n protected async handleAbort(): Promise<void> {\n this.clearGraphTimeout();\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PROCESSING || task.status === TaskStatus.STREAMING) {\n return task.abort();\n }\n })\n );\n this.running = false;\n this.activeEnforcer = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, \"aborted\");\n this.telemetrySpan.addEvent(\"workglow.graph.aborted\");\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.graph.emit(\"abort\");\n }\n\n protected async handleAbortPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task graph disabling\n */\n protected async handleDisable(): Promise<void> {\n await Promise.allSettled(\n this.graph.getTasks().map(async (task: ITask) => {\n if (task.status === TaskStatus.PENDING) {\n return task.disable();\n }\n })\n );\n this.running = false;\n this.graph.emit(\"disabled\");\n }\n\n /**\n * Handles progress updates for the task graph by averaging `progress` across tasks whose class\n * declares its own `execute` ({@link taskPrototypeHasOwnExecute}). Other nodes are ignored.\n * @param progress Progress value (0-100)\n * @param message Optional message\n * @param args Additional arguments\n */\n protected async handleProgress(\n task: ITask,\n progress: number,\n message?: string,\n ...args: any[]\n ): Promise<void> {\n const contributors = this.graph.getTasks().filter(taskPrototypeHasOwnExecute);\n if (contributors.length > 1) {\n const sum = contributors.reduce((acc, t) => acc + t.progress, 0);\n progress = Math.round(sum / contributors.length);\n } else if (contributors.length === 1) {\n const [only] = contributors;\n progress = only.progress;\n }\n this.pushStatusFromNodeToEdges(this.graph, task);\n // Emit aggregate progress before awaiting output push so UIs (and task `emit(\"progress\")` in\n // TaskRunner) are not blocked when pushOutput/narrowInput is slow or stalls mid-run.\n this.graph.emit(\"graph_progress\", progress, message, args);\n // Only push output when the task has produced data; progress can fire mid-run with empty runOutputData\n if (task.runOutputData && Object.keys(task.runOutputData).length > 0) {\n await this.pushOutputFromNodeToEdges(task, task.runOutputData);\n }\n }\n}\n",
|
|
17
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Minimum surface a value must expose to be eligible for runner-level\n * fanout retain. Implementations: WebGpuImage (refcounts a GPU texture);\n * CpuImage / SharpImage (no-ops, but conform to the shape so the same\n * downstream code paths work without branching).\n */\nexport interface Refcountable {\n retain(n?: number): Refcountable;\n release(): void;\n}\n\n// Cross-bundle singleton — Vite/Rolldown can produce multiple bundle copies\n// of this file. Without sharing through globalThis, predicates registered\n// in one copy wouldn't be visible to runner code in another copy. Pattern\n// matches the codec + factory registries (see commit b9e3e235).\nconst GLOBAL_KEY = Symbol.for(\"@workglow/task-graph/refcountable.predicates\");\nconst _g = globalThis as Record<symbol, unknown>;\nif (!Array.isArray(_g[GLOBAL_KEY])) {\n _g[GLOBAL_KEY] = [];\n}\nconst predicates = _g[GLOBAL_KEY] as Array<(v: unknown) => v is Refcountable>;\n\n/**\n * Register a predicate that identifies refcountable values. The runner\n * walks all registered predicates after task completion; the first match\n * wins. Order is the order of registration.\n */\nexport function registerRefcountablePredicate<T extends Refcountable>(\n p: (v: unknown) => v is T,\n): void {\n predicates.push(p);\n}\n\n/**\n * Returns the value typed as Refcountable when any registered predicate\n * matches, otherwise null. Non-object values short-circuit to null.\n */\nexport function asRefcountable(v: unknown): Refcountable | null {\n if (v === null || v === undefined) return null;\n if (typeof v !== \"object\") return null;\n for (const p of predicates) {\n if (p(v)) return v;\n }\n return null;\n}\n\n/** @internal — test affordance only. */\nexport function _resetRefcountablePredicatesForTests(): void {\n predicates.length = 0;\n}\n",
|
|
17
18
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, EventEmitter, EventParameters } from \"@workglow/util\";\nimport { TaskInput, TaskOutput } from \"../task/TaskTypes\";\n\n/**\n * Service token for TaskOutputRepository\n */\nexport const TASK_OUTPUT_REPOSITORY = createServiceToken<TaskOutputRepository>(\n \"taskgraph.taskOutputRepository\"\n);\n\nexport type TaskOutputEventListeners = {\n output_saved: (taskType: string) => void;\n output_retrieved: (taskType: string) => void;\n output_cleared: () => void;\n output_pruned: () => void;\n};\n\nexport type TaskOutputEvents = keyof TaskOutputEventListeners;\n\nexport type TaskOutputEventListener<Event extends TaskOutputEvents> =\n TaskOutputEventListeners[Event];\n\nexport type TaskOutputEventParameters<Event extends TaskOutputEvents> = EventParameters<\n TaskOutputEventListeners,\n Event\n>;\n\n/**\n * Abstract class for managing task outputs in a repository\n * Provides methods for saving, retrieving, and clearing task outputs\n */\nexport abstract class TaskOutputRepository {\n /**\n * Whether to compress the output\n */\n outputCompression: boolean;\n\n /**\n * Constructor for the TaskOutputRepository\n * @param options The options for the repository\n */\n constructor({ outputCompression = true }) {\n this.outputCompression = outputCompression;\n }\n\n private get events() {\n if (!this._events) {\n this._events = new EventEmitter<TaskOutputEventListeners>();\n }\n return this._events;\n }\n private _events: EventEmitter<TaskOutputEventListeners> | undefined;\n\n /**\n * Registers an event listener for a specific event\n * @param name The event name to listen for\n * @param fn The callback function to execute when the event occurs\n */\n on<Event extends TaskOutputEvents>(name: Event, fn: TaskOutputEventListener<Event>) {\n this.events.on(name, fn);\n }\n\n /**\n * Removes an event listener for a specific event\n * @param name The event name to stop listening for\n * @param fn The callback function to remove\n */\n off<Event extends TaskOutputEvents>(name: Event, fn: TaskOutputEventListener<Event>) {\n this.events.off(name, fn);\n }\n\n /**\n * Returns a promise that resolves when the event is emitted\n * @param name The event name to listen for\n * @returns a promise that resolves to the event parameters\n */\n waitOn<Event extends TaskOutputEvents>(name: Event) {\n return this.events.waitOn(name) as Promise<TaskOutputEventParameters<Event>>;\n }\n\n /**\n * Emits an event (if there are listeners)\n * @param name The event name to emit\n * @param args The event parameters\n */\n emit<Event extends TaskOutputEvents>(name: Event, ...args: TaskOutputEventParameters<Event>) {\n this._events?.emit(name, ...args);\n }\n\n /**\n * Saves a task output to the repository\n * @param taskType The type of task to save the output for\n * @param inputs The input parameters for the task\n * @param output The task output to save\n */\n abstract saveOutput(\n taskType: string,\n inputs: TaskInput,\n output: TaskOutput,\n createdAt?: Date // for testing purposes\n ): Promise<void>;\n\n /**\n * Retrieves a task output from the repository\n * @param taskType The type of task to retrieve the output for\n * @param inputs The input parameters for the task\n * @returns The retrieved task output, or undefined if not found\n */\n abstract getOutput(taskType: string, inputs: TaskInput): Promise<TaskOutput | undefined>;\n\n /**\n * Clears all task outputs from the repository\n * @emits output_cleared when the operation completes\n */\n abstract clear(): Promise<void>;\n\n /**\n * Returns the number of task outputs stored in the repository\n * @returns The count of stored task outputs\n */\n abstract size(): Promise<number>;\n\n /**\n * Clear all task outputs from the repository that are older than the given date\n * @param olderThanInMs The time in milliseconds to clear task outputs older than\n */\n abstract clearOlderThan(olderThanInMs: number): Promise<void>;\n}\n",
|
|
18
19
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema } from \"@workglow/util/schema\";\nimport { getLogger } from \"@workglow/util\";\nimport { evaluateCondition, getNestedValue } from \"./ConditionUtils\";\nimport type { UIConditionConfig } from \"./ConditionUtils\";\nimport type { IExecuteContext } from \"./ITask\";\nimport { Task } from \"./Task\";\nimport { TaskConfigSchema } from \"./TaskTypes\";\nimport type { TaskConfig, TaskInput, TaskOutput, TaskTypeName } from \"./TaskTypes\";\n\n// ============================================================================\n// Types and Interfaces\n// ============================================================================\n\n/**\n * A predicate function that evaluates whether a branch condition is met.\n * Receives the task's input data and returns true if the branch should be active.\n *\n * @template Input - The input type for the conditional task\n * @param input - The input data to evaluate\n * @returns true if the branch condition is met, false otherwise\n *\n * @example\n * ```typescript\n * // Simple numeric comparison\n * const isHighValue: ConditionFn<{ value: number }> = (input) => input.value > 100;\n *\n * // String equality check\n * const isAdmin: ConditionFn<{ role: string }> = (input) => input.role === \"admin\";\n *\n * // Complex boolean logic\n * const isEligible: ConditionFn<{ age: number; verified: boolean }> = (input) =>\n * input.age >= 18 && input.verified;\n * ```\n */\nexport type ConditionFn<Input> = (input: Input) => boolean;\n\n/**\n * Configuration for a single branch in a ConditionalTask.\n *\n * Each branch represents a possible path through the conditional logic.\n * When the condition evaluates to true, the branch becomes active and\n * its output port will receive the task's input data.\n *\n * @template Input - The input type for the conditional task\n *\n * @example\n * ```typescript\n * const highValueBranch: BranchConfig<{ amount: number }> = {\n * id: \"high\",\n * condition: (input) => input.amount > 1000,\n * outputPort: \"highValue\"\n * };\n * ```\n */\nexport interface BranchConfig<Input> {\n /** Unique identifier for this branch within the task */\n readonly id: string;\n\n /** Predicate function that determines if this branch is active */\n readonly condition: ConditionFn<Input>;\n\n /** Name of the output port that will receive data when this branch is active */\n readonly outputPort: string;\n}\n\n/**\n * Configuration interface for ConditionalTask.\n *\n * Extends the base TaskConfig with conditional-specific options including\n * branch definitions, default branch handling, and execution mode.\n *\n * @example\n * ```typescript\n * const config: ConditionalTaskConfig = {\n * id: \"router\",\n * branches: [\n * { id: \"premium\", condition: (i) => i.tier === \"premium\", outputPort: \"premium\" },\n * { id: \"standard\", condition: (i) => i.tier === \"standard\", outputPort: \"standard\" },\n * ],\n * defaultBranch: \"standard\",\n * exclusive: true, // Only first matching branch activates\n * };\n * ```\n */\nexport const conditionalTaskConfigSchema = {\n type: \"object\",\n properties: {\n ...TaskConfigSchema[\"properties\"],\n branches: { type: \"array\", items: {} },\n defaultBranch: { type: \"string\" },\n exclusive: { type: \"boolean\" },\n conditionConfig: { type: \"object\", additionalProperties: true },\n },\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ConditionalTaskConfig = TaskConfig & {\n /** Branches may contain ConditionFn functions — not JSON-schema-representable */\n readonly branches?: BranchConfig<any>[];\n readonly defaultBranch?: string;\n readonly exclusive?: boolean;\n /** Serializable UI condition configuration used to build branches at runtime. */\n readonly conditionConfig?: UIConditionConfig;\n};\n\n// ============================================================================\n// ConditionalTask Class\n// ============================================================================\n\n/**\n * A task that evaluates conditions to determine which downstream paths are active.\n *\n * ConditionalTask implements conditional branching within a task graph, similar to\n * if/then/else or switch/case statements. It evaluates configured conditions against\n * its input and selectively enables output ports for active branches while disabling\n * dataflows to inactive branches.\n *\n * ## Key Features\n *\n * - **Condition-based routing**: Route data to different downstream tasks based on input values\n * - **Exclusive mode**: Act as a switch/case where only the first matching branch activates\n * - **Multi-path mode**: Enable multiple branches simultaneously when conditions match\n * - **Default branch**: Specify a fallback branch when no conditions match\n * - **Disabled propagation**: Inactive branches result in DISABLED status for downstream tasks\n *\n * ## Execution Modes\n *\n * ### Exclusive Mode (default)\n * In exclusive mode (`exclusive: true`), the task behaves like a switch statement.\n * Branches are evaluated in order, and only the first matching branch becomes active.\n * This is useful for mutually exclusive paths.\n *\n * ### Multi-Path Mode\n * In multi-path mode (`exclusive: false`), all branches whose conditions evaluate\n * to true become active simultaneously. This enables fan-out patterns where the\n * same input triggers multiple downstream processing paths.\n *\n * ## Output Behavior\n *\n * For each active branch, the task passes through its entire input to that branch's\n * output port. Inactive branches receive no data, and their outgoing dataflows are\n * set to DISABLED status, which cascades to downstream tasks that have no other\n * active inputs.\n *\n * @template Input - The input type for the task\n * @template Output - The output type for the task\n * @template Config - The configuration type (must extend ConditionalTaskConfig)\n *\n * @example\n * ```typescript\n * // Simple if/else routing based on a numeric threshold\n * const thresholdRouter = new ConditionalTask(\n * {},\n * {\n * branches: [\n * { id: \"high\", condition: (i) => i.value > 100, outputPort: \"highPath\" },\n * { id: \"low\", condition: (i) => i.value <= 100, outputPort: \"lowPath\" },\n * ],\n * }\n * );\n *\n * // Switch/case style routing based on string enum\n * const statusRouter = new ConditionalTask(\n * {},\n * {\n * branches: [\n * { id: \"active\", condition: (i) => i.status === \"active\", outputPort: \"active\" },\n * { id: \"pending\", condition: (i) => i.status === \"pending\", outputPort: \"pending\" },\n * { id: \"inactive\", condition: (i) => i.status === \"inactive\", outputPort: \"inactive\" },\n * ],\n * defaultBranch: \"inactive\",\n * exclusive: true,\n * }\n * );\n *\n * // Multi-path fan-out for parallel processing\n * const fanOut = new ConditionalTask(\n * {},\n * {\n * branches: [\n * { id: \"log\", condition: () => true, outputPort: \"logger\" },\n * { id: \"process\", condition: () => true, outputPort: \"processor\" },\n * { id: \"archive\", condition: (i) => i.shouldArchive, outputPort: \"archiver\" },\n * ],\n * exclusive: false, // All matching branches activate\n * }\n * );\n * ```\n */\nexport class ConditionalTask<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends ConditionalTaskConfig = ConditionalTaskConfig,\n> extends Task<Input, Output, Config> {\n /** Task type identifier for serialization and registry lookup */\n static override type: TaskTypeName = \"ConditionalTask\";\n\n /** Category for UI organization and filtering */\n static override category = \"Flow Control\";\n\n /** Human-readable title for display in UIs */\n static override title = \"Condition\";\n static override description = \"Route data based on conditions\";\n\n /** This task has dynamic schemas that change based on branch configuration */\n static override hasDynamicSchemas: boolean = true;\n\n public static override configSchema(): DataPortSchema {\n return conditionalTaskConfigSchema;\n }\n\n public override canSerializeConfig(): boolean {\n if (!this.config.branches) return true;\n return !this.config.branches.some((b) => typeof b.condition === \"function\");\n }\n\n /**\n * Set of branch IDs that are currently active after execution.\n * Populated during execute() and used by the graph runner to\n * determine which dataflows should be enabled vs disabled.\n */\n public activeBranches: Set<string> = new Set();\n\n // ========================================================================\n // Execution methods\n // ========================================================================\n\n /**\n * Evaluates branch conditions and determines which branches are active.\n * Only active branches will have their output ports populated.\n *\n * @param input - The input data to evaluate conditions against\n * @param context - Execution context with signal and progress callback\n * @returns Output with active branch data and metadata\n */\n /**\n * Builds runtime branch configs from serialized UI condition config.\n */\n private buildBranchesFromConditionConfig(\n conditionConfig: UIConditionConfig\n ): BranchConfig<Input>[] {\n if (!conditionConfig?.branches || conditionConfig.branches.length === 0) {\n return [\n {\n id: \"default\",\n condition: () => true,\n outputPort: \"1\",\n },\n ];\n }\n\n return conditionConfig.branches.map((branch, index) => ({\n id: branch.id,\n outputPort: String(index + 1),\n condition: (inputData: Input): boolean => {\n const fieldValue = getNestedValue(inputData as Record<string, unknown>, branch.field);\n return evaluateCondition(fieldValue, branch.operator, branch.value);\n },\n }));\n }\n\n /**\n * Resolves the effective branches to evaluate.\n * Uses config.branches if they have condition functions,\n * otherwise falls back to conditionConfig from input or extras.\n */\n private resolveBranches(input: Input): {\n branches: BranchConfig<Input>[];\n isExclusive: boolean;\n defaultBranch: string | undefined;\n fromConditionConfig: boolean;\n } {\n const configBranches = this.config.branches ?? [];\n\n // If config branches have condition functions, use them directly\n if (configBranches.length > 0 && typeof configBranches[0].condition === \"function\") {\n return {\n branches: configBranches,\n isExclusive: this.config.exclusive ?? true,\n defaultBranch: this.config.defaultBranch,\n fromConditionConfig: false,\n };\n }\n\n // Try to find serialized conditionConfig from input or config\n const conditionConfig =\n ((input as Record<string, unknown>).conditionConfig as UIConditionConfig | undefined) ??\n this.config.conditionConfig;\n\n if (conditionConfig) {\n return {\n branches: this.buildBranchesFromConditionConfig(conditionConfig),\n isExclusive: conditionConfig.exclusive ?? true,\n defaultBranch: conditionConfig.defaultBranch,\n fromConditionConfig: true,\n };\n }\n\n // Fallback: use config branches even if they lack conditions\n return {\n branches: configBranches,\n isExclusive: this.config.exclusive ?? true,\n defaultBranch: this.config.defaultBranch,\n fromConditionConfig: false,\n };\n }\n\n public override async execute(\n input: Input,\n context: IExecuteContext\n ): Promise<Output | undefined> {\n if (context.signal?.aborted) {\n return undefined;\n }\n\n // Clear previous branch activation state\n this.activeBranches.clear();\n\n const { branches, isExclusive, defaultBranch, fromConditionConfig } =\n this.resolveBranches(input);\n\n // Evaluate each branch condition\n for (const branch of branches) {\n try {\n const isActive = branch.condition(input);\n if (isActive) {\n this.activeBranches.add(branch.id);\n if (isExclusive) {\n // In exclusive mode, stop at first match\n break;\n }\n }\n } catch (error) {\n // If condition throws, treat it as false (branch not taken)\n getLogger().error(`Condition evaluation failed for branch \"${branch.id}\":`, { error });\n }\n }\n\n // If no branch matched and there's a default, use it\n if (this.activeBranches.size === 0 && defaultBranch) {\n const defaultBranchExists = branches.some((b) => b.id === defaultBranch);\n if (defaultBranchExists) {\n this.activeBranches.add(defaultBranch);\n }\n }\n\n // Build output: if from conditionConfig, use the UI-style output building\n if (fromConditionConfig) {\n return this.buildConditionConfigOutput(input, branches, isExclusive);\n }\n\n // Build output: pass through input to active branch ports\n return this.buildOutput(input);\n }\n\n /**\n * Builds output in the UI-style format where inputs are passed through\n * with numbered suffixes based on matched branches.\n */\n protected buildConditionConfigOutput(\n input: Input,\n branches: BranchConfig<Input>[],\n isExclusive: boolean\n ): Output {\n const output: Record<string, unknown> = {};\n\n // Remove conditionConfig from pass-through data\n const { conditionConfig, ...passThrough } = input as Record<string, unknown>;\n const inputKeys = Object.keys(passThrough);\n\n // Find matched branch number\n let matchedBranchNumber: number | null = null;\n for (let i = 0; i < branches.length; i++) {\n if (this.activeBranches.has(branches[i].id)) {\n if (matchedBranchNumber === null) {\n matchedBranchNumber = i + 1;\n }\n }\n }\n\n if (isExclusive) {\n if (matchedBranchNumber !== null) {\n for (const key of inputKeys) {\n output[`${key}_${matchedBranchNumber}`] = passThrough[key];\n }\n } else {\n for (const key of inputKeys) {\n output[`${key}_else`] = passThrough[key];\n }\n }\n } else {\n for (let i = 0; i < branches.length; i++) {\n if (this.activeBranches.has(branches[i].id)) {\n for (const key of inputKeys) {\n output[`${key}_${i + 1}`] = passThrough[key];\n }\n }\n }\n }\n\n return output as Output;\n }\n\n /**\n * Builds the output object with data routed to active branch ports.\n * Each active branch's output port receives the full input data.\n *\n * @param input - The input data to pass through to active branches\n * @returns Output object with active branch ports populated\n */\n protected buildOutput(input: Input): Output {\n const output: Record<string, unknown> = {\n _activeBranches: Array.from(this.activeBranches),\n };\n\n const branches = this.config.branches ?? [];\n\n // For each active branch, populate its output port with the input data\n for (const branch of branches) {\n if (this.activeBranches.has(branch.id)) {\n // Pass through all input properties to the active branch's output port\n output[branch.outputPort] = { ...input };\n }\n }\n\n return output as Output;\n }\n\n // ========================================================================\n // Branch information methods\n // ========================================================================\n\n /**\n * Checks if a specific branch is currently active.\n *\n * @param branchId - The ID of the branch to check\n * @returns true if the branch is active, false otherwise\n *\n * @example\n * ```typescript\n * await conditionalTask.run({ value: 150 });\n * if (conditionalTask.isBranchActive(\"high\")) {\n * console.log(\"High value path was taken\");\n * }\n * ```\n */\n public isBranchActive(branchId: string): boolean {\n return this.activeBranches.has(branchId);\n }\n\n /**\n * Gets the set of currently active branch IDs.\n * Returns a new Set to prevent external modification.\n *\n * @returns Set of active branch IDs\n */\n public getActiveBranches(): Set<string> {\n return new Set(this.activeBranches);\n }\n\n /**\n * Gets a map of output port names to their active status.\n * Useful for inspecting which output ports will have data.\n *\n * @returns Map of output port name to boolean active status\n *\n * @example\n * ```typescript\n * const portStatus = conditionalTask.getPortActiveStatus();\n * for (const [port, isActive] of portStatus) {\n * console.log(`Port ${port}: ${isActive ? \"active\" : \"inactive\"}`);\n * }\n * ```\n */\n public getPortActiveStatus(): Map<string, boolean> {\n const status = new Map<string, boolean>();\n const branches = this.config.branches ?? [];\n\n for (const branch of branches) {\n status.set(branch.outputPort, this.activeBranches.has(branch.id));\n }\n\n return status;\n }\n\n // ========================================================================\n // Schema methods\n // ========================================================================\n\n /**\n * Generates the output schema dynamically based on configured branches.\n * Each branch's output port is defined as an object type that will\n * receive the pass-through input data when active.\n *\n * @returns JSON Schema for the task's output\n */\n static override outputSchema(): DataPortSchema {\n // Base schema - actual properties are determined by branch configuration\n return {\n type: \"object\",\n properties: {\n _activeBranches: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"List of active branch IDs after condition evaluation\",\n },\n },\n additionalProperties: true,\n } as const satisfies DataPortSchema;\n }\n\n /**\n * Instance method to get output schema with branch-specific ports.\n * Dynamically generates properties based on the configured branches.\n *\n * @returns JSON Schema for the task's output including branch ports\n */\n override outputSchema(): DataPortSchema {\n const branches = this.config?.branches ?? [];\n const properties: Record<string, any> = {\n _activeBranches: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"List of active branch IDs after condition evaluation\",\n },\n };\n\n // Add each branch's output port to the schema\n for (const branch of branches) {\n properties[branch.outputPort] = {\n type: \"object\",\n description: `Output for branch \"${branch.id}\" when active`,\n additionalProperties: true,\n };\n }\n\n return {\n type: \"object\",\n properties,\n additionalProperties: false,\n } as DataPortSchema;\n }\n\n /**\n * Returns schema indicating the task accepts any input.\n * ConditionalTask passes through its input to active branches,\n * so it doesn't constrain the input type.\n *\n * @returns Schema that accepts any input\n */\n static override inputSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n } as const satisfies DataPortSchema;\n }\n\n /**\n * Instance method returning schema that accepts any input.\n *\n * @returns Schema that accepts any input\n */\n override inputSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n } as const satisfies DataPortSchema;\n }\n}\n",
|
|
19
20
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Comparison operators supported by the UI condition builder.\n */\nexport type ComparisonOperator =\n | \"equals\"\n | \"not_equals\"\n | \"greater_than\"\n | \"greater_or_equal\"\n | \"less_than\"\n | \"less_or_equal\"\n | \"contains\"\n | \"starts_with\"\n | \"ends_with\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"is_true\"\n | \"is_false\";\n\n/**\n * Serialized condition branch configuration from the UI builder.\n * Used by ConditionalTask to auto-build runtime condition functions.\n */\nexport interface UIConditionBranch {\n id: string;\n field: string;\n operator: ComparisonOperator;\n value: string;\n}\n\n/**\n * Serialized condition configuration from the UI builder.\n * Used by ConditionalTask to auto-build runtime branch configs.\n */\nexport interface UIConditionConfig {\n branches: UIConditionBranch[];\n exclusive: boolean;\n defaultBranch?: string;\n}\n\n/**\n * Evaluates a condition based on operator type.\n *\n * @param fieldValue - The value of the field being tested\n * @param operator - The comparison operator to apply\n * @param compareValue - The value to compare against (always a string from the UI)\n * @returns true if the condition is met, false otherwise\n */\nexport function evaluateCondition(\n fieldValue: unknown,\n operator: ComparisonOperator,\n compareValue: string\n): boolean {\n // Handle null/undefined\n if (fieldValue === null || fieldValue === undefined) {\n switch (operator) {\n case \"is_empty\":\n return true;\n case \"is_not_empty\":\n return false;\n case \"is_true\":\n return false;\n case \"is_false\":\n return true;\n default:\n return false;\n }\n }\n\n const strValue = String(fieldValue);\n const numValue = Number(fieldValue);\n\n switch (operator) {\n case \"equals\":\n // Try numeric comparison first, then string\n if (!isNaN(numValue) && !isNaN(Number(compareValue))) {\n return numValue === Number(compareValue);\n }\n return strValue === compareValue;\n\n case \"not_equals\":\n if (!isNaN(numValue) && !isNaN(Number(compareValue))) {\n return numValue !== Number(compareValue);\n }\n return strValue !== compareValue;\n\n case \"greater_than\":\n return numValue > Number(compareValue);\n\n case \"greater_or_equal\":\n return numValue >= Number(compareValue);\n\n case \"less_than\":\n return numValue < Number(compareValue);\n\n case \"less_or_equal\":\n return numValue <= Number(compareValue);\n\n case \"contains\":\n return strValue.toLowerCase().includes(compareValue.toLowerCase());\n\n case \"starts_with\":\n return strValue.toLowerCase().startsWith(compareValue.toLowerCase());\n\n case \"ends_with\":\n return strValue.toLowerCase().endsWith(compareValue.toLowerCase());\n\n case \"is_empty\":\n return strValue === \"\" || (Array.isArray(fieldValue) && fieldValue.length === 0);\n\n case \"is_not_empty\":\n return strValue !== \"\" && !(Array.isArray(fieldValue) && fieldValue.length === 0);\n\n case \"is_true\":\n return Boolean(fieldValue) === true;\n\n case \"is_false\":\n return Boolean(fieldValue) === false;\n\n default:\n return false;\n }\n}\n\n/**\n * Get a value from a nested object using dot notation.\n * e.g., \"user.name\" would get obj.user.name\n *\n * @param obj - The object to read from\n * @param path - Dot-separated path to the value\n * @returns The value at the path, or undefined if any segment is missing\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n",
|
|
20
21
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport { deepEqual, EventEmitter, uuid4 } from \"@workglow/util\";\nimport type { DataPortSchema, SchemaNode } from \"@workglow/util/schema\";\nimport { compileSchema } from \"@workglow/util/schema\";\nimport { DATAFLOW_ALL_PORTS } from \"../task-graph/Dataflow\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport type { IExecuteContext, IExecutePreviewContext, IRunConfig, ITask } from \"./ITask\";\nimport { EMPTY_ENTITLEMENTS, type TaskEntitlements } from \"./TaskEntitlements\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskError,\n TaskInvalidInputError,\n TaskSerializationError,\n} from \"./TaskError\";\nimport type {\n TaskEventListener,\n TaskEventListeners,\n TaskEventParameters,\n TaskEvents,\n} from \"./TaskEvents\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport type { TaskConfig, TaskIdType, TaskInput, TaskOutput, TaskTypeName } from \"./TaskTypes\";\nimport { TaskConfigSchema, TaskStatus } from \"./TaskTypes\";\n\n/**\n * Base class for all tasks that implements the ITask interface.\n * This abstract class provides common functionality for both simple and compound tasks.\n *\n * The Task class is responsible for:\n * 1. Defining what a task is (inputs, outputs, configuration)\n * 2. Providing the execution logic (via execute and executePreview)\n * 3. Delegating the running logic to a TaskRunner\n */\nexport class Task<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig = TaskConfig,\n> implements ITask<Input, Output, Config> {\n // ========================================================================\n // Static properties - should be overridden by subclasses\n // ========================================================================\n\n /**\n * The type identifier for this task class\n */\n public static type: TaskTypeName = \"Task\";\n\n /**\n * The category this task belongs to\n */\n public static category: string = \"Hidden\";\n\n /**\n * The title of this task\n */\n public static title: string = \"\";\n\n /**\n * The description of this task\n */\n public static description: string = \"\";\n\n /**\n * Whether this task has side effects\n */\n public static cacheable: boolean = true;\n\n /**\n * Whether this task has dynamic input/output schemas that can change at runtime.\n * Tasks with dynamic schemas should override instance methods for inputSchema() and/or outputSchema()\n * and emit 'schemaChange' events when their schemas change.\n */\n public static hasDynamicSchemas: boolean = false;\n\n /**\n * When true, dynamically added input ports (via the universal \"Add Input\" handle in the builder)\n * are mirrored as output ports of the same name and type. Set this on pass-through tasks that\n * forward their additional inputs to their outputs unchanged.\n */\n public static passthroughInputsToOutputs: boolean = false;\n\n /**\n * When true, this task can be saved as a custom task with a preset configuration.\n * Tasks that have meaningful user-facing config options beyond the base fields should set this.\n */\n public static customizable: boolean = false;\n\n /**\n * When true, this task defines the graph's output. The graph runner will\n * collect results only from tasks with this flag when they exist among the\n * leaf nodes; otherwise it falls back to collecting from all leaves.\n */\n public static isGraphOutput: boolean = false;\n\n /**\n * When true, this task does no real work — it only forwards inputs to outputs\n * (e.g. `InputTask`, `OutputTask`). Such tasks are excluded from graph-level\n * progress averaging because they jump from 0% to 100% and would dilute the bar.\n */\n public static isPassthrough: boolean = false;\n\n /**\n * Whether this task has dynamic entitlements that can change at runtime.\n * Tasks with dynamic entitlements should override the instance entitlements() method\n * and emit 'entitlementChange' events when their entitlements change.\n */\n public static hasDynamicEntitlements: boolean = false;\n\n /**\n * Entitlements required by this task class.\n * Subclasses override to declare their permission requirements.\n */\n public static entitlements(): TaskEntitlements {\n return EMPTY_ENTITLEMENTS;\n }\n\n /**\n * Input schema for this task\n */\n public static inputSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n }\n\n /**\n * Output schema for this task\n */\n public static outputSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n }\n\n /**\n * Config schema for this task. Subclasses that add config properties MUST override this\n * and spread TaskConfigSchema[\"properties\"] into their own properties object.\n */\n public static configSchema(): DataPortSchema {\n return TaskConfigSchema;\n }\n\n // ========================================================================\n // Task Execution Methods - Core logic provided by subclasses\n // ========================================================================\n\n /**\n * The actual task execution logic for subclasses to override\n *\n * @param input The input to the task\n * @param config The configuration for the task\n * @throws TaskError if the task fails\n * @returns The output of the task or undefined if no changes\n */\n public async execute(_input: Input, context: IExecuteContext): Promise<Output | undefined> {\n if (context.signal?.aborted) {\n throw new TaskAbortedError(\"Task aborted\");\n }\n return undefined;\n }\n\n /**\n * Default implementation of executePreview that does nothing.\n * Subclasses should override this to provide actual preview functionality.\n *\n * This is generally for UI updating, and should be lightweight.\n * @param input The input to the task\n * @returns The preview output, or undefined for \"no preview update\"\n */\n public async executePreview(\n _input: Input,\n _context: IExecutePreviewContext\n ): Promise<Output | undefined> {\n return undefined;\n }\n\n // ========================================================================\n // TaskRunner delegation - Executes and manages the task\n // ========================================================================\n\n /**\n * Task runner for handling the task execution\n */\n protected _runner: TaskRunner<Input, Output, Config> | undefined;\n\n /**\n * Gets the task runner instance\n * Creates a new one if it doesn't exist\n */\n public get runner(): TaskRunner<Input, Output, Config> {\n if (!this._runner) {\n this._runner = new TaskRunner<Input, Output, Config>(this);\n }\n return this._runner;\n }\n\n /**\n * Runs the task and returns the output\n * Delegates to the task runner\n *\n * @param overrides Optional input overrides\n * @param runConfig Optional per-call run configuration (merged with task's runConfig)\n * @throws TaskError if the task fails\n * @returns The task output\n */\n async run(overrides: Partial<Input> = {}, runConfig: Partial<IRunConfig> = {}): Promise<Output> {\n return this.runner.run(overrides, { ...this.runConfig, ...runConfig });\n }\n\n /**\n * Runs the task in preview mode\n * Delegates to the task runner\n *\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runPreview(overrides: Partial<Input> = {}): Promise<Output> {\n return this.runner.runPreview(overrides);\n }\n\n /**\n * Aborts task execution\n * Delegates to the task runner\n */\n public abort(): void {\n this.runner.abort();\n }\n\n /**\n * Disables task execution\n * Delegates to the task runner\n */\n public async disable(): Promise<void> {\n await this.runner.disable();\n }\n\n // ========================================================================\n // Static to Instance conversion methods\n // ========================================================================\n\n /**\n * Gets input schema for this task\n */\n public inputSchema(): DataPortSchema {\n return (this.constructor as typeof Task).inputSchema();\n }\n\n /**\n * Gets output schema for this task\n */\n public outputSchema(): DataPortSchema {\n return (this.constructor as typeof Task).outputSchema();\n }\n\n /**\n * Gets config schema for this task\n */\n public configSchema(): DataPortSchema {\n return (this.constructor as typeof Task).configSchema();\n }\n\n /**\n * Gets entitlements for this task instance.\n * For tasks with dynamic entitlements, override this to compute based on config/state.\n */\n public entitlements(): TaskEntitlements {\n return (this.constructor as typeof Task).entitlements();\n }\n\n /**\n * Emits an entitlementChange event when the task's required entitlements change.\n * Call this from tasks with dynamic entitlements when their configuration changes\n * in a way that affects their entitlements.\n */\n protected emitEntitlementChange(entitlements?: TaskEntitlements): void {\n const final = entitlements ?? this.entitlements();\n this.emit(\"entitlementChange\", final);\n }\n\n public get type(): TaskTypeName {\n return (this.constructor as typeof Task).type;\n }\n\n public get category(): string {\n return (this.constructor as typeof Task).category;\n }\n\n public get title(): string {\n return this.config?.title ?? (this.constructor as typeof Task).title;\n }\n\n public get description(): string {\n return this.config?.description ?? (this.constructor as typeof Task).description;\n }\n\n public get cacheable(): boolean {\n return (\n this.runConfig?.cacheable ??\n this.config?.cacheable ??\n (this.constructor as typeof Task).cacheable\n );\n }\n\n // ========================================================================\n // Instance properties using @template types\n // ========================================================================\n\n /**\n * Default input values for this task.\n * If no overrides at run time, then this would be equal to the input.\n * resetInputData() will reset inputs to these defaults.\n */\n defaults: Record<string, any>;\n\n /**\n * The input to the task at the time of the task run.\n * This takes defaults from construction time and overrides from run time.\n * It is the input that created the output.\n */\n runInputData: Record<string, any> = {};\n\n /**\n * The output of the task at the time of the task run.\n * This is the result of the task execution.\n */\n runOutputData: Record<string, any> = {};\n\n // ========================================================================\n // Task state properties\n // ========================================================================\n\n /**\n * The configuration of the task\n */\n config: Config;\n\n /**\n * Frozen snapshot of config at construction time, used by toJSON and\n * as the resolution source for re-runs (so fresh lookups use original IDs).\n */\n readonly originalConfig: Readonly<Record<string, unknown>> | undefined;\n\n /**\n * Task id from config (read-only).\n */\n public get id(): unknown {\n return this.config.id;\n }\n\n /**\n * Runtime configuration (not serialized with the task).\n * Set via the constructor's third argument or mutated by the graph runner.\n */\n runConfig: Partial<IRunConfig> = {};\n\n /**\n * Current status of the task\n */\n status: TaskStatus = TaskStatus.PENDING;\n\n /**\n * Progress of the task (0-100)\n */\n progress: number = 0;\n\n /**\n * When the task was created\n */\n createdAt: Date = new Date();\n\n /**\n * When the task started execution\n */\n startedAt?: Date;\n\n /**\n * When the task completed execution\n */\n completedAt?: Date;\n\n /**\n * Error that occurred during task execution, if any\n */\n error?: TaskError;\n\n /**\n * Event emitter for task lifecycle events\n */\n public get events(): EventEmitter<TaskEventListeners> {\n if (!this._events) {\n this._events = new EventEmitter<TaskEventListeners>();\n }\n return this._events;\n }\n protected _events: EventEmitter<TaskEventListeners> | undefined;\n\n /**\n * Creates a new task instance\n *\n * @param config Configuration for the task (includes defaults for input values)\n * @param runConfig Runtime configuration for the task\n */\n constructor(config: NoInfer<Partial<Config>> = {}, runConfig: NoInfer<Partial<IRunConfig>> = {}) {\n // Extract caller-provided defaults from config\n const { defaults: callerDefaultInputs, ...restConfig } = config as Partial<Config> & {\n defaults?: Partial<Input>;\n };\n\n // Initialize input defaults\n const inputDefaults = this.getDefaultInputsFromStaticInputDefinitions();\n const mergedDefaults = Object.assign(inputDefaults, callerDefaultInputs ?? {});\n // Strip symbol properties (like [$JSONSchema]) before storing defaults\n this.defaults = this.stripSymbols(mergedDefaults) as Record<string, any>;\n this.resetInputData();\n\n // Setup configuration defaults (title comes from static class property as fallback)\n const title = (this.constructor as typeof Task).title || undefined;\n const baseConfig = Object.assign(\n {\n ...(title ? { title } : {}),\n },\n restConfig\n ) as Config;\n if (baseConfig.id === undefined) {\n (baseConfig as Record<string, unknown>).id = uuid4();\n }\n this.config = this.validateAndApplyConfigDefaults(baseConfig);\n try {\n this.originalConfig = Object.freeze(structuredClone(this.config) as Record<string, unknown>);\n } catch {\n // Config contains non-cloneable values (e.g. functions).\n // canSerializeConfig() should return false for such tasks.\n this.originalConfig = undefined;\n }\n\n // Store runtime configuration\n this.runConfig = runConfig;\n }\n\n // ========================================================================\n // Input/Output handling\n // ========================================================================\n\n /**\n * Gets default input values from input schema\n */\n getDefaultInputsFromStaticInputDefinitions(): Partial<Input> {\n const schema = this.inputSchema();\n if (typeof schema === \"boolean\") {\n return {};\n }\n try {\n const compiledSchema = this.getInputSchemaNode();\n const defaultData = compiledSchema.getData(undefined, {\n addOptionalProps: true,\n removeInvalidData: false,\n useTypeDefaults: false,\n });\n return (defaultData || {}) as Partial<Input>;\n } catch (error) {\n console.warn(\n `Failed to compile input schema for ${this.type}, falling back to manual extraction:`,\n error\n );\n // Fallback to manual extraction if compilation fails\n return Object.entries(schema.properties || {}).reduce<Record<string, any>>(\n (acc, [id, prop]) => {\n const defaultValue = (prop as any).default;\n if (defaultValue !== undefined) {\n acc[id] = defaultValue;\n }\n return acc;\n },\n {}\n ) as Partial<Input>;\n }\n }\n\n /**\n * Resets input data to defaults\n */\n public resetInputData(): void {\n this.runInputData = this.smartClone(this.defaults) as Record<string, any>;\n }\n\n /**\n * Smart clone that deep-clones plain objects and arrays while preserving\n * class instances (objects with non-Object prototype) by reference.\n * Detects and throws an error on circular references.\n *\n * This is necessary because:\n * - structuredClone cannot clone class instances (methods are lost)\n * - JSON.parse/stringify loses methods and fails on circular references\n * - Class instances like repositories should be passed by reference\n *\n * This breaks the idea of everything being json serializable, but it allows\n * more efficient use cases. Do be careful with this though! Use sparingly.\n *\n * @param obj The object to clone\n * @param visited Set of objects in the current cloning path (for circular reference detection)\n * @returns A cloned object with class instances preserved by reference\n */\n private smartClone(obj: any, visited: WeakSet<object> = new WeakSet()): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n // Primitives (string, number, boolean, symbol, bigint) are returned as-is\n if (typeof obj !== \"object\") {\n return obj;\n }\n\n // Check for circular references\n if (visited.has(obj)) {\n throw new TaskConfigurationError(\n \"Circular reference detected in input data. \" +\n \"Cannot clone objects with circular references.\"\n );\n }\n\n // Clone TypedArrays (Float32Array, Int8Array, etc.) to avoid shared-mutation\n // between defaults and runInputData, while preserving DataView by reference.\n if (ArrayBuffer.isView(obj)) {\n // Preserve DataView instances by reference (constructor signature differs)\n if (typeof DataView !== \"undefined\" && obj instanceof DataView) {\n return obj;\n }\n // For TypedArrays, create a new instance with the same data\n const typedArray = obj as any;\n return new (typedArray.constructor as any)(typedArray);\n }\n\n // Preserve class instances (objects with non-Object/non-Array prototype)\n // This includes repository instances, custom classes, etc.\n if (!Array.isArray(obj)) {\n const proto = Object.getPrototypeOf(obj);\n if (proto !== Object.prototype && proto !== null) {\n return obj; // Pass by reference\n }\n }\n\n // Add object to visited set before recursing\n visited.add(obj);\n\n try {\n // Deep clone arrays, preserving class instances within\n if (Array.isArray(obj)) {\n return obj.map((item) => this.smartClone(item, visited));\n }\n\n // Deep clone plain objects\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = this.smartClone(obj[key], visited);\n }\n }\n return result;\n } finally {\n // Remove from visited set after processing to allow the same object\n // in different branches (non-circular references)\n visited.delete(obj);\n }\n }\n\n /**\n * Sets the default input values for the task\n *\n * @param defaults The default input values to set\n */\n public setDefaults(defaults: Partial<Input>): void {\n // Strip symbol properties (like [$JSONSchema]) before storing defaults\n this.defaults = this.stripSymbols(defaults) as Partial<Input>;\n }\n\n /**\n * Sets input values for the task\n *\n * @param input Input values to set\n */\n public setInput(input: Partial<Input>): void {\n const schema = this.inputSchema();\n if (typeof schema === \"boolean\") {\n if (schema === true) {\n for (const [inputId, value] of Object.entries(input)) {\n if (value !== undefined) {\n this.runInputData[inputId] = value;\n }\n }\n }\n return;\n }\n const properties = schema.properties || {};\n\n // Copy explicitly defined properties\n for (const [inputId, prop] of Object.entries(properties)) {\n if (input[inputId] !== undefined) {\n this.runInputData[inputId] = input[inputId];\n } else if (\n this.runInputData[inputId] === undefined &&\n (prop as { default?: unknown }).default !== undefined\n ) {\n this.runInputData[inputId] = prop.default;\n }\n }\n\n // If additionalProperties is true, also copy any additional input properties\n if (schema.additionalProperties) {\n for (const [inputId, value] of Object.entries(input)) {\n if (!(inputId in properties)) {\n this.runInputData[inputId] = value;\n }\n }\n }\n }\n\n /**\n * Adds/merges input data during graph execution.\n * Unlike {@link setInput}, this method:\n * - Detects changes using deep equality\n * - Accumulates array values (appends rather than replaces)\n * - Handles DATAFLOW_ALL_PORTS for pass-through\n * - Handles additionalProperties for dynamic schemas\n *\n * @param overrides The input data to merge\n * @returns true if any input data was changed, false otherwise\n */\n public addInput(overrides: Partial<Input> | undefined): boolean {\n if (!overrides) return false;\n\n let changed = false;\n const inputSchema = this.inputSchema();\n\n if (typeof inputSchema === \"boolean\") {\n if (inputSchema === false) {\n return false;\n }\n // Schema is `true` - accept any input\n for (const [key, value] of Object.entries(overrides)) {\n if (!deepEqual(this.runInputData[key], value)) {\n this.runInputData[key] = value;\n changed = true;\n }\n }\n return changed;\n }\n\n const properties = inputSchema.properties || {};\n\n for (const [inputId, prop] of Object.entries(properties)) {\n if (inputId === DATAFLOW_ALL_PORTS) {\n this.runInputData = { ...this.runInputData, ...overrides };\n changed = true;\n } else {\n if (overrides[inputId] === undefined) continue;\n const isArray =\n (prop as any)?.type === \"array\" ||\n ((prop as any)?.type === \"any\" &&\n (Array.isArray(overrides[inputId]) || Array.isArray(this.runInputData[inputId])));\n\n if (isArray) {\n const existingItems = Array.isArray(this.runInputData[inputId])\n ? this.runInputData[inputId]\n : this.runInputData[inputId] !== undefined\n ? [this.runInputData[inputId]]\n : [];\n const newitems = [...existingItems];\n\n const overrideItem = overrides[inputId];\n if (Array.isArray(overrideItem)) {\n newitems.push(...overrideItem);\n } else {\n newitems.push(overrideItem);\n }\n this.runInputData[inputId] = newitems;\n changed = true;\n } else {\n if (!deepEqual(this.runInputData[inputId], overrides[inputId])) {\n this.runInputData[inputId] = overrides[inputId];\n changed = true;\n }\n }\n }\n }\n\n // If additionalProperties is true, also accept any additional input properties\n if (inputSchema.additionalProperties) {\n for (const [inputId, value] of Object.entries(overrides)) {\n if (!(inputId in properties)) {\n if (!deepEqual(this.runInputData[inputId], value)) {\n this.runInputData[inputId] = value;\n changed = true;\n }\n }\n }\n }\n\n return changed;\n }\n\n /**\n * Stub for narrowing input. Override in subclasses for custom logic.\n * @param input The input to narrow\n * @param _registry Optional service registry for lookups\n * @returns The (possibly narrowed) input\n */\n public async narrowInput(\n input: Partial<Input>,\n _registry: ServiceRegistry\n ): Promise<Partial<Input>> {\n return input;\n }\n\n // ========================================================================\n // Event handling methods\n // ========================================================================\n\n /**\n * Subscribes to an event\n */\n public subscribe<Event extends TaskEvents>(\n name: Event,\n fn: TaskEventListener<Event>\n ): () => void {\n return this.events.subscribe(name, fn);\n }\n\n /**\n * Registers an event listener\n */\n public on<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n this.events.on(name, fn);\n }\n\n /**\n * Removes an event listener\n */\n public off<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n this.events.off(name, fn);\n }\n\n /**\n * Registers a one-time event listener\n */\n public once<Event extends TaskEvents>(name: Event, fn: TaskEventListener<Event>): void {\n this.events.once(name, fn);\n }\n\n /**\n * Returns a promise that resolves when the specified event is emitted\n */\n public waitOn<Event extends TaskEvents>(name: Event): Promise<TaskEventParameters<Event>> {\n return this.events.waitOn(name) as Promise<TaskEventParameters<Event>>;\n }\n\n /**\n * Emits an event\n */\n public emit<Event extends TaskEvents>(name: Event, ...args: TaskEventParameters<Event>): void {\n // Route through `events` so the emitter exists: `this._events?.emit` dropped progress when\n // nothing had accessed `task.events` yet (e.g. parent MapTask before CLI wired listeners).\n this.events.emit(name, ...args);\n }\n\n /**\n * Emits a schemaChange event when the task's input or output schema changes.\n * This should be called by tasks with dynamic schemas when their configuration\n * changes in a way that affects their schemas.\n *\n * @param inputSchema - The new input schema (optional, will use current schema if not provided)\n * @param outputSchema - The new output schema (optional, will use current schema if not provided)\n */\n protected emitSchemaChange(inputSchema?: DataPortSchema, outputSchema?: DataPortSchema): void {\n const finalInputSchema = inputSchema ?? this.inputSchema();\n const finalOutputSchema = outputSchema ?? this.outputSchema();\n this.emit(\"schemaChange\", finalInputSchema, finalOutputSchema);\n }\n\n // ========================================================================\n // Input validation methods\n // ========================================================================\n\n /**\n * Gets the compiled config schema node, or undefined if no configSchema is defined.\n *\n * The compiled schema is cached directly on the concrete class object (not in a shared\n * inherited Map) so that each subclass always uses its own configSchema() result.\n * A shared Map keyed only by type name can be poisoned if a different class computes\n * and caches the schema first — e.g., due to cross-package static-method resolution\n * inconsistencies in bundled outputs.\n */\n private static getConfigSchemaNode(): SchemaNode | undefined {\n const schema = this.configSchema();\n if (!schema) return undefined;\n // Use Object.hasOwn so each class gets its own entry rather than inheriting\n // from a parent class that already cached under the same key.\n if (!Object.hasOwn(this, \"__compiledConfigSchema\")) {\n try {\n const schemaNode =\n typeof schema === \"boolean\"\n ? compileSchema(schema ? {} : { not: {} })\n : compileSchema(schema);\n Object.defineProperty(this, \"__compiledConfigSchema\", {\n value: schemaNode,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n } catch (error) {\n console.warn(`Failed to compile config schema for ${this.type}:`, error);\n return undefined;\n }\n }\n return (this as any).__compiledConfigSchema as SchemaNode;\n }\n\n /**\n * Validates config against configSchema.\n * Returns config as-is; throws on validation errors.\n * Returns config as-is if no configSchema is defined.\n */\n private validateAndApplyConfigDefaults(config: Config): Config {\n const ctor = this.constructor as typeof Task;\n const schemaNode = ctor.getConfigSchemaNode();\n if (!schemaNode) return config;\n\n const result = schemaNode.validate(config);\n if (!result.valid) {\n const errorMessages = result.errors.map((e) => {\n const path = e.data?.pointer || \"\";\n return `${e.message}${path ? ` (${path})` : \"\"}`;\n });\n throw new TaskConfigurationError(\n `[${ctor.name}] Configuration Error: ${errorMessages.join(\", \")}`\n );\n }\n\n return config;\n }\n\n protected static generateInputSchemaNode(schema: DataPortSchema) {\n if (typeof schema === \"boolean\") {\n if (schema === false) {\n return compileSchema({ not: {} });\n }\n return compileSchema({});\n }\n return compileSchema(schema);\n }\n\n /**\n * Gets the compiled input schema, cached per class (not in a shared inherited Map).\n * Uses Object.hasOwn so each subclass stores its own compiled schema and never\n * picks up a stale entry cached by a different class with the same type name.\n */\n protected static getInputSchemaNode(): SchemaNode {\n if (!Object.hasOwn(this, \"__compiledInputSchema\")) {\n const dataPortSchema = this.inputSchema();\n const schemaNode = this.generateInputSchemaNode(dataPortSchema);\n try {\n Object.defineProperty(this, \"__compiledInputSchema\", {\n value: schemaNode,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n } catch (error) {\n // If compilation fails, fall back to accepting any object structure\n // This is a safety net for schemas that json-schema-library can't compile\n console.warn(\n `Failed to compile input schema for ${this.type}, falling back to permissive validation:`,\n error\n );\n Object.defineProperty(this, \"__compiledInputSchema\", {\n value: compileSchema({}),\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n }\n return (this as any).__compiledInputSchema as SchemaNode;\n }\n\n protected getInputSchemaNode(): SchemaNode {\n return (this.constructor as typeof Task).getInputSchemaNode();\n }\n\n /**\n * Validates an input data object against the task's input schema\n */\n public async validateInput(input: Input): Promise<boolean> {\n if (typeof input !== \"object\" || input === null) {\n throw new TaskInvalidInputError(\"Input must be an object\");\n }\n const ctor = this.constructor as typeof Task;\n let schemaNode: SchemaNode;\n if (ctor.hasDynamicSchemas) {\n // Dynamic-schema tasks use instance inputSchema() (e.g. config.inputSchema), not the static fallback.\n // The cached getInputSchemaNode uses static inputSchema() which would reject valid instance-specific inputs.\n const instanceSchema = this.inputSchema();\n schemaNode = ctor.generateInputSchemaNode(instanceSchema);\n } else {\n schemaNode = this.getInputSchemaNode();\n }\n const result = schemaNode.validate(input);\n\n if (!result.valid) {\n const errorMessages = result.errors.map((e) => {\n const path = e.data.pointer || \"\";\n return `${e.message}${path ? ` (${path})` : \"\"}`;\n });\n const err = new TaskInvalidInputError(\n `Task \"${this.type}\" (${this.id}): Input ${JSON.stringify(Object.keys(input))} does not match schema: ${errorMessages.join(\", \")}`\n );\n err.taskType = this.type;\n err.taskId = this.id;\n throw err;\n }\n\n return true;\n }\n\n // ========================================================================\n // Serialization methods\n // ========================================================================\n\n /**\n * Strips symbol properties from an object to make it serializable\n * @param obj The object to strip symbols from\n * @returns A new object without symbol properties\n */\n private stripSymbols(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n // Preserve TypedArrays (Float32Array, Int8Array, etc.)\n if (ArrayBuffer.isView(obj)) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => this.stripSymbols(item));\n }\n if (typeof obj === \"object\") {\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = this.stripSymbols(obj[key]);\n }\n }\n return result;\n }\n return obj;\n }\n\n /**\n * Returns whether the task's config can be serialized to JSON.\n * Override in subclasses that store non-serializable values (functions) in config.\n * Called by toJSON — if false, toJSON throws TaskSerializationError.\n */\n public canSerializeConfig(): boolean {\n return true;\n }\n\n /**\n * Serializes the task and its subtasks into a format that can be stored\n * @param _options Options controlling serialization (used by subclasses)\n * @returns The serialized task and subtasks\n */\n public toJSON(_options?: TaskGraphJsonOptions): TaskGraphItemJson {\n const ctor = this.constructor as typeof Task;\n\n if (!this.canSerializeConfig() || !this.originalConfig) {\n throw new TaskSerializationError(this.type);\n }\n\n // Build config by extracting only serializable properties defined in the configSchema.\n // We filter through the schema to avoid accidentally including non-serializable\n // values (e.g. functions like WhileTask.condition) or internal-only properties\n // that were never part of the serialized output and that consuming applications\n // don't expect (e.g. `queue` from task-specific configs).\n const schema = ctor.configSchema();\n const schemaProperties =\n typeof schema !== \"boolean\" && schema?.properties\n ? (schema.properties as Record<string, Record<string, unknown>>)\n : {};\n\n const config: Record<string, unknown> = {};\n for (const [key, propSchema] of Object.entries(schemaProperties)) {\n if (key === \"id\") continue;\n // Skip internal properties marked as hidden (e.g. queue, compoundMerge)\n // except inputSchema/outputSchema/extras which are needed for task reconstruction\n if (\n propSchema?.[\"x-ui-hidden\"] === true &&\n key !== \"inputSchema\" &&\n key !== \"outputSchema\" &&\n key !== \"extras\"\n ) {\n continue;\n }\n const value = (this.originalConfig as Record<string, unknown>)[key];\n if (value === undefined) continue;\n // Skip non-serializable values (functions, symbols, etc.)\n if (typeof value === \"function\" || typeof value === \"symbol\") continue;\n config[key] = value;\n }\n\n // Omit title/description when they match the static class defaults\n if (config.title === ctor.title) delete config.title;\n if (config.description === ctor.description) delete config.description;\n\n // Omit empty extras\n const extras = config.extras as Record<string, unknown> | undefined;\n if (!extras || Object.keys(extras).length === 0) delete config.extras;\n\n const base: TaskGraphItemJson = {\n id: this.id,\n type: this.type,\n defaults: this.defaults,\n };\n if (Object.keys(config).length > 0) {\n base.config = config;\n }\n\n // Include entitlements if present\n const taskEntitlements = this.entitlements();\n if (taskEntitlements.entitlements.length > 0) {\n base.entitlements = taskEntitlements;\n }\n\n return this.stripSymbols(base) as TaskGraphItemJson;\n }\n\n /**\n * Converts the task to a JSON format suitable for dependency tracking\n * @param options Options controlling serialization (used by subclasses)\n * @returns The task and subtasks in JSON thats easier for humans to read\n */\n public toDependencyJSON(options?: TaskGraphJsonOptions): JsonTaskItem {\n const json = this.toJSON(options);\n return json;\n }\n\n // ========================================================================\n // Internal graph methods\n // ========================================================================\n\n /**\n * Checks if the task has children. Useful to gate to use of the internal subGraph\n * as this will return without creating a new graph if graph is non-existent .\n *\n * @returns True if the task has children, otherwise false\n */\n public hasChildren(): boolean {\n return (\n this._subGraph !== undefined &&\n this._subGraph !== null &&\n this._subGraph.getTasks().length > 0\n );\n }\n\n private _taskAddedListener: (taskId: TaskIdType) => void = () => {\n this.emit(\"regenerate\");\n };\n\n /**\n * The internal task graph containing subtasks\n *\n * In the base case, these may just be incidental tasks that are not part of the task graph\n * but are used to manage the task's state as part of task execution. Therefore, the graph\n * is not used by the default runner.\n */\n protected _subGraph: TaskGraph | undefined = undefined;\n\n /**\n * Sets the subtask graph for the compound task\n * @param subGraph The subtask graph to set\n */\n set subGraph(subGraph: TaskGraph) {\n if (this._subGraph) {\n this._subGraph.off(\"task_added\", this._taskAddedListener);\n }\n this._subGraph = subGraph;\n this._subGraph.on(\"task_added\", this._taskAddedListener);\n }\n\n /**\n * The internal task graph containing subtasks\n *\n * In the base case, these may just be incidental tasks that are not part of the task graph\n * but are used to manage the task's state as part of task execution. Therefore, the graph\n * is not used by the default runner.\n *\n * Creates a new graph if one doesn't exist.\n *\n * @returns The task graph\n */\n get subGraph(): TaskGraph {\n if (!this._subGraph) {\n this._subGraph = new TaskGraph();\n this._subGraph.on(\"task_added\", this._taskAddedListener);\n }\n return this._subGraph;\n }\n\n /**\n * Regenerates the task graph, which is internal state to execute() with config.own()\n *\n * This is a destructive operation that removes all dataflows and tasks from the graph.\n * It is used to reset the graph to a clean state.\n *\n * GraphAsTask and others override this and do not call super\n */\n public regenerateGraph(): void {\n if (this.hasChildren()) {\n for (const dataflow of this.subGraph.getDataflows()) {\n this.subGraph.removeDataflow(dataflow);\n }\n for (const child of this.subGraph.getTasks()) {\n this.subGraph.removeTask(child.id);\n }\n }\n this.events.emit(\"regenerate\");\n }\n}\n",
|
|
21
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan } from \"@workglow/util\";\nimport {\n getLogger,\n getTelemetryProvider,\n globalServiceRegistry,\n ResourceScope,\n ServiceRegistry,\n SpanStatusCode,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport type { Taskish } from \"../task-graph/Conversions\";\nimport { ensureTask } from \"../task-graph/Conversions\";\nimport { resolveSchemaInputs, schemaHasFormatAnnotations } from \"./InputResolver\";\nimport type { IRunConfig, ITask } from \"./ITask\";\nimport { ITaskRunner } from \"./ITaskRunner\";\nimport type { StreamEvent, StreamMode } from \"./StreamTypes\";\nimport { getOutputStreamMode, getStreamingPorts, isTaskStreamable } from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskError,\n TaskFailedError,\n TaskInvalidInputError,\n TaskTimeoutError,\n} from \"./TaskError\";\nimport { TaskConfig, TaskInput, TaskOutput, TaskStatus } from \"./TaskTypes\";\n\n/**\n * Type guard that checks whether a value is an ITask-like object with a mutable `runConfig`.\n */\nfunction hasRunConfig(i: unknown): i is { runConfig: Partial<IRunConfig> } {\n return i !== null && typeof i === \"object\" && \"runConfig\" in (i as object);\n}\n\n/**\n * Responsible for running tasks\n * Manages the execution lifecycle of individual tasks\n */\nexport class TaskRunner<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig = TaskConfig,\n> implements ITaskRunner<Input, Output, Config> {\n /**\n * Whether the task is currently running\n */\n protected running = false;\n protected previewRunning = false;\n\n /**\n * The task to run\n */\n public readonly task: ITask<Input, Output, Config>;\n\n /**\n * AbortController for cancelling task execution\n */\n protected abortController?: AbortController;\n\n /**\n * The output cache for the task\n */\n protected outputCache?: TaskOutputRepository;\n\n /**\n * The service registry for the task\n */\n protected registry: ServiceRegistry = globalServiceRegistry;\n\n /**\n * Resource scope for this task run\n */\n protected resourceScope?: ResourceScope;\n\n /**\n * Input streams for pass-through streaming tasks.\n * Set by the graph runner before executing a streaming task that has\n * upstream streaming edges. Keyed by input port name.\n */\n public inputStreams?: Map<string, ReadableStream<StreamEvent>>;\n\n /**\n * Timer handle for task-level timeout. Set when `IRunConfig.timeout` is\n * provided and cleared on completion, error, or abort.\n */\n protected timeoutTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * When a timeout triggers the abort, this holds the TaskTimeoutError so\n * handleAbort() can surface the correct error type instead of a generic\n * TaskAbortedError.\n */\n protected pendingTimeoutError?: TaskTimeoutError;\n\n /**\n * Whether the streaming task runner should accumulate text-delta chunks and\n * emit an enriched finish event. Set from IRunConfig.shouldAccumulate.\n * Defaults to true so standalone task execution is backward-compatible.\n * The graph runner sets this to false when no downstream edge needs\n * materialized data (no cache, all downstream tasks are also streaming).\n */\n protected shouldAccumulate: boolean = true;\n\n /**\n * Active telemetry span for the current task run.\n */\n protected telemetrySpan?: ISpan;\n\n /**\n * Constructor for TaskRunner\n * @param task The task to run\n */\n constructor(task: ITask<Input, Output, Config>) {\n this.task = task;\n this.own = this.own.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n }\n\n // ========================================================================\n // Public methods\n // ========================================================================\n\n /**\n * Runs the task and returns the output\n * @param overrides Optional input overrides\n * @param config Optional configuration overrides\n * @returns The task output\n */\n async run(overrides: Partial<Input> = {}, config: IRunConfig = {}): Promise<Output> {\n await this.handleStart(config);\n\n const proto = Object.getPrototypeOf(this.task);\n if (\n proto.execute === Task.prototype.execute &&\n typeof proto.executeStream !== \"function\" &&\n proto.executePreview !== Task.prototype.executePreview\n ) {\n throw new TaskConfigurationError(\n `Task \"${this.task.type}\" implements only executePreview() and cannot be run via run(). ` +\n `After the run/runPreview split, run() requires execute() (or executeStream()). ` +\n `See docs/technical/02-dual-mode-execution.md.`\n );\n }\n\n try {\n this.task.setInput(overrides);\n\n // Resolve config schema annotations (e.g. mcp-server references) by mutating task.config.\n // Always resolve from originalConfig so re-runs use the original string IDs, not\n // previously resolved objects. The original config is preserved for serialization.\n const configSchema = (this.task.constructor as typeof Task).configSchema();\n if (schemaHasFormatAnnotations(configSchema)) {\n const source = (this.task as unknown as Task).originalConfig ?? this.task.config;\n const resolved = await resolveSchemaInputs(\n { ...source } as Record<string, unknown>,\n configSchema,\n { registry: this.registry }\n );\n Object.assign(this.task.config, resolved);\n }\n\n // Resolve schema-annotated inputs (models, repositories) before validation\n const schema = (this.task.constructor as typeof Task).inputSchema();\n this.task.runInputData = (await resolveSchemaInputs(\n this.task.runInputData as Record<string, unknown>,\n schema,\n { registry: this.registry }\n )) as Input;\n\n const inputs: Input = this.task.runInputData as Input;\n const isValid = await this.task.validateInput(inputs);\n if (!isValid) {\n throw new TaskInvalidInputError(\"Invalid input data\");\n }\n\n if (this.abortController?.signal.aborted) {\n await this.handleAbort();\n throw new TaskAbortedError(\"Promise for task created and aborted before run\");\n }\n\n let outputs: Output | undefined;\n\n const isStreamable = isTaskStreamable(this.task);\n\n // Warn if schema declares streaming but executeStream is not implemented\n if (!isStreamable && typeof this.task.executeStream !== \"function\") {\n const streamMode = getOutputStreamMode(this.task.outputSchema());\n if (streamMode !== \"none\") {\n getLogger().warn(\n `Task \"${this.task.type}\" declares streaming output (x-stream: \"${streamMode}\") ` +\n `but does not implement executeStream(). Falling back to non-streaming execute().`\n );\n }\n }\n\n if (this.task.cacheable) {\n outputs = (await this.outputCache?.getOutput(this.task.type, inputs)) as Output;\n if (outputs) {\n this.telemetrySpan?.addEvent(\"workglow.task.cache_hit\");\n if (isStreamable) {\n this.task.runOutputData = outputs;\n this.task.emit(\"stream_start\");\n this.task.emit(\"stream_chunk\", { type: \"finish\", data: outputs } as StreamEvent);\n this.task.emit(\"stream_end\", outputs);\n } else {\n this.task.runOutputData = outputs;\n }\n }\n }\n if (!outputs) {\n if (isStreamable) {\n outputs = await this.executeStreamingTask(inputs);\n } else {\n outputs = await this.executeTask(inputs);\n }\n if (this.task.cacheable && outputs !== undefined) {\n await this.outputCache?.saveOutput(this.task.type, inputs, outputs);\n }\n this.task.runOutputData = outputs ?? ({} as Output);\n }\n\n await this.handleComplete();\n\n return this.task.runOutputData as Output;\n } catch (err: any) {\n await this.handleError(err);\n // If a timeout triggered the abort, throw the TaskTimeoutError instead\n // of the generic TaskAbortedError that the task's execute() may have thrown.\n throw this.task.error instanceof TaskTimeoutError ? this.task.error : err;\n }\n }\n\n /**\n * Runs the task in preview mode\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runPreview(overrides: Partial<Input> = {}): Promise<Output> {\n if (this.task.status === TaskStatus.PROCESSING) {\n return this.task.runOutputData as Output;\n }\n this.task.setInput(overrides);\n\n // Resolve config schema annotations by mutating task.config directly\n const configSchema = (this.task.constructor as typeof Task).configSchema();\n if (schemaHasFormatAnnotations(configSchema)) {\n const source = (this.task as unknown as Task).originalConfig ?? this.task.config;\n const resolved = await resolveSchemaInputs(\n { ...source } as Record<string, unknown>,\n configSchema,\n { registry: this.registry }\n );\n Object.assign(this.task.config, resolved);\n }\n\n // Resolve schema-annotated inputs (models, repositories) before validation\n const schema = (this.task.constructor as typeof Task).inputSchema();\n this.task.runInputData = (await resolveSchemaInputs(\n this.task.runInputData as Record<string, unknown>,\n schema,\n { registry: this.registry }\n )) as Input;\n\n await this.handleStartPreview();\n\n try {\n const inputs: Input = this.task.runInputData as Input;\n const isValid = await this.task.validateInput(inputs);\n if (!isValid) {\n throw new TaskInvalidInputError(\"Invalid input data\");\n }\n\n const resultPreview = await this.executeTaskPreview(inputs);\n if (resultPreview !== undefined) {\n this.task.runOutputData = resultPreview;\n }\n\n await this.handleCompletePreview();\n } catch (err: any) {\n getLogger().debug(\"runPreview failed\", { taskId: this.task.config?.id, error: err });\n await this.handleErrorPreview();\n } finally {\n return this.task.runOutputData as Output;\n }\n }\n\n /**\n * Aborts task execution\n */\n public abort(): void {\n if (this.task.hasChildren()) {\n this.task.subGraph.abort();\n }\n this.abortController?.abort();\n }\n\n // ========================================================================\n // Protected methods\n // ========================================================================\n\n protected own<T extends Taskish<any, any>>(i: T): T {\n const task = ensureTask(i, { isOwned: true });\n this.task.subGraph.addTask(task);\n // Propagate parent registry and abort signal to owned ITask instances so\n // that calling task.run() on the returned value inherits this execution context.\n if (hasRunConfig(i)) {\n Object.assign(i.runConfig, {\n registry: this.registry,\n signal: this.abortController?.signal,\n resourceScope: this.resourceScope,\n });\n }\n // Notify listeners that the entitlement landscape may have changed.\n // For GraphAsTask this is also handled by the subGraph subscription, but\n // non-GraphAsTask tasks with dynamic entitlements (e.g. AiTask) need it too.\n if ((this.task.constructor as typeof Task).hasDynamicEntitlements) {\n this.task.emit(\"entitlementChange\", this.task.entitlements());\n }\n return i;\n }\n\n /**\n * Protected method to execute a task by delegating back to the task itself.\n */\n protected async executeTask(input: Input): Promise<Output | undefined> {\n const result = await this.task.execute(input, {\n signal: this.abortController!.signal,\n updateProgress: this.handleProgress.bind(this),\n own: this.own,\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n return result;\n }\n\n /**\n * Protected method for preview execution delegation\n */\n protected async executeTaskPreview(input: Input): Promise<Output | undefined> {\n return this.task.executePreview?.(input, { own: this.own });\n }\n\n /**\n * Executes a streaming task by consuming its executeStream() async iterable.\n *\n * When `shouldAccumulate` is true (default, set by graph runner when any downstream\n * edge needs materialized data, or when caching is on):\n * - text-delta chunks are accumulated per-port into a Map\n * - the raw finish event is NOT emitted; instead an enriched finish event is\n * emitted with the accumulated text merged in, so downstream dataflows can\n * materialize values without re-accumulating on their own\n *\n * When `shouldAccumulate` is false (set by graph runner when all downstream edges\n * are also streaming and no cache is needed):\n * - all events including the raw finish are emitted as-is (pure pass-through)\n * - no accumulation Map is maintained\n */\n protected async executeStreamingTask(input: Input): Promise<Output | undefined> {\n const streamMode: StreamMode = getOutputStreamMode(this.task.outputSchema());\n if (streamMode === \"append\") {\n const ports = getStreamingPorts(this.task.outputSchema());\n if (ports.length === 0) {\n throw new TaskError(\n `Task ${this.task.type} declares append streaming but no output port has x-stream: \"append\"`\n );\n }\n }\n if (streamMode === \"object\") {\n const ports = getStreamingPorts(this.task.outputSchema());\n if (ports.length === 0) {\n throw new TaskError(\n `Task ${this.task.type} declares object streaming but no output port has x-stream: \"object\"`\n );\n }\n }\n\n const accumulated = this.shouldAccumulate ? new Map<string, string>() : undefined;\n const accumulatedObjects = this.shouldAccumulate\n ? new Map<string, Record<string, unknown> | unknown[]>()\n : undefined;\n let chunkCount = 0;\n let finalOutput: Output | undefined;\n\n this.task.emit(\"stream_start\");\n\n const stream = this.task.executeStream!(input, {\n signal: this.abortController!.signal,\n updateProgress: this.handleProgress.bind(this),\n own: this.own,\n registry: this.registry,\n resourceScope: this.resourceScope,\n inputStreams: this.inputStreams,\n });\n\n for await (const event of stream) {\n chunkCount++;\n\n if (chunkCount === 1) {\n this.task.status = TaskStatus.STREAMING;\n this.task.emit(\"status\", this.task.status);\n }\n\n // For snapshot events, update runOutputData BEFORE emitting stream_chunk\n // so listeners see the latest snapshot when they handle the event\n if (event.type === \"snapshot\") {\n this.task.runOutputData = event.data as Output;\n }\n\n switch (event.type) {\n case \"text-delta\": {\n if (accumulated) {\n accumulated.set(event.port, (accumulated.get(event.port) ?? \"\") + event.textDelta);\n }\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"object-delta\": {\n if (accumulatedObjects) {\n const existing = accumulatedObjects.get(event.port);\n if (Array.isArray(event.objectDelta)) {\n // Array delta: upsert items by `id` into accumulated array\n const arr: unknown[] = Array.isArray(existing) ? [...existing] : [];\n for (const item of event.objectDelta) {\n const itemObj = item as Record<string, unknown>;\n if (itemObj && typeof itemObj === \"object\" && \"id\" in itemObj) {\n const idx = arr.findIndex(\n (e) => (e as Record<string, unknown>).id === itemObj.id\n );\n if (idx >= 0) arr[idx] = item;\n else arr.push(item);\n } else {\n arr.push(item);\n }\n }\n accumulatedObjects.set(event.port, arr);\n } else {\n // Non-array (e.g. structured generation): replace semantics\n accumulatedObjects.set(event.port, event.objectDelta);\n }\n }\n // Update runOutputData with accumulated state so listeners see growing state\n this.task.runOutputData = {\n ...this.task.runOutputData,\n [event.port]: accumulatedObjects?.get(event.port) ?? event.objectDelta,\n } as Output;\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"snapshot\": {\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"finish\": {\n if (accumulated || accumulatedObjects) {\n // Emit an enriched finish event: merge accumulated deltas into\n // the finish payload so downstream dataflows get complete port data\n // without needing to re-accumulate themselves.\n const merged: Record<string, unknown> = { ...(event.data || {}) };\n if (accumulated) {\n for (const [port, text] of accumulated) {\n if (text.length > 0) merged[port] = text;\n }\n }\n if (accumulatedObjects) {\n for (const [port, obj] of accumulatedObjects) {\n merged[port] = obj;\n }\n }\n finalOutput = merged as unknown as Output;\n this.task.emit(\"stream_chunk\", { type: \"finish\", data: merged } as StreamEvent);\n } else {\n // No accumulation: emit the raw finish event and use it directly\n finalOutput = event.data as Output;\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n }\n break;\n }\n case \"error\": {\n throw event.error;\n }\n }\n }\n\n // Check if the task was aborted during streaming\n if (this.abortController?.signal.aborted) {\n throw new TaskAbortedError(\"Task aborted during streaming\");\n }\n\n if (finalOutput !== undefined) {\n this.task.runOutputData = finalOutput;\n }\n\n this.task.emit(\"stream_end\", this.task.runOutputData as Output);\n\n return this.task.runOutputData as Output;\n }\n\n // ========================================================================\n // Protected Handlers\n // ========================================================================\n\n /**\n * Handles task start\n */\n protected async handleStart(config: IRunConfig = {}): Promise<void> {\n if (this.task.status === TaskStatus.PROCESSING) return;\n\n this.running = true;\n\n this.task.startedAt = new Date();\n this.task.progress = 0;\n this.task.status = TaskStatus.PROCESSING;\n\n this.abortController = new AbortController();\n this.abortController.signal.addEventListener(\"abort\", () => {\n this.handleAbort();\n });\n\n const cache = config.outputCache ?? this.task.runConfig?.outputCache;\n if (cache === true) {\n let instance = globalServiceRegistry.get(TASK_OUTPUT_REPOSITORY);\n this.outputCache = instance;\n } else if (cache === false) {\n this.outputCache = undefined;\n } else if (cache instanceof TaskOutputRepository) {\n this.outputCache = cache;\n }\n\n // shouldAccumulate defaults to true (backward-compatible for standalone runs)\n this.shouldAccumulate = config.shouldAccumulate !== false;\n\n if (config.updateProgress) {\n this.updateProgress = config.updateProgress;\n }\n\n if (config.registry) {\n this.registry = config.registry;\n }\n\n if (config.resourceScope) {\n this.resourceScope = config.resourceScope;\n }\n\n // If a parent signal is provided (e.g. set by context.own()), link it so\n // that aborting the parent also aborts this task.\n // Listen first, then check — addEventListener on an already-aborted signal\n // does not fire, so checking .aborted after ensures we never miss an abort.\n if (config.signal) {\n const onAbort = () => this.abortController!.abort();\n config.signal.addEventListener(\"abort\", onAbort, { once: true });\n if (config.signal.aborted) {\n config.signal.removeEventListener(\"abort\", onAbort);\n this.abortController.abort();\n return;\n }\n }\n\n // Start timeout timer if configured (timeout is a design-time config property)\n const timeout = (this.task.config as Record<string, unknown>).timeout as number | undefined;\n if (timeout !== undefined && timeout > 0) {\n this.pendingTimeoutError = new TaskTimeoutError(timeout);\n this.timeoutTimer = setTimeout(() => {\n this.abort();\n }, timeout);\n }\n\n // Start telemetry span\n const telemetry = getTelemetryProvider();\n if (telemetry.isEnabled) {\n this.telemetrySpan = telemetry.startSpan(\"workglow.task.run\", {\n attributes: {\n \"workglow.task.type\": this.task.type,\n \"workglow.task.id\": String(this.task.config.id),\n \"workglow.task.cacheable\": this.task.cacheable,\n \"workglow.task.title\": this.task.title || undefined,\n },\n });\n }\n\n this.task.emit(\"start\");\n this.task.emit(\"status\", this.task.status);\n }\n private updateProgress = async (\n _task: ITask,\n _progress: number,\n _message?: string,\n ..._args: any[]\n ) => {};\n\n protected async handleStartPreview(): Promise<void> {\n this.previewRunning = true;\n }\n\n /**\n * Clears the timeout timer if one is active.\n */\n protected clearTimeoutTimer(): void {\n if (this.timeoutTimer !== undefined) {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * Handles task abort\n */\n protected async handleAbort(): Promise<void> {\n if (this.task.status === TaskStatus.ABORTING) return;\n this.clearTimeoutTimer();\n this.task.status = TaskStatus.ABORTING;\n this.task.progress = 100;\n // Use the pending timeout error if the abort was triggered by a timeout\n this.task.error = this.pendingTimeoutError ?? new TaskAbortedError();\n this.pendingTimeoutError = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, \"aborted\");\n this.telemetrySpan.addEvent(\"workglow.task.aborted\", {\n \"workglow.task.error\": this.task.error.message,\n });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n // Call optional cleanup method for resource release\n if (typeof this.task.cleanup === \"function\") {\n try {\n await this.task.cleanup();\n } catch {\n // Cleanup errors are swallowed — abort must not throw from cleanup\n }\n }\n\n this.task.emit(\"abort\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleAbortPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task completion\n */\n protected async handleComplete(): Promise<void> {\n if (this.task.status === TaskStatus.COMPLETED) return;\n this.clearTimeoutTimer();\n this.pendingTimeoutError = undefined;\n\n this.task.completedAt = new Date();\n this.task.progress = 100;\n this.task.status = TaskStatus.COMPLETED;\n this.abortController = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.OK);\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.task.emit(\"complete\");\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleCompletePreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n protected async handleDisable(): Promise<void> {\n if (this.task.status === TaskStatus.DISABLED) return;\n this.task.status = TaskStatus.DISABLED;\n this.task.progress = 100;\n this.task.completedAt = new Date();\n this.abortController = undefined;\n this.task.emit(\"disabled\");\n this.task.emit(\"status\", this.task.status);\n }\n\n public async disable(): Promise<void> {\n await this.handleDisable();\n }\n\n /**\n * Handles task error\n * @param err Error that occurred\n */\n protected async handleError(err: Error): Promise<void> {\n if (err instanceof TaskAbortedError) return this.handleAbort();\n if (this.task.status === TaskStatus.FAILED) return;\n this.clearTimeoutTimer();\n this.pendingTimeoutError = undefined;\n if (this.task.hasChildren()) {\n this.task.subGraph!.abort();\n }\n\n this.task.completedAt = new Date();\n this.task.progress = 100;\n this.task.status = TaskStatus.FAILED;\n if (err instanceof TaskError) {\n this.task.error = err;\n } else {\n this.task.error = new TaskFailedError(\n `Task \"${this.task.type}\" (${this.task.id}): ${err?.message || \"Task failed\"}`\n );\n }\n // Attach task context to all TaskError instances for programmatic access\n if (this.task.error instanceof TaskError) {\n this.task.error.taskType ??= this.task.type;\n this.task.error.taskId ??= this.task.id;\n }\n this.abortController = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, this.task.error.message);\n this.telemetrySpan.setAttributes({ \"workglow.task.error\": this.task.error.message });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.task.emit(\"error\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleErrorPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task progress update\n * @param progress Progress value (0-100)\n * @param args Additional arguments\n */\n protected async handleProgress(\n progress: number,\n message?: string,\n ...args: any[]\n ): Promise<void> {\n this.task.progress = progress;\n // Emit before graph-level work (e.g. pushOutputFromNodeToEdges) so listeners are not stalled.\n this.task.emit(\"progress\", progress, message, ...args);\n await this.updateProgress(this.task, progress, message, ...args);\n }\n}\n",
|
|
22
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan } from \"@workglow/util\";\nimport {\n getLogger,\n getTelemetryProvider,\n globalServiceRegistry,\n ResourceScope,\n ServiceRegistry,\n SpanStatusCode,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { getPortCodec } from \"@workglow/util\";\nimport type { Taskish } from \"../task-graph/Conversions\";\nimport { ensureTask } from \"../task-graph/Conversions\";\nimport { resolveSchemaInputs, schemaHasFormatAnnotations } from \"./InputResolver\";\nimport type { IRunConfig, ITask } from \"./ITask\";\nimport { ITaskRunner } from \"./ITaskRunner\";\nimport type { StreamEvent, StreamMode } from \"./StreamTypes\";\nimport { getOutputStreamMode, getStreamingPorts, isTaskStreamable } from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskError,\n TaskFailedError,\n TaskInvalidInputError,\n TaskTimeoutError,\n} from \"./TaskError\";\nimport { TaskConfig, TaskInput, TaskOutput, TaskStatus } from \"./TaskTypes\";\n\ninterface SchemaProperties {\n properties?: Record<string, { format?: string }>;\n}\n\nasync function serializeOutputPorts(\n output: Record<string, unknown>,\n schema: SchemaProperties,\n): Promise<Record<string, unknown>> {\n if (!schema?.properties) return output;\n const out: Record<string, unknown> = { ...output };\n for (const [key, prop] of Object.entries(schema.properties)) {\n const codec = prop.format ? getPortCodec(prop.format) : undefined;\n if (codec && out[key] !== undefined) {\n out[key] = await codec.serialize(out[key]);\n }\n }\n return out;\n}\n\nasync function deserializeOutputPorts(\n output: Record<string, unknown>,\n schema: SchemaProperties,\n): Promise<Record<string, unknown>> {\n if (!schema?.properties) return output;\n const out: Record<string, unknown> = { ...output };\n for (const [key, prop] of Object.entries(schema.properties)) {\n const codec = prop.format ? getPortCodec(prop.format) : undefined;\n if (codec && out[key] !== undefined) {\n out[key] = await codec.deserialize(out[key]);\n }\n }\n return out;\n}\n\nasync function normalizeInputsForCacheKey(\n inputs: Record<string, unknown>,\n schema: SchemaProperties,\n): Promise<Record<string, unknown>> {\n if (!schema?.properties) return inputs;\n const out: Record<string, unknown> = { ...inputs };\n for (const [key, prop] of Object.entries(schema.properties)) {\n const codec = prop.format ? getPortCodec(prop.format) : undefined;\n if (codec && out[key] !== undefined) {\n out[key] = await codec.serialize(out[key]);\n }\n }\n return out;\n}\n\n/**\n * Type guard that checks whether a value is an ITask-like object with a mutable `runConfig`.\n */\nfunction hasRunConfig(i: unknown): i is { runConfig: Partial<IRunConfig> } {\n return i !== null && typeof i === \"object\" && \"runConfig\" in (i as object);\n}\n\n/**\n * Responsible for running tasks\n * Manages the execution lifecycle of individual tasks\n */\nexport class TaskRunner<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig = TaskConfig,\n> implements ITaskRunner<Input, Output, Config> {\n /**\n * Whether the task is currently running\n */\n protected running = false;\n protected previewRunning = false;\n\n /**\n * The task to run\n */\n public readonly task: ITask<Input, Output, Config>;\n\n /**\n * AbortController for cancelling task execution\n */\n protected abortController?: AbortController;\n\n /**\n * The output cache for the task\n */\n protected outputCache?: TaskOutputRepository;\n\n /**\n * The service registry for the task\n */\n protected registry: ServiceRegistry = globalServiceRegistry;\n\n /**\n * Resource scope for this task run\n */\n protected resourceScope?: ResourceScope;\n\n /**\n * Input streams for pass-through streaming tasks.\n * Set by the graph runner before executing a streaming task that has\n * upstream streaming edges. Keyed by input port name.\n */\n public inputStreams?: Map<string, ReadableStream<StreamEvent>>;\n\n /**\n * Timer handle for task-level timeout. Set when `IRunConfig.timeout` is\n * provided and cleared on completion, error, or abort.\n */\n protected timeoutTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * When a timeout triggers the abort, this holds the TaskTimeoutError so\n * handleAbort() can surface the correct error type instead of a generic\n * TaskAbortedError.\n */\n protected pendingTimeoutError?: TaskTimeoutError;\n\n /**\n * Whether the streaming task runner should accumulate text-delta chunks and\n * emit an enriched finish event. Set from IRunConfig.shouldAccumulate.\n * Defaults to true so standalone task execution is backward-compatible.\n * The graph runner sets this to false when no downstream edge needs\n * materialized data (no cache, all downstream tasks are also streaming).\n */\n protected shouldAccumulate: boolean = true;\n\n /**\n * Active telemetry span for the current task run.\n */\n protected telemetrySpan?: ISpan;\n\n /**\n * Constructor for TaskRunner\n * @param task The task to run\n */\n constructor(task: ITask<Input, Output, Config>) {\n this.task = task;\n this.own = this.own.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n }\n\n // ========================================================================\n // Public methods\n // ========================================================================\n\n /**\n * Runs the task and returns the output\n * @param overrides Optional input overrides\n * @param config Optional configuration overrides\n * @returns The task output\n */\n async run(overrides: Partial<Input> = {}, config: IRunConfig = {}): Promise<Output> {\n await this.handleStart(config);\n\n const proto = Object.getPrototypeOf(this.task);\n if (\n proto.execute === Task.prototype.execute &&\n typeof proto.executeStream !== \"function\" &&\n proto.executePreview !== Task.prototype.executePreview\n ) {\n throw new TaskConfigurationError(\n `Task \"${this.task.type}\" implements only executePreview() and cannot be run via run(). ` +\n `After the run/runPreview split, run() requires execute() (or executeStream()). ` +\n `See docs/technical/02-dual-mode-execution.md.`\n );\n }\n\n try {\n this.task.setInput(overrides);\n\n // Resolve config schema annotations (e.g. mcp-server references) by mutating task.config.\n // Always resolve from originalConfig so re-runs use the original string IDs, not\n // previously resolved objects. The original config is preserved for serialization.\n const configSchema = (this.task.constructor as typeof Task).configSchema();\n if (schemaHasFormatAnnotations(configSchema)) {\n const source = (this.task as unknown as Task).originalConfig ?? this.task.config;\n const resolved = await resolveSchemaInputs(\n { ...source } as Record<string, unknown>,\n configSchema,\n { registry: this.registry }\n );\n Object.assign(this.task.config, resolved);\n }\n\n // Resolve schema-annotated inputs (models, repositories) before validation\n const schema = (this.task.constructor as typeof Task).inputSchema();\n this.task.runInputData = (await resolveSchemaInputs(\n this.task.runInputData as Record<string, unknown>,\n schema,\n { registry: this.registry }\n )) as Input;\n\n const inputs: Input = this.task.runInputData as Input;\n const isValid = await this.task.validateInput(inputs);\n if (!isValid) {\n throw new TaskInvalidInputError(\"Invalid input data\");\n }\n\n if (this.abortController?.signal.aborted) {\n await this.handleAbort();\n throw new TaskAbortedError(\"Promise for task created and aborted before run\");\n }\n\n let outputs: Output | undefined;\n\n const isStreamable = isTaskStreamable(this.task);\n\n // Warn if schema declares streaming but executeStream is not implemented\n if (!isStreamable && typeof this.task.executeStream !== \"function\") {\n const streamMode = getOutputStreamMode(this.task.outputSchema());\n if (streamMode !== \"none\") {\n getLogger().warn(\n `Task \"${this.task.type}\" declares streaming output (x-stream: \"${streamMode}\") ` +\n `but does not implement executeStream(). Falling back to non-streaming execute().`\n );\n }\n }\n\n const inputSchema = (this.task.constructor as typeof Task).inputSchema();\n const outputSchema = (this.task.constructor as typeof Task).outputSchema();\n const inputsForKey = this.outputCache\n ? await normalizeInputsForCacheKey(\n inputs as Record<string, unknown>,\n inputSchema as unknown as SchemaProperties,\n )\n : inputs;\n\n if (this.task.cacheable) {\n const cached = await this.outputCache?.getOutput(this.task.type, inputsForKey);\n if (cached !== undefined) {\n outputs = (await deserializeOutputPorts(\n cached as Record<string, unknown>,\n outputSchema as unknown as SchemaProperties,\n )) as Output;\n this.telemetrySpan?.addEvent(\"workglow.task.cache_hit\");\n if (isStreamable) {\n this.task.runOutputData = outputs;\n this.task.emit(\"stream_start\");\n this.task.emit(\"stream_chunk\", { type: \"finish\", data: outputs } as StreamEvent);\n this.task.emit(\"stream_end\", outputs);\n } else {\n this.task.runOutputData = outputs;\n }\n }\n }\n if (!outputs) {\n if (isStreamable) {\n outputs = await this.executeStreamingTask(inputs);\n } else {\n outputs = await this.executeTask(inputs);\n }\n if (this.task.cacheable && outputs !== undefined) {\n const wireOutputs = await serializeOutputPorts(\n outputs as Record<string, unknown>,\n outputSchema as unknown as SchemaProperties,\n );\n await this.outputCache?.saveOutput(this.task.type, inputsForKey, wireOutputs as Output);\n }\n this.task.runOutputData = outputs ?? ({} as Output);\n }\n\n await this.handleComplete();\n\n return this.task.runOutputData as Output;\n } catch (err: any) {\n await this.handleError(err);\n // If a timeout triggered the abort, throw the TaskTimeoutError instead\n // of the generic TaskAbortedError that the task's execute() may have thrown.\n throw this.task.error instanceof TaskTimeoutError ? this.task.error : err;\n }\n }\n\n /**\n * Runs the task in preview mode\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runPreview(overrides: Partial<Input> = {}): Promise<Output> {\n if (this.task.status === TaskStatus.PROCESSING) {\n return this.task.runOutputData as Output;\n }\n this.task.setInput(overrides);\n\n // Resolve config schema annotations by mutating task.config directly\n const configSchema = (this.task.constructor as typeof Task).configSchema();\n if (schemaHasFormatAnnotations(configSchema)) {\n const source = (this.task as unknown as Task).originalConfig ?? this.task.config;\n const resolved = await resolveSchemaInputs(\n { ...source } as Record<string, unknown>,\n configSchema,\n { registry: this.registry }\n );\n Object.assign(this.task.config, resolved);\n }\n\n // Resolve schema-annotated inputs (models, repositories) before validation\n const schema = (this.task.constructor as typeof Task).inputSchema();\n this.task.runInputData = (await resolveSchemaInputs(\n this.task.runInputData as Record<string, unknown>,\n schema,\n { registry: this.registry }\n )) as Input;\n\n await this.handleStartPreview();\n\n try {\n const inputs: Input = this.task.runInputData as Input;\n const isValid = await this.task.validateInput(inputs);\n if (!isValid) {\n throw new TaskInvalidInputError(\"Invalid input data\");\n }\n\n const resultPreview = await this.executeTaskPreview(inputs);\n if (resultPreview !== undefined) {\n this.task.runOutputData = resultPreview;\n }\n\n await this.handleCompletePreview();\n } catch (err: any) {\n getLogger().debug(\"runPreview failed\", { taskId: this.task.config?.id, error: err });\n await this.handleErrorPreview();\n } finally {\n return this.task.runOutputData as Output;\n }\n }\n\n /**\n * Aborts task execution\n */\n public abort(): void {\n if (this.task.hasChildren()) {\n this.task.subGraph.abort();\n }\n this.abortController?.abort();\n }\n\n // ========================================================================\n // Protected methods\n // ========================================================================\n\n protected own<T extends Taskish<any, any>>(i: T): T {\n const task = ensureTask(i, { isOwned: true });\n this.task.subGraph.addTask(task);\n // Propagate parent registry and abort signal to owned ITask instances so\n // that calling task.run() on the returned value inherits this execution context.\n if (hasRunConfig(i)) {\n Object.assign(i.runConfig, {\n registry: this.registry,\n signal: this.abortController?.signal,\n resourceScope: this.resourceScope,\n });\n }\n // Notify listeners that the entitlement landscape may have changed.\n // For GraphAsTask this is also handled by the subGraph subscription, but\n // non-GraphAsTask tasks with dynamic entitlements (e.g. AiTask) need it too.\n if ((this.task.constructor as typeof Task).hasDynamicEntitlements) {\n this.task.emit(\"entitlementChange\", this.task.entitlements());\n }\n return i;\n }\n\n /**\n * Protected method to execute a task by delegating back to the task itself.\n */\n protected async executeTask(input: Input): Promise<Output | undefined> {\n const result = await this.task.execute(input, {\n signal: this.abortController!.signal,\n updateProgress: this.handleProgress.bind(this),\n own: this.own,\n registry: this.registry,\n resourceScope: this.resourceScope,\n });\n return result;\n }\n\n /**\n * Protected method for preview execution delegation\n */\n protected async executeTaskPreview(input: Input): Promise<Output | undefined> {\n return this.task.executePreview?.(input, { own: this.own });\n }\n\n /**\n * Executes a streaming task by consuming its executeStream() async iterable.\n *\n * When `shouldAccumulate` is true (default, set by graph runner when any downstream\n * edge needs materialized data, or when caching is on):\n * - text-delta chunks are accumulated per-port into a Map\n * - the raw finish event is NOT emitted; instead an enriched finish event is\n * emitted with the accumulated text merged in, so downstream dataflows can\n * materialize values without re-accumulating on their own\n *\n * When `shouldAccumulate` is false (set by graph runner when all downstream edges\n * are also streaming and no cache is needed):\n * - all events including the raw finish are emitted as-is (pure pass-through)\n * - no accumulation Map is maintained\n */\n protected async executeStreamingTask(input: Input): Promise<Output | undefined> {\n const streamMode: StreamMode = getOutputStreamMode(this.task.outputSchema());\n if (streamMode === \"append\") {\n const ports = getStreamingPorts(this.task.outputSchema());\n if (ports.length === 0) {\n throw new TaskError(\n `Task ${this.task.type} declares append streaming but no output port has x-stream: \"append\"`\n );\n }\n }\n if (streamMode === \"object\") {\n const ports = getStreamingPorts(this.task.outputSchema());\n if (ports.length === 0) {\n throw new TaskError(\n `Task ${this.task.type} declares object streaming but no output port has x-stream: \"object\"`\n );\n }\n }\n\n const accumulated = this.shouldAccumulate ? new Map<string, string>() : undefined;\n const accumulatedObjects = this.shouldAccumulate\n ? new Map<string, Record<string, unknown> | unknown[]>()\n : undefined;\n let chunkCount = 0;\n let finalOutput: Output | undefined;\n\n this.task.emit(\"stream_start\");\n\n const stream = this.task.executeStream!(input, {\n signal: this.abortController!.signal,\n updateProgress: this.handleProgress.bind(this),\n own: this.own,\n registry: this.registry,\n resourceScope: this.resourceScope,\n inputStreams: this.inputStreams,\n });\n\n for await (const event of stream) {\n chunkCount++;\n\n if (chunkCount === 1) {\n this.task.status = TaskStatus.STREAMING;\n this.task.emit(\"status\", this.task.status);\n }\n\n // For snapshot events, update runOutputData BEFORE emitting stream_chunk\n // so listeners see the latest snapshot when they handle the event\n if (event.type === \"snapshot\") {\n this.task.runOutputData = event.data as Output;\n }\n\n switch (event.type) {\n case \"text-delta\": {\n if (accumulated) {\n accumulated.set(event.port, (accumulated.get(event.port) ?? \"\") + event.textDelta);\n }\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"object-delta\": {\n if (accumulatedObjects) {\n const existing = accumulatedObjects.get(event.port);\n if (Array.isArray(event.objectDelta)) {\n // Array delta: upsert items by `id` into accumulated array\n const arr: unknown[] = Array.isArray(existing) ? [...existing] : [];\n for (const item of event.objectDelta) {\n const itemObj = item as Record<string, unknown>;\n if (itemObj && typeof itemObj === \"object\" && \"id\" in itemObj) {\n const idx = arr.findIndex(\n (e) => (e as Record<string, unknown>).id === itemObj.id\n );\n if (idx >= 0) arr[idx] = item;\n else arr.push(item);\n } else {\n arr.push(item);\n }\n }\n accumulatedObjects.set(event.port, arr);\n } else {\n // Non-array (e.g. structured generation): replace semantics\n accumulatedObjects.set(event.port, event.objectDelta);\n }\n }\n // Update runOutputData with accumulated state so listeners see growing state\n this.task.runOutputData = {\n ...this.task.runOutputData,\n [event.port]: accumulatedObjects?.get(event.port) ?? event.objectDelta,\n } as Output;\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"snapshot\": {\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n const progress = Math.min(99, Math.round(100 * (1 - Math.exp(-0.05 * chunkCount))));\n await this.handleProgress(progress);\n break;\n }\n case \"finish\": {\n if (accumulated || accumulatedObjects) {\n // Emit an enriched finish event: merge accumulated deltas into\n // the finish payload so downstream dataflows get complete port data\n // without needing to re-accumulate themselves.\n const merged: Record<string, unknown> = { ...(event.data || {}) };\n if (accumulated) {\n for (const [port, text] of accumulated) {\n if (text.length > 0) merged[port] = text;\n }\n }\n if (accumulatedObjects) {\n for (const [port, obj] of accumulatedObjects) {\n merged[port] = obj;\n }\n }\n finalOutput = merged as unknown as Output;\n this.task.emit(\"stream_chunk\", { type: \"finish\", data: merged } as StreamEvent);\n } else {\n // No accumulation: emit the raw finish event and use it directly\n finalOutput = event.data as Output;\n this.task.emit(\"stream_chunk\", event as StreamEvent);\n }\n break;\n }\n case \"error\": {\n throw event.error;\n }\n }\n }\n\n // Check if the task was aborted during streaming\n if (this.abortController?.signal.aborted) {\n throw new TaskAbortedError(\"Task aborted during streaming\");\n }\n\n if (finalOutput !== undefined) {\n this.task.runOutputData = finalOutput;\n }\n\n this.task.emit(\"stream_end\", this.task.runOutputData as Output);\n\n return this.task.runOutputData as Output;\n }\n\n // ========================================================================\n // Protected Handlers\n // ========================================================================\n\n /**\n * Handles task start\n */\n protected async handleStart(config: IRunConfig = {}): Promise<void> {\n if (this.task.status === TaskStatus.PROCESSING) return;\n\n this.running = true;\n\n this.task.startedAt = new Date();\n this.task.progress = 0;\n this.task.status = TaskStatus.PROCESSING;\n\n this.abortController = new AbortController();\n this.abortController.signal.addEventListener(\"abort\", () => {\n this.handleAbort();\n });\n\n const cache = config.outputCache ?? this.task.runConfig?.outputCache;\n if (cache === true) {\n let instance = globalServiceRegistry.get(TASK_OUTPUT_REPOSITORY);\n this.outputCache = instance;\n } else if (cache === false) {\n this.outputCache = undefined;\n } else if (cache instanceof TaskOutputRepository) {\n this.outputCache = cache;\n }\n\n // shouldAccumulate defaults to true (backward-compatible for standalone runs)\n this.shouldAccumulate = config.shouldAccumulate !== false;\n\n if (config.updateProgress) {\n this.updateProgress = config.updateProgress;\n }\n\n if (config.registry) {\n this.registry = config.registry;\n }\n\n if (config.resourceScope) {\n this.resourceScope = config.resourceScope;\n }\n\n // If a parent signal is provided (e.g. set by context.own()), link it so\n // that aborting the parent also aborts this task.\n // Listen first, then check — addEventListener on an already-aborted signal\n // does not fire, so checking .aborted after ensures we never miss an abort.\n if (config.signal) {\n const onAbort = () => this.abortController!.abort();\n config.signal.addEventListener(\"abort\", onAbort, { once: true });\n if (config.signal.aborted) {\n config.signal.removeEventListener(\"abort\", onAbort);\n this.abortController.abort();\n return;\n }\n }\n\n // Start timeout timer if configured (timeout is a design-time config property)\n const timeout = (this.task.config as Record<string, unknown>).timeout as number | undefined;\n if (timeout !== undefined && timeout > 0) {\n this.pendingTimeoutError = new TaskTimeoutError(timeout);\n this.timeoutTimer = setTimeout(() => {\n this.abort();\n }, timeout);\n }\n\n // Start telemetry span\n const telemetry = getTelemetryProvider();\n if (telemetry.isEnabled) {\n this.telemetrySpan = telemetry.startSpan(\"workglow.task.run\", {\n attributes: {\n \"workglow.task.type\": this.task.type,\n \"workglow.task.id\": String(this.task.config.id),\n \"workglow.task.cacheable\": this.task.cacheable,\n \"workglow.task.title\": this.task.title || undefined,\n },\n });\n }\n\n this.task.emit(\"start\");\n this.task.emit(\"status\", this.task.status);\n }\n private updateProgress = async (\n _task: ITask,\n _progress: number,\n _message?: string,\n ..._args: any[]\n ) => {};\n\n protected async handleStartPreview(): Promise<void> {\n this.previewRunning = true;\n }\n\n /**\n * Clears the timeout timer if one is active.\n */\n protected clearTimeoutTimer(): void {\n if (this.timeoutTimer !== undefined) {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * Handles task abort\n */\n protected async handleAbort(): Promise<void> {\n if (this.task.status === TaskStatus.ABORTING) return;\n this.clearTimeoutTimer();\n this.task.status = TaskStatus.ABORTING;\n this.task.progress = 100;\n // Use the pending timeout error if the abort was triggered by a timeout\n this.task.error = this.pendingTimeoutError ?? new TaskAbortedError();\n this.pendingTimeoutError = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, \"aborted\");\n this.telemetrySpan.addEvent(\"workglow.task.aborted\", {\n \"workglow.task.error\": this.task.error.message,\n });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n // Call optional cleanup method for resource release\n if (typeof this.task.cleanup === \"function\") {\n try {\n await this.task.cleanup();\n } catch {\n // Cleanup errors are swallowed — abort must not throw from cleanup\n }\n }\n\n this.task.emit(\"abort\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleAbortPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task completion\n */\n protected async handleComplete(): Promise<void> {\n if (this.task.status === TaskStatus.COMPLETED) return;\n this.clearTimeoutTimer();\n this.pendingTimeoutError = undefined;\n\n this.task.completedAt = new Date();\n this.task.progress = 100;\n this.task.status = TaskStatus.COMPLETED;\n this.abortController = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.OK);\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.task.emit(\"complete\");\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleCompletePreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n protected async handleDisable(): Promise<void> {\n if (this.task.status === TaskStatus.DISABLED) return;\n this.task.status = TaskStatus.DISABLED;\n this.task.progress = 100;\n this.task.completedAt = new Date();\n this.abortController = undefined;\n this.task.emit(\"disabled\");\n this.task.emit(\"status\", this.task.status);\n }\n\n public async disable(): Promise<void> {\n await this.handleDisable();\n }\n\n /**\n * Handles task error\n * @param err Error that occurred\n */\n protected async handleError(err: Error): Promise<void> {\n if (err instanceof TaskAbortedError) return this.handleAbort();\n if (this.task.status === TaskStatus.FAILED) return;\n this.clearTimeoutTimer();\n this.pendingTimeoutError = undefined;\n if (this.task.hasChildren()) {\n this.task.subGraph!.abort();\n }\n\n this.task.completedAt = new Date();\n this.task.progress = 100;\n this.task.status = TaskStatus.FAILED;\n if (err instanceof TaskError) {\n this.task.error = err;\n } else {\n this.task.error = new TaskFailedError(\n `Task \"${this.task.type}\" (${this.task.id}): ${err?.message || \"Task failed\"}`\n );\n }\n // Attach task context to all TaskError instances for programmatic access\n if (this.task.error instanceof TaskError) {\n this.task.error.taskType ??= this.task.type;\n this.task.error.taskId ??= this.task.id;\n }\n this.abortController = undefined;\n\n if (this.telemetrySpan) {\n this.telemetrySpan.setStatus(SpanStatusCode.ERROR, this.task.error.message);\n this.telemetrySpan.setAttributes({ \"workglow.task.error\": this.task.error.message });\n this.telemetrySpan.end();\n this.telemetrySpan = undefined;\n }\n\n this.task.emit(\"error\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleErrorPreview(): Promise<void> {\n this.previewRunning = false;\n }\n\n /**\n * Handles task progress update\n * @param progress Progress value (0-100)\n * @param args Additional arguments\n */\n protected async handleProgress(\n progress: number,\n message?: string,\n ...args: any[]\n ): Promise<void> {\n this.task.progress = progress;\n // Emit before graph-level work (e.g. pushOutputFromNodeToEdges) so listeners are not stalled.\n this.task.emit(\"progress\", progress, message, ...args);\n await this.updateProgress(this.task, progress, message, ...args);\n }\n}\n",
|
|
22
23
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema, JsonSchema } from \"@workglow/util/schema\";\n\n/**\n * Stream mode determines how a task's streaming output is interpreted:\n * - `none`: No streaming (default). `execute()` returns `Promise<Output>`.\n * - `append`: Each chunk is a delta (e.g., a new token).\n * - `replace`: Each chunk is a corrected/revised snapshot of the complete output so far.\n * - `object`: Each chunk is a progressively more complete partial object snapshot.\n * - `mixed`: Multiple ports use different stream modes (e.g., append + object).\n *\n * Declared per-port via the `x-stream` schema extension property.\n * Absent `x-stream` = `\"none\"`.\n */\nexport type StreamMode = \"none\" | \"append\" | \"replace\" | \"object\" | \"mixed\";\n\n/**\n * Append mode: delta chunk (consumer accumulates).\n * `port` identifies which output port this delta belongs to.\n */\nexport type StreamTextDelta = {\n type: \"text-delta\";\n port: string;\n textDelta: string;\n};\n\n/**\n * Object delta for structured/object streaming.\n * `port` identifies which output port this delta belongs to.\n *\n * - **Non-array** (e.g. structured generation): each `objectDelta` is a\n * progressively more complete partial object snapshot. Consumers should\n * replace (not merge) their state with the latest delta.\n * - **Array** (e.g. tool calls): each `objectDelta` is a single-element\n * array containing one item to upsert by `id` into the accumulated array.\n */\nexport type StreamObjectDelta = {\n type: \"object-delta\";\n port: string;\n objectDelta: Record<string, unknown> | unknown[];\n};\n\n/**\n * Replace mode: full snapshot chunk (replaces previous state).\n */\nexport type StreamSnapshot<Output = Record<string, any>> = {\n type: \"snapshot\";\n data: Output;\n};\n\n/**\n * Signals that the stream has finished. In append mode, the runner\n * accumulates text-delta chunks into the append port (determined by\n * the output schema's `x-stream: \"append\"` annotation); `data` may\n * carry additional fields (merged into the final output).\n * In replace mode, `data` contains the final output.\n */\nexport type StreamFinish<Output = Record<string, any>> = {\n type: \"finish\";\n data: Output;\n};\n\n/**\n * Signals that the stream encountered an error.\n */\nexport type StreamError = {\n type: \"error\";\n error: Error;\n};\n\n/**\n * Discriminated union of all stream event types.\n * Used as the element type for `AsyncIterable<StreamEvent>` streams\n * flowing through the DAG.\n */\nexport type StreamEvent<Output = Record<string, any>> =\n | StreamTextDelta\n | StreamObjectDelta\n | StreamSnapshot<Output>\n | StreamFinish<Output>\n | StreamError;\n\n// ========================================================================\n// Port-level stream helpers\n// ========================================================================\n\n/**\n * Reads the `x-stream` value from a specific port property in a DataPortSchema.\n * Returns `\"none\"` when the property or the `x-stream` annotation is absent.\n *\n * @param schema - The task's input or output DataPortSchema\n * @param portId - The property name (port ID) to inspect\n * @returns The StreamMode declared on that port\n */\nexport function getPortStreamMode(schema: DataPortSchema | JsonSchema, portId: string): StreamMode {\n if (typeof schema === \"boolean\") return \"none\";\n const prop = (schema.properties as Record<string, any>)?.[portId];\n if (!prop || typeof prop === \"boolean\") return \"none\";\n const xStream = prop[\"x-stream\"];\n if (xStream === \"append\" || xStream === \"replace\" || xStream === \"object\") return xStream;\n return \"none\";\n}\n\n/**\n * Returns all ports that declare an `x-stream` annotation, along with their mode.\n *\n * @param schema - The task's output (or input) DataPortSchema\n * @returns Array of `{ port, mode }` for every annotated port\n */\nexport function getStreamingPorts(\n schema: DataPortSchema\n): Array<{ port: string; mode: StreamMode }> {\n if (typeof schema === \"boolean\") return [];\n const props = schema.properties;\n if (!props) return [];\n\n const result: Array<{ port: string; mode: StreamMode }> = [];\n for (const [name, prop] of Object.entries(props)) {\n if (!prop || typeof prop === \"boolean\") continue;\n const xStream = (prop as any)[\"x-stream\"];\n if (xStream === \"append\" || xStream === \"replace\" || xStream === \"object\") {\n result.push({ port: name, mode: xStream });\n }\n }\n return result;\n}\n\n/**\n * Returns the dominant output stream mode for a task by inspecting its output schema.\n * Returns `\"mixed\"` when ports use different modes (e.g., append + object).\n * Returns `\"none\"` if no output port declares streaming.\n */\nexport function getOutputStreamMode(outputSchema: DataPortSchema): StreamMode {\n const ports = getStreamingPorts(outputSchema);\n if (ports.length === 0) return \"none\";\n\n const mode = ports[0].mode;\n for (let i = 1; i < ports.length; i++) {\n if (ports[i].mode !== mode) {\n return \"mixed\";\n }\n }\n return mode;\n}\n\n/**\n * Determines whether a task supports streaming by checking if any output port\n * has an `x-stream` annotation AND the task implements `executeStream()`.\n *\n * @param task - The task to inspect (must have `outputSchema()` and optionally `executeStream`)\n * @returns true if the task can produce streaming output\n */\nexport function isTaskStreamable(task: {\n outputSchema(): DataPortSchema;\n executeStream?: (...args: any[]) => any;\n}): boolean {\n if (typeof task.executeStream !== \"function\") return false;\n return getOutputStreamMode(task.outputSchema()) !== \"none\";\n}\n\n/**\n * Returns the port ID (property name) of the first output port that declares\n * `x-stream: \"append\"`, or `undefined` if no such port exists.\n *\n * @param schema - The task's output DataPortSchema\n * @returns The port name with append streaming, or undefined\n */\nexport function getAppendPortId(schema: DataPortSchema): string | undefined {\n if (typeof schema === \"boolean\") return undefined;\n const props = schema.properties;\n if (!props) return undefined;\n\n for (const [name, prop] of Object.entries(props)) {\n if (!prop || typeof prop === \"boolean\") continue;\n if ((prop as any)[\"x-stream\"] === \"append\") return name;\n }\n return undefined;\n}\n\n/**\n * Determines whether a dataflow edge needs to accumulate stream events\n * into a materialized value for the target port.\n *\n * Accumulation is needed when:\n * - The source output port declares streaming (`x-stream` is set)\n * - AND the target input port does NOT accept the same stream mode\n *\n * @param sourceSchema - Output schema of the source task\n * @param sourcePort - Port ID on the source task\n * @param targetSchema - Input schema of the target task\n * @param targetPort - Port ID on the target task\n * @returns true if the edge should accumulate; false if stream can pass through\n */\nexport function edgeNeedsAccumulation(\n sourceSchema: DataPortSchema,\n sourcePort: string,\n targetSchema: DataPortSchema,\n targetPort: string\n): boolean {\n const sourceMode = getPortStreamMode(sourceSchema, sourcePort);\n if (sourceMode === \"none\") return false;\n const targetMode = getPortStreamMode(targetSchema, targetPort);\n return sourceMode !== targetMode;\n}\n\n/**\n * Returns the port ID (property name) of the first output port that declares\n * `x-stream: \"object\"`, or `undefined` if no such port exists.\n *\n * @param schema - The task's output DataPortSchema\n * @returns The port name with object streaming, or undefined\n */\nexport function getObjectPortId(schema: DataPortSchema): string | undefined {\n if (typeof schema === \"boolean\") return undefined;\n const props = schema.properties;\n if (!props) return undefined;\n\n for (const [name, prop] of Object.entries(props)) {\n if (!prop || typeof prop === \"boolean\") continue;\n if ((prop as any)[\"x-stream\"] === \"object\") return name;\n }\n return undefined;\n}\n\n/**\n * Returns a map of port names to their JSON Schemas for every output port\n * that declares `\"x-structured-output\": true`.\n *\n * @param schema - The task's output DataPortSchema\n * @returns Map of port-name → JSON Schema for structured output ports\n */\nexport function getStructuredOutputSchemas(schema: DataPortSchema): Map<string, JsonSchema> {\n const result = new Map<string, JsonSchema>();\n if (typeof schema === \"boolean\") return result;\n const props = schema.properties;\n if (!props) return result;\n\n for (const [name, prop] of Object.entries(props)) {\n if (!prop || typeof prop === \"boolean\") continue;\n if ((prop as any)[\"x-structured-output\"] === true) {\n result.set(name, prop as JsonSchema);\n }\n }\n return result;\n}\n\n/**\n * Returns true if the schema has any output port with `\"x-structured-output\": true`.\n */\nexport function hasStructuredOutput(schema: DataPortSchema): boolean {\n return getStructuredOutputSchemas(schema).size > 0;\n}\n",
|
|
23
24
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\nimport type { EntitlementPolicy, EntitlementRule } from \"./EntitlementPolicy\";\nimport { evaluatePolicy } from \"./EntitlementPolicy\";\nimport type { IEntitlementResolver } from \"./EntitlementResolver\";\nimport { PERMISSIVE_RESOLVER } from \"./EntitlementResolver\";\nimport type { ITask } from \"./ITask\";\nimport type { Task } from \"./Task\";\nimport type { EntitlementGrant, TaskEntitlement, TaskEntitlements } from \"./TaskEntitlements\";\n\n// ========================================================================\n// Denial Type\n// ========================================================================\n\n/**\n * Why an entitlement was denied.\n * - `policy-deny`: matched a deny rule\n * - `default-deny`: no rule covered the entitlement\n * - `user-deny`: matched an ask rule and the resolver returned \"deny\"\n */\nexport type EntitlementDenialReason = \"policy-deny\" | \"default-deny\" | \"user-deny\";\n\n/**\n * A single denied entitlement with the reason and the matching rule (if any).\n * Returned by `IEntitlementEnforcer` to give callers enough context to build\n * actionable error messages without re-running policy evaluation.\n *\n * Discriminated union on `reason`:\n * - `policy-deny`: `matchedRule` is always present (it is the deny rule that matched).\n * - `user-deny`: `matchedRule` is always present (it is the ask rule that matched).\n * - `default-deny`: no rule matched at all; `matchedRule` is absent.\n */\nexport type EntitlementDenial =\n | {\n readonly entitlement: TaskEntitlement;\n readonly reason: \"policy-deny\";\n /** The deny rule that explicitly blocked this entitlement. */\n readonly matchedRule: EntitlementRule;\n }\n | {\n readonly entitlement: TaskEntitlement;\n readonly reason: \"default-deny\";\n }\n | {\n readonly entitlement: TaskEntitlement;\n readonly reason: \"user-deny\";\n /** The ask rule that triggered the user prompt. */\n readonly matchedRule: EntitlementRule;\n };\n\n/** Format a denial for inclusion in an error message. */\nexport function formatEntitlementDenial(denial: EntitlementDenial): string {\n switch (denial.reason) {\n case \"policy-deny\":\n return `${denial.entitlement.id} (denied by rule ${denial.matchedRule.id})`;\n case \"user-deny\":\n return `${denial.entitlement.id} (denied by user)`;\n case \"default-deny\":\n return `${denial.entitlement.id} (no matching grant)`;\n }\n}\n\n// ========================================================================\n// Enforcer Interface\n// ========================================================================\n\n/**\n * Interface for checking whether required entitlements are granted.\n * Register a custom implementation via the ServiceRegistry to enforce entitlements.\n *\n * Methods are async because resolving \"ask\" verdicts may require user interaction.\n */\nexport interface IEntitlementEnforcer {\n /**\n * Preflight check: evaluate all required entitlements against the policy.\n * Resolves \"ask\" verdicts via the resolver (prompt + save).\n * Returns the list of denials (non-optional entitlements only) — empty array when all granted.\n */\n checkAll(required: TaskEntitlements): Promise<readonly EntitlementDenial[]>;\n\n /**\n * Runtime check: evaluate a single task's dynamic entitlements.\n * Called during execution for tasks with `hasDynamicEntitlements`.\n */\n checkTask(task: ITask): Promise<readonly EntitlementDenial[]>;\n}\n\n// ========================================================================\n// Default Enforcers\n// ========================================================================\n\n/** Default permissive enforcer — grants everything. */\nexport const PERMISSIVE_ENFORCER: IEntitlementEnforcer = {\n checkAll: async () => [],\n checkTask: async () => [],\n};\n\n/**\n * Creates an enforcer from a unified entitlement policy with deny/grant/ask rules.\n *\n * Evaluation order: Deny → Grant → Ask → Default(deny).\n *\n * @param policy - The policy defining deny, grant, and ask rules\n * @param resolver - Pluggable resolver for handling \"ask\" verdicts. Defaults to PERMISSIVE_RESOLVER.\n */\nexport function createPolicyEnforcer(\n policy: EntitlementPolicy,\n resolver: IEntitlementResolver = PERMISSIVE_RESOLVER\n): IEntitlementEnforcer {\n async function resolveAsks(\n required: TaskEntitlements,\n taskType?: string,\n taskId?: unknown\n ): Promise<readonly EntitlementDenial[]> {\n const results = evaluatePolicy(policy, required);\n const denied: EntitlementDenial[] = [];\n\n for (const result of results) {\n if (result.verdict === \"denied\") {\n if (result.matchedRule) {\n denied.push({\n entitlement: result.entitlement,\n reason: \"policy-deny\",\n matchedRule: result.matchedRule,\n });\n } else {\n denied.push({ entitlement: result.entitlement, reason: \"default-deny\" });\n }\n } else if (result.verdict === \"ask\") {\n const request = {\n entitlement: result.entitlement,\n taskType: taskType ?? \"unknown\",\n taskId: taskId ?? \"unknown\",\n };\n // Check saved answer first; otherwise prompt and save\n let answer = resolver.lookup(request);\n if (answer === undefined) {\n answer = await resolver.prompt(request);\n resolver.save(request, answer);\n }\n if (answer === \"deny\") {\n // ask verdicts always have a matchedRule (the ask rule that fired)\n if (!result.matchedRule) {\n throw new Error(\n `Invariant violation: ask verdict for \"${result.entitlement.id}\" is missing matchedRule`\n );\n }\n denied.push({\n entitlement: result.entitlement,\n reason: \"user-deny\",\n matchedRule: result.matchedRule,\n });\n }\n }\n // \"granted\" — nothing to do\n }\n\n return denied;\n }\n\n return {\n async checkAll(required: TaskEntitlements): Promise<readonly EntitlementDenial[]> {\n return resolveAsks(required);\n },\n\n async checkTask(task: ITask): Promise<readonly EntitlementDenial[]> {\n const entitlements = task.entitlements();\n return resolveAsks(entitlements, (task.constructor as typeof Task).type, task.id);\n },\n };\n}\n\n/**\n * Creates an enforcer from scoped grants that support resource-level matching.\n * This is a convenience wrapper around `createPolicyEnforcer` with no deny or ask rules.\n *\n * Optional entitlements are never denied.\n */\nexport function createScopedEnforcer(grants: readonly EntitlementGrant[]): IEntitlementEnforcer {\n return createPolicyEnforcer({ deny: [], grant: grants, ask: [] });\n}\n\n/**\n * Creates an enforcer from a list of entitlement ID strings (broad grants).\n * Entitlement hierarchy is respected: granting \"network\" covers \"network:http\".\n * All grants are broad (no resource scoping). Optional entitlements are never denied.\n */\nexport function createGrantListEnforcer(grants: readonly string[]): IEntitlementEnforcer {\n return createScopedEnforcer(grants.map((id) => ({ id })));\n}\n\n// ========================================================================\n// Service Token\n// ========================================================================\n\n/** Service token for registering an entitlement enforcer in the ServiceRegistry */\nexport const ENTITLEMENT_ENFORCER = createServiceToken<IEntitlementEnforcer>(\n \"workglow.entitlementEnforcer\"\n);\n",
|
|
24
25
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n EntitlementGrant,\n EntitlementId,\n TaskEntitlement,\n TaskEntitlements,\n} from \"./TaskEntitlements\";\nimport { entitlementCovers, grantCoversResources } from \"./TaskEntitlements\";\n\n// ========================================================================\n// Policy Types\n// ========================================================================\n\n/**\n * A rule matching entitlements by ID and optional resource patterns.\n * Used for deny and ask rules. Same shape as EntitlementGrant.\n */\nexport interface EntitlementRule {\n readonly id: EntitlementId;\n /** Resource patterns (glob-style). When undefined, matches broadly. */\n readonly resources?: readonly string[];\n}\n\n/**\n * A unified entitlement policy combining deny, grant, and ask rules.\n *\n * Evaluation order: Deny → Grant → Ask → Default(deny).\n * - Deny rules override everything — if matched, the entitlement is denied.\n * - Grant rules auto-allow without prompting.\n * - Ask rules trigger a resolver to prompt the user.\n * - If no rule matches, the entitlement is denied.\n */\nexport interface EntitlementPolicy {\n /** Hard denials — checked first, override grants */\n readonly deny: readonly EntitlementRule[];\n /** Grants — auto-allowed without prompting */\n readonly grant: readonly EntitlementGrant[];\n /** Ask rules — require user approval via a resolver */\n readonly ask: readonly EntitlementRule[];\n}\n\n/**\n * The result of evaluating a single entitlement against a policy.\n */\nexport type EntitlementVerdict = \"granted\" | \"denied\" | \"ask\";\n\n/**\n * Per-entitlement result from policy evaluation.\n */\nexport interface EntitlementCheckResult {\n readonly verdict: EntitlementVerdict;\n readonly entitlement: TaskEntitlement;\n /** The rule that produced this verdict (for debugging/UI). Undefined when default-denied. */\n readonly matchedRule?: EntitlementRule;\n}\n\n/** An empty policy that denies everything (no grants, no denies, no asks). */\nexport const EMPTY_POLICY: EntitlementPolicy = Object.freeze({\n deny: Object.freeze([]),\n grant: Object.freeze([]),\n ask: Object.freeze([]),\n});\n\n// ========================================================================\n// Policy Evaluation\n// ========================================================================\n\n/**\n * Check if a rule covers a required entitlement.\n * Uses the same hierarchy and resource matching as grants:\n * - Rule ID must cover the entitlement ID (via `entitlementCovers`)\n * - Rule resources must cover the entitlement resources (via `grantCoversResources`)\n */\nfunction ruleCovers(rule: EntitlementRule, required: TaskEntitlement): boolean {\n if (!entitlementCovers(rule.id, required.id)) return false;\n return grantCoversResources(rule as EntitlementGrant, required);\n}\n\n/**\n * Evaluates a policy against a set of required entitlements.\n *\n * For each required entitlement (skipping optional ones):\n * 1. If any deny rule matches → `\"denied\"`\n * 2. If any grant rule matches → `\"granted\"`\n * 3. If any ask rule matches → `\"ask\"`\n * 4. Otherwise → `\"denied\"` (default deny)\n *\n * This is a pure function with no side effects.\n */\nexport function evaluatePolicy(\n policy: EntitlementPolicy,\n required: TaskEntitlements\n): readonly EntitlementCheckResult[] {\n const results: EntitlementCheckResult[] = [];\n\n for (const entitlement of required.entitlements) {\n if (entitlement.optional) continue;\n\n // 1. Check deny rules first\n const denyMatch = policy.deny.find((rule) => ruleCovers(rule, entitlement));\n if (denyMatch) {\n results.push({ verdict: \"denied\", entitlement, matchedRule: denyMatch });\n continue;\n }\n\n // 2. Check grant rules\n const grantMatch = policy.grant.find((rule) => ruleCovers(rule, entitlement));\n if (grantMatch) {\n results.push({ verdict: \"granted\", entitlement, matchedRule: grantMatch });\n continue;\n }\n\n // 3. Check ask rules\n const askMatch = policy.ask.find((rule) => ruleCovers(rule, entitlement));\n if (askMatch) {\n results.push({ verdict: \"ask\", entitlement, matchedRule: askMatch });\n continue;\n }\n\n // 4. Default deny\n results.push({ verdict: \"denied\", entitlement });\n }\n\n return results;\n}\n\n/**\n * Pure single-entitlement check. Convenience wrapper around `evaluatePolicy`\n * for callers that want the `can(action, resource)` style verdict in one call.\n *\n * Returns the per-entitlement check result with `verdict` (`\"granted\"`, `\"denied\"`,\n * or `\"ask\"`) and the `matchedRule` that produced it. No side effects — no\n * resolver is invoked even for `\"ask\"` verdicts; the caller decides how to\n * handle that.\n */\nexport function can(\n policy: EntitlementPolicy,\n id: EntitlementId,\n resources?: readonly string[]\n): EntitlementCheckResult {\n const required: TaskEntitlement = resources !== undefined ? { id, resources } : { id };\n // evaluatePolicy skips optional entitlements; we always pass a non-optional one.\n const [result] = evaluatePolicy(policy, { entitlements: [required] });\n return result;\n}\n",
|
|
@@ -56,9 +57,11 @@
|
|
|
56
57
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport * from \"./ConditionalTask\";\nexport * from \"./ConditionUtils\";\nexport * from \"./EntitlementEnforcer\";\nexport * from \"./EntitlementPolicy\";\nexport * from \"./EntitlementProfiles\";\nexport * from \"./EntitlementResolver\";\nexport * from \"./FallbackTask\";\nexport * from \"./FallbackTaskRunner\";\nexport * from \"./GraphAsTask\";\nexport * from \"./GraphAsTaskRunner\";\nexport * from \"./InputCompactor\";\nexport * from \"./InputResolver\";\nexport * from \"./ITask\";\nexport * from \"./iterationSchema\";\nexport * from \"./IteratorTask\";\nexport * from \"./IteratorTaskRunner\";\nexport * from \"./JobQueueFactory\";\nexport * from \"./MapTask\";\nexport * from \"./ReduceTask\";\nexport * from \"./StreamTypes\";\nexport * from \"./Task\";\nexport * from \"./TaskEntitlements\";\nexport * from \"./TaskError\";\nexport * from \"./TaskEvents\";\nexport * from \"./TaskJSON\";\nexport * from \"./TaskQueueRegistry\";\nexport * from \"./TaskRegistry\";\nexport * from \"./TaskTypes\";\nexport * from \"./WhileTask\";\nexport * from \"./WhileTaskRunner\";\n\nimport { ConditionalTask } from \"./ConditionalTask\";\nimport { FallbackTask } from \"./FallbackTask\";\nimport { GraphAsTask } from \"./GraphAsTask\";\nimport { MapTask } from \"./MapTask\";\nimport { ReduceTask } from \"./ReduceTask\";\nimport { TaskRegistry } from \"./TaskRegistry\";\nimport { WhileTask } from \"./WhileTask\";\n\nexport const registerBaseTasks = () => {\n const tasks = [GraphAsTask, ConditionalTask, FallbackTask, MapTask, WhileTask, ReduceTask];\n tasks.map(TaskRegistry.registerTask);\n return tasks;\n};\n",
|
|
57
58
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, EventEmitter, EventParameters } from \"@workglow/util\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\n\n/**\n * Service token for TaskGraphRepository\n */\nexport const TASK_GRAPH_REPOSITORY = createServiceToken<TaskGraphRepository>(\n \"taskgraph.taskGraphRepository\"\n);\n\n/**\n * Events that can be emitted by the TaskGraphRepository\n */\nexport type TaskGraphRepositoryEvents = keyof TaskGraphRepositoryEventListeners;\n\nexport type TaskGraphRepositoryEventListeners = {\n graph_saved: (key: string) => void;\n graph_retrieved: (key: string) => void;\n graph_cleared: () => void;\n};\n\nexport type TaskGraphRepositoryEventListener<Event extends TaskGraphRepositoryEvents> =\n TaskGraphRepositoryEventListeners[Event];\n\nexport type TaskGraphRepositoryEventParameters<Event extends TaskGraphRepositoryEvents> =\n EventParameters<TaskGraphRepositoryEventListeners, Event>;\n\n/**\n * Repository class for managing task graphs persistence and retrieval.\n * Provides functionality to save, load, and manipulate task graphs with their associated tasks and data flows.\n */\nexport abstract class TaskGraphRepository {\n /**\n * The type of the repository\n */\n public type = \"TaskGraphRepository\";\n\n /**\n * The event emitter for the task graphs\n */\n private get events() {\n if (!this._events) {\n this._events = new EventEmitter<TaskGraphRepositoryEventListeners>();\n }\n return this._events;\n }\n private _events: EventEmitter<TaskGraphRepositoryEventListeners> | undefined;\n\n /**\n * Registers an event listener for the specified event\n * @param name The event name to listen for\n * @param fn The callback function to execute when the event occurs\n */\n on<Event extends TaskGraphRepositoryEvents>(\n name: Event,\n fn: TaskGraphRepositoryEventListener<Event>\n ) {\n this.events.on(name, fn);\n }\n\n /**\n * Removes an event listener for the specified event\n * @param name The event name to stop listening for\n * @param fn The callback function to remove\n */\n off<Event extends TaskGraphRepositoryEvents>(\n name: Event,\n fn: TaskGraphRepositoryEventListener<Event>\n ) {\n this.events.off(name, fn);\n }\n\n /**\n * Adds an event listener that will only be called once\n * @param name The event name to listen for\n * @param fn The callback function to execute when the event occurs\n */\n once<Event extends TaskGraphRepositoryEvents>(\n name: Event,\n fn: TaskGraphRepositoryEventListener<Event>\n ) {\n this.events.once(name, fn);\n }\n\n /**\n * Returns when the event was emitted (promise form of once)\n * @param name The event name to check\n * @returns true if the event has listeners, false otherwise\n */\n waitOn<Event extends TaskGraphRepositoryEvents>(name: Event) {\n return this.events.waitOn(name) as Promise<TaskGraphRepositoryEventParameters<Event>>;\n }\n\n /**\n * Emits an event (if there are listeners)\n * @param name The event name to emit\n * @param args The event parameters\n */\n emit<Event extends TaskGraphRepositoryEvents>(\n name: Event,\n ...args: TaskGraphRepositoryEventParameters<Event>\n ) {\n this._events?.emit(name, ...args);\n }\n\n /**\n * Saves a task graph to persistent storage\n * @param key The unique identifier for the task graph\n * @param output The task graph to save\n * @emits graph_saved when the operation completes\n */\n abstract saveTaskGraph(key: string, output: TaskGraph): Promise<void>;\n\n /**\n * Retrieves a task graph from persistent storage\n * @param key The unique identifier of the task graph to retrieve\n * @returns The retrieved task graph, or undefined if not found\n * @emits graph_retrieved when the operation completes successfully\n */\n abstract getTaskGraph(key: string): Promise<TaskGraph | undefined>;\n\n /**\n * Clears all task graphs from the repository\n * @emits graph_cleared when the operation completes\n */\n abstract clear(): Promise<void>;\n\n /**\n * Returns the number of task graphs stored in the repository\n * @returns The count of stored task graphs\n */\n abstract size(): Promise<number>;\n}\n",
|
|
58
59
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { BaseTabularStorage } from \"@workglow/storage\";\nimport { DataPortSchemaObject } from \"@workglow/util/schema\";\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport { createGraphFromGraphJSON } from \"../task/TaskJSON\";\nimport { TaskGraphRepository } from \"./TaskGraphRepository\";\n\nexport const TaskGraphSchema = {\n type: \"object\",\n properties: {\n key: { type: \"string\" },\n value: { type: \"string\" },\n },\n additionalProperties: false,\n} satisfies DataPortSchemaObject;\n\nexport const TaskGraphPrimaryKeyNames = [\"key\"] as const;\n\n/**\n * Options for the TaskGraphRepository\n */\nexport type TaskGraphRepositoryStorage = BaseTabularStorage<\n typeof TaskGraphSchema,\n typeof TaskGraphPrimaryKeyNames\n>;\ntype TaskGraphRepositoryOptions = {\n tabularRepository: TaskGraphRepositoryStorage;\n registry?: ServiceRegistry;\n};\n\n/**\n * Repository class for managing task graphs persistence and retrieval.\n * Provides functionality to save, load, and manipulate task graphs with their associated tasks and data flows.\n */\nexport class TaskGraphTabularRepository extends TaskGraphRepository {\n /**\n * The type of the repository\n */\n public override type = \"TaskGraphTabularRepository\";\n\n /**\n * The tabular repository for the task graphs\n */\n tabularRepository: TaskGraphRepositoryStorage;\n\n /**\n * Optional service registry for DI-based task constructor lookups\n */\n readonly registry: ServiceRegistry | undefined;\n\n /**\n * Constructor for the TaskGraphRepository\n * @param options The options for the repository\n */\n constructor({ tabularRepository, registry }: TaskGraphRepositoryOptions) {\n super();\n this.tabularRepository = tabularRepository;\n this.registry = registry;\n }\n\n /**\n * Sets up the database for the repository.\n * Must be called before using any other methods.\n */\n async setupDatabase(): Promise<void> {\n await this.tabularRepository.setupDatabase?.();\n }\n\n /**\n * Saves a task graph to persistent storage\n * @param key The unique identifier for the task graph\n * @param output The task graph to save\n * @emits graph_saved when the operation completes\n */\n async saveTaskGraph(key: string, output: TaskGraph): Promise<void> {\n const value = JSON.stringify(output.toJSON());\n await this.tabularRepository.put({ key, value });\n this.emit(\"graph_saved\", key);\n }\n\n /**\n * Retrieves a task graph from persistent storage\n * @param key The unique identifier of the task graph to retrieve\n * @returns The retrieved task graph, or undefined if not found\n * @emits graph_retrieved when the operation completes successfully\n */\n async getTaskGraph(key: string): Promise<TaskGraph | undefined> {\n const result = await this.tabularRepository.get({ key });\n const value = result?.value;\n if (!value) {\n return undefined;\n }\n const jsonObj = JSON.parse(value);\n const graph = createGraphFromGraphJSON(jsonObj, this.registry);\n\n this.emit(\"graph_retrieved\", key);\n return graph;\n }\n\n /**\n * Clears all task graphs from the repository\n * @emits graph_cleared when the operation completes\n */\n async clear(): Promise<void> {\n await this.tabularRepository.deleteAll();\n this.emit(\"graph_cleared\");\n }\n\n /**\n * Returns the number of task graphs stored in the repository\n * @returns The count of stored task graphs\n */\n async size(): Promise<number> {\n return await this.tabularRepository.size();\n }\n}\n",
|
|
59
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { BaseTabularStorage } from \"@workglow/storage\";\nimport { DataPortSchemaObject } from \"@workglow/util/schema\";\nimport { compress, decompress } from \"@workglow/util/compress\";\nimport { makeFingerprint } from \"@workglow/util\";\nimport { TaskInput, TaskOutput } from \"../task/TaskTypes\";\nimport { TaskOutputRepository } from \"./TaskOutputRepository\";\n\nexport type TaskOutputPrimaryKey = {\n key: string;\n taskType: string;\n};\n\nexport const TaskOutputSchema = {\n type: \"object\",\n properties: {\n key: { type: \"string\" },\n taskType: { type: \"string\" },\n value: { type: \"string\", contentEncoding: \"blob\" },\n createdAt: { type: \"string\", format: \"date-time\" },\n },\n additionalProperties: false,\n} satisfies DataPortSchemaObject;\n\nexport const TaskOutputPrimaryKeyNames = [\"key\", \"taskType\"] as const;\n\nexport type TaskOutputRepositoryStorage = BaseTabularStorage<\n typeof TaskOutputSchema,\n typeof TaskOutputPrimaryKeyNames\n>;\n\nexport type TaskOutputRepositoryOptions = {\n tabularRepository: TaskOutputRepositoryStorage;\n outputCompression?: boolean;\n};\n\n/**\n * Abstract class for managing task outputs in a repository\n * Provides methods for saving, retrieving, and clearing task outputs\n */\nexport class TaskOutputTabularRepository extends TaskOutputRepository {\n /**\n * The tabular repository for the task outputs\n */\n tabularRepository: TaskOutputRepositoryStorage;\n\n /**\n * Constructor for the TaskOutputTabularRepository\n * @param options The options for the repository\n */\n constructor({ tabularRepository, outputCompression = true }: TaskOutputRepositoryOptions) {\n super({ outputCompression });\n this.tabularRepository = tabularRepository;\n this.outputCompression = outputCompression;\n }\n\n /**\n * Sets up the database for the repository.\n * Must be called before using any other methods.\n */\n async setupDatabase(): Promise<void> {\n await this.tabularRepository.setupDatabase?.();\n }\n\n public async keyFromInputs(inputs: TaskInput): Promise<string> {\n return await makeFingerprint(inputs);\n }\n\n /**\n * Saves a task output to the repository\n * @param taskType The type of task to save the output for\n * @param inputs The input parameters for the task\n * @param output The task output to save\n */\n async saveOutput(\n taskType: string,\n inputs: TaskInput,\n output: TaskOutput,\n createdAt = new Date() // for testing purposes\n ): Promise<void> {\n const key = await this.keyFromInputs(inputs);\n const value = JSON.stringify(output);\n if (this.outputCompression) {\n const compressedValue = await compress(value);\n await this.tabularRepository.put({\n taskType,\n key,\n // contentEncoding: \"blob\" allows Uint8Array despite schema type being \"string\"\n value: compressedValue as unknown as string,\n createdAt: createdAt.toISOString(),\n });\n } else {\n const valueBuffer = Buffer.from(value);\n await this.tabularRepository.put({\n taskType,\n key,\n // contentEncoding: \"blob\" allows Buffer/Uint8Array despite schema type being \"string\"\n value: valueBuffer as unknown as string,\n createdAt: createdAt.toISOString(),\n });\n }\n this.emit(\"output_saved\", taskType);\n }\n\n /**\n * Retrieves a task output from the repository\n * @param taskType The type of task to retrieve the output for\n * @param inputs The input parameters for the task\n * @returns The retrieved task output, or undefined if not found\n */\n async getOutput(taskType: string, inputs: TaskInput): Promise<TaskOutput | undefined> {\n const key = await this.keyFromInputs(inputs);\n const output = await this.tabularRepository.get({ key, taskType });\n this.emit(\"output_retrieved\", taskType);\n if (output?.value) {\n if (this.outputCompression) {\n // Coerce JSON-serialized binary (from filesystem JSON store) back to Uint8Array\n const raw: unknown = output.value as unknown;\n const bytes: Uint8Array =\n raw instanceof Uint8Array\n ? raw\n : Array.isArray(raw)\n ? new Uint8Array(raw as number[])\n : raw && typeof raw === \"object\"\n ? new Uint8Array(\n Object.keys(raw as Record<string, number>)\n .filter((k) => /^\\d+$/.test(k))\n .sort((a, b) => Number(a) - Number(b))\n .map((k) => (raw as Record<string, number>)[k])\n )\n : new Uint8Array();\n const decompressedValue = await decompress(bytes);\n const value = JSON.parse(decompressedValue) as TaskOutput;\n return value as TaskOutput;\n } else {\n const stringValue = output.value.toString();\n const value = JSON.parse(stringValue) as TaskOutput;\n return value as TaskOutput;\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * Clears all task outputs from the repository\n * @emits output_cleared when the operation completes\n */\n async clear(): Promise<void> {\n await this.tabularRepository.deleteAll();\n this.emit(\"output_cleared\");\n }\n\n /**\n * Returns the number of task outputs stored in the repository\n * @returns The count of stored task outputs\n */\n async size(): Promise<number> {\n return await this.tabularRepository.size();\n }\n\n /**\n * Clear all task outputs from the repository that are older than the given date\n * @param olderThanInMs The time in milliseconds to clear task outputs older than\n */\n async clearOlderThan(olderThanInMs: number): Promise<void> {\n const date = new Date(Date.now() - olderThanInMs).toISOString();\n await this.tabularRepository.deleteSearch({ createdAt: { value: date, operator: \"<\" } });\n this.emit(\"output_pruned\");\n }\n}\n"
|
|
60
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { BaseTabularStorage } from \"@workglow/storage\";\nimport { DataPortSchemaObject } from \"@workglow/util/schema\";\nimport { compress, decompress } from \"@workglow/util/compress\";\nimport { makeFingerprint } from \"@workglow/util\";\nimport { TaskInput, TaskOutput } from \"../task/TaskTypes\";\nimport { TaskOutputRepository } from \"./TaskOutputRepository\";\n\nexport type TaskOutputPrimaryKey = {\n key: string;\n taskType: string;\n};\n\nexport const TaskOutputSchema = {\n type: \"object\",\n properties: {\n key: { type: \"string\" },\n taskType: { type: \"string\" },\n value: { type: \"string\", contentEncoding: \"blob\" },\n createdAt: { type: \"string\", format: \"date-time\" },\n },\n additionalProperties: false,\n} satisfies DataPortSchemaObject;\n\nexport const TaskOutputPrimaryKeyNames = [\"key\", \"taskType\"] as const;\n\nexport type TaskOutputRepositoryStorage = BaseTabularStorage<\n typeof TaskOutputSchema,\n typeof TaskOutputPrimaryKeyNames\n>;\n\nexport type TaskOutputRepositoryOptions = {\n tabularRepository: TaskOutputRepositoryStorage;\n outputCompression?: boolean;\n};\n\n/**\n * Abstract class for managing task outputs in a repository\n * Provides methods for saving, retrieving, and clearing task outputs\n */\nexport class TaskOutputTabularRepository extends TaskOutputRepository {\n /**\n * The tabular repository for the task outputs\n */\n tabularRepository: TaskOutputRepositoryStorage;\n\n /**\n * Constructor for the TaskOutputTabularRepository\n * @param options The options for the repository\n */\n constructor({ tabularRepository, outputCompression = true }: TaskOutputRepositoryOptions) {\n super({ outputCompression });\n this.tabularRepository = tabularRepository;\n this.outputCompression = outputCompression;\n }\n\n /**\n * Sets up the database for the repository.\n * Must be called before using any other methods.\n */\n async setupDatabase(): Promise<void> {\n await this.tabularRepository.setupDatabase?.();\n }\n\n public async keyFromInputs(inputs: TaskInput): Promise<string> {\n return await makeFingerprint(inputs);\n }\n\n /**\n * Saves a task output to the repository\n * @param taskType The type of task to save the output for\n * @param inputs The input parameters for the task\n * @param output The task output to save\n */\n async saveOutput(\n taskType: string,\n inputs: TaskInput,\n output: TaskOutput,\n createdAt = new Date() // for testing purposes\n ): Promise<void> {\n const key = await this.keyFromInputs(inputs);\n const value = JSON.stringify(output);\n if (this.outputCompression) {\n const compressedValue = await compress(value);\n await this.tabularRepository.put({\n taskType,\n key,\n // contentEncoding: \"blob\" allows Uint8Array despite schema type being \"string\"\n value: compressedValue as unknown as string,\n createdAt: createdAt.toISOString(),\n });\n } else {\n const valueBuffer = Buffer.from(value);\n await this.tabularRepository.put({\n taskType,\n key,\n // contentEncoding: \"blob\" allows Buffer/Uint8Array despite schema type being \"string\"\n value: valueBuffer as unknown as string,\n createdAt: createdAt.toISOString(),\n });\n }\n this.emit(\"output_saved\", taskType);\n }\n\n /**\n * Retrieves a task output from the repository\n * @param taskType The type of task to retrieve the output for\n * @param inputs The input parameters for the task\n * @returns The retrieved task output, or undefined if not found\n */\n async getOutput(taskType: string, inputs: TaskInput): Promise<TaskOutput | undefined> {\n const key = await this.keyFromInputs(inputs);\n const output = await this.tabularRepository.get({ key, taskType });\n this.emit(\"output_retrieved\", taskType);\n if (output?.value) {\n if (this.outputCompression) {\n // Coerce JSON-serialized binary (from filesystem JSON store) back to Uint8Array\n const raw: unknown = output.value as unknown;\n const bytes: Uint8Array =\n raw instanceof Uint8Array\n ? raw\n : Array.isArray(raw)\n ? new Uint8Array(raw as number[])\n : raw && typeof raw === \"object\"\n ? new Uint8Array(\n Object.keys(raw as Record<string, number>)\n .filter((k) => /^\\d+$/.test(k))\n .sort((a, b) => Number(a) - Number(b))\n .map((k) => (raw as Record<string, number>)[k])\n )\n : new Uint8Array();\n const decompressedValue = await decompress(bytes);\n const value = JSON.parse(decompressedValue) as TaskOutput;\n return value as TaskOutput;\n } else {\n const stringValue = output.value.toString();\n const value = JSON.parse(stringValue) as TaskOutput;\n return value as TaskOutput;\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * Clears all task outputs from the repository\n * @emits output_cleared when the operation completes\n */\n async clear(): Promise<void> {\n await this.tabularRepository.deleteAll();\n this.emit(\"output_cleared\");\n }\n\n /**\n * Returns the number of task outputs stored in the repository\n * @returns The count of stored task outputs\n */\n async size(): Promise<number> {\n return await this.tabularRepository.size();\n }\n\n /**\n * Clear all task outputs from the repository that are older than the given date\n * @param olderThanInMs The time in milliseconds to clear task outputs older than\n */\n async clearOlderThan(olderThanInMs: number): Promise<void> {\n const date = new Date(Date.now() - olderThanInMs).toISOString();\n await this.tabularRepository.deleteSearch({ createdAt: { value: date, operator: \"<\" } });\n this.emit(\"output_pruned\");\n }\n}\n",
|
|
61
|
+
"/**\n * @copyright\n * Copyright 2026 Steven Roussey\n * All Rights Reserved\n */\nexport {\n registerPortCodec,\n getPortCodec,\n _resetPortCodecsForTests,\n} from \"@workglow/util\";\nexport type { PortCodec } from \"@workglow/util\";\n",
|
|
62
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport * from \"./common\";\n\nimport { registerRefcountablePredicate, type Refcountable } from \"./refcountable\";\n\n// Register the refcountable predicate so TaskGraphRunner applies fanout\n// retain to GpuImage values flowing across dataflow edges. Lives here\n// (rather than inside @workglow/util/media) because util cannot import\n// from task-graph.\n//\n// Duck-typed for cross-bundle safety and to keep the node-side typecheck\n// off the WebGpuImage value (which is a type-only re-export here).\nregisterRefcountablePredicate(\n (v): v is Refcountable =>\n !!v &&\n typeof v === \"object\" &&\n \"backend\" in v &&\n \"retain\" in v &&\n \"release\" in v &&\n \"materialize\" in v,\n);\n"
|
|
60
63
|
],
|
|
61
|
-
"mappings": "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",
|
|
62
|
-
"debugId": "
|
|
64
|
+
"mappings": "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",
|
|
65
|
+
"debugId": "3044ECF32B8CA32464756E2164756E21",
|
|
63
66
|
"names": []
|
|
64
67
|
}
|