@bian-womp/spark-workbench 0.2.63 → 0.2.65
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 +147 -1
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts +50 -1
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/lib/cjs/src/misc/context/ContextMenuHelpers.d.ts.map +1 -1
- package/lib/esm/index.js +147 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/InMemoryWorkbench.d.ts +50 -1
- package/lib/esm/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/lib/esm/src/misc/context/ContextMenuHelpers.d.ts.map +1 -1
- package/package.json +4 -4
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/value.ts","../../src/misc/constants.ts","../../src/misc/layout.ts","../../src/misc/hooks.ts","../../src/misc/mapping.ts","../../src/misc/load.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/NodeContextMenu.tsx","../../src/misc/context/ContextMenuHelpers.ts","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["import type React from \"react\";\nimport type {\n EstimateNodeSizeFunction,\n CreateHandleBoundsFunction,\n CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"../misc/layout\";\n\nexport type NodeRenderer = React.ComponentType<any>; // bound by adapter (React component or CLI fn)\n\n// React Flow renderer types\nexport type ConnectionLineRenderer = React.ComponentType<any>;\nexport type MinimapRenderer = React.ComponentType<any>;\nexport type ControlsRenderer = React.ComponentType<any>;\nexport type BackgroundRenderer = React.ComponentType<any>;\nexport type DefaultContextMenuRenderer = React.ComponentType<any>;\nexport type NodeContextMenuRenderer = React.ComponentType<any>;\n\nexport interface UIExtensionRegistry {\n registerNodeRenderer(\n nodeTypeId: string,\n renderer: NodeRenderer | undefined\n ): this;\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined;\n getAllNodeRenderers(): Record<string, NodeRenderer>;\n\n registerConnectionLineRenderer(\n renderer: ConnectionLineRenderer | undefined\n ): this;\n getConnectionLineRenderer(): ConnectionLineRenderer | undefined;\n\n registerMinimapRenderer(renderer: MinimapRenderer | undefined): this;\n getMinimapRenderer(): MinimapRenderer | undefined;\n\n registerControlsRenderer(renderer: ControlsRenderer | undefined): this;\n getControlsRenderer(): ControlsRenderer | undefined;\n\n registerBackgroundRenderer(renderer: BackgroundRenderer | undefined): this;\n getBackgroundRenderer(): BackgroundRenderer | undefined;\n\n registerDefaultContextMenuRenderer(\n renderer: DefaultContextMenuRenderer | undefined\n ): this;\n getDefaultContextMenuRenderer(): DefaultContextMenuRenderer | undefined;\n\n registerNodeContextMenuRenderer(\n renderer: NodeContextMenuRenderer | undefined\n ): this;\n getNodeContextMenuRenderer(): NodeContextMenuRenderer | undefined;\n\n // Layout function overrides\n registerEstimateNodeSize(\n override: EstimateNodeSizeFunction | undefined\n ): this;\n getEstimateNodeSize(): EstimateNodeSizeFunction | undefined;\n\n registerCreateHandleBounds(\n override: CreateHandleBoundsFunction | undefined\n ): this;\n getCreateHandleBounds(): CreateHandleBoundsFunction | undefined;\n\n registerCreateHandleLayout(\n override: CreateHandleLayoutFunction | undefined\n ): this;\n getCreateHandleLayout(): CreateHandleLayoutFunction | undefined;\n\n registerLayoutNode(override: LayoutNodeFunction | undefined): this;\n getLayoutNode(): LayoutNodeFunction | undefined;\n}\n\nexport class DefaultUIExtensionRegistry implements UIExtensionRegistry {\n private nodeRenderers = new Map<string, NodeRenderer>();\n\n // React Flow renderers\n private connectionLineRenderer?: ConnectionLineRenderer;\n private minimapRenderer?: MinimapRenderer;\n private controlsRenderer?: ControlsRenderer;\n private backgroundRenderer?: BackgroundRenderer;\n private defaultContextMenuRenderer?: DefaultContextMenuRenderer;\n private nodeContextMenuRenderer?: NodeContextMenuRenderer;\n\n // Layout function overrides\n private estimateNodeSizeOverride?: EstimateNodeSizeFunction;\n private createHandleBoundsOverride?: CreateHandleBoundsFunction;\n private createHandleLayoutOverride?: CreateHandleLayoutFunction;\n private layoutNodeOverride?: LayoutNodeFunction;\n\n registerNodeRenderer(\n nodeTypeId: string,\n renderer: NodeRenderer | undefined\n ): this {\n if (renderer === undefined) {\n this.nodeRenderers.delete(nodeTypeId);\n } else {\n this.nodeRenderers.set(nodeTypeId, renderer);\n }\n return this;\n }\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined {\n return this.nodeRenderers.get(nodeTypeId);\n }\n getAllNodeRenderers(): Record<string, NodeRenderer> {\n const result: Record<string, NodeRenderer> = {};\n for (const [nodeTypeId, renderer] of this.nodeRenderers.entries()) {\n result[nodeTypeId] = renderer;\n }\n return result;\n }\n\n // React Flow renderers\n registerConnectionLineRenderer(\n renderer: ConnectionLineRenderer | undefined\n ): this {\n this.connectionLineRenderer = renderer;\n return this;\n }\n getConnectionLineRenderer(): ConnectionLineRenderer | undefined {\n return this.connectionLineRenderer;\n }\n\n registerMinimapRenderer(renderer: MinimapRenderer | undefined): this {\n this.minimapRenderer = renderer;\n return this;\n }\n getMinimapRenderer(): MinimapRenderer | undefined {\n return this.minimapRenderer;\n }\n\n registerControlsRenderer(renderer: ControlsRenderer | undefined): this {\n this.controlsRenderer = renderer;\n return this;\n }\n getControlsRenderer(): ControlsRenderer | undefined {\n return this.controlsRenderer;\n }\n\n registerBackgroundRenderer(renderer: BackgroundRenderer | undefined): this {\n this.backgroundRenderer = renderer;\n return this;\n }\n getBackgroundRenderer(): BackgroundRenderer | undefined {\n return this.backgroundRenderer;\n }\n\n registerDefaultContextMenuRenderer(\n renderer: DefaultContextMenuRenderer | undefined\n ): this {\n this.defaultContextMenuRenderer = renderer;\n return this;\n }\n getDefaultContextMenuRenderer(): DefaultContextMenuRenderer | undefined {\n return this.defaultContextMenuRenderer;\n }\n\n registerNodeContextMenuRenderer(\n renderer: NodeContextMenuRenderer | undefined\n ): this {\n this.nodeContextMenuRenderer = renderer;\n return this;\n }\n getNodeContextMenuRenderer(): NodeContextMenuRenderer | undefined {\n return this.nodeContextMenuRenderer;\n }\n\n // Layout function overrides\n registerEstimateNodeSize(\n override: EstimateNodeSizeFunction | undefined\n ): this {\n this.estimateNodeSizeOverride = override;\n return this;\n }\n getEstimateNodeSize(): EstimateNodeSizeFunction | undefined {\n return this.estimateNodeSizeOverride;\n }\n\n registerCreateHandleBounds(\n override: CreateHandleBoundsFunction | undefined\n ): this {\n this.createHandleBoundsOverride = override;\n return this;\n }\n getCreateHandleBounds(): CreateHandleBoundsFunction | undefined {\n return this.createHandleBoundsOverride;\n }\n\n registerCreateHandleLayout(\n override: CreateHandleLayoutFunction | undefined\n ): this {\n this.createHandleLayoutOverride = override;\n return this;\n }\n getCreateHandleLayout(): CreateHandleLayoutFunction | undefined {\n return this.createHandleLayoutOverride;\n }\n\n registerLayoutNode(override: LayoutNodeFunction | undefined): this {\n this.layoutNodeOverride = override;\n return this;\n }\n getLayoutNode(): LayoutNodeFunction | undefined {\n return this.layoutNodeOverride;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"@bian-womp/spark-graph\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n protected genId: (prefix: string, used: Set<string>) => string;\n\n constructor(args: {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n genId?: (prefix: string, used: Set<string>) => string;\n }) {\n this.ui = args.ui;\n this.layout = args.layout;\n this.storage = args.storage;\n this.serializer = args.serializer;\n this.genId = args.genId || generateId;\n }\n\n abstract load(def: GraphDefinition): Promise<void>;\n abstract export(): GraphDefinition;\n abstract validate(): ValidationResult;\n abstract addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n },\n options?: { inputs?: Record<string, unknown>; dry?: boolean }\n ): string;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }\n ): string;\n abstract disconnect(edgeId: string): void;\n abstract updateParams(nodeId: string, params: Record<string, unknown>): void;\n\n abstract on<K extends WorkbenchEventName>(\n event: K,\n handler: (e: WorkbenchEventMap[K]) => void\n ): () => void;\n\n // Expose UI registry to adapters (React Flow, CLI) to allow overrides\n getUI(): UIExtensionRegistry {\n return this.ui;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder, Registry } from \"@bian-womp/spark-graph\";\nimport { AbstractWorkbench } from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\n\nexport class InMemoryWorkbench extends AbstractWorkbench {\n private def: GraphDefinition = { nodes: [], edges: [] };\n private positions: Record<string, { x: number; y: number }> = {};\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n private registry?: Registry;\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n private viewport: { x: number; y: number; zoom: number } | null = null;\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n async load(def: GraphDefinition): Promise<void> {\n this.def = { nodes: [...def.nodes], edges: [...def.edges] };\n if (this.layout) {\n const { positions } = await this.layout.layout(this.def);\n this.positions = positions;\n }\n\n const defNodeIds = new Set(this.def.nodes.map((n) => n.nodeId));\n const defEdgeIds = new Set(this.def.edges.map((e) => e.id));\n const filteredPositions = Object.fromEntries(\n Object.entries(this.positions).filter(([id]) => defNodeIds.has(id))\n );\n const filteredNodes = this.selection.nodes.filter((id) =>\n defNodeIds.has(id)\n );\n const filteredEdges = this.selection.edges.filter((id) =>\n defEdgeIds.has(id)\n );\n\n this.positions = filteredPositions;\n this.selection = { nodes: filteredNodes, edges: filteredEdges };\n\n this.emit(\"graphChanged\", { def: this.def });\n this.refreshValidation();\n }\n\n export(): GraphDefinition {\n return this.def;\n }\n\n refreshValidation(): void {\n this.emit(\"validationChanged\", this.validate());\n }\n\n validate(): ValidationResult {\n if (this.registry) {\n const builder = new GraphBuilder(this.registry);\n const report = builder.validate(this.def);\n return report;\n }\n const issues: ValidationResult[\"issues\"] = [];\n const nodeIds = new Set<string>();\n for (const n of this.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 });\n } else nodeIds.add(n.nodeId);\n }\n const edgeIds = new Set<string>();\n for (const e of this.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 });\n } else edgeIds.add(e.id);\n }\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n },\n options?: {\n inputs?: Record<string, unknown>;\n copyOutputsFrom?: string;\n dry?: boolean;\n }\n ): string {\n const id =\n node.nodeId ??\n this.genId(\"n\", new Set(this.def.nodes.map((n) => n.nodeId)));\n this.def.nodes.push({\n nodeId: id,\n typeId: node.typeId,\n params: node.params,\n resolvedHandles: node.resolvedHandles,\n });\n if (node.position) this.positions[id] = node.position;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: {\n type: \"addNode\",\n nodeId: id,\n inputs: options?.inputs,\n copyOutputsFrom: options?.copyOutputsFrom,\n },\n dry: options?.dry,\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(nodeId: string): void {\n this.def.nodes = this.def.nodes.filter((n) => n.nodeId !== nodeId);\n this.def.edges = this.def.edges.filter(\n (e) => e.source.nodeId !== nodeId && e.target.nodeId !== nodeId\n );\n delete this.positions[nodeId];\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"removeNode\", nodeId },\n });\n this.refreshValidation();\n }\n\n connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string },\n options?: { dry?: boolean }\n ): string {\n const id =\n edge.id ?? this.genId(\"e\", new Set(this.def.edges.map((e) => e.id)));\n this.def.edges.push({\n id,\n source: { ...edge.source },\n target: { ...edge.target },\n typeId: edge.typeId,\n });\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"connect\", edgeId: id },\n dry: options?.dry,\n });\n this.refreshValidation();\n return id;\n }\n\n disconnect(edgeId: string): void {\n this.def.edges = this.def.edges.filter((e) => e.id !== edgeId);\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"disconnect\", edgeId },\n });\n this.emit(\"validationChanged\", this.validate());\n }\n\n updateEdgeType(edgeId: string, typeId: string | undefined): void {\n const e = this.def.edges.find((x) => x.id === edgeId);\n if (!e) return;\n if (!typeId) delete e.typeId;\n else e.typeId = typeId;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateEdgeType\", edgeId, typeId },\n });\n this.refreshValidation();\n }\n\n updateParams(nodeId: string, params: Record<string, unknown>): void {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return;\n n.params = { ...(n.params ?? {}), ...params };\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateParams\", nodeId },\n });\n }\n\n // Position and selection APIs for React Flow bridge\n setPosition(\n nodeId: string,\n pos: { x: number; y: number },\n opts?: { commit?: boolean }\n ): void {\n this.positions[nodeId] = pos;\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNode\", nodeId, pos },\n commit: !!opts?.commit === true,\n });\n }\n\n setPositions(\n map: Record<string, { x: number; y: number }>,\n opts?: { commit?: boolean }\n ): void {\n this.positions = { ...map };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNodes\" },\n commit: opts?.commit,\n });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSelection(\n sel: { nodes: string[]; edges: string[] },\n opts?: { commit?: boolean }\n ): void {\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"selection\" },\n commit: opts?.commit,\n });\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n setViewport(\n viewport: { x: number; y: number; zoom: number },\n opts?: { commit?: boolean }\n ): void {\n this.viewport = { ...viewport };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"viewport\" },\n commit: opts?.commit,\n });\n }\n\n getViewport(): { x: number; y: number; zoom: number } | null {\n return this.viewport ? { ...this.viewport } : null;\n }\n\n getUIState(): {\n positions?: Record<string, { x: number; y: number }>;\n selection?: { nodes: string[]; edges: string[] };\n viewport?: { x: number; y: number; zoom: number };\n } {\n const defNodeIds = new Set(this.def.nodes.map((n) => n.nodeId));\n const defEdgeIds = new Set(this.def.edges.map((e) => e.id));\n const filteredPositions = Object.fromEntries(\n Object.entries(this.positions).filter(([id]) => defNodeIds.has(id))\n );\n const filteredNodes = this.selection.nodes.filter((id) =>\n defNodeIds.has(id)\n );\n const filteredEdges = this.selection.edges.filter((id) =>\n defEdgeIds.has(id)\n );\n\n return {\n positions:\n Object.keys(filteredPositions).length > 0\n ? filteredPositions\n : undefined,\n selection:\n filteredNodes.length > 0 || filteredEdges.length > 0\n ? {\n nodes: filteredNodes,\n edges: filteredEdges,\n }\n : undefined,\n viewport: this.viewport ? { ...this.viewport } : undefined,\n };\n }\n\n setUIState(ui?: {\n positions?: Record<string, { x: number; y: number }>;\n selection?: { nodes: string[]; edges: string[] };\n viewport?: { x: number; y: number; zoom: number };\n }): void {\n if (!ui) return;\n if (ui.positions) {\n this.positions = { ...ui.positions };\n }\n if (ui.selection) {\n this.selection = {\n nodes: [...ui.selection.nodes],\n edges: [...ui.selection.edges],\n };\n this.emit(\"selectionChanged\", this.selection);\n }\n if (ui.viewport) {\n this.viewport = { ...ui.viewport };\n }\n }\n\n on<K extends WorkbenchEventName>(\n event: K,\n handler: WorkbenchEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<WorkbenchEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends WorkbenchEventName>(\n event: K,\n payload: WorkbenchEventMap[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","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { Serializer, Storage } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface CLIAdapterDeps {\n storage?: Storage;\n serializer?: Serializer;\n}\n\nexport class CLIWorkbench {\n constructor(\n private wb: InMemoryWorkbench,\n private deps: CLIAdapterDeps = {}\n ) {}\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n print(\n def?: GraphDefinition,\n options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }\n ) {\n const d = def ?? this.wb.export();\n const detail = !!options?.detail;\n const lines: string[] = [];\n lines.push(`Nodes (${d.nodes.length})`);\n for (const n of d.nodes) {\n if (!detail) {\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n } else {\n const reg = this.wb[\"registry\"];\n const desc = reg?.nodes?.get(n.typeId);\n const inputs = Object.entries(desc?.inputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const outputs = Object.entries(desc?.outputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const params = n.params ? JSON.stringify(n.params) : \"{}\";\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n lines.push(` inputs: ${inputs || \"-\"}`);\n lines.push(` outputs: ${outputs || \"-\"}`);\n lines.push(` params: ${params}`);\n const inVals = options?.values?.inputs?.[n.nodeId];\n const outVals = options?.values?.outputs?.[n.nodeId];\n if (inVals && Object.keys(inVals).length > 0)\n lines.push(` inputValues: ${JSON.stringify(inVals)}`);\n if (outVals && Object.keys(outVals).length > 0)\n lines.push(` outputValues: ${JSON.stringify(outVals)}`);\n }\n }\n lines.push(`Edges (${d.edges.length})`);\n for (const e of d.edges) {\n lines.push(\n ` - ${e.id}: ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle} (${e.typeId})`\n );\n }\n return lines.join(\"\\n\");\n }\n\n get actions() {\n return this.wb;\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n EngineKind,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport {\n IGraphRunner,\n RunnerEventName,\n type RunnerEventListener,\n ExecutionBackend,\n RunnerEventMap,\n} from \"./IGraphRunner\";\n\nexport abstract class AbstractGraphRunner implements IGraphRunner {\n public readonly runnerId: string;\n protected runtime?: GraphRuntime;\n protected engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n protected stagedInputs: Record<string, Record<string, unknown>> = {};\n protected runningKind?: EngineKind;\n\n constructor(\n protected registry: Registry,\n protected backend: ExecutionBackend\n ) {\n this.runnerId = \"\";\n }\n\n abstract build(def: GraphDefinition): void;\n\n abstract update(\n def: GraphDefinition,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract step(): Promise<void>;\n\n abstract computeNode(nodeId: string): Promise<void>;\n\n abstract flush(): Promise<void>;\n\n abstract getInputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract getOutputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ): void | Promise<void>;\n\n abstract getEnvironment(): Record<string, unknown> | undefined;\n\n abstract setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void;\n\n abstract copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void;\n\n abstract snapshotFull(): Promise<RuntimeSnapshotFull>;\n\n abstract applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ): Promise<void>;\n\n protected abstract createAndLaunchEngine(opts?: RunnerOptions): Promise<void>;\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n // Auto-stop if engine is already running\n if (this.engine) {\n this.stop();\n }\n }\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\n }\n\n stop(): void {\n if (!this.engine) return;\n\n // Dispose engine (cleans up timers, listeners, etc.)\n this.engine.dispose();\n this.engine = undefined;\n\n // Emit status but keep runtime alive\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n async switchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.engine || !this.runtime) {\n throw new Error(\"No engine running to switch from\");\n }\n\n // Wait for current engine to be idle\n await this.whenIdle();\n\n // Capture current state\n const currentInputs = { ...this.stagedInputs };\n\n // Stop current engine\n this.stop();\n\n // Ensure runtime is in a clean state (resumed)\n this.runtime.resume();\n\n // Create and launch new engine (to be implemented by subclasses)\n await this.createAndLaunchEngine(opts);\n\n // Re-apply staged inputs to new engine\n for (const [nodeId, map] of Object.entries(currentInputs)) {\n if (this.engine) {\n this.engine.setInputs(nodeId, map);\n }\n }\n }\n\n getInputDefaults(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const dynDefaults = n.resolvedHandles?.inputDefaults ?? {};\n if (Object.keys(dynDefaults).length > 0) {\n out[n.nodeId] = dynDefaults;\n }\n }\n return out;\n }\n\n on<K extends RunnerEventName>(\n event: K,\n handler: RunnerEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<RunnerEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n protected emit<K extends RunnerEventName>(\n event: K,\n payload: RunnerEventMap[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 dispose(): void | Promise<void> {\n this.engine?.dispose();\n this.engine = undefined;\n this.runtime?.dispose();\n this.runtime = undefined;\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n getRunningEngine(): EngineKind | undefined {\n return this.runningKind;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n StepEngine,\n PullEngine,\n BatchedEngine,\n} from \"@bian-womp/spark-graph\";\nimport { createEngine } from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\n// Counter for generating readable runner IDs\nlet localRunnerCounter = 0;\n\nexport class LocalGraphRunner extends AbstractGraphRunner {\n public readonly runnerId: string;\n\n constructor(registry: Registry) {\n super(registry, { kind: \"local\" });\n\n // Generate readable ID for this runner instance (e.g., local-001, local-002)\n localRunnerCounter++;\n this.runnerId = `local-${String(localRunnerCounter).padStart(3, \"0\")}`;\n console.info(`[LocalGraphRunner] Created runner with ID: ${this.runnerId}`);\n\n this.emit(\"transport\", { runnerId: this.runnerId, state: \"local\" });\n }\n\n build(def: GraphDefinition): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n // Signal UI that freshly built graph should be considered invalidated\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n }\n\n update(def: GraphDefinition, options?: { dry?: boolean }): void {\n if (!this.runtime) return;\n const wasPaused = this.runtime.isPaused();\n // Pause runtime if dry option is set (to prevent execution) or if not paused already\n if (options?.dry && !wasPaused) {\n this.runtime.pause();\n }\n try {\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } finally {\n // Resume only if we paused it due to dry option\n if (options?.dry && !wasPaused) {\n this.runtime.resume();\n }\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n this.build(def);\n if (!this.runtime) throw new Error(\"Runtime not built\");\n // Use the async method to create engine\n this.createAndLaunchEngine(opts).catch((err) => {\n console.error(\"Failed to launch engine:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n this.emit(\"error\", {\n kind: \"system\",\n message: errorMessage,\n err: err instanceof Error ? err : new Error(errorMessage),\n });\n });\n }\n\n protected async createAndLaunchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.runtime) throw new Error(\"Runtime not built\");\n\n // Use shared engine factory\n this.engine = createEngine(this.runtime, opts);\n\n if (!this.engine) throw new Error(\"Failed to create engine\");\n\n this.engine.on(\"value\", (e) => this.emit(\"value\", e));\n this.engine.on(\"error\", (e) => this.emit(\"error\", e));\n this.engine.on(\"invalidate\", (e) => this.emit(\"invalidate\", e));\n this.engine.on(\"stats\", (e) => this.emit(\"stats\", e));\n this.engine.launch(opts?.invalidate);\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n async flush(): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof BatchedEngine) await eng.flush();\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.runtime) return out;\n for (const n of def.nodes) {\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(desc?.outputs ?? {});\n for (const h of handles) {\n const v = this.runtime.getOutput(n.nodeId, h);\n if (v !== undefined) {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = v;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n // Build inbound handle set for this node from current def\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n // Merge staged only for non-inbound handles so UI reflects runtime values for wired inputs\n const merged: Record<string, unknown> = { ...runtimeInputs };\n for (const [h, v] of Object.entries(staged)) {\n if (!inbound.has(h)) merged[h] = v;\n }\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n // Handle dry option: pause runtime before triggering, resume after\n const wasPaused = this.runtime?.isPaused() ?? false;\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.pause();\n }\n\n try {\n this.engine?.triggerExternal(nodeId, event);\n } finally {\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.resume();\n }\n }\n }\n\n // Batch update multiple inputs on a node and trigger a single run\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n if (!inputs) return;\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n for (const [handle, value] of Object.entries(inputs)) {\n if (value === undefined) {\n delete this.stagedInputs[nodeId][handle];\n } else {\n this.stagedInputs[nodeId][handle] = value;\n }\n }\n\n // Handle dry option: pause runtime before setting inputs, resume after\n const wasPaused = this.runtime?.isPaused() ?? false;\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.pause();\n }\n\n try {\n if (this.engine) {\n this.engine.setInputs(nodeId, inputs);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n console.warn(\"Engine does not exists\");\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n } finally {\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.resume();\n }\n }\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n if (!this.runtime) return;\n // Get outputs from source node\n const fromNode = this.runtime.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n\n // Copy outputs to target node using hydrate\n // hydrate already pauses internally, so we don't need to handle dry option here\n // reemit: !options?.dry means don't propagate downstream if dry mode\n this.runtime.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { reemit: !options?.dry }\n );\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ) => {\n if (!this.runtime) return;\n const wasPaused = this.runtime.isPaused();\n if (opts?.dry && !wasPaused) this.runtime.pause();\n try {\n if (opts?.merge) {\n const current = this.runtime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n this.runtime.setEnvironment(next);\n } else {\n this.runtime.setEnvironment(env);\n }\n } finally {\n if (opts?.dry && !wasPaused) this.runtime.resume();\n }\n };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async snapshotFull() {\n const def = undefined as any; // UI will supply def/positions on download for local\n const inputs = this.getInputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const outputs = this.getOutputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const environment = this.getEnvironment() || {};\n return { def, environment, inputs, outputs };\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ) {\n if (payload.def && !options?.skipBuild) {\n this.build(payload.def);\n }\n\n this.setEnvironment?.(payload.environment || {}, { merge: false });\n this.hydrate(payload);\n }\n\n private hydrate(snapshot: RuntimeSnapshotFull): void {\n // Hydrate via runtime for exact restore (this emits events on runtime emitter)\n this.runtime?.hydrate({\n inputs: snapshot.inputs || {},\n outputs: snapshot.outputs || {},\n });\n\n // Also emit directly from runner to ensure UI gets events even if engine isn't running\n for (const [nodeId, map] of Object.entries(snapshot.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snapshot.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n }\n\n dispose(): void {\n super.dispose();\n this.runtime = undefined;\n this.emit(\"transport\", { runnerId: this.runnerId, state: \"local\" });\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry } from \"@bian-womp/spark-graph\";\nimport {\n RemoteEngine,\n RuntimeApiClient,\n type RemoteClientConfig,\n type RemoteTransportStatus,\n} from \"@bian-womp/spark-remote\";\nimport {\n RemoteExecutionBackend,\n RemoteExecutionBackendKind,\n TransportStatus,\n RunnerEventName,\n RunnerEventListener,\n} from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\n// Counter for generating readable runner IDs\nlet remoteRunnerCounter = 0;\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected client?: RuntimeApiClient;\n protected engine?: RemoteEngine;\n private clientPromise?: Promise<RuntimeApiClient>;\n private transportStatusUnsubscribe?: () => void;\n private disposed = false;\n private currentTransportStatus: TransportStatus;\n public readonly runnerId: string;\n\n private valueCache = new Map<\n string,\n { io: \"input\" | \"output\"; value: unknown; runtimeTypeId?: string }\n >();\n private listenersBound = false;\n private registryFetched = false;\n private registryFetching = false;\n private readonly MAX_REGISTRY_FETCH_ATTEMPTS = 3;\n private readonly INITIAL_RETRY_DELAY_MS = 1000; // 1 second\n\n /**\n * Fetch full registry description from remote and register it locally.\n * Called automatically on first connection with retry mechanism.\n */\n private async fetchRegistry(\n client: RuntimeApiClient,\n attempt = 1\n ): Promise<void> {\n if (this.registryFetching) {\n // Already fetching, don't start another fetch\n return;\n }\n\n this.registryFetching = true;\n\n try {\n const desc = await client.describeRegistry();\n\n // Register types\n for (const t of desc.types) {\n if (t.options) {\n this.registry.registerEnum({\n id: t.id,\n options: t.options,\n bakeTarget: t.bakeTarget,\n });\n } else {\n if (!this.registry.types.has(t.id)) {\n this.registry.registerType({\n id: t.id,\n displayName: t.displayName,\n validate: (_v) => true,\n bakeTarget: t.bakeTarget,\n });\n }\n }\n }\n\n // Register categories\n for (const c of desc.categories || []) {\n if (!this.registry.categories.has(c.id)) {\n // Create placeholder category descriptor\n const category: any = {\n id: c.id,\n displayName: c.displayName,\n createRuntime: () => ({\n async onInputsChanged() {},\n }),\n policy: { asyncConcurrency: \"switch\" },\n };\n this.registry.categories.register(category);\n }\n }\n\n // Register coercions\n for (const c of desc.coercions) {\n if (c.async) {\n this.registry.registerAsyncCoercion(c.from, c.to, async (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n } else {\n this.registry.registerCoercion(c.from, c.to, (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n }\n }\n\n // Register nodes\n for (const n of desc.nodes) {\n if (!this.registry.nodes.has(n.id)) {\n this.registry.registerNode({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n impl: () => {},\n });\n }\n }\n\n this.registryFetched = true;\n this.registryFetching = false;\n this.emit(\"registry\", this.registry);\n } catch (err) {\n this.registryFetching = false;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Retry with exponential backoff if attempts remaining\n if (attempt < this.MAX_REGISTRY_FETCH_ATTEMPTS) {\n const delayMs = this.INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n console.warn(\n `Failed to fetch registry (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying in ${delayMs}ms...`,\n error\n );\n\n // Emit error event for UI feedback\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Registry fetch failed (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying...`,\n err: error,\n attempt,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n\n // Retry after delay\n setTimeout(() => {\n this.fetchRegistry(client, attempt + 1).catch(() => {\n // Final failure handled below\n });\n }, delayMs);\n } else {\n // Max attempts reached, emit final error\n console.error(\n `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts:`,\n error\n );\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts. Please check your connection and try refreshing.`,\n err: error,\n attempt: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n }\n }\n }\n\n /**\n * Build RuntimeApiClient config from RemoteExecutionBackend config.\n */\n private buildClientConfig(\n backend: RemoteExecutionBackend\n ): RemoteClientConfig {\n if (backend.kind === \"remote-http\") {\n return {\n kind: \"remote-http\",\n baseUrl: backend.baseUrl,\n connectOptions: backend.connectOptions,\n };\n } else {\n return {\n kind: \"remote-ws\",\n url: backend.url,\n connectOptions: backend.connectOptions,\n };\n }\n }\n\n /**\n * Setup event subscriptions for the client.\n */\n private setupClientSubscriptions(client: RuntimeApiClient): void {\n // Subscribe to transport status changes\n // Convert RuntimeApiClient.TransportStatus to IGraphRunner.TransportStatus\n // Only emit status if it matches this runner's ID\n this.transportStatusUnsubscribe = client.onTransportStatus(\n (status: RemoteTransportStatus) => {\n if (status.runnerId && status.runnerId !== this.runnerId) return;\n\n // Map remote-unix to undefined since RemoteGraphRunner doesn't support it\n const mappedKind: RemoteExecutionBackendKind | undefined =\n status.kind === \"remote-unix\" ? undefined : status.kind;\n const transportStatus: TransportStatus = {\n state: status.state,\n kind: mappedKind,\n runnerId: this.runnerId,\n };\n // Track current status\n this.currentTransportStatus = transportStatus;\n this.emit(\"transport\", transportStatus);\n }\n );\n }\n\n // Ensure remote client\n protected async ensureClient(): Promise<RuntimeApiClient> {\n if (this.disposed) {\n throw new Error(\n \"Cannot ensure client: RemoteGraphRunner has been disposed\"\n );\n }\n if (this.client) return this.client;\n // If already connecting, wait for that connection to complete\n if (this.clientPromise) return this.clientPromise;\n\n const backend = this.backend as RemoteExecutionBackend;\n\n // Create connection promise to prevent concurrent connections\n this.clientPromise = (async () => {\n // Build client config from backend config\n const clientConfig = this.buildClientConfig(backend);\n\n // Create client with custom event handler if provided\n const client = new RuntimeApiClient(clientConfig, {\n onCustomEvent: backend.onCustomEvent,\n runnerId: this.runnerId,\n } as { onCustomEvent?: any; runnerId?: string });\n\n // Setup event subscriptions\n this.setupClientSubscriptions(client);\n\n // Connect the client (this will create and connect transport)\n await client.connect();\n\n this.client = client;\n this.valueCache.clear();\n this.listenersBound = false;\n\n // Auto-fetch registry on first connection (only once)\n if (!this.registryFetched && !this.registryFetching) {\n // Log loading state (UI can listen to transport status for loading indication)\n console.info(\"[RemoteGraphRunner] Loading registry from remote...\");\n this.fetchRegistry(client)\n .then(() => {\n console.info(\"[RemoteGraphRunner] Loaded registry from remote\");\n })\n .catch((err: unknown) => {\n console.error(\"[RemoteGraphRunner] Failed to fetch registry:\", err);\n });\n }\n\n // Clear promise on success\n this.clientPromise = undefined;\n return client;\n })();\n\n return this.clientPromise;\n }\n\n constructor(registry: Registry, backend: RemoteExecutionBackend) {\n super(registry, backend);\n\n // Generate readable ID for this runner instance (e.g., remote-001, remote-002)\n remoteRunnerCounter++;\n this.runnerId = `remote-${String(remoteRunnerCounter).padStart(3, \"0\")}`;\n console.info(\n `[RemoteGraphRunner] Created runner with ID: ${this.runnerId}`\n );\n\n // Initialize transport status as \"connecting\" - will be updated when connection completes\n this.currentTransportStatus = {\n state: \"connecting\",\n kind: backend.kind,\n };\n\n // Auto-handle registry-changed invalidations from remote\n // We listen on invalidate and if reason matches, we rehydrate registry and emit a registry event\n this.ensureClient().then(async (client) => {\n const eng = client.getEngine();\n if (!this.listenersBound) {\n eng.on(\"invalidate\", async (e: any) => {\n if (e.reason === \"registry-changed\") {\n try {\n const deltas = Array.isArray(e.deltas) ? e.deltas : [];\n for (const d of deltas) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n this.registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options,\n opts: d.opts,\n bakeTarget: d.bakeTarget,\n });\n } else if (d.kind === \"register-type\") {\n if (!this.registry.types.has(d.id)) {\n this.registry.registerType({\n id: d.id,\n displayName: d.displayName,\n validate: (_v) => true,\n bakeTarget: d.bakeTarget,\n });\n }\n } else if (d.kind === \"register-node\") {\n if (!this.registry.nodes.has(d.desc?.id)) {\n this.registry.registerNode({\n id: String(d.desc?.id || \"\"),\n categoryId: String(d.desc?.categoryId || \"compute\"),\n displayName: d.desc?.displayName,\n inputs: d.desc?.inputs || {},\n outputs: d.desc?.outputs || {},\n impl: () => {},\n });\n }\n }\n }\n this.emit(\"registry\", this.registry);\n // Trigger update so validation/UI refreshes using last known graph\n try {\n if (this.lastDef) await this.update(this.lastDef);\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n }\n });\n }\n });\n }\n\n build(def: GraphDefinition): void {}\n\n async update(\n def: GraphDefinition,\n options?: { dry?: boolean }\n ): Promise<void> {\n // Remote: forward update and await completion\n const client = await this.ensureClient();\n try {\n await client.update(def, options);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n this.lastDef = def;\n } catch (err) {\n // Log error but don't throw to maintain compatibility\n console.error(\"[RemoteGraphRunner] Error updating graph:\", err);\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: build remotely then launch\n this.ensureClient().then(async (client) => {\n await client.build(def);\n // Signal UI after remote build as well\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n this.lastDef = def;\n // Hydrate current remote inputs/outputs (including defaults) into cache\n try {\n const snap = await client.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snap.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n } catch {\n console.error(\"Failed to hydrate remote inputs/outputs\");\n }\n await this.createAndLaunchEngine(opts);\n });\n }\n\n protected async createAndLaunchEngine(opts?: RunnerOptions): Promise<void> {\n const client = await this.ensureClient();\n\n // Configure and launch engine on the backend\n await client.launch(opts);\n\n // Get the remote engine proxy and wire up event listeners\n const eng = client.getEngine();\n if (!this.listenersBound) {\n eng.on(\"value\", (e: any) => {\n this.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n runtimeTypeId: e.runtimeTypeId,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e: any) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e: any) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e: any) => this.emit(\"stats\", e));\n this.listenersBound = true;\n }\n this.engine = eng;\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n /**\n * Launch using an existing backend runtime that has already been built and hydrated.\n * This is used when resuming from a snapshot where the backend has already applied\n * ApplySnapshotFull (which builds the graph and hydrates inputs/outputs).\n * Unlike launch(), this method does NOT call client.build() to avoid destroying\n * the runtime state that was just restored.\n */\n launchExisting(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: attach to existing runtime and launch (do NOT rebuild)\n this.ensureClient().then(async (client) => {\n // NOTE: We do NOT call client.build(def) here because the backend runtime\n // has already been built and hydrated via ApplySnapshotFull.\n // Calling build() would create a new runtime and lose the restored state.\n\n this.lastDef = def;\n await this.createAndLaunchEngine(opts);\n });\n }\n\n async switchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.engine) {\n throw new Error(\"No engine running to switch from\");\n }\n\n // Wait for current engine to be idle\n await this.whenIdle();\n\n // Capture current state\n const currentInputs = { ...this.stagedInputs };\n\n // For remote runners, we cannot call this.stop() because it sends a Dispose\n // command that destroys the graphRuntime on the backend. Instead, we rely on\n // the backend's launch() method to dispose the old engine and create a new one.\n\n // Reconfigure engine on the backend (this will dispose old engine and create new one)\n const client = await this.ensureClient();\n await client.launch(opts);\n\n // Get the remote engine proxy (should be the same RemoteEngine instance)\n const eng = client.getEngine();\n\n // Update local state to reflect new engine kind\n // Note: The RemoteEngine instance itself doesn't change, but the backend engine does\n this.engine = eng;\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n\n // Re-apply staged inputs to new engine\n for (const [nodeId, map] of Object.entries(currentInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const client = await this.ensureClient();\n await client.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const client = await this.ensureClient();\n await client.computeNode(nodeId);\n }\n\n async flush(): Promise<void> {\n const client = await this.ensureClient();\n await client.flush();\n }\n\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n // Update staged inputs (for getInputs to work correctly)\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n for (const [handle, value] of Object.entries(inputs)) {\n if (value === undefined) {\n delete this.stagedInputs[nodeId][handle];\n } else {\n this.stagedInputs[nodeId][handle] = value;\n }\n }\n\n // If engine exists, call directly; otherwise ensure client (fire-and-forget)\n if (this.engine) {\n this.engine.setInputs(nodeId, inputs, options);\n } else {\n this.ensureClient()\n .then((client) => {\n client.getEngine().setInputs(nodeId, inputs, options);\n })\n .catch(() => {\n // Emit synthetic events if connection fails\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n });\n }\n }\n\n async copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n // If engine exists, call directly; otherwise ensure client (fire-and-forget)\n if (this.engine) {\n this.engine.triggerExternal(nodeId, event, options);\n } else {\n this.ensureClient()\n .then((client) => {\n client.getEngine().triggerExternal(nodeId, event, options);\n })\n .catch(() => {\n // Silently fail if connection not available\n });\n }\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const client = await this.ensureClient();\n try {\n return await client.coerce(from, to, value);\n } catch {\n return value;\n }\n }\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n const client = await this.ensureClient();\n await client.setExtData(data);\n }\n\n async snapshotFull() {\n const client = await this.ensureClient();\n try {\n return await client.snapshotFull();\n } catch {\n return { def: undefined, environment: {}, inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ) {\n // Hydrate local cache first so UI can display values immediately\n this.hydrateValueCache(payload);\n\n // Then sync with backend\n const client = await this.ensureClient();\n await client.applySnapshotFull(payload, options);\n }\n\n /**\n * Hydrates the local valueCache from a snapshot and emits value events.\n * This ensures the UI can display inputs/outputs immediately without waiting\n * for value events from the remote backend.\n */\n hydrateValueCache(snapshot: RuntimeSnapshotFull): void {\n // Hydrate inputs\n for (const [nodeId, map] of Object.entries(snapshot.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n // Hydrate outputs\n for (const [nodeId, map] of Object.entries(snapshot.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n }\n\n async setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ): Promise<void> {\n // Use client if available, otherwise ensure client and then set environment\n if (this.client) {\n await this.client.setEnvironment(env, opts);\n } else {\n try {\n const client = await this.ensureClient();\n await client.setEnvironment(env, opts);\n } catch {\n // Silently fail if connection not available\n }\n }\n }\n\n getEnvironment(): Record<string, unknown> | undefined {\n // Interface requires sync return, but RuntimeApiClient.getEnvironment() is async.\n // Returns undefined synchronously; callers needing the actual value should:\n // - Use snapshotFull() which includes environment\n // - Call client.getEnvironment() directly if they have access to the client\n // This is a limitation of the sync interface signature.\n return undefined;\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n if (!cache) return out;\n for (const n of def.nodes) {\n const resolved = n.resolvedHandles?.outputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.outputs ?? {});\n for (const h of handles) {\n const key = `${n.nodeId}.${h}`;\n const rec = cache.get(key);\n if (rec && rec.io === \"output\") {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = rec.value;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const resolved = n.resolvedHandles?.inputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.inputs ?? {});\n const cur: Record<string, unknown> = {};\n // Build inbound handle set for this node to honor wiring precedence\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n for (const h of handles) {\n const rec = cache.get(`${n.nodeId}.${h}`);\n if (rec && rec.io === \"input\") cur[h] = rec.value;\n }\n // Merge staged only for non-inbound handles so UI doesn't override runtime values\n const merged: Record<string, unknown> = { ...cur };\n for (const [h, v] of Object.entries(staged)) {\n if (!inbound.has(h)) merged[h] = v;\n }\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n async dispose(): Promise<void> {\n // Idempotent: allow multiple calls safely\n if (this.disposed) return;\n this.disposed = true;\n console.info(\n `[RemoteGraphRunner] Disposing runner with ID: ${this.runnerId}`\n );\n\n super.dispose();\n\n // Clear client promise if any\n this.clientPromise = undefined;\n\n // Unsubscribe from transport status\n // Note: Custom events are cleaned up automatically when client is disposed\n if (this.transportStatusUnsubscribe) {\n this.transportStatusUnsubscribe();\n this.transportStatusUnsubscribe = undefined;\n }\n\n // Dispose client (which will close transport)\n const clientToDispose = this.client;\n this.client = undefined;\n this.registryFetched = false; // Reset so registry is fetched again on reconnect\n this.registryFetching = false; // Reset fetching state\n\n if (clientToDispose) {\n try {\n await clientToDispose.dispose();\n } catch (err: unknown) {\n console.warn(\"[RemoteGraphRunner] Error disposing client:\", err);\n }\n }\n\n const disconnectedStatus: TransportStatus = {\n state: \"disconnected\",\n kind: this.backend.kind as RemoteExecutionBackendKind,\n runnerId: this.runnerId,\n };\n this.currentTransportStatus = disconnectedStatus;\n this.emit(\"transport\", disconnectedStatus);\n }\n\n /**\n * Override on() to emit current transport status immediately when a new listener subscribes.\n * This ensures listeners don't miss the current status when they attach after connection.\n */\n on<K extends RunnerEventName>(\n event: K,\n handler: RunnerEventListener<K>\n ): () => void {\n const unsubscribe = super.on(event, handler);\n\n // If subscribing to transport events and we have a current status, emit it immediately\n if (event === \"transport\" && this.currentTransportStatus) {\n // Use setTimeout to ensure this happens after the listener is registered\n // This prevents issues if the handler modifies state synchronously\n setTimeout(() => {\n // Type assertion is safe here because we checked event === \"transport\"\n (handler as RunnerEventListener<\"transport\">)(\n this.currentTransportStatus\n );\n }, 0);\n }\n\n return unsubscribe;\n }\n}\n","import {\n isTypedOutput,\n type Registry,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function formatDataUrlAsLabel(dataUrl: string): string {\n try {\n const semi = dataUrl.indexOf(\";\");\n const comma = dataUrl.indexOf(\",\");\n const mime = dataUrl.slice(5, semi > 0 ? semi : undefined).toUpperCase();\n const b64 = comma >= 0 ? dataUrl.slice(comma + 1) : \"\";\n const bytes = Math.floor((b64.length * 3) / 4);\n return `${mime} Data (${bytes} bytes)`;\n } catch {\n return dataUrl.length > 64 ? dataUrl.slice(0, 64) + \"…\" : dataUrl;\n }\n}\n\nexport function resolveOutputDisplay(\n raw: unknown,\n declared: string | string[] | undefined\n): { typeId?: string; value: unknown } {\n if (isTypedOutput(raw)) {\n return {\n typeId: getTypedOutputTypeId(raw),\n value: getTypedOutputValue(raw),\n };\n }\n let typeId: string | undefined = undefined;\n if (Array.isArray(declared)) {\n typeId = declared.length === 1 ? declared[0] : undefined;\n } else if (typeof declared === \"string\") {\n typeId = declared.includes(\"|\") ? undefined : declared;\n }\n return { typeId, value: raw };\n}\n\nexport function formatDeclaredTypeSignature(\n declared: string | string[] | undefined\n): string {\n if (Array.isArray(declared)) return declared.join(\" | \");\n return declared ?? \"\";\n}\n\n/**\n * Formats a handle ID for display in the UI.\n * For handles with format \"prefix:middle:suffix:extra\" (4 parts), displays only the middle part.\n * Otherwise returns the handle ID as-is.\n */\nexport function prettyHandle(id: string): string {\n try {\n const parts = String(id).split(\":\");\n // If there are exactly 3 colons (4 parts), display only the second part\n if (parts.length === 4) return parts[1] || id;\n return id;\n } catch {\n return id;\n }\n}\n\n// Pre-format common structures for display; return undefined to defer to caller\nexport function preformatValueForDisplay(\n typeId: string | undefined,\n value: unknown,\n registry?: Registry\n): string | undefined {\n if (value === undefined || value === null) return \"\";\n // Unwrap typed outputs\n if (isTypedOutput(value)) {\n return preformatValueForDisplay(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value),\n registry\n );\n }\n // Enums\n if (typeId && typeId.startsWith(\"enum:\") && registry) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n if (label) return label;\n }\n // Use deep summarization for strings, arrays and nested objects to avoid huge HTML payloads\n const summarized = summarizeDeep(value);\n if (typeof summarized === \"string\") return summarized;\n // Resource-like objects with url/title (after summarization)\n if (summarized && typeof summarized === \"object\") {\n const urlMaybe = (summarized as any).url;\n if (typeof urlMaybe === \"string\") {\n const title = (summarized as any).title || \"\";\n const shortUrl =\n urlMaybe.length > 32 ? urlMaybe.slice(0, 32) + \"…\" : urlMaybe;\n return title ? `${title} (${shortUrl})` : shortUrl;\n }\n }\n return undefined;\n}\n\nexport function summarizeDeep(value: unknown): unknown {\n // Strings: summarize data URLs and trim extremely long strings\n if (typeof value === \"string\") {\n if (value.startsWith(\"data:\")) return formatDataUrlAsLabel(value);\n return value.length > 512 ? value.slice(0, 512) + \"…\" : value;\n }\n // Typed output wrapper\n if (isTypedOutput(value)) {\n return summarizeDeep(getTypedOutputValue(value));\n }\n // Arrays\n if (Array.isArray(value)) {\n return value.map((v) => summarizeDeep(v));\n }\n // Objects\n if (value && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n // Special-case any 'url' field\n if (\n typeof v === \"string\" &&\n k.toLowerCase() === \"url\" &&\n v.startsWith(\"data:\")\n ) {\n out[k] = formatDataUrlAsLabel(v);\n continue;\n }\n out[k] = summarizeDeep(v);\n }\n return out;\n }\n return value;\n}\n","// Shared UI constants for node layout to keep mapping and rendering in sync\nexport const NODE_HEADER_HEIGHT_PX = 24;\nexport const NODE_ROW_HEIGHT_PX = 18;\nexport const HANDLE_SIZE_PX = 12;\n","import type {\n ResolvedHandles,\n GraphNodeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate } from \"@bian-womp/spark-graph\";\nimport {\n HANDLE_SIZE_PX,\n NODE_HEADER_HEIGHT_PX,\n NODE_ROW_HEIGHT_PX,\n} from \"./constants\";\nimport { Position } from \"@xyflow/react\";\n\n// Layout function types\nexport type EstimateNodeSizeArgs = {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n};\n\nexport type EstimateNodeSizeResult = {\n width: number;\n height: number;\n};\n\nexport type EstimateNodeSizeFunction = (\n args: EstimateNodeSizeArgs\n) => EstimateNodeSizeResult;\n\nexport type CreateHandleBoundsArgs = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n rowIndex: number;\n nodeWidth: number;\n};\n\nexport type CreateHandleBoundsResult = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type CreateHandleBoundsFunction = (\n args: CreateHandleBoundsArgs\n) => CreateHandleBoundsResult;\n\nexport type CreateHandleLayoutArgs = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n rowIndex: number;\n};\n\nexport type CreateHandleLayoutResult = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n};\n\nexport type CreateHandleLayoutFunction = (\n args: CreateHandleLayoutArgs\n) => CreateHandleLayoutResult;\n\nexport type LayoutNodeArgs = {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n};\n\nexport type HandleBounds = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n};\n\nexport type HandleLayout = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n};\n\nexport type LayoutNodeResult = {\n width: number;\n height: number;\n inputOrder: string[];\n outputOrder: string[];\n handles: HandleBounds[];\n handleLayout: HandleLayout[];\n};\n\nexport type LayoutNodeFunction = (args: LayoutNodeArgs) => LayoutNodeResult;\n\nexport function computeEffectiveHandles(\n node: GraphNodeDefinition,\n registry: Registry\n): ResolvedHandles {\n const desc = registry.nodes.get(node.typeId);\n const resolved = node.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n const inputDefaults = { ...desc?.inputDefaults, ...resolved.inputDefaults };\n return { inputs, outputs, inputDefaults };\n}\n\nexport function countVisibleHandles(\n handles: Omit<ResolvedHandles, \"inputDefaults\">\n): {\n inputsCount: number;\n outputsCount: number;\n} {\n const inputIds = Object.keys(handles.inputs).filter(\n (k) => !isInputPrivate(handles.inputs, k)\n );\n const outputIds = Object.keys(handles.outputs);\n return { inputsCount: inputIds.length, outputsCount: outputIds.length };\n}\n\nexport function estimateNodeSize(\n args: EstimateNodeSizeArgs\n): EstimateNodeSizeResult {\n const { node, registry, showValues, overrides } = args;\n const { inputs, outputs } = computeEffectiveHandles(node, registry);\n // Count only non-private inputs for rows on left\n const { inputsCount, outputsCount } = countVisibleHandles({\n inputs,\n outputs,\n });\n const rows = Math.max(inputsCount, outputsCount);\n const baseWidth = showValues ? 320 : 240;\n const width = overrides?.width ?? baseWidth;\n const height =\n overrides?.height ?? NODE_HEADER_HEIGHT_PX + rows * NODE_ROW_HEIGHT_PX;\n return { width, height };\n}\n\n/**\n * Calculate the Y position for handle layout (center of row).\n * Used for positioning handles in React Flow.\n */\nexport function getHandleLayoutY(rowIndex: number): number {\n return (\n NODE_HEADER_HEIGHT_PX +\n rowIndex * NODE_ROW_HEIGHT_PX +\n NODE_ROW_HEIGHT_PX / 2\n );\n}\n\n/**\n * Calculate the Y position for handle bounds (top + centering offset).\n * Used for hit-testing and edge routing.\n */\nexport function getHandleBoundsY(rowIndex: number): number {\n return (\n NODE_HEADER_HEIGHT_PX +\n rowIndex * NODE_ROW_HEIGHT_PX +\n (NODE_ROW_HEIGHT_PX - HANDLE_SIZE_PX) / 2 +\n 1\n );\n}\n\n/**\n * Calculate the X position for handle bounds based on position and node width.\n */\nexport function getHandleBoundsX(\n position: Position,\n nodeWidth: number\n): number {\n if (position === Position.Left) {\n return -HANDLE_SIZE_PX / 2 + 1;\n } else {\n return nodeWidth - HANDLE_SIZE_PX / 2 - 1;\n }\n}\n\n/**\n * Create handle bounds object for hit-testing/edge routing.\n */\nexport function createHandleBounds(\n args: CreateHandleBoundsArgs\n): CreateHandleBoundsResult {\n return {\n id: args.id,\n type: args.type,\n position: args.position,\n x: getHandleBoundsX(args.position, args.nodeWidth),\n y: getHandleBoundsY(args.rowIndex),\n width: HANDLE_SIZE_PX,\n height: HANDLE_SIZE_PX,\n };\n}\n\n/**\n * Create handle layout object for React Flow rendering.\n */\nexport function createHandleLayout(\n args: CreateHandleLayoutArgs\n): CreateHandleLayoutResult {\n return {\n id: args.id,\n type: args.type,\n position: args.position,\n y: getHandleLayoutY(args.rowIndex),\n };\n}\n\nexport function layoutNode(\n args: LayoutNodeArgs,\n overrides?: {\n estimateNodeSize?: EstimateNodeSizeFunction;\n createHandleBounds?: CreateHandleBoundsFunction;\n createHandleLayout?: CreateHandleLayoutFunction;\n }\n): LayoutNodeResult {\n const { node, registry, showValues, overrides: sizeOverrides } = args;\n const { inputs, outputs } = computeEffectiveHandles(node, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n\n const estimateNodeSizeFn = overrides?.estimateNodeSize ?? estimateNodeSize;\n const createHandleBoundsFn =\n overrides?.createHandleBounds ?? createHandleBounds;\n const createHandleLayoutFn =\n overrides?.createHandleLayout ?? createHandleLayout;\n\n const { width, height } = estimateNodeSizeFn({\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n });\n\n const handles = [\n ...inputOrder.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: i,\n nodeWidth: width,\n })\n ),\n ...outputOrder.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: i,\n nodeWidth: width,\n })\n ),\n ];\n\n const handleLayout = [\n ...inputOrder.map((id, i) =>\n createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: i,\n })\n ),\n ...outputOrder.map((id, i) =>\n createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: i,\n })\n ),\n ];\n return { width, height, inputOrder, outputOrder, handles, handleLayout };\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n} from \"@xyflow/react\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nexport function useWorkbenchBridge(wb: InMemoryWorkbench) {\n const onConnect: OnConnect = useCallback(\n (params) => {\n if (!params.source || !params.target) return;\n if (!params.sourceHandle || !params.targetHandle) return;\n // Prevent duplicate edges between the same endpoints\n const def = wb.export();\n const exists = def.edges.some(\n (e) =>\n e.source.nodeId === params.source &&\n e.source.handle === params.sourceHandle &&\n e.target.nodeId === params.target &&\n e.target.handle === params.targetHandle\n );\n if (exists) return;\n wb.connect({\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n });\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n // Apply position updates continuously, but mark commit only on drag end\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n wb.setPosition(c.id, c.position, { commit: !c.dragging });\n }\n });\n\n // Derive next node selection from change set\n const current = wb.getSelection();\n const nextNodeIds = new Set(current.nodes);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextNodeIds.has(id)) {\n nextNodeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextNodeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextNodeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: Array.from(nextNodeIds),\n edges: current.edges,\n });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) => edges.forEach((e) => wb.disconnect(e.id)),\n [wb]\n );\n\n const onEdgesChange: OnEdgesChange = useCallback(\n (changes) => {\n const current = wb.getSelection();\n const nextEdgeIds = new Set(current.edges);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextEdgeIds.has(id)) {\n nextEdgeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextEdgeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextEdgeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: current.nodes,\n edges: Array.from(nextEdgeIds),\n });\n }\n },\n [wb]\n );\n\n const onNodesDelete: OnNodesDelete = useCallback(\n (nodes) => {\n for (const n of nodes) wb.removeNode(n.id);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n };\n}\n\nexport function useWorkbenchGraphTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchGraphUiTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphUiChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchVersionTick(runner: IGraphRunner) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const bump = () => setVersion((v) => v + 1);\n const u1 = runner.on(\"value\", bump);\n const u2 = runner.on(\"error\", bump);\n const u3 = runner.on(\"invalidate\", bump);\n const u4 = runner.on(\"status\", bump);\n const u5 = runner.on(\"stats\", bump);\n return () => {\n u1();\n u2();\n u3();\n u4();\n u5();\n };\n }, [runner]);\n\n return version;\n}\n\nexport function useThrottledValue<T>(value: T, intervalMs: number): T {\n const [throttled, setThrottled] = useState<T>(value);\n const lastSetAtRef = useRef(0);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n const now =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n const elapsed = now - lastSetAtRef.current;\n if (elapsed >= intervalMs) {\n lastSetAtRef.current = now;\n setThrottled(value);\n } else {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n lastSetAtRef.current =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n setThrottled(value);\n timeoutRef.current = null;\n }, Math.max(0, intervalMs - elapsed));\n }\n return () => {};\n }, [value, intervalMs]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n return throttled;\n}\n\n// Query param helpers\nfunction setSearchParam(key: string, val: string | undefined) {\n if (typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (val === undefined || val === \"\") url.searchParams.delete(key);\n else url.searchParams.set(key, val);\n window.history.replaceState({}, \"\", url.toString());\n}\n\nexport function useQueryParamBoolean(\n key: string,\n defaultValue: boolean\n): [boolean, (v: boolean) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n if (v === null) return defaultValue;\n return v === \"1\" || v === \"true\";\n }, [key, defaultValue]);\n const [val, setVal] = useState<boolean>(initial);\n const set = useCallback(\n (v: boolean) => {\n setVal(v);\n setSearchParam(key, v ? \"1\" : undefined);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n setVal(v === \"1\" || v === \"true\");\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n\nexport function useQueryParamString(\n key: string,\n defaultValue?: string\n): [string | undefined, (v: string | undefined) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n return v ?? defaultValue;\n }, [key, defaultValue]);\n const [val, setVal] = useState<string | undefined>(initial);\n const set = useCallback(\n (v: string | undefined) => {\n setVal(v);\n setSearchParam(key, v);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key) ?? undefined;\n setVal(v);\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n} from \"@bian-womp/spark-graph\";\nimport { Position } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport {\n computeEffectiveHandles,\n layoutNode,\n createHandleBounds,\n createHandleLayout,\n estimateNodeSize,\n type EstimateNodeSizeFunction,\n type CreateHandleBoundsFunction,\n type CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"./layout\";\nimport { NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport type { UIExtensionRegistry } from \"../core/ui-extensions\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown> extends RFNodeData\n ? RFNodeData\n : Record<string, unknown>;\n type?: string;\n selected?: boolean;\n // Provide initial dimensions so XYFlow doesn't hide nodes while waiting for measurement\n initialWidth?: number;\n initialHeight?: number;\n // Pre-supply handle bounds to avoid waiting for DOM measurement\n handles?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n // Optional explicit node dimensions\n width?: number;\n height?: number;\n}\nexport interface RFEdge {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n selected?: boolean;\n animated?: boolean;\n className?: string;\n style?: any;\n label?: string;\n}\n\nexport interface RFNodeData extends Record<string, unknown> {\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n // For outputs, \"typeId\" is a display signature only; runtime type comes on value event\n outputHandles: Array<{ id: string; typeId: string }>;\n // Connectivity flags by input handle id (true if this input has an incoming edge)\n inputConnected?: Record<string, boolean>;\n // Optional explicit handle placement for consistent rendering across nodes\n handleLayout?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number; // center offset used for <Handle style={{ top }} />\n // When true, this handle does not exist in the node spec but is shown\n // to visualize dangling/missing connections. Rendered in yellow.\n missing?: boolean;\n }>;\n // Optional preferred render dimensions\n renderWidth?: number;\n renderHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, Record<string, unknown>>;\n outputValues?: Record<string, unknown>;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: ValidationIssue[];\n };\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n opts: {\n showValues?: boolean;\n inputs?: Record<string, Record<string, unknown>>;\n inputDefaults?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n resolveNodeType?: (nodeTypeId: string) => string;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n nodeStatus?: Record<string, NodeRunStatus>;\n edgeStatus?: Record<string, EdgeRunStatus>;\n nodeValidation?: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n edgeValidation?: Record<string, boolean>;\n selectedNodeIds?: Set<string>;\n selectedEdgeIds?: Set<string>;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n ui?: UIExtensionRegistry;\n }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const EDGE_STYLE_MISSING = { stroke: \"#f59e0b\", strokeWidth: 2 } as const; // amber-500\n const EDGE_STYLE_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n // Build a map of valid handles per node up-front\n const validHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n for (const n of def.nodes) {\n const { inputs, outputs } = computeEffectiveHandles(n, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n validHandleMap[n.nodeId] = {\n inputs: new Set(inputOrder),\n outputs: new Set(outputOrder),\n };\n }\n\n // Track which inputs are connected (for UI) and which handles are missing (for layout)\n const connectedInputs: Record<string, Set<string>> = {};\n const missingInputsByNode: Record<string, Set<string>> = {};\n const missingOutputsByNode: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const tgtId = e.target.nodeId;\n const tgtHandle = e.target.handle;\n if (!connectedInputs[tgtId]) connectedInputs[tgtId] = new Set<string>();\n connectedInputs[tgtId].add(tgtHandle);\n const tgtValid = !!validHandleMap[tgtId]?.inputs.has(tgtHandle);\n if (!tgtValid) {\n (missingInputsByNode[tgtId] ||= new Set<string>()).add(tgtHandle);\n }\n\n const srcId = e.source.nodeId;\n const srcHandle = e.source.handle;\n const srcValid = !!validHandleMap[srcId]?.outputs.has(srcHandle);\n if (!srcValid) {\n (missingOutputsByNode[srcId] ||= new Set<string>()).add(srcHandle);\n }\n }\n\n // This map is still used later for certain checks; align with valid handles\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n Object.assign(nodeHandleMap, validHandleMap);\n\n // Get layout function overrides from UI registry\n const layoutNodeOverride: LayoutNodeFunction =\n opts.ui?.getLayoutNode() ?? layoutNode;\n const createHandleBoundsFn: CreateHandleBoundsFunction =\n opts.ui?.getCreateHandleBounds() ?? createHandleBounds;\n const createHandleLayoutFn: CreateHandleLayoutFunction =\n opts.ui?.getCreateHandleLayout() ?? createHandleLayout;\n const estimateNodeSizeFn: EstimateNodeSizeFunction =\n opts.ui?.getEstimateNodeSize() ?? estimateNodeSize;\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const { inputs: inputSource, outputs: outputSource } =\n computeEffectiveHandles(n, registry);\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n\n // If layoutNode is overridden, use it directly; otherwise use default with internal overrides\n const geom = layoutNodeOverride\n ? layoutNodeOverride({\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n })\n : layoutNode(\n {\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n },\n {\n estimateNodeSize: estimateNodeSizeFn,\n createHandleBounds: createHandleBoundsFn,\n createHandleLayout: createHandleLayoutFn,\n }\n );\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id),\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]),\n }));\n nodeHandleMap[n.nodeId] = {\n inputs: new Set(inputHandles.map((h) => h.id)),\n outputs: new Set(outputHandles.map((h) => h.id)),\n };\n\n // Append placeholder entries for any missing handles (below valid ones)\n const baseLeftCount = geom.inputOrder.length;\n const baseRightCount = geom.outputOrder.length;\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n\n const extraHandleLayoutLeft = extraInputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: baseLeftCount + i,\n }),\n missing: true as const,\n }));\n const extraHandleLayoutRight = extraOutputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: baseRightCount + i,\n }),\n missing: true as const,\n }));\n const handleLayout = [\n ...geom.handleLayout,\n ...extraHandleLayoutLeft,\n ...extraHandleLayoutRight,\n ];\n\n // Precompute handle bounds (including missing) so edges can render immediately\n const missingBoundsLeft = extraInputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: baseLeftCount + i,\n nodeWidth: geom.width,\n })\n );\n const missingBoundsRight = extraOutputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: baseRightCount + i,\n nodeWidth: geom.width,\n })\n );\n const handles = [\n ...geom.handles,\n ...missingBoundsLeft,\n ...missingBoundsRight,\n ];\n\n // Adjust node height to accommodate missing handle rows\n const baseRows = Math.max(baseLeftCount, baseRightCount);\n const newRows = Math.max(\n baseLeftCount + extraInputs.length,\n baseRightCount + extraOutputs.length\n );\n const initialWidth = geom.width;\n const initialHeight =\n geom.height + Math.max(0, newRows - baseRows) * NODE_ROW_HEIGHT_PX;\n\n return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n inputConnected: Object.fromEntries(\n inputHandles.map((h: { id: string }) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout,\n showValues: opts.showValues,\n renderWidth: initialWidth,\n renderHeight: initialHeight,\n inputValues: opts.inputs?.[n.nodeId],\n inputDefaults: opts.inputDefaults?.[n.nodeId],\n outputValues: opts.outputs?.[n.nodeId],\n status: opts.nodeStatus?.[n.nodeId],\n validation: {\n inputs: opts.nodeValidation?.inputs?.[n.nodeId] ?? [],\n outputs: opts.nodeValidation?.outputs?.[n.nodeId] ?? [],\n issues: opts.nodeValidation?.issues?.[n.nodeId] ?? [],\n },\n toString: opts.toString,\n toElement: opts.toElement,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts.resolveNodeType?.(n.typeId) ?? \"spark-default\",\n selected: opts.selectedNodeIds\n ? opts.selectedNodeIds.has(n.nodeId)\n : undefined,\n initialWidth,\n initialHeight,\n handles,\n width: initialWidth,\n height: initialHeight,\n };\n });\n\n const edges: RFEdge[] = def.edges.map((e) => {\n const st = opts.edgeStatus?.[e.id];\n const isRunning = (st?.activeRuns || 0) > 0;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts.edgeValidation?.[e.id];\n const sourceMissing = !validHandleMap[e.source.nodeId]?.outputs.has(\n e.source.handle\n );\n const targetMissing = !validHandleMap[e.target.nodeId]?.inputs.has(\n e.target.handle\n );\n const isMissing = sourceMissing || targetMissing;\n const style = isMissing\n ? EDGE_STYLE_MISSING\n : hasError || isInvalidEdge\n ? EDGE_STYLE_ERROR\n : isRunning\n ? EDGE_STYLE_RUNNING\n : undefined;\n return {\n id: e.id,\n source: e.source.nodeId,\n target: e.target.nodeId,\n sourceHandle: e.source.handle,\n targetHandle: e.target.handle,\n selected: opts.selectedEdgeIds\n ? opts.selectedEdgeIds.has(e.id)\n : undefined,\n animated: isRunning && !isMissing,\n style,\n label: e.typeId || undefined,\n };\n });\n\n return { nodes, edges };\n}\n\n// Shared node container border class composition for consistent visuals\nexport function getNodeBorderClassNames(args: {\n selected?: boolean;\n status?: NodeRunStatus;\n validation?: { issues?: ValidationIssue[] };\n}): string {\n const selected = !!args.selected;\n const status = args.status || ({} as NodeRunStatus);\n const issues = args.validation?.issues ?? [];\n\n const hasError = !!status.lastError;\n const hasValidationError = issues.some((i) => i.level === \"error\");\n const hasValidationWarning = !hasValidationError && issues.length > 0;\n const isRunning = (status.activeRuns || 0) > 0;\n const isInvalid = !!status.invalidated && !isRunning && !hasError;\n\n // Keep border width constant to avoid layout reflow on selection toggles\n const borderWidth = \"border\";\n const borderStyle = isInvalid ? \"border-dashed\" : \"border-solid\";\n\n // Determine severity color once\n type Severity = \"red\" | \"amber\" | \"blue\" | \"gray\";\n const severity: Severity =\n hasError || hasValidationError\n ? \"red\"\n : hasValidationWarning\n ? \"amber\"\n : isRunning\n ? \"blue\"\n : \"gray\";\n\n const borderBySeverity: Record<Severity, string> = {\n red: \"border-red-500\",\n amber: \"border-amber-500\",\n blue: \"border-blue-500\",\n gray: \"border-gray-500 dark:border-gray-400\",\n };\n const ringBySeverity: Record<Severity, string> = {\n red: \"ring-2 ring-red-300 dark:ring-red-900\",\n amber: \"ring-2 ring-amber-300 dark:ring-amber-900\",\n blue: \"ring-2 ring-blue-200 dark:ring-blue-900\",\n gray: \"ring-2 ring-gray-300 dark:ring-gray-500\",\n };\n\n const borderColor = borderBySeverity[severity];\n const ring = isRunning\n ? ringBySeverity.blue\n : selected\n ? ringBySeverity[severity === \"blue\" ? \"gray\" : severity]\n : \"\";\n\n return [borderWidth, borderStyle, borderColor, ring].join(\" \").trim();\n}\n\n/**\n * Shared utility to generate handle className based on validation and value state.\n * - Linked handles (with inbound edges) get black borders\n * - Handles with values (but not linked) get darker gray borders\n * - Handles with only defaults (no value, not linked) get lighter gray borders\n * - Validation errors (red/amber) take precedence over value-based styling.\n */\nexport function getHandleClassName(args: {\n kind: \"input\" | \"output\";\n id: string;\n validation: {\n inputs?: HandleIssue[];\n outputs?: HandleIssue[];\n };\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, unknown>;\n inputConnected?: Record<string, boolean>;\n}): string {\n const { kind, id, validation } = args;\n\n const vIssues =\n (kind === \"input\" ? validation.inputs : validation.outputs)?.filter(\n (v) => v.handle === id\n ) || [];\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n\n // Determine border color based on priority:\n // 1. Validation errors (red/amber) - highest priority\n // 2. Gray border\n let borderColor: string;\n if (hasAny && hasErr) {\n borderColor = \"!border-red-500\";\n } else if (hasAny) {\n borderColor = \"!border-amber-500\";\n } else {\n borderColor = \"!border-gray-500 dark:!border-gray-400\";\n }\n\n return cx(\n \"!w-3 !h-3 !bg-white/50 !dark:bg-stone-900 wb-nodrag wb-nowheel\",\n borderColor,\n kind === \"output\" && \"!rounded-none\"\n );\n}\n","import type { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nfunction generateTimestamp(): string {\n const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(\n d.getMinutes()\n )}`;\n}\n\nfunction downloadJSON(payload: unknown, filename: string): void {\n const pretty = JSON.stringify(payload, null, 2);\n const blob = new Blob([pretty], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n}\n\nfunction isSnapshotPayload(\n parsed: unknown\n): parsed is RuntimeSnapshotFull & { def?: unknown } {\n return (\n parsed !== null &&\n typeof parsed === \"object\" &&\n (\"def\" in parsed ||\n \"inputs\" in parsed ||\n \"outputs\" in parsed ||\n \"environment\" in parsed)\n );\n}\n\nexport async function download(\n wb: InMemoryWorkbench,\n runner: IGraphRunner\n): Promise<void> {\n try {\n const def = wb.export();\n const uiState = wb.getUIState();\n\n let snapshot: RuntimeSnapshotFull;\n if (runner.isRunning()) {\n const fullSnapshot = await runner.snapshotFull();\n snapshot = {\n ...fullSnapshot,\n def,\n extData: {\n ...(fullSnapshot.extData || {}),\n ui: uiState,\n },\n };\n } else {\n const inputs = runner.getInputs(def);\n snapshot = {\n def,\n inputs,\n outputs: {},\n environment: {},\n extData: { ui: uiState },\n };\n }\n\n downloadJSON(snapshot, `spark-snapshot-${generateTimestamp()}.json`);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to download snapshot: ${message}`);\n }\n}\n\nexport async function upload(\n parsed: unknown,\n wb: InMemoryWorkbench,\n runner: IGraphRunner\n): Promise<void> {\n if (!isSnapshotPayload(parsed)) {\n throw new Error(\"Invalid snapshot format - expected RuntimeSnapshotFull\");\n }\n\n const def = parsed.def;\n const environment = parsed.environment || {};\n const inputs = parsed.inputs || {};\n const outputs = parsed.outputs || {};\n const extData = parsed.extData || {};\n\n if (!def) {\n throw new Error(\"Graph definition is empty\");\n }\n\n await wb.load(def);\n\n if (extData.ui && typeof extData.ui === \"object\") {\n wb.setUIState(extData.ui);\n }\n\n if (runner.isRunning()) {\n await runner.applySnapshotFull({\n def,\n environment,\n inputs,\n outputs,\n extData,\n });\n } else {\n runner.build(wb.export());\n\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(\n inputs as Record<string, Record<string, unknown>>\n )) {\n runner.setInputs(nodeId, map);\n }\n }\n }\n}\n","import React, { createContext, useContext } from \"react\";\nimport type {\n GraphDefinition,\n InputValidationError,\n RegistryError,\n SystemError,\n EngineKind,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry, ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n DebugEvent,\n} from \"../../core/contracts\";\nimport { AbstractWorkbench } from \"../../core/AbstractWorkbench\";\nimport { IGraphRunner } from \"../../runtime/IGraphRunner\";\n\nexport type ExampleDescriptor = {\n id: string;\n label: string;\n // If registry is omitted, the current (possibly remote-hydrated) registry is kept\n load: () => Promise<{\n registry?: Registry;\n def: GraphDefinition;\n inputs?: Record<string, Record<string, unknown>>;\n }>;\n defaultEngine?: EngineKind;\n};\n\nexport type WorkbenchOverrides = {\n toString?: (\n baseToString: (typeId?: string, value?: unknown) => string,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => string;\n toElement?: (\n baseToElement: (typeId?: string, value?: unknown) => JSX.Element,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => JSX.Element;\n setInput?: (\n baseSetInput: (handle: string, raw: string | number | undefined) => void,\n ctx: {\n runner: IGraphRunner;\n selectedNodeId?: string;\n registry: Registry;\n // lightweight context; extend if needed later\n }\n ) => (handle: string, raw: string | number | undefined) => void;\n registerUI?: (\n baseRegisterUI: (wb: AbstractWorkbench) => void,\n ctx: { wb: AbstractWorkbench; wbRunner: IGraphRunner }\n ) => void;\n // Allow consumers to customize the example list (remove/replace/add)\n getExamples?: (defaults: ExampleDescriptor[]) => ExampleDescriptor[];\n contextPanel?: React.ReactNode;\n // Optional: per-type default sizing for nodes\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n\n // Graph\n def: GraphDefinition;\n selectedNodeId?: string;\n selectedEdgeId?: string;\n setSelection: (sel: { nodes: string[]; edges: string[] }) => void;\n\n // Runtime\n nodeStatus: Record<string, NodeRunStatus>;\n edgeStatus: Record<string, EdgeRunStatus>;\n valuesTick: number;\n inputsMap: Record<string, Record<string, unknown>>;\n inputDefaultsMap: Record<string, Record<string, unknown>>;\n outputsMap: Record<string, Record<string, unknown>>;\n outputTypesMap: Record<string, Record<string, string | undefined>>;\n\n // Validation\n validationByNode: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n validationByEdge: {\n errors: Record<string, boolean>;\n issues: Record<string, ValidationIssue[]>;\n };\n validationGlobal: ValidationIssue[];\n\n // Debug events\n events: Array<DebugEvent>;\n clearEvents: () => void;\n\n // System errors\n systemErrors: SystemError[];\n registryErrors: RegistryError[];\n inputValidationErrors: InputValidationError[];\n clearSystemErrors: () => void;\n clearRegistryErrors: () => void;\n clearInputValidationErrors: () => void;\n removeSystemError: (index: number) => void;\n removeRegistryError: (index: number) => void;\n removeInputValidationError: (index: number) => void;\n\n // Engine controls\n isRunning: () => boolean;\n engineKind: () => EngineKind | undefined;\n start: (engine: EngineKind) => void;\n stop: () => void;\n step: () => void;\n flush: () => void;\n\n // Layout\n runAutoLayout: () => void;\n\n // Graph edits\n updateEdgeType: (edgeId: string, typeId: string | undefined) => void;\n\n // Invoke node external event\n triggerExternal: (nodeId: string, event: unknown) => void;\n\n // UI registration version (increments when custom renderers are registered)\n uiVersion?: number;\n}\n\nexport const WorkbenchContext = createContext<WorkbenchContextValue | null>(\n null\n);\n\nexport function useWorkbenchContext(): WorkbenchContextValue {\n const ctx = useContext(WorkbenchContext);\n if (!ctx)\n throw new Error(\n \"useWorkbenchContext must be used within WorkbenchProvider\"\n );\n return ctx;\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n EdgeConvertError,\n InputValidationError,\n NodeRunError,\n RegistryError,\n ResolvedHandles,\n SystemError,\n EngineKind,\n} from \"@bian-womp/spark-protocol\";\nimport { type Registry, type ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n DebugEvent,\n WorkbenchEventMap,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport {\n WorkbenchContext,\n WorkbenchContextValue,\n WorkbenchOverrides,\n} from \"./WorkbenchContext\";\nimport { estimateNodeSize, computeEffectiveHandles } from \"../layout\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n overrides,\n uiVersion,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n overrides?: WorkbenchOverrides;\n uiVersion?: number;\n children: React.ReactNode;\n}) {\n const [nodeStatus, setNodeStatus] = useState<Record<string, NodeRunStatus>>(\n {}\n );\n const [edgeStatus, setEdgeStatus] = useState<Record<string, EdgeRunStatus>>(\n {}\n );\n const [events, setEvents] = useState<Array<DebugEvent>>([]);\n const clearEvents = useCallback(() => setEvents([]), []);\n const [systemErrors, setSystemErrors] = useState<SystemError[]>([]);\n const [registryErrors, setRegistryErrors] = useState<RegistryError[]>([]);\n const [inputValidationErrors, setInputValidationErrors] = useState<\n InputValidationError[]\n >([]);\n const clearSystemErrors = useCallback(() => setSystemErrors([]), []);\n const clearRegistryErrors = useCallback(() => setRegistryErrors([]), []);\n const clearInputValidationErrors = useCallback(\n () => setInputValidationErrors([]),\n []\n );\n const removeSystemError = useCallback((index: number) => {\n setSystemErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n const removeRegistryError = useCallback((index: number) => {\n setRegistryErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n const removeInputValidationError = useCallback((index: number) => {\n setInputValidationErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n\n // Fallback progress animation: drive progress to 100% over ~2 minutes\n const FALLBACK_TOTAL_MS = 2 * 60 * 1000;\n const [fallbackStarts, setFallbackStarts] = useState<Record<string, number>>(\n {}\n );\n // Track runs that emitted an error so we can keep progress on completion\n const errorRunsRef = useRef<Record<string, Record<string, true>>>({});\n\n // Periodically advance fallback progress for running nodes without explicit progress\n useEffect(() => {\n const interval = setInterval(() => {\n setNodeStatus((prev) => {\n let changed = false;\n const next = { ...prev } as typeof prev;\n const now = Date.now();\n for (const id of Object.keys(prev)) {\n const st = prev[id];\n if (!st) continue;\n const runs = st.activeRuns ?? 0;\n const startAt = fallbackStarts[id];\n if (runs > 0 && startAt) {\n const cur = Math.max(0, Math.min(1, Number(st.progress) || 0));\n const elapsed = Math.max(0, now - startAt);\n // Approach 100% over the target window, but cap below 1 until done\n const target = Math.max(\n 0,\n Math.min(0.99, elapsed / FALLBACK_TOTAL_MS)\n );\n const merged = Math.max(cur, target);\n if (merged > cur + 0.005 && merged <= 1) {\n next[id] = { ...st, progress: merged };\n changed = true;\n }\n }\n }\n return changed ? next : prev;\n });\n }, 200);\n return () => clearInterval(interval);\n }, [fallbackStarts]);\n\n // Validation\n const [validation, setValidation] = useState<\n { ok: boolean; issues: Array<ValidationIssue> } | undefined\n >(undefined);\n\n // Selection (mirror workbench selectionChanged)\n const [selectedNodeId, setSelectedNodeId] = useState<string | undefined>();\n const [selectedEdgeId, setSelectedEdgeId] = useState<string | undefined>();\n const setSelection = useCallback(\n (sel: { nodes: string[]; edges: string[] }) => wb.setSelection(sel),\n [wb]\n );\n\n // Ticks\n const graphTick = useWorkbenchGraphTick(wb);\n const graphUiTick = useWorkbenchGraphUiTick(wb);\n const versionTick = useWorkbenchVersionTick(runner);\n const valuesTick = versionTick + graphTick + graphUiTick;\n\n // Def and IO values\n const def = wb.export();\n\n const inputsMap = useMemo(\n () => runner.getInputs(def),\n [runner, def, valuesTick]\n );\n const inputDefaultsMap = useMemo(\n () => runner.getInputDefaults(def),\n [runner, def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(def),\n [runner, def, valuesTick]\n );\n const outputTypesMap = useMemo(() => {\n const out: Record<string, Record<string, string | undefined>> = {};\n // Local: runtimeTypeId is not stored; derive from typed wrapper in outputsMap\n for (const n of def.nodes) {\n const effectiveHandles = computeEffectiveHandles(n, registry);\n const outputsDecl = effectiveHandles.outputs;\n const handles = Object.keys(outputsDecl);\n const cur: Record<string, string | undefined> = {};\n for (const h of handles) {\n const v = outputsMap[n.nodeId]?.[h];\n const declared = outputsDecl[h];\n const { typeId } = resolveOutputDisplay(v, declared);\n cur[h] = typeId;\n }\n if (Object.keys(cur).length > 0) out[n.nodeId] = cur;\n }\n return out;\n }, [def, outputsMap, registry]);\n\n // Initialize nodes as invalidated by default until first successful run\n useEffect(() => {\n setNodeStatus((prev) => {\n const next = { ...prev } as Record<string, NodeRunStatus>;\n for (const n of def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n const updates: Partial<NodeRunStatus> = {};\n if (cur.invalidated === undefined) {\n updates.invalidated = true;\n }\n // Ensure activeRunIds is always initialized as an array\n if (cur.activeRunIds === undefined) {\n updates.activeRunIds = [];\n }\n if (Object.keys(updates).length > 0) {\n next[n.nodeId] = { ...cur, ...updates };\n }\n }\n return next;\n });\n }, [def]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n const cur = wb.export();\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of cur.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of cur.edges) {\n indegree[e.target.nodeId] = (indegree[e.target.nodeId] ?? 0) + 1;\n adj[e.source.nodeId].push(e.target.nodeId);\n }\n const q = Object.keys(indegree).filter((k) => indegree[k] === 0);\n const layers: string[][] = [];\n while (q.length) {\n const layer: string[] = [];\n const next: string[] = [];\n for (const id of q) {\n layer.push(id);\n for (const nb of adj[id]) {\n indegree[nb] -= 1;\n if (indegree[nb] === 0) next.push(nb);\n }\n }\n layers.push(layer);\n q.splice(0, q.length, ...next);\n }\n // Size-aware placement: columns by layer, stacking nodes vertically in each column\n // Use the same sizing heuristic as mapping via estimateNodeSize\n const H_GAP = 160;\n const V_GAP = 24;\n const pos: Record<string, { x: number; y: number }> = {};\n let curX = 0;\n for (const layer of layers) {\n // Compute max width in this layer and individual heights\n let maxWidth = 0;\n const heights: Record<string, number> = {};\n for (const id of layer) {\n const node = cur.nodes.find((n) => n.nodeId === id);\n if (!node) continue;\n // Prefer showValues sizing similar to node rendering\n // Consider per-type overrides when available via UI\n const overrideSize =\n overrides?.getDefaultNodeSize?.(node.typeId) ?? undefined;\n const size = estimateNodeSize({\n node,\n registry,\n showValues: true,\n overrides: overrideSize,\n });\n heights[id] = size.height;\n if (size.width > maxWidth) maxWidth = size.width;\n }\n // Place nodes in this column\n let curY = 0;\n for (const id of layer) {\n const h = heights[id] ?? 0;\n pos[id] = { x: curX, y: curY };\n curY += h + V_GAP;\n }\n curX += maxWidth + H_GAP;\n }\n wb.setPositions(pos, { commit: true });\n }, [wb, registry, overrides?.getDefaultNodeSize]);\n\n const updateEdgeType = useCallback(\n (edgeId: string, typeId: string | undefined) =>\n wb.updateEdgeType(edgeId, typeId),\n [wb]\n );\n\n const triggerExternal = useCallback(\n (nodeId: string, event: unknown) => runner.triggerExternal(nodeId, event),\n [runner]\n );\n\n // Subscribe to runner/workbench events\n useEffect(() => {\n const add =\n (source: \"runner\" | \"workbench\", type: string) => (payload: unknown) =>\n setEvents((prev: Array<DebugEvent>) => {\n if (\n source === \"workbench\" &&\n (type === \"graphChanged\" || type === \"graphUiChanged\")\n ) {\n const changeType = (payload as WorkbenchEventMap[typeof type])\n .change?.type;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const nextNo = prev.length > 0 ? (prev[0]?.no ?? 0) + 1 : 1;\n const next = [\n {\n no: nextNo,\n at: Date.now(),\n source,\n type,\n payload: structuredClone(payload),\n },\n ...prev,\n ];\n return next.length > 200 ? next.slice(0, 200) : next;\n });\n\n // Helper to apply resolved handles from event payload to workbench\n const applyResolvedHandles = (\n resolvedHandles: Record<string, Partial<ResolvedHandles>>\n ) => {\n const cur = wb.export();\n let changed = false;\n for (const n of cur.nodes) {\n const updated = resolvedHandles[n.nodeId];\n if (updated) {\n const before = JSON.stringify(n.resolvedHandles || {});\n const after = JSON.stringify(updated);\n if (before !== after) {\n n.resolvedHandles = updated;\n changed = true;\n }\n }\n }\n if (changed) wb.refreshValidation();\n };\n\n const offRunnerValue = runner.on(\"value\", (e) => {\n if (e?.io === \"input\") {\n const nodeId = e?.nodeId as string;\n const handle = e?.handle as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: { ...s[nodeId], invalidated: true },\n }));\n // Clear validation errors for this input when a valid value is set\n setInputValidationErrors((prev) =>\n prev.filter(\n (err) => !(err.nodeId === nodeId && err.handle === handle)\n )\n );\n }\n return add(\"runner\", \"value\")(e);\n });\n const offRunnerError = runner.on(\"error\", (e) => {\n const edgeError = e as EdgeConvertError;\n const nodeError = e as NodeRunError;\n const registryError = e as RegistryError;\n const systemError = e as SystemError;\n const inputValidationError = e as InputValidationError;\n\n if (edgeError.kind === \"edge-convert\") {\n const edgeId = edgeError.edgeId;\n setEdgeStatus((s) => ({\n ...s,\n [edgeId]: { ...s[edgeId], lastError: edgeError.err },\n }));\n } else if (nodeError.kind === \"node-run\" && nodeError.nodeId) {\n const nodeId = nodeError.nodeId;\n const runId = nodeError.runId;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: nodeError.err,\n },\n }));\n // Mark this runId as errored\n if (runId) {\n errorRunsRef.current[nodeId] = {\n ...errorRunsRef.current[nodeId],\n [runId]: true,\n };\n }\n } else if (registryError.kind === \"registry\") {\n // Track registry errors for UI display\n setRegistryErrors((prev) => {\n // Avoid duplicates by checking message\n if (prev.some((err) => err.message === registryError.message)) {\n return prev;\n }\n return [...prev, registryError];\n });\n } else if (inputValidationError.kind === \"input-validation\") {\n // Track input validation errors for UI display\n setInputValidationErrors((prev) => {\n // Avoid duplicates by checking nodeId, handle, and typeId\n if (\n prev.some(\n (err) =>\n err.nodeId === inputValidationError.nodeId &&\n err.handle === inputValidationError.handle &&\n err.typeId === inputValidationError.typeId\n )\n ) {\n return prev;\n }\n return [...prev, inputValidationError];\n });\n } else if (systemError.kind === \"system\") {\n // Track custom errors for UI display\n setSystemErrors((prev) => {\n // Avoid duplicates by checking message and code\n if (\n prev.some(\n (err) =>\n err.message === systemError.message &&\n err.code === systemError.code\n )\n ) {\n return prev;\n }\n return [...prev, systemError];\n });\n }\n return add(\"runner\", \"error\")(e);\n });\n const offRunnerInvalidate = runner.on(\"invalidate\", (e) => {\n // If resolvedHandles are included in the event, use them directly (more efficient)\n if (e?.resolvedHandles && Object.keys(e.resolvedHandles).length > 0) {\n applyResolvedHandles(e.resolvedHandles);\n }\n return add(\"runner\", \"invalidate\")(e);\n });\n const offRunnerStats = runner.on(\"stats\", (s) => {\n if (!s) return;\n if (s.kind === \"node-start\") {\n const id = s.nodeId;\n const runId = s.runId;\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n if (!isValidRunId) {\n console.warn(\n `[WorkbenchContext] node-start event missing or invalid runId for node ${id}`,\n { runId, event: s }\n );\n }\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const currentRunIds = prev[id]?.activeRunIds ?? [];\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: current + 1,\n activeRunIds: isValidRunId\n ? [...currentRunIds, runId]\n : currentRunIds,\n progress: 0,\n invalidated: false,\n },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: Date.now() }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...prev[id],\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n const runId = s.runId;\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const currentRunIds = prev[id]?.activeRunIds ?? [];\n\n if (isValidRunId && !currentRunIds.includes(runId)) {\n console.warn(\n `[WorkbenchContext] node-done event for unknown runId: node=${id} runId=${runId}`,\n { event: s, currentRunIds }\n );\n return prev; // Ignore stale event\n }\n\n const nextActive = Math.max(0, current - 1); // Prevent negative values\n const nextRunIds = isValidRunId\n ? currentRunIds.filter((rid) => rid !== runId)\n : currentRunIds;\n const hadError = !!(\n isValidRunId && errorRunsRef.current[id]?.[runId]\n );\n const keepProgress = hadError || nextActive > 0;\n\n // Clear error flag for this runId\n if (isValidRunId && errorRunsRef.current[id]?.[runId]) {\n delete errorRunsRef.current[id]?.[runId];\n }\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: nextActive,\n activeRunIds: nextRunIds,\n progress: keepProgress ? prev[id]?.progress : 0,\n lastError: hadError ? prev[id]?.lastError : undefined,\n },\n };\n });\n // Clear fallback start timestamp if no more active runs\n setFallbackStarts((prev) => {\n const nextPrev = { ...prev };\n // If we don't know nextActive here, conservatively clear to stop animation\n delete nextPrev[id];\n return nextPrev;\n });\n } else if (s.kind === \"edge-start\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: { ...prev[id], activeRuns: current + 1 },\n };\n });\n } else if (s.kind === \"edge-done\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: { ...prev[id], activeRuns: Math.max(0, current - 1) }, // Prevent negative values\n };\n });\n }\n return add(\"runner\", \"stats\")(s);\n });\n const offWbGraphChanged = wb.on(\"graphChanged\", (event) => {\n // Clear validation errors for removed nodes\n if (event.change?.type === \"removeNode\") {\n const removedNodeId = event.change.nodeId;\n setInputValidationErrors((prev) =>\n prev.filter((err) => err.nodeId !== removedNodeId)\n );\n }\n return add(\"workbench\", \"graphChanged\")(event);\n });\n const offWbGraphUiChanged = wb.on(\n \"graphUiChanged\",\n add(\"workbench\", \"graphUiChanged\")\n );\n const offWbValidationChanged = wb.on(\n \"validationChanged\",\n add(\"workbench\", \"validationChanged\")\n );\n // Ensure newly added nodes start as invalidated until first evaluation\n const offWbAddNode = wb.on(\"graphChanged\", (e) => {\n const change = e.change;\n if (change?.type === \"addNode\" && typeof change.nodeId === \"string\") {\n const id = change.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [id]: { ...s[id], invalidated: true },\n }));\n }\n });\n const offWbGraphChangedForUpdate = wb.on(\"graphChanged\", async (event) => {\n if (!runner.isRunning()) return;\n\n try {\n if (event.change?.type === \"addNode\") {\n const { nodeId, inputs, copyOutputsFrom } = event.change;\n if (event.dry) {\n await runner.update(event.def, { dry: true });\n if (inputs) {\n runner.setInputs(nodeId, inputs, { dry: true });\n }\n if (copyOutputsFrom) {\n runner.copyOutputs(copyOutputsFrom, nodeId, { dry: true });\n }\n } else {\n await runner.update(event.def, { dry: !!inputs });\n if (inputs) {\n runner.setInputs(nodeId, inputs, { dry: false });\n }\n }\n } else {\n await runner.update(event.def, { dry: event.dry });\n }\n } catch (err) {\n console.error(\"[WorkbenchContext] Error updating graph:\", err);\n }\n });\n const offWbdSetValidation = wb.on(\"validationChanged\", (r) =>\n setValidation(r)\n );\n const offWbSelectionChanged = wb.on(\"selectionChanged\", (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n });\n const offWbError = wb.on(\"error\", add(\"workbench\", \"error\"));\n // Registry updates: swap registry and refresh graph validation/UI\n const offRunnerRegistry = runner.on(\"registry\", async (newReg) => {\n try {\n setRegistry(newReg);\n wb.setRegistry(newReg);\n // Trigger a graph update so the UI revalidates with new types/enums/nodes\n try {\n await runner.update(wb.export());\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n });\n\n // Handle transport disconnect: reset runtime status when connection is lost\n const offRunnerTransport = runner.on(\"transport\", (t) => {\n if (t.state === \"disconnected\") {\n console.info(\n \"[WorkbenchContext] Transport disconnected, resetting node status\"\n );\n setNodeStatus({});\n setEdgeStatus({});\n setFallbackStarts({});\n errorRunsRef.current = {};\n }\n });\n\n wb.refreshValidation();\n\n return () => {\n offRunnerValue();\n offRunnerError();\n offRunnerInvalidate();\n offRunnerStats();\n offWbGraphChanged();\n offWbGraphUiChanged();\n offWbValidationChanged();\n offWbError();\n offWbAddNode();\n offWbGraphChangedForUpdate();\n offWbdSetValidation();\n offWbSelectionChanged();\n offRunnerRegistry();\n offRunnerTransport();\n };\n }, [runner, wb, setRegistry]);\n\n const isRunning = useCallback(() => runner.isRunning(), [runner]);\n const engineKind = useCallback(() => runner.getRunningEngine(), [runner]);\n const start = useCallback(\n (engine: EngineKind) => {\n try {\n runner.launch(wb.export(), { engine });\n } catch {}\n },\n [runner, wb]\n );\n const stop = useCallback(() => runner.stop(), [runner]);\n const step = useCallback(() => runner.step(), [runner]);\n const flush = useCallback(() => runner.flush(), [runner]);\n\n const validationByNode = useMemo(() => {\n const inputs: Record<string, HandleIssue[]> = {};\n const outputs: Record<string, HandleIssue[]> = {};\n const issues: Record<string, ValidationIssue[]> = {};\n if (!validation) return { inputs, outputs, issues };\n for (const is of validation.issues ?? []) {\n const d = is.data;\n const level = is.level;\n const code = String(is.code ?? \"\");\n const message = String(is.message ?? code);\n if (!d) continue;\n if (d.nodeId) {\n if (d.input) {\n const arr = inputs[d.nodeId] ?? (inputs[d.nodeId] = []);\n arr.push({ handle: String(d.input), level, message, code });\n const nodeArr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n nodeArr.push(is);\n }\n if (d.output) {\n const arr = outputs[d.nodeId] ?? (outputs[d.nodeId] = []);\n arr.push({ handle: String(d.output), level, message, code });\n const nodeArr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n nodeArr.push(is);\n }\n if (!d.input && !d.output) {\n const arr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n arr.push(is);\n }\n }\n }\n return { inputs, outputs, issues };\n }, [validation]);\n\n const validationGlobal = useMemo(() => {\n const list: ValidationIssue[] = [];\n if (!validation) return list;\n for (const is of validation.issues ?? []) {\n const d = is.data;\n if (!d || (!d.nodeId && !d.edgeId)) {\n list.push(is);\n }\n }\n return list;\n }, [validation]);\n\n const validationByEdge = useMemo(() => {\n const errors: Record<string, boolean> = {};\n const issues: Record<string, ValidationIssue[]> = {};\n if (!validation) return { errors, issues };\n for (const is of validation.issues ?? []) {\n const d = is.data;\n const level = is.level;\n if (d?.edgeId) {\n if (level === \"error\") errors[d.edgeId] = true;\n const arr = issues[d.edgeId] ?? (issues[d.edgeId] = []);\n arr.push(is);\n }\n }\n return { errors, issues };\n }, [validation]);\n\n const value = useMemo<WorkbenchContextValue>(\n () => ({\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n uiVersion,\n }),\n [\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n wb,\n runner,\n uiVersion,\n ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { CopyIcon, TrashIcon } from \"@phosphor-icons/react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport { summarizeDeep } from \"./value\";\n\nexport function DebugEvents({\n autoScroll,\n onAutoScrollChange,\n hideWorkbench,\n onHideWorkbenchChange,\n}: {\n autoScroll: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange?: (v: boolean) => void;\n}) {\n const { events, clearEvents } = useWorkbenchContext();\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [copied, setCopied] = useState(false);\n\n const rows = useMemo(() => {\n const filtered = hideWorkbench\n ? events.filter((e) => e.source !== \"workbench\")\n : events;\n return filtered.slice().reverse();\n }, [events, hideWorkbench]);\n\n useEffect(() => {\n if (!autoScroll) return;\n const el = scrollRef.current;\n if (!el) return;\n el.scrollTop = el.scrollHeight;\n }, [rows, autoScroll]);\n\n const renderPayload = (v: unknown): string => {\n try {\n const summarized = summarizeDeep(v);\n return JSON.stringify(summarized, null, 0);\n } catch {\n return String(v);\n }\n };\n\n const handleCopyLogs = async () => {\n try {\n const formattedEvents = rows.map((ev) => ({\n no: ev.no,\n at: ev.at,\n source: ev.source,\n type: ev.type,\n payload: summarizeDeep(ev.payload),\n }));\n const jsonString = JSON.stringify(formattedEvents, null, 2);\n await navigator.clipboard.writeText(jsonString);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy logs:\", err);\n }\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0\">\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"font-semibold\">Events</div>\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-1 text-xs text-gray-700\">\n <input\n type=\"checkbox\"\n checked={hideWorkbench}\n onChange={(e) => onHideWorkbenchChange?.(e.target.checked)}\n />\n <span>Hide workbench</span>\n </label>\n <label className=\"flex items-center gap-1 text-xs text-gray-700\">\n <input\n type=\"checkbox\"\n checked={autoScroll}\n onChange={(e) => onAutoScrollChange?.(e.target.checked)}\n />\n <span>Auto scroll</span>\n </label>\n <button\n onClick={handleCopyLogs}\n className=\"p-2 border border-gray-300 rounded flex items-center justify-center\"\n title={copied ? \"Copied!\" : \"Copy logs as formatted JSON\"}\n >\n <CopyIcon size={14} />\n </button>\n <button\n onClick={clearEvents}\n className=\"p-2 border border-gray-300 rounded flex items-center justify-center\"\n title=\"Clear all events\"\n >\n <TrashIcon size={14} />\n </button>\n </div>\n </div>\n <div\n ref={scrollRef}\n className=\"flex-1 overflow-auto text-[11px] leading-4 divide-y divide-gray-200\"\n >\n {rows.map((ev) => (\n <div\n key={`${ev.at}:${ev.no}`}\n className=\"opacity-85 odd:bg-gray-50 px-2 py-1\"\n >\n <div className=\"flex items-baseline gap-2\">\n <span className=\"w-12 shrink-0 text-right text-gray-500 select-none\">\n {ev.no}\n </span>\n <span className=\"text-gray-500\">\n {new Date(ev.at).toLocaleTimeString()} · {ev.source}:{ev.type}\n </span>\n </div>\n <pre className=\"m-0 whitespace-pre-wrap ml-12\">\n {renderPayload(ev.payload)}\n </pre>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { isInputPrivate, getInputTypeId } from \"@bian-womp/spark-graph\";\nimport { XIcon, CopyIcon, XCircleIcon } from \"@phosphor-icons/react\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport { DebugEvents } from \"./DebugEvents\";\nimport { computeEffectiveHandles } from \"./layout\";\n\nexport function Inspector({\n debug,\n autoScroll,\n hideWorkbench,\n onAutoScrollChange,\n onHideWorkbenchChange,\n toString,\n contextPanel,\n setInput,\n}: {\n debug?: boolean;\n autoScroll?: boolean;\n hideWorkbench?: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n onHideWorkbenchChange?: (v: boolean) => void;\n toString: (typeId?: string, value?: unknown) => string;\n contextPanel?: React.ReactNode;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const safeToString = (typeId?: string, value?: unknown) => {\n try {\n if (typeof toString === \"function\") {\n return toString(typeId, value);\n }\n return String(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n };\n\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\n updateEdgeType,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = def.edges.find((e) => e.id === selectedEdgeId);\n\n // Use computeEffectiveHandles to merge registry defaults with dynamically resolved handles\n const effectiveHandles = selectedNode\n ? computeEffectiveHandles(selectedNode, registry)\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n const inputHandles = Object.entries(effectiveHandles.inputs)\n .filter(([k]) => !isInputPrivate(effectiveHandles.inputs, k))\n .map(([k]) => k);\n const outputHandles = Object.keys(effectiveHandles.outputs);\n const nodeInputsRaw = selectedNodeId ? inputsMap[selectedNodeId] ?? {} : {};\n const nodeInputsDefaults = selectedNodeId\n ? inputDefaultsMap[selectedNodeId] ?? {}\n : {};\n // Keep defaults separate for placeholder use (don't merge into nodeInputs)\n const nodeInputs = nodeInputsRaw;\n const nodeOutputs = selectedNodeId ? outputsMap[selectedNodeId] ?? {} : {};\n\n // Helper to truncate long values\n const truncateValue = (str: string, maxLen: number = 50): string => {\n if (str.length <= maxLen) return str;\n const start = Math.floor(maxLen / 2) - 5;\n const end = str.length - Math.floor(maxLen / 2) + 5;\n return `${str.slice(0, start)}...${str.slice(end)}`;\n };\n\n // Helper to copy to clipboard\n const copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback for older browsers\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n });\n };\n const selectedNodeStatus = selectedNodeId\n ? nodeStatus?.[selectedNodeId]\n : undefined;\n const selectedNodeValidation = selectedNodeId\n ? nodeValidationIssues?.[selectedNodeId] ?? []\n : [];\n const selectedEdgeValidation = selectedEdge\n ? edgeValidationIssues?.[selectedEdge.id] ?? []\n : [];\n const selectedNodeHandleValidation = selectedNodeId\n ? {\n inputs: nodeValidationHandles?.inputs?.[selectedNodeId] ?? [],\n outputs: nodeValidationHandles?.outputs?.[selectedNodeId] ?? [],\n }\n : { inputs: [], outputs: [] };\n\n // Render edge status indicator\n const renderEdgeStatus = useCallback(() => {\n if (!selectedEdge) return null;\n const status = edgeStatus?.[selectedEdge.id];\n if (status?.activeRuns > 0) {\n return (\n <div className=\"mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1\">\n <div className=\"font-semibold\">Running ({status.activeRuns})</div>\n <div className=\"text-[10px] text-blue-600 mt-1\">\n Note: Edge runIds are not available in stats events\n </div>\n </div>\n );\n }\n return null;\n }, [selectedEdge, edgeStatus]);\n\n // Render linked input display value\n const renderLinkedInputDisplay = useCallback(\n (typeId: string | undefined, current: unknown) => {\n const displayStr = safeToString(typeId, current);\n const isLong = displayStr.length > 50;\n const truncated = isLong ? truncateValue(displayStr) : displayStr;\n return (\n <div className=\"flex items-center gap-1\">\n <span className=\"truncate\">{truncated}</span>\n {isLong && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded\"\n onClick={() => copyToClipboard(displayStr)}\n title=\"Copy full value\"\n >\n <CopyIcon size={14} />\n </button>\n )}\n </div>\n );\n },\n [safeToString, truncateValue, copyToClipboard]\n );\n\n // Render output validation issues badge\n const renderOutputValidationBadge = useCallback(\n (handle: string) => {\n const outIssues = selectedNodeHandleValidation.outputs.filter(\n (m) => m.handle === handle\n );\n if (outIssues.length === 0) return null;\n const outErr = outIssues.some((m) => m.level === \"error\");\n const outTitle = outIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n return (\n <IssueBadge\n level={outErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={outTitle}\n />\n );\n },\n [selectedNodeHandleValidation]\n );\n\n // Render output display value\n const renderOutputDisplay = useCallback(\n (outputValue: unknown, effectiveHandle: string | string[] | undefined) => {\n const { typeId, value } = resolveOutputDisplay(\n outputValue,\n effectiveHandle\n );\n const displayStr = safeToString(typeId, value);\n const isLong = displayStr.length > 50;\n const truncated = isLong ? truncateValue(displayStr) : displayStr;\n return (\n <div className=\"flex items-center gap-1\">\n <span className=\"truncate\">{truncated}</span>\n {isLong && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded\"\n onClick={() => copyToClipboard(displayStr)}\n title=\"Copy full value\"\n >\n <CopyIcon size={14} />\n </button>\n )}\n </div>\n );\n },\n [safeToString, truncateValue, copyToClipboard]\n );\n\n // Local drafts and originals for commit-on-blur/enter behavior\n const [drafts, setDrafts] = useState<Record<string, string>>({});\n const [originals, setOriginals] = useState<Record<string, string>>({});\n\n // Initialize drafts from current inputs whenever selection or valuesTick change,\n // but do not clobber fields currently being edited (dirty drafts)\n useEffect(() => {\n const shallowEqual = (\n a: Record<string, string>,\n b: Record<string, string>\n ) => {\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n for (const k of ak) if (a[k] !== b[k]) return false;\n return true;\n };\n\n if (!selectedNodeId) {\n if (Object.keys(drafts).length || Object.keys(originals).length) {\n setDrafts({});\n setOriginals({});\n }\n return;\n }\n const handles = Object.keys(effectiveHandles.inputs);\n\n const nextDrafts: Record<string, string> = { ...drafts };\n const nextOriginals: Record<string, string> = { ...originals };\n for (const h of handles) {\n const typeId = getInputTypeId(effectiveHandles.inputs, h);\n const current = nodeInputs[h];\n const display = safeToString(typeId, current);\n const wasOriginal = originals[h];\n const isDirty =\n drafts[h] !== undefined &&\n wasOriginal !== undefined &&\n drafts[h] !== wasOriginal;\n if (!isDirty) {\n nextDrafts[h] = display;\n nextOriginals[h] = display;\n }\n }\n if (!shallowEqual(drafts, nextDrafts)) setDrafts(nextDrafts);\n if (!shallowEqual(originals, nextOriginals)) setOriginals(nextOriginals);\n }, [selectedNodeId, selectedNode, registry, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\n const { wb } = useWorkbenchContext();\n const deleteEdgeById = (edgeId?: string) => {\n if (!edgeId) return;\n try {\n wb.disconnect(edgeId);\n } catch {}\n };\n\n return (\n <div\n className={`${widthClass} border-l border-gray-300 p-3 flex flex-col h-full min-h-0 overflow-auto`}\n >\n <div className=\"flex-1 overflow-auto\">\n {contextPanel && <div className=\"mb-2\">{contextPanel}</div>}\n\n {/* Input Validation Error Banners */}\n {inputValidationErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {inputValidationErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">Input Validation Error</div>\n <div className=\"break-words\">{err.message}</div>\n <div className=\"text-[10px] text-red-600 mt-1\">\n {err.nodeId}.{err.handle} (type: {err.typeId})\n </div>\n </div>\n <button\n className=\"text-red-500 hover:text-red-700 text-[10px] px-1\"\n onClick={() => removeInputValidationError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {inputValidationErrors.length > 1 && (\n <button\n className=\"text-xs text-red-600 hover:text-red-800 underline\"\n onClick={clearInputValidationErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n {/* System Error Banners */}\n {systemErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {systemErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">\n {err.code ? `Error ${err.code}` : \"Error\"}\n </div>\n <div className=\"break-words\">{err.message}</div>\n </div>\n <button\n className=\"text-red-500 hover:text-red-700 text-[10px] px-1\"\n onClick={() => removeSystemError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {systemErrors.length > 1 && (\n <button\n className=\"text-xs text-red-600 hover:text-red-800 underline\"\n onClick={clearSystemErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n {registryErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {registryErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-amber-700 bg-amber-50 border border-amber-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">Registry Error</div>\n <div className=\"break-words\">{err.message}</div>\n {err.attempt && err.maxAttempts && (\n <div className=\"text-[10px] text-amber-600 mt-1\">\n Attempt {err.attempt} of {err.maxAttempts}\n </div>\n )}\n </div>\n <button\n className=\"text-amber-500 hover:text-amber-700 text-[10px] px-1\"\n onClick={() => removeRegistryError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {registryErrors.length > 1 && (\n <button\n className=\"text-xs text-amber-600 hover:text-amber-800 underline\"\n onClick={clearRegistryErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n <div className=\"font-semibold mb-2\">Inspector</div>\n <div className=\"text-xs text-gray-500 mb-2\">\n valuesTick: {valuesTick}\n </div>\n <div className=\"flex-1\">\n {!selectedNode && !selectedEdge ? (\n <div>\n <div className=\"text-gray-500\">Select a node or edge.</div>\n {globalValidationIssues && globalValidationIssues.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {globalValidationIssues.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n {!!m.data?.edgeId && (\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(m.data?.edgeId);\n }}\n title=\"Delete referenced edge\"\n >\n Delete edge\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : selectedEdge ? (\n <div>\n <div className=\"mb-2\">\n <div>Edge: {selectedEdge.id}</div>\n <div>\n {selectedEdge.source.nodeId}.{selectedEdge.source.handle} →{\" \"}\n {selectedEdge.target.nodeId}.{selectedEdge.target.handle}\n </div>\n {renderEdgeStatus()}\n <div className=\"mt-1\">\n <button\n className=\"text-xs px-2 py-1 border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </div>\n <div className=\"flex items-center gap-2 mt-1\">\n <label className=\"w-20 flex flex-col\">\n <span>Type</span>\n <span className=\"text-gray-500 text-[11px]\">\n DataTypeId\n </span>\n </label>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n value={selectedEdge.typeId ?? \"\"}\n onChange={(e) => {\n const v = e.target.value;\n const next = v === \"\" ? undefined : v;\n updateEdgeType(selectedEdge.id, next);\n }}\n >\n <option value=\"\">(infer from source)</option>\n {Array.from(registry.types.keys()).map((tid) => (\n <option key={tid} value={tid}>\n {tid}\n </option>\n ))}\n </select>\n </div>\n </div>\n {selectedEdgeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedEdgeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div>\n {selectedNode && (\n <div className=\"mb-2\">\n <div>Node: {selectedNode.nodeId}</div>\n <div>Type: {selectedNode.typeId}</div>\n {!!selectedNodeStatus?.activeRuns &&\n selectedNodeStatus.activeRuns > 0 && (\n <div className=\"mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1\">\n <div className=\"font-semibold\">\n Running ({selectedNodeStatus.activeRuns})\n </div>\n {selectedNodeStatus.activeRunIds &&\n selectedNodeStatus.activeRunIds.length > 0 ? (\n <div className=\"mt-1\">\n <div className=\"text-[10px] text-blue-600\">\n RunIds:\n </div>\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {selectedNodeStatus.activeRunIds.map(\n (runId, idx) => (\n <span\n key={idx}\n className=\"text-[10px] px-1.5 py-0.5 bg-blue-100 border border-blue-300 rounded font-mono\"\n >\n {runId}\n </span>\n )\n )}\n </div>\n </div>\n ) : (\n <div className=\"text-[10px] text-blue-600 mt-1\">\n RunIds not available (some runs may have started\n without runId)\n </div>\n )}\n </div>\n )}\n {!!selectedNodeStatus?.lastError && (\n <div className=\"mt-2 text-sm text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 break-words\">\n {String(\n (selectedNodeStatus.lastError as any)?.message ??\n selectedNodeStatus.lastError\n )}\n </div>\n )}\n </div>\n )}\n <div className=\"mb-2\">\n <div className=\"font-semibold mb-1\">Inputs</div>\n {inputHandles.length === 0 ? (\n <div className=\"text-gray-500\">No inputs</div>\n ) : (\n inputHandles.map((h) => {\n const typeId = getInputTypeId(effectiveHandles.inputs, h);\n const isLinked = def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const inbound = new Set(\n def.edges\n .filter(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n )\n .map((e) => e.target.handle)\n );\n const hasDefault =\n !inbound.has(h) && nodeInputsDefaults[h] !== undefined;\n const defaultStr = hasDefault\n ? safeToString(typeId, nodeInputsDefaults[h])\n : undefined;\n const commonProps = {\n style: { flex: 1 },\n disabled: isLinked,\n };\n const current = nodeInputs[h];\n const hasValue = current !== undefined && current !== null;\n const value = drafts[h] ?? safeToString(typeId, current);\n const displayValue = value;\n const placeholder = hasDefault ? defaultStr : undefined;\n const onChangeText = (text: string) =>\n setDrafts((d) => ({ ...d, [h]: text }));\n const commit = () => {\n const draft = drafts[h];\n if (draft === undefined) return;\n\n // Only commit if draft differs from current value\n const currentDisplay = safeToString(typeId, current);\n if (draft === currentDisplay) {\n // No change, just sync originals without calling setInput\n setOriginals((o) => ({ ...o, [h]: draft }));\n return;\n }\n\n setInput(h, draft);\n setOriginals((o) => ({ ...o, [h]: draft }));\n };\n const revert = () => {\n const orig =\n originals[h] ?? safeToString(typeId, current);\n setDrafts((d) => ({ ...d, [h]: orig }));\n };\n const clearInput = () => {\n setInput(h, undefined);\n setDrafts((d) => ({ ...d, [h]: \"\" }));\n setOriginals((o) => ({ ...o, [h]: \"\" }));\n };\n const isEnum = typeId?.startsWith(\"enum:\");\n const inIssues = selectedNodeHandleValidation.inputs.filter(\n (m) => m.handle === h\n );\n const hasValidation = inIssues.length > 0;\n const hasErr = inIssues.some((m) => m.level === \"error\");\n const title = inIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n return (\n <div key={h} className=\"flex items-center gap-2 mb-1\">\n <label className=\"w-32 flex flex-col\">\n <span>{prettyHandle(h)}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {typeId}\n </span>\n </label>\n {hasValidation && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={title}\n />\n )}\n {isEnum ? (\n <div className=\"flex items-center gap-1 flex-1\">\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1\"\n value={\n current !== undefined && current !== null\n ? String(current)\n : \"\"\n }\n onChange={(e) => {\n const val = e.target.value;\n const raw =\n val === \"\" ? undefined : Number(val);\n setInput(h, raw);\n // keep drafts/originals in sync with label for display elsewhere\n const display = safeToString(typeId, raw);\n setDrafts((d) => ({ ...d, [h]: display }));\n setOriginals((o) => ({ ...o, [h]: display }));\n }}\n {...commonProps}\n >\n <option value=\"\">\n {placeholder\n ? `Default: ${placeholder}`\n : \"(select)\"}\n </option>\n {registry.enums\n .get(typeId!)\n ?.options.map((opt) => (\n <option\n key={opt.value}\n value={String(opt.value)}\n >\n {opt.label}\n </option>\n ))}\n </select>\n {hasValue && !isLinked && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700\"\n onClick={clearInput}\n title=\"Clear input value\"\n >\n <XCircleIcon size={16} />\n </button>\n )}\n </div>\n ) : isLinked ? (\n <div className=\"flex items-center gap-1 flex-1\">\n <div className=\"flex-1 min-w-0\">\n {renderLinkedInputDisplay(typeId, current)}\n </div>\n </div>\n ) : (\n <div className=\"flex items-center gap-1 flex-1\">\n <input\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1\"\n placeholder={\n placeholder\n ? `Default: ${placeholder}`\n : undefined\n }\n value={displayValue}\n onChange={(e) => onChangeText(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n if (e.key === \"Escape\") revert();\n }}\n {...commonProps}\n />\n {hasValue && !isLinked && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700\"\n onClick={clearInput}\n title=\"Clear input value\"\n >\n <XCircleIcon size={16} />\n </button>\n )}\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n <div>\n <div className=\"font-semibold mb-1\">Outputs</div>\n {outputHandles.length === 0 ? (\n <div className=\"text-gray-500\">No outputs</div>\n ) : (\n outputHandles.map((h) => (\n <div key={h} className=\"flex items-center gap-2 mb-1\">\n <label className=\"w-20 flex flex-col\">\n <span>{prettyHandle(h)}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {outputTypesMap[selectedNodeId!]?.[h] ?? \"\"}\n </span>\n </label>\n <div className=\"flex-1 min-w-0\">\n {renderOutputDisplay(\n nodeOutputs[h],\n effectiveHandles.outputs[h]\n )}\n </div>\n {renderOutputValidationBadge(h)}\n </div>\n ))\n )}\n </div>\n {selectedNodeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedNodeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n {!!m.data?.edgeId && (\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(m.data?.edgeId);\n }}\n title=\"Delete referenced edge\"\n >\n Delete edge\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n {debug && (\n <div className=\"mt-3 flex-none min-h-0 h-[50%]\">\n <DebugEvents\n autoScroll={!!autoScroll}\n hideWorkbench={!!hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n />\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport type { RFNodeData } from \"./mapping\";\n\ntype HandleKind = \"input\" | \"output\";\n\nfunction NodeHandleItem({\n kind,\n id,\n type,\n position,\n y,\n isConnectable,\n className,\n labelClassName,\n renderLabel,\n}: {\n kind: HandleKind;\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y?: number;\n isConnectable: boolean;\n className: string;\n labelClassName: string;\n renderLabel?: (args: { kind: HandleKind; id: string }) => React.ReactNode;\n}) {\n return (\n <>\n <Handle\n id={id}\n type={type}\n position={position}\n isConnectable={isConnectable}\n className={className}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={\n labelClassName + (kind === \"input\" ? \" left-2\" : \" right-2\")\n }\n style={{\n top: (y ?? 0) - 8,\n ...(kind === \"input\"\n ? { right: \"50%\" }\n : { left: \"50%\", textAlign: \"right\" }),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind, id })}\n </div>\n )}\n </>\n );\n}\n\nexport function NodeHandles({\n data,\n isConnectable,\n getClassName,\n renderLabel,\n labelClassName = \"absolute text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\",\n}: {\n data: RFNodeData;\n isConnectable: boolean;\n getClassName?: (args: {\n kind: \"input\" | \"output\";\n id: string;\n type: \"source\" | \"target\";\n }) => string | undefined;\n renderLabel?: (args: {\n kind: \"input\" | \"output\";\n id: string;\n }) => React.ReactNode;\n labelClassName?: string;\n}) {\n const layout = data.handleLayout ?? [];\n const byId = React.useMemo(() => {\n const m = new Map<\n string,\n {\n position: Position;\n y: number;\n type: \"source\" | \"target\";\n missing?: boolean;\n }\n >();\n for (const h of layout) {\n // Prefer namespaced key to disambiguate inputs/outputs that share id\n m.set(`${h.type}:${h.id}`, {\n position: h.position,\n y: h.y,\n type: h.type,\n missing: h.missing,\n });\n // Back-compat: also store by id-only if not already set\n if (!m.has(h.id))\n m.set(h.id, {\n position: h.position,\n y: h.y,\n type: h.type,\n missing: h.missing,\n });\n }\n return m;\n }, [layout]);\n\n const inputIds = React.useMemo(\n () => new Set((data.inputHandles ?? []).map((h) => h.id)),\n [data.inputHandles]\n );\n const outputIds = React.useMemo(\n () => new Set((data.outputHandles ?? []).map((h) => h.id)),\n [data.outputHandles]\n );\n const missingInputs = React.useMemo(\n () =>\n (layout || []).filter(\n (h) => h.type === \"target\" && (!inputIds.has(h.id) || h.missing)\n ),\n [layout, inputIds]\n );\n const missingOutputs = React.useMemo(\n () =>\n (layout || []).filter(\n (h) => h.type === \"source\" && (!outputIds.has(h.id) || h.missing)\n ),\n [layout, outputIds]\n );\n\n return (\n <>\n {(data.inputHandles ?? []).map((h) => {\n const placed = byId.get(`target:${h.id}`) ?? byId.get(h.id);\n const position = placed?.position ?? Position.Left;\n const y = placed?.y;\n const cls =\n getClassName?.({ kind: \"input\", id: h.id, type: \"target\" }) ?? \"\";\n return (\n <NodeHandleItem\n key={h.id}\n kind=\"input\"\n id={h.id}\n type=\"target\"\n position={position}\n y={y}\n isConnectable={isConnectable}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing input handles (rendered in yellow) */}\n {missingInputs.map((h) => {\n const key = `missing-input:${h.id}`;\n const position = h.position ?? Position.Left;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"input\"\n id={h.id}\n type=\"target\"\n position={position}\n y={y}\n isConnectable={false}\n className={`${cls} wb-nodrag wb-nowheel`}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {(data.outputHandles ?? []).map((h) => {\n const placed = byId.get(`source:${h.id}`) ?? byId.get(h.id);\n const position = placed?.position ?? Position.Right;\n const y = placed?.y;\n const cls =\n getClassName?.({ kind: \"output\", id: h.id, type: \"source\" }) ?? \"\";\n return (\n <NodeHandleItem\n key={h.id}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={isConnectable}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing output handles (rendered in yellow) */}\n {missingOutputs.map((h) => {\n const key = `missing-output:${h.id}`;\n const position = h.position ?? Position.Right;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 !rounded-none wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={false}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n </>\n );\n}\n\nexport default NodeHandles;\n","import React from \"react\";\nimport {\n useUpdateNodeInternals,\n type NodeProps,\n type Node,\n} from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { ArrowClockwiseIcon } from \"@phosphor-icons/react\";\nimport NodeHandles from \"./NodeHandles\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport {\n getNodeBorderClassNames,\n getHandleClassName,\n type RFNodeData,\n} from \"./mapping\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<Node<RFNodeData>>) {\n const updateNodeInternals = useUpdateNodeInternals();\n const { typeId, showValues } = data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n React.useEffect(() => {\n updateNodeInternals(id);\n }, [\n id,\n inputEntries.length,\n outputEntries.length,\n showValues,\n updateNodeInternals,\n ]);\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const containerBorder = getNodeBorderClassNames({\n selected,\n status,\n validation,\n });\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/50 !dark:bg-stone-900\",\n containerBorder\n )}\n style={{\n position: \"relative\",\n minWidth:\n typeof data.renderWidth === \"number\" ? data.renderWidth : undefined,\n minHeight:\n typeof data.renderHeight === \"number\" ? data.renderHeight : undefined,\n }}\n >\n <DefaultNodeHeader\n id={id}\n title={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n\nexport function DefaultNodeHeader({\n id,\n title,\n validation,\n right,\n showId,\n onInvalidate,\n}: {\n id: string;\n title: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n onInvalidate?: () => void;\n}) {\n const ctx = useWorkbenchContext();\n const handleInvalidate = React.useCallback(() => {\n try {\n if (onInvalidate) return onInvalidate();\n const kind = ctx.engineKind?.();\n if (kind === \"pull\") ctx.runner.computeNode(id);\n else ctx.triggerExternal?.(id, { type: \"invalidate\" });\n } catch {}\n }, [ctx, id, onInvalidate]);\n\n return (\n <div\n className=\"flex items-center justify-center px-2 border-b border-solid border-gray-500 dark:border-gray-400 text-gray-600 dark:text-gray-300\"\n style={{\n maxHeight: NODE_HEADER_HEIGHT_PX,\n minHeight: NODE_HEADER_HEIGHT_PX,\n }}\n >\n <strong\n className=\"flex-1 h-full text-sm\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n >\n {title}\n </strong>\n <div className=\"flex items-center gap-1\">\n {/* Invalidate button */}\n <button\n className=\"w-4 h-4 border border-gray-400 rounded text-[10px] leading-3 flex items-center justify-center\"\n title=\"Invalidate and re-run\"\n onClick={(e) => {\n e.stopPropagation();\n handleInvalidate();\n }}\n >\n <ArrowClockwiseIcon size={10} />\n </button>\n {right}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n {showId && <span className=\"text-[10px] opacity-70\">({id})</span>}\n </div>\n </div>\n );\n}\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<Node<RFNodeData>>, \"data\" | \"isConnectable\">) {\n const { showValues, inputValues, inputDefaults, outputValues, toString } =\n data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n const isRunning = !!status.activeRuns;\n const pct = Math.round(\n Math.max(0, Math.min(1, Number(status.progress) || 0)) * 100\n );\n\n return (\n <>\n <div\n className={cx(\n \"h-px\",\n (isRunning || pct > 0) && \"bg-blue-200 dark:bg-blue-900\"\n )}\n >\n <div\n className={cx(\n \"h-px transition-all\",\n (isRunning || pct > 0) && \"bg-blue-500\"\n )}\n style={{ width: isRunning || pct > 0 ? `${pct}%` : 0 }}\n />\n </div>\n\n <NodeHandles\n data={data}\n isConnectable={isConnectable}\n getClassName={({ kind, id }) =>\n getHandleClassName({\n kind,\n id,\n validation,\n inputValues,\n outputValues,\n inputDefaults,\n inputConnected: data.inputConnected,\n })\n }\n renderLabel={({ kind, id: handleId }) => {\n const entries = kind === \"input\" ? inputEntries : outputEntries;\n const entry = entries.find((e) => e.id === handleId);\n if (!entry) return prettyHandle(handleId);\n const vIssues = (\n kind === \"input\" ? validation.inputs : validation.outputs\n ).filter((v) => v.handle === handleId);\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n const title = vIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n\n const valueText = (() => {\n if (!showValues) return undefined;\n if (kind === \"input\") {\n const value = inputValues?.[entry.id];\n const isDefault =\n value !== undefined &&\n inputDefaults?.[entry.id] !== undefined &&\n JSON.stringify(value) ===\n JSON.stringify(inputDefaults[entry.id]);\n const txt = toString(entry.typeId, value);\n const str = typeof txt === \"string\" ? txt : String(txt);\n return { text: str, isDefault };\n }\n const resolved = resolveOutputDisplay(\n outputValues?.[entry.id],\n entry.typeId\n );\n const txt = toString(resolved.typeId, resolved.value);\n return {\n text: typeof txt === \"string\" ? txt : String(txt),\n isDefault: false,\n };\n })();\n\n return (\n <span\n className={`flex items-center gap-1 w-full ${\n valueText?.isDefault ? \"text-gray-400\" : \"\"\n }`}\n >\n {kind === \"output\" ? (\n <>\n {valueText !== undefined ? (\n <span\n className=\"opacity-60 truncate pl-1\"\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText.text}\n </span>\n ) : (\n <span style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }} />\n )}\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n {valueText !== undefined && (\n <span\n className={`truncate pr-1 ${\n valueText.isDefault ? \"text-gray-400\" : \"opacity-60\"\n }`}\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText.text}\n </span>\n )}\n </>\n )}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"shrink-0\"\n title={title}\n />\n )}\n </span>\n );\n }}\n />\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport type { DefaultContextMenuProps } from \"./context/ContextMenuHandlers\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n handlers,\n registry,\n nodeIds,\n}: DefaultContextMenuProps) {\n const rf = useReactFlow();\n const [query, setQuery] = useState(\"\");\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? nodeIds.filter((id) => id.toLowerCase().includes(q))\n : nodeIds;\n\n type Tree = { __self?: string; __children: Record<string, Tree> };\n const root: Tree = { __children: {} };\n for (const id of filteredIds) {\n const parts = id.split(\".\");\n let node = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n node.__children[key] = node.__children[key] || { __children: {} };\n node = node.__children[key];\n if (i === parts.length - 1) node.__self = id;\n }\n }\n const totalCount = filteredIds.length;\n\n // Ref for focus/outside click handling\n const ref = useRef<HTMLDivElement>(null);\n\n // Close on outside click and on ESC\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (!ref.current) return;\n if (!ref.current.contains(e.target as Node)) handlers.onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handlers.onClose();\n };\n window.addEventListener(\"mousedown\", onDown, true);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"mousedown\", onDown, true);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open, handlers]);\n\n // Focus search input when menu opens\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n }, [open]);\n\n if (!open || !clientPos) return null;\n\n // Clamp menu position to viewport\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16; // rough padding/shadow\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n const handleClick = (typeId: string) => {\n // project() is deprecated; use screenToFlowPosition for screen coordinates\n const p = rf.screenToFlowPosition({ x: clientPos.x, y: clientPos.y });\n handlers.onAddNode(typeId, { position: p });\n handlers.onClose();\n };\n\n const renderTree = (tree: Tree, path: string[] = []) => {\n const entries = Object.entries(tree?.__children ?? {}).sort((a, b) =>\n a[0].localeCompare(b[0])\n );\n return (\n <div>\n {entries.map(([key, child]) => {\n const label = key;\n const hasChildren =\n !!child?.__children && Object.keys(child.__children).length > 0;\n const idKey = [...path, key].join(\".\");\n if (!hasChildren) {\n // Leaf: render only the action button, no group header\n return child.__self ? (\n <button\n key={idKey}\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n ) : null;\n }\n // Group: show label, optional action for id at this level, and children\n return (\n <div key={idKey}>\n <div className=\"px-2 py-1 text-[11px] uppercase tracking-wide text-gray-400\">\n {label}\n </div>\n {child.__self && (\n <button\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n )}\n <div className=\"pl-2 border-l border-gray-200 ml-2\">\n {renderTree(child, [...path, key])}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-none shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Add Node{\" \"}\n <span className=\"text-gray-500 font-normal\">({totalCount})</span>\n </div>\n <div className=\"px-2 pb-1\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter nodes...\"\n className=\"w-full border border-gray-300 px-2 py-1 text-sm outline-none focus:border-gray-400\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n />\n </div>\n <div className=\"max-h-60 overflow-auto\">\n {totalCount > 0 ? (\n renderTree(root)\n ) : (\n <div className=\"px-3 py-2 text-gray-400\">No matches</div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport type { NodeContextMenuProps } from \"./context/ContextMenuHandlers\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n handlers,\n canRunPull,\n bakeableOutputs,\n}: NodeContextMenuProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n // outside click + ESC\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (!ref.current) return;\n if (!ref.current.contains(e.target as Node)) handlers.onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handlers.onClose();\n };\n window.addEventListener(\"mousedown\", onDown, true);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"mousedown\", onDown, true);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open, handlers]);\n\n useEffect(() => {\n if (open) ref.current?.focus();\n }, [open]);\n\n if (!open || !clientPos || !nodeId) return null;\n\n // clamp\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16;\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Node ({nodeId})\n </div>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDelete}\n >\n Delete\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDuplicate}\n >\n Duplicate\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDuplicateWithEdges}\n >\n Duplicate with edges\n </button>\n {canRunPull && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunPull}\n >\n Run (pull)\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n {bakeableOutputs.length > 0 && (\n <>\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Bake</div>\n {bakeableOutputs.map((h) => (\n <button\n key={h}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={() => handlers.onBake(h)}\n >\n Bake: {h}\n </button>\n ))}\n <div className=\"h-px bg-gray-200 my-1\" />\n </>\n )}\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onCopyId}\n >\n Copy Node ID\n </button>\n </div>\n );\n}\n","import type { Registry } from \"@bian-womp/spark-graph\";\nimport {\n getInputTypeId,\n isTypedOutput,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\nimport type { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type { NodeContextMenuHandlers } from \"./ContextMenuHandlers\";\n\nexport function createNodeContextMenuHandlers(\n nodeId: string,\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n registry: Registry,\n outputsMap: Record<string, Record<string, unknown>>,\n outputTypesMap: Record<string, Record<string, string | undefined>>,\n onClose: () => void\n): NodeContextMenuHandlers {\n const doBake = async (handleId: string) => {\n try {\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n if (!typeId || raw === undefined) return;\n const unwrap = (v: unknown) =>\n isTypedOutput(v) ? getTypedOutputValue(v) : v;\n const coerceIfNeeded = async (\n fromType: string,\n toType: string | undefined,\n value: unknown\n ) => {\n if (!toType || toType === fromType || !runner?.coerce) return value;\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n return value;\n }\n };\n\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n const isArray = typeId.endsWith(\"[]\");\n const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;\n const tArr = isArray ? registry.types.get(typeId) : undefined;\n const tElem = registry.types.get(baseTypeId);\n const singleTarget = !isArray ? tElem?.bakeTarget : undefined;\n const arrTarget = isArray ? tArr?.bakeTarget : undefined;\n const elemTarget = isArray ? tElem?.bakeTarget : undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inType = getInputTypeId(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n wb.addNode(\n {\n typeId: singleTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n },\n { inputs: { [singleTarget.inputHandle]: coerced } }\n );\n return;\n }\n\n if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, arrTarget.inputHandle);\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n wb.addNode(\n {\n typeId: arrTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n },\n { inputs: { [arrTarget.inputHandle]: coerced } }\n );\n return;\n }\n\n if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, elemTarget.inputHandle);\n const src = unwrap(raw);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inType, v))\n );\n const COLS = 4;\n const DX = 180;\n const DY = 160;\n for (let idx = 0; idx < coercedItems.length; idx++) {\n const col = idx % COLS;\n const row = Math.floor(idx / COLS);\n wb.addNode(\n {\n typeId: elemTarget.nodeTypeId,\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n },\n { inputs: { [elemTarget.inputHandle]: coercedItems[idx] } }\n );\n }\n return;\n }\n } catch {}\n };\n\n return {\n onDelete: () => {\n wb.removeNode(nodeId);\n onClose();\n },\n onDuplicate: async () => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n\n const inboundHandles = new Set(\n def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const allInputs = runner.getInputs(def)[nodeId] || {};\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n wb.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n onClose();\n },\n onDuplicateWithEdges: async () => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n\n // Get inputs without bindings (literal values only)\n const inputs = runner.getInputs(def)[nodeId] || {};\n\n // Add the duplicated node\n const newNodeId = wb.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Find all incoming edges (edges where target is the original node)\n const incomingEdges = def.edges.filter((e) => e.target.nodeId === nodeId);\n\n // Duplicate each incoming edge to point to the new node\n for (const edge of incomingEdges) {\n wb.connect(\n {\n source: edge.source, // Keep the same source\n target: { nodeId: newNodeId, handle: edge.target.handle }, // Point to new node\n typeId: edge.typeId,\n },\n { dry: true }\n );\n }\n\n onClose();\n },\n onRunPull: async () => {\n try {\n await runner.computeNode(nodeId);\n } catch {}\n onClose();\n },\n onBake: async (handleId: string) => {\n await doBake(handleId);\n onClose();\n },\n onCopyId: async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n },\n onClose,\n };\n}\n\nexport function getBakeableOutputs(\n nodeId: string,\n wb: InMemoryWorkbench,\n registry: Registry,\n outputTypesMap: Record<string, Record<string, string | undefined>>\n): string[] {\n try {\n const def = wb.export();\n const node = def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return [];\n const desc = registry.nodes.get(node.typeId);\n const handles = Object.keys(desc?.outputs || {});\n const out: string[] = [];\n for (const h of handles) {\n const tId = outputTypesMap?.[nodeId]?.[h];\n if (!tId) continue;\n if (tId.endsWith(\"[]\")) {\n const base = tId.slice(0, -2);\n const tArr = registry.types.get(tId);\n const tElem = registry.types.get(base);\n const arrT = tArr?.bakeTarget;\n const elemT = tElem?.bakeTarget;\n if (\n (arrT && registry.nodes.has(arrT.nodeTypeId)) ||\n (elemT && registry.nodes.has(elemT.nodeTypeId))\n )\n out.push(h);\n } else {\n const t = registry.types.get(tId);\n const bt = t?.bakeTarget;\n if (bt && registry.nodes.has(bt.nodeTypeId)) out.push(h);\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n","import React, {\n useMemo,\n useState,\n useRef,\n useImperativeHandle,\n useCallback,\n useEffect,\n} from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport isEqual from \"lodash/isEqual\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { NodeContextMenu } from \"./NodeContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n createNodeContextMenuHandlers,\n getBakeableOutputs,\n} from \"./context/ContextMenuHelpers\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n};\n\nexport const WorkbenchCanvas = React.forwardRef<\n WorkbenchCanvasHandle,\n {\n showValues?: boolean;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n>(({ showValues, toString, toElement, getDefaultNodeSize }, ref) => {\n const {\n wb,\n registry,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n uiVersion,\n runner,\n engineKind,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n const [registryVersion, setRegistryVersion] = useState(0);\n\n // Keep stable references for nodes/edges to avoid unnecessary updates\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\n\n function retainStabilityById<T extends { id: string }>(\n prev: T[],\n next: T[],\n isSame: (a: T, b: T) => boolean\n ): T[] {\n if (prev.length === 0) return next;\n const map = new Map<string, T>();\n for (const p of prev) map.set(p.id, p);\n const out: T[] = new Array(next.length);\n for (let i = 0; i < next.length; i++) {\n const n = next[i];\n const p = map.get(n.id);\n out[i] = p && isSame(p, n) ? p : n;\n }\n return out;\n }\n\n const isSameNode = (a: RFNode, b: RFNode): boolean => {\n // Compare the parts that affect rendering\n const pick = (n: RFNode) => ({\n position: n.position,\n type: n.type,\n selected: n.selected,\n initialWidth: n.initialWidth,\n initialHeight: n.initialHeight,\n data: n.data && {\n typeId: n.data.typeId,\n inputHandles: n.data.inputHandles,\n outputHandles: n.data.outputHandles,\n showValues: n.data.showValues,\n inputValues: n.data.inputValues,\n outputValues: n.data.outputValues,\n status: n.data.status,\n validation: n.data.validation,\n inputConnected: n.data.inputConnected,\n },\n });\n return isEqual(pick(a), pick(b));\n };\n\n const isSameEdge = (a: RFEdge, b: RFEdge): boolean => {\n const pick = (e: RFEdge) => ({\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n selected: e.selected,\n animated: e.animated,\n style: e.style,\n label: e.label,\n type: e.type,\n });\n return isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<any>(null);\n useImperativeHandle(ref, () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView({ padding: 0.2 });\n } catch {}\n },\n }));\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const ui = wb.getUI();\n\n const { nodeTypes, resolveNodeType } = useMemo(() => {\n // Build nodeTypes map using UI extension registry\n const custom = new Map<string, any>(); // Include all types present in registry AND current graph to avoid timing issues\n const def = wb.export();\n const ids = new Set<string>([\n ...Array.from(registry.nodes.keys()),\n ...def.nodes.map((n) => n.typeId),\n ]);\n for (const typeId of ids) {\n const renderer = ui.getNodeRenderer(typeId);\n if (renderer) custom.set(typeId, renderer);\n }\n\n const types: Record<string, any> = {\n \"spark-default\": DefaultNode,\n default: DefaultNode,\n };\n for (const [typeId, comp] of custom.entries()) {\n types[`spark-${typeId}`] = comp;\n }\n\n const resolver = (nodeTypeId: string): string =>\n custom.has(nodeTypeId) ? `spark-${nodeTypeId}` : \"spark-default\";\n\n return { nodeTypes: types, resolveNodeType: resolver };\n // Include uiVersion to recompute when custom renderers are registered\n }, [wb, registry, uiVersion, ui]);\n\n const { nodes, edges } = useMemo(() => {\n const def = wb.export();\n const sel = wb.getSelection();\n // Merge defaults with inputs for node display (defaults shown in lighter gray)\n const inputsWithDefaults: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const nodeInputs = inputsMap[n.nodeId] ?? {};\n const nodeDefaults = inputDefaultsMap[n.nodeId] ?? {};\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n const merged: Record<string, unknown> = { ...nodeInputs };\n for (const [h, v] of Object.entries(nodeDefaults)) {\n if (!inbound.has(h) && merged[h] === undefined) {\n merged[h] = v;\n }\n }\n if (Object.keys(merged).length > 0) {\n inputsWithDefaults[n.nodeId] = merged;\n }\n }\n const out = toReactFlow(def, wb.getPositions(), registry, {\n showValues,\n inputs: inputsWithDefaults,\n inputDefaults: inputDefaultsMap,\n outputs: outputsMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(sel.nodes),\n selectedEdgeIds: new Set(sel.edges),\n getDefaultNodeSize,\n ui,\n });\n // Retain references for unchanged items\n const stableNodes = retainStabilityById(\n prevNodesRef.current,\n out.nodes,\n isSameNode\n );\n const stableEdges = retainStabilityById(\n prevEdgesRef.current,\n out.edges,\n isSameEdge\n );\n // Debug: log updates/additions/removals (use value equality, not reference)\n try {\n const prevNodeIds = new Set(prevNodesRef.current.map((n) => n.id));\n const nextNodeIds = new Set(out.nodes.map((n) => n.id));\n const addedNodeIds = out.nodes\n .filter((n) => !prevNodeIds.has(n.id))\n .map((n) => n.id);\n const removedNodeIds = prevNodesRef.current\n .filter((n) => !nextNodeIds.has(n.id))\n .map((n) => n.id);\n const prevNodeMap = new Map(prevNodesRef.current.map((n) => [n.id, n]));\n const changedNodeIds = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n return p ? !isSameNode(p, n) : false;\n })\n .map((n) => n.id);\n\n // Detect handle updates (ids/length changes) for targeted debug\n const toIds = (arr: unknown): string[] =>\n Array.isArray(arr)\n ? arr\n .map((h: unknown) =>\n h && typeof h === \"object\" && \"id\" in h ? String(h.id) : \"\"\n )\n .filter(Boolean)\n : [];\n const handlesEqual = (a: unknown, b: unknown) => {\n const aIds = toIds(a);\n const bIds = toIds(b);\n if (aIds.length !== bIds.length) return false;\n for (let i = 0; i < aIds.length; i++) {\n if (aIds[i] !== bIds[i]) return false;\n }\n return true;\n };\n const handleChanged = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n if (!p) return false;\n const inChanged = !handlesEqual(\n p.data?.inputHandles,\n n.data?.inputHandles\n );\n const outChanged = !handlesEqual(\n p.data?.outputHandles,\n n.data?.outputHandles\n );\n return inChanged || outChanged;\n })\n .map((n) => n.id);\n\n const prevEdgeIds = new Set(prevEdgesRef.current.map((e) => e.id));\n const nextEdgeIds = new Set(out.edges.map((e) => e.id));\n const addedEdgeIds = out.edges\n .filter((e) => !prevEdgeIds.has(e.id))\n .map((e) => e.id);\n const removedEdgeIds = prevEdgesRef.current\n .filter((e) => !nextEdgeIds.has(e.id))\n .map((e) => e.id);\n const prevEdgeMap = new Map(prevEdgesRef.current.map((e) => [e.id, e]));\n const changedEdgeIds = out.edges\n .filter((e) => {\n const p = prevEdgeMap.get(e.id);\n return p ? !isSameEdge(p, e) : false;\n })\n .map((e) => e.id);\n\n if (\n addedNodeIds.length ||\n removedNodeIds.length ||\n changedNodeIds.length ||\n handleChanged.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] node updates\", {\n added: addedNodeIds,\n removed: removedNodeIds,\n changed: changedNodeIds,\n handleChanged,\n });\n }\n\n if (\n addedEdgeIds.length ||\n removedEdgeIds.length ||\n changedEdgeIds.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] edge updates\", {\n added: addedEdgeIds,\n removed: removedEdgeIds,\n changed: changedEdgeIds,\n });\n }\n } catch {}\n prevNodesRef.current = stableNodes;\n prevEdgesRef.current = stableEdges;\n return { nodes: stableNodes, edges: stableEdges };\n }, [\n showValues,\n inputsMap,\n outputsMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n ]);\n\n const throttled = useThrottledValue({ nodes, edges }, 100);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const [nodeMenuOpen, setNodeMenuOpen] = useState(false);\n const [nodeMenuPos, setNodeMenuPos] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [nodeAtMenu, setNodeAtMenu] = useState<string | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n // Determine if right-clicked over a node by hit-testing selection\n const target = (e.target as HTMLElement)?.closest(\".react-flow__node\");\n if (target) {\n // Resolve node id from data-id attribute React Flow sets\n const nodeId = target.getAttribute(\"data-id\");\n setNodeAtMenu(nodeId);\n setNodeMenuPos({ x: e.clientX, y: e.clientY });\n setNodeMenuOpen(true);\n setMenuOpen(false);\n } else {\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n setNodeMenuOpen(false);\n }\n };\n\n const addNodeAt = useCallback(\n async (\n typeId: string,\n opts: {\n inputs?: Record<string, unknown>;\n position: { x: number; y: number };\n }\n ) =>\n wb.addNode({ typeId, position: opts.position }, { inputs: opts.inputs }),\n [wb]\n );\n\n const onCloseMenu = useCallback(() => {\n setMenuOpen(false);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setNodeMenuOpen(false);\n }, []);\n\n useEffect(() => {\n const off = runner.on(\"registry\", () => {\n setRegistryVersion((v) => v + 1);\n });\n return () => off();\n }, [runner]);\n\n const nodeIds = useMemo(\n () => Array.from(registry.nodes.keys()),\n [registry, registryVersion]\n );\n\n const defaultContextMenuHandlers = useMemo(\n () => ({\n onAddNode: addNodeAt,\n onClose: onCloseMenu,\n }),\n [addNodeAt, onCloseMenu]\n );\n\n const nodeContextMenuHandlers = useMemo(() => {\n if (!nodeAtMenu) return null;\n return createNodeContextMenuHandlers(\n nodeAtMenu,\n wb,\n runner,\n registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu\n );\n }, [\n nodeAtMenu,\n wb,\n runner,\n registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n ]);\n\n const canRunPull = useMemo(\n () => engineKind()?.toString() === \"pull\",\n [engineKind]\n );\n\n const bakeableOutputs = useMemo(() => {\n if (!nodeAtMenu) return [];\n return getBakeableOutputs(nodeAtMenu, wb, registry, outputTypesMap);\n }, [nodeAtMenu, wb, registry, outputTypesMap]);\n\n // Get custom renderers from UI extension registry (reactive to uiVersion changes)\n const {\n BackgroundRenderer,\n MinimapRenderer,\n ControlsRenderer,\n DefaultContextMenuRenderer,\n NodeContextMenuRenderer,\n connectionLineRenderer,\n } = useMemo(() => {\n return {\n BackgroundRenderer: ui.getBackgroundRenderer(),\n MinimapRenderer: ui.getMinimapRenderer(),\n ControlsRenderer: ui.getControlsRenderer(),\n DefaultContextMenuRenderer: ui.getDefaultContextMenuRenderer(),\n NodeContextMenuRenderer: ui.getNodeContextMenuRenderer(),\n connectionLineRenderer: ui.getConnectionLineRenderer(),\n };\n }, [ui, uiVersion]);\n\n const onMoveEnd = useCallback(() => {\n if (rfInstanceRef.current) {\n const viewport = rfInstanceRef.current.getViewport();\n wb.setViewport(\n { x: viewport.x, y: viewport.y, zoom: viewport.zoom },\n { commit: true }\n );\n }\n }, [wb]);\n\n const viewportRef = useRef<{ x: number; y: number; zoom: number } | null>(\n null\n );\n\n useEffect(() => {\n if (!rfInstanceRef.current) return;\n const currentViewport = wb.getViewport();\n if (\n currentViewport &&\n (!viewportRef.current ||\n viewportRef.current.x !== currentViewport.x ||\n viewportRef.current.y !== currentViewport.y ||\n viewportRef.current.zoom !== currentViewport.zoom)\n ) {\n viewportRef.current = currentViewport;\n rfInstanceRef.current.setViewport({\n x: currentViewport.x,\n y: currentViewport.y,\n zoom: currentViewport.zoom,\n });\n }\n });\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlowProvider>\n <ReactFlow\n nodes={throttled.nodes}\n edges={throttled.edges}\n nodeTypes={nodeTypes}\n connectionLineComponent={connectionLineRenderer}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n const savedViewport = wb.getViewport();\n if (savedViewport) {\n viewportRef.current = savedViewport;\n inst.setViewport({\n x: savedViewport.x,\n y: savedViewport.y,\n zoom: savedViewport.zoom,\n });\n }\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onMoveEnd={onMoveEnd}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\n fitView\n >\n {BackgroundRenderer ? (\n <BackgroundRenderer />\n ) : (\n <Background\n id=\"workbench-canvas-background\"\n variant={BackgroundVariant.Dots}\n gap={12}\n size={1}\n />\n )}\n {MinimapRenderer ? <MinimapRenderer /> : <MiniMap />}\n {ControlsRenderer ? <ControlsRenderer /> : <Controls />}\n {DefaultContextMenuRenderer ? (\n <DefaultContextMenuRenderer\n open={menuOpen}\n clientPos={menuPos}\n handlers={defaultContextMenuHandlers}\n registry={registry}\n nodeIds={nodeIds}\n />\n ) : (\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n handlers={defaultContextMenuHandlers}\n registry={registry}\n nodeIds={nodeIds}\n />\n )}\n {!!nodeAtMenu &&\n nodeContextMenuHandlers &&\n (NodeContextMenuRenderer ? (\n <NodeContextMenuRenderer\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n handlers={nodeContextMenuHandlers}\n canRunPull={canRunPull}\n bakeableOutputs={bakeableOutputs}\n />\n ) : (\n <NodeContextMenu\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n handlers={nodeContextMenuHandlers}\n canRunPull={canRunPull}\n bakeableOutputs={bakeableOutputs}\n />\n ))}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n );\n});\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n GraphDefinition,\n EngineKind,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n createAsyncGraphDef,\n createAsyncGraphRegistry,\n createProgressGraphDef,\n createProgressGraphRegistry,\n createValidationGraphDef,\n createValidationGraphRegistry,\n createSimpleGraphDef,\n createSimpleGraphRegistry,\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n getInputTypeId,\n} from \"@bian-womp/spark-graph\";\nimport { type TransportConnectOptions } from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\n ListBulletsIcon,\n BugBeetleIcon,\n TreeStructureIcon,\n DownloadIcon,\n UploadIcon,\n PlayPauseIcon,\n LightningIcon,\n CornersOutIcon,\n} from \"@phosphor-icons/react\";\nimport { computeEffectiveHandles } from \"./layout\";\nimport {\n ExampleDescriptor,\n useWorkbenchContext,\n WorkbenchOverrides,\n} from \"./context/WorkbenchContext\";\nimport { preformatValueForDisplay } from \"./value\";\nimport { WorkbenchProvider } from \"./context/WorkbenchContext.provider\";\nimport { WorkbenchCanvas } from \"./WorkbenchCanvas\";\nimport type { WorkbenchCanvasHandle } from \"./WorkbenchCanvas\";\nimport { Inspector } from \"./Inspector\";\nimport { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { AbstractWorkbench } from \"../core/AbstractWorkbench\";\nimport { DefaultUIExtensionRegistry } from \"../core/ui-extensions\";\nimport { download as downloadUtil, upload as uploadUtil } from \"./load\";\nimport {\n ExecutionBackend,\n ExecutionBackendKind,\n IGraphRunner,\n TransportStatus,\n RemoteExecutionBackend,\n} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\n\n/**\n * Optional backend configuration for remote runners.\n * Allows extensions to pass connection options and custom event handlers.\n */\nexport interface BackendOptions {\n connectOptions?: TransportConnectOptions;\n onCustomEvent?: (event: any) => void;\n}\n\nfunction WorkbenchStudioCanvas({\n setRegistry,\n autoScroll,\n onAutoScrollChange,\n example,\n onExampleChange,\n engine,\n onEngineChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n overrides,\n onInit,\n onChange,\n}: {\n setRegistry: (r: Registry) => void;\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => void;\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n autoScroll: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>,\n augmentRegistry?: (r: Registry) => void\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const effectiveHandles = selectedNode\n ? computeEffectiveHandles(selectedNode, registry)\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\n const isGraphRunning = runner.isRunning();\n const engineKind = runner.getRunningEngine();\n\n // Render Start/Stop button based on transport and runner state\n const renderStartStopButton = useCallback(() => {\n // Check if transport is connecting/retrying\n const isConnecting =\n transportStatus.state === \"connecting\" ||\n transportStatus.state === \"retrying\";\n\n // Only allow Start/Stop when transport is connected or local\n const canControl =\n transportStatus.state === \"connected\" ||\n transportStatus.state === \"local\";\n\n if (isConnecting) {\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-gray-500 border-gray-400 flex items-center gap-1 disabled:opacity-50\"\n disabled\n title=\"Connecting to backend...\"\n >\n <ClockClockwiseIcon size={16} className=\"animate-spin\" />\n <span className=\"font-medium ml-1\">Connecting...</span>\n </button>\n );\n }\n\n if (isGraphRunning) {\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-red-700 border-red-600 flex items-center gap-1 disabled:opacity-50 disabled:text-gray-400 disabled:border-gray-300\"\n onClick={() => runner.stop()}\n disabled={!canControl}\n title={canControl ? \"Stop engine\" : \"Waiting for connection\"}\n >\n <StopIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Stop</span>\n </button>\n );\n }\n\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-green-700 border-green-600 flex items-center gap-1 disabled:text-gray-400 disabled:border-gray-300 disabled:opacity-50\"\n onClick={(evt) => {\n const kind = engine as EngineKind | undefined;\n if (!kind) return alert(\"Select an engine first.\");\n if (evt.shiftKey && !confirm(\"Invalidate and re-run graph?\")) return;\n\n try {\n runner.launch(wb.export(), {\n engine: kind,\n invalidate: evt.shiftKey,\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n disabled={!engine || !canControl}\n title={\n !engine\n ? \"Select an engine first\"\n : !canControl\n ? \"Waiting for connection\"\n : \"Start engine\"\n }\n >\n <PlayIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n );\n }, [transportStatus, isGraphRunning, runner, engine, wb]);\n\n const defaultExamples = useMemo<ExampleDescriptor[]>(\n () => [\n {\n id: \"simple\",\n label: \"Simple\",\n load: async () => ({\n registry: createSimpleGraphRegistry(),\n def: createSimpleGraphDef(),\n }),\n },\n {\n id: \"async\",\n label: \"Async Chain\",\n load: async () => ({\n registry: createAsyncGraphRegistry(),\n def: createAsyncGraphDef(),\n }),\n },\n {\n id: \"progress\",\n label: \"Progress + Errors\",\n load: async () => ({\n registry: createProgressGraphRegistry(),\n def: createProgressGraphDef(),\n }),\n },\n {\n id: \"validation\",\n label: \"Validation\",\n load: async () => ({\n registry: createValidationGraphRegistry(),\n def: createValidationGraphDef(),\n }),\n },\n ],\n []\n );\n\n const examples = useMemo<ExampleDescriptor[]>(() => {\n if (overrides?.getExamples) return overrides.getExamples(defaultExamples);\n return defaultExamples;\n }, [overrides, defaultExamples]);\n\n const canvasRef = useRef<WorkbenchCanvasHandle | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\n const [registryReady, setRegistryReady] = useState(() => {\n // For local backends, registry is always ready\n return backendKind === \"local\";\n });\n\n // Expose init callback with setInitialGraph helper\n // Note: This runs whenever runner changes\n useEffect(() => {\n if (!onInit) return;\n const setInitialGraph = async (\n d: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => {\n await wb.load(d);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n };\n onInit({ wb, runner, setInitialGraph });\n }, [onInit, wb, runner]);\n\n // Expose change callback on graph/value changes\n useEffect(() => {\n if (!onChange) return;\n const off1 = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off2 = runner.on(\"value\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off3 = wb.on(\"graphUiChanged\", (evt) => {\n if (!evt.commit) return;\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n off1();\n off2();\n off3();\n };\n }, [wb, runner, onChange]);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n const ex = examples.find((e) => e.id === key) ?? examples[0];\n if (!ex) return;\n const { registry: r, def, inputs } = await ex.load();\n // Keep registry consistent with backend:\n // - For local backend, allow example to provide its own registry\n // - For remote backend, registry is automatically managed by RemoteGraphRunner\n if (backendKind === \"local\") {\n if (r) {\n setRegistry(r);\n wb.setRegistry(r);\n }\n } else {\n // For remote backends, registry is automatically fetched and updated by RemoteGraphRunner\n // Do not overwrite it here - it will be synced via registry events\n }\n await wb.load(def);\n // Build a local runtime so seeded defaults are visible pre-run\n runner.build(wb.export());\n // Set initial inputs if provided\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [\n runner,\n wb,\n onExampleChange,\n runAutoLayout,\n examples,\n setRegistry,\n backendKind,\n ]\n );\n\n const download = useCallback(async () => {\n try {\n await downloadUtil(wb, runner);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }, [wb, runner]);\n\n const onUploadPicked = useCallback(\n async (e: React.ChangeEvent<HTMLInputElement>) => {\n try {\n const file = e.target.files?.[0];\n if (!file) return;\n const text = await file.text();\n const parsed = JSON.parse(text);\n await uploadUtil(parsed, wb, runner);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n } finally {\n // reset input so same file can be picked again\n if (uploadInputRef.current) uploadInputRef.current.value = \"\";\n }\n },\n [wb, runner]\n );\n\n const triggerUpload = useCallback(() => {\n uploadInputRef.current?.click();\n }, []);\n\n // Registry is now automatically fetched by RemoteGraphRunner on first connection\n // No need for manual hydration\n\n // Ensure initial example is loaded (and sync when example prop changes)\n useEffect(() => {\n if (!example) return;\n applyExample(example);\n }, [example, wb]);\n\n useEffect(() => {\n const off = runner.on(\"transport\", setTransportStatus);\n return () => off();\n }, [runner]);\n\n // Track registry readiness for remote backends\n useEffect(() => {\n // For local backends, registry is always ready\n if (backendKind === \"local\") {\n setRegistryReady(true);\n return;\n }\n\n // Reset readiness when switching to remote backend\n setRegistryReady(false);\n\n // For remote backends, wait for registry event\n const off = runner.on(\"registry\", () => {\n setRegistryReady(true);\n });\n return () => off();\n }, [runner, backendKind]);\n\n useEffect(() => {\n if (!engine) return;\n if (isGraphRunning) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n const d = wb.export();\n if (!d.nodes || d.nodes.length === 0) return;\n try {\n runner.launch(d, { engine: engine as EngineKind });\n } catch {\n // ignore\n }\n }, [engine, runner, isGraphRunning, wb, backendKind]);\n\n const baseSetInput = useCallback(\n (handle: string, raw: string | number | undefined) => {\n if (!selectedNodeId) return;\n // If selected input is wired (has inbound edge), ignore user input to respect runtime value\n const isLinked = def.edges.some(\n (e) => e.target.nodeId === selectedNodeId && e.target.handle === handle\n );\n if (isLinked) return;\n\n // If raw is undefined, pass it through to delete the input value\n if (raw === undefined) {\n runner.setInputs(selectedNodeId, { [handle]: undefined });\n return;\n }\n\n const typeId = getInputTypeId(effectiveHandles.inputs, handle);\n let value: unknown = raw;\n const parseArray = <T,>(s: string, map: (x: string) => T): T[] => {\n const str = String(s).trim();\n try {\n const parsed = JSON.parse(str);\n if (Array.isArray(parsed)) return parsed.map((x) => map(String(x)));\n } catch {}\n if (!str) return [] as T[];\n return str\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n .map(map);\n };\n\n switch (typeId) {\n case \"base.float\": {\n const n = Number(raw);\n value = Number.isFinite(n) ? n : 0;\n break;\n }\n case \"base.float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"base.bool\": {\n value = raw === \"true\" || raw === \"1\" ? true : false;\n break;\n }\n case \"base.bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(x));\n break;\n }\n case \"base.string\": {\n value = String(raw);\n break;\n }\n case \"base.string[]\": {\n value = parseArray(String(raw), (x) => String(x));\n break;\n }\n case \"base.vec3\": {\n const arr = parseArray(String(raw), (x) => Number(x));\n value = [arr[0] ?? 0, arr[1] ?? 0, arr[2] ?? 0];\n break;\n }\n case \"base.vec3[]\": {\n try {\n const parsed = JSON.parse(String(raw));\n if (Array.isArray(parsed)) {\n value = parsed.map((v) => [\n Number(v?.[0] ?? 0),\n Number(v?.[1] ?? 0),\n Number(v?.[2] ?? 0),\n ]);\n break;\n }\n } catch {}\n // fallback CSV triples: \"x1,y1,z1; x2,y2,z2\"\n value = String(raw)\n .split(\";\")\n .map((seg) => seg.trim())\n .filter(Boolean)\n .map((seg) => seg.split(\",\").map((n) => Number(n.trim())))\n .map((a) => [a[0] ?? 0, a[1] ?? 0, a[2] ?? 0]);\n break;\n }\n default: {\n // fallback to string\n value = raw;\n }\n }\n runner.setInputs(selectedNodeId, { [handle]: value });\n },\n [selectedNodeId, def.edges, effectiveHandles, runner]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry,\n });\n }\n return baseSetInput;\n }, [overrides, baseSetInput, runner, selectedNodeId, registry]);\n\n const baseToString = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n // Normalize typed wrapper\n if (isTypedOutput(value)) {\n return baseToString(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value)\n );\n }\n const pre = preformatValueForDisplay(typeId, value, registry);\n if (pre !== undefined) return pre;\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"url\" in value &&\n typeof value.url === \"string\"\n ) {\n const title =\n \"title\" in value && typeof value.title === \"string\"\n ? value.title\n : \"\";\n const url = String(value.url || \"\");\n // value.ts handles data URL formatting\n return title || url.slice(0, 32) + (url.length > 32 ? \"…\" : \"\");\n }\n if (typeId && typeId.startsWith(\"enum:\")) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n return label ?? String(n);\n }\n const round4 = (n: number) => Math.round(Number(n) * 10000) / 10000;\n if (typeId === \"base.vec3\" && Array.isArray(value)) {\n const a = value as unknown[];\n return [\n round4(Number(a[0] ?? 0)),\n round4(Number(a[1] ?? 0)),\n round4(Number(a[2] ?? 0)),\n ].join(\",\");\n }\n const stringifyRounded = (v: unknown) => {\n try {\n return JSON.stringify(v, (_k, val) =>\n typeof val === \"number\" ? round4(val) : val\n );\n } catch {\n return String(v);\n }\n };\n if (\n typeId?.endsWith(\"[]\") ||\n Array.isArray(value) ||\n (typeof value === \"object\" && value !== null)\n ) {\n return stringifyRounded(value);\n }\n if (typeof value === \"number\") {\n const rounded = Math.round(Number(value) * 10000) / 10000;\n return String(rounded);\n }\n return String(value);\n },\n [registry]\n );\n\n const baseToElement = useCallback(\n (typeId?: string, value?: unknown) => {\n return (\n <span className=\"ml-1 opacity-60\">{baseToString(typeId, value)}</span>\n );\n },\n [baseToString]\n );\n\n const toString = useMemo(() => {\n if (overrides?.toString)\n return overrides.toString(baseToString, { registry });\n return baseToString;\n }, [overrides, baseToString, registry]);\n\n // Optional: toElement (not currently consumed by core UI)\n // Consumers can access it by passing through their own node renderers.\n const toElement = useMemo(() => {\n if (overrides?.toElement)\n return overrides.toElement(baseToElement, { registry });\n return baseToElement;\n }, [overrides, baseToElement, registry]);\n\n return (\n <div className=\"w-full h-screen flex flex-col\">\n <div className=\"p-2 border-b border-gray-300 flex gap-2 items-center\">\n {isGraphRunning ? (\n <span className=\"ml-2 text-sm text-green-700\">\n Running: {engineKind}\n </span>\n ) : (\n <span className=\"ml-2 text-sm text-gray-500\">Stopped</span>\n )}\n {/* Transport status (icons only) */}\n <span\n className=\"ml-2 flex items-center gap-1 text-xs\"\n title={transportStatus.kind || undefined}\n >\n {transportStatus.state === \"local\" && (\n <PlugsConnectedIcon size={14} className=\"text-gray-500\" />\n )}\n {transportStatus.state === \"connecting\" && (\n <ClockClockwiseIcon\n size={14}\n className=\"text-amber-600 animate-pulse\"\n />\n )}\n {transportStatus.state === \"connected\" && (\n <WifiHighIcon size={14} className=\"text-green-600\" />\n )}\n {transportStatus.state === \"disconnected\" && (\n <WifiSlashIcon size={14} className=\"text-red-600\" />\n )}\n {transportStatus.state === \"retrying\" && (\n <ClockClockwiseIcon\n size={14}\n className=\"text-amber-700 animate-pulse\"\n />\n )}\n </span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={exampleState}\n onChange={(e) => applyExample(e.target.value)}\n disabled={isGraphRunning}\n title={\n isGraphRunning ? \"Stop engine before switching example\" : undefined\n }\n >\n <option value=\"\">Select Example…</option>\n {examples.map((ex) => (\n <option key={ex.id} value={ex.id}>\n {ex.label}\n </option>\n ))}\n </select>\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={backendKind}\n onChange={(e) =>\n onBackendKindChange(e.target.value as ExecutionBackend[\"kind\"])\n }\n disabled={isGraphRunning}\n title={\n isGraphRunning ? \"Stop engine before switching backend\" : undefined\n }\n >\n <option value=\"local\">Local</option>\n <option value=\"remote-http\">Remote (HTTP)</option>\n <option value=\"remote-ws\">Remote (WebSocket)</option>\n </select>\n {backendKind === \"remote-http\" && !!onHttpBaseUrlChange && (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 w-72\"\n placeholder=\"http://127.0.0.1:18080\"\n value={httpBaseUrl}\n onChange={(e) => onHttpBaseUrlChange(e.target.value)}\n />\n )}\n {backendKind === \"remote-ws\" && !!onWsUrlChange && (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 w-72\"\n placeholder=\"ws://127.0.0.1:18081\"\n value={wsUrl}\n onChange={(e) => onWsUrlChange(e.target.value)}\n />\n )}\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={engineKind ?? engine ?? \"\"}\n onChange={async (e) => {\n const kind = e.target.value || undefined;\n const currentEngine = runner.getRunningEngine();\n\n // If engine is running and user selected a different engine, switch it\n if (\n runner.isRunning() &&\n currentEngine &&\n kind &&\n kind !== currentEngine\n ) {\n try {\n await runner.switchEngine({\n engine: kind as EngineKind,\n batched: { flushIntervalMs: 0 },\n hybrid: { windowMs: 250, batchThreshold: 3 },\n });\n onEngineChange?.(kind);\n } catch (err: unknown) {\n const message =\n err instanceof Error ? err.message : String(err);\n alert(`Failed to switch engine: ${message}`);\n // Reset dropdown to current engine\n e.target.value = currentEngine;\n }\n } else {\n // Normal change when not running\n onEngineChange?.(kind);\n }\n }}\n >\n <option value=\"\">Select Engine…</option>\n <option value=\"push\">Push</option>\n <option value=\"batched\">Batched</option>\n <option value=\"pull\">Pull</option>\n <option value=\"hybrid\">Hybrid</option>\n <option value=\"step\">Step</option>\n </select>\n {engineKind === \"step\" && (\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => runner.step()}\n disabled={!isGraphRunning}\n title=\"Step\"\n >\n <PlayPauseIcon size={24} />\n </button>\n )}\n {engineKind === \"batched\" && (\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => runner.flush()}\n disabled={!isGraphRunning}\n title=\"Flush\"\n >\n <LightningIcon size={24} />\n </button>\n )}\n {renderStartStopButton()}\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={runAutoLayout}\n >\n <TreeStructureIcon size={24} />\n </button>\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => canvasRef.current?.fitView?.()}\n title=\"Fit View\"\n >\n <CornersOutIcon size={24} />\n </button>\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={download}\n >\n <DownloadIcon size={24} />\n </button>\n <input\n ref={uploadInputRef}\n type=\"file\"\n accept=\"application/json,.json\"\n className=\"hidden\"\n onChange={onUploadPicked}\n />\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={triggerUpload}\n >\n <UploadIcon size={24} />\n </button>\n <label className=\"flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={debug}\n onChange={(e) => onDebugChange(e.target.checked)}\n />\n <BugBeetleIcon size={24} weight={debug ? \"fill\" : undefined} />\n </label>\n <label className=\"flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={showValues}\n onChange={(e) => onShowValuesChange(e.target.checked)}\n />\n <ListBulletsIcon size={24} weight={showValues ? \"fill\" : undefined} />\n </label>\n </div>\n <div className=\"flex flex-1 min-h-0\">\n <div className=\"flex-1 min-w-0\">\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toString={toString}\n contextPanel={overrides?.contextPanel}\n />\n </div>\n </div>\n );\n}\n\nexport function WorkbenchStudio({\n engine,\n onEngineChange,\n example,\n onExampleChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n autoScroll,\n onAutoScrollChange,\n backendOptions,\n overrides,\n onInit,\n onChange,\n}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n showValues: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n autoScroll: boolean;\n onAutoScrollChange: (v: boolean) => void;\n backendOptions?: BackendOptions;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n\n // Store previous runner for cleanup\n const prevRunnerRef = useRef<IGraphRunner | null>(null);\n\n const runner = useMemo(() => {\n let newRunner: IGraphRunner;\n if (backendKind === \"remote-http\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(registry, backend);\n } else if (backendKind === \"remote-ws\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(registry, backend);\n } else {\n newRunner = new LocalGraphRunner(registry);\n }\n return newRunner;\n }, [registry, backendKind, httpBaseUrl, wsUrl, backendOptions]);\n\n // Dispose previous runner after commit; dispose current on unmount\n useEffect(() => {\n const previous = prevRunnerRef.current;\n prevRunnerRef.current = runner;\n if (previous && previous !== runner) {\n try {\n previous.dispose();\n } catch (err) {\n console.warn(\"Error disposing previous runner:\", err);\n }\n }\n return () => {\n // Only dispose if this runner is still the current one\n if (prevRunnerRef.current === runner) {\n try {\n runner.dispose();\n } catch (err) {\n console.warn(\"Error disposing runner on unmount:\", err);\n }\n }\n };\n }, [runner]);\n\n const isGraphRunning = runner.isRunning();\n\n // Track UI registration version to trigger nodeTypes recomputation\n const [uiVersion, setUiVersion] = useState(0);\n\n // Allow external UI registration (e.g., node renderers) with access to wb\n useEffect(() => {\n const baseRegisterUI: (wb: AbstractWorkbench) => void = (_wb) => {};\n overrides?.registerUI?.(baseRegisterUI, { wb, wbRunner: runner });\n // Increment UI version to trigger nodeTypes recomputation in WorkbenchCanvas\n setUiVersion((v) => v + 1);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wb, runner, overrides]);\n\n const onBackendKindChangeWithDispose = useCallback(\n () => (v: ExecutionBackendKind) => {\n if (isGraphRunning) runner.dispose();\n onBackendKindChange(v);\n },\n [isGraphRunning]\n );\n\n return (\n <WorkbenchProvider\n wb={wb}\n runner={runner}\n registry={registry}\n setRegistry={setRegistry}\n overrides={overrides}\n uiVersion={uiVersion}\n >\n <WorkbenchStudioCanvas\n setRegistry={setRegistry}\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n engine={engine}\n onEngineChange={onEngineChange}\n backendKind={backendKind}\n onBackendKindChange={onBackendKindChangeWithDispose}\n httpBaseUrl={httpBaseUrl}\n onHttpBaseUrlChange={onHttpBaseUrlChange}\n wsUrl={wsUrl}\n onWsUrlChange={onWsUrlChange}\n debug={debug}\n onDebugChange={onDebugChange}\n showValues={showValues}\n onShowValuesChange={onShowValuesChange}\n hideWorkbench={hideWorkbench}\n onHideWorkbenchChange={onHideWorkbenchChange}\n overrides={overrides}\n onInit={onInit}\n onChange={onChange}\n />\n </WorkbenchProvider>\n );\n}\n"],"names":["_jsx","_jsxs","_Fragment","download","downloadUtil","uploadUtil"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/value.ts","../../src/misc/constants.ts","../../src/misc/layout.ts","../../src/misc/hooks.ts","../../src/misc/mapping.ts","../../src/misc/load.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/NodeContextMenu.tsx","../../src/misc/context/ContextMenuHelpers.ts","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["import type React from \"react\";\nimport type {\n EstimateNodeSizeFunction,\n CreateHandleBoundsFunction,\n CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"../misc/layout\";\n\nexport type NodeRenderer = React.ComponentType<any>; // bound by adapter (React component or CLI fn)\n\n// React Flow renderer types\nexport type ConnectionLineRenderer = React.ComponentType<any>;\nexport type MinimapRenderer = React.ComponentType<any>;\nexport type ControlsRenderer = React.ComponentType<any>;\nexport type BackgroundRenderer = React.ComponentType<any>;\nexport type DefaultContextMenuRenderer = React.ComponentType<any>;\nexport type NodeContextMenuRenderer = React.ComponentType<any>;\n\nexport interface UIExtensionRegistry {\n registerNodeRenderer(\n nodeTypeId: string,\n renderer: NodeRenderer | undefined\n ): this;\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined;\n getAllNodeRenderers(): Record<string, NodeRenderer>;\n\n registerConnectionLineRenderer(\n renderer: ConnectionLineRenderer | undefined\n ): this;\n getConnectionLineRenderer(): ConnectionLineRenderer | undefined;\n\n registerMinimapRenderer(renderer: MinimapRenderer | undefined): this;\n getMinimapRenderer(): MinimapRenderer | undefined;\n\n registerControlsRenderer(renderer: ControlsRenderer | undefined): this;\n getControlsRenderer(): ControlsRenderer | undefined;\n\n registerBackgroundRenderer(renderer: BackgroundRenderer | undefined): this;\n getBackgroundRenderer(): BackgroundRenderer | undefined;\n\n registerDefaultContextMenuRenderer(\n renderer: DefaultContextMenuRenderer | undefined\n ): this;\n getDefaultContextMenuRenderer(): DefaultContextMenuRenderer | undefined;\n\n registerNodeContextMenuRenderer(\n renderer: NodeContextMenuRenderer | undefined\n ): this;\n getNodeContextMenuRenderer(): NodeContextMenuRenderer | undefined;\n\n // Layout function overrides\n registerEstimateNodeSize(\n override: EstimateNodeSizeFunction | undefined\n ): this;\n getEstimateNodeSize(): EstimateNodeSizeFunction | undefined;\n\n registerCreateHandleBounds(\n override: CreateHandleBoundsFunction | undefined\n ): this;\n getCreateHandleBounds(): CreateHandleBoundsFunction | undefined;\n\n registerCreateHandleLayout(\n override: CreateHandleLayoutFunction | undefined\n ): this;\n getCreateHandleLayout(): CreateHandleLayoutFunction | undefined;\n\n registerLayoutNode(override: LayoutNodeFunction | undefined): this;\n getLayoutNode(): LayoutNodeFunction | undefined;\n}\n\nexport class DefaultUIExtensionRegistry implements UIExtensionRegistry {\n private nodeRenderers = new Map<string, NodeRenderer>();\n\n // React Flow renderers\n private connectionLineRenderer?: ConnectionLineRenderer;\n private minimapRenderer?: MinimapRenderer;\n private controlsRenderer?: ControlsRenderer;\n private backgroundRenderer?: BackgroundRenderer;\n private defaultContextMenuRenderer?: DefaultContextMenuRenderer;\n private nodeContextMenuRenderer?: NodeContextMenuRenderer;\n\n // Layout function overrides\n private estimateNodeSizeOverride?: EstimateNodeSizeFunction;\n private createHandleBoundsOverride?: CreateHandleBoundsFunction;\n private createHandleLayoutOverride?: CreateHandleLayoutFunction;\n private layoutNodeOverride?: LayoutNodeFunction;\n\n registerNodeRenderer(\n nodeTypeId: string,\n renderer: NodeRenderer | undefined\n ): this {\n if (renderer === undefined) {\n this.nodeRenderers.delete(nodeTypeId);\n } else {\n this.nodeRenderers.set(nodeTypeId, renderer);\n }\n return this;\n }\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined {\n return this.nodeRenderers.get(nodeTypeId);\n }\n getAllNodeRenderers(): Record<string, NodeRenderer> {\n const result: Record<string, NodeRenderer> = {};\n for (const [nodeTypeId, renderer] of this.nodeRenderers.entries()) {\n result[nodeTypeId] = renderer;\n }\n return result;\n }\n\n // React Flow renderers\n registerConnectionLineRenderer(\n renderer: ConnectionLineRenderer | undefined\n ): this {\n this.connectionLineRenderer = renderer;\n return this;\n }\n getConnectionLineRenderer(): ConnectionLineRenderer | undefined {\n return this.connectionLineRenderer;\n }\n\n registerMinimapRenderer(renderer: MinimapRenderer | undefined): this {\n this.minimapRenderer = renderer;\n return this;\n }\n getMinimapRenderer(): MinimapRenderer | undefined {\n return this.minimapRenderer;\n }\n\n registerControlsRenderer(renderer: ControlsRenderer | undefined): this {\n this.controlsRenderer = renderer;\n return this;\n }\n getControlsRenderer(): ControlsRenderer | undefined {\n return this.controlsRenderer;\n }\n\n registerBackgroundRenderer(renderer: BackgroundRenderer | undefined): this {\n this.backgroundRenderer = renderer;\n return this;\n }\n getBackgroundRenderer(): BackgroundRenderer | undefined {\n return this.backgroundRenderer;\n }\n\n registerDefaultContextMenuRenderer(\n renderer: DefaultContextMenuRenderer | undefined\n ): this {\n this.defaultContextMenuRenderer = renderer;\n return this;\n }\n getDefaultContextMenuRenderer(): DefaultContextMenuRenderer | undefined {\n return this.defaultContextMenuRenderer;\n }\n\n registerNodeContextMenuRenderer(\n renderer: NodeContextMenuRenderer | undefined\n ): this {\n this.nodeContextMenuRenderer = renderer;\n return this;\n }\n getNodeContextMenuRenderer(): NodeContextMenuRenderer | undefined {\n return this.nodeContextMenuRenderer;\n }\n\n // Layout function overrides\n registerEstimateNodeSize(\n override: EstimateNodeSizeFunction | undefined\n ): this {\n this.estimateNodeSizeOverride = override;\n return this;\n }\n getEstimateNodeSize(): EstimateNodeSizeFunction | undefined {\n return this.estimateNodeSizeOverride;\n }\n\n registerCreateHandleBounds(\n override: CreateHandleBoundsFunction | undefined\n ): this {\n this.createHandleBoundsOverride = override;\n return this;\n }\n getCreateHandleBounds(): CreateHandleBoundsFunction | undefined {\n return this.createHandleBoundsOverride;\n }\n\n registerCreateHandleLayout(\n override: CreateHandleLayoutFunction | undefined\n ): this {\n this.createHandleLayoutOverride = override;\n return this;\n }\n getCreateHandleLayout(): CreateHandleLayoutFunction | undefined {\n return this.createHandleLayoutOverride;\n }\n\n registerLayoutNode(override: LayoutNodeFunction | undefined): this {\n this.layoutNodeOverride = override;\n return this;\n }\n getLayoutNode(): LayoutNodeFunction | undefined {\n return this.layoutNodeOverride;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"@bian-womp/spark-graph\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n protected genId: (prefix: string, used: Set<string>) => string;\n\n constructor(args: {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n genId?: (prefix: string, used: Set<string>) => string;\n }) {\n this.ui = args.ui;\n this.layout = args.layout;\n this.storage = args.storage;\n this.serializer = args.serializer;\n this.genId = args.genId || generateId;\n }\n\n abstract load(def: GraphDefinition): Promise<void>;\n abstract export(): GraphDefinition;\n abstract validate(): ValidationResult;\n abstract addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n },\n options?: { inputs?: Record<string, unknown>; dry?: boolean }\n ): string;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }\n ): string;\n abstract disconnect(edgeId: string): void;\n abstract updateParams(nodeId: string, params: Record<string, unknown>): void;\n\n abstract on<K extends WorkbenchEventName>(\n event: K,\n handler: (e: WorkbenchEventMap[K]) => void\n ): () => void;\n\n // Expose UI registry to adapters (React Flow, CLI) to allow overrides\n getUI(): UIExtensionRegistry {\n return this.ui;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder, Registry } from \"@bian-womp/spark-graph\";\nimport { AbstractWorkbench } from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nexport type CopiedGraphData = {\n nodes: Array<{\n typeId: string;\n params?: Record<string, unknown>;\n resolvedHandles?: Partial<ResolvedHandles>;\n position: { x: number; y: number };\n inputs?: Record<string, unknown>;\n originalNodeId: string; // For mapping edges and copyOutputsFrom\n }>;\n edges: Array<{\n sourceNodeId: string; // Original node ID\n sourceHandle: string;\n targetNodeId: string; // Original node ID\n targetHandle: string;\n typeId?: string;\n }>;\n bounds: {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n };\n};\n\nexport class InMemoryWorkbench extends AbstractWorkbench {\n private def: GraphDefinition = { nodes: [], edges: [] };\n private positions: Record<string, { x: number; y: number }> = {};\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n private registry?: Registry;\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n private viewport: { x: number; y: number; zoom: number } | null = null;\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n async load(def: GraphDefinition): Promise<void> {\n this.def = { nodes: [...def.nodes], edges: [...def.edges] };\n if (this.layout) {\n const { positions } = await this.layout.layout(this.def);\n this.positions = positions;\n }\n\n const defNodeIds = new Set(this.def.nodes.map((n) => n.nodeId));\n const defEdgeIds = new Set(this.def.edges.map((e) => e.id));\n const filteredPositions = Object.fromEntries(\n Object.entries(this.positions).filter(([id]) => defNodeIds.has(id))\n );\n const filteredNodes = this.selection.nodes.filter((id) =>\n defNodeIds.has(id)\n );\n const filteredEdges = this.selection.edges.filter((id) =>\n defEdgeIds.has(id)\n );\n\n this.positions = filteredPositions;\n this.selection = { nodes: filteredNodes, edges: filteredEdges };\n\n this.emit(\"graphChanged\", { def: this.def });\n this.refreshValidation();\n }\n\n export(): GraphDefinition {\n return this.def;\n }\n\n refreshValidation(): void {\n this.emit(\"validationChanged\", this.validate());\n }\n\n validate(): ValidationResult {\n if (this.registry) {\n const builder = new GraphBuilder(this.registry);\n const report = builder.validate(this.def);\n return report;\n }\n const issues: ValidationResult[\"issues\"] = [];\n const nodeIds = new Set<string>();\n for (const n of this.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 });\n } else nodeIds.add(n.nodeId);\n }\n const edgeIds = new Set<string>();\n for (const e of this.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 });\n } else edgeIds.add(e.id);\n }\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n },\n options?: {\n inputs?: Record<string, unknown>;\n copyOutputsFrom?: string;\n dry?: boolean;\n }\n ): string {\n const id =\n node.nodeId ??\n this.genId(\"n\", new Set(this.def.nodes.map((n) => n.nodeId)));\n this.def.nodes.push({\n nodeId: id,\n typeId: node.typeId,\n params: node.params,\n resolvedHandles: node.resolvedHandles,\n });\n if (node.position) this.positions[id] = node.position;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: {\n type: \"addNode\",\n nodeId: id,\n inputs: options?.inputs,\n copyOutputsFrom: options?.copyOutputsFrom,\n },\n dry: options?.dry,\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(nodeId: string): void {\n this.def.nodes = this.def.nodes.filter((n) => n.nodeId !== nodeId);\n this.def.edges = this.def.edges.filter(\n (e) => e.source.nodeId !== nodeId && e.target.nodeId !== nodeId\n );\n delete this.positions[nodeId];\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"removeNode\", nodeId },\n });\n this.refreshValidation();\n }\n\n connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string },\n options?: { dry?: boolean }\n ): string {\n const id =\n edge.id ?? this.genId(\"e\", new Set(this.def.edges.map((e) => e.id)));\n this.def.edges.push({\n id,\n source: { ...edge.source },\n target: { ...edge.target },\n typeId: edge.typeId,\n });\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"connect\", edgeId: id },\n dry: options?.dry,\n });\n this.refreshValidation();\n return id;\n }\n\n disconnect(edgeId: string): void {\n this.def.edges = this.def.edges.filter((e) => e.id !== edgeId);\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"disconnect\", edgeId },\n });\n this.emit(\"validationChanged\", this.validate());\n }\n\n updateEdgeType(edgeId: string, typeId: string | undefined): void {\n const e = this.def.edges.find((x) => x.id === edgeId);\n if (!e) return;\n if (!typeId) delete e.typeId;\n else e.typeId = typeId;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateEdgeType\", edgeId, typeId },\n });\n this.refreshValidation();\n }\n\n updateParams(nodeId: string, params: Record<string, unknown>): void {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return;\n n.params = { ...(n.params ?? {}), ...params };\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateParams\", nodeId },\n });\n }\n\n // Position and selection APIs for React Flow bridge\n setPosition(\n nodeId: string,\n pos: { x: number; y: number },\n opts?: { commit?: boolean }\n ): void {\n this.positions[nodeId] = pos;\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNode\", nodeId, pos },\n commit: !!opts?.commit === true,\n });\n }\n\n setPositions(\n map: Record<string, { x: number; y: number }>,\n opts?: { commit?: boolean }\n ): void {\n this.positions = { ...map };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNodes\" },\n commit: opts?.commit,\n });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSelection(\n sel: { nodes: string[]; edges: string[] },\n opts?: { commit?: boolean }\n ): void {\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"selection\" },\n commit: opts?.commit,\n });\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n setViewport(\n viewport: { x: number; y: number; zoom: number },\n opts?: { commit?: boolean }\n ): void {\n this.viewport = { ...viewport };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"viewport\" },\n commit: opts?.commit,\n });\n }\n\n getViewport(): { x: number; y: number; zoom: number } | null {\n return this.viewport ? { ...this.viewport } : null;\n }\n\n getUIState(): {\n positions?: Record<string, { x: number; y: number }>;\n selection?: { nodes: string[]; edges: string[] };\n viewport?: { x: number; y: number; zoom: number };\n } {\n const defNodeIds = new Set(this.def.nodes.map((n) => n.nodeId));\n const defEdgeIds = new Set(this.def.edges.map((e) => e.id));\n const filteredPositions = Object.fromEntries(\n Object.entries(this.positions).filter(([id]) => defNodeIds.has(id))\n );\n const filteredNodes = this.selection.nodes.filter((id) =>\n defNodeIds.has(id)\n );\n const filteredEdges = this.selection.edges.filter((id) =>\n defEdgeIds.has(id)\n );\n\n return {\n positions:\n Object.keys(filteredPositions).length > 0\n ? filteredPositions\n : undefined,\n selection:\n filteredNodes.length > 0 || filteredEdges.length > 0\n ? {\n nodes: filteredNodes,\n edges: filteredEdges,\n }\n : undefined,\n viewport: this.viewport ? { ...this.viewport } : undefined,\n };\n }\n\n setUIState(ui?: {\n positions?: Record<string, { x: number; y: number }>;\n selection?: { nodes: string[]; edges: string[] };\n viewport?: { x: number; y: number; zoom: number };\n }): void {\n if (!ui) return;\n if (ui.positions) {\n this.positions = { ...ui.positions };\n }\n if (ui.selection) {\n this.selection = {\n nodes: [...ui.selection.nodes],\n edges: [...ui.selection.edges],\n };\n this.emit(\"selectionChanged\", this.selection);\n }\n if (ui.viewport) {\n this.viewport = { ...ui.viewport };\n }\n }\n\n on<K extends WorkbenchEventName>(\n event: K,\n handler: WorkbenchEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<WorkbenchEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends WorkbenchEventName>(\n event: K,\n payload: WorkbenchEventMap[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 /**\n * Copy selected nodes and their internal edges.\n * Returns data in a format suitable for pasting.\n * Positions are normalized relative to the selection bounds center.\n * Uses the same logic as duplicate: copies inputs without bindings and supports copyOutputsFrom.\n */\n copySelection(\n runner: IGraphRunner,\n getNodeSize?: (\n nodeId: string,\n typeId: string\n ) => { width: number; height: number } | undefined\n ): CopiedGraphData | null {\n const selection = this.getSelection();\n if (selection.nodes.length === 0) return null;\n\n const def = this.export();\n const positions = this.getPositions();\n const selectedNodeSet = new Set(selection.nodes);\n\n // Collect nodes to copy\n const nodesToCopy = def.nodes.filter((n) => selectedNodeSet.has(n.nodeId));\n if (nodesToCopy.length === 0) return null;\n\n // Calculate bounds\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n nodesToCopy.forEach((node) => {\n const pos = positions[node.nodeId] || { x: 0, y: 0 };\n const size = getNodeSize?.(node.nodeId, node.typeId) || {\n width: 200,\n height: 100,\n };\n\n minX = Math.min(minX, pos.x);\n minY = Math.min(minY, pos.y);\n maxX = Math.max(maxX, pos.x + size.width);\n maxY = Math.max(maxY, pos.y + size.height);\n });\n\n const bounds = { minX, minY, maxX, maxY };\n const centerX = (bounds.minX + bounds.maxX) / 2;\n const centerY = (bounds.minY + bounds.maxY) / 2;\n\n // Get inputs for each node\n // Include values from inbound edges if those edges are selected\n const allInputs = runner.getInputs(def);\n const selectedEdgeSet = new Set(selection.edges);\n const copiedNodes = nodesToCopy.map((node) => {\n const pos = positions[node.nodeId] || { x: 0, y: 0 };\n\n // Get all inbound edges for this node\n const inboundEdges = def.edges.filter(\n (e) => e.target.nodeId === node.nodeId\n );\n\n // Build set of handles that have inbound edges\n // But only exclude handles whose edges are NOT selected\n const inboundHandlesToExclude = new Set(\n inboundEdges\n .filter((e) => !selectedEdgeSet.has(e.id)) // Only exclude if edge is not selected\n .map((e) => e.target.handle)\n );\n\n const allNodeInputs = allInputs[node.nodeId] || {};\n // Include inputs that either:\n // 1. Don't have inbound edges (literal values)\n // 2. Have inbound edges that ARE selected (preserve the value from the edge)\n const inputsToCopy = Object.fromEntries(\n Object.entries(allNodeInputs).filter(\n ([handle]) => !inboundHandlesToExclude.has(handle)\n )\n );\n\n return {\n typeId: node.typeId,\n params: node.params,\n resolvedHandles: node.resolvedHandles,\n position: {\n x: pos.x - centerX,\n y: pos.y - centerY,\n },\n inputs: inputsToCopy,\n originalNodeId: node.nodeId,\n };\n });\n\n // Collect edges between copied nodes\n const copiedEdges = def.edges\n .filter((edge) => {\n return (\n selectedNodeSet.has(edge.source.nodeId) &&\n selectedNodeSet.has(edge.target.nodeId)\n );\n })\n .map((edge) => ({\n sourceNodeId: edge.source.nodeId,\n sourceHandle: edge.source.handle,\n targetNodeId: edge.target.nodeId,\n targetHandle: edge.target.handle,\n typeId: edge.typeId,\n }));\n\n return {\n nodes: copiedNodes,\n edges: copiedEdges,\n bounds,\n };\n }\n\n /**\n * Paste copied graph data at the specified center position.\n * Returns the mapping from original node IDs to new node IDs.\n * Uses copyOutputsFrom to copy outputs from original nodes (like duplicate does).\n */\n pasteCopiedData(\n data: CopiedGraphData,\n center: { x: number; y: number }\n ): { nodeIdMap: Map<string, string>; edgeIds: string[] } {\n const nodeIdMap = new Map<string, string>();\n const edgeIds: string[] = [];\n\n // Add nodes\n for (const nodeData of data.nodes) {\n const newNodeId = this.addNode(\n {\n typeId: nodeData.typeId,\n params: nodeData.params,\n resolvedHandles: nodeData.resolvedHandles,\n position: {\n x: nodeData.position.x + center.x,\n y: nodeData.position.y + center.y,\n },\n },\n {\n inputs: nodeData.inputs,\n copyOutputsFrom: nodeData.originalNodeId,\n dry: true,\n }\n );\n nodeIdMap.set(nodeData.originalNodeId, newNodeId);\n }\n\n // Add edges\n for (const edgeData of data.edges) {\n const newSourceNodeId = nodeIdMap.get(edgeData.sourceNodeId);\n const newTargetNodeId = nodeIdMap.get(edgeData.targetNodeId);\n if (newSourceNodeId && newTargetNodeId) {\n const edgeId = this.connect(\n {\n source: {\n nodeId: newSourceNodeId,\n handle: edgeData.sourceHandle,\n },\n target: {\n nodeId: newTargetNodeId,\n handle: edgeData.targetHandle,\n },\n typeId: edgeData.typeId,\n },\n { dry: true }\n );\n edgeIds.push(edgeId);\n }\n }\n\n // Select the newly pasted nodes\n this.setSelection({\n nodes: Array.from(nodeIdMap.values()),\n edges: edgeIds,\n });\n\n return { nodeIdMap, edgeIds };\n }\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { Serializer, Storage } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface CLIAdapterDeps {\n storage?: Storage;\n serializer?: Serializer;\n}\n\nexport class CLIWorkbench {\n constructor(\n private wb: InMemoryWorkbench,\n private deps: CLIAdapterDeps = {}\n ) {}\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n print(\n def?: GraphDefinition,\n options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }\n ) {\n const d = def ?? this.wb.export();\n const detail = !!options?.detail;\n const lines: string[] = [];\n lines.push(`Nodes (${d.nodes.length})`);\n for (const n of d.nodes) {\n if (!detail) {\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n } else {\n const reg = this.wb[\"registry\"];\n const desc = reg?.nodes?.get(n.typeId);\n const inputs = Object.entries(desc?.inputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const outputs = Object.entries(desc?.outputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const params = n.params ? JSON.stringify(n.params) : \"{}\";\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n lines.push(` inputs: ${inputs || \"-\"}`);\n lines.push(` outputs: ${outputs || \"-\"}`);\n lines.push(` params: ${params}`);\n const inVals = options?.values?.inputs?.[n.nodeId];\n const outVals = options?.values?.outputs?.[n.nodeId];\n if (inVals && Object.keys(inVals).length > 0)\n lines.push(` inputValues: ${JSON.stringify(inVals)}`);\n if (outVals && Object.keys(outVals).length > 0)\n lines.push(` outputValues: ${JSON.stringify(outVals)}`);\n }\n }\n lines.push(`Edges (${d.edges.length})`);\n for (const e of d.edges) {\n lines.push(\n ` - ${e.id}: ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle} (${e.typeId})`\n );\n }\n return lines.join(\"\\n\");\n }\n\n get actions() {\n return this.wb;\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n EngineKind,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport {\n IGraphRunner,\n RunnerEventName,\n type RunnerEventListener,\n ExecutionBackend,\n RunnerEventMap,\n} from \"./IGraphRunner\";\n\nexport abstract class AbstractGraphRunner implements IGraphRunner {\n public readonly runnerId: string;\n protected runtime?: GraphRuntime;\n protected engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n protected stagedInputs: Record<string, Record<string, unknown>> = {};\n protected runningKind?: EngineKind;\n\n constructor(\n protected registry: Registry,\n protected backend: ExecutionBackend\n ) {\n this.runnerId = \"\";\n }\n\n abstract build(def: GraphDefinition): void;\n\n abstract update(\n def: GraphDefinition,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract step(): Promise<void>;\n\n abstract computeNode(nodeId: string): Promise<void>;\n\n abstract flush(): Promise<void>;\n\n abstract getInputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract getOutputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ): void | Promise<void>;\n\n abstract getEnvironment(): Record<string, unknown> | undefined;\n\n abstract setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void;\n\n abstract copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void;\n\n abstract snapshotFull(): Promise<RuntimeSnapshotFull>;\n\n abstract applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ): Promise<void>;\n\n protected abstract createAndLaunchEngine(opts?: RunnerOptions): Promise<void>;\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n // Auto-stop if engine is already running\n if (this.engine) {\n this.stop();\n }\n }\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\n }\n\n stop(): void {\n if (!this.engine) return;\n\n // Dispose engine (cleans up timers, listeners, etc.)\n this.engine.dispose();\n this.engine = undefined;\n\n // Emit status but keep runtime alive\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n async switchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.engine || !this.runtime) {\n throw new Error(\"No engine running to switch from\");\n }\n\n // Wait for current engine to be idle\n await this.whenIdle();\n\n // Capture current state\n const currentInputs = { ...this.stagedInputs };\n\n // Stop current engine\n this.stop();\n\n // Ensure runtime is in a clean state (resumed)\n this.runtime.resume();\n\n // Create and launch new engine (to be implemented by subclasses)\n await this.createAndLaunchEngine(opts);\n\n // Re-apply staged inputs to new engine\n for (const [nodeId, map] of Object.entries(currentInputs)) {\n if (this.engine) {\n this.engine.setInputs(nodeId, map);\n }\n }\n }\n\n getInputDefaults(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const dynDefaults = n.resolvedHandles?.inputDefaults ?? {};\n if (Object.keys(dynDefaults).length > 0) {\n out[n.nodeId] = dynDefaults;\n }\n }\n return out;\n }\n\n on<K extends RunnerEventName>(\n event: K,\n handler: RunnerEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<RunnerEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n protected emit<K extends RunnerEventName>(\n event: K,\n payload: RunnerEventMap[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 dispose(): void | Promise<void> {\n this.engine?.dispose();\n this.engine = undefined;\n this.runtime?.dispose();\n this.runtime = undefined;\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n getRunningEngine(): EngineKind | undefined {\n return this.runningKind;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n StepEngine,\n PullEngine,\n BatchedEngine,\n} from \"@bian-womp/spark-graph\";\nimport { createEngine } from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\n// Counter for generating readable runner IDs\nlet localRunnerCounter = 0;\n\nexport class LocalGraphRunner extends AbstractGraphRunner {\n public readonly runnerId: string;\n\n constructor(registry: Registry) {\n super(registry, { kind: \"local\" });\n\n // Generate readable ID for this runner instance (e.g., local-001, local-002)\n localRunnerCounter++;\n this.runnerId = `local-${String(localRunnerCounter).padStart(3, \"0\")}`;\n console.info(`[LocalGraphRunner] Created runner with ID: ${this.runnerId}`);\n\n this.emit(\"transport\", { runnerId: this.runnerId, state: \"local\" });\n }\n\n build(def: GraphDefinition): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n // Signal UI that freshly built graph should be considered invalidated\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n }\n\n update(def: GraphDefinition, options?: { dry?: boolean }): void {\n if (!this.runtime) return;\n const wasPaused = this.runtime.isPaused();\n // Pause runtime if dry option is set (to prevent execution) or if not paused already\n if (options?.dry && !wasPaused) {\n this.runtime.pause();\n }\n try {\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } finally {\n // Resume only if we paused it due to dry option\n if (options?.dry && !wasPaused) {\n this.runtime.resume();\n }\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n this.build(def);\n if (!this.runtime) throw new Error(\"Runtime not built\");\n // Use the async method to create engine\n this.createAndLaunchEngine(opts).catch((err) => {\n console.error(\"Failed to launch engine:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n this.emit(\"error\", {\n kind: \"system\",\n message: errorMessage,\n err: err instanceof Error ? err : new Error(errorMessage),\n });\n });\n }\n\n protected async createAndLaunchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.runtime) throw new Error(\"Runtime not built\");\n\n // Use shared engine factory\n this.engine = createEngine(this.runtime, opts);\n\n if (!this.engine) throw new Error(\"Failed to create engine\");\n\n this.engine.on(\"value\", (e) => this.emit(\"value\", e));\n this.engine.on(\"error\", (e) => this.emit(\"error\", e));\n this.engine.on(\"invalidate\", (e) => this.emit(\"invalidate\", e));\n this.engine.on(\"stats\", (e) => this.emit(\"stats\", e));\n this.engine.launch(opts?.invalidate);\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n async flush(): Promise<void> {\n const eng = this.engine;\n if (eng && eng instanceof BatchedEngine) await eng.flush();\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.runtime) return out;\n for (const n of def.nodes) {\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(desc?.outputs ?? {});\n for (const h of handles) {\n const v = this.runtime.getOutput(n.nodeId, h);\n if (v !== undefined) {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = v;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n // Build inbound handle set for this node from current def\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n // Merge staged only for non-inbound handles so UI reflects runtime values for wired inputs\n const merged: Record<string, unknown> = { ...runtimeInputs };\n for (const [h, v] of Object.entries(staged)) {\n if (!inbound.has(h)) merged[h] = v;\n }\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n // Handle dry option: pause runtime before triggering, resume after\n const wasPaused = this.runtime?.isPaused() ?? false;\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.pause();\n }\n\n try {\n this.engine?.triggerExternal(nodeId, event);\n } finally {\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.resume();\n }\n }\n }\n\n // Batch update multiple inputs on a node and trigger a single run\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n if (!inputs) return;\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n for (const [handle, value] of Object.entries(inputs)) {\n if (value === undefined) {\n delete this.stagedInputs[nodeId][handle];\n } else {\n this.stagedInputs[nodeId][handle] = value;\n }\n }\n\n // Handle dry option: pause runtime before setting inputs, resume after\n const wasPaused = this.runtime?.isPaused() ?? false;\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.pause();\n }\n\n try {\n if (this.engine) {\n this.engine.setInputs(nodeId, inputs);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n console.warn(\"Engine does not exists\");\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n } finally {\n if (options?.dry && !wasPaused && this.runtime) {\n this.runtime.resume();\n }\n }\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n if (!this.runtime) return;\n // Get outputs from source node\n const fromNode = this.runtime.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n\n // Copy outputs to target node using hydrate\n // hydrate already pauses internally, so we don't need to handle dry option here\n // reemit: !options?.dry means don't propagate downstream if dry mode\n this.runtime.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { reemit: !options?.dry }\n );\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ) => {\n if (!this.runtime) return;\n const wasPaused = this.runtime.isPaused();\n if (opts?.dry && !wasPaused) this.runtime.pause();\n try {\n if (opts?.merge) {\n const current = this.runtime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n this.runtime.setEnvironment(next);\n } else {\n this.runtime.setEnvironment(env);\n }\n } finally {\n if (opts?.dry && !wasPaused) this.runtime.resume();\n }\n };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async snapshotFull() {\n const def = undefined as any; // UI will supply def/positions on download for local\n const inputs = this.getInputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const outputs = this.getOutputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const environment = this.getEnvironment() || {};\n return { def, environment, inputs, outputs };\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ) {\n if (payload.def && !options?.skipBuild) {\n this.build(payload.def);\n }\n\n this.setEnvironment?.(payload.environment || {}, { merge: false });\n this.hydrate(payload);\n }\n\n private hydrate(snapshot: RuntimeSnapshotFull): void {\n // Hydrate via runtime for exact restore (this emits events on runtime emitter)\n this.runtime?.hydrate({\n inputs: snapshot.inputs || {},\n outputs: snapshot.outputs || {},\n });\n\n // Also emit directly from runner to ensure UI gets events even if engine isn't running\n for (const [nodeId, map] of Object.entries(snapshot.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snapshot.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n }\n\n dispose(): void {\n super.dispose();\n this.runtime = undefined;\n this.emit(\"transport\", { runnerId: this.runnerId, state: \"local\" });\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n RunnerOptions,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry } from \"@bian-womp/spark-graph\";\nimport {\n RemoteEngine,\n RuntimeApiClient,\n type RemoteClientConfig,\n type RemoteTransportStatus,\n} from \"@bian-womp/spark-remote\";\nimport {\n RemoteExecutionBackend,\n RemoteExecutionBackendKind,\n TransportStatus,\n RunnerEventName,\n RunnerEventListener,\n} from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\n// Counter for generating readable runner IDs\nlet remoteRunnerCounter = 0;\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected client?: RuntimeApiClient;\n protected engine?: RemoteEngine;\n private clientPromise?: Promise<RuntimeApiClient>;\n private transportStatusUnsubscribe?: () => void;\n private disposed = false;\n private currentTransportStatus: TransportStatus;\n public readonly runnerId: string;\n\n private valueCache = new Map<\n string,\n { io: \"input\" | \"output\"; value: unknown; runtimeTypeId?: string }\n >();\n private listenersBound = false;\n private registryFetched = false;\n private registryFetching = false;\n private readonly MAX_REGISTRY_FETCH_ATTEMPTS = 3;\n private readonly INITIAL_RETRY_DELAY_MS = 1000; // 1 second\n\n /**\n * Fetch full registry description from remote and register it locally.\n * Called automatically on first connection with retry mechanism.\n */\n private async fetchRegistry(\n client: RuntimeApiClient,\n attempt = 1\n ): Promise<void> {\n if (this.registryFetching) {\n // Already fetching, don't start another fetch\n return;\n }\n\n this.registryFetching = true;\n\n try {\n const desc = await client.describeRegistry();\n\n // Register types\n for (const t of desc.types) {\n if (t.options) {\n this.registry.registerEnum({\n id: t.id,\n options: t.options,\n bakeTarget: t.bakeTarget,\n });\n } else {\n if (!this.registry.types.has(t.id)) {\n this.registry.registerType({\n id: t.id,\n displayName: t.displayName,\n validate: (_v) => true,\n bakeTarget: t.bakeTarget,\n });\n }\n }\n }\n\n // Register categories\n for (const c of desc.categories || []) {\n if (!this.registry.categories.has(c.id)) {\n // Create placeholder category descriptor\n const category: any = {\n id: c.id,\n displayName: c.displayName,\n createRuntime: () => ({\n async onInputsChanged() {},\n }),\n policy: { asyncConcurrency: \"switch\" },\n };\n this.registry.categories.register(category);\n }\n }\n\n // Register coercions\n for (const c of desc.coercions) {\n if (c.async) {\n this.registry.registerAsyncCoercion(c.from, c.to, async (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n } else {\n this.registry.registerCoercion(c.from, c.to, (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n }\n }\n\n // Register nodes\n for (const n of desc.nodes) {\n if (!this.registry.nodes.has(n.id)) {\n this.registry.registerNode({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n impl: () => {},\n });\n }\n }\n\n this.registryFetched = true;\n this.registryFetching = false;\n this.emit(\"registry\", this.registry);\n } catch (err) {\n this.registryFetching = false;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Retry with exponential backoff if attempts remaining\n if (attempt < this.MAX_REGISTRY_FETCH_ATTEMPTS) {\n const delayMs = this.INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n console.warn(\n `Failed to fetch registry (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying in ${delayMs}ms...`,\n error\n );\n\n // Emit error event for UI feedback\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Registry fetch failed (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying...`,\n err: error,\n attempt,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n\n // Retry after delay\n setTimeout(() => {\n this.fetchRegistry(client, attempt + 1).catch(() => {\n // Final failure handled below\n });\n }, delayMs);\n } else {\n // Max attempts reached, emit final error\n console.error(\n `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts:`,\n error\n );\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts. Please check your connection and try refreshing.`,\n err: error,\n attempt: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n }\n }\n }\n\n /**\n * Build RuntimeApiClient config from RemoteExecutionBackend config.\n */\n private buildClientConfig(\n backend: RemoteExecutionBackend\n ): RemoteClientConfig {\n if (backend.kind === \"remote-http\") {\n return {\n kind: \"remote-http\",\n baseUrl: backend.baseUrl,\n connectOptions: backend.connectOptions,\n };\n } else {\n return {\n kind: \"remote-ws\",\n url: backend.url,\n connectOptions: backend.connectOptions,\n };\n }\n }\n\n /**\n * Setup event subscriptions for the client.\n */\n private setupClientSubscriptions(client: RuntimeApiClient): void {\n // Subscribe to transport status changes\n // Convert RuntimeApiClient.TransportStatus to IGraphRunner.TransportStatus\n // Only emit status if it matches this runner's ID\n this.transportStatusUnsubscribe = client.onTransportStatus(\n (status: RemoteTransportStatus) => {\n if (status.runnerId && status.runnerId !== this.runnerId) return;\n\n // Map remote-unix to undefined since RemoteGraphRunner doesn't support it\n const mappedKind: RemoteExecutionBackendKind | undefined =\n status.kind === \"remote-unix\" ? undefined : status.kind;\n const transportStatus: TransportStatus = {\n state: status.state,\n kind: mappedKind,\n runnerId: this.runnerId,\n };\n // Track current status\n this.currentTransportStatus = transportStatus;\n this.emit(\"transport\", transportStatus);\n }\n );\n }\n\n // Ensure remote client\n protected async ensureClient(): Promise<RuntimeApiClient> {\n if (this.disposed) {\n throw new Error(\n \"Cannot ensure client: RemoteGraphRunner has been disposed\"\n );\n }\n if (this.client) return this.client;\n // If already connecting, wait for that connection to complete\n if (this.clientPromise) return this.clientPromise;\n\n const backend = this.backend as RemoteExecutionBackend;\n\n // Create connection promise to prevent concurrent connections\n this.clientPromise = (async () => {\n // Build client config from backend config\n const clientConfig = this.buildClientConfig(backend);\n\n // Create client with custom event handler if provided\n const client = new RuntimeApiClient(clientConfig, {\n onCustomEvent: backend.onCustomEvent,\n runnerId: this.runnerId,\n } as { onCustomEvent?: any; runnerId?: string });\n\n // Setup event subscriptions\n this.setupClientSubscriptions(client);\n\n // Connect the client (this will create and connect transport)\n await client.connect();\n\n this.client = client;\n this.valueCache.clear();\n this.listenersBound = false;\n\n // Auto-fetch registry on first connection (only once)\n if (!this.registryFetched && !this.registryFetching) {\n // Log loading state (UI can listen to transport status for loading indication)\n console.info(\"[RemoteGraphRunner] Loading registry from remote...\");\n this.fetchRegistry(client)\n .then(() => {\n console.info(\"[RemoteGraphRunner] Loaded registry from remote\");\n })\n .catch((err: unknown) => {\n console.error(\"[RemoteGraphRunner] Failed to fetch registry:\", err);\n });\n }\n\n // Clear promise on success\n this.clientPromise = undefined;\n return client;\n })();\n\n return this.clientPromise;\n }\n\n constructor(registry: Registry, backend: RemoteExecutionBackend) {\n super(registry, backend);\n\n // Generate readable ID for this runner instance (e.g., remote-001, remote-002)\n remoteRunnerCounter++;\n this.runnerId = `remote-${String(remoteRunnerCounter).padStart(3, \"0\")}`;\n console.info(\n `[RemoteGraphRunner] Created runner with ID: ${this.runnerId}`\n );\n\n // Initialize transport status as \"connecting\" - will be updated when connection completes\n this.currentTransportStatus = {\n state: \"connecting\",\n kind: backend.kind,\n };\n\n // Auto-handle registry-changed invalidations from remote\n // We listen on invalidate and if reason matches, we rehydrate registry and emit a registry event\n this.ensureClient().then(async (client) => {\n const eng = client.getEngine();\n if (!this.listenersBound) {\n eng.on(\"invalidate\", async (e: any) => {\n if (e.reason === \"registry-changed\") {\n try {\n const deltas = Array.isArray(e.deltas) ? e.deltas : [];\n for (const d of deltas) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n this.registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options,\n opts: d.opts,\n bakeTarget: d.bakeTarget,\n });\n } else if (d.kind === \"register-type\") {\n if (!this.registry.types.has(d.id)) {\n this.registry.registerType({\n id: d.id,\n displayName: d.displayName,\n validate: (_v) => true,\n bakeTarget: d.bakeTarget,\n });\n }\n } else if (d.kind === \"register-node\") {\n if (!this.registry.nodes.has(d.desc?.id)) {\n this.registry.registerNode({\n id: String(d.desc?.id || \"\"),\n categoryId: String(d.desc?.categoryId || \"compute\"),\n displayName: d.desc?.displayName,\n inputs: d.desc?.inputs || {},\n outputs: d.desc?.outputs || {},\n impl: () => {},\n });\n }\n }\n }\n this.emit(\"registry\", this.registry);\n // Trigger update so validation/UI refreshes using last known graph\n try {\n if (this.lastDef) await this.update(this.lastDef);\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n }\n });\n }\n });\n }\n\n build(def: GraphDefinition): void {}\n\n async update(\n def: GraphDefinition,\n options?: { dry?: boolean }\n ): Promise<void> {\n // Remote: forward update and await completion\n const client = await this.ensureClient();\n try {\n await client.update(def, options);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n this.lastDef = def;\n } catch (err) {\n // Log error but don't throw to maintain compatibility\n console.error(\"[RemoteGraphRunner] Error updating graph:\", err);\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: build remotely then launch\n this.ensureClient().then(async (client) => {\n await client.build(def);\n // Signal UI after remote build as well\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n this.lastDef = def;\n // Hydrate current remote inputs/outputs (including defaults) into cache\n try {\n const snap = await client.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snap.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n } catch {\n console.error(\"Failed to hydrate remote inputs/outputs\");\n }\n await this.createAndLaunchEngine(opts);\n });\n }\n\n protected async createAndLaunchEngine(opts?: RunnerOptions): Promise<void> {\n const client = await this.ensureClient();\n\n // Configure and launch engine on the backend\n await client.launch(opts);\n\n // Get the remote engine proxy and wire up event listeners\n const eng = client.getEngine();\n if (!this.listenersBound) {\n eng.on(\"value\", (e: any) => {\n this.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n runtimeTypeId: e.runtimeTypeId,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e: any) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e: any) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e: any) => this.emit(\"stats\", e));\n this.listenersBound = true;\n }\n this.engine = eng;\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n /**\n * Launch using an existing backend runtime that has already been built and hydrated.\n * This is used when resuming from a snapshot where the backend has already applied\n * ApplySnapshotFull (which builds the graph and hydrates inputs/outputs).\n * Unlike launch(), this method does NOT call client.build() to avoid destroying\n * the runtime state that was just restored.\n */\n launchExisting(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: attach to existing runtime and launch (do NOT rebuild)\n this.ensureClient().then(async (client) => {\n // NOTE: We do NOT call client.build(def) here because the backend runtime\n // has already been built and hydrated via ApplySnapshotFull.\n // Calling build() would create a new runtime and lose the restored state.\n\n this.lastDef = def;\n await this.createAndLaunchEngine(opts);\n });\n }\n\n async switchEngine(opts?: RunnerOptions): Promise<void> {\n if (!this.engine) {\n throw new Error(\"No engine running to switch from\");\n }\n\n // Wait for current engine to be idle\n await this.whenIdle();\n\n // Capture current state\n const currentInputs = { ...this.stagedInputs };\n\n // For remote runners, we cannot call this.stop() because it sends a Dispose\n // command that destroys the graphRuntime on the backend. Instead, we rely on\n // the backend's launch() method to dispose the old engine and create a new one.\n\n // Reconfigure engine on the backend (this will dispose old engine and create new one)\n const client = await this.ensureClient();\n await client.launch(opts);\n\n // Get the remote engine proxy (should be the same RemoteEngine instance)\n const eng = client.getEngine();\n\n // Update local state to reflect new engine kind\n // Note: The RemoteEngine instance itself doesn't change, but the backend engine does\n this.engine = eng;\n this.runningKind = opts?.engine ?? \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n\n // Re-apply staged inputs to new engine\n for (const [nodeId, map] of Object.entries(currentInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const client = await this.ensureClient();\n await client.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const client = await this.ensureClient();\n await client.computeNode(nodeId);\n }\n\n async flush(): Promise<void> {\n const client = await this.ensureClient();\n await client.flush();\n }\n\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n // Update staged inputs (for getInputs to work correctly)\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n for (const [handle, value] of Object.entries(inputs)) {\n if (value === undefined) {\n delete this.stagedInputs[nodeId][handle];\n } else {\n this.stagedInputs[nodeId][handle] = value;\n }\n }\n\n // If engine exists, call directly; otherwise ensure client (fire-and-forget)\n if (this.engine) {\n this.engine.setInputs(nodeId, inputs, options);\n } else {\n this.ensureClient()\n .then((client) => {\n client.getEngine().setInputs(nodeId, inputs, options);\n })\n .catch(() => {\n // Emit synthetic events if connection fails\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n });\n }\n }\n\n async copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n // If engine exists, call directly; otherwise ensure client (fire-and-forget)\n if (this.engine) {\n this.engine.triggerExternal(nodeId, event, options);\n } else {\n this.ensureClient()\n .then((client) => {\n client.getEngine().triggerExternal(nodeId, event, options);\n })\n .catch(() => {\n // Silently fail if connection not available\n });\n }\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const client = await this.ensureClient();\n try {\n return await client.coerce(from, to, value);\n } catch {\n return value;\n }\n }\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n const client = await this.ensureClient();\n await client.setExtData(data);\n }\n\n async snapshotFull() {\n const client = await this.ensureClient();\n try {\n return await client.snapshotFull();\n } catch {\n return { def: undefined, environment: {}, inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean }\n ) {\n // Hydrate local cache first so UI can display values immediately\n this.hydrateValueCache(payload);\n\n // Then sync with backend\n const client = await this.ensureClient();\n await client.applySnapshotFull(payload, options);\n }\n\n /**\n * Hydrates the local valueCache from a snapshot and emits value events.\n * This ensures the UI can display inputs/outputs immediately without waiting\n * for value events from the remote backend.\n */\n hydrateValueCache(snapshot: RuntimeSnapshotFull): void {\n // Hydrate inputs\n for (const [nodeId, map] of Object.entries(snapshot.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n // Hydrate outputs\n for (const [nodeId, map] of Object.entries(snapshot.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n }\n\n async setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ): Promise<void> {\n // Use client if available, otherwise ensure client and then set environment\n if (this.client) {\n await this.client.setEnvironment(env, opts);\n } else {\n try {\n const client = await this.ensureClient();\n await client.setEnvironment(env, opts);\n } catch {\n // Silently fail if connection not available\n }\n }\n }\n\n getEnvironment(): Record<string, unknown> | undefined {\n // Interface requires sync return, but RuntimeApiClient.getEnvironment() is async.\n // Returns undefined synchronously; callers needing the actual value should:\n // - Use snapshotFull() which includes environment\n // - Call client.getEnvironment() directly if they have access to the client\n // This is a limitation of the sync interface signature.\n return undefined;\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n if (!cache) return out;\n for (const n of def.nodes) {\n const resolved = n.resolvedHandles?.outputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.outputs ?? {});\n for (const h of handles) {\n const key = `${n.nodeId}.${h}`;\n const rec = cache.get(key);\n if (rec && rec.io === \"output\") {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = rec.value;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const resolved = n.resolvedHandles?.inputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.inputs ?? {});\n const cur: Record<string, unknown> = {};\n // Build inbound handle set for this node to honor wiring precedence\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n for (const h of handles) {\n const rec = cache.get(`${n.nodeId}.${h}`);\n if (rec && rec.io === \"input\") cur[h] = rec.value;\n }\n // Merge staged only for non-inbound handles so UI doesn't override runtime values\n const merged: Record<string, unknown> = { ...cur };\n for (const [h, v] of Object.entries(staged)) {\n if (!inbound.has(h)) merged[h] = v;\n }\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n async dispose(): Promise<void> {\n // Idempotent: allow multiple calls safely\n if (this.disposed) return;\n this.disposed = true;\n console.info(\n `[RemoteGraphRunner] Disposing runner with ID: ${this.runnerId}`\n );\n\n super.dispose();\n\n // Clear client promise if any\n this.clientPromise = undefined;\n\n // Unsubscribe from transport status\n // Note: Custom events are cleaned up automatically when client is disposed\n if (this.transportStatusUnsubscribe) {\n this.transportStatusUnsubscribe();\n this.transportStatusUnsubscribe = undefined;\n }\n\n // Dispose client (which will close transport)\n const clientToDispose = this.client;\n this.client = undefined;\n this.registryFetched = false; // Reset so registry is fetched again on reconnect\n this.registryFetching = false; // Reset fetching state\n\n if (clientToDispose) {\n try {\n await clientToDispose.dispose();\n } catch (err: unknown) {\n console.warn(\"[RemoteGraphRunner] Error disposing client:\", err);\n }\n }\n\n const disconnectedStatus: TransportStatus = {\n state: \"disconnected\",\n kind: this.backend.kind as RemoteExecutionBackendKind,\n runnerId: this.runnerId,\n };\n this.currentTransportStatus = disconnectedStatus;\n this.emit(\"transport\", disconnectedStatus);\n }\n\n /**\n * Override on() to emit current transport status immediately when a new listener subscribes.\n * This ensures listeners don't miss the current status when they attach after connection.\n */\n on<K extends RunnerEventName>(\n event: K,\n handler: RunnerEventListener<K>\n ): () => void {\n const unsubscribe = super.on(event, handler);\n\n // If subscribing to transport events and we have a current status, emit it immediately\n if (event === \"transport\" && this.currentTransportStatus) {\n // Use setTimeout to ensure this happens after the listener is registered\n // This prevents issues if the handler modifies state synchronously\n setTimeout(() => {\n // Type assertion is safe here because we checked event === \"transport\"\n (handler as RunnerEventListener<\"transport\">)(\n this.currentTransportStatus\n );\n }, 0);\n }\n\n return unsubscribe;\n }\n}\n","import {\n isTypedOutput,\n type Registry,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function formatDataUrlAsLabel(dataUrl: string): string {\n try {\n const semi = dataUrl.indexOf(\";\");\n const comma = dataUrl.indexOf(\",\");\n const mime = dataUrl.slice(5, semi > 0 ? semi : undefined).toUpperCase();\n const b64 = comma >= 0 ? dataUrl.slice(comma + 1) : \"\";\n const bytes = Math.floor((b64.length * 3) / 4);\n return `${mime} Data (${bytes} bytes)`;\n } catch {\n return dataUrl.length > 64 ? dataUrl.slice(0, 64) + \"…\" : dataUrl;\n }\n}\n\nexport function resolveOutputDisplay(\n raw: unknown,\n declared: string | string[] | undefined\n): { typeId?: string; value: unknown } {\n if (isTypedOutput(raw)) {\n return {\n typeId: getTypedOutputTypeId(raw),\n value: getTypedOutputValue(raw),\n };\n }\n let typeId: string | undefined = undefined;\n if (Array.isArray(declared)) {\n typeId = declared.length === 1 ? declared[0] : undefined;\n } else if (typeof declared === \"string\") {\n typeId = declared.includes(\"|\") ? undefined : declared;\n }\n return { typeId, value: raw };\n}\n\nexport function formatDeclaredTypeSignature(\n declared: string | string[] | undefined\n): string {\n if (Array.isArray(declared)) return declared.join(\" | \");\n return declared ?? \"\";\n}\n\n/**\n * Formats a handle ID for display in the UI.\n * For handles with format \"prefix:middle:suffix:extra\" (4 parts), displays only the middle part.\n * Otherwise returns the handle ID as-is.\n */\nexport function prettyHandle(id: string): string {\n try {\n const parts = String(id).split(\":\");\n // If there are exactly 3 colons (4 parts), display only the second part\n if (parts.length === 4) return parts[1] || id;\n return id;\n } catch {\n return id;\n }\n}\n\n// Pre-format common structures for display; return undefined to defer to caller\nexport function preformatValueForDisplay(\n typeId: string | undefined,\n value: unknown,\n registry?: Registry\n): string | undefined {\n if (value === undefined || value === null) return \"\";\n // Unwrap typed outputs\n if (isTypedOutput(value)) {\n return preformatValueForDisplay(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value),\n registry\n );\n }\n // Enums\n if (typeId && typeId.startsWith(\"enum:\") && registry) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n if (label) return label;\n }\n // Use deep summarization for strings, arrays and nested objects to avoid huge HTML payloads\n const summarized = summarizeDeep(value);\n if (typeof summarized === \"string\") return summarized;\n // Resource-like objects with url/title (after summarization)\n if (summarized && typeof summarized === \"object\") {\n const urlMaybe = (summarized as any).url;\n if (typeof urlMaybe === \"string\") {\n const title = (summarized as any).title || \"\";\n const shortUrl =\n urlMaybe.length > 32 ? urlMaybe.slice(0, 32) + \"…\" : urlMaybe;\n return title ? `${title} (${shortUrl})` : shortUrl;\n }\n }\n return undefined;\n}\n\nexport function summarizeDeep(value: unknown): unknown {\n // Strings: summarize data URLs and trim extremely long strings\n if (typeof value === \"string\") {\n if (value.startsWith(\"data:\")) return formatDataUrlAsLabel(value);\n return value.length > 512 ? value.slice(0, 512) + \"…\" : value;\n }\n // Typed output wrapper\n if (isTypedOutput(value)) {\n return summarizeDeep(getTypedOutputValue(value));\n }\n // Arrays\n if (Array.isArray(value)) {\n return value.map((v) => summarizeDeep(v));\n }\n // Objects\n if (value && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n // Special-case any 'url' field\n if (\n typeof v === \"string\" &&\n k.toLowerCase() === \"url\" &&\n v.startsWith(\"data:\")\n ) {\n out[k] = formatDataUrlAsLabel(v);\n continue;\n }\n out[k] = summarizeDeep(v);\n }\n return out;\n }\n return value;\n}\n","// Shared UI constants for node layout to keep mapping and rendering in sync\nexport const NODE_HEADER_HEIGHT_PX = 24;\nexport const NODE_ROW_HEIGHT_PX = 18;\nexport const HANDLE_SIZE_PX = 12;\n","import type {\n ResolvedHandles,\n GraphNodeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate } from \"@bian-womp/spark-graph\";\nimport {\n HANDLE_SIZE_PX,\n NODE_HEADER_HEIGHT_PX,\n NODE_ROW_HEIGHT_PX,\n} from \"./constants\";\nimport { Position } from \"@xyflow/react\";\n\n// Layout function types\nexport type EstimateNodeSizeArgs = {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n};\n\nexport type EstimateNodeSizeResult = {\n width: number;\n height: number;\n};\n\nexport type EstimateNodeSizeFunction = (\n args: EstimateNodeSizeArgs\n) => EstimateNodeSizeResult;\n\nexport type CreateHandleBoundsArgs = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n rowIndex: number;\n nodeWidth: number;\n};\n\nexport type CreateHandleBoundsResult = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type CreateHandleBoundsFunction = (\n args: CreateHandleBoundsArgs\n) => CreateHandleBoundsResult;\n\nexport type CreateHandleLayoutArgs = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n rowIndex: number;\n};\n\nexport type CreateHandleLayoutResult = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n};\n\nexport type CreateHandleLayoutFunction = (\n args: CreateHandleLayoutArgs\n) => CreateHandleLayoutResult;\n\nexport type LayoutNodeArgs = {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n};\n\nexport type HandleBounds = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n};\n\nexport type HandleLayout = {\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n};\n\nexport type LayoutNodeResult = {\n width: number;\n height: number;\n inputOrder: string[];\n outputOrder: string[];\n handles: HandleBounds[];\n handleLayout: HandleLayout[];\n};\n\nexport type LayoutNodeFunction = (args: LayoutNodeArgs) => LayoutNodeResult;\n\nexport function computeEffectiveHandles(\n node: GraphNodeDefinition,\n registry: Registry\n): ResolvedHandles {\n const desc = registry.nodes.get(node.typeId);\n const resolved = node.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n const inputDefaults = { ...desc?.inputDefaults, ...resolved.inputDefaults };\n return { inputs, outputs, inputDefaults };\n}\n\nexport function countVisibleHandles(\n handles: Omit<ResolvedHandles, \"inputDefaults\">\n): {\n inputsCount: number;\n outputsCount: number;\n} {\n const inputIds = Object.keys(handles.inputs).filter(\n (k) => !isInputPrivate(handles.inputs, k)\n );\n const outputIds = Object.keys(handles.outputs);\n return { inputsCount: inputIds.length, outputsCount: outputIds.length };\n}\n\nexport function estimateNodeSize(\n args: EstimateNodeSizeArgs\n): EstimateNodeSizeResult {\n const { node, registry, showValues, overrides } = args;\n const { inputs, outputs } = computeEffectiveHandles(node, registry);\n // Count only non-private inputs for rows on left\n const { inputsCount, outputsCount } = countVisibleHandles({\n inputs,\n outputs,\n });\n const rows = Math.max(inputsCount, outputsCount);\n const baseWidth = showValues ? 320 : 240;\n const width = overrides?.width ?? baseWidth;\n const height =\n overrides?.height ?? NODE_HEADER_HEIGHT_PX + rows * NODE_ROW_HEIGHT_PX;\n return { width, height };\n}\n\n/**\n * Calculate the Y position for handle layout (center of row).\n * Used for positioning handles in React Flow.\n */\nexport function getHandleLayoutY(rowIndex: number): number {\n return (\n NODE_HEADER_HEIGHT_PX +\n rowIndex * NODE_ROW_HEIGHT_PX +\n NODE_ROW_HEIGHT_PX / 2\n );\n}\n\n/**\n * Calculate the Y position for handle bounds (top + centering offset).\n * Used for hit-testing and edge routing.\n */\nexport function getHandleBoundsY(rowIndex: number): number {\n return (\n NODE_HEADER_HEIGHT_PX +\n rowIndex * NODE_ROW_HEIGHT_PX +\n (NODE_ROW_HEIGHT_PX - HANDLE_SIZE_PX) / 2 +\n 1\n );\n}\n\n/**\n * Calculate the X position for handle bounds based on position and node width.\n */\nexport function getHandleBoundsX(\n position: Position,\n nodeWidth: number\n): number {\n if (position === Position.Left) {\n return -HANDLE_SIZE_PX / 2 + 1;\n } else {\n return nodeWidth - HANDLE_SIZE_PX / 2 - 1;\n }\n}\n\n/**\n * Create handle bounds object for hit-testing/edge routing.\n */\nexport function createHandleBounds(\n args: CreateHandleBoundsArgs\n): CreateHandleBoundsResult {\n return {\n id: args.id,\n type: args.type,\n position: args.position,\n x: getHandleBoundsX(args.position, args.nodeWidth),\n y: getHandleBoundsY(args.rowIndex),\n width: HANDLE_SIZE_PX,\n height: HANDLE_SIZE_PX,\n };\n}\n\n/**\n * Create handle layout object for React Flow rendering.\n */\nexport function createHandleLayout(\n args: CreateHandleLayoutArgs\n): CreateHandleLayoutResult {\n return {\n id: args.id,\n type: args.type,\n position: args.position,\n y: getHandleLayoutY(args.rowIndex),\n };\n}\n\nexport function layoutNode(\n args: LayoutNodeArgs,\n overrides?: {\n estimateNodeSize?: EstimateNodeSizeFunction;\n createHandleBounds?: CreateHandleBoundsFunction;\n createHandleLayout?: CreateHandleLayoutFunction;\n }\n): LayoutNodeResult {\n const { node, registry, showValues, overrides: sizeOverrides } = args;\n const { inputs, outputs } = computeEffectiveHandles(node, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n\n const estimateNodeSizeFn = overrides?.estimateNodeSize ?? estimateNodeSize;\n const createHandleBoundsFn =\n overrides?.createHandleBounds ?? createHandleBounds;\n const createHandleLayoutFn =\n overrides?.createHandleLayout ?? createHandleLayout;\n\n const { width, height } = estimateNodeSizeFn({\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n });\n\n const handles = [\n ...inputOrder.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: i,\n nodeWidth: width,\n })\n ),\n ...outputOrder.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: i,\n nodeWidth: width,\n })\n ),\n ];\n\n const handleLayout = [\n ...inputOrder.map((id, i) =>\n createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: i,\n })\n ),\n ...outputOrder.map((id, i) =>\n createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: i,\n })\n ),\n ];\n return { width, height, inputOrder, outputOrder, handles, handleLayout };\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n} from \"@xyflow/react\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nexport function useWorkbenchBridge(wb: InMemoryWorkbench) {\n const onConnect: OnConnect = useCallback(\n (params) => {\n if (!params.source || !params.target) return;\n if (!params.sourceHandle || !params.targetHandle) return;\n // Prevent duplicate edges between the same endpoints\n const def = wb.export();\n const exists = def.edges.some(\n (e) =>\n e.source.nodeId === params.source &&\n e.source.handle === params.sourceHandle &&\n e.target.nodeId === params.target &&\n e.target.handle === params.targetHandle\n );\n if (exists) return;\n wb.connect({\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n });\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n // Apply position updates continuously, but mark commit only on drag end\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n wb.setPosition(c.id, c.position, { commit: !c.dragging });\n }\n });\n\n // Derive next node selection from change set\n const current = wb.getSelection();\n const nextNodeIds = new Set(current.nodes);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextNodeIds.has(id)) {\n nextNodeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextNodeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextNodeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: Array.from(nextNodeIds),\n edges: current.edges,\n });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) => edges.forEach((e) => wb.disconnect(e.id)),\n [wb]\n );\n\n const onEdgesChange: OnEdgesChange = useCallback(\n (changes) => {\n const current = wb.getSelection();\n const nextEdgeIds = new Set(current.edges);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextEdgeIds.has(id)) {\n nextEdgeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextEdgeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextEdgeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: current.nodes,\n edges: Array.from(nextEdgeIds),\n });\n }\n },\n [wb]\n );\n\n const onNodesDelete: OnNodesDelete = useCallback(\n (nodes) => {\n for (const n of nodes) wb.removeNode(n.id);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n };\n}\n\nexport function useWorkbenchGraphTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchGraphUiTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphUiChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchVersionTick(runner: IGraphRunner) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const bump = () => setVersion((v) => v + 1);\n const u1 = runner.on(\"value\", bump);\n const u2 = runner.on(\"error\", bump);\n const u3 = runner.on(\"invalidate\", bump);\n const u4 = runner.on(\"status\", bump);\n const u5 = runner.on(\"stats\", bump);\n return () => {\n u1();\n u2();\n u3();\n u4();\n u5();\n };\n }, [runner]);\n\n return version;\n}\n\nexport function useThrottledValue<T>(value: T, intervalMs: number): T {\n const [throttled, setThrottled] = useState<T>(value);\n const lastSetAtRef = useRef(0);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n const now =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n const elapsed = now - lastSetAtRef.current;\n if (elapsed >= intervalMs) {\n lastSetAtRef.current = now;\n setThrottled(value);\n } else {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n lastSetAtRef.current =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n setThrottled(value);\n timeoutRef.current = null;\n }, Math.max(0, intervalMs - elapsed));\n }\n return () => {};\n }, [value, intervalMs]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n return throttled;\n}\n\n// Query param helpers\nfunction setSearchParam(key: string, val: string | undefined) {\n if (typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (val === undefined || val === \"\") url.searchParams.delete(key);\n else url.searchParams.set(key, val);\n window.history.replaceState({}, \"\", url.toString());\n}\n\nexport function useQueryParamBoolean(\n key: string,\n defaultValue: boolean\n): [boolean, (v: boolean) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n if (v === null) return defaultValue;\n return v === \"1\" || v === \"true\";\n }, [key, defaultValue]);\n const [val, setVal] = useState<boolean>(initial);\n const set = useCallback(\n (v: boolean) => {\n setVal(v);\n setSearchParam(key, v ? \"1\" : undefined);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n setVal(v === \"1\" || v === \"true\");\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n\nexport function useQueryParamString(\n key: string,\n defaultValue?: string\n): [string | undefined, (v: string | undefined) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n return v ?? defaultValue;\n }, [key, defaultValue]);\n const [val, setVal] = useState<string | undefined>(initial);\n const set = useCallback(\n (v: string | undefined) => {\n setVal(v);\n setSearchParam(key, v);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key) ?? undefined;\n setVal(v);\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n} from \"@bian-womp/spark-graph\";\nimport { Position } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport {\n computeEffectiveHandles,\n layoutNode,\n createHandleBounds,\n createHandleLayout,\n estimateNodeSize,\n type EstimateNodeSizeFunction,\n type CreateHandleBoundsFunction,\n type CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"./layout\";\nimport { NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport type { UIExtensionRegistry } from \"../core/ui-extensions\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown> extends RFNodeData\n ? RFNodeData\n : Record<string, unknown>;\n type?: string;\n selected?: boolean;\n // Provide initial dimensions so XYFlow doesn't hide nodes while waiting for measurement\n initialWidth?: number;\n initialHeight?: number;\n // Pre-supply handle bounds to avoid waiting for DOM measurement\n handles?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n // Optional explicit node dimensions\n width?: number;\n height?: number;\n}\nexport interface RFEdge {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n selected?: boolean;\n animated?: boolean;\n className?: string;\n style?: any;\n label?: string;\n}\n\nexport interface RFNodeData extends Record<string, unknown> {\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n // For outputs, \"typeId\" is a display signature only; runtime type comes on value event\n outputHandles: Array<{ id: string; typeId: string }>;\n // Connectivity flags by input handle id (true if this input has an incoming edge)\n inputConnected?: Record<string, boolean>;\n // Optional explicit handle placement for consistent rendering across nodes\n handleLayout?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number; // center offset used for <Handle style={{ top }} />\n // When true, this handle does not exist in the node spec but is shown\n // to visualize dangling/missing connections. Rendered in yellow.\n missing?: boolean;\n }>;\n // Optional preferred render dimensions\n renderWidth?: number;\n renderHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, Record<string, unknown>>;\n outputValues?: Record<string, unknown>;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: ValidationIssue[];\n };\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n opts: {\n showValues?: boolean;\n inputs?: Record<string, Record<string, unknown>>;\n inputDefaults?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n resolveNodeType?: (nodeTypeId: string) => string;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n nodeStatus?: Record<string, NodeRunStatus>;\n edgeStatus?: Record<string, EdgeRunStatus>;\n nodeValidation?: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n edgeValidation?: Record<string, boolean>;\n selectedNodeIds?: Set<string>;\n selectedEdgeIds?: Set<string>;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n ui?: UIExtensionRegistry;\n }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const EDGE_STYLE_MISSING = { stroke: \"#f59e0b\", strokeWidth: 2 } as const; // amber-500\n const EDGE_STYLE_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n // Build a map of valid handles per node up-front\n const validHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n for (const n of def.nodes) {\n const { inputs, outputs } = computeEffectiveHandles(n, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n validHandleMap[n.nodeId] = {\n inputs: new Set(inputOrder),\n outputs: new Set(outputOrder),\n };\n }\n\n // Track which inputs are connected (for UI) and which handles are missing (for layout)\n const connectedInputs: Record<string, Set<string>> = {};\n const missingInputsByNode: Record<string, Set<string>> = {};\n const missingOutputsByNode: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const tgtId = e.target.nodeId;\n const tgtHandle = e.target.handle;\n if (!connectedInputs[tgtId]) connectedInputs[tgtId] = new Set<string>();\n connectedInputs[tgtId].add(tgtHandle);\n const tgtValid = !!validHandleMap[tgtId]?.inputs.has(tgtHandle);\n if (!tgtValid) {\n (missingInputsByNode[tgtId] ||= new Set<string>()).add(tgtHandle);\n }\n\n const srcId = e.source.nodeId;\n const srcHandle = e.source.handle;\n const srcValid = !!validHandleMap[srcId]?.outputs.has(srcHandle);\n if (!srcValid) {\n (missingOutputsByNode[srcId] ||= new Set<string>()).add(srcHandle);\n }\n }\n\n // This map is still used later for certain checks; align with valid handles\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n Object.assign(nodeHandleMap, validHandleMap);\n\n // Get layout function overrides from UI registry\n const layoutNodeOverride: LayoutNodeFunction =\n opts.ui?.getLayoutNode() ?? layoutNode;\n const createHandleBoundsFn: CreateHandleBoundsFunction =\n opts.ui?.getCreateHandleBounds() ?? createHandleBounds;\n const createHandleLayoutFn: CreateHandleLayoutFunction =\n opts.ui?.getCreateHandleLayout() ?? createHandleLayout;\n const estimateNodeSizeFn: EstimateNodeSizeFunction =\n opts.ui?.getEstimateNodeSize() ?? estimateNodeSize;\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const { inputs: inputSource, outputs: outputSource } =\n computeEffectiveHandles(n, registry);\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n\n // If layoutNode is overridden, use it directly; otherwise use default with internal overrides\n const geom = layoutNodeOverride\n ? layoutNodeOverride({\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n })\n : layoutNode(\n {\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n },\n {\n estimateNodeSize: estimateNodeSizeFn,\n createHandleBounds: createHandleBoundsFn,\n createHandleLayout: createHandleLayoutFn,\n }\n );\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id),\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]),\n }));\n nodeHandleMap[n.nodeId] = {\n inputs: new Set(inputHandles.map((h) => h.id)),\n outputs: new Set(outputHandles.map((h) => h.id)),\n };\n\n // Append placeholder entries for any missing handles (below valid ones)\n const baseLeftCount = geom.inputOrder.length;\n const baseRightCount = geom.outputOrder.length;\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n\n const extraHandleLayoutLeft = extraInputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: baseLeftCount + i,\n }),\n missing: true as const,\n }));\n const extraHandleLayoutRight = extraOutputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: baseRightCount + i,\n }),\n missing: true as const,\n }));\n const handleLayout = [\n ...geom.handleLayout,\n ...extraHandleLayoutLeft,\n ...extraHandleLayoutRight,\n ];\n\n // Precompute handle bounds (including missing) so edges can render immediately\n const missingBoundsLeft = extraInputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: baseLeftCount + i,\n nodeWidth: geom.width,\n })\n );\n const missingBoundsRight = extraOutputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: baseRightCount + i,\n nodeWidth: geom.width,\n })\n );\n const handles = [\n ...geom.handles,\n ...missingBoundsLeft,\n ...missingBoundsRight,\n ];\n\n // Adjust node height to accommodate missing handle rows\n const baseRows = Math.max(baseLeftCount, baseRightCount);\n const newRows = Math.max(\n baseLeftCount + extraInputs.length,\n baseRightCount + extraOutputs.length\n );\n const initialWidth = geom.width;\n const initialHeight =\n geom.height + Math.max(0, newRows - baseRows) * NODE_ROW_HEIGHT_PX;\n\n return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n inputConnected: Object.fromEntries(\n inputHandles.map((h: { id: string }) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout,\n showValues: opts.showValues,\n renderWidth: initialWidth,\n renderHeight: initialHeight,\n inputValues: opts.inputs?.[n.nodeId],\n inputDefaults: opts.inputDefaults?.[n.nodeId],\n outputValues: opts.outputs?.[n.nodeId],\n status: opts.nodeStatus?.[n.nodeId],\n validation: {\n inputs: opts.nodeValidation?.inputs?.[n.nodeId] ?? [],\n outputs: opts.nodeValidation?.outputs?.[n.nodeId] ?? [],\n issues: opts.nodeValidation?.issues?.[n.nodeId] ?? [],\n },\n toString: opts.toString,\n toElement: opts.toElement,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts.resolveNodeType?.(n.typeId) ?? \"spark-default\",\n selected: opts.selectedNodeIds\n ? opts.selectedNodeIds.has(n.nodeId)\n : undefined,\n initialWidth,\n initialHeight,\n handles,\n width: initialWidth,\n height: initialHeight,\n };\n });\n\n const edges: RFEdge[] = def.edges.map((e) => {\n const st = opts.edgeStatus?.[e.id];\n const isRunning = (st?.activeRuns || 0) > 0;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts.edgeValidation?.[e.id];\n const sourceMissing = !validHandleMap[e.source.nodeId]?.outputs.has(\n e.source.handle\n );\n const targetMissing = !validHandleMap[e.target.nodeId]?.inputs.has(\n e.target.handle\n );\n const isMissing = sourceMissing || targetMissing;\n const style = isMissing\n ? EDGE_STYLE_MISSING\n : hasError || isInvalidEdge\n ? EDGE_STYLE_ERROR\n : isRunning\n ? EDGE_STYLE_RUNNING\n : undefined;\n return {\n id: e.id,\n source: e.source.nodeId,\n target: e.target.nodeId,\n sourceHandle: e.source.handle,\n targetHandle: e.target.handle,\n selected: opts.selectedEdgeIds\n ? opts.selectedEdgeIds.has(e.id)\n : undefined,\n animated: isRunning && !isMissing,\n style,\n label: e.typeId || undefined,\n };\n });\n\n return { nodes, edges };\n}\n\n// Shared node container border class composition for consistent visuals\nexport function getNodeBorderClassNames(args: {\n selected?: boolean;\n status?: NodeRunStatus;\n validation?: { issues?: ValidationIssue[] };\n}): string {\n const selected = !!args.selected;\n const status = args.status || ({} as NodeRunStatus);\n const issues = args.validation?.issues ?? [];\n\n const hasError = !!status.lastError;\n const hasValidationError = issues.some((i) => i.level === \"error\");\n const hasValidationWarning = !hasValidationError && issues.length > 0;\n const isRunning = (status.activeRuns || 0) > 0;\n const isInvalid = !!status.invalidated && !isRunning && !hasError;\n\n // Keep border width constant to avoid layout reflow on selection toggles\n const borderWidth = \"border\";\n const borderStyle = isInvalid ? \"border-dashed\" : \"border-solid\";\n\n // Determine severity color once\n type Severity = \"red\" | \"amber\" | \"blue\" | \"gray\";\n const severity: Severity =\n hasError || hasValidationError\n ? \"red\"\n : hasValidationWarning\n ? \"amber\"\n : isRunning\n ? \"blue\"\n : \"gray\";\n\n const borderBySeverity: Record<Severity, string> = {\n red: \"border-red-500\",\n amber: \"border-amber-500\",\n blue: \"border-blue-500\",\n gray: \"border-gray-500 dark:border-gray-400\",\n };\n const ringBySeverity: Record<Severity, string> = {\n red: \"ring-2 ring-red-300 dark:ring-red-900\",\n amber: \"ring-2 ring-amber-300 dark:ring-amber-900\",\n blue: \"ring-2 ring-blue-200 dark:ring-blue-900\",\n gray: \"ring-2 ring-gray-300 dark:ring-gray-500\",\n };\n\n const borderColor = borderBySeverity[severity];\n const ring = isRunning\n ? ringBySeverity.blue\n : selected\n ? ringBySeverity[severity === \"blue\" ? \"gray\" : severity]\n : \"\";\n\n return [borderWidth, borderStyle, borderColor, ring].join(\" \").trim();\n}\n\n/**\n * Shared utility to generate handle className based on validation and value state.\n * - Linked handles (with inbound edges) get black borders\n * - Handles with values (but not linked) get darker gray borders\n * - Handles with only defaults (no value, not linked) get lighter gray borders\n * - Validation errors (red/amber) take precedence over value-based styling.\n */\nexport function getHandleClassName(args: {\n kind: \"input\" | \"output\";\n id: string;\n validation: {\n inputs?: HandleIssue[];\n outputs?: HandleIssue[];\n };\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, unknown>;\n inputConnected?: Record<string, boolean>;\n}): string {\n const { kind, id, validation } = args;\n\n const vIssues =\n (kind === \"input\" ? validation.inputs : validation.outputs)?.filter(\n (v) => v.handle === id\n ) || [];\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n\n // Determine border color based on priority:\n // 1. Validation errors (red/amber) - highest priority\n // 2. Gray border\n let borderColor: string;\n if (hasAny && hasErr) {\n borderColor = \"!border-red-500\";\n } else if (hasAny) {\n borderColor = \"!border-amber-500\";\n } else {\n borderColor = \"!border-gray-500 dark:!border-gray-400\";\n }\n\n return cx(\n \"!w-3 !h-3 !bg-white/50 !dark:bg-stone-900 wb-nodrag wb-nowheel\",\n borderColor,\n kind === \"output\" && \"!rounded-none\"\n );\n}\n","import type { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nfunction generateTimestamp(): string {\n const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(\n d.getMinutes()\n )}`;\n}\n\nfunction downloadJSON(payload: unknown, filename: string): void {\n const pretty = JSON.stringify(payload, null, 2);\n const blob = new Blob([pretty], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n}\n\nfunction isSnapshotPayload(\n parsed: unknown\n): parsed is RuntimeSnapshotFull & { def?: unknown } {\n return (\n parsed !== null &&\n typeof parsed === \"object\" &&\n (\"def\" in parsed ||\n \"inputs\" in parsed ||\n \"outputs\" in parsed ||\n \"environment\" in parsed)\n );\n}\n\nexport async function download(\n wb: InMemoryWorkbench,\n runner: IGraphRunner\n): Promise<void> {\n try {\n const def = wb.export();\n const uiState = wb.getUIState();\n\n let snapshot: RuntimeSnapshotFull;\n if (runner.isRunning()) {\n const fullSnapshot = await runner.snapshotFull();\n snapshot = {\n ...fullSnapshot,\n def,\n extData: {\n ...(fullSnapshot.extData || {}),\n ui: uiState,\n },\n };\n } else {\n const inputs = runner.getInputs(def);\n snapshot = {\n def,\n inputs,\n outputs: {},\n environment: {},\n extData: { ui: uiState },\n };\n }\n\n downloadJSON(snapshot, `spark-snapshot-${generateTimestamp()}.json`);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to download snapshot: ${message}`);\n }\n}\n\nexport async function upload(\n parsed: unknown,\n wb: InMemoryWorkbench,\n runner: IGraphRunner\n): Promise<void> {\n if (!isSnapshotPayload(parsed)) {\n throw new Error(\"Invalid snapshot format - expected RuntimeSnapshotFull\");\n }\n\n const def = parsed.def;\n const environment = parsed.environment || {};\n const inputs = parsed.inputs || {};\n const outputs = parsed.outputs || {};\n const extData = parsed.extData || {};\n\n if (!def) {\n throw new Error(\"Graph definition is empty\");\n }\n\n await wb.load(def);\n\n if (extData.ui && typeof extData.ui === \"object\") {\n wb.setUIState(extData.ui);\n }\n\n if (runner.isRunning()) {\n await runner.applySnapshotFull({\n def,\n environment,\n inputs,\n outputs,\n extData,\n });\n } else {\n runner.build(wb.export());\n\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(\n inputs as Record<string, Record<string, unknown>>\n )) {\n runner.setInputs(nodeId, map);\n }\n }\n }\n}\n","import React, { createContext, useContext } from \"react\";\nimport type {\n GraphDefinition,\n InputValidationError,\n RegistryError,\n SystemError,\n EngineKind,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry, ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n DebugEvent,\n} from \"../../core/contracts\";\nimport { AbstractWorkbench } from \"../../core/AbstractWorkbench\";\nimport { IGraphRunner } from \"../../runtime/IGraphRunner\";\n\nexport type ExampleDescriptor = {\n id: string;\n label: string;\n // If registry is omitted, the current (possibly remote-hydrated) registry is kept\n load: () => Promise<{\n registry?: Registry;\n def: GraphDefinition;\n inputs?: Record<string, Record<string, unknown>>;\n }>;\n defaultEngine?: EngineKind;\n};\n\nexport type WorkbenchOverrides = {\n toString?: (\n baseToString: (typeId?: string, value?: unknown) => string,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => string;\n toElement?: (\n baseToElement: (typeId?: string, value?: unknown) => JSX.Element,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => JSX.Element;\n setInput?: (\n baseSetInput: (handle: string, raw: string | number | undefined) => void,\n ctx: {\n runner: IGraphRunner;\n selectedNodeId?: string;\n registry: Registry;\n // lightweight context; extend if needed later\n }\n ) => (handle: string, raw: string | number | undefined) => void;\n registerUI?: (\n baseRegisterUI: (wb: AbstractWorkbench) => void,\n ctx: { wb: AbstractWorkbench; wbRunner: IGraphRunner }\n ) => void;\n // Allow consumers to customize the example list (remove/replace/add)\n getExamples?: (defaults: ExampleDescriptor[]) => ExampleDescriptor[];\n contextPanel?: React.ReactNode;\n // Optional: per-type default sizing for nodes\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n\n // Graph\n def: GraphDefinition;\n selectedNodeId?: string;\n selectedEdgeId?: string;\n setSelection: (sel: { nodes: string[]; edges: string[] }) => void;\n\n // Runtime\n nodeStatus: Record<string, NodeRunStatus>;\n edgeStatus: Record<string, EdgeRunStatus>;\n valuesTick: number;\n inputsMap: Record<string, Record<string, unknown>>;\n inputDefaultsMap: Record<string, Record<string, unknown>>;\n outputsMap: Record<string, Record<string, unknown>>;\n outputTypesMap: Record<string, Record<string, string | undefined>>;\n\n // Validation\n validationByNode: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n validationByEdge: {\n errors: Record<string, boolean>;\n issues: Record<string, ValidationIssue[]>;\n };\n validationGlobal: ValidationIssue[];\n\n // Debug events\n events: Array<DebugEvent>;\n clearEvents: () => void;\n\n // System errors\n systemErrors: SystemError[];\n registryErrors: RegistryError[];\n inputValidationErrors: InputValidationError[];\n clearSystemErrors: () => void;\n clearRegistryErrors: () => void;\n clearInputValidationErrors: () => void;\n removeSystemError: (index: number) => void;\n removeRegistryError: (index: number) => void;\n removeInputValidationError: (index: number) => void;\n\n // Engine controls\n isRunning: () => boolean;\n engineKind: () => EngineKind | undefined;\n start: (engine: EngineKind) => void;\n stop: () => void;\n step: () => void;\n flush: () => void;\n\n // Layout\n runAutoLayout: () => void;\n\n // Graph edits\n updateEdgeType: (edgeId: string, typeId: string | undefined) => void;\n\n // Invoke node external event\n triggerExternal: (nodeId: string, event: unknown) => void;\n\n // UI registration version (increments when custom renderers are registered)\n uiVersion?: number;\n}\n\nexport const WorkbenchContext = createContext<WorkbenchContextValue | null>(\n null\n);\n\nexport function useWorkbenchContext(): WorkbenchContextValue {\n const ctx = useContext(WorkbenchContext);\n if (!ctx)\n throw new Error(\n \"useWorkbenchContext must be used within WorkbenchProvider\"\n );\n return ctx;\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n EdgeConvertError,\n InputValidationError,\n NodeRunError,\n RegistryError,\n ResolvedHandles,\n SystemError,\n EngineKind,\n} from \"@bian-womp/spark-protocol\";\nimport { type Registry, type ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n DebugEvent,\n WorkbenchEventMap,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport {\n WorkbenchContext,\n WorkbenchContextValue,\n WorkbenchOverrides,\n} from \"./WorkbenchContext\";\nimport { estimateNodeSize, computeEffectiveHandles } from \"../layout\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n overrides,\n uiVersion,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n overrides?: WorkbenchOverrides;\n uiVersion?: number;\n children: React.ReactNode;\n}) {\n const [nodeStatus, setNodeStatus] = useState<Record<string, NodeRunStatus>>(\n {}\n );\n const [edgeStatus, setEdgeStatus] = useState<Record<string, EdgeRunStatus>>(\n {}\n );\n const [events, setEvents] = useState<Array<DebugEvent>>([]);\n const clearEvents = useCallback(() => setEvents([]), []);\n const [systemErrors, setSystemErrors] = useState<SystemError[]>([]);\n const [registryErrors, setRegistryErrors] = useState<RegistryError[]>([]);\n const [inputValidationErrors, setInputValidationErrors] = useState<\n InputValidationError[]\n >([]);\n const clearSystemErrors = useCallback(() => setSystemErrors([]), []);\n const clearRegistryErrors = useCallback(() => setRegistryErrors([]), []);\n const clearInputValidationErrors = useCallback(\n () => setInputValidationErrors([]),\n []\n );\n const removeSystemError = useCallback((index: number) => {\n setSystemErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n const removeRegistryError = useCallback((index: number) => {\n setRegistryErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n const removeInputValidationError = useCallback((index: number) => {\n setInputValidationErrors((prev) => prev.filter((_, idx) => idx !== index));\n }, []);\n\n // Fallback progress animation: drive progress to 100% over ~2 minutes\n const FALLBACK_TOTAL_MS = 2 * 60 * 1000;\n const [fallbackStarts, setFallbackStarts] = useState<Record<string, number>>(\n {}\n );\n // Track runs that emitted an error so we can keep progress on completion\n const errorRunsRef = useRef<Record<string, Record<string, true>>>({});\n\n // Periodically advance fallback progress for running nodes without explicit progress\n useEffect(() => {\n const interval = setInterval(() => {\n setNodeStatus((prev) => {\n let changed = false;\n const next = { ...prev } as typeof prev;\n const now = Date.now();\n for (const id of Object.keys(prev)) {\n const st = prev[id];\n if (!st) continue;\n const runs = st.activeRuns ?? 0;\n const startAt = fallbackStarts[id];\n if (runs > 0 && startAt) {\n const cur = Math.max(0, Math.min(1, Number(st.progress) || 0));\n const elapsed = Math.max(0, now - startAt);\n // Approach 100% over the target window, but cap below 1 until done\n const target = Math.max(\n 0,\n Math.min(0.99, elapsed / FALLBACK_TOTAL_MS)\n );\n const merged = Math.max(cur, target);\n if (merged > cur + 0.005 && merged <= 1) {\n next[id] = { ...st, progress: merged };\n changed = true;\n }\n }\n }\n return changed ? next : prev;\n });\n }, 200);\n return () => clearInterval(interval);\n }, [fallbackStarts]);\n\n // Validation\n const [validation, setValidation] = useState<\n { ok: boolean; issues: Array<ValidationIssue> } | undefined\n >(undefined);\n\n // Selection (mirror workbench selectionChanged)\n const [selectedNodeId, setSelectedNodeId] = useState<string | undefined>();\n const [selectedEdgeId, setSelectedEdgeId] = useState<string | undefined>();\n const setSelection = useCallback(\n (sel: { nodes: string[]; edges: string[] }) => wb.setSelection(sel),\n [wb]\n );\n\n // Ticks\n const graphTick = useWorkbenchGraphTick(wb);\n const graphUiTick = useWorkbenchGraphUiTick(wb);\n const versionTick = useWorkbenchVersionTick(runner);\n const valuesTick = versionTick + graphTick + graphUiTick;\n\n // Def and IO values\n const def = wb.export();\n\n const inputsMap = useMemo(\n () => runner.getInputs(def),\n [runner, def, valuesTick]\n );\n const inputDefaultsMap = useMemo(\n () => runner.getInputDefaults(def),\n [runner, def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(def),\n [runner, def, valuesTick]\n );\n const outputTypesMap = useMemo(() => {\n const out: Record<string, Record<string, string | undefined>> = {};\n // Local: runtimeTypeId is not stored; derive from typed wrapper in outputsMap\n for (const n of def.nodes) {\n const effectiveHandles = computeEffectiveHandles(n, registry);\n const outputsDecl = effectiveHandles.outputs;\n const handles = Object.keys(outputsDecl);\n const cur: Record<string, string | undefined> = {};\n for (const h of handles) {\n const v = outputsMap[n.nodeId]?.[h];\n const declared = outputsDecl[h];\n const { typeId } = resolveOutputDisplay(v, declared);\n cur[h] = typeId;\n }\n if (Object.keys(cur).length > 0) out[n.nodeId] = cur;\n }\n return out;\n }, [def, outputsMap, registry]);\n\n // Initialize nodes as invalidated by default until first successful run\n useEffect(() => {\n setNodeStatus((prev) => {\n const next = { ...prev } as Record<string, NodeRunStatus>;\n for (const n of def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n const updates: Partial<NodeRunStatus> = {};\n if (cur.invalidated === undefined) {\n updates.invalidated = true;\n }\n // Ensure activeRunIds is always initialized as an array\n if (cur.activeRunIds === undefined) {\n updates.activeRunIds = [];\n }\n if (Object.keys(updates).length > 0) {\n next[n.nodeId] = { ...cur, ...updates };\n }\n }\n return next;\n });\n }, [def]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n const cur = wb.export();\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of cur.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of cur.edges) {\n indegree[e.target.nodeId] = (indegree[e.target.nodeId] ?? 0) + 1;\n adj[e.source.nodeId].push(e.target.nodeId);\n }\n const q = Object.keys(indegree).filter((k) => indegree[k] === 0);\n const layers: string[][] = [];\n while (q.length) {\n const layer: string[] = [];\n const next: string[] = [];\n for (const id of q) {\n layer.push(id);\n for (const nb of adj[id]) {\n indegree[nb] -= 1;\n if (indegree[nb] === 0) next.push(nb);\n }\n }\n layers.push(layer);\n q.splice(0, q.length, ...next);\n }\n // Size-aware placement: columns by layer, stacking nodes vertically in each column\n // Use the same sizing heuristic as mapping via estimateNodeSize\n const H_GAP = 160;\n const V_GAP = 24;\n const pos: Record<string, { x: number; y: number }> = {};\n let curX = 0;\n for (const layer of layers) {\n // Compute max width in this layer and individual heights\n let maxWidth = 0;\n const heights: Record<string, number> = {};\n for (const id of layer) {\n const node = cur.nodes.find((n) => n.nodeId === id);\n if (!node) continue;\n // Prefer showValues sizing similar to node rendering\n // Consider per-type overrides when available via UI\n const overrideSize =\n overrides?.getDefaultNodeSize?.(node.typeId) ?? undefined;\n const size = estimateNodeSize({\n node,\n registry,\n showValues: true,\n overrides: overrideSize,\n });\n heights[id] = size.height;\n if (size.width > maxWidth) maxWidth = size.width;\n }\n // Place nodes in this column\n let curY = 0;\n for (const id of layer) {\n const h = heights[id] ?? 0;\n pos[id] = { x: curX, y: curY };\n curY += h + V_GAP;\n }\n curX += maxWidth + H_GAP;\n }\n wb.setPositions(pos, { commit: true });\n }, [wb, registry, overrides?.getDefaultNodeSize]);\n\n const updateEdgeType = useCallback(\n (edgeId: string, typeId: string | undefined) =>\n wb.updateEdgeType(edgeId, typeId),\n [wb]\n );\n\n const triggerExternal = useCallback(\n (nodeId: string, event: unknown) => runner.triggerExternal(nodeId, event),\n [runner]\n );\n\n // Subscribe to runner/workbench events\n useEffect(() => {\n const add =\n (source: \"runner\" | \"workbench\", type: string) => (payload: unknown) =>\n setEvents((prev: Array<DebugEvent>) => {\n if (\n source === \"workbench\" &&\n (type === \"graphChanged\" || type === \"graphUiChanged\")\n ) {\n const changeType = (payload as WorkbenchEventMap[typeof type])\n .change?.type;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const nextNo = prev.length > 0 ? (prev[0]?.no ?? 0) + 1 : 1;\n const next = [\n {\n no: nextNo,\n at: Date.now(),\n source,\n type,\n payload: structuredClone(payload),\n },\n ...prev,\n ];\n return next.length > 200 ? next.slice(0, 200) : next;\n });\n\n // Helper to apply resolved handles from event payload to workbench\n const applyResolvedHandles = (\n resolvedHandles: Record<string, Partial<ResolvedHandles>>\n ) => {\n const cur = wb.export();\n let changed = false;\n for (const n of cur.nodes) {\n const updated = resolvedHandles[n.nodeId];\n if (updated) {\n const before = JSON.stringify(n.resolvedHandles || {});\n const after = JSON.stringify(updated);\n if (before !== after) {\n n.resolvedHandles = updated;\n changed = true;\n }\n }\n }\n if (changed) wb.refreshValidation();\n };\n\n const offRunnerValue = runner.on(\"value\", (e) => {\n if (e?.io === \"input\") {\n const nodeId = e?.nodeId as string;\n const handle = e?.handle as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: { ...s[nodeId], invalidated: true },\n }));\n // Clear validation errors for this input when a valid value is set\n setInputValidationErrors((prev) =>\n prev.filter(\n (err) => !(err.nodeId === nodeId && err.handle === handle)\n )\n );\n }\n return add(\"runner\", \"value\")(e);\n });\n const offRunnerError = runner.on(\"error\", (e) => {\n const edgeError = e as EdgeConvertError;\n const nodeError = e as NodeRunError;\n const registryError = e as RegistryError;\n const systemError = e as SystemError;\n const inputValidationError = e as InputValidationError;\n\n if (edgeError.kind === \"edge-convert\") {\n const edgeId = edgeError.edgeId;\n setEdgeStatus((s) => ({\n ...s,\n [edgeId]: { ...s[edgeId], lastError: edgeError.err },\n }));\n } else if (nodeError.kind === \"node-run\" && nodeError.nodeId) {\n const nodeId = nodeError.nodeId;\n const runId = nodeError.runId;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: nodeError.err,\n },\n }));\n // Mark this runId as errored\n if (runId) {\n errorRunsRef.current[nodeId] = {\n ...errorRunsRef.current[nodeId],\n [runId]: true,\n };\n }\n } else if (registryError.kind === \"registry\") {\n // Track registry errors for UI display\n setRegistryErrors((prev) => {\n // Avoid duplicates by checking message\n if (prev.some((err) => err.message === registryError.message)) {\n return prev;\n }\n return [...prev, registryError];\n });\n } else if (inputValidationError.kind === \"input-validation\") {\n // Track input validation errors for UI display\n setInputValidationErrors((prev) => {\n // Avoid duplicates by checking nodeId, handle, and typeId\n if (\n prev.some(\n (err) =>\n err.nodeId === inputValidationError.nodeId &&\n err.handle === inputValidationError.handle &&\n err.typeId === inputValidationError.typeId\n )\n ) {\n return prev;\n }\n return [...prev, inputValidationError];\n });\n } else if (systemError.kind === \"system\") {\n // Track custom errors for UI display\n setSystemErrors((prev) => {\n // Avoid duplicates by checking message and code\n if (\n prev.some(\n (err) =>\n err.message === systemError.message &&\n err.code === systemError.code\n )\n ) {\n return prev;\n }\n return [...prev, systemError];\n });\n }\n return add(\"runner\", \"error\")(e);\n });\n const offRunnerInvalidate = runner.on(\"invalidate\", (e) => {\n // If resolvedHandles are included in the event, use them directly (more efficient)\n if (e?.resolvedHandles && Object.keys(e.resolvedHandles).length > 0) {\n applyResolvedHandles(e.resolvedHandles);\n }\n return add(\"runner\", \"invalidate\")(e);\n });\n const offRunnerStats = runner.on(\"stats\", (s) => {\n if (!s) return;\n if (s.kind === \"node-start\") {\n const id = s.nodeId;\n const runId = s.runId;\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n if (!isValidRunId) {\n console.warn(\n `[WorkbenchContext] node-start event missing or invalid runId for node ${id}`,\n { runId, event: s }\n );\n }\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const currentRunIds = prev[id]?.activeRunIds ?? [];\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: current + 1,\n activeRunIds: isValidRunId\n ? [...currentRunIds, runId]\n : currentRunIds,\n progress: 0,\n invalidated: false,\n },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: Date.now() }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...prev[id],\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n const runId = s.runId;\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const currentRunIds = prev[id]?.activeRunIds ?? [];\n\n if (isValidRunId && !currentRunIds.includes(runId)) {\n console.warn(\n `[WorkbenchContext] node-done event for unknown runId: node=${id} runId=${runId}`,\n { event: s, currentRunIds }\n );\n return prev; // Ignore stale event\n }\n\n const nextActive = Math.max(0, current - 1); // Prevent negative values\n const nextRunIds = isValidRunId\n ? currentRunIds.filter((rid) => rid !== runId)\n : currentRunIds;\n const hadError = !!(\n isValidRunId && errorRunsRef.current[id]?.[runId]\n );\n const keepProgress = hadError || nextActive > 0;\n\n // Clear error flag for this runId\n if (isValidRunId && errorRunsRef.current[id]?.[runId]) {\n delete errorRunsRef.current[id]?.[runId];\n }\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: nextActive,\n activeRunIds: nextRunIds,\n progress: keepProgress ? prev[id]?.progress : 0,\n lastError: hadError ? prev[id]?.lastError : undefined,\n },\n };\n });\n // Clear fallback start timestamp if no more active runs\n setFallbackStarts((prev) => {\n const nextPrev = { ...prev };\n // If we don't know nextActive here, conservatively clear to stop animation\n delete nextPrev[id];\n return nextPrev;\n });\n } else if (s.kind === \"edge-start\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: { ...prev[id], activeRuns: current + 1 },\n };\n });\n } else if (s.kind === \"edge-done\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: { ...prev[id], activeRuns: Math.max(0, current - 1) }, // Prevent negative values\n };\n });\n }\n return add(\"runner\", \"stats\")(s);\n });\n const offWbGraphChanged = wb.on(\"graphChanged\", (event) => {\n // Clear validation errors for removed nodes\n if (event.change?.type === \"removeNode\") {\n const removedNodeId = event.change.nodeId;\n setInputValidationErrors((prev) =>\n prev.filter((err) => err.nodeId !== removedNodeId)\n );\n }\n return add(\"workbench\", \"graphChanged\")(event);\n });\n const offWbGraphUiChanged = wb.on(\n \"graphUiChanged\",\n add(\"workbench\", \"graphUiChanged\")\n );\n const offWbValidationChanged = wb.on(\n \"validationChanged\",\n add(\"workbench\", \"validationChanged\")\n );\n // Ensure newly added nodes start as invalidated until first evaluation\n const offWbAddNode = wb.on(\"graphChanged\", (e) => {\n const change = e.change;\n if (change?.type === \"addNode\" && typeof change.nodeId === \"string\") {\n const id = change.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [id]: { ...s[id], invalidated: true },\n }));\n }\n });\n const offWbGraphChangedForUpdate = wb.on(\"graphChanged\", async (event) => {\n if (!runner.isRunning()) return;\n\n try {\n if (event.change?.type === \"addNode\") {\n const { nodeId, inputs, copyOutputsFrom } = event.change;\n if (event.dry) {\n await runner.update(event.def, { dry: true });\n if (inputs) {\n runner.setInputs(nodeId, inputs, { dry: true });\n }\n if (copyOutputsFrom) {\n runner.copyOutputs(copyOutputsFrom, nodeId, { dry: true });\n }\n } else {\n await runner.update(event.def, { dry: !!inputs });\n if (inputs) {\n runner.setInputs(nodeId, inputs, { dry: false });\n }\n }\n } else {\n await runner.update(event.def, { dry: event.dry });\n }\n } catch (err) {\n console.error(\"[WorkbenchContext] Error updating graph:\", err);\n }\n });\n const offWbdSetValidation = wb.on(\"validationChanged\", (r) =>\n setValidation(r)\n );\n const offWbSelectionChanged = wb.on(\"selectionChanged\", (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n });\n const offWbError = wb.on(\"error\", add(\"workbench\", \"error\"));\n // Registry updates: swap registry and refresh graph validation/UI\n const offRunnerRegistry = runner.on(\"registry\", async (newReg) => {\n try {\n setRegistry(newReg);\n wb.setRegistry(newReg);\n // Trigger a graph update so the UI revalidates with new types/enums/nodes\n try {\n await runner.update(wb.export());\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n });\n\n // Handle transport disconnect: reset runtime status when connection is lost\n const offRunnerTransport = runner.on(\"transport\", (t) => {\n if (t.state === \"disconnected\") {\n console.info(\n \"[WorkbenchContext] Transport disconnected, resetting node status\"\n );\n setNodeStatus({});\n setEdgeStatus({});\n setFallbackStarts({});\n errorRunsRef.current = {};\n }\n });\n\n wb.refreshValidation();\n\n return () => {\n offRunnerValue();\n offRunnerError();\n offRunnerInvalidate();\n offRunnerStats();\n offWbGraphChanged();\n offWbGraphUiChanged();\n offWbValidationChanged();\n offWbError();\n offWbAddNode();\n offWbGraphChangedForUpdate();\n offWbdSetValidation();\n offWbSelectionChanged();\n offRunnerRegistry();\n offRunnerTransport();\n };\n }, [runner, wb, setRegistry]);\n\n const isRunning = useCallback(() => runner.isRunning(), [runner]);\n const engineKind = useCallback(() => runner.getRunningEngine(), [runner]);\n const start = useCallback(\n (engine: EngineKind) => {\n try {\n runner.launch(wb.export(), { engine });\n } catch {}\n },\n [runner, wb]\n );\n const stop = useCallback(() => runner.stop(), [runner]);\n const step = useCallback(() => runner.step(), [runner]);\n const flush = useCallback(() => runner.flush(), [runner]);\n\n const validationByNode = useMemo(() => {\n const inputs: Record<string, HandleIssue[]> = {};\n const outputs: Record<string, HandleIssue[]> = {};\n const issues: Record<string, ValidationIssue[]> = {};\n if (!validation) return { inputs, outputs, issues };\n for (const is of validation.issues ?? []) {\n const d = is.data;\n const level = is.level;\n const code = String(is.code ?? \"\");\n const message = String(is.message ?? code);\n if (!d) continue;\n if (d.nodeId) {\n if (d.input) {\n const arr = inputs[d.nodeId] ?? (inputs[d.nodeId] = []);\n arr.push({ handle: String(d.input), level, message, code });\n const nodeArr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n nodeArr.push(is);\n }\n if (d.output) {\n const arr = outputs[d.nodeId] ?? (outputs[d.nodeId] = []);\n arr.push({ handle: String(d.output), level, message, code });\n const nodeArr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n nodeArr.push(is);\n }\n if (!d.input && !d.output) {\n const arr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n arr.push(is);\n }\n }\n }\n return { inputs, outputs, issues };\n }, [validation]);\n\n const validationGlobal = useMemo(() => {\n const list: ValidationIssue[] = [];\n if (!validation) return list;\n for (const is of validation.issues ?? []) {\n const d = is.data;\n if (!d || (!d.nodeId && !d.edgeId)) {\n list.push(is);\n }\n }\n return list;\n }, [validation]);\n\n const validationByEdge = useMemo(() => {\n const errors: Record<string, boolean> = {};\n const issues: Record<string, ValidationIssue[]> = {};\n if (!validation) return { errors, issues };\n for (const is of validation.issues ?? []) {\n const d = is.data;\n const level = is.level;\n if (d?.edgeId) {\n if (level === \"error\") errors[d.edgeId] = true;\n const arr = issues[d.edgeId] ?? (issues[d.edgeId] = []);\n arr.push(is);\n }\n }\n return { errors, issues };\n }, [validation]);\n\n const value = useMemo<WorkbenchContextValue>(\n () => ({\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n uiVersion,\n }),\n [\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n wb,\n runner,\n uiVersion,\n ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { CopyIcon, TrashIcon } from \"@phosphor-icons/react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport { summarizeDeep } from \"./value\";\n\nexport function DebugEvents({\n autoScroll,\n onAutoScrollChange,\n hideWorkbench,\n onHideWorkbenchChange,\n}: {\n autoScroll: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange?: (v: boolean) => void;\n}) {\n const { events, clearEvents } = useWorkbenchContext();\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [copied, setCopied] = useState(false);\n\n const rows = useMemo(() => {\n const filtered = hideWorkbench\n ? events.filter((e) => e.source !== \"workbench\")\n : events;\n return filtered.slice().reverse();\n }, [events, hideWorkbench]);\n\n useEffect(() => {\n if (!autoScroll) return;\n const el = scrollRef.current;\n if (!el) return;\n el.scrollTop = el.scrollHeight;\n }, [rows, autoScroll]);\n\n const renderPayload = (v: unknown): string => {\n try {\n const summarized = summarizeDeep(v);\n return JSON.stringify(summarized, null, 0);\n } catch {\n return String(v);\n }\n };\n\n const handleCopyLogs = async () => {\n try {\n const formattedEvents = rows.map((ev) => ({\n no: ev.no,\n at: ev.at,\n source: ev.source,\n type: ev.type,\n payload: summarizeDeep(ev.payload),\n }));\n const jsonString = JSON.stringify(formattedEvents, null, 2);\n await navigator.clipboard.writeText(jsonString);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy logs:\", err);\n }\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0\">\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"font-semibold\">Events</div>\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-1 text-xs text-gray-700\">\n <input\n type=\"checkbox\"\n checked={hideWorkbench}\n onChange={(e) => onHideWorkbenchChange?.(e.target.checked)}\n />\n <span>Hide workbench</span>\n </label>\n <label className=\"flex items-center gap-1 text-xs text-gray-700\">\n <input\n type=\"checkbox\"\n checked={autoScroll}\n onChange={(e) => onAutoScrollChange?.(e.target.checked)}\n />\n <span>Auto scroll</span>\n </label>\n <button\n onClick={handleCopyLogs}\n className=\"p-2 border border-gray-300 rounded flex items-center justify-center\"\n title={copied ? \"Copied!\" : \"Copy logs as formatted JSON\"}\n >\n <CopyIcon size={14} />\n </button>\n <button\n onClick={clearEvents}\n className=\"p-2 border border-gray-300 rounded flex items-center justify-center\"\n title=\"Clear all events\"\n >\n <TrashIcon size={14} />\n </button>\n </div>\n </div>\n <div\n ref={scrollRef}\n className=\"flex-1 overflow-auto text-[11px] leading-4 divide-y divide-gray-200\"\n >\n {rows.map((ev) => (\n <div\n key={`${ev.at}:${ev.no}`}\n className=\"opacity-85 odd:bg-gray-50 px-2 py-1\"\n >\n <div className=\"flex items-baseline gap-2\">\n <span className=\"w-12 shrink-0 text-right text-gray-500 select-none\">\n {ev.no}\n </span>\n <span className=\"text-gray-500\">\n {new Date(ev.at).toLocaleTimeString()} · {ev.source}:{ev.type}\n </span>\n </div>\n <pre className=\"m-0 whitespace-pre-wrap ml-12\">\n {renderPayload(ev.payload)}\n </pre>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { isInputPrivate, getInputTypeId } from \"@bian-womp/spark-graph\";\nimport { XIcon, CopyIcon, XCircleIcon } from \"@phosphor-icons/react\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport { DebugEvents } from \"./DebugEvents\";\nimport { computeEffectiveHandles } from \"./layout\";\n\nexport function Inspector({\n debug,\n autoScroll,\n hideWorkbench,\n onAutoScrollChange,\n onHideWorkbenchChange,\n toString,\n contextPanel,\n setInput,\n}: {\n debug?: boolean;\n autoScroll?: boolean;\n hideWorkbench?: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n onHideWorkbenchChange?: (v: boolean) => void;\n toString: (typeId?: string, value?: unknown) => string;\n contextPanel?: React.ReactNode;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const safeToString = (typeId?: string, value?: unknown) => {\n try {\n if (typeof toString === \"function\") {\n return toString(typeId, value);\n }\n return String(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n };\n\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\n updateEdgeType,\n systemErrors,\n registryErrors,\n inputValidationErrors,\n clearSystemErrors,\n clearRegistryErrors,\n clearInputValidationErrors,\n removeSystemError,\n removeRegistryError,\n removeInputValidationError,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = def.edges.find((e) => e.id === selectedEdgeId);\n\n // Use computeEffectiveHandles to merge registry defaults with dynamically resolved handles\n const effectiveHandles = selectedNode\n ? computeEffectiveHandles(selectedNode, registry)\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n const inputHandles = Object.entries(effectiveHandles.inputs)\n .filter(([k]) => !isInputPrivate(effectiveHandles.inputs, k))\n .map(([k]) => k);\n const outputHandles = Object.keys(effectiveHandles.outputs);\n const nodeInputsRaw = selectedNodeId ? inputsMap[selectedNodeId] ?? {} : {};\n const nodeInputsDefaults = selectedNodeId\n ? inputDefaultsMap[selectedNodeId] ?? {}\n : {};\n // Keep defaults separate for placeholder use (don't merge into nodeInputs)\n const nodeInputs = nodeInputsRaw;\n const nodeOutputs = selectedNodeId ? outputsMap[selectedNodeId] ?? {} : {};\n\n // Helper to truncate long values\n const truncateValue = (str: string, maxLen: number = 50): string => {\n if (str.length <= maxLen) return str;\n const start = Math.floor(maxLen / 2) - 5;\n const end = str.length - Math.floor(maxLen / 2) + 5;\n return `${str.slice(0, start)}...${str.slice(end)}`;\n };\n\n // Helper to copy to clipboard\n const copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback for older browsers\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n });\n };\n const selectedNodeStatus = selectedNodeId\n ? nodeStatus?.[selectedNodeId]\n : undefined;\n const selectedNodeValidation = selectedNodeId\n ? nodeValidationIssues?.[selectedNodeId] ?? []\n : [];\n const selectedEdgeValidation = selectedEdge\n ? edgeValidationIssues?.[selectedEdge.id] ?? []\n : [];\n const selectedNodeHandleValidation = selectedNodeId\n ? {\n inputs: nodeValidationHandles?.inputs?.[selectedNodeId] ?? [],\n outputs: nodeValidationHandles?.outputs?.[selectedNodeId] ?? [],\n }\n : { inputs: [], outputs: [] };\n\n // Render edge status indicator\n const renderEdgeStatus = useCallback(() => {\n if (!selectedEdge) return null;\n const status = edgeStatus?.[selectedEdge.id];\n if (status?.activeRuns > 0) {\n return (\n <div className=\"mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1\">\n <div className=\"font-semibold\">Running ({status.activeRuns})</div>\n <div className=\"text-[10px] text-blue-600 mt-1\">\n Note: Edge runIds are not available in stats events\n </div>\n </div>\n );\n }\n return null;\n }, [selectedEdge, edgeStatus]);\n\n // Render linked input display value\n const renderLinkedInputDisplay = useCallback(\n (typeId: string | undefined, current: unknown) => {\n const displayStr = safeToString(typeId, current);\n const isLong = displayStr.length > 50;\n const truncated = isLong ? truncateValue(displayStr) : displayStr;\n return (\n <div className=\"flex items-center gap-1\">\n <span className=\"truncate\">{truncated}</span>\n {isLong && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded\"\n onClick={() => copyToClipboard(displayStr)}\n title=\"Copy full value\"\n >\n <CopyIcon size={14} />\n </button>\n )}\n </div>\n );\n },\n [safeToString, truncateValue, copyToClipboard]\n );\n\n // Render output validation issues badge\n const renderOutputValidationBadge = useCallback(\n (handle: string) => {\n const outIssues = selectedNodeHandleValidation.outputs.filter(\n (m) => m.handle === handle\n );\n if (outIssues.length === 0) return null;\n const outErr = outIssues.some((m) => m.level === \"error\");\n const outTitle = outIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n return (\n <IssueBadge\n level={outErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={outTitle}\n />\n );\n },\n [selectedNodeHandleValidation]\n );\n\n // Render output display value\n const renderOutputDisplay = useCallback(\n (outputValue: unknown, effectiveHandle: string | string[] | undefined) => {\n const { typeId, value } = resolveOutputDisplay(\n outputValue,\n effectiveHandle\n );\n const displayStr = safeToString(typeId, value);\n const isLong = displayStr.length > 50;\n const truncated = isLong ? truncateValue(displayStr) : displayStr;\n return (\n <div className=\"flex items-center gap-1\">\n <span className=\"truncate\">{truncated}</span>\n {isLong && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded\"\n onClick={() => copyToClipboard(displayStr)}\n title=\"Copy full value\"\n >\n <CopyIcon size={14} />\n </button>\n )}\n </div>\n );\n },\n [safeToString, truncateValue, copyToClipboard]\n );\n\n // Local drafts and originals for commit-on-blur/enter behavior\n const [drafts, setDrafts] = useState<Record<string, string>>({});\n const [originals, setOriginals] = useState<Record<string, string>>({});\n\n // Initialize drafts from current inputs whenever selection or valuesTick change,\n // but do not clobber fields currently being edited (dirty drafts)\n useEffect(() => {\n const shallowEqual = (\n a: Record<string, string>,\n b: Record<string, string>\n ) => {\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n for (const k of ak) if (a[k] !== b[k]) return false;\n return true;\n };\n\n if (!selectedNodeId) {\n if (Object.keys(drafts).length || Object.keys(originals).length) {\n setDrafts({});\n setOriginals({});\n }\n return;\n }\n const handles = Object.keys(effectiveHandles.inputs);\n\n const nextDrafts: Record<string, string> = { ...drafts };\n const nextOriginals: Record<string, string> = { ...originals };\n for (const h of handles) {\n const typeId = getInputTypeId(effectiveHandles.inputs, h);\n const current = nodeInputs[h];\n const display = safeToString(typeId, current);\n const wasOriginal = originals[h];\n const isDirty =\n drafts[h] !== undefined &&\n wasOriginal !== undefined &&\n drafts[h] !== wasOriginal;\n if (!isDirty) {\n nextDrafts[h] = display;\n nextOriginals[h] = display;\n }\n }\n if (!shallowEqual(drafts, nextDrafts)) setDrafts(nextDrafts);\n if (!shallowEqual(originals, nextOriginals)) setOriginals(nextOriginals);\n }, [selectedNodeId, selectedNode, registry, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\n const { wb } = useWorkbenchContext();\n const deleteEdgeById = (edgeId?: string) => {\n if (!edgeId) return;\n try {\n wb.disconnect(edgeId);\n } catch {}\n };\n\n return (\n <div\n className={`${widthClass} border-l border-gray-300 p-3 flex flex-col h-full min-h-0 overflow-auto`}\n >\n <div className=\"flex-1 overflow-auto\">\n {contextPanel && <div className=\"mb-2\">{contextPanel}</div>}\n\n {/* Input Validation Error Banners */}\n {inputValidationErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {inputValidationErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">Input Validation Error</div>\n <div className=\"break-words\">{err.message}</div>\n <div className=\"text-[10px] text-red-600 mt-1\">\n {err.nodeId}.{err.handle} (type: {err.typeId})\n </div>\n </div>\n <button\n className=\"text-red-500 hover:text-red-700 text-[10px] px-1\"\n onClick={() => removeInputValidationError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {inputValidationErrors.length > 1 && (\n <button\n className=\"text-xs text-red-600 hover:text-red-800 underline\"\n onClick={clearInputValidationErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n {/* System Error Banners */}\n {systemErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {systemErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">\n {err.code ? `Error ${err.code}` : \"Error\"}\n </div>\n <div className=\"break-words\">{err.message}</div>\n </div>\n <button\n className=\"text-red-500 hover:text-red-700 text-[10px] px-1\"\n onClick={() => removeSystemError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {systemErrors.length > 1 && (\n <button\n className=\"text-xs text-red-600 hover:text-red-800 underline\"\n onClick={clearSystemErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n {registryErrors.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {registryErrors.map((err, i) => (\n <div\n key={i}\n className=\"text-xs text-amber-700 bg-amber-50 border border-amber-200 rounded px-2 py-1 flex items-start justify-between gap-2\"\n >\n <div className=\"flex-1\">\n <div className=\"font-semibold\">Registry Error</div>\n <div className=\"break-words\">{err.message}</div>\n {err.attempt && err.maxAttempts && (\n <div className=\"text-[10px] text-amber-600 mt-1\">\n Attempt {err.attempt} of {err.maxAttempts}\n </div>\n )}\n </div>\n <button\n className=\"text-amber-500 hover:text-amber-700 text-[10px] px-1\"\n onClick={() => removeRegistryError(i)}\n title=\"Dismiss\"\n >\n <XIcon size={10} />\n </button>\n </div>\n ))}\n {registryErrors.length > 1 && (\n <button\n className=\"text-xs text-amber-600 hover:text-amber-800 underline\"\n onClick={clearRegistryErrors}\n >\n Clear all\n </button>\n )}\n </div>\n )}\n\n <div className=\"font-semibold mb-2\">Inspector</div>\n <div className=\"text-xs text-gray-500 mb-2\">\n valuesTick: {valuesTick}\n </div>\n <div className=\"flex-1\">\n {!selectedNode && !selectedEdge ? (\n <div>\n <div className=\"text-gray-500\">Select a node or edge.</div>\n {globalValidationIssues && globalValidationIssues.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {globalValidationIssues.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n {!!m.data?.edgeId && (\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(m.data?.edgeId);\n }}\n title=\"Delete referenced edge\"\n >\n Delete edge\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : selectedEdge ? (\n <div>\n <div className=\"mb-2\">\n <div>Edge: {selectedEdge.id}</div>\n <div>\n {selectedEdge.source.nodeId}.{selectedEdge.source.handle} →{\" \"}\n {selectedEdge.target.nodeId}.{selectedEdge.target.handle}\n </div>\n {renderEdgeStatus()}\n <div className=\"mt-1\">\n <button\n className=\"text-xs px-2 py-1 border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </div>\n <div className=\"flex items-center gap-2 mt-1\">\n <label className=\"w-20 flex flex-col\">\n <span>Type</span>\n <span className=\"text-gray-500 text-[11px]\">\n DataTypeId\n </span>\n </label>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n value={selectedEdge.typeId ?? \"\"}\n onChange={(e) => {\n const v = e.target.value;\n const next = v === \"\" ? undefined : v;\n updateEdgeType(selectedEdge.id, next);\n }}\n >\n <option value=\"\">(infer from source)</option>\n {Array.from(registry.types.keys()).map((tid) => (\n <option key={tid} value={tid}>\n {tid}\n </option>\n ))}\n </select>\n </div>\n </div>\n {selectedEdgeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedEdgeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div>\n {selectedNode && (\n <div className=\"mb-2\">\n <div>Node: {selectedNode.nodeId}</div>\n <div>Type: {selectedNode.typeId}</div>\n {!!selectedNodeStatus?.activeRuns &&\n selectedNodeStatus.activeRuns > 0 && (\n <div className=\"mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1\">\n <div className=\"font-semibold\">\n Running ({selectedNodeStatus.activeRuns})\n </div>\n {selectedNodeStatus.activeRunIds &&\n selectedNodeStatus.activeRunIds.length > 0 ? (\n <div className=\"mt-1\">\n <div className=\"text-[10px] text-blue-600\">\n RunIds:\n </div>\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {selectedNodeStatus.activeRunIds.map(\n (runId, idx) => (\n <span\n key={idx}\n className=\"text-[10px] px-1.5 py-0.5 bg-blue-100 border border-blue-300 rounded font-mono\"\n >\n {runId}\n </span>\n )\n )}\n </div>\n </div>\n ) : (\n <div className=\"text-[10px] text-blue-600 mt-1\">\n RunIds not available (some runs may have started\n without runId)\n </div>\n )}\n </div>\n )}\n {!!selectedNodeStatus?.lastError && (\n <div className=\"mt-2 text-sm text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 break-words\">\n {String(\n (selectedNodeStatus.lastError as any)?.message ??\n selectedNodeStatus.lastError\n )}\n </div>\n )}\n </div>\n )}\n <div className=\"mb-2\">\n <div className=\"font-semibold mb-1\">Inputs</div>\n {inputHandles.length === 0 ? (\n <div className=\"text-gray-500\">No inputs</div>\n ) : (\n inputHandles.map((h) => {\n const typeId = getInputTypeId(effectiveHandles.inputs, h);\n const isLinked = def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const inbound = new Set(\n def.edges\n .filter(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n )\n .map((e) => e.target.handle)\n );\n const hasDefault =\n !inbound.has(h) && nodeInputsDefaults[h] !== undefined;\n const defaultStr = hasDefault\n ? safeToString(typeId, nodeInputsDefaults[h])\n : undefined;\n const commonProps = {\n style: { flex: 1 },\n disabled: isLinked,\n };\n const current = nodeInputs[h];\n const hasValue = current !== undefined && current !== null;\n const value = drafts[h] ?? safeToString(typeId, current);\n const displayValue = value;\n const placeholder = hasDefault ? defaultStr : undefined;\n const onChangeText = (text: string) =>\n setDrafts((d) => ({ ...d, [h]: text }));\n const commit = () => {\n const draft = drafts[h];\n if (draft === undefined) return;\n\n // Only commit if draft differs from current value\n const currentDisplay = safeToString(typeId, current);\n if (draft === currentDisplay) {\n // No change, just sync originals without calling setInput\n setOriginals((o) => ({ ...o, [h]: draft }));\n return;\n }\n\n setInput(h, draft);\n setOriginals((o) => ({ ...o, [h]: draft }));\n };\n const revert = () => {\n const orig =\n originals[h] ?? safeToString(typeId, current);\n setDrafts((d) => ({ ...d, [h]: orig }));\n };\n const clearInput = () => {\n setInput(h, undefined);\n setDrafts((d) => ({ ...d, [h]: \"\" }));\n setOriginals((o) => ({ ...o, [h]: \"\" }));\n };\n const isEnum = typeId?.startsWith(\"enum:\");\n const inIssues = selectedNodeHandleValidation.inputs.filter(\n (m) => m.handle === h\n );\n const hasValidation = inIssues.length > 0;\n const hasErr = inIssues.some((m) => m.level === \"error\");\n const title = inIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n return (\n <div key={h} className=\"flex items-center gap-2 mb-1\">\n <label className=\"w-32 flex flex-col\">\n <span>{prettyHandle(h)}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {typeId}\n </span>\n </label>\n {hasValidation && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={title}\n />\n )}\n {isEnum ? (\n <div className=\"flex items-center gap-1 flex-1\">\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1\"\n value={\n current !== undefined && current !== null\n ? String(current)\n : \"\"\n }\n onChange={(e) => {\n const val = e.target.value;\n const raw =\n val === \"\" ? undefined : Number(val);\n setInput(h, raw);\n // keep drafts/originals in sync with label for display elsewhere\n const display = safeToString(typeId, raw);\n setDrafts((d) => ({ ...d, [h]: display }));\n setOriginals((o) => ({ ...o, [h]: display }));\n }}\n {...commonProps}\n >\n <option value=\"\">\n {placeholder\n ? `Default: ${placeholder}`\n : \"(select)\"}\n </option>\n {registry.enums\n .get(typeId!)\n ?.options.map((opt) => (\n <option\n key={opt.value}\n value={String(opt.value)}\n >\n {opt.label}\n </option>\n ))}\n </select>\n {hasValue && !isLinked && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700\"\n onClick={clearInput}\n title=\"Clear input value\"\n >\n <XCircleIcon size={16} />\n </button>\n )}\n </div>\n ) : isLinked ? (\n <div className=\"flex items-center gap-1 flex-1\">\n <div className=\"flex-1 min-w-0\">\n {renderLinkedInputDisplay(typeId, current)}\n </div>\n </div>\n ) : (\n <div className=\"flex items-center gap-1 flex-1\">\n <input\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1\"\n placeholder={\n placeholder\n ? `Default: ${placeholder}`\n : undefined\n }\n value={displayValue}\n onChange={(e) => onChangeText(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n if (e.key === \"Escape\") revert();\n }}\n {...commonProps}\n />\n {hasValue && !isLinked && (\n <button\n className=\"flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700\"\n onClick={clearInput}\n title=\"Clear input value\"\n >\n <XCircleIcon size={16} />\n </button>\n )}\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n <div>\n <div className=\"font-semibold mb-1\">Outputs</div>\n {outputHandles.length === 0 ? (\n <div className=\"text-gray-500\">No outputs</div>\n ) : (\n outputHandles.map((h) => (\n <div key={h} className=\"flex items-center gap-2 mb-1\">\n <label className=\"w-20 flex flex-col\">\n <span>{prettyHandle(h)}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {outputTypesMap[selectedNodeId!]?.[h] ?? \"\"}\n </span>\n </label>\n <div className=\"flex-1 min-w-0\">\n {renderOutputDisplay(\n nodeOutputs[h],\n effectiveHandles.outputs[h]\n )}\n </div>\n {renderOutputValidationBadge(h)}\n </div>\n ))\n )}\n </div>\n {selectedNodeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedNodeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n {!!m.data?.edgeId && (\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(m.data?.edgeId);\n }}\n title=\"Delete referenced edge\"\n >\n Delete edge\n </button>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n {debug && (\n <div className=\"mt-3 flex-none min-h-0 h-[50%]\">\n <DebugEvents\n autoScroll={!!autoScroll}\n hideWorkbench={!!hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n />\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport type { RFNodeData } from \"./mapping\";\n\ntype HandleKind = \"input\" | \"output\";\n\nfunction NodeHandleItem({\n kind,\n id,\n type,\n position,\n y,\n isConnectable,\n className,\n labelClassName,\n renderLabel,\n}: {\n kind: HandleKind;\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y?: number;\n isConnectable: boolean;\n className: string;\n labelClassName: string;\n renderLabel?: (args: { kind: HandleKind; id: string }) => React.ReactNode;\n}) {\n return (\n <>\n <Handle\n id={id}\n type={type}\n position={position}\n isConnectable={isConnectable}\n className={className}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={\n labelClassName + (kind === \"input\" ? \" left-2\" : \" right-2\")\n }\n style={{\n top: (y ?? 0) - 8,\n ...(kind === \"input\"\n ? { right: \"50%\" }\n : { left: \"50%\", textAlign: \"right\" }),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind, id })}\n </div>\n )}\n </>\n );\n}\n\nexport function NodeHandles({\n data,\n isConnectable,\n getClassName,\n renderLabel,\n labelClassName = \"absolute text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\",\n}: {\n data: RFNodeData;\n isConnectable: boolean;\n getClassName?: (args: {\n kind: \"input\" | \"output\";\n id: string;\n type: \"source\" | \"target\";\n }) => string | undefined;\n renderLabel?: (args: {\n kind: \"input\" | \"output\";\n id: string;\n }) => React.ReactNode;\n labelClassName?: string;\n}) {\n const layout = data.handleLayout ?? [];\n const byId = React.useMemo(() => {\n const m = new Map<\n string,\n {\n position: Position;\n y: number;\n type: \"source\" | \"target\";\n missing?: boolean;\n }\n >();\n for (const h of layout) {\n // Prefer namespaced key to disambiguate inputs/outputs that share id\n m.set(`${h.type}:${h.id}`, {\n position: h.position,\n y: h.y,\n type: h.type,\n missing: h.missing,\n });\n // Back-compat: also store by id-only if not already set\n if (!m.has(h.id))\n m.set(h.id, {\n position: h.position,\n y: h.y,\n type: h.type,\n missing: h.missing,\n });\n }\n return m;\n }, [layout]);\n\n const inputIds = React.useMemo(\n () => new Set((data.inputHandles ?? []).map((h) => h.id)),\n [data.inputHandles]\n );\n const outputIds = React.useMemo(\n () => new Set((data.outputHandles ?? []).map((h) => h.id)),\n [data.outputHandles]\n );\n const missingInputs = React.useMemo(\n () =>\n (layout || []).filter(\n (h) => h.type === \"target\" && (!inputIds.has(h.id) || h.missing)\n ),\n [layout, inputIds]\n );\n const missingOutputs = React.useMemo(\n () =>\n (layout || []).filter(\n (h) => h.type === \"source\" && (!outputIds.has(h.id) || h.missing)\n ),\n [layout, outputIds]\n );\n\n return (\n <>\n {(data.inputHandles ?? []).map((h) => {\n const placed = byId.get(`target:${h.id}`) ?? byId.get(h.id);\n const position = placed?.position ?? Position.Left;\n const y = placed?.y;\n const cls =\n getClassName?.({ kind: \"input\", id: h.id, type: \"target\" }) ?? \"\";\n return (\n <NodeHandleItem\n key={h.id}\n kind=\"input\"\n id={h.id}\n type=\"target\"\n position={position}\n y={y}\n isConnectable={isConnectable}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing input handles (rendered in yellow) */}\n {missingInputs.map((h) => {\n const key = `missing-input:${h.id}`;\n const position = h.position ?? Position.Left;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"input\"\n id={h.id}\n type=\"target\"\n position={position}\n y={y}\n isConnectable={false}\n className={`${cls} wb-nodrag wb-nowheel`}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {(data.outputHandles ?? []).map((h) => {\n const placed = byId.get(`source:${h.id}`) ?? byId.get(h.id);\n const position = placed?.position ?? Position.Right;\n const y = placed?.y;\n const cls =\n getClassName?.({ kind: \"output\", id: h.id, type: \"source\" }) ?? \"\";\n return (\n <NodeHandleItem\n key={h.id}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={isConnectable}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing output handles (rendered in yellow) */}\n {missingOutputs.map((h) => {\n const key = `missing-output:${h.id}`;\n const position = h.position ?? Position.Right;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 !rounded-none wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={false}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n </>\n );\n}\n\nexport default NodeHandles;\n","import React from \"react\";\nimport {\n useUpdateNodeInternals,\n type NodeProps,\n type Node,\n} from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { ArrowClockwiseIcon } from \"@phosphor-icons/react\";\nimport NodeHandles from \"./NodeHandles\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport {\n getNodeBorderClassNames,\n getHandleClassName,\n type RFNodeData,\n} from \"./mapping\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<Node<RFNodeData>>) {\n const updateNodeInternals = useUpdateNodeInternals();\n const { typeId, showValues } = data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n React.useEffect(() => {\n updateNodeInternals(id);\n }, [\n id,\n inputEntries.length,\n outputEntries.length,\n showValues,\n updateNodeInternals,\n ]);\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const containerBorder = getNodeBorderClassNames({\n selected,\n status,\n validation,\n });\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/50 !dark:bg-stone-900\",\n containerBorder\n )}\n style={{\n position: \"relative\",\n minWidth:\n typeof data.renderWidth === \"number\" ? data.renderWidth : undefined,\n minHeight:\n typeof data.renderHeight === \"number\" ? data.renderHeight : undefined,\n }}\n >\n <DefaultNodeHeader\n id={id}\n title={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n\nexport function DefaultNodeHeader({\n id,\n title,\n validation,\n right,\n showId,\n onInvalidate,\n}: {\n id: string;\n title: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n onInvalidate?: () => void;\n}) {\n const ctx = useWorkbenchContext();\n const handleInvalidate = React.useCallback(() => {\n try {\n if (onInvalidate) return onInvalidate();\n const kind = ctx.engineKind?.();\n if (kind === \"pull\") ctx.runner.computeNode(id);\n else ctx.triggerExternal?.(id, { type: \"invalidate\" });\n } catch {}\n }, [ctx, id, onInvalidate]);\n\n return (\n <div\n className=\"flex items-center justify-center px-2 border-b border-solid border-gray-500 dark:border-gray-400 text-gray-600 dark:text-gray-300\"\n style={{\n maxHeight: NODE_HEADER_HEIGHT_PX,\n minHeight: NODE_HEADER_HEIGHT_PX,\n }}\n >\n <strong\n className=\"flex-1 h-full text-sm\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n >\n {title}\n </strong>\n <div className=\"flex items-center gap-1\">\n {/* Invalidate button */}\n <button\n className=\"w-4 h-4 border border-gray-400 rounded text-[10px] leading-3 flex items-center justify-center\"\n title=\"Invalidate and re-run\"\n onClick={(e) => {\n e.stopPropagation();\n handleInvalidate();\n }}\n >\n <ArrowClockwiseIcon size={10} />\n </button>\n {right}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n {showId && <span className=\"text-[10px] opacity-70\">({id})</span>}\n </div>\n </div>\n );\n}\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<Node<RFNodeData>>, \"data\" | \"isConnectable\">) {\n const { showValues, inputValues, inputDefaults, outputValues, toString } =\n data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n const isRunning = !!status.activeRuns;\n const pct = Math.round(\n Math.max(0, Math.min(1, Number(status.progress) || 0)) * 100\n );\n\n return (\n <>\n <div\n className={cx(\n \"h-px\",\n (isRunning || pct > 0) && \"bg-blue-200 dark:bg-blue-900\"\n )}\n >\n <div\n className={cx(\n \"h-px transition-all\",\n (isRunning || pct > 0) && \"bg-blue-500\"\n )}\n style={{ width: isRunning || pct > 0 ? `${pct}%` : 0 }}\n />\n </div>\n\n <NodeHandles\n data={data}\n isConnectable={isConnectable}\n getClassName={({ kind, id }) =>\n getHandleClassName({\n kind,\n id,\n validation,\n inputValues,\n outputValues,\n inputDefaults,\n inputConnected: data.inputConnected,\n })\n }\n renderLabel={({ kind, id: handleId }) => {\n const entries = kind === \"input\" ? inputEntries : outputEntries;\n const entry = entries.find((e) => e.id === handleId);\n if (!entry) return prettyHandle(handleId);\n const vIssues = (\n kind === \"input\" ? validation.inputs : validation.outputs\n ).filter((v) => v.handle === handleId);\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n const title = vIssues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \");\n\n const valueText = (() => {\n if (!showValues) return undefined;\n if (kind === \"input\") {\n const value = inputValues?.[entry.id];\n const isDefault =\n value !== undefined &&\n inputDefaults?.[entry.id] !== undefined &&\n JSON.stringify(value) ===\n JSON.stringify(inputDefaults[entry.id]);\n const txt = toString(entry.typeId, value);\n const str = typeof txt === \"string\" ? txt : String(txt);\n return { text: str, isDefault };\n }\n const resolved = resolveOutputDisplay(\n outputValues?.[entry.id],\n entry.typeId\n );\n const txt = toString(resolved.typeId, resolved.value);\n return {\n text: typeof txt === \"string\" ? txt : String(txt),\n isDefault: false,\n };\n })();\n\n return (\n <span\n className={`flex items-center gap-1 w-full ${\n valueText?.isDefault ? \"text-gray-400\" : \"\"\n }`}\n >\n {kind === \"output\" ? (\n <>\n {valueText !== undefined ? (\n <span\n className=\"opacity-60 truncate pl-1\"\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText.text}\n </span>\n ) : (\n <span style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }} />\n )}\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n {valueText !== undefined && (\n <span\n className={`truncate pr-1 ${\n valueText.isDefault ? \"text-gray-400\" : \"opacity-60\"\n }`}\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText.text}\n </span>\n )}\n </>\n )}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"shrink-0\"\n title={title}\n />\n )}\n </span>\n );\n }}\n />\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport type { DefaultContextMenuProps } from \"./context/ContextMenuHandlers\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n handlers,\n registry,\n nodeIds,\n}: DefaultContextMenuProps) {\n const rf = useReactFlow();\n const [query, setQuery] = useState(\"\");\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? nodeIds.filter((id) => id.toLowerCase().includes(q))\n : nodeIds;\n\n type Tree = { __self?: string; __children: Record<string, Tree> };\n const root: Tree = { __children: {} };\n for (const id of filteredIds) {\n const parts = id.split(\".\");\n let node = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n node.__children[key] = node.__children[key] || { __children: {} };\n node = node.__children[key];\n if (i === parts.length - 1) node.__self = id;\n }\n }\n const totalCount = filteredIds.length;\n\n // Ref for focus/outside click handling\n const ref = useRef<HTMLDivElement>(null);\n\n // Close on outside click and on ESC\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (!ref.current) return;\n if (!ref.current.contains(e.target as Node)) handlers.onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handlers.onClose();\n };\n window.addEventListener(\"mousedown\", onDown, true);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"mousedown\", onDown, true);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open, handlers]);\n\n // Focus search input when menu opens\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n }, [open]);\n\n if (!open || !clientPos) return null;\n\n // Clamp menu position to viewport\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16; // rough padding/shadow\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n const handleClick = (typeId: string) => {\n // project() is deprecated; use screenToFlowPosition for screen coordinates\n const p = rf.screenToFlowPosition({ x: clientPos.x, y: clientPos.y });\n handlers.onAddNode(typeId, { position: p });\n handlers.onClose();\n };\n\n const renderTree = (tree: Tree, path: string[] = []) => {\n const entries = Object.entries(tree?.__children ?? {}).sort((a, b) =>\n a[0].localeCompare(b[0])\n );\n return (\n <div>\n {entries.map(([key, child]) => {\n const label = key;\n const hasChildren =\n !!child?.__children && Object.keys(child.__children).length > 0;\n const idKey = [...path, key].join(\".\");\n if (!hasChildren) {\n // Leaf: render only the action button, no group header\n return child.__self ? (\n <button\n key={idKey}\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n ) : null;\n }\n // Group: show label, optional action for id at this level, and children\n return (\n <div key={idKey}>\n <div className=\"px-2 py-1 text-[11px] uppercase tracking-wide text-gray-400\">\n {label}\n </div>\n {child.__self && (\n <button\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n )}\n <div className=\"pl-2 border-l border-gray-200 ml-2\">\n {renderTree(child, [...path, key])}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-none shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Add Node{\" \"}\n <span className=\"text-gray-500 font-normal\">({totalCount})</span>\n </div>\n <div className=\"px-2 pb-1\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter nodes...\"\n className=\"w-full border border-gray-300 px-2 py-1 text-sm outline-none focus:border-gray-400\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n />\n </div>\n <div className=\"max-h-60 overflow-auto\">\n {totalCount > 0 ? (\n renderTree(root)\n ) : (\n <div className=\"px-3 py-2 text-gray-400\">No matches</div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport type { NodeContextMenuProps } from \"./context/ContextMenuHandlers\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n handlers,\n canRunPull,\n bakeableOutputs,\n}: NodeContextMenuProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n // outside click + ESC\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (!ref.current) return;\n if (!ref.current.contains(e.target as Node)) handlers.onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handlers.onClose();\n };\n window.addEventListener(\"mousedown\", onDown, true);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"mousedown\", onDown, true);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open, handlers]);\n\n useEffect(() => {\n if (open) ref.current?.focus();\n }, [open]);\n\n if (!open || !clientPos || !nodeId) return null;\n\n // clamp\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16;\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Node ({nodeId})\n </div>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDelete}\n >\n Delete\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDuplicate}\n >\n Duplicate\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onDuplicateWithEdges}\n >\n Duplicate with edges\n </button>\n {canRunPull && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunPull}\n >\n Run (pull)\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n {bakeableOutputs.length > 0 && (\n <>\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Bake</div>\n {bakeableOutputs.map((h) => (\n <button\n key={h}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={() => handlers.onBake(h)}\n >\n Bake: {h}\n </button>\n ))}\n <div className=\"h-px bg-gray-200 my-1\" />\n </>\n )}\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onCopyId}\n >\n Copy Node ID\n </button>\n </div>\n );\n}\n","import type { Registry } from \"@bian-womp/spark-graph\";\nimport {\n getInputTypeId,\n isTypedOutput,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\nimport type { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type { NodeContextMenuHandlers } from \"./ContextMenuHandlers\";\n\nexport function createNodeContextMenuHandlers(\n nodeId: string,\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n registry: Registry,\n outputsMap: Record<string, Record<string, unknown>>,\n outputTypesMap: Record<string, Record<string, string | undefined>>,\n onClose: () => void\n): NodeContextMenuHandlers {\n const doBake = async (handleId: string) => {\n try {\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n if (!typeId || raw === undefined) return;\n const unwrap = (v: unknown) =>\n isTypedOutput(v) ? getTypedOutputValue(v) : v;\n const coerceIfNeeded = async (\n fromType: string,\n toType: string | undefined,\n value: unknown\n ) => {\n if (!toType || toType === fromType || !runner?.coerce) return value;\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n return value;\n }\n };\n\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n const isArray = typeId.endsWith(\"[]\");\n const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;\n const tArr = isArray ? registry.types.get(typeId) : undefined;\n const tElem = registry.types.get(baseTypeId);\n const singleTarget = !isArray ? tElem?.bakeTarget : undefined;\n const arrTarget = isArray ? tArr?.bakeTarget : undefined;\n const elemTarget = isArray ? tElem?.bakeTarget : undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inType = getInputTypeId(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n wb.addNode(\n {\n typeId: singleTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n },\n { inputs: { [singleTarget.inputHandle]: coerced } }\n );\n return;\n }\n\n if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, arrTarget.inputHandle);\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n wb.addNode(\n {\n typeId: arrTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n },\n { inputs: { [arrTarget.inputHandle]: coerced } }\n );\n return;\n }\n\n if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, elemTarget.inputHandle);\n const src = unwrap(raw);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inType, v))\n );\n const COLS = 4;\n const DX = 180;\n const DY = 160;\n for (let idx = 0; idx < coercedItems.length; idx++) {\n const col = idx % COLS;\n const row = Math.floor(idx / COLS);\n wb.addNode(\n {\n typeId: elemTarget.nodeTypeId,\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n },\n { inputs: { [elemTarget.inputHandle]: coercedItems[idx] } }\n );\n }\n return;\n }\n } catch {}\n };\n\n return {\n onDelete: () => {\n wb.removeNode(nodeId);\n onClose();\n },\n onDuplicate: async () => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n\n const inboundHandles = new Set(\n def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const allInputs = runner.getInputs(def)[nodeId] || {};\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n const newNodeId = wb.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Select the newly duplicated node\n wb.setSelection({\n nodes: [newNodeId],\n edges: [],\n });\n\n onClose();\n },\n onDuplicateWithEdges: async () => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n\n // Get inputs without bindings (literal values only)\n const inputs = runner.getInputs(def)[nodeId] || {};\n\n // Add the duplicated node\n const newNodeId = wb.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Find all incoming edges (edges where target is the original node)\n const incomingEdges = def.edges.filter((e) => e.target.nodeId === nodeId);\n\n // Duplicate each incoming edge to point to the new node\n for (const edge of incomingEdges) {\n wb.connect(\n {\n source: edge.source, // Keep the same source\n target: { nodeId: newNodeId, handle: edge.target.handle }, // Point to new node\n typeId: edge.typeId,\n },\n { dry: true }\n );\n }\n\n // Select the newly duplicated node and edges\n wb.setSelection({\n nodes: [newNodeId],\n edges: [],\n });\n\n onClose();\n },\n onRunPull: async () => {\n try {\n await runner.computeNode(nodeId);\n } catch {}\n onClose();\n },\n onBake: async (handleId: string) => {\n await doBake(handleId);\n onClose();\n },\n onCopyId: async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n },\n onClose,\n };\n}\n\nexport function getBakeableOutputs(\n nodeId: string,\n wb: InMemoryWorkbench,\n registry: Registry,\n outputTypesMap: Record<string, Record<string, string | undefined>>\n): string[] {\n try {\n const def = wb.export();\n const node = def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return [];\n const desc = registry.nodes.get(node.typeId);\n const handles = Object.keys(desc?.outputs || {});\n const out: string[] = [];\n for (const h of handles) {\n const tId = outputTypesMap?.[nodeId]?.[h];\n if (!tId) continue;\n if (tId.endsWith(\"[]\")) {\n const base = tId.slice(0, -2);\n const tArr = registry.types.get(tId);\n const tElem = registry.types.get(base);\n const arrT = tArr?.bakeTarget;\n const elemT = tElem?.bakeTarget;\n if (\n (arrT && registry.nodes.has(arrT.nodeTypeId)) ||\n (elemT && registry.nodes.has(elemT.nodeTypeId))\n )\n out.push(h);\n } else {\n const t = registry.types.get(tId);\n const bt = t?.bakeTarget;\n if (bt && registry.nodes.has(bt.nodeTypeId)) out.push(h);\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n","import React, {\n useMemo,\n useState,\n useRef,\n useImperativeHandle,\n useCallback,\n useEffect,\n} from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport isEqual from \"lodash/isEqual\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { NodeContextMenu } from \"./NodeContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n createNodeContextMenuHandlers,\n getBakeableOutputs,\n} from \"./context/ContextMenuHelpers\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n};\n\nexport const WorkbenchCanvas = React.forwardRef<\n WorkbenchCanvasHandle,\n {\n showValues?: boolean;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n>(({ showValues, toString, toElement, getDefaultNodeSize }, ref) => {\n const {\n wb,\n registry,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n uiVersion,\n runner,\n engineKind,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n const [registryVersion, setRegistryVersion] = useState(0);\n\n // Keep stable references for nodes/edges to avoid unnecessary updates\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\n\n function retainStabilityById<T extends { id: string }>(\n prev: T[],\n next: T[],\n isSame: (a: T, b: T) => boolean\n ): T[] {\n if (prev.length === 0) return next;\n const map = new Map<string, T>();\n for (const p of prev) map.set(p.id, p);\n const out: T[] = new Array(next.length);\n for (let i = 0; i < next.length; i++) {\n const n = next[i];\n const p = map.get(n.id);\n out[i] = p && isSame(p, n) ? p : n;\n }\n return out;\n }\n\n const isSameNode = (a: RFNode, b: RFNode): boolean => {\n // Compare the parts that affect rendering\n const pick = (n: RFNode) => ({\n position: n.position,\n type: n.type,\n selected: n.selected,\n initialWidth: n.initialWidth,\n initialHeight: n.initialHeight,\n data: n.data && {\n typeId: n.data.typeId,\n inputHandles: n.data.inputHandles,\n outputHandles: n.data.outputHandles,\n showValues: n.data.showValues,\n inputValues: n.data.inputValues,\n outputValues: n.data.outputValues,\n status: n.data.status,\n validation: n.data.validation,\n inputConnected: n.data.inputConnected,\n },\n });\n return isEqual(pick(a), pick(b));\n };\n\n const isSameEdge = (a: RFEdge, b: RFEdge): boolean => {\n const pick = (e: RFEdge) => ({\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n selected: e.selected,\n animated: e.animated,\n style: e.style,\n label: e.label,\n type: e.type,\n });\n return isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<any>(null);\n useImperativeHandle(ref, () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView({ padding: 0.2 });\n } catch {}\n },\n }));\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const ui = wb.getUI();\n\n const { nodeTypes, resolveNodeType } = useMemo(() => {\n // Build nodeTypes map using UI extension registry\n const custom = new Map<string, any>(); // Include all types present in registry AND current graph to avoid timing issues\n const def = wb.export();\n const ids = new Set<string>([\n ...Array.from(registry.nodes.keys()),\n ...def.nodes.map((n) => n.typeId),\n ]);\n for (const typeId of ids) {\n const renderer = ui.getNodeRenderer(typeId);\n if (renderer) custom.set(typeId, renderer);\n }\n\n const types: Record<string, any> = {\n \"spark-default\": DefaultNode,\n default: DefaultNode,\n };\n for (const [typeId, comp] of custom.entries()) {\n types[`spark-${typeId}`] = comp;\n }\n\n const resolver = (nodeTypeId: string): string =>\n custom.has(nodeTypeId) ? `spark-${nodeTypeId}` : \"spark-default\";\n\n return { nodeTypes: types, resolveNodeType: resolver };\n // Include uiVersion to recompute when custom renderers are registered\n }, [wb, registry, uiVersion, ui]);\n\n const { nodes, edges } = useMemo(() => {\n const def = wb.export();\n const sel = wb.getSelection();\n // Merge defaults with inputs for node display (defaults shown in lighter gray)\n const inputsWithDefaults: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const nodeInputs = inputsMap[n.nodeId] ?? {};\n const nodeDefaults = inputDefaultsMap[n.nodeId] ?? {};\n const inbound = new Set(\n def.edges\n .filter((e) => e.target.nodeId === n.nodeId)\n .map((e) => e.target.handle)\n );\n const merged: Record<string, unknown> = { ...nodeInputs };\n for (const [h, v] of Object.entries(nodeDefaults)) {\n if (!inbound.has(h) && merged[h] === undefined) {\n merged[h] = v;\n }\n }\n if (Object.keys(merged).length > 0) {\n inputsWithDefaults[n.nodeId] = merged;\n }\n }\n const out = toReactFlow(def, wb.getPositions(), registry, {\n showValues,\n inputs: inputsWithDefaults,\n inputDefaults: inputDefaultsMap,\n outputs: outputsMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(sel.nodes),\n selectedEdgeIds: new Set(sel.edges),\n getDefaultNodeSize,\n ui,\n });\n // Retain references for unchanged items\n const stableNodes = retainStabilityById(\n prevNodesRef.current,\n out.nodes,\n isSameNode\n );\n const stableEdges = retainStabilityById(\n prevEdgesRef.current,\n out.edges,\n isSameEdge\n );\n // Debug: log updates/additions/removals (use value equality, not reference)\n try {\n const prevNodeIds = new Set(prevNodesRef.current.map((n) => n.id));\n const nextNodeIds = new Set(out.nodes.map((n) => n.id));\n const addedNodeIds = out.nodes\n .filter((n) => !prevNodeIds.has(n.id))\n .map((n) => n.id);\n const removedNodeIds = prevNodesRef.current\n .filter((n) => !nextNodeIds.has(n.id))\n .map((n) => n.id);\n const prevNodeMap = new Map(prevNodesRef.current.map((n) => [n.id, n]));\n const changedNodeIds = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n return p ? !isSameNode(p, n) : false;\n })\n .map((n) => n.id);\n\n // Detect handle updates (ids/length changes) for targeted debug\n const toIds = (arr: unknown): string[] =>\n Array.isArray(arr)\n ? arr\n .map((h: unknown) =>\n h && typeof h === \"object\" && \"id\" in h ? String(h.id) : \"\"\n )\n .filter(Boolean)\n : [];\n const handlesEqual = (a: unknown, b: unknown) => {\n const aIds = toIds(a);\n const bIds = toIds(b);\n if (aIds.length !== bIds.length) return false;\n for (let i = 0; i < aIds.length; i++) {\n if (aIds[i] !== bIds[i]) return false;\n }\n return true;\n };\n const handleChanged = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n if (!p) return false;\n const inChanged = !handlesEqual(\n p.data?.inputHandles,\n n.data?.inputHandles\n );\n const outChanged = !handlesEqual(\n p.data?.outputHandles,\n n.data?.outputHandles\n );\n return inChanged || outChanged;\n })\n .map((n) => n.id);\n\n const prevEdgeIds = new Set(prevEdgesRef.current.map((e) => e.id));\n const nextEdgeIds = new Set(out.edges.map((e) => e.id));\n const addedEdgeIds = out.edges\n .filter((e) => !prevEdgeIds.has(e.id))\n .map((e) => e.id);\n const removedEdgeIds = prevEdgesRef.current\n .filter((e) => !nextEdgeIds.has(e.id))\n .map((e) => e.id);\n const prevEdgeMap = new Map(prevEdgesRef.current.map((e) => [e.id, e]));\n const changedEdgeIds = out.edges\n .filter((e) => {\n const p = prevEdgeMap.get(e.id);\n return p ? !isSameEdge(p, e) : false;\n })\n .map((e) => e.id);\n\n if (\n addedNodeIds.length ||\n removedNodeIds.length ||\n changedNodeIds.length ||\n handleChanged.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] node updates\", {\n added: addedNodeIds,\n removed: removedNodeIds,\n changed: changedNodeIds,\n handleChanged,\n });\n }\n\n if (\n addedEdgeIds.length ||\n removedEdgeIds.length ||\n changedEdgeIds.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] edge updates\", {\n added: addedEdgeIds,\n removed: removedEdgeIds,\n changed: changedEdgeIds,\n });\n }\n } catch {}\n prevNodesRef.current = stableNodes;\n prevEdgesRef.current = stableEdges;\n return { nodes: stableNodes, edges: stableEdges };\n }, [\n showValues,\n inputsMap,\n outputsMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n ]);\n\n const throttled = useThrottledValue({ nodes, edges }, 100);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const [nodeMenuOpen, setNodeMenuOpen] = useState(false);\n const [nodeMenuPos, setNodeMenuPos] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [nodeAtMenu, setNodeAtMenu] = useState<string | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n // Determine if right-clicked over a node by hit-testing selection\n const target = (e.target as HTMLElement)?.closest(\".react-flow__node\");\n if (target) {\n // Resolve node id from data-id attribute React Flow sets\n const nodeId = target.getAttribute(\"data-id\");\n setNodeAtMenu(nodeId);\n setNodeMenuPos({ x: e.clientX, y: e.clientY });\n setNodeMenuOpen(true);\n setMenuOpen(false);\n } else {\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n setNodeMenuOpen(false);\n }\n };\n\n const addNodeAt = useCallback(\n async (\n typeId: string,\n opts: {\n inputs?: Record<string, unknown>;\n position: { x: number; y: number };\n }\n ) =>\n wb.addNode({ typeId, position: opts.position }, { inputs: opts.inputs }),\n [wb]\n );\n\n const onCloseMenu = useCallback(() => {\n setMenuOpen(false);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setNodeMenuOpen(false);\n }, []);\n\n useEffect(() => {\n const off = runner.on(\"registry\", () => {\n setRegistryVersion((v) => v + 1);\n });\n return () => off();\n }, [runner]);\n\n const nodeIds = useMemo(\n () => Array.from(registry.nodes.keys()),\n [registry, registryVersion]\n );\n\n const defaultContextMenuHandlers = useMemo(\n () => ({\n onAddNode: addNodeAt,\n onClose: onCloseMenu,\n }),\n [addNodeAt, onCloseMenu]\n );\n\n const nodeContextMenuHandlers = useMemo(() => {\n if (!nodeAtMenu) return null;\n return createNodeContextMenuHandlers(\n nodeAtMenu,\n wb,\n runner,\n registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu\n );\n }, [\n nodeAtMenu,\n wb,\n runner,\n registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n ]);\n\n const canRunPull = useMemo(\n () => engineKind()?.toString() === \"pull\",\n [engineKind]\n );\n\n const bakeableOutputs = useMemo(() => {\n if (!nodeAtMenu) return [];\n return getBakeableOutputs(nodeAtMenu, wb, registry, outputTypesMap);\n }, [nodeAtMenu, wb, registry, outputTypesMap]);\n\n // Get custom renderers from UI extension registry (reactive to uiVersion changes)\n const {\n BackgroundRenderer,\n MinimapRenderer,\n ControlsRenderer,\n DefaultContextMenuRenderer,\n NodeContextMenuRenderer,\n connectionLineRenderer,\n } = useMemo(() => {\n return {\n BackgroundRenderer: ui.getBackgroundRenderer(),\n MinimapRenderer: ui.getMinimapRenderer(),\n ControlsRenderer: ui.getControlsRenderer(),\n DefaultContextMenuRenderer: ui.getDefaultContextMenuRenderer(),\n NodeContextMenuRenderer: ui.getNodeContextMenuRenderer(),\n connectionLineRenderer: ui.getConnectionLineRenderer(),\n };\n }, [ui, uiVersion]);\n\n const onMoveEnd = useCallback(() => {\n if (rfInstanceRef.current) {\n const viewport = rfInstanceRef.current.getViewport();\n wb.setViewport(\n { x: viewport.x, y: viewport.y, zoom: viewport.zoom },\n { commit: true }\n );\n }\n }, [wb]);\n\n const viewportRef = useRef<{ x: number; y: number; zoom: number } | null>(\n null\n );\n\n useEffect(() => {\n if (!rfInstanceRef.current) return;\n const currentViewport = wb.getViewport();\n if (\n currentViewport &&\n (!viewportRef.current ||\n viewportRef.current.x !== currentViewport.x ||\n viewportRef.current.y !== currentViewport.y ||\n viewportRef.current.zoom !== currentViewport.zoom)\n ) {\n viewportRef.current = currentViewport;\n rfInstanceRef.current.setViewport({\n x: currentViewport.x,\n y: currentViewport.y,\n zoom: currentViewport.zoom,\n });\n }\n });\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlowProvider>\n <ReactFlow\n nodes={throttled.nodes}\n edges={throttled.edges}\n nodeTypes={nodeTypes}\n connectionLineComponent={connectionLineRenderer}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n const savedViewport = wb.getViewport();\n if (savedViewport) {\n viewportRef.current = savedViewport;\n inst.setViewport({\n x: savedViewport.x,\n y: savedViewport.y,\n zoom: savedViewport.zoom,\n });\n }\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onMoveEnd={onMoveEnd}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\n fitView\n >\n {BackgroundRenderer ? (\n <BackgroundRenderer />\n ) : (\n <Background\n id=\"workbench-canvas-background\"\n variant={BackgroundVariant.Dots}\n gap={12}\n size={1}\n />\n )}\n {MinimapRenderer ? <MinimapRenderer /> : <MiniMap />}\n {ControlsRenderer ? <ControlsRenderer /> : <Controls />}\n {DefaultContextMenuRenderer ? (\n <DefaultContextMenuRenderer\n open={menuOpen}\n clientPos={menuPos}\n handlers={defaultContextMenuHandlers}\n registry={registry}\n nodeIds={nodeIds}\n />\n ) : (\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n handlers={defaultContextMenuHandlers}\n registry={registry}\n nodeIds={nodeIds}\n />\n )}\n {!!nodeAtMenu &&\n nodeContextMenuHandlers &&\n (NodeContextMenuRenderer ? (\n <NodeContextMenuRenderer\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n handlers={nodeContextMenuHandlers}\n canRunPull={canRunPull}\n bakeableOutputs={bakeableOutputs}\n />\n ) : (\n <NodeContextMenu\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n handlers={nodeContextMenuHandlers}\n canRunPull={canRunPull}\n bakeableOutputs={bakeableOutputs}\n />\n ))}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n );\n});\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n GraphDefinition,\n EngineKind,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n createAsyncGraphDef,\n createAsyncGraphRegistry,\n createProgressGraphDef,\n createProgressGraphRegistry,\n createValidationGraphDef,\n createValidationGraphRegistry,\n createSimpleGraphDef,\n createSimpleGraphRegistry,\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n getInputTypeId,\n} from \"@bian-womp/spark-graph\";\nimport { type TransportConnectOptions } from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\n ListBulletsIcon,\n BugBeetleIcon,\n TreeStructureIcon,\n DownloadIcon,\n UploadIcon,\n PlayPauseIcon,\n LightningIcon,\n CornersOutIcon,\n} from \"@phosphor-icons/react\";\nimport { computeEffectiveHandles } from \"./layout\";\nimport {\n ExampleDescriptor,\n useWorkbenchContext,\n WorkbenchOverrides,\n} from \"./context/WorkbenchContext\";\nimport { preformatValueForDisplay } from \"./value\";\nimport { WorkbenchProvider } from \"./context/WorkbenchContext.provider\";\nimport { WorkbenchCanvas } from \"./WorkbenchCanvas\";\nimport type { WorkbenchCanvasHandle } from \"./WorkbenchCanvas\";\nimport { Inspector } from \"./Inspector\";\nimport { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { AbstractWorkbench } from \"../core/AbstractWorkbench\";\nimport { DefaultUIExtensionRegistry } from \"../core/ui-extensions\";\nimport { download as downloadUtil, upload as uploadUtil } from \"./load\";\nimport {\n ExecutionBackend,\n ExecutionBackendKind,\n IGraphRunner,\n TransportStatus,\n RemoteExecutionBackend,\n} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\n\n/**\n * Optional backend configuration for remote runners.\n * Allows extensions to pass connection options and custom event handlers.\n */\nexport interface BackendOptions {\n connectOptions?: TransportConnectOptions;\n onCustomEvent?: (event: any) => void;\n}\n\nfunction WorkbenchStudioCanvas({\n setRegistry,\n autoScroll,\n onAutoScrollChange,\n example,\n onExampleChange,\n engine,\n onEngineChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n overrides,\n onInit,\n onChange,\n}: {\n setRegistry: (r: Registry) => void;\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => void;\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n autoScroll: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>,\n augmentRegistry?: (r: Registry) => void\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const effectiveHandles = selectedNode\n ? computeEffectiveHandles(selectedNode, registry)\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\n const isGraphRunning = runner.isRunning();\n const engineKind = runner.getRunningEngine();\n\n // Render Start/Stop button based on transport and runner state\n const renderStartStopButton = useCallback(() => {\n // Check if transport is connecting/retrying\n const isConnecting =\n transportStatus.state === \"connecting\" ||\n transportStatus.state === \"retrying\";\n\n // Only allow Start/Stop when transport is connected or local\n const canControl =\n transportStatus.state === \"connected\" ||\n transportStatus.state === \"local\";\n\n if (isConnecting) {\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-gray-500 border-gray-400 flex items-center gap-1 disabled:opacity-50\"\n disabled\n title=\"Connecting to backend...\"\n >\n <ClockClockwiseIcon size={16} className=\"animate-spin\" />\n <span className=\"font-medium ml-1\">Connecting...</span>\n </button>\n );\n }\n\n if (isGraphRunning) {\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-red-700 border-red-600 flex items-center gap-1 disabled:opacity-50 disabled:text-gray-400 disabled:border-gray-300\"\n onClick={() => runner.stop()}\n disabled={!canControl}\n title={canControl ? \"Stop engine\" : \"Waiting for connection\"}\n >\n <StopIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Stop</span>\n </button>\n );\n }\n\n return (\n <button\n className=\"border rounded px-2 py-1.5 text-green-700 border-green-600 flex items-center gap-1 disabled:text-gray-400 disabled:border-gray-300 disabled:opacity-50\"\n onClick={(evt) => {\n const kind = engine as EngineKind | undefined;\n if (!kind) return alert(\"Select an engine first.\");\n if (evt.shiftKey && !confirm(\"Invalidate and re-run graph?\")) return;\n\n try {\n runner.launch(wb.export(), {\n engine: kind,\n invalidate: evt.shiftKey,\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n disabled={!engine || !canControl}\n title={\n !engine\n ? \"Select an engine first\"\n : !canControl\n ? \"Waiting for connection\"\n : \"Start engine\"\n }\n >\n <PlayIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n );\n }, [transportStatus, isGraphRunning, runner, engine, wb]);\n\n const defaultExamples = useMemo<ExampleDescriptor[]>(\n () => [\n {\n id: \"simple\",\n label: \"Simple\",\n load: async () => ({\n registry: createSimpleGraphRegistry(),\n def: createSimpleGraphDef(),\n }),\n },\n {\n id: \"async\",\n label: \"Async Chain\",\n load: async () => ({\n registry: createAsyncGraphRegistry(),\n def: createAsyncGraphDef(),\n }),\n },\n {\n id: \"progress\",\n label: \"Progress + Errors\",\n load: async () => ({\n registry: createProgressGraphRegistry(),\n def: createProgressGraphDef(),\n }),\n },\n {\n id: \"validation\",\n label: \"Validation\",\n load: async () => ({\n registry: createValidationGraphRegistry(),\n def: createValidationGraphDef(),\n }),\n },\n ],\n []\n );\n\n const examples = useMemo<ExampleDescriptor[]>(() => {\n if (overrides?.getExamples) return overrides.getExamples(defaultExamples);\n return defaultExamples;\n }, [overrides, defaultExamples]);\n\n const canvasRef = useRef<WorkbenchCanvasHandle | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\n const [registryReady, setRegistryReady] = useState(() => {\n // For local backends, registry is always ready\n return backendKind === \"local\";\n });\n\n // Expose init callback with setInitialGraph helper\n // Note: This runs whenever runner changes\n useEffect(() => {\n if (!onInit) return;\n const setInitialGraph = async (\n d: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => {\n await wb.load(d);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n };\n onInit({ wb, runner, setInitialGraph });\n }, [onInit, wb, runner]);\n\n // Expose change callback on graph/value changes\n useEffect(() => {\n if (!onChange) return;\n const off1 = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off2 = runner.on(\"value\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off3 = wb.on(\"graphUiChanged\", (evt) => {\n if (!evt.commit) return;\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n off1();\n off2();\n off3();\n };\n }, [wb, runner, onChange]);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n const ex = examples.find((e) => e.id === key) ?? examples[0];\n if (!ex) return;\n const { registry: r, def, inputs } = await ex.load();\n // Keep registry consistent with backend:\n // - For local backend, allow example to provide its own registry\n // - For remote backend, registry is automatically managed by RemoteGraphRunner\n if (backendKind === \"local\") {\n if (r) {\n setRegistry(r);\n wb.setRegistry(r);\n }\n } else {\n // For remote backends, registry is automatically fetched and updated by RemoteGraphRunner\n // Do not overwrite it here - it will be synced via registry events\n }\n await wb.load(def);\n // Build a local runtime so seeded defaults are visible pre-run\n runner.build(wb.export());\n // Set initial inputs if provided\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [\n runner,\n wb,\n onExampleChange,\n runAutoLayout,\n examples,\n setRegistry,\n backendKind,\n ]\n );\n\n const download = useCallback(async () => {\n try {\n await downloadUtil(wb, runner);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }, [wb, runner]);\n\n const onUploadPicked = useCallback(\n async (e: React.ChangeEvent<HTMLInputElement>) => {\n try {\n const file = e.target.files?.[0];\n if (!file) return;\n const text = await file.text();\n const parsed = JSON.parse(text);\n await uploadUtil(parsed, wb, runner);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n } finally {\n // reset input so same file can be picked again\n if (uploadInputRef.current) uploadInputRef.current.value = \"\";\n }\n },\n [wb, runner]\n );\n\n const triggerUpload = useCallback(() => {\n uploadInputRef.current?.click();\n }, []);\n\n // Registry is now automatically fetched by RemoteGraphRunner on first connection\n // No need for manual hydration\n\n // Ensure initial example is loaded (and sync when example prop changes)\n useEffect(() => {\n if (!example) return;\n applyExample(example);\n }, [example, wb]);\n\n useEffect(() => {\n const off = runner.on(\"transport\", setTransportStatus);\n return () => off();\n }, [runner]);\n\n // Track registry readiness for remote backends\n useEffect(() => {\n // For local backends, registry is always ready\n if (backendKind === \"local\") {\n setRegistryReady(true);\n return;\n }\n\n // Reset readiness when switching to remote backend\n setRegistryReady(false);\n\n // For remote backends, wait for registry event\n const off = runner.on(\"registry\", () => {\n setRegistryReady(true);\n });\n return () => off();\n }, [runner, backendKind]);\n\n useEffect(() => {\n if (!engine) return;\n if (isGraphRunning) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n const d = wb.export();\n if (!d.nodes || d.nodes.length === 0) return;\n try {\n runner.launch(d, { engine: engine as EngineKind });\n } catch {\n // ignore\n }\n }, [engine, runner, isGraphRunning, wb, backendKind]);\n\n const baseSetInput = useCallback(\n (handle: string, raw: string | number | undefined) => {\n if (!selectedNodeId) return;\n // If selected input is wired (has inbound edge), ignore user input to respect runtime value\n const isLinked = def.edges.some(\n (e) => e.target.nodeId === selectedNodeId && e.target.handle === handle\n );\n if (isLinked) return;\n\n // If raw is undefined, pass it through to delete the input value\n if (raw === undefined) {\n runner.setInputs(selectedNodeId, { [handle]: undefined });\n return;\n }\n\n const typeId = getInputTypeId(effectiveHandles.inputs, handle);\n let value: unknown = raw;\n const parseArray = <T,>(s: string, map: (x: string) => T): T[] => {\n const str = String(s).trim();\n try {\n const parsed = JSON.parse(str);\n if (Array.isArray(parsed)) return parsed.map((x) => map(String(x)));\n } catch {}\n if (!str) return [] as T[];\n return str\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n .map(map);\n };\n\n switch (typeId) {\n case \"base.float\": {\n const n = Number(raw);\n value = Number.isFinite(n) ? n : 0;\n break;\n }\n case \"base.float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"base.bool\": {\n value = raw === \"true\" || raw === \"1\" ? true : false;\n break;\n }\n case \"base.bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(x));\n break;\n }\n case \"base.string\": {\n value = String(raw);\n break;\n }\n case \"base.string[]\": {\n value = parseArray(String(raw), (x) => String(x));\n break;\n }\n case \"base.vec3\": {\n const arr = parseArray(String(raw), (x) => Number(x));\n value = [arr[0] ?? 0, arr[1] ?? 0, arr[2] ?? 0];\n break;\n }\n case \"base.vec3[]\": {\n try {\n const parsed = JSON.parse(String(raw));\n if (Array.isArray(parsed)) {\n value = parsed.map((v) => [\n Number(v?.[0] ?? 0),\n Number(v?.[1] ?? 0),\n Number(v?.[2] ?? 0),\n ]);\n break;\n }\n } catch {}\n // fallback CSV triples: \"x1,y1,z1; x2,y2,z2\"\n value = String(raw)\n .split(\";\")\n .map((seg) => seg.trim())\n .filter(Boolean)\n .map((seg) => seg.split(\",\").map((n) => Number(n.trim())))\n .map((a) => [a[0] ?? 0, a[1] ?? 0, a[2] ?? 0]);\n break;\n }\n default: {\n // fallback to string\n value = raw;\n }\n }\n runner.setInputs(selectedNodeId, { [handle]: value });\n },\n [selectedNodeId, def.edges, effectiveHandles, runner]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry,\n });\n }\n return baseSetInput;\n }, [overrides, baseSetInput, runner, selectedNodeId, registry]);\n\n const baseToString = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n // Normalize typed wrapper\n if (isTypedOutput(value)) {\n return baseToString(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value)\n );\n }\n const pre = preformatValueForDisplay(typeId, value, registry);\n if (pre !== undefined) return pre;\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"url\" in value &&\n typeof value.url === \"string\"\n ) {\n const title =\n \"title\" in value && typeof value.title === \"string\"\n ? value.title\n : \"\";\n const url = String(value.url || \"\");\n // value.ts handles data URL formatting\n return title || url.slice(0, 32) + (url.length > 32 ? \"…\" : \"\");\n }\n if (typeId && typeId.startsWith(\"enum:\")) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n return label ?? String(n);\n }\n const round4 = (n: number) => Math.round(Number(n) * 10000) / 10000;\n if (typeId === \"base.vec3\" && Array.isArray(value)) {\n const a = value as unknown[];\n return [\n round4(Number(a[0] ?? 0)),\n round4(Number(a[1] ?? 0)),\n round4(Number(a[2] ?? 0)),\n ].join(\",\");\n }\n const stringifyRounded = (v: unknown) => {\n try {\n return JSON.stringify(v, (_k, val) =>\n typeof val === \"number\" ? round4(val) : val\n );\n } catch {\n return String(v);\n }\n };\n if (\n typeId?.endsWith(\"[]\") ||\n Array.isArray(value) ||\n (typeof value === \"object\" && value !== null)\n ) {\n return stringifyRounded(value);\n }\n if (typeof value === \"number\") {\n const rounded = Math.round(Number(value) * 10000) / 10000;\n return String(rounded);\n }\n return String(value);\n },\n [registry]\n );\n\n const baseToElement = useCallback(\n (typeId?: string, value?: unknown) => {\n return (\n <span className=\"ml-1 opacity-60\">{baseToString(typeId, value)}</span>\n );\n },\n [baseToString]\n );\n\n const toString = useMemo(() => {\n if (overrides?.toString)\n return overrides.toString(baseToString, { registry });\n return baseToString;\n }, [overrides, baseToString, registry]);\n\n // Optional: toElement (not currently consumed by core UI)\n // Consumers can access it by passing through their own node renderers.\n const toElement = useMemo(() => {\n if (overrides?.toElement)\n return overrides.toElement(baseToElement, { registry });\n return baseToElement;\n }, [overrides, baseToElement, registry]);\n\n return (\n <div className=\"w-full h-screen flex flex-col\">\n <div className=\"p-2 border-b border-gray-300 flex gap-2 items-center\">\n {isGraphRunning ? (\n <span className=\"ml-2 text-sm text-green-700\">\n Running: {engineKind}\n </span>\n ) : (\n <span className=\"ml-2 text-sm text-gray-500\">Stopped</span>\n )}\n {/* Transport status (icons only) */}\n <span\n className=\"ml-2 flex items-center gap-1 text-xs\"\n title={transportStatus.kind || undefined}\n >\n {transportStatus.state === \"local\" && (\n <PlugsConnectedIcon size={14} className=\"text-gray-500\" />\n )}\n {transportStatus.state === \"connecting\" && (\n <ClockClockwiseIcon\n size={14}\n className=\"text-amber-600 animate-pulse\"\n />\n )}\n {transportStatus.state === \"connected\" && (\n <WifiHighIcon size={14} className=\"text-green-600\" />\n )}\n {transportStatus.state === \"disconnected\" && (\n <WifiSlashIcon size={14} className=\"text-red-600\" />\n )}\n {transportStatus.state === \"retrying\" && (\n <ClockClockwiseIcon\n size={14}\n className=\"text-amber-700 animate-pulse\"\n />\n )}\n </span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={exampleState}\n onChange={(e) => applyExample(e.target.value)}\n disabled={isGraphRunning}\n title={\n isGraphRunning ? \"Stop engine before switching example\" : undefined\n }\n >\n <option value=\"\">Select Example…</option>\n {examples.map((ex) => (\n <option key={ex.id} value={ex.id}>\n {ex.label}\n </option>\n ))}\n </select>\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={backendKind}\n onChange={(e) =>\n onBackendKindChange(e.target.value as ExecutionBackend[\"kind\"])\n }\n disabled={isGraphRunning}\n title={\n isGraphRunning ? \"Stop engine before switching backend\" : undefined\n }\n >\n <option value=\"local\">Local</option>\n <option value=\"remote-http\">Remote (HTTP)</option>\n <option value=\"remote-ws\">Remote (WebSocket)</option>\n </select>\n {backendKind === \"remote-http\" && !!onHttpBaseUrlChange && (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 w-72\"\n placeholder=\"http://127.0.0.1:18080\"\n value={httpBaseUrl}\n onChange={(e) => onHttpBaseUrlChange(e.target.value)}\n />\n )}\n {backendKind === \"remote-ws\" && !!onWsUrlChange && (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 w-72\"\n placeholder=\"ws://127.0.0.1:18081\"\n value={wsUrl}\n onChange={(e) => onWsUrlChange(e.target.value)}\n />\n )}\n <select\n className=\"border border-gray-300 rounded px-2 py-1\"\n value={engineKind ?? engine ?? \"\"}\n onChange={async (e) => {\n const kind = e.target.value || undefined;\n const currentEngine = runner.getRunningEngine();\n\n // If engine is running and user selected a different engine, switch it\n if (\n runner.isRunning() &&\n currentEngine &&\n kind &&\n kind !== currentEngine\n ) {\n try {\n await runner.switchEngine({\n engine: kind as EngineKind,\n batched: { flushIntervalMs: 0 },\n hybrid: { windowMs: 250, batchThreshold: 3 },\n });\n onEngineChange?.(kind);\n } catch (err: unknown) {\n const message =\n err instanceof Error ? err.message : String(err);\n alert(`Failed to switch engine: ${message}`);\n // Reset dropdown to current engine\n e.target.value = currentEngine;\n }\n } else {\n // Normal change when not running\n onEngineChange?.(kind);\n }\n }}\n >\n <option value=\"\">Select Engine…</option>\n <option value=\"push\">Push</option>\n <option value=\"batched\">Batched</option>\n <option value=\"pull\">Pull</option>\n <option value=\"hybrid\">Hybrid</option>\n <option value=\"step\">Step</option>\n </select>\n {engineKind === \"step\" && (\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => runner.step()}\n disabled={!isGraphRunning}\n title=\"Step\"\n >\n <PlayPauseIcon size={24} />\n </button>\n )}\n {engineKind === \"batched\" && (\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => runner.flush()}\n disabled={!isGraphRunning}\n title=\"Flush\"\n >\n <LightningIcon size={24} />\n </button>\n )}\n {renderStartStopButton()}\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={runAutoLayout}\n >\n <TreeStructureIcon size={24} />\n </button>\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={() => canvasRef.current?.fitView?.()}\n title=\"Fit View\"\n >\n <CornersOutIcon size={24} />\n </button>\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={download}\n >\n <DownloadIcon size={24} />\n </button>\n <input\n ref={uploadInputRef}\n type=\"file\"\n accept=\"application/json,.json\"\n className=\"hidden\"\n onChange={onUploadPicked}\n />\n <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={triggerUpload}\n >\n <UploadIcon size={24} />\n </button>\n <label className=\"flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={debug}\n onChange={(e) => onDebugChange(e.target.checked)}\n />\n <BugBeetleIcon size={24} weight={debug ? \"fill\" : undefined} />\n </label>\n <label className=\"flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={showValues}\n onChange={(e) => onShowValuesChange(e.target.checked)}\n />\n <ListBulletsIcon size={24} weight={showValues ? \"fill\" : undefined} />\n </label>\n </div>\n <div className=\"flex flex-1 min-h-0\">\n <div className=\"flex-1 min-w-0\">\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toString={toString}\n contextPanel={overrides?.contextPanel}\n />\n </div>\n </div>\n );\n}\n\nexport function WorkbenchStudio({\n engine,\n onEngineChange,\n example,\n onExampleChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n autoScroll,\n onAutoScrollChange,\n backendOptions,\n overrides,\n onInit,\n onChange,\n}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n showValues: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n autoScroll: boolean;\n onAutoScrollChange: (v: boolean) => void;\n backendOptions?: BackendOptions;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n\n // Store previous runner for cleanup\n const prevRunnerRef = useRef<IGraphRunner | null>(null);\n\n const runner = useMemo(() => {\n let newRunner: IGraphRunner;\n if (backendKind === \"remote-http\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(registry, backend);\n } else if (backendKind === \"remote-ws\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(registry, backend);\n } else {\n newRunner = new LocalGraphRunner(registry);\n }\n return newRunner;\n }, [registry, backendKind, httpBaseUrl, wsUrl, backendOptions]);\n\n // Dispose previous runner after commit; dispose current on unmount\n useEffect(() => {\n const previous = prevRunnerRef.current;\n prevRunnerRef.current = runner;\n if (previous && previous !== runner) {\n try {\n previous.dispose();\n } catch (err) {\n console.warn(\"Error disposing previous runner:\", err);\n }\n }\n return () => {\n // Only dispose if this runner is still the current one\n if (prevRunnerRef.current === runner) {\n try {\n runner.dispose();\n } catch (err) {\n console.warn(\"Error disposing runner on unmount:\", err);\n }\n }\n };\n }, [runner]);\n\n const isGraphRunning = runner.isRunning();\n\n // Track UI registration version to trigger nodeTypes recomputation\n const [uiVersion, setUiVersion] = useState(0);\n\n // Allow external UI registration (e.g., node renderers) with access to wb\n useEffect(() => {\n const baseRegisterUI: (wb: AbstractWorkbench) => void = (_wb) => {};\n overrides?.registerUI?.(baseRegisterUI, { wb, wbRunner: runner });\n // Increment UI version to trigger nodeTypes recomputation in WorkbenchCanvas\n setUiVersion((v) => v + 1);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wb, runner, overrides]);\n\n const onBackendKindChangeWithDispose = useCallback(\n () => (v: ExecutionBackendKind) => {\n if (isGraphRunning) runner.dispose();\n onBackendKindChange(v);\n },\n [isGraphRunning]\n );\n\n return (\n <WorkbenchProvider\n wb={wb}\n runner={runner}\n registry={registry}\n setRegistry={setRegistry}\n overrides={overrides}\n uiVersion={uiVersion}\n >\n <WorkbenchStudioCanvas\n setRegistry={setRegistry}\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n engine={engine}\n onEngineChange={onEngineChange}\n backendKind={backendKind}\n onBackendKindChange={onBackendKindChangeWithDispose}\n httpBaseUrl={httpBaseUrl}\n onHttpBaseUrlChange={onHttpBaseUrlChange}\n wsUrl={wsUrl}\n onWsUrlChange={onWsUrlChange}\n debug={debug}\n onDebugChange={onDebugChange}\n showValues={showValues}\n onShowValuesChange={onShowValuesChange}\n hideWorkbench={hideWorkbench}\n onHideWorkbenchChange={onHideWorkbenchChange}\n overrides={overrides}\n onInit={onInit}\n onChange={onChange}\n />\n </WorkbenchProvider>\n );\n}\n"],"names":["_jsx","_jsxs","_Fragment","download","downloadUtil","uploadUtil"],"mappings":"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"}
|