@bian-womp/spark-graph 0.3.74 → 0.3.76
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/lib/cjs/index.cjs +7 -2
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/types.d.ts +2 -0
- package/lib/cjs/src/core/types.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +2 -2
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/EdgePropagator.d.ts.map +1 -1
- package/lib/esm/index.js +7 -2
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/types.d.ts +2 -0
- package/lib/esm/src/core/types.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +2 -2
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/EdgePropagator.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/core/type-utils.ts","../../src/builder/Registry.ts","../../src/runtime/components/Graph.ts","../../src/runtime/components/EventEmitter.ts","../../../protocol/lib/esm/index.js","../../src/misc/utils/json.ts","../../src/misc/utils/LevelLogger.ts","../../src/runtime/components/RunContextManager.ts","../../src/runtime/utils.ts","../../src/runtime/components/graph-utils.ts","../../src/runtime/components/HandleResolver.ts","../../src/runtime/components/EdgePropagator.ts","../../src/runtime/components/NodeExecutor.ts","../../src/runtime/components/RuntimeValidatorManager.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/LocalEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type { DataTypeId, HandleId, InputHandleDescriptor, HandleMetadata } from \"@bian-womp/spark-protocol\";\nimport type { TypedValue } from \"./types\";\n\nexport function typed<T = unknown>(typeId: DataTypeId, value: T): TypedValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTyped(v: unknown): v is TypedValue<unknown> {\n return !!v && typeof v === \"object\" && Object.prototype.hasOwnProperty.call(v, \"__spark_type\");\n}\n\nexport function unwrapTypeId(v: unknown): DataTypeId | undefined {\n if (isTyped(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function unwrapValue(v: unknown): unknown {\n if (isTyped(v)) return v.__spark_value;\n return v;\n}\n\n/**\n * Get the full declared type(s) for an input handle (supports union types)\n * Returns the typeId as-is: string for single type, string[] for union types\n */\nexport function getInputDeclaredTypes(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): DataTypeId | DataTypeId[] | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n\n if (typeof v === \"string\") return v;\n if (Array.isArray(v)) return v;\n return v.typeId;\n}\n\n/**\n * Get the primary (first) type ID for an input handle.\n * For union types, returns the first type in the array.\n * This maintains backward compatibility for code that expects a single type.\n */\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): DataTypeId | undefined {\n const decl = getInputDeclaredTypes(inputs, handle);\n if (!decl) return undefined;\n return Array.isArray(decl) ? decl[0] : decl;\n}\n\nexport function isInputPrivate(inputs: Record<string, InputHandleDescriptor> | undefined, handle: HandleId): boolean {\n const v = inputs ? inputs[handle] : undefined;\n if (!v || typeof v === \"string\" || Array.isArray(v)) return false;\n // At this point, v must be an object with optional private/metadata fields\n return !!(typeof v === \"object\" && v !== null && \"private\" in v && v.private);\n}\n\n/**\n * Merge two InputHandleDescriptor values, with dynamic taking precedence.\n * If both have metadata, merge the metadata objects (dynamic overrides static).\n * Supports union types (arrays) in both static and dynamic descriptors.\n */\nexport function mergeInputHandleDescriptors(\n staticDesc: InputHandleDescriptor | undefined,\n dynamicDesc: InputHandleDescriptor | undefined,\n): InputHandleDescriptor | undefined {\n // If only one exists, return it\n if (!staticDesc) return dynamicDesc;\n if (!dynamicDesc) return staticDesc;\n\n // If both are primitive (string or array), dynamic wins\n if (\n (typeof staticDesc === \"string\" || Array.isArray(staticDesc)) &&\n (typeof dynamicDesc === \"string\" || Array.isArray(dynamicDesc))\n ) {\n return dynamicDesc;\n }\n\n // Convert to object form for easier merging\n type HandleDescriptorObj = {\n typeId: DataTypeId | DataTypeId[];\n private?: boolean;\n metadata?: HandleMetadata;\n defaultPolicy?: \"unbound\" | \"bound\";\n };\n\n const staticObj: HandleDescriptorObj =\n typeof staticDesc === \"string\" || Array.isArray(staticDesc) ? { typeId: staticDesc } : staticDesc;\n const dynamicObj: HandleDescriptorObj =\n typeof dynamicDesc === \"string\" || Array.isArray(dynamicDesc) ? { typeId: dynamicDesc } : dynamicDesc;\n\n // Merge: dynamic takes precedence, but merge metadata objects\n const merged: HandleDescriptorObj = {\n typeId: dynamicObj.typeId ?? staticObj.typeId,\n private: dynamicObj.private ?? staticObj.private,\n defaultPolicy: dynamicObj.defaultPolicy ?? staticObj.defaultPolicy,\n };\n\n // Merge metadata if either has it\n if (staticObj.metadata || dynamicObj.metadata) {\n merged.metadata = {\n ...staticObj.metadata,\n ...dynamicObj.metadata, // Dynamic metadata overrides static\n };\n }\n\n // Return as InputHandleDescriptor (which accepts object form)\n return merged as InputHandleDescriptor;\n}\n\n/**\n * Extract metadata from an InputHandleDescriptor\n */\nexport function getInputHandleMetadata(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): HandleMetadata | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v || typeof v === \"string\" || Array.isArray(v)) return undefined;\n return v.metadata as HandleMetadata | undefined;\n}\n","import type { DataTypeId, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport type { DataTypeDescriptor, ExecutionContext, NodeTypeDescriptor } from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Coercion cost for path selection (fewer edges preferred, then fewer async steps)\nexport type CoercionCost = {\n edges: number; // number of coercion steps\n async: number; // number of async steps\n};\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n cost: CoercionCost;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n cost: CoercionCost;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n private static idCounter = 0;\n public readonly id: string;\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n constructor(id?: string) {\n this.id = id ?? `r${Registry.idCounter++}`;\n }\n\n private coercions = new Map<string, { convert: (value: unknown) => unknown; nonTransitive: boolean }>();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<string, ResolvedCoercion>();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n },\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) => (Array.isArray(value) ? value : [value]));\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, InputHandleDescriptor>,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<string, DataTypeId | DataTypeId[]>,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>,\n ) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>,\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n },\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) => (Array.isArray(value) ? value.map((el) => s.serialize(el)) : value),\n deserialize: (data: unknown) => (Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data),\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean },\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr = fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean },\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr = fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted) throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(fromTypeId: string | undefined, toTypeId: string | undefined): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(fromTypeId: string, toTypeId: string): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(fromTypeId: string, toTypeId: string): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: (v) => v,\n cost: { edges: 0, async: 0 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n cost: { edges: 1, async: 0 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n cost: { edges: 1, async: 1 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from) out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (a: { edges: number; async: number } | undefined, b: { edges: number; async: number }) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (e.cost.edges < q.cost.edges || (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const cost: CoercionCost = {\n edges: cur.cost.edges,\n async: cur.cost.async,\n };\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert,\n cost,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync,\n cost,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) => typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts,\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n) ? n : (Array.from(rec.valueToLabel.keys())[0] ?? 0);\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type { ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport { unwrapTypeId } from \"../../core/type-utils\";\nimport { EventEmitter } from \"./EventEmitter\";\nimport type { RuntimeNode, RuntimeEdge, ReadonlyRuntimeNode, ExecutionPlan } from \"./types\";\n\n/**\n * Graph component - manages nodes, edges, and handle resolution\n * This is the ONLY place where nodes, edges, and resolvedByNode are directly updated.\n */\nexport class Graph {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private resolvedByNode = new Map<string, ResolvedHandles>();\n\n constructor(\n private eventEmitter: EventEmitter,\n private registry?: Registry,\n ) {}\n\n // ==================== Node Accessors ====================\n\n /**\n * Get a node by ID (readonly to prevent accidental modifications)\n */\n getNode(nodeId: string): ReadonlyRuntimeNode<any> | undefined {\n return this.nodes.get(nodeId) as ReadonlyRuntimeNode<any> | undefined;\n }\n\n /**\n * Get a node by ID (mutable, for internal use only)\n * @internal\n */\n private getNodeMutable(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n /**\n * Iterate over all nodes safely (readonly to prevent accidental modifications)\n */\n forEachNode(callback: (node: ReadonlyRuntimeNode<any>, nodeId: string) => void): void {\n for (const [nodeId, node] of this.nodes.entries()) {\n callback(node as ReadonlyRuntimeNode<any>, nodeId);\n }\n }\n\n /**\n * Get all node IDs\n */\n getNodeIds(): string[] {\n return Array.from(this.nodes.keys());\n }\n\n /**\n * Check if a node exists\n */\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // ==================== Node Mutators ====================\n\n /**\n * Set a node (creates or replaces)\n */\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n /**\n * Delete a node\n */\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n // ==================== Node Property Updates ====================\n\n /**\n * Update node inputs\n */\n updateNodeInput(nodeId: string, handle: string, value: unknown, calculated: boolean = true): void {\n const node = this.getNodeMutable(nodeId);\n if (!node) return;\n if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n\n if (calculated) {\n this.updateNodeLastInputAt(nodeId, handle, Date.now());\n }\n\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n runtimeTypeId: unwrapTypeId(value),\n });\n }\n\n /**\n * Update node outputs\n */\n updateNodeOutput(nodeId: string, handle: string, value: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (value === undefined) {\n delete node.outputs[handle];\n } else {\n node.outputs[handle] = value;\n }\n\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n runtimeTypeId: unwrapTypeId(value),\n });\n }\n\n /**\n * Update node state\n */\n updateNodeState(nodeId: string, updates: Partial<RuntimeNode<any>[\"state\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n Object.assign(node.state, updates);\n }\n\n /**\n * Update node params\n */\n updateNodeParams(nodeId: string, params: Record<string, unknown> | undefined): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.params = params;\n }\n\n /**\n * Update node policy\n */\n updateNodePolicy(nodeId: string, policy: Partial<RuntimeNode<any>[\"policy\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.policy = { ...node.policy, ...policy };\n }\n\n /**\n * Update node stats\n */\n updateNodeStats(nodeId: string, updates: Partial<RuntimeNode<any>[\"stats\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n Object.assign(node.stats, updates);\n }\n\n /**\n * Increment node runSeq\n */\n incrementNodeRunSeq(nodeId: string): number {\n const node = this.nodes.get(nodeId);\n if (!node) return 0;\n node.runSeq += 1;\n return node.runSeq;\n }\n\n /**\n * Set node latestRunId\n */\n setNodeLatestRunId(nodeId: string, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.latestRunId = runId;\n }\n\n /**\n * Set node lastScheduledAt\n */\n setNodeLastScheduledAt(nodeId: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.lastScheduledAt = timestamp;\n }\n\n /**\n * Update node lastInputAt timestamp for a handle\n */\n updateNodeLastInputAt(nodeId: string, handle: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (!node.lastInputAt) node.lastInputAt = {};\n\n node.lastInputAt[handle] = timestamp;\n }\n\n /**\n * Set node lastSuccessAt timestamp\n */\n setNodeLastSuccessAt(nodeId: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.lastSuccessAt = timestamp;\n }\n\n // ==================== Node Queue Operations ====================\n\n /**\n * Add item to node queue\n */\n addToNodeQueue(nodeId: string, item: ExecutionPlan): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue.push(item);\n }\n\n /**\n * Remove first item from node queue\n */\n shiftNodeQueue(nodeId: string): ExecutionPlan | undefined {\n const node = this.nodes.get(nodeId);\n if (!node) return undefined;\n return node.queue.shift();\n }\n\n /**\n * Clear node queue\n */\n clearNodeQueue(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue = [];\n }\n\n /**\n * Replace node queue\n */\n replaceNodeQueue(nodeId: string, items: ExecutionPlan[]): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue = items;\n }\n\n // ==================== Node Controller Operations ====================\n\n /**\n * Add controller to node\n */\n addNodeController(nodeId: string, controller: AbortController, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n }\n\n /**\n * Remove controller from node\n */\n removeNodeController(nodeId: string, controller: AbortController): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n }\n\n /**\n * Clear all controllers from node\n */\n clearNodeControllers(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n }\n\n /**\n * Get all controllers for a node\n */\n getNodeControllers(nodeId: string): Set<AbortController> {\n const node = this.nodes.get(nodeId);\n if (!node) return new Set();\n return new Set(node.activeControllers);\n }\n\n // ==================== Node Run Context Operations ====================\n\n /**\n * Add run context ID to node\n */\n addNodeRunContextId(nodeId: string, runContextId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.add(runContextId);\n }\n\n /**\n * Add multiple run context IDs to node\n */\n addNodeRunContextIds(nodeId: string, runContextIds: Set<string>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const id of runContextIds) {\n node.activeRunContextIds.add(id);\n }\n }\n\n /**\n * Remove run context ID from node\n */\n removeNodeRunContextId(nodeId: string, runContextId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.delete(runContextId);\n }\n\n /**\n * Clear all run context IDs from node\n */\n clearNodeRunContextIds(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.clear();\n }\n\n /**\n * Get run context IDs for a node\n */\n getNodeRunContextIds(nodeId: string): Set<string> {\n const node = this.nodes.get(nodeId);\n if (!node) return new Set();\n return new Set(node.activeRunContextIds);\n }\n\n // ==================== Node Snapshot Cancelled Run IDs ====================\n\n /**\n * Add snapshot cancelled run ID to node\n */\n addSnapshotCancelledRunId(nodeId: string, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n\n // ==================== Edge Accessors ====================\n\n /**\n * Iterate over all edges safely\n */\n forEachEdge(callback: (edge: RuntimeEdge, index: number) => void): void {\n this.edges.forEach(callback);\n }\n\n /**\n * Find edges matching a predicate\n */\n findEdges(predicate: (edge: RuntimeEdge) => boolean): RuntimeEdge[] {\n return this.edges.filter(predicate);\n }\n\n /**\n * Get edges by source node and handle\n */\n getEdgesBySource(srcNodeId: string, srcHandle: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle);\n }\n\n /**\n * Get edges by target node and handle\n */\n getEdgesByTarget(targetNodeId: string, targetHandle: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.target.nodeId === targetNodeId && e.target.handle === targetHandle);\n }\n\n /**\n * Get inbound edges for a node\n */\n getInboundEdges(nodeId: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.target.nodeId === nodeId);\n }\n\n /**\n * Get outbound edges for a node\n */\n getOutboundEdges(nodeId: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.source.nodeId === nodeId);\n }\n\n // ==================== Edge Mutators ====================\n\n /**\n * Set all edges (replaces existing)\n */\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = [...edges];\n }\n\n /**\n * Update an edge by ID\n */\n updateEdge(edgeId: string, updates: Partial<RuntimeEdge>): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n Object.assign(edge, updates);\n }\n\n /**\n * Update edge properties (convert, convertAsync, types, etc.)\n */\n updateEdgeProperties(\n edgeId: string,\n updates: {\n dstDeclared?: string | string[];\n srcUnionTypes?: string[] | undefined;\n convert?: ((value: unknown) => unknown) | undefined;\n convertAsync?: ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined;\n },\n ): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n edge.dstDeclared = updates.dstDeclared;\n edge.srcUnionTypes = updates.srcUnionTypes;\n edge.convert = updates.convert;\n edge.convertAsync = updates.convertAsync;\n }\n\n /**\n * Update edge stats\n */\n updateEdgeStats(edgeId: string, updates: Partial<RuntimeEdge[\"stats\"]>): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n Object.assign(edge.stats, updates);\n }\n\n /**\n * Get edge by ID\n */\n getEdge(edgeId: string): RuntimeEdge | undefined {\n return this.edges.find((e) => e.id === edgeId);\n }\n\n // ==================== Registry Accessors ====================\n\n getRegistry(): Registry | undefined {\n return this.registry;\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n // ==================== Resolved Handles Accessors ====================\n\n getResolvedHandles(nodeId: string): ResolvedHandles | undefined {\n return this.resolvedByNode.get(nodeId);\n }\n\n setResolvedHandles(nodeId: string, handles: ResolvedHandles): void {\n this.resolvedByNode.set(nodeId, handles);\n }\n\n // ==================== Utility Methods ====================\n\n /**\n * Check if all inbound edges for a node have values\n */\n allInboundHaveValue(nodeId: string): boolean {\n const node = this.nodes.get(nodeId);\n if (!node) return false;\n const inbound = this.edges.filter((e) => e.target.nodeId === nodeId);\n if (inbound.length === 0) return true;\n for (const e of inbound) {\n if (node.resolvedHandles?.inputs?.[e.target.handle] && !node.inputs[e.target.handle]) {\n return false;\n }\n }\n return true;\n }\n\n // ==================== Clear Operations ====================\n\n /**\n * Clear all data\n */\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n}\n","import type { RuntimeEventName, RuntimeEventMap, RuntimeEventListener } from \"../GraphRuntime\";\n\n/**\n * Event emitter component for GraphRuntime\n * Handles all event listener management and emission\n */\nexport class EventEmitter {\n private listeners = new Map<RuntimeEventName, Set<RuntimeEventListener<RuntimeEventName>>>();\n\n on<K extends RuntimeEventName>(event: K, handler: RuntimeEventListener<K>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n emit<K extends RuntimeEventName>(event: K, payload: RuntimeEventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload);\n } catch (err) {\n console.error(`Error in ${event} handler:`, err);\n }\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type { JsonPath, PathSegment } from \"@bian-womp/spark-protocol\";\n\nexport function parseJsonPath(path: JsonPath): PathSegment[] {\n if (typeof path === \"string\") {\n return path.split(\".\").flatMap((segment) => {\n const arrayMatch = segment.match(/^(.+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const index = parseInt(arrayMatch[2], 10);\n return arrayMatch[1] ? [arrayMatch[1], index] : [index];\n }\n return [segment];\n });\n }\n return path;\n}\n\nexport function getValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[],\n): { value: unknown; parent: unknown; key: string | number } | null {\n if (pathSegments.length === 0) {\n return { value: obj, parent: null, key: \"\" };\n }\n\n let current: unknown = obj;\n let parent: unknown = null;\n let parentKey: string | number = \"\";\n\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (current === null || current === undefined || typeof current !== \"object\") {\n return null;\n }\n\n if (typeof segment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(segment, 10);\n if (isNaN(index)) return null;\n parent = current;\n parentKey = index;\n current = current[index];\n } else {\n parent = current;\n parentKey = segment;\n current = (current as Record<string, unknown>)[segment];\n }\n } else if (typeof segment === \"number\") {\n if (Array.isArray(current)) {\n if (segment >= 0 && segment < current.length) {\n parent = current;\n parentKey = segment;\n current = current[segment];\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else if (segment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => segment.test(key));\n if (!matchingKey) return null;\n parent = current;\n parentKey = matchingKey;\n current = obj[matchingKey];\n } else {\n return null;\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(lastSegment, 10);\n if (isNaN(index)) return null;\n return { value: current[index], parent: current, key: index };\n } else if (current !== null && current !== undefined && typeof current === \"object\") {\n return {\n value: (current as Record<string, unknown>)[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n } else if (typeof lastSegment === \"number\") {\n if (Array.isArray(current)) {\n if (lastSegment >= 0 && lastSegment < current.length) {\n return {\n value: current[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n }\n return null;\n } else if (lastSegment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => lastSegment.test(key));\n if (!matchingKey) return null;\n return { value: obj[matchingKey], parent: current, key: matchingKey };\n }\n\n return null;\n}\n\nexport function setValueAtPath(obj: unknown, pathSegments: PathSegment[], newValue: unknown): boolean {\n const result = getValueAtPath(obj, pathSegments);\n if (!result || result.parent === null) return false;\n\n if (Array.isArray(result.parent)) {\n (result.parent as unknown[])[result.key as number] = newValue;\n } else {\n (result.parent as Record<string, unknown>)[result.key] = newValue;\n }\n return true;\n}\n\n/**\n * Sets a value at a path, creating intermediate objects as needed.\n * Mutates the root object in place.\n * @param root - The root object to modify (must be an object, will be initialized if needed)\n * @param pathSegments - The path segments to traverse\n * @param value - The value to set, or null to delete the path\n * @throws Error if path cannot be created (e.g., array indices not supported, invalid parent types)\n */\nexport function setValueAtPathWithCreation(\n root: Record<string, unknown>,\n pathSegments: PathSegment[],\n value: unknown,\n): boolean {\n if (value === null) {\n const result = getValueAtPath(root, pathSegments);\n if (result && result.parent !== null && !Array.isArray(result.parent)) {\n const hadValue = result.key in (result.parent as Record<string, unknown>);\n delete (result.parent as Record<string, unknown>)[result.key];\n return hadValue;\n }\n return false;\n }\n\n if (!root || typeof root !== \"object\" || Array.isArray(root)) {\n throw new Error(\"Root must be an object\");\n }\n\n let current: any = root;\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (typeof segment === \"string\") {\n if (\n !current ||\n typeof current !== \"object\" ||\n Array.isArray(current) ||\n !(segment in current) ||\n typeof current[segment] !== \"object\" ||\n current[segment] === null ||\n Array.isArray(current[segment])\n ) {\n if (!current || typeof current !== \"object\" || Array.isArray(current)) {\n throw new Error(`Cannot create path: parent at segment ${i} is not an object`);\n }\n current[segment] = {};\n }\n current = current[segment];\n } else {\n throw new Error(\"Array indices not supported in extData paths\");\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (!current || typeof current !== \"object\" || Array.isArray(current)) {\n throw new Error(`Cannot set value: parent at final segment is not an object`);\n }\n const hadValue = lastSegment in current;\n const oldValue = current[lastSegment];\n current[lastSegment] = value;\n return !hadValue || JSON.stringify(oldValue) !== JSON.stringify(value);\n } else {\n throw new Error(\"Array indices not supported in extData paths\");\n }\n}\n\nexport function findMatchingPaths(\n obj: unknown,\n pathSegments: PathSegment[],\n currentPath: PathSegment[] = [],\n): Array<{ path: PathSegment[]; value: unknown }> {\n if (pathSegments.length === 0) {\n return [{ path: currentPath, value: obj }];\n }\n\n const [currentSegment, ...remainingSegments] = pathSegments;\n const results: Array<{ path: PathSegment[]; value: unknown }> = [];\n\n if (currentSegment === undefined) {\n return results;\n }\n\n if (typeof currentSegment === \"string\") {\n if (Array.isArray(obj)) {\n const index = parseInt(currentSegment, 10);\n if (!isNaN(index) && index >= 0 && index < obj.length) {\n results.push(...findMatchingPaths(obj[index], remainingSegments, [...currentPath, index]));\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n if (currentSegment in objRecord) {\n results.push(\n ...findMatchingPaths(objRecord[currentSegment], remainingSegments, [...currentPath, currentSegment]),\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(...findMatchingPaths(obj[currentSegment], remainingSegments, [...currentPath, currentSegment]));\n }\n }\n } else if (currentSegment instanceof RegExp) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n results.push(...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i]));\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n for (const key of Object.keys(objRecord)) {\n if (currentSegment.test(key)) {\n results.push(...findMatchingPaths(objRecord[key], remainingSegments, [...currentPath, key]));\n }\n }\n }\n }\n\n return results;\n}\n\nexport function stringifyJson(\n obj: any,\n oneLiner?: {\n indent: number;\n paths?: string[];\n maxDepth?: number;\n criteria?: (info: { path: string; key: string; value: any; depth: number }) => boolean;\n },\n) {\n // No formatting requested: behave exactly like native JSON.stringify.\n if (!oneLiner) return JSON.stringify(obj);\n\n const indentSize = Number.isFinite(oneLiner.indent) ? Math.max(0, Math.floor(oneLiner.indent)) : 2;\n const maxDepth =\n typeof oneLiner.maxDepth === \"number\" && Number.isFinite(oneLiner.maxDepth) ? oneLiner.maxDepth : undefined;\n const patterns = (oneLiner.paths || []).filter(Boolean);\n\n // Preserve JSON.stringify semantics for things like toJSON(), dropping functions/undefined, etc.\n // Note: this still throws on circular structures (same as JSON.stringify).\n const base = JSON.stringify(obj);\n if (base === undefined) return base as any;\n const value = JSON.parse(base);\n\n const pathMatchers = patterns.map((p) => compilePathMatcher(String(p)));\n const formatKey = (k: string) => JSON.stringify(k);\n\n const shouldInline = (path: string, key: string, v: any, depth: number) => {\n if (maxDepth !== undefined && depth > maxDepth) return true;\n if (oneLiner.criteria?.({ path, key, value: v, depth })) return true;\n if (!pathMatchers.length) return false;\n const tokensWithRoot = tokenizePath(path);\n const tokensNoRoot = tokensWithRoot[0] === \"$\" ? tokensWithRoot.slice(1) : tokensWithRoot;\n return pathMatchers.some((m) => m(tokensWithRoot, tokensNoRoot));\n };\n\n const stringifyInline = (v: any, depth: number, path: string): string => {\n if (v === null) return \"null\";\n const t = typeof v;\n if (t === \"string\") return JSON.stringify(v);\n if (t === \"number\" || t === \"boolean\") return String(v);\n if (Array.isArray(v)) {\n if (!v.length) return \"[]\";\n const parts = v.map((vv, i) => stringifyInline(vv, depth, `${path}[${i}]`));\n return `[${parts.join(\", \")}]`;\n }\n if (t === \"object\") {\n const keys = Object.keys(v);\n if (!keys.length) return \"{}\";\n const parts = keys.map((k) => `${formatKey(k)}: ${stringifyInline(v[k], depth + 1, `${path}.${k}`)}`);\n return `{ ${parts.join(\", \")} }`;\n }\n // Shouldn't happen after JSON.parse(JSON.stringify(...)), but keep output valid JSON.\n return \"null\";\n };\n\n const stringifyPretty = (v: any, depth: number, path: string, key: string): string => {\n if (shouldInline(path, key, v, depth)) return stringifyInline(v, depth, path);\n if (v === null) return \"null\";\n const t = typeof v;\n if (t === \"string\") return JSON.stringify(v);\n if (t === \"number\" || t === \"boolean\") return String(v);\n\n const indentCur = \" \".repeat(indentSize * depth);\n const indentInner = \" \".repeat(indentSize * (depth + 1));\n\n if (Array.isArray(v)) {\n if (!v.length) return \"[]\";\n // Compact array style: `[{...}, {...}]` while still allowing multi-line objects within.\n const parts = v.map((vv, i) => stringifyPretty(vv, depth, `${path}[${i}]`, String(i)));\n return `[${parts.join(\", \")}]`;\n }\n\n if (t === \"object\") {\n const keys = Object.keys(v);\n if (!keys.length) return \"{}\";\n\n const lines = keys.map((k, idx) => {\n const childPath = `${path}.${k}`;\n const rendered = stringifyPretty(v[k], depth + 1, childPath, k);\n const comma = idx === keys.length - 1 ? \"\" : \",\";\n return `${indentInner}${formatKey(k)}: ${rendered}${comma}`;\n });\n return `{\\n${lines.join(\"\\n\")}\\n${indentCur}}`;\n }\n\n return \"null\";\n };\n\n return stringifyPretty(value, 0, \"$\", \"$\");\n}\n\nfunction tokenizePath(path: string): string[] {\n // Path format we generate: `$`, `$.a.b[0].c`\n // Tokens: [\"$\", \"a\", \"b\", \"[0]\", \"c\"]\n const tokens: string[] = [];\n let i = 0;\n if (path.startsWith(\"$\")) {\n tokens.push(\"$\");\n i = 1;\n }\n while (i < path.length) {\n const ch = path[i];\n if (ch === \".\") {\n i++;\n const start = i;\n while (i < path.length && path[i] !== \".\" && path[i] !== \"[\") i++;\n if (i > start) tokens.push(path.slice(start, i));\n continue;\n }\n if (ch === \"[\") {\n const end = path.indexOf(\"]\", i + 1);\n if (end < 0) {\n tokens.push(path.slice(i));\n break;\n }\n tokens.push(path.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n // Unexpected char; skip.\n i++;\n }\n return tokens.filter((t) => t.length);\n}\n\nfunction tokenizePattern(pattern: string): string[] {\n // Pattern format: `$`, `$.a.*.b`, `**.graph.**`, `arr[2].z`\n // Tokens: [\"$\", \"a\", \"*\", \"b\"] etc. Brackets become their own token: [\"arr\",\"[2]\",\"z\"]\n const tokens: string[] = [];\n let i = 0;\n if (pattern.startsWith(\"$\")) {\n tokens.push(\"$\");\n i = 1;\n }\n while (i < pattern.length) {\n const ch = pattern[i];\n if (ch === \".\") {\n i++;\n continue;\n }\n if (ch === \"[\") {\n const end = pattern.indexOf(\"]\", i + 1);\n if (end < 0) {\n tokens.push(pattern.slice(i));\n break;\n }\n tokens.push(pattern.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n const start = i;\n while (i < pattern.length && pattern[i] !== \".\" && pattern[i] !== \"[\") i++;\n if (i > start) tokens.push(pattern.slice(start, i));\n }\n return tokens.filter((t) => t.length);\n}\n\nfunction compilePathMatcher(pattern: string): (tokensWithRoot: string[], tokensNoRoot: string[]) => boolean {\n // Wildcard semantics (case-insensitive):\n // - `*` matches exactly 1 path segment (key or `[index]`)\n // - `**` matches 0 or more segments\n // - `#` matches exactly 1 numeric segment (e.g. `\"0\"` or `[0]`)\n // - `##` matches 0 or more numeric segments\n // - `[*]` matches exactly 1 index segment\n const pat = tokenizePattern(pattern);\n const expectsRoot = pat[0] === \"$\";\n\n const eq = (a: string, b: string) => a.localeCompare(b, undefined, { sensitivity: \"accent\" }) === 0;\n const isIndex = (t: string) => t.startsWith(\"[\") && t.endsWith(\"]\");\n const isNumericKey = (t: string) => /^[0-9]+$/.test(t);\n const isNumericSegment = (t: string) => isNumericKey(t) || (isIndex(t) && /^[0-9]+$/.test(t.slice(1, -1)));\n\n const match = (patTokens: string[], pathTokens: string[]) => {\n const memo = new Map<string, boolean>();\n const go = (pi: number, ti: number): boolean => {\n const key = `${pi},${ti}`;\n const cached = memo.get(key);\n if (cached !== undefined) return cached;\n\n let res = false;\n if (pi === patTokens.length) {\n res = ti === pathTokens.length;\n } else {\n const p = patTokens[pi];\n if (p === \"**\") {\n // Match any number of segments, including zero.\n for (let k = ti; k <= pathTokens.length; k++) {\n if (go(pi + 1, k)) {\n res = true;\n break;\n }\n }\n } else if (p === \"##\") {\n // Match any number of numeric segments, including zero.\n for (let k = ti; k <= pathTokens.length; k++) {\n let ok = true;\n for (let j = ti; j < k; j++) {\n if (!isNumericSegment(pathTokens[j])) {\n ok = false;\n break;\n }\n }\n if (ok && go(pi + 1, k)) {\n res = true;\n break;\n }\n }\n } else if (p === \"*\") {\n res = ti < pathTokens.length && go(pi + 1, ti + 1);\n } else if (p === \"#\") {\n res = ti < pathTokens.length && isNumericSegment(pathTokens[ti]) && go(pi + 1, ti + 1);\n } else if (p === \"[*]\") {\n res = ti < pathTokens.length && isIndex(pathTokens[ti]) && go(pi + 1, ti + 1);\n } else {\n res = ti < pathTokens.length && eq(p.toLowerCase(), pathTokens[ti].toLowerCase()) && go(pi + 1, ti + 1);\n }\n }\n\n memo.set(key, res);\n return res;\n };\n return go(0, 0);\n };\n\n return (tokensWithRoot, tokensNoRoot) => match(pat, expectsRoot ? tokensWithRoot : tokensNoRoot);\n}\n\nexport function stringifySceneAndOps(obj: any) {\n return stringifyJson(obj, {\n indent: 2,\n paths: [\n \"**.camera.animation.*\",\n \"**.animations.*\",\n \"**.nodes.#.*\",\n \"**.graphs.#.*\",\n \"**.instances.#.*\",\n \"**.shaders.#.*\",\n \"**.materials.#.*\",\n \"**.ext.#\",\n \"**.ext.*.#.*\",\n \"**.perUserExt.*.#\",\n \"**.perUserExt.*.*.#\",\n ],\n criteria: ({ value, key }) =>\n (typeof value === \"object\" && value && Object.keys(value).sort().join(\",\") === \"x,y,z\") || key === \"value\",\n });\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport { stringifySceneAndOps } from \"./json\";\n\n/**\n * A reusable logger class that supports configurable log levels and prefixes.\n * Can be instantiated with a default log level and optionally override per call.\n */\nexport class LevelLogger {\n private defaultLevel: LogLevel;\n private prefix: string;\n\n /**\n * Maps log levels to numeric values for comparison\n */\n public static readonly levelValues: Record<LogLevel, number> = LOG_LEVEL_VALUES;\n\n constructor(defaultLevel: LogLevel = \"info\", prefix: string = \"\") {\n this.defaultLevel = defaultLevel;\n this.prefix = prefix;\n }\n\n /**\n * Sets the prefix for log messages\n */\n setPrefix(prefix: string): void {\n this.prefix = prefix;\n }\n\n /**\n * Gets the current prefix\n */\n getPrefix(): string {\n return this.prefix;\n }\n\n /**\n * Sets the default log level for this logger instance\n */\n setLevel(level: LogLevel): void {\n this.defaultLevel = level;\n }\n\n /**\n * Gets the current default log level\n */\n getLevel(): LogLevel {\n return this.defaultLevel;\n }\n\n getLevelValue(): number {\n return LevelLogger.levelValues[this.defaultLevel];\n }\n\n /**\n * Logs a debug message\n */\n debug(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"debug\", message, context, overrideLevel);\n }\n\n /**\n * Logs an info message\n */\n info(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"info\", message, context, overrideLevel);\n }\n\n /**\n * Logs a warning message\n */\n warn(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"warn\", message, context, overrideLevel);\n }\n\n /**\n * Logs an error message\n */\n error(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"error\", message, context, overrideLevel);\n }\n\n /**\n * Tries to parse a string as JSON and format it nicely if it's fully JSON\n */\n private parseJsonStringIfFull(str: string): string {\n const trimmed = str.trim();\n // Check if the string starts with { or [ and ends with } or ]\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) || (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n const parsed = JSON.parse(trimmed);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parsing fails, return original string\n return str;\n }\n }\n return str;\n }\n\n /**\n * Tries to parse a string as JSON and return the parsed object/array if it's fully JSON\n * Used for parsing JSON strings inside arrays so they can be formatted by stringifySceneAndOps\n */\n private parseJsonStringToObject(str: string): unknown {\n const trimmed = str.trim();\n // Check if the string starts with { or [ and ends with } or ]\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) || (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // If parsing fails, return original string\n return str;\n }\n }\n return str;\n }\n\n /**\n * Parses JSON strings in context values if they are fully JSON\n * Also handles arrays containing JSON strings\n */\n private parseJsonStringsInContext(context: Record<string, unknown>): Record<string, unknown> {\n const parsed: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n if (typeof value === \"string\") {\n parsed[key] = this.parseJsonStringIfFull(value);\n } else if (Array.isArray(value)) {\n // Process arrays: parse JSON strings within the array to objects/arrays\n // so they can be formatted correctly by stringifySceneAndOps\n parsed[key] = value.map((item) => {\n if (typeof item === \"string\") {\n return this.parseJsonStringToObject(item);\n }\n return item;\n });\n } else {\n parsed[key] = value;\n }\n }\n return parsed;\n }\n\n /**\n * Core logging method that respects the log level and applies prefix\n */\n private log(\n requestedLevel: Exclude<LogLevel, \"silent\">,\n message: string,\n context?: Record<string, unknown>,\n overrideLevel?: LogLevel,\n ): void {\n const effectiveLevel = overrideLevel ?? this.defaultLevel;\n\n // Silent level suppresses all logs\n if (effectiveLevel === \"silent\") {\n return;\n }\n\n const requestedValue = LevelLogger.levelValues[requestedLevel] ?? 1;\n const effectiveValue = LevelLogger.levelValues[effectiveLevel] ?? 1;\n\n // Only log if the requested level is >= effective level\n if (requestedValue >= effectiveValue) {\n const { logFormat = \"plain\", ...rest } = context ?? {};\n const formatJson = logFormat === \"json\" || logFormat === \"json-deep\";\n const parseJsonString = logFormat === \"json-deep\";\n\n // Parse JSON strings in context values if requested\n let processedContext = rest;\n const parsedKeys = new Set<string>(); // Track keys that had JSON strings parsed\n if (parseJsonString && rest && Object.keys(rest).length > 0) {\n // Check which keys had JSON strings before parsing\n for (const [key, value] of Object.entries(rest)) {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n JSON.parse(trimmed);\n parsedKeys.add(key);\n } catch {\n // Not valid JSON, skip\n }\n }\n } else if (Array.isArray(value)) {\n // Check if array contains JSON strings\n for (const item of value) {\n if (typeof item === \"string\") {\n const trimmed = item.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n JSON.parse(trimmed);\n parsedKeys.add(key);\n break; // Found at least one JSON string in array\n } catch {\n // Not valid JSON, continue\n }\n }\n }\n }\n }\n }\n processedContext = this.parseJsonStringsInContext(rest);\n }\n\n const contextStr =\n processedContext && Object.keys(processedContext).length > 0\n ? `${formatJson ? \"\\n\" : \" \"}${Object.entries(processedContext)\n .map(([k, v]) => {\n // If parseJsonString is enabled and value is a formatted JSON string\n // (starts with { or [ and contains newlines indicating it was formatted),\n // output it directly without stringifySceneAndOps to preserve formatting\n // Wrap it with json`...` to distinguish it as formatted JSON\n if (parseJsonString && typeof v === \"string\" && v.trim().match(/^[{\\[]/) && v.includes(\"\\n\")) {\n return `${k}=json\\`${v}\\``;\n }\n // If this key had a JSON string parsed and we're formatting JSON,\n // wrap the formatted output with json`...`\n if (formatJson && parseJsonString && parsedKeys.has(k)) {\n return `${k}=json\\`${stringifySceneAndOps(v)}\\``;\n }\n if (formatJson) {\n return `${k}=${stringifySceneAndOps(v)}`;\n }\n return `${k}=${JSON.stringify(v)}`;\n })\n .join(formatJson ? \"\\n\" : \" \")}`\n : \"\";\n const prefixedMessage = this.prefix ? `${this.prefix} ${message}${contextStr}` : `${message}${contextStr}`;\n switch (requestedLevel) {\n case \"debug\":\n console.info(prefixedMessage);\n break;\n case \"info\":\n console.info(prefixedMessage);\n break;\n case \"warn\":\n console.warn(prefixedMessage);\n break;\n case \"error\":\n console.error(prefixedMessage);\n break;\n }\n }\n }\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { Graph } from \"./Graph\";\nimport { LevelLogger } from \"../../misc/utils/LevelLogger\";\n\nexport type RunContextId = string;\n\nexport interface RunContext {\n id: RunContextId;\n startNodes: Set<string>;\n cancelledNodes: Set<string>; // Nodes this context must not propagate through\n pendingScheduling: number; // Scheduling holds while callers decide what to run\n pendingNodes: number; // Active node runs for this context\n pendingEdges: number; // Active async edge conversions for this context\n pendingResolvers: number; // Active handle resolution operations for this context\n pendingQueued: number; // Queued node runs that haven't started yet\n skipPropagateValues: boolean; // If true, don't set inputs of linked nodes\n propagate: boolean; // If false, don't schedule downstream nodes\n resolve?: () => void; // Resolves the runFromHere() Promise\n}\n\n/**\n * RunContextManager component - manages run-context lifecycle\n */\nexport class RunContextManager {\n private runContexts = new Map<RunContextId, RunContext>();\n private runContextCounter = 0;\n private readonly logger: LevelLogger;\n\n constructor(\n private readonly graph: Graph,\n logLevel?: LogLevel,\n ) {\n this.graph = graph;\n this.logger = new LevelLogger(logLevel ?? \"info\", \"[RunContextManager]\");\n }\n\n /**\n * Set the log level for this manager\n */\n setLogLevel(logLevel: LogLevel): void {\n this.logger.setLevel(logLevel);\n }\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n options?: {\n resolve?: () => void;\n skipPropagateValues?: boolean;\n propagate?: boolean;\n },\n ): RunContextId {\n const id: RunContextId = `rc-${++this.runContextCounter}`;\n const ctx: RunContext = {\n id,\n startNodes: new Set([startNodeId]),\n cancelledNodes: new Set(),\n pendingScheduling: 1,\n pendingNodes: 0,\n pendingEdges: 0,\n pendingResolvers: 0,\n pendingQueued: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n resolve: options?.resolve,\n };\n this.runContexts.set(id, ctx);\n this.logger.info(\"create-run-context\", {\n id,\n startNodeId,\n skipPropagateValues: ctx.skipPropagateValues,\n propagate: ctx.propagate,\n });\n return id;\n }\n\n /**\n * Get a run-context by ID\n */\n getRunContext(id: RunContextId): RunContext | undefined {\n return this.runContexts.get(id);\n }\n\n /**\n * Get all run-contexts\n */\n getAllRunContexts(): Map<RunContextId, RunContext> {\n return this.runContexts;\n }\n\n /**\n * Check if there are any active run-contexts\n */\n hasActiveRunContexts(): boolean {\n return this.runContexts.size > 0;\n }\n\n /**\n * Release one scheduling hold from a run-context.\n * Must be called once by the creator when scheduling decisions are complete.\n */\n releaseScheduling(id: RunContextId): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"release-scheduling-context-not-found\", {\n runContextId: id,\n });\n return;\n }\n if (ctx.pendingScheduling > 0) {\n ctx.pendingScheduling--;\n } else {\n this.logger.warn(\"release-scheduling-underflow\", {\n runContextId: id,\n pendingScheduling: ctx.pendingScheduling,\n });\n }\n this.logger.debug(\"release-scheduling\", {\n runContextId: id,\n pendingScheduling: ctx.pendingScheduling,\n });\n this.finishRunContextIfPossible(id);\n }\n\n /**\n * Increment queued work count for a run-context.\n * Used by asyncConcurrency: \"queue\" to keep contexts alive while work is queued.\n */\n incrementQueued(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"increment-queued-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingQueued++;\n this.logger.debug(\"increment-queued\", {\n runContextId: id,\n nodeId,\n pendingQueued: ctx.pendingQueued,\n });\n }\n\n /**\n * Decrement queued work count for a run-context.\n * Called when queued work is either started or dropped.\n */\n decrementQueued(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"decrement-queued-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingQueued--;\n this.logger.debug(\"decrement-queued\", {\n runContextId: id,\n nodeId,\n pendingQueued: ctx.pendingQueued,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-node-run-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingNodes++;\n this.logger.debug(\"start-node-run\", {\n runContextId: id,\n nodeId,\n pendingNodes: ctx.pendingNodes,\n });\n }\n\n finishNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-node-run-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingNodes--;\n this.logger.debug(\"finish-node-run\", {\n runContextId: id,\n nodeId,\n pendingNodes: ctx.pendingNodes,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-edge-conversion-context-not-found\", {\n runContextId: id,\n edgeId,\n });\n return;\n }\n ctx.pendingEdges++;\n this.logger.debug(\"start-edge-conversion\", {\n runContextId: id,\n edgeId,\n pendingEdges: ctx.pendingEdges,\n });\n }\n\n finishEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-edge-conversion-context-not-found\", {\n runContextId: id,\n edgeId,\n });\n return;\n }\n ctx.pendingEdges--;\n this.logger.debug(\"finish-edge-conversion\", {\n runContextId: id,\n edgeId,\n pendingEdges: ctx.pendingEdges,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-handle-resolution-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingResolvers++;\n this.logger.debug(\"start-handle-resolution\", {\n runContextId: id,\n nodeId,\n pendingResolvers: ctx.pendingResolvers,\n });\n }\n\n finishHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-handle-resolution-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingResolvers--;\n this.logger.debug(\"finish-handle-resolution\", {\n runContextId: id,\n nodeId,\n pendingResolvers: ctx.pendingResolvers,\n });\n this.finishRunContextIfPossible(id);\n }\n\n /**\n * Finish and remove a run-context when all pending operations reach zero\n */\n private finishRunContextIfPossible(id: RunContextId): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-run-context-not-found\", {\n runContextId: id,\n });\n return;\n }\n if (\n ctx.pendingScheduling > 0 ||\n ctx.pendingNodes > 0 ||\n ctx.pendingEdges > 0 ||\n ctx.pendingResolvers > 0 ||\n ctx.pendingQueued > 0\n ) {\n return; // Still has pending work\n }\n\n this.logger.info(\"finish-run-context\", {\n runContextId: id,\n startNodes: Array.from(ctx.startNodes),\n cancelledNodes: Array.from(ctx.cancelledNodes),\n });\n\n // Clean up activeRunContexts from all nodes\n this.graph.forEachNode((node) => {\n this.graph.removeNodeRunContextId(node.nodeId, id);\n });\n\n this.runContexts.delete(id);\n if (ctx.resolve) ctx.resolve();\n }\n\n /**\n * Cancel a node for all run-contexts (called from UI or update())\n * @param nodeId - The node to cancel\n * @param includeDownstream - Whether to also cancel downstream nodes\n * @param edges - All edges in the graph (for downstream traversal)\n * @param nodes - All nodes in the graph (for clearing activeRunContexts)\n */\n cancelNodeInRunContexts(nodeId: string, includeDownstream: boolean): void {\n const toCancel = new Set<string>([nodeId]);\n if (includeDownstream) {\n // Collect all downstream nodes\n const queue = [nodeId];\n const visited = new Set<string>();\n for (let i = 0; i < queue.length; i++) {\n const cur = queue[i];\n if (visited.has(cur)) continue;\n visited.add(cur);\n this.graph.forEachEdge((e) => {\n if (e.source.nodeId === cur) {\n const targetId = e.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n });\n }\n }\n\n this.logger.debug(\"cancel-node-in-run-contexts\", {\n nodeId,\n includeDownstream,\n cancelledNodes: Array.from(toCancel),\n affectedRunContexts: Array.from(this.runContexts.keys()),\n });\n\n // Mark nodes as cancelled in all run-contexts\n for (const ctx of this.runContexts.values()) {\n for (const id of toCancel) {\n ctx.cancelledNodes.add(id);\n }\n }\n\n // Clear activeRunContexts for cancelled nodes\n for (const id of toCancel) {\n this.graph.clearNodeRunContextIds(id);\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\n const count = this.runContexts.size;\n this.logger.info(\"resolve-all-run-contexts\", {\n count,\n runContextIds: Array.from(this.runContexts.keys()),\n });\n for (const ctx of this.runContexts.values()) {\n if (ctx.resolve) ctx.resolve();\n }\n }\n\n /**\n * Clear all run-contexts\n */\n clear(): void {\n const count = this.runContexts.size;\n this.logger.info(\"clear-all-run-contexts\", { count });\n this.runContexts.clear();\n }\n}\n","/**\n * Shared utility functions for runtime components\n */\n\nimport type { Graph } from \"./components/Graph\";\n\n/**\n * Type guard to check if a value is a Promise\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\n\n/**\n * Unwrap a value that might be a Promise\n */\nexport async function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\n\n/**\n * Shallow/deep-ish equality check to avoid unnecessary runs on identical values\n */\nexport function valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Format a node reference as <typeId>.<nodeId> for logs.\n */\nexport function formatNodeRef(graph: Graph, nodeId: string): string {\n const node = graph.getNode(nodeId);\n return `${node?.typeId ?? \"unknown\"}.${nodeId}`;\n}\n\n/**\n * Format a node handle reference as <typeId>.<nodeId>.<handle> for logs.\n */\nexport function formatNodeHandleRef(graph: Graph, nodeId: string, handle: string): string {\n return `${formatNodeRef(graph, nodeId)}.${handle}`;\n}\n","import type { GraphDefinition, ResolvedHandles, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport { Registry, type ResolvedCoercion } from \"../../builder/Registry\";\nimport {\n getInputDeclaredTypes,\n unwrapTypeId,\n unwrapValue,\n mergeInputHandleDescriptors,\n typed,\n} from \"../../core/type-utils\";\nimport type { RuntimeEdge } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport { isPromise } from \"../utils\";\n\nexport function tryHandleResolving(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>,\n): { resolved: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\n\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) continue;\n const overrideInputs = n.resolvedHandles?.inputs;\n const overrideOutputs = n.resolvedHandles?.outputs;\n const overrideDefaults = n.resolvedHandles?.inputDefaults;\n // Resolve dynamic handles if available (initial pass: inputs may be undefined)\n let dyn: Partial<ResolvedHandles> = {};\n try {\n if (typeof desc.resolveHandles === \"function\") {\n const maybe = desc.resolveHandles({\n nodeId: n.nodeId,\n environment: environment || {},\n params: n.params,\n inputs: undefined,\n });\n // Only use sync results here; async results are applied via recompute later\n if (isPromise(maybe)) {\n // mark node as pending async recompute\n pending.add(n.nodeId);\n } else {\n dyn = maybe || {};\n }\n }\n } catch {\n // ignore dynamic resolution errors at this stage\n }\n // Merge base with dynamic and overrides (allow partial resolvedHandles)\n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n\n // First, add all static handles\n if (desc.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge dynamic handles\n if (dyn.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(dyn.inputs)) {\n const staticDesc = desc.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n // Finally, merge overrides\n if (overrideInputs) {\n for (const [handle, overrideDesc] of Object.entries(overrideInputs)) {\n const existingDesc = inputs[handle];\n const merged = mergeInputHandleDescriptors(existingDesc, overrideDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n const outputs = {\n ...desc.outputs,\n ...dyn.outputs,\n ...overrideOutputs,\n };\n const inputDefaults = {\n ...desc.inputDefaults,\n ...dyn.inputDefaults,\n ...overrideDefaults,\n };\n out.set(n.nodeId, { inputs, outputs, inputDefaults });\n }\n return { resolved: out, pending };\n}\n\nexport function buildEdges(def: GraphDefinition, registry: Registry, graph: Graph): RuntimeEdge[] {\n return def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n\n const { srcDeclared, dstDeclared } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n registry,\n graph,\n );\n\n const { convert, convertAsync } = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `buildEdges: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`,\n );\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared) ? [...srcDeclared] : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n}\n\n/**\n * Extract edge type information from resolved handles\n * Used by both buildEdges and updateNodeHandles to avoid duplication\n * Now supports union types on both source (output) and destination (input) handles\n */\nexport function extractEdgeTypes(\n sourceNodeId: string,\n sourceHandle: string,\n targetNodeId: string,\n targetHandle: string,\n registry: Registry,\n graph: Graph,\n): {\n srcDeclared: string | string[] | undefined;\n dstDeclared: string | string[] | undefined;\n} {\n const srcResolved = graph.getResolvedHandles(sourceNodeId);\n const dstResolved = graph.getResolvedHandles(targetNodeId);\n\n const srcDeclared = srcResolved\n ? srcResolved.outputs[sourceHandle]\n : registry.nodes.get(graph.getNode(sourceNodeId)?.typeId || \"\")?.outputs[sourceHandle];\n\n const dstDeclared = getInputDeclaredTypes(\n dstResolved ? dstResolved.inputs : registry.nodes.get(graph.getNode(targetNodeId)?.typeId || \"\")?.inputs,\n targetHandle,\n );\n\n return {\n srcDeclared,\n dstDeclared,\n };\n}\n\n// Static helper: build edge converters for type coercion\n// Now supports union types on both source (output) and destination (input) handles\nexport function buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | string[] | undefined,\n registry: Registry,\n edgeLabel: string,\n): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n} {\n if (!dstDeclared || !srcDeclared) {\n return {};\n }\n const isSrcUnion = Array.isArray(srcDeclared);\n const srcTypes = isSrcUnion ? srcDeclared : [srcDeclared];\n const isDstUnion = Array.isArray(dstDeclared);\n const dstTypes = isDstUnion ? dstDeclared : [dstDeclared];\n\n // Helper to compare coercion costs (sync preferred, then fewer steps)\n const compareCost = (\n a: { cost: { edges: number; async: number }; kind: \"sync\" | \"async\" },\n b: { cost: { edges: number; async: number }; kind: \"sync\" | \"async\" },\n ): number => {\n // Prefer sync over async\n if (a.kind === \"sync\" && b.kind === \"async\") return -1;\n if (a.kind === \"async\" && b.kind === \"sync\") return 1;\n // If same kind, prefer fewer edges\n if (a.cost.edges !== b.cost.edges) return a.cost.edges - b.cost.edges;\n // If same edges, prefer fewer async steps\n return a.cost.async - b.cost.async;\n };\n\n // Helper to find the best coercion from a source type to any destination type\n const getCoercion = (\n srcTypeId: string,\n ): {\n kind: \"sync\" | \"async\";\n convert: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n dstType: string;\n } | null => {\n type Candidate = {\n dstType: string;\n coercion: ResolvedCoercion;\n };\n\n const candidates: Candidate[] = [];\n\n // Try all destination types and collect valid coercions\n for (const dstTypeId of dstTypes) {\n const coercion = registry.resolveCoercion(srcTypeId, dstTypeId);\n if (coercion) {\n candidates.push({\n dstType: dstTypeId,\n coercion,\n });\n }\n }\n\n if (candidates.length === 0) return null;\n\n // Select best by cost: sync preferred, then fewer edges, then fewer async steps\n const best = candidates.reduce((best, cur) => {\n return compareCost(cur.coercion, best.coercion) < 0 ? cur : best;\n });\n\n if (best.coercion.kind === \"sync\") {\n return {\n kind: \"sync\",\n convert: best.coercion.convert,\n dstType: best.dstType,\n };\n } else {\n return {\n kind: \"async\",\n convert: (v: unknown) => v, // placeholder, not used for async\n convertAsync: best.coercion.convertAsync,\n dstType: best.dstType,\n };\n }\n };\n\n // Resolve coercions for all source types\n const coercions = srcTypes.map(getCoercion);\n const hasAsync = coercions.some((r) => r?.kind === \"async\");\n\n // Helper to extract and validate typed output for unions\n const extractPayload = (v: unknown): { typeId: string; payload: unknown } => {\n const typeId = unwrapTypeId(v);\n const payload = unwrapValue(v);\n\n if (isSrcUnion) {\n if (!typeId) {\n throw new Error(`Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\"|\")}`);\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(`Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\"|\")}`);\n }\n } else if (typeId) {\n // Warn if typed output is used for non-union source\n console.warn(\n `Typed output ${typeId} is fed even though source is not union (${edgeLabel}): ${srcDeclared} -> ${dstDeclared}`,\n );\n }\n\n return { typeId: typeId || srcTypes[0], payload };\n };\n\n const wrapIfDstUnion = (dstType: string | undefined, val: unknown) => {\n if (!isDstUnion || !dstType) return val;\n return typed(dstType, val);\n };\n\n if (hasAsync) {\n return {\n convertAsync: async (v: unknown, signal: AbortSignal) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) {\n const fallbackType = isDstUnion && typeId && dstTypes.includes(typeId) ? typeId : undefined;\n return wrapIfDstUnion(fallbackType, payload);\n }\n if (res.kind === \"async\" && res.convertAsync) {\n const converted = await res.convertAsync(payload, signal);\n return wrapIfDstUnion(res.dstType, converted);\n }\n return wrapIfDstUnion(res.dstType, res.convert(payload));\n },\n };\n }\n\n // Sync path\n const firstCoercion = coercions.find((r) => r?.kind === \"sync\");\n if (!firstCoercion) {\n return {};\n }\n\n return {\n convert: (v: unknown) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) {\n const fallbackType = isDstUnion && typeId && dstTypes.includes(typeId) ? typeId : undefined;\n return wrapIfDstUnion(fallbackType, payload);\n }\n if (res.kind === \"async\") {\n throw new Error(`Async coercion required but convert used (${edgeLabel})`);\n }\n const converted = res.convert(payload);\n return wrapIfDstUnion(res.dstType, converted);\n },\n };\n}\n\n/**\n * Compute effective inputs for a node by merging real inputs with defaults.\n * This is a shared utility used by both NodeExecutor and runtime validators.\n *\n * @param nodeId - The node ID to compute effective inputs for\n * @param graph - Graph component to access node and handle information\n * @param registry - Registry to access node type descriptors and defaults\n * @returns Record of effective input values (real inputs merged with defaults)\n */\nexport function getEffectiveInputs(nodeId: string, graph: Graph, registry: Registry): Record<string, unknown> {\n const node = graph.getNode(nodeId);\n if (!node) return {};\n\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = graph.getResolvedHandles(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n const staticHandles = new Set(Object.keys(desc.inputs ?? {}));\n const dynamicHandles = new Set(Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h)));\n\n // Precedence: dynamic > registry\n const mergedDefaults: Record<string, unknown> = {\n ...regDefaults,\n ...dynDefaults,\n };\n\n // Start with real inputs only (no defaults)\n const effective: Record<string, unknown> = { ...node.inputs };\n\n // Build set of inbound handles (wired inputs)\n const inboundEdges = graph.getInboundEdges(nodeId);\n const inbound = new Set(inboundEdges.map((e) => e.target.handle));\n\n const getDefaultPolicy = (handle: string): \"unbound\" | \"bound\" | undefined => {\n const resolvedDesc = resolved?.inputs?.[handle];\n const staticDesc = desc.inputs?.[handle];\n const pick = (d: InputHandleDescriptor | undefined) =>\n d && typeof d === \"object\" && \"typeId\" in d ? d.defaultPolicy : undefined;\n return pick(resolvedDesc) ?? pick(staticDesc);\n };\n\n // Apply defaults only for:\n // 1. Unbound handles that have no explicit value\n // 2. Static handles (not dynamically resolved)\n for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {\n if (defaultValue === undefined) continue;\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n const policy = getDefaultPolicy(handle);\n if (policy === \"bound\") {\n if (!inbound.has(handle)) continue;\n } else {\n if (inbound.has(handle)) continue;\n }\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n}\n","import type { ResolvedHandles, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { Graph } from \"./Graph\";\nimport type { RunContextId, RunContextManager } from \"./RunContextManager\";\nimport type { IEdgePropagator, IHandleResolver } from \"./interfaces\";\nimport { buildEdgeConverters, extractEdgeTypes } from \"./graph-utils\";\nimport { mergeInputHandleDescriptors } from \"../../core/type-utils\";\nimport { formatNodeRef, unwrapMaybePromise } from \"../utils\";\n\n/**\n * HandleResolver component - manages dynamic handle resolution\n */\nexport class HandleResolver implements IHandleResolver {\n private recomputeTokenByNode = new Map<string, number>();\n private environment: Record<string, unknown> = {};\n private pendingResolutions = new Map<string, Promise<void>>();\n private isRecomputing = new Map<string, boolean>();\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly edgePropagator: IEdgePropagator,\n private registry?: Registry,\n environment?: Record<string, unknown>,\n ) {\n this.environment = environment ?? {};\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Get the promise for pending handle resolution, or null if none\n */\n getPendingResolution(nodeId: string): Promise<void> | null {\n return this.pendingResolutions.get(nodeId) || null;\n }\n\n /**\n * Schedule async recomputation of handles for a node\n */\n scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // If already recomputing, increment token to mark that a new recompute is needed\n // but don't schedule another concurrent execution\n if (this.isRecomputing.get(nodeId)) {\n const currentToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n this.recomputeTokenByNode.set(nodeId, currentToken + 1);\n return;\n }\n\n // Track resolver start for all active run-contexts\n const activeRunContextIds = this.graph.getNodeRunContextIds(nodeId);\n if (activeRunContextIds.size > 0) {\n for (const runContextId of activeRunContextIds) {\n this.runContextManager.startHandleResolution(runContextId, nodeId);\n }\n }\n\n // Mark as recomputing\n this.isRecomputing.set(nodeId, true);\n\n // Capture initial token before starting (will be incremented in recomputeHandlesForNode)\n const initialToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n\n // Create and track the resolution promise\n const resolutionPromise = new Promise<void>((resolve) => {\n setTimeout(async () => {\n await this.recomputeHandlesForNode(nodeId, activeRunContextIds);\n this.pendingResolutions.delete(nodeId);\n this.isRecomputing.delete(nodeId);\n\n // Check if a new recompute was requested while we were running\n // (token was incremented by another scheduleRecomputeHandles call)\n const finalToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n // After recomputeHandlesForNode, token should be initialToken + 1\n // If finalToken > initialToken + 1, a new recompute was requested\n if (finalToken > initialToken + 1) {\n // A new recompute was requested, schedule it now\n this.scheduleRecomputeHandles(nodeId);\n }\n\n resolve();\n }, 0);\n });\n\n this.pendingResolutions.set(nodeId, resolutionPromise);\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n private updateNodeHandles(nodeId: string, handles: ResolvedHandles): void {\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n this.graph.setResolvedHandles(nodeId, handles);\n\n const registry = this.registry; // Store for use in callback\n this.graph.forEachEdge((e, _index) => {\n // Only update edges that touch the changed node\n const touchesChangedNode = e.source.nodeId === nodeId || e.target.nodeId === nodeId;\n if (!touchesChangedNode) return;\n\n const srcNode = this.graph.getNode(e.source.nodeId);\n const dstNode = this.graph.getNode(e.target.nodeId);\n const oldDstDeclared = e.dstDeclared;\n\n // Extract edge types using shared helper (handles both source and target updates)\n const { srcDeclared, dstDeclared } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n registry,\n this.graph,\n );\n\n // Update converters\n const conv = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`,\n );\n\n // Update edge properties via Graph\n this.graph.updateEdgeProperties(e.id, {\n dstDeclared,\n srcUnionTypes: Array.isArray(srcDeclared) ? [...srcDeclared] : undefined,\n convert: conv.convert,\n convertAsync: conv.convertAsync,\n });\n\n if (e.target.nodeId === nodeId && oldDstDeclared === undefined && dstDeclared !== undefined) {\n const srcNode = this.graph.getNode(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n const activeRunContextIds = this.graph.getNodeRunContextIds(e.source.nodeId);\n this.edgePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n activeRunContextIds.size > 0 ? activeRunContextIds : undefined,\n );\n }\n }\n }\n });\n this.edgePropagator.invalidateDownstream(nodeId);\n }\n\n /**\n * Recompute dynamic handles for a single node using current inputs/environment\n */\n private async recomputeHandlesForNode(nodeId: string, activeRunContextIds?: Set<RunContextId>): Promise<void> {\n try {\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const desc = this.registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\n\n const token = (this.recomputeTokenByNode.get(nodeId) ?? 0) + 1;\n this.recomputeTokenByNode.set(nodeId, token);\n\n // Log resolveHandles-start\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const shouldLog = nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-start`);\n }\n\n let resolved: Partial<ResolvedHandles> | undefined;\n try {\n const res = resolveHandles({\n nodeId,\n environment: this.environment || {},\n params: node.params,\n inputs: node.inputs || {},\n });\n resolved = await unwrapMaybePromise(res);\n } catch {\n // Log resolveHandles-done even on error\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-done (error)`);\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-done`);\n }\n // If a newer recompute was scheduled, drop this result\n if ((this.recomputeTokenByNode.get(nodeId) ?? 0) !== token) return;\n\n const before = this.graph.getResolvedHandles(nodeId);\n // Re-fetch desc to ensure we have the latest (node might have been updated)\n const nodeDesc = this.registry.nodes.get(node.typeId);\n if (!nodeDesc) return;\n\n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n\n // First, add all static handles\n if (nodeDesc.inputs) {\n for (const [handle, staticDesc] of Object.entries(nodeDesc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge dynamic handles\n if (resolved?.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = nodeDesc.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n const outputs = { ...nodeDesc.outputs, ...resolved?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...resolved?.inputDefaults,\n };\n const after = { inputs, outputs, inputDefaults };\n // If we have prior handles, skip update when unchanged; for new nodes (no before),\n // always write the resolved handles.\n if (before && JSON.stringify(before) === JSON.stringify(after)) return;\n\n // Call GraphRuntime's updateNodeHandles to update edges and re-propagate values\n // Note: updateNodeHandles will set the resolved handles internally\n this.updateNodeHandles(nodeId, after);\n\n // Notify graph updated with the changed handles\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: after },\n });\n } finally {\n // Track resolver finish after successful completion\n if (activeRunContextIds && activeRunContextIds.size > 0) {\n for (const runContextId of activeRunContextIds) {\n this.runContextManager.finishHandleResolution(runContextId, nodeId);\n }\n }\n }\n }\n}\n","import { isTyped, unwrapTypeId } from \"../../core/type-utils\";\nimport type { RunContextId, RuntimeEdge } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { formatNodeHandleRef, valuesEqual } from \"../utils\";\nimport { INodeExecutor, IEdgePropagator, IRuntime } from \"./interfaces\";\n\n/**\n * EdgePropagator component - handles value propagation through edges\n */\nexport class EdgePropagator implements IEdgePropagator {\n private arrayInputBuckets = new Map<string, Map<string, Map<string, unknown[]>>>();\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly nodeExecutor: INodeExecutor,\n private readonly runtime: IRuntime,\n ) {}\n\n /**\n * Set source output value and emit event\n */\n private setSourceOutput(srcNodeId: string, srcHandle: string, value: unknown): boolean {\n if (!this.graph.hasNode(srcNodeId)) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return false;\n }\n this.graph.updateNodeOutput(srcNodeId, srcHandle, value);\n return true;\n }\n\n /**\n * Find all outgoing edges from a source node handle\n */\n private findOutgoingEdges(srcNodeId: string, srcHandle: string): RuntimeEdge[] {\n return this.graph.getEdgesBySource(srcNodeId, srcHandle);\n }\n\n /**\n * Propagate value to a single edge\n */\n private propagateToEdge(\n edge: RuntimeEdge,\n value: unknown,\n srcNodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n ): void {\n // Filter run-contexts\n const effectiveRunContexts =\n runContextIds && runContextIds.size > 0\n ? this.filterEffectiveRunContexts(edge, srcNodeId, runContextIds)\n : undefined;\n\n if (runContextIds && runContextIds.size > 0 && !(effectiveRunContexts && effectiveRunContexts.size > 0)) {\n return; // No valid run-contexts for this edge\n }\n\n // Validate union types\n if (!this.validateUnionType(edge, value, srcNodeId)) {\n return;\n }\n\n // Clone value per edge to isolate conversions\n let nextVal = structuredClone(value);\n\n // Apply conversion and propagate\n if (edge.convertAsync) {\n this.handleAsyncConversion(edge, nextVal, effectiveRunContexts);\n } else {\n this.handleSyncConversion(edge, nextVal, effectiveRunContexts);\n }\n }\n\n /**\n * Filter run-contexts to exclude cancelled nodes\n */\n private filterEffectiveRunContexts(\n edge: RuntimeEdge,\n srcNodeId: string,\n runContextIds: Set<RunContextId>,\n ): Set<RunContextId> | undefined {\n const effectiveRunContexts = new Set<RunContextId>();\n for (const id of runContextIds) {\n const ctx = this.runContextManager.getRunContext(id);\n if (!ctx) continue;\n if (ctx.cancelledNodes.has(srcNodeId)) continue;\n if (ctx.cancelledNodes.has(edge.target.nodeId)) continue;\n effectiveRunContexts.add(id);\n }\n return effectiveRunContexts.size > 0 ? effectiveRunContexts : undefined;\n }\n\n /**\n * Validate union type requirements\n */\n private validateUnionType(edge: RuntimeEdge, value: unknown, srcNodeId: string): boolean {\n const isUnion = Array.isArray(edge.srcUnionTypes);\n const isTypedValue = isTyped(value);\n\n if (isUnion && !isTypedValue) {\n const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;\n const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;\n const err = new Error(\n `Output ${srcNodeId}.${edge.source.handle} requires typed value for union output (allowed: ${(\n edge.srcUnionTypes as string[]\n ).join(\"|\")})`,\n );\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: edge.id,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId,\n targetTypeId,\n err,\n });\n return false;\n }\n\n return true;\n }\n\n /**\n * Handle synchronous conversion\n */\n private handleSyncConversion(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n let convertedValue = value;\n if (edge.convert) {\n convertedValue = edge.convert(value);\n } else {\n const fromType =\n (Array.isArray(edge.srcUnionTypes) && edge.srcUnionTypes.length > 0\n ? edge.srcUnionTypes.join(\"|\")\n : undefined) ??\n unwrapTypeId(value) ??\n edge.typeId ??\n \"unknown\";\n const toType = Array.isArray(edge.dstDeclared) ? edge.dstDeclared.join(\"|\") : (edge.dstDeclared ?? \"unknown\");\n console.warn(\n `No convert function for edge ${edge.id} [${formatNodeHandleRef(\n this.graph,\n edge.source.nodeId,\n edge.source.handle,\n )} -> ${formatNodeHandleRef(\n this.graph,\n edge.target.nodeId,\n edge.target.handle,\n )}] from:${fromType} to:${toType}`,\n );\n }\n this.applyToTarget(edge, convertedValue, effectiveRunContexts);\n }\n\n /**\n * Handle asynchronous conversion\n */\n private handleAsyncConversion(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n if (!edge.convertAsync) return;\n // Track edge run-context IDs for pendingEdges tracking\n const edgeRunContextIds = effectiveRunContexts ? Array.from(effectiveRunContexts) : undefined;\n\n if (edgeRunContextIds) {\n for (const id of edgeRunContextIds) {\n this.runContextManager.startEdgeConversion(id, edge.id);\n }\n }\n\n const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;\n const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;\n\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: edge.id,\n typeId: edge.typeId,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId,\n targetTypeId,\n });\n\n const controller = new AbortController();\n const startAt = Date.now();\n const currentStats = edge.stats;\n this.graph.updateEdgeStats(edge.id, {\n runs: currentStats.runs + 1,\n inFlight: true,\n progress: 0,\n });\n\n edge\n .convertAsync(value, controller.signal)\n .then((converted) => {\n if (!controller.signal.aborted) {\n this.applyToTarget(edge, converted, effectiveRunContexts);\n this.updateEdgeStatsOnSuccess(edge, startAt);\n }\n })\n .catch((err) => {\n if (controller.signal.aborted) return;\n this.handleEdgeConversionError(edge, err);\n })\n .finally(() => {\n this.finishEdgeConversion(edgeRunContextIds, edge.id);\n });\n }\n\n /**\n * Apply value to target node input\n */\n private applyToTarget(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n const dstNode = this.graph.getNode(edge.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles\n if (edge.dstDeclared === undefined) return;\n\n // Handle array types\n const processedValue = this.processArrayInput(edge, value);\n\n // Check if value changed\n const prev = dstNode.inputs[edge.target.handle];\n const valueChanged = !valuesEqual(prev, processedValue);\n\n // Check if we should execute even if value is same:\n // 1. If node has rerunOnSameInput policy (from node params or registry)\n // 2. If input was set after last successful run (stale input detection)\n const registry = this.graph.getRegistry();\n const desc = registry?.nodes.get(dstNode.typeId);\n const nodeRerunPolicy = dstNode.policy?.rerunOnSameInput === true;\n const descRerunPolicy = desc?.policy?.rerunOnSameInput === true;\n const shouldRerunOnSameInput = nodeRerunPolicy || descRerunPolicy;\n\n const inputWasSetAfterLastRun =\n !dstNode.lastInputAt?.[edge.target.handle] ||\n !dstNode.lastSuccessAt ||\n dstNode.lastInputAt[edge.target.handle] > dstNode.lastSuccessAt;\n\n const shouldExecute = valueChanged || shouldRerunOnSameInput || inputWasSetAfterLastRun;\n\n if (!shouldExecute) {\n return; // No change and no reason to rerun\n }\n\n // Set input value (respecting skipPropagateValues)\n const shouldSetValue = this.shouldSetInputValue(effectiveRunContexts);\n if (shouldSetValue && valueChanged) {\n this.runtime.setTargetInput(edge, processedValue, \"applyToTarget\");\n } else if (shouldSetValue && !valueChanged) {\n // Even if value didn't change, update timestamp if we're forcing execution\n const now = Date.now();\n this.graph.updateNodeLastInputAt(edge.target.nodeId, edge.target.handle, now);\n }\n\n // Schedule downstream execution\n this.executeDownstream(edge.target.nodeId, effectiveRunContexts);\n }\n\n /**\n * Process array input by merging values from all edges\n */\n private processArrayInput(edge: RuntimeEdge, value: unknown): unknown {\n const dstIsArray = typeof edge.dstDeclared === \"string\" && edge.dstDeclared.endsWith(\"[]\");\n\n if (!dstIsArray) {\n return value;\n }\n\n const toArray = (x: unknown): unknown[] => (Array.isArray(x) ? x : x === undefined ? [] : [x]);\n\n let forNode = this.arrayInputBuckets.get(edge.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(edge.target.nodeId, forNode);\n }\n\n let forHandle = forNode.get(edge.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(edge.target.handle, forHandle);\n }\n\n forHandle.set(edge.id, toArray(value));\n\n // Merge all parts for this handle\n const targetEdges = this.graph.getEdgesByTarget(edge.target.nodeId, edge.target.handle);\n const merged: unknown[] = [];\n for (const ed of targetEdges) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n\n return merged;\n }\n\n /**\n * Check if input value should be set (respecting skipPropagateValues)\n */\n private shouldSetInputValue(effectiveRunContexts: Set<RunContextId> | undefined): boolean {\n if (!effectiveRunContexts) {\n return true; // Auto mode always sets values\n }\n\n // Check skipPropagateValues (only in run-context mode)\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.skipPropagateValues) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Execute downstream if conditions are met\n */\n private executeDownstream(targetNodeId: string, effectiveRunContexts: Set<RunContextId> | undefined): void {\n // Determine if we should propagate\n const shouldPropagate = this.shouldPropagateExecution(effectiveRunContexts);\n\n if (shouldPropagate && this.graph.allInboundHaveValue(targetNodeId)) {\n this.nodeExecutor.execute(targetNodeId, {\n runContextIds: effectiveRunContexts,\n reason: \"executeDownstream\",\n });\n }\n }\n\n /**\n * Check if execution should propagate\n */\n private shouldPropagateExecution(effectiveRunContexts: Set<RunContextId> | undefined): boolean {\n if (!effectiveRunContexts) {\n return true; // Auto mode always propagates\n }\n\n // Check propagate flag (only in run-context mode)\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.propagate) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update edge stats on successful conversion\n */\n private updateEdgeStatsOnSuccess(edge: RuntimeEdge, startAt: number): void {\n const duration = Date.now() - startAt;\n this.graph.updateEdgeStats(edge.id, {\n inFlight: false,\n lastDurationMs: duration,\n lastEndAt: Date.now(),\n lastError: undefined,\n });\n\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: edge.id,\n typeId: edge.typeId,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,\n targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,\n durationMs: duration,\n });\n }\n\n /**\n * Handle edge conversion error\n */\n private handleEdgeConversionError(edge: RuntimeEdge, err: unknown): void {\n this.graph.updateEdgeStats(edge.id, {\n inFlight: false,\n lastError: err,\n });\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: edge.id,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,\n targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,\n err,\n });\n }\n\n /**\n * Finish edge conversion and decrement pending edges\n */\n private finishEdgeConversion(edgeRunContextIds: RunContextId[] | undefined, edgeId: string): void {\n if (!edgeRunContextIds) return;\n\n for (const id of edgeRunContextIds) {\n this.runContextManager.finishEdgeConversion(id, edgeId);\n }\n }\n\n /**\n * Propagate value through edges\n * @param runContextIds - Optional set of run-context IDs. If provided, propagation is run-context aware.\n * If undefined or empty, behaves like auto mode (always propagates values and execution).\n */\n propagate(srcNodeId: string, srcHandle: string, value: unknown, runContextIds?: Set<RunContextId>): void {\n if (this.runtime.isPaused()) return;\n\n // Set source output\n if (!this.setSourceOutput(srcNodeId, srcHandle, value)) {\n return; // Node was removed\n }\n\n // Find outgoing edges\n const outEdges = this.findOutgoingEdges(srcNodeId, srcHandle);\n\n // Process each edge\n for (const edge of outEdges) {\n this.propagateToEdge(edge, value, srcNodeId, runContextIds);\n }\n }\n\n /**\n * Re-emit all outputs from a node (used when graph updates)\n * Only re-emits outputs that are valid according to resolved handles\n */\n invalidateDownstream(nodeId: string): void {\n if (this.runtime.isPaused()) return;\n\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // Get resolved handles to filter out invalid outputs\n const resolved = this.graph.getResolvedHandles(nodeId);\n const validOutputHandles = resolved?.outputs ? new Set(Object.keys(resolved.outputs)) : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\n const activeRunContextIds = this.graph.getNodeRunContextIds(nodeId);\n for (const [handle, value] of Object.entries(node.outputs)) {\n // Only re-emit if this handle is still valid\n if (validOutputHandles.has(handle)) {\n this.propagate(nodeId, handle, value, activeRunContextIds.size > 0 ? activeRunContextIds : undefined);\n }\n }\n }\n\n /**\n * Clear array input buckets for a node (when node is deleted)\n */\n clearArrayBuckets(nodeId: string): void {\n this.arrayInputBuckets.delete(nodeId);\n }\n\n /**\n * Clear all array buckets\n */\n clearAllArrayBuckets(): void {\n this.arrayInputBuckets.clear();\n }\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RunContextId, ExecutionPlan } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IEdgePropagator, INodeExecutor, IRuntime, IHandleResolver } from \"./interfaces\";\nimport { getEffectiveInputs } from \"./graph-utils\";\nimport { formatNodeRef } from \"../utils\";\nimport { LevelLogger } from \"../../misc/utils/LevelLogger\";\n\n/**\n * NodeExecutor component - handles node execution scheduling and lifecycle\n */\nexport class NodeExecutor implements INodeExecutor {\n private environment: Record<string, unknown> = {};\n private customNodeData: Record<string, Record<string, unknown>> = {};\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly handleResolver: IHandleResolver,\n private readonly edgePropagator: IEdgePropagator,\n private readonly runtime: IRuntime,\n environment?: Record<string, unknown>,\n ) {\n this.environment = environment ?? {};\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n setCustomNodeData(customNodeData: Record<string, Record<string, unknown>>): void {\n this.customNodeData = customNodeData;\n }\n\n /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const registry = this.graph.getRegistry();\n if (!registry) return {};\n return getEffectiveInputs(nodeId, this.graph, registry);\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\n runContextIds?: Set<RunContextId>,\n options?: {\n emitHandler?: (handle: string, value: unknown) => void;\n reportProgress?: (p: number) => void;\n },\n ): ExecutionContext<any> {\n const emitHandler =\n options?.emitHandler ??\n ((handle: string, value: unknown) => {\n this.edgePropagator.propagate(nodeId, handle, value, runContextIds);\n });\n const reportProgress =\n options?.reportProgress ??\n ((p: number) => {\n this.graph.updateNodeStats(nodeId, {\n progress: Math.max(0, Math.min(1, Number(p) || 0)),\n });\n });\n\n // Create log function that respects node's logLevel using LevelLogger\n const node = this.graph.getNode(nodeId);\n const nodeLogLevel = node?.logLevel ?? \"info\";\n const logger = new LevelLogger(nodeLogLevel, `[node:${formatNodeRef(this.graph, nodeId)}:${runId}]`);\n const log: (level: LogLevel, message: string, context?: Record<string, unknown>) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>,\n ) => {\n switch (level) {\n case \"debug\":\n logger.debug(message, context);\n break;\n case \"info\":\n logger.info(message, context);\n break;\n case \"warn\":\n logger.warn(message, context);\n break;\n case \"error\":\n logger.error(message, context);\n break;\n }\n };\n\n return {\n nodeId,\n state: node?.state,\n setState: (next) => this.graph.updateNodeState(nodeId, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.edgePropagator.invalidateDownstream(nodeId);\n },\n execute: (opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n resolve?: () => void;\n reason?: string;\n }) => {\n if (this.graph.allInboundHaveValue(nodeId)) {\n let runContextIdsToUse = this.runtime.getRunMode() === \"auto\" ? undefined : runContextIds;\n let runContextIdToRelease: RunContextId | undefined;\n if (this.runtime.getRunMode() === \"manual\" && (!runContextIds || runContextIds.size === 0)) {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, opts);\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n try {\n this.execute(nodeId, {\n runContextIds: runContextIdsToUse,\n reason: opts?.reason ?? \"executeFromContext\",\n });\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n customNodeData: this.customNodeData[nodeId],\n runId,\n abortSignal,\n reportProgress,\n setCustomData: (data: Record<string, unknown>) => {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-custom-data\",\n nodeId,\n typeId: node?.typeId ?? \"\",\n runId,\n data,\n });\n },\n log,\n };\n }\n\n /**\n * Internal method for executing inputs changed (also used by GraphRuntime)\n */\n execute(\n nodeId: string,\n opts?: {\n runContextIds?: Set<RunContextId>;\n canSkipHandleResolution?: boolean;\n reason?: string;\n },\n ): void {\n let { runContextIds, canSkipHandleResolution, reason = \"\" } = opts ?? {};\n let autoCreatedRunContextId: RunContextId | undefined;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const runMode = this.runtime.getRunMode();\n if (!runMode) {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(this.graph, nodeId)}:${reason}]: no runMode, skipping execution`,\n );\n return;\n }\n\n // In manual mode, require runContextIds unless autoRun policy is set\n if (runMode === \"manual\" && (!runContextIds || runContextIds.size === 0)) {\n // If autoRun is true, auto-generate a run context (similar to createExecutionContext pattern)\n if (node.policy?.autoRun === true) {\n autoCreatedRunContextId = this.runContextManager.createRunContext(nodeId, { propagate: false });\n runContextIds = new Set([autoCreatedRunContextId]);\n } else {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(\n this.graph,\n nodeId,\n )}:${reason}]: no runContextIds provided in manual mode, skipping execution`,\n );\n return;\n }\n }\n\n try {\n if (runMode === \"auto\" && runContextIds && runContextIds.size > 0) {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(\n this.graph,\n nodeId,\n )}:${reason}]: runContextIds provided in auto mode, ignoring`,\n );\n runContextIds = undefined;\n }\n\n // Early validation for auto-mode paused state\n if (this.runtime.isPaused()) return;\n\n // Check runtime validators (check current state, not just graph definition)\n const runtimeValidationError = this.runtime.hasRuntimeValidationBlock(nodeId);\n if (runtimeValidationError) {\n this.eventEmitter.emit(\"error\", {\n kind: \"system\",\n message: runtimeValidationError.message,\n code: runtimeValidationError.code || \"RUNTIME_VALIDATION_BLOCKED\",\n details: {\n nodeId,\n nodeTypeId: node?.typeId,\n ...runtimeValidationError.details,\n },\n });\n return;\n }\n\n // Attach run-context IDs if provided - do this BEFORE checking for pending resolution\n // so that handle resolution can track these run contexts\n if (runContextIds) {\n this.graph.addNodeRunContextIds(nodeId, runContextIds);\n }\n\n if (!canSkipHandleResolution && !this.handleResolver.getPendingResolution(nodeId)) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n // Check if handles are being resolved - wait for resolution before executing\n // Do this AFTER setting up run contexts so handle resolution can track them\n const pendingResolution = this.handleResolver.getPendingResolution(nodeId);\n if (pendingResolution) {\n if (runContextIds && runContextIds.size > 0) {\n for (const id of runContextIds) {\n this.runContextManager.startHandleResolution(id, nodeId);\n }\n }\n // Wait for resolution to complete, then re-execute\n pendingResolution.then(() => {\n // Re-check node still exists and conditions\n const nodeAfter = this.graph.getNode(nodeId);\n if (nodeAfter) {\n this.execute(nodeId, {\n runContextIds,\n canSkipHandleResolution: true,\n reason: opts?.reason,\n });\n }\n if (runContextIds && runContextIds.size > 0) {\n for (const id of runContextIds) {\n this.runContextManager.finishHandleResolution(id, nodeId);\n }\n }\n });\n return;\n }\n\n // Handle debouncing\n const now = Date.now();\n if (this.shouldDebounce(nodeId, now)) {\n this.handleDebouncedSchedule(nodeId, now, runContextIds, reason);\n return;\n }\n\n // Prepare execution plan\n const executionPlan = this.prepareExecutionPlan(nodeId, runContextIds, now, reason);\n\n // Route to appropriate concurrency handler\n this.routeToConcurrencyHandler(nodeId, executionPlan);\n } finally {\n if (autoCreatedRunContextId) {\n this.runContextManager.releaseScheduling(autoCreatedRunContextId);\n }\n }\n }\n\n /**\n * Check if execution should be debounced\n */\n private shouldDebounce(nodeId: string, now: number): boolean {\n const node = this.graph.getNode(nodeId);\n if (!node) return false;\n const policy = node.policy ?? {};\n const lastScheduledAt = node.lastScheduledAt;\n return !!(policy.debounceMs && lastScheduledAt && now - lastScheduledAt < policy.debounceMs);\n }\n\n /**\n * Handle debounced scheduling by replacing the latest queued item\n */\n private handleDebouncedSchedule(\n nodeId: string,\n now: number,\n runContextIds: Set<RunContextId> | undefined,\n reason?: string,\n ): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Decrement pendingQueued for any existing queued items before replacing\n if (node.queue.length > 0) {\n this.decrementQueuedForPlans(node.queue, nodeId);\n }\n\n const executionPlan = this.prepareExecutionPlan(nodeId, runContextIds, now, reason);\n\n this.graph.replaceNodeQueue(nodeId, [executionPlan]);\n }\n\n /**\n * Prepare execution plan with all necessary information\n */\n private prepareExecutionPlan(\n nodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n now: number,\n reason?: string,\n ): ExecutionPlan {\n const node = this.graph.getNode(nodeId);\n\n this.graph.setNodeLastScheduledAt(nodeId, now);\n const runSeq = this.graph.incrementNodeRunSeq(nodeId);\n const runId = `${nodeId}:${runSeq}:${now}`;\n this.graph.setNodeLatestRunId(nodeId, runId);\n\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n // Take a shallow snapshot of the current policy for this run\n const policySnapshot = node?.policy ? { ...node.policy } : undefined;\n\n return {\n runId,\n effectiveInputs,\n runContextIdsForRun: runContextIds,\n timestamp: now,\n policy: policySnapshot,\n reason,\n };\n }\n\n /**\n * Route execution to appropriate concurrency handler\n */\n private routeToConcurrencyHandler(nodeId: string, plan: ExecutionPlan): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n\n switch (mode) {\n case \"drop\":\n this.handleDropMode(nodeId, plan);\n break;\n case \"queue\":\n this.handleQueueMode(nodeId, plan);\n break;\n case \"switch\":\n case \"merge\":\n default:\n this.startRun(nodeId, plan);\n break;\n }\n }\n\n /**\n * Handle drop mode - drop execution if node is already running, otherwise start run\n */\n private handleDropMode(nodeId: string, plan: ExecutionPlan): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Drop if node is already running\n if (node.activeControllers.size > 0) {\n return; // Don't increment pendingCount if we're dropping this run\n }\n // Start run if node is not running\n this.startRun(nodeId, plan);\n }\n\n /**\n * Handle queue mode - add to queue and process sequentially\n */\n private handleQueueMode(nodeId: string, plan: ExecutionPlan): void {\n const maxQ = plan.policy?.maxQueue ?? 8;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Keep the originating run-context alive while work is queued by\n // incrementing queued counters for the plan's run-contexts.\n if (plan.runContextIdsForRun) {\n for (const rcId of plan.runContextIdsForRun) {\n this.runContextManager.incrementQueued(rcId, nodeId);\n }\n }\n\n this.graph.addToNodeQueue(nodeId, plan);\n if (node.queue.length > maxQ) {\n const dropped = this.graph.shiftNodeQueue(nodeId);\n if (dropped) {\n this.decrementQueuedForPlans(dropped, nodeId);\n }\n }\n\n this.processQueue(nodeId);\n }\n\n /**\n * Process queued executions sequentially\n */\n private processQueue(nodeId: string): void {\n const processNext = () => {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n if (node.activeControllers.size > 0) return;\n const next = this.graph.shiftNodeQueue(nodeId);\n if (!next) return;\n\n this.graph.setNodeLatestRunId(nodeId, next.runId);\n\n // Start the run first (which increments pendingNodes), then decrement\n // pendingQueued to ensure the run context stays alive.\n this.startRun(nodeId, next, () => {\n setTimeout(processNext, 0);\n });\n this.decrementQueuedForPlans(next, nodeId);\n };\n\n processNext();\n }\n\n /**\n * Start a node execution run\n */\n private startRun(nodeId: string, plan: ExecutionPlan, onDone?: () => void): void {\n // Track run-contexts\n this.trackRunContextStart(nodeId, plan.runContextIdsForRun);\n\n // Setup execution controller\n const controller = this.createExecutionController(nodeId, plan.runId);\n\n // Handle concurrency mode\n this.applyConcurrencyMode(nodeId, controller, plan);\n\n // Setup timeout if needed\n const timeoutId = this.setupTimeout(controller, plan);\n\n // Create execution context\n const execCtx = this.createExecutionContext(\n nodeId,\n plan.effectiveInputs,\n plan.runId,\n controller.signal,\n plan.runContextIdsForRun,\n this.createEmitAndProgressHandlers(nodeId, plan),\n );\n\n // Execute\n this.executeNode(nodeId, execCtx, plan, controller, timeoutId, onDone);\n }\n\n /**\n * Track run-context start for pending nodes\n */\n private trackRunContextStart(nodeId: string, runContextIdsForRun?: Set<RunContextId>): void {\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n this.runContextManager.startNodeRun(id, nodeId);\n }\n }\n }\n\n /**\n * Decrement pendingQueued counters for plans' run-contexts.\n * Used when queued work is being started, dropped, or cancelled.\n */\n private decrementQueuedForPlans(plans: ExecutionPlan | ExecutionPlan[], nodeId: string): void {\n const plansArray = Array.isArray(plans) ? plans : [plans];\n for (const plan of plansArray) {\n if (plan.runContextIdsForRun) {\n for (const rcId of plan.runContextIdsForRun) {\n this.runContextManager.decrementQueued(rcId, nodeId);\n }\n }\n }\n }\n\n /**\n * Create execution controller and update node stats\n */\n private createExecutionController(nodeId: string, runId: string): AbortController {\n const controller = new AbortController();\n const now = Date.now();\n const node = this.graph.getNode(nodeId);\n\n this.graph.updateNodeStats(nodeId, {\n runs: (node?.stats.runs ?? 0) + 1,\n active: (node?.stats.active ?? 0) + 1,\n lastStartAt: now,\n progress: 0,\n });\n this.graph.addNodeController(nodeId, controller, runId);\n return controller;\n }\n\n /**\n * Apply concurrency mode (switch mode aborts other controllers)\n */\n private applyConcurrencyMode(nodeId: string, controller: AbortController, plan: ExecutionPlan): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n const controllers = this.graph.getNodeControllers(nodeId);\n for (const c of controllers) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n }\n\n /**\n * Setup timeout for execution if configured\n */\n private setupTimeout(controller: AbortController, plan: ExecutionPlan): NodeJS.Timeout | undefined {\n const policy = plan.policy ?? {};\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n return setTimeout(() => controller.abort(\"timeout\"), policy.timeoutMs);\n }\n return undefined;\n }\n\n /**\n * Create emit and progress handlers for execution context\n */\n private createEmitAndProgressHandlers(\n nodeId: string,\n plan: ExecutionPlan,\n ): {\n emitHandler: (handle: string, value: unknown) => void;\n reportProgress: (p: number) => void;\n } {\n const policy = plan.policy ?? {};\n return {\n emitHandler: (handle: string, value: unknown) => {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const m = policy.asyncConcurrency ?? \"switch\";\n // Drop emits from runs that were explicitly cancelled due to a\n // snapshot/undo/redo operation, regardless of asyncConcurrency.\n if (node.snapshotCancelledRunIds?.has(plan.runId)) return;\n if (m !== \"merge\" && plan.runId !== node.latestRunId) return;\n this.edgePropagator.propagate(nodeId, handle, value, plan.runContextIdsForRun);\n },\n reportProgress: (p: number) => {\n const progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.graph.updateNodeStats(nodeId, { progress });\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n progress,\n });\n },\n };\n }\n\n /**\n * Execute the node with retry logic and cleanup\n */\n private executeNode(\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n onDone?: () => void,\n ): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // Fire node-start event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-start\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n });\n ctx.log(\"debug\", \"node-start\", {\n inputs: node.inputs,\n effectiveInputs: plan.effectiveInputs,\n reason: plan.reason,\n });\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(plan.effectiveInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (\n reason === \"switch\" ||\n reason === \"snapshot\" ||\n reason === \"node-deleted\" ||\n reason === \"user-cancelled\"\n ) {\n return; // Cancellation events are emitted separately, skip error handling\n }\n }\n hadError = true;\n this.graph.updateNodeStats(nodeId, { lastError: err });\n const retry = plan.policy?.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"node-run\",\n nodeId,\n nodeTypeId: node.typeId,\n runId: plan.runId,\n err,\n });\n } finally {\n this.cleanupExecution(nodeId, ctx, plan, controller, timeoutId, hadError, onDone);\n }\n };\n\n exec(0);\n }\n\n /**\n * Cleanup after execution completes\n */\n private cleanupExecution(\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n hadError: boolean,\n onDone?: () => void,\n ): void {\n // Decrement pendingNodes count for all relevant run-contexts\n if (plan.runContextIdsForRun && plan.runContextIdsForRun.size > 0) {\n for (const id of plan.runContextIdsForRun) {\n this.runContextManager.finishNodeRun(id, nodeId);\n }\n }\n\n // Skip cleanup if node was deleted (cleanup already handled)\n if (!this.graph.hasNode(nodeId)) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n this.graph.removeNodeController(nodeId, controller);\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const controllers = this.graph.getNodeControllers(nodeId);\n const lastEndAt = Date.now();\n const lastDurationMs = node.stats.lastStartAt && lastEndAt ? lastEndAt - node.stats.lastStartAt : undefined;\n this.graph.updateNodeStats(nodeId, {\n active: Math.max(0, controllers.size),\n lastEndAt,\n lastDurationMs,\n lastError: hadError ? node.stats.lastError : undefined,\n });\n\n // Track successful completion time (for detecting stale inputs)\n const isCancelled =\n controller.signal.aborted &&\n (controller.signal.reason === \"snapshot\" ||\n controller.signal.reason === \"node-deleted\" ||\n controller.signal.reason === \"user-cancelled\");\n if (!hadError && !isCancelled) {\n this.graph.setNodeLastSuccessAt(nodeId, Date.now());\n }\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\n if (!isCancelled) {\n if (node) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n durationMs: node.stats.lastDurationMs,\n });\n }\n }\n if (node) {\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n outputs: node.outputs,\n hadError,\n reason: plan.reason,\n });\n }\n\n if (onDone) onDone();\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(nodeId: string, reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const controllers = this.graph.getNodeControllers(nodeId);\n for (const controller of controllers) {\n const runId = node.controllerRunIds.get(controller);\n if (runId) {\n // Track cancelled runIds for snapshot and user-cancelled operations\n // (to drop emits from cancelled runs)\n if (reason === \"snapshot\" || reason === \"user-cancelled\") {\n this.graph.addSnapshotCancelledRunId(nodeId, runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: nodeId,\n typeId: node.typeId,\n runId,\n cancelled: true,\n });\n }\n try {\n controller.abort(reason);\n } catch {\n // ignore abort errors\n }\n }\n this.graph.clearNodeControllers(nodeId);\n this.graph.updateNodeStats(nodeId, { active: 0 });\n\n // Decrement pendingQueued for any queued items before clearing the queue\n if (node.queue.length > 0) {\n this.decrementQueuedForPlans(node.queue, nodeId);\n }\n this.graph.clearNodeQueue(nodeId);\n }\n\n /**\n * Cancel runs for multiple nodes.\n * Can be called for snapshot/undo/redo operations or user-initiated cancellation.\n */\n cancelNodeRuns(nodeIds: string[], reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n\n // Collect all downstream nodes to cancel\n for (let i = 0; i < queue.length; i++) {\n const nodeId = queue[i];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n\n this.graph.forEachEdge((edge) => {\n if (edge.source.nodeId === nodeId) {\n const targetId = edge.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n });\n }\n\n // Cancel runs for all affected nodes\n for (const nodeId of toCancel) {\n this.cancelNodeActiveRuns(nodeId, reason);\n\n const runSeq = this.graph.incrementNodeRunSeq(nodeId);\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n this.graph.setNodeLatestRunId(nodeId, `${nodeId}:${runSeq}:${now}:${suffix}`);\n }\n\n // Cancel nodes in run-contexts (exclude them from active run-contexts)\n for (const nodeId of toCancel) {\n // includeDownstream = false (already collected above)\n this.runContextManager.cancelNodeInRunContexts(nodeId, false);\n }\n }\n}\n","import type { Graph } from \"./Graph\";\nimport type { Registry } from \"../../builder/Registry\";\nimport type { RuntimeValidator, RuntimeValidationError } from \"./interfaces\";\nimport { formatNodeRef } from \"../utils\";\n\n/**\n * RuntimeValidatorManager component - manages runtime validators\n */\nexport class RuntimeValidatorManager {\n private validators: RuntimeValidator[] = [];\n\n constructor(\n private readonly graph: Graph,\n private registry?: Registry,\n ) {}\n\n /**\n * Set the registry (called when registry changes)\n */\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n /**\n * Register a runtime validator that will be called before node execution.\n * Validators are called in registration order - if any returns true, execution is blocked.\n */\n registerValidator(validator: RuntimeValidator): void {\n this.validators.push(validator);\n }\n\n /**\n * Unregister a runtime validator.\n */\n unregisterValidator(validator: RuntimeValidator): void {\n const index = this.validators.indexOf(validator);\n if (index >= 0) {\n this.validators.splice(index, 1);\n }\n }\n\n /**\n * Check if any runtime validator blocks execution for this node.\n * Returns RuntimeValidationError if execution should be blocked, null otherwise.\n */\n hasBlock(nodeId: string): RuntimeValidationError | null {\n if (!this.registry) return null;\n\n for (const validator of this.validators) {\n try {\n const result = validator(nodeId, this.graph, this.registry);\n if (result !== false) {\n // Validator returned an error object\n return result;\n }\n } catch (err) {\n // Don't let validator errors break execution - log and continue\n console.error(`Runtime validator error for node ${formatNodeRef(this.graph, nodeId)}:`, err);\n }\n }\n return null;\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RunMode,\n} from \"@bian-womp/spark-protocol\";\nimport type { RuntimeNodeStats } from \"../core/types\";\nimport { getInputDeclaredTypes } from \"../core/type-utils\";\nimport { Registry } from \"../builder/Registry\";\nimport { Graph } from \"./components/Graph\";\nimport { EventEmitter } from \"./components/EventEmitter\";\nimport { RunContextManager } from \"./components/RunContextManager\";\nimport { HandleResolver } from \"./components/HandleResolver\";\nimport { EdgePropagator } from \"./components/EdgePropagator\";\nimport { NodeExecutor } from \"./components/NodeExecutor\";\nimport { RuntimeValidatorManager } from \"./components/RuntimeValidatorManager\";\nimport { formatNodeRef } from \"./utils\";\nimport type {\n INodeExecutor,\n IRuntime,\n IEdgePropagator,\n RuntimeValidator,\n RuntimeValidationError,\n} from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type { RuntimeNode, RunContextId, RuntimeEdge } from \"./components/types\";\nimport { buildEdges, tryHandleResolving } from \"./components/graph-utils\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (e: RuntimeEventMap[K]) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\nexport interface RuntimeEventMap {\n value: RuntimeValue;\n invalidate: RuntimeInvalidate;\n error: RuntimeError;\n stats: RuntimeStats;\n}\n\n// Types are now imported from components/types.ts (re-exported above)\nexport class GraphRuntime implements IRuntime, INodeExecutor, IEdgePropagator {\n // Component instances\n private graph: Graph;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private handleResolver: HandleResolver;\n private edgePropagator: EdgePropagator;\n private nodeExecutor: NodeExecutor;\n private runtimeValidatorManager: RuntimeValidatorManager;\n\n // State\n private environment: Record<string, unknown> = {};\n private customNodeData: Record<string, Record<string, unknown>> = {};\n private runMode: RunMode | null = \"manual\";\n private pauseRefCount = 0;\n private persistentPauseToken: (() => void) | null = null;\n private handleResolvingSkippedRef: GraphDefinition | undefined;\n\n constructor() {\n // Initialize components\n this.eventEmitter = new EventEmitter();\n this.graph = new Graph(this.eventEmitter);\n this.runContextManager = new RunContextManager(this.graph, \"warn\");\n\n this.handleResolver = new HandleResolver(this.graph, this.eventEmitter, this.runContextManager, this);\n\n this.edgePropagator = new EdgePropagator(this.graph, this.eventEmitter, this.runContextManager, this, this);\n\n // Create NodeExecutor with EdgePropagator and HandleResolver\n this.nodeExecutor = new NodeExecutor(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver,\n this,\n this,\n );\n\n // Create RuntimeValidatorManager\n this.runtimeValidatorManager = new RuntimeValidatorManager(this.graph);\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown>; startPaused?: boolean },\n ): GraphRuntime {\n const gr = new GraphRuntime();\n if (opts?.startPaused) gr.pause();\n gr.environment = opts?.environment ?? {};\n gr.customNodeData = {};\n\n // Set registry and environment on components\n gr.graph.setRegistry(registry);\n gr.handleResolver.setRegistry(registry);\n gr.handleResolver.setEnvironment(gr.environment);\n gr.nodeExecutor.setEnvironment(gr.environment);\n gr.nodeExecutor.setCustomNodeData(gr.customNodeData);\n gr.runtimeValidatorManager.setRegistry(registry);\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = gr.isPaused()\n ? {\n resolved: new Map<string, ResolvedHandles>(),\n pending: new Set<string>(),\n }\n : tryHandleResolving(def, registry, gr.environment);\n if (gr.isPaused()) {\n gr.handleResolvingSkippedRef = def;\n }\n for (const [nodeId, handles] of initial.resolved) {\n gr.graph.setResolvedHandles(nodeId, handles);\n }\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n logLevel: desc.logLevel,\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContextIds: new Set(),\n lastInputAt: {},\n lastSuccessAt: undefined,\n };\n gr.graph.setNode(n.nodeId, rn);\n }\n\n // Instantiate edges\n const edges = buildEdges(def, registry, gr.graph);\n gr.graph.setEdges(edges);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) {\n gr.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(event: K, handler: RuntimeEventListener<K>): () => void {\n return this.eventEmitter.on(event, handler);\n }\n\n /**\n * Check if an event is an invalidate event that should trigger re-execution\n */\n private isInvalidateEvent(event: unknown): boolean {\n if (!event || typeof event !== \"object\") return false;\n\n // Check if event has action === \"invalidate\"\n const e = event as Record<string, unknown>;\n return e.action === \"invalidate\";\n }\n\n private executeNodeAutoRun(nodeId: string, opts?: { reason?: string }): void {\n const node = this.graph.getNode(nodeId);\n const shouldAutoRun = this.runMode === \"auto\" || node?.policy?.autoRun === true;\n const canExecute = this.graph.allInboundHaveValue(nodeId);\n if (!shouldAutoRun || !canExecute) return;\n\n let runContextIdsToUse = undefined;\n let runContextIdToRelease: RunContextId | undefined;\n if (this.runMode === \"manual\") {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, { propagate: false });\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n\n try {\n this.execute(nodeId, {\n runContextIds: runContextIdsToUse,\n reason: opts?.reason ?? \"executeNodeAutoRun\",\n });\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.graph.getNode(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n const registry = this.graph.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n let hasInbound = false;\n this.graph.forEachEdge((e) => {\n if (e.target.nodeId === nodeId && e.target.handle === handle) {\n hasInbound = true;\n }\n });\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graph.getResolvedHandles(nodeId);\n // Get declared types (may be union); prefer resolved handles over registry statics\n const declaredTypes = resolved\n ? getInputDeclaredTypes(resolved.inputs, handle)\n : desc\n ? getInputDeclaredTypes(desc.inputs, handle)\n : undefined;\n\n const typeIds = Array.isArray(declaredTypes) ? declaredTypes : declaredTypes ? [declaredTypes] : [];\n\n if (typeIds.length > 0) {\n const isValidForAny = typeIds.some((tId) => {\n const typeDesc = registry.types.get(tId);\n // If no validate function, consider it valid\n if (!typeDesc?.validate) return true;\n return typeDesc.validate(value);\n });\n\n if (value !== undefined && !isValidForAny) {\n const typeLabel = typeIds.join(\"|\");\n const errorMessage = `Invalid value for input ${formatNodeRef(\n this.graph,\n nodeId,\n )}.${handle} (type ${typeLabel}): ${JSON.stringify(value)}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n nodeTypeId: node.typeId,\n handle,\n typeId: typeLabel,\n value,\n message: errorMessage,\n });\n // Skip storing invalid value\n continue;\n }\n }\n }\n\n const prev = node.inputs[handle];\n const same = valuesEqual(prev, value);\n if (!same) {\n this.graph.updateNodeInput(nodeId, handle, value);\n anyChanged = true;\n }\n }\n // In auto mode, input updates can trigger execution; in manual mode they never should.\n // However, if autoRun policy is set, nodes run automatically even in manual mode.\n if (anyChanged) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"setInputs\" });\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.graph.getNode(nodeId);\n return node?.outputs[output];\n }\n\n launch(invalidate = false, startPaused = false): void {\n this.graph.forEachNode((node) => {\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const execCtx = this.nodeExecutor.createExecutionContext(\n node.nodeId,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal,\n );\n if (node.lifecycle?.prepare) {\n execCtx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, execCtx);\n execCtx.log(\"debug\", \"prepare-done\");\n }\n node.runtime.onActivated?.();\n });\n if (this.runMode === \"auto\" && invalidate) {\n for (const nodeId of this.graph.getNodeIds()) {\n if (this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId, { reason: \"launch\" });\n }\n }\n }\n if (startPaused) {\n this.pause();\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // If event is an invalidate event, re-run the node with same inputs\n if (this.isInvalidateEvent(event)) {\n // Check if node has all inbound inputs (required for execution)\n if (this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId, { reason: \"triggerExternal\" });\n }\n return;\n }\n\n // Forward event to node's onExternalEvent handler for custom actions\n node.runtime.onExternalEvent?.(event, node.state);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.nodeExecutor.cancelNodeRuns(nodeIds);\n }\n\n getNodeIds(): string[] {\n return this.graph.getNodeIds();\n }\n\n getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.graph.getNode(nodeId);\n if (!node) return undefined;\n return {\n inputs: node.inputs,\n outputs: node.outputs,\n state: node.state,\n params: node.params,\n stats: node.stats,\n };\n }\n\n getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n this.handleResolver.setEnvironment(this.environment);\n this.nodeExecutor.setEnvironment(this.environment);\n for (const nodeId of this.graph.getNodeIds()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"setEnvironment\" });\n }\n }\n\n setCustomNodeData(customNodeData: Record<string, Record<string, unknown>>): void {\n this.customNodeData = { ...customNodeData };\n this.nodeExecutor.setCustomNodeData(this.customNodeData);\n }\n\n getCustomNodeData(): Record<string, Record<string, unknown>> {\n return { ...this.customNodeData };\n }\n\n /**\n * Register a runtime validator that will be called before node execution.\n * Validators are called in registration order - if any returns true, execution is blocked.\n */\n registerRuntimeValidator(validator: RuntimeValidator): void {\n this.runtimeValidatorManager.registerValidator(validator);\n }\n\n /**\n * Unregister a runtime validator.\n */\n unregisterRuntimeValidator(validator: RuntimeValidator): void {\n this.runtimeValidatorManager.unregisterValidator(validator);\n }\n\n /**\n * Check if any runtime validator blocks execution for this node.\n * Returns RuntimeValidationError if execution should be blocked, null otherwise.\n */\n hasRuntimeValidationBlock(nodeId: string): RuntimeValidationError | null {\n return this.runtimeValidatorManager.hasBlock(nodeId);\n }\n\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = [];\n this.graph.forEachNode((n) => {\n const resolved = this.graph.getResolvedHandles(n.nodeId);\n nodes.push({\n nodeId: n.nodeId,\n typeId: n.typeId,\n params: n.params ? { ...n.params } : undefined,\n resolvedHandles: resolved ? { ...resolved } : undefined,\n });\n });\n const edges: GraphEdgeDefinition[] = [];\n this.graph.forEachEdge((e) => {\n edges.push({\n id: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n typeId: e.typeId,\n });\n });\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n const allRunContexts = this.runContextManager.getAllRunContexts();\n if (allRunContexts.size > 0) {\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.runContextManager.getAllRunContexts().size === 0) {\n resolve();\n } else {\n setTimeout(check, 10);\n }\n };\n setTimeout(check, 10);\n });\n }\n\n const isIdle = (): boolean => {\n let idle = true;\n this.graph.forEachNode((n) => {\n if (n.activeControllers.size > 0 || n.queue.length > 0) {\n idle = false;\n }\n });\n return idle;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n async runFromHereContext(\n startNodeId: string,\n opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n reason?: string;\n },\n ): Promise<void> {\n const node = this.graph.getNode(startNodeId);\n if (!node) return;\n\n return new Promise<void>((resolve) => {\n const id = this.runContextManager.createRunContext(startNodeId, {\n resolve,\n ...opts,\n });\n this.graph.addNodeRunContextId(startNodeId, id);\n try {\n this.execute(startNodeId, {\n runContextIds: new Set([id]),\n reason: opts?.reason ?? \"runFromHereContext\",\n });\n } finally {\n this.runContextManager.releaseScheduling(id);\n }\n });\n }\n\n setRunMode(runMode: RunMode): void {\n this.runMode = runMode;\n }\n\n getRunMode(): RunMode | null {\n return this.runMode;\n }\n\n requestPause(): () => void {\n this.pauseRefCount++;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n this.pauseRefCount--;\n };\n }\n\n isPaused(): boolean {\n return this.pauseRefCount > 0;\n }\n\n pause(): void {\n if (!this.persistentPauseToken) {\n this.persistentPauseToken = this.requestPause();\n }\n }\n\n resume(): void {\n if (this.persistentPauseToken) {\n this.persistentPauseToken();\n this.persistentPauseToken = null;\n\n // If handle resolving was skipped, trigger it now\n if (this.handleResolvingSkippedRef) {\n const registry = this.graph.getRegistry();\n if (registry) {\n const result = tryHandleResolving(this.handleResolvingSkippedRef, registry, this.environment);\n for (const [nodeId, handles] of result.resolved) {\n this.graph.setResolvedHandles(nodeId, handles);\n }\n for (const nodeId of result.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n this.handleResolvingSkippedRef = undefined;\n }\n }\n }\n\n setTargetInput(edge: RuntimeEdge, value: unknown, reason: string): void {\n this.graph.updateNodeInput(edge.target.nodeId, edge.target.handle, value);\n this.handleResolver.scheduleRecomputeHandles(edge.target.nodeId);\n this.executeNodeAutoRun(edge.target.nodeId, { reason });\n }\n\n copyOutputs(fromNodeId: string, toNodeId: string, options?: { dry?: boolean }): void {\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n this.hydrate({ outputs: { [toNodeId]: { ...fromNode.outputs } } }, { invalidate: !options?.dry });\n this.handleResolver.scheduleRecomputeHandles(toNodeId);\n this.executeNodeAutoRun(toNodeId, { reason: \"copyOutputs\" });\n }\n\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { invalidate?: boolean },\n ): void {\n const releasePause = this.requestPause();\n try {\n const ins = payload?.inputs || {};\n const nodesWithChangedInputs = new Set<string>();\n for (const [nodeId, map] of Object.entries(ins)) {\n if (!this.graph.hasNode(nodeId)) continue;\n let nodeChanged = false;\n for (const [h, v] of Object.entries(map || {})) {\n const node = this.graph.getNode(nodeId);\n const prev = node?.inputs[h];\n const clonedValue = structuredClone(v);\n const same = valuesEqual(prev, clonedValue);\n if (!same) {\n this.graph.updateNodeInput(nodeId, h, clonedValue, false);\n nodeChanged = true;\n }\n }\n if (nodeChanged) {\n nodesWithChangedInputs.add(nodeId);\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n if (!this.graph.hasNode(nodeId)) continue;\n for (const [h, v] of Object.entries(map || {})) {\n const clonedValue = structuredClone(v);\n this.graph.updateNodeOutput(nodeId, h, clonedValue);\n }\n }\n // Trigger handle resolution for nodes with changed inputs\n for (const nodeId of nodesWithChangedInputs) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n if (opts?.invalidate) {\n for (const nodeId of this.graph.getNodeIds()) {\n this.invalidateDownstream(nodeId);\n }\n }\n } finally {\n releasePause();\n }\n }\n\n update(def: GraphDefinition, registry: Registry): void {\n {\n // Delete nodes that are no longer in the definition\n const afterIds = new Set(def.nodes.map((n) => n.nodeId));\n const beforeIds = new Set(this.graph.getNodeIds());\n for (const nodeId of Array.from(beforeIds)) {\n if (!afterIds.has(nodeId)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n this.nodeExecutor.cancelNodeActiveRuns(nodeId, \"node-deleted\");\n this.runContextManager.cancelNodeInRunContexts(nodeId, true);\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => this.graph.updateNodeState(node.nodeId, next),\n });\n this.graph.deleteNode(nodeId);\n this.edgePropagator.clearArrayBuckets(nodeId);\n }\n }\n }\n\n {\n // Add or update nodes that are in the definition\n for (const n of def.nodes) {\n const existing = this.graph.getNode(n.nodeId);\n if (!existing) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const newNode: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContextIds: new Set(),\n lastInputAt: {},\n lastSuccessAt: undefined,\n };\n this.graph.setNode(n.nodeId, newNode);\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(newNode.nodeId);\n const ctrl = new AbortController();\n const execCtx = this.nodeExecutor.createExecutionContext(\n newNode.nodeId,\n effectiveInputs,\n `${newNode.nodeId}:init`,\n ctrl.signal,\n );\n if (newNode.lifecycle?.prepare) {\n execCtx.log(\"debug\", \"prepare-start\");\n newNode.lifecycle.prepare(newNode.params ?? {}, execCtx);\n execCtx.log(\"debug\", \"prepare-done\");\n }\n newNode.runtime.onActivated?.();\n } else {\n this.graph.updateNodeParams(n.nodeId, n.params);\n // Re-merge policy when params change (params.policy can override descriptor/category policy)\n const desc = registry.nodes.get(existing.typeId);\n const cat = registry.categories.get(desc?.categoryId ?? \"\");\n this.graph.updateNodePolicy(n.nodeId, {\n ...cat?.policy,\n ...desc?.policy,\n ...n.params?.policy,\n });\n // Initialize stats if missing\n if (!existing.stats) {\n this.graph.updateNodeStats(n.nodeId, {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n });\n }\n }\n }\n }\n\n {\n const beforeInbound = new Map<string, Set<string>>();\n const beforeOutTargets = new Map<string, Map<string, Set<string>>>();\n\n this.graph.forEachEdge((e) => {\n // Build beforeInbound map\n const set = beforeInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n beforeInbound.set(e.target.nodeId, set);\n\n // Build beforeOutTargets map\n const tmap = beforeOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n beforeOutTargets.set(e.source.nodeId, tmap);\n });\n\n {\n // Update handles and edges\n const result = this.isPaused()\n ? {\n resolved: new Map<string, ResolvedHandles>(),\n pending: new Set<string>(),\n }\n : tryHandleResolving(def, registry, this.environment);\n if (this.isPaused()) {\n this.handleResolvingSkippedRef = def;\n }\n\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n\n for (const [nodeId, newHandles] of result.resolved) {\n const oldHandles = this.graph.getResolvedHandles(nodeId);\n if (!oldHandles || JSON.stringify(oldHandles) !== JSON.stringify(newHandles)) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n for (const [nodeId, handles] of result.resolved) {\n this.graph.setResolvedHandles(nodeId, handles);\n }\n\n const afterEdges = buildEdges(def, registry, this.graph);\n this.graph.setEdges(afterEdges);\n\n for (const nodeId of result.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n if (Object.keys(changedHandles).length > 0) {\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n }\n\n {\n // Update inputs and propagate changes\n const afterInbound = new Map<string, Set<string>>();\n this.graph.forEachEdge((e) => {\n const set = afterInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n afterInbound.set(e.target.nodeId, set);\n });\n\n // Propagate changes on edges removed\n for (const [nodeId, beforeSet] of beforeInbound) {\n const currSet = afterInbound.get(nodeId) ?? new Set<string>();\n if (!this.graph.hasNode(nodeId)) continue;\n let changed = false;\n for (const handle of Array.from(beforeSet)) {\n if (!currSet.has(handle)) {\n const node = this.graph.getNode(nodeId);\n if (node && handle in node.inputs) {\n this.graph.updateNodeInput(nodeId, handle, undefined);\n changed = true;\n }\n }\n }\n\n if (changed) {\n this.edgePropagator.clearArrayBuckets(nodeId);\n // Trigger handle resolution when inputs are removed\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"graphUpdate\" });\n }\n }\n\n // Propagate changes on edges added\n const afterOutTargets = new Map<string, Map<string, Set<string>>>();\n this.graph.forEachEdge((e) => {\n const targetMap = afterOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const targetSet = targetMap.get(e.source.handle) ?? new Set<string>();\n targetSet.add(`${e.target.nodeId}.${e.target.handle}`);\n targetMap.set(e.source.handle, targetSet);\n afterOutTargets.set(e.source.nodeId, targetMap);\n });\n\n const setsEqual = (a?: Set<string>, b?: Set<string>) => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n };\n\n const nodesToCheck = new Set<string>([\n ...Array.from(beforeOutTargets.keys()),\n ...Array.from(afterOutTargets.keys()),\n ]);\n\n for (const nodeId of nodesToCheck) {\n const beforeMap = beforeOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const afterMap = afterOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([...Array.from(beforeMap.keys()), ...Array.from(afterMap.keys())]);\n for (const handle of handles) {\n const beforeTargetSet = beforeMap.get(handle) ?? new Set<string>();\n const afterTargetSet = afterMap.get(handle) ?? new Set<string>();\n if (!setsEqual(beforeTargetSet, afterTargetSet)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined) {\n let runContextIdsToUse = undefined;\n let runContextIdToRelease: RunContextId | undefined;\n\n if (this.runMode === \"manual\") {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, {\n propagate: false,\n });\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n try {\n this.propagate(nodeId, handle, val, runContextIdsToUse);\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n dispose(): void {\n this.runContextManager.resolveAll();\n\n this.graph.forEachNode((node) => {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => this.graph.updateNodeState(node.nodeId, next),\n });\n });\n this.graph.clear();\n }\n\n execute(\n nodeId: string,\n opts?: {\n runContextIds?: Set<RunContextId>;\n canSkipHandleResolution?: boolean;\n reason?: string;\n },\n ): void {\n this.nodeExecutor.execute(nodeId, opts);\n }\n\n propagate(srcNodeId: string, srcHandle: string, value: unknown, runContextIds?: Set<RunContextId>): void {\n this.edgePropagator.propagate(srcNodeId, srcHandle, value, runContextIds);\n }\n\n invalidateDownstream(nodeId: string): void {\n this.edgePropagator.invalidateDownstream(nodeId);\n }\n}\n","import type { GraphDefinition, GraphNodeDefinition, ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputDeclaredTypes, mergeInputHandleDescriptors } from \"../core/type-utils\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n startPaused?: boolean;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // Precompute effective handle maps (registry statics merged with per-node resolvedHandles)\n const nodeById = new Map<string, GraphNodeDefinition>();\n const effByNodeId = new Map<string, Omit<ResolvedHandles, \"inputDefaults\">>();\n\n const getEffectiveHandles = (n?: GraphNodeDefinition): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n\n // Merge inputs properly, handling union types and metadata\n const inputs: Record<string, any> = {};\n\n // First, add all static handles\n if (desc?.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge resolved handles (which may override/extend static handles)\n if (resolved.inputs) {\n for (const [handle, resolvedDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = desc?.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, resolvedDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n return { inputs, outputs };\n };\n\n const normOut = (decl: string | string[] | undefined): string[] =>\n Array.isArray(decl) ? decl : decl ? [decl] : [];\n\n const getEnumTypes = (decl: string | string[] | undefined): string[] =>\n normOut(decl).filter((t) => t.startsWith(\"enum:\"));\n\n const hasArrayType = (decl: string | string[] | undefined): boolean => normOut(decl).some((t) => t.endsWith(\"[]\"));\n\n const canFlow = (from: string | string[] | undefined, to?: string | string[]): boolean => {\n if (!to || !from) return true;\n const srcTypes = Array.isArray(from) ? from : [from];\n const dstTypes = Array.isArray(to) ? to : [to];\n return srcTypes.some((s) => dstTypes.some((t) => s === t || !!this.registry.canCoerce(s, t)));\n };\n\n // Helper to validate enum value\n const validateEnumValue = (typeId: string, value: unknown, nodeId: string, handle?: string): boolean => {\n if (!typeId.startsWith(\"enum:\")) return true; // Not an enum type\n const enumDef = this.registry.enums.get(typeId);\n if (!enumDef) return true; // Enum not registered, skip validation\n if (typeof value !== \"number\") return false; // Enum values must be numbers\n return enumDef.valueToLabel.has(value);\n };\n\n const pushIssue = (\n level: \"error\" | \"warning\",\n code: string,\n message: string,\n data?: Partial<ValidationIssueData>,\n ) => {\n issues.push({ level, code, message, data });\n };\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n pushIssue(\"error\", \"NODE_ID_DUP\", `Duplicate nodeId ${n.nodeId}`, {\n nodeId: n.nodeId,\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n nodeById.set(n.nodeId, n);\n effByNodeId.set(n.nodeId, getEffectiveHandles(n));\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n pushIssue(\"error\", \"NODE_TYPE_MISSING\", `Unknown node type ${n.typeId}`, {\n typeId: n.typeId,\n nodeId: n.nodeId,\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\"error\", \"CATEGORY_MISSING\", `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`);\n }\n\n // Validate enum values in node params\n if (n.params) {\n const effectiveHandles = getEffectiveHandles(n);\n for (const [paramKey, paramValue] of Object.entries(n.params)) {\n // Skip policy and other non-input params\n if (paramKey === \"policy\") continue;\n\n // Check if this param corresponds to an input handle\n const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, paramKey);\n const enumTypes = getEnumTypes(declaredTypes);\n if (\n enumTypes.length > 0 &&\n typeof paramValue === \"number\" &&\n !enumTypes.some((et) => validateEnumValue(et, paramValue, n.nodeId, paramKey))\n ) {\n const enumDef = this.registry.enums.get(enumTypes[0]);\n const validValues = enumDef ? Array.from(enumDef.valueToLabel.keys()).join(\", \") : \"unknown\";\n pushIssue(\n \"error\",\n \"ENUM_VALUE_INVALID\",\n `Node ${n.nodeId} param ${paramKey} has invalid enum value ${paramValue}. Valid values: ${validValues}`,\n {\n nodeId: n.nodeId,\n input: paramKey,\n typeId: enumTypes.join(\"|\"),\n },\n );\n }\n }\n }\n\n // Validate enum values in input defaults\n const resolved = n.resolvedHandles;\n if (resolved?.inputDefaults) {\n const effectiveHandles = getEffectiveHandles(n);\n for (const [handle, defaultValue] of Object.entries(resolved.inputDefaults)) {\n const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, handle);\n const enumTypes = getEnumTypes(declaredTypes);\n if (\n enumTypes.length > 0 &&\n typeof defaultValue === \"number\" &&\n !enumTypes.some((et) => validateEnumValue(et, defaultValue, n.nodeId, handle))\n ) {\n const enumDef = this.registry.enums.get(enumTypes[0]);\n const validValues = enumDef ? Array.from(enumDef.valueToLabel.keys()).join(\", \") : \"unknown\";\n pushIssue(\n \"warning\",\n \"ENUM_DEFAULT_INVALID\",\n `Node ${n.nodeId} input default ${handle} has invalid enum value ${defaultValue}. Valid values: ${validValues}`,\n {\n nodeId: n.nodeId,\n input: handle,\n typeId: enumTypes.join(\"|\"),\n },\n );\n }\n }\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n // Track which inbound (nodeId::handle) are declared as array inputs, to allow multi-inbound without warning\n const inboundArrayOk = new Set<string>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n pushIssue(\"error\", \"EDGE_ID_DUP\", `Duplicate edge id ${e.id}`, {\n edgeId: e.id,\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = nodeById.get(e.source.nodeId);\n const dstNode = nodeById.get(e.target.nodeId);\n if (!srcNode)\n pushIssue(\"error\", \"EDGE_SOURCE_MISSING\", `Edge ${e.id} source node missing`, {\n edgeId: e.id,\n });\n if (!dstNode)\n pushIssue(\"error\", \"EDGE_TARGET_MISSING\", `Edge ${e.id} target node missing`, {\n edgeId: e.id,\n });\n // Effective handle declarations\n const srcEff = effByNodeId.get(e.source.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const dstEff = effByNodeId.get(e.target.nodeId) || {\n inputs: {},\n outputs: {},\n };\n // Validate explicit type if provided\n if (e.typeId) {\n const type = this.registry.types.get(e.typeId);\n if (!type) {\n pushIssue(\"error\", \"TYPE_MISSING\", `Edge ${e.id} explicit type ${e.typeId} is missing or unknown`, {\n edgeId: e.id,\n });\n }\n }\n\n if (srcNode) {\n if (!(e.source.handle in srcEff.outputs)) {\n pushIssue(\n \"error\",\n \"OUTPUT_MISSING\",\n `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle },\n );\n }\n const declaredArr = normOut(srcEff.outputs[e.source.handle]);\n if (declaredArr.length > 0) {\n // Check if explicit type matches source output\n if (e.typeId && !canFlow(declaredArr, e.typeId)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} explicit type ${e.typeId} mismatches source output ${srcNode.typeId}.${\n e.source.handle\n } (${declaredArr.join(\"|\")}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n typeId: e.typeId,\n },\n );\n }\n }\n }\n if (dstNode) {\n if (!(e.target.handle in dstEff.inputs)) {\n pushIssue(\n \"error\",\n \"INPUT_MISSING\",\n `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle },\n );\n }\n // Private inputs should not accept edges\n if (isInputPrivate(dstEff.inputs, e.target.handle)) {\n pushIssue(\n \"error\",\n \"INPUT_PRIVATE\",\n `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle },\n );\n }\n const declaredIn = getInputDeclaredTypes(dstEff.inputs, e.target.handle) as string | string[] | undefined;\n const declaredInArr = normOut(declaredIn);\n if (declaredInArr.length > 0) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as string | string[] | undefined;\n const srcArr = normOut(srcDeclared);\n if (srcArr.length > 0 && !canFlow(srcArr, declaredInArr)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\"|\")} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredInArr.join(\"|\")})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredInArr.join(\"|\"),\n typeId: srcArr.join(\"|\"),\n },\n );\n }\n } else if (e.typeId && !canFlow([e.typeId], declaredInArr)) {\n // External source with explicit type\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} explicit type ${e.typeId} mismatches target input ${\n dstNode.typeId\n }.${e.target.handle} (${declaredInArr.join(\"|\")}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredInArr.join(\"|\"),\n typeId: e.typeId,\n },\n );\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n // If the target input is declared as an array type, allow multi-inbound (runtime will append)\n if (dstNode) {\n const declaredIn = getInputDeclaredTypes(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle,\n );\n if (hasArrayType(declaredIn)) {\n inboundArrayOk.add(inboundKey);\n }\n }\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1 && !inboundArrayOk.has(key)) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string,\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string | string[]> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode ? this.registry.nodes.get(innerNode.typeId) : undefined;\n const typeIds = innerDesc ? getInputDeclaredTypes(innerDesc.inputs, map.handle) : undefined;\n inputTypes[outerIn] = typeIds ?? \"unknown\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode ? this.registry.nodes.get(innerNode.typeId) : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"unknown\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import type { RunMode } from \"@bian-womp/spark-protocol\";\nimport { GraphRuntime } from \"./GraphRuntime\";\nimport { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\n\n/**\n * Unified Engine implementation that handles both manual and auto run modes.\n * - Manual mode: Nodes execute only when explicitly called via computeNode/runFromHere (unless paused)\n * - Auto mode: Nodes automatically execute when inputs change (unless paused)\n */\nexport class LocalEngine implements Engine {\n constructor(\n protected readonly graphRuntime: GraphRuntime,\n runMode?: RunMode,\n ) {\n this.setRunMode(runMode ?? \"manual\");\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>, options?: { dry?: boolean }): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.setInputs(nodeId, inputs);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown, options?: { dry?: boolean }): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.triggerExternal(nodeId, event);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n }\n\n on<K extends EngineEventName>(event: K, handler: EngineEventListener<K>): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.graphRuntime.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(fromNodeId: string, toNodeId: string, options?: { dry?: boolean }): void {\n this.graphRuntime.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n dispose(): void {\n // this.graphRuntime.dispose();\n }\n\n launch(invalidate?: boolean, runMode?: RunMode, startPaused?: boolean): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate, startPaused);\n }\n\n /**\n * Run only this node, no downstream propagation.\n * Works in both modes, but typically only used in manual mode.\n * @param nodeId - The node to run\n * @param options - Execution options\n * @param options.skipPropagateValues - If true, don't set inputs of linked nodes (default: false)\n */\n async computeNode(nodeId: string, options?: { skipPropagateValues?: boolean }): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\n reason: \"computeNode\",\n });\n }\n\n /**\n * Run this node and all dynamically reachable downstream nodes.\n * Works in both modes, but typically only used in manual mode.\n * Uses run-context system for dynamic graph updates.\n */\n async runFromHere(nodeId: string): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n reason: \"runFromHere\",\n });\n }\n\n setRunMode(runMode: RunMode): void {\n this.graphRuntime.setRunMode(runMode);\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>,\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, any> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n onExternalEvent(event, state) {\n try {\n const e: any = event;\n // Preferred: call a function on state keyed by e.action\n const action = e?.action;\n if (action && typeof state?.[action] === \"function\") {\n const fn = state[action] as (...args: any[]) => any;\n // Normalize args: prefer explicit args array, else wrap single value;\n let args: any[] = [];\n if (Array.isArray(e?.args)) args = [...e.args];\n else if (e?.args !== undefined) args = [e.args];\n else if (e?.params !== undefined) args = [e.params];\n void fn(...args);\n return;\n }\n console.warn(\"Unsupported external event\", JSON.stringify(event));\n } catch {\n console.warn(\"Error handling external event\", JSON.stringify(event));\n }\n },\n }),\n policy: { asyncConcurrency: \"switch\" },\n};\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry,\n): NodeCategoryDescriptor<CompositeImpl, { inner?: GraphRuntime; unsub?: () => void }> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer inputs => batch per inner node to avoid extra runs\n const grouped: Record<string, Record<string, unknown>> = {};\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs) {\n const nodeMap = (grouped[map.nodeId] = grouped[map.nodeId] || {});\n nodeMap[map.handle] = inputs[inHandle];\n }\n }\n for (const [nodeId, map] of Object.entries(grouped)) {\n inner.setInputs(nodeId, map);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n});\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, NodeContext } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: any): number[] => (Array.isArray(v) ? (v as number[]) : [Number(v)]);\n\nconst broadcast = (a: number[] | number, b: number[] | number): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\n\nconst asBoolArray = (v: any): boolean[] => (Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)]);\n\nconst broadcastBool = (a: boolean[] | boolean, b: boolean[] | boolean): [boolean[], boolean[]] => {\n const aa = asBoolArray(a);\n const bb = asBoolArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? false), new Array(len).fill(bb[0] ?? false)];\n};\n\nconst clamp = (x: number, min: number, max: number) => Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\n// JSON Pointer helpers (RFC 6901 subset)\nfunction jsonPointerGet(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return obj;\n if (!pointer.startsWith(\"/\")) return undefined;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n let cur: any = obj;\n for (const key of parts) {\n if (cur === undefined || cur === null) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction jsonPointerSet(obj: any, pointer: string, value: any): any {\n if (!pointer || pointer === \"/\") return value;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(cur) && key === \"-\") cur.push(value);\n else cur[key] = value;\n } else {\n const next = cur[key];\n if (next === undefined || next === null) {\n // create container heuristically\n const nextKey = parts[i + 1];\n cur[key] = typeof nextKey === \"string\" && /^[0-9]+$/.test(nextKey) ? [] : {};\n }\n cur = cur[key];\n }\n }\n return root;\n}\n\nfunction jsonPointerRemove(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return undefined;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i];\n if (cur === undefined || cur === null) return root;\n cur = cur[key];\n }\n const last = parts[parts.length - 1];\n if (Array.isArray(cur)) {\n const idx = last === \"-\" ? cur.length - 1 : Number(last);\n if (Number.isFinite(idx)) cur.splice(idx as number, 1);\n } else if (cur && typeof cur === \"object\") {\n delete cur[last];\n }\n return root;\n}\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) && Array.isArray(b)) return [...a, ...b];\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) {\n out[k] = k in out ? deepMerge(out[k], v) : v;\n }\n return out;\n }\n return b;\n}\n\n// JSON helpers\nconst isPlainObject = (v: any): v is Record<string, any> => {\n if (v === null || typeof v !== \"object\") return false;\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n};\n\nconst isJson = (v: any): boolean => {\n if (v === null) return true;\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return true;\n if (Array.isArray(v)) return v.every(isJson);\n if (isPlainObject(v)) return Object.values(v).every(isJson);\n return false;\n};\n\n// Export operation constants for use in examples and tests\nexport const BaseMathOperation = {\n Add: 0,\n Subtract: 1,\n Multiply: 2,\n Divide: 3,\n Min: 4,\n Max: 5,\n Modulo: 6,\n Power: 7,\n Round: 8,\n Floor: 9,\n Ceil: 10,\n Abs: 11,\n Sum: 12,\n Avg: 13,\n MinAll: 14,\n MaxAll: 15,\n Sin: 16,\n Cos: 17,\n Tan: 18,\n Asin: 19,\n Acos: 20,\n Atan: 21,\n Sqrt: 22,\n Exp: 23,\n Log: 24,\n} as const;\n\nexport const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n} as const;\n\nexport const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n} as const;\n\nexport function setupBasicGraphRegistry(id?: string): Registry {\n const registry = new Registry(id);\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n bakeTarget: { nodeTypeId: \"base.input.number\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n bakeTarget: { nodeTypeId: \"base.input.bool\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n bakeTarget: { nodeTypeId: \"base.input.string\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n // Generic object value (JSON-compatible; object/array/primitive/null)\n registry.registerType(\n {\n id: \"base.object\",\n validate: (v) => isJson(v),\n bakeTarget: { nodeTypeId: \"base.input.object\", inputHandle: \"Value\" },\n },\n { withArray: false },\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) => Array.isArray(v) && v.length === 3 && v.every((x) => typeof x === \"number\"),\n bakeTarget: { nodeTypeId: \"base.input.vec3\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.float\", (value) => {\n const v = value as [number, number, number];\n return Math.hypot(Number(v[0] ?? 0), Number(v[1] ?? 0), Number(v[2] ?? 0));\n });\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Object <-> String\n registry.registerCoercion(\"base.string\", \"base.object\", (v) => {\n return v as string;\n });\n\n registry.registerCoercion(\"base.object\", \"base.string\", (v) => {\n if (typeof v === \"string\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.bool\", \"base.object\", (v) => {\n return v as boolean;\n });\n\n registry.registerCoercion(\"base.object\", \"base.bool\", (v) => {\n if (typeof v === \"boolean\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.float\", \"base.object\", (v) => {\n return v as number;\n });\n\n registry.registerCoercion(\"base.object\", \"base.float\", (v) => {\n if (typeof v === \"number\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.object\", (v) => {\n return v as [number, number, number];\n });\n\n registry.registerCoercion(\"base.object\", \"base.vec3\", (v) => {\n try {\n if (Array.isArray(v) && v.length === 3 && v.every((x) => typeof x === \"number\")) {\n return v as [number, number, number];\n }\n return undefined;\n } catch {\n return undefined;\n }\n });\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"enum:base.math.operation\",\n options: Object.entries(BaseMathOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"enum:base.compare.operation\",\n options: Object.entries(BaseCompareOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Logic Operation\n registry.registerEnum({\n id: \"enum:base.logic.operation\",\n options: Object.entries(BaseLogicOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Number\n registry.registerNode({\n id: \"base.input.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n policy: { autoRun: true },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.string\",\n categoryId: \"compute\",\n inputs: { Value: \"base.string\" },\n outputs: { Result: \"base.string\" },\n policy: { autoRun: true },\n impl: (ins: { Value: string }) => ({ Result: String(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.bool\",\n categoryId: \"compute\",\n inputs: { Value: \"base.bool\" },\n outputs: { Result: \"base.bool\" },\n policy: { autoRun: true },\n impl: (ins: { Value: boolean }) => ({ Result: Boolean(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.object\",\n categoryId: \"compute\",\n inputs: { Value: \"base.object\" },\n outputs: { Result: \"base.object\" },\n policy: { autoRun: true },\n impl: (ins: { Value: any }) => ({ Result: ins.Value }),\n });\n\n registry.registerNode({\n id: \"base.input.vec3\",\n categoryId: \"compute\",\n inputs: { Value: \"base.vec3\" },\n outputs: { Result: \"base.vec3\" },\n policy: { autoRun: true },\n impl: (ins: { Value: [number, number, number] }) => ({ Result: ins.Value }),\n });\n\n // JSON parser node: base.stringToObject\n registry.registerNode({\n id: \"base.string.toObject\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Object: \"base.object\" },\n impl: (ins: { Text?: string }) => {\n const t = ins.Text ?? \"\";\n try {\n const obj = JSON.parse(t);\n return { Object: obj };\n } catch {\n return { Object: undefined };\n }\n },\n });\n\n registry.registerNode({\n id: \"base.object.toString\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Object?: any }) => {\n return { Text: JSON.stringify(ins.Object) };\n },\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n inputDefaults: {\n Factor: 0.5,\n },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax)) : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n // Registry-level defaults: Add by default, A=[1], B=[1]\n inputDefaults: { Operation: 0, A: [1], B: [1] },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const a = asArray(ins.A ?? []);\n const b = asArray(ins.B ?? []);\n const op = Number(ins.Operation ?? BaseMathOperation.Add);\n\n const unaryByOp: Record<number, (x: number) => number> = {\n [BaseMathOperation.Round]: (x) => Math.round(x),\n [BaseMathOperation.Floor]: (x) => Math.floor(x),\n [BaseMathOperation.Ceil]: (x) => Math.ceil(x),\n [BaseMathOperation.Abs]: (x) => Math.abs(x),\n [BaseMathOperation.Sin]: (x) => Math.sin(x),\n [BaseMathOperation.Cos]: (x) => Math.cos(x),\n [BaseMathOperation.Tan]: (x) => Math.tan(x),\n [BaseMathOperation.Asin]: (x) => Math.asin(x),\n [BaseMathOperation.Acos]: (x) => Math.acos(x),\n [BaseMathOperation.Atan]: (x) => Math.atan(x),\n [BaseMathOperation.Sqrt]: (x) => Math.sqrt(x),\n [BaseMathOperation.Exp]: (x) => Math.exp(x),\n [BaseMathOperation.Log]: (x) => Math.log(x),\n };\n if (unaryByOp[op]) return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) => arr.reduce((s, x) => s + Number(x || 0), 0),\n [BaseMathOperation.Avg]: (arr) => {\n const sum = arr.reduce((s, x) => s + Number(x || 0), 0);\n return arr.length ? sum / arr.length : 0;\n },\n [BaseMathOperation.MinAll]: (arr) => (arr.length ? Math.min(...arr.map((x) => Number(x))) : 0),\n [BaseMathOperation.MaxAll]: (arr) => (arr.length ? Math.max(...arr.map((x) => Number(x))) : 0),\n };\n if (aggregateByOp[op] !== undefined) return { Result: [aggregateByOp[op](a)] };\n\n const binaryByOp: Record<number, (x: number, y: number) => number> = {\n [BaseMathOperation.Add]: (x, y) => x + y,\n [BaseMathOperation.Subtract]: (x, y) => x - y,\n [BaseMathOperation.Multiply]: (x, y) => x * y,\n [BaseMathOperation.Divide]: (x, y) => x / (y || 1),\n [BaseMathOperation.Min]: (x, y) => Math.min(x, y),\n [BaseMathOperation.Max]: (x, y) => Math.max(x, y),\n [BaseMathOperation.Modulo]: (x, y) => (y ? x % y : 0),\n [BaseMathOperation.Power]: (x, y) => Math.pow(x, y),\n };\n const fn = binaryByOp[op] || binaryByOp[BaseMathOperation.Add];\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : (a[i] ?? 0);\n const bx = b.length === 1 && len > 1 ? b[0] : (b[i] ?? 0);\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? BaseCompareOperation.Equal);\n const compareByOp: Record<number, (x: number, y: number) => boolean> = {\n [BaseCompareOperation.LessThan]: (x, y) => x < y,\n [BaseCompareOperation.LessThanOrEqual]: (x, y) => x <= y,\n [BaseCompareOperation.GreaterThan]: (x, y) => x > y,\n [BaseCompareOperation.GreaterThanOrEqual]: (x, y) => x >= y,\n [BaseCompareOperation.Equal]: (x, y) => x === y,\n [BaseCompareOperation.NotEqual]: (x, y) => x !== y,\n };\n const fn = compareByOp[op] || compareByOp[BaseCompareOperation.Equal];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n // Logic\n registry.registerNode({\n id: \"base.logic\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.logic.operation\",\n A: \"base.bool[]\",\n B: \"base.bool[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n inputDefaults: { Operation: BaseLogicOperation.Not },\n impl: (ins: { Operation?: number; A?: boolean[]; B?: boolean[] }) => {\n const op = Number(ins.Operation ?? BaseLogicOperation.Not);\n if (op === BaseLogicOperation.Not) {\n const a = asBoolArray(ins.A ?? []);\n return { Result: a.map((x) => !x) };\n }\n const [a, b] = broadcastBool(ins.A ?? [], ins.B ?? []);\n const logicByOp: Record<number, (x: boolean, y: boolean) => boolean> = {\n [BaseLogicOperation.And]: (x, y) => x && y,\n [BaseLogicOperation.Or]: (x, y) => x || y,\n [BaseLogicOperation.Xor]: (x, y) => Boolean(x ? !y : y),\n };\n const fn = logicByOp[op] || logicByOp[BaseLogicOperation.And];\n return {\n Result: a.map((x, i) => fn(Boolean(x), Boolean(b[i] ?? false))),\n };\n },\n });\n\n // Strings\n registry.registerNode({\n id: \"base.string.length\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Text?: string }) => ({\n Length: String(ins.Text || \"\").length,\n }),\n });\n\n registry.registerNode({\n id: \"base.string.op\",\n categoryId: \"compute\",\n inputs: { Op: \"base.string\", Text: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Op?: string; Text?: string }) => {\n const op = String(ins.Op || \"trim\").toLowerCase();\n const t = String(ins.Text || \"\");\n if (op === \"lower\") return { Text: t.toLowerCase() };\n if (op === \"upper\") return { Text: t.toUpperCase() };\n return { Text: t.trim() };\n },\n });\n\n registry.registerNode({\n id: \"base.string.split\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\", Sep: \"base.string\" },\n outputs: { Parts: \"base.string[]\" },\n impl: (ins: { Text?: string; Sep?: string }) => {\n const t = String(ins.Text || \"\");\n const sep = String(ins.Sep || \",\");\n return { Parts: t.split(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.join\",\n categoryId: \"compute\",\n inputs: { Parts: \"base.string[]\", Sep: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Parts?: string[]; Sep?: string }) => {\n const parts = Array.isArray(ins.Parts) ? ins.Parts.map(String) : [];\n const sep = String(ins.Sep || \"\");\n return { Text: parts.join(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.replace\",\n categoryId: \"compute\",\n inputs: {\n Text: \"base.string\",\n Search: \"base.string\",\n Replace: \"base.string\",\n },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Text?: string; Search?: string; Replace?: string }) => {\n const t = String(ins.Text || \"\");\n const s = String(ins.Search || \"\");\n const r = String(ins.Replace || \"\");\n return { Text: t.split(s).join(r) };\n },\n });\n\n // Arrays (carried as base.object)\n registry.registerNode({\n id: \"base.array.length\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Items?: any }) => ({\n Length: Array.isArray(ins.Items) ? ins.Items.length : 0,\n }),\n });\n\n registry.registerNode({\n id: \"base.array.slice\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\", Start: \"base.float\", End: \"base.float\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Items?: any; Start?: number; End?: number }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const s = Math.trunc(Number(ins.Start ?? 0));\n const e = Number.isFinite(Number(ins.End)) ? Math.trunc(Number(ins.End)) : undefined;\n return { Result: arr.slice(s, e as any) };\n },\n });\n\n // Compose array from dynamic item inputs\n registry.registerNode({\n id: \"base.array.compose\",\n categoryId: \"compute\",\n inputs: { Length: \"base.float\" },\n outputs: { Items: \"base.object\" },\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const raw = inputs?.Length ?? 0;\n const n = Math.max(0, Math.min(maxLen, Math.trunc(Number(raw ?? 0))));\n if (!Number.isFinite(n)) return { inputs: {} };\n const dyn: Record<string, { typeId: string }> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = { typeId: \"base.object\" };\n return { inputs: dyn };\n },\n inputDefaults: { Length: 0 },\n impl: (ins: Record<string, unknown>) => {\n const length = Math.max(0, Math.trunc(Number(ins.Length ?? 0)));\n if (!Number.isFinite(length)) return { Items: [] };\n return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };\n },\n });\n\n // Decompose array into dynamic item outputs\n registry.registerNode({\n id: \"base.array.decompose\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: {},\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const arr = Array.isArray(inputs?.Items) ? (inputs?.Items as any[]) : [];\n const n = Math.max(0, Math.min(maxLen, arr.length));\n const dyn: Record<string, string> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = \"base.object\";\n return { outputs: dyn };\n },\n impl: (ins: { Items?: any[] }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const out: Record<string, unknown> = {};\n const n = Math.max(0, Math.min(64, arr.length));\n for (let i = 0; i < n; i++) out[`Item${i}`] = arr[i];\n return out;\n },\n });\n\n // Select\n registry.registerNode({\n id: \"base.select\",\n categoryId: \"compute\",\n inputs: { Cond: \"base.bool\", Then: \"base.object\", Else: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Cond?: boolean; Then?: any; Else?: any }) => ({\n Result: ins.Cond ? ins.Then : ins.Else,\n }),\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [number, number, number]);\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n // Registry-level defaults for convenience\n inputDefaults: { Domain: 10, Min: [0, 0, 0], Max: [1, 1, 1], Seed: 1 },\n impl: (ins: { Domain: number; Min: [number, number, number]; Max: [number, number, number]; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number],\n );\n return { Values: out };\n },\n });\n\n // Timer\n registry.registerNode({\n id: \"base.timer\",\n categoryId: \"compute\",\n inputs: {\n Enabled: \"base.bool\",\n IntervalMs: \"base.float\",\n Immediate: \"base.bool\",\n },\n outputs: { Now: \"base.float\", Count: \"base.float\" },\n inputDefaults: { Enabled: true, IntervalMs: 1000, Immediate: true },\n impl: (\n ins: { Enabled?: boolean; IntervalMs?: number; Immediate?: boolean },\n ctx: ExecutionContext<{ timerId?: NodeJS.Timeout }>,\n ) => {\n const enabled = Boolean(ins.Enabled);\n const intervalMs = Math.max(1, Math.trunc(Number(ins.IntervalMs ?? 1000)));\n const immediate = Boolean(ins.Immediate);\n\n const stop = () => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n };\n\n if (!enabled) {\n stop();\n return;\n }\n\n // restart timer with new settings\n stop();\n let count = 0;\n if (immediate) {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }\n const id = setInterval(() => {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }, intervalMs);\n ctx.setState({ timerId: id });\n },\n lifecycle: {\n dispose: (ctx: NodeContext<{ timerId?: NodeJS.Timeout }>) => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n },\n },\n });\n\n // ------------------------- JSON/object utilities -------------------------\n registry.registerNode({\n id: \"base.object.get\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const obj = ins.Object;\n const pointers = (ins.Pointers || []).map(String);\n const out: Record<string, any> = {};\n for (const p of pointers) out[p] = jsonPointerGet(obj, p);\n return { Values: out };\n },\n });\n\n registry.registerNode({\n id: \"base.object.set\",\n categoryId: \"compute\",\n inputs: {\n Object: \"base.object\",\n Pointers: \"base.string[]\",\n NewValues: \"base.object\",\n },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[]; NewValues?: any }) => {\n const pointers = (ins.Pointers || []).map(String);\n const values = (ins.NewValues || []).map(String);\n let cur = structuredClone(ins.Object);\n for (let i = 0; i < pointers.length; i++) {\n const p = pointers[i];\n const raw = values[i];\n let val: any = raw;\n if (typeof raw === \"string\") {\n try {\n val = JSON.parse(raw);\n } catch {\n /* keep as string */\n }\n }\n cur = jsonPointerSet(cur, p, val);\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.remove\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const pointers = (ins.Pointers || []).map(String);\n let cur = structuredClone(ins.Object);\n for (const p of pointers) cur = jsonPointerRemove(cur, p);\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.merge\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => ({\n Result: deepMerge(ins.A, ins.B),\n }),\n });\n\n registry.registerNode({\n id: \"base.object.keys\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Keys: \"base.string[]\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const keys = isPlainObject(obj) ? Object.keys(obj) : Array.isArray(obj) ? Object.keys(obj) : [];\n return { Keys: keys };\n },\n });\n\n registry.registerNode({\n id: \"base.object.values\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const vals = isPlainObject(obj) ? Object.values(obj) : Array.isArray(obj) ? Object.values(obj) : [];\n return { Values: vals };\n },\n });\n\n registry.registerNode({\n id: \"base.object.patch\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Ops: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Ops?: any }) => {\n const root = structuredClone(ins.Object);\n const opsRaw = ins.Ops;\n const ops: any[] = Array.isArray(opsRaw) ? opsRaw : opsRaw ? [opsRaw] : [];\n let cur = root;\n for (const op of ops) {\n if (!op || typeof op !== \"object\") continue;\n const kind = String(op.op || \"\");\n const path = String(op.path || \"\");\n if (kind === \"add\" || kind === \"replace\") {\n cur = jsonPointerSet(cur, path, op.value);\n } else if (kind === \"remove\") {\n cur = jsonPointerRemove(cur, path);\n } else if (kind === \"test\") {\n const got = jsonPointerGet(cur, path);\n const expected = op.value;\n const ok = JSON.stringify(got) === JSON.stringify(expected);\n if (!ok) throw new Error(`objectPatch test failed at ${path}`);\n }\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.array.concat\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => {\n const a = Array.isArray(ins.A) ? ins.A : [];\n const b = Array.isArray(ins.B) ? ins.B : [];\n return { Result: [...a, ...b] };\n },\n });\n\n registry.registerNode({\n id: \"base.array.flatten\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const out: any[] = [];\n for (const v of arr) {\n if (Array.isArray(v)) out.push(...v);\n else out.push(v);\n }\n return { Result: out };\n },\n });\n\n registry.registerNode({\n id: \"base.array.sortBy\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any; Pointers?: string[] }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const pointers = (ins.Pointers || []).map(String);\n const out = [...arr].sort((a, b) => {\n for (const p of pointers) {\n const av = jsonPointerGet(a, p);\n const bv = jsonPointerGet(b, p);\n if (av === bv) continue;\n if (av === undefined) return 1;\n if (bv === undefined) return -1;\n if (av < bv) return -1;\n if (av > bv) return 1;\n }\n return 0;\n });\n return { Result: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\", DelayMs: \"base.float\" },\n outputs: { Output: \"base.float\" },\n impl: async (ins: { Value: number; DelayMs?: number }, ctx: ExecutionContext<any>) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (valueRaw === undefined || valueRaw === null || Number.isNaN(Number(valueRaw))) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { Output: Number(valueRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean }, ctx: ExecutionContext<any>) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition, opts?: { startPaused?: boolean }) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\"Validation failed: \" + report.issues.map((i) => `${i.code}:${i.message}`).join(\", \"));\n\n return builder.build(def, opts);\n}\n\nexport function generateId(prefix: string, used: Set<string> = new Set()): string {\n let id: string;\n let attempts = 0;\n do {\n id = `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n attempts++;\n if (attempts > 1000) {\n id = `${prefix}${Date.now().toString(36)}${Math.random().toString(36).slice(2, 4)}`;\n }\n } while (used.has(id));\n return id;\n}\n","import type { EngineEventListener, EngineEventName } from \"../runtime/Engine\";\n\nexport function installLogging(engine: {\n on: <K extends EngineEventName>(event: K, handler: EngineEventListener<K>) => void;\n}) {\n engine.on(\"value\", (e) => {\n const t = e.runtimeTypeId ? ` <${e.runtimeTypeId}>` : \"\";\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value, t);\n });\n engine.on(\"stats\", (s) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round((s.progress ?? 0) * 100);\n console.log(`[progress] ${s.runId || s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n const cancelled = (s as any).cancelled ? \" (cancelled)\" : \"\";\n console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms${cancelled}`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.runId || s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(`[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`);\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`,\n );\n }\n });\n engine.on(\"error\", (e) => {\n if (e.kind === \"node-run\") {\n console.warn(`[error] ${e.runId || e.nodeId}`, (e.err as any)?.message ?? e.err);\n } else if (e.kind === \"edge-convert\") {\n console.warn(\n `[error] ${e.edgeId} ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle}`,\n (e.err as any)?.message ?? e.err,\n );\n } else if (e.kind === \"input-validation\") {\n console.warn(`[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`, e.message);\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})` : \"\",\n );\n } else if (e.kind === \"system\") {\n console.warn(\n `[error] system: ${e.message}`,\n e.code ? `(code: ${e.code})` : \"\",\n e.err ? ((e.err as any)?.message ?? e.err) : \"\",\n e.details ? JSON.stringify(e.details) : \"\",\n );\n } else {\n // Log any other error kinds (shouldn't happen, but handle gracefully)\n console.warn(`[error] unknown error kind:`, e);\n }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime, BaseMathOperation } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n {\n nodeId: \"n2\",\n typeId: \"base.math\",\n },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry(id?: string) {\n return setupBasicGraphRegistry(id);\n}\n\n// Execute when run as a script\nexport async function main() {\n console.log(\"Simple example: topology and defaults\");\n console.log(\"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\");\n console.log(\n \"Registry defaults: base.math Operation=Add(0), A=[1], B=[1]; base.randomXYZs Domain=10, Min=[0,0,0], Max=[1,1,1], Seed=1\",\n );\n console.log(\"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\");\n\n const runtime = createRuntime(createSimpleGraphRegistry(), createSimpleGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", {\n Operation: BaseMathOperation.Add,\n A: [2],\n B: [3],\n });\n engine.setInputs(\"n2\", {\n Operation: BaseMathOperation.Multiply,\n B: [10],\n });\n engine.setInputs(\"n3\", { B: [15] });\n\n // Allow async propagation to flush\n await engine.whenIdle();\n\n const n1Res = engine.getOutput(\"n1\", \"Result\");\n const n2Res = engine.getOutput(\"n2\", \"Result\");\n const n3Res = engine.getOutput(\"n3\", \"Result\");\n const n4Vals = engine.getOutput(\"n4\", \"Values\");\n\n console.log(\"Computed outputs (with overrides):\");\n console.log(\"- n1.Result = A+B = 2+3 =>\", n1Res);\n console.log(\"- n2.Result = A*B, A comes from n1.Result, B=10 =>\", n2Res);\n console.log(\n \"- n3.Result = (A op B) with op=Equal by default, A=n2.Result, B=15 =>\",\n n3Res,\n \"(false because 50 !== 15)\",\n );\n console.log(\"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\");\n console.log(\" count(n4.Values) =\", Array.isArray(n4Vals) ? n4Vals.length : 0);\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, registerDelayNode, createRuntime, BaseMathOperation } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"Value\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(createAsyncGraphRegistry(), createAsyncGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: BaseMathOperation.Add, A: [1], B: [2] });\n engine.setInputs(\"n2\", { DelayMs: 250 });\n // Provide XYZ and route through async conversion edge\n engine.setInputs(\"n3\", {\n XYZ: [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ],\n });\n\n // Rapid inputs to n1.B should cancel prior runs (switch)\n // Note: n1.A is edge-driven from n4.XYZ, so we change n1.B instead\n engine.setInputs(\"n1\", { B: [3] });\n engine.setInputs(\"n1\", { B: [4] });\n engine.setInputs(\"n1\", { B: [5] });\n\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { B: [10] });\n engine.setInputs(\"n1\", { B: [11] });\n engine.setInputs(\"n1\", { B: [12] });\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { registerProgressNodes, setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.input.number\" },\n { nodeId: \"delay\", typeId: \"base.input.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(createProgressGraphRegistry(), createProgressGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n\n engine.launch();\n\n // Seed initial values\n engine.setInputs(\"steps\", { Value: 12 });\n engine.setInputs(\"delay\", { Value: 80 });\n // Manually set ShouldError on the worker (unwired input)\n engine.setInputs(\"work\", { ShouldError: false });\n\n // After 2s, trigger an error run\n await new Promise((r) => setTimeout(r, 2000));\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n\n // After 5s, stop and exit\n await new Promise((r) => setTimeout(r, 5000));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry } from \"../misc/base\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown node type\n // - Missing target input handle\n // - Multi inbound to same input (warning)\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.input.number\" },\n { nodeId: \"nB\", typeId: \"base.input.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.object.toString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Validation issue: unknown node type\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n return registry;\n}\n\nexport async function main() {\n const registry = createValidationGraphRegistry();\n const def = createValidationGraphDef();\n const builder = new GraphBuilder(registry);\n\n // Validate the graph and display all issues\n const report = builder.validate(def);\n\n console.log(`Validation ${report.ok ? \"passed\" : \"failed\"}`);\n console.log(`Found ${report.issues.length} unique issue(s):\\n`);\n\n const errors = report.issues.filter((i) => i.level === \"error\");\n const warnings = report.issues.filter((i) => i.level === \"warning\");\n\n if (errors.length > 0) {\n console.log(`Errors (${errors.length}):`);\n for (const issue of errors) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n // Use JSON.stringify to prevent line wrapping issues\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (warnings.length > 0) {\n console.log(`Warnings (${warnings.length}):`);\n for (const issue of warnings) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (report.ok) {\n console.log(\"Graph is valid! Building runtime...\");\n const runtime = builder.build(def);\n console.log(\"Runtime built successfully.\");\n runtime.dispose();\n } else {\n console.log(\"Cannot build runtime due to validation errors.\");\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n ConverterConfig,\n ValueConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport { parseJsonPath, setValueAtPath, findMatchingPaths } from \"./json\";\nimport { isTyped, unwrapTypeId, unwrapValue, typed } from \"../../core/type-utils\";\n\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\ninterface ValueToConvert {\n nodeId: string;\n originalNodeId: string;\n handleId: string;\n value: unknown;\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\nfunction mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n): {\n merged: GraphDefinition;\n nodeIdMap: Record<string, string>;\n targetInputDefaults: NodeValues;\n sourceInputDefaults: NodeValues;\n} {\n const existingNodeIds = new Set(target.nodes.map((n) => n.nodeId));\n const existingEdgeIds = new Set(target.edges.map((e) => e.id));\n\n const nodeIdMap: Record<string, string> = {};\n const targetInputDefaults: NodeValues = {};\n const sourceInputDefaults: NodeValues = {};\n\n for (const node of target.nodes) {\n if (node.resolvedHandles?.inputDefaults) {\n targetInputDefaults[node.nodeId] = {\n ...node.resolvedHandles.inputDefaults,\n };\n }\n }\n\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n const isExistingNode = existingNodeIds.has(newId);\n if (isExistingNode) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n\n if (n.resolvedHandles?.inputDefaults) {\n sourceInputDefaults[n.nodeId] = { ...n.resolvedHandles.inputDefaults };\n }\n\n return {\n ...n,\n nodeId: newId,\n resolvedHandles: n.resolvedHandles\n ? {\n ...n.resolvedHandles,\n inputDefaults: undefined,\n }\n : undefined,\n };\n });\n\n const importedEdges: GraphEdgeDefinition[] = source.edges.map((e) => {\n let newEdgeId = e.id;\n if (existingEdgeIds.has(newEdgeId)) {\n newEdgeId = generateId(\"e\", existingEdgeIds);\n } else {\n existingEdgeIds.add(newEdgeId);\n }\n\n const sourceNodeId = nodeIdMap[e.source.nodeId] ?? e.source.nodeId;\n const targetNodeId = nodeIdMap[e.target.nodeId] ?? e.target.nodeId;\n\n return {\n ...e,\n id: newEdgeId,\n source: {\n ...e.source,\n nodeId: sourceNodeId,\n },\n target: {\n ...e.target,\n nodeId: targetNodeId,\n },\n };\n });\n\n return {\n merged: {\n nodes: [...target.nodes, ...importedNodes],\n edges: [...target.edges, ...importedEdges],\n },\n nodeIdMap,\n targetInputDefaults,\n sourceInputDefaults,\n };\n}\n\n/**\n * Compute the center point of a graph based on node positions.\n */\nexport function computeGraphCenter(\n positions: Record<string, { x: number; y: number }>,\n nodeIds: string[],\n): { x: number; y: number } {\n const validPositions = nodeIds\n .map((id) => positions[id])\n .filter((pos): pos is { x: number; y: number } => pos !== undefined);\n\n if (validPositions.length === 0) {\n return { x: 0, y: 0 };\n }\n\n const minX = Math.min(...validPositions.map((p) => p.x));\n const maxX = Math.max(...validPositions.map((p) => p.x));\n const minY = Math.min(...validPositions.map((p) => p.y));\n const maxY = Math.max(...validPositions.map((p) => p.y));\n\n return {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2,\n };\n}\n\n/**\n * Offset positions of imported nodes based on an anchor point.\n * Preserves relative layout of imported nodes while positioning them at the anchor.\n */\nexport function offsetImportedPositions(\n targetPositions: Record<string, { x: number; y: number }>,\n sourcePositions: Record<string, { x: number; y: number }>,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number },\n): Record<string, { x: number; y: number }> {\n const sourceNodeIds = sourceDef.nodes.map((n) => n.nodeId);\n const sourceCenter = computeGraphCenter(sourcePositions, sourceNodeIds);\n\n const dx = anchorPos.x - sourceCenter.x;\n const dy = anchorPos.y - sourceCenter.y;\n\n const newPositions: Record<string, { x: number; y: number }> = {\n ...targetPositions,\n };\n\n for (const node of sourceDef.nodes) {\n const oldId = node.nodeId;\n const newId = nodeIdMap[oldId];\n const srcPos = sourcePositions[oldId] ?? { x: 0, y: 0 };\n newPositions[newId] = {\n x: srcPos.x + dx,\n y: srcPos.y + dy,\n };\n }\n\n return newPositions;\n}\n\n/**\n * Merge inputs and outputs from source into target, remapping node IDs.\n * Source values override target when merging.\n */\ntype NodeValues = Record<string, Record<string, unknown>>;\n\nfunction buildTypeMaps(def: GraphDefinition): {\n nodeTypeMap: Map<string, string>;\n inputHandleTypeMap: Map<string, Map<string, string>>;\n outputHandleTypeMap: Map<string, Map<string, string>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const inputHandleTypeMap = new Map<string, Map<string, string>>();\n const outputHandleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of def.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeInputTypes = new Map<string, string>();\n const nodeOutputTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(node.resolvedHandles.inputs)) {\n let typeId: string | undefined;\n if (typeof handleDesc === \"string\") {\n typeId = handleDesc;\n } else if (Array.isArray(handleDesc)) {\n typeId = handleDesc[0]; // Use first type for type map (backward compat)\n } else {\n const descTypeId = handleDesc.typeId;\n typeId = Array.isArray(descTypeId) ? descTypeId[0] : descTypeId;\n }\n if (typeId) nodeInputTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(node.resolvedHandles.outputs)) {\n const typeId =\n typeof handleDesc === \"string\" ? handleDesc : Array.isArray(handleDesc) ? handleDesc[0] : undefined;\n if (typeId) nodeOutputTypes.set(handleId, typeId);\n }\n }\n\n // Also include handles from inputDefaults - they share handle IDs with inputs\n if (node.resolvedHandles?.inputDefaults) {\n for (const handleId of Object.keys(node.resolvedHandles.inputDefaults)) {\n // If not already in map, try to get type from input handles\n if (!nodeInputTypes.has(handleId) && node.resolvedHandles?.inputs) {\n const inputDesc = node.resolvedHandles.inputs[handleId];\n if (inputDesc) {\n let typeId: string | undefined;\n if (typeof inputDesc === \"string\") {\n typeId = inputDesc;\n } else if (Array.isArray(inputDesc)) {\n typeId = inputDesc[0]; // Use first type for type map (backward compat)\n } else {\n const descTypeId = inputDesc.typeId;\n typeId = Array.isArray(descTypeId) ? descTypeId[0] : descTypeId;\n }\n if (typeId) nodeInputTypes.set(handleId, typeId);\n }\n }\n }\n }\n\n if (nodeInputTypes.size > 0) {\n inputHandleTypeMap.set(node.nodeId, nodeInputTypes);\n }\n if (nodeOutputTypes.size > 0) {\n outputHandleTypeMap.set(node.nodeId, nodeOutputTypes);\n }\n }\n\n return { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap };\n}\n\nfunction applyConversion(\n items: ValueToConvert[],\n values: NodeValues,\n converter: ValueConverter,\n type: \"input\" | \"output\" | \"inputDefault\",\n): void {\n for (const item of items) {\n const convertedValue = converter({\n nodeId: item.nodeId,\n handleId: item.handleId,\n value: item.value,\n type,\n nodeTypeId: item.nodeTypeId,\n handleDataType: item.handleDataType,\n runtimeTypeId: item.runtimeTypeId,\n });\n\n if (convertedValue === null) {\n delete values[item.nodeId]?.[item.handleId];\n if (values[item.nodeId] && Object.keys(values[item.nodeId]).length === 0) {\n delete values[item.nodeId];\n }\n } else {\n if (!values[item.nodeId]) {\n values[item.nodeId] = {};\n }\n values[item.nodeId][item.handleId] = convertedValue;\n }\n }\n}\n\nfunction collectValuesToConvert(\n values: NodeValues,\n nodeTypeMap: Map<string, string>,\n inputHandleTypeMap: Map<string, Map<string, string>>,\n outputHandleTypeMap: Map<string, Map<string, string>>,\n type: \"input\" | \"output\" | \"inputDefault\",\n): {\n converted: NodeValues;\n toConvert: ValueToConvert[];\n} {\n const converted: NodeValues = {};\n const toConvert: ValueToConvert[] = [];\n const handleTypeMap = type === \"output\" ? outputHandleTypeMap : inputHandleTypeMap;\n\n for (const [nodeId, nodeValues] of Object.entries(values)) {\n converted[nodeId] = { ...nodeValues };\n const nodeTypeId = nodeTypeMap.get(nodeId);\n for (const [handleId, value] of Object.entries(nodeValues)) {\n const handleDataType = handleTypeMap.get(nodeId)?.get(handleId);\n const runtimeTypeId = isTyped(value) ? unwrapTypeId(value) : undefined;\n toConvert.push({\n nodeId,\n originalNodeId: nodeId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n });\n }\n }\n\n return { converted, toConvert };\n}\n\nexport function convertSnapshot(snapshot: RuntimeSnapshotFull, converter: ValueConverter): RuntimeSnapshotFull {\n const def = snapshot.def ?? { nodes: [], edges: [] };\n const { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap } = buildTypeMaps(def);\n\n const inputDefaults: NodeValues = {};\n for (const node of def.nodes) {\n if (node.resolvedHandles?.inputDefaults) {\n inputDefaults[node.nodeId] = { ...node.resolvedHandles.inputDefaults };\n }\n }\n\n const { converted: convertedInputs, toConvert: inputsToConvert } = collectValuesToConvert(\n snapshot.inputs ?? {},\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"input\",\n );\n\n const { converted: convertedOutputs, toConvert: outputsToConvert } = collectValuesToConvert(\n snapshot.outputs ?? {},\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"output\",\n );\n\n const { converted: convertedInputDefaults, toConvert: inputDefaultsToConvert } = collectValuesToConvert(\n inputDefaults,\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"inputDefault\",\n );\n\n applyConversion(inputsToConvert, convertedInputs, converter, \"input\");\n applyConversion(outputsToConvert, convertedOutputs, converter, \"output\");\n applyConversion(inputDefaultsToConvert, convertedInputDefaults, converter, \"inputDefault\");\n\n const updatedNodes = def.nodes.map((node) => {\n const defaults = convertedInputDefaults[node.nodeId];\n if (!defaults || Object.keys(defaults).length === 0) {\n if (node.resolvedHandles?.inputDefaults) {\n const { inputDefaults, ...restHandles } = node.resolvedHandles;\n return {\n ...node,\n resolvedHandles: Object.keys(restHandles).length > 0 ? restHandles : undefined,\n };\n }\n return node;\n }\n\n return {\n ...node,\n resolvedHandles: {\n ...node.resolvedHandles,\n inputDefaults: defaults,\n },\n };\n });\n\n return {\n ...snapshot,\n def: { ...def, nodes: updatedNodes },\n inputs: convertedInputs,\n outputs: convertedOutputs,\n };\n}\n\nfunction mergeInputsOutputs(\n targetInputs: NodeValues,\n targetOutputs: NodeValues,\n sourceInputs: NodeValues,\n sourceOutputs: NodeValues,\n targetInputDefaults: NodeValues,\n sourceInputDefaults: NodeValues,\n nodeIdMap: Record<string, string>,\n nodeTypeMap?: Map<string, string>,\n inputHandleTypeMap?: Map<string, Map<string, string>>,\n outputHandleTypeMap?: Map<string, Map<string, string>>,\n): {\n mergedInputs: NodeValues;\n mergedOutputs: NodeValues;\n mergedInputDefaults: NodeValues;\n inputsToConvert: ValueToConvert[];\n outputsToConvert: ValueToConvert[];\n inputDefaultsToConvert: ValueToConvert[];\n} {\n const mergedInputs: NodeValues = { ...targetInputs };\n const mergedOutputs: NodeValues = { ...targetOutputs };\n const mergedInputDefaults: NodeValues = { ...targetInputDefaults };\n const inputsToConvert: ValueToConvert[] = [];\n const outputsToConvert: ValueToConvert[] = [];\n const inputDefaultsToConvert: ValueToConvert[] = [];\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = inputHandleTypeMap?.get(oldId)?.get(handleId);\n inputsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n });\n mergedInputs[newId][handleId] = value;\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = outputHandleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTyped(value) ? unwrapTypeId(value) : undefined;\n outputsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n });\n mergedOutputs[newId][handleId] = value;\n }\n }\n }\n\n for (const [oldId, defaults] of Object.entries(sourceInputDefaults)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedInputDefaults[newId]) {\n mergedInputDefaults[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(defaults)) {\n const handleDataType = inputHandleTypeMap?.get(oldId)?.get(handleId);\n inputDefaultsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n });\n mergedInputDefaults[newId][handleId] = value;\n }\n }\n }\n\n return {\n mergedInputs,\n mergedOutputs,\n mergedInputDefaults,\n inputsToConvert,\n outputsToConvert,\n inputDefaultsToConvert,\n };\n}\n\nfunction mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n targetInputDefaults: NodeValues,\n sourceInputDefaults: NodeValues,\n nodeIdMap: Record<string, string>,\n): {\n mergedInputs: NodeValues;\n mergedOutputs: NodeValues;\n mergedInputDefaults: NodeValues;\n inputsToConvert: ValueToConvert[];\n outputsToConvert: ValueToConvert[];\n inputDefaultsToConvert: ValueToConvert[];\n} {\n const sourceDef = sourceSnapshot.def ?? { nodes: [], edges: [] };\n const { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap } = buildTypeMaps(sourceDef);\n\n return mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n targetInputDefaults,\n sourceInputDefaults,\n nodeIdMap,\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n );\n}\n\nexport function mergeSnapshots(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n converter?: ValueConverter,\n): {\n merged: RuntimeSnapshotFull;\n nodeIdMap: Record<string, string>;\n} {\n const targetDef = targetSnapshot.def ?? { nodes: [], edges: [] };\n const sourceDef = sourceSnapshot.def ?? { nodes: [], edges: [] };\n\n const { merged, nodeIdMap, targetInputDefaults, sourceInputDefaults } = mergeGraphDefinitions(targetDef, sourceDef);\n const {\n mergedInputs,\n mergedOutputs,\n mergedInputDefaults,\n inputsToConvert,\n outputsToConvert,\n inputDefaultsToConvert,\n } = mergeSnapshotData(targetSnapshot, sourceSnapshot, targetInputDefaults, sourceInputDefaults, nodeIdMap);\n\n if (converter) {\n applyConversion(inputDefaultsToConvert, mergedInputDefaults, converter, \"inputDefault\");\n applyConversion(inputsToConvert, mergedInputs, converter, \"input\");\n applyConversion(outputsToConvert, mergedOutputs, converter, \"output\");\n }\n\n const nodeMap = new Map(merged.nodes.map((n) => [n.nodeId, n]));\n for (const nodeId in mergedInputDefaults) {\n const node = nodeMap.get(nodeId);\n if (node && Object.keys(mergedInputDefaults[nodeId]).length > 0) {\n if (!node.resolvedHandles) {\n node.resolvedHandles = {};\n }\n node.resolvedHandles.inputDefaults = mergedInputDefaults[nodeId];\n }\n }\n\n return {\n merged: {\n def: merged,\n inputs: mergedInputs,\n outputs: mergedOutputs,\n environment: {\n ...targetSnapshot.environment,\n ...sourceSnapshot.environment,\n },\n extData: { ...targetSnapshot.extData, ...sourceSnapshot.extData },\n },\n nodeIdMap,\n };\n}\n\n/**\n * Merge runtime metadata from source into target, remapping node IDs using nodeIdMap.\n * Preserves target metadata and adds/updates source metadata with remapped IDs.\n */\nexport function mergeRuntimeState(\n targetRuntime: RuntimeMetadata | null | undefined,\n sourceRuntime: RuntimeMetadata | null | undefined,\n nodeIdMap: Record<string, string>,\n): RuntimeMetadata {\n const result: RuntimeMetadata = {\n nodes: { ...(targetRuntime?.nodes || {}) },\n };\n\n if (!sourceRuntime?.nodes) return result;\n\n // Remap source node IDs to new merged node IDs\n for (const [sourceNodeId, newNodeId] of Object.entries(nodeIdMap)) {\n const sourceNodeMeta = sourceRuntime.nodes[sourceNodeId];\n if (sourceNodeMeta) {\n result.nodes[newNodeId] = { ...sourceNodeMeta };\n }\n }\n\n return result;\n}\n\nfunction matchesPattern(value: string, pattern?: string | RegExp): boolean {\n if (!pattern) return true;\n if (typeof pattern === \"string\") {\n return value === pattern;\n }\n return pattern.test(value);\n}\n\n/**\n * Build a converter function from a configuration that maps values based on handle/node matching.\n * The converter will replace values when:\n * - handleId matches (if specified)\n * - nodeId matches (if specified)\n * - nodeTypeId matches (if specified)\n * - handleDataType matches (if specified)\n * - runtimeTypeId matches (if specified, for typed outputs)\n * - value exists in valueMap\n */\nexport function buildValueConverter(config: ConverterConfig): ValueConverter {\n return (converterConfig: ValueConverterConfig) => {\n const { nodeId, handleId, value, type, nodeTypeId, handleDataType, runtimeTypeId } = converterConfig;\n const isValueTyped = isTyped(value);\n\n for (const mapping of config.mappings) {\n if (mapping.type && mapping.type !== type) continue;\n if (mapping.handleId && !matchesPattern(handleId, mapping.handleId)) continue;\n if (mapping.nodeId && !matchesPattern(nodeId, mapping.nodeId)) continue;\n\n if (mapping.nodeTypeId && nodeTypeId) {\n if (!matchesPattern(nodeTypeId, mapping.nodeTypeId)) continue;\n }\n\n if (mapping.handleDataType && handleDataType) {\n if (!matchesPattern(handleDataType, mapping.handleDataType)) continue;\n }\n\n if (mapping.runtimeTypeId && runtimeTypeId) {\n if (!matchesPattern(runtimeTypeId, mapping.runtimeTypeId)) continue;\n }\n\n if (mapping.transformTypedValue && isValueTyped) {\n const innerValue = unwrapValue(value);\n const typedTypeId = unwrapTypeId(value);\n if (!typedTypeId) continue;\n\n if (mapping.path !== undefined) {\n const pathSegments = parseJsonPath(mapping.path);\n const matches = findMatchingPaths(innerValue, pathSegments);\n\n if (matches.length > 0) {\n const transformedInner = JSON.parse(JSON.stringify(innerValue));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(matchValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(matchValue as string | number | boolean);\n changed = true;\n }\n } else {\n if (typeof matchValue === \"string\" || typeof matchValue === \"number\") {\n const key = String(matchValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n // If mapped to null, set null at the path (which may delete nested property)\n setValueAtPath(transformedInner, match.path, newValue);\n }\n }\n }\n\n // If the entire typed output should be deleted (all paths mapped to null),\n // we'd need to check if the whole inner value is null/empty, but for now\n // we'll return the transformed value or original\n return changed ? typed(typedTypeId, transformedInner) : value;\n }\n } else {\n if (innerValue !== null && innerValue !== undefined) {\n let newValue: unknown = innerValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(innerValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(innerValue as string | number | boolean);\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n } else {\n if (typeof innerValue === \"string\" || typeof innerValue === \"number\") {\n const key = String(innerValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n }\n }\n }\n }\n continue;\n }\n\n if (mapping.path !== undefined) {\n let pathSegments = parseJsonPath(mapping.path);\n\n if (isValueTyped) {\n const typedTypeId = unwrapTypeId(value);\n if (typedTypeId) {\n const firstSegment = pathSegments[0];\n const firstSegmentStr =\n typeof firstSegment === \"string\"\n ? firstSegment\n : firstSegment instanceof RegExp\n ? null\n : String(firstSegment);\n if (firstSegmentStr !== \"__spark_value\" && firstSegmentStr !== \"__spark_type\") {\n pathSegments = [\"__spark_value\", ...pathSegments];\n }\n }\n }\n\n const matches = findMatchingPaths(value, pathSegments);\n\n if (matches.length > 0) {\n const transformedValue = JSON.parse(JSON.stringify(value));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(matchValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(matchValue as string | number | boolean);\n changed = true;\n }\n } else {\n if (typeof matchValue === \"string\" || typeof matchValue === \"number\") {\n const key = String(matchValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n setValueAtPath(transformedValue, match.path, newValue);\n }\n }\n }\n\n return changed ? transformedValue : value;\n }\n } else {\n if (value !== null && value !== undefined) {\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(value as string | number | boolean)) {\n return mapping.valueMap.get(value as string | number | boolean);\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n const key = String(value);\n if (key in mapping.valueMap) {\n return mapping.valueMap[key];\n }\n }\n }\n }\n }\n }\n\n return value;\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/core/type-utils.ts","../../src/builder/Registry.ts","../../src/runtime/components/Graph.ts","../../src/runtime/components/EventEmitter.ts","../../../protocol/lib/esm/index.js","../../src/misc/utils/json.ts","../../src/misc/utils/LevelLogger.ts","../../src/runtime/components/RunContextManager.ts","../../src/runtime/utils.ts","../../src/runtime/components/graph-utils.ts","../../src/runtime/components/HandleResolver.ts","../../src/runtime/components/EdgePropagator.ts","../../src/runtime/components/NodeExecutor.ts","../../src/runtime/components/RuntimeValidatorManager.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/LocalEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type { DataTypeId, HandleId, InputHandleDescriptor, HandleMetadata } from \"@bian-womp/spark-protocol\";\nimport type { TypedValue } from \"./types\";\n\nexport function typed<T = unknown>(typeId: DataTypeId, value: T): TypedValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTyped(v: unknown): v is TypedValue<unknown> {\n return !!v && typeof v === \"object\" && Object.prototype.hasOwnProperty.call(v, \"__spark_type\");\n}\n\nexport function unwrapTypeId(v: unknown): DataTypeId | undefined {\n if (isTyped(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function unwrapValue(v: unknown): unknown {\n if (isTyped(v)) return v.__spark_value;\n return v;\n}\n\n/**\n * Get the full declared type(s) for an input handle (supports union types)\n * Returns the typeId as-is: string for single type, string[] for union types\n */\nexport function getInputDeclaredTypes(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): DataTypeId | DataTypeId[] | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n\n if (typeof v === \"string\") return v;\n if (Array.isArray(v)) return v;\n return v.typeId;\n}\n\n/**\n * Get the primary (first) type ID for an input handle.\n * For union types, returns the first type in the array.\n * This maintains backward compatibility for code that expects a single type.\n */\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): DataTypeId | undefined {\n const decl = getInputDeclaredTypes(inputs, handle);\n if (!decl) return undefined;\n return Array.isArray(decl) ? decl[0] : decl;\n}\n\nexport function isInputPrivate(inputs: Record<string, InputHandleDescriptor> | undefined, handle: HandleId): boolean {\n const v = inputs ? inputs[handle] : undefined;\n if (!v || typeof v === \"string\" || Array.isArray(v)) return false;\n // At this point, v must be an object with optional private/metadata fields\n return !!(typeof v === \"object\" && v !== null && \"private\" in v && v.private);\n}\n\n/**\n * Merge two InputHandleDescriptor values, with dynamic taking precedence.\n * If both have metadata, merge the metadata objects (dynamic overrides static).\n * Supports union types (arrays) in both static and dynamic descriptors.\n */\nexport function mergeInputHandleDescriptors(\n staticDesc: InputHandleDescriptor | undefined,\n dynamicDesc: InputHandleDescriptor | undefined,\n): InputHandleDescriptor | undefined {\n // If only one exists, return it\n if (!staticDesc) return dynamicDesc;\n if (!dynamicDesc) return staticDesc;\n\n // If both are primitive (string or array), dynamic wins\n if (\n (typeof staticDesc === \"string\" || Array.isArray(staticDesc)) &&\n (typeof dynamicDesc === \"string\" || Array.isArray(dynamicDesc))\n ) {\n return dynamicDesc;\n }\n\n // Convert to object form for easier merging\n type HandleDescriptorObj = {\n typeId: DataTypeId | DataTypeId[];\n private?: boolean;\n metadata?: HandleMetadata;\n defaultPolicy?: \"unbound\" | \"bound\";\n };\n\n const staticObj: HandleDescriptorObj =\n typeof staticDesc === \"string\" || Array.isArray(staticDesc) ? { typeId: staticDesc } : staticDesc;\n const dynamicObj: HandleDescriptorObj =\n typeof dynamicDesc === \"string\" || Array.isArray(dynamicDesc) ? { typeId: dynamicDesc } : dynamicDesc;\n\n // Merge: dynamic takes precedence, but merge metadata objects\n const merged: HandleDescriptorObj = {\n typeId: dynamicObj.typeId ?? staticObj.typeId,\n private: dynamicObj.private ?? staticObj.private,\n defaultPolicy: dynamicObj.defaultPolicy ?? staticObj.defaultPolicy,\n };\n\n // Merge metadata if either has it\n if (staticObj.metadata || dynamicObj.metadata) {\n merged.metadata = {\n ...staticObj.metadata,\n ...dynamicObj.metadata, // Dynamic metadata overrides static\n };\n }\n\n // Return as InputHandleDescriptor (which accepts object form)\n return merged as InputHandleDescriptor;\n}\n\n/**\n * Extract metadata from an InputHandleDescriptor\n */\nexport function getInputHandleMetadata(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId,\n): HandleMetadata | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v || typeof v === \"string\" || Array.isArray(v)) return undefined;\n return v.metadata as HandleMetadata | undefined;\n}\n","import type { DataTypeId, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport type { DataTypeDescriptor, ExecutionContext, NodeTypeDescriptor } from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Coercion cost for path selection (fewer edges preferred, then fewer async steps)\nexport type CoercionCost = {\n edges: number; // number of coercion steps\n async: number; // number of async steps\n};\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n cost: CoercionCost;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n cost: CoercionCost;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n private static idCounter = 0;\n public readonly id: string;\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n constructor(id?: string) {\n this.id = id ?? `r${Registry.idCounter++}`;\n }\n\n private coercions = new Map<string, { convert: (value: unknown) => unknown; nonTransitive: boolean }>();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<string, ResolvedCoercion>();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n },\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) => (Array.isArray(value) ? value : [value]));\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, InputHandleDescriptor>,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<string, DataTypeId | DataTypeId[]>,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>,\n ) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>,\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n },\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) => (Array.isArray(value) ? value.map((el) => s.serialize(el)) : value),\n deserialize: (data: unknown) => (Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data),\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean },\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr = fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean },\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr = fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted) throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(fromTypeId: string | undefined, toTypeId: string | undefined): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(fromTypeId: string, toTypeId: string): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(fromTypeId: string, toTypeId: string): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: (v) => v,\n cost: { edges: 0, async: 0 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n cost: { edges: 1, async: 0 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n cost: { edges: 1, async: 1 },\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from) out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (a: { edges: number; async: number } | undefined, b: { edges: number; async: number }) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (e.cost.edges < q.cost.edges || (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const cost: CoercionCost = {\n edges: cur.cost.edges,\n async: cur.cost.async,\n };\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert,\n cost,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync,\n cost,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) => typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts,\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n) ? n : (Array.from(rec.valueToLabel.keys())[0] ?? 0);\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type { ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport { unwrapTypeId } from \"../../core/type-utils\";\nimport { EventEmitter } from \"./EventEmitter\";\nimport type { RuntimeNode, RuntimeEdge, ReadonlyRuntimeNode, ExecutionPlan } from \"./types\";\n\n/**\n * Graph component - manages nodes, edges, and handle resolution\n * This is the ONLY place where nodes, edges, and resolvedByNode are directly updated.\n */\nexport class Graph {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private resolvedByNode = new Map<string, ResolvedHandles>();\n\n constructor(\n private eventEmitter: EventEmitter,\n private registry?: Registry,\n ) {}\n\n // ==================== Node Accessors ====================\n\n /**\n * Get a node by ID (readonly to prevent accidental modifications)\n */\n getNode(nodeId: string): ReadonlyRuntimeNode<any> | undefined {\n return this.nodes.get(nodeId) as ReadonlyRuntimeNode<any> | undefined;\n }\n\n /**\n * Get a node by ID (mutable, for internal use only)\n * @internal\n */\n private getNodeMutable(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n /**\n * Iterate over all nodes safely (readonly to prevent accidental modifications)\n */\n forEachNode(callback: (node: ReadonlyRuntimeNode<any>, nodeId: string) => void): void {\n for (const [nodeId, node] of this.nodes.entries()) {\n callback(node as ReadonlyRuntimeNode<any>, nodeId);\n }\n }\n\n /**\n * Get all node IDs\n */\n getNodeIds(): string[] {\n return Array.from(this.nodes.keys());\n }\n\n /**\n * Check if a node exists\n */\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // ==================== Node Mutators ====================\n\n /**\n * Set a node (creates or replaces)\n */\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n /**\n * Delete a node\n */\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n // ==================== Node Property Updates ====================\n\n /**\n * Update node inputs\n */\n updateNodeInput(nodeId: string, handle: string, value: unknown, calculated: boolean = true): void {\n const node = this.getNodeMutable(nodeId);\n if (!node) return;\n if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n\n if (calculated) {\n this.updateNodeLastInputAt(nodeId, handle, Date.now());\n }\n\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n runtimeTypeId: unwrapTypeId(value),\n });\n }\n\n /**\n * Update node outputs\n */\n updateNodeOutput(nodeId: string, handle: string, value: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (value === undefined) {\n delete node.outputs[handle];\n } else {\n node.outputs[handle] = value;\n }\n\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n runtimeTypeId: unwrapTypeId(value),\n });\n }\n\n /**\n * Update node state\n */\n updateNodeState(nodeId: string, updates: Partial<RuntimeNode<any>[\"state\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n Object.assign(node.state, updates);\n }\n\n /**\n * Update node params\n */\n updateNodeParams(nodeId: string, params: Record<string, unknown> | undefined): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.params = params;\n }\n\n /**\n * Update node policy\n */\n updateNodePolicy(nodeId: string, policy: Partial<RuntimeNode<any>[\"policy\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.policy = { ...node.policy, ...policy };\n }\n\n /**\n * Update node stats\n */\n updateNodeStats(nodeId: string, updates: Partial<RuntimeNode<any>[\"stats\"]>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n Object.assign(node.stats, updates);\n }\n\n /**\n * Increment node runSeq\n */\n incrementNodeRunSeq(nodeId: string): number {\n const node = this.nodes.get(nodeId);\n if (!node) return 0;\n node.runSeq += 1;\n return node.runSeq;\n }\n\n /**\n * Set node latestRunId\n */\n setNodeLatestRunId(nodeId: string, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.latestRunId = runId;\n }\n\n /**\n * Set node lastScheduledAt\n */\n setNodeLastScheduledAt(nodeId: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.lastScheduledAt = timestamp;\n }\n\n /**\n * Update node lastInputAt timestamp for a handle\n */\n updateNodeLastInputAt(nodeId: string, handle: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (!node.lastInputAt) node.lastInputAt = {};\n\n node.lastInputAt[handle] = timestamp;\n }\n\n /**\n * Set node lastSuccessAt timestamp\n */\n setNodeLastSuccessAt(nodeId: string, timestamp: number): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.lastSuccessAt = timestamp;\n }\n\n // ==================== Node Queue Operations ====================\n\n /**\n * Add item to node queue\n */\n addToNodeQueue(nodeId: string, item: ExecutionPlan): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue.push(item);\n }\n\n /**\n * Remove first item from node queue\n */\n shiftNodeQueue(nodeId: string): ExecutionPlan | undefined {\n const node = this.nodes.get(nodeId);\n if (!node) return undefined;\n return node.queue.shift();\n }\n\n /**\n * Clear node queue\n */\n clearNodeQueue(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue = [];\n }\n\n /**\n * Replace node queue\n */\n replaceNodeQueue(nodeId: string, items: ExecutionPlan[]): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.queue = items;\n }\n\n // ==================== Node Controller Operations ====================\n\n /**\n * Add controller to node\n */\n addNodeController(nodeId: string, controller: AbortController, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n }\n\n /**\n * Remove controller from node\n */\n removeNodeController(nodeId: string, controller: AbortController): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n }\n\n /**\n * Clear all controllers from node\n */\n clearNodeControllers(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n }\n\n /**\n * Get all controllers for a node\n */\n getNodeControllers(nodeId: string): Set<AbortController> {\n const node = this.nodes.get(nodeId);\n if (!node) return new Set();\n return new Set(node.activeControllers);\n }\n\n // ==================== Node Run Context Operations ====================\n\n /**\n * Add run context ID to node\n */\n addNodeRunContextId(nodeId: string, runContextId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.add(runContextId);\n }\n\n /**\n * Add multiple run context IDs to node\n */\n addNodeRunContextIds(nodeId: string, runContextIds: Set<string>): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const id of runContextIds) {\n node.activeRunContextIds.add(id);\n }\n }\n\n /**\n * Remove run context ID from node\n */\n removeNodeRunContextId(nodeId: string, runContextId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.delete(runContextId);\n }\n\n /**\n * Clear all run context IDs from node\n */\n clearNodeRunContextIds(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n node.activeRunContextIds.clear();\n }\n\n /**\n * Get run context IDs for a node\n */\n getNodeRunContextIds(nodeId: string): Set<string> {\n const node = this.nodes.get(nodeId);\n if (!node) return new Set();\n return new Set(node.activeRunContextIds);\n }\n\n // ==================== Node Snapshot Cancelled Run IDs ====================\n\n /**\n * Add snapshot cancelled run ID to node\n */\n addSnapshotCancelledRunId(nodeId: string, runId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n\n // ==================== Edge Accessors ====================\n\n /**\n * Iterate over all edges safely\n */\n forEachEdge(callback: (edge: RuntimeEdge, index: number) => void): void {\n this.edges.forEach(callback);\n }\n\n /**\n * Find edges matching a predicate\n */\n findEdges(predicate: (edge: RuntimeEdge) => boolean): RuntimeEdge[] {\n return this.edges.filter(predicate);\n }\n\n /**\n * Get edges by source node and handle\n */\n getEdgesBySource(srcNodeId: string, srcHandle: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle);\n }\n\n /**\n * Get edges by target node and handle\n */\n getEdgesByTarget(targetNodeId: string, targetHandle: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.target.nodeId === targetNodeId && e.target.handle === targetHandle);\n }\n\n /**\n * Get inbound edges for a node\n */\n getInboundEdges(nodeId: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.target.nodeId === nodeId);\n }\n\n /**\n * Get outbound edges for a node\n */\n getOutboundEdges(nodeId: string): RuntimeEdge[] {\n return this.edges.filter((e) => e.source.nodeId === nodeId);\n }\n\n // ==================== Edge Mutators ====================\n\n /**\n * Set all edges (replaces existing)\n */\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = [...edges];\n }\n\n /**\n * Update an edge by ID\n */\n updateEdge(edgeId: string, updates: Partial<RuntimeEdge>): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n Object.assign(edge, updates);\n }\n\n /**\n * Update edge properties (convert, convertAsync, types, etc.)\n */\n updateEdgeProperties(\n edgeId: string,\n updates: {\n dstDeclared?: string | string[];\n srcUnionTypes?: string[] | undefined;\n convert?: ((value: unknown) => unknown) | undefined;\n convertAsync?: ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined;\n },\n ): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n edge.dstDeclared = updates.dstDeclared;\n edge.srcUnionTypes = updates.srcUnionTypes;\n edge.convert = updates.convert;\n edge.convertAsync = updates.convertAsync;\n }\n\n /**\n * Update edge stats\n */\n updateEdgeStats(edgeId: string, updates: Partial<RuntimeEdge[\"stats\"]>): void {\n const edge = this.edges.find((e) => e.id === edgeId);\n if (!edge) return;\n Object.assign(edge.stats, updates);\n }\n\n /**\n * Get edge by ID\n */\n getEdge(edgeId: string): RuntimeEdge | undefined {\n return this.edges.find((e) => e.id === edgeId);\n }\n\n // ==================== Registry Accessors ====================\n\n getRegistry(): Registry | undefined {\n return this.registry;\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n // ==================== Resolved Handles Accessors ====================\n\n getResolvedHandles(nodeId: string): ResolvedHandles | undefined {\n return this.resolvedByNode.get(nodeId);\n }\n\n setResolvedHandles(nodeId: string, handles: ResolvedHandles): void {\n this.resolvedByNode.set(nodeId, handles);\n }\n\n // ==================== Utility Methods ====================\n\n /**\n * Check if all inbound edges for a node have values\n */\n allInboundHaveValue(nodeId: string): boolean {\n const node = this.nodes.get(nodeId);\n if (!node) return false;\n const inbound = this.edges.filter((e) => e.target.nodeId === nodeId);\n if (inbound.length === 0) return true;\n for (const e of inbound) {\n if (node.resolvedHandles?.inputs?.[e.target.handle] && !node.inputs[e.target.handle]) {\n return false;\n }\n }\n return true;\n }\n\n // ==================== Clear Operations ====================\n\n /**\n * Clear all data\n */\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n}\n","import type { RuntimeEventName, RuntimeEventMap, RuntimeEventListener } from \"../GraphRuntime\";\n\n/**\n * Event emitter component for GraphRuntime\n * Handles all event listener management and emission\n */\nexport class EventEmitter {\n private listeners = new Map<RuntimeEventName, Set<RuntimeEventListener<RuntimeEventName>>>();\n\n on<K extends RuntimeEventName>(event: K, handler: RuntimeEventListener<K>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n emit<K extends RuntimeEventName>(event: K, payload: RuntimeEventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload);\n } catch (err) {\n console.error(`Error in ${event} handler:`, err);\n }\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type { JsonPath, PathSegment } from \"@bian-womp/spark-protocol\";\n\nexport function parseJsonPath(path: JsonPath): PathSegment[] {\n if (typeof path === \"string\") {\n return path.split(\".\").flatMap((segment) => {\n const arrayMatch = segment.match(/^(.+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const index = parseInt(arrayMatch[2], 10);\n return arrayMatch[1] ? [arrayMatch[1], index] : [index];\n }\n return [segment];\n });\n }\n return path;\n}\n\nexport function getValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[],\n): { value: unknown; parent: unknown; key: string | number } | null {\n if (pathSegments.length === 0) {\n return { value: obj, parent: null, key: \"\" };\n }\n\n let current: unknown = obj;\n let parent: unknown = null;\n let parentKey: string | number = \"\";\n\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (current === null || current === undefined || typeof current !== \"object\") {\n return null;\n }\n\n if (typeof segment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(segment, 10);\n if (isNaN(index)) return null;\n parent = current;\n parentKey = index;\n current = current[index];\n } else {\n parent = current;\n parentKey = segment;\n current = (current as Record<string, unknown>)[segment];\n }\n } else if (typeof segment === \"number\") {\n if (Array.isArray(current)) {\n if (segment >= 0 && segment < current.length) {\n parent = current;\n parentKey = segment;\n current = current[segment];\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else if (segment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => segment.test(key));\n if (!matchingKey) return null;\n parent = current;\n parentKey = matchingKey;\n current = obj[matchingKey];\n } else {\n return null;\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(lastSegment, 10);\n if (isNaN(index)) return null;\n return { value: current[index], parent: current, key: index };\n } else if (current !== null && current !== undefined && typeof current === \"object\") {\n return {\n value: (current as Record<string, unknown>)[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n } else if (typeof lastSegment === \"number\") {\n if (Array.isArray(current)) {\n if (lastSegment >= 0 && lastSegment < current.length) {\n return {\n value: current[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n }\n return null;\n } else if (lastSegment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => lastSegment.test(key));\n if (!matchingKey) return null;\n return { value: obj[matchingKey], parent: current, key: matchingKey };\n }\n\n return null;\n}\n\nexport function setValueAtPath(obj: unknown, pathSegments: PathSegment[], newValue: unknown): boolean {\n const result = getValueAtPath(obj, pathSegments);\n if (!result || result.parent === null) return false;\n\n if (Array.isArray(result.parent)) {\n (result.parent as unknown[])[result.key as number] = newValue;\n } else {\n (result.parent as Record<string, unknown>)[result.key] = newValue;\n }\n return true;\n}\n\n/**\n * Sets a value at a path, creating intermediate objects as needed.\n * Mutates the root object in place.\n * @param root - The root object to modify (must be an object, will be initialized if needed)\n * @param pathSegments - The path segments to traverse\n * @param value - The value to set, or null to delete the path\n * @throws Error if path cannot be created (e.g., array indices not supported, invalid parent types)\n */\nexport function setValueAtPathWithCreation(\n root: Record<string, unknown>,\n pathSegments: PathSegment[],\n value: unknown,\n): boolean {\n if (value === null) {\n const result = getValueAtPath(root, pathSegments);\n if (result && result.parent !== null && !Array.isArray(result.parent)) {\n const hadValue = result.key in (result.parent as Record<string, unknown>);\n delete (result.parent as Record<string, unknown>)[result.key];\n return hadValue;\n }\n return false;\n }\n\n if (!root || typeof root !== \"object\" || Array.isArray(root)) {\n throw new Error(\"Root must be an object\");\n }\n\n let current: any = root;\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (typeof segment === \"string\") {\n if (\n !current ||\n typeof current !== \"object\" ||\n Array.isArray(current) ||\n !(segment in current) ||\n typeof current[segment] !== \"object\" ||\n current[segment] === null ||\n Array.isArray(current[segment])\n ) {\n if (!current || typeof current !== \"object\" || Array.isArray(current)) {\n throw new Error(`Cannot create path: parent at segment ${i} is not an object`);\n }\n current[segment] = {};\n }\n current = current[segment];\n } else {\n throw new Error(\"Array indices not supported in extData paths\");\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (!current || typeof current !== \"object\" || Array.isArray(current)) {\n throw new Error(`Cannot set value: parent at final segment is not an object`);\n }\n const hadValue = lastSegment in current;\n const oldValue = current[lastSegment];\n current[lastSegment] = value;\n return !hadValue || JSON.stringify(oldValue) !== JSON.stringify(value);\n } else {\n throw new Error(\"Array indices not supported in extData paths\");\n }\n}\n\nexport function findMatchingPaths(\n obj: unknown,\n pathSegments: PathSegment[],\n currentPath: PathSegment[] = [],\n): Array<{ path: PathSegment[]; value: unknown }> {\n if (pathSegments.length === 0) {\n return [{ path: currentPath, value: obj }];\n }\n\n const [currentSegment, ...remainingSegments] = pathSegments;\n const results: Array<{ path: PathSegment[]; value: unknown }> = [];\n\n if (currentSegment === undefined) {\n return results;\n }\n\n if (typeof currentSegment === \"string\") {\n if (Array.isArray(obj)) {\n const index = parseInt(currentSegment, 10);\n if (!isNaN(index) && index >= 0 && index < obj.length) {\n results.push(...findMatchingPaths(obj[index], remainingSegments, [...currentPath, index]));\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n if (currentSegment in objRecord) {\n results.push(\n ...findMatchingPaths(objRecord[currentSegment], remainingSegments, [...currentPath, currentSegment]),\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(...findMatchingPaths(obj[currentSegment], remainingSegments, [...currentPath, currentSegment]));\n }\n }\n } else if (currentSegment instanceof RegExp) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n results.push(...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i]));\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n for (const key of Object.keys(objRecord)) {\n if (currentSegment.test(key)) {\n results.push(...findMatchingPaths(objRecord[key], remainingSegments, [...currentPath, key]));\n }\n }\n }\n }\n\n return results;\n}\n\nexport function stringifyJson(\n obj: any,\n oneLiner?: {\n indent: number;\n paths?: string[];\n maxDepth?: number;\n criteria?: (info: { path: string; key: string; value: any; depth: number }) => boolean;\n },\n) {\n // No formatting requested: behave exactly like native JSON.stringify.\n if (!oneLiner) return JSON.stringify(obj);\n\n const indentSize = Number.isFinite(oneLiner.indent) ? Math.max(0, Math.floor(oneLiner.indent)) : 2;\n const maxDepth =\n typeof oneLiner.maxDepth === \"number\" && Number.isFinite(oneLiner.maxDepth) ? oneLiner.maxDepth : undefined;\n const patterns = (oneLiner.paths || []).filter(Boolean);\n\n // Preserve JSON.stringify semantics for things like toJSON(), dropping functions/undefined, etc.\n // Note: this still throws on circular structures (same as JSON.stringify).\n const base = JSON.stringify(obj);\n if (base === undefined) return base as any;\n const value = JSON.parse(base);\n\n const pathMatchers = patterns.map((p) => compilePathMatcher(String(p)));\n const formatKey = (k: string) => JSON.stringify(k);\n\n const shouldInline = (path: string, key: string, v: any, depth: number) => {\n if (maxDepth !== undefined && depth > maxDepth) return true;\n if (oneLiner.criteria?.({ path, key, value: v, depth })) return true;\n if (!pathMatchers.length) return false;\n const tokensWithRoot = tokenizePath(path);\n const tokensNoRoot = tokensWithRoot[0] === \"$\" ? tokensWithRoot.slice(1) : tokensWithRoot;\n return pathMatchers.some((m) => m(tokensWithRoot, tokensNoRoot));\n };\n\n const stringifyInline = (v: any, depth: number, path: string): string => {\n if (v === null) return \"null\";\n const t = typeof v;\n if (t === \"string\") return JSON.stringify(v);\n if (t === \"number\" || t === \"boolean\") return String(v);\n if (Array.isArray(v)) {\n if (!v.length) return \"[]\";\n const parts = v.map((vv, i) => stringifyInline(vv, depth, `${path}[${i}]`));\n return `[${parts.join(\", \")}]`;\n }\n if (t === \"object\") {\n const keys = Object.keys(v);\n if (!keys.length) return \"{}\";\n const parts = keys.map((k) => `${formatKey(k)}: ${stringifyInline(v[k], depth + 1, `${path}.${k}`)}`);\n return `{ ${parts.join(\", \")} }`;\n }\n // Shouldn't happen after JSON.parse(JSON.stringify(...)), but keep output valid JSON.\n return \"null\";\n };\n\n const stringifyPretty = (v: any, depth: number, path: string, key: string): string => {\n if (shouldInline(path, key, v, depth)) return stringifyInline(v, depth, path);\n if (v === null) return \"null\";\n const t = typeof v;\n if (t === \"string\") return JSON.stringify(v);\n if (t === \"number\" || t === \"boolean\") return String(v);\n\n const indentCur = \" \".repeat(indentSize * depth);\n const indentInner = \" \".repeat(indentSize * (depth + 1));\n\n if (Array.isArray(v)) {\n if (!v.length) return \"[]\";\n // Compact array style: `[{...}, {...}]` while still allowing multi-line objects within.\n const parts = v.map((vv, i) => stringifyPretty(vv, depth, `${path}[${i}]`, String(i)));\n return `[${parts.join(\", \")}]`;\n }\n\n if (t === \"object\") {\n const keys = Object.keys(v);\n if (!keys.length) return \"{}\";\n\n const lines = keys.map((k, idx) => {\n const childPath = `${path}.${k}`;\n const rendered = stringifyPretty(v[k], depth + 1, childPath, k);\n const comma = idx === keys.length - 1 ? \"\" : \",\";\n return `${indentInner}${formatKey(k)}: ${rendered}${comma}`;\n });\n return `{\\n${lines.join(\"\\n\")}\\n${indentCur}}`;\n }\n\n return \"null\";\n };\n\n return stringifyPretty(value, 0, \"$\", \"$\");\n}\n\nfunction tokenizePath(path: string): string[] {\n // Path format we generate: `$`, `$.a.b[0].c`\n // Tokens: [\"$\", \"a\", \"b\", \"[0]\", \"c\"]\n const tokens: string[] = [];\n let i = 0;\n if (path.startsWith(\"$\")) {\n tokens.push(\"$\");\n i = 1;\n }\n while (i < path.length) {\n const ch = path[i];\n if (ch === \".\") {\n i++;\n const start = i;\n while (i < path.length && path[i] !== \".\" && path[i] !== \"[\") i++;\n if (i > start) tokens.push(path.slice(start, i));\n continue;\n }\n if (ch === \"[\") {\n const end = path.indexOf(\"]\", i + 1);\n if (end < 0) {\n tokens.push(path.slice(i));\n break;\n }\n tokens.push(path.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n // Unexpected char; skip.\n i++;\n }\n return tokens.filter((t) => t.length);\n}\n\nfunction tokenizePattern(pattern: string): string[] {\n // Pattern format: `$`, `$.a.*.b`, `**.graph.**`, `arr[2].z`\n // Tokens: [\"$\", \"a\", \"*\", \"b\"] etc. Brackets become their own token: [\"arr\",\"[2]\",\"z\"]\n const tokens: string[] = [];\n let i = 0;\n if (pattern.startsWith(\"$\")) {\n tokens.push(\"$\");\n i = 1;\n }\n while (i < pattern.length) {\n const ch = pattern[i];\n if (ch === \".\") {\n i++;\n continue;\n }\n if (ch === \"[\") {\n const end = pattern.indexOf(\"]\", i + 1);\n if (end < 0) {\n tokens.push(pattern.slice(i));\n break;\n }\n tokens.push(pattern.slice(i, end + 1));\n i = end + 1;\n continue;\n }\n const start = i;\n while (i < pattern.length && pattern[i] !== \".\" && pattern[i] !== \"[\") i++;\n if (i > start) tokens.push(pattern.slice(start, i));\n }\n return tokens.filter((t) => t.length);\n}\n\nfunction compilePathMatcher(pattern: string): (tokensWithRoot: string[], tokensNoRoot: string[]) => boolean {\n // Wildcard semantics (case-insensitive):\n // - `*` matches exactly 1 path segment (key or `[index]`)\n // - `**` matches 0 or more segments\n // - `#` matches exactly 1 numeric segment (e.g. `\"0\"` or `[0]`)\n // - `##` matches 0 or more numeric segments\n // - `[*]` matches exactly 1 index segment\n const pat = tokenizePattern(pattern);\n const expectsRoot = pat[0] === \"$\";\n\n const eq = (a: string, b: string) => a.localeCompare(b, undefined, { sensitivity: \"accent\" }) === 0;\n const isIndex = (t: string) => t.startsWith(\"[\") && t.endsWith(\"]\");\n const isNumericKey = (t: string) => /^[0-9]+$/.test(t);\n const isNumericSegment = (t: string) => isNumericKey(t) || (isIndex(t) && /^[0-9]+$/.test(t.slice(1, -1)));\n\n const match = (patTokens: string[], pathTokens: string[]) => {\n const memo = new Map<string, boolean>();\n const go = (pi: number, ti: number): boolean => {\n const key = `${pi},${ti}`;\n const cached = memo.get(key);\n if (cached !== undefined) return cached;\n\n let res = false;\n if (pi === patTokens.length) {\n res = ti === pathTokens.length;\n } else {\n const p = patTokens[pi];\n if (p === \"**\") {\n // Match any number of segments, including zero.\n for (let k = ti; k <= pathTokens.length; k++) {\n if (go(pi + 1, k)) {\n res = true;\n break;\n }\n }\n } else if (p === \"##\") {\n // Match any number of numeric segments, including zero.\n for (let k = ti; k <= pathTokens.length; k++) {\n let ok = true;\n for (let j = ti; j < k; j++) {\n if (!isNumericSegment(pathTokens[j])) {\n ok = false;\n break;\n }\n }\n if (ok && go(pi + 1, k)) {\n res = true;\n break;\n }\n }\n } else if (p === \"*\") {\n res = ti < pathTokens.length && go(pi + 1, ti + 1);\n } else if (p === \"#\") {\n res = ti < pathTokens.length && isNumericSegment(pathTokens[ti]) && go(pi + 1, ti + 1);\n } else if (p === \"[*]\") {\n res = ti < pathTokens.length && isIndex(pathTokens[ti]) && go(pi + 1, ti + 1);\n } else {\n res = ti < pathTokens.length && eq(p.toLowerCase(), pathTokens[ti].toLowerCase()) && go(pi + 1, ti + 1);\n }\n }\n\n memo.set(key, res);\n return res;\n };\n return go(0, 0);\n };\n\n return (tokensWithRoot, tokensNoRoot) => match(pat, expectsRoot ? tokensWithRoot : tokensNoRoot);\n}\n\nexport function stringifySceneAndOps(obj: any) {\n return stringifyJson(obj, {\n indent: 2,\n paths: [\n \"**.camera.animation.*\",\n \"**.animations.*\",\n \"**.nodes.#.*\",\n \"**.graphs.#.*\",\n \"**.instances.#.*\",\n \"**.shaders.#.*\",\n \"**.materials.#.*\",\n \"**.ext.#\",\n \"**.ext.*.#.*\",\n \"**.perUserExt.*.#\",\n \"**.perUserExt.*.*.#\",\n ],\n criteria: ({ value, key }) =>\n (typeof value === \"object\" && value && Object.keys(value).sort().join(\",\") === \"x,y,z\") || key === \"value\",\n });\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport { stringifySceneAndOps } from \"./json\";\n\n/**\n * A reusable logger class that supports configurable log levels and prefixes.\n * Can be instantiated with a default log level and optionally override per call.\n */\nexport class LevelLogger {\n private defaultLevel: LogLevel;\n private prefix: string;\n\n /**\n * Maps log levels to numeric values for comparison\n */\n public static readonly levelValues: Record<LogLevel, number> = LOG_LEVEL_VALUES;\n\n constructor(defaultLevel: LogLevel = \"info\", prefix: string = \"\") {\n this.defaultLevel = defaultLevel;\n this.prefix = prefix;\n }\n\n /**\n * Sets the prefix for log messages\n */\n setPrefix(prefix: string): void {\n this.prefix = prefix;\n }\n\n /**\n * Gets the current prefix\n */\n getPrefix(): string {\n return this.prefix;\n }\n\n /**\n * Sets the default log level for this logger instance\n */\n setLevel(level: LogLevel): void {\n this.defaultLevel = level;\n }\n\n /**\n * Gets the current default log level\n */\n getLevel(): LogLevel {\n return this.defaultLevel;\n }\n\n getLevelValue(): number {\n return LevelLogger.levelValues[this.defaultLevel];\n }\n\n /**\n * Logs a debug message\n */\n debug(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"debug\", message, context, overrideLevel);\n }\n\n /**\n * Logs an info message\n */\n info(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"info\", message, context, overrideLevel);\n }\n\n /**\n * Logs a warning message\n */\n warn(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"warn\", message, context, overrideLevel);\n }\n\n /**\n * Logs an error message\n */\n error(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void {\n this.log(\"error\", message, context, overrideLevel);\n }\n\n /**\n * Tries to parse a string as JSON and format it nicely if it's fully JSON\n */\n private parseJsonStringIfFull(str: string): string {\n const trimmed = str.trim();\n // Check if the string starts with { or [ and ends with } or ]\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) || (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n const parsed = JSON.parse(trimmed);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parsing fails, return original string\n return str;\n }\n }\n return str;\n }\n\n /**\n * Tries to parse a string as JSON and return the parsed object/array if it's fully JSON\n * Used for parsing JSON strings inside arrays so they can be formatted by stringifySceneAndOps\n */\n private parseJsonStringToObject(str: string): unknown {\n const trimmed = str.trim();\n // Check if the string starts with { or [ and ends with } or ]\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) || (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // If parsing fails, return original string\n return str;\n }\n }\n return str;\n }\n\n /**\n * Parses JSON strings in context values if they are fully JSON\n * Also handles arrays containing JSON strings\n */\n private parseJsonStringsInContext(context: Record<string, unknown>): Record<string, unknown> {\n const parsed: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n if (typeof value === \"string\") {\n parsed[key] = this.parseJsonStringIfFull(value);\n } else if (Array.isArray(value)) {\n // Process arrays: parse JSON strings within the array to objects/arrays\n // so they can be formatted correctly by stringifySceneAndOps\n parsed[key] = value.map((item) => {\n if (typeof item === \"string\") {\n return this.parseJsonStringToObject(item);\n }\n return item;\n });\n } else {\n parsed[key] = value;\n }\n }\n return parsed;\n }\n\n /**\n * Core logging method that respects the log level and applies prefix\n */\n private log(\n requestedLevel: Exclude<LogLevel, \"silent\">,\n message: string,\n context?: Record<string, unknown>,\n overrideLevel?: LogLevel,\n ): void {\n const effectiveLevel = overrideLevel ?? this.defaultLevel;\n\n // Silent level suppresses all logs\n if (effectiveLevel === \"silent\") {\n return;\n }\n\n const requestedValue = LevelLogger.levelValues[requestedLevel] ?? 1;\n const effectiveValue = LevelLogger.levelValues[effectiveLevel] ?? 1;\n\n // Only log if the requested level is >= effective level\n if (requestedValue >= effectiveValue) {\n const { logFormat = \"plain\", ...rest } = context ?? {};\n const formatJson = logFormat === \"json\" || logFormat === \"json-deep\";\n const parseJsonString = logFormat === \"json-deep\";\n\n // Parse JSON strings in context values if requested\n let processedContext = rest;\n const parsedKeys = new Set<string>(); // Track keys that had JSON strings parsed\n if (parseJsonString && rest && Object.keys(rest).length > 0) {\n // Check which keys had JSON strings before parsing\n for (const [key, value] of Object.entries(rest)) {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n JSON.parse(trimmed);\n parsedKeys.add(key);\n } catch {\n // Not valid JSON, skip\n }\n }\n } else if (Array.isArray(value)) {\n // Check if array contains JSON strings\n for (const item of value) {\n if (typeof item === \"string\") {\n const trimmed = item.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n JSON.parse(trimmed);\n parsedKeys.add(key);\n break; // Found at least one JSON string in array\n } catch {\n // Not valid JSON, continue\n }\n }\n }\n }\n }\n }\n processedContext = this.parseJsonStringsInContext(rest);\n }\n\n const contextStr =\n processedContext && Object.keys(processedContext).length > 0\n ? `${formatJson ? \"\\n\" : \" \"}${Object.entries(processedContext)\n .map(([k, v]) => {\n // If parseJsonString is enabled and value is a formatted JSON string\n // (starts with { or [ and contains newlines indicating it was formatted),\n // output it directly without stringifySceneAndOps to preserve formatting\n // Wrap it with json`...` to distinguish it as formatted JSON\n if (parseJsonString && typeof v === \"string\" && v.trim().match(/^[{\\[]/) && v.includes(\"\\n\")) {\n return `${k}=json\\`${v}\\``;\n }\n // If this key had a JSON string parsed and we're formatting JSON,\n // wrap the formatted output with json`...`\n if (formatJson && parseJsonString && parsedKeys.has(k)) {\n return `${k}=json\\`${stringifySceneAndOps(v)}\\``;\n }\n if (formatJson) {\n return `${k}=${stringifySceneAndOps(v)}`;\n }\n return `${k}=${JSON.stringify(v)}`;\n })\n .join(formatJson ? \"\\n\" : \" \")}`\n : \"\";\n const prefixedMessage = this.prefix ? `${this.prefix} ${message}${contextStr}` : `${message}${contextStr}`;\n switch (requestedLevel) {\n case \"debug\":\n console.info(prefixedMessage);\n break;\n case \"info\":\n console.info(prefixedMessage);\n break;\n case \"warn\":\n console.warn(prefixedMessage);\n break;\n case \"error\":\n console.error(prefixedMessage);\n break;\n }\n }\n }\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { Graph } from \"./Graph\";\nimport { LevelLogger } from \"../../misc/utils/LevelLogger\";\n\nexport type RunContextId = string;\n\nexport interface RunContext {\n id: RunContextId;\n startNodes: Set<string>;\n cancelledNodes: Set<string>; // Nodes this context must not propagate through\n pendingScheduling: number; // Scheduling holds while callers decide what to run\n pendingNodes: number; // Active node runs for this context\n pendingEdges: number; // Active async edge conversions for this context\n pendingResolvers: number; // Active handle resolution operations for this context\n pendingQueued: number; // Queued node runs that haven't started yet\n skipPropagateValues: boolean; // If true, don't set inputs of linked nodes\n propagate: boolean; // If false, don't schedule downstream nodes\n resolve?: () => void; // Resolves the runFromHere() Promise\n}\n\n/**\n * RunContextManager component - manages run-context lifecycle\n */\nexport class RunContextManager {\n private runContexts = new Map<RunContextId, RunContext>();\n private runContextCounter = 0;\n private readonly logger: LevelLogger;\n\n constructor(\n private readonly graph: Graph,\n logLevel?: LogLevel,\n ) {\n this.graph = graph;\n this.logger = new LevelLogger(logLevel ?? \"info\", \"[RunContextManager]\");\n }\n\n /**\n * Set the log level for this manager\n */\n setLogLevel(logLevel: LogLevel): void {\n this.logger.setLevel(logLevel);\n }\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n options?: {\n resolve?: () => void;\n skipPropagateValues?: boolean;\n propagate?: boolean;\n },\n ): RunContextId {\n const id: RunContextId = `rc-${++this.runContextCounter}`;\n const ctx: RunContext = {\n id,\n startNodes: new Set([startNodeId]),\n cancelledNodes: new Set(),\n pendingScheduling: 1,\n pendingNodes: 0,\n pendingEdges: 0,\n pendingResolvers: 0,\n pendingQueued: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n resolve: options?.resolve,\n };\n this.runContexts.set(id, ctx);\n this.logger.info(\"create-run-context\", {\n id,\n startNodeId,\n skipPropagateValues: ctx.skipPropagateValues,\n propagate: ctx.propagate,\n });\n return id;\n }\n\n /**\n * Get a run-context by ID\n */\n getRunContext(id: RunContextId): RunContext | undefined {\n return this.runContexts.get(id);\n }\n\n /**\n * Get all run-contexts\n */\n getAllRunContexts(): Map<RunContextId, RunContext> {\n return this.runContexts;\n }\n\n /**\n * Check if there are any active run-contexts\n */\n hasActiveRunContexts(): boolean {\n return this.runContexts.size > 0;\n }\n\n /**\n * Release one scheduling hold from a run-context.\n * Must be called once by the creator when scheduling decisions are complete.\n */\n releaseScheduling(id: RunContextId): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"release-scheduling-context-not-found\", {\n runContextId: id,\n });\n return;\n }\n if (ctx.pendingScheduling > 0) {\n ctx.pendingScheduling--;\n } else {\n this.logger.warn(\"release-scheduling-underflow\", {\n runContextId: id,\n pendingScheduling: ctx.pendingScheduling,\n });\n }\n this.logger.debug(\"release-scheduling\", {\n runContextId: id,\n pendingScheduling: ctx.pendingScheduling,\n });\n this.finishRunContextIfPossible(id);\n }\n\n /**\n * Increment queued work count for a run-context.\n * Used by asyncConcurrency: \"queue\" to keep contexts alive while work is queued.\n */\n incrementQueued(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"increment-queued-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingQueued++;\n this.logger.debug(\"increment-queued\", {\n runContextId: id,\n nodeId,\n pendingQueued: ctx.pendingQueued,\n });\n }\n\n /**\n * Decrement queued work count for a run-context.\n * Called when queued work is either started or dropped.\n */\n decrementQueued(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"decrement-queued-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingQueued--;\n this.logger.debug(\"decrement-queued\", {\n runContextId: id,\n nodeId,\n pendingQueued: ctx.pendingQueued,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-node-run-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingNodes++;\n this.logger.debug(\"start-node-run\", {\n runContextId: id,\n nodeId,\n pendingNodes: ctx.pendingNodes,\n });\n }\n\n finishNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-node-run-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingNodes--;\n this.logger.debug(\"finish-node-run\", {\n runContextId: id,\n nodeId,\n pendingNodes: ctx.pendingNodes,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-edge-conversion-context-not-found\", {\n runContextId: id,\n edgeId,\n });\n return;\n }\n ctx.pendingEdges++;\n this.logger.debug(\"start-edge-conversion\", {\n runContextId: id,\n edgeId,\n pendingEdges: ctx.pendingEdges,\n });\n }\n\n finishEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-edge-conversion-context-not-found\", {\n runContextId: id,\n edgeId,\n });\n return;\n }\n ctx.pendingEdges--;\n this.logger.debug(\"finish-edge-conversion\", {\n runContextId: id,\n edgeId,\n pendingEdges: ctx.pendingEdges,\n });\n this.finishRunContextIfPossible(id);\n }\n\n startHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"start-handle-resolution-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingResolvers++;\n this.logger.debug(\"start-handle-resolution\", {\n runContextId: id,\n nodeId,\n pendingResolvers: ctx.pendingResolvers,\n });\n }\n\n finishHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-handle-resolution-context-not-found\", {\n runContextId: id,\n nodeId,\n });\n return;\n }\n ctx.pendingResolvers--;\n this.logger.debug(\"finish-handle-resolution\", {\n runContextId: id,\n nodeId,\n pendingResolvers: ctx.pendingResolvers,\n });\n this.finishRunContextIfPossible(id);\n }\n\n /**\n * Finish and remove a run-context when all pending operations reach zero\n */\n private finishRunContextIfPossible(id: RunContextId): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) {\n this.logger.debug(\"finish-run-context-not-found\", {\n runContextId: id,\n });\n return;\n }\n if (\n ctx.pendingScheduling > 0 ||\n ctx.pendingNodes > 0 ||\n ctx.pendingEdges > 0 ||\n ctx.pendingResolvers > 0 ||\n ctx.pendingQueued > 0\n ) {\n return; // Still has pending work\n }\n\n this.logger.info(\"finish-run-context\", {\n runContextId: id,\n startNodes: Array.from(ctx.startNodes),\n cancelledNodes: Array.from(ctx.cancelledNodes),\n });\n\n // Clean up activeRunContexts from all nodes\n this.graph.forEachNode((node) => {\n this.graph.removeNodeRunContextId(node.nodeId, id);\n });\n\n this.runContexts.delete(id);\n if (ctx.resolve) ctx.resolve();\n }\n\n /**\n * Cancel a node for all run-contexts (called from UI or update())\n * @param nodeId - The node to cancel\n * @param includeDownstream - Whether to also cancel downstream nodes\n * @param edges - All edges in the graph (for downstream traversal)\n * @param nodes - All nodes in the graph (for clearing activeRunContexts)\n */\n cancelNodeInRunContexts(nodeId: string, includeDownstream: boolean): void {\n const toCancel = new Set<string>([nodeId]);\n if (includeDownstream) {\n // Collect all downstream nodes\n const queue = [nodeId];\n const visited = new Set<string>();\n for (let i = 0; i < queue.length; i++) {\n const cur = queue[i];\n if (visited.has(cur)) continue;\n visited.add(cur);\n this.graph.forEachEdge((e) => {\n if (e.source.nodeId === cur) {\n const targetId = e.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n });\n }\n }\n\n this.logger.debug(\"cancel-node-in-run-contexts\", {\n nodeId,\n includeDownstream,\n cancelledNodes: Array.from(toCancel),\n affectedRunContexts: Array.from(this.runContexts.keys()),\n });\n\n // Mark nodes as cancelled in all run-contexts\n for (const ctx of this.runContexts.values()) {\n for (const id of toCancel) {\n ctx.cancelledNodes.add(id);\n }\n }\n\n // Clear activeRunContexts for cancelled nodes\n for (const id of toCancel) {\n this.graph.clearNodeRunContextIds(id);\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\n const count = this.runContexts.size;\n this.logger.info(\"resolve-all-run-contexts\", {\n count,\n runContextIds: Array.from(this.runContexts.keys()),\n });\n for (const ctx of this.runContexts.values()) {\n if (ctx.resolve) ctx.resolve();\n }\n }\n\n /**\n * Clear all run-contexts\n */\n clear(): void {\n const count = this.runContexts.size;\n this.logger.info(\"clear-all-run-contexts\", { count });\n this.runContexts.clear();\n }\n}\n","/**\n * Shared utility functions for runtime components\n */\n\nimport type { Graph } from \"./components/Graph\";\n\n/**\n * Type guard to check if a value is a Promise\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\n\n/**\n * Unwrap a value that might be a Promise\n */\nexport async function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\n\n/**\n * Shallow/deep-ish equality check to avoid unnecessary runs on identical values\n */\nexport function valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Format a node reference as <typeId>.<nodeId> for logs.\n */\nexport function formatNodeRef(graph: Graph, nodeId: string): string {\n const node = graph.getNode(nodeId);\n return `${node?.typeId ?? \"unknown\"}.${nodeId}`;\n}\n\n/**\n * Format a node handle reference as <typeId>.<nodeId>.<handle> for logs.\n */\nexport function formatNodeHandleRef(graph: Graph, nodeId: string, handle: string): string {\n return `${formatNodeRef(graph, nodeId)}.${handle}`;\n}\n","import type { GraphDefinition, ResolvedHandles, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport { Registry, type ResolvedCoercion } from \"../../builder/Registry\";\nimport {\n getInputDeclaredTypes,\n unwrapTypeId,\n unwrapValue,\n mergeInputHandleDescriptors,\n typed,\n} from \"../../core/type-utils\";\nimport type { RuntimeEdge } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport { isPromise } from \"../utils\";\n\nexport function tryHandleResolving(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>,\n): { resolved: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\n\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) continue;\n const overrideInputs = n.resolvedHandles?.inputs;\n const overrideOutputs = n.resolvedHandles?.outputs;\n const overrideDefaults = n.resolvedHandles?.inputDefaults;\n // Resolve dynamic handles if available (initial pass: inputs may be undefined)\n let dyn: Partial<ResolvedHandles> = {};\n try {\n if (typeof desc.resolveHandles === \"function\") {\n const maybe = desc.resolveHandles({\n nodeId: n.nodeId,\n environment: environment || {},\n params: n.params,\n inputs: undefined,\n });\n // Only use sync results here; async results are applied via recompute later\n if (isPromise(maybe)) {\n // mark node as pending async recompute\n pending.add(n.nodeId);\n } else {\n dyn = maybe || {};\n }\n }\n } catch {\n // ignore dynamic resolution errors at this stage\n }\n // Merge base with dynamic and overrides (allow partial resolvedHandles)\n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n\n // First, add all static handles\n if (desc.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge dynamic handles\n if (dyn.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(dyn.inputs)) {\n const staticDesc = desc.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n // Finally, merge overrides\n if (overrideInputs) {\n for (const [handle, overrideDesc] of Object.entries(overrideInputs)) {\n const existingDesc = inputs[handle];\n const merged = mergeInputHandleDescriptors(existingDesc, overrideDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n const outputs = {\n ...desc.outputs,\n ...dyn.outputs,\n ...overrideOutputs,\n };\n const inputDefaults = {\n ...desc.inputDefaults,\n ...dyn.inputDefaults,\n ...overrideDefaults,\n };\n out.set(n.nodeId, { inputs, outputs, inputDefaults });\n }\n return { resolved: out, pending };\n}\n\nexport function buildEdges(def: GraphDefinition, registry: Registry, graph: Graph): RuntimeEdge[] {\n return def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n\n const { srcDeclared, dstDeclared } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n registry,\n graph,\n );\n\n const { convert, convertAsync } = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `buildEdges: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`,\n );\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared) ? [...srcDeclared] : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n}\n\n/**\n * Extract edge type information from resolved handles\n * Used by both buildEdges and updateNodeHandles to avoid duplication\n * Now supports union types on both source (output) and destination (input) handles\n */\nexport function extractEdgeTypes(\n sourceNodeId: string,\n sourceHandle: string,\n targetNodeId: string,\n targetHandle: string,\n registry: Registry,\n graph: Graph,\n): {\n srcDeclared: string | string[] | undefined;\n dstDeclared: string | string[] | undefined;\n} {\n const srcResolved = graph.getResolvedHandles(sourceNodeId);\n const dstResolved = graph.getResolvedHandles(targetNodeId);\n\n const srcDeclared = srcResolved\n ? srcResolved.outputs[sourceHandle]\n : registry.nodes.get(graph.getNode(sourceNodeId)?.typeId || \"\")?.outputs[sourceHandle];\n\n const dstDeclared = getInputDeclaredTypes(\n dstResolved ? dstResolved.inputs : registry.nodes.get(graph.getNode(targetNodeId)?.typeId || \"\")?.inputs,\n targetHandle,\n );\n\n return {\n srcDeclared,\n dstDeclared,\n };\n}\n\n// Static helper: build edge converters for type coercion\n// Now supports union types on both source (output) and destination (input) handles\nexport function buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | string[] | undefined,\n registry: Registry,\n edgeLabel: string,\n): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n} {\n if (!dstDeclared || !srcDeclared) {\n return {};\n }\n const isSrcUnion = Array.isArray(srcDeclared);\n const srcTypes = isSrcUnion ? srcDeclared : [srcDeclared];\n const isDstUnion = Array.isArray(dstDeclared);\n const dstTypes = isDstUnion ? dstDeclared : [dstDeclared];\n\n // Helper to compare coercion costs (sync preferred, then fewer steps)\n const compareCost = (\n a: { cost: { edges: number; async: number }; kind: \"sync\" | \"async\" },\n b: { cost: { edges: number; async: number }; kind: \"sync\" | \"async\" },\n ): number => {\n // Prefer sync over async\n if (a.kind === \"sync\" && b.kind === \"async\") return -1;\n if (a.kind === \"async\" && b.kind === \"sync\") return 1;\n // If same kind, prefer fewer edges\n if (a.cost.edges !== b.cost.edges) return a.cost.edges - b.cost.edges;\n // If same edges, prefer fewer async steps\n return a.cost.async - b.cost.async;\n };\n\n // Helper to find the best coercion from a source type to any destination type\n const getCoercion = (\n srcTypeId: string,\n ): {\n kind: \"sync\" | \"async\";\n convert: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n dstType: string;\n } | null => {\n type Candidate = {\n dstType: string;\n coercion: ResolvedCoercion;\n };\n\n const candidates: Candidate[] = [];\n\n // Try all destination types and collect valid coercions\n for (const dstTypeId of dstTypes) {\n const coercion = registry.resolveCoercion(srcTypeId, dstTypeId);\n if (coercion) {\n candidates.push({\n dstType: dstTypeId,\n coercion,\n });\n }\n }\n\n if (candidates.length === 0) return null;\n\n // Select best by cost: sync preferred, then fewer edges, then fewer async steps\n const best = candidates.reduce((best, cur) => {\n return compareCost(cur.coercion, best.coercion) < 0 ? cur : best;\n });\n\n if (best.coercion.kind === \"sync\") {\n return {\n kind: \"sync\",\n convert: best.coercion.convert,\n dstType: best.dstType,\n };\n } else {\n return {\n kind: \"async\",\n convert: (v: unknown) => v, // placeholder, not used for async\n convertAsync: best.coercion.convertAsync,\n dstType: best.dstType,\n };\n }\n };\n\n // Resolve coercions for all source types\n const coercions = srcTypes.map(getCoercion);\n const hasAsync = coercions.some((r) => r?.kind === \"async\");\n\n // Helper to extract and validate typed output for unions\n const extractPayload = (v: unknown): { typeId: string; payload: unknown } => {\n const typeId = unwrapTypeId(v);\n const payload = unwrapValue(v);\n\n if (isSrcUnion) {\n if (!typeId) {\n throw new Error(`Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\"|\")}`);\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(`Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\"|\")}`);\n }\n } else if (typeId) {\n // Warn if typed output is used for non-union source\n console.warn(\n `Typed output ${typeId} is fed even though source is not union (${edgeLabel}): ${srcDeclared} -> ${dstDeclared}`,\n );\n }\n\n return { typeId: typeId || srcTypes[0], payload };\n };\n\n const wrapIfDstUnion = (dstType: string | undefined, val: unknown) => {\n if (!isDstUnion || !dstType) return val;\n return typed(dstType, val);\n };\n\n if (hasAsync) {\n return {\n convertAsync: async (v: unknown, signal: AbortSignal) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) {\n const fallbackType = isDstUnion && typeId && dstTypes.includes(typeId) ? typeId : undefined;\n return wrapIfDstUnion(fallbackType, payload);\n }\n if (res.kind === \"async\" && res.convertAsync) {\n const converted = await res.convertAsync(payload, signal);\n return wrapIfDstUnion(res.dstType, converted);\n }\n return wrapIfDstUnion(res.dstType, res.convert(payload));\n },\n };\n }\n\n // Sync path\n const firstCoercion = coercions.find((r) => r?.kind === \"sync\");\n if (!firstCoercion) {\n return {};\n }\n\n return {\n convert: (v: unknown) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) {\n const fallbackType = isDstUnion && typeId && dstTypes.includes(typeId) ? typeId : undefined;\n return wrapIfDstUnion(fallbackType, payload);\n }\n if (res.kind === \"async\") {\n throw new Error(`Async coercion required but convert used (${edgeLabel})`);\n }\n const converted = res.convert(payload);\n return wrapIfDstUnion(res.dstType, converted);\n },\n };\n}\n\n/**\n * Compute effective inputs for a node by merging real inputs with defaults.\n * This is a shared utility used by both NodeExecutor and runtime validators.\n *\n * @param nodeId - The node ID to compute effective inputs for\n * @param graph - Graph component to access node and handle information\n * @param registry - Registry to access node type descriptors and defaults\n * @returns Record of effective input values (real inputs merged with defaults)\n */\nexport function getEffectiveInputs(nodeId: string, graph: Graph, registry: Registry): Record<string, unknown> {\n const node = graph.getNode(nodeId);\n if (!node) return {};\n\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = graph.getResolvedHandles(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n const staticHandles = new Set(Object.keys(desc.inputs ?? {}));\n const dynamicHandles = new Set(Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h)));\n\n // Precedence: dynamic > registry\n const mergedDefaults: Record<string, unknown> = {\n ...regDefaults,\n ...dynDefaults,\n };\n\n // Start with real inputs only (no defaults)\n const effective: Record<string, unknown> = { ...node.inputs };\n\n // Build set of inbound handles (wired inputs)\n const inboundEdges = graph.getInboundEdges(nodeId);\n const inbound = new Set(inboundEdges.map((e) => e.target.handle));\n\n const getDefaultPolicy = (handle: string): \"unbound\" | \"bound\" | undefined => {\n const resolvedDesc = resolved?.inputs?.[handle];\n const staticDesc = desc.inputs?.[handle];\n const pick = (d: InputHandleDescriptor | undefined) =>\n d && typeof d === \"object\" && \"typeId\" in d ? d.defaultPolicy : undefined;\n return pick(resolvedDesc) ?? pick(staticDesc);\n };\n\n // Apply defaults only for:\n // 1. Unbound handles that have no explicit value\n // 2. Static handles (not dynamically resolved)\n for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {\n if (defaultValue === undefined) continue;\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n const policy = getDefaultPolicy(handle);\n if (policy === \"bound\") {\n if (!inbound.has(handle)) continue;\n } else {\n if (inbound.has(handle)) continue;\n }\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n}\n","import type { ResolvedHandles, InputHandleDescriptor } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { Graph } from \"./Graph\";\nimport type { RunContextId, RunContextManager } from \"./RunContextManager\";\nimport type { IEdgePropagator, IHandleResolver } from \"./interfaces\";\nimport { buildEdgeConverters, extractEdgeTypes } from \"./graph-utils\";\nimport { mergeInputHandleDescriptors } from \"../../core/type-utils\";\nimport { formatNodeRef, unwrapMaybePromise } from \"../utils\";\n\n/**\n * HandleResolver component - manages dynamic handle resolution\n */\nexport class HandleResolver implements IHandleResolver {\n private recomputeTokenByNode = new Map<string, number>();\n private environment: Record<string, unknown> = {};\n private pendingResolutions = new Map<string, Promise<void>>();\n private isRecomputing = new Map<string, boolean>();\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly edgePropagator: IEdgePropagator,\n private registry?: Registry,\n environment?: Record<string, unknown>,\n ) {\n this.environment = environment ?? {};\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Get the promise for pending handle resolution, or null if none\n */\n getPendingResolution(nodeId: string): Promise<void> | null {\n return this.pendingResolutions.get(nodeId) || null;\n }\n\n /**\n * Schedule async recomputation of handles for a node\n */\n scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // If already recomputing, increment token to mark that a new recompute is needed\n // but don't schedule another concurrent execution\n if (this.isRecomputing.get(nodeId)) {\n const currentToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n this.recomputeTokenByNode.set(nodeId, currentToken + 1);\n return;\n }\n\n // Track resolver start for all active run-contexts\n const activeRunContextIds = this.graph.getNodeRunContextIds(nodeId);\n if (activeRunContextIds.size > 0) {\n for (const runContextId of activeRunContextIds) {\n this.runContextManager.startHandleResolution(runContextId, nodeId);\n }\n }\n\n // Mark as recomputing\n this.isRecomputing.set(nodeId, true);\n\n // Capture initial token before starting (will be incremented in recomputeHandlesForNode)\n const initialToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n\n // Create and track the resolution promise\n const resolutionPromise = new Promise<void>((resolve) => {\n setTimeout(async () => {\n await this.recomputeHandlesForNode(nodeId, activeRunContextIds);\n this.pendingResolutions.delete(nodeId);\n this.isRecomputing.delete(nodeId);\n\n // Check if a new recompute was requested while we were running\n // (token was incremented by another scheduleRecomputeHandles call)\n const finalToken = this.recomputeTokenByNode.get(nodeId) ?? 0;\n // After recomputeHandlesForNode, token should be initialToken + 1\n // If finalToken > initialToken + 1, a new recompute was requested\n if (finalToken > initialToken + 1) {\n // A new recompute was requested, schedule it now\n this.scheduleRecomputeHandles(nodeId);\n }\n\n resolve();\n }, 0);\n });\n\n this.pendingResolutions.set(nodeId, resolutionPromise);\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n private updateNodeHandles(nodeId: string, handles: ResolvedHandles): void {\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n this.graph.setResolvedHandles(nodeId, handles);\n\n const registry = this.registry; // Store for use in callback\n this.graph.forEachEdge((e, _index) => {\n // Only update edges that touch the changed node\n const touchesChangedNode = e.source.nodeId === nodeId || e.target.nodeId === nodeId;\n if (!touchesChangedNode) return;\n\n const srcNode = this.graph.getNode(e.source.nodeId);\n const dstNode = this.graph.getNode(e.target.nodeId);\n const oldDstDeclared = e.dstDeclared;\n\n // Extract edge types using shared helper (handles both source and target updates)\n const { srcDeclared, dstDeclared } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n registry,\n this.graph,\n );\n\n // Update converters\n const conv = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`,\n );\n\n // Update edge properties via Graph\n this.graph.updateEdgeProperties(e.id, {\n dstDeclared,\n srcUnionTypes: Array.isArray(srcDeclared) ? [...srcDeclared] : undefined,\n convert: conv.convert,\n convertAsync: conv.convertAsync,\n });\n\n if (e.target.nodeId === nodeId && oldDstDeclared === undefined && dstDeclared !== undefined) {\n const srcNode = this.graph.getNode(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n const activeRunContextIds = this.graph.getNodeRunContextIds(e.source.nodeId);\n this.edgePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n activeRunContextIds.size > 0 ? activeRunContextIds : undefined,\n );\n }\n }\n }\n });\n this.edgePropagator.invalidateDownstream(nodeId);\n }\n\n /**\n * Recompute dynamic handles for a single node using current inputs/environment\n */\n private async recomputeHandlesForNode(nodeId: string, activeRunContextIds?: Set<RunContextId>): Promise<void> {\n try {\n if (!this.registry) return;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const desc = this.registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\n\n const token = (this.recomputeTokenByNode.get(nodeId) ?? 0) + 1;\n this.recomputeTokenByNode.set(nodeId, token);\n\n // Log resolveHandles-start\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const shouldLog = nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-start`);\n }\n\n let resolved: Partial<ResolvedHandles> | undefined;\n try {\n const res = resolveHandles({\n nodeId,\n environment: this.environment || {},\n params: node.params,\n inputs: node.inputs || {},\n });\n resolved = await unwrapMaybePromise(res);\n } catch {\n // Log resolveHandles-done even on error\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-done (error)`);\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${formatNodeRef(this.graph, nodeId)}] resolveHandles-done`);\n }\n // If a newer recompute was scheduled, drop this result\n if ((this.recomputeTokenByNode.get(nodeId) ?? 0) !== token) return;\n\n const before = this.graph.getResolvedHandles(nodeId);\n // Re-fetch desc to ensure we have the latest (node might have been updated)\n const nodeDesc = this.registry.nodes.get(node.typeId);\n if (!nodeDesc) return;\n\n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n\n // First, add all static handles\n if (nodeDesc.inputs) {\n for (const [handle, staticDesc] of Object.entries(nodeDesc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge dynamic handles\n if (resolved?.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = nodeDesc.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n const outputs = { ...nodeDesc.outputs, ...resolved?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...resolved?.inputDefaults,\n };\n const after = { inputs, outputs, inputDefaults };\n // If we have prior handles, skip update when unchanged; for new nodes (no before),\n // always write the resolved handles.\n if (before && JSON.stringify(before) === JSON.stringify(after)) return;\n\n // Call GraphRuntime's updateNodeHandles to update edges and re-propagate values\n // Note: updateNodeHandles will set the resolved handles internally\n this.updateNodeHandles(nodeId, after);\n\n // Notify graph updated with the changed handles\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: after },\n });\n } finally {\n // Track resolver finish after successful completion\n if (activeRunContextIds && activeRunContextIds.size > 0) {\n for (const runContextId of activeRunContextIds) {\n this.runContextManager.finishHandleResolution(runContextId, nodeId);\n }\n }\n }\n }\n}\n","import { isTyped, unwrapTypeId } from \"../../core/type-utils\";\nimport type { RunContextId, RuntimeEdge } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { formatNodeHandleRef, valuesEqual } from \"../utils\";\nimport { INodeExecutor, IEdgePropagator, IRuntime } from \"./interfaces\";\n\n/**\n * EdgePropagator component - handles value propagation through edges\n */\nexport class EdgePropagator implements IEdgePropagator {\n private arrayInputBuckets = new Map<string, Map<string, Map<string, unknown[]>>>();\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly nodeExecutor: INodeExecutor,\n private readonly runtime: IRuntime,\n ) {}\n\n /**\n * Set source output value and emit event\n */\n private setSourceOutput(srcNodeId: string, srcHandle: string, value: unknown): boolean {\n if (!this.graph.hasNode(srcNodeId)) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return false;\n }\n this.graph.updateNodeOutput(srcNodeId, srcHandle, value);\n return true;\n }\n\n /**\n * Find all outgoing edges from a source node handle\n */\n private findOutgoingEdges(srcNodeId: string, srcHandle: string): RuntimeEdge[] {\n return this.graph.getEdgesBySource(srcNodeId, srcHandle);\n }\n\n /**\n * Propagate value to a single edge\n */\n private propagateToEdge(\n edge: RuntimeEdge,\n value: unknown,\n srcNodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n ): void {\n // Filter run-contexts\n const effectiveRunContexts =\n runContextIds && runContextIds.size > 0\n ? this.filterEffectiveRunContexts(edge, srcNodeId, runContextIds)\n : undefined;\n\n if (runContextIds && runContextIds.size > 0 && !(effectiveRunContexts && effectiveRunContexts.size > 0)) {\n return; // No valid run-contexts for this edge\n }\n\n // Validate union types\n if (!this.validateUnionType(edge, value, srcNodeId)) {\n return;\n }\n\n // Clone value per edge to isolate conversions\n let nextVal = structuredClone(value);\n\n // Apply conversion and propagate\n if (edge.convertAsync) {\n this.handleAsyncConversion(edge, nextVal, effectiveRunContexts);\n } else {\n this.handleSyncConversion(edge, nextVal, effectiveRunContexts);\n }\n }\n\n /**\n * Filter run-contexts to exclude cancelled nodes\n */\n private filterEffectiveRunContexts(\n edge: RuntimeEdge,\n srcNodeId: string,\n runContextIds: Set<RunContextId>,\n ): Set<RunContextId> | undefined {\n const effectiveRunContexts = new Set<RunContextId>();\n for (const id of runContextIds) {\n const ctx = this.runContextManager.getRunContext(id);\n if (!ctx) continue;\n if (ctx.cancelledNodes.has(srcNodeId)) continue;\n if (ctx.cancelledNodes.has(edge.target.nodeId)) continue;\n effectiveRunContexts.add(id);\n }\n return effectiveRunContexts.size > 0 ? effectiveRunContexts : undefined;\n }\n\n /**\n * Validate union type requirements\n */\n private validateUnionType(edge: RuntimeEdge, value: unknown, srcNodeId: string): boolean {\n const isUnion = Array.isArray(edge.srcUnionTypes);\n const isTypedValue = isTyped(value);\n\n if (isUnion && !isTypedValue) {\n const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;\n const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;\n const err = new Error(\n `Output ${srcNodeId}.${edge.source.handle} requires typed value for union output (allowed: ${(\n edge.srcUnionTypes as string[]\n ).join(\"|\")})`,\n );\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: edge.id,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId,\n targetTypeId,\n err,\n });\n return false;\n }\n\n return true;\n }\n\n /**\n * Handle synchronous conversion\n */\n private handleSyncConversion(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n let convertedValue = value;\n if (edge.convert) {\n convertedValue = edge.convert(value);\n } else {\n const fromType =\n (Array.isArray(edge.srcUnionTypes) && edge.srcUnionTypes.length > 0\n ? edge.srcUnionTypes.join(\"|\")\n : undefined) ??\n unwrapTypeId(value) ??\n edge.typeId ??\n \"unknown\";\n const toType = Array.isArray(edge.dstDeclared) ? edge.dstDeclared.join(\"|\") : (edge.dstDeclared ?? \"unknown\");\n console.warn(\n `No convert function for edge ${edge.id} [${formatNodeHandleRef(\n this.graph,\n edge.source.nodeId,\n edge.source.handle,\n )} -> ${formatNodeHandleRef(\n this.graph,\n edge.target.nodeId,\n edge.target.handle,\n )}] from:${fromType} to:${toType}`,\n );\n }\n this.applyToTarget(edge, convertedValue, effectiveRunContexts);\n }\n\n /**\n * Handle asynchronous conversion\n */\n private handleAsyncConversion(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n if (!edge.convertAsync) return;\n // Track edge run-context IDs for pendingEdges tracking\n const edgeRunContextIds = effectiveRunContexts ? Array.from(effectiveRunContexts) : undefined;\n\n if (edgeRunContextIds) {\n for (const id of edgeRunContextIds) {\n this.runContextManager.startEdgeConversion(id, edge.id);\n }\n }\n\n const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;\n const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;\n\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: edge.id,\n typeId: edge.typeId,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId,\n targetTypeId,\n });\n\n const controller = new AbortController();\n const startAt = Date.now();\n const currentStats = edge.stats;\n this.graph.updateEdgeStats(edge.id, {\n runs: currentStats.runs + 1,\n inFlight: true,\n progress: 0,\n });\n\n edge\n .convertAsync(value, controller.signal)\n .then((converted) => {\n if (!controller.signal.aborted) {\n this.applyToTarget(edge, converted, effectiveRunContexts);\n this.updateEdgeStatsOnSuccess(edge, startAt);\n }\n })\n .catch((err) => {\n if (controller.signal.aborted) return;\n this.handleEdgeConversionError(edge, err);\n })\n .finally(() => {\n this.finishEdgeConversion(edgeRunContextIds, edge.id);\n });\n }\n\n /**\n * Apply value to target node input\n */\n private applyToTarget(edge: RuntimeEdge, value: unknown, effectiveRunContexts?: Set<RunContextId>): void {\n const dstNode = this.graph.getNode(edge.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles\n if (edge.dstDeclared === undefined) return;\n\n // Handle array types\n const processedValue = this.processArrayInput(edge, value);\n\n // Check if value changed\n const prev = dstNode.inputs[edge.target.handle];\n const valueChanged = !valuesEqual(prev, processedValue);\n\n // Check if we should execute even if value is same:\n // 1. If node has rerunOnSameInput policy (from node params or registry)\n // 2. If input was set after last successful run (stale input detection)\n const registry = this.graph.getRegistry();\n const desc = registry?.nodes.get(dstNode.typeId);\n const nodeRerunPolicy = dstNode.policy?.rerunOnSameInput === true;\n const descRerunPolicy = desc?.policy?.rerunOnSameInput === true;\n const shouldRerunOnSameInput = nodeRerunPolicy || descRerunPolicy;\n\n const inputWasSetAfterLastRun =\n !dstNode.lastInputAt?.[edge.target.handle] ||\n !dstNode.lastSuccessAt ||\n dstNode.lastInputAt[edge.target.handle] > dstNode.lastSuccessAt;\n\n const shouldExecute = valueChanged || shouldRerunOnSameInput || inputWasSetAfterLastRun;\n\n if (!shouldExecute) {\n return; // No change and no reason to rerun\n }\n\n // Set input value (respecting skipPropagateValues)\n const shouldSetValue = this.shouldSetInputValue(effectiveRunContexts);\n if (shouldSetValue && valueChanged) {\n this.runtime.setTargetInput(edge, processedValue, \"applyToTarget\");\n } else if (shouldSetValue && !valueChanged) {\n // Even if value didn't change, update timestamp if we're forcing execution\n const now = Date.now();\n this.graph.updateNodeLastInputAt(edge.target.nodeId, edge.target.handle, now);\n }\n\n // Schedule downstream execution\n this.executeDownstream(edge.target.nodeId, effectiveRunContexts);\n }\n\n /**\n * Process array input by merging values from all edges\n */\n private processArrayInput(edge: RuntimeEdge, value: unknown): unknown {\n const dstIsArray = typeof edge.dstDeclared === \"string\" && edge.dstDeclared.endsWith(\"[]\");\n\n if (!dstIsArray) {\n return value;\n }\n\n const toArray = (x: unknown): unknown[] => (Array.isArray(x) ? x : x === undefined ? [] : [x]);\n\n let forNode = this.arrayInputBuckets.get(edge.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(edge.target.nodeId, forNode);\n }\n\n let forHandle = forNode.get(edge.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(edge.target.handle, forHandle);\n }\n\n forHandle.set(edge.id, toArray(value));\n\n // Merge all parts for this handle\n const targetEdges = this.graph.getEdgesByTarget(edge.target.nodeId, edge.target.handle);\n const merged: unknown[] = [];\n for (const ed of targetEdges) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n\n return merged;\n }\n\n /**\n * Check if input value should be set (respecting skipPropagateValues)\n */\n private shouldSetInputValue(effectiveRunContexts: Set<RunContextId> | undefined): boolean {\n if (!effectiveRunContexts) {\n return true; // Auto mode always sets values\n }\n\n // Check skipPropagateValues (only in run-context mode)\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.skipPropagateValues) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Execute downstream if conditions are met\n */\n private executeDownstream(targetNodeId: string, effectiveRunContexts: Set<RunContextId> | undefined): void {\n // Determine if we should propagate\n const shouldPropagate = this.shouldPropagateExecution(effectiveRunContexts);\n\n if (shouldPropagate && this.graph.allInboundHaveValue(targetNodeId)) {\n this.nodeExecutor.execute(targetNodeId, {\n runContextIds: effectiveRunContexts,\n reason: \"executeDownstream\",\n });\n }\n }\n\n /**\n * Check if execution should propagate\n */\n private shouldPropagateExecution(effectiveRunContexts: Set<RunContextId> | undefined): boolean {\n if (!effectiveRunContexts) {\n // Without run-context IDs, only auto mode should schedule downstream execution.\n // In manual mode this path is used for value refresh/re-emits (e.g. handle updates),\n // and should not implicitly trigger node runs.\n return this.runtime.getRunMode() === \"auto\";\n }\n\n // Check propagate flag (only in run-context mode)\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.propagate) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update edge stats on successful conversion\n */\n private updateEdgeStatsOnSuccess(edge: RuntimeEdge, startAt: number): void {\n const duration = Date.now() - startAt;\n this.graph.updateEdgeStats(edge.id, {\n inFlight: false,\n lastDurationMs: duration,\n lastEndAt: Date.now(),\n lastError: undefined,\n });\n\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: edge.id,\n typeId: edge.typeId,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,\n targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,\n durationMs: duration,\n });\n }\n\n /**\n * Handle edge conversion error\n */\n private handleEdgeConversionError(edge: RuntimeEdge, err: unknown): void {\n this.graph.updateEdgeStats(edge.id, {\n inFlight: false,\n lastError: err,\n });\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: edge.id,\n source: { nodeId: edge.source.nodeId, handle: edge.source.handle },\n target: { nodeId: edge.target.nodeId, handle: edge.target.handle },\n sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,\n targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,\n err,\n });\n }\n\n /**\n * Finish edge conversion and decrement pending edges\n */\n private finishEdgeConversion(edgeRunContextIds: RunContextId[] | undefined, edgeId: string): void {\n if (!edgeRunContextIds) return;\n\n for (const id of edgeRunContextIds) {\n this.runContextManager.finishEdgeConversion(id, edgeId);\n }\n }\n\n /**\n * Propagate value through edges\n * @param runContextIds - Optional set of run-context IDs. If provided, propagation is run-context aware.\n * If undefined or empty, behaves like auto mode (always propagates values and execution).\n */\n propagate(srcNodeId: string, srcHandle: string, value: unknown, runContextIds?: Set<RunContextId>): void {\n if (this.runtime.isPaused()) return;\n\n // Set source output\n if (!this.setSourceOutput(srcNodeId, srcHandle, value)) {\n return; // Node was removed\n }\n\n // Find outgoing edges\n const outEdges = this.findOutgoingEdges(srcNodeId, srcHandle);\n\n // Process each edge\n for (const edge of outEdges) {\n this.propagateToEdge(edge, value, srcNodeId, runContextIds);\n }\n }\n\n /**\n * Re-emit all outputs from a node (used when graph updates)\n * Only re-emits outputs that are valid according to resolved handles\n */\n invalidateDownstream(nodeId: string): void {\n if (this.runtime.isPaused()) return;\n\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // Get resolved handles to filter out invalid outputs\n const resolved = this.graph.getResolvedHandles(nodeId);\n const validOutputHandles = resolved?.outputs ? new Set(Object.keys(resolved.outputs)) : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\n const activeRunContextIds = this.graph.getNodeRunContextIds(nodeId);\n for (const [handle, value] of Object.entries(node.outputs)) {\n // Only re-emit if this handle is still valid\n if (validOutputHandles.has(handle)) {\n this.propagate(nodeId, handle, value, activeRunContextIds.size > 0 ? activeRunContextIds : undefined);\n }\n }\n }\n\n /**\n * Clear array input buckets for a node (when node is deleted)\n */\n clearArrayBuckets(nodeId: string): void {\n this.arrayInputBuckets.delete(nodeId);\n }\n\n /**\n * Clear all array buckets\n */\n clearAllArrayBuckets(): void {\n this.arrayInputBuckets.clear();\n }\n}\n","import type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RunContextId, ExecutionPlan } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IEdgePropagator, INodeExecutor, IRuntime, IHandleResolver } from \"./interfaces\";\nimport { getEffectiveInputs } from \"./graph-utils\";\nimport { formatNodeRef } from \"../utils\";\nimport { LevelLogger } from \"../../misc/utils/LevelLogger\";\n\n/**\n * NodeExecutor component - handles node execution scheduling and lifecycle\n */\nexport class NodeExecutor implements INodeExecutor {\n private environment: Record<string, unknown> = {};\n private customNodeData: Record<string, Record<string, unknown>> = {};\n\n constructor(\n private readonly graph: Graph,\n private readonly eventEmitter: EventEmitter,\n private readonly runContextManager: RunContextManager,\n private readonly handleResolver: IHandleResolver,\n private readonly edgePropagator: IEdgePropagator,\n private readonly runtime: IRuntime,\n environment?: Record<string, unknown>,\n ) {\n this.environment = environment ?? {};\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n setCustomNodeData(customNodeData: Record<string, Record<string, unknown>>): void {\n this.customNodeData = customNodeData;\n }\n\n /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const registry = this.graph.getRegistry();\n if (!registry) return {};\n return getEffectiveInputs(nodeId, this.graph, registry);\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\n runContextIds?: Set<RunContextId>,\n options?: {\n emitHandler?: (handle: string, value: unknown) => void;\n reportProgress?: (p: number) => void;\n },\n ): ExecutionContext<any> {\n const emitHandler =\n options?.emitHandler ??\n ((handle: string, value: unknown) => {\n this.edgePropagator.propagate(nodeId, handle, value, runContextIds);\n });\n const reportProgress =\n options?.reportProgress ??\n ((p: number) => {\n this.graph.updateNodeStats(nodeId, {\n progress: Math.max(0, Math.min(1, Number(p) || 0)),\n });\n });\n\n // Create log function that respects node's logLevel using LevelLogger\n const node = this.graph.getNode(nodeId);\n const nodeLogLevel = node?.logLevel ?? \"info\";\n const logger = new LevelLogger(nodeLogLevel, `[node:${formatNodeRef(this.graph, nodeId)}:${runId}]`);\n const log: (level: LogLevel, message: string, context?: Record<string, unknown>) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>,\n ) => {\n switch (level) {\n case \"debug\":\n logger.debug(message, context);\n break;\n case \"info\":\n logger.info(message, context);\n break;\n case \"warn\":\n logger.warn(message, context);\n break;\n case \"error\":\n logger.error(message, context);\n break;\n }\n };\n\n return {\n nodeId,\n state: node?.state,\n setState: (next) => this.graph.updateNodeState(nodeId, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.edgePropagator.invalidateDownstream(nodeId);\n },\n execute: (opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n resolve?: () => void;\n reason?: string;\n }) => {\n if (this.graph.allInboundHaveValue(nodeId)) {\n let runContextIdsToUse = this.runtime.getRunMode() === \"auto\" ? undefined : runContextIds;\n let runContextIdToRelease: RunContextId | undefined;\n if (this.runtime.getRunMode() === \"manual\" && (!runContextIds || runContextIds.size === 0)) {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, opts);\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n try {\n this.execute(nodeId, {\n runContextIds: runContextIdsToUse,\n reason: opts?.reason ?? \"executeFromContext\",\n });\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n customNodeData: this.customNodeData[nodeId],\n runId,\n abortSignal,\n reportProgress,\n setCustomData: (data: Record<string, unknown>) => {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-custom-data\",\n nodeId,\n typeId: node?.typeId ?? \"\",\n runId,\n data,\n });\n },\n log,\n };\n }\n\n /**\n * Internal method for executing inputs changed (also used by GraphRuntime)\n */\n execute(\n nodeId: string,\n opts?: {\n runContextIds?: Set<RunContextId>;\n canSkipHandleResolution?: boolean;\n reason?: string;\n },\n ): void {\n let { runContextIds, canSkipHandleResolution, reason = \"\" } = opts ?? {};\n let autoCreatedRunContextId: RunContextId | undefined;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const runMode = this.runtime.getRunMode();\n if (!runMode) {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(this.graph, nodeId)}:${reason}]: no runMode, skipping execution`,\n );\n return;\n }\n\n // In manual mode, require runContextIds unless autoRun policy is set\n if (runMode === \"manual\" && (!runContextIds || runContextIds.size === 0)) {\n // If autoRun is true, auto-generate a run context (similar to createExecutionContext pattern)\n if (node.policy?.autoRun === true) {\n autoCreatedRunContextId = this.runContextManager.createRunContext(nodeId, { propagate: false });\n runContextIds = new Set([autoCreatedRunContextId]);\n } else {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(\n this.graph,\n nodeId,\n )}:${reason}]: no runContextIds provided in manual mode, skipping execution`,\n );\n return;\n }\n }\n\n try {\n if (runMode === \"auto\" && runContextIds && runContextIds.size > 0) {\n console.trace(\n `NodeExecutor.execute[${formatNodeRef(\n this.graph,\n nodeId,\n )}:${reason}]: runContextIds provided in auto mode, ignoring`,\n );\n runContextIds = undefined;\n }\n\n // Early validation for auto-mode paused state\n if (this.runtime.isPaused()) return;\n\n // Check runtime validators (check current state, not just graph definition)\n const runtimeValidationError = this.runtime.hasRuntimeValidationBlock(nodeId);\n if (runtimeValidationError) {\n this.eventEmitter.emit(\"error\", {\n kind: \"system\",\n message: runtimeValidationError.message,\n code: runtimeValidationError.code || \"RUNTIME_VALIDATION_BLOCKED\",\n details: {\n nodeId,\n nodeTypeId: node?.typeId,\n ...runtimeValidationError.details,\n },\n });\n return;\n }\n\n // Attach run-context IDs if provided - do this BEFORE checking for pending resolution\n // so that handle resolution can track these run contexts\n if (runContextIds) {\n this.graph.addNodeRunContextIds(nodeId, runContextIds);\n }\n\n if (!canSkipHandleResolution && !this.handleResolver.getPendingResolution(nodeId)) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n // Check if handles are being resolved - wait for resolution before executing\n // Do this AFTER setting up run contexts so handle resolution can track them\n const pendingResolution = this.handleResolver.getPendingResolution(nodeId);\n if (pendingResolution) {\n if (runContextIds && runContextIds.size > 0) {\n for (const id of runContextIds) {\n this.runContextManager.startHandleResolution(id, nodeId);\n }\n }\n // Wait for resolution to complete, then re-execute\n pendingResolution.then(() => {\n // Re-check node still exists and conditions\n const nodeAfter = this.graph.getNode(nodeId);\n if (nodeAfter) {\n this.execute(nodeId, {\n runContextIds,\n canSkipHandleResolution: true,\n reason: opts?.reason,\n });\n }\n if (runContextIds && runContextIds.size > 0) {\n for (const id of runContextIds) {\n this.runContextManager.finishHandleResolution(id, nodeId);\n }\n }\n });\n return;\n }\n\n // Handle debouncing\n const now = Date.now();\n if (this.shouldDebounce(nodeId, now)) {\n this.handleDebouncedSchedule(nodeId, now, runContextIds, reason);\n return;\n }\n\n // Prepare execution plan\n const executionPlan = this.prepareExecutionPlan(nodeId, runContextIds, now, reason);\n\n // Route to appropriate concurrency handler\n this.routeToConcurrencyHandler(nodeId, executionPlan);\n } finally {\n if (autoCreatedRunContextId) {\n this.runContextManager.releaseScheduling(autoCreatedRunContextId);\n }\n }\n }\n\n /**\n * Check if execution should be debounced\n */\n private shouldDebounce(nodeId: string, now: number): boolean {\n const node = this.graph.getNode(nodeId);\n if (!node) return false;\n const policy = node.policy ?? {};\n const lastScheduledAt = node.lastScheduledAt;\n return !!(policy.debounceMs && lastScheduledAt && now - lastScheduledAt < policy.debounceMs);\n }\n\n /**\n * Handle debounced scheduling by replacing the latest queued item\n */\n private handleDebouncedSchedule(\n nodeId: string,\n now: number,\n runContextIds: Set<RunContextId> | undefined,\n reason?: string,\n ): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Decrement pendingQueued for any existing queued items before replacing\n if (node.queue.length > 0) {\n this.decrementQueuedForPlans(node.queue, nodeId);\n }\n\n const executionPlan = this.prepareExecutionPlan(nodeId, runContextIds, now, reason);\n\n this.graph.replaceNodeQueue(nodeId, [executionPlan]);\n }\n\n /**\n * Prepare execution plan with all necessary information\n */\n private prepareExecutionPlan(\n nodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n now: number,\n reason?: string,\n ): ExecutionPlan {\n const node = this.graph.getNode(nodeId);\n\n this.graph.setNodeLastScheduledAt(nodeId, now);\n const runSeq = this.graph.incrementNodeRunSeq(nodeId);\n const runId = `${nodeId}:${runSeq}:${now}`;\n this.graph.setNodeLatestRunId(nodeId, runId);\n\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n // Take a shallow snapshot of the current policy for this run\n const policySnapshot = node?.policy ? { ...node.policy } : undefined;\n\n return {\n runId,\n effectiveInputs,\n runContextIdsForRun: runContextIds,\n timestamp: now,\n policy: policySnapshot,\n reason,\n };\n }\n\n /**\n * Route execution to appropriate concurrency handler\n */\n private routeToConcurrencyHandler(nodeId: string, plan: ExecutionPlan): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n\n switch (mode) {\n case \"drop\":\n this.handleDropMode(nodeId, plan);\n break;\n case \"queue\":\n this.handleQueueMode(nodeId, plan);\n break;\n case \"switch\":\n case \"merge\":\n default:\n this.startRun(nodeId, plan);\n break;\n }\n }\n\n /**\n * Handle drop mode - drop execution if node is already running, otherwise start run\n */\n private handleDropMode(nodeId: string, plan: ExecutionPlan): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Drop if node is already running\n if (node.activeControllers.size > 0) {\n return; // Don't increment pendingCount if we're dropping this run\n }\n // Start run if node is not running\n this.startRun(nodeId, plan);\n }\n\n /**\n * Handle queue mode - add to queue and process sequentially\n */\n private handleQueueMode(nodeId: string, plan: ExecutionPlan): void {\n const maxQ = plan.policy?.maxQueue ?? 8;\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n // Keep the originating run-context alive while work is queued by\n // incrementing queued counters for the plan's run-contexts.\n if (plan.runContextIdsForRun) {\n for (const rcId of plan.runContextIdsForRun) {\n this.runContextManager.incrementQueued(rcId, nodeId);\n }\n }\n\n this.graph.addToNodeQueue(nodeId, plan);\n if (node.queue.length > maxQ) {\n const dropped = this.graph.shiftNodeQueue(nodeId);\n if (dropped) {\n this.decrementQueuedForPlans(dropped, nodeId);\n }\n }\n\n this.processQueue(nodeId);\n }\n\n /**\n * Process queued executions sequentially\n */\n private processQueue(nodeId: string): void {\n const processNext = () => {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n if (node.activeControllers.size > 0) return;\n const next = this.graph.shiftNodeQueue(nodeId);\n if (!next) return;\n\n this.graph.setNodeLatestRunId(nodeId, next.runId);\n\n // Start the run first (which increments pendingNodes), then decrement\n // pendingQueued to ensure the run context stays alive.\n this.startRun(nodeId, next, () => {\n setTimeout(processNext, 0);\n });\n this.decrementQueuedForPlans(next, nodeId);\n };\n\n processNext();\n }\n\n /**\n * Start a node execution run\n */\n private startRun(nodeId: string, plan: ExecutionPlan, onDone?: () => void): void {\n // Track run-contexts\n this.trackRunContextStart(nodeId, plan.runContextIdsForRun);\n\n // Setup execution controller\n const controller = this.createExecutionController(nodeId, plan.runId);\n\n // Handle concurrency mode\n this.applyConcurrencyMode(nodeId, controller, plan);\n\n // Setup timeout if needed\n const timeoutId = this.setupTimeout(controller, plan);\n\n // Create execution context\n const execCtx = this.createExecutionContext(\n nodeId,\n plan.effectiveInputs,\n plan.runId,\n controller.signal,\n plan.runContextIdsForRun,\n this.createEmitAndProgressHandlers(nodeId, plan),\n );\n\n // Execute\n this.executeNode(nodeId, execCtx, plan, controller, timeoutId, onDone);\n }\n\n /**\n * Track run-context start for pending nodes\n */\n private trackRunContextStart(nodeId: string, runContextIdsForRun?: Set<RunContextId>): void {\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n this.runContextManager.startNodeRun(id, nodeId);\n }\n }\n }\n\n /**\n * Decrement pendingQueued counters for plans' run-contexts.\n * Used when queued work is being started, dropped, or cancelled.\n */\n private decrementQueuedForPlans(plans: ExecutionPlan | ExecutionPlan[], nodeId: string): void {\n const plansArray = Array.isArray(plans) ? plans : [plans];\n for (const plan of plansArray) {\n if (plan.runContextIdsForRun) {\n for (const rcId of plan.runContextIdsForRun) {\n this.runContextManager.decrementQueued(rcId, nodeId);\n }\n }\n }\n }\n\n /**\n * Create execution controller and update node stats\n */\n private createExecutionController(nodeId: string, runId: string): AbortController {\n const controller = new AbortController();\n const now = Date.now();\n const node = this.graph.getNode(nodeId);\n\n this.graph.updateNodeStats(nodeId, {\n runs: (node?.stats.runs ?? 0) + 1,\n active: (node?.stats.active ?? 0) + 1,\n lastStartAt: now,\n progress: 0,\n });\n this.graph.addNodeController(nodeId, controller, runId);\n return controller;\n }\n\n /**\n * Apply concurrency mode (switch mode aborts other controllers)\n */\n private applyConcurrencyMode(nodeId: string, controller: AbortController, plan: ExecutionPlan): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n const controllers = this.graph.getNodeControllers(nodeId);\n for (const c of controllers) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n }\n\n /**\n * Setup timeout for execution if configured\n */\n private setupTimeout(controller: AbortController, plan: ExecutionPlan): NodeJS.Timeout | undefined {\n const policy = plan.policy ?? {};\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n return setTimeout(() => controller.abort(\"timeout\"), policy.timeoutMs);\n }\n return undefined;\n }\n\n /**\n * Create emit and progress handlers for execution context\n */\n private createEmitAndProgressHandlers(\n nodeId: string,\n plan: ExecutionPlan,\n ): {\n emitHandler: (handle: string, value: unknown) => void;\n reportProgress: (p: number) => void;\n } {\n const policy = plan.policy ?? {};\n return {\n emitHandler: (handle: string, value: unknown) => {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const m = policy.asyncConcurrency ?? \"switch\";\n // Drop emits from runs that were explicitly cancelled due to a\n // snapshot/undo/redo operation, regardless of asyncConcurrency.\n if (node.snapshotCancelledRunIds?.has(plan.runId)) return;\n if (m !== \"merge\" && plan.runId !== node.latestRunId) return;\n this.edgePropagator.propagate(nodeId, handle, value, plan.runContextIdsForRun);\n },\n reportProgress: (p: number) => {\n const progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.graph.updateNodeStats(nodeId, { progress });\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n progress,\n });\n },\n };\n }\n\n /**\n * Execute the node with retry logic and cleanup\n */\n private executeNode(\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n onDone?: () => void,\n ): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // Fire node-start event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-start\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n });\n ctx.log(\"debug\", \"node-start\", {\n inputs: node.inputs,\n effectiveInputs: plan.effectiveInputs,\n reason: plan.reason,\n });\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(plan.effectiveInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (\n reason === \"switch\" ||\n reason === \"snapshot\" ||\n reason === \"node-deleted\" ||\n reason === \"user-cancelled\"\n ) {\n return; // Cancellation events are emitted separately, skip error handling\n }\n }\n hadError = true;\n this.graph.updateNodeStats(nodeId, { lastError: err });\n const retry = plan.policy?.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"node-run\",\n nodeId,\n nodeTypeId: node.typeId,\n runId: plan.runId,\n err,\n });\n } finally {\n this.cleanupExecution(nodeId, ctx, plan, controller, timeoutId, hadError, onDone);\n }\n };\n\n exec(0);\n }\n\n /**\n * Cleanup after execution completes\n */\n private cleanupExecution(\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n hadError: boolean,\n onDone?: () => void,\n ): void {\n // Decrement pendingNodes count for all relevant run-contexts\n if (plan.runContextIdsForRun && plan.runContextIdsForRun.size > 0) {\n for (const id of plan.runContextIdsForRun) {\n this.runContextManager.finishNodeRun(id, nodeId);\n }\n }\n\n // Skip cleanup if node was deleted (cleanup already handled)\n if (!this.graph.hasNode(nodeId)) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n this.graph.removeNodeController(nodeId, controller);\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n const controllers = this.graph.getNodeControllers(nodeId);\n const lastEndAt = Date.now();\n const lastDurationMs = node.stats.lastStartAt && lastEndAt ? lastEndAt - node.stats.lastStartAt : undefined;\n this.graph.updateNodeStats(nodeId, {\n active: Math.max(0, controllers.size),\n lastEndAt,\n lastDurationMs,\n lastError: hadError ? node.stats.lastError : undefined,\n });\n\n // Track successful completion time (for detecting stale inputs)\n const isCancelled =\n controller.signal.aborted &&\n (controller.signal.reason === \"snapshot\" ||\n controller.signal.reason === \"node-deleted\" ||\n controller.signal.reason === \"user-cancelled\");\n if (!hadError && !isCancelled) {\n this.graph.setNodeLastSuccessAt(nodeId, Date.now());\n }\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\n if (!isCancelled) {\n if (node) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n durationMs: node.stats.lastDurationMs,\n });\n }\n }\n if (node) {\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n outputs: node.outputs,\n hadError,\n reason: plan.reason,\n });\n }\n\n if (onDone) onDone();\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(nodeId: string, reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const controllers = this.graph.getNodeControllers(nodeId);\n for (const controller of controllers) {\n const runId = node.controllerRunIds.get(controller);\n if (runId) {\n // Track cancelled runIds for snapshot and user-cancelled operations\n // (to drop emits from cancelled runs)\n if (reason === \"snapshot\" || reason === \"user-cancelled\") {\n this.graph.addSnapshotCancelledRunId(nodeId, runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: nodeId,\n typeId: node.typeId,\n runId,\n cancelled: true,\n });\n }\n try {\n controller.abort(reason);\n } catch {\n // ignore abort errors\n }\n }\n this.graph.clearNodeControllers(nodeId);\n this.graph.updateNodeStats(nodeId, { active: 0 });\n\n // Decrement pendingQueued for any queued items before clearing the queue\n if (node.queue.length > 0) {\n this.decrementQueuedForPlans(node.queue, nodeId);\n }\n this.graph.clearNodeQueue(nodeId);\n }\n\n /**\n * Cancel runs for multiple nodes.\n * Can be called for snapshot/undo/redo operations or user-initiated cancellation.\n */\n cancelNodeRuns(nodeIds: string[], reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n\n // Collect all downstream nodes to cancel\n for (let i = 0; i < queue.length; i++) {\n const nodeId = queue[i];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n\n this.graph.forEachEdge((edge) => {\n if (edge.source.nodeId === nodeId) {\n const targetId = edge.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n });\n }\n\n // Cancel runs for all affected nodes\n for (const nodeId of toCancel) {\n this.cancelNodeActiveRuns(nodeId, reason);\n\n const runSeq = this.graph.incrementNodeRunSeq(nodeId);\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n this.graph.setNodeLatestRunId(nodeId, `${nodeId}:${runSeq}:${now}:${suffix}`);\n }\n\n // Cancel nodes in run-contexts (exclude them from active run-contexts)\n for (const nodeId of toCancel) {\n // includeDownstream = false (already collected above)\n this.runContextManager.cancelNodeInRunContexts(nodeId, false);\n }\n }\n}\n","import type { Graph } from \"./Graph\";\nimport type { Registry } from \"../../builder/Registry\";\nimport type { RuntimeValidator, RuntimeValidationError } from \"./interfaces\";\nimport { formatNodeRef } from \"../utils\";\n\n/**\n * RuntimeValidatorManager component - manages runtime validators\n */\nexport class RuntimeValidatorManager {\n private validators: RuntimeValidator[] = [];\n\n constructor(\n private readonly graph: Graph,\n private registry?: Registry,\n ) {}\n\n /**\n * Set the registry (called when registry changes)\n */\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n /**\n * Register a runtime validator that will be called before node execution.\n * Validators are called in registration order - if any returns true, execution is blocked.\n */\n registerValidator(validator: RuntimeValidator): void {\n this.validators.push(validator);\n }\n\n /**\n * Unregister a runtime validator.\n */\n unregisterValidator(validator: RuntimeValidator): void {\n const index = this.validators.indexOf(validator);\n if (index >= 0) {\n this.validators.splice(index, 1);\n }\n }\n\n /**\n * Check if any runtime validator blocks execution for this node.\n * Returns RuntimeValidationError if execution should be blocked, null otherwise.\n */\n hasBlock(nodeId: string): RuntimeValidationError | null {\n if (!this.registry) return null;\n\n for (const validator of this.validators) {\n try {\n const result = validator(nodeId, this.graph, this.registry);\n if (result !== false) {\n // Validator returned an error object\n return result;\n }\n } catch (err) {\n // Don't let validator errors break execution - log and continue\n console.error(`Runtime validator error for node ${formatNodeRef(this.graph, nodeId)}:`, err);\n }\n }\n return null;\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RunMode,\n} from \"@bian-womp/spark-protocol\";\nimport type { NodeDisposeReason, RuntimeNodeStats } from \"../core/types\";\nimport { getInputDeclaredTypes } from \"../core/type-utils\";\nimport { Registry } from \"../builder/Registry\";\nimport { Graph } from \"./components/Graph\";\nimport { EventEmitter } from \"./components/EventEmitter\";\nimport { RunContextManager } from \"./components/RunContextManager\";\nimport { HandleResolver } from \"./components/HandleResolver\";\nimport { EdgePropagator } from \"./components/EdgePropagator\";\nimport { NodeExecutor } from \"./components/NodeExecutor\";\nimport { RuntimeValidatorManager } from \"./components/RuntimeValidatorManager\";\nimport { formatNodeRef } from \"./utils\";\nimport type {\n INodeExecutor,\n IRuntime,\n IEdgePropagator,\n RuntimeValidator,\n RuntimeValidationError,\n} from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type { RuntimeNode, RunContextId, RuntimeEdge } from \"./components/types\";\nimport { buildEdges, tryHandleResolving } from \"./components/graph-utils\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (e: RuntimeEventMap[K]) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\nexport interface RuntimeEventMap {\n value: RuntimeValue;\n invalidate: RuntimeInvalidate;\n error: RuntimeError;\n stats: RuntimeStats;\n}\n\n// Types are now imported from components/types.ts (re-exported above)\nexport class GraphRuntime implements IRuntime, INodeExecutor, IEdgePropagator {\n // Component instances\n private graph: Graph;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private handleResolver: HandleResolver;\n private edgePropagator: EdgePropagator;\n private nodeExecutor: NodeExecutor;\n private runtimeValidatorManager: RuntimeValidatorManager;\n\n // State\n private environment: Record<string, unknown> = {};\n private customNodeData: Record<string, Record<string, unknown>> = {};\n private runMode: RunMode | null = \"manual\";\n private pauseRefCount = 0;\n private persistentPauseToken: (() => void) | null = null;\n private handleResolvingSkippedRef: GraphDefinition | undefined;\n\n constructor() {\n // Initialize components\n this.eventEmitter = new EventEmitter();\n this.graph = new Graph(this.eventEmitter);\n this.runContextManager = new RunContextManager(this.graph, \"warn\");\n\n this.handleResolver = new HandleResolver(this.graph, this.eventEmitter, this.runContextManager, this);\n\n this.edgePropagator = new EdgePropagator(this.graph, this.eventEmitter, this.runContextManager, this, this);\n\n // Create NodeExecutor with EdgePropagator and HandleResolver\n this.nodeExecutor = new NodeExecutor(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver,\n this,\n this,\n );\n\n // Create RuntimeValidatorManager\n this.runtimeValidatorManager = new RuntimeValidatorManager(this.graph);\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown>; startPaused?: boolean },\n ): GraphRuntime {\n const gr = new GraphRuntime();\n if (opts?.startPaused) gr.pause();\n gr.environment = opts?.environment ?? {};\n gr.customNodeData = {};\n\n // Set registry and environment on components\n gr.graph.setRegistry(registry);\n gr.handleResolver.setRegistry(registry);\n gr.handleResolver.setEnvironment(gr.environment);\n gr.nodeExecutor.setEnvironment(gr.environment);\n gr.nodeExecutor.setCustomNodeData(gr.customNodeData);\n gr.runtimeValidatorManager.setRegistry(registry);\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = gr.isPaused()\n ? {\n resolved: new Map<string, ResolvedHandles>(),\n pending: new Set<string>(),\n }\n : tryHandleResolving(def, registry, gr.environment);\n if (gr.isPaused()) {\n gr.handleResolvingSkippedRef = def;\n }\n for (const [nodeId, handles] of initial.resolved) {\n gr.graph.setResolvedHandles(nodeId, handles);\n }\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n logLevel: desc.logLevel,\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContextIds: new Set(),\n lastInputAt: {},\n lastSuccessAt: undefined,\n };\n gr.graph.setNode(n.nodeId, rn);\n }\n\n // Instantiate edges\n const edges = buildEdges(def, registry, gr.graph);\n gr.graph.setEdges(edges);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) {\n gr.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(event: K, handler: RuntimeEventListener<K>): () => void {\n return this.eventEmitter.on(event, handler);\n }\n\n /**\n * Check if an event is an invalidate event that should trigger re-execution\n */\n private isInvalidateEvent(event: unknown): boolean {\n if (!event || typeof event !== \"object\") return false;\n\n // Check if event has action === \"invalidate\"\n const e = event as Record<string, unknown>;\n return e.action === \"invalidate\";\n }\n\n private executeNodeAutoRun(nodeId: string, opts?: { reason?: string }): void {\n const node = this.graph.getNode(nodeId);\n const shouldAutoRun = this.runMode === \"auto\" || node?.policy?.autoRun === true;\n const canExecute = this.graph.allInboundHaveValue(nodeId);\n if (!shouldAutoRun || !canExecute) return;\n\n let runContextIdsToUse = undefined;\n let runContextIdToRelease: RunContextId | undefined;\n if (this.runMode === \"manual\") {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, { propagate: false });\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n\n try {\n this.execute(nodeId, {\n runContextIds: runContextIdsToUse,\n reason: opts?.reason ?? \"executeNodeAutoRun\",\n });\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.graph.getNode(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n const registry = this.graph.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n let hasInbound = false;\n this.graph.forEachEdge((e) => {\n if (e.target.nodeId === nodeId && e.target.handle === handle) {\n hasInbound = true;\n }\n });\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graph.getResolvedHandles(nodeId);\n // Get declared types (may be union); prefer resolved handles over registry statics\n const declaredTypes = resolved\n ? getInputDeclaredTypes(resolved.inputs, handle)\n : desc\n ? getInputDeclaredTypes(desc.inputs, handle)\n : undefined;\n\n const typeIds = Array.isArray(declaredTypes) ? declaredTypes : declaredTypes ? [declaredTypes] : [];\n\n if (typeIds.length > 0) {\n const isValidForAny = typeIds.some((tId) => {\n const typeDesc = registry.types.get(tId);\n // If no validate function, consider it valid\n if (!typeDesc?.validate) return true;\n return typeDesc.validate(value);\n });\n\n if (value !== undefined && !isValidForAny) {\n const typeLabel = typeIds.join(\"|\");\n const errorMessage = `Invalid value for input ${formatNodeRef(\n this.graph,\n nodeId,\n )}.${handle} (type ${typeLabel}): ${JSON.stringify(value)}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n nodeTypeId: node.typeId,\n handle,\n typeId: typeLabel,\n value,\n message: errorMessage,\n });\n // Skip storing invalid value\n continue;\n }\n }\n }\n\n const prev = node.inputs[handle];\n const same = valuesEqual(prev, value);\n if (!same) {\n this.graph.updateNodeInput(nodeId, handle, value);\n anyChanged = true;\n }\n }\n // In auto mode, input updates can trigger execution; in manual mode they never should.\n // However, if autoRun policy is set, nodes run automatically even in manual mode.\n if (anyChanged) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"setInputs\" });\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.graph.getNode(nodeId);\n return node?.outputs[output];\n }\n\n launch(invalidate = false, startPaused = false): void {\n this.graph.forEachNode((node) => {\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const execCtx = this.nodeExecutor.createExecutionContext(\n node.nodeId,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal,\n );\n if (node.lifecycle?.prepare) {\n execCtx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, execCtx);\n execCtx.log(\"debug\", \"prepare-done\");\n }\n node.runtime.onActivated?.();\n });\n if (this.runMode === \"auto\" && invalidate) {\n for (const nodeId of this.graph.getNodeIds()) {\n if (this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId, { reason: \"launch\" });\n }\n }\n }\n if (startPaused) {\n this.pause();\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n // If event is an invalidate event, re-run the node with same inputs\n if (this.isInvalidateEvent(event)) {\n // Check if node has all inbound inputs (required for execution)\n if (this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId, { reason: \"triggerExternal\" });\n }\n return;\n }\n\n // Forward event to node's onExternalEvent handler for custom actions\n node.runtime.onExternalEvent?.(event, node.state);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.nodeExecutor.cancelNodeRuns(nodeIds);\n }\n\n getNodeIds(): string[] {\n return this.graph.getNodeIds();\n }\n\n getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.graph.getNode(nodeId);\n if (!node) return undefined;\n return {\n inputs: node.inputs,\n outputs: node.outputs,\n state: node.state,\n params: node.params,\n stats: node.stats,\n };\n }\n\n getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n this.handleResolver.setEnvironment(this.environment);\n this.nodeExecutor.setEnvironment(this.environment);\n for (const nodeId of this.graph.getNodeIds()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"setEnvironment\" });\n }\n }\n\n setCustomNodeData(customNodeData: Record<string, Record<string, unknown>>): void {\n this.customNodeData = { ...customNodeData };\n this.nodeExecutor.setCustomNodeData(this.customNodeData);\n }\n\n getCustomNodeData(): Record<string, Record<string, unknown>> {\n return { ...this.customNodeData };\n }\n\n /**\n * Register a runtime validator that will be called before node execution.\n * Validators are called in registration order - if any returns true, execution is blocked.\n */\n registerRuntimeValidator(validator: RuntimeValidator): void {\n this.runtimeValidatorManager.registerValidator(validator);\n }\n\n /**\n * Unregister a runtime validator.\n */\n unregisterRuntimeValidator(validator: RuntimeValidator): void {\n this.runtimeValidatorManager.unregisterValidator(validator);\n }\n\n /**\n * Check if any runtime validator blocks execution for this node.\n * Returns RuntimeValidationError if execution should be blocked, null otherwise.\n */\n hasRuntimeValidationBlock(nodeId: string): RuntimeValidationError | null {\n return this.runtimeValidatorManager.hasBlock(nodeId);\n }\n\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = [];\n this.graph.forEachNode((n) => {\n const resolved = this.graph.getResolvedHandles(n.nodeId);\n nodes.push({\n nodeId: n.nodeId,\n typeId: n.typeId,\n params: n.params ? { ...n.params } : undefined,\n resolvedHandles: resolved ? { ...resolved } : undefined,\n });\n });\n const edges: GraphEdgeDefinition[] = [];\n this.graph.forEachEdge((e) => {\n edges.push({\n id: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n typeId: e.typeId,\n });\n });\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n const allRunContexts = this.runContextManager.getAllRunContexts();\n if (allRunContexts.size > 0) {\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.runContextManager.getAllRunContexts().size === 0) {\n resolve();\n } else {\n setTimeout(check, 10);\n }\n };\n setTimeout(check, 10);\n });\n }\n\n const isIdle = (): boolean => {\n let idle = true;\n this.graph.forEachNode((n) => {\n if (n.activeControllers.size > 0 || n.queue.length > 0) {\n idle = false;\n }\n });\n return idle;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n async runFromHereContext(\n startNodeId: string,\n opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n reason?: string;\n },\n ): Promise<void> {\n const node = this.graph.getNode(startNodeId);\n if (!node) return;\n\n return new Promise<void>((resolve) => {\n const id = this.runContextManager.createRunContext(startNodeId, {\n resolve,\n ...opts,\n });\n this.graph.addNodeRunContextId(startNodeId, id);\n try {\n this.execute(startNodeId, {\n runContextIds: new Set([id]),\n reason: opts?.reason ?? \"runFromHereContext\",\n });\n } finally {\n this.runContextManager.releaseScheduling(id);\n }\n });\n }\n\n setRunMode(runMode: RunMode): void {\n this.runMode = runMode;\n }\n\n getRunMode(): RunMode | null {\n return this.runMode;\n }\n\n requestPause(): () => void {\n this.pauseRefCount++;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n this.pauseRefCount--;\n };\n }\n\n isPaused(): boolean {\n return this.pauseRefCount > 0;\n }\n\n pause(): void {\n if (!this.persistentPauseToken) {\n this.persistentPauseToken = this.requestPause();\n }\n }\n\n resume(): void {\n if (this.persistentPauseToken) {\n this.persistentPauseToken();\n this.persistentPauseToken = null;\n\n // If handle resolving was skipped, trigger it now\n if (this.handleResolvingSkippedRef) {\n const registry = this.graph.getRegistry();\n if (registry) {\n const result = tryHandleResolving(this.handleResolvingSkippedRef, registry, this.environment);\n for (const [nodeId, handles] of result.resolved) {\n this.graph.setResolvedHandles(nodeId, handles);\n }\n for (const nodeId of result.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n this.handleResolvingSkippedRef = undefined;\n }\n }\n }\n\n setTargetInput(edge: RuntimeEdge, value: unknown, reason: string): void {\n this.graph.updateNodeInput(edge.target.nodeId, edge.target.handle, value);\n this.handleResolver.scheduleRecomputeHandles(edge.target.nodeId);\n this.executeNodeAutoRun(edge.target.nodeId, { reason });\n }\n\n copyOutputs(fromNodeId: string, toNodeId: string, options?: { dry?: boolean }): void {\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n this.hydrate({ outputs: { [toNodeId]: { ...fromNode.outputs } } }, { invalidate: !options?.dry });\n this.handleResolver.scheduleRecomputeHandles(toNodeId);\n this.executeNodeAutoRun(toNodeId, { reason: \"copyOutputs\" });\n }\n\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { invalidate?: boolean },\n ): void {\n const releasePause = this.requestPause();\n try {\n const ins = payload?.inputs || {};\n const nodesWithChangedInputs = new Set<string>();\n for (const [nodeId, map] of Object.entries(ins)) {\n if (!this.graph.hasNode(nodeId)) continue;\n let nodeChanged = false;\n for (const [h, v] of Object.entries(map || {})) {\n const node = this.graph.getNode(nodeId);\n const prev = node?.inputs[h];\n const clonedValue = structuredClone(v);\n const same = valuesEqual(prev, clonedValue);\n if (!same) {\n this.graph.updateNodeInput(nodeId, h, clonedValue, false);\n nodeChanged = true;\n }\n }\n if (nodeChanged) {\n nodesWithChangedInputs.add(nodeId);\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n if (!this.graph.hasNode(nodeId)) continue;\n for (const [h, v] of Object.entries(map || {})) {\n const clonedValue = structuredClone(v);\n this.graph.updateNodeOutput(nodeId, h, clonedValue);\n }\n }\n // Trigger handle resolution for nodes with changed inputs\n for (const nodeId of nodesWithChangedInputs) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n if (opts?.invalidate) {\n for (const nodeId of this.graph.getNodeIds()) {\n this.invalidateDownstream(nodeId);\n }\n }\n } finally {\n releasePause();\n }\n }\n\n update(def: GraphDefinition, registry: Registry): void {\n {\n // Delete nodes that are no longer in the definition\n const afterIds = new Set(def.nodes.map((n) => n.nodeId));\n const beforeIds = new Set(this.graph.getNodeIds());\n for (const nodeId of Array.from(beforeIds)) {\n if (!afterIds.has(nodeId)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n this.nodeExecutor.cancelNodeActiveRuns(nodeId, \"node-deleted\");\n this.runContextManager.cancelNodeInRunContexts(nodeId, true);\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => this.graph.updateNodeState(node.nodeId, next),\n disposeReason: \"node-removed\",\n });\n this.graph.deleteNode(nodeId);\n this.edgePropagator.clearArrayBuckets(nodeId);\n }\n }\n }\n\n {\n // Add or update nodes that are in the definition\n for (const n of def.nodes) {\n const existing = this.graph.getNode(n.nodeId);\n if (!existing) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const newNode: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContextIds: new Set(),\n lastInputAt: {},\n lastSuccessAt: undefined,\n };\n this.graph.setNode(n.nodeId, newNode);\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(newNode.nodeId);\n const ctrl = new AbortController();\n const execCtx = this.nodeExecutor.createExecutionContext(\n newNode.nodeId,\n effectiveInputs,\n `${newNode.nodeId}:init`,\n ctrl.signal,\n );\n if (newNode.lifecycle?.prepare) {\n execCtx.log(\"debug\", \"prepare-start\");\n newNode.lifecycle.prepare(newNode.params ?? {}, execCtx);\n execCtx.log(\"debug\", \"prepare-done\");\n }\n newNode.runtime.onActivated?.();\n } else {\n this.graph.updateNodeParams(n.nodeId, n.params);\n // Re-merge policy when params change (params.policy can override descriptor/category policy)\n const desc = registry.nodes.get(existing.typeId);\n const cat = registry.categories.get(desc?.categoryId ?? \"\");\n this.graph.updateNodePolicy(n.nodeId, {\n ...cat?.policy,\n ...desc?.policy,\n ...n.params?.policy,\n });\n // Initialize stats if missing\n if (!existing.stats) {\n this.graph.updateNodeStats(n.nodeId, {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n });\n }\n }\n }\n }\n\n {\n const beforeInbound = new Map<string, Set<string>>();\n const beforeOutTargets = new Map<string, Map<string, Set<string>>>();\n\n this.graph.forEachEdge((e) => {\n // Build beforeInbound map\n const set = beforeInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n beforeInbound.set(e.target.nodeId, set);\n\n // Build beforeOutTargets map\n const tmap = beforeOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n beforeOutTargets.set(e.source.nodeId, tmap);\n });\n\n {\n // Update handles and edges\n const result = this.isPaused()\n ? {\n resolved: new Map<string, ResolvedHandles>(),\n pending: new Set<string>(),\n }\n : tryHandleResolving(def, registry, this.environment);\n if (this.isPaused()) {\n this.handleResolvingSkippedRef = def;\n }\n\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n\n for (const [nodeId, newHandles] of result.resolved) {\n const oldHandles = this.graph.getResolvedHandles(nodeId);\n if (!oldHandles || JSON.stringify(oldHandles) !== JSON.stringify(newHandles)) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n for (const [nodeId, handles] of result.resolved) {\n this.graph.setResolvedHandles(nodeId, handles);\n }\n\n const afterEdges = buildEdges(def, registry, this.graph);\n this.graph.setEdges(afterEdges);\n\n for (const nodeId of result.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n if (Object.keys(changedHandles).length > 0) {\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n }\n\n {\n // Update inputs and propagate changes\n const afterInbound = new Map<string, Set<string>>();\n this.graph.forEachEdge((e) => {\n const set = afterInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n afterInbound.set(e.target.nodeId, set);\n });\n\n // Propagate changes on edges removed\n for (const [nodeId, beforeSet] of beforeInbound) {\n const currSet = afterInbound.get(nodeId) ?? new Set<string>();\n if (!this.graph.hasNode(nodeId)) continue;\n let changed = false;\n for (const handle of Array.from(beforeSet)) {\n if (!currSet.has(handle)) {\n const node = this.graph.getNode(nodeId);\n if (node && handle in node.inputs) {\n this.graph.updateNodeInput(nodeId, handle, undefined);\n changed = true;\n }\n }\n }\n\n if (changed) {\n this.edgePropagator.clearArrayBuckets(nodeId);\n // Trigger handle resolution when inputs are removed\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n this.executeNodeAutoRun(nodeId, { reason: \"graphUpdate\" });\n }\n }\n\n // Propagate changes on edges added\n const afterOutTargets = new Map<string, Map<string, Set<string>>>();\n this.graph.forEachEdge((e) => {\n const targetMap = afterOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const targetSet = targetMap.get(e.source.handle) ?? new Set<string>();\n targetSet.add(`${e.target.nodeId}.${e.target.handle}`);\n targetMap.set(e.source.handle, targetSet);\n afterOutTargets.set(e.source.nodeId, targetMap);\n });\n\n const setsEqual = (a?: Set<string>, b?: Set<string>) => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n };\n\n const nodesToCheck = new Set<string>([\n ...Array.from(beforeOutTargets.keys()),\n ...Array.from(afterOutTargets.keys()),\n ]);\n\n for (const nodeId of nodesToCheck) {\n const beforeMap = beforeOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const afterMap = afterOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([...Array.from(beforeMap.keys()), ...Array.from(afterMap.keys())]);\n for (const handle of handles) {\n const beforeTargetSet = beforeMap.get(handle) ?? new Set<string>();\n const afterTargetSet = afterMap.get(handle) ?? new Set<string>();\n if (!setsEqual(beforeTargetSet, afterTargetSet)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined) {\n let runContextIdsToUse = undefined;\n let runContextIdToRelease: RunContextId | undefined;\n\n if (this.runMode === \"manual\") {\n runContextIdToRelease = this.runContextManager.createRunContext(nodeId, {\n propagate: false,\n });\n runContextIdsToUse = new Set([runContextIdToRelease]);\n }\n try {\n this.propagate(nodeId, handle, val, runContextIdsToUse);\n } finally {\n if (runContextIdToRelease) {\n this.runContextManager.releaseScheduling(runContextIdToRelease);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n dispose(reason: NodeDisposeReason = \"runtime-dispose\"): void {\n this.runContextManager.resolveAll();\n\n this.graph.forEachNode((node) => {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => this.graph.updateNodeState(node.nodeId, next),\n disposeReason: reason,\n });\n });\n this.graph.clear();\n }\n\n execute(\n nodeId: string,\n opts?: {\n runContextIds?: Set<RunContextId>;\n canSkipHandleResolution?: boolean;\n reason?: string;\n },\n ): void {\n this.nodeExecutor.execute(nodeId, opts);\n }\n\n propagate(srcNodeId: string, srcHandle: string, value: unknown, runContextIds?: Set<RunContextId>): void {\n this.edgePropagator.propagate(srcNodeId, srcHandle, value, runContextIds);\n }\n\n invalidateDownstream(nodeId: string): void {\n this.edgePropagator.invalidateDownstream(nodeId);\n }\n}\n","import type { GraphDefinition, GraphNodeDefinition, ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputDeclaredTypes, mergeInputHandleDescriptors } from \"../core/type-utils\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n startPaused?: boolean;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // Precompute effective handle maps (registry statics merged with per-node resolvedHandles)\n const nodeById = new Map<string, GraphNodeDefinition>();\n const effByNodeId = new Map<string, Omit<ResolvedHandles, \"inputDefaults\">>();\n\n const getEffectiveHandles = (n?: GraphNodeDefinition): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n\n // Merge inputs properly, handling union types and metadata\n const inputs: Record<string, any> = {};\n\n // First, add all static handles\n if (desc?.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n\n // Then, merge resolved handles (which may override/extend static handles)\n if (resolved.inputs) {\n for (const [handle, resolvedDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = desc?.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, resolvedDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n return { inputs, outputs };\n };\n\n const normOut = (decl: string | string[] | undefined): string[] =>\n Array.isArray(decl) ? decl : decl ? [decl] : [];\n\n const getEnumTypes = (decl: string | string[] | undefined): string[] =>\n normOut(decl).filter((t) => t.startsWith(\"enum:\"));\n\n const hasArrayType = (decl: string | string[] | undefined): boolean => normOut(decl).some((t) => t.endsWith(\"[]\"));\n\n const canFlow = (from: string | string[] | undefined, to?: string | string[]): boolean => {\n if (!to || !from) return true;\n const srcTypes = Array.isArray(from) ? from : [from];\n const dstTypes = Array.isArray(to) ? to : [to];\n return srcTypes.some((s) => dstTypes.some((t) => s === t || !!this.registry.canCoerce(s, t)));\n };\n\n // Helper to validate enum value\n const validateEnumValue = (typeId: string, value: unknown, nodeId: string, handle?: string): boolean => {\n if (!typeId.startsWith(\"enum:\")) return true; // Not an enum type\n const enumDef = this.registry.enums.get(typeId);\n if (!enumDef) return true; // Enum not registered, skip validation\n if (typeof value !== \"number\") return false; // Enum values must be numbers\n return enumDef.valueToLabel.has(value);\n };\n\n const pushIssue = (\n level: \"error\" | \"warning\",\n code: string,\n message: string,\n data?: Partial<ValidationIssueData>,\n ) => {\n issues.push({ level, code, message, data });\n };\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n pushIssue(\"error\", \"NODE_ID_DUP\", `Duplicate nodeId ${n.nodeId}`, {\n nodeId: n.nodeId,\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n nodeById.set(n.nodeId, n);\n effByNodeId.set(n.nodeId, getEffectiveHandles(n));\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n pushIssue(\"error\", \"NODE_TYPE_MISSING\", `Unknown node type ${n.typeId}`, {\n typeId: n.typeId,\n nodeId: n.nodeId,\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\"error\", \"CATEGORY_MISSING\", `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`);\n }\n\n // Validate enum values in node params\n if (n.params) {\n const effectiveHandles = getEffectiveHandles(n);\n for (const [paramKey, paramValue] of Object.entries(n.params)) {\n // Skip policy and other non-input params\n if (paramKey === \"policy\") continue;\n\n // Check if this param corresponds to an input handle\n const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, paramKey);\n const enumTypes = getEnumTypes(declaredTypes);\n if (\n enumTypes.length > 0 &&\n typeof paramValue === \"number\" &&\n !enumTypes.some((et) => validateEnumValue(et, paramValue, n.nodeId, paramKey))\n ) {\n const enumDef = this.registry.enums.get(enumTypes[0]);\n const validValues = enumDef ? Array.from(enumDef.valueToLabel.keys()).join(\", \") : \"unknown\";\n pushIssue(\n \"error\",\n \"ENUM_VALUE_INVALID\",\n `Node ${n.nodeId} param ${paramKey} has invalid enum value ${paramValue}. Valid values: ${validValues}`,\n {\n nodeId: n.nodeId,\n input: paramKey,\n typeId: enumTypes.join(\"|\"),\n },\n );\n }\n }\n }\n\n // Validate enum values in input defaults\n const resolved = n.resolvedHandles;\n if (resolved?.inputDefaults) {\n const effectiveHandles = getEffectiveHandles(n);\n for (const [handle, defaultValue] of Object.entries(resolved.inputDefaults)) {\n const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, handle);\n const enumTypes = getEnumTypes(declaredTypes);\n if (\n enumTypes.length > 0 &&\n typeof defaultValue === \"number\" &&\n !enumTypes.some((et) => validateEnumValue(et, defaultValue, n.nodeId, handle))\n ) {\n const enumDef = this.registry.enums.get(enumTypes[0]);\n const validValues = enumDef ? Array.from(enumDef.valueToLabel.keys()).join(\", \") : \"unknown\";\n pushIssue(\n \"warning\",\n \"ENUM_DEFAULT_INVALID\",\n `Node ${n.nodeId} input default ${handle} has invalid enum value ${defaultValue}. Valid values: ${validValues}`,\n {\n nodeId: n.nodeId,\n input: handle,\n typeId: enumTypes.join(\"|\"),\n },\n );\n }\n }\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n // Track which inbound (nodeId::handle) are declared as array inputs, to allow multi-inbound without warning\n const inboundArrayOk = new Set<string>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n pushIssue(\"error\", \"EDGE_ID_DUP\", `Duplicate edge id ${e.id}`, {\n edgeId: e.id,\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = nodeById.get(e.source.nodeId);\n const dstNode = nodeById.get(e.target.nodeId);\n if (!srcNode)\n pushIssue(\"error\", \"EDGE_SOURCE_MISSING\", `Edge ${e.id} source node missing`, {\n edgeId: e.id,\n });\n if (!dstNode)\n pushIssue(\"error\", \"EDGE_TARGET_MISSING\", `Edge ${e.id} target node missing`, {\n edgeId: e.id,\n });\n // Effective handle declarations\n const srcEff = effByNodeId.get(e.source.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const dstEff = effByNodeId.get(e.target.nodeId) || {\n inputs: {},\n outputs: {},\n };\n // Validate explicit type if provided\n if (e.typeId) {\n const type = this.registry.types.get(e.typeId);\n if (!type) {\n pushIssue(\"error\", \"TYPE_MISSING\", `Edge ${e.id} explicit type ${e.typeId} is missing or unknown`, {\n edgeId: e.id,\n });\n }\n }\n\n if (srcNode) {\n if (!(e.source.handle in srcEff.outputs)) {\n pushIssue(\n \"error\",\n \"OUTPUT_MISSING\",\n `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle },\n );\n }\n const declaredArr = normOut(srcEff.outputs[e.source.handle]);\n if (declaredArr.length > 0) {\n // Check if explicit type matches source output\n if (e.typeId && !canFlow(declaredArr, e.typeId)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} explicit type ${e.typeId} mismatches source output ${srcNode.typeId}.${\n e.source.handle\n } (${declaredArr.join(\"|\")}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n typeId: e.typeId,\n },\n );\n }\n }\n }\n if (dstNode) {\n if (!(e.target.handle in dstEff.inputs)) {\n pushIssue(\n \"error\",\n \"INPUT_MISSING\",\n `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle },\n );\n }\n // Private inputs should not accept edges\n if (isInputPrivate(dstEff.inputs, e.target.handle)) {\n pushIssue(\n \"error\",\n \"INPUT_PRIVATE\",\n `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle },\n );\n }\n const declaredIn = getInputDeclaredTypes(dstEff.inputs, e.target.handle) as string | string[] | undefined;\n const declaredInArr = normOut(declaredIn);\n if (declaredInArr.length > 0) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as string | string[] | undefined;\n const srcArr = normOut(srcDeclared);\n if (srcArr.length > 0 && !canFlow(srcArr, declaredInArr)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\"|\")} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredInArr.join(\"|\")})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredInArr.join(\"|\"),\n typeId: srcArr.join(\"|\"),\n },\n );\n }\n } else if (e.typeId && !canFlow([e.typeId], declaredInArr)) {\n // External source with explicit type\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} explicit type ${e.typeId} mismatches target input ${\n dstNode.typeId\n }.${e.target.handle} (${declaredInArr.join(\"|\")}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredInArr.join(\"|\"),\n typeId: e.typeId,\n },\n );\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n // If the target input is declared as an array type, allow multi-inbound (runtime will append)\n if (dstNode) {\n const declaredIn = getInputDeclaredTypes(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle,\n );\n if (hasArrayType(declaredIn)) {\n inboundArrayOk.add(inboundKey);\n }\n }\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1 && !inboundArrayOk.has(key)) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string,\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string | string[]> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode ? this.registry.nodes.get(innerNode.typeId) : undefined;\n const typeIds = innerDesc ? getInputDeclaredTypes(innerDesc.inputs, map.handle) : undefined;\n inputTypes[outerIn] = typeIds ?? \"unknown\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode ? this.registry.nodes.get(innerNode.typeId) : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"unknown\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import type { RunMode } from \"@bian-womp/spark-protocol\";\nimport { GraphRuntime } from \"./GraphRuntime\";\nimport { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\n\n/**\n * Unified Engine implementation that handles both manual and auto run modes.\n * - Manual mode: Nodes execute only when explicitly called via computeNode/runFromHere (unless paused)\n * - Auto mode: Nodes automatically execute when inputs change (unless paused)\n */\nexport class LocalEngine implements Engine {\n constructor(\n protected readonly graphRuntime: GraphRuntime,\n runMode?: RunMode,\n ) {\n this.setRunMode(runMode ?? \"manual\");\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>, options?: { dry?: boolean }): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.setInputs(nodeId, inputs);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown, options?: { dry?: boolean }): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.triggerExternal(nodeId, event);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n }\n\n on<K extends EngineEventName>(event: K, handler: EngineEventListener<K>): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.graphRuntime.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(fromNodeId: string, toNodeId: string, options?: { dry?: boolean }): void {\n this.graphRuntime.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n dispose(): void {\n // this.graphRuntime.dispose();\n }\n\n launch(invalidate?: boolean, runMode?: RunMode, startPaused?: boolean): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate, startPaused);\n }\n\n /**\n * Run only this node, no downstream propagation.\n * Works in both modes, but typically only used in manual mode.\n * @param nodeId - The node to run\n * @param options - Execution options\n * @param options.skipPropagateValues - If true, don't set inputs of linked nodes (default: false)\n */\n async computeNode(nodeId: string, options?: { skipPropagateValues?: boolean }): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\n reason: \"computeNode\",\n });\n }\n\n /**\n * Run this node and all dynamically reachable downstream nodes.\n * Works in both modes, but typically only used in manual mode.\n * Uses run-context system for dynamic graph updates.\n */\n async runFromHere(nodeId: string): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n reason: \"runFromHere\",\n });\n }\n\n setRunMode(runMode: RunMode): void {\n this.graphRuntime.setRunMode(runMode);\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>,\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, any> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n onExternalEvent(event, state) {\n try {\n const e: any = event;\n // Preferred: call a function on state keyed by e.action\n const action = e?.action;\n if (action && typeof state?.[action] === \"function\") {\n const fn = state[action] as (...args: any[]) => any;\n // Normalize args: prefer explicit args array, else wrap single value;\n let args: any[] = [];\n if (Array.isArray(e?.args)) args = [...e.args];\n else if (e?.args !== undefined) args = [e.args];\n else if (e?.params !== undefined) args = [e.params];\n void fn(...args);\n return;\n }\n console.warn(\"Unsupported external event\", JSON.stringify(event));\n } catch {\n console.warn(\"Error handling external event\", JSON.stringify(event));\n }\n },\n }),\n policy: { asyncConcurrency: \"switch\" },\n};\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry,\n): NodeCategoryDescriptor<CompositeImpl, { inner?: GraphRuntime; unsub?: () => void }> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer inputs => batch per inner node to avoid extra runs\n const grouped: Record<string, Record<string, unknown>> = {};\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs) {\n const nodeMap = (grouped[map.nodeId] = grouped[map.nodeId] || {});\n nodeMap[map.handle] = inputs[inHandle];\n }\n }\n for (const [nodeId, map] of Object.entries(grouped)) {\n inner.setInputs(nodeId, map);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n});\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, NodeContext } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: any): number[] => (Array.isArray(v) ? (v as number[]) : [Number(v)]);\n\nconst broadcast = (a: number[] | number, b: number[] | number): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\n\nconst asBoolArray = (v: any): boolean[] => (Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)]);\n\nconst broadcastBool = (a: boolean[] | boolean, b: boolean[] | boolean): [boolean[], boolean[]] => {\n const aa = asBoolArray(a);\n const bb = asBoolArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? false), new Array(len).fill(bb[0] ?? false)];\n};\n\nconst clamp = (x: number, min: number, max: number) => Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\n// JSON Pointer helpers (RFC 6901 subset)\nfunction jsonPointerGet(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return obj;\n if (!pointer.startsWith(\"/\")) return undefined;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n let cur: any = obj;\n for (const key of parts) {\n if (cur === undefined || cur === null) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction jsonPointerSet(obj: any, pointer: string, value: any): any {\n if (!pointer || pointer === \"/\") return value;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(cur) && key === \"-\") cur.push(value);\n else cur[key] = value;\n } else {\n const next = cur[key];\n if (next === undefined || next === null) {\n // create container heuristically\n const nextKey = parts[i + 1];\n cur[key] = typeof nextKey === \"string\" && /^[0-9]+$/.test(nextKey) ? [] : {};\n }\n cur = cur[key];\n }\n }\n return root;\n}\n\nfunction jsonPointerRemove(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return undefined;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i];\n if (cur === undefined || cur === null) return root;\n cur = cur[key];\n }\n const last = parts[parts.length - 1];\n if (Array.isArray(cur)) {\n const idx = last === \"-\" ? cur.length - 1 : Number(last);\n if (Number.isFinite(idx)) cur.splice(idx as number, 1);\n } else if (cur && typeof cur === \"object\") {\n delete cur[last];\n }\n return root;\n}\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) && Array.isArray(b)) return [...a, ...b];\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) {\n out[k] = k in out ? deepMerge(out[k], v) : v;\n }\n return out;\n }\n return b;\n}\n\n// JSON helpers\nconst isPlainObject = (v: any): v is Record<string, any> => {\n if (v === null || typeof v !== \"object\") return false;\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n};\n\nconst isJson = (v: any): boolean => {\n if (v === null) return true;\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return true;\n if (Array.isArray(v)) return v.every(isJson);\n if (isPlainObject(v)) return Object.values(v).every(isJson);\n return false;\n};\n\n// Export operation constants for use in examples and tests\nexport const BaseMathOperation = {\n Add: 0,\n Subtract: 1,\n Multiply: 2,\n Divide: 3,\n Min: 4,\n Max: 5,\n Modulo: 6,\n Power: 7,\n Round: 8,\n Floor: 9,\n Ceil: 10,\n Abs: 11,\n Sum: 12,\n Avg: 13,\n MinAll: 14,\n MaxAll: 15,\n Sin: 16,\n Cos: 17,\n Tan: 18,\n Asin: 19,\n Acos: 20,\n Atan: 21,\n Sqrt: 22,\n Exp: 23,\n Log: 24,\n} as const;\n\nexport const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n} as const;\n\nexport const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n} as const;\n\nexport function setupBasicGraphRegistry(id?: string): Registry {\n const registry = new Registry(id);\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n bakeTarget: { nodeTypeId: \"base.input.number\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n bakeTarget: { nodeTypeId: \"base.input.bool\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n bakeTarget: { nodeTypeId: \"base.input.string\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n // Generic object value (JSON-compatible; object/array/primitive/null)\n registry.registerType(\n {\n id: \"base.object\",\n validate: (v) => isJson(v),\n bakeTarget: { nodeTypeId: \"base.input.object\", inputHandle: \"Value\" },\n },\n { withArray: false },\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) => Array.isArray(v) && v.length === 3 && v.every((x) => typeof x === \"number\"),\n bakeTarget: { nodeTypeId: \"base.input.vec3\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true },\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.float\", (value) => {\n const v = value as [number, number, number];\n return Math.hypot(Number(v[0] ?? 0), Number(v[1] ?? 0), Number(v[2] ?? 0));\n });\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Object <-> String\n registry.registerCoercion(\"base.string\", \"base.object\", (v) => {\n return v as string;\n });\n\n registry.registerCoercion(\"base.object\", \"base.string\", (v) => {\n if (typeof v === \"string\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.bool\", \"base.object\", (v) => {\n return v as boolean;\n });\n\n registry.registerCoercion(\"base.object\", \"base.bool\", (v) => {\n if (typeof v === \"boolean\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.float\", \"base.object\", (v) => {\n return v as number;\n });\n\n registry.registerCoercion(\"base.object\", \"base.float\", (v) => {\n if (typeof v === \"number\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.object\", (v) => {\n return v as [number, number, number];\n });\n\n registry.registerCoercion(\"base.object\", \"base.vec3\", (v) => {\n try {\n if (Array.isArray(v) && v.length === 3 && v.every((x) => typeof x === \"number\")) {\n return v as [number, number, number];\n }\n return undefined;\n } catch {\n return undefined;\n }\n });\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"enum:base.math.operation\",\n options: Object.entries(BaseMathOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"enum:base.compare.operation\",\n options: Object.entries(BaseCompareOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Logic Operation\n registry.registerEnum({\n id: \"enum:base.logic.operation\",\n options: Object.entries(BaseLogicOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Number\n registry.registerNode({\n id: \"base.input.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n policy: { autoRun: true },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.string\",\n categoryId: \"compute\",\n inputs: { Value: \"base.string\" },\n outputs: { Result: \"base.string\" },\n policy: { autoRun: true },\n impl: (ins: { Value: string }) => ({ Result: String(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.bool\",\n categoryId: \"compute\",\n inputs: { Value: \"base.bool\" },\n outputs: { Result: \"base.bool\" },\n policy: { autoRun: true },\n impl: (ins: { Value: boolean }) => ({ Result: Boolean(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.object\",\n categoryId: \"compute\",\n inputs: { Value: \"base.object\" },\n outputs: { Result: \"base.object\" },\n policy: { autoRun: true },\n impl: (ins: { Value: any }) => ({ Result: ins.Value }),\n });\n\n registry.registerNode({\n id: \"base.input.vec3\",\n categoryId: \"compute\",\n inputs: { Value: \"base.vec3\" },\n outputs: { Result: \"base.vec3\" },\n policy: { autoRun: true },\n impl: (ins: { Value: [number, number, number] }) => ({ Result: ins.Value }),\n });\n\n // JSON parser node: base.stringToObject\n registry.registerNode({\n id: \"base.string.toObject\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Object: \"base.object\" },\n impl: (ins: { Text?: string }) => {\n const t = ins.Text ?? \"\";\n try {\n const obj = JSON.parse(t);\n return { Object: obj };\n } catch {\n return { Object: undefined };\n }\n },\n });\n\n registry.registerNode({\n id: \"base.object.toString\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Object?: any }) => {\n return { Text: JSON.stringify(ins.Object) };\n },\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n inputDefaults: {\n Factor: 0.5,\n },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax)) : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n // Registry-level defaults: Add by default, A=[1], B=[1]\n inputDefaults: { Operation: 0, A: [1], B: [1] },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const a = asArray(ins.A ?? []);\n const b = asArray(ins.B ?? []);\n const op = Number(ins.Operation ?? BaseMathOperation.Add);\n\n const unaryByOp: Record<number, (x: number) => number> = {\n [BaseMathOperation.Round]: (x) => Math.round(x),\n [BaseMathOperation.Floor]: (x) => Math.floor(x),\n [BaseMathOperation.Ceil]: (x) => Math.ceil(x),\n [BaseMathOperation.Abs]: (x) => Math.abs(x),\n [BaseMathOperation.Sin]: (x) => Math.sin(x),\n [BaseMathOperation.Cos]: (x) => Math.cos(x),\n [BaseMathOperation.Tan]: (x) => Math.tan(x),\n [BaseMathOperation.Asin]: (x) => Math.asin(x),\n [BaseMathOperation.Acos]: (x) => Math.acos(x),\n [BaseMathOperation.Atan]: (x) => Math.atan(x),\n [BaseMathOperation.Sqrt]: (x) => Math.sqrt(x),\n [BaseMathOperation.Exp]: (x) => Math.exp(x),\n [BaseMathOperation.Log]: (x) => Math.log(x),\n };\n if (unaryByOp[op]) return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) => arr.reduce((s, x) => s + Number(x || 0), 0),\n [BaseMathOperation.Avg]: (arr) => {\n const sum = arr.reduce((s, x) => s + Number(x || 0), 0);\n return arr.length ? sum / arr.length : 0;\n },\n [BaseMathOperation.MinAll]: (arr) => (arr.length ? Math.min(...arr.map((x) => Number(x))) : 0),\n [BaseMathOperation.MaxAll]: (arr) => (arr.length ? Math.max(...arr.map((x) => Number(x))) : 0),\n };\n if (aggregateByOp[op] !== undefined) return { Result: [aggregateByOp[op](a)] };\n\n const binaryByOp: Record<number, (x: number, y: number) => number> = {\n [BaseMathOperation.Add]: (x, y) => x + y,\n [BaseMathOperation.Subtract]: (x, y) => x - y,\n [BaseMathOperation.Multiply]: (x, y) => x * y,\n [BaseMathOperation.Divide]: (x, y) => x / (y || 1),\n [BaseMathOperation.Min]: (x, y) => Math.min(x, y),\n [BaseMathOperation.Max]: (x, y) => Math.max(x, y),\n [BaseMathOperation.Modulo]: (x, y) => (y ? x % y : 0),\n [BaseMathOperation.Power]: (x, y) => Math.pow(x, y),\n };\n const fn = binaryByOp[op] || binaryByOp[BaseMathOperation.Add];\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : (a[i] ?? 0);\n const bx = b.length === 1 && len > 1 ? b[0] : (b[i] ?? 0);\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? BaseCompareOperation.Equal);\n const compareByOp: Record<number, (x: number, y: number) => boolean> = {\n [BaseCompareOperation.LessThan]: (x, y) => x < y,\n [BaseCompareOperation.LessThanOrEqual]: (x, y) => x <= y,\n [BaseCompareOperation.GreaterThan]: (x, y) => x > y,\n [BaseCompareOperation.GreaterThanOrEqual]: (x, y) => x >= y,\n [BaseCompareOperation.Equal]: (x, y) => x === y,\n [BaseCompareOperation.NotEqual]: (x, y) => x !== y,\n };\n const fn = compareByOp[op] || compareByOp[BaseCompareOperation.Equal];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n // Logic\n registry.registerNode({\n id: \"base.logic\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.logic.operation\",\n A: \"base.bool[]\",\n B: \"base.bool[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n inputDefaults: { Operation: BaseLogicOperation.Not },\n impl: (ins: { Operation?: number; A?: boolean[]; B?: boolean[] }) => {\n const op = Number(ins.Operation ?? BaseLogicOperation.Not);\n if (op === BaseLogicOperation.Not) {\n const a = asBoolArray(ins.A ?? []);\n return { Result: a.map((x) => !x) };\n }\n const [a, b] = broadcastBool(ins.A ?? [], ins.B ?? []);\n const logicByOp: Record<number, (x: boolean, y: boolean) => boolean> = {\n [BaseLogicOperation.And]: (x, y) => x && y,\n [BaseLogicOperation.Or]: (x, y) => x || y,\n [BaseLogicOperation.Xor]: (x, y) => Boolean(x ? !y : y),\n };\n const fn = logicByOp[op] || logicByOp[BaseLogicOperation.And];\n return {\n Result: a.map((x, i) => fn(Boolean(x), Boolean(b[i] ?? false))),\n };\n },\n });\n\n // Strings\n registry.registerNode({\n id: \"base.string.length\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Text?: string }) => ({\n Length: String(ins.Text || \"\").length,\n }),\n });\n\n registry.registerNode({\n id: \"base.string.op\",\n categoryId: \"compute\",\n inputs: { Op: \"base.string\", Text: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Op?: string; Text?: string }) => {\n const op = String(ins.Op || \"trim\").toLowerCase();\n const t = String(ins.Text || \"\");\n if (op === \"lower\") return { Text: t.toLowerCase() };\n if (op === \"upper\") return { Text: t.toUpperCase() };\n return { Text: t.trim() };\n },\n });\n\n registry.registerNode({\n id: \"base.string.split\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\", Sep: \"base.string\" },\n outputs: { Parts: \"base.string[]\" },\n impl: (ins: { Text?: string; Sep?: string }) => {\n const t = String(ins.Text || \"\");\n const sep = String(ins.Sep || \",\");\n return { Parts: t.split(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.join\",\n categoryId: \"compute\",\n inputs: { Parts: \"base.string[]\", Sep: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Parts?: string[]; Sep?: string }) => {\n const parts = Array.isArray(ins.Parts) ? ins.Parts.map(String) : [];\n const sep = String(ins.Sep || \"\");\n return { Text: parts.join(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.replace\",\n categoryId: \"compute\",\n inputs: {\n Text: \"base.string\",\n Search: \"base.string\",\n Replace: \"base.string\",\n },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Text?: string; Search?: string; Replace?: string }) => {\n const t = String(ins.Text || \"\");\n const s = String(ins.Search || \"\");\n const r = String(ins.Replace || \"\");\n return { Text: t.split(s).join(r) };\n },\n });\n\n // Arrays (carried as base.object)\n registry.registerNode({\n id: \"base.array.length\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Items?: any }) => ({\n Length: Array.isArray(ins.Items) ? ins.Items.length : 0,\n }),\n });\n\n registry.registerNode({\n id: \"base.array.slice\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\", Start: \"base.float\", End: \"base.float\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Items?: any; Start?: number; End?: number }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const s = Math.trunc(Number(ins.Start ?? 0));\n const e = Number.isFinite(Number(ins.End)) ? Math.trunc(Number(ins.End)) : undefined;\n return { Result: arr.slice(s, e as any) };\n },\n });\n\n // Compose array from dynamic item inputs\n registry.registerNode({\n id: \"base.array.compose\",\n categoryId: \"compute\",\n inputs: { Length: \"base.float\" },\n outputs: { Items: \"base.object\" },\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const raw = inputs?.Length ?? 0;\n const n = Math.max(0, Math.min(maxLen, Math.trunc(Number(raw ?? 0))));\n if (!Number.isFinite(n)) return { inputs: {} };\n const dyn: Record<string, { typeId: string }> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = { typeId: \"base.object\" };\n return { inputs: dyn };\n },\n inputDefaults: { Length: 0 },\n impl: (ins: Record<string, unknown>) => {\n const length = Math.max(0, Math.trunc(Number(ins.Length ?? 0)));\n if (!Number.isFinite(length)) return { Items: [] };\n return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };\n },\n });\n\n // Decompose array into dynamic item outputs\n registry.registerNode({\n id: \"base.array.decompose\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: {},\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const arr = Array.isArray(inputs?.Items) ? (inputs?.Items as any[]) : [];\n const n = Math.max(0, Math.min(maxLen, arr.length));\n const dyn: Record<string, string> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = \"base.object\";\n return { outputs: dyn };\n },\n impl: (ins: { Items?: any[] }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const out: Record<string, unknown> = {};\n const n = Math.max(0, Math.min(64, arr.length));\n for (let i = 0; i < n; i++) out[`Item${i}`] = arr[i];\n return out;\n },\n });\n\n // Select\n registry.registerNode({\n id: \"base.select\",\n categoryId: \"compute\",\n inputs: { Cond: \"base.bool\", Then: \"base.object\", Else: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Cond?: boolean; Then?: any; Else?: any }) => ({\n Result: ins.Cond ? ins.Then : ins.Else,\n }),\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [number, number, number]);\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n // Registry-level defaults for convenience\n inputDefaults: { Domain: 10, Min: [0, 0, 0], Max: [1, 1, 1], Seed: 1 },\n impl: (ins: { Domain: number; Min: [number, number, number]; Max: [number, number, number]; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number],\n );\n return { Values: out };\n },\n });\n\n // Timer\n registry.registerNode({\n id: \"base.timer\",\n categoryId: \"compute\",\n inputs: {\n Enabled: \"base.bool\",\n IntervalMs: \"base.float\",\n Immediate: \"base.bool\",\n },\n outputs: { Now: \"base.float\", Count: \"base.float\" },\n inputDefaults: { Enabled: true, IntervalMs: 1000, Immediate: true },\n impl: (\n ins: { Enabled?: boolean; IntervalMs?: number; Immediate?: boolean },\n ctx: ExecutionContext<{ timerId?: NodeJS.Timeout }>,\n ) => {\n const enabled = Boolean(ins.Enabled);\n const intervalMs = Math.max(1, Math.trunc(Number(ins.IntervalMs ?? 1000)));\n const immediate = Boolean(ins.Immediate);\n\n const stop = () => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n };\n\n if (!enabled) {\n stop();\n return;\n }\n\n // restart timer with new settings\n stop();\n let count = 0;\n if (immediate) {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }\n const id = setInterval(() => {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }, intervalMs);\n ctx.setState({ timerId: id });\n },\n lifecycle: {\n dispose: (ctx: NodeContext<{ timerId?: NodeJS.Timeout }>) => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n },\n },\n });\n\n // ------------------------- JSON/object utilities -------------------------\n registry.registerNode({\n id: \"base.object.get\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const obj = ins.Object;\n const pointers = (ins.Pointers || []).map(String);\n const out: Record<string, any> = {};\n for (const p of pointers) out[p] = jsonPointerGet(obj, p);\n return { Values: out };\n },\n });\n\n registry.registerNode({\n id: \"base.object.set\",\n categoryId: \"compute\",\n inputs: {\n Object: \"base.object\",\n Pointers: \"base.string[]\",\n NewValues: \"base.object\",\n },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[]; NewValues?: any }) => {\n const pointers = (ins.Pointers || []).map(String);\n const values = (ins.NewValues || []).map(String);\n let cur = structuredClone(ins.Object);\n for (let i = 0; i < pointers.length; i++) {\n const p = pointers[i];\n const raw = values[i];\n let val: any = raw;\n if (typeof raw === \"string\") {\n try {\n val = JSON.parse(raw);\n } catch {\n /* keep as string */\n }\n }\n cur = jsonPointerSet(cur, p, val);\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.remove\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const pointers = (ins.Pointers || []).map(String);\n let cur = structuredClone(ins.Object);\n for (const p of pointers) cur = jsonPointerRemove(cur, p);\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.merge\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => ({\n Result: deepMerge(ins.A, ins.B),\n }),\n });\n\n registry.registerNode({\n id: \"base.object.keys\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Keys: \"base.string[]\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const keys = isPlainObject(obj) ? Object.keys(obj) : Array.isArray(obj) ? Object.keys(obj) : [];\n return { Keys: keys };\n },\n });\n\n registry.registerNode({\n id: \"base.object.values\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const vals = isPlainObject(obj) ? Object.values(obj) : Array.isArray(obj) ? Object.values(obj) : [];\n return { Values: vals };\n },\n });\n\n registry.registerNode({\n id: \"base.object.patch\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Ops: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Ops?: any }) => {\n const root = structuredClone(ins.Object);\n const opsRaw = ins.Ops;\n const ops: any[] = Array.isArray(opsRaw) ? opsRaw : opsRaw ? [opsRaw] : [];\n let cur = root;\n for (const op of ops) {\n if (!op || typeof op !== \"object\") continue;\n const kind = String(op.op || \"\");\n const path = String(op.path || \"\");\n if (kind === \"add\" || kind === \"replace\") {\n cur = jsonPointerSet(cur, path, op.value);\n } else if (kind === \"remove\") {\n cur = jsonPointerRemove(cur, path);\n } else if (kind === \"test\") {\n const got = jsonPointerGet(cur, path);\n const expected = op.value;\n const ok = JSON.stringify(got) === JSON.stringify(expected);\n if (!ok) throw new Error(`objectPatch test failed at ${path}`);\n }\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.array.concat\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => {\n const a = Array.isArray(ins.A) ? ins.A : [];\n const b = Array.isArray(ins.B) ? ins.B : [];\n return { Result: [...a, ...b] };\n },\n });\n\n registry.registerNode({\n id: \"base.array.flatten\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const out: any[] = [];\n for (const v of arr) {\n if (Array.isArray(v)) out.push(...v);\n else out.push(v);\n }\n return { Result: out };\n },\n });\n\n registry.registerNode({\n id: \"base.array.sortBy\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any; Pointers?: string[] }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const pointers = (ins.Pointers || []).map(String);\n const out = [...arr].sort((a, b) => {\n for (const p of pointers) {\n const av = jsonPointerGet(a, p);\n const bv = jsonPointerGet(b, p);\n if (av === bv) continue;\n if (av === undefined) return 1;\n if (bv === undefined) return -1;\n if (av < bv) return -1;\n if (av > bv) return 1;\n }\n return 0;\n });\n return { Result: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\", DelayMs: \"base.float\" },\n outputs: { Output: \"base.float\" },\n impl: async (ins: { Value: number; DelayMs?: number }, ctx: ExecutionContext<any>) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (valueRaw === undefined || valueRaw === null || Number.isNaN(Number(valueRaw))) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { Output: Number(valueRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean }, ctx: ExecutionContext<any>) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition, opts?: { startPaused?: boolean }) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\"Validation failed: \" + report.issues.map((i) => `${i.code}:${i.message}`).join(\", \"));\n\n return builder.build(def, opts);\n}\n\nexport function generateId(prefix: string, used: Set<string> = new Set()): string {\n let id: string;\n let attempts = 0;\n do {\n id = `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n attempts++;\n if (attempts > 1000) {\n id = `${prefix}${Date.now().toString(36)}${Math.random().toString(36).slice(2, 4)}`;\n }\n } while (used.has(id));\n return id;\n}\n","import type { EngineEventListener, EngineEventName } from \"../runtime/Engine\";\n\nexport function installLogging(engine: {\n on: <K extends EngineEventName>(event: K, handler: EngineEventListener<K>) => void;\n}) {\n engine.on(\"value\", (e) => {\n const t = e.runtimeTypeId ? ` <${e.runtimeTypeId}>` : \"\";\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value, t);\n });\n engine.on(\"stats\", (s) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round((s.progress ?? 0) * 100);\n console.log(`[progress] ${s.runId || s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n const cancelled = (s as any).cancelled ? \" (cancelled)\" : \"\";\n console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms${cancelled}`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.runId || s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(`[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`);\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`,\n );\n }\n });\n engine.on(\"error\", (e) => {\n if (e.kind === \"node-run\") {\n console.warn(`[error] ${e.runId || e.nodeId}`, (e.err as any)?.message ?? e.err);\n } else if (e.kind === \"edge-convert\") {\n console.warn(\n `[error] ${e.edgeId} ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle}`,\n (e.err as any)?.message ?? e.err,\n );\n } else if (e.kind === \"input-validation\") {\n console.warn(`[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`, e.message);\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})` : \"\",\n );\n } else if (e.kind === \"system\") {\n console.warn(\n `[error] system: ${e.message}`,\n e.code ? `(code: ${e.code})` : \"\",\n e.err ? ((e.err as any)?.message ?? e.err) : \"\",\n e.details ? JSON.stringify(e.details) : \"\",\n );\n } else {\n // Log any other error kinds (shouldn't happen, but handle gracefully)\n console.warn(`[error] unknown error kind:`, e);\n }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime, BaseMathOperation } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n {\n nodeId: \"n2\",\n typeId: \"base.math\",\n },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry(id?: string) {\n return setupBasicGraphRegistry(id);\n}\n\n// Execute when run as a script\nexport async function main() {\n console.log(\"Simple example: topology and defaults\");\n console.log(\"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\");\n console.log(\n \"Registry defaults: base.math Operation=Add(0), A=[1], B=[1]; base.randomXYZs Domain=10, Min=[0,0,0], Max=[1,1,1], Seed=1\",\n );\n console.log(\"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\");\n\n const runtime = createRuntime(createSimpleGraphRegistry(), createSimpleGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", {\n Operation: BaseMathOperation.Add,\n A: [2],\n B: [3],\n });\n engine.setInputs(\"n2\", {\n Operation: BaseMathOperation.Multiply,\n B: [10],\n });\n engine.setInputs(\"n3\", { B: [15] });\n\n // Allow async propagation to flush\n await engine.whenIdle();\n\n const n1Res = engine.getOutput(\"n1\", \"Result\");\n const n2Res = engine.getOutput(\"n2\", \"Result\");\n const n3Res = engine.getOutput(\"n3\", \"Result\");\n const n4Vals = engine.getOutput(\"n4\", \"Values\");\n\n console.log(\"Computed outputs (with overrides):\");\n console.log(\"- n1.Result = A+B = 2+3 =>\", n1Res);\n console.log(\"- n2.Result = A*B, A comes from n1.Result, B=10 =>\", n2Res);\n console.log(\n \"- n3.Result = (A op B) with op=Equal by default, A=n2.Result, B=15 =>\",\n n3Res,\n \"(false because 50 !== 15)\",\n );\n console.log(\"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\");\n console.log(\" count(n4.Values) =\", Array.isArray(n4Vals) ? n4Vals.length : 0);\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, registerDelayNode, createRuntime, BaseMathOperation } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"Value\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(createAsyncGraphRegistry(), createAsyncGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: BaseMathOperation.Add, A: [1], B: [2] });\n engine.setInputs(\"n2\", { DelayMs: 250 });\n // Provide XYZ and route through async conversion edge\n engine.setInputs(\"n3\", {\n XYZ: [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ],\n });\n\n // Rapid inputs to n1.B should cancel prior runs (switch)\n // Note: n1.A is edge-driven from n4.XYZ, so we change n1.B instead\n engine.setInputs(\"n1\", { B: [3] });\n engine.setInputs(\"n1\", { B: [4] });\n engine.setInputs(\"n1\", { B: [5] });\n\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { B: [10] });\n engine.setInputs(\"n1\", { B: [11] });\n engine.setInputs(\"n1\", { B: [12] });\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { registerProgressNodes, setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.input.number\" },\n { nodeId: \"delay\", typeId: \"base.input.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(createProgressGraphRegistry(), createProgressGraphDef());\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n\n engine.launch();\n\n // Seed initial values\n engine.setInputs(\"steps\", { Value: 12 });\n engine.setInputs(\"delay\", { Value: 80 });\n // Manually set ShouldError on the worker (unwired input)\n engine.setInputs(\"work\", { ShouldError: false });\n\n // After 2s, trigger an error run\n await new Promise((r) => setTimeout(r, 2000));\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n\n // After 5s, stop and exit\n await new Promise((r) => setTimeout(r, 5000));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry } from \"../misc/base\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown node type\n // - Missing target input handle\n // - Multi inbound to same input (warning)\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.input.number\" },\n { nodeId: \"nB\", typeId: \"base.input.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.object.toString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Validation issue: unknown node type\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n return registry;\n}\n\nexport async function main() {\n const registry = createValidationGraphRegistry();\n const def = createValidationGraphDef();\n const builder = new GraphBuilder(registry);\n\n // Validate the graph and display all issues\n const report = builder.validate(def);\n\n console.log(`Validation ${report.ok ? \"passed\" : \"failed\"}`);\n console.log(`Found ${report.issues.length} unique issue(s):\\n`);\n\n const errors = report.issues.filter((i) => i.level === \"error\");\n const warnings = report.issues.filter((i) => i.level === \"warning\");\n\n if (errors.length > 0) {\n console.log(`Errors (${errors.length}):`);\n for (const issue of errors) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n // Use JSON.stringify to prevent line wrapping issues\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (warnings.length > 0) {\n console.log(`Warnings (${warnings.length}):`);\n for (const issue of warnings) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (report.ok) {\n console.log(\"Graph is valid! Building runtime...\");\n const runtime = builder.build(def);\n console.log(\"Runtime built successfully.\");\n runtime.dispose();\n } else {\n console.log(\"Cannot build runtime due to validation errors.\");\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n ConverterConfig,\n ValueConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport { parseJsonPath, setValueAtPath, findMatchingPaths } from \"./json\";\nimport { isTyped, unwrapTypeId, unwrapValue, typed } from \"../../core/type-utils\";\n\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\ninterface ValueToConvert {\n nodeId: string;\n originalNodeId: string;\n handleId: string;\n value: unknown;\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\nfunction mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n): {\n merged: GraphDefinition;\n nodeIdMap: Record<string, string>;\n targetInputDefaults: NodeValues;\n sourceInputDefaults: NodeValues;\n} {\n const existingNodeIds = new Set(target.nodes.map((n) => n.nodeId));\n const existingEdgeIds = new Set(target.edges.map((e) => e.id));\n\n const nodeIdMap: Record<string, string> = {};\n const targetInputDefaults: NodeValues = {};\n const sourceInputDefaults: NodeValues = {};\n\n for (const node of target.nodes) {\n if (node.resolvedHandles?.inputDefaults) {\n targetInputDefaults[node.nodeId] = {\n ...node.resolvedHandles.inputDefaults,\n };\n }\n }\n\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n const isExistingNode = existingNodeIds.has(newId);\n if (isExistingNode) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n\n if (n.resolvedHandles?.inputDefaults) {\n sourceInputDefaults[n.nodeId] = { ...n.resolvedHandles.inputDefaults };\n }\n\n return {\n ...n,\n nodeId: newId,\n resolvedHandles: n.resolvedHandles\n ? {\n ...n.resolvedHandles,\n inputDefaults: undefined,\n }\n : undefined,\n };\n });\n\n const importedEdges: GraphEdgeDefinition[] = source.edges.map((e) => {\n let newEdgeId = e.id;\n if (existingEdgeIds.has(newEdgeId)) {\n newEdgeId = generateId(\"e\", existingEdgeIds);\n } else {\n existingEdgeIds.add(newEdgeId);\n }\n\n const sourceNodeId = nodeIdMap[e.source.nodeId] ?? e.source.nodeId;\n const targetNodeId = nodeIdMap[e.target.nodeId] ?? e.target.nodeId;\n\n return {\n ...e,\n id: newEdgeId,\n source: {\n ...e.source,\n nodeId: sourceNodeId,\n },\n target: {\n ...e.target,\n nodeId: targetNodeId,\n },\n };\n });\n\n return {\n merged: {\n nodes: [...target.nodes, ...importedNodes],\n edges: [...target.edges, ...importedEdges],\n },\n nodeIdMap,\n targetInputDefaults,\n sourceInputDefaults,\n };\n}\n\n/**\n * Compute the center point of a graph based on node positions.\n */\nexport function computeGraphCenter(\n positions: Record<string, { x: number; y: number }>,\n nodeIds: string[],\n): { x: number; y: number } {\n const validPositions = nodeIds\n .map((id) => positions[id])\n .filter((pos): pos is { x: number; y: number } => pos !== undefined);\n\n if (validPositions.length === 0) {\n return { x: 0, y: 0 };\n }\n\n const minX = Math.min(...validPositions.map((p) => p.x));\n const maxX = Math.max(...validPositions.map((p) => p.x));\n const minY = Math.min(...validPositions.map((p) => p.y));\n const maxY = Math.max(...validPositions.map((p) => p.y));\n\n return {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2,\n };\n}\n\n/**\n * Offset positions of imported nodes based on an anchor point.\n * Preserves relative layout of imported nodes while positioning them at the anchor.\n */\nexport function offsetImportedPositions(\n targetPositions: Record<string, { x: number; y: number }>,\n sourcePositions: Record<string, { x: number; y: number }>,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number },\n): Record<string, { x: number; y: number }> {\n const sourceNodeIds = sourceDef.nodes.map((n) => n.nodeId);\n const sourceCenter = computeGraphCenter(sourcePositions, sourceNodeIds);\n\n const dx = anchorPos.x - sourceCenter.x;\n const dy = anchorPos.y - sourceCenter.y;\n\n const newPositions: Record<string, { x: number; y: number }> = {\n ...targetPositions,\n };\n\n for (const node of sourceDef.nodes) {\n const oldId = node.nodeId;\n const newId = nodeIdMap[oldId];\n const srcPos = sourcePositions[oldId] ?? { x: 0, y: 0 };\n newPositions[newId] = {\n x: srcPos.x + dx,\n y: srcPos.y + dy,\n };\n }\n\n return newPositions;\n}\n\n/**\n * Merge inputs and outputs from source into target, remapping node IDs.\n * Source values override target when merging.\n */\ntype NodeValues = Record<string, Record<string, unknown>>;\n\nfunction buildTypeMaps(def: GraphDefinition): {\n nodeTypeMap: Map<string, string>;\n inputHandleTypeMap: Map<string, Map<string, string>>;\n outputHandleTypeMap: Map<string, Map<string, string>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const inputHandleTypeMap = new Map<string, Map<string, string>>();\n const outputHandleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of def.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeInputTypes = new Map<string, string>();\n const nodeOutputTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(node.resolvedHandles.inputs)) {\n let typeId: string | undefined;\n if (typeof handleDesc === \"string\") {\n typeId = handleDesc;\n } else if (Array.isArray(handleDesc)) {\n typeId = handleDesc[0]; // Use first type for type map (backward compat)\n } else {\n const descTypeId = handleDesc.typeId;\n typeId = Array.isArray(descTypeId) ? descTypeId[0] : descTypeId;\n }\n if (typeId) nodeInputTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(node.resolvedHandles.outputs)) {\n const typeId =\n typeof handleDesc === \"string\" ? handleDesc : Array.isArray(handleDesc) ? handleDesc[0] : undefined;\n if (typeId) nodeOutputTypes.set(handleId, typeId);\n }\n }\n\n // Also include handles from inputDefaults - they share handle IDs with inputs\n if (node.resolvedHandles?.inputDefaults) {\n for (const handleId of Object.keys(node.resolvedHandles.inputDefaults)) {\n // If not already in map, try to get type from input handles\n if (!nodeInputTypes.has(handleId) && node.resolvedHandles?.inputs) {\n const inputDesc = node.resolvedHandles.inputs[handleId];\n if (inputDesc) {\n let typeId: string | undefined;\n if (typeof inputDesc === \"string\") {\n typeId = inputDesc;\n } else if (Array.isArray(inputDesc)) {\n typeId = inputDesc[0]; // Use first type for type map (backward compat)\n } else {\n const descTypeId = inputDesc.typeId;\n typeId = Array.isArray(descTypeId) ? descTypeId[0] : descTypeId;\n }\n if (typeId) nodeInputTypes.set(handleId, typeId);\n }\n }\n }\n }\n\n if (nodeInputTypes.size > 0) {\n inputHandleTypeMap.set(node.nodeId, nodeInputTypes);\n }\n if (nodeOutputTypes.size > 0) {\n outputHandleTypeMap.set(node.nodeId, nodeOutputTypes);\n }\n }\n\n return { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap };\n}\n\nfunction applyConversion(\n items: ValueToConvert[],\n values: NodeValues,\n converter: ValueConverter,\n type: \"input\" | \"output\" | \"inputDefault\",\n): void {\n for (const item of items) {\n const convertedValue = converter({\n nodeId: item.nodeId,\n handleId: item.handleId,\n value: item.value,\n type,\n nodeTypeId: item.nodeTypeId,\n handleDataType: item.handleDataType,\n runtimeTypeId: item.runtimeTypeId,\n });\n\n if (convertedValue === null) {\n delete values[item.nodeId]?.[item.handleId];\n if (values[item.nodeId] && Object.keys(values[item.nodeId]).length === 0) {\n delete values[item.nodeId];\n }\n } else {\n if (!values[item.nodeId]) {\n values[item.nodeId] = {};\n }\n values[item.nodeId][item.handleId] = convertedValue;\n }\n }\n}\n\nfunction collectValuesToConvert(\n values: NodeValues,\n nodeTypeMap: Map<string, string>,\n inputHandleTypeMap: Map<string, Map<string, string>>,\n outputHandleTypeMap: Map<string, Map<string, string>>,\n type: \"input\" | \"output\" | \"inputDefault\",\n): {\n converted: NodeValues;\n toConvert: ValueToConvert[];\n} {\n const converted: NodeValues = {};\n const toConvert: ValueToConvert[] = [];\n const handleTypeMap = type === \"output\" ? outputHandleTypeMap : inputHandleTypeMap;\n\n for (const [nodeId, nodeValues] of Object.entries(values)) {\n converted[nodeId] = { ...nodeValues };\n const nodeTypeId = nodeTypeMap.get(nodeId);\n for (const [handleId, value] of Object.entries(nodeValues)) {\n const handleDataType = handleTypeMap.get(nodeId)?.get(handleId);\n const runtimeTypeId = isTyped(value) ? unwrapTypeId(value) : undefined;\n toConvert.push({\n nodeId,\n originalNodeId: nodeId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n });\n }\n }\n\n return { converted, toConvert };\n}\n\nexport function convertSnapshot(snapshot: RuntimeSnapshotFull, converter: ValueConverter): RuntimeSnapshotFull {\n const def = snapshot.def ?? { nodes: [], edges: [] };\n const { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap } = buildTypeMaps(def);\n\n const inputDefaults: NodeValues = {};\n for (const node of def.nodes) {\n if (node.resolvedHandles?.inputDefaults) {\n inputDefaults[node.nodeId] = { ...node.resolvedHandles.inputDefaults };\n }\n }\n\n const { converted: convertedInputs, toConvert: inputsToConvert } = collectValuesToConvert(\n snapshot.inputs ?? {},\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"input\",\n );\n\n const { converted: convertedOutputs, toConvert: outputsToConvert } = collectValuesToConvert(\n snapshot.outputs ?? {},\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"output\",\n );\n\n const { converted: convertedInputDefaults, toConvert: inputDefaultsToConvert } = collectValuesToConvert(\n inputDefaults,\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n \"inputDefault\",\n );\n\n applyConversion(inputsToConvert, convertedInputs, converter, \"input\");\n applyConversion(outputsToConvert, convertedOutputs, converter, \"output\");\n applyConversion(inputDefaultsToConvert, convertedInputDefaults, converter, \"inputDefault\");\n\n const updatedNodes = def.nodes.map((node) => {\n const defaults = convertedInputDefaults[node.nodeId];\n if (!defaults || Object.keys(defaults).length === 0) {\n if (node.resolvedHandles?.inputDefaults) {\n const { inputDefaults, ...restHandles } = node.resolvedHandles;\n return {\n ...node,\n resolvedHandles: Object.keys(restHandles).length > 0 ? restHandles : undefined,\n };\n }\n return node;\n }\n\n return {\n ...node,\n resolvedHandles: {\n ...node.resolvedHandles,\n inputDefaults: defaults,\n },\n };\n });\n\n return {\n ...snapshot,\n def: { ...def, nodes: updatedNodes },\n inputs: convertedInputs,\n outputs: convertedOutputs,\n };\n}\n\nfunction mergeInputsOutputs(\n targetInputs: NodeValues,\n targetOutputs: NodeValues,\n sourceInputs: NodeValues,\n sourceOutputs: NodeValues,\n targetInputDefaults: NodeValues,\n sourceInputDefaults: NodeValues,\n nodeIdMap: Record<string, string>,\n nodeTypeMap?: Map<string, string>,\n inputHandleTypeMap?: Map<string, Map<string, string>>,\n outputHandleTypeMap?: Map<string, Map<string, string>>,\n): {\n mergedInputs: NodeValues;\n mergedOutputs: NodeValues;\n mergedInputDefaults: NodeValues;\n inputsToConvert: ValueToConvert[];\n outputsToConvert: ValueToConvert[];\n inputDefaultsToConvert: ValueToConvert[];\n} {\n const mergedInputs: NodeValues = { ...targetInputs };\n const mergedOutputs: NodeValues = { ...targetOutputs };\n const mergedInputDefaults: NodeValues = { ...targetInputDefaults };\n const inputsToConvert: ValueToConvert[] = [];\n const outputsToConvert: ValueToConvert[] = [];\n const inputDefaultsToConvert: ValueToConvert[] = [];\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = inputHandleTypeMap?.get(oldId)?.get(handleId);\n inputsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n });\n mergedInputs[newId][handleId] = value;\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = outputHandleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTyped(value) ? unwrapTypeId(value) : undefined;\n outputsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n });\n mergedOutputs[newId][handleId] = value;\n }\n }\n }\n\n for (const [oldId, defaults] of Object.entries(sourceInputDefaults)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n if (!mergedInputDefaults[newId]) {\n mergedInputDefaults[newId] = {};\n }\n const nodeTypeId = nodeTypeMap?.get(oldId);\n for (const [handleId, value] of Object.entries(defaults)) {\n const handleDataType = inputHandleTypeMap?.get(oldId)?.get(handleId);\n inputDefaultsToConvert.push({\n nodeId: newId,\n originalNodeId: oldId,\n handleId,\n value,\n nodeTypeId,\n handleDataType,\n });\n mergedInputDefaults[newId][handleId] = value;\n }\n }\n }\n\n return {\n mergedInputs,\n mergedOutputs,\n mergedInputDefaults,\n inputsToConvert,\n outputsToConvert,\n inputDefaultsToConvert,\n };\n}\n\nfunction mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n targetInputDefaults: NodeValues,\n sourceInputDefaults: NodeValues,\n nodeIdMap: Record<string, string>,\n): {\n mergedInputs: NodeValues;\n mergedOutputs: NodeValues;\n mergedInputDefaults: NodeValues;\n inputsToConvert: ValueToConvert[];\n outputsToConvert: ValueToConvert[];\n inputDefaultsToConvert: ValueToConvert[];\n} {\n const sourceDef = sourceSnapshot.def ?? { nodes: [], edges: [] };\n const { nodeTypeMap, inputHandleTypeMap, outputHandleTypeMap } = buildTypeMaps(sourceDef);\n\n return mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n targetInputDefaults,\n sourceInputDefaults,\n nodeIdMap,\n nodeTypeMap,\n inputHandleTypeMap,\n outputHandleTypeMap,\n );\n}\n\nexport function mergeSnapshots(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n converter?: ValueConverter,\n): {\n merged: RuntimeSnapshotFull;\n nodeIdMap: Record<string, string>;\n} {\n const targetDef = targetSnapshot.def ?? { nodes: [], edges: [] };\n const sourceDef = sourceSnapshot.def ?? { nodes: [], edges: [] };\n\n const { merged, nodeIdMap, targetInputDefaults, sourceInputDefaults } = mergeGraphDefinitions(targetDef, sourceDef);\n const {\n mergedInputs,\n mergedOutputs,\n mergedInputDefaults,\n inputsToConvert,\n outputsToConvert,\n inputDefaultsToConvert,\n } = mergeSnapshotData(targetSnapshot, sourceSnapshot, targetInputDefaults, sourceInputDefaults, nodeIdMap);\n\n if (converter) {\n applyConversion(inputDefaultsToConvert, mergedInputDefaults, converter, \"inputDefault\");\n applyConversion(inputsToConvert, mergedInputs, converter, \"input\");\n applyConversion(outputsToConvert, mergedOutputs, converter, \"output\");\n }\n\n const nodeMap = new Map(merged.nodes.map((n) => [n.nodeId, n]));\n for (const nodeId in mergedInputDefaults) {\n const node = nodeMap.get(nodeId);\n if (node && Object.keys(mergedInputDefaults[nodeId]).length > 0) {\n if (!node.resolvedHandles) {\n node.resolvedHandles = {};\n }\n node.resolvedHandles.inputDefaults = mergedInputDefaults[nodeId];\n }\n }\n\n return {\n merged: {\n def: merged,\n inputs: mergedInputs,\n outputs: mergedOutputs,\n environment: {\n ...targetSnapshot.environment,\n ...sourceSnapshot.environment,\n },\n extData: { ...targetSnapshot.extData, ...sourceSnapshot.extData },\n },\n nodeIdMap,\n };\n}\n\n/**\n * Merge runtime metadata from source into target, remapping node IDs using nodeIdMap.\n * Preserves target metadata and adds/updates source metadata with remapped IDs.\n */\nexport function mergeRuntimeState(\n targetRuntime: RuntimeMetadata | null | undefined,\n sourceRuntime: RuntimeMetadata | null | undefined,\n nodeIdMap: Record<string, string>,\n): RuntimeMetadata {\n const result: RuntimeMetadata = {\n nodes: { ...(targetRuntime?.nodes || {}) },\n };\n\n if (!sourceRuntime?.nodes) return result;\n\n // Remap source node IDs to new merged node IDs\n for (const [sourceNodeId, newNodeId] of Object.entries(nodeIdMap)) {\n const sourceNodeMeta = sourceRuntime.nodes[sourceNodeId];\n if (sourceNodeMeta) {\n result.nodes[newNodeId] = { ...sourceNodeMeta };\n }\n }\n\n return result;\n}\n\nfunction matchesPattern(value: string, pattern?: string | RegExp): boolean {\n if (!pattern) return true;\n if (typeof pattern === \"string\") {\n return value === pattern;\n }\n return pattern.test(value);\n}\n\n/**\n * Build a converter function from a configuration that maps values based on handle/node matching.\n * The converter will replace values when:\n * - handleId matches (if specified)\n * - nodeId matches (if specified)\n * - nodeTypeId matches (if specified)\n * - handleDataType matches (if specified)\n * - runtimeTypeId matches (if specified, for typed outputs)\n * - value exists in valueMap\n */\nexport function buildValueConverter(config: ConverterConfig): ValueConverter {\n return (converterConfig: ValueConverterConfig) => {\n const { nodeId, handleId, value, type, nodeTypeId, handleDataType, runtimeTypeId } = converterConfig;\n const isValueTyped = isTyped(value);\n\n for (const mapping of config.mappings) {\n if (mapping.type && mapping.type !== type) continue;\n if (mapping.handleId && !matchesPattern(handleId, mapping.handleId)) continue;\n if (mapping.nodeId && !matchesPattern(nodeId, mapping.nodeId)) continue;\n\n if (mapping.nodeTypeId && nodeTypeId) {\n if (!matchesPattern(nodeTypeId, mapping.nodeTypeId)) continue;\n }\n\n if (mapping.handleDataType && handleDataType) {\n if (!matchesPattern(handleDataType, mapping.handleDataType)) continue;\n }\n\n if (mapping.runtimeTypeId && runtimeTypeId) {\n if (!matchesPattern(runtimeTypeId, mapping.runtimeTypeId)) continue;\n }\n\n if (mapping.transformTypedValue && isValueTyped) {\n const innerValue = unwrapValue(value);\n const typedTypeId = unwrapTypeId(value);\n if (!typedTypeId) continue;\n\n if (mapping.path !== undefined) {\n const pathSegments = parseJsonPath(mapping.path);\n const matches = findMatchingPaths(innerValue, pathSegments);\n\n if (matches.length > 0) {\n const transformedInner = JSON.parse(JSON.stringify(innerValue));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(matchValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(matchValue as string | number | boolean);\n changed = true;\n }\n } else {\n if (typeof matchValue === \"string\" || typeof matchValue === \"number\") {\n const key = String(matchValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n // If mapped to null, set null at the path (which may delete nested property)\n setValueAtPath(transformedInner, match.path, newValue);\n }\n }\n }\n\n // If the entire typed output should be deleted (all paths mapped to null),\n // we'd need to check if the whole inner value is null/empty, but for now\n // we'll return the transformed value or original\n return changed ? typed(typedTypeId, transformedInner) : value;\n }\n } else {\n if (innerValue !== null && innerValue !== undefined) {\n let newValue: unknown = innerValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(innerValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(innerValue as string | number | boolean);\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n } else {\n if (typeof innerValue === \"string\" || typeof innerValue === \"number\") {\n const key = String(innerValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n }\n }\n }\n }\n continue;\n }\n\n if (mapping.path !== undefined) {\n let pathSegments = parseJsonPath(mapping.path);\n\n if (isValueTyped) {\n const typedTypeId = unwrapTypeId(value);\n if (typedTypeId) {\n const firstSegment = pathSegments[0];\n const firstSegmentStr =\n typeof firstSegment === \"string\"\n ? firstSegment\n : firstSegment instanceof RegExp\n ? null\n : String(firstSegment);\n if (firstSegmentStr !== \"__spark_value\" && firstSegmentStr !== \"__spark_type\") {\n pathSegments = [\"__spark_value\", ...pathSegments];\n }\n }\n }\n\n const matches = findMatchingPaths(value, pathSegments);\n\n if (matches.length > 0) {\n const transformedValue = JSON.parse(JSON.stringify(value));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(matchValue as string | number | boolean)) {\n newValue = mapping.valueMap.get(matchValue as string | number | boolean);\n changed = true;\n }\n } else {\n if (typeof matchValue === \"string\" || typeof matchValue === \"number\") {\n const key = String(matchValue);\n if (key in mapping.valueMap) {\n newValue = mapping.valueMap[key];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n setValueAtPath(transformedValue, match.path, newValue);\n }\n }\n }\n\n return changed ? transformedValue : value;\n }\n } else {\n if (value !== null && value !== undefined) {\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(value as string | number | boolean)) {\n return mapping.valueMap.get(value as string | number | boolean);\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n const key = String(value);\n if (key in mapping.valueMap) {\n return mapping.valueMap[key];\n }\n }\n }\n }\n }\n }\n\n return value;\n };\n}\n"],"names":[],"mappings":"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"}
|