@workglow/task-graph 0.0.123 → 0.0.125
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/README.md +4 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +652 -11
- package/dist/browser.js.map +8 -7
- package/dist/bun.js +11 -11
- package/dist/bun.js.map +5 -5
- package/dist/debug/console/ConsoleFormatters.d.ts +45 -0
- package/dist/debug/console/ConsoleFormatters.d.ts.map +1 -0
- package/dist/node.js +11 -11
- package/dist/node.js.map +5 -5
- package/dist/task/ITask.d.ts +5 -5
- package/dist/task/ITask.d.ts.map +1 -1
- package/dist/task/Task.d.ts +4 -4
- package/dist/task/Task.d.ts.map +1 -1
- package/dist/task/TaskRunner.d.ts.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/debug/README.md +115 -0
package/dist/browser.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/task/TaskTypes.ts", "../src/task-graph/Dataflow.ts", "../src/task-graph/GraphSchemaUtils.ts", "../src/task/TaskError.ts", "../src/storage/TaskOutputRepository.ts", "../src/task/InputResolver.ts", "../src/task/StreamTypes.ts", "../src/task/TaskRunner.ts", "../src/task/Task.ts", "../src/task/ConditionUtils.ts", "../src/task/ConditionalTask.ts", "../src/task-graph/TaskGraphScheduler.ts", "../src/task-graph/TaskGraphRunner.ts", "../src/task/GraphAsTaskRunner.ts", "../src/task/GraphAsTask.ts", "../src/task-graph/Conversions.ts", "../src/task-graph/TaskGraphEvents.ts", "../src/task-graph/TaskGraph.ts", "../src/common.ts", "../src/task-graph/GraphToWorkflowCode.ts", "../src/task-graph/Workflow.ts", "../src/task/index.ts", "../src/task/FallbackTask.ts", "../src/task/FallbackTaskRunner.ts", "../src/task/IteratorTask.ts", "../src/task/IteratorTaskRunner.ts", "../src/task/WhileTask.ts", "../src/task/WhileTaskRunner.ts", "../src/task/iterationSchema.ts", "../src/task/JobQueueFactory.ts", "../src/task/JobQueueTask.ts", "../src/task/TaskQueueRegistry.ts", "../src/task/MapTask.ts", "../src/task/ReduceTask.ts", "../src/task/TaskJSON.ts", "../src/task/TaskRegistry.ts", "../src/storage/TaskGraphRepository.ts", "../src/storage/TaskGraphTabularRepository.ts", "../src/storage/TaskOutputTabularRepository.ts"],
|
|
3
|
+
"sources": ["../src/task/TaskTypes.ts", "../src/task-graph/Dataflow.ts", "../src/task-graph/GraphSchemaUtils.ts", "../src/task/TaskError.ts", "../src/storage/TaskOutputRepository.ts", "../src/task/InputResolver.ts", "../src/task/StreamTypes.ts", "../src/task/TaskRunner.ts", "../src/task/Task.ts", "../src/task/ConditionUtils.ts", "../src/task/ConditionalTask.ts", "../src/task-graph/TaskGraphScheduler.ts", "../src/task-graph/TaskGraphRunner.ts", "../src/task/GraphAsTaskRunner.ts", "../src/task/GraphAsTask.ts", "../src/task-graph/Conversions.ts", "../src/task-graph/TaskGraphEvents.ts", "../src/task-graph/TaskGraph.ts", "../src/common.ts", "../src/task-graph/GraphToWorkflowCode.ts", "../src/task-graph/Workflow.ts", "../src/task/index.ts", "../src/task/FallbackTask.ts", "../src/task/FallbackTaskRunner.ts", "../src/task/IteratorTask.ts", "../src/task/IteratorTaskRunner.ts", "../src/task/WhileTask.ts", "../src/task/WhileTaskRunner.ts", "../src/task/iterationSchema.ts", "../src/task/JobQueueFactory.ts", "../src/task/JobQueueTask.ts", "../src/task/TaskQueueRegistry.ts", "../src/task/MapTask.ts", "../src/task/ReduceTask.ts", "../src/task/TaskJSON.ts", "../src/task/TaskRegistry.ts", "../src/storage/TaskGraphRepository.ts", "../src/storage/TaskGraphTabularRepository.ts", "../src/storage/TaskOutputTabularRepository.ts", "../src/debug/console/ConsoleFormatters.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 { type DataPortSchema, type FromSchema, StripJSONSchema } from \"@workglow/util/schema\";\nimport type { Task } from \"./Task\";\n\n/**\n * Enum representing the possible states of a task\n *\n * PENDING -> PROCESSING -> COMPLETED\n * PENDING -> PROCESSING -> STREAMING -> COMPLETED\n * PENDING -> PROCESSING -> ABORTING -> FAILED\n * PENDING -> PROCESSING -> FAILED\n * PENDING -> DISABLED\n */\nexport type TaskStatus =\n | \"PENDING\"\n | \"DISABLED\"\n | \"PROCESSING\"\n | \"STREAMING\"\n | \"COMPLETED\"\n | \"ABORTING\"\n | \"FAILED\";\n\nexport const TaskStatus = {\n /** Task is created but not yet started */\n PENDING: \"PENDING\",\n /** Task is disabled due to conditional logic */\n DISABLED: \"DISABLED\",\n /** Task is currently running */\n PROCESSING: \"PROCESSING\",\n /** Task has begun producing streaming output chunks */\n STREAMING: \"STREAMING\",\n /** Task has completed successfully */\n COMPLETED: \"COMPLETED\",\n /** Task is in the process of being aborted */\n ABORTING: \"ABORTING\",\n /** Task has failed */\n FAILED: \"FAILED\",\n} as const satisfies Record<TaskStatus, TaskStatus>;\n\n// ========================================================================\n// Core Task Data Types\n// ========================================================================\n\nexport interface DataPorts extends StripJSONSchema<Record<string, any>> {\n [key: string]: unknown;\n}\n\n/** Type for task input data */\nexport type TaskInput = DataPorts;\n\n/** Type for task output data */\nexport type TaskOutput = DataPorts;\n\nexport type CompoundTaskOutput =\n | {\n outputs: TaskOutput[];\n }\n | {\n [key: string]: unknown | unknown[] | undefined;\n };\n\n/** Type for task type names */\nexport type TaskTypeName = string;\n\n// ========================================================================\n// Task Configuration Schema and Types\n// ========================================================================\n\n/**\n * Base JSON Schema for task configuration.\n * Exported so subclasses can compose their own schema with:\n * `...TaskConfigSchema[\"properties\"]`\n *\n * Fields:\n * - id: unique task identifier (any type)\n * - title: human-readable name for the task instance (overrides static title)\n * - description: human-readable description (overrides static description)\n * - cacheable: design-time cache flag (runtime override goes in IRunConfig)\n * - inputSchema: dynamic input schema override (for tasks like InputTask)\n * - outputSchema: dynamic output schema override (for tasks like OutputTask)\n * - extras: arbitrary user data serialized with the task JSON\n * - timeout: max execution time in milliseconds (auto-aborts with TaskTimeoutError)\n */\nexport const TaskConfigSchema = {\n type: \"object\",\n properties: {\n id: {\n \"x-ui-hidden\": true,\n },\n title: { type: \"string\" },\n description: { type: \"string\" },\n cacheable: { type: \"boolean\" },\n timeout: { type: \"number\", description: \"Max execution time in milliseconds\" },\n inputSchema: {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n \"x-ui-hidden\": true,\n },\n outputSchema: {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n \"x-ui-hidden\": true,\n },\n extras: {\n type: \"object\",\n additionalProperties: true,\n \"x-ui-hidden\": true,\n },\n },\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\ntype BaseFromSchema = FromSchema<typeof TaskConfigSchema>;\n\n/**\n * Base type for task configuration, derived from TaskConfigSchema.\n * Use `TaskConfigSchema` when building JSON schemas in subclasses.\n * Use this type when declaring the Config generic parameter.\n */\nexport type TaskConfig = Omit<BaseFromSchema, \"id\" | \"inputSchema\" | \"outputSchema\"> & {\n /** Unique identifier for the task (uuid4 by default) */\n id?: unknown;\n /** Dynamic input schema override for the task instance */\n inputSchema?: DataPortSchema;\n /** Dynamic output schema override for the task instance */\n outputSchema?: DataPortSchema;\n};\n\n/** Type for task ID */\nexport type TaskIdType = Task<TaskInput, TaskOutput, TaskConfig>[\"config\"][\"id\"];\n",
|
|
6
6
|
"/**\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 {\n DataflowEventListener,\n DataflowEventListeners,\n DataflowEventParameters,\n DataflowEvents,\n} from \"./DataflowEvents\";\nimport { TaskGraph } from \"./TaskGraph\";\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.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 return {\n sourceTaskId: this.sourceTaskId,\n sourceTaskPortId: this.sourceTaskPortId,\n targetTaskId: this.targetTaskId,\n targetTaskPortId: this.targetTaskPortId,\n };\n }\n\n semanticallyCompatible(\n graph: TaskGraph,\n dataflow: Dataflow\n ): \"static\" | \"runtime\" | \"incompatible\" {\n // TODO(str): this is inefficient\n const targetSchema = graph.getTask(dataflow.targetTaskId)!.inputSchema();\n const sourceSchema = graph.getTask(dataflow.sourceTaskId)!.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 const semanticallyCompatible = areSemanticallyCompatible(\n sourceSchemaProperty,\n targetSchemaProperty\n );\n\n return semanticallyCompatible;\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",
|
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
"/**\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",
|
|
10
10
|
"/**\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 */\nfunction getSchemaFormat(schema: unknown): string | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\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 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 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 */\nfunction getObjectSchema(\n schema: unknown\n): (Record<string, unknown> & { properties: Record<string, unknown> }) | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\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 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 */\nfunction getFormatPrefix(format: string): string {\n const colonIndex = format.indexOf(\":\");\n return colonIndex >= 0 ? format.substring(0, colonIndex) : format;\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): 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 // Try full format first (e.g., \"dataset:document-chunk\"), then fall back to prefix (e.g., \"dataset\")\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) {\n resolved[key] = await resolveSchemaInputs(\n value as Record<string, unknown>,\n objectSchema as DataPortSchema,\n config\n );\n }\n }\n }\n\n return resolved as T;\n}\n",
|
|
11
11
|
"/**\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 * Each `objectDelta` is a progressively more complete partial object snapshot.\n * Consumers should replace (not merge) their state with the latest delta.\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",
|
|
12
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n getTelemetryProvider,\n globalServiceRegistry,\n ServiceRegistry,\n SpanStatusCode,\n type ISpan,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { ensureTask, type Taskish } from \"../task-graph/Conversions\";\nimport { resolveSchemaInputs } from \"./InputResolver\";\nimport { IRunConfig, ITask } from \"./ITask\";\nimport { ITaskRunner } from \"./ITaskRunner\";\nimport {\n getOutputStreamMode,\n getStreamingPorts,\n isTaskStreamable,\n type StreamEvent,\n type StreamMode,\n} from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport {\n TaskAbortedError,\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 reactiveRunning = 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 * 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 try {\n this.task.setInput(overrides);\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 isValid = await this.task.validateInput(this.task.runInputData);\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 const inputs: Input = this.task.runInputData as Input;\n let outputs: Output | undefined;\n\n const isStreamable = isTaskStreamable(this.task);\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 this.task.runOutputData = await this.executeTaskReactive(inputs, outputs);\n } else {\n this.task.runOutputData = await this.executeTaskReactive(inputs, 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 reactive mode\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runReactive(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 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.handleStartReactive();\n\n try {\n const isValid = await this.task.validateInput(this.task.runInputData);\n if (!isValid) {\n throw new TaskInvalidInputError(\"Invalid input data\");\n }\n\n const resultReactive = await this.executeTaskReactive(\n this.task.runInputData as Input,\n this.task.runOutputData as Output\n );\n\n this.task.runOutputData = resultReactive;\n\n await this.handleCompleteReactive();\n } catch (err: any) {\n await this.handleErrorReactive();\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 });\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 });\n return await this.executeTaskReactive(input, result || ({} as Output));\n }\n\n /**\n * Protected method for reactive execution delegation\n */\n protected async executeTaskReactive(input: Input, output: Output): Promise<Output> {\n const reactiveResult = await this.task.executeReactive(input, output, { own: this.own });\n return Object.assign({}, output, reactiveResult ?? {}) as Output;\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 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 accumulatedObjects.set(event.port, event.objectDelta);\n }\n // Update runOutputData progressively so listeners see growing state\n this.task.runOutputData = {\n ...this.task.runOutputData,\n [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 const reactiveResult = await this.executeTaskReactive(\n input,\n (this.task.runOutputData as Output) || ({} as Output)\n );\n return reactiveResult;\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 // 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 if (config.signal?.aborted) {\n this.abortController.abort();\n } else if (config.signal) {\n config.signal.addEventListener(\"abort\", () => this.abortController!.abort(), { once: true });\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 // 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 if (config.updateProgress) {\n this.updateProgress = config.updateProgress;\n }\n\n if (config.registry) {\n this.registry = config.registry;\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 handleStartReactive(): Promise<void> {\n this.reactiveRunning = 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 this.task.emit(\"abort\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleAbortReactive(): Promise<void> {\n this.reactiveRunning = 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 handleCompleteReactive(): Promise<void> {\n this.reactiveRunning = 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 this.task.error =\n err instanceof TaskError ? err : new TaskFailedError(err?.message || \"Task failed\");\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 handleErrorReactive(): Promise<void> {\n this.reactiveRunning = 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",
|
|
13
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { compileSchema, type DataPortSchema, type SchemaNode } from \"@workglow/util/schema\";\nimport {\n deepEqual,\n EventEmitter,\n uuid4,\n type ServiceRegistry,\n} from \"@workglow/util\";\nimport { DATAFLOW_ALL_PORTS } from \"../task-graph/Dataflow\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport type { IExecuteContext, IExecuteReactiveContext, IRunConfig, ITask } from \"./ITask\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskError,\n TaskInvalidInputError,\n} from \"./TaskError\";\nimport {\n type TaskEventListener,\n type TaskEventListeners,\n type TaskEventParameters,\n type TaskEvents,\n} from \"./TaskEvents\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n TaskConfigSchema,\n TaskStatus,\n type TaskConfig,\n type TaskIdType,\n type TaskInput,\n type TaskOutput,\n type TaskTypeName,\n} 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 executeReactive)\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 * 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 executeReactive that does nothing.\n * Subclasses should override this to provide actual reactive functionality.\n *\n * This is generally for UI updating, and should be lightweight.\n * @param input The input to the task\n * @param output The current output of the task\n * @returns The updated output of the task or undefined if no changes\n */\n public async executeReactive(\n _input: Input,\n output: Output,\n _context: IExecuteReactiveContext\n ): Promise<Output | undefined> {\n return output;\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 reactive mode\n * Delegates to the task runner\n *\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runReactive(overrides: Partial<Input> = {}): Promise<Output> {\n return this.runner.runReactive(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 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 * 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 callerDefaultInputs Default input values provided by the caller\n * @param config Configuration for the task\n */\n constructor(\n callerDefaultInputs: Partial<Input> = {},\n config: Partial<Config> = {},\n runConfig: Partial<IRunConfig> = {}\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 config\n ) as Config;\n if (baseConfig.id === undefined) {\n (baseConfig as Record<string, unknown>).id = uuid4();\n }\n this.config = this.validateAndApplyConfigDefaults(baseConfig);\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: Record<string, any>): void {\n // Strip symbol properties (like [$JSONSchema]) before storing defaults\n this.defaults = this.stripSymbols(defaults) as Record<string, any>;\n }\n\n /**\n * Sets input values for the task\n *\n * @param input Input values to set\n */\n public setInput(input: Record<string, any>): 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 (this.runInputData[inputId] === undefined && (prop as any).default !== undefined) {\n this.runInputData[inputId] = (prop as any).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: Record<string, any>,\n _registry: ServiceRegistry\n ): Promise<Record<string, any>> {\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 as any).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: Partial<Input>): Promise<boolean> {\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 throw new TaskInvalidInputError(\n `Input ${JSON.stringify(Object.keys(input))} does not match schema: ${errorMessages.join(\", \")}`\n );\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 * 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 // 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 JobQueueTask).\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.config 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 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",
|
|
12
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n getTelemetryProvider,\n globalServiceRegistry,\n ServiceRegistry,\n SpanStatusCode,\n type ISpan,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { ensureTask, type Taskish } from \"../task-graph/Conversions\";\nimport { resolveSchemaInputs } from \"./InputResolver\";\nimport { IRunConfig, ITask } from \"./ITask\";\nimport { ITaskRunner } from \"./ITaskRunner\";\nimport {\n getOutputStreamMode,\n getStreamingPorts,\n isTaskStreamable,\n type StreamEvent,\n type StreamMode,\n} from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport {\n TaskAbortedError,\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 reactiveRunning = 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 * 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 try {\n this.task.setInput(overrides);\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 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 this.task.runOutputData = await this.executeTaskReactive(inputs, outputs);\n } else {\n this.task.runOutputData = await this.executeTaskReactive(inputs, 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 reactive mode\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runReactive(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 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.handleStartReactive();\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 resultReactive = await this.executeTaskReactive(\n inputs,\n this.task.runOutputData as Output\n );\n\n this.task.runOutputData = resultReactive;\n\n await this.handleCompleteReactive();\n } catch (err: any) {\n await this.handleErrorReactive();\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 });\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 });\n return await this.executeTaskReactive(input, result || ({} as Output));\n }\n\n /**\n * Protected method for reactive execution delegation\n */\n protected async executeTaskReactive(input: Input, output: Output): Promise<Output> {\n const reactiveResult = await this.task.executeReactive(input, output, { own: this.own });\n return Object.assign({}, output, reactiveResult ?? {}) as Output;\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 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 accumulatedObjects.set(event.port, event.objectDelta);\n }\n // Update runOutputData progressively so listeners see growing state\n this.task.runOutputData = {\n ...this.task.runOutputData,\n [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 const reactiveResult = await this.executeTaskReactive(\n input,\n (this.task.runOutputData as Output) || ({} as Output)\n );\n return reactiveResult;\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 // 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 if (config.signal?.aborted) {\n this.abortController.abort();\n } else if (config.signal) {\n config.signal.addEventListener(\"abort\", () => this.abortController!.abort(), { once: true });\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 // 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 if (config.updateProgress) {\n this.updateProgress = config.updateProgress;\n }\n\n if (config.registry) {\n this.registry = config.registry;\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 handleStartReactive(): Promise<void> {\n this.reactiveRunning = 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 this.task.emit(\"abort\", this.task.error);\n this.task.emit(\"status\", this.task.status);\n }\n\n protected async handleAbortReactive(): Promise<void> {\n this.reactiveRunning = 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 handleCompleteReactive(): Promise<void> {\n this.reactiveRunning = 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 this.task.error =\n err instanceof TaskError ? err : new TaskFailedError(err?.message || \"Task failed\");\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 handleErrorReactive(): Promise<void> {\n this.reactiveRunning = 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",
|
|
13
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { compileSchema, type DataPortSchema, type SchemaNode } from \"@workglow/util/schema\";\nimport { deepEqual, EventEmitter, uuid4, type ServiceRegistry } from \"@workglow/util\";\nimport { DATAFLOW_ALL_PORTS } from \"../task-graph/Dataflow\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport type { IExecuteContext, IExecuteReactiveContext, IRunConfig, ITask } from \"./ITask\";\nimport {\n TaskAbortedError,\n TaskConfigurationError,\n TaskError,\n TaskInvalidInputError,\n} from \"./TaskError\";\nimport {\n type TaskEventListener,\n type TaskEventListeners,\n type TaskEventParameters,\n type TaskEvents,\n} from \"./TaskEvents\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n TaskConfigSchema,\n TaskStatus,\n type TaskConfig,\n type TaskIdType,\n type TaskInput,\n type TaskOutput,\n type TaskTypeName,\n} 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 executeReactive)\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 * 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 executeReactive that does nothing.\n * Subclasses should override this to provide actual reactive functionality.\n *\n * This is generally for UI updating, and should be lightweight.\n * @param input The input to the task\n * @param output The current output of the task\n * @returns The updated output of the task or undefined if no changes\n */\n public async executeReactive(\n _input: Input,\n output: Output,\n _context: IExecuteReactiveContext\n ): Promise<Output | undefined> {\n return output;\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 reactive mode\n * Delegates to the task runner\n *\n * @param overrides Optional input overrides\n * @returns The task output\n */\n public async runReactive(overrides: Partial<Input> = {}): Promise<Output> {\n return this.runner.runReactive(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 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 * 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 callerDefaultInputs Default input values provided by the caller\n * @param config Configuration for the task\n */\n constructor(\n callerDefaultInputs: Partial<Input> = {},\n config: Partial<Config> = {},\n runConfig: Partial<IRunConfig> = {}\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 config\n ) as Config;\n if (baseConfig.id === undefined) {\n (baseConfig as Record<string, unknown>).id = uuid4();\n }\n this.config = this.validateAndApplyConfigDefaults(baseConfig);\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 (this.runInputData[inputId] === undefined && (prop as any).default !== undefined) {\n this.runInputData[inputId] = (prop as any).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 as any).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 throw new TaskInvalidInputError(\n `Input ${JSON.stringify(Object.keys(input))} does not match schema: ${errorMessages.join(\", \")}`\n );\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 * 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 // 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 JobQueueTask).\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.config 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 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",
|
|
14
14
|
"/**\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",
|
|
15
15
|
"/**\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, type UIConditionConfig } from \"./ConditionUtils\";\nimport type { IExecuteContext } from \"./ITask\";\nimport { Task } from \"./Task\";\nimport {\n TaskConfigSchema,\n type TaskConfig,\n type TaskInput,\n type TaskOutput,\n type TaskTypeName,\n} 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 type: TaskTypeName = \"ConditionalTask\";\n\n /** Category for UI organization and filtering */\n static category = \"Flow Control\";\n\n /** Human-readable title for display in UIs */\n static title = \"Condition\";\n static description = \"Route data based on conditions\";\n\n /** This task has dynamic schemas that change based on branch configuration */\n static hasDynamicSchemas: boolean = true;\n\n public static configSchema(): DataPortSchema {\n return conditionalTaskConfigSchema;\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 async execute(input: Input, context: IExecuteContext): 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().warn(`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 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 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 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 inputSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n } as const satisfies DataPortSchema;\n }\n}\n",
|
|
16
16
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ITask } from \"../task/ITask\";\nimport { getPortStreamMode } from \"../task/StreamTypes\";\nimport { TaskStatus } from \"../task/TaskTypes\";\nimport { TaskGraph } from \"./TaskGraph\";\n\n/**\n * Interface for task graph schedulers\n */\nexport interface ITaskGraphScheduler {\n /**\n * Gets an async iterator of tasks that can be executed\n * @returns AsyncIterator of tasks that resolves to each task when it's ready\n */\n tasks(): AsyncIterableIterator<ITask>;\n\n /**\n * Notifies the scheduler that a task has completed\n * @param taskId The ID of the completed task\n */\n onTaskCompleted(taskId: unknown): void;\n\n /**\n * Notifies the scheduler that a task has begun streaming output.\n * Streaming tasks may unblock downstream streamable tasks early.\n * @param taskId The ID of the streaming task\n */\n onTaskStreaming(taskId: unknown): void;\n\n /**\n * Resets the scheduler state\n */\n reset(): void;\n}\n\n/**\n * Sequential scheduler that executes one task at a time in topological order\n * Useful for debugging and understanding task execution flow\n */\nexport class TopologicalScheduler implements ITaskGraphScheduler {\n private sortedNodes: ITask[];\n private currentIndex: number;\n\n constructor(private dag: TaskGraph) {\n this.sortedNodes = [];\n this.currentIndex = 0;\n this.reset();\n }\n\n async *tasks(): AsyncIterableIterator<ITask> {\n while (this.currentIndex < this.sortedNodes.length) {\n yield this.sortedNodes[this.currentIndex++];\n }\n }\n\n onTaskCompleted(taskId: unknown): void {\n // Topological scheduler doesn't need to track individual task completion\n }\n\n onTaskStreaming(taskId: unknown): void {\n // Topological scheduler doesn't support streaming-aware scheduling\n }\n\n reset(): void {\n this.sortedNodes = this.dag.topologicallySortedNodes();\n this.currentIndex = 0;\n }\n}\n\n/**\n * Event-driven scheduler that executes tasks as soon as their dependencies are satisfied\n * Most efficient for parallel execution but requires completion notifications\n */\nexport class DependencyBasedScheduler implements ITaskGraphScheduler {\n private completedTasks: Set<unknown>;\n private streamingTasks: Set<unknown>;\n private pendingTasks: Set<ITask>;\n private nextResolver: ((task: ITask | null) => void) | null = null;\n\n constructor(private dag: TaskGraph) {\n this.completedTasks = new Set();\n this.streamingTasks = new Set();\n this.pendingTasks = new Set();\n this.reset();\n }\n\n private isTaskReady(task: ITask): boolean {\n // DISABLED tasks are never ready - they should be skipped\n if (task.status === TaskStatus.DISABLED) {\n return false;\n }\n\n const sourceDataflows = this.dag.getSourceDataflows(task.id);\n\n // If task has incoming dataflows, check if all are DISABLED\n // (In that case, task will be disabled by propagateDisabledStatus, not ready to run)\n if (sourceDataflows.length > 0) {\n const allIncomingDisabled = sourceDataflows.every((df) => df.status === TaskStatus.DISABLED);\n if (allIncomingDisabled) {\n return false;\n }\n }\n\n // A task is ready if all its non-disabled dependencies are completed.\n // DISABLED dataflows are considered \"satisfied\" (their branch was not taken).\n //\n // Per-edge streaming: when the source output port AND the target input port\n // both declare matching `x-stream`, the dependency can be satisfied by\n // STREAMING status (not just COMPLETED). Edges where the target port does\n // NOT accept streams still require full completion.\n const activeDataflows = sourceDataflows.filter((df) => df.status !== TaskStatus.DISABLED);\n\n return activeDataflows.every((df) => {\n const depId = df.sourceTaskId;\n if (this.completedTasks.has(depId)) return true;\n\n // Check if this specific edge supports stream pass-through\n if (this.streamingTasks.has(depId)) {\n const sourceTask = this.dag.getTask(depId);\n if (sourceTask) {\n const sourceMode = getPortStreamMode(sourceTask.outputSchema(), df.sourceTaskPortId);\n const targetMode = getPortStreamMode(task.inputSchema(), df.targetTaskPortId);\n if (sourceMode !== \"none\" && sourceMode === targetMode) {\n return true;\n }\n }\n }\n\n return false;\n });\n }\n\n private async waitForNextTask(): Promise<ITask | null> {\n if (this.pendingTasks.size === 0) return null;\n\n // Remove any disabled tasks from pending (they were disabled by propagateDisabledStatus)\n for (const task of Array.from(this.pendingTasks)) {\n if (task.status === TaskStatus.DISABLED) {\n this.pendingTasks.delete(task);\n }\n }\n\n if (this.pendingTasks.size === 0) return null;\n\n const readyTask = Array.from(this.pendingTasks).find((task) => this.isTaskReady(task));\n if (readyTask) {\n this.pendingTasks.delete(readyTask);\n return readyTask;\n }\n\n // If there are pending tasks but none are ready, wait for task completion\n if (this.pendingTasks.size > 0) {\n return new Promise((resolve) => {\n this.nextResolver = resolve;\n });\n }\n\n return null;\n }\n\n async *tasks(): AsyncIterableIterator<ITask> {\n while (this.pendingTasks.size > 0) {\n const task = await this.waitForNextTask();\n if (task) {\n yield task;\n } else {\n break;\n }\n }\n }\n\n onTaskCompleted(taskId: unknown): void {\n this.completedTasks.add(taskId);\n\n // Remove any disabled tasks from pending\n for (const task of Array.from(this.pendingTasks)) {\n if (task.status === TaskStatus.DISABLED) {\n this.pendingTasks.delete(task);\n }\n }\n\n // Check if any pending tasks are now ready\n if (this.nextResolver) {\n const readyTask = Array.from(this.pendingTasks).find((task) => this.isTaskReady(task));\n if (readyTask) {\n this.pendingTasks.delete(readyTask);\n const resolver = this.nextResolver;\n this.nextResolver = null;\n resolver(readyTask);\n } else if (this.pendingTasks.size === 0) {\n // No more pending tasks - resolve with null to signal completion\n const resolver = this.nextResolver;\n this.nextResolver = null;\n resolver(null);\n }\n }\n }\n\n onTaskStreaming(taskId: unknown): void {\n this.streamingTasks.add(taskId);\n\n // Remove any disabled tasks from pending\n for (const task of Array.from(this.pendingTasks)) {\n if (task.status === TaskStatus.DISABLED) {\n this.pendingTasks.delete(task);\n }\n }\n\n // Check if any pending streamable tasks are now ready\n // (they can start when deps are STREAMING, not just COMPLETED)\n if (this.nextResolver) {\n const readyTask = Array.from(this.pendingTasks).find((task) => this.isTaskReady(task));\n if (readyTask) {\n this.pendingTasks.delete(readyTask);\n const resolver = this.nextResolver;\n this.nextResolver = null;\n resolver(readyTask);\n }\n }\n }\n\n reset(): void {\n this.completedTasks.clear();\n this.streamingTasks.clear();\n this.pendingTasks = new Set(this.dag.topologicallySortedNodes());\n this.nextResolver = null;\n }\n}\n",
|
|
17
17
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n collectPropertyValues,\n ConvertAllToOptionalArray,\n getLogger,\n getTelemetryProvider,\n globalServiceRegistry,\n ServiceRegistry,\n SpanStatusCode,\n uuid4,\n type ISpan,\n} from \"@workglow/util\";\nimport { TASK_OUTPUT_REPOSITORY, TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport { ConditionalTask } from \"../task/ConditionalTask\";\nimport { ITask } from \"../task/ITask\";\nimport {\n edgeNeedsAccumulation,\n getOutputStreamMode,\n getStreamingPorts,\n isTaskStreamable,\n type StreamEvent,\n} from \"../task/StreamTypes\";\nimport { Task } from \"../task/Task\";\nimport { TaskAbortedError, TaskConfigurationError, TaskError } from \"../task/TaskError\";\nimport { TaskInput, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport { DATAFLOW_ALL_PORTS, DATAFLOW_ERROR_PORT } from \"./Dataflow\";\nimport { TaskGraph, TaskGraphRunConfig, TaskGraphRunReactiveConfig } from \"./TaskGraph\";\nimport { DependencyBasedScheduler, TopologicalScheduler } from \"./TaskGraphScheduler\";\n\n/**\n * Tasks that inherit {@link Task.prototype.execute} without declaring their own `execute` on the\n * subclass prototype are omitted from graph-level progress averaging (they keep default 0% until\n * complete and would dilute the bar).\n */\nexport function taskPrototypeHasOwnExecute(task: ITask): boolean {\n const Ctor = task.constructor as typeof Task;\n return Object.hasOwn(Ctor.prototype, \"execute\");\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 reactiveRunning = 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 * 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<any>> = 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 * 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 reactiveScheduler The scheduler to use for reactive task execution\n */\n constructor(\n graph: TaskGraph,\n outputCache?: TaskOutputRepository,\n protected processScheduler = new DependencyBasedScheduler(graph),\n protected reactiveScheduler = 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 // Only filter input for non-root tasks; root tasks get the full input\n const taskInput = isRootTask ? input : this.filterInputForTask(task, input);\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 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 results;\n }\n\n /**\n * Runs the task graph in a reactive manner\n * @param input Optional input to pass to root tasks (tasks with no incoming dataflows)\n * @param config Optional configuration for the reactive 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 reactively\n */\n public async runGraphReactive<Output extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config?: TaskGraphRunReactiveConfig\n ): Promise<GraphResultArray<Output>> {\n await this.handleStartReactive(config);\n\n const results: GraphResultArray<Output> = [];\n try {\n for await (const task of this.reactiveScheduler.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 const taskResult = await task.runReactive(taskInput);\n\n await this.pushOutputFromNodeToEdges(task, taskResult);\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 await this.handleCompleteReactive();\n return results;\n } catch (error) {\n await this.handleErrorReactive();\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 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 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 const compatibility = dataflow.semanticallyCompatible(this.graph, dataflow);\n getLogger().debug(\"pushOutputFromNodeToEdges\", {\n dataflowId: dataflow.id,\n compatibility,\n resultsKeys: Object.keys(results),\n });\n if (compatibility === \"static\") {\n dataflow.setPortData(results);\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 } 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 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 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 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 });\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 streamPromises = dataflows\n .filter((df) => df.stream !== undefined)\n .map((df) => df.awaitStreamValue());\n if (streamPromises.length > 0) {\n await Promise.all(streamPromises);\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 });\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: string): 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\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 // Prevent reentrancy\n if (this.running || this.reactiveRunning) {\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 if (config?.parentSignal?.aborted) {\n this.abortController.abort(); // Immediately abort if the parent is already aborted\n return;\n } else {\n config?.parentSignal?.addEventListener(\n \"abort\",\n () => {\n this.abortController?.abort();\n },\n { once: true }\n );\n }\n\n this.runId = uuid4();\n this.resetGraph(this.graph, this.runId);\n this.processScheduler.reset();\n this.inProgressTasks.clear();\n this.inProgressFunctions.clear();\n this.failedTaskErrors.clear();\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 handleStartReactive(config?: TaskGraphRunConfig): Promise<void> {\n if (this.reactiveRunning) {\n throw new TaskConfigurationError(\"Graph is already running reactively\");\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 this.reactiveScheduler.reset();\n this.reactiveRunning = true;\n }\n\n /**\n * Handles the completion of task graph execution\n */\n protected async handleComplete(): Promise<void> {\n this.running = false;\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 handleCompleteReactive(): Promise<void> {\n this.reactiveRunning = false;\n }\n\n /**\n * Handles errors during task graph execution\n */\n protected async handleError(error: TaskError): Promise<void> {\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\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 handleErrorReactive(): Promise<void> {\n this.reactiveRunning = false;\n }\n\n /**\n * Handles task graph abortion\n */\n protected async handleAbort(): Promise<void> {\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\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 handleAbortReactive(): Promise<void> {\n this.reactiveRunning = 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",
|
|
18
18
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { GraphResultArray } from \"../task-graph/TaskGraphRunner\";\nimport { GraphAsTask } from \"./GraphAsTask\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { TaskConfig, TaskInput, TaskOutput } from \"./TaskTypes\";\n\nexport class GraphAsTaskRunner<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig = TaskConfig,\n> extends TaskRunner<Input, Output, Config> {\n declare task: GraphAsTask<Input, Output, Config>;\n\n /**\n * Protected method to execute a task subgraph by delegating back to the task itself.\n */\n protected async executeTaskChildren(input: Input): Promise<GraphResultArray<Output>> {\n const unsubscribe = this.task.subGraph!.subscribe(\n \"graph_progress\",\n (progress: number, message?: string, ...args: any[]) => {\n this.task.emit(\"progress\", progress, message, ...args);\n }\n );\n const results = await this.task.subGraph!.run<Output>(input, {\n parentSignal: this.abortController?.signal,\n outputCache: this.outputCache,\n registry: this.registry,\n });\n unsubscribe();\n return results;\n }\n /**\n * Protected method for reactive execution delegation\n *\n * For GraphAsTask, we pass the parent's runInputData to the subgraph's runReactive.\n * This ensures that root tasks in the subgraph (like InputTask) receive the\n * parent's input values after resetInputData() is called.\n */\n protected async executeTaskChildrenReactive(): Promise<GraphResultArray<Output>> {\n return this.task.subGraph!.runReactive<Output>(this.task.runInputData, {\n registry: this.registry,\n });\n }\n\n protected async handleDisable(): Promise<void> {\n if (this.task.hasChildren()) {\n await this.task.subGraph!.disable();\n }\n super.handleDisable();\n }\n\n // ========================================================================\n // TaskRunner method overrides and helpers\n // ========================================================================\n\n /**\n * Execute the task\n */\n protected async executeTask(input: Input): Promise<Output | undefined> {\n if (this.task.hasChildren()) {\n const runExecuteOutputData = await this.executeTaskChildren(input);\n this.task.runOutputData = this.task.subGraph.mergeExecuteOutputsToRunOutput(\n runExecuteOutputData,\n this.task.compoundMerge\n );\n } else {\n const result = await super.executeTask(input);\n this.task.runOutputData = result ?? ({} as Output);\n }\n return this.task.runOutputData as Output;\n }\n\n /**\n * Execute the task reactively\n */\n public async executeTaskReactive(input: Input, output: Output): Promise<Output> {\n if (this.task.hasChildren()) {\n const reactiveResults = await this.executeTaskChildrenReactive();\n this.task.runOutputData = this.task.subGraph.mergeExecuteOutputsToRunOutput(\n reactiveResults,\n this.task.compoundMerge\n );\n } else {\n const reactiveResults = await super.executeTaskReactive(input, output);\n this.task.runOutputData = Object.assign({}, output, reactiveResults ?? {}) as Output;\n }\n return this.task.runOutputData as Output;\n }\n}\n",
|
|
19
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { compileSchema, type DataPortSchema, type SchemaNode } from \"@workglow/util/schema\";\nimport { computeGraphInputSchema, computeGraphOutputSchema } from \"../task-graph/GraphSchemaUtils\";\nimport { TaskGraph } from \"../task-graph/TaskGraph\";\nimport { CompoundMergeStrategy, PROPERTY_ARRAY } from \"../task-graph/TaskGraphRunner\";\nimport type { CreateLoopWorkflow, Workflow } from \"../task-graph/Workflow\";\nimport { GraphAsTaskRunner } from \"./GraphAsTaskRunner\";\nimport type { IExecuteContext } from \"./ITask\";\nimport type { StreamEvent, StreamFinish } from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport {\n TaskConfigSchema,\n type TaskConfig,\n type TaskInput,\n type TaskOutput,\n type TaskTypeName,\n} 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 = TaskConfig & {\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 = GraphAsTaskConfig,\n> extends Task<Input, Output, Config> {\n // ========================================================================\n // Static properties - should be overridden by subclasses\n // ========================================================================\n\n public static type: TaskTypeName = \"GraphAsTask\";\n public static title: string = \"Group\";\n public static description: string = \"A group of tasks that are executed together\";\n public static 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 hasDynamicSchemas: boolean = true;\n\n // ========================================================================\n // Constructor\n // ========================================================================\n\n constructor(input: Partial<Input> = {}, config: Partial<Config> = {}) {\n const { subGraph, ...rest } = config;\n super(input, rest as Config);\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 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 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 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 console.warn(\n `Failed to compile input schema for ${this.type}, falling back to permissive validation:`,\n error\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 * Resets input data to defaults\n */\n public 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 resolveWaiting: (() => void) | undefined;\n let subgraphDone = false;\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 resolveWaiting?.();\n }\n },\n });\n\n const runPromise = this.subGraph\n .run<Output>(input, { parentSignal: context.signal, accumulateLeafOutputs: false })\n .then((results) => {\n subgraphDone = true;\n resolveWaiting?.();\n return results;\n });\n\n // Yield events as they arrive from ending nodes\n while (!subgraphDone) {\n if (eventQueue.length === 0) {\n await new Promise<void>((resolve) => {\n resolveWaiting = resolve;\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 * 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 regenerateGraph(): void {\n this._inputSchemaNode = undefined;\n this.events.emit(\"regenerate\");\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>;\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",
|
|
19
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { compileSchema, type DataPortSchema, type SchemaNode } from \"@workglow/util/schema\";\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 } from \"./ITask\";\nimport type { StreamEvent, StreamFinish } from \"./StreamTypes\";\nimport { Task } from \"./Task\";\nimport type { JsonTaskItem, TaskGraphItemJson, TaskGraphJsonOptions } from \"./TaskJSON\";\nimport {\n TaskConfigSchema,\n type TaskConfig,\n type TaskInput,\n type TaskOutput,\n type TaskTypeName,\n} 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 = TaskConfig & {\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 = GraphAsTaskConfig,\n> extends Task<Input, Output, Config> {\n // ========================================================================\n // Static properties - should be overridden by subclasses\n // ========================================================================\n\n public static type: TaskTypeName = \"GraphAsTask\";\n public static title: string = \"Group\";\n public static description: string = \"A group of tasks that are executed together\";\n public static 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 hasDynamicSchemas: boolean = true;\n\n // ========================================================================\n // Constructor\n // ========================================================================\n\n constructor(input: Partial<Input> = {}, config: Partial<Config> = {}) {\n const { subGraph, ...rest } = config;\n super(input, rest as Config);\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 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 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 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 console.warn(\n `Failed to compile input schema for ${this.type}, falling back to permissive validation:`,\n error\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 * Resets input data to defaults\n */\n public 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 resolveWaiting: (() => void) | undefined;\n let subgraphDone = false;\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 resolveWaiting?.();\n }\n },\n });\n\n const runPromise = this.subGraph\n .run<Output>(input, { parentSignal: context.signal, accumulateLeafOutputs: false })\n .then((results) => {\n subgraphDone = true;\n resolveWaiting?.();\n return results;\n });\n\n // Yield events as they arrive from ending nodes\n while (!subgraphDone) {\n if (eventQueue.length === 0) {\n await new Promise<void>((resolve) => {\n resolveWaiting = resolve;\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 * 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 regenerateGraph(): void {\n this._inputSchemaNode = undefined;\n this.events.emit(\"regenerate\");\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>;\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",
|
|
20
20
|
"/**\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 { GraphAsTask } from \"../task/GraphAsTask\";\nimport type { IExecuteContext, ITask } from \"../task/ITask\";\nimport { Task } from \"../task/Task\";\nimport type { DataPorts } from \"../task/TaskTypes\";\nimport { DATAFLOW_ALL_PORTS } from \"./Dataflow\";\nimport type { ITaskGraph } from \"./ITaskGraph\";\nimport type { IWorkflow } from \"./IWorkflow\";\nimport { TaskGraph } from \"./TaskGraph\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type PipeFunction<I extends DataPorts = any, O extends DataPorts = any> = (\n input: I,\n context: IExecuteContext\n) => O | Promise<O>;\n\nexport type Taskish<A extends DataPorts = DataPorts, B extends DataPorts = DataPorts> =\n | PipeFunction<A, B>\n | ITask<A, B>\n | ITaskGraph\n | IWorkflow<A, B>;\n\n// ============================================================================\n// Wrapper classes (lazily initialized to avoid circular dependency with\n// GraphAsTask — which transitively imports Workflow which imports this file)\n// ============================================================================\n\ntype GraphAsTaskConstructor = typeof GraphAsTask;\n\nlet _OwnGraphTask: GraphAsTaskConstructor;\nlet _OwnWorkflowTask: GraphAsTaskConstructor;\nlet _GraphTask: GraphAsTaskConstructor;\nlet _ConvWorkflowTask: GraphAsTaskConstructor;\n\nfunction getWrapperClasses() {\n if (!_OwnGraphTask) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const GaT = (require(\"../task/GraphAsTask\") as { GraphAsTask: GraphAsTaskConstructor })\n .GraphAsTask;\n\n class ListeningGraphAsTask extends GaT<any, any> {\n constructor(input: any, config: any) {\n super(input, config);\n this.subGraph.on(\"start\", () => {\n this.emit(\"start\");\n });\n this.subGraph.on(\"complete\", () => {\n this.emit(\"complete\");\n });\n this.subGraph.on(\"error\", (e) => {\n this.emit(\"error\", e);\n });\n }\n }\n\n class OwnGraphTask extends ListeningGraphAsTask {\n public static readonly type = \"Own[Graph]\";\n }\n\n class OwnWorkflowTask extends ListeningGraphAsTask {\n public static readonly type = \"Own[Workflow]\";\n }\n\n class GraphTask extends GaT {\n public static readonly type = \"Graph\";\n }\n\n class ConvWorkflowTask extends GaT {\n public static readonly type = \"Workflow\";\n }\n\n _OwnGraphTask = OwnGraphTask as unknown as GraphAsTaskConstructor;\n _OwnWorkflowTask = OwnWorkflowTask as unknown as GraphAsTaskConstructor;\n _GraphTask = GraphTask as unknown as GraphAsTaskConstructor;\n _ConvWorkflowTask = ConvWorkflowTask as unknown as GraphAsTaskConstructor;\n }\n}\n\n// ============================================================================\n// ensureTask — converts Taskish values into ITask instances\n// ============================================================================\n\nfunction convertPipeFunctionToTask<I extends DataPorts, O extends DataPorts>(\n fn: PipeFunction<I, O>,\n config?: any\n): ITask<I, O> {\n class QuickTask extends Task<I, O> {\n public static type = fn.name ? `𝑓 ${fn.name}` : \"𝑓\";\n public static inputSchema = () => {\n return {\n type: \"object\",\n properties: {\n [DATAFLOW_ALL_PORTS]: {},\n },\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n };\n public static outputSchema = () => {\n return {\n type: \"object\",\n properties: {\n [DATAFLOW_ALL_PORTS]: {},\n },\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n };\n public static cacheable = false;\n public async execute(input: I, context: IExecuteContext) {\n return fn(input, context);\n }\n }\n return new QuickTask({}, config);\n}\n\n/**\n * Checks if a value implements the IWorkflow interface (has a `graph` property\n * that is a TaskGraph and a `run` method). Used instead of `instanceof Workflow`\n * to avoid a circular dependency with the Workflow module.\n */\nfunction isWorkflowLike(arg: unknown): arg is IWorkflow {\n return (\n arg != null &&\n typeof arg === \"object\" &&\n \"graph\" in arg &&\n arg.graph instanceof TaskGraph &&\n \"run\" in arg &&\n typeof arg.run === \"function\"\n );\n}\n\nexport function ensureTask<I extends DataPorts, O extends DataPorts>(\n arg: Taskish<I, O>,\n config: any = {}\n): ITask<any, any, any> {\n if (arg instanceof Task) {\n return arg;\n }\n if (arg instanceof TaskGraph) {\n getWrapperClasses();\n const { isOwned, ...cleanConfig } = config;\n if (isOwned) {\n return new _OwnGraphTask({}, { ...cleanConfig, subGraph: arg });\n } else {\n return new _GraphTask({}, { ...cleanConfig, subGraph: arg });\n }\n }\n if (isWorkflowLike(arg)) {\n getWrapperClasses();\n const { isOwned, ...cleanConfig } = config;\n if (isOwned) {\n return new _OwnWorkflowTask({}, { ...cleanConfig, subGraph: arg.graph });\n } else {\n return new _ConvWorkflowTask({}, { ...cleanConfig, subGraph: arg.graph });\n }\n }\n return convertPipeFunctionToTask(arg as PipeFunction<I, O>, config);\n}\n",
|
|
21
21
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { EventParameters } from \"@workglow/util\";\nimport type { StreamEvent } from \"../task/StreamTypes\";\nimport { TaskIdType } from \"../task/TaskTypes\";\nimport { DataflowIdType } from \"./Dataflow\";\n\n/**\n * Events that can be emitted by the TaskGraph\n */\n\nexport type TaskGraphStatusListeners = {\n graph_progress: (progress: number, message?: string, ...args: any[]) => void;\n start: () => void;\n complete: () => void;\n error: (error: Error) => void;\n abort: () => void;\n disabled: () => void;\n /** Fired when a task in the graph starts streaming */\n task_stream_start: (taskId: TaskIdType) => void;\n /** Fired for each stream chunk produced by a task in the graph */\n task_stream_chunk: (taskId: TaskIdType, event: StreamEvent) => void;\n /** Fired when a task in the graph finishes streaming */\n task_stream_end: (taskId: TaskIdType, output: Record<string, any>) => void;\n};\nexport type TaskGraphStatusEvents = keyof TaskGraphStatusListeners;\nexport type TaskGraphStatusListener<Event extends TaskGraphStatusEvents> =\n TaskGraphStatusListeners[Event];\nexport type TaskGraphEventStatusParameters<Event extends TaskGraphStatusEvents> = EventParameters<\n TaskGraphStatusListeners,\n Event\n>;\n\nexport type GraphEventDagListeners = {\n task_added: (taskId: TaskIdType) => void;\n task_removed: (taskId: TaskIdType) => void;\n task_replaced: (taskId: TaskIdType) => void;\n dataflow_added: (dataflowId: DataflowIdType) => void;\n dataflow_removed: (dataflowId: DataflowIdType) => void;\n dataflow_replaced: (dataflowId: DataflowIdType) => void;\n};\nexport type GraphEventDagEvents = keyof GraphEventDagListeners;\nexport type GraphEventDagListener<Event extends GraphEventDagEvents> =\n GraphEventDagListeners[Event];\nexport type GraphEventDagParameters<Event extends GraphEventDagEvents> = EventParameters<\n GraphEventDagListeners,\n Event\n>;\n\nexport type TaskGraphListeners = TaskGraphStatusListeners & GraphEventDagListeners;\nexport type TaskGraphEvents = keyof TaskGraphListeners;\nexport type TaskGraphEventListener<Event extends TaskGraphEvents> = TaskGraphListeners[Event];\nexport type TaskGraphEventParameters<Event extends TaskGraphEvents> = EventParameters<\n TaskGraphListeners,\n Event\n>;\n\nexport const EventDagToTaskGraphMapping = {\n \"node-added\": \"task_added\",\n \"node-removed\": \"task_removed\",\n \"node-replaced\": \"task_replaced\",\n \"edge-added\": \"dataflow_added\",\n \"edge-removed\": \"dataflow_removed\",\n \"edge-replaced\": \"dataflow_replaced\",\n} as const;\n\nexport const EventTaskGraphToDagMapping = {\n task_added: \"node-added\",\n task_removed: \"node-removed\",\n task_replaced: \"node-replaced\",\n dataflow_added: \"edge-added\",\n dataflow_removed: \"edge-removed\",\n dataflow_replaced: \"edge-replaced\",\n} as const;\n",
|
|
22
22
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DirectedAcyclicGraph } from \"@workglow/util/graph\";\nimport { EventEmitter, ServiceRegistry, uuid4 } from \"@workglow/util\";\nimport { TaskOutputRepository } from \"../storage/TaskOutputRepository\";\nimport type { ITask } from \"../task/ITask\";\nimport type { StreamEvent } from \"../task/StreamTypes\";\nimport type { JsonTaskItem, TaskGraphJson, TaskGraphJsonOptions } from \"../task/TaskJSON\";\nimport type { TaskIdType, TaskInput, TaskOutput, TaskStatus } from \"../task/TaskTypes\";\nimport { ensureTask, type PipeFunction } from \"./Conversions\";\nimport { Dataflow, type DataflowIdType } from \"./Dataflow\";\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 {\n CompoundMergeStrategy,\n GraphResult,\n type GraphResultArray,\n TaskGraphRunner,\n} 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 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\nexport interface TaskGraphRunReactiveConfig extends TaskGraphRunConfig {\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 });\n }\n\n /**\n * Runs the task graph reactively\n * @returns A promise that resolves when all tasks are complete\n * @throws TaskError if any tasks have failed\n */\n public runReactive<Output extends TaskOutput>(\n input: TaskInput = {} as TaskInput,\n config: TaskGraphRunConfig = {}\n ): Promise<GraphResultArray<Output>> {\n return this.runner.runGraphReactive<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 * 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 // @ts-ignore\n for (const i in this._dag.adjacency) {\n // @ts-ignore\n for (const j in this._dag.adjacency[i]) {\n // @ts-ignore\n const maybeEdges = this._dag.adjacency[i][j];\n if (maybeEdges !== null) {\n for (const edge of maybeEdges) {\n // @ts-ignore\n if (this._dag.edgeIdentity(edge, \"\", \"\") == id) {\n return edge;\n }\n }\n }\n }\n }\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 unsubscribe function\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 unsubscribe function\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 unsubscribe function\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 * 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 emit(name: string, ...args: any[]): void {\n const dagEvent = EventTaskGraphToDagMapping[name as keyof typeof EventTaskGraphToDagMapping];\n if (dagEvent) {\n // @ts-ignore\n return this.emit_dag(name, ...args);\n } else {\n // @ts-ignore\n return this.emit_local(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",
|
|
@@ -40,9 +40,10 @@
|
|
|
40
40
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createServiceToken,\n globalServiceRegistry,\n registerInputResolver,\n ServiceRegistry,\n} from \"@workglow/util\";\nimport type { ITaskConstructor } from \"./ITask\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyTaskConstructor = ITaskConstructor<any, any, any>;\n\n/**\n * Map storing all registered task constructors.\n * Keys are task type identifiers and values are their corresponding constructor functions.\n */\nconst taskConstructors = new Map<string, AnyTaskConstructor>();\n\n/**\n * Registers a task constructor with the registry.\n * This allows the task type to be instantiated dynamically based on its type identifier.\n *\n * @param type - The unique identifier for the task type\n * @param constructor - The constructor function for the task\n * @throws Error if a task with the same type is already registered\n */\nfunction registerTask(baseClass: AnyTaskConstructor): void {\n if (taskConstructors.has(baseClass.type)) {\n // TODO: fix this\n // throw new Error(`Task type ${baseClass.type} is already registered`);\n }\n taskConstructors.set(baseClass.type, baseClass);\n}\n\n/**\n * TaskRegistry provides a centralized registry for task types.\n * It enables dynamic task instantiation and management across the application.\n */\nexport const TaskRegistry = {\n /**\n * Map containing all registered task constructors\n */\n all: taskConstructors,\n\n /**\n * Function to register new task types\n */\n registerTask,\n};\n\n// ========================================================================\n// DI-based access\n// ========================================================================\n\n/**\n * Service token for the task constructor registry.\n * Maps task type names to their constructor functions.\n */\nexport const TASK_CONSTRUCTORS =\n createServiceToken<Map<string, AnyTaskConstructor>>(\"task.constructors\");\n\n// Register default factory backed by the global TaskRegistry\nif (!globalServiceRegistry.has(TASK_CONSTRUCTORS)) {\n globalServiceRegistry.register(\n TASK_CONSTRUCTORS,\n (): Map<string, AnyTaskConstructor> => TaskRegistry.all,\n true\n );\n}\n\n/**\n * Gets the global task constructors map.\n * @returns The registered task constructors map\n */\nexport function getGlobalTaskConstructors(): Map<string, AnyTaskConstructor> {\n return globalServiceRegistry.get(TASK_CONSTRUCTORS);\n}\n\n/**\n * Sets the global task constructors map, replacing the default TaskRegistry-backed factory.\n * @param map The task constructors map to register\n */\nexport function setGlobalTaskConstructors(map: Map<string, AnyTaskConstructor>): void {\n globalServiceRegistry.registerInstance(TASK_CONSTRUCTORS, map);\n}\n\n/**\n * Gets the task constructors map from the given registry,\n * falling back to the global TaskRegistry.\n */\nexport function getTaskConstructors(registry?: ServiceRegistry): Map<string, AnyTaskConstructor> {\n if (!registry) return TaskRegistry.all;\n return registry.has(TASK_CONSTRUCTORS) ? registry.get(TASK_CONSTRUCTORS) : TaskRegistry.all;\n}\n\n// ========================================================================\n// Tasks resolver\n// ========================================================================\n\n/**\n * Resolves a task type name to a tool definition object via the task constructor registry.\n *\n * Used by the input resolver system for `format: \"tasks\"` properties.\n * Converts lightweight string IDs (stored by the property editor) into full\n * tool definition objects at runtime.\n *\n * @param id - Task type name registered in TaskRegistry\n * @param format - The format string (unused)\n * @param registry - Service registry for context-specific lookups\n * @returns Tool definition object, or undefined if the task type is not found\n */\nfunction resolveTaskFromRegistry(\n id: string,\n _format: string,\n registry: ServiceRegistry\n): {\n name: string;\n description: string;\n inputSchema: unknown;\n outputSchema: unknown;\n configSchema?: unknown;\n} | undefined {\n const constructors = getTaskConstructors(registry);\n const ctor = constructors.get(id);\n if (!ctor) return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ctorAny = ctor as any;\n const configSchema =\n typeof ctorAny.configSchema === \"function\" ? ctorAny.configSchema() : undefined;\n return {\n name: ctor.type,\n description: (ctor as { description?: string }).description ?? \"\",\n inputSchema: ctor.inputSchema(),\n outputSchema: ctor.outputSchema(),\n ...(configSchema ? { configSchema } : {}),\n };\n}\n\n// Register the tasks resolver for format: \"tasks\"\nregisterInputResolver(\"tasks\", resolveTaskFromRegistry);\n",
|
|
41
41
|
"/**\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",
|
|
42
42
|
"/**\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 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",
|
|
43
|
-
"/**\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"
|
|
43
|
+
"/**\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",
|
|
44
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DirectedAcyclicGraph } from \"@workglow/util/graph\";\nimport type { DataPortSchema } from \"@workglow/util/schema\";\nimport { Dataflow } from \"../../task-graph/Dataflow\";\nimport { TaskGraph } from \"../../task-graph/TaskGraph\";\nimport { Workflow } from \"../../task-graph/Workflow\";\nimport { Task } from \"../../task/Task\";\nimport { TaskStatus } from \"../../task/TaskTypes\";\n\ntype Config = Record<string, unknown>;\n\n/**\n * Formats a duration in milliseconds as a human-readable string.\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1) return `${(ms * 1000).toFixed(0)}\\u00B5s`;\n if (ms < 1000) return `${ms.toFixed(1)}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\n/**\n * Extracts property keys from a JSON schema, handling boolean schemas.\n * Boolean schemas: true = accepts any, false = rejects all\n */\nfunction getSchemaProperties(schema: DataPortSchema): Record<string, DataPortSchema> | null {\n if (typeof schema === \"boolean\") {\n // Boolean schemas don't have properties\n // true = accepts any value, false = rejects all values\n return null;\n }\n return schema.properties as Record<string, DataPortSchema> | null;\n}\n\ntype JsonMLTagName = string;\n\ninterface JsonMLAttributes {\n readonly [key: string]: unknown;\n}\n\ntype JsonMLNode = JsonMLText | JsonMLElementDef;\n\ntype JsonMLText = string;\n\ntype JsonMLElementDef = [JsonMLTagName, JsonMLAttributes?, ...JsonMLNode[]];\n\nabstract class ConsoleFormatter {\n abstract header(value: unknown, config?: Config): JsonMLElementDef | null;\n abstract hasBody(value: unknown, config?: Config): boolean;\n abstract body(value: unknown, config?: Config): JsonMLElementDef | null;\n}\n\n/**\n * Returns whether the browser is in dark mode\n */\nexport function isDarkMode(): boolean {\n return window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n}\n\nclass WorkflowConsoleFormatter extends ConsoleFormatter {\n header(workflow: Workflow | TaskGraph, config?: Config): JsonMLElementDef | null {\n // @ts-ignore\n if (workflow instanceof Workflow || workflow instanceof TaskGraph) {\n const graph: TaskGraph = workflow instanceof TaskGraph ? workflow : workflow.graph;\n const error = workflow instanceof Workflow ? workflow.error : \"\";\n const title = workflow instanceof Workflow ? \"Workflow\" : \"TaskGraph\";\n const header = new JsonMLElement(\"div\");\n header.sectionHeader(title);\n header.styledText(`(${graph.getTasks().length} tasks)`, \"color: green; margin-left: 10px;\");\n if (error) {\n header.styledText(error, \"color: red; margin-left: 10px;\");\n }\n\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return true;\n }\n\n body(obj: unknown, config?: Config): JsonMLElementDef {\n const body = new JsonMLElement(\"div\");\n const graph: TaskGraph = obj instanceof TaskGraph ? obj : (obj as Workflow).graph;\n const nodes = body.createStyledList();\n const tasks = graph.getTasks();\n if (tasks.length) {\n nodes.createTextChild(\"Tasks:\");\n for (const node of tasks) {\n const nodeTag = nodes.createListItem(\"\", \"list-style-type: none;\");\n if (obj instanceof Workflow) {\n for (const df of graph.getSourceDataflows(node.config.id)) {\n const edgeTag = nodeTag.createChild(\"li\").setStyle(\"padding-left: 20px;\");\n if (df.sourceTaskPortId === df.targetTaskPortId) continue;\n const num =\n tasks.findIndex((t) => t.config.id === df.sourceTaskId) -\n tasks.findIndex((t) => t.config.id === node.config.id);\n\n edgeTag.highlightText(\"rename\");\n edgeTag.functionCall((el) => {\n el.greyText('\"');\n el.outputText(`${df.sourceTaskPortId}`);\n el.greyText('\", \"');\n el.inputText(`${df.targetTaskPortId}`);\n el.greyText('\"');\n if (num !== -1) el.greyText(`, ${num}`);\n });\n }\n }\n nodeTag.createObjectTag(node, { graph, workflow: obj });\n }\n }\n if (obj instanceof TaskGraph) {\n const dfList = nodes.createTextChild(\"Dataflows:\");\n for (const df of obj.getDataflows()) {\n const dfTag = dfList.createListItem(\"\", \"list-style-type: none;\");\n dfTag.createObjectTag(df);\n }\n }\n\n // Show total duration computed from earliest startedAt to latest completedAt\n let earliestStart: Date | undefined;\n let latestEnd: Date | undefined;\n for (const t of tasks) {\n if (t.startedAt && (!earliestStart || t.startedAt < earliestStart)) {\n earliestStart = t.startedAt;\n }\n if (t.completedAt && (!latestEnd || t.completedAt > latestEnd)) {\n latestEnd = t.completedAt;\n }\n }\n if (earliestStart && latestEnd) {\n const durationMs = latestEnd.getTime() - earliestStart.getTime();\n const timing = nodes.createListItem(\"\", \"list-style-type: none;\");\n timing.highlightText(\"Total duration: \");\n timing.createTextChild(formatDuration(durationMs));\n }\n\n // @ts-ignore\n const dag = obj._dag ?? obj.graph._dag;\n\n if (dag && dag.getNodes().length > 0) body.createObjectTag(dag);\n\n return body.toJsonML();\n }\n}\n\n// New formatter for Workflow API methods\nclass WorkflowAPIConsoleFormatter extends ConsoleFormatter {\n header(obj: unknown, config?: Config): JsonMLElementDef | null {\n if (obj === Workflow.prototype || obj === Workflow) {\n const header = new JsonMLElement(\"div\");\n header.sectionHeader(\"Workflow API\");\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return true;\n }\n\n body(): JsonMLElementDef {\n const body = new JsonMLElement(\"div\");\n const apiSection = body.createChild(\"div\");\n const apiList = apiSection.createStyledList();\n const apiTag = apiList.createListItem(\"\", \"list-style-type: none;\");\n apiTag.createHighlightedListItem(\".reset()\");\n apiTag.createHighlightedListItem(\".rename(outputName, inputName)\");\n apiTag.createHighlightedListItem(\".run()\");\n apiTag.createHighlightedListItem(\".abort()\");\n apiTag.createHighlightedListItem(\".toJSON()\");\n apiTag.createHighlightedListItem(\".toDependencyJSON()\");\n\n for (const [key, value] of Object.entries(Workflow.prototype)) {\n if (typeof value === \"function\" && key !== \"constructor\") {\n const item = apiTag.createListItem(\"\");\n item.createChild(\"span\").createObjectTag(value);\n }\n }\n\n return body.toJsonML();\n }\n}\n\ninterface WorkflowCreateObject {\n readonly workflowCreate: boolean;\n readonly constructor: { readonly runtype?: string; readonly type?: string };\n readonly type: string;\n inputSchema(): DataPortSchema;\n outputSchema(): DataPortSchema;\n}\n\nclass CreateWorkflowConsoleFormatter extends ConsoleFormatter {\n header(obj: unknown, config?: Config): JsonMLElementDef | null {\n const workflowObj = obj as WorkflowCreateObject;\n if (workflowObj.workflowCreate) {\n const header = new JsonMLElement(\"div\");\n const name =\n workflowObj.constructor.runtype ??\n workflowObj.constructor.type ??\n workflowObj.type.replace(/Task$/, \"\");\n const inputSchema = workflowObj.inputSchema();\n const outputSchema = workflowObj.outputSchema();\n const inputProperties = getSchemaProperties(inputSchema);\n const outputProperties = getSchemaProperties(outputSchema);\n\n const inputs = inputProperties\n ? Object.keys(inputProperties).map((key) => `${key}: …`)\n : typeof inputSchema === \"boolean\"\n ? inputSchema\n ? [\"…\"] // true = accepts any\n : [\"never\"] // false = rejects all\n : [];\n\n const outputs = outputProperties\n ? Object.keys(outputProperties).map((key) => `${key}: …`)\n : typeof outputSchema === \"boolean\"\n ? outputSchema\n ? [\"…\"] // true = accepts any\n : [\"never\"] // false = rejects all\n : [];\n\n header.methodSignature(name);\n header.functionCall((el) => {\n el.objectBraces((innerObj) => {\n innerObj.inputText(`${inputs.join(\", \")}`);\n });\n });\n header.greyText(\"): \");\n header.objectBraces((el) => {\n el.outputText(`${outputs.join(\", \")}`);\n });\n\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return false;\n }\n\n body(obj: unknown, config?: Config): JsonMLElementDef | null {\n return null;\n }\n}\n\nclass TaskConsoleFormatter extends ConsoleFormatter {\n header(task: Task, config?: Config): JsonMLElementDef | null {\n if (!task) return null;\n\n if (\n task instanceof Task &&\n task.inputSchema &&\n task.outputSchema &&\n task.runInputData &&\n task.runOutputData\n ) {\n const header = new JsonMLElement(\"div\");\n let name = task.type ?? task.constructor.name;\n if ((config as { workflow?: unknown })?.workflow) name = name.replace(/Task$/, \"\");\n const inputSchema = task.inputSchema();\n const outputSchema = task.outputSchema();\n const inputProperties = getSchemaProperties(inputSchema);\n const outputProperties = getSchemaProperties(outputSchema);\n\n const inputs = inputProperties\n ? Object.keys(inputProperties)\n .filter((key) => task.runInputData[key] !== undefined)\n .map((key) => {\n const value = task.runInputData[key];\n return { name: key, value };\n })\n : typeof inputSchema === \"boolean\" && inputSchema\n ? Object.keys(task.runInputData || {})\n .filter((key) => task.runInputData[key] !== undefined)\n .map((key) => {\n const value = task.runInputData[key];\n return { name: key, value };\n })\n : [];\n\n const outputs = outputProperties\n ? Object.keys(outputProperties)\n .filter(\n (key) => task.runOutputData[key] !== undefined && task.runOutputData[key] !== \"\"\n )\n .filter(\n (key) =>\n !(Array.isArray(task.runOutputData[key]) && task.runOutputData[key].length === 0)\n )\n .map((key) => {\n return { name: key, value: task.runOutputData[key] };\n })\n : typeof outputSchema === \"boolean\" && outputSchema\n ? Object.keys(task.runOutputData || {})\n .filter(\n (key) => task.runOutputData[key] !== undefined && task.runOutputData[key] !== \"\"\n )\n .filter(\n (key) =>\n !(Array.isArray(task.runOutputData[key]) && task.runOutputData[key].length === 0)\n )\n .map((key) => {\n return { name: key, value: task.runOutputData[key] };\n })\n : [];\n\n header.highlightText(name);\n header.functionCall((el) => {\n el.objectBraces((innerObj) => {\n innerObj.parameterList(inputs);\n });\n el.greyText(\", \");\n el.objectBraces((innerObj) => {\n innerObj.parameterList([{ name: \"id\", value: task.config.id }]);\n });\n });\n\n if (task.status === TaskStatus.COMPLETED) {\n header.greyText(\": \");\n header.objectBraces((el) => {\n el.parameterList(outputs, true);\n });\n }\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(task: unknown, config?: Config): boolean {\n return task instanceof Task;\n }\n\n body(task: Task, config?: Config): JsonMLElementDef | null {\n if (!task) return null;\n if (!(task instanceof Task)) return null;\n\n const body = new JsonMLElement(\"div\").setStyle(\"padding-left: 10px;\");\n\n const inputs = body.createStyledList(\"Inputs:\");\n const allInboundDataflows = (config as { graph?: TaskGraph })?.graph?.getSourceDataflows(\n task.config.id\n );\n\n const inputSchema = task.inputSchema();\n const inputProperties = getSchemaProperties(inputSchema);\n const schemaKeys =\n inputProperties !== null\n ? Object.keys(inputProperties)\n : inputSchema === true\n ? Object.keys(task.runInputData || {})\n : [];\n\n for (const key of schemaKeys) {\n const value = task.runInputData[key];\n const li = inputs.createListItem(\"\", \"padding-left: 20px;\");\n li.inputText(`${key}: `);\n const inputInboundDataflows = allInboundDataflows?.filter((e) => e.targetTaskPortId === key);\n if (inputInboundDataflows) {\n const sources: string[] = [];\n const sourceValues: unknown[] = [];\n inputInboundDataflows.forEach((df) => {\n const sourceTask = (config as { graph?: TaskGraph })?.graph?.getTask(df.sourceTaskId);\n sources.push(`${sourceTask?.type}->Output{${df.sourceTaskPortId}}`);\n if (df.status === TaskStatus.COMPLETED) {\n sourceValues.push(df.value);\n }\n });\n if (sources.length > 1) {\n if (sourceValues.length > 0) {\n li.createValueObject(sourceValues);\n li.createTextChild(\" \");\n }\n li.createTextChild(`from [${sources.join(\", \")}]`);\n } else if (sources.length === 1) {\n if (sourceValues.length > 0) {\n li.createValueObject(sourceValues[0]);\n li.createTextChild(\" \");\n }\n li.createTextChild(\"from \" + sources[0]);\n } else {\n li.createValueObject(value);\n }\n } else {\n li.createValueObject(value);\n }\n }\n\n const outputsList = body.createStyledList(\"Outputs:\");\n const outputSchema = task.outputSchema();\n const outputProperties = getSchemaProperties(outputSchema);\n const outputKeys =\n outputProperties !== null\n ? Object.keys(outputProperties)\n : outputSchema === true\n ? Object.keys(task.runOutputData || {})\n : [];\n\n for (const key of outputKeys) {\n const value = task.runOutputData[key];\n const li = outputsList.createListItem(\"\", \"padding-left: 20px;\");\n li.outputText(`${key}: `);\n li.createValueObject(value);\n }\n\n const taskConfig = body.createStyledList(\"Config:\");\n for (const [key, value] of Object.entries(task.config)) {\n if (value === undefined) continue;\n const li = taskConfig.createListItem(\"\", \"padding-left: 20px;\");\n li.inputText(`${key}: `);\n li.createValueObject(value);\n }\n\n body.createStatusListItem(task.status);\n\n if (task.startedAt || task.completedAt) {\n const timing = body.createStyledList(\"Timing:\");\n if (task.startedAt) {\n const li = timing.createListItem(\"\", \"padding-left: 20px;\");\n li.inputText(\"startedAt: \");\n li.createTextChild(task.startedAt.toISOString());\n }\n if (task.completedAt) {\n const li = timing.createListItem(\"\", \"padding-left: 20px;\");\n li.inputText(\"completedAt: \");\n li.createTextChild(task.completedAt.toISOString());\n }\n if (task.startedAt && task.completedAt) {\n const durationMs = task.completedAt.getTime() - task.startedAt.getTime();\n const li = timing.createListItem(\"\", \"padding-left: 20px;\");\n li.highlightText(\"duration: \");\n li.createTextChild(formatDuration(durationMs));\n }\n }\n\n // @ts-ignore\n const dag = task.subGraph?._dag;\n\n if (dag && dag.getNodes().length > 0) body.createObjectTag(dag);\n\n return body.toJsonML();\n }\n}\n\nclass DAGConsoleFormatter extends ConsoleFormatter {\n header(obj: unknown, config?: Config): JsonMLElementDef | null {\n if (obj instanceof DirectedAcyclicGraph) {\n const header = new JsonMLElement(\"div\");\n header.createTextChild(\"DAG\");\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return true;\n }\n\n body(obj: unknown, config?: Config): JsonMLElementDef {\n const body = new JsonMLElement(\"div\");\n body.createStyledList();\n const dag = obj as DirectedAcyclicGraph<NodeWithConfig, unknown, string, unknown>;\n if (dag.getNodes().length > 0) {\n const { dataURL, height } = generateGraphImage(dag);\n if (dataURL) {\n const imageTag = body.createChild(\"div\");\n imageTag.addAttribute(\n \"style\",\n `background-image: url(${dataURL}); background-size: cover; background-position: center; width: 800px; height: ${height}px;`\n );\n }\n }\n return body.toJsonML();\n }\n}\n\nclass DataflowConsoleFormatter extends ConsoleFormatter {\n header(obj: unknown, config?: Config): JsonMLElementDef | null {\n if (obj instanceof Dataflow) {\n const header = new JsonMLElement(\"div\");\n header.highlightText(\"Dataflow \");\n header.inputText(`${obj.sourceTaskId}.${obj.sourceTaskPortId}`);\n header.createTextChild(\" -> \");\n header.outputText(`${obj.targetTaskId}.${obj.targetTaskPortId}`);\n if (obj.status === TaskStatus.COMPLETED) {\n header.greyText(\" = \");\n header.createValueObject(obj.value);\n }\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return true;\n }\n\n body(obj: unknown, config?: Config): JsonMLElementDef | null {\n return null;\n }\n}\n\ninterface ReactElement {\n readonly $$typeof?: { toString(): string };\n readonly displayName?: string;\n readonly type?: {\n readonly $$typeof?: { toString(): string };\n readonly displayName?: string;\n readonly name?: string;\n readonly type?: {\n readonly displayName?: string;\n readonly name?: string;\n };\n };\n readonly key?: string;\n readonly props?: Record<string, unknown>;\n}\n\nclass ReactElementConsoleFormatter extends ConsoleFormatter {\n header(obj: unknown, config?: Config): JsonMLElementDef | null {\n const reactEl = obj as ReactElement;\n if (\n reactEl?.$$typeof?.toString() === \"Symbol(react.transitional.element)\" &&\n !(config as { parent?: unknown })?.parent\n ) {\n const header = new JsonMLElement(\"div\");\n const isMemo = reactEl.type?.$$typeof?.toString() === \"Symbol(react.memo)\";\n const name = !isMemo\n ? reactEl.displayName || reactEl.type?.displayName || reactEl.type?.name\n : reactEl.type?.type?.displayName || reactEl.type?.type?.name;\n header.greyText(`<`);\n header.sectionHeader(`${name}`);\n header.greyText(`/>`);\n if (reactEl.key) {\n header.createTextChild(\" \");\n header.inputText(`key={${reactEl.key}}`);\n }\n if (isMemo) {\n header.createTextChild(\" \");\n header.pill(`Memo`);\n }\n // header.createObjectTag(obj, { parent: obj });\n return header.toJsonML();\n }\n return null;\n }\n\n hasBody(value: unknown, config?: Config): boolean {\n return true;\n }\n\n body(obj: unknown, config?: Config): JsonMLElementDef {\n const body = new JsonMLElement(\"div\");\n const props = body.createStyledList(\"Props:\");\n const reactEl = obj as ReactElement;\n props.propertyBlock(reactEl.props ?? {});\n return body.toJsonML();\n }\n}\n\nclass JsonMLElement {\n _attributes: Record<string, unknown>;\n _jsonML: JsonMLElementDef;\n\n // Color constants\n static getColors(): {\n readonly grey: string;\n readonly inputColor: string;\n readonly outputColor: string;\n readonly yellow: string;\n readonly undefined: string;\n } {\n const dark = isDarkMode();\n return {\n grey: dark ? \"#aaa\" : \"#333\",\n inputColor: dark ? \"#ada\" : \"#363\",\n outputColor: dark ? \"#caa\" : \"#633\",\n yellow: dark ? \"#f3ce49\" : \"#a68307\",\n undefined: \"#888\",\n };\n }\n\n constructor(tagName: JsonMLTagName) {\n this._attributes = {};\n this._jsonML = [tagName, this._attributes];\n }\n\n // Add a helper method for creating colored text in one call\n coloredText(text: string, color: string): JsonMLElement {\n this.createChild(\"span\").setStyle(`color:${color};`).createTextChild(text);\n return this;\n }\n\n // Helper for creating styled text with any style\n styledText(text: string, style: string): JsonMLElement {\n this.createChild(\"span\").setStyle(style).createTextChild(text);\n return this;\n }\n\n // Helper specifically for input-colored text\n inputText(text: string): JsonMLElement {\n const colors = JsonMLElement.getColors();\n return this.coloredText(text, colors.inputColor);\n }\n\n // Helper specifically for output-colored text\n outputText(text: string): JsonMLElement {\n const colors = JsonMLElement.getColors();\n return this.coloredText(text, colors.outputColor);\n }\n\n // Helper for grey text which is commonly used\n greyText(text: string): JsonMLElement {\n const colors = JsonMLElement.getColors();\n return this.coloredText(text, colors.grey);\n }\n\n // Helper for yellow/highlight text\n highlightText(text: string): JsonMLElement {\n const colors = JsonMLElement.getColors();\n return this.coloredText(text, colors.yellow);\n }\n\n // Helper for creating a section header\n sectionHeader(text: string): JsonMLElement {\n return this.styledText(text, \"font-weight: bold;\");\n }\n\n pill(text: string): JsonMLElement {\n return this.styledText(\n text,\n \"color: #009; background-color: #ccf; padding: 2px 4px; border-radius: 4px; font-size: 0.7em;\"\n );\n }\n\n // Helper for creating a method signature\n methodSignature(name: string, params: string = \"\"): JsonMLElement {\n const colors = JsonMLElement.getColors();\n this.styledText(\".\" + name, `font-weight: bold;color:${colors.yellow}`);\n if (params) this.greyText(`(${params})`);\n return this;\n }\n\n // Helper for creating a parameter list with input/output coloring\n parameterList(\n params: ReadonlyArray<{ readonly name: string; readonly value: unknown }>,\n isOutput: boolean = false\n ): JsonMLElement {\n params.forEach((param, i) => {\n if (i > 0) this.greyText(`, `);\n if (isOutput) {\n this.outputText(param.name);\n } else {\n this.inputText(param.name);\n }\n this.greyText(`: `);\n this.createValueObject(param.value);\n });\n return this;\n }\n\n // Helper for creating a parameter list with coloring\n propertyBlock(params: Record<string, unknown>): JsonMLElement {\n for (const [key, value] of Object.entries(params)) {\n const item = this.createListItem(\"\");\n item.inputText(key);\n item.greyText(`: `);\n item.createValueObject(value);\n }\n return this;\n }\n\n // Helper for creating list items with padding\n createListItem(text: string, style?: string): JsonMLElement {\n const li = this.createChild(\"li\").setStyle(`padding-left: 10px;${style ? \" \" + style : \"\"}`);\n if (text) li.createTextChild(text);\n return li;\n }\n\n // Helper for creating highlighted list items (commonly used in API sections)\n createHighlightedListItem(text: string): JsonMLElement {\n const colors = JsonMLElement.getColors();\n this.createChild(\"li\")\n .setStyle(`color:${colors.yellow}; padding-left: 10px;`)\n .createTextChild(text);\n return this;\n }\n\n createStatusListItem(text: string): JsonMLElement {\n this.createStyledList(\"Status: \");\n let color = \"grey\";\n switch (text) {\n case TaskStatus.COMPLETED:\n color = \"green\";\n break;\n case TaskStatus.ABORTING:\n case TaskStatus.FAILED:\n color = \"red\";\n break;\n default:\n color = \"grey\";\n }\n return this.createListItem(text, `padding-left: 30px;color: ${color};`);\n }\n\n // Helper for creating a styled list\n createStyledList(title?: string): JsonMLElement {\n const list = this.createChild(\"ol\").setStyle(\"list-style-type: none; padding-left: 10px;\");\n if (title) list.createTextChild(title);\n return list;\n }\n\n // Helper for creating an object-like structure with braces\n objectBraces(content: (element: JsonMLElement) => void): JsonMLElement {\n this.greyText(\"{ \");\n content(this);\n this.greyText(\" }\");\n return this;\n }\n\n // Helper for creating a function call-like structure with parentheses\n functionCall(content: (element: JsonMLElement) => void): JsonMLElement {\n this.greyText(\"(\");\n content(this);\n this.greyText(\")\");\n return this;\n }\n\n createChild(tagName: JsonMLTagName): JsonMLElement {\n const c = new JsonMLElement(tagName);\n this._jsonML.push(c.toJsonML());\n return c;\n }\n\n createObjectTag(object: unknown, config?: Config): JsonMLElement {\n const tag = this.createChild(\"object\");\n tag.addAttribute(\"object\", object);\n if (config) {\n tag.addAttribute(\"config\", config);\n }\n return tag;\n }\n\n createValueObject(value: unknown, config?: Config): JsonMLElement {\n if (Array.isArray(value)) return this.createArrayChild(value, config);\n if (typeof value === \"undefined\") {\n const colors = JsonMLElement.getColors();\n return this.createChild(\"span\")\n .setStyle(`color:${colors.undefined};`)\n .createTextChild(\"undefined\");\n }\n\n return this.createObjectTag(value, config);\n }\n\n setStyle(style: string): JsonMLElement {\n this._attributes[\"style\"] = style;\n return this;\n }\n\n addAttribute(key: string, value: unknown): JsonMLElement {\n this._attributes[key] = value;\n return this;\n }\n\n createTextChild(text: string): JsonMLElement {\n this._jsonML.push(text + \"\");\n return this;\n }\n\n createArrayChild(array: readonly unknown[], config?: Config): JsonMLElement {\n const j = new JsonMLElement(\"span\");\n j.createTextChild(\"[\");\n for (let i = 0; i < array.length; ++i) {\n if (i != 0) j.createTextChild(\", \");\n j.createValueObject(array[i], config);\n }\n j.createTextChild(\"]\");\n this._jsonML.push(j.toJsonML());\n return j;\n }\n\n toJsonML(): JsonMLElementDef {\n return this._jsonML;\n }\n}\n\ninterface NodeWithConfig {\n readonly config: { readonly id: string };\n readonly type?: string;\n}\n\nfunction computeLayout(\n graph: DirectedAcyclicGraph<NodeWithConfig, unknown, string, unknown>,\n canvasWidth: number\n): {\n readonly positions: { readonly [id: string]: { readonly x: number; readonly y: number } };\n readonly requiredHeight: number;\n} {\n const positions: { [id: string]: { x: number; y: number } } = {};\n const layers: Map<number, string[]> = new Map();\n const depths: { [id: string]: number } = {};\n\n // Compute depth (longest path from any root)\n for (const node of graph.topologicallySortedNodes()) {\n const incomingEdges = graph.inEdges(node.config.id).map(([from]) => from);\n const depth =\n incomingEdges.length > 0 ? Math.max(...incomingEdges.map((from) => depths[from])) + 1 : 0;\n depths[node.config.id] = depth;\n\n if (!layers.has(depth)) layers.set(depth, []);\n layers.get(depth)!.push(node.config.id);\n }\n\n // Compute spacing based on available canvas size\n const totalLayers = layers.size;\n const layerSpacing = totalLayers > 1 ? Math.max(canvasWidth / totalLayers, 150) : 150;\n\n // Determine the required height dynamically\n const maxNodesInLayer = Math.max(...Array.from(layers.values()).map((layer) => layer.length));\n const nodeSpacing = 100;\n const requiredHeight = maxNodesInLayer * nodeSpacing + 100; // Extra padding\n\n layers.forEach((layerNodes, layerIndex) => {\n const yStart = (requiredHeight - layerNodes.length * nodeSpacing) / 2;\n layerNodes.forEach((nodeId, index) => {\n positions[nodeId] = {\n x: layerIndex * layerSpacing + layerSpacing / 2,\n y: yStart + index * nodeSpacing,\n };\n });\n });\n\n return { positions, requiredHeight };\n}\n\nfunction generateGraphImage(\n graph: DirectedAcyclicGraph<NodeWithConfig, unknown, string, unknown>,\n width = 800\n): { readonly dataURL: string; readonly height: number } {\n const ratio = window.devicePixelRatio || 1;\n const { positions, requiredHeight } = computeLayout(graph, width);\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * ratio;\n canvas.height = requiredHeight * ratio;\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n console.error(\"Canvas context is not available.\");\n return { dataURL: \"\", height: requiredHeight };\n }\n ctx.scale(ratio, ratio);\n\n // Draw edges first\n ctx.clearRect(0, 0, width, requiredHeight);\n ctx.strokeStyle = \"#aaa\";\n ctx.lineWidth = 2;\n for (const [source, target] of graph.getEdges()) {\n const fromNode = positions[source];\n const toNode = positions[target];\n if (fromNode && toNode) {\n ctx.beginPath();\n ctx.moveTo(fromNode.x, fromNode.y);\n ctx.lineTo(toNode.x, toNode.y);\n ctx.stroke();\n }\n }\n\n // Draw nodes over the edges\n ctx.fillStyle = \"#3498db\";\n for (const node of graph.getNodes()) {\n const pos = positions[node.config.id];\n ctx.beginPath();\n ctx.arc(pos.x, pos.y, 10, 0, Math.PI * 2);\n ctx.fill();\n\n ctx.fillStyle = \"black\";\n ctx.font = `12px Arial`;\n ctx.textAlign = \"center\";\n ctx.fillText(node.type ?? \"\", pos.x, pos.y - 15);\n ctx.fillStyle = \"#3498db\";\n }\n\n const dataURL = canvas.toDataURL(\"image/png\");\n\n return { dataURL, height: requiredHeight };\n}\n\ndeclare global {\n interface Window {\n devtoolsFormatters?: ConsoleFormatter[];\n }\n}\n\n/**\n * Installs custom DevTools formatters for Workglow task graphs, workflows, and related objects.\n * Call this function once in your application to enable rich console output for debugging.\n *\n * @example\n * ```ts\n * import { installDevToolsFormatters } from \"@workglow/task-graph\";\n *\n * // Call early in your app initialization\n * installDevToolsFormatters();\n *\n * // Now console.log will show rich output for Workflow, Task, TaskGraph, etc.\n * console.log(myWorkflow);\n * ```\n */\nexport function installDevToolsFormatters(): void {\n window.devtoolsFormatters = window.devtoolsFormatters || [];\n window.devtoolsFormatters.push(\n new WorkflowAPIConsoleFormatter(),\n new CreateWorkflowConsoleFormatter(),\n new WorkflowConsoleFormatter(),\n new TaskConsoleFormatter(),\n new ReactElementConsoleFormatter(),\n new DataflowConsoleFormatter(),\n new DAGConsoleFormatter()\n );\n}\n"
|
|
44
45
|
],
|
|
45
|
-
"mappings": "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",
|
|
46
|
-
"debugId": "
|
|
46
|
+
"mappings": "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",
|
|
47
|
+
"debugId": "794A622164E9E85664756E2164756E21",
|
|
47
48
|
"names": []
|
|
48
49
|
}
|