@bian-womp/spark-graph 0.2.80 → 0.2.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +20 -0
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/index.d.ts +1 -1
- package/lib/cjs/src/index.d.ts.map +1 -1
- package/lib/cjs/src/misc/utils/merge.d.ts +6 -1
- package/lib/cjs/src/misc/utils/merge.d.ts.map +1 -1
- package/lib/esm/index.js +20 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/index.d.ts +1 -1
- package/lib/esm/src/index.d.ts.map +1 -1
- package/lib/esm/src/misc/utils/merge.d.ts +6 -1
- package/lib/esm/src/misc/utils/merge.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/core/types.ts","../../src/builder/Registry.ts","../../../protocol/lib/esm/index.js","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/runtime/EngineFactory.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 scheduleInputsChanged: () => 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 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 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","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type {\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n} from \"../core/types\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n isTypedOutput,\n} from \"../core/types\";\nimport type { CategoryRuntime } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\n// Helper: typed promise detection and unwrapping for T | Promise<T>\nfunction isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\nasync function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\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\ninterface RuntimeNode<State = any> extends GraphNodeDefinition {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: State;\n runtime: CategoryRuntime<State>;\n lifecycle: NodeTypeDescriptor<\n Record<string, string>,\n Record<string, string>,\n State,\n any\n >[\"lifecycle\"];\n policy?: Partial<ExecutionPolicy>;\n logLevel?: LogLevel;\n latestRunId?: string;\n // Sequential counter for generating per-node runIds\n runSeq: number;\n activeControllers: Set<AbortController>;\n // Track which runIds are associated with which controllers so we can\n // mark them as snapshot-cancelled when cancelNodeRuns is invoked\n controllerRunIds: Map<AbortController, string>;\n // RunIds that were explicitly cancelled because of a snapshot/undo/redo.\n // Any emit from these runs should be ignored even if the underlying work\n // completes later.\n snapshotCancelledRunIds?: Set<string>;\n queue: Array<{ runId: string; inputs: Record<string, unknown> }>;\n lastScheduledAt?: number;\n stats: RuntimeNodeStats;\n}\n\ninterface RuntimeEdge extends GraphEdgeDefinition {\n convert?: (value: unknown) => unknown;\n convertAsync?: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n stats: RuntimeEdgeStats;\n srcUnionTypes?: string[]; // if source output is a union, list of allowed types\n dstDeclared?: string; // declared input type id on target handle\n effectiveTypeId: string; // computed/inferred typeId (always present, falls back to \"untyped\")\n}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n // Keep a reference to registry to support dynamic handle recomputation\n private registry?: Registry;\n // Current resolved handles per node (registry statics merged with per-node overrides)\n private resolvedByNode = new Map<string, ResolvedHandles>();\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\n // Token to guard async resolveHandles recomputes per node\n private recomputeTokenByNode = new Map<string, number>();\n private paused = false;\n // For array-typed target inputs, keep per-edge contributions so successive runs\n // from the same source replace their slice instead of accumulating forever.\n // Structure: nodeId -> handle -> edgeId -> values[]\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\n\n // Shallow/deep-ish equality to avoid unnecessary runs on identical values\n private valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.registry = registry;\n gr.environment = opts?.environment ?? {};\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = GraphRuntime.computeResolvedHandleMap(\n def,\n registry,\n gr.environment\n );\n gr.resolvedByNode = initial.map;\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 };\n gr.nodes.set(n.nodeId, rn);\n }\n\n // Instantiate edges\n gr.edges = GraphRuntime.buildEdges(def, registry, gr.resolvedByNode);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) gr.scheduleRecomputeHandles(nodeId);\n\n return gr;\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 private emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.nodes.get(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = this.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 && this.registry) {\n const desc = this.registry.nodes.get(node.typeId);\n const resolved = this.resolvedByNode.get(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 = this.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.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 = this.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.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n anyChanged = true;\n }\n }\n if (!this.paused) {\n // Only schedule if all inbound inputs are present (or there are none)\n if (anyChanged && this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n // Recompute dynamic handles for this node when its direct inputs change\n if (anyChanged) this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.nodes.get(nodeId);\n return node?.outputs[output];\n }\n\n private static 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 = (\n v: unknown\n ): { 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\n private createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\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.propagate(nodeId, handle, value));\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\"; // Default to \"info\" if not set\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 // For other levels, use appropriate console method\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: () => this.invalidateDownstreamInternal(nodeId),\n scheduleInputsChanged: () => {\n if (this.allInboundHaveValue(nodeId)) {\n this.scheduleInputsChangedInternal(nodeId);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n private scheduleInputsChangedInternal(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (this.paused) return;\n const now = Date.now();\n const policy = node.policy ?? {};\n\n // Compute effective inputs (real inputs + defaults) for this execution\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\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 return;\n }\n node.lastScheduledAt = now;\n\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = rid;\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n onDone?: () => void\n ) => {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n\n const mode = 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 let timeoutId: NodeJS.Timeout | undefined;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n capturedInputs,\n runId,\n controller.signal,\n {\n emitHandler: (handle, value) => {\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(runId)) return;\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n reportProgress: (p) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n runId,\n progress: node.stats.progress,\n });\n },\n }\n );\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch, snapshot)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\" || reason === \"snapshot\") {\n return; // ignore switched/snapshot-cancelled runs\n }\n }\n hadError = true;\n // Record last error for node\n node.stats.lastError = err;\n const retry = 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.emit(\"error\", { kind: \"node-run\", nodeId, runId, err });\n } finally {\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 // Clear lastError upon successful completion\n if (!hadError) node.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\n ctx.log(\"debug\", \"node-start\");\n exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) return;\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n startRun(next.runId, next.inputs, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, effectiveInputs);\n }\n\n // Returns true if all inbound handles for the node currently have a value\n private 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 // Computes effective inputs for a node by merging real inputs with defaults\n // Defaults are applied only for unbound handles that have no explicit value\n // This method does NOT mutate node.inputs - defaults remain virtual\n // Dynamic handles (from resolveHandles) do NOT get defaults applied - they are metadata-only\n private getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.nodes.get(nodeId);\n if (!node) return {};\n const registry = this.registry;\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.resolvedByNode.get(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n // Dynamic handles are metadata-only and should not receive defaults in execution\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 inbound = new Set(\n this.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 // This prevents dynamic handles (like geo:*) from getting defaults in execution\n // Dynamic handles are metadata-only for UI display, not execution values\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 private invalidateDownstreamInternal(nodeId: string): void {\n // Notifies dependents; for now we propagate current outputs\n for (const e of this.edges.filter((e) => e.source.nodeId === nodeId)) {\n const value = this.getOutput(nodeId, e.source.handle);\n if (value !== undefined) this.propagate(nodeId, e.source.handle, value);\n }\n }\n\n private propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): void {\n // set source output\n const srcNode = this.nodes.get(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return;\n }\n srcNode.outputs[srcHandle] = value;\n this.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n\n // fan-out along all edges from this output\n const outEdges = this.edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n for (const e of outEdges) {\n // If source declares a union for this handle, require typed output\n const isUnion = Array.isArray(e.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${srcHandle} requires typed value for union output (allowed: ${(\n e.srcUnionTypes as string[]\n ).join(\"|\")})`\n );\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n continue;\n }\n // Clone per edge to isolate conversions from mutating the shared source value\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.nodes.get(e.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles - wait for handle resolution\n if (e.dstDeclared === undefined) return;\n\n const dstIsArray =\n typeof e.dstDeclared === \"string\" && e.dstDeclared.endsWith(\"[]\");\n let next = v;\n // If target input is an array type, merge per-edge contributions deterministically\n if (dstIsArray) {\n const toArray = (x: unknown): unknown[] =>\n Array.isArray(x) ? x : x === undefined ? [] : [x];\n // Update this edge's contribution\n let forNode = this.arrayInputBuckets.get(e.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(e.target.nodeId, forNode);\n }\n let forHandle = forNode.get(e.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(e.target.handle, forHandle);\n }\n forHandle.set(e.id, toArray(v));\n // Compute merged array in the order of current edges list\n const merged: unknown[] = [];\n for (const ed of this.edges) {\n if (\n ed.target.nodeId === e.target.nodeId &&\n ed.target.handle === e.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n next = merged;\n }\n const prev = dstNode.inputs[e.target.handle];\n const same = this.valuesEqual(prev, next);\n if (!same) {\n dstNode.inputs[e.target.handle] = next;\n // Emit value event for input updates\n this.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: next,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(next),\n });\n // Recompute dynamic handles for the destination node on input change\n this.scheduleRecomputeHandles(e.target.nodeId);\n if (!this.paused && this.allInboundHaveValue(e.target.nodeId))\n this.scheduleInputsChangedInternal(e.target.nodeId);\n }\n };\n if (e.convertAsync) {\n // emit edge-start before launching async conversion\n this.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n e.stats.progress = 0;\n const sig = controller.signal;\n // Fire async conversion using edge's convertAsync (dynamic union aware)\n e.convertAsync(nextVal, sig)\n .then((v) => {\n e.stats.inFlight = false;\n e.stats.lastEndAt = Date.now();\n e.stats.lastDurationMs = e.stats.lastEndAt - startAt;\n // Clear lastError on successful conversion\n e.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: e.stats.lastDurationMs,\n });\n applyToTarget(v);\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n e.stats.lastError = err;\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n if (e.convert) nextVal = e.convert(nextVal);\n applyToTarget(nextVal);\n }\n }\n }\n\n // Helper: build map of resolved handles per node from def (prefer def.resolvedHandles, otherwise registry statics)\n private static computeResolvedHandleMap(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>\n ): { map: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\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 { map: out, pending };\n }\n\n // Helper: build runtime edges with coercions using resolved handles\n private static 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 let effectiveTypeId = e.typeId; // Start with original\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const resolved = resolvedByNode.get(srcNode.nodeId);\n if (resolved) srcDeclared = resolved.outputs[e.source.handle] as any;\n }\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const resolved = resolvedByNode.get(dstNode.nodeId);\n if (resolved)\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n }\n const { convert, convertAsync } = GraphRuntime.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 return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n effectiveTypeId: effectiveTypeId ?? \"untyped\", // Always present\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n }\n\n private reemitNodeOutputs(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const [handle, value] of Object.entries(node.outputs)) {\n this.propagate(nodeId, handle, value);\n }\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n updateNodeHandles(\n nodeId: string,\n handles: ResolvedHandles,\n registry: Registry\n ): void {\n this.resolvedByNode.set(nodeId, handles);\n // Recompute edge converter/type for edges where this node is source or target\n for (const e of this.edges) {\n const srcNode = this.nodes.get(e.source.nodeId);\n const dstNode = this.nodes.get(e.target.nodeId);\n let srcDeclared: string | string[] | undefined = e.effectiveTypeId; // Use effectiveTypeId as fallback\n let dstDeclared: string | undefined = e.dstDeclared;\n const oldDstDeclared = dstDeclared; // Track old value to detect resolution\n if (e.source.nodeId === nodeId) {\n const resolved = this.resolvedByNode.get(nodeId);\n srcDeclared = resolved\n ? resolved.outputs[e.source.handle]\n : srcDeclared;\n // Update effectiveTypeId if original wasn't explicit\n if (!e.typeId) {\n e.effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared?.[0] ?? \"untyped\"\n : srcDeclared ?? \"untyped\";\n }\n }\n if (e.target.nodeId === nodeId) {\n const resolved = this.resolvedByNode.get(nodeId);\n if (resolved) {\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n e.dstDeclared = dstDeclared;\n }\n }\n const conv = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n // If target handle was just resolved (was undefined, now has a type), re-propagate values\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\n const srcNode = this.nodes.get(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n // Re-propagate through the now-resolved edge converter\n this.propagate(e.source.nodeId, e.source.handle, srcValue);\n }\n }\n }\n }\n // Invalidate downstream for this node so UI refreshes\n this.invalidateDownstreamInternal(nodeId);\n }\n\n launch(invalidate = false): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const effectiveInputs = this.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const ctx = this.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 (invalidate) {\n // After activation, schedule nodes that have all inbound inputs present\n for (const nodeId of this.nodes.keys()) {\n if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n // Built-in support: invalidate event reruns or re-emits without per-node wiring\n if (\n event &&\n typeof event === \"object\" &&\n (event as any).type === \"invalidate\"\n ) {\n if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n else this.invalidateDownstreamInternal(nodeId);\n } else {\n node.runtime.onExternalEvent?.(event, node.state);\n }\n }\n\n dispose(): void {\n for (const node of this.nodes.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.nodes.clear();\n this.edges = [];\n this.listeners.clear();\n this.arrayInputBuckets.clear();\n }\n\n getNodeIds(): string[] {\n return Array.from(this.nodes.keys());\n }\n\n // Unsafe helpers for serializer: read-only accessors and hydration\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.nodes.get(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 // Recompute dynamic handles for all nodes when environment changes\n for (const nodeId of this.nodes.keys()) {\n this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n // Export a GraphDefinition reflecting the current runtime view\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(this.nodes.values()).map(\n (n) => {\n const resolved = this.resolvedByNode.get(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 );\n const edges: GraphEdgeDefinition[] = this.edges.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, // Only export original typeId (may be undefined)\n }));\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n const isIdle = (): boolean => {\n for (const n of this.nodes.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 pause(): void {\n this.paused = true;\n }\n\n isPaused(): boolean {\n return this.paused;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n invalidateDownstream(nodeId: string): void {\n this.invalidateDownstreamInternal(nodeId);\n }\n\n scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChangedInternal(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n\n 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 this.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 for (const nodeId of toCancel) {\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n\n for (const controller of Array.from(node.activeControllers)) {\n const rid = node.controllerRunIds.get(controller);\n if (rid) {\n node.snapshotCancelledRunIds.add(rid);\n }\n try {\n controller.abort(\"snapshot\");\n } catch {\n // ignore\n }\n }\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\n\n node.runSeq += 1;\n const now = Date.now();\n node.latestRunId = `${nodeId}:${node.runSeq}:${now}:snapshot`;\n }\n }\n\n // Hydrate inputs/outputs without triggering computation; optionally re-emit outputs downstream\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { reemit?: boolean }\n ): void {\n const prevPaused = this.paused;\n this.paused = true;\n try {\n const ins = payload?.inputs || {};\n for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n // emit input value event\n this.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.nodes.get(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n // emit output value event\n this.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?.reemit) {\n for (const nodeId of this.nodes.keys()) this.reemitNodeOutputs(nodeId);\n }\n } finally {\n this.paused = prevPaused;\n }\n }\n\n // Incrementally update nodes/edges to match new definition without full rebuild\n update(def: GraphDefinition, registry: Registry): void {\n // Handle node additions and removals\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.nodes.keys());\n\n // Remove nodes not present\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.nodes.get(nodeId)!;\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.nodes.delete(nodeId);\n // Clear any array buckets for this node\n this.arrayInputBuckets.delete(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.nodes.get(n.nodeId);\n if (!existing) {\n // create new runtime node\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 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 };\n this.nodes.set(n.nodeId, rn);\n // Activate new node\n const effectiveInputs = this.getEffectiveInputs(rn.nodeId);\n const ctrl = new AbortController();\n const ctx = this.createExecutionContext(\n rn.nodeId,\n rn,\n effectiveInputs,\n `${rn.nodeId}:init`,\n ctrl.signal\n );\n if (rn.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n rn.lifecycle.prepare(rn.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n rn.runtime.onActivated?.();\n } else {\n // update params/policy\n existing.params = n.params;\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 // Capture previous inbound map before rebuilding edges\n const prevInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n // Capture previous per-handle target sets before rebuilding edges\n const prevOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of this.edges) {\n const tmap =\n prevOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n prevOutTargets.set(e.source.nodeId, tmap);\n }\n\n // Precompute per-node resolved handles for updated graph (include dynamic)\n const resolved = GraphRuntime.computeResolvedHandleMap(\n def,\n registry,\n this.environment\n );\n\n // Check which handles changed and emit events for those\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n for (const [nodeId, newHandles] of resolved.map) {\n const oldHandles = this.resolvedByNode.get(nodeId);\n if (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n this.resolvedByNode = resolved.map;\n\n // Rebuild edges mapping with coercions\n this.edges = GraphRuntime.buildEdges(def, registry, this.resolvedByNode);\n\n // Build new inbound map\n const nextInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n // For inputs that lost inbound connections, clear and schedule recompute\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) {\n // Clear buckets for handles that lost inbound\n const bucketsForNode = this.arrayInputBuckets.get(nodeId);\n if (bucketsForNode) {\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) bucketsForNode.delete(handle);\n }\n if (bucketsForNode.size === 0) this.arrayInputBuckets.delete(nodeId);\n }\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n\n // Re-emit outputs when per-handle target sets change (precise and simple)\n const nextOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of this.edges) {\n const tmap =\n nextOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n nextOutTargets.set(e.source.nodeId, tmap);\n }\n\n const setsEqualStr = (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(prevOutTargets.keys()),\n ...Array.from(nextOutTargets.keys()),\n ]);\n for (const nodeId of nodesToCheck) {\n const pmap = prevOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const nmap = nextOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(pmap.keys()),\n ...Array.from(nmap.keys()),\n ]);\n for (const handle of handles) {\n const pset = pmap.get(handle) ?? new Set<string>();\n const nset = nmap.get(handle) ?? new Set<string>();\n if (!setsEqualStr(pset, nset)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined) this.propagate(nodeId, handle, val);\n else if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n // Prune array bucket contributions for edges that no longer exist\n const validPerTarget = new Map<string, Map<string, Set<string>>>();\n for (const ed of this.edges) {\n const m = validPerTarget.get(ed.target.nodeId) ?? new Map();\n const s = m.get(ed.target.handle) ?? new Set<string>();\n s.add(ed.id);\n m.set(ed.target.handle, s);\n validPerTarget.set(ed.target.nodeId, m);\n }\n for (const [nodeId, byHandle] of Array.from(this.arrayInputBuckets)) {\n const validHandles = validPerTarget.get(nodeId) ?? new Map();\n for (const [handle, perEdge] of Array.from(byHandle)) {\n const validEdgeIds = validHandles.get(handle) ?? new Set<string>();\n for (const edgeId of Array.from(perEdge.keys())) {\n if (!validEdgeIds.has(edgeId)) perEdge.delete(edgeId);\n }\n if (perEdge.size === 0) byHandle.delete(handle);\n }\n if (byHandle.size === 0) this.arrayInputBuckets.delete(nodeId);\n }\n\n // Schedule async recompute for nodes that indicated Promise-based resolveHandles in this update\n\n // Emit event for changed handles (if any)\n if (Object.keys(changedHandles).length > 0) {\n this.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n\n for (const nodeId of resolved.pending) {\n this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n // Schedule a recomputation of dynamic handles for a node (async to avoid mutating during propagation)\n private scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.nodes.get(nodeId);\n if (!node) return;\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId);\n }, 0);\n }\n\n // Recompute dynamic handles for a single node using current inputs/environment\n private async recomputeHandlesForNode(nodeId: string): Promise<void> {\n const registry = this.registry!;\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\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 r: 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 r = 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 const inputs = { ...desc.inputs, ...r?.inputs };\n const outputs = { ...desc.outputs, ...r?.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r?.inputDefaults };\n const next = { inputs, outputs, inputDefaults };\n const before = this.resolvedByNode.get(nodeId);\n // Compare shallow-structurally via JSON\n if (JSON.stringify(before) === JSON.stringify(next)) return;\n\n this.resolvedByNode.set(nodeId, next);\n this.updateNodeHandles(nodeId, next, registry);\n // Notify graph updated with the changed handles\n this.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: next },\n });\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 { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport abstract class AbstractEngine implements Engine {\n constructor(public graphRuntime: GraphRuntime) {}\n\n launch(invalidate = false): void {\n this.graphRuntime.launch(invalidate);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.graphRuntime.triggerExternal(nodeId, event);\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 dispose(): void {\n // this.graphRuntime.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport class PushEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n }\n\n override launch(): void {\n super.launch();\n this.graphRuntime.resume();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport interface BatchedEngineOptions {\n flushIntervalMs?: number; // if set, perform periodic flushes\n}\n\nexport class BatchedEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n private timer: NodeJS.Timeout | undefined;\n constructor(\n graphRuntime: GraphRuntime,\n private opts: BatchedEngineOptions = {}\n ) {\n super(graphRuntime);\n }\n\n override launch(): void {\n this.graphRuntime.pause();\n if (this.opts.flushIntervalMs && this.opts.flushIntervalMs > 0) {\n this.timer = setInterval(() => this.flush(), this.opts.flushIntervalMs);\n }\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async flush(): Promise<void> {\n if (this.dirtyNodes.size === 0) return;\n // Resume, schedule dirty nodes, wait idle, then pause again\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n\n override dispose(): void {\n if (this.timer) clearInterval(this.timer);\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// PullEngine computes only when asked, otherwise holds inputs without scheduling\nexport class PullEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n // Pull API\n async computeNode(nodeId: string): Promise<void> {\n this.graphRuntime.resume();\n this.graphRuntime.scheduleInputsChanged(nodeId);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// HybridEngine: push by default, but batch when changes exceed a threshold in a window\nexport interface HybridOptions {\n windowMs?: number;\n batchThreshold?: number;\n}\n\nexport class HybridEngine extends AbstractEngine {\n private windowStart = 0;\n private countInWindow = 0;\n private batching = false;\n private dirtyNodes = new Set<string>();\n private flushTimer: NodeJS.Timeout | undefined;\n constructor(graphRuntime: GraphRuntime, private opts: HybridOptions = {}) {\n super(graphRuntime);\n this.windowStart = Date.now();\n }\n\n private updateWindow(): void {\n const now = Date.now();\n const windowMs = this.opts.windowMs ?? 250;\n if (now - this.windowStart > windowMs) {\n this.windowStart = now;\n this.countInWindow = 0;\n if (this.batching) {\n this.graphRuntime.resume();\n this.batching = false;\n // schedule all dirty nodes accumulated during batching\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n }\n }\n\n override launch(): void {\n this.graphRuntime.resume();\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.updateWindow();\n this.countInWindow += 1;\n const threshold = this.opts.batchThreshold ?? 5;\n if (!this.batching && this.countInWindow >= threshold) {\n this.graphRuntime.pause();\n this.batching = true;\n // ensure flush even if no more inputs arrive\n const windowMs = this.opts.windowMs ?? 250;\n if (this.flushTimer) clearTimeout(this.flushTimer);\n this.flushTimer = setTimeout(() => {\n if (!this.batching) return;\n this.graphRuntime.resume();\n this.batching = false;\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching) this.graphRuntime.scheduleInputsChanged(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n override dispose(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// StepEngine: expose explicit step() to process pending changes once\nexport class StepEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async step(): Promise<void> {\n // resume first so scheduling isn't ignored due to pause\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import type { RunnerOptions } from \"@bian-womp/spark-protocol\";\nimport type { Engine } from \"./Engine\";\nimport { PushEngine } from \"./PushEngine\";\nimport { BatchedEngine } from \"./BatchedEngine\";\nimport { PullEngine } from \"./PullEngine\";\nimport { HybridEngine } from \"./HybridEngine\";\nimport { StepEngine } from \"./StepEngine\";\nimport type { GraphRuntime } from \"./GraphRuntime\";\n\nexport type EngineConfig = Omit<RunnerOptions, \"invalidate\">;\n\n/**\n * Creates an Engine instance for the given GraphRuntime based on engine configuration.\n * This is the single source of truth for engine creation, used by both local and remote runners.\n */\nexport function createEngine(\n runtime: GraphRuntime,\n config?: EngineConfig\n): Engine {\n const engineKind = config?.engine ?? \"push\";\n const batched = config?.batched ?? { flushIntervalMs: 0 };\n const hybrid = config?.hybrid ?? { windowMs: 250, batchThreshold: 3 };\n switch (engineKind) {\n case \"push\":\n return new PushEngine(runtime);\n case \"batched\":\n return new BatchedEngine(runtime, {\n flushIntervalMs: batched.flushIntervalMs,\n });\n case \"pull\":\n return new PullEngine(runtime);\n case \"hybrid\":\n return new HybridEngine(runtime, {\n windowMs: hybrid.windowMs,\n batchThreshold: hybrid.batchThreshold,\n });\n case \"step\":\n return new StepEngine(runtime);\n default:\n throw new Error(`Unknown engine kind: ${engineKind}`);\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\nexport function setupBasicGraphRegistry(): Registry {\n const registry = new Registry();\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 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\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 const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n } as const;\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 const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n } as const;\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 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 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 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 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 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 console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms`);\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 }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { PushEngine } from \"../runtime/PushEngine\";\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() {\n return setupBasicGraphRegistry();\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 installLogging(new PushEngine(runtime));\n const engine = new PushEngine(runtime);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", { Operation: \"Add\", A: 2, B: 3 });\n engine.setInputs(\"n2\", { Operation: \"Multiply\", B: 10 });\n engine.setInputs(\"n3\", { B: 15 });\n // Allow async propagation to flush\n await runtime.whenIdle();\n const n1Res = runtime.getOutput(\"n1\", \"Result\");\n const n2Res = runtime.getOutput(\"n2\", \"Result\");\n const n3Res = runtime.getOutput(\"n3\", \"Result\");\n const n4Vals = runtime.getOutput(\"n4\", \"Values\");\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} from \"../misc/base\";\nimport { BatchedEngine } from \"../runtime/BatchedEngine\";\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 // convertAsync,\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() {\n const registry = setupBasicGraphRegistry();\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 BatchedEngine(runtime, { flushIntervalMs: 0 });\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: \"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 should cancel prior runs (switch)\n engine.setInputs(\"n1\", { A: 1 });\n engine.setInputs(\"n1\", { A: 2 });\n engine.setInputs(\"n1\", { A: 3 });\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { A: 10 });\n engine.setInputs(\"n1\", { A: 11 });\n engine.setInputs(\"n1\", { A: 12 });\n await engine.flush();\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 { PushEngine } from \"../runtime/PushEngine\";\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() {\n const registry = setupBasicGraphRegistry();\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 PushEngine(runtime);\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 setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n }, 2000);\n\n // After 5s, stop and exit\n setTimeout(async () => {\n await engine.whenIdle();\n engine.dispose();\n }, 5000);\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown edge type (wire number to boolean input without coercion)\n // - Missing target input handle\n // - Multi inbound to same input\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 // Global validation issue: unknown node type (no nodeId/edgeId in data)\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 // Type mismatch to highlight coercion/validation (string -> float[] should error)\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() {\n const registry = setupBasicGraphRegistry();\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createValidationGraphRegistry(),\n createValidationGraphDef()\n );\n const engine = new PushEngine(runtime);\n engine.launch();\n engine.setInputs(\"nA\", { Value: 1 });\n engine.setInputs(\"nB\", { Value: 2 });\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\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\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} 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, UI positions) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number },\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n mergedPositions: Record<string, { x: number; y: number }>;\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 const targetUI =\n (targetSnapshot.extData?.ui as {\n positions?: Record<string, { x: number; y: number }>;\n }) || {};\n const sourceUI =\n (sourceSnapshot.extData?.ui as {\n positions?: Record<string, { x: number; y: number }>;\n }) || {};\n\n const mergedPositions = offsetImportedPositions(\n targetUI.positions ?? {},\n sourceUI.positions ?? {},\n sourceDef,\n nodeIdMap,\n anchorPos\n );\n\n return {\n mergedInputs,\n mergedOutputs,\n mergedPositions,\n };\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","../../../protocol/lib/esm/index.js","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/runtime/EngineFactory.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 scheduleInputsChanged: () => 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 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 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","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type {\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n} from \"../core/types\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n isTypedOutput,\n} from \"../core/types\";\nimport type { CategoryRuntime } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\n// Helper: typed promise detection and unwrapping for T | Promise<T>\nfunction isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\nasync function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\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\ninterface RuntimeNode<State = any> extends GraphNodeDefinition {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: State;\n runtime: CategoryRuntime<State>;\n lifecycle: NodeTypeDescriptor<\n Record<string, string>,\n Record<string, string>,\n State,\n any\n >[\"lifecycle\"];\n policy?: Partial<ExecutionPolicy>;\n logLevel?: LogLevel;\n latestRunId?: string;\n // Sequential counter for generating per-node runIds\n runSeq: number;\n activeControllers: Set<AbortController>;\n // Track which runIds are associated with which controllers so we can\n // mark them as snapshot-cancelled when cancelNodeRuns is invoked\n controllerRunIds: Map<AbortController, string>;\n // RunIds that were explicitly cancelled because of a snapshot/undo/redo.\n // Any emit from these runs should be ignored even if the underlying work\n // completes later.\n snapshotCancelledRunIds?: Set<string>;\n queue: Array<{ runId: string; inputs: Record<string, unknown> }>;\n lastScheduledAt?: number;\n stats: RuntimeNodeStats;\n}\n\ninterface RuntimeEdge extends GraphEdgeDefinition {\n convert?: (value: unknown) => unknown;\n convertAsync?: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n stats: RuntimeEdgeStats;\n srcUnionTypes?: string[]; // if source output is a union, list of allowed types\n dstDeclared?: string; // declared input type id on target handle\n effectiveTypeId: string; // computed/inferred typeId (always present, falls back to \"untyped\")\n}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n // Keep a reference to registry to support dynamic handle recomputation\n private registry?: Registry;\n // Current resolved handles per node (registry statics merged with per-node overrides)\n private resolvedByNode = new Map<string, ResolvedHandles>();\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\n // Token to guard async resolveHandles recomputes per node\n private recomputeTokenByNode = new Map<string, number>();\n private paused = false;\n // For array-typed target inputs, keep per-edge contributions so successive runs\n // from the same source replace their slice instead of accumulating forever.\n // Structure: nodeId -> handle -> edgeId -> values[]\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\n\n // Shallow/deep-ish equality to avoid unnecessary runs on identical values\n private valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.registry = registry;\n gr.environment = opts?.environment ?? {};\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = GraphRuntime.computeResolvedHandleMap(\n def,\n registry,\n gr.environment\n );\n gr.resolvedByNode = initial.map;\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 };\n gr.nodes.set(n.nodeId, rn);\n }\n\n // Instantiate edges\n gr.edges = GraphRuntime.buildEdges(def, registry, gr.resolvedByNode);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) gr.scheduleRecomputeHandles(nodeId);\n\n return gr;\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 private emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.nodes.get(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = this.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 && this.registry) {\n const desc = this.registry.nodes.get(node.typeId);\n const resolved = this.resolvedByNode.get(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 = this.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.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 = this.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.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n anyChanged = true;\n }\n }\n if (!this.paused) {\n // Only schedule if all inbound inputs are present (or there are none)\n if (anyChanged && this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n // Recompute dynamic handles for this node when its direct inputs change\n if (anyChanged) this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.nodes.get(nodeId);\n return node?.outputs[output];\n }\n\n private static 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 = (\n v: unknown\n ): { 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\n private createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\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.propagate(nodeId, handle, value));\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\"; // Default to \"info\" if not set\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 // For other levels, use appropriate console method\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: () => this.invalidateDownstreamInternal(nodeId),\n scheduleInputsChanged: () => {\n if (this.allInboundHaveValue(nodeId)) {\n this.scheduleInputsChangedInternal(nodeId);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n private scheduleInputsChangedInternal(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (this.paused) return;\n const now = Date.now();\n const policy = node.policy ?? {};\n\n // Compute effective inputs (real inputs + defaults) for this execution\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\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 return;\n }\n node.lastScheduledAt = now;\n\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = rid;\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n onDone?: () => void\n ) => {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n\n const mode = 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 let timeoutId: NodeJS.Timeout | undefined;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n capturedInputs,\n runId,\n controller.signal,\n {\n emitHandler: (handle, value) => {\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(runId)) return;\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n reportProgress: (p) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n runId,\n progress: node.stats.progress,\n });\n },\n }\n );\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch, snapshot)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\" || reason === \"snapshot\") {\n return; // ignore switched/snapshot-cancelled runs\n }\n }\n hadError = true;\n // Record last error for node\n node.stats.lastError = err;\n const retry = 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.emit(\"error\", { kind: \"node-run\", nodeId, runId, err });\n } finally {\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 // Clear lastError upon successful completion\n if (!hadError) node.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\n ctx.log(\"debug\", \"node-start\");\n exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) return;\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n startRun(next.runId, next.inputs, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, effectiveInputs);\n }\n\n // Returns true if all inbound handles for the node currently have a value\n private 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 // Computes effective inputs for a node by merging real inputs with defaults\n // Defaults are applied only for unbound handles that have no explicit value\n // This method does NOT mutate node.inputs - defaults remain virtual\n // Dynamic handles (from resolveHandles) do NOT get defaults applied - they are metadata-only\n private getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.nodes.get(nodeId);\n if (!node) return {};\n const registry = this.registry;\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.resolvedByNode.get(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n // Dynamic handles are metadata-only and should not receive defaults in execution\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 inbound = new Set(\n this.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 // This prevents dynamic handles (like geo:*) from getting defaults in execution\n // Dynamic handles are metadata-only for UI display, not execution values\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 private invalidateDownstreamInternal(nodeId: string): void {\n // Notifies dependents; for now we propagate current outputs\n for (const e of this.edges.filter((e) => e.source.nodeId === nodeId)) {\n const value = this.getOutput(nodeId, e.source.handle);\n if (value !== undefined) this.propagate(nodeId, e.source.handle, value);\n }\n }\n\n private propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): void {\n // set source output\n const srcNode = this.nodes.get(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return;\n }\n srcNode.outputs[srcHandle] = value;\n this.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n\n // fan-out along all edges from this output\n const outEdges = this.edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n for (const e of outEdges) {\n // If source declares a union for this handle, require typed output\n const isUnion = Array.isArray(e.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${srcHandle} requires typed value for union output (allowed: ${(\n e.srcUnionTypes as string[]\n ).join(\"|\")})`\n );\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n continue;\n }\n // Clone per edge to isolate conversions from mutating the shared source value\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.nodes.get(e.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles - wait for handle resolution\n if (e.dstDeclared === undefined) return;\n\n const dstIsArray =\n typeof e.dstDeclared === \"string\" && e.dstDeclared.endsWith(\"[]\");\n let next = v;\n // If target input is an array type, merge per-edge contributions deterministically\n if (dstIsArray) {\n const toArray = (x: unknown): unknown[] =>\n Array.isArray(x) ? x : x === undefined ? [] : [x];\n // Update this edge's contribution\n let forNode = this.arrayInputBuckets.get(e.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(e.target.nodeId, forNode);\n }\n let forHandle = forNode.get(e.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(e.target.handle, forHandle);\n }\n forHandle.set(e.id, toArray(v));\n // Compute merged array in the order of current edges list\n const merged: unknown[] = [];\n for (const ed of this.edges) {\n if (\n ed.target.nodeId === e.target.nodeId &&\n ed.target.handle === e.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n next = merged;\n }\n const prev = dstNode.inputs[e.target.handle];\n const same = this.valuesEqual(prev, next);\n if (!same) {\n dstNode.inputs[e.target.handle] = next;\n // Emit value event for input updates\n this.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: next,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(next),\n });\n // Recompute dynamic handles for the destination node on input change\n this.scheduleRecomputeHandles(e.target.nodeId);\n if (!this.paused && this.allInboundHaveValue(e.target.nodeId))\n this.scheduleInputsChangedInternal(e.target.nodeId);\n }\n };\n if (e.convertAsync) {\n // emit edge-start before launching async conversion\n this.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n e.stats.progress = 0;\n const sig = controller.signal;\n // Fire async conversion using edge's convertAsync (dynamic union aware)\n e.convertAsync(nextVal, sig)\n .then((v) => {\n e.stats.inFlight = false;\n e.stats.lastEndAt = Date.now();\n e.stats.lastDurationMs = e.stats.lastEndAt - startAt;\n // Clear lastError on successful conversion\n e.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: e.stats.lastDurationMs,\n });\n applyToTarget(v);\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n e.stats.lastError = err;\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n if (e.convert) nextVal = e.convert(nextVal);\n applyToTarget(nextVal);\n }\n }\n }\n\n // Helper: build map of resolved handles per node from def (prefer def.resolvedHandles, otherwise registry statics)\n private static computeResolvedHandleMap(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>\n ): { map: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\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 { map: out, pending };\n }\n\n // Helper: build runtime edges with coercions using resolved handles\n private static 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 let effectiveTypeId = e.typeId; // Start with original\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const resolved = resolvedByNode.get(srcNode.nodeId);\n if (resolved) srcDeclared = resolved.outputs[e.source.handle] as any;\n }\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const resolved = resolvedByNode.get(dstNode.nodeId);\n if (resolved)\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n }\n const { convert, convertAsync } = GraphRuntime.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 return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n effectiveTypeId: effectiveTypeId ?? \"untyped\", // Always present\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n }\n\n private reemitNodeOutputs(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const [handle, value] of Object.entries(node.outputs)) {\n this.propagate(nodeId, handle, value);\n }\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n updateNodeHandles(\n nodeId: string,\n handles: ResolvedHandles,\n registry: Registry\n ): void {\n this.resolvedByNode.set(nodeId, handles);\n // Recompute edge converter/type for edges where this node is source or target\n for (const e of this.edges) {\n const srcNode = this.nodes.get(e.source.nodeId);\n const dstNode = this.nodes.get(e.target.nodeId);\n let srcDeclared: string | string[] | undefined = e.effectiveTypeId; // Use effectiveTypeId as fallback\n let dstDeclared: string | undefined = e.dstDeclared;\n const oldDstDeclared = dstDeclared; // Track old value to detect resolution\n if (e.source.nodeId === nodeId) {\n const resolved = this.resolvedByNode.get(nodeId);\n srcDeclared = resolved\n ? resolved.outputs[e.source.handle]\n : srcDeclared;\n // Update effectiveTypeId if original wasn't explicit\n if (!e.typeId) {\n e.effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared?.[0] ?? \"untyped\"\n : srcDeclared ?? \"untyped\";\n }\n }\n if (e.target.nodeId === nodeId) {\n const resolved = this.resolvedByNode.get(nodeId);\n if (resolved) {\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n e.dstDeclared = dstDeclared;\n }\n }\n const conv = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n // If target handle was just resolved (was undefined, now has a type), re-propagate values\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\n const srcNode = this.nodes.get(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n // Re-propagate through the now-resolved edge converter\n this.propagate(e.source.nodeId, e.source.handle, srcValue);\n }\n }\n }\n }\n // Invalidate downstream for this node so UI refreshes\n this.invalidateDownstreamInternal(nodeId);\n }\n\n launch(invalidate = false): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const effectiveInputs = this.getEffectiveInputs(node.nodeId);\n const ctrl = new AbortController();\n const ctx = this.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 (invalidate) {\n // After activation, schedule nodes that have all inbound inputs present\n for (const nodeId of this.nodes.keys()) {\n if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n // Built-in support: invalidate event reruns or re-emits without per-node wiring\n if (\n event &&\n typeof event === \"object\" &&\n (event as any).type === \"invalidate\"\n ) {\n if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n else this.invalidateDownstreamInternal(nodeId);\n } else {\n node.runtime.onExternalEvent?.(event, node.state);\n }\n }\n\n dispose(): void {\n for (const node of this.nodes.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.nodes.clear();\n this.edges = [];\n this.listeners.clear();\n this.arrayInputBuckets.clear();\n }\n\n getNodeIds(): string[] {\n return Array.from(this.nodes.keys());\n }\n\n // Unsafe helpers for serializer: read-only accessors and hydration\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.nodes.get(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 // Recompute dynamic handles for all nodes when environment changes\n for (const nodeId of this.nodes.keys()) {\n this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n // Export a GraphDefinition reflecting the current runtime view\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(this.nodes.values()).map(\n (n) => {\n const resolved = this.resolvedByNode.get(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 );\n const edges: GraphEdgeDefinition[] = this.edges.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, // Only export original typeId (may be undefined)\n }));\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n const isIdle = (): boolean => {\n for (const n of this.nodes.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 pause(): void {\n this.paused = true;\n }\n\n isPaused(): boolean {\n return this.paused;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n invalidateDownstream(nodeId: string): void {\n this.invalidateDownstreamInternal(nodeId);\n }\n\n scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChangedInternal(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n\n 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 this.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 for (const nodeId of toCancel) {\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n\n for (const controller of Array.from(node.activeControllers)) {\n const rid = node.controllerRunIds.get(controller);\n if (rid) {\n node.snapshotCancelledRunIds.add(rid);\n }\n try {\n controller.abort(\"snapshot\");\n } catch {\n // ignore\n }\n }\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\n\n node.runSeq += 1;\n const now = Date.now();\n node.latestRunId = `${nodeId}:${node.runSeq}:${now}:snapshot`;\n }\n }\n\n // Hydrate inputs/outputs without triggering computation; optionally re-emit outputs downstream\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { reemit?: boolean }\n ): void {\n const prevPaused = this.paused;\n this.paused = true;\n try {\n const ins = payload?.inputs || {};\n for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n // emit input value event\n this.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.nodes.get(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n // emit output value event\n this.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?.reemit) {\n for (const nodeId of this.nodes.keys()) this.reemitNodeOutputs(nodeId);\n }\n } finally {\n this.paused = prevPaused;\n }\n }\n\n // Incrementally update nodes/edges to match new definition without full rebuild\n update(def: GraphDefinition, registry: Registry): void {\n // Handle node additions and removals\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.nodes.keys());\n\n // Remove nodes not present\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.nodes.get(nodeId)!;\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.nodes.delete(nodeId);\n // Clear any array buckets for this node\n this.arrayInputBuckets.delete(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.nodes.get(n.nodeId);\n if (!existing) {\n // create new runtime node\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 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 };\n this.nodes.set(n.nodeId, rn);\n // Activate new node\n const effectiveInputs = this.getEffectiveInputs(rn.nodeId);\n const ctrl = new AbortController();\n const ctx = this.createExecutionContext(\n rn.nodeId,\n rn,\n effectiveInputs,\n `${rn.nodeId}:init`,\n ctrl.signal\n );\n if (rn.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n rn.lifecycle.prepare(rn.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n rn.runtime.onActivated?.();\n } else {\n // update params/policy\n existing.params = n.params;\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 // Capture previous inbound map before rebuilding edges\n const prevInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n // Capture previous per-handle target sets before rebuilding edges\n const prevOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of this.edges) {\n const tmap =\n prevOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n prevOutTargets.set(e.source.nodeId, tmap);\n }\n\n // Precompute per-node resolved handles for updated graph (include dynamic)\n const resolved = GraphRuntime.computeResolvedHandleMap(\n def,\n registry,\n this.environment\n );\n\n // Check which handles changed and emit events for those\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n for (const [nodeId, newHandles] of resolved.map) {\n const oldHandles = this.resolvedByNode.get(nodeId);\n if (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n this.resolvedByNode = resolved.map;\n\n // Rebuild edges mapping with coercions\n this.edges = GraphRuntime.buildEdges(def, registry, this.resolvedByNode);\n\n // Build new inbound map\n const nextInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n // For inputs that lost inbound connections, clear and schedule recompute\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) {\n // Clear buckets for handles that lost inbound\n const bucketsForNode = this.arrayInputBuckets.get(nodeId);\n if (bucketsForNode) {\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) bucketsForNode.delete(handle);\n }\n if (bucketsForNode.size === 0) this.arrayInputBuckets.delete(nodeId);\n }\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n\n // Re-emit outputs when per-handle target sets change (precise and simple)\n const nextOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of this.edges) {\n const tmap =\n nextOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n nextOutTargets.set(e.source.nodeId, tmap);\n }\n\n const setsEqualStr = (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(prevOutTargets.keys()),\n ...Array.from(nextOutTargets.keys()),\n ]);\n for (const nodeId of nodesToCheck) {\n const pmap = prevOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const nmap = nextOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(pmap.keys()),\n ...Array.from(nmap.keys()),\n ]);\n for (const handle of handles) {\n const pset = pmap.get(handle) ?? new Set<string>();\n const nset = nmap.get(handle) ?? new Set<string>();\n if (!setsEqualStr(pset, nset)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined) this.propagate(nodeId, handle, val);\n else if (this.allInboundHaveValue(nodeId))\n this.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n // Prune array bucket contributions for edges that no longer exist\n const validPerTarget = new Map<string, Map<string, Set<string>>>();\n for (const ed of this.edges) {\n const m = validPerTarget.get(ed.target.nodeId) ?? new Map();\n const s = m.get(ed.target.handle) ?? new Set<string>();\n s.add(ed.id);\n m.set(ed.target.handle, s);\n validPerTarget.set(ed.target.nodeId, m);\n }\n for (const [nodeId, byHandle] of Array.from(this.arrayInputBuckets)) {\n const validHandles = validPerTarget.get(nodeId) ?? new Map();\n for (const [handle, perEdge] of Array.from(byHandle)) {\n const validEdgeIds = validHandles.get(handle) ?? new Set<string>();\n for (const edgeId of Array.from(perEdge.keys())) {\n if (!validEdgeIds.has(edgeId)) perEdge.delete(edgeId);\n }\n if (perEdge.size === 0) byHandle.delete(handle);\n }\n if (byHandle.size === 0) this.arrayInputBuckets.delete(nodeId);\n }\n\n // Schedule async recompute for nodes that indicated Promise-based resolveHandles in this update\n\n // Emit event for changed handles (if any)\n if (Object.keys(changedHandles).length > 0) {\n this.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n\n for (const nodeId of resolved.pending) {\n this.scheduleRecomputeHandles(nodeId);\n }\n }\n\n // Schedule a recomputation of dynamic handles for a node (async to avoid mutating during propagation)\n private scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.nodes.get(nodeId);\n if (!node) return;\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId);\n }, 0);\n }\n\n // Recompute dynamic handles for a single node using current inputs/environment\n private async recomputeHandlesForNode(nodeId: string): Promise<void> {\n const registry = this.registry!;\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\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 r: 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 r = 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 const inputs = { ...desc.inputs, ...r?.inputs };\n const outputs = { ...desc.outputs, ...r?.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r?.inputDefaults };\n const next = { inputs, outputs, inputDefaults };\n const before = this.resolvedByNode.get(nodeId);\n // Compare shallow-structurally via JSON\n if (JSON.stringify(before) === JSON.stringify(next)) return;\n\n this.resolvedByNode.set(nodeId, next);\n this.updateNodeHandles(nodeId, next, registry);\n // Notify graph updated with the changed handles\n this.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: next },\n });\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 { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport abstract class AbstractEngine implements Engine {\n constructor(public graphRuntime: GraphRuntime) {}\n\n launch(invalidate = false): void {\n this.graphRuntime.launch(invalidate);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.graphRuntime.triggerExternal(nodeId, event);\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 dispose(): void {\n // this.graphRuntime.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport class PushEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n }\n\n override launch(): void {\n super.launch();\n this.graphRuntime.resume();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport interface BatchedEngineOptions {\n flushIntervalMs?: number; // if set, perform periodic flushes\n}\n\nexport class BatchedEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n private timer: NodeJS.Timeout | undefined;\n constructor(\n graphRuntime: GraphRuntime,\n private opts: BatchedEngineOptions = {}\n ) {\n super(graphRuntime);\n }\n\n override launch(): void {\n this.graphRuntime.pause();\n if (this.opts.flushIntervalMs && this.opts.flushIntervalMs > 0) {\n this.timer = setInterval(() => this.flush(), this.opts.flushIntervalMs);\n }\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async flush(): Promise<void> {\n if (this.dirtyNodes.size === 0) return;\n // Resume, schedule dirty nodes, wait idle, then pause again\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n\n override dispose(): void {\n if (this.timer) clearInterval(this.timer);\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// PullEngine computes only when asked, otherwise holds inputs without scheduling\nexport class PullEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n // Pull API\n async computeNode(nodeId: string): Promise<void> {\n this.graphRuntime.resume();\n this.graphRuntime.scheduleInputsChanged(nodeId);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// HybridEngine: push by default, but batch when changes exceed a threshold in a window\nexport interface HybridOptions {\n windowMs?: number;\n batchThreshold?: number;\n}\n\nexport class HybridEngine extends AbstractEngine {\n private windowStart = 0;\n private countInWindow = 0;\n private batching = false;\n private dirtyNodes = new Set<string>();\n private flushTimer: NodeJS.Timeout | undefined;\n constructor(graphRuntime: GraphRuntime, private opts: HybridOptions = {}) {\n super(graphRuntime);\n this.windowStart = Date.now();\n }\n\n private updateWindow(): void {\n const now = Date.now();\n const windowMs = this.opts.windowMs ?? 250;\n if (now - this.windowStart > windowMs) {\n this.windowStart = now;\n this.countInWindow = 0;\n if (this.batching) {\n this.graphRuntime.resume();\n this.batching = false;\n // schedule all dirty nodes accumulated during batching\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n }\n }\n\n override launch(): void {\n this.graphRuntime.resume();\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.updateWindow();\n this.countInWindow += 1;\n const threshold = this.opts.batchThreshold ?? 5;\n if (!this.batching && this.countInWindow >= threshold) {\n this.graphRuntime.pause();\n this.batching = true;\n // ensure flush even if no more inputs arrive\n const windowMs = this.opts.windowMs ?? 250;\n if (this.flushTimer) clearTimeout(this.flushTimer);\n this.flushTimer = setTimeout(() => {\n if (!this.batching) return;\n this.graphRuntime.resume();\n this.batching = false;\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching) this.graphRuntime.scheduleInputsChanged(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n override dispose(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// StepEngine: expose explicit step() to process pending changes once\nexport class StepEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async step(): Promise<void> {\n // resume first so scheduling isn't ignored due to pause\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import type { RunnerOptions } from \"@bian-womp/spark-protocol\";\nimport type { Engine } from \"./Engine\";\nimport { PushEngine } from \"./PushEngine\";\nimport { BatchedEngine } from \"./BatchedEngine\";\nimport { PullEngine } from \"./PullEngine\";\nimport { HybridEngine } from \"./HybridEngine\";\nimport { StepEngine } from \"./StepEngine\";\nimport type { GraphRuntime } from \"./GraphRuntime\";\n\nexport type EngineConfig = Omit<RunnerOptions, \"invalidate\">;\n\n/**\n * Creates an Engine instance for the given GraphRuntime based on engine configuration.\n * This is the single source of truth for engine creation, used by both local and remote runners.\n */\nexport function createEngine(\n runtime: GraphRuntime,\n config?: EngineConfig\n): Engine {\n const engineKind = config?.engine ?? \"push\";\n const batched = config?.batched ?? { flushIntervalMs: 0 };\n const hybrid = config?.hybrid ?? { windowMs: 250, batchThreshold: 3 };\n switch (engineKind) {\n case \"push\":\n return new PushEngine(runtime);\n case \"batched\":\n return new BatchedEngine(runtime, {\n flushIntervalMs: batched.flushIntervalMs,\n });\n case \"pull\":\n return new PullEngine(runtime);\n case \"hybrid\":\n return new HybridEngine(runtime, {\n windowMs: hybrid.windowMs,\n batchThreshold: hybrid.batchThreshold,\n });\n case \"step\":\n return new StepEngine(runtime);\n default:\n throw new Error(`Unknown engine kind: ${engineKind}`);\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\nexport function setupBasicGraphRegistry(): Registry {\n const registry = new Registry();\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 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\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 const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n } as const;\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 const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n } as const;\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 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 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 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 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 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 console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms`);\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 }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { PushEngine } from \"../runtime/PushEngine\";\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() {\n return setupBasicGraphRegistry();\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 installLogging(new PushEngine(runtime));\n const engine = new PushEngine(runtime);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", { Operation: \"Add\", A: 2, B: 3 });\n engine.setInputs(\"n2\", { Operation: \"Multiply\", B: 10 });\n engine.setInputs(\"n3\", { B: 15 });\n // Allow async propagation to flush\n await runtime.whenIdle();\n const n1Res = runtime.getOutput(\"n1\", \"Result\");\n const n2Res = runtime.getOutput(\"n2\", \"Result\");\n const n3Res = runtime.getOutput(\"n3\", \"Result\");\n const n4Vals = runtime.getOutput(\"n4\", \"Values\");\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} from \"../misc/base\";\nimport { BatchedEngine } from \"../runtime/BatchedEngine\";\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 // convertAsync,\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() {\n const registry = setupBasicGraphRegistry();\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 BatchedEngine(runtime, { flushIntervalMs: 0 });\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: \"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 should cancel prior runs (switch)\n engine.setInputs(\"n1\", { A: 1 });\n engine.setInputs(\"n1\", { A: 2 });\n engine.setInputs(\"n1\", { A: 3 });\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { A: 10 });\n engine.setInputs(\"n1\", { A: 11 });\n engine.setInputs(\"n1\", { A: 12 });\n await engine.flush();\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 { PushEngine } from \"../runtime/PushEngine\";\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() {\n const registry = setupBasicGraphRegistry();\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 PushEngine(runtime);\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 setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n }, 2000);\n\n // After 5s, stop and exit\n setTimeout(async () => {\n await engine.whenIdle();\n engine.dispose();\n }, 5000);\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown edge type (wire number to boolean input without coercion)\n // - Missing target input handle\n // - Multi inbound to same input\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 // Global validation issue: unknown node type (no nodeId/edgeId in data)\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 // Type mismatch to highlight coercion/validation (string -> float[] should error)\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() {\n const registry = setupBasicGraphRegistry();\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createValidationGraphRegistry(),\n createValidationGraphDef()\n );\n const engine = new PushEngine(runtime);\n engine.launch();\n engine.setInputs(\"nA\", { Value: 1 });\n engine.setInputs(\"nB\", { Value: 2 });\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\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\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, UI positions) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number },\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n mergedPositions: Record<string, { x: number; y: number }>;\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 const targetUI =\n (targetSnapshot.extData?.ui as {\n positions?: Record<string, { x: number; y: number }>;\n }) || {};\n const sourceUI =\n (sourceSnapshot.extData?.ui as {\n positions?: Record<string, { x: number; y: number }>;\n }) || {};\n\n const mergedPositions = offsetImportedPositions(\n targetUI.positions ?? {},\n sourceUI.positions ?? {},\n sourceDef,\n nodeIdMap,\n anchorPos\n );\n\n return {\n mergedInputs,\n mergedOutputs,\n mergedPositions,\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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"}
|