@bian-womp/spark-graph 0.3.6 → 0.3.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/core/types.ts","../../src/builder/Registry.ts","../../src/runtime/components/Graph.ts","../../src/runtime/components/EventEmitter.ts","../../src/runtime/components/RunContextManager.ts","../../../protocol/lib/esm/index.js","../../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/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/json.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type {\n DataTypeId,\n NodeTypeId,\n HandleId,\n InputHandleDescriptor,\n NodeCategoryId,\n ResolvedHandles,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\n\nexport interface DataTypeDescriptor<T = unknown> {\n id: DataTypeId;\n displayName?: string;\n validate(value: T): boolean;\n helpers?: Record<string, unknown>;\n // Optional metadata used by tooling/UI (non-functional at runtime)\n bakeTarget?: { nodeTypeId: NodeTypeId; inputHandle: HandleId };\n}\n\nexport type InvalidateReason =\n | \"input-changed\"\n | \"dependency-changed\"\n | \"manual\"\n | \"disposed\";\n\nexport interface NodeContext<State> {\n state: State;\n setState(next: Partial<State>): void;\n}\n\nexport interface ExecutionContext<State> extends NodeContext<State> {\n nodeId: string;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n\n emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n execute: (\n resolve?: () => void,\n opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ) => void;\n getInput: (handle: HandleId) => unknown;\n reportProgress?: (value: number) => void;\n log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void;\n}\n\n/**\n * Extract State type from ExecutionContext<State>\n */\nexport type ExtractStateFromContext<T> = T extends ExecutionContext<infer S>\n ? S\n : never;\n\n/**\n * Extract State type from impl function signature\n */\nexport type ExtractStateFromImpl<Impl> = Impl extends (\n inputs: any,\n ctx: ExecutionContext<infer State>\n) => any\n ? State\n : never;\n\n/**\n * Extract Inputs type from impl function signature\n */\nexport type ExtractInputsFromImpl<Impl> = Impl extends (\n inputs: infer I,\n ctx: any\n) => any\n ? I\n : never;\n\nexport interface RuntimeNodeStats {\n runs: number;\n active: number;\n queued: number;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\nexport interface RuntimeEdgeStats {\n runs: number;\n inFlight: boolean;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\n// Typed output helper for union outputs\nexport type TypedOutputValue<T = unknown> = {\n __spark_type: DataTypeId;\n __spark_value: T;\n};\n\nexport function typed<T = unknown>(\n typeId: DataTypeId,\n value: T\n): TypedOutputValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTypedOutput(v: unknown): v is TypedOutputValue<unknown> {\n return (\n !!v &&\n typeof v === \"object\" &&\n Object.prototype.hasOwnProperty.call(v, \"__spark_type\")\n );\n}\n\nexport function getTypedOutputTypeId(v: unknown): DataTypeId | undefined {\n if (isTypedOutput(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function getTypedOutputValue(v: unknown): unknown {\n if (isTypedOutput(v)) return v.__spark_value;\n return v;\n}\n\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): DataTypeId | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n return typeof v === \"string\" ? v : v.typeId;\n}\n\nexport function isInputPrivate(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): boolean {\n const v = inputs ? inputs[handle] : undefined;\n return !!(v && typeof v === \"object\" && v.private);\n}\n\n// Helper type to extract State - prefers inferred from Impl, falls back to explicit State\ntype InferState<Impl, State> = ExtractStateFromImpl<Impl> extends never\n ? State\n : ExtractStateFromImpl<Impl>;\n\nexport interface NodeTypeDescriptor<\n I extends Record<string, InputHandleDescriptor> = Record<\n string,\n InputHandleDescriptor\n >,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\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> {\n id: NodeTypeId;\n categoryId: NodeCategoryId;\n displayName?: string;\n inputs: I; // handle -> DataTypeId or descriptor\n outputs: O; // handle -> DataTypeId or union of DataTypeIds\n impl: Impl; // category-specific implementation payload\n // Optional default runtime policy for this node type (merged with category/node-instance policy)\n policy?: Partial<ExecutionPolicy>;\n // Optional log level for this node type (controls lifecycle logging)\n logLevel?: LogLevel;\n // Optional per-node dynamic handle resolver. When provided, the runtime merges\n // these handles over static inputs/outputs based on per-node params/environment.\n resolveHandles?: (ctx: {\n nodeId: string;\n environment: Record<string, unknown>;\n params?: Record<string, unknown>;\n inputs?: Record<string, unknown>;\n }) => Partial<ResolvedHandles> | Promise<Partial<ResolvedHandles>>;\n // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?: Record<string, unknown>;\n lifecycle?: {\n prepare?: (\n params: Record<string, unknown>,\n ctx: ExecutionContext<InferState<Impl, State>>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<InferState<Impl, State>>) => void;\n };\n}\n","import type {\n DataTypeId,\n InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n DataTypeDescriptor,\n ExecutionContext,\n NodeTypeDescriptor,\n} 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// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\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<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\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<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\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) =>\n Array.isArray(value) ? value : [value]\n );\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<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | 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) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n 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 =\n 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 =\n 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)\n 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(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((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(\n fromTypeId: string,\n toTypeId: string\n ): 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 = { kind: \"sync\", convert: (v) => v };\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 };\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 };\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)\n 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 = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\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 (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\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 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 = { kind: \"sync\", convert };\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 = { kind: \"async\", convertAsync };\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) =>\n 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 ? 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 type { RuntimeNode, RuntimeEdge } from \"./types\";\n\n/**\n * Graph component - manages nodes, edges, and handle resolution\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(private registry?: Registry) {}\n\n // Node accessors\n getNode(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n getNodes(): Map<string, RuntimeNode<any>> {\n return this.nodes;\n }\n\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // Edge accessors\n getEdges(): RuntimeEdge[] {\n return this.edges;\n }\n\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = edges;\n }\n\n // Registry accessor\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 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 getResolvedHandlesMap(): Map<string, ResolvedHandles> {\n return this.resolvedByNode;\n }\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 (!(e.target.handle in node.inputs)) return false;\n }\n return true;\n }\n\n // Clear all data\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n}\n","import type {\n RuntimeEventName,\n RuntimeEventMap,\n RuntimeEventListener,\n} 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<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => 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>(\n event: K,\n payload: RuntimeEventMap[K]\n ): 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","import type { Graph } from \"./Graph\";\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 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 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\n constructor(private readonly graph: Graph) {\n this.graph = graph;\n }\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n resolve?: () => void,\n options?: {\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 pendingNodes: 0,\n pendingEdges: 0,\n pendingResolvers: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n resolve,\n };\n this.runContexts.set(id, ctx);\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 startNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingNodes++;\n }\n\n finishNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingNodes--;\n this.finishRunContextIfPossible(id);\n }\n\n startEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingEdges++;\n }\n\n finishEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingEdges--;\n this.finishRunContextIfPossible(id);\n }\n\n startHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingResolvers++;\n }\n\n finishHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingResolvers--;\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) return;\n if (\n ctx.pendingNodes > 0 ||\n ctx.pendingEdges > 0 ||\n ctx.pendingResolvers > 0\n ) {\n return; // Still has pending work\n }\n\n // Clean up activeRunContexts from all nodes\n for (const node of this.graph.getNodes().values()) {\n node.activeRunContextIds.delete(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 for (const e of this.graph.getEdges()) {\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 // 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 const node = this.graph.getNode(id);\n if (node) node.activeRunContextIds.clear();\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\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 this.runContexts.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","/**\n * Shared utility functions for runtime components\n */\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","import type {\n GraphDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"../../core/types\";\nimport type { RuntimeEdge } from \"./types\";\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 const inputs = {\n ...desc.inputs,\n ...dyn.inputs,\n ...overrideInputs,\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(\n def: GraphDefinition,\n registry: Registry,\n resolvedByNode: Map<string, ResolvedHandles>\n): 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, effectiveTypeId } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n resolvedByNode,\n e.typeId\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 effectiveTypeId, // Always present\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 */\nexport function extractEdgeTypes(\n sourceNodeId: string,\n sourceHandle: string,\n targetNodeId: string,\n targetHandle: string,\n resolvedByNode: Map<string, ResolvedHandles>,\n explicitTypeId?: string\n): {\n srcDeclared: string | string[] | undefined;\n dstDeclared: string | undefined;\n effectiveTypeId: string;\n} {\n const srcResolved = resolvedByNode.get(sourceNodeId);\n const dstResolved = resolvedByNode.get(targetNodeId);\n\n const srcDeclared = srcResolved\n ? (srcResolved.outputs[sourceHandle] as string | string[] | undefined)\n : undefined;\n const dstDeclared = dstResolved\n ? getInputTypeId(dstResolved.inputs, targetHandle)\n : undefined;\n\n let effectiveTypeId = explicitTypeId;\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n }\n\n return {\n srcDeclared,\n dstDeclared,\n effectiveTypeId: effectiveTypeId ?? \"untyped\",\n };\n}\n\n// Static helper: build edge converters for type coercion\nexport function buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: 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\n const isUnion = Array.isArray(srcDeclared);\n const srcTypes = isUnion ? srcDeclared : [srcDeclared];\n\n // Helper to get the coercion for a specific type\n const getCoercion = (typeId: string) => {\n return registry.resolveCoercion(typeId, dstDeclared);\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 = getTypedOutputTypeId(v);\n const payload = getTypedOutputValue(v);\n\n if (isUnion) {\n if (!typeId) {\n throw new Error(\n `Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(\n `Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\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 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) return payload;\n if (res.kind === \"async\") {\n return await res.convertAsync(payload, signal);\n }\n return 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) return payload;\n if (res.kind === \"async\") {\n throw new Error(\n `Async coercion required but convert used (${edgeLabel})`\n );\n }\n return res.convert(payload);\n },\n };\n}\n","import type { ResolvedHandles } 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 { isPromise, unwrapMaybePromise } from \"../utils\";\nimport { buildEdgeConverters, extractEdgeTypes } from \"./graph-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\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 * 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 // Track resolver start for all active run-contexts\n if (node.activeRunContextIds && node.activeRunContextIds.size > 0) {\n for (const runContextId of node.activeRunContextIds) {\n this.runContextManager.startHandleResolution(runContextId, nodeId);\n }\n }\n\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId, node.activeRunContextIds);\n }, 0);\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 edges = this.graph.getEdges();\n const resolvedByNode = this.graph.getResolvedHandlesMap();\n\n for (const e of edges) {\n // Only update edges that touch the changed node\n const touchesChangedNode =\n e.source.nodeId === nodeId || e.target.nodeId === nodeId;\n if (!touchesChangedNode) continue;\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, effectiveTypeId } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n resolvedByNode,\n e.typeId\n );\n\n // Update edge properties\n if (!e.typeId) {\n e.effectiveTypeId = effectiveTypeId;\n }\n e.dstDeclared = dstDeclared;\n e.srcUnionTypes = Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined;\n\n // Update converters\n const conv = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n this.registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\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 this.edgePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n srcNode.activeRunContextIds\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(\n nodeId: string,\n activeRunContextIds?: Set<RunContextId>\n ): 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 =\n nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] 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(\n `[node:${nodeId}:${node.typeId}] resolveHandles-done (error)`\n );\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] 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 if (!before) return;\n\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 const inputs = { ...nodeDesc.inputs, ...resolved?.inputs };\n const outputs = { ...nodeDesc.outputs, ...resolved?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...resolved?.inputDefaults,\n };\n const after = { inputs, outputs, inputDefaults };\n // Compare shallow-structurally via JSON\n if (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 { getTypedOutputTypeId, isTypedOutput } from \"../../core/types\";\nimport type { RunContextId, RuntimeEdge, RuntimeNode } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { valuesEqual } from \"../utils\";\nimport {\n INodeExecutor,\n IHandleResolver,\n IRuntime,\n IEdgePropagator,\n} from \"./interfaces\";\n\n/**\n * EdgePropagator component - handles value propagation through edges\n */\nexport class EdgePropagator implements IEdgePropagator {\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\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 nodeExecutor: INodeExecutor\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(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): void {\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 * Set source output value and emit event\n */\n private setSourceOutput(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): boolean {\n const srcNode = this.graph.getNode(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return false;\n }\n srcNode.outputs[srcHandle] = value;\n this.eventEmitter.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n return true;\n }\n\n /**\n * Find all outgoing edges from a source node handle\n */\n private findOutgoingEdges(\n srcNodeId: string,\n srcHandle: string\n ): RuntimeEdge[] {\n const edges = this.graph.getEdges();\n return edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\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 (\n runContextIds &&\n runContextIds.size > 0 &&\n !(effectiveRunContexts && effectiveRunContexts.size > 0)\n ) {\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(\n edge: RuntimeEdge,\n value: unknown,\n srcNodeId: string\n ): boolean {\n const isUnion = Array.isArray(edge.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${\n edge.source.handle\n } 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 err,\n });\n return false;\n }\n\n return true;\n }\n\n /**\n * Handle synchronous conversion\n */\n private handleSyncConversion(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): void {\n let convertedValue = value;\n if (edge.convert) {\n convertedValue = edge.convert(value);\n }\n this.applyToTarget(edge, convertedValue, effectiveRunContexts);\n }\n\n /**\n * Handle asynchronous conversion\n */\n private handleAsyncConversion(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): void {\n if (!edge.convertAsync) return;\n // Track edge run-context IDs for pendingEdges tracking\n const edgeRunContextIds = effectiveRunContexts\n ? Array.from(effectiveRunContexts)\n : undefined;\n\n if (edgeRunContextIds) {\n for (const id of edgeRunContextIds) {\n this.runContextManager.startEdgeConversion(id, edge.id);\n }\n }\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 });\n\n const controller = new AbortController();\n const startAt = Date.now();\n edge.stats.runs += 1;\n edge.stats.inFlight = true;\n edge.stats.progress = 0;\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(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): 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 if (valuesEqual(prev, processedValue)) {\n return; // No change\n }\n\n // Set input value (respecting skipPropagateValues)\n const shouldSetValue = this.shouldSetInputValue(effectiveRunContexts);\n if (shouldSetValue) {\n this.setTargetInput(edge, dstNode, processedValue);\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 =\n typeof edge.dstDeclared === \"string\" && edge.dstDeclared.endsWith(\"[]\");\n\n if (!dstIsArray) {\n return value;\n }\n\n const toArray = (x: unknown): unknown[] =>\n 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 edges = this.graph.getEdges();\n const merged: unknown[] = [];\n for (const ed of edges) {\n if (\n ed.target.nodeId === edge.target.nodeId &&\n ed.target.handle === edge.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n\n return merged;\n }\n\n /**\n * Check if input value should be set (respecting skipPropagateValues)\n */\n private shouldSetInputValue(\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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 * Set target input value and emit event\n */\n private setTargetInput(\n edge: RuntimeEdge,\n dstNode: RuntimeNode,\n value: unknown\n ): void {\n dstNode.inputs[edge.target.handle] = value;\n this.eventEmitter.emit(\"value\", {\n nodeId: edge.target.nodeId,\n handle: edge.target.handle,\n value,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n this.handleResolver.scheduleRecomputeHandles(edge.target.nodeId);\n }\n\n /**\n * Execute downstream if conditions are met\n */\n private executeDownstream(\n targetNodeId: string,\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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, effectiveRunContexts);\n }\n }\n\n /**\n * Check if execution should propagate\n */\n private shouldPropagateExecution(\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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 edge.stats.inFlight = false;\n const duration = Date.now() - startAt;\n edge.stats.lastDurationMs = duration;\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 durationMs: duration,\n });\n\n edge.stats.lastEndAt = Date.now();\n edge.stats.lastError = undefined;\n }\n\n /**\n * Handle edge conversion error\n */\n private handleEdgeConversionError(edge: RuntimeEdge, err: unknown): void {\n edge.stats.inFlight = false;\n edge.stats.lastError = err;\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 err,\n });\n }\n\n /**\n * Finish edge conversion and decrement pending edges\n */\n private finishEdgeConversion(\n edgeRunContextIds: RunContextId[] | undefined,\n edgeId: string\n ): void {\n if (!edgeRunContextIds) return;\n\n for (const id of edgeRunContextIds) {\n this.runContextManager.finishEdgeConversion(id, edgeId);\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 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\n ? new Set(Object.keys(resolved.outputs))\n : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\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, node.activeRunContextIds);\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 { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RuntimeNode, RunContextId } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IEdgePropagator, INodeExecutor, IRuntime } from \"./interfaces\";\n\n/**\n * Execution plan containing all information needed to start a node execution.\n * Captures a snapshot of the node's policy at scheduling time so later\n * mutations to `node.policy` don't affect an in-flight run.\n */\ninterface ExecutionPlan {\n runId: string;\n effectiveInputs: Record<string, unknown>;\n runContextIdsForRun?: Set<RunContextId>;\n timestamp: number;\n policy: RuntimeNode[\"policy\"];\n}\n\n/**\n * NodeExecutor component - handles node execution scheduling and lifecycle\n */\nexport class NodeExecutor implements INodeExecutor {\n private environment: Record<string, unknown> = {};\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 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 /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.graph.getNode(nodeId);\n if (!node) return {};\n const registry = this.graph.getRegistry();\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.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(\n Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h))\n );\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 edges = this.graph.getEdges();\n const inbound = new Set(\n edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\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 (inbound.has(handle)) continue; // Don't override wired inputs\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\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 node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n });\n\n // Create log function that respects node's logLevel\n const log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => {\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const requestedValue = LOG_LEVEL_VALUES[level] ?? 1;\n\n // Only log if requested level >= node's logLevel\n if (requestedValue >= nodeLogValue && nodeLogLevel !== \"silent\") {\n const contextStr = context\n ? ` ${Object.entries(context)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join(\" \")}`\n : \"\";\n const fullMessage = `[node:${runId || nodeId}:${\n node.typeId\n }] ${message}${contextStr}`;\n switch (level) {\n case \"debug\":\n console.info(fullMessage);\n break;\n case \"info\":\n console.info(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n }\n };\n\n return {\n nodeId,\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.edgePropagator.invalidateDownstream(nodeId);\n },\n execute: (\n resolve?: () => void,\n opts?: { skipPropagateValues?: boolean; propagate?: boolean }\n ) => {\n if (this.graph.allInboundHaveValue(nodeId)) {\n let runContextIdsToUse =\n this.runtime.getRunMode() === \"auto\" ? undefined : runContextIds;\n if (\n this.runtime.getRunMode() === \"manual\" &&\n (!runContextIds || runContextIds.size === 0)\n ) {\n runContextIdsToUse = new Set([\n this.runContextManager.createRunContext(nodeId, resolve, opts),\n ]);\n }\n this.execute(nodeId, runContextIdsToUse);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n /**\n * Internal method for executing inputs changed (also used by GraphRuntime)\n */\n execute(nodeId: string, runContextIds?: Set<RunContextId>): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const runMode = this.runtime.getRunMode();\n if (!runMode) {\n console.warn(\"NodeExecutor.execute: no runMode, skipping execution\");\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 runContextIds = new Set([\n this.runContextManager.createRunContext(nodeId, () => {}, {\n propagate: false,\n }),\n ]);\n } else {\n console.warn(\n \"NodeExecutor.execute: no runContextIds provided in manual mode, skipping execution\"\n );\n return;\n }\n }\n\n if (runMode === \"auto\" && runContextIds && runContextIds.size > 0) {\n console.warn(\n \"NodeExecutor.execute: 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 // Attach run-context IDs if provided\n this.attachRunContexts(node, runContextIds);\n\n // Handle debouncing\n const now = Date.now();\n if (this.shouldDebounce(node, now)) {\n this.handleDebouncedSchedule(node, nodeId, now);\n return;\n }\n\n // Prepare execution plan\n const executionPlan = this.prepareExecutionPlan(\n node,\n nodeId,\n runContextIds,\n now\n );\n\n // Route to appropriate concurrency handler\n this.routeToConcurrencyHandler(node, nodeId, executionPlan);\n }\n\n /**\n * Attach run-context IDs to the node\n */\n private attachRunContexts(\n node: RuntimeNode,\n runContextIds?: Set<RunContextId>\n ): void {\n if (!runContextIds) return;\n\n node.activeRunContextIds = new Set([\n ...node.activeRunContextIds,\n ...runContextIds,\n ]);\n }\n\n /**\n * Check if execution should be debounced\n */\n private shouldDebounce(node: RuntimeNode, now: number): boolean {\n const policy = node.policy ?? {};\n return !!(\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n );\n }\n\n /**\n * Handle debounced scheduling by replacing the latest queued item\n */\n private handleDebouncedSchedule(\n node: RuntimeNode,\n nodeId: string,\n now: number\n ): void {\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n node.queue.splice(0, node.queue.length);\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n }\n\n /**\n * Prepare execution plan with all necessary information\n */\n private prepareExecutionPlan(\n node: RuntimeNode,\n nodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n now: number\n ): ExecutionPlan {\n node.lastScheduledAt = now;\n node.runSeq += 1;\n const runId = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = 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 };\n }\n\n /**\n * Route execution to appropriate concurrency handler\n */\n private routeToConcurrencyHandler(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n\n switch (mode) {\n case \"drop\":\n this.handleDropMode(node, nodeId, plan);\n break;\n case \"queue\":\n this.handleQueueMode(node, nodeId, plan);\n break;\n case \"switch\":\n case \"merge\":\n default:\n this.startRun(node, 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(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\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(node, nodeId, plan);\n }\n\n /**\n * Handle queue mode - add to queue and process sequentially\n */\n private handleQueueMode(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\n const maxQ = plan.policy?.maxQueue ?? 8;\n node.queue.push({ runId: plan.runId, inputs: plan.effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n this.processQueue(node, nodeId);\n }\n\n /**\n * Process queued executions sequentially\n */\n private processQueue(node: RuntimeNode, nodeId: string): void {\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n\n node.latestRunId = next.runId;\n const policySnapshot = node.policy ? { ...node.policy } : undefined;\n\n const plan: ExecutionPlan = {\n runId: next.runId,\n effectiveInputs: next.inputs,\n runContextIdsForRun: node.activeRunContextIds,\n timestamp: Date.now(),\n policy: policySnapshot,\n };\n\n this.startRun(node, nodeId, plan, () => {\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n }\n\n /**\n * Start a node execution run\n */\n private startRun(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan,\n onDone?: () => void\n ): void {\n // Track run-contexts\n this.trackRunContextStart(nodeId, plan.runContextIdsForRun);\n\n // Setup execution controller\n const controller = this.createExecutionController(node, plan.runId);\n\n // Handle concurrency mode\n this.applyConcurrencyMode(node, controller, plan);\n\n // Setup timeout if needed\n const timeoutId = this.setupTimeout(node, controller, plan);\n\n // Create execution context\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n plan.effectiveInputs,\n plan.runId,\n controller.signal,\n plan.runContextIdsForRun,\n this.createEmitAndProgressHandlers(node, nodeId, plan)\n );\n\n // Execute\n this.executeNode(node, nodeId, ctx, plan, controller, timeoutId, onDone);\n }\n\n /**\n * Track run-context start for pending nodes\n */\n private trackRunContextStart(\n nodeId: string,\n runContextIdsForRun?: Set<RunContextId>\n ): 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 * Create execution controller and update node stats\n */\n private createExecutionController(\n node: RuntimeNode,\n runId: string\n ): AbortController {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = Date.now();\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n return controller;\n }\n\n /**\n * Apply concurrency mode (switch mode aborts other controllers)\n */\n private applyConcurrencyMode(\n node: RuntimeNode,\n controller: AbortController,\n plan: ExecutionPlan\n ): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n }\n\n /**\n * Setup timeout for execution if configured\n */\n private setupTimeout(\n node: RuntimeNode,\n controller: AbortController,\n plan: ExecutionPlan\n ): 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 node: RuntimeNode,\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 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(\n nodeId,\n handle,\n value,\n plan.runContextIdsForRun\n );\n },\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n progress: node.stats.progress,\n });\n },\n };\n }\n\n /**\n * Execute the node with retry logic and cleanup\n */\n private executeNode(\n node: RuntimeNode,\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n onDone?: () => void\n ): void {\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\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 node.stats.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 runId: plan.runId,\n err,\n });\n } finally {\n this.cleanupExecution(\n node,\n nodeId,\n ctx,\n plan,\n controller,\n timeoutId,\n hadError,\n onDone\n );\n }\n };\n\n exec(0);\n }\n\n /**\n * Cleanup after execution completes\n */\n private cleanupExecution(\n node: RuntimeNode,\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 node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n if (!hadError) node.stats.lastError = undefined;\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\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 (!isCancelled) {\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 ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n\n if (onDone) onDone();\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(\n node: RuntimeNode,\n reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"\n ): void {\n for (const controller of Array.from(node.activeControllers)) {\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 if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: node.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 node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\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(\n nodeIds: string[],\n reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"\n ): 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 const edges = this.graph.getEdges();\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 for (const edge of edges) {\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 const node = this.graph.getNode(nodeId);\n if (!node) continue;\n\n this.cancelNodeActiveRuns(node, reason);\n\n node.runSeq += 1;\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n node.latestRunId = `${nodeId}:${node.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 {\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 { getInputTypeId, getTypedOutputTypeId } from \"../core/types\";\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 type {\n INodeExecutor,\n IRuntime,\n IEdgePropagator,\n} from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type { RuntimeNode, RunContextId } from \"./components/types\";\nimport { buildEdges, tryHandleResolving } from \"./components/graph-utils\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => 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\n // State\n private environment: Record<string, unknown> = {};\n private runMode: RunMode | null = null;\n private pauseRefCount = 0;\n\n constructor() {\n // Initialize components\n this.graph = new Graph();\n this.eventEmitter = new EventEmitter();\n this.runContextManager = new RunContextManager(this.graph);\n\n this.handleResolver = new HandleResolver(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this\n );\n\n this.edgePropagator = new EdgePropagator(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver,\n this\n );\n\n // Create NodeExecutor with EdgePropagator\n this.nodeExecutor = new NodeExecutor(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this,\n this\n );\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\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\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = tryHandleResolving(def, registry, gr.environment);\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 };\n gr.graph.setNode(n.nodeId, rn);\n }\n\n // Instantiate edges\n const edges = buildEdges(def, registry, gr.graph.getResolvedHandlesMap());\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>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n return this.eventEmitter.on(event, handler);\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 edges = this.graph.getEdges();\n const registry = this.graph.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (value !== undefined && registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graph.getResolvedHandles(nodeId);\n // Get typeId from resolved handles first, then registry statics\n const typeId = resolved\n ? getInputTypeId(resolved.inputs, handle)\n : desc\n ? getInputTypeId(desc.inputs, handle)\n : undefined;\n\n if (typeId) {\n const typeDesc = registry.types.get(typeId);\n if (typeDesc?.validate && !typeDesc.validate(value)) {\n // Emit error event for invalid input value and reject it\n const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeId}): ${JSON.stringify(\n value\n )}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n handle,\n typeId,\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 if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n // Emit value event for input updates\n this.eventEmitter.emit(\"value\", { nodeId, handle, value, io: \"input\" });\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 const node = this.graph.getNode(nodeId);\n const shouldAutoRun =\n this.runMode === \"auto\" || node?.policy?.autoRun === true;\n if (shouldAutoRun && this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId);\n }\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): void {\n for (const node of this.graph.getNodes().values()) {\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const ctx = this.nodeExecutor.createExecutionContext(\n node.nodeId,\n node,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal\n );\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 node.runtime.onActivated?.();\n }\n if (this.runMode === \"auto\" && invalidate) {\n for (const nodeId of this.graph.getNodes().keys()) {\n if (this.graph.allInboundHaveValue(nodeId)) this.execute(nodeId);\n }\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\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 Array.from(this.graph.getNodes().keys());\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.getNodes().keys()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(\n this.graph.getNodes().values()\n ).map((n) => {\n const resolved = this.graph.getResolvedHandles(n.nodeId);\n\n return {\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[] = this.graph.getEdges().map((e) => ({\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 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 for (const n of this.graph.getNodes().values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\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 options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\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(\n startNodeId,\n resolve,\n options\n );\n\n node.activeRunContextIds.add(id);\n this.execute(startNodeId, new Set([id]));\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 copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n this.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { invalidate: !options?.dry }\n );\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 for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.inputs[h],\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(node.inputs[h]),\n });\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.outputs[h],\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(node.outputs[h]),\n });\n }\n }\n if (opts?.invalidate) {\n for (const nodeId of this.graph.getNodes().keys()) {\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.getNodes().keys());\n for (const nodeId of Array.from(beforeIds)) {\n if (!afterIds.has(nodeId)) {\n const node = this.graph.getNode(nodeId)!;\n this.nodeExecutor.cancelNodeActiveRuns(node, \"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) => Object.assign(node.state, 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 };\n this.graph.setNode(n.nodeId, newNode);\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(\n newNode.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.nodeExecutor.createExecutionContext(\n newNode.nodeId,\n newNode,\n effectiveInputs,\n `${newNode.nodeId}:init`,\n ctrl.signal\n );\n if (newNode.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n newNode.lifecycle.prepare(newNode.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n newNode.runtime.onActivated?.();\n } else {\n existing.params = 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 existing.policy = {\n ...cat?.policy,\n ...desc?.policy,\n ...n.params?.policy,\n };\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n }\n\n {\n const beforeEdges = this.graph.getEdges();\n const beforeInbound = new Map<string, Set<string>>();\n for (const e of beforeEdges) {\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\n const beforeOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of beforeEdges) {\n const tmap =\n beforeOutTargets.get(e.source.nodeId) ??\n 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 = tryHandleResolving(def, registry, this.environment);\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 (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\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(\n def,\n registry,\n this.graph.getResolvedHandlesMap()\n );\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 const afterEdges = this.graph.getEdges();\n for (const e of afterEdges) {\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 const node = this.graph.getNode(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(beforeSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n\n if (changed) {\n this.edgePropagator.clearArrayBuckets(nodeId);\n if (\n this.runMode === \"auto\" &&\n this.graph.allInboundHaveValue(nodeId)\n ) {\n this.execute(nodeId);\n }\n }\n }\n\n // Propagate changes on edges added\n const afterOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of afterEdges) {\n const targetMap =\n afterOutTargets.get(e.source.nodeId) ??\n 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 =\n beforeOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const afterMap =\n afterOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(beforeMap.keys()),\n ...Array.from(afterMap.keys()),\n ]);\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) this.propagate(nodeId, handle, val);\n }\n }\n }\n }\n }\n }\n\n dispose(): void {\n this.runContextManager.resolveAll();\n\n for (const node of this.graph.getNodes().values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.graph.clear();\n }\n\n execute(nodeId: string, runContextIds?: Set<RunContextId>): void {\n this.nodeExecutor.execute(nodeId, runContextIds);\n }\n\n propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): 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 {\n GraphDefinition,\n GraphNodeDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputTypeId } from \"../core/types\";\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 effectiveTypeId?: 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}\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<\n string,\n Omit<ResolvedHandles, \"inputDefaults\">\n >();\n\n const getEffectiveHandles = (\n n?: GraphNodeDefinition\n ): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\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 inferEdgeType = (\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n explicit?: string\n ): string | undefined => {\n if (explicit) return explicit;\n if (Array.isArray(srcDeclared) && dstDeclared) return dstDeclared;\n if (srcDeclared)\n return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n return undefined;\n };\n\n const canFlow = (\n from: string | string[] | undefined,\n to?: string\n ): boolean => {\n if (!to || !from) return true;\n const arr = Array.isArray(from) ? from : [from];\n return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));\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(\n \"error\",\n \"NODE_TYPE_MISSING\",\n `Unknown node type ${n.typeId}`,\n { typeId: n.typeId, nodeId: n.nodeId }\n );\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\n \"error\",\n \"CATEGORY_MISSING\",\n `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`\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(\n \"error\",\n \"EDGE_SOURCE_MISSING\",\n `Edge ${e.id} source node missing`,\n {\n edgeId: e.id,\n }\n );\n if (!dstNode)\n pushIssue(\n \"error\",\n \"EDGE_TARGET_MISSING\",\n `Edge ${e.id} target node missing`,\n {\n edgeId: e.id,\n }\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 const _srcDeclared = srcNode\n ? srcEff.outputs[e.source.handle]\n : undefined;\n const _dstDeclared = dstNode\n ? getInputTypeId(dstEff.inputs, e.target.handle)\n : undefined;\n // Effective edge type\n const effectiveTypeId = inferEdgeType(\n _srcDeclared,\n _dstDeclared,\n e.typeId\n );\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n pushIssue(\n \"error\",\n \"TYPE_MISSING\",\n `Edge ${e.id} type missing or unknown`,\n {\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 (\n declaredArr.length > 0 &&\n effectiveTypeId &&\n !canFlow(declaredArr, effectiveTypeId)\n ) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${\n srcNode.typeId\n }.${e.source.handle} (${declaredArr.join(\n \"|\"\n )}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n effectiveTypeId,\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 = getInputTypeId(dstEff.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = normOut(srcDeclared).length\n ? normOut(srcDeclared)\n : [effectiveTypeId];\n if (!canFlow(srcArr, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\n \"|\"\n )} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredIn})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: srcArr.join(\"|\"),\n }\n );\n }\n } else if (!canFlow(effectiveTypeId, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId,\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 = getInputTypeId(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle\n );\n if (typeof declaredIn === \"string\" && declaredIn.endsWith(\"[]\")) {\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> = {};\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\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc\n ? getInputTypeId(innerDesc.inputs, map.handle)\n : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\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\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"untyped\";\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(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): 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(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): 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>(\n event: K,\n handler: EngineEventListener<K>\n ): () => 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(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): 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): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate);\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(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\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 }\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<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\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(\n impl.exposure.outputs\n )) {\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[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [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[] =>\n Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)];\n\nconst broadcastBool = (\n a: boolean[] | boolean,\n b: boolean[] | boolean\n): [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 [\n new Array(len).fill(aa[0] ?? false),\n new Array(len).fill(bb[0] ?? false),\n ];\n};\n\nconst clamp = (x: number, min: number, max: number) =>\n 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] =\n 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) =>\n Array.isArray(v) &&\n v.length === 3 &&\n 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 (\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\")\n ) {\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)\n .fill(0)\n .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\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : 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])\n return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) =>\n 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) =>\n arr.length ? Math.min(...arr.map((x) => Number(x))) : 0,\n [BaseMathOperation.MaxAll]: (arr) =>\n arr.length ? Math.max(...arr.map((x) => Number(x))) : 0,\n };\n if (aggregateByOp[op] !== undefined)\n 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))\n ? Math.trunc(Number(ins.End))\n : 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(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\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: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\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(\n 1,\n Math.trunc(Number(ins.IntervalMs ?? 1000))\n );\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)\n ? Object.keys(obj)\n : Array.isArray(obj)\n ? Object.keys(obj)\n : [];\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)\n ? Object.values(obj)\n : Array.isArray(obj)\n ? Object.values(obj)\n : [];\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)\n ? opsRaw\n : opsRaw\n ? [opsRaw]\n : [];\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 (\n ins: { Value: number; DelayMs?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (\n valueRaw === undefined ||\n valueRaw === null ||\n Number.isNaN(Number(valueRaw))\n ) {\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 (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: ExecutionContext<any>\n ) => {\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) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n\nexport function generateId(\n prefix: string,\n used: Set<string> = new Set()\n): 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()\n .toString(36)\n .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>(\n event: K,\n handler: EngineEventListener<K>\n ) => 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(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\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(\n `[error] ${e.runId || e.nodeId}`,\n (e.err as any)?.message ?? e.err\n );\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(\n `[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`,\n e.message\n );\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined\n ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})`\n : \"\"\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 {\n setupBasicGraphRegistry,\n createRuntime,\n BaseMathOperation,\n} 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(\n \"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\"\n );\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(\n \"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\"\n );\n\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\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(\n \"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\"\n );\n console.log(\n \" count(n4.Values) =\",\n Array.isArray(n4Vals) ? n4Vals.length : 0\n );\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n BaseMathOperation,\n} 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(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\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 {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} 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(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\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","export type PathSegment = string | number | RegExp;\nexport type JsonPath = string | PathSegment[];\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 (\n current === null ||\n current === undefined ||\n typeof current !== \"object\"\n ) {\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 (\n current !== null &&\n current !== undefined &&\n typeof current === \"object\"\n ) {\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(\n obj: unknown,\n pathSegments: PathSegment[],\n newValue: unknown\n): 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): void {\n if (value === null) {\n const result = getValueAtPath(root, pathSegments);\n if (result && result.parent !== null && !Array.isArray(result.parent)) {\n delete (result.parent as Record<string, unknown>)[result.key];\n }\n return;\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(\n `Cannot create path: parent at segment ${i} is not an object`\n );\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(\n `Cannot set value: parent at final segment is not an object`\n );\n }\n current[lastSegment] = 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(\n ...findMatchingPaths(obj[index], remainingSegments, [\n ...currentPath,\n index,\n ])\n );\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, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(\n ...findMatchingPaths(obj[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\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(\n ...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i])\n );\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(\n ...findMatchingPaths(objRecord[key], remainingSegments, [\n ...currentPath,\n key,\n ])\n );\n }\n }\n }\n }\n\n return results;\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport {\n parseJsonPath,\n setValueAtPath,\n findMatchingPaths,\n type JsonPath,\n} from \"./json\";\nimport {\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n typed,\n} from \"../../core/types\";\n\n/**\n * Configuration object for value conversion.\n */\nexport interface ValueConverterConfig {\n nodeId: string;\n handleId: string;\n value: unknown;\n type: \"input\" | \"output\" | \"inputDefault\" | \"initialInput\";\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\n/**\n * Merge two graph definitions, remapping IDs to avoid conflicts.\n * Returns the merged graph and a mapping from source node IDs to new IDs.\n */\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\nexport function mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n converter?: ValueConverter\n): { merged: GraphDefinition; nodeIdMap: Record<string, string> } {\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\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n if (existingNodeIds.has(newId)) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n const transformedNode: GraphNodeDefinition = {\n ...n,\n nodeId: newId,\n };\n\n if (converter) {\n const nodeTypeId = transformedNode.typeId;\n\n if (transformedNode.resolvedHandles?.inputDefaults) {\n const transformedInputDefaults: Record<string, unknown> = {};\n for (const [handleId, value] of Object.entries(\n transformedNode.resolvedHandles.inputDefaults\n )) {\n const handleDataType = transformedNode.resolvedHandles?.inputs?.[\n handleId\n ]\n ? typeof transformedNode.resolvedHandles.inputs[handleId] ===\n \"string\"\n ? transformedNode.resolvedHandles.inputs[handleId]\n : (\n transformedNode.resolvedHandles.inputs[handleId] as {\n typeId?: string;\n }\n )?.typeId\n : undefined;\n const convertedValue = converter({\n nodeId: newId,\n handleId,\n value,\n type: \"inputDefault\",\n nodeTypeId,\n handleDataType,\n });\n // If converter returns null, skip this input default (delete it)\n if (convertedValue !== null) {\n transformedInputDefaults[handleId] = convertedValue;\n }\n }\n // Only set inputDefaults if there are any remaining after conversion\n if (Object.keys(transformedInputDefaults).length > 0) {\n transformedNode.resolvedHandles = {\n ...transformedNode.resolvedHandles,\n inputDefaults: transformedInputDefaults,\n };\n } else if (transformedNode.resolvedHandles) {\n // Remove inputDefaults if all were deleted\n const { inputDefaults, ...restHandles } =\n transformedNode.resolvedHandles;\n transformedNode.resolvedHandles = restHandles;\n }\n }\n }\n\n return transformedNode;\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 };\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 */\nexport function mergeInputsOutputs(\n targetInputs: Record<string, Record<string, unknown>>,\n targetOutputs: Record<string, Record<string, unknown>>,\n sourceInputs: Record<string, Record<string, unknown>>,\n sourceOutputs: Record<string, Record<string, unknown>>,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter,\n nodeTypeMap?: Map<string, string>,\n handleTypeMap?: Map<string, Map<string, string>>\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n // Deep copy target inputs/outputs to avoid mutating the original\n const mergedInputs: Record<string, Record<string, unknown>> = {};\n const mergedOutputs: Record<string, Record<string, unknown>> = {};\n\n // Copy target inputs/outputs\n for (const [nodeId, inputs] of Object.entries(targetInputs)) {\n mergedInputs[nodeId] = { ...inputs };\n }\n for (const [nodeId, outputs] of Object.entries(targetOutputs)) {\n mergedOutputs[nodeId] = { ...outputs };\n }\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedInputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedInputs[newId] exists\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"input\",\n nodeTypeId,\n handleDataType,\n })\n : value;\n // If converter returns null, delete this input\n if (convertedValue === null) {\n delete mergedInputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedInputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed inputs\n if (Object.keys(transformedInputs).length > 0) {\n mergedInputs[newId] = { ...mergedInputs[newId], ...transformedInputs };\n }\n\n // Clean up empty node input objects\n if (Object.keys(mergedInputs[newId]).length === 0) {\n delete mergedInputs[newId];\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedOutputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedOutputs[newId] exists\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTypedOutput(value)\n ? getTypedOutputTypeId(value)\n : undefined;\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"output\",\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n })\n : value;\n // If converter returns null, delete this output\n if (convertedValue === null) {\n delete mergedOutputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedOutputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed outputs\n if (Object.keys(transformedOutputs).length > 0) {\n mergedOutputs[newId] = {\n ...mergedOutputs[newId],\n ...transformedOutputs,\n };\n }\n\n // Clean up empty node output objects\n if (Object.keys(mergedOutputs[newId]).length === 0) {\n delete mergedOutputs[newId];\n }\n }\n }\n\n return { mergedInputs, mergedOutputs };\n}\n\n/**\n * Merge snapshot data (inputs, outputs) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n * UI positions are handled separately by mergeUIState.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const handleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of sourceDef.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeHandleTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.inputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : (handleDesc as { typeId?: string })?.typeId;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.outputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : Array.isArray(handleDesc)\n ? handleDesc[0]\n : undefined;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (nodeHandleTypes.size > 0) {\n handleTypeMap.set(node.nodeId, nodeHandleTypes);\n }\n }\n\n const { mergedInputs, mergedOutputs } = mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n nodeIdMap,\n converter,\n nodeTypeMap,\n handleTypeMap\n );\n\n return {\n mergedInputs,\n mergedOutputs,\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\nexport interface ValueMappingConfig {\n handleId?: string | RegExp;\n nodeId?: string | RegExp;\n nodeTypeId?: string | RegExp;\n handleDataType?: string | RegExp;\n runtimeTypeId?: string | RegExp;\n transformTypedValue?: boolean;\n path?: JsonPath;\n valueMap:\n | Map<string | number | boolean, unknown>\n | Record<string | number, unknown>;\n}\n\nexport interface ConverterConfig {\n mappings: ValueMappingConfig[];\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 {\n nodeId,\n handleId,\n value,\n type,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n } = converterConfig;\n const isTyped = isTypedOutput(value);\n\n for (const mapping of config.mappings) {\n if (!matchesPattern(handleId, mapping.handleId)) continue;\n if (!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 && isTyped) {\n const innerValue = getTypedOutputValue(value);\n const typedTypeId = getTypedOutputTypeId(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 (\n mapping.valueMap.has(\n matchValue as string | number | boolean\n )\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\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 (\n mapping.valueMap.has(innerValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n innerValue as string | number | boolean\n );\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 (\n typeof innerValue === \"string\" ||\n typeof innerValue === \"number\"\n ) {\n if (innerValue in mapping.valueMap) {\n newValue = mapping.valueMap[innerValue];\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 (isTyped) {\n const typedTypeId = getTypedOutputTypeId(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 (\n firstSegmentStr !== \"__spark_value\" &&\n firstSegmentStr !== \"__spark_type\"\n ) {\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 (\n mapping.valueMap.has(matchValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\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 if (value in mapping.valueMap) {\n return mapping.valueMap[value];\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/types.ts","../../src/builder/Registry.ts","../../src/runtime/components/Graph.ts","../../src/runtime/components/EventEmitter.ts","../../src/runtime/components/RunContextManager.ts","../../../protocol/lib/esm/index.js","../../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/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/json.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type {\n DataTypeId,\n NodeTypeId,\n HandleId,\n InputHandleDescriptor,\n NodeCategoryId,\n ResolvedHandles,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\n\nexport interface DataTypeDescriptor<T = unknown> {\n id: DataTypeId;\n displayName?: string;\n validate(value: T): boolean;\n helpers?: Record<string, unknown>;\n // Optional metadata used by tooling/UI (non-functional at runtime)\n bakeTarget?: { nodeTypeId: NodeTypeId; inputHandle: HandleId };\n}\n\nexport type InvalidateReason =\n | \"input-changed\"\n | \"dependency-changed\"\n | \"manual\"\n | \"disposed\";\n\nexport interface NodeContext<State> {\n state: State;\n setState(next: Partial<State>): void;\n}\n\nexport interface ExecutionContext<State> extends NodeContext<State> {\n nodeId: string;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n\n emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n execute: (\n resolve?: () => void,\n opts?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ) => void;\n getInput: (handle: HandleId) => unknown;\n reportProgress?: (value: number) => void;\n log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void;\n}\n\n/**\n * Extract State type from ExecutionContext<State>\n */\nexport type ExtractStateFromContext<T> = T extends ExecutionContext<infer S>\n ? S\n : never;\n\n/**\n * Extract State type from impl function signature\n */\nexport type ExtractStateFromImpl<Impl> = Impl extends (\n inputs: any,\n ctx: ExecutionContext<infer State>\n) => any\n ? State\n : never;\n\n/**\n * Extract Inputs type from impl function signature\n */\nexport type ExtractInputsFromImpl<Impl> = Impl extends (\n inputs: infer I,\n ctx: any\n) => any\n ? I\n : never;\n\nexport interface RuntimeNodeStats {\n runs: number;\n active: number;\n queued: number;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\nexport interface RuntimeEdgeStats {\n runs: number;\n inFlight: boolean;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\n// Typed output helper for union outputs\nexport type TypedOutputValue<T = unknown> = {\n __spark_type: DataTypeId;\n __spark_value: T;\n};\n\nexport function typed<T = unknown>(\n typeId: DataTypeId,\n value: T\n): TypedOutputValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTypedOutput(v: unknown): v is TypedOutputValue<unknown> {\n return (\n !!v &&\n typeof v === \"object\" &&\n Object.prototype.hasOwnProperty.call(v, \"__spark_type\")\n );\n}\n\nexport function getTypedOutputTypeId(v: unknown): DataTypeId | undefined {\n if (isTypedOutput(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function getTypedOutputValue(v: unknown): unknown {\n if (isTypedOutput(v)) return v.__spark_value;\n return v;\n}\n\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): DataTypeId | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n return typeof v === \"string\" ? v : v.typeId;\n}\n\nexport function isInputPrivate(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): boolean {\n const v = inputs ? inputs[handle] : undefined;\n return !!(v && typeof v === \"object\" && v.private);\n}\n\n// Helper type to extract State - prefers inferred from Impl, falls back to explicit State\ntype InferState<Impl, State> = ExtractStateFromImpl<Impl> extends never\n ? State\n : ExtractStateFromImpl<Impl>;\n\nexport interface NodeTypeDescriptor<\n I extends Record<string, InputHandleDescriptor> = Record<\n string,\n InputHandleDescriptor\n >,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\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> {\n id: NodeTypeId;\n categoryId: NodeCategoryId;\n displayName?: string;\n inputs: I; // handle -> DataTypeId or descriptor\n outputs: O; // handle -> DataTypeId or union of DataTypeIds\n impl: Impl; // category-specific implementation payload\n // Optional default runtime policy for this node type (merged with category/node-instance policy)\n policy?: Partial<ExecutionPolicy>;\n // Optional log level for this node type (controls lifecycle logging)\n logLevel?: LogLevel;\n // Optional per-node dynamic handle resolver. When provided, the runtime merges\n // these handles over static inputs/outputs based on per-node params/environment.\n resolveHandles?: (ctx: {\n nodeId: string;\n environment: Record<string, unknown>;\n params?: Record<string, unknown>;\n inputs?: Record<string, unknown>;\n }) => Partial<ResolvedHandles> | Promise<Partial<ResolvedHandles>>;\n // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?: Record<string, unknown>;\n lifecycle?: {\n prepare?: (\n params: Record<string, unknown>,\n ctx: ExecutionContext<InferState<Impl, State>>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<InferState<Impl, State>>) => void;\n };\n}\n","import type {\n DataTypeId,\n InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n DataTypeDescriptor,\n ExecutionContext,\n NodeTypeDescriptor,\n} 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// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\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<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\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<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\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) =>\n Array.isArray(value) ? value : [value]\n );\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<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | 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) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n 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 =\n 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 =\n 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)\n 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(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((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(\n fromTypeId: string,\n toTypeId: string\n ): 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 = { kind: \"sync\", convert: (v) => v };\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 };\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 };\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)\n 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 = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\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 (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\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 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 = { kind: \"sync\", convert };\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 = { kind: \"async\", convertAsync };\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) =>\n 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 ? 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 type { RuntimeNode, RuntimeEdge } from \"./types\";\n\n/**\n * Graph component - manages nodes, edges, and handle resolution\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(private registry?: Registry) {}\n\n // Node accessors\n getNode(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n getNodes(): Map<string, RuntimeNode<any>> {\n return this.nodes;\n }\n\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // Edge accessors\n getEdges(): RuntimeEdge[] {\n return this.edges;\n }\n\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = edges;\n }\n\n // Registry accessor\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 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 getResolvedHandlesMap(): Map<string, ResolvedHandles> {\n return this.resolvedByNode;\n }\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 (!(e.target.handle in node.inputs)) return false;\n }\n return true;\n }\n\n // Clear all data\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n}\n","import type {\n RuntimeEventName,\n RuntimeEventMap,\n RuntimeEventListener,\n} 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<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => 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>(\n event: K,\n payload: RuntimeEventMap[K]\n ): 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","import type { Graph } from \"./Graph\";\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 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 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\n constructor(private readonly graph: Graph) {\n this.graph = graph;\n }\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n resolve?: () => void,\n options?: {\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 pendingNodes: 0,\n pendingEdges: 0,\n pendingResolvers: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n resolve,\n };\n this.runContexts.set(id, ctx);\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 startNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingNodes++;\n }\n\n finishNodeRun(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingNodes--;\n this.finishRunContextIfPossible(id);\n }\n\n startEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingEdges++;\n }\n\n finishEdgeConversion(id: RunContextId, edgeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingEdges--;\n this.finishRunContextIfPossible(id);\n }\n\n startHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingResolvers++;\n }\n\n finishHandleResolution(id: RunContextId, nodeId: string): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n ctx.pendingResolvers--;\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) return;\n if (\n ctx.pendingNodes > 0 ||\n ctx.pendingEdges > 0 ||\n ctx.pendingResolvers > 0\n ) {\n return; // Still has pending work\n }\n\n // Clean up activeRunContexts from all nodes\n for (const node of this.graph.getNodes().values()) {\n node.activeRunContextIds.delete(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 for (const e of this.graph.getEdges()) {\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 // 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 const node = this.graph.getNode(id);\n if (node) node.activeRunContextIds.clear();\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\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 this.runContexts.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","/**\n * Shared utility functions for runtime components\n */\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","import type {\n GraphDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"../../core/types\";\nimport type { RuntimeEdge } from \"./types\";\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 const inputs = {\n ...desc.inputs,\n ...dyn.inputs,\n ...overrideInputs,\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(\n def: GraphDefinition,\n registry: Registry,\n resolvedByNode: Map<string, ResolvedHandles>\n): 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, effectiveTypeId } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n resolvedByNode,\n e.typeId\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 effectiveTypeId, // Always present\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 */\nexport function extractEdgeTypes(\n sourceNodeId: string,\n sourceHandle: string,\n targetNodeId: string,\n targetHandle: string,\n resolvedByNode: Map<string, ResolvedHandles>,\n explicitTypeId?: string\n): {\n srcDeclared: string | string[] | undefined;\n dstDeclared: string | undefined;\n effectiveTypeId: string;\n} {\n const srcResolved = resolvedByNode.get(sourceNodeId);\n const dstResolved = resolvedByNode.get(targetNodeId);\n\n const srcDeclared = srcResolved\n ? (srcResolved.outputs[sourceHandle] as string | string[] | undefined)\n : undefined;\n const dstDeclared = dstResolved\n ? getInputTypeId(dstResolved.inputs, targetHandle)\n : undefined;\n\n let effectiveTypeId = explicitTypeId;\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n }\n\n return {\n srcDeclared,\n dstDeclared,\n effectiveTypeId: effectiveTypeId ?? \"untyped\",\n };\n}\n\n// Static helper: build edge converters for type coercion\nexport function buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: 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\n const isUnion = Array.isArray(srcDeclared);\n const srcTypes = isUnion ? srcDeclared : [srcDeclared];\n\n // Helper to get the coercion for a specific type\n const getCoercion = (typeId: string) => {\n return registry.resolveCoercion(typeId, dstDeclared);\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 = getTypedOutputTypeId(v);\n const payload = getTypedOutputValue(v);\n\n if (isUnion) {\n if (!typeId) {\n throw new Error(\n `Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(\n `Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\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 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) return payload;\n if (res.kind === \"async\") {\n return await res.convertAsync(payload, signal);\n }\n return 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) return payload;\n if (res.kind === \"async\") {\n throw new Error(\n `Async coercion required but convert used (${edgeLabel})`\n );\n }\n return res.convert(payload);\n },\n };\n}\n","import type { ResolvedHandles } 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 { isPromise, unwrapMaybePromise } from \"../utils\";\nimport { buildEdgeConverters, extractEdgeTypes } from \"./graph-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\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 * 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 // Track resolver start for all active run-contexts\n if (node.activeRunContextIds && node.activeRunContextIds.size > 0) {\n for (const runContextId of node.activeRunContextIds) {\n this.runContextManager.startHandleResolution(runContextId, nodeId);\n }\n }\n\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId, node.activeRunContextIds);\n }, 0);\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 edges = this.graph.getEdges();\n const resolvedByNode = this.graph.getResolvedHandlesMap();\n\n for (const e of edges) {\n // Only update edges that touch the changed node\n const touchesChangedNode =\n e.source.nodeId === nodeId || e.target.nodeId === nodeId;\n if (!touchesChangedNode) continue;\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, effectiveTypeId } = extractEdgeTypes(\n e.source.nodeId,\n e.source.handle,\n e.target.nodeId,\n e.target.handle,\n resolvedByNode,\n e.typeId\n );\n\n // Update edge properties\n if (!e.typeId) {\n e.effectiveTypeId = effectiveTypeId;\n }\n e.dstDeclared = dstDeclared;\n e.srcUnionTypes = Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined;\n\n // Update converters\n const conv = buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n this.registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\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 this.edgePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n srcNode.activeRunContextIds\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(\n nodeId: string,\n activeRunContextIds?: Set<RunContextId>\n ): 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 =\n nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] 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(\n `[node:${nodeId}:${node.typeId}] resolveHandles-done (error)`\n );\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] 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 if (!before) return;\n\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 const inputs = { ...nodeDesc.inputs, ...resolved?.inputs };\n const outputs = { ...nodeDesc.outputs, ...resolved?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...resolved?.inputDefaults,\n };\n const after = { inputs, outputs, inputDefaults };\n // Compare shallow-structurally via JSON\n if (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 { getTypedOutputTypeId, isTypedOutput } from \"../../core/types\";\nimport type { RunContextId, RuntimeEdge, RuntimeNode } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { valuesEqual } from \"../utils\";\nimport {\n INodeExecutor,\n IHandleResolver,\n IRuntime,\n IEdgePropagator,\n} from \"./interfaces\";\n\n/**\n * EdgePropagator component - handles value propagation through edges\n */\nexport class EdgePropagator implements IEdgePropagator {\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\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 nodeExecutor: INodeExecutor\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(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): void {\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 * Set source output value and emit event\n */\n private setSourceOutput(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): boolean {\n const srcNode = this.graph.getNode(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return false;\n }\n srcNode.outputs[srcHandle] = value;\n this.eventEmitter.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n return true;\n }\n\n /**\n * Find all outgoing edges from a source node handle\n */\n private findOutgoingEdges(\n srcNodeId: string,\n srcHandle: string\n ): RuntimeEdge[] {\n const edges = this.graph.getEdges();\n return edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\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 (\n runContextIds &&\n runContextIds.size > 0 &&\n !(effectiveRunContexts && effectiveRunContexts.size > 0)\n ) {\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(\n edge: RuntimeEdge,\n value: unknown,\n srcNodeId: string\n ): boolean {\n const isUnion = Array.isArray(edge.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${\n edge.source.handle\n } 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 err,\n });\n return false;\n }\n\n return true;\n }\n\n /**\n * Handle synchronous conversion\n */\n private handleSyncConversion(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): void {\n let convertedValue = value;\n if (edge.convert) {\n convertedValue = edge.convert(value);\n }\n this.applyToTarget(edge, convertedValue, effectiveRunContexts);\n }\n\n /**\n * Handle asynchronous conversion\n */\n private handleAsyncConversion(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): void {\n if (!edge.convertAsync) return;\n // Track edge run-context IDs for pendingEdges tracking\n const edgeRunContextIds = effectiveRunContexts\n ? Array.from(effectiveRunContexts)\n : undefined;\n\n if (edgeRunContextIds) {\n for (const id of edgeRunContextIds) {\n this.runContextManager.startEdgeConversion(id, edge.id);\n }\n }\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 });\n\n const controller = new AbortController();\n const startAt = Date.now();\n edge.stats.runs += 1;\n edge.stats.inFlight = true;\n edge.stats.progress = 0;\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(\n edge: RuntimeEdge,\n value: unknown,\n effectiveRunContexts?: Set<RunContextId>\n ): 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 as any)?.rerunOnSameInput === true;\n const descRerunPolicy = (desc?.policy as any)?.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 =\n 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.setTargetInput(edge, dstNode, processedValue);\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 if (!dstNode.lastInputAt) {\n dstNode.lastInputAt = {};\n }\n dstNode.lastInputAt[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 =\n typeof edge.dstDeclared === \"string\" && edge.dstDeclared.endsWith(\"[]\");\n\n if (!dstIsArray) {\n return value;\n }\n\n const toArray = (x: unknown): unknown[] =>\n 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 edges = this.graph.getEdges();\n const merged: unknown[] = [];\n for (const ed of edges) {\n if (\n ed.target.nodeId === edge.target.nodeId &&\n ed.target.handle === edge.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n\n return merged;\n }\n\n /**\n * Check if input value should be set (respecting skipPropagateValues)\n */\n private shouldSetInputValue(\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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 * Set target input value and emit event\n */\n private setTargetInput(\n edge: RuntimeEdge,\n dstNode: RuntimeNode,\n value: unknown\n ): void {\n const now = Date.now();\n dstNode.inputs[edge.target.handle] = value;\n\n // Track when this input was set\n if (!dstNode.lastInputAt) {\n dstNode.lastInputAt = {};\n }\n dstNode.lastInputAt[edge.target.handle] = now;\n\n this.eventEmitter.emit(\"value\", {\n nodeId: edge.target.nodeId,\n handle: edge.target.handle,\n value,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n this.handleResolver.scheduleRecomputeHandles(edge.target.nodeId);\n }\n\n /**\n * Execute downstream if conditions are met\n */\n private executeDownstream(\n targetNodeId: string,\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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, effectiveRunContexts);\n }\n }\n\n /**\n * Check if execution should propagate\n */\n private shouldPropagateExecution(\n effectiveRunContexts: Set<RunContextId> | undefined\n ): 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 edge.stats.inFlight = false;\n const duration = Date.now() - startAt;\n edge.stats.lastDurationMs = duration;\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 durationMs: duration,\n });\n\n edge.stats.lastEndAt = Date.now();\n edge.stats.lastError = undefined;\n }\n\n /**\n * Handle edge conversion error\n */\n private handleEdgeConversionError(edge: RuntimeEdge, err: unknown): void {\n edge.stats.inFlight = false;\n edge.stats.lastError = err;\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 err,\n });\n }\n\n /**\n * Finish edge conversion and decrement pending edges\n */\n private finishEdgeConversion(\n edgeRunContextIds: RunContextId[] | undefined,\n edgeId: string\n ): void {\n if (!edgeRunContextIds) return;\n\n for (const id of edgeRunContextIds) {\n this.runContextManager.finishEdgeConversion(id, edgeId);\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 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\n ? new Set(Object.keys(resolved.outputs))\n : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\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, node.activeRunContextIds);\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 { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RuntimeNode, RunContextId } from \"./types\";\nimport type { Graph } from \"./Graph\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IEdgePropagator, INodeExecutor, IRuntime } from \"./interfaces\";\n\n/**\n * Execution plan containing all information needed to start a node execution.\n * Captures a snapshot of the node's policy at scheduling time so later\n * mutations to `node.policy` don't affect an in-flight run.\n */\ninterface ExecutionPlan {\n runId: string;\n effectiveInputs: Record<string, unknown>;\n runContextIdsForRun?: Set<RunContextId>;\n timestamp: number;\n policy: RuntimeNode[\"policy\"];\n}\n\n/**\n * NodeExecutor component - handles node execution scheduling and lifecycle\n */\nexport class NodeExecutor implements INodeExecutor {\n private environment: Record<string, unknown> = {};\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 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 /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.graph.getNode(nodeId);\n if (!node) return {};\n const registry = this.graph.getRegistry();\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.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(\n Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h))\n );\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 edges = this.graph.getEdges();\n const inbound = new Set(\n edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\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 (inbound.has(handle)) continue; // Don't override wired inputs\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\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 node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n });\n\n // Create log function that respects node's logLevel\n const log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => {\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const requestedValue = LOG_LEVEL_VALUES[level] ?? 1;\n\n // Only log if requested level >= node's logLevel\n if (requestedValue >= nodeLogValue && nodeLogLevel !== \"silent\") {\n const contextStr = context\n ? ` ${Object.entries(context)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join(\" \")}`\n : \"\";\n const fullMessage = `[node:${runId || nodeId}:${\n node.typeId\n }] ${message}${contextStr}`;\n switch (level) {\n case \"debug\":\n console.info(fullMessage);\n break;\n case \"info\":\n console.info(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n }\n };\n\n return {\n nodeId,\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.edgePropagator.invalidateDownstream(nodeId);\n },\n execute: (\n resolve?: () => void,\n opts?: { skipPropagateValues?: boolean; propagate?: boolean }\n ) => {\n if (this.graph.allInboundHaveValue(nodeId)) {\n let runContextIdsToUse =\n this.runtime.getRunMode() === \"auto\" ? undefined : runContextIds;\n if (\n this.runtime.getRunMode() === \"manual\" &&\n (!runContextIds || runContextIds.size === 0)\n ) {\n runContextIdsToUse = new Set([\n this.runContextManager.createRunContext(nodeId, resolve, opts),\n ]);\n }\n this.execute(nodeId, runContextIdsToUse);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n /**\n * Internal method for executing inputs changed (also used by GraphRuntime)\n */\n execute(nodeId: string, runContextIds?: Set<RunContextId>): void {\n const node = this.graph.getNode(nodeId);\n if (!node) return;\n\n const runMode = this.runtime.getRunMode();\n if (!runMode) {\n console.warn(\"NodeExecutor.execute: no runMode, skipping execution\");\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 runContextIds = new Set([\n this.runContextManager.createRunContext(nodeId, () => {}, {\n propagate: false,\n }),\n ]);\n } else {\n console.warn(\n \"NodeExecutor.execute: no runContextIds provided in manual mode, skipping execution\"\n );\n return;\n }\n }\n\n if (runMode === \"auto\" && runContextIds && runContextIds.size > 0) {\n console.warn(\n \"NodeExecutor.execute: 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 // Attach run-context IDs if provided\n this.attachRunContexts(node, runContextIds);\n\n // Handle debouncing\n const now = Date.now();\n if (this.shouldDebounce(node, now)) {\n this.handleDebouncedSchedule(node, nodeId, now);\n return;\n }\n\n // Prepare execution plan\n const executionPlan = this.prepareExecutionPlan(\n node,\n nodeId,\n runContextIds,\n now\n );\n\n // Route to appropriate concurrency handler\n this.routeToConcurrencyHandler(node, nodeId, executionPlan);\n }\n\n /**\n * Attach run-context IDs to the node\n */\n private attachRunContexts(\n node: RuntimeNode,\n runContextIds?: Set<RunContextId>\n ): void {\n if (!runContextIds) return;\n\n node.activeRunContextIds = new Set([\n ...node.activeRunContextIds,\n ...runContextIds,\n ]);\n }\n\n /**\n * Check if execution should be debounced\n */\n private shouldDebounce(node: RuntimeNode, now: number): boolean {\n const policy = node.policy ?? {};\n return !!(\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n );\n }\n\n /**\n * Handle debounced scheduling by replacing the latest queued item\n */\n private handleDebouncedSchedule(\n node: RuntimeNode,\n nodeId: string,\n now: number\n ): void {\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n node.queue.splice(0, node.queue.length);\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n }\n\n /**\n * Prepare execution plan with all necessary information\n */\n private prepareExecutionPlan(\n node: RuntimeNode,\n nodeId: string,\n runContextIds: Set<RunContextId> | undefined,\n now: number\n ): ExecutionPlan {\n node.lastScheduledAt = now;\n node.runSeq += 1;\n const runId = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = 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 };\n }\n\n /**\n * Route execution to appropriate concurrency handler\n */\n private routeToConcurrencyHandler(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n\n switch (mode) {\n case \"drop\":\n this.handleDropMode(node, nodeId, plan);\n break;\n case \"queue\":\n this.handleQueueMode(node, nodeId, plan);\n break;\n case \"switch\":\n case \"merge\":\n default:\n this.startRun(node, 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(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\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(node, nodeId, plan);\n }\n\n /**\n * Handle queue mode - add to queue and process sequentially\n */\n private handleQueueMode(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan\n ): void {\n const maxQ = plan.policy?.maxQueue ?? 8;\n node.queue.push({ runId: plan.runId, inputs: plan.effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n this.processQueue(node, nodeId);\n }\n\n /**\n * Process queued executions sequentially\n */\n private processQueue(node: RuntimeNode, nodeId: string): void {\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n\n node.latestRunId = next.runId;\n const policySnapshot = node.policy ? { ...node.policy } : undefined;\n\n const plan: ExecutionPlan = {\n runId: next.runId,\n effectiveInputs: next.inputs,\n runContextIdsForRun: node.activeRunContextIds,\n timestamp: Date.now(),\n policy: policySnapshot,\n };\n\n this.startRun(node, nodeId, plan, () => {\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n }\n\n /**\n * Start a node execution run\n */\n private startRun(\n node: RuntimeNode,\n nodeId: string,\n plan: ExecutionPlan,\n onDone?: () => void\n ): void {\n // Track run-contexts\n this.trackRunContextStart(nodeId, plan.runContextIdsForRun);\n\n // Setup execution controller\n const controller = this.createExecutionController(node, plan.runId);\n\n // Handle concurrency mode\n this.applyConcurrencyMode(node, controller, plan);\n\n // Setup timeout if needed\n const timeoutId = this.setupTimeout(node, controller, plan);\n\n // Create execution context\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n plan.effectiveInputs,\n plan.runId,\n controller.signal,\n plan.runContextIdsForRun,\n this.createEmitAndProgressHandlers(node, nodeId, plan)\n );\n\n // Execute\n this.executeNode(node, nodeId, ctx, plan, controller, timeoutId, onDone);\n }\n\n /**\n * Track run-context start for pending nodes\n */\n private trackRunContextStart(\n nodeId: string,\n runContextIdsForRun?: Set<RunContextId>\n ): 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 * Create execution controller and update node stats\n */\n private createExecutionController(\n node: RuntimeNode,\n runId: string\n ): AbortController {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = Date.now();\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n return controller;\n }\n\n /**\n * Apply concurrency mode (switch mode aborts other controllers)\n */\n private applyConcurrencyMode(\n node: RuntimeNode,\n controller: AbortController,\n plan: ExecutionPlan\n ): void {\n const mode = plan.policy?.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n }\n\n /**\n * Setup timeout for execution if configured\n */\n private setupTimeout(\n node: RuntimeNode,\n controller: AbortController,\n plan: ExecutionPlan\n ): 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 node: RuntimeNode,\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 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(\n nodeId,\n handle,\n value,\n plan.runContextIdsForRun\n );\n },\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId: plan.runId,\n progress: node.stats.progress,\n });\n },\n };\n }\n\n /**\n * Execute the node with retry logic and cleanup\n */\n private executeNode(\n node: RuntimeNode,\n nodeId: string,\n ctx: ExecutionContext<any>,\n plan: ExecutionPlan,\n controller: AbortController,\n timeoutId: NodeJS.Timeout | undefined,\n onDone?: () => void\n ): void {\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\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 node.stats.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 runId: plan.runId,\n err,\n });\n } finally {\n this.cleanupExecution(\n node,\n nodeId,\n ctx,\n plan,\n controller,\n timeoutId,\n hadError,\n onDone\n );\n }\n };\n\n exec(0);\n }\n\n /**\n * Cleanup after execution completes\n */\n private cleanupExecution(\n node: RuntimeNode,\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 node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n if (!hadError) node.stats.lastError = undefined;\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 node.lastSuccessAt = Date.now();\n }\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\n if (!isCancelled) {\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 ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n\n if (onDone) onDone();\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(\n node: RuntimeNode,\n reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"\n ): void {\n for (const controller of Array.from(node.activeControllers)) {\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 if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: node.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 node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\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(\n nodeIds: string[],\n reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"\n ): 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 const edges = this.graph.getEdges();\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 for (const edge of edges) {\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 const node = this.graph.getNode(nodeId);\n if (!node) continue;\n\n this.cancelNodeActiveRuns(node, reason);\n\n node.runSeq += 1;\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n node.latestRunId = `${nodeId}:${node.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 {\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 { getInputTypeId, getTypedOutputTypeId } from \"../core/types\";\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 type {\n INodeExecutor,\n IRuntime,\n IEdgePropagator,\n} from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type { RuntimeNode, RunContextId } from \"./components/types\";\nimport { buildEdges, tryHandleResolving } from \"./components/graph-utils\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => 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\n // State\n private environment: Record<string, unknown> = {};\n private runMode: RunMode | null = null;\n private pauseRefCount = 0;\n\n constructor() {\n // Initialize components\n this.graph = new Graph();\n this.eventEmitter = new EventEmitter();\n this.runContextManager = new RunContextManager(this.graph);\n\n this.handleResolver = new HandleResolver(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this\n );\n\n this.edgePropagator = new EdgePropagator(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver,\n this\n );\n\n // Create NodeExecutor with EdgePropagator\n this.nodeExecutor = new NodeExecutor(\n this.graph,\n this.eventEmitter,\n this.runContextManager,\n this,\n this\n );\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\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\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = tryHandleResolving(def, registry, gr.environment);\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.getResolvedHandlesMap());\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>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n return this.eventEmitter.on(event, handler);\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 edges = this.graph.getEdges();\n const registry = this.graph.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (value !== undefined && registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graph.getResolvedHandles(nodeId);\n // Get typeId from resolved handles first, then registry statics\n const typeId = resolved\n ? getInputTypeId(resolved.inputs, handle)\n : desc\n ? getInputTypeId(desc.inputs, handle)\n : undefined;\n\n if (typeId) {\n const typeDesc = registry.types.get(typeId);\n if (typeDesc?.validate && !typeDesc.validate(value)) {\n // Emit error event for invalid input value and reject it\n const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeId}): ${JSON.stringify(\n value\n )}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n handle,\n typeId,\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 if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n // Emit value event for input updates\n this.eventEmitter.emit(\"value\", { nodeId, handle, value, io: \"input\" });\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 const node = this.graph.getNode(nodeId);\n const shouldAutoRun =\n this.runMode === \"auto\" || node?.policy?.autoRun === true;\n if (shouldAutoRun && this.graph.allInboundHaveValue(nodeId)) {\n this.execute(nodeId);\n }\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): void {\n for (const node of this.graph.getNodes().values()) {\n const effectiveInputs = this.nodeExecutor.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const ctx = this.nodeExecutor.createExecutionContext(\n node.nodeId,\n node,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal\n );\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 node.runtime.onActivated?.();\n }\n if (this.runMode === \"auto\" && invalidate) {\n for (const nodeId of this.graph.getNodes().keys()) {\n if (this.graph.allInboundHaveValue(nodeId)) this.execute(nodeId);\n }\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);\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 /**\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 cancelNodeRuns(nodeIds: string[]): void {\n this.nodeExecutor.cancelNodeRuns(nodeIds);\n }\n\n getNodeIds(): string[] {\n return Array.from(this.graph.getNodes().keys());\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.getNodes().keys()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(\n this.graph.getNodes().values()\n ).map((n) => {\n const resolved = this.graph.getResolvedHandles(n.nodeId);\n\n return {\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[] = this.graph.getEdges().map((e) => ({\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 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 for (const n of this.graph.getNodes().values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\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 options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\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(\n startNodeId,\n resolve,\n options\n );\n\n node.activeRunContextIds.add(id);\n this.execute(startNodeId, new Set([id]));\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 copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n this.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { invalidate: !options?.dry }\n );\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 for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.inputs[h],\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(node.inputs[h]),\n });\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n const node = this.graph.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.outputs[h],\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(node.outputs[h]),\n });\n }\n }\n if (opts?.invalidate) {\n for (const nodeId of this.graph.getNodes().keys()) {\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.getNodes().keys());\n for (const nodeId of Array.from(beforeIds)) {\n if (!afterIds.has(nodeId)) {\n const node = this.graph.getNode(nodeId)!;\n this.nodeExecutor.cancelNodeActiveRuns(node, \"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) => Object.assign(node.state, 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(\n newNode.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.nodeExecutor.createExecutionContext(\n newNode.nodeId,\n newNode,\n effectiveInputs,\n `${newNode.nodeId}:init`,\n ctrl.signal\n );\n if (newNode.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n newNode.lifecycle.prepare(newNode.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n newNode.runtime.onActivated?.();\n } else {\n existing.params = 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 existing.policy = {\n ...cat?.policy,\n ...desc?.policy,\n ...n.params?.policy,\n };\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n }\n\n {\n const beforeEdges = this.graph.getEdges();\n const beforeInbound = new Map<string, Set<string>>();\n for (const e of beforeEdges) {\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\n const beforeOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of beforeEdges) {\n const tmap =\n beforeOutTargets.get(e.source.nodeId) ??\n 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 = tryHandleResolving(def, registry, this.environment);\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 (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\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(\n def,\n registry,\n this.graph.getResolvedHandlesMap()\n );\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 const afterEdges = this.graph.getEdges();\n for (const e of afterEdges) {\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 const node = this.graph.getNode(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(beforeSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n\n if (changed) {\n this.edgePropagator.clearArrayBuckets(nodeId);\n if (\n this.runMode === \"auto\" &&\n this.graph.allInboundHaveValue(nodeId)\n ) {\n this.execute(nodeId);\n }\n }\n }\n\n // Propagate changes on edges added\n const afterOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of afterEdges) {\n const targetMap =\n afterOutTargets.get(e.source.nodeId) ??\n 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 =\n beforeOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const afterMap =\n afterOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(beforeMap.keys()),\n ...Array.from(afterMap.keys()),\n ]);\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\n if (this.runMode === \"manual\") {\n runContextIdsToUse = new Set([\n this.runContextManager.createRunContext(nodeId, undefined, {\n propagate: false,\n }),\n ]);\n }\n this.propagate(nodeId, handle, val, runContextIdsToUse);\n }\n }\n }\n }\n }\n }\n }\n\n dispose(): void {\n this.runContextManager.resolveAll();\n\n for (const node of this.graph.getNodes().values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.graph.clear();\n }\n\n execute(nodeId: string, runContextIds?: Set<RunContextId>): void {\n this.nodeExecutor.execute(nodeId, runContextIds);\n }\n\n propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): 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 {\n GraphDefinition,\n GraphNodeDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputTypeId } from \"../core/types\";\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 effectiveTypeId?: 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}\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<\n string,\n Omit<ResolvedHandles, \"inputDefaults\">\n >();\n\n const getEffectiveHandles = (\n n?: GraphNodeDefinition\n ): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\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 inferEdgeType = (\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n explicit?: string\n ): string | undefined => {\n if (explicit) return explicit;\n if (Array.isArray(srcDeclared) && dstDeclared) return dstDeclared;\n if (srcDeclared)\n return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n return undefined;\n };\n\n const canFlow = (\n from: string | string[] | undefined,\n to?: string\n ): boolean => {\n if (!to || !from) return true;\n const arr = Array.isArray(from) ? from : [from];\n return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));\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(\n \"error\",\n \"NODE_TYPE_MISSING\",\n `Unknown node type ${n.typeId}`,\n { typeId: n.typeId, nodeId: n.nodeId }\n );\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\n \"error\",\n \"CATEGORY_MISSING\",\n `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`\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(\n \"error\",\n \"EDGE_SOURCE_MISSING\",\n `Edge ${e.id} source node missing`,\n {\n edgeId: e.id,\n }\n );\n if (!dstNode)\n pushIssue(\n \"error\",\n \"EDGE_TARGET_MISSING\",\n `Edge ${e.id} target node missing`,\n {\n edgeId: e.id,\n }\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 const _srcDeclared = srcNode\n ? srcEff.outputs[e.source.handle]\n : undefined;\n const _dstDeclared = dstNode\n ? getInputTypeId(dstEff.inputs, e.target.handle)\n : undefined;\n // Effective edge type\n const effectiveTypeId = inferEdgeType(\n _srcDeclared,\n _dstDeclared,\n e.typeId\n );\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n pushIssue(\n \"error\",\n \"TYPE_MISSING\",\n `Edge ${e.id} type missing or unknown`,\n {\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 (\n declaredArr.length > 0 &&\n effectiveTypeId &&\n !canFlow(declaredArr, effectiveTypeId)\n ) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${\n srcNode.typeId\n }.${e.source.handle} (${declaredArr.join(\n \"|\"\n )}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n effectiveTypeId,\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 = getInputTypeId(dstEff.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = normOut(srcDeclared).length\n ? normOut(srcDeclared)\n : [effectiveTypeId];\n if (!canFlow(srcArr, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\n \"|\"\n )} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredIn})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: srcArr.join(\"|\"),\n }\n );\n }\n } else if (!canFlow(effectiveTypeId, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId,\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 = getInputTypeId(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle\n );\n if (typeof declaredIn === \"string\" && declaredIn.endsWith(\"[]\")) {\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> = {};\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\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc\n ? getInputTypeId(innerDesc.inputs, map.handle)\n : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\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\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"untyped\";\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(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): 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(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): 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>(\n event: K,\n handler: EngineEventListener<K>\n ): () => 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(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): 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): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate);\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(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\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 }\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<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\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(\n impl.exposure.outputs\n )) {\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[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [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[] =>\n Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)];\n\nconst broadcastBool = (\n a: boolean[] | boolean,\n b: boolean[] | boolean\n): [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 [\n new Array(len).fill(aa[0] ?? false),\n new Array(len).fill(bb[0] ?? false),\n ];\n};\n\nconst clamp = (x: number, min: number, max: number) =>\n 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] =\n 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) =>\n Array.isArray(v) &&\n v.length === 3 &&\n 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 (\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\")\n ) {\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)\n .fill(0)\n .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\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : 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])\n return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) =>\n 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) =>\n arr.length ? Math.min(...arr.map((x) => Number(x))) : 0,\n [BaseMathOperation.MaxAll]: (arr) =>\n arr.length ? Math.max(...arr.map((x) => Number(x))) : 0,\n };\n if (aggregateByOp[op] !== undefined)\n 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))\n ? Math.trunc(Number(ins.End))\n : 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(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\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: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\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(\n 1,\n Math.trunc(Number(ins.IntervalMs ?? 1000))\n );\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)\n ? Object.keys(obj)\n : Array.isArray(obj)\n ? Object.keys(obj)\n : [];\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)\n ? Object.values(obj)\n : Array.isArray(obj)\n ? Object.values(obj)\n : [];\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)\n ? opsRaw\n : opsRaw\n ? [opsRaw]\n : [];\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 (\n ins: { Value: number; DelayMs?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (\n valueRaw === undefined ||\n valueRaw === null ||\n Number.isNaN(Number(valueRaw))\n ) {\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 (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: ExecutionContext<any>\n ) => {\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) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n\nexport function generateId(\n prefix: string,\n used: Set<string> = new Set()\n): 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()\n .toString(36)\n .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>(\n event: K,\n handler: EngineEventListener<K>\n ) => 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(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\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(\n `[error] ${e.runId || e.nodeId}`,\n (e.err as any)?.message ?? e.err\n );\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(\n `[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`,\n e.message\n );\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined\n ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})`\n : \"\"\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 {\n setupBasicGraphRegistry,\n createRuntime,\n BaseMathOperation,\n} 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(\n \"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\"\n );\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(\n \"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\"\n );\n\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\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(\n \"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\"\n );\n console.log(\n \" count(n4.Values) =\",\n Array.isArray(n4Vals) ? n4Vals.length : 0\n );\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n BaseMathOperation,\n} 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(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\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 {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} 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(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\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","export type PathSegment = string | number | RegExp;\nexport type JsonPath = string | PathSegment[];\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 (\n current === null ||\n current === undefined ||\n typeof current !== \"object\"\n ) {\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 (\n current !== null &&\n current !== undefined &&\n typeof current === \"object\"\n ) {\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(\n obj: unknown,\n pathSegments: PathSegment[],\n newValue: unknown\n): 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): void {\n if (value === null) {\n const result = getValueAtPath(root, pathSegments);\n if (result && result.parent !== null && !Array.isArray(result.parent)) {\n delete (result.parent as Record<string, unknown>)[result.key];\n }\n return;\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(\n `Cannot create path: parent at segment ${i} is not an object`\n );\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(\n `Cannot set value: parent at final segment is not an object`\n );\n }\n current[lastSegment] = 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(\n ...findMatchingPaths(obj[index], remainingSegments, [\n ...currentPath,\n index,\n ])\n );\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, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(\n ...findMatchingPaths(obj[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\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(\n ...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i])\n );\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(\n ...findMatchingPaths(objRecord[key], remainingSegments, [\n ...currentPath,\n key,\n ])\n );\n }\n }\n }\n }\n\n return results;\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport {\n parseJsonPath,\n setValueAtPath,\n findMatchingPaths,\n type JsonPath,\n} from \"./json\";\nimport {\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n typed,\n} from \"../../core/types\";\n\n/**\n * Configuration object for value conversion.\n */\nexport interface ValueConverterConfig {\n nodeId: string;\n handleId: string;\n value: unknown;\n type: \"input\" | \"output\" | \"inputDefault\" | \"initialInput\";\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\n/**\n * Merge two graph definitions, remapping IDs to avoid conflicts.\n * Returns the merged graph and a mapping from source node IDs to new IDs.\n */\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\nexport function mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n converter?: ValueConverter\n): { merged: GraphDefinition; nodeIdMap: Record<string, string> } {\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\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n if (existingNodeIds.has(newId)) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n const transformedNode: GraphNodeDefinition = {\n ...n,\n nodeId: newId,\n };\n\n if (converter) {\n const nodeTypeId = transformedNode.typeId;\n\n if (transformedNode.resolvedHandles?.inputDefaults) {\n const transformedInputDefaults: Record<string, unknown> = {};\n for (const [handleId, value] of Object.entries(\n transformedNode.resolvedHandles.inputDefaults\n )) {\n const handleDataType = transformedNode.resolvedHandles?.inputs?.[\n handleId\n ]\n ? typeof transformedNode.resolvedHandles.inputs[handleId] ===\n \"string\"\n ? transformedNode.resolvedHandles.inputs[handleId]\n : (\n transformedNode.resolvedHandles.inputs[handleId] as {\n typeId?: string;\n }\n )?.typeId\n : undefined;\n const convertedValue = converter({\n nodeId: newId,\n handleId,\n value,\n type: \"inputDefault\",\n nodeTypeId,\n handleDataType,\n });\n // If converter returns null, skip this input default (delete it)\n if (convertedValue !== null) {\n transformedInputDefaults[handleId] = convertedValue;\n }\n }\n // Only set inputDefaults if there are any remaining after conversion\n if (Object.keys(transformedInputDefaults).length > 0) {\n transformedNode.resolvedHandles = {\n ...transformedNode.resolvedHandles,\n inputDefaults: transformedInputDefaults,\n };\n } else if (transformedNode.resolvedHandles) {\n // Remove inputDefaults if all were deleted\n const { inputDefaults, ...restHandles } =\n transformedNode.resolvedHandles;\n transformedNode.resolvedHandles = restHandles;\n }\n }\n }\n\n return transformedNode;\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 };\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 */\nexport function mergeInputsOutputs(\n targetInputs: Record<string, Record<string, unknown>>,\n targetOutputs: Record<string, Record<string, unknown>>,\n sourceInputs: Record<string, Record<string, unknown>>,\n sourceOutputs: Record<string, Record<string, unknown>>,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter,\n nodeTypeMap?: Map<string, string>,\n handleTypeMap?: Map<string, Map<string, string>>\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n // Deep copy target inputs/outputs to avoid mutating the original\n const mergedInputs: Record<string, Record<string, unknown>> = {};\n const mergedOutputs: Record<string, Record<string, unknown>> = {};\n\n // Copy target inputs/outputs\n for (const [nodeId, inputs] of Object.entries(targetInputs)) {\n mergedInputs[nodeId] = { ...inputs };\n }\n for (const [nodeId, outputs] of Object.entries(targetOutputs)) {\n mergedOutputs[nodeId] = { ...outputs };\n }\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedInputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedInputs[newId] exists\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"input\",\n nodeTypeId,\n handleDataType,\n })\n : value;\n // If converter returns null, delete this input\n if (convertedValue === null) {\n delete mergedInputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedInputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed inputs\n if (Object.keys(transformedInputs).length > 0) {\n mergedInputs[newId] = { ...mergedInputs[newId], ...transformedInputs };\n }\n\n // Clean up empty node input objects\n if (Object.keys(mergedInputs[newId]).length === 0) {\n delete mergedInputs[newId];\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedOutputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedOutputs[newId] exists\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTypedOutput(value)\n ? getTypedOutputTypeId(value)\n : undefined;\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"output\",\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n })\n : value;\n // If converter returns null, delete this output\n if (convertedValue === null) {\n delete mergedOutputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedOutputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed outputs\n if (Object.keys(transformedOutputs).length > 0) {\n mergedOutputs[newId] = {\n ...mergedOutputs[newId],\n ...transformedOutputs,\n };\n }\n\n // Clean up empty node output objects\n if (Object.keys(mergedOutputs[newId]).length === 0) {\n delete mergedOutputs[newId];\n }\n }\n }\n\n return { mergedInputs, mergedOutputs };\n}\n\n/**\n * Merge snapshot data (inputs, outputs) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n * UI positions are handled separately by mergeUIState.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const handleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of sourceDef.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeHandleTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.inputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : (handleDesc as { typeId?: string })?.typeId;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.outputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : Array.isArray(handleDesc)\n ? handleDesc[0]\n : undefined;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (nodeHandleTypes.size > 0) {\n handleTypeMap.set(node.nodeId, nodeHandleTypes);\n }\n }\n\n const { mergedInputs, mergedOutputs } = mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n nodeIdMap,\n converter,\n nodeTypeMap,\n handleTypeMap\n );\n\n return {\n mergedInputs,\n mergedOutputs,\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\nexport interface ValueMappingConfig {\n handleId?: string | RegExp;\n nodeId?: string | RegExp;\n nodeTypeId?: string | RegExp;\n handleDataType?: string | RegExp;\n runtimeTypeId?: string | RegExp;\n transformTypedValue?: boolean;\n path?: JsonPath;\n valueMap:\n | Map<string | number | boolean, unknown>\n | Record<string | number, unknown>;\n}\n\nexport interface ConverterConfig {\n mappings: ValueMappingConfig[];\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 {\n nodeId,\n handleId,\n value,\n type,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n } = converterConfig;\n const isTyped = isTypedOutput(value);\n\n for (const mapping of config.mappings) {\n if (!matchesPattern(handleId, mapping.handleId)) continue;\n if (!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 && isTyped) {\n const innerValue = getTypedOutputValue(value);\n const typedTypeId = getTypedOutputTypeId(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 (\n mapping.valueMap.has(\n matchValue as string | number | boolean\n )\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\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 (\n mapping.valueMap.has(innerValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n innerValue as string | number | boolean\n );\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 (\n typeof innerValue === \"string\" ||\n typeof innerValue === \"number\"\n ) {\n if (innerValue in mapping.valueMap) {\n newValue = mapping.valueMap[innerValue];\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 (isTyped) {\n const typedTypeId = getTypedOutputTypeId(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 (\n firstSegmentStr !== \"__spark_value\" &&\n firstSegmentStr !== \"__spark_type\"\n ) {\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 (\n mapping.valueMap.has(matchValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\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 if (value in mapping.valueMap) {\n return mapping.valueMap[value];\n }\n }\n }\n }\n }\n }\n\n return value;\n };\n}\n"],"names":[],"mappings":"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"}