@bian-womp/spark-graph 0.2.11 → 0.2.13
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 +63 -3
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +63 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/esm/src/runtime/GraphRuntime.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","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/LocalRunner.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts"],"sourcesContent":["export type DataTypeId = string;\nexport type NodeCategoryId = string;\nexport type NodeTypeId = string;\nexport type NodeInstanceId = string;\nexport type HandleId = string;\nexport type EdgeInstanceId = string;\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 emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n getInput: (handle: HandleId) => unknown;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n createAbortController: () => AbortController;\n reportProgress?: (value: number) => void;\n}\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 type InputHandleDescriptor =\n | DataTypeId\n | { typeId: DataTypeId; private?: boolean };\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\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 = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<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 // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?:\n | Record<string, unknown>\n | ((ctx: {\n params?: Record<string, unknown>;\n environment: Record<string, unknown>;\n }) => Record<string, unknown>);\n lifecycle?: {\n init?: (\n initial: Record<string, unknown>,\n ctx: NodeContext<State>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<State>) => void;\n };\n}\n\nexport interface GraphNodeDefinition {\n nodeId: NodeInstanceId;\n typeId: NodeTypeId;\n params?: Record<string, unknown>;\n // Graph-level per-node initial inputs (override registry defaults)\n initialInputs?: Record<string, unknown>;\n}\n\nexport interface GraphEdgeDefinition {\n id: EdgeInstanceId;\n source: { nodeId: NodeInstanceId; handle: HandleId };\n target: { nodeId: NodeInstanceId; handle: HandleId };\n typeId?: DataTypeId;\n}\n\nexport interface GraphDefinition {\n nodes: GraphNodeDefinition[];\n edges: GraphEdgeDefinition[];\n}\n","import type {\n DataTypeDescriptor,\n DataTypeId,\n InputHandleDescriptor,\n NodeContext,\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 = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n GraphDefinition,\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n GraphEdgeDefinition,\n GraphNodeDefinition,\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\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?: {\n asyncConcurrency?: \"merge\" | \"switch\" | \"queue\" | \"drop\";\n timeoutMs?: number;\n maxQueue?: number;\n debounceMs?: number;\n throttleMs?: number;\n retry?: { attempts: number; backoffMs: (attemptIndex: number) => number };\n };\n latestRunId?: string;\n activeControllers: Set<AbortController>;\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}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\n private paused = false;\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.environment = opts?.environment ?? {};\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 ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\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 = def.edges.map((e): RuntimeEdge => {\n // infer type from source output if missing\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;\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) {\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = getInputTypeId(dstDesc.inputs, e.target.handle);\n }\n }\n\n // Attach dynamic convert/convertAsync aware of union sources and typed outputs\n const { convert, convertAsync } = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry\n );\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\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 // After nodes and edges exist, seed registry- and graph-level defaults\n for (const n of def.nodes) {\n const node = gr.nodes.get(n.nodeId);\n const desc = registry.nodes.get(n.typeId);\n if (!node || !desc) continue;\n\n // Resolve registry-level defaults (object or function)\n const regDefaults =\n typeof desc.inputDefaults === \"function\"\n ? desc.inputDefaults({\n params: n.params,\n environment: gr.environment,\n })\n : desc.inputDefaults ?? {};\n const graphDefaults = n.initialInputs ?? {};\n\n // Apply precedence: graph-level overrides registry-level\n const merged: Record<string, unknown> = {\n ...regDefaults,\n ...graphDefaults,\n };\n for (const [handle, value] of Object.entries(merged)) {\n // Only seed if input has no inbound wiring\n const hasInbound = gr.edges.some(\n (e) => e.target.nodeId === n.nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n if (value === undefined) continue;\n // Clone to avoid accidental shared references\n node.inputs[handle] =\n typeof structuredClone === \"function\"\n ? structuredClone(value)\n : JSON.parse(JSON.stringify(value));\n }\n }\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 setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\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 const prev = node.inputs[handle];\n const same = this.valuesEqual(prev, value);\n if (!same) {\n node.inputs[handle] = value;\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.scheduleInputsChanged(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 ): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n } {\n let convert: ((v: unknown) => unknown) | undefined;\n let convertAsync:\n | ((v: unknown, signal: AbortSignal) => Promise<unknown>)\n | undefined;\n if (dstDeclared && srcDeclared) {\n if (Array.isArray(srcDeclared)) {\n const srcTypes = srcDeclared as string[];\n const anyAsync = srcTypes.some((s) => {\n const res = registry.resolveCoercion(s, dstDeclared);\n return res?.kind === \"async\";\n });\n if (anyAsync) {\n convertAsync = async (v: unknown, signal: AbortSignal) => {\n const typeId = getTypedOutputTypeId(v);\n if (!typeId)\n throw new Error(\n `Typed output required for union source; allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n if (!srcTypes.includes(typeId))\n throw new Error(\n `Invalid typed output ${typeId}; allowed: ${srcTypes.join(\"|\")}`\n );\n const payload = getTypedOutputValue(v);\n const res = registry.resolveCoercion(typeId, dstDeclared);\n if (!res) return payload;\n if (res.kind === \"async\")\n return await res.convertAsync(payload, signal);\n return res.convert(payload);\n };\n } else {\n convert = (v: unknown) => {\n const typeId = getTypedOutputTypeId(v);\n if (!typeId)\n throw new Error(\n `Typed output required for union source; allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n if (!srcTypes.includes(typeId))\n throw new Error(\n `Invalid typed output ${typeId}; allowed: ${srcTypes.join(\"|\")}`\n );\n const payload = getTypedOutputValue(v);\n const res = registry.resolveCoercion(typeId, dstDeclared);\n if (!res) return payload;\n if (res.kind === \"async\")\n throw new Error(\"Async coercion required but convert used\");\n return res.convert(payload);\n };\n }\n } else {\n const res = registry.resolveCoercion(srcDeclared, dstDeclared);\n if (res?.kind === \"async\") convertAsync = res.convertAsync;\n else if (res?.kind === \"sync\") convert = res.convert;\n }\n }\n return { convert, convertAsync };\n }\n\n private scheduleInputsChanged(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 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 const rid = `${nodeId}:${now}`;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n return;\n }\n node.lastScheduledAt = now;\n\n const rid = `${nodeId}:${now}:${Math.random().toString(36).slice(2, 8)}`;\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\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: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => capturedInputs[handle],\n environment: this.environment,\n runId: runId,\n abortSignal: controller.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\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 const exec = async (attempt: number) => {\n let hadError = false;\n try {\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\") {\n return; // ignore switched 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.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 if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\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: { ...node.inputs } });\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, { ...node.inputs });\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 private invalidateDownstream(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 const dstIsArray =\n typeof e.dstDeclared === \"string\" && e.dstDeclared.endsWith(\"[]\");\n let next = v;\n // If target input is an array type, append incoming values instead of last-write wins\n if (dstIsArray) {\n const toArray = (x: unknown): unknown[] =>\n Array.isArray(x) ? x : x === undefined ? [] : [x];\n const prev = dstNode.inputs[e.target.handle];\n const merged = [...toArray(prev), ...toArray(v)];\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 if (!this.paused && this.allInboundHaveValue(e.target.nodeId))\n this.scheduleInputsChanged(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 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 launch(): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(node.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(node.nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${node.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.lifecycle?.init?.(node.params ?? {}, {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n node.runtime.onActivated?.(ctx);\n }\n // After activation, schedule nodes that have all inbound inputs present\n for (const nodeId of this.nodes.keys()) {\n if (this.allInboundHaveValue(nodeId)) this.scheduleInputsChanged(nodeId);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${nodeId}:external`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n\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)) this.scheduleInputsChanged(nodeId);\n else this.invalidateDownstream(nodeId);\n }\n\n node.runtime.onExternalEvent?.(event, ctx);\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 }\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 }\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 resume(): void {\n this.paused = false;\n }\n\n __unsafe_invalidateDownstream(nodeId: string): void {\n this.invalidateDownstream(nodeId);\n }\n\n __unsafe_scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChanged(nodeId);\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] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(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] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(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 }\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 ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\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 ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: rn.state,\n setState: (next: Partial<any>) => Object.assign(rn.state, next),\n emit: (handle: string, value: unknown) =>\n this.propagate(rn.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(rn.nodeId),\n getInput: (handle: string) => rn.inputs[handle],\n environment: this.environment,\n runId: `${rn.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n };\n rn.lifecycle?.init?.(rn.params ?? {}, {\n state: rn.state,\n setState: (next) => Object.assign(rn.state, next),\n });\n rn.runtime.onActivated?.(ctx);\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 // Rebuild edges mapping with coercions\n this.edges = def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) {\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = getInputTypeId(dstDesc.inputs, e.target.handle);\n }\n }\n\n const { convert, convertAsync } = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry\n );\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\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 input lost inbound, try to re-seed from defaults\n if (changed) {\n const defNode = def.nodes.find((n) => n.nodeId === nodeId);\n if (defNode) {\n const desc = registry.nodes.get(defNode.typeId);\n if (desc) {\n const regDefaults =\n typeof desc.inputDefaults === \"function\"\n ? desc.inputDefaults({\n params: defNode.params,\n environment: this.environment,\n })\n : desc.inputDefaults ?? {};\n const graphDefaults = defNode.initialInputs ?? {};\n const merged: Record<string, unknown> = {\n ...regDefaults,\n ...graphDefaults,\n };\n for (const h of Array.from(prevSet)) {\n if (!currSet.has(h) && node.inputs[h] === undefined) {\n const v = merged[h];\n if (v !== undefined)\n node.inputs[h] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(v));\n }\n }\n }\n }\n this.scheduleInputsChanged(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 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 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.scheduleInputsChanged(nodeId);\n }\n }\n }\n }\n}\n","import type { GraphDefinition, 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 // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n data: { nodeId: n.nodeId },\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n issues.push({\n level: \"error\",\n code: \"NODE_TYPE_MISSING\",\n message: `Unknown node type ${n.typeId}`,\n data: { typeId: n.typeId, nodeId: n.nodeId },\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n issues.push({\n level: \"error\",\n code: \"CATEGORY_MISSING\",\n message: `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 issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n data: { edgeId: e.id },\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n if (!srcNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_SOURCE_MISSING\",\n message: `Edge ${e.id} source node missing`,\n data: { edgeId: e.id },\n });\n if (!dstNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_TARGET_MISSING\",\n message: `Edge ${e.id} target node missing`,\n data: { edgeId: e.id },\n });\n // Infer edge type when missing. For union sources, prefer target input type if available.\n let effectiveTypeId: string | undefined = e.typeId;\n let _srcDeclared: string | string[] | undefined;\n let _dstDeclared: string | undefined;\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType) _srcDeclared = srcType.outputs[e.source.handle];\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType)\n _dstDeclared = getInputTypeId(dstType.inputs, e.target.handle);\n }\n if (!effectiveTypeId) {\n if (Array.isArray(_srcDeclared) && _dstDeclared) {\n // When source is a union and target input type is known, adopt the input type\n // so validation checks are performed against the target, not an arbitrary variant.\n effectiveTypeId = _dstDeclared;\n } else if (_srcDeclared) {\n effectiveTypeId = Array.isArray(_srcDeclared)\n ? _srcDeclared[0]\n : _srcDeclared;\n }\n }\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISSING\",\n message: `Edge ${e.id} type missing or unknown`,\n data: { edgeId: e.id },\n });\n }\n\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType && !(e.source.handle in srcType.outputs)) {\n issues.push({\n level: \"error\",\n code: \"OUTPUT_MISSING\",\n message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n },\n });\n }\n if (srcType) {\n const declared = srcType.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const declaredArr = Array.isArray(declared)\n ? declared\n : declared\n ? [declared]\n : [];\n if (declaredArr.length > 0 && effectiveTypeId) {\n for (const s of declaredArr) {\n if (\n s !== effectiveTypeId &&\n !this.registry.canCoerce(s, effectiveTypeId)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_OUTPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${s}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: s,\n effectiveTypeId,\n },\n });\n }\n }\n }\n }\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType && !(e.target.handle in dstType.inputs)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_MISSING\",\n message: `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n if (dstType) {\n // Private inputs should not accept edges\n if (isInputPrivate(dstType.inputs, e.target.handle)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_PRIVATE\",\n message: `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n const declaredIn = getInputTypeId(dstType.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n // If source is a union, ensure each variant can reach declaredIn\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n const srcDeclared = srcType?.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = Array.isArray(srcDeclared)\n ? srcDeclared\n : srcDeclared\n ? [srcDeclared]\n : effectiveTypeId\n ? [effectiveTypeId]\n : [];\n for (const s of srcArr) {\n if (\n s !== declaredIn &&\n !this.registry.canCoerce(s, declaredIn)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} output type ${s} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: s,\n },\n });\n }\n }\n } else if (\n declaredIn !== effectiveTypeId &&\n !this.registry.canCoerce(effectiveTypeId, declaredIn)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n data: {\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\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 dstType = this.registry.nodes.get(dstNode.typeId);\n const declaredIn = dstType\n ? getInputTypeId(dstType.inputs, e.target.handle)\n : undefined;\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 ? innerDesc.inputs[map.handle] : undefined;\n inputTypes[outerIn] =\n typeof typeId === \"string\" ? typeId : typeId?.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(): void {\n this.graphRuntime.launch();\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\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","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { AbstractEngine } from \"./AbstractEngine\";\nimport { PushEngine } from \"./PushEngine\";\nimport type { RunnerControl } from \"./RunnerControl\";\nimport { Registry } from \"../builder/Registry\";\n\nexport class LocalRunner implements RunnerControl {\n private builder: GraphBuilder;\n private engine?: AbstractEngine;\n\n constructor(private registry: Registry) {\n this.builder = new GraphBuilder(registry);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n const rt = this.builder.build(def, opts);\n this.engine = new PushEngine(rt);\n }\n\n async update(def: GraphDefinition): Promise<void> {\n // If engine exists and is a PushEngine backed by GraphRuntime, use runtime.update\n // Otherwise rebuild.\n const eng = this.engine;\n if (eng && eng.graphRuntime) {\n eng.graphRuntime.update(def, this.registry);\n return;\n }\n await this.build(def);\n }\n\n getEngine(): AbstractEngine {\n if (!this.engine)\n throw new Error(\"Engine not built. Call build(def) first.\");\n return this.engine;\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.__unsafe_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.__unsafe_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)\n this.graphRuntime.__unsafe_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)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching)\n this.graphRuntime.__unsafe_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.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\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, {}> = {\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, ctx) {\n try {\n const e: any = event;\n // Preferred: call a function on ctx.state keyed by e.action\n const action = e?.action;\n if (action && typeof (ctx.state as any)?.[action] === \"function\") {\n const fn = (ctx.state as any)[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: { mode: \"push\", asyncConcurrency: \"switch\" },\n};\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { GraphDefinition } from \"../core/types\";\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 policy: { mode: \"hybrid\" },\n});\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type {\n ExecutionContext,\n GraphDefinition,\n NodeContext,\n} 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 // 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?: ReturnType<typeof setInterval> }>\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: (\n ctx: NodeContext<{ timerId?: ReturnType<typeof setInterval> }>\n ) => {\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","import { GraphDefinition } from \"../core/types\";\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 // Graph-level defaults override registry if provided\n initialInputs: { Operation: 2, B: [10] }, // Multiply by 10\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.initialInputs Operation=Multiply(2), B=[10] (overrides registry defaults for n2)\"\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.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"B\", 3);\n engine.setInput(\"n2\", \"Operation\", \"Multiply\");\n engine.setInput(\"n2\", \"B\", 10);\n engine.setInput(\"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 {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n} from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"B\", 2);\n engine.setInput(\"n2\", \"DelayMs\", 250);\n // Provide XYZ and route through async conversion edge\n engine.setInput(\"n3\", \"XYZ\", [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ]);\n\n // Rapid inputs to n1 should cancel prior runs (switch)\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"A\", 3);\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInput(\"n1\", \"A\", 10);\n engine.setInput(\"n1\", \"A\", 11);\n engine.setInput(\"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 {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"steps\", \"Value\", 12);\n engine.setInput(\"delay\", \"Value\", 80);\n // Manually set ShouldError on the worker (unwired input)\n engine.setInput(\"work\", \"ShouldError\", false);\n\n // After 2s, trigger an error run\n setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInput(\"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 { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"nA\", \"Value\", 1);\n engine.setInput(\"nB\", \"Value\", 2);\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/core/types.ts","../../src/builder/Registry.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/LocalRunner.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts"],"sourcesContent":["export type DataTypeId = string;\nexport type NodeCategoryId = string;\nexport type NodeTypeId = string;\nexport type NodeInstanceId = string;\nexport type HandleId = string;\nexport type EdgeInstanceId = string;\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 emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n getInput: (handle: HandleId) => unknown;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n createAbortController: () => AbortController;\n reportProgress?: (value: number) => void;\n}\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 type InputHandleDescriptor =\n | DataTypeId\n | { typeId: DataTypeId; private?: boolean };\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\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 = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<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 // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?:\n | Record<string, unknown>\n | ((ctx: {\n params?: Record<string, unknown>;\n environment: Record<string, unknown>;\n }) => Record<string, unknown>);\n lifecycle?: {\n init?: (\n initial: Record<string, unknown>,\n ctx: NodeContext<State>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<State>) => void;\n };\n}\n\nexport interface GraphNodeDefinition {\n nodeId: NodeInstanceId;\n typeId: NodeTypeId;\n params?: Record<string, unknown>;\n // Graph-level per-node initial inputs (override registry defaults)\n initialInputs?: Record<string, unknown>;\n}\n\nexport interface GraphEdgeDefinition {\n id: EdgeInstanceId;\n source: { nodeId: NodeInstanceId; handle: HandleId };\n target: { nodeId: NodeInstanceId; handle: HandleId };\n typeId?: DataTypeId;\n}\n\nexport interface GraphDefinition {\n nodes: GraphNodeDefinition[];\n edges: GraphEdgeDefinition[];\n}\n","import type {\n DataTypeDescriptor,\n DataTypeId,\n InputHandleDescriptor,\n NodeContext,\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 = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n GraphDefinition,\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n GraphEdgeDefinition,\n GraphNodeDefinition,\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\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?: {\n asyncConcurrency?: \"merge\" | \"switch\" | \"queue\" | \"drop\";\n timeoutMs?: number;\n maxQueue?: number;\n debounceMs?: number;\n throttleMs?: number;\n retry?: { attempts: number; backoffMs: (attemptIndex: number) => number };\n };\n latestRunId?: string;\n activeControllers: Set<AbortController>;\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}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\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.environment = opts?.environment ?? {};\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 ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\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 = def.edges.map((e): RuntimeEdge => {\n // infer type from source output if missing\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;\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) {\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = getInputTypeId(dstDesc.inputs, e.target.handle);\n }\n }\n\n // Attach dynamic convert/convertAsync aware of union sources and typed outputs\n const { convert, convertAsync } = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry\n );\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\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 // After nodes and edges exist, seed registry- and graph-level defaults\n for (const n of def.nodes) {\n const node = gr.nodes.get(n.nodeId);\n const desc = registry.nodes.get(n.typeId);\n if (!node || !desc) continue;\n\n // Resolve registry-level defaults (object or function)\n const regDefaults =\n typeof desc.inputDefaults === \"function\"\n ? desc.inputDefaults({\n params: n.params,\n environment: gr.environment,\n })\n : desc.inputDefaults ?? {};\n const graphDefaults = n.initialInputs ?? {};\n\n // Apply precedence: graph-level overrides registry-level\n const merged: Record<string, unknown> = {\n ...regDefaults,\n ...graphDefaults,\n };\n for (const [handle, value] of Object.entries(merged)) {\n // Only seed if input has no inbound wiring\n const hasInbound = gr.edges.some(\n (e) => e.target.nodeId === n.nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n if (value === undefined) continue;\n // Clone to avoid accidental shared references\n node.inputs[handle] =\n typeof structuredClone === \"function\"\n ? structuredClone(value)\n : JSON.parse(JSON.stringify(value));\n }\n }\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 setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\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 const prev = node.inputs[handle];\n const same = this.valuesEqual(prev, value);\n if (!same) {\n node.inputs[handle] = value;\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.scheduleInputsChanged(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 ): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n } {\n let convert: ((v: unknown) => unknown) | undefined;\n let convertAsync:\n | ((v: unknown, signal: AbortSignal) => Promise<unknown>)\n | undefined;\n if (dstDeclared && srcDeclared) {\n if (Array.isArray(srcDeclared)) {\n const srcTypes = srcDeclared;\n const anyAsync = srcTypes.some((s) => {\n const res = registry.resolveCoercion(s, dstDeclared);\n return res?.kind === \"async\";\n });\n if (anyAsync) {\n convertAsync = async (v: unknown, signal: AbortSignal) => {\n const typeId = getTypedOutputTypeId(v);\n if (!typeId)\n throw new Error(\n `Typed output required for union source; allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n if (!srcTypes.includes(typeId))\n throw new Error(\n `Invalid typed output ${typeId}; allowed: ${srcTypes.join(\"|\")}`\n );\n const payload = getTypedOutputValue(v);\n const res = registry.resolveCoercion(typeId, dstDeclared);\n if (!res) return payload;\n if (res.kind === \"async\")\n return await res.convertAsync(payload, signal);\n return res.convert(payload);\n };\n } else {\n convert = (v: unknown) => {\n const typeId = getTypedOutputTypeId(v);\n if (!typeId)\n throw new Error(\n `Typed output required for union source; allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n if (!srcTypes.includes(typeId))\n throw new Error(\n `Invalid typed output ${typeId}; allowed: ${srcTypes.join(\"|\")}`\n );\n const payload = getTypedOutputValue(v);\n const res = registry.resolveCoercion(typeId, dstDeclared);\n if (!res) return payload;\n if (res.kind === \"async\")\n throw new Error(\"Async coercion required but convert used\");\n return res.convert(payload);\n };\n }\n } else {\n const res = registry.resolveCoercion(srcDeclared, dstDeclared);\n if (res?.kind === \"async\") convertAsync = res.convertAsync;\n else if (res?.kind === \"sync\") convert = res.convert;\n }\n }\n return { convert, convertAsync };\n }\n\n private scheduleInputsChanged(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 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 const rid = `${nodeId}:${now}`;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n return;\n }\n node.lastScheduledAt = now;\n\n const rid = `${nodeId}:${now}:${Math.random().toString(36).slice(2, 8)}`;\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\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: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => capturedInputs[handle],\n environment: this.environment,\n runId: runId,\n abortSignal: controller.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\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 const exec = async (attempt: number) => {\n let hadError = false;\n try {\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\") {\n return; // ignore switched 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.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 if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\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: { ...node.inputs } });\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, { ...node.inputs });\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 private invalidateDownstream(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 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 if (!this.paused && this.allInboundHaveValue(e.target.nodeId))\n this.scheduleInputsChanged(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 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 launch(): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(node.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(node.nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${node.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.lifecycle?.init?.(node.params ?? {}, {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n node.runtime.onActivated?.(ctx);\n }\n // After activation, schedule nodes that have all inbound inputs present\n for (const nodeId of this.nodes.keys()) {\n if (this.allInboundHaveValue(nodeId)) this.scheduleInputsChanged(nodeId);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${nodeId}:external`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n\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)) this.scheduleInputsChanged(nodeId);\n else this.invalidateDownstream(nodeId);\n }\n\n node.runtime.onExternalEvent?.(event, ctx);\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 }\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 resume(): void {\n this.paused = false;\n }\n\n __unsafe_invalidateDownstream(nodeId: string): void {\n this.invalidateDownstream(nodeId);\n }\n\n __unsafe_scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChanged(nodeId);\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] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(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] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(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 ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\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 ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: rn.state,\n setState: (next: Partial<any>) => Object.assign(rn.state, next),\n emit: (handle: string, value: unknown) =>\n this.propagate(rn.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(rn.nodeId),\n getInput: (handle: string) => rn.inputs[handle],\n environment: this.environment,\n runId: `${rn.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n };\n rn.lifecycle?.init?.(rn.params ?? {}, {\n state: rn.state,\n setState: (next) => Object.assign(rn.state, next),\n });\n rn.runtime.onActivated?.(ctx);\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 // Rebuild edges mapping with coercions\n this.edges = def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) {\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = getInputTypeId(dstDesc.inputs, e.target.handle);\n }\n }\n\n const { convert, convertAsync } = GraphRuntime.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry\n );\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\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 input lost inbound, try to re-seed from defaults\n if (changed) {\n const defNode = def.nodes.find((n) => n.nodeId === nodeId);\n if (defNode) {\n const desc = registry.nodes.get(defNode.typeId);\n if (desc) {\n const regDefaults =\n typeof desc.inputDefaults === \"function\"\n ? desc.inputDefaults({\n params: defNode.params,\n environment: this.environment,\n })\n : desc.inputDefaults ?? {};\n const graphDefaults = defNode.initialInputs ?? {};\n const merged: Record<string, unknown> = {\n ...regDefaults,\n ...graphDefaults,\n };\n for (const h of Array.from(prevSet)) {\n if (!currSet.has(h) && node.inputs[h] === undefined) {\n const v = merged[h];\n if (v !== undefined)\n node.inputs[h] =\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(v));\n }\n }\n }\n }\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.scheduleInputsChanged(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 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 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.scheduleInputsChanged(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}\n","import type { GraphDefinition, 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 // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n data: { nodeId: n.nodeId },\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n issues.push({\n level: \"error\",\n code: \"NODE_TYPE_MISSING\",\n message: `Unknown node type ${n.typeId}`,\n data: { typeId: n.typeId, nodeId: n.nodeId },\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n issues.push({\n level: \"error\",\n code: \"CATEGORY_MISSING\",\n message: `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 issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n data: { edgeId: e.id },\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n if (!srcNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_SOURCE_MISSING\",\n message: `Edge ${e.id} source node missing`,\n data: { edgeId: e.id },\n });\n if (!dstNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_TARGET_MISSING\",\n message: `Edge ${e.id} target node missing`,\n data: { edgeId: e.id },\n });\n // Infer edge type when missing. For union sources, prefer target input type if available.\n let effectiveTypeId: string | undefined = e.typeId;\n let _srcDeclared: string | string[] | undefined;\n let _dstDeclared: string | undefined;\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType) _srcDeclared = srcType.outputs[e.source.handle];\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType)\n _dstDeclared = getInputTypeId(dstType.inputs, e.target.handle);\n }\n if (!effectiveTypeId) {\n if (Array.isArray(_srcDeclared) && _dstDeclared) {\n // When source is a union and target input type is known, adopt the input type\n // so validation checks are performed against the target, not an arbitrary variant.\n effectiveTypeId = _dstDeclared;\n } else if (_srcDeclared) {\n effectiveTypeId = Array.isArray(_srcDeclared)\n ? _srcDeclared[0]\n : _srcDeclared;\n }\n }\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISSING\",\n message: `Edge ${e.id} type missing or unknown`,\n data: { edgeId: e.id },\n });\n }\n\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType && !(e.source.handle in srcType.outputs)) {\n issues.push({\n level: \"error\",\n code: \"OUTPUT_MISSING\",\n message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n },\n });\n }\n if (srcType) {\n const declared = srcType.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const declaredArr = Array.isArray(declared)\n ? declared\n : declared\n ? [declared]\n : [];\n if (declaredArr.length > 0 && effectiveTypeId) {\n for (const s of declaredArr) {\n if (\n s !== effectiveTypeId &&\n !this.registry.canCoerce(s, effectiveTypeId)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_OUTPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${s}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: s,\n effectiveTypeId,\n },\n });\n }\n }\n }\n }\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType && !(e.target.handle in dstType.inputs)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_MISSING\",\n message: `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n if (dstType) {\n // Private inputs should not accept edges\n if (isInputPrivate(dstType.inputs, e.target.handle)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_PRIVATE\",\n message: `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n const declaredIn = getInputTypeId(dstType.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n // If source is a union, ensure each variant can reach declaredIn\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n const srcDeclared = srcType?.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = Array.isArray(srcDeclared)\n ? srcDeclared\n : srcDeclared\n ? [srcDeclared]\n : effectiveTypeId\n ? [effectiveTypeId]\n : [];\n for (const s of srcArr) {\n if (\n s !== declaredIn &&\n !this.registry.canCoerce(s, declaredIn)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} output type ${s} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: s,\n },\n });\n }\n }\n } else if (\n declaredIn !== effectiveTypeId &&\n !this.registry.canCoerce(effectiveTypeId, declaredIn)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n data: {\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\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 dstType = this.registry.nodes.get(dstNode.typeId);\n const declaredIn = dstType\n ? getInputTypeId(dstType.inputs, e.target.handle)\n : undefined;\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 ? innerDesc.inputs[map.handle] : undefined;\n inputTypes[outerIn] =\n typeof typeId === \"string\" ? typeId : typeId?.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(): void {\n this.graphRuntime.launch();\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\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","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { AbstractEngine } from \"./AbstractEngine\";\nimport { PushEngine } from \"./PushEngine\";\nimport type { RunnerControl } from \"./RunnerControl\";\nimport { Registry } from \"../builder/Registry\";\n\nexport class LocalRunner implements RunnerControl {\n private builder: GraphBuilder;\n private engine?: AbstractEngine;\n\n constructor(private registry: Registry) {\n this.builder = new GraphBuilder(registry);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n const rt = this.builder.build(def, opts);\n this.engine = new PushEngine(rt);\n }\n\n async update(def: GraphDefinition): Promise<void> {\n // If engine exists and is a PushEngine backed by GraphRuntime, use runtime.update\n // Otherwise rebuild.\n const eng = this.engine;\n if (eng && eng.graphRuntime) {\n eng.graphRuntime.update(def, this.registry);\n return;\n }\n await this.build(def);\n }\n\n getEngine(): AbstractEngine {\n if (!this.engine)\n throw new Error(\"Engine not built. Call build(def) first.\");\n return this.engine;\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.__unsafe_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.__unsafe_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)\n this.graphRuntime.__unsafe_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)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching)\n this.graphRuntime.__unsafe_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.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\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, {}> = {\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, ctx) {\n try {\n const e: any = event;\n // Preferred: call a function on ctx.state keyed by e.action\n const action = e?.action;\n if (action && typeof (ctx.state as any)?.[action] === \"function\") {\n const fn = (ctx.state as any)[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: { mode: \"push\", asyncConcurrency: \"switch\" },\n};\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { GraphDefinition } from \"../core/types\";\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 policy: { mode: \"hybrid\" },\n});\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type {\n ExecutionContext,\n GraphDefinition,\n NodeContext,\n} 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 // 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?: ReturnType<typeof setInterval> }>\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: (\n ctx: NodeContext<{ timerId?: ReturnType<typeof setInterval> }>\n ) => {\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","import { GraphDefinition } from \"../core/types\";\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 // Graph-level defaults override registry if provided\n initialInputs: { Operation: 2, B: [10] }, // Multiply by 10\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.initialInputs Operation=Multiply(2), B=[10] (overrides registry defaults for n2)\"\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.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"B\", 3);\n engine.setInput(\"n2\", \"Operation\", \"Multiply\");\n engine.setInput(\"n2\", \"B\", 10);\n engine.setInput(\"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 {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n} from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"B\", 2);\n engine.setInput(\"n2\", \"DelayMs\", 250);\n // Provide XYZ and route through async conversion edge\n engine.setInput(\"n3\", \"XYZ\", [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ]);\n\n // Rapid inputs to n1 should cancel prior runs (switch)\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"A\", 3);\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInput(\"n1\", \"A\", 10);\n engine.setInput(\"n1\", \"A\", 11);\n engine.setInput(\"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 {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"steps\", \"Value\", 12);\n engine.setInput(\"delay\", \"Value\", 80);\n // Manually set ShouldError on the worker (unwired input)\n engine.setInput(\"work\", \"ShouldError\", false);\n\n // After 2s, trigger an error run\n setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInput(\"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 { setupBasicGraphRegistry, createRuntime } from \"../misc/base\";\nimport type { GraphDefinition } from \"../core/types\";\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.setInput(\"nA\", \"Value\", 1);\n engine.setInput(\"nB\", \"Value\", 2);\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\n}\n"],"names":[],"mappings":"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"}
|