@bian-womp/spark-workbench 0.3.39 → 0.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/core/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/misc/viewport-utils.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/merge-utils.ts","../../src/misc/thumbnail-utils.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DefaultNodeHeader.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNodeContent.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultEdge.tsx","../../src/misc/context-menu/ContextMenuHelpers.ts","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/context-menu/ContextMenuButton.tsx","../../src/misc/context-menu/DefaultContextMenu.tsx","../../src/misc/context-menu/NodeContextMenu.tsx","../../src/misc/context-menu/SelectionContextMenu.tsx","../../src/misc/KeyboardShortcutToast.tsx","../../src/misc/SelectionBoundOverlay.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["import type React from \"react\";\nimport type {\n NodeProps,\n Node,\n EdgeProps,\n Edge,\n ConnectionLineComponentProps,\n MiniMapProps,\n ControlProps,\n BackgroundProps,\n EdgeTypes,\n NodeTypes,\n} from \"@xyflow/react\";\nimport type {\n EstimateNodeSizeFunction,\n CreateHandleBoundsFunction,\n CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"../misc/layout\";\nimport type {\n DefaultContextMenuProps,\n NodeContextMenuProps,\n SelectionContextMenuProps,\n} from \"../misc/context-menu/ContextMenuHandlers\";\n\n// React Flow renderer types\nexport type NodeRenderer = NodeTypes[keyof NodeTypes];\nexport type EdgeRenderer = EdgeTypes[keyof EdgeTypes];\nexport type ConnectionLineRenderer =\n React.ComponentType<ConnectionLineComponentProps>;\nexport type MinimapRenderer = React.ComponentType<MiniMapProps>;\nexport type ControlsRenderer = React.ComponentType<ControlProps>;\nexport type BackgroundRenderer = React.ComponentType<BackgroundProps>;\n\n// Context menu renderer types - using exported prop types from default components\nexport type DefaultContextMenuRenderer =\n React.ComponentType<DefaultContextMenuProps>;\nexport type NodeContextMenuRenderer = React.ComponentType<NodeContextMenuProps>;\nexport type SelectionContextMenuRenderer =\n React.ComponentType<SelectionContextMenuProps>;\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 registerEdgeRenderer(renderer: EdgeRenderer | undefined): this;\n getEdgeRenderer(): EdgeRenderer | undefined;\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 registerSelectionContextMenuRenderer(\n renderer: SelectionContextMenuRenderer | undefined\n ): this;\n getSelectionContextMenuRenderer(): SelectionContextMenuRenderer | 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 edgeRenderer?: EdgeRenderer;\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 private selectionContextMenuRenderer?: SelectionContextMenuRenderer;\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 registerEdgeRenderer(renderer: EdgeRenderer | undefined): this {\n this.edgeRenderer = renderer;\n return this;\n }\n getEdgeRenderer(): EdgeRenderer | undefined {\n return this.edgeRenderer;\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 registerSelectionContextMenuRenderer(\n renderer: SelectionContextMenuRenderer | undefined\n ): this {\n this.selectionContextMenuRenderer = renderer;\n return this;\n }\n getSelectionContextMenuRenderer(): SelectionContextMenuRenderer | undefined {\n return this.selectionContextMenuRenderer;\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 interface WorkbenchConstructorArgs {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n genId?: (prefix: string, used: Set<string>) => string;\n}\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 abstract get def(): GraphDefinition;\n\n constructor(args: WorkbenchConstructorArgs) {\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 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 RuntimeMetadata,\n NodeRuntimeMetadata,\n RuntimeHistoryInfo,\n Viewport,\n} from \"@bian-womp/spark-protocol\";\nimport {\n GraphBuilder,\n Registry,\n getInputDeclaredTypes,\n isTypedOutput,\n getTypedOutputValue,\n createSimpleGraphRegistry,\n} from \"@bian-womp/spark-graph\";\nimport lod from \"lodash\";\nimport {\n AbstractWorkbench,\n WorkbenchConstructorArgs,\n} from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\nimport { WorkbenchUIState } from \"../misc/types\";\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 size?: { width: number; height: 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 _registry: Registry;\n\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n\n private positions: Record<string, { x: number; y: number }> = {};\n private sizes: Record<string, { width: number; height: number }> = {};\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n private nodeNames: Record<string, string> = {};\n\n private customData: {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n } = {};\n\n private runtimeState: RuntimeMetadata | null = null;\n\n private viewport: Viewport | null = null;\n private historyState: RuntimeHistoryInfo | undefined = undefined;\n\n private copiedData: CopiedGraphData | null = null;\n\n constructor(args: WorkbenchConstructorArgs) {\n super(args);\n this._registry = createSimpleGraphRegistry();\n }\n\n get def(): GraphDefinition {\n return this._def;\n }\n\n get registry(): Registry {\n return this._registry;\n }\n\n setRegistry(registry: Registry): void {\n this._registry = registry;\n this.refreshValidation();\n this.emit(\"registryChanged\", { registry });\n }\n\n /**\n * Check if a node should auto run based on registry node description policy or node definition params policy.\n * @param nodeId - The node ID to check\n * @returns true if the node has autoRun enabled in either registry or params policy\n */\n shouldNodeAutoRun(nodeId: string): boolean {\n const node = this._def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return false;\n\n // Check registry node description policy\n const desc = this._registry.nodes.get(node.typeId);\n const registryAutoRun = desc?.policy?.autoRun === true;\n\n // Check node definition params policy (takes precedence over registry)\n const paramsAutoRun = node?.params?.policy?.autoRun === true;\n\n // Node has autoRun if either registry or params sets it\n return registryAutoRun || paramsAutoRun;\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 filteredSizes = Object.fromEntries(\n Object.entries(this.sizes).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 // Clean up extData for removed nodes/edges\n if (this.customData.nodes) {\n const filteredExtNodes = Object.fromEntries(\n Object.entries(this.customData.nodes).filter(([id]) =>\n defNodeIds.has(id)\n )\n );\n this.customData.nodes =\n Object.keys(filteredExtNodes).length > 0 ? filteredExtNodes : undefined;\n }\n if (this.customData.edges) {\n const filteredExtEdges = Object.fromEntries(\n Object.entries(this.customData.edges).filter(([id]) =>\n defEdgeIds.has(id)\n )\n );\n this.customData.edges =\n Object.keys(filteredExtEdges).length > 0 ? filteredExtEdges : undefined;\n }\n\n this.positions = filteredPositions;\n this.sizes = filteredSizes;\n this.selection = { nodes: filteredNodes, edges: filteredEdges };\n\n this.emit(\"graphChanged\", { def: this._def });\n this.refreshValidation();\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 setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean; commit?: boolean; reason?: string }\n ): void {\n this.emit(\"graphChanged\", {\n def: this._def,\n change: { type: \"setInputs\", nodeId, inputs },\n ...options,\n });\n this.refreshValidation();\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n },\n options?: {\n inputs?: Record<string, unknown>;\n position?: { x: number; y: number };\n size?: { width: number; height: number };\n copyOutputsFrom?: string;\n dry?: boolean;\n commit?: boolean;\n reason?: string;\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 (options?.position) this.positions[id] = options.position;\n if (options?.size) this.sizes[id] = options.size;\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 ...lod.pick(options, [\"dry\", \"commit\", \"reason\"]),\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(\n nodeId: string,\n options?: { commit?: boolean; reason?: string }\n ): 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 delete this.sizes[nodeId];\n delete this.nodeNames[nodeId];\n this.emit(\"graphChanged\", {\n def: this._def,\n change: { type: \"removeNode\", nodeId },\n ...options,\n });\n this.refreshValidation();\n }\n\n connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string },\n options?: { dry?: boolean; commit?: boolean; reason?: string }\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 ...options,\n });\n this.refreshValidation();\n return id;\n }\n\n disconnect(\n edgeId: string,\n options?: { commit?: boolean; reason?: string }\n ): 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 ...options,\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 setPositions(\n positions: Record<string, { x: number; y: number }>,\n options?: { commit?: boolean; reason?: string }\n ): void {\n this.positions = { ...this.positions, ...positions };\n this.emit(\"graphUiChanged\", { change: { type: \"moveNodes\" }, ...options });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSizes(\n sizes: Record<string, { width: number; height: number } | null>,\n options?: { commit?: boolean; reason?: string }\n ): void {\n const updatedSizes = { ...this.sizes };\n for (const [nodeId, size] of Object.entries(sizes)) {\n if (size) {\n updatedSizes[nodeId] = size;\n } else {\n delete updatedSizes[nodeId];\n }\n }\n this.sizes = updatedSizes;\n this.emit(\"graphUiChanged\", {\n change: { type: \"resizeNodes\" },\n ...options,\n });\n }\n\n getSizes(): Record<string, { width: number; height: number }> {\n return { ...this.sizes };\n }\n\n private setSelectionInternal(\n sel: { nodes: string[]; edges: string[] },\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (lod.isEqual(this.selection, sel)) return;\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", { change: { type: \"selection\" }, ...options });\n }\n\n setSelection(\n sel: { nodes: string[]; edges: string[] },\n options?: { commit?: boolean; reason?: string }\n ): void {\n this.setSelectionInternal(sel, options);\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n /**\n * Delete all selected nodes and edges.\n */\n deleteSelection(options?: { commit?: boolean; reason?: string }): void {\n const selection = this.getSelection();\n\n // Delete all selected nodes (this will also remove connected edges)\n for (const nodeId of selection.nodes) {\n this.removeNode(nodeId);\n }\n\n // Delete remaining selected edges (edges not connected to deleted nodes)\n for (const edgeId of selection.edges) {\n this.disconnect(edgeId);\n }\n\n // Clear selection\n this.setSelectionInternal({ nodes: [], edges: [] }, options);\n }\n\n setViewport(viewport: Viewport): void {\n if (lod.isEqual(this.viewport, viewport)) return;\n this.viewport = { ...viewport };\n this.emit(\"graphUiChanged\", { change: { type: \"viewport\" } });\n }\n\n getViewport(): Viewport | null {\n return this.viewport ? { ...this.viewport } : null;\n }\n\n getUIState(): WorkbenchUIState {\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 const filteredNodeNames = Object.fromEntries(\n Object.entries(this.nodeNames).filter(([id]) => defNodeIds.has(id))\n );\n const filteredSizes = Object.fromEntries(\n Object.entries(this.sizes).filter(([id]) => defNodeIds.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 nodeNames:\n Object.keys(filteredNodeNames).length > 0\n ? filteredNodeNames\n : undefined,\n sizes: Object.keys(filteredSizes).length > 0 ? filteredSizes : undefined,\n };\n }\n\n setUIState(ui?: WorkbenchUIState): 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 this.emit(\"graphUiChanged\", {\n change: { type: \"selection\" },\n init: true,\n });\n }\n if (ui.viewport) {\n this.viewport = { ...ui.viewport };\n this.emit(\"graphUiChanged\", { change: { type: \"viewport\" }, init: true });\n }\n if (ui.nodeNames !== undefined) {\n this.nodeNames = { ...ui.nodeNames };\n for (const [nodeId, name] of Object.entries(ui.nodeNames)) {\n this.emit(\"graphUiChanged\", {\n change: { type: \"nodeName\", nodeId, name },\n init: true,\n });\n }\n }\n if (ui.sizes !== undefined) {\n const defNodeIds = new Set(this._def.nodes.map((n) => n.nodeId));\n this.sizes = Object.fromEntries(\n Object.entries(ui.sizes).filter(([id]) => defNodeIds.has(id))\n );\n }\n }\n\n getRuntimeState(): RuntimeMetadata | null {\n return this.runtimeState ? { ...this.runtimeState } : null;\n }\n\n setRuntimeState(runtime?: RuntimeMetadata | null): void {\n this.runtimeState = runtime ? { ...runtime } : null;\n this.emit(\"runtimeMetadataChanged\", {});\n }\n\n getHistory(): RuntimeHistoryInfo | undefined {\n return this.historyState;\n }\n\n setHistory(history?: RuntimeHistoryInfo | undefined): void {\n this.historyState = history;\n this.emit(\"historyChanged\", { history });\n }\n\n getNodeRuntimeMetadata(nodeId: string): NodeRuntimeMetadata | undefined {\n return this.runtimeState?.nodes[nodeId];\n }\n\n updateNodeRuntimeMetadata(\n nodeId: string,\n updater: (current: NodeRuntimeMetadata) => NodeRuntimeMetadata\n ): void {\n const current = this.runtimeState ?? { nodes: {} };\n const nodeMeta = current.nodes[nodeId] ?? {};\n const updated = updater({ ...nodeMeta });\n this.runtimeState = { nodes: { ...current.nodes, [nodeId]: updated } };\n this.emit(\"runtimeMetadataChanged\", { nodeId });\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 positions = this.getPositions();\n const sizes = this.getSizes();\n const selectedNodeSet = new Set(selection.nodes);\n\n // Collect nodes to copy\n const nodesToCopy = this.def.nodes.filter((n) =>\n selectedNodeSet.has(n.nodeId)\n );\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];\n const size =\n sizes[node.nodeId] || getNodeSize?.(node.nodeId, node.typeId);\n\n if (pos) {\n minX = Math.min(minX, pos.x);\n minY = Math.min(minY, pos.y);\n if (size) {\n maxX = Math.max(maxX, pos.x + size.width);\n maxY = Math.max(maxY, pos.y + size.height);\n }\n }\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(this.def);\n const selectedEdgeSet = new Set(selection.edges);\n const copiedNodes = nodesToCopy.map((node) => {\n const pos = positions[node.nodeId];\n const size = sizes[node.nodeId];\n\n // Get all inbound edges for this node\n const inboundEdges = this.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: pos\n ? {\n x: pos.x - centerX,\n y: pos.y - centerY,\n }\n : undefined,\n size,\n inputs: inputsToCopy,\n originalNodeId: node.nodeId,\n };\n });\n\n // Collect edges between copied nodes\n const copiedEdges = this.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 * Duplicate all selected nodes.\n * Returns the list of newly created node IDs.\n * Each duplicated node is offset by 24px in both x and y directions.\n * Copies inputs without bindings and uses copyOutputsFrom to copy outputs.\n */\n duplicateSelection(\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string[] {\n const selection = this.getSelection();\n if (selection.nodes.length === 0) return [];\n\n const positions = this.getPositions();\n const sizes = this.getSizes();\n const newNodes: string[] = [];\n\n // Get inputs without bindings (literal values only)\n const allInputs = runner.getInputs(this.def) || {};\n // Duplicate each selected node\n for (const nodeId of selection.nodes) {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) continue;\n\n const pos = positions[nodeId];\n const size = sizes[nodeId];\n\n const inboundHandles = new Set(\n this.def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n newNodes.push(newNodeId);\n }\n\n // Select all newly duplicated nodes\n if (newNodes.length > 0) {\n this.setSelectionInternal(\n { nodes: newNodes, edges: [] },\n options || { commit: true, reason: \"duplicate-selection\" }\n );\n }\n\n return newNodes;\n }\n\n /**\n * Bake an output value from a node into a new node.\n * Creates a new node based on the output type's bakeTarget configuration.\n * Returns the ID of the last created node (or undefined if none created).\n */\n async bake(\n registry: Registry,\n runner: IGraphRunner,\n outputValue: unknown,\n outputTypeId: string,\n nodePosition: { x: number; y: number },\n options?: { commit?: boolean; reason?: string }\n ): Promise<string | undefined> {\n try {\n if (!outputTypeId || outputValue === undefined) return undefined;\n\n const unwrap = (v: unknown) =>\n isTypedOutput(v) ? getTypedOutputValue(v) : v;\n\n const coerceIfNeeded = async (\n fromType: string,\n toTypes: string | string[] | undefined,\n value: unknown\n ) => {\n if (!toTypes) return value;\n const typesArray = Array.isArray(toTypes) ? toTypes : [toTypes];\n\n // If output type matches any input type exactly, no coercion needed\n if (typesArray.includes(fromType)) return value;\n\n // If no coercion function available, return as-is\n if (!runner?.coerce) return value;\n\n // Try coercing to each type until one succeeds\n for (const toType of typesArray) {\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n // Continue to next type\n }\n }\n\n // If all coercion attempts failed, return value as-is\n return value;\n };\n\n const pos = nodePosition;\n const isArray = outputTypeId.endsWith(\"[]\");\n const baseTypeId = isArray ? outputTypeId.slice(0, -2) : outputTypeId;\n const tArr = isArray ? registry.types.get(outputTypeId) : 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 let newNodeId: string | undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(\n outputTypeId,\n inTypes,\n unwrap(outputValue)\n );\n newNodeId = this.addNode(\n {\n typeId: singleTarget.nodeTypeId,\n },\n {\n inputs: { [singleTarget.inputHandle]: coerced },\n position: { x: pos.x + 180, y: pos.y },\n }\n );\n } else if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n arrTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(\n outputTypeId,\n inTypes,\n unwrap(outputValue)\n );\n newNodeId = this.addNode(\n {\n typeId: arrTarget.nodeTypeId,\n },\n {\n position: { x: pos.x + 180, y: pos.y },\n inputs: { [arrTarget.inputHandle]: coerced },\n }\n );\n } else if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n elemTarget.inputHandle\n );\n const src = unwrap(outputValue);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inTypes, 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 newNodeId = this.addNode(\n {\n typeId: elemTarget.nodeTypeId,\n },\n {\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n inputs: { [elemTarget.inputHandle]: coercedItems[idx] },\n }\n );\n }\n }\n\n if (newNodeId) {\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"bake\" }\n );\n }\n\n return newNodeId;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Duplicate a single node.\n * Returns the ID of the newly created node.\n * The duplicated node is offset by 24px in both x and y directions.\n * Copies inputs without bindings and uses copyOutputsFrom to copy outputs.\n */\n duplicateNode(\n nodeId: string,\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string | undefined {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return undefined;\n\n const pos = this.getPositions()[nodeId];\n const size = this.getSizes()[nodeId];\n\n // Get inputs without bindings (literal values only)\n const allInputs = runner.getInputs(this.def)[nodeId] || {};\n const inboundHandles = new Set(\n this.def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Select the newly duplicated node\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"duplicate-node\" }\n );\n\n return newNodeId;\n }\n\n /**\n * Duplicate a node and all its incoming edges.\n * Returns the ID of the newly created node.\n * The duplicated node is offset by 24px in both x and y directions.\n * All incoming edges are duplicated to point to the new node.\n */\n duplicateNodeWithEdges(\n nodeId: string,\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string | undefined {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return undefined;\n\n const pos = this.getPositions()[nodeId];\n const size = this.getSizes()[nodeId];\n\n // Get all inputs (including those with bindings, since edges will be duplicated)\n const inputs = runner.getInputs(this.def)[nodeId] || {};\n\n // Add the duplicated node\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Find all incoming edges (edges where target is the original node)\n const incomingEdges = this.def.edges.filter(\n (e) => e.target.nodeId === nodeId\n );\n\n // Duplicate each incoming edge to point to the new node\n for (const edge of incomingEdges) {\n this.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\n if (newNodeId) {\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"duplicate-node-with-edges\" }\n );\n }\n\n return newNodeId;\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 options?: { commit?: boolean; reason?: string }\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 },\n {\n inputs: nodeData.inputs,\n position: nodeData.position\n ? {\n x: nodeData.position.x + center.x,\n y: nodeData.position.y + center.y,\n }\n : undefined,\n size: nodeData.size,\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.setSelectionInternal(\n { nodes: Array.from(nodeIdMap.values()), edges: edgeIds },\n options\n );\n\n return { nodeIdMap, edgeIds };\n }\n\n /**\n * Get the currently copied graph data.\n */\n getCopiedData(): CopiedGraphData | null {\n return this.copiedData;\n }\n\n /**\n * Set the copied graph data (used for paste functionality).\n */\n setCopiedData(data: CopiedGraphData | null): void {\n this.copiedData = data;\n }\n\n /**\n * Get the custom name for a node, if set.\n */\n getNodeName(nodeId: string): string | undefined {\n return this.nodeNames[nodeId];\n }\n\n /**\n * Set a custom name for a node. Empty string or undefined removes the custom name.\n * This is included in undo/redo history via extData.ui.\n */\n setNodeName(\n nodeId: string,\n name: string | undefined,\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (name === undefined || name.trim() === \"\") {\n delete this.nodeNames[nodeId];\n } else {\n this.nodeNames[nodeId] = name.trim();\n }\n\n this.emit(\"graphUiChanged\", {\n change: { type: \"nodeName\", nodeId, name },\n ...options,\n });\n }\n\n /**\n * Get custom data for a specific node.\n */\n getCustomNodeData(nodeId: string): Record<string, unknown> | undefined {\n return this.customData.nodes?.[nodeId];\n }\n\n /**\n * Set custom data for a specific node (supports partial updates).\n */\n setCustomNodeData(\n nodeId: string,\n data: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (!this.customData.nodes) {\n this.customData.nodes = {};\n }\n if (data === undefined) {\n delete this.customData.nodes[nodeId];\n if (Object.keys(this.customData.nodes).length === 0) {\n delete this.customData.nodes;\n }\n } else {\n // If merge is true, merge with existing data; otherwise replace\n if (options?.merge && this.customData.nodes[nodeId]) {\n this.customData.nodes[nodeId] = {\n ...this.customData.nodes[nodeId],\n ...data,\n };\n } else {\n this.customData.nodes[nodeId] = data;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customNodeData\",\n nodeId,\n data: this.customData.nodes?.[nodeId],\n },\n ...options,\n });\n }\n\n /**\n * Get custom data for a specific edge.\n */\n getCustomEdgeData(edgeId: string): Record<string, unknown> | undefined {\n return this.customData.edges?.[edgeId];\n }\n\n /**\n * Set custom data for a specific edge (supports partial updates).\n */\n setCustomEdgeData(\n edgeId: string,\n data: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (!this.customData.edges) {\n this.customData.edges = {};\n }\n if (data === undefined) {\n delete this.customData.edges[edgeId];\n if (Object.keys(this.customData.edges).length === 0) {\n delete this.customData.edges;\n }\n } else {\n // If merge is true, merge with existing data; otherwise replace\n if (options?.merge && this.customData.edges[edgeId]) {\n this.customData.edges[edgeId] = {\n ...this.customData.edges[edgeId],\n ...data,\n };\n } else {\n this.customData.edges[edgeId] = data;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customEdgeData\",\n edgeId,\n data: this.customData.edges?.[edgeId],\n },\n ...options,\n });\n }\n\n /**\n * Get custom metadata.\n */\n getCustomMetaData(): Record<string, unknown> | undefined {\n return this.customData.meta;\n }\n\n /**\n * Set custom metadata (supports partial updates).\n */\n setCustomMetaData(\n meta: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (meta === undefined) {\n delete this.customData.meta;\n } else {\n // If merge is true, merge with existing metadata; otherwise replace\n if (options?.merge && this.customData.meta) {\n this.customData.meta = {\n ...this.customData.meta,\n ...meta,\n };\n } else {\n this.customData.meta = meta;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: { type: \"customMetaData\", meta: this.customData.meta },\n ...options,\n });\n }\n\n /**\n * Get all custom data.\n */\n getCustomData(): {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n } {\n return { ...this.customData };\n }\n\n /**\n * Set all custom data.\n */\n setCustomData(\n custom:\n | {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n }\n | undefined,\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (custom === undefined) {\n this.customData = {};\n } else {\n this.customData = lod.pick(custom, [\"nodes\", \"edges\", \"meta\"]);\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customData\",\n nodes: custom?.nodes,\n edges: custom?.edges,\n meta: custom?.meta,\n },\n ...options,\n });\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(options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }) {\n const d = this.wb.def;\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 RunMode,\n RunnerOptions,\n RuntimeHistoryInfo,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Engine,\n Registry,\n GraphRuntime,\n createSimpleGraphRegistry,\n} 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 registry: Registry;\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\n constructor(protected backend: ExecutionBackend, registry?: Registry) {\n this.runnerId = \"\";\n this.registry = registry ?? createSimpleGraphRegistry();\n }\n\n abstract launch(def: GraphDefinition, opts: RunnerOptions): void;\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 computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): 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 | Promise<void>;\n\n abstract copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract runFromHere(nodeId: string): Promise<void>;\n\n abstract cancelNodeRuns(nodeIds: string[]): 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; dry?: boolean }\n ): Promise<void>;\n\n abstract setExtData(data: Record<string, unknown>): Promise<void>;\n abstract updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void>;\n\n protected abstract createAndLaunchEngine(opts?: RunnerOptions): Promise<void>;\n\n abstract pause(): Promise<void>;\n abstract resume(): Promise<void>;\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\n }\n\n setRunMode(runMode: RunMode): void {\n if (this.engine) {\n this.engine.setRunMode(runMode);\n this.emit(\"status\", { running: true, runMode });\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 }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n // Optional undo/redo support\n async undo(): Promise<boolean> {\n return false;\n }\n async redo(): Promise<boolean> {\n return false;\n }\n\n // Optional commit support\n async commit(_reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n return undefined;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n LocalEngine,\n parseJsonPath,\n setValueAtPathWithCreation,\n buildValueConverter,\n convertSnapshot,\n} from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n RunnerOptions,\n RuntimeSnapshot,\n ConverterConfig,\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 protected engine?: LocalEngine;\n private extData: Record<string, unknown> = {};\n\n constructor(registry?: Registry) {\n super({ kind: \"local\" }, registry);\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, opts?: { startPaused?: boolean }): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def, opts);\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 // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = options?.dry ? this.runtime.requestPause() : null;\n try {\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } finally {\n releasePause?.();\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\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 = new LocalEngine(this.runtime, opts?.runMode);\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, opts?.runMode, opts?.startPaused);\n const runMode = opts?.runMode ?? \"manual\";\n this.emit(\"status\", { running: true, runMode });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n if (this.engine) await this.engine.computeNode(nodeId, options);\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n if (this.engine) await this.engine.runFromHere(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n if (this.engine) {\n this.engine.cancelNodeRuns(nodeIds);\n }\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.engine) 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.engine.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 // Engine handles dry option via AbstractEngine\n this.engine?.triggerExternal(nodeId, event, options);\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 if (this.engine) {\n // Engine handles dry option via AbstractEngine\n this.engine.setInputs(nodeId, inputs, options);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n // Note: dry option doesn't apply when engine doesn't exist (no execution to prevent)\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 }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n if (this.engine) {\n this.engine.copyOutputs(fromNodeId, toNodeId, options);\n }\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ) => {\n if (!this.runtime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = opts?.dry ? this.runtime.requestPause() : null;\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 releasePause?.();\n }\n };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n if (!data || typeof data !== \"object\") {\n this.extData = {};\n return;\n }\n this.extData = { ...this.extData, ...data };\n }\n\n async updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void> {\n if (\n !this.extData ||\n typeof this.extData !== \"object\" ||\n Array.isArray(this.extData)\n ) {\n this.extData = {};\n }\n for (const { path, value } of updates) {\n const pathSegments = parseJsonPath(path);\n setValueAtPathWithCreation(this.extData, pathSegments, value);\n }\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 const extData = this.extData;\n return { def, environment, inputs, outputs, extData };\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean; dry?: 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, { dry: options?.dry });\n if (payload.extData) {\n await this.setExtData(payload.extData);\n }\n }\n\n async convertSnapshot(\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ): Promise<RuntimeSnapshotFull> {\n const snapshot = await this.snapshotFull();\n const converter = buildValueConverter(converterConfig);\n const converted = convertSnapshot(snapshot, converter);\n await this.applySnapshotFull(converted, {\n skipBuild: true,\n dry: options?.dry,\n });\n return converted;\n }\n\n async pause(): Promise<void> {\n if (!this.runtime) return;\n this.runtime.pause();\n }\n\n async resume(): Promise<void> {\n if (!this.runtime) return;\n this.runtime.resume();\n }\n\n private hydrate(snapshot: RuntimeSnapshot, opts?: { dry?: boolean }): 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\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n dry: opts?.dry,\n });\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\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n dry: opts?.dry,\n });\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 { Viewport } from \"@bian-womp/spark-protocol\";\n\nexport function isValidViewport(viewport: unknown): viewport is Viewport {\n return (\n viewport !== null &&\n typeof viewport === \"object\" &&\n \"x\" in viewport &&\n \"y\" in viewport &&\n \"zoom\" in viewport &&\n typeof (viewport as { x: unknown }).x === \"number\" &&\n typeof (viewport as { y: unknown }).y === \"number\" &&\n typeof (viewport as { zoom: unknown }).zoom === \"number\"\n );\n}\n\nexport function excludeViewportFromUIState<T extends { viewport?: unknown }>(\n uiState: T | null | undefined\n): Omit<T, \"viewport\"> {\n if (!uiState) {\n return {} as Omit<T, \"viewport\">;\n }\n const { viewport: _ignoredViewport, ...rest } = uiState;\n return rest;\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n RunnerOptions,\n RuntimeHistoryInfo,\n Viewport,\n RuntimeSnapshot,\n RunMode,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport {\n RemoteEngine,\n RemoteRuntimeClient,\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\";\nimport { isValidViewport } from \"../misc/viewport-utils\";\n\n// Counter for generating readable runner IDs\nlet remoteRunnerCounter = 0;\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected client?: RemoteRuntimeClient;\n protected engine?: RemoteEngine;\n private clientPromise?: Promise<RemoteRuntimeClient>;\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 { value: unknown; runtimeTypeId?: string }\n >();\n\n private listenersBound = false;\n private registryFetched = false;\n private registryFetchPromise?: Promise<void>;\n private readonly MAX_REGISTRY_FETCH_ATTEMPTS = 3;\n private readonly INITIAL_RETRY_DELAY_MS = 1000; // 1 second\n private readonly REGISTRY_FETCH_TIMEOUT_MS = 3000; // 3 seconds\n\n /**\n * Generate cache key that includes io type to prevent collisions\n * between input and output handles with the same name\n */\n private getCacheKey(\n nodeId: string,\n handle: string,\n io: \"input\" | \"output\"\n ): string {\n return `${nodeId}.${io}.${handle}`;\n }\n\n /**\n * Fetch full registry description from remote and register it locally.\n * Simplified with straightforward retry loop.\n * Ensures only one fetch happens at a time, even with concurrent calls.\n */\n private async fetchRegistry(client: RemoteRuntimeClient): Promise<void> {\n if (this.registryFetched) {\n return;\n }\n\n // If already fetching, wait for that fetch to complete\n if (this.registryFetchPromise) {\n return this.registryFetchPromise;\n }\n\n // Create promise wrapper and assign atomically to prevent race conditions\n // This ensures concurrent calls will see the promise and wait for it\n let promise: Promise<void>;\n this.registryFetchPromise = promise = (async () => {\n try {\n await this._doFetchRegistry(client);\n } finally {\n // Clear the promise after completion (success or failure)\n this.registryFetchPromise = undefined;\n }\n })();\n\n return promise;\n }\n\n /**\n * Internal method that performs the actual registry fetch.\n */\n private async _doFetchRegistry(client: RemoteRuntimeClient): Promise<void> {\n let lastError: Error | undefined;\n\n for (\n let attempt = 1;\n attempt <= this.MAX_REGISTRY_FETCH_ATTEMPTS;\n attempt++\n ) {\n try {\n // Add timeout to registry fetch - if it exceeds 3s, retry\n let timeoutId: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(\n () => reject(new Error(\"Registry fetch timeout (3s exceeded)\")),\n this.REGISTRY_FETCH_TIMEOUT_MS\n );\n });\n\n const fetchPromise = client.api.describeRegistry().finally(() => {\n // Clear timeout if request completes first\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n });\n\n const desc = await Promise.race([fetchPromise, timeoutPromise]);\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 policy: n.policy || {},\n impl: () => {},\n });\n }\n }\n\n this.registryFetched = true;\n this.emit(\"registry\", this.registry);\n return;\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (attempt < this.MAX_REGISTRY_FETCH_ATTEMPTS) {\n const delayMs =\n 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 lastError\n );\n\n // Wait before retrying\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // Max attempts reached, emit final error and throw\n console.error(\n `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts:`,\n lastError\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: lastError,\n attempt: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n throw lastError;\n }\n\n /**\n * Build RemoteRuntimeClient 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: RemoteRuntimeClient): void {\n // Subscribe to transport status changes\n // Convert RemoteRuntimeClient.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<RemoteRuntimeClient> {\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 // Create promise wrapper first, then assign immediately before async work starts\n let promise: Promise<RemoteRuntimeClient>;\n this.clientPromise = promise = (async () => {\n // Build client config from backend config\n const clientConfig = this.buildClientConfig(backend);\n\n // Wrap custom event handler to intercept flow-viewport events and emit viewport event\n const wrappedOnCustomEvent = (event: any) => {\n const msg = event?.message;\n if (\n msg &&\n typeof msg === \"object\" &&\n \"type\" in msg &&\n msg.type === \"viewport\"\n ) {\n const viewport = msg.payload?.viewport;\n if (isValidViewport(viewport)) {\n this.emit(\"viewport\", { viewport });\n }\n }\n // Call original handler if provided\n if (backend.onCustomEvent) {\n backend.onCustomEvent(event);\n }\n };\n\n // Create client with wrapped custom event handler\n const client = new RemoteRuntimeClient(clientConfig, {\n onCustomEvent: wrappedOnCustomEvent,\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 // Fetch registry before returning (wait for it to complete)\n // Only fetch if not already fetched (handles concurrent calls)\n if (!this.registryFetched) {\n console.info(\"[RemoteGraphRunner] Loading registry from remote...\");\n await this.fetchRegistry(client);\n console.info(\"[RemoteGraphRunner] Loaded registry from remote\");\n }\n\n // Clear promise on success\n this.clientPromise = undefined;\n return client;\n })();\n\n return promise;\n }\n\n constructor(backend: RemoteExecutionBackend) {\n super(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.engine;\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.api.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 if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\n // Remote: build remotely then launch\n this.ensureClient().then(async (client) => {\n await client.api.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.api.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(this.getCacheKey(nodeId, handle, \"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(this.getCacheKey(nodeId, handle, \"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.api.launch(opts);\n\n // Get the remote engine proxy and wire up event listeners\n const eng = client.engine;\n if (!this.listenersBound) {\n eng.on(\"value\", (e: any) => {\n this.valueCache.set(this.getCacheKey(e.nodeId, e.handle, 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 const runMode = opts?.runMode ?? \"manual\";\n this.emit(\"status\", { running: true, runMode });\n // Re-apply staged inputs using client.setInputs for consistency\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n await eng.setInputs(nodeId, map, undefined).catch(() => {\n // Ignore errors during launch - inputs will be set when user calls setInputs\n });\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 if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\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 setRunMode(runMode: RunMode): void {\n if (this.engine) {\n this.engine.setRunMode(runMode);\n this.emit(\"status\", { running: true, runMode });\n }\n }\n\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.computeNode(nodeId, options);\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.runFromHere(nodeId);\n }\n\n async cancelNodeRuns(nodeIds: string[]): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.cancelNodeRuns(nodeIds);\n }\n\n async setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): Promise<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 try {\n const client = await this.ensureClient();\n await client.engine.setInputs(nodeId, inputs, options);\n } catch (err) {\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 throw err;\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.engine.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n async triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.triggerExternal(nodeId, event, options);\n }\n\n async setViewport(viewport: Viewport): Promise<void> {\n const client = await this.ensureClient();\n await client.api.setViewport(viewport);\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.api.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.api.setExtData(data);\n }\n\n async updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.api.updateExtData(updates);\n }\n\n async commit(reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n const client = await this.ensureClient();\n try {\n const history = await client.api.commit(reason);\n return history;\n } catch (err) {\n console.error(\"[RemoteGraphRunner] Error committing:\", err);\n throw err;\n }\n }\n\n async undo(): Promise<boolean> {\n const client = await this.ensureClient();\n try {\n return await client.api.undo();\n } catch {\n return false;\n }\n }\n\n async redo(): Promise<boolean> {\n const client = await this.ensureClient();\n try {\n return await client.api.redo();\n } catch {\n return false;\n }\n }\n\n async snapshotFull() {\n const client = await this.ensureClient();\n try {\n return await client.api.snapshotFull();\n } catch {\n return { inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean; dry?: boolean }\n ) {\n // Hydrate local cache first so UI can display values immediately\n this.hydrateValueCache(payload, { dry: options?.dry });\n\n // Then sync with backend\n const client = await this.ensureClient();\n await client.api.applySnapshotFull(payload, {\n skipBuild: options?.skipBuild,\n });\n }\n\n async convertSnapshot(\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ): Promise<RuntimeSnapshotFull> {\n const client = await this.ensureClient();\n const converted = await client.api.convertSnapshot(converterConfig, {\n dry: options?.dry,\n });\n // Hydrate local cache with converted values\n this.hydrateValueCache(converted, { dry: options?.dry });\n return converted;\n }\n\n async pause(): Promise<void> {\n const client = await this.ensureClient();\n await client.api.pause();\n }\n\n async resume(): Promise<void> {\n const client = await this.ensureClient();\n await client.api.resume();\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: RuntimeSnapshot, opts?: { dry?: boolean }): 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(this.getCacheKey(nodeId, handle, \"input\"), {\n value,\n });\n this.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n dry: opts?.dry,\n });\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(this.getCacheKey(nodeId, handle, \"output\"), {\n value,\n });\n this.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n dry: opts?.dry,\n });\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.api.setEnvironment(env, opts);\n } else {\n try {\n const client = await this.ensureClient();\n await client.api.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 RemoteRuntimeClient.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 = this.getCacheKey(n.nodeId, h, \"output\");\n const rec = cache.get(key);\n if (rec) {\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(this.getCacheKey(n.nodeId, h, \"input\"));\n if (rec) 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\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 | undefined {\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 >= 3) 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 InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate, mergeInputHandleDescriptors } 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 missingInputs?: string[];\n missingOutputs?: string[];\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 missing?: boolean;\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 \n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n \n // First, add all static handles\n if (desc?.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n \n // Then, merge dynamic handles (dynamic can override/extend static)\n if (resolved.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = desc?.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n \n // Finally, apply overrides from node definition\n if (node.resolvedHandles?.inputs) {\n for (const [handle, overrideDesc] of Object.entries(node.resolvedHandles.inputs)) {\n const existingDesc = inputs[handle];\n const merged = mergeInputHandleDescriptors(existingDesc, overrideDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n \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 {\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n missingInputs = [],\n missingOutputs = [],\n } = 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 // Calculate base dimensions\n const baseRows = Math.max(inputOrder.length, outputOrder.length);\n const { width: baseWidth, height: baseHeight } = estimateNodeSizeFn({\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n });\n\n // Calculate final dimensions accounting for missing handles\n const finalRows = Math.max(\n inputOrder.length + missingInputs.length,\n outputOrder.length + missingOutputs.length\n );\n const width = baseWidth;\n const height =\n baseHeight + Math.max(0, finalRows - baseRows) * NODE_ROW_HEIGHT_PX;\n\n // Create bounds and layouts for regular handles\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\n // Create bounds and layouts for missing handles\n const missingHandleBounds = [\n ...missingInputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: inputOrder.length + i,\n nodeWidth: width,\n })\n ),\n ...missingOutputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: outputOrder.length + i,\n nodeWidth: width,\n })\n ),\n ];\n\n const missingHandleLayout = [\n ...missingInputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: inputOrder.length + i,\n }),\n missing: true as const,\n })),\n ...missingOutputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: outputOrder.length + i,\n }),\n missing: true as const,\n })),\n ];\n\n return {\n width,\n height,\n inputOrder,\n outputOrder,\n handles: [...handles, ...missingHandleBounds],\n handleLayout: [...handleLayout, ...missingHandleLayout],\n };\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n Dimensions,\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n XYPosition,\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 exists = wb.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 {\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n },\n { commit: true }\n );\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n const positions: Record<string, XYPosition> = {};\n let commit = false;\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n positions[c.id] = c.position;\n if (!c.dragging) commit = true;\n }\n });\n\n const sizes: Record<string, Dimensions> = {};\n changes.forEach((c) => {\n if (c.type === \"dimensions\" && c.dimensions) {\n sizes[c.id] = c.dimensions;\n if (!c.resizing) commit = true;\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 if (Object.keys(positions).length > 0) {\n wb.setPositions(positions, {\n commit: commit && !Object.keys(sizes).length,\n });\n }\n if (Object.keys(sizes).length > 0) {\n wb.setSizes(sizes, { commit });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) =>\n edges.forEach((e, idx) =>\n wb.disconnect(e.id, { commit: idx === edges.length - 1 })\n ),\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 nodes.forEach((n, idx) =>\n wb.removeNode(n.id, { commit: idx === nodes.length - 1 })\n );\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 off = wb.on(\"graphChanged\", () => {\n setTick((t) => t + 1);\n });\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 off = wb.on(\"graphUiChanged\", (evt) => {\n if (evt.change?.type === \"viewport\") return;\n setTick((t) => t + 1);\n });\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 {\n GraphDefinition,\n ResolvedHandles,\n HandleMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n getInputHandleMetadata,\n} from \"@bian-womp/spark-graph\";\nimport { Position, type Edge, type Node } 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 layoutNode,\n createHandleBounds,\n createHandleLayout,\n estimateNodeSize,\n type EstimateNodeSizeFunction,\n type CreateHandleBoundsFunction,\n type CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"./layout\";\nimport type { UIExtensionRegistry } from \"../core/ui-extensions\";\n\nexport interface RFEdgeData extends Record<string, unknown> {\n sourceNodeId: string;\n sourceNodeTypeId: string;\n sourceHandle: string;\n sourceHandleTypeId: string;\n targetNodeId: string;\n targetNodeTypeId: string;\n targetHandle: string;\n targetHandleTypeId: string;\n edgeTypeId?: string;\n isRunning: boolean;\n hasError: boolean;\n isInvalid: boolean;\n isMissing: boolean;\n custom?: Record<string, unknown>;\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 // Full resolved handles (includes all inputs/outputs with metadata for filtering private inputs)\n handles?: ResolvedHandles;\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 node dimensions\n renderWidth?: number;\n renderHeight?: number;\n initialWidth?: number;\n initialHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n handleMetadata?: Record<string, HandleMetadata | undefined>;\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 custom?: Record<string, unknown>;\n}\n\nexport type RFEdge = Edge<RFEdgeData>;\nexport type RFNode = Node<RFNodeData>;\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n sizes: Record<string, { width: number; height: 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 handles: Record<string, ResolvedHandles>;\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 customData?: {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n };\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 and cache handle data\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 } = opts.handles[n.nodeId] || {\n inputs: {},\n outputs: {},\n };\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 // 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 computeLayout = (\n node: GraphDefinition[\"nodes\"][number],\n overrides?: { width?: number; height?: number },\n missingInputs?: string[],\n missingOutputs?: string[]\n ) => {\n return layoutNodeOverride\n ? layoutNodeOverride({\n node,\n registry,\n showValues: opts.showValues,\n overrides,\n missingInputs,\n missingOutputs,\n })\n : layoutNode(\n {\n node,\n registry,\n showValues: opts.showValues,\n overrides,\n missingInputs,\n missingOutputs,\n },\n {\n estimateNodeSize: estimateNodeSizeFn,\n createHandleBounds: createHandleBoundsFn,\n createHandleLayout: createHandleLayoutFn,\n }\n );\n };\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const effectiveHandles = opts.handles[n.nodeId] || {\n inputs: {},\n outputs: {},\n };\n const { inputs: inputSource, outputs: outputSource } = effectiveHandles;\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const customSize = sizes?.[n.nodeId];\n const sizeOverrides = customSize\n ? { ...overrideSize, width: customSize.width, height: customSize.height }\n : overrideSize;\n\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n\n const geom = computeLayout(n, sizeOverrides, extraInputs, extraOutputs);\n const renderWidth = customSize?.width ?? geom.width;\n const renderHeight = customSize?.height ?? geom.height;\n\n const initialGeom = customSize\n ? computeLayout(n, overrideSize, extraInputs, extraOutputs)\n : geom;\n\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id) ?? \"unknown\",\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]) ?? \"unknown\",\n }));\n\n const handleLayout = geom.handleLayout;\n const handles = geom.handles;\n\n const handleMetadata: Record<string, HandleMetadata | undefined> = {};\n for (const handleId of Object.keys(inputSource)) {\n handleMetadata[handleId] = getInputHandleMetadata(inputSource, handleId);\n }\n\n const baseData: RFNodeData = {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n handles: opts.handles[n.nodeId],\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,\n renderHeight,\n initialWidth: initialGeom.width,\n initialHeight: initialGeom.height,\n inputValues: opts.inputs?.[n.nodeId],\n inputDefaults: {\n ...opts.handles?.[n.nodeId]?.inputDefaults,\n ...opts.inputDefaults?.[n.nodeId],\n },\n outputValues: opts.outputs?.[n.nodeId],\n handleMetadata,\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\n const customNodeData = opts.customData?.nodes;\n const mergedData = customNodeData?.[n.nodeId]\n ? { ...baseData, custom: customNodeData[n.nodeId] }\n : baseData;\n\n return {\n id: n.nodeId,\n data: mergedData,\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 measured: {\n width: renderWidth,\n height: renderHeight,\n },\n handles,\n width: renderWidth,\n height: renderHeight,\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 const edgeTypeId = e.typeId || undefined;\n\n // Get handle type information from cached handles\n const sourceHandles = opts.handles[e.source.nodeId];\n const targetHandles = opts.handles[e.target.nodeId];\n const sourceNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const targetNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n\n const sourceHandleTypeId = sourceHandles?.outputs[e.source.handle]\n ? formatDeclaredTypeSignature(sourceHandles.outputs[e.source.handle]) ??\n \"unknown\"\n : \"unknown\";\n const targetHandleTypeId = targetHandles?.inputs[e.target.handle]\n ? getInputTypeId(targetHandles.inputs, e.target.handle) ?? \"unknown\"\n : \"unknown\";\n\n const baseEdgeData: RFEdgeData = {\n sourceNodeId: e.source.nodeId,\n sourceNodeTypeId: sourceNode?.typeId || \"unknown\",\n sourceHandle: e.source.handle,\n sourceHandleTypeId,\n targetNodeId: e.target.nodeId,\n targetNodeTypeId: targetNode?.typeId || \"unknown\",\n targetHandle: e.target.handle,\n targetHandleTypeId,\n edgeTypeId,\n isRunning,\n hasError,\n isInvalid: isInvalidEdge,\n isMissing,\n };\n\n const customEdgeData = opts.customData?.edges;\n const mergedEdgeData = customEdgeData?.[e.id]\n ? { ...baseEdgeData, custom: customEdgeData[e.id] }\n : baseEdgeData;\n\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: edgeTypeId,\n type: \"default\",\n data: mergedEdgeData,\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 {\n RuntimeMetadata,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\nimport { excludeViewportFromUIState } from \"./viewport-utils\";\nimport type { WorkbenchUIState } from \"./types\";\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 fullUiState = wb.getUIState();\n const uiState = excludeViewportFromUIState(fullUiState);\n const runtimeState = wb.getRuntimeState();\n\n let snapshot: RuntimeSnapshotFull;\n if (runner.isRunning()) {\n const fullSnapshot = await runner.snapshotFull();\n snapshot = {\n ...fullSnapshot,\n def: wb.def,\n extData: {\n ...(fullSnapshot.extData || {}),\n ui: Object.keys(uiState || {}).length > 0 ? uiState : undefined,\n runtime: runtimeState || undefined,\n },\n };\n } else {\n const inputs = runner.getInputs(wb.def);\n snapshot = {\n def: wb.def,\n inputs,\n outputs: {},\n environment: {},\n extData: {\n ui: Object.keys(uiState || {}).length > 0 ? uiState : undefined,\n runtime: runtimeState || undefined,\n },\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 const uiWithoutViewport = excludeViewportFromUIState(\n extData.ui as WorkbenchUIState\n );\n wb.setUIState(uiWithoutViewport as WorkbenchUIState);\n }\n\n if (extData.runtime && typeof extData.runtime === \"object\") {\n wb.setRuntimeState(extData.runtime as RuntimeMetadata);\n }\n\n if (extData.custom && typeof extData.custom === \"object\") {\n wb.setCustomData(extData.custom as Record<string, unknown>);\n }\n\n if (runner.isRunning()) {\n await runner.applySnapshotFull({\n def: wb.def,\n environment,\n inputs,\n outputs,\n extData,\n });\n } else {\n runner.build(wb.def);\n\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\n }\n }\n\n if (extData) {\n await runner.setExtData(extData);\n }\n }\n}\n","import type { WorkbenchUIState } from \"./types\";\nimport type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { offsetImportedPositions } from \"@bian-womp/spark-graph\";\n\n/**\n * Merge UI state from source into target, remapping node IDs using nodeIdMap.\n * Preserves target state and adds/updates source state with remapped IDs.\n * If anchorPos and sourceDef are provided, positions will be offset relative to anchorPos.\n */\nexport function mergeUIState(\n targetUI: WorkbenchUIState | null | undefined,\n sourceUI: WorkbenchUIState | null | undefined,\n nodeIdMap: Record<string, string>,\n anchorPos?: { x: number; y: number },\n sourceDef?: GraphDefinition\n): WorkbenchUIState {\n const result: WorkbenchUIState = {\n ...targetUI,\n };\n\n if (!sourceUI) return result;\n\n // Merge positions with optional offset\n if (sourceUI.positions) {\n if (anchorPos && sourceDef) {\n // Apply offset when anchorPos and sourceDef are provided\n result.positions = offsetImportedPositions(\n targetUI?.positions ?? {},\n sourceUI.positions,\n sourceDef,\n nodeIdMap,\n anchorPos\n );\n } else {\n // Simple remapping without offset\n result.positions = {\n ...(targetUI?.positions || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.positions).map(([oldId, pos]) => [\n nodeIdMap[oldId] || oldId,\n pos,\n ])\n ),\n };\n }\n }\n\n // Merge selection: remap node IDs and edge IDs\n if (sourceUI.selection) {\n const remappedNodes = (sourceUI.selection.nodes || [])\n .map((id) => nodeIdMap[id] || id)\n .filter((id) => id); // Filter out invalid mappings\n\n const remappedEdges = sourceUI.selection.edges || []; // Edge IDs don't need remapping typically\n\n result.selection = {\n nodes: [...(targetUI?.selection?.nodes || []), ...remappedNodes],\n edges: [...(targetUI?.selection?.edges || []), ...remappedEdges],\n };\n }\n\n // Merge nodeNames: remap node IDs\n if (sourceUI.nodeNames) {\n result.nodeNames = {\n ...(targetUI?.nodeNames || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.nodeNames).map(([oldId, name]) => [\n nodeIdMap[oldId] || oldId,\n name,\n ])\n ),\n };\n }\n\n if (sourceUI.sizes) {\n result.sizes = {\n ...(targetUI?.sizes || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.sizes).map(([oldId, size]) => [\n nodeIdMap[oldId] || oldId,\n size,\n ])\n ),\n };\n }\n\n return result;\n}\n","/**\n * Flow thumbnail capture utility\n * Captures React Flow canvas as SVG image\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface ViewportTransform {\n translateX: number;\n translateY: number;\n scale: number;\n}\n\ninterface VisibleBounds {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\ninterface EdgePath {\n d: string;\n stroke: string;\n strokeWidth: number;\n}\n\ninterface NodeHandle {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n type: \"source\" | \"target\";\n}\n\ninterface NodeTitle {\n text: string;\n x: number;\n y: number;\n fontSize: number;\n fill: string;\n fontWeight: string;\n}\n\ninterface NodeRect {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n rx: number;\n ry: number;\n handles: NodeHandle[];\n title?: NodeTitle;\n}\n\nexport interface ThumbnailOptions {\n /**\n * If true, export the whole graph instead of just the viewport. Default: true\n */\n ignoreViewport?: boolean;\n /**\n * Padding to add when exporting whole graph (in pixels). Default: 40\n */\n padding?: number;\n /**\n * Whether to export handles. Default: true\n */\n exportHandles?: boolean;\n /**\n * Whether to export node titles. Default: true\n */\n exportNodeTitle?: boolean;\n /**\n * Whether to export background dot pattern. Default: true\n */\n exportBackgroundPattern?: boolean;\n /**\n * Background color of nodes. Default: \"#f3f4f6\"\n */\n nodeBackgroundColor?: string;\n /**\n * Color of background dot pattern. Default: \"#f1f1f1\"\n */\n backgroundPatternColor?: string;\n /**\n * Background color of the SVG. Default: \"#ffffff\"\n */\n backgroundColor?: string;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Parses CSS transform string to extract translate and scale values\n */\nfunction parseViewportTransform(transform: string): ViewportTransform {\n let translateX = 0;\n let translateY = 0;\n let scale = 1;\n\n if (transform && transform !== \"none\") {\n // Try translate() scale() format first\n const translateMatch = transform.match(\n /translate\\(([^,]+)px,\\s*([^)]+)px\\)/\n );\n const scaleMatch = transform.match(/scale\\(([^)]+)\\)/);\n\n if (translateMatch) {\n translateX = parseFloat(translateMatch[1]);\n translateY = parseFloat(translateMatch[2]);\n }\n if (scaleMatch) {\n scale = parseFloat(scaleMatch[1]);\n }\n\n // Fallback to matrix format\n if (!translateMatch) {\n const matrixMatch = transform.match(/matrix\\(([^)]+)\\)/);\n if (matrixMatch) {\n const values = matrixMatch[1]\n .split(\",\")\n .map((v) => parseFloat(v.trim()));\n if (values.length >= 6) {\n scale = Math.sqrt(values[0] * values[0] + values[1] * values[1]);\n translateX = values[4];\n translateY = values[5];\n }\n }\n }\n }\n\n return { translateX, translateY, scale };\n}\n\n/**\n * Calculates visible viewport bounds in flow coordinates\n */\nfunction calculateVisibleBounds(\n viewportRect: DOMRect,\n transform: ViewportTransform\n): VisibleBounds {\n const { translateX, translateY, scale } = transform;\n // Guard against division by zero\n if (scale === 0) {\n console.warn(\"[flowThumbnail] Viewport scale is 0, using default bounds\");\n return {\n minX: -translateX,\n minY: -translateY,\n maxX: viewportRect.width - translateX,\n maxY: viewportRect.height - translateY,\n };\n }\n // Screen to flow: (screenX - translateX) / scale\n return {\n minX: (0 - translateX) / scale,\n minY: (0 - translateY) / scale,\n maxX: (viewportRect.width - translateX) / scale,\n maxY: (viewportRect.height - translateY) / scale,\n };\n}\n\n/**\n * Parses border radius string (px or rem) to pixels\n */\nfunction parseBorderRadius(borderRadiusStr: string): number {\n if (!borderRadiusStr || borderRadiusStr === \"0px\") {\n return 8; // default\n }\n\n const match = borderRadiusStr.match(/([\\d.]+)(px|rem)/);\n if (match) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n // Convert rem to px (assuming 16px base) or use px directly\n return unit === \"rem\" ? value * 16 : value;\n }\n\n // Try direct parseFloat as fallback\n const parsed = parseFloat(borderRadiusStr);\n return isNaN(parsed) ? 8 : parsed;\n}\n\n/**\n * Extracts stroke color from element, with fallback\n */\nfunction extractStrokeColor(element: SVGPathElement | HTMLElement): string {\n if (element instanceof SVGPathElement) {\n return (\n element.getAttribute(\"stroke\") ||\n window.getComputedStyle(element).stroke ||\n \"#b1b1b7\"\n );\n }\n const style = window.getComputedStyle(element);\n return (\n style.borderColor || style.borderTopColor || \"#6b7280\" // gray-500 default\n );\n}\n\n/**\n * Extracts stroke/border width from element, ensuring minimum value\n */\nfunction extractStrokeWidth(\n element: SVGPathElement | HTMLElement,\n minWidth: number = 1\n): number {\n if (element instanceof SVGPathElement) {\n const width =\n parseFloat(element.getAttribute(\"stroke-width\") || \"0\") ||\n parseFloat(window.getComputedStyle(element).strokeWidth || \"2\");\n return width > 0 ? width : minWidth;\n }\n const style = window.getComputedStyle(element);\n const width = parseFloat(style.borderWidth || style.borderTopWidth || \"0\");\n return width > 0 ? width : minWidth;\n}\n\n/**\n * Checks if a rectangle intersects with visible bounds\n */\nfunction isRectVisible(\n x: number,\n y: number,\n width: number,\n height: number,\n bounds: VisibleBounds\n): boolean {\n return (\n x + width >= bounds.minX &&\n x <= bounds.maxX &&\n y + height >= bounds.minY &&\n y <= bounds.maxY\n );\n}\n\n/**\n * Parses path data to get bounding box\n * Handles M (moveTo), L (lineTo), C (cubic Bezier), Q (quadratic Bezier), and H/V (horizontal/vertical) commands\n */\nfunction getPathBounds(pathData: string): {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n} {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n // Match coordinates from various path commands: M, L, C, Q, T, S, H, V\n // Pattern matches: command letter followed by coordinate pairs\n const coordPattern = /[MLCQTSHV](-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*)/g;\n const coords = pathData.match(coordPattern);\n\n if (coords) {\n coords.forEach((coord) => {\n const match = coord.match(/(-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*)/);\n if (match) {\n const x = parseFloat(match[1]);\n const y = parseFloat(match[2]);\n if (!isNaN(x) && !isNaN(y)) {\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n });\n }\n\n return { minX, minY, maxX, maxY };\n}\n\n// ============================================================================\n// Edge Extraction\n// ============================================================================\n\n/**\n * Extracts visible edge paths from React Flow viewport\n */\nfunction extractEdgePaths(\n viewport: HTMLElement,\n visibleBounds: VisibleBounds | null\n): {\n edges: EdgePath[];\n bounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n const edges: EdgePath[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const edgePathElements = viewport.querySelectorAll(\n \".react-flow__edge-path\"\n ) as NodeListOf<SVGPathElement>;\n\n edgePathElements.forEach((pathEl) => {\n const pathData = pathEl.getAttribute(\"d\");\n if (!pathData) return;\n\n const pathBounds = getPathBounds(pathData);\n\n // Only include edge if it intersects with visible viewport (or if ignoring viewport)\n if (\n !visibleBounds ||\n (pathBounds.maxX >= visibleBounds.minX &&\n pathBounds.minX <= visibleBounds.maxX &&\n pathBounds.maxY >= visibleBounds.minY &&\n pathBounds.minY <= visibleBounds.maxY)\n ) {\n edges.push({\n d: pathData,\n stroke: extractStrokeColor(pathEl),\n strokeWidth: extractStrokeWidth(pathEl, 2),\n });\n\n // Update bounding box\n minX = Math.min(minX, pathBounds.minX);\n minY = Math.min(minY, pathBounds.minY);\n maxX = Math.max(maxX, pathBounds.maxX);\n maxY = Math.max(maxY, pathBounds.maxY);\n }\n });\n\n return { edges, bounds: { minX, minY, maxX, maxY } };\n}\n\n// ============================================================================\n// Node Extraction\n// ============================================================================\n\n/**\n * Extracts node position from transform style\n */\nfunction extractNodePosition(nodeEl: HTMLDivElement): { x: number; y: number } {\n const transformStyle = nodeEl.style.transform || \"\";\n const translateMatch = transformStyle.match(\n /translate\\(([^,]+)px,\\s*([^)]+)px\\)/\n );\n if (translateMatch) {\n return {\n x: parseFloat(translateMatch[1]),\n y: parseFloat(translateMatch[2]),\n };\n }\n return { x: 0, y: 0 };\n}\n\n/**\n * Extracts node dimensions from inline styles\n */\nfunction extractNodeDimensions(nodeEl: HTMLDivElement): {\n width: number;\n height: number;\n} {\n const widthMatch = nodeEl.style.width?.match(/(\\d+)px/);\n const heightMatch = nodeEl.style.height?.match(/(\\d+)px/);\n return {\n width: widthMatch ? parseFloat(widthMatch[1]) : 150,\n height: heightMatch ? parseFloat(heightMatch[1]) : 40,\n };\n}\n\n/**\n * Extracts node styles (colors, border, radius) from computed styles\n */\nfunction extractNodeStyles(\n nodeContent: HTMLElement,\n nodeBackgroundColor?: string\n): {\n fill: string;\n stroke: string;\n strokeWidth: number;\n rx: number;\n ry: number;\n} {\n const computedStyle = window.getComputedStyle(nodeContent);\n // Use provided background color or default gray background for nodes in thumbnail\n const fill = nodeBackgroundColor || \"#f3f4f6\"; // gray-100 equivalent\n const stroke = extractStrokeColor(nodeContent);\n const strokeWidth = extractStrokeWidth(nodeContent, 1);\n const borderRadiusStr = computedStyle.borderRadius || \"8px\";\n const rx = parseBorderRadius(borderRadiusStr);\n const ry = rx; // Use same radius for both x and y\n\n return { fill, stroke, strokeWidth, rx, ry };\n}\n\n/**\n * Determines if a handle is a source (output) or target (input)\n */\nfunction isHandleSource(handleEl: HTMLElement): boolean {\n return (\n handleEl.classList.contains(\"react-flow__handle-right\") ||\n handleEl.classList.contains(\"react-flow__handle-source\")\n );\n}\n\n/**\n * Extracts handle position and calculates absolute coordinates\n */\nfunction extractHandlePosition(\n handleEl: HTMLElement,\n nodeX: number,\n nodeY: number,\n nodeWidth: number,\n isSource: boolean\n): { x: number; y: number } {\n const handleStyle = window.getComputedStyle(handleEl);\n const handleTop = parseFloat(handleStyle.top || \"0\");\n const handleLeft = handleStyle.left;\n const handleRight = handleStyle.right;\n\n const handleY = nodeY + handleTop;\n let handleX: number;\n\n if (isSource) {\n // Source handles are on the right edge\n if (handleRight !== \"auto\" && handleRight !== \"\") {\n const rightValue = parseFloat(handleRight) || 0;\n handleX = nodeX + nodeWidth + rightValue;\n } else {\n handleX = nodeX + nodeWidth;\n }\n } else {\n // Target handles are on the left edge\n if (handleLeft !== \"auto\" && handleLeft !== \"\") {\n const leftValue = parseFloat(handleLeft) || 0;\n handleX = nodeX + leftValue;\n } else {\n handleX = nodeX;\n }\n }\n\n return { x: handleX, y: handleY };\n}\n\n/**\n * Extracts handles from a node element\n */\nfunction extractNodeHandles(\n nodeEl: HTMLDivElement,\n nodeX: number,\n nodeY: number,\n nodeWidth: number\n): NodeHandle[] {\n const handles: NodeHandle[] = [];\n const handleElements = nodeEl.querySelectorAll(\n \".react-flow__handle\"\n ) as NodeListOf<HTMLElement>;\n\n handleElements.forEach((handleEl) => {\n const handleStyle = window.getComputedStyle(handleEl);\n const handleWidth = parseFloat(handleStyle.width || \"12\");\n const handleHeight = parseFloat(handleStyle.height || \"12\");\n\n const isSource = isHandleSource(handleEl);\n const position = extractHandlePosition(\n handleEl,\n nodeX,\n nodeY,\n nodeWidth,\n isSource\n );\n\n handles.push({\n x: position.x,\n y: position.y,\n width: handleWidth,\n height: handleHeight,\n fill: handleStyle.backgroundColor || \"rgba(255, 255, 255, 0.5)\",\n stroke: extractStrokeColor(handleEl),\n strokeWidth: extractStrokeWidth(handleEl, 1),\n type: isSource ? \"source\" : \"target\",\n });\n });\n\n return handles;\n}\n\n/**\n * Extracts node title text and position\n */\nfunction extractNodeTitle(\n nodeEl: HTMLDivElement,\n nodeX: number,\n nodeY: number\n): NodeTitle | undefined {\n const titleElement = nodeEl.querySelector(\n \".react-flow__node-title\"\n ) as HTMLElement | null;\n\n if (!titleElement) return undefined;\n\n const titleText = titleElement.textContent || titleElement.innerText || \"\";\n if (!titleText.trim()) return undefined;\n\n const titleStyle = window.getComputedStyle(titleElement);\n const titleRect = titleElement.getBoundingClientRect();\n const nodeRect = nodeEl.getBoundingClientRect();\n\n // Calculate title position relative to node (in flow coordinates)\n const titleRelativeX = titleRect.left - nodeRect.left;\n const titleRelativeY = titleRect.top - nodeRect.top;\n\n // Get font properties\n const fontSize = parseFloat(titleStyle.fontSize || \"14\");\n const fill = titleStyle.color || \"#374151\"; // gray-700 default\n const fontWeight = titleStyle.fontWeight || \"600\"; // bold default\n\n // Calculate text position (SVG text uses baseline)\n const lineHeight = parseFloat(\n titleStyle.lineHeight || String(fontSize * 1.2)\n );\n const textBaselineOffset = lineHeight * 0.8; // Approximate baseline offset\n\n return {\n text: titleText.trim(),\n x: nodeX + titleRelativeX,\n y: nodeY + titleRelativeY + textBaselineOffset,\n fontSize,\n fill,\n fontWeight,\n };\n}\n\n/**\n * Extracts visible nodes from React Flow viewport\n */\nfunction extractNodes(\n viewport: HTMLElement,\n visibleBounds: VisibleBounds | null,\n options: ThumbnailOptions = {}\n): {\n nodes: NodeRect[];\n bounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n const {\n exportHandles = true,\n exportNodeTitle = true,\n nodeBackgroundColor,\n } = options;\n\n const nodes: NodeRect[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const nodeElements = viewport.querySelectorAll(\n \".react-flow__node\"\n ) as NodeListOf<HTMLDivElement>;\n\n nodeElements.forEach((nodeEl) => {\n const position = extractNodePosition(nodeEl);\n const dimensions = extractNodeDimensions(nodeEl);\n\n // Get the actual node content div (first child)\n const nodeContent = nodeEl.firstElementChild as HTMLElement;\n if (!nodeContent) return;\n\n const styles = extractNodeStyles(nodeContent, nodeBackgroundColor);\n const handles = exportHandles\n ? extractNodeHandles(nodeEl, position.x, position.y, dimensions.width)\n : [];\n const title = exportNodeTitle\n ? extractNodeTitle(nodeEl, position.x, position.y)\n : undefined;\n\n // Only include node if it's within visible viewport (or if ignoring viewport)\n if (\n !visibleBounds ||\n isRectVisible(\n position.x,\n position.y,\n dimensions.width,\n dimensions.height,\n visibleBounds\n )\n ) {\n nodes.push({\n x: position.x,\n y: position.y,\n width: dimensions.width,\n height: dimensions.height,\n ...styles,\n handles,\n title,\n });\n\n // Update bounding box\n minX = Math.min(minX, position.x);\n minY = Math.min(minY, position.y);\n maxX = Math.max(maxX, position.x + dimensions.width);\n maxY = Math.max(maxY, position.y + dimensions.height);\n\n // Update bounding box to include handles\n handles.forEach((handle) => {\n minX = Math.min(minX, handle.x);\n minY = Math.min(minY, handle.y);\n maxX = Math.max(maxX, handle.x + handle.width);\n maxY = Math.max(maxY, handle.y + handle.height);\n });\n }\n });\n\n return { nodes, bounds: { minX, minY, maxX, maxY } };\n}\n\n// ============================================================================\n// SVG Rendering\n// ============================================================================\n\n/**\n * Creates SVG element with dot pattern background (matching React Flow)\n */\nfunction createSVGElement(\n width: number,\n height: number,\n options: ThumbnailOptions = {}\n): { svg: SVGSVGElement; group: SVGGElement } {\n const {\n exportBackgroundPattern = true,\n backgroundPatternColor = \"#f1f1f1\",\n backgroundColor = \"#ffffff\",\n } = options;\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", String(width));\n svg.setAttribute(\"height\", String(height));\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\n // Create background rectangle with configurable background color\n const bgRect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n bgRect.setAttribute(\"width\", String(width));\n bgRect.setAttribute(\"height\", String(height));\n bgRect.setAttribute(\"fill\", backgroundColor);\n svg.appendChild(bgRect);\n\n // Create dot pattern if enabled\n if (exportBackgroundPattern) {\n // Create defs section for patterns\n const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n\n // Create dot pattern (matching React Flow's BackgroundVariant.Dots)\n // React Flow uses gap={12} and size={1} by default\n const pattern = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"pattern\"\n );\n pattern.setAttribute(\"id\", \"dot-pattern\");\n pattern.setAttribute(\"x\", \"0\");\n pattern.setAttribute(\"y\", \"0\");\n pattern.setAttribute(\"width\", \"24\"); // gap between dots (matching React Flow default)\n pattern.setAttribute(\"height\", \"24\");\n pattern.setAttribute(\"patternUnits\", \"userSpaceOnUse\");\n\n // Create a circle for the dot (centered in the pattern cell)\n const circle = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"circle\"\n );\n circle.setAttribute(\"cx\", \"12\"); // Center of 24x24 pattern cell\n circle.setAttribute(\"cy\", \"12\");\n circle.setAttribute(\"r\", \"1\"); // dot radius = 1 (matching React Flow size={1})\n circle.setAttribute(\"fill\", backgroundPatternColor);\n\n pattern.appendChild(circle);\n defs.appendChild(pattern);\n svg.appendChild(defs);\n\n // Create pattern overlay rectangle\n const patternRect = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"rect\"\n );\n patternRect.setAttribute(\"width\", String(width));\n patternRect.setAttribute(\"height\", String(height));\n patternRect.setAttribute(\"fill\", \"url(#dot-pattern)\");\n svg.appendChild(patternRect);\n }\n\n // Create group with transform\n const group = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svg.appendChild(group);\n\n return { svg, group };\n}\n\n/**\n * Renders a node rectangle to SVG group\n */\nfunction renderNodeRect(group: SVGGElement, node: NodeRect): void {\n const rectEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rectEl.setAttribute(\"x\", String(node.x));\n rectEl.setAttribute(\"y\", String(node.y));\n rectEl.setAttribute(\"width\", String(node.width));\n rectEl.setAttribute(\"height\", String(node.height));\n rectEl.setAttribute(\"rx\", String(node.rx));\n rectEl.setAttribute(\"ry\", String(node.ry));\n rectEl.setAttribute(\"fill\", node.fill);\n rectEl.setAttribute(\"stroke\", node.stroke);\n rectEl.setAttribute(\"stroke-width\", String(node.strokeWidth));\n group.appendChild(rectEl);\n}\n\n/**\n * Renders a handle to SVG group\n */\nfunction renderHandle(group: SVGGElement, handle: NodeHandle): void {\n const handleEl = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"rect\"\n );\n // Handles are centered on edges\n handleEl.setAttribute(\"x\", String(handle.x - handle.width / 2));\n handleEl.setAttribute(\"y\", String(handle.y - handle.height / 2));\n handleEl.setAttribute(\"width\", String(handle.width));\n handleEl.setAttribute(\"height\", String(handle.height));\n handleEl.setAttribute(\"rx\", String(handle.width / 2)); // Make handles circular/rounded\n handleEl.setAttribute(\"ry\", String(handle.height / 2));\n handleEl.setAttribute(\"fill\", handle.fill);\n handleEl.setAttribute(\"stroke\", handle.stroke);\n handleEl.setAttribute(\"stroke-width\", String(handle.strokeWidth));\n group.appendChild(handleEl);\n}\n\n/**\n * Renders node title text to SVG group\n */\nfunction renderNodeTitle(group: SVGGElement, title: NodeTitle): void {\n const textEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n textEl.setAttribute(\"x\", String(title.x));\n textEl.setAttribute(\"y\", String(title.y));\n textEl.setAttribute(\"font-size\", String(title.fontSize));\n textEl.setAttribute(\"fill\", title.fill);\n textEl.setAttribute(\"font-weight\", title.fontWeight);\n textEl.setAttribute(\"font-family\", \"system-ui, -apple-system, sans-serif\");\n textEl.textContent = title.text;\n group.appendChild(textEl);\n}\n\n/**\n * Renders an edge path to SVG group\n */\nfunction renderEdgePath(group: SVGGElement, edge: EdgePath): void {\n const pathEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathEl.setAttribute(\"d\", edge.d);\n pathEl.setAttribute(\"fill\", \"none\");\n pathEl.setAttribute(\"stroke\", edge.stroke);\n pathEl.setAttribute(\"stroke-width\", String(edge.strokeWidth));\n group.appendChild(pathEl);\n}\n\n/**\n * Renders all nodes, handles, titles, and edges to SVG group\n */\nfunction renderContentToSVG(\n group: SVGGElement,\n nodes: NodeRect[],\n edges: EdgePath[],\n transformX: number,\n transformY: number,\n options: ThumbnailOptions = {}\n): void {\n const { exportHandles = true, exportNodeTitle = true } = options;\n\n group.setAttribute(\"transform\", `translate(${transformX}, ${transformY})`);\n\n // Render nodes\n nodes.forEach((node) => {\n renderNodeRect(group, node);\n if (exportHandles) {\n node.handles.forEach((handle) => renderHandle(group, handle));\n }\n if (exportNodeTitle && node.title) {\n renderNodeTitle(group, node.title);\n }\n });\n\n // Render edges\n edges.forEach((edge) => renderEdgePath(group, edge));\n}\n\n// ============================================================================\n// Main Capture Function\n// ============================================================================\n\n/**\n * Captures a React Flow container element as an SVG image and returns data URL\n * @param containerElement - The React Flow container DOM element\n * @param options - Options for thumbnail capture\n * @returns Promise resolving to SVG data URL string, or null if capture fails\n */\nexport async function captureCanvasThumbnail(\n containerElement: HTMLElement | null,\n options: ThumbnailOptions = {}\n): Promise<string | null> {\n const {\n ignoreViewport = true,\n padding = 40,\n exportHandles = true,\n exportNodeTitle = true,\n exportBackgroundPattern = true,\n nodeBackgroundColor,\n backgroundPatternColor,\n backgroundColor,\n } = options;\n\n if (!containerElement) {\n console.warn(\"[flowThumbnail] Container element is null\");\n return null;\n }\n\n try {\n // Find the React Flow viewport element\n const reactFlowViewport = containerElement.querySelector(\n \".react-flow__viewport\"\n ) as HTMLElement | null;\n\n if (!reactFlowViewport) {\n console.warn(\"[flowThumbnail] React Flow viewport not found\");\n return null;\n }\n\n // Parse viewport transform\n const viewportStyle = window.getComputedStyle(reactFlowViewport);\n const viewportTransform =\n viewportStyle.transform || viewportStyle.getPropertyValue(\"transform\");\n const transform = parseViewportTransform(viewportTransform);\n\n // Calculate visible bounds (null if ignoring viewport)\n const viewportRect = reactFlowViewport.getBoundingClientRect();\n const visibleBounds = ignoreViewport\n ? null\n : calculateVisibleBounds(viewportRect, transform);\n\n // Extract edges and nodes (pass null bounds if ignoring viewport to get all)\n const { edges, bounds: edgeBounds } = extractEdgePaths(\n reactFlowViewport,\n visibleBounds\n );\n const { nodes, bounds: nodeBounds } = extractNodes(\n reactFlowViewport,\n visibleBounds,\n {\n exportHandles,\n exportNodeTitle,\n nodeBackgroundColor,\n }\n );\n\n // Calculate overall bounding box\n // Handle case where one or both bounds might be Infinity (no content)\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n if (edgeBounds.minX !== Infinity) {\n minX = Math.min(minX, edgeBounds.minX);\n minY = Math.min(minY, edgeBounds.minY);\n maxX = Math.max(maxX, edgeBounds.maxX);\n maxY = Math.max(maxY, edgeBounds.maxY);\n }\n\n if (nodeBounds.minX !== Infinity) {\n minX = Math.min(minX, nodeBounds.minX);\n minY = Math.min(minY, nodeBounds.minY);\n maxX = Math.max(maxX, nodeBounds.maxX);\n maxY = Math.max(maxY, nodeBounds.maxY);\n }\n\n // If no content found, return null\n if (minX === Infinity || (nodes.length === 0 && edges.length === 0)) {\n if (ignoreViewport) {\n console.warn(\"[flowThumbnail] No content found in graph\");\n return null;\n }\n // Fallback to visible viewport bounds if not ignoring viewport\n minX = visibleBounds!.minX;\n minY = visibleBounds!.minY;\n maxX = visibleBounds!.maxX;\n maxY = visibleBounds!.maxY;\n }\n\n // Calculate content bounds with padding if ignoring viewport\n let contentMinX: number;\n let contentMinY: number;\n let contentMaxX: number;\n let contentMaxY: number;\n\n if (ignoreViewport) {\n // Add padding when exporting whole graph\n contentMinX = minX - padding;\n contentMinY = minY - padding;\n contentMaxX = maxX + padding;\n contentMaxY = maxY + padding;\n } else {\n // Use the visible viewport bounds exactly (what the user sees)\n contentMinX = visibleBounds!.minX;\n contentMinY = visibleBounds!.minY;\n contentMaxX = visibleBounds!.maxX;\n contentMaxY = visibleBounds!.maxY;\n }\n\n const contentWidth = contentMaxX - contentMinX;\n const contentHeight = contentMaxY - contentMinY;\n\n // Create SVG with options\n const { svg, group } = createSVGElement(contentWidth, contentHeight, {\n exportBackgroundPattern,\n backgroundPatternColor,\n backgroundColor,\n });\n\n // Render content with options\n renderContentToSVG(group, nodes, edges, -contentMinX, -contentMinY, {\n exportHandles,\n exportNodeTitle,\n });\n\n // Serialize SVG to string\n const serializer = new XMLSerializer();\n const svgString = serializer.serializeToString(svg);\n\n // Return SVG data URL\n const svgDataUrl = `data:image/svg+xml;base64,${btoa(\n unescape(encodeURIComponent(svgString))\n )}`;\n return svgDataUrl;\n } catch (error) {\n console.error(\"[flowThumbnail] Failed to capture thumbnail:\", error);\n return null;\n }\n}\n\n/**\n * Captures a React Flow container element as an SVG image and downloads it\n * @param containerElement - The React Flow container DOM element\n * @param options - Options for thumbnail capture\n * @returns Promise resolving to true if successful, false otherwise\n */\nexport async function downloadCanvasThumbnail(\n containerElement: HTMLElement | null,\n options: ThumbnailOptions = {}\n): Promise<boolean> {\n const svgDataUrl = await captureCanvasThumbnail(containerElement, options);\n if (!svgDataUrl) {\n return false;\n }\n\n // Create blob and download\n const base64Data = svgDataUrl.split(\",\")[1];\n const svgString = atob(base64Data);\n const blob = new Blob([svgString], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = `flow-thumbnail-${Date.now()}.svg`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n return true;\n}\n","import React, { createContext, useContext } from \"react\";\nimport type {\n GraphDefinition,\n InputValidationError,\n RegistryError,\n ResolvedHandles,\n SystemError,\n RunMode,\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\";\nimport {\n NodeContextMenuHandlers,\n DefaultContextMenuHandlers,\n SelectionContextMenuHandlers,\n} from \"../context-menu/ContextMenuHandlers\";\nimport type { CopiedGraphData } from \"../../core/InMemoryWorkbench\";\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};\n\nexport type KeyboardShortcutEnables = {\n undo?: boolean;\n redo?: boolean;\n copy?: boolean;\n paste?: boolean;\n duplicate?: boolean;\n selectAll?: boolean;\n delete?: boolean;\n};\n\nexport type KeyboardShortcuts = {\n undo?: string; // e.g., \"⌘/Ctrl + Z\"\n redo?: string; // e.g., \"⌘/Ctrl + Shift + Z\"\n copy?: string; // e.g., \"⌘/Ctrl + C\"\n paste?: string; // e.g., \"⌘/Ctrl + V\"\n duplicate?: string; // e.g., \"⌘/Ctrl + D\"\n delete?: string; // e.g., \"Delete\"\n selectAll?: string; // e.g., \"⌘/Ctrl + A\"\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 // Optional: customize selection context menu handlers\n getSelectionContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n selection: { nodes: string[]; edges: string[] },\n baseHandlers: SelectionContextMenuHandlers,\n ctx?: {\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n ) => SelectionContextMenuHandlers; // Optional: customize default context menu handlers\n getDefaultContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n baseHandlers: DefaultContextMenuHandlers\n ) => DefaultContextMenuHandlers;\n // Optional: customize node context menu handlers\n getNodeContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n nodeId: string,\n baseHandlers: NodeContextMenuHandlers\n ) => NodeContextMenuHandlers;\n // Optional: provide custom storage for copied data\n // If not provided, workbench will use internal storage\n getCopiedDataStorage?: () => {\n get: () => CopiedGraphData | null;\n set: (data: CopiedGraphData | null) => void;\n };\n // Optional: enable/disable keyboard shortcuts per action (default: enabled)\n enableKeyboardShortcuts?: KeyboardShortcutEnables;\n // Optional: customize keyboard shortcut labels\n keyboardShortcuts?: KeyboardShortcuts;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n\n // Graph\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 handlesMap: Record<string, ResolvedHandles>;\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\n // Run mode\n runMode: RunMode;\n setRunMode: (mode: RunMode) => void;\n runNode: (nodeId: string) => Promise<void>;\n runFromHere: (nodeId: string) => Promise<void>;\n abortNode: (nodeId: string) => 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 // Registry version (increments when registry enums/types/nodes change)\n registryVersion: number;\n // Overrides for customizing behavior\n overrides?: WorkbenchOverrides;\n\n // Node naming\n getNodeDisplayName: (nodeId: string) => string;\n setNodeName: (nodeId: string, name: string | undefined) => void;\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 NodeRuntimeMetadata,\n RunMode,\n} from \"@bian-womp/spark-protocol\";\nimport { 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\";\nimport { excludeViewportFromUIState, isValidViewport } from \"../viewport-utils\";\n\n// Helper to compute invalidated status from runtime metadata\nfunction computeInvalidatedFromMetadata(\n metadata: NodeRuntimeMetadata | undefined\n): boolean {\n if (!metadata) return true;\n const { lastSuccessAt, lastInputAt, lastRunAt } = metadata;\n if (!lastSuccessAt && !lastRunAt) return true;\n if (!lastInputAt || Object.keys(lastInputAt).length === 0) return false;\n const maxInputTime = Math.max(...Object.values(lastInputAt));\n return maxInputTime > (lastSuccessAt ?? lastRunAt ?? 0);\n}\n\nexport function WorkbenchProvider({\n wb,\n runner,\n overrides,\n uiVersion,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\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 [runMode, setRunModeState] = useState<RunMode>(\"manual\");\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 [registryVersion, setRegistryVersion] = useState(0);\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 };\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 useEffect(() => {\n const offRunnerStatus = runner.on(\"status\", (status) => {\n if (status.runMode) {\n setRunModeState(status.runMode);\n }\n });\n\n return () => {\n offRunnerStatus();\n };\n }, [runner]);\n\n const handlesMap = useMemo(() => {\n const out: Record<string, ResolvedHandles> = {};\n for (const n of wb.def.nodes) {\n out[n.nodeId] = computeEffectiveHandles(n, wb.registry);\n }\n return out;\n }, [wb, wb.def, graphTick, wb.registry, registryVersion]);\n // Def and IO values\n const inputsMap = useMemo(\n () => runner.getInputs(wb.def),\n [runner, wb, wb.def, valuesTick]\n );\n const inputDefaultsMap = useMemo(\n () => runner.getInputDefaults(wb.def),\n [runner, wb, wb.def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(wb.def),\n [runner, wb, wb.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 wb.def.nodes) {\n const outputsDecl = handlesMap[n.nodeId]?.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 }, [wb, wb.def, outputsMap, handlesMap]);\n\n // Initialize nodes and derive invalidated status from persisted metadata\n useEffect(() => {\n const workbenchRuntimeState = wb.getRuntimeState() ?? { nodes: {} };\n setNodeStatus((prev) => {\n const next = { ...prev };\n const metadata = workbenchRuntimeState;\n for (const n of wb.def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n const nodeMeta = metadata.nodes[n.nodeId];\n const updates: Partial<NodeRunStatus> = {};\n if (cur.invalidated === undefined) {\n updates.invalidated = computeInvalidatedFromMetadata(nodeMeta);\n }\n if (cur.activeRunIds === undefined) {\n updates.activeRunIds = [];\n }\n if (cur.activeRuns === undefined) {\n updates.activeRuns = 0;\n }\n if (nodeMeta?.lastErrorSummary && cur.lastError === undefined) {\n updates.lastError = nodeMeta.lastErrorSummary;\n }\n if (Object.keys(updates).length > 0) {\n next[n.nodeId] = { ...cur, ...updates };\n }\n }\n return next;\n });\n }, [wb.def, wb]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of wb.def.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of wb.def.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 = wb.def.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: wb.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, reason: \"auto-layout\" });\n }, [wb, wb.def, wb.registry, registryVersion, 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 const getNodeDisplayName = useCallback(\n (nodeId: string): string => {\n const customName = wb.getNodeName(nodeId);\n if (customName) return customName;\n\n const node = wb.def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return nodeId;\n\n const desc = wb.registry.nodes.get(node.typeId);\n return desc?.displayName || node.typeId;\n },\n [wb, wb.registry, registryVersion]\n );\n\n const setNodeName = useCallback(\n (nodeId: string, name: string | undefined) => {\n wb.setNodeName(nodeId, name, { commit: true, reason: \"rename-node\" });\n },\n [wb]\n );\n\n // Helper to save runtime metadata and UI state to extData\n const saveUiRuntimeMetadata = useCallback(\n async (workbench: InMemoryWorkbench, graphRunner: IGraphRunner) => {\n try {\n const current = workbench.getRuntimeState() ?? { nodes: {} };\n const metadata = { nodes: { ...current.nodes } };\n\n // Clean up metadata for nodes that no longer exist\n const nodeIds = new Set(workbench.def.nodes.map((n) => n.nodeId));\n for (const nodeId of Object.keys(metadata.nodes)) {\n if (!nodeIds.has(nodeId)) {\n delete metadata.nodes[nodeId];\n }\n }\n\n // Save cleaned metadata to workbench state\n workbench.setRuntimeState(metadata);\n\n const fullUiState = workbench.getUIState();\n const uiWithoutViewport = excludeViewportFromUIState(fullUiState);\n\n // Use updateExtData for efficient batched partial updates\n const updates: Array<{ path: string; value: unknown }> = [];\n if (Object.keys(uiWithoutViewport || {}).length > 0) {\n updates.push({ path: \"ui\", value: uiWithoutViewport });\n }\n updates.push({ path: \"runtime\", value: metadata });\n await graphRunner.updateExtData(updates);\n } catch (err) {\n console.warn(\n \"[WorkbenchContext] Failed to save runtime metadata:\",\n err\n );\n }\n },\n []\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 (\n changeType === \"moveNode\" ||\n changeType === \"moveNodes\" ||\n changeType === \"resizeNodes\"\n )\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 let changed = false;\n for (const n of wb.def.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?.dry) return;\n const now = Date.now();\n if (e?.io === \"input\") {\n const nodeId = e.nodeId;\n const handle = e.handle;\n // Track input timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastInputAt: {\n ...(nodeMeta.lastInputAt ?? {}),\n [handle]: now,\n },\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 } else if (e?.io === \"output\") {\n const nodeId = e.nodeId as string;\n const handle = e.handle as string;\n // Track output timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastOutputAt: {\n ...(nodeMeta.lastOutputAt ?? {}),\n [handle]: now,\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 const now = Date.now();\n // Track error timestamp and summary in workbench runtime state\n const err = nodeError.err;\n let errorSummary: { message: string; code?: number } | undefined;\n if (err && typeof err === \"object\") {\n const errAny = err as any;\n const message = errAny.userMessage || errAny.message || String(err);\n const code = errAny.statusCode || errAny.code;\n errorSummary = {\n message: typeof message === \"string\" ? message : String(message),\n code: typeof code === \"number\" ? code : undefined,\n };\n }\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastErrorAt: now,\n lastRunAt: now,\n ...(errorSummary ? { lastErrorSummary: errorSummary } : {}),\n }));\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: errorSummary,\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 const now = Date.now();\n // Track run timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(id, (nodeMeta) => ({\n ...nodeMeta,\n lastRunAt: now,\n }));\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 },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: now }));\n } else if (s.kind === \"node-custom-data\") {\n const id = s.nodeId;\n wb.setCustomNodeData(id, s.data, { commit: false, merge: true });\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 const now = Date.now();\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n const hadError = !!(isValidRunId && errorRunsRef.current[id]?.[runId]);\n // Track success timestamp if no error in workbench runtime state\n if (!hadError) {\n wb.updateNodeRuntimeMetadata(id, (nodeMeta) => {\n const updated = { ...nodeMeta, lastSuccessAt: now };\n // Clear error summary on success\n if (updated.lastErrorSummary) {\n delete updated.lastErrorSummary;\n }\n return updated;\n });\n }\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 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 offWbRegistryChanged = wb.on(\"registryChanged\", (evt) => {\n setRegistryVersion((v) => v + 1);\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 offWbGraphUiChangedForLog = 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 offWbGraphChangedForUpdate = wb.on(\"graphChanged\", async (event) => {\n // Build detailed reason from change type\n let reason = \"graph-changed\";\n if (event.change) {\n const changeType = event.change.type;\n if (changeType === \"addNode\") {\n reason = \"add-node\";\n } else if (changeType === \"removeNode\") {\n reason = \"remove-node\";\n } else if (changeType === \"connect\") {\n reason = \"connect-edge\";\n } else if (changeType === \"disconnect\") {\n reason = \"disconnect-edge\";\n } else if (changeType === \"updateParams\") {\n reason = \"update-node-params\";\n } else if (changeType === \"updateEdgeType\") {\n reason = \"update-edge-type\";\n } else if (changeType === \"setInputs\") {\n reason = \"set-inputs\";\n }\n }\n\n if (event.change?.type === \"setInputs\") {\n const { nodeId, inputs } = event.change;\n await runner.setInputs(nodeId, inputs, { dry: event.dry });\n }\n\n if (!runner.isRunning()) {\n if (event.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner.commit(reason).catch((err) => {\n console.error(\"[WorkbenchContext] Error committing:\", err);\n return undefined;\n });\n if (history) wb.setHistory(history);\n }\n return;\n }\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 await runner.setInputs(nodeId, inputs, { dry: true });\n }\n if (copyOutputsFrom) {\n await runner.copyOutputs(copyOutputsFrom, nodeId, { dry: true });\n }\n } else {\n await runner.update(event.def, { dry: !!inputs });\n if (inputs) {\n await runner.setInputs(nodeId, inputs, { dry: false });\n }\n }\n } else if (event.change?.type !== \"setInputs\") {\n await runner.update(event.def, { dry: event.dry });\n }\n\n if (event.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(event.reason ?? reason)\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing after update:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\n } catch (err) {\n console.error(\"[WorkbenchContext] Error updating graph:\", err);\n }\n });\n const offWbSetValidation = wb.on(\"validationChanged\", (r) =>\n setValidation(r)\n );\n const offWbSelectionChanged = wb.on(\"selectionChanged\", async (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n if (sel.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(sel.reason ?? \"selection\")\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing selection change:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\n });\n const offWbGraphUiChanged = wb.on(\"graphUiChanged\", async (event) => {\n // Handle viewport changes separately (send via SetViewport command, not commit)\n if (event.change?.type === \"viewport\") {\n const viewport = wb.getViewport();\n if (viewport && runner.setViewport) {\n runner.setViewport(viewport).catch((err) => {\n console.warn(\n \"[WorkbenchContext] Failed to send viewport update:\",\n err\n );\n });\n }\n return;\n }\n\n // Only commit if commit flag is true (e.g., drag end, not during dragging)\n if (event.commit) {\n // Build detailed reason from change type\n let reason = \"ui-changed\";\n if (event.change) {\n const changeType = event.change.type;\n if (changeType === \"moveNode\") {\n reason = \"move-node\";\n } else if (changeType === \"moveNodes\") {\n reason = \"move-nodes\";\n } else if (changeType === \"resizeNodes\") {\n reason = \"resize-nodes\";\n } else if (changeType === \"selection\") {\n reason = \"selection\";\n } else if (changeType === \"customNodeData\") {\n reason = \"custom-node-data\";\n } else if (changeType === \"customEdgeData\") {\n reason = \"custom-edge-data\";\n } else if (changeType === \"customMetaData\") {\n reason = \"custom-meta\";\n } else if (changeType === \"customData\") {\n reason = \"custom\";\n }\n }\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(event.reason ?? reason)\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing UI changes:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\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 (registry) => {\n wb.setRegistry(registry);\n });\n\n const offFlowViewport = runner.on(\"viewport\", (event) => {\n const viewport = event.viewport;\n if (isValidViewport(viewport)) {\n wb.setViewport(viewport);\n }\n });\n\n const offRunnerTransport = runner.on(\"transport\", (t) => {\n if (t.state === \"disconnected\") {\n console.info(\n \"[WorkbenchContext] Transport disconnected, resetting node status\"\n );\n // Reinitialize node status with invalidated=true for all nodes\n setNodeStatus(() => {\n const next: Record<string, NodeRunStatus> = {};\n const metadata = wb.getRuntimeState() ?? { nodes: {} };\n for (const n of wb.def.nodes) {\n const nodeMeta = metadata.nodes[n.nodeId];\n next[n.nodeId] = {\n activeRuns: 0,\n activeRunIds: [],\n invalidated: computeInvalidatedFromMetadata(nodeMeta),\n };\n }\n return next;\n });\n setEdgeStatus({});\n setFallbackStarts({});\n errorRunsRef.current = {};\n }\n });\n\n const offWbRuntimeMetadataChanged = wb.on(\n \"runtimeMetadataChanged\",\n (event) => {\n const workbenchRuntimeState = wb.getRuntimeState() ?? { nodes: {} };\n setNodeStatus((prev) => {\n const next = { ...prev };\n const metadata = workbenchRuntimeState;\n let changed = false;\n\n // If nodeId is specified, only update that node; otherwise update all nodes\n const nodesToUpdate = event.nodeId\n ? wb.def.nodes.filter((n) => n.nodeId === event.nodeId)\n : wb.def.nodes;\n\n for (const n of nodesToUpdate) {\n const cur = next[n.nodeId];\n if (!cur) continue;\n const nodeMeta = metadata.nodes[n.nodeId];\n const newInvalidated = computeInvalidatedFromMetadata(nodeMeta);\n if (cur.invalidated !== newInvalidated) {\n next[n.nodeId] = { ...cur, invalidated: newInvalidated };\n changed = true;\n }\n }\n\n return changed ? next : prev;\n });\n }\n );\n\n wb.refreshValidation();\n\n return () => {\n offRunnerValue();\n offRunnerError();\n offRunnerInvalidate();\n offRunnerStats();\n offWbRegistryChanged();\n offWbGraphChanged();\n offWbGraphUiChangedForLog();\n offWbGraphUiChanged();\n offWbValidationChanged();\n offWbError();\n offWbGraphChangedForUpdate();\n offWbSetValidation();\n offWbSelectionChanged();\n offRunnerRegistry();\n offRunnerTransport();\n offFlowViewport();\n offWbRuntimeMetadataChanged();\n };\n }, [runner, wb]);\n\n const isRunning = useCallback(() => runner.isRunning(), [runner]);\n\n const setRunMode = useCallback(\n (mode: RunMode) => {\n if (mode === runMode) return;\n\n runner.setRunMode(mode);\n setRunModeState(mode);\n },\n [runMode, runner]\n );\n\n const runNodeAction = useCallback(\n async (nodeId: string) => {\n // Check if we're in auto mode or if node has autoRun policy\n const nodeHasAutoRun = wb.shouldNodeAutoRun(nodeId);\n const shouldUseTriggerExternal = runMode === \"auto\" || nodeHasAutoRun;\n\n if (shouldUseTriggerExternal) {\n // In auto mode or when node has autoRun, use triggerExternal with invalidate event\n await runner.triggerExternal(nodeId, { action: \"invalidate\" });\n } else {\n // In manual mode without autoRun, use computeNode\n await runner.computeNode(nodeId);\n }\n },\n [runner, wb, runMode]\n );\n\n const runFromHereAction = useCallback(\n async (nodeId: string) => {\n await runner.runFromHere(nodeId);\n },\n [runner]\n );\n\n const abortNodeAction = useCallback(\n (nodeId: string) => {\n runner.cancelNodeRuns([nodeId]);\n },\n [runner]\n );\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 selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n handlesMap,\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 runMode,\n setRunMode,\n runNode: runNodeAction,\n runFromHere: runFromHereAction,\n abortNode: abortNodeAction,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n uiVersion,\n registryVersion,\n overrides,\n getNodeDisplayName,\n setNodeName,\n }),\n [\n wb,\n runner,\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 handlesMap,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n runMode,\n setRunMode,\n runNodeAction,\n runFromHereAction,\n abortNodeAction,\n runAutoLayout,\n wb,\n runner,\n uiVersion,\n registryVersion,\n overrides,\n getNodeDisplayName,\n setNodeName,\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 from \"react\";\nimport { StopIcon, PlayIcon, FastForwardIcon } from \"@phosphor-icons/react\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function DefaultNodeHeader({\n id,\n typeId,\n validation,\n right,\n showId,\n}: {\n id: string;\n typeId?: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n}) {\n const ctx = useWorkbenchContext();\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Use getNodeDisplayName if typeId is provided, otherwise use title prop\n const displayName = typeId ? ctx.getNodeDisplayName(id) : id;\n const effectiveTypeId = typeId ?? id;\n\n // Get the default display name (without custom name) for comparison\n const getDefaultDisplayName = React.useCallback((): string => {\n if (!typeId) return id;\n const node = ctx.wb.def.nodes.find((n) => n.nodeId === id);\n if (!node) return id;\n const desc = ctx.wb.registry.nodes.get(node.typeId);\n return desc?.displayName || node.typeId;\n }, [ctx, id, typeId]);\n\n const handleDoubleClick = React.useCallback(\n (e: React.MouseEvent) => {\n // Only allow editing if typeId is provided (enables renaming)\n if (!typeId) return;\n e.stopPropagation();\n setIsEditing(true);\n setEditValue(displayName);\n },\n [typeId, displayName]\n );\n\n const handleSave = React.useCallback(() => {\n if (!typeId) return;\n const trimmed = editValue.trim();\n const defaultDisplayName = getDefaultDisplayName();\n // If the trimmed value matches the default display name or typeId, clear the custom name\n ctx.setNodeName(\n id,\n trimmed === defaultDisplayName || trimmed === effectiveTypeId\n ? undefined\n : trimmed\n );\n setIsEditing(false);\n }, [ctx, id, editValue, getDefaultDisplayName, effectiveTypeId, typeId]);\n\n const handleCancel = React.useCallback(() => {\n setIsEditing(false);\n setEditValue(displayName);\n }, [displayName]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n handleSave();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n handleCancel();\n }\n },\n [handleSave, handleCancel]\n );\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\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 {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"flex-1 h-full text-sm bg-transparent border border-blue-500 rounded px-1 outline-none wb-nodrag\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n />\n ) : (\n <strong\n className={`react-flow__node-title flex-1 h-full text-sm select-none truncate ${\n typeId ? \"cursor-text\" : \"\"\n }`}\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n onDoubleClick={handleDoubleClick}\n title={typeId ? \"Double-click to rename\" : undefined}\n >\n {displayName}\n </strong>\n )}\n <div className=\"flex items-center gap-1\">\n {/* Run node button shows in both manual and auto mode */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n void ctx.runNode(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-green-600 dark:hover:text-green-400 transition-colors\"\n title=\"Run node\"\n >\n <PlayIcon size={10} weight=\"fill\" />\n </button>\n {ctx.runMode === \"manual\" && (\n <>\n <button\n onClick={(e) => {\n e.stopPropagation();\n void ctx.runFromHere(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors\"\n title=\"Run from here\"\n >\n <FastForwardIcon size={10} weight=\"fill\" />\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n ctx.abortNode(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors\"\n title=\"Abort node\"\n >\n <StopIcon size={10} weight=\"fill\" />\n </button>\n </>\n )}\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","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={`${labelClassName} ${\n 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 { type NodeProps, type Node } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport NodeHandles from \"./NodeHandles\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { getHandleClassName, type RFNode } from \"./mapping\";\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<RFNode>, \"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 data-handle-id={handleId}\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, { useRef } from \"react\";\nimport { type NodeProps, NodeResizer } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { getNodeBorderClassNames, type RFNode } from \"./mapping\";\nimport { DefaultNodeHeader } from \"./DefaultNodeHeader\";\nimport { DefaultNodeContent } from \"./DefaultNodeContent\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<RFNode>) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const { typeId } = data;\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 ref={nodeRef}\n className={cx(\n \"rounded-lg bg-white/50 !dark:bg-stone-900 w-full h-full relative\",\n containerBorder\n )}\n >\n <NodeResizer\n isVisible={selected}\n minWidth={data.initialWidth}\n minHeight={data.initialHeight}\n />\n <DefaultNodeHeader\n id={id}\n typeId={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n","import React from \"react\";\nimport { BaseEdge, EdgeProps, getBezierPath } from \"@xyflow/react\";\nimport type { RFEdge } from \"./mapping\";\n\nexport const DefaultEdge = React.memo(function DefaultEdge({\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n style,\n markerEnd,\n data,\n}: EdgeProps<RFEdge>) {\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n return (\n <BaseEdge id={id} path={edgePath} style={style} markerEnd={markerEnd} />\n );\n});\n","import type { Registry } from \"@bian-womp/spark-graph\";\nimport type { RuntimeHistoryInfo } from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type {\n NodeContextMenuHandlers,\n SelectionContextMenuHandlers,\n DefaultContextMenuHandlers,\n} from \"./ContextMenuHandlers\";\nimport type { CopiedGraphData } from \"../../core/InMemoryWorkbench\";\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 getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void,\n runNode?: (nodeId: string) => Promise<void>,\n runFromHere?: (nodeId: string) => Promise<void>\n): NodeContextMenuHandlers {\n return {\n onDelete: () => {\n wb.removeNode(nodeId, { commit: true });\n onClose();\n },\n onDuplicate: async () => {\n wb.duplicateNodeWithEdges(nodeId, runner, {\n commit: true,\n reason: \"duplicate-node-with-edges\",\n });\n onClose();\n },\n onRunNode: runNode\n ? async () => {\n try {\n await runNode(nodeId);\n } catch {}\n onClose();\n }\n : undefined,\n onRunFromHere: runFromHere\n ? async () => {\n try {\n await runFromHere(nodeId);\n } catch {}\n onClose();\n }\n : undefined,\n onBake: async (handleId: string) => {\n const nodePosition = wb.getPositions()[nodeId] || { x: 0, y: 0 };\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n await wb.bake(registry, runner, raw, typeId || \"\", nodePosition, {\n commit: true,\n reason: \"bake\",\n });\n onClose();\n },\n onCopy: () => {\n const copyHandler = createNodeCopyHandler(\n wb,\n runner,\n nodeId,\n getDefaultNodeSize,\n onCopyResult\n );\n copyHandler();\n onClose();\n },\n onCopyId: async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n },\n onClose,\n };\n}\n\n/**\n * Creates a copy handler that copies the current selection and optionally stores the result.\n */\nexport function createCopyHandler(\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void\n): () => void {\n return () => {\n const getNodeSize = getDefaultNodeSize\n ? (nodeId: string, typeId: string) => getDefaultNodeSize(typeId)\n : undefined;\n const data = wb.copySelection(runner, getNodeSize);\n if (onCopyResult) {\n onCopyResult(data);\n }\n };\n}\n\n/**\n * Creates a copy handler for a single node (temporarily selects it, copies, then restores selection).\n */\nexport function createNodeCopyHandler(\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n nodeId: string,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void\n): () => void {\n return () => {\n // Select the node first, then copy\n const currentSelection = wb.getSelection();\n wb.setSelection({ nodes: [nodeId], edges: [] });\n const getNodeSize = getDefaultNodeSize\n ? (nodeId: string, typeId: string) => getDefaultNodeSize(typeId)\n : undefined;\n const data = wb.copySelection(runner, getNodeSize);\n // Restore original selection\n wb.setSelection(currentSelection);\n if (onCopyResult) {\n onCopyResult(data);\n }\n };\n}\n\n/**\n * Creates base selection context menu handlers.\n */\nexport function createSelectionContextMenuHandlers(\n wb: InMemoryWorkbench,\n onClose: () => void,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void,\n runner?: IGraphRunner\n): SelectionContextMenuHandlers {\n const onDuplicate = runner\n ? () => {\n wb.duplicateSelection(runner, {\n commit: true,\n reason: \"duplicate-selection\",\n });\n onClose();\n }\n : undefined;\n\n return {\n onCopy: runner\n ? createCopyHandler(wb, runner, getDefaultNodeSize, onCopyResult)\n : () => {\n // No-op if runner not available\n onClose();\n },\n onDelete: () => {\n wb.deleteSelection({ commit: true, reason: \"delete-selection\" });\n onClose();\n },\n onDuplicate,\n onClose,\n };\n}\n\n/**\n * Creates base default context menu handlers.\n */\nexport function createDefaultContextMenuHandlers(\n onAddNode: (\n typeId: string,\n opts: { position: { x: number; y: number } }\n ) => void,\n onClose: () => void,\n onPaste?: (position: { x: number; y: number }) => void,\n runner?: IGraphRunner,\n getCopiedData?: () => CopiedGraphData | null,\n clearCopiedData?: () => void,\n history?: RuntimeHistoryInfo | undefined,\n wb?: InMemoryWorkbench\n): DefaultContextMenuHandlers {\n // Wrap paste handler to clear storage after paste\n const wrappedOnPaste =\n onPaste && getCopiedData && clearCopiedData\n ? (position: { x: number; y: number }) => {\n onPaste(position);\n clearCopiedData();\n }\n : onPaste;\n\n const hasPasteData = getCopiedData ? () => !!getCopiedData() : undefined;\n const canUndo = history ? history.undoCount > 0 : undefined;\n const canRedo = history ? history.redoCount > 0 : undefined;\n\n const onSelectAll = wb\n ? () => {\n const allNodeIds = wb.def.nodes.map((n) => n.nodeId);\n const allEdgeIds = wb.def.edges.map((e) => e.id);\n wb.setSelection(\n { nodes: allNodeIds, edges: allEdgeIds },\n { commit: true, reason: \"select-all\" }\n );\n onClose();\n }\n : undefined;\n\n return {\n onAddNode,\n onPaste: wrappedOnPaste,\n hasPasteData,\n onUndo: runner ? () => runner.undo().then(() => onClose()) : undefined,\n onRedo: runner ? () => runner.redo().then(() => onClose()) : undefined,\n onSelectAll,\n canUndo,\n canRedo,\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 node = wb.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, { 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 {\n isInputPrivate,\n getInputTypeId,\n getInputDeclaredTypes,\n} 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\";\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 wb,\n registryVersion,\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 handlesMap,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = wb.def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = wb.def.edges.find((e) => e.id === selectedEdgeId);\n\n // Use precomputed handles map from context\n const effectiveHandles = selectedNode\n ? handlesMap[selectedNode.nodeId] ?? {\n inputs: {},\n outputs: {},\n inputDefaults: {},\n }\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 ? {\n ...effectiveHandles.inputDefaults,\n ...inputDefaultsMap[selectedNodeId],\n }\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, wb.registry, registryVersion, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\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 select-none`}\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(wb.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 declaredTypes = getInputDeclaredTypes(\n effectiveHandles.inputs,\n h\n );\n const typeLabel = Array.isArray(declaredTypes)\n ? declaredTypes.join(\" | \")\n : typeId ?? \"\";\n const isLinked = wb.def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const inbound = new Set(\n wb.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 {typeLabel}\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 select-text\"\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 {wb.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 select-text\"\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\";\n\nexport interface ContextMenuButtonProps {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n shortcut?: string;\n}\n\n// Helper to format shortcut for current platform\nfunction formatShortcut(shortcut: string): string {\n const isMac =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent.toLowerCase().includes(\"mac\");\n return shortcut.replace(/⌘\\/Ctrl/g, isMac ? \"⌘\" : \"Ctrl\");\n}\n\nexport function ContextMenuButton({\n label,\n onClick,\n disabled = false,\n shortcut,\n}: ContextMenuButtonProps) {\n return (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-between\"\n onClick={onClick}\n disabled={disabled}\n >\n <span>{label}</span>\n {shortcut && (\n <span className=\"text-gray-400 text-xs ml-4\">\n {formatShortcut(shortcut)}\n </span>\n )}\n </button>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport type { DefaultContextMenuProps } from \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n handlers,\n registry,\n nodeIds,\n keyboardShortcuts = {\n undo: \"⌘/Ctrl + Z\",\n redo: \"⌘/Ctrl + Shift + Z\",\n paste: \"⌘/Ctrl + V\",\n selectAll: \"⌘/Ctrl + A\",\n },\n}: DefaultContextMenuProps) {\n const rf = useReactFlow();\n const [query, setQuery] = useState(\"\");\n const [hasPasteData, setHasPasteData] = useState(false);\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? nodeIds.filter((id) => id.toLowerCase().includes(q))\n : nodeIds;\n\n const canUndo = handlers.canUndo ?? false;\n const canRedo = handlers.canRedo ?? false;\n useEffect(() => {\n if (!open) return;\n if (handlers.hasPasteData) {\n const result = handlers.hasPasteData();\n setHasPasteData(result);\n } else {\n setHasPasteData(false);\n }\n }, [open, handlers.hasPasteData]);\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 handlePaste = () => {\n if (!handlers.onPaste) return;\n const p = rf.screenToFlowPosition({ x: clientPos.x, y: clientPos.y });\n handlers.onPaste(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-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700 select-none\"\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 {hasPasteData && handlers.onPaste && (\n <ContextMenuButton\n label=\"Paste\"\n onClick={handlePaste}\n shortcut={keyboardShortcuts.paste}\n />\n )}\n {(handlers.onUndo || handlers.onRedo || handlers.onSelectAll) && (\n <>\n {hasPasteData && handlers.onPaste && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n {handlers.onSelectAll && (\n <ContextMenuButton\n label=\"Select All\"\n onClick={handlers.onSelectAll}\n shortcut={keyboardShortcuts.selectAll}\n />\n )}\n {handlers.onSelectAll && (handlers.onUndo || handlers.onRedo) && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n {handlers.onUndo && (\n <ContextMenuButton\n label=\"Undo\"\n onClick={handlers.onUndo}\n disabled={!canUndo}\n shortcut={keyboardShortcuts.undo}\n />\n )}\n {handlers.onRedo && (\n <ContextMenuButton\n label=\"Redo\"\n onClick={handlers.onRedo}\n disabled={!canRedo}\n shortcut={keyboardShortcuts.redo}\n />\n )}\n {(handlers.onUndo || handlers.onRedo) && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n </>\n )}\n {hasPasteData &&\n handlers.onPaste &&\n !handlers.onUndo &&\n !handlers.onRedo && <div className=\"h-px bg-gray-200 my-1\" />}\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 rounded px-2 py-1 text-sm outline-none focus:border-gray-400 select-text\"\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 \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n handlers,\n bakeableOutputs,\n runMode,\n wb,\n keyboardShortcuts = {\n copy: \"⌘/Ctrl + C\",\n duplicate: \"⌘/Ctrl + E\",\n delete: \"Delete\",\n },\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 // Determine if this is a start node (no inbound edges)\n const isStartNode = wb\n ? !wb.def.edges.some((e) => e.target.nodeId === nodeId)\n : false;\n\n // Check if node has outbound edges (required for \"Run workflow\" / \"Run from here\")\n const hasOutboundEdges = wb\n ? wb.def.edges.some((e) => e.source.nodeId === nodeId)\n : false;\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 select-none\"\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 <ContextMenuButton\n label=\"Delete\"\n onClick={handlers.onDelete}\n shortcut={keyboardShortcuts.delete}\n />\n <ContextMenuButton\n label=\"Duplicate\"\n onClick={handlers.onDuplicate}\n shortcut={keyboardShortcuts.duplicate}\n />\n {/* Run node is always visible (works in both manual and auto mode via triggerExternal) */}\n {handlers.onRunNode && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunNode}\n >\n Run node\n </button>\n )}\n {runMode === \"manual\" && handlers.onRunFromHere && hasOutboundEdges && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunFromHere}\n >\n {isStartNode ? \"Run workflow\" : \"Run from here\"}\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n <ContextMenuButton\n label=\"Copy\"\n onClick={handlers.onCopy}\n shortcut={keyboardShortcuts.copy}\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 {bakeableOutputs.length > 0 && (\n <>\n <div className=\"h-px bg-gray-200 my-1\" />\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 </>\n )}\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport type { SelectionContextMenuProps } from \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function SelectionContextMenu({\n open,\n clientPos,\n handlers,\n keyboardShortcuts = {\n copy: \"⌘/Ctrl + C\",\n duplicate: \"⌘/Ctrl + E\",\n delete: \"Delete\",\n },\n}: SelectionContextMenuProps) {\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 useEffect(() => {\n if (open) ref.current?.focus();\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;\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) - 100\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 select-none\"\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\">Selection</div>\n <ContextMenuButton\n label=\"Copy\"\n onClick={handlers.onCopy}\n shortcut={keyboardShortcuts.copy}\n />\n {handlers.onDuplicate && (\n <ContextMenuButton\n label=\"Duplicate\"\n onClick={handlers.onDuplicate}\n shortcut={keyboardShortcuts.duplicate}\n />\n )}\n <ContextMenuButton\n label=\"Delete\"\n onClick={handlers.onDelete}\n shortcut={keyboardShortcuts.delete}\n />\n </div>\n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\n\ninterface KeyboardShortcutToastProps {\n message: string;\n duration?: number;\n onClose: () => void;\n}\n\nexport function KeyboardShortcutToast({\n message,\n duration = 1000,\n onClose,\n}: KeyboardShortcutToastProps) {\n const [isVisible, setIsVisible] = useState(true);\n const onCloseRef = useRef(onClose);\n const fadeOutTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Keep onClose ref up to date\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsVisible(false);\n // Wait for fade-out animation before calling onClose\n fadeOutTimerRef.current = setTimeout(() => {\n onCloseRef.current();\n }, 300);\n }, duration);\n\n return () => {\n clearTimeout(timer);\n if (fadeOutTimerRef.current) {\n clearTimeout(fadeOutTimerRef.current);\n }\n };\n }, [duration]);\n\n return (\n <div\n className={`fixed top-4 left-1/2 -translate-x-1/2 z-[2000] pointer-events-none transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"bg-white border border-gray-300 rounded-lg shadow-lg px-2 py-1 text-sm text-gray-700 font-medium whitespace-nowrap\">\n {message}\n </div>\n </div>\n );\n}\n\n// Hook to manage toast state\nexport function useKeyboardShortcutToast() {\n const [toast, setToast] = useState<{ message: string; id: number } | null>(\n null\n );\n\n const showToast = (message: string) => {\n const id = Date.now();\n setToast({ message, id });\n };\n\n const hideToast = () => {\n setToast(null);\n };\n\n return { toast, showToast, hideToast };\n}\n","import React, { useMemo, useRef, useEffect, useState } from \"react\";\nimport type { ReactFlowInstance, Node, Edge } from \"@xyflow/react\";\n\nexport const SelectionBoundOverlay: React.FC<{\n selection: { nodes: string[]; edges: string[] };\n rfInstance: ReactFlowInstance<Node, Edge> | null;\n viewportTick: number;\n}> = ({ selection, rfInstance, viewportTick }) => {\n const overlayRef = useRef<HTMLDivElement>(null);\n const [parentRect, setParentRect] = useState<DOMRect | null>(null);\n\n useEffect(() => {\n if (!overlayRef.current) return;\n const parent = overlayRef.current.parentElement;\n if (!parent) return;\n\n const updateRect = () => {\n setParentRect(parent.getBoundingClientRect());\n };\n\n updateRect();\n const resizeObserver = new ResizeObserver(updateRect);\n resizeObserver.observe(parent);\n\n const scrollHandler = () => updateRect();\n window.addEventListener(\"scroll\", scrollHandler, true);\n\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener(\"scroll\", scrollHandler, true);\n };\n }, [viewportTick]);\n\n const selectionBounds = useMemo(() => {\n if (\n typeof document === \"undefined\" ||\n !rfInstance ||\n !parentRect ||\n selection.nodes.length < 2\n ) {\n return null;\n }\n\n let bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null = null;\n\n for (const nodeId of selection.nodes) {\n const el = document.querySelector<HTMLElement>(\n `.react-flow__node[data-id=\"${nodeId}\"]`\n );\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n const relativeLeft = rect.left - parentRect.left;\n const relativeTop = rect.top - parentRect.top;\n const relativeRight = rect.right - parentRect.left;\n const relativeBottom = rect.bottom - parentRect.top;\n\n if (!bounds) {\n bounds = {\n left: relativeLeft,\n top: relativeTop,\n right: relativeRight,\n bottom: relativeBottom,\n };\n } else {\n bounds.left = Math.min(bounds.left, relativeLeft);\n bounds.top = Math.min(bounds.top, relativeTop);\n bounds.right = Math.max(bounds.right, relativeRight);\n bounds.bottom = Math.max(bounds.bottom, relativeBottom);\n }\n }\n\n return bounds;\n }, [selection.nodes, rfInstance, viewportTick, parentRect]);\n\n if (!selectionBounds || selection.nodes.length < 2) {\n return <div ref={overlayRef} style={{ display: \"none\" }} />;\n }\n\n const { left, top, right, bottom } = selectionBounds;\n const width = right - left;\n const height = bottom - top;\n\n return (\n <div\n ref={overlayRef}\n style={{\n position: \"absolute\",\n left: `${left}px`,\n top: `${top}px`,\n width: `${width}px`,\n height: `${height}px`,\n border: \"1px dashed #0ea5e9\",\n pointerEvents: \"none\",\n zIndex: 4,\n boxSizing: \"border-box\",\n }}\n />\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 ReactFlowInstance,\n Node,\n Edge,\n type ReactFlowProps,\n} from \"@xyflow/react\";\nimport lod from \"lodash\";\nimport type { Viewport } from \"@bian-womp/spark-protocol\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultEdge } from \"./DefaultEdge\";\nimport { DefaultContextMenu } from \"./context-menu/DefaultContextMenu\";\nimport { NodeContextMenu } from \"./context-menu/NodeContextMenu\";\nimport { SelectionContextMenu } from \"./context-menu/SelectionContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n createNodeContextMenuHandlers,\n createSelectionContextMenuHandlers,\n createDefaultContextMenuHandlers,\n getBakeableOutputs,\n} from \"./context-menu/ContextMenuHelpers\";\nimport type { CopiedGraphData } from \"../core/InMemoryWorkbench\";\nimport type { RuntimeHistoryInfo } from \"@bian-womp/spark-protocol\";\nimport {\n KeyboardShortcutToast,\n useKeyboardShortcutToast,\n} from \"./KeyboardShortcutToast\";\nimport { SelectionBoundOverlay } from \"./SelectionBoundOverlay\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n setViewport: (viewport: Viewport) => void;\n};\n\nexport interface WorkbenchCanvasProps {\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 reactFlowProps?: Partial<\n Omit<\n ReactFlowProps<Node, Edge>,\n | \"nodes\"\n | \"edges\"\n | \"nodeTypes\"\n | \"edgeTypes\"\n | \"connectionLineComponent\"\n | \"onInit\"\n | \"onConnect\"\n | \"onEdgesChange\"\n | \"onEdgesDelete\"\n | \"onNodesDelete\"\n | \"onNodesChange\"\n | \"onMoveEnd\"\n >\n > & {\n onInit?: (instance: ReactFlowInstance<Node, Edge>) => void;\n };\n}\n\nexport const WorkbenchCanvasComponent = React.forwardRef<\n WorkbenchCanvasHandle,\n WorkbenchCanvasProps\n>((props, ref) => {\n const {\n showValues,\n toString,\n toElement,\n getDefaultNodeSize,\n reactFlowProps,\n } = props;\n const {\n wb,\n handlesMap,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n uiVersion,\n registryVersion,\n runner,\n overrides,\n runNode,\n runFromHere,\n runMode,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n const [historyState, setHistoryState] = useState<\n RuntimeHistoryInfo | undefined\n >(wb.getHistory());\n\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\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 measured: n.measured,\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 custom: n.data.custom,\n },\n });\n return lod.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 data: e.data && {\n edgeTypeId: e.data.edgeTypeId,\n isRunning: e.data.isRunning,\n hasError: e.data.hasError,\n isInvalid: e.data.isInvalid,\n isMissing: e.data.isMissing,\n custom: e.data.custom,\n },\n });\n return lod.isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<ReactFlowInstance<Node, Edge> | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(\n ref,\n () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView();\n } catch (err) {\n console.warn(\"Failed to fit view\", err);\n }\n },\n setViewport: (viewport: Viewport) => {\n if (rfInstanceRef.current) {\n rfInstanceRef.current.setViewport(lod.clone(viewport));\n }\n },\n }),\n []\n );\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const ui = useMemo(() => wb.getUI(), [wb, uiVersion]);\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 allNodeRenderers = ui.getAllNodeRenderers();\n for (const typeId of Object.keys(allNodeRenderers)) {\n custom.set(typeId, allNodeRenderers[typeId]);\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 // Include registryVersion to recompute when registry enums/types change\n }, [wb, wb.registry, registryVersion, ui, uiVersion]);\n\n const edgeTypes = useMemo(() => {\n // Use default edge renderer override if registered, otherwise use DefaultEdge\n const customEdgeRenderer = ui.getEdgeRenderer();\n return { default: customEdgeRenderer || DefaultEdge };\n }, [uiVersion, ui]);\n\n // Track selection state to prevent unnecessary re-renders\n const [selection, setSelection] = useState(() => wb.getSelection());\n useEffect(() => {\n const off = wb.on(\"selectionChanged\", (sel) => {\n setSelection({ nodes: sel.nodes, edges: sel.edges });\n });\n return () => off();\n }, [wb]);\n\n const rfData = useMemo(() => {\n const out = toReactFlow(\n wb.def,\n wb.getPositions(),\n wb.getSizes(),\n wb.registry,\n {\n showValues,\n inputs: inputsMap,\n inputDefaults: inputDefaultsMap,\n outputs: outputsMap,\n handles: handlesMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(selection.nodes),\n selectedEdgeIds: new Set(selection.edges),\n getDefaultNodeSize,\n ui,\n customData: wb.getCustomData(),\n }\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 inputDefaultsMap,\n outputsMap,\n handlesMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n selection,\n ui,\n getDefaultNodeSize,\n wb,\n uiVersion,\n ]);\n\n // const throttled = useThrottledValue(rfData, 100);\n\n type MenuState =\n | null\n | ({ type: \"default\" } & { menuPos: { x: number; y: number } })\n | ({ type: \"selection\" } & { menuPos: { x: number; y: number } })\n | ({ type: \"node\" } & {\n menuPos: { x: number; y: number };\n nodeId: string;\n });\n\n const [menuState, setMenuState] = useState<MenuState>(null);\n\n // Compute the rectangular screen-space bounds of the current selection\n const getSelectionScreenBounds = (): {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null => {\n if (typeof document === \"undefined\") return null;\n const selection = wb.getSelection();\n if (!selection.nodes.length) return null;\n\n let bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null = null;\n\n for (const nodeId of selection.nodes) {\n const el = document.querySelector<HTMLElement>(\n `.react-flow__node[data-id=\"${nodeId}\"]`\n );\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n if (!bounds) {\n bounds = {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n };\n } else {\n bounds.left = Math.min(bounds.left, rect.left);\n bounds.top = Math.min(bounds.top, rect.top);\n bounds.right = Math.max(bounds.right, rect.right);\n bounds.bottom = Math.max(bounds.bottom, rect.bottom);\n }\n }\n\n return bounds;\n };\n\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n\n const selection = wb.getSelection();\n const isSingleNodeSelected = selection.nodes.length === 1;\n const hasMultipleNodesSelected = selection.nodes.length > 1;\n\n // Determine if right-clicked over a node by hit-testing\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 if (!nodeId) return;\n const isSelected = selection.nodes.includes(nodeId);\n\n if (isSelected && !isSingleNodeSelected) {\n // Right-clicked on a node that's part of multi-selection - show selection menu\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n } else {\n // Right-clicked on a non-selected node - show node menu\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n }\n }\n\n // Check if right-clicked on a selected edge\n const edgeTarget = (e.target as HTMLElement)?.closest(\".react-flow__edge\");\n if (edgeTarget) {\n const edgeId = edgeTarget.getAttribute(\"data-id\");\n const isSelected = edgeId && selection.edges.includes(edgeId);\n\n if (isSelected && isSingleNodeSelected) {\n // Right-clicked on an edge, but only one node is selected - show node menu\n const nodeId = selection.nodes[0];\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n } else if (isSelected) {\n // Right-clicked on a selected edge with multiple nodes - show selection menu\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n }\n }\n\n // Check if the cursor is inside the rectangular bounds of the current selection\n // (for multi-selection when right-clicking on empty space within selection bounds)\n const selectionBounds = getSelectionScreenBounds();\n if (selectionBounds && hasMultipleNodesSelected) {\n const { left, top, right, bottom } = selectionBounds;\n if (\n e.clientX >= left &&\n e.clientX <= right &&\n e.clientY >= top &&\n e.clientY <= bottom\n ) {\n // If only one node is selected (even with edges), show node menu for empty space clicks\n if (isSingleNodeSelected) {\n const nodeId = selection.nodes[0];\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n }\n\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n }\n }\n\n // Right-clicked on empty space with no selection - show default menu\n setMenuState({\n type: \"default\",\n menuPos: { x: e.clientX, y: e.clientY },\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(\n { typeId },\n { inputs: opts.inputs, position: opts.position, commit: true }\n ),\n [wb]\n );\n\n const onCloseMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n const onCloseSelectionMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n useEffect(() => {\n const off = wb.on(\"historyChanged\", (event) => {\n setHistoryState(event.history);\n });\n return () => off();\n }, [wb]);\n\n const nodeIds = useMemo(\n () => Array.from(wb.registry.nodes.keys()),\n [wb.registry, registryVersion]\n );\n\n const defaultContextMenuHandlers = useMemo(() => {\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createDefaultContextMenuHandlers(\n addNodeAt,\n onCloseMenu,\n (position: { x: number; y: number }) => {\n const data = storage.get();\n if (!data) return;\n wb.pasteCopiedData(data, position, { commit: true, reason: \"paste\" });\n onCloseMenu();\n },\n runner,\n () => storage.get(),\n () => storage.set(null),\n historyState,\n wb\n );\n if (overrides?.getDefaultContextMenuHandlers) {\n return overrides.getDefaultContextMenuHandlers(wb, baseHandlers);\n }\n return baseHandlers;\n }, [addNodeAt, onCloseMenu, overrides, wb, runner, historyState]);\n\n const selectionContextMenuHandlers = useMemo(() => {\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createSelectionContextMenuHandlers(\n wb,\n onCloseSelectionMenu,\n overrides?.getDefaultNodeSize,\n (data) => {\n storage.set(data);\n },\n runner\n );\n if (overrides?.getSelectionContextMenuHandlers) {\n const selection = wb.getSelection();\n return overrides.getSelectionContextMenuHandlers(\n wb,\n selection,\n baseHandlers,\n { getDefaultNodeSize: overrides.getDefaultNodeSize }\n );\n }\n return baseHandlers;\n }, [wb, runner, overrides, onCloseSelectionMenu]);\n\n const nodeContextMenuHandlers = useMemo(() => {\n if (menuState?.type !== \"node\") return null;\n const nodeAtMenu = menuState.nodeId;\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createNodeContextMenuHandlers(\n nodeAtMenu,\n wb,\n runner,\n wb.registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n overrides?.getDefaultNodeSize,\n (data) => {\n storage.set(data);\n },\n runNode,\n runFromHere\n );\n if (overrides?.getNodeContextMenuHandlers) {\n return overrides.getNodeContextMenuHandlers(wb, nodeAtMenu, baseHandlers);\n }\n return baseHandlers;\n }, [\n menuState,\n wb,\n runner,\n wb.registry,\n registryVersion,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n overrides?.getDefaultNodeSize,\n overrides?.getNodeContextMenuHandlers,\n overrides?.getCopiedDataStorage,\n ]);\n\n const bakeableOutputs = useMemo(() => {\n if (menuState?.type !== \"node\") return [];\n return getBakeableOutputs(\n menuState.nodeId,\n wb,\n wb.registry,\n outputTypesMap\n );\n }, [menuState, wb, wb.registry, registryVersion, outputTypesMap]);\n\n // Keyboard shortcuts configuration\n const keyboardShortcutEnables = useMemo(\n () => ({\n undo: true,\n redo: true,\n copy: true,\n paste: true,\n duplicate: true,\n selectAll: true,\n ...(overrides?.enableKeyboardShortcuts ?? {}),\n }),\n [overrides?.enableKeyboardShortcuts]\n );\n const isShortcutEnabled = useCallback(\n (action: keyof typeof keyboardShortcutEnables) =>\n keyboardShortcutEnables[action] !== false,\n [keyboardShortcutEnables]\n );\n const hasEnabledKeyboardShortcuts = useMemo(\n () => Object.values(keyboardShortcutEnables).some(Boolean),\n [keyboardShortcutEnables]\n );\n const keyboardShortcuts = useMemo(\n () =>\n overrides?.keyboardShortcuts || {\n undo: \"⌘/Ctrl + Z\",\n redo: \"⌘/Ctrl + Shift + Z\",\n copy: \"⌘/Ctrl + C\",\n paste: \"⌘/Ctrl + V\",\n duplicate: \"⌘/Ctrl + E\",\n selectAll: \"⌘/Ctrl + A\",\n delete: \"Delete\",\n },\n [overrides?.keyboardShortcuts]\n );\n\n // Toast notification for keyboard shortcuts\n const { toast, showToast, hideToast } = useKeyboardShortcutToast();\n\n // Keyboard shortcut handler\n useEffect(() => {\n if (!hasEnabledKeyboardShortcuts) return;\n\n const handleKeyDown = async (e: KeyboardEvent) => {\n // Check if target is inside WorkbenchCanvas container\n const target = e.target as HTMLElement;\n if (\n !containerRef.current ||\n !(\n containerRef.current.contains(target) ||\n containerRef.current == target\n )\n ) {\n return;\n }\n\n // Ignore if typing in input/textarea\n if (\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable\n ) {\n return;\n }\n\n // Detect Mac platform using userAgent (navigator.platform is deprecated)\n const isMac =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent.toLowerCase().includes(\"mac\");\n const modKey = isMac ? e.metaKey : e.ctrlKey;\n const key = e.key.toLowerCase();\n\n // Undo: Cmd/Ctrl + Z\n if (modKey && key === \"z\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"undo\")) return;\n e.preventDefault();\n if (\n runner &&\n \"onUndo\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onUndo &&\n defaultContextMenuHandlers.canUndo\n ) {\n if (defaultContextMenuHandlers.canUndo) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Undo (${modKeyLabel} + Z)`);\n defaultContextMenuHandlers.onUndo();\n }\n }\n return;\n }\n\n // Redo: Cmd/Ctrl + Shift + Z\n if (modKey && e.shiftKey && key === \"z\" && !e.altKey) {\n if (!isShortcutEnabled(\"redo\")) return;\n e.preventDefault();\n if (\n runner &&\n \"onRedo\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onRedo &&\n defaultContextMenuHandlers.canRedo\n ) {\n if (defaultContextMenuHandlers.canRedo) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Redo (${modKeyLabel} + Shift + Z)`);\n defaultContextMenuHandlers.onRedo();\n }\n }\n return;\n }\n\n // Copy: Cmd/Ctrl + C\n if (modKey && key === \"c\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"copy\")) return;\n const selection = wb.getSelection();\n if (selection.nodes.length > 0 || selection.edges.length > 0) {\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Copy (${modKeyLabel} + C)`);\n // If single node selected, use node context menu handler; otherwise use selection handler\n if (selection.nodes.length === 1 && nodeContextMenuHandlers?.onCopy) {\n nodeContextMenuHandlers.onCopy();\n } else if (selectionContextMenuHandlers.onCopy) {\n selectionContextMenuHandlers.onCopy();\n }\n }\n return;\n }\n\n // Duplicate: Cmd/Ctrl + E\n if (modKey && key === \"e\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"duplicate\")) return;\n const selection = wb.getSelection();\n if (\n selection.nodes.length === 1 &&\n nodeContextMenuHandlers?.onDuplicate\n ) {\n // Single node selected - use node context menu handler\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Duplicate (${modKeyLabel} + E)`);\n nodeContextMenuHandlers.onDuplicate();\n } else if (\n selection.nodes.length > 1 &&\n selectionContextMenuHandlers.onDuplicate\n ) {\n // Multiple nodes selected - use selection context menu handler\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Duplicate (${modKeyLabel} + E)`);\n selectionContextMenuHandlers.onDuplicate();\n }\n return;\n }\n\n // Paste: Cmd/Ctrl + V\n if (modKey && key === \"v\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"paste\")) return;\n e.preventDefault();\n if (\n \"hasPasteData\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.hasPasteData &&\n defaultContextMenuHandlers.hasPasteData() &&\n \"onPaste\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onPaste\n ) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Paste (${modKeyLabel} + V)`);\n const center = rfInstanceRef.current?.screenToFlowPosition({\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n }) || { x: 0, y: 0 };\n defaultContextMenuHandlers.onPaste(center);\n }\n return;\n }\n\n // Select All: Cmd/Ctrl + A\n if (modKey && key === \"a\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"selectAll\")) return;\n e.preventDefault();\n if (defaultContextMenuHandlers.onSelectAll) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Select All (${modKeyLabel} + A)`);\n defaultContextMenuHandlers.onSelectAll();\n }\n return;\n }\n\n // Note: Delete/Backspace is handled by ReactFlow's deleteKeyCode prop\n // which triggers onNodesDelete/onEdgesDelete, so we don't need to handle it here\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n hasEnabledKeyboardShortcuts,\n wb,\n runner,\n defaultContextMenuHandlers,\n selectionContextMenuHandlers,\n nodeContextMenuHandlers,\n rfInstanceRef,\n showToast,\n isShortcutEnabled,\n ]);\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 SelectionContextMenuRenderer,\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 SelectionContextMenuRenderer: ui.getSelectionContextMenuRenderer(),\n connectionLineRenderer: ui.getConnectionLineRenderer(),\n };\n }, [ui, uiVersion]);\n\n const [selectionOverlayTick, setSelectionOverlayTick] = useState(0);\n\n const onMove = useCallback(() => {\n setSelectionOverlayTick((t) => t + 1);\n }, []);\n\n const onMoveEnd = useCallback(() => {\n if (rfInstanceRef.current) {\n const viewport = rfInstanceRef.current.getViewport();\n const viewportData = lod.clone(viewport);\n wb.setViewport(viewportData);\n }\n }, [wb]);\n\n // Sync viewport when workbench fires graphUiChanged with viewport event\n useEffect(() => {\n const off = wb.on(\"graphUiChanged\", (event) => {\n if (\n event.change?.type === \"viewport\" &&\n rfInstanceRef.current &&\n event.init\n ) {\n const viewport = wb.getViewport();\n if (viewport) {\n rfInstanceRef.current.setViewport(lod.clone(viewport));\n }\n }\n });\n return () => off();\n }, [wb]);\n\n const { onInit: userOnInit, ...restReactFlowProps } = reactFlowProps || {};\n\n return (\n <div\n ref={containerRef}\n className=\"w-full h-full relative overflow-hidden\"\n tabIndex={0}\n onContextMenu={onContextMenu}\n >\n <ReactFlowProvider>\n <ReactFlow\n {...restReactFlowProps}\n nodes={rfData.nodes}\n edges={rfData.edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineComponent={connectionLineRenderer}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n const savedViewport = wb.getViewport();\n if (savedViewport) {\n inst.setViewport(lod.clone(savedViewport));\n }\n if (userOnInit) {\n userOnInit(inst);\n }\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onMove={onMove}\n onMoveEnd={onMoveEnd}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\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 {menuState?.type === \"default\" &&\n (DefaultContextMenuRenderer ? (\n <DefaultContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n handlers={defaultContextMenuHandlers}\n registry={wb.registry}\n nodeIds={nodeIds}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <DefaultContextMenu\n open={true}\n clientPos={menuState.menuPos}\n handlers={defaultContextMenuHandlers}\n registry={wb.registry}\n nodeIds={nodeIds}\n keyboardShortcuts={keyboardShortcuts}\n />\n ))}\n {menuState?.type === \"node\" &&\n nodeContextMenuHandlers &&\n (NodeContextMenuRenderer ? (\n <NodeContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n nodeId={menuState.nodeId}\n handlers={nodeContextMenuHandlers}\n bakeableOutputs={bakeableOutputs}\n runMode={runMode}\n wb={wb}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <NodeContextMenu\n open={true}\n clientPos={menuState.menuPos}\n nodeId={menuState.nodeId}\n handlers={nodeContextMenuHandlers}\n bakeableOutputs={bakeableOutputs}\n runMode={runMode}\n />\n ))}\n {menuState?.type === \"selection\" &&\n (SelectionContextMenuRenderer ? (\n <SelectionContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n handlers={selectionContextMenuHandlers}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <SelectionContextMenu\n open={true}\n clientPos={menuState.menuPos}\n handlers={selectionContextMenuHandlers}\n keyboardShortcuts={keyboardShortcuts}\n />\n ))}\n </ReactFlow>\n <SelectionBoundOverlay\n selection={selection}\n rfInstance={rfInstanceRef.current}\n viewportTick={selectionOverlayTick}\n />\n </ReactFlowProvider>\n {toast && (\n <KeyboardShortcutToast\n key={toast.id}\n message={toast.message}\n onClose={hideToast}\n />\n )}\n </div>\n );\n});\n\nexport const WorkbenchCanvas = WorkbenchCanvasComponent;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GraphDefinition, RunMode } 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 ListBulletsIcon,\n BugBeetleIcon,\n TreeStructureIcon,\n DownloadIcon,\n UploadIcon,\n CornersOutIcon,\n ImageIcon,\n RocketLaunchIcon,\n RocketIcon,\n} from \"@phosphor-icons/react\";\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 { downloadCanvasThumbnail } from \"./thumbnail-utils\";\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 autoScroll,\n onAutoScrollChange,\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 overrides,\n onInit,\n onChange,\n}: {\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => 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 onRunModeChange?: (mode: RunMode) => void;\n}) {\n const {\n wb,\n registryVersion,\n runner,\n selectedNodeId,\n handlesMap,\n runAutoLayout,\n runMode,\n setRunMode,\n isRunning,\n } = useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = wb.def.nodes.find((n) => n.nodeId === selectedNodeId);\n const effectiveHandles = selectedNode\n ? handlesMap[selectedNode.nodeId] ?? {\n inputs: {},\n outputs: {},\n inputDefaults: {},\n }\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\n const isGraphRunning = isRunning();\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 // For local backend, always allow control (transport state is \"local\")\n // For remote backends, require connection\n const canControl =\n transportStatus.state === \"connected\" ||\n transportStatus.state === \"local\" ||\n backendKind === \"local\"; // Always allow control for local backend\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-white border-none bg-green-500 flex items-center gap-1 cursor-default pointer-events-none\"\n title=\"Running\"\n >\n <RocketLaunchIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Running</span>\n </button>\n );\n }\n\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:text-gray-400 disabled:border-gray-300 disabled:opacity-50\"\n onClick={(evt) => {\n if (evt.shiftKey && !confirm(\"Invalidate and re-run graph?\")) return;\n\n try {\n runner.launch(wb.def, {\n runMode,\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={!canControl}\n title={\n !canControl\n ? \"Waiting for connection\"\n : `Start ${runMode === \"manual\" ? \"manual\" : \"auto\"} mode`\n }\n >\n <RocketIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n );\n }, [transportStatus, isGraphRunning, runner, runMode, wb, backendKind]);\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 canvasContainerRef = useRef<HTMLDivElement | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\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 runner.build(wb.def);\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\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 offGraphChanged = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.def;\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const offGraphUiChanged = wb.on(\"graphUiChanged\", (evt) => {\n if (!evt.commit) return;\n try {\n const cur = wb.def;\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n offGraphChanged();\n offGraphUiChanged();\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, 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 (registry) {\n wb.setRegistry(registry);\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.def);\n // Set initial inputs if provided\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [runner, wb, onExampleChange, runAutoLayout, examples, backendKind]\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 useEffect(() => {\n if (isGraphRunning) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n if (!wb.def.nodes || wb.def.nodes.length === 0) return;\n try {\n runner.launch(wb.def, { runMode });\n } catch {\n // ignore\n }\n }, [runMode, 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 = wb.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 wb.setInputs(selectedNodeId, { [handle]: undefined }, { commit: true });\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 wb.setInputs(selectedNodeId, { [handle]: value }, { commit: true });\n },\n [selectedNodeId, wb.def.edges, effectiveHandles, wb]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry: wb.registry,\n });\n }\n return baseSetInput;\n }, [\n overrides,\n baseSetInput,\n runner,\n selectedNodeId,\n wb.registry,\n registryVersion,\n ]);\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, wb.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 = wb.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 [wb.registry, registryVersion]\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: wb.registry });\n return baseToString;\n }, [overrides, baseToString, wb.registry, registryVersion]);\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: wb.registry });\n return baseToElement;\n }, [overrides, baseToElement, wb.registry, registryVersion]);\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: {runMode === \"manual\" ? \"Manual\" : \"Auto\"}\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={runMode}\n onChange={async (e) => {\n const mode = e.target.value as RunMode;\n if (mode !== runMode) {\n await setRunMode(mode);\n }\n }}\n title=\"Select run mode\"\n >\n <option value=\"manual\">Manual</option>\n <option value=\"auto\">Auto</option>\n </select>\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 <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={async () => {\n await downloadCanvasThumbnail(canvasContainerRef.current);\n }}\n title=\"Download Flow Thumbnail (SVG)\"\n >\n <ImageIcon 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\" ref={canvasContainerRef}>\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n reactFlowProps={{\n minZoom: 0.1,\n maxZoom: 5,\n }}\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 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 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 [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n\n const backendKindToUse = useMemo(() => {\n if (!backendOptions) return \"local\";\n return backendKind;\n }, [backendOptions, backendKind]);\n\n const runner = useMemo(() => {\n let newRunner: IGraphRunner;\n if (backendKindToUse === \"remote-http\" && backendOptions) {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(backend);\n } else if (backendKindToUse === \"remote-ws\" && backendOptions) {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(backend);\n } else {\n newRunner = new LocalGraphRunner();\n }\n return newRunner;\n }, [backendKindToUse, httpBaseUrl, wsUrl, backendOptions]);\n\n // Dispose runner when it changes or component unmounts\n useEffect(() => {\n return () => {\n try {\n runner.dispose();\n } catch (err) {\n console.warn(\"Error disposing runner:\", err);\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 }, [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 overrides={overrides}\n uiVersion={uiVersion}\n >\n <WorkbenchStudioCanvas\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n backendKind={backendKindToUse}\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/misc/viewport-utils.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/merge-utils.ts","../../src/misc/thumbnail-utils.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DefaultNodeHeader.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNodeContent.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultEdge.tsx","../../src/misc/context-menu/ContextMenuHelpers.ts","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/context-menu/ContextMenuButton.tsx","../../src/misc/context-menu/DefaultContextMenu.tsx","../../src/misc/context-menu/NodeContextMenu.tsx","../../src/misc/context-menu/SelectionContextMenu.tsx","../../src/misc/KeyboardShortcutToast.tsx","../../src/misc/SelectionBoundOverlay.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["import type React from \"react\";\nimport type {\n NodeProps,\n Node,\n EdgeProps,\n Edge,\n ConnectionLineComponentProps,\n MiniMapProps,\n ControlProps,\n BackgroundProps,\n EdgeTypes,\n NodeTypes,\n} from \"@xyflow/react\";\nimport type {\n EstimateNodeSizeFunction,\n CreateHandleBoundsFunction,\n CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"../misc/layout\";\nimport type {\n DefaultContextMenuProps,\n NodeContextMenuProps,\n SelectionContextMenuProps,\n} from \"../misc/context-menu/ContextMenuHandlers\";\n\n// React Flow renderer types\nexport type NodeRenderer = NodeTypes[keyof NodeTypes];\nexport type EdgeRenderer = EdgeTypes[keyof EdgeTypes];\nexport type ConnectionLineRenderer =\n React.ComponentType<ConnectionLineComponentProps>;\nexport type MinimapRenderer = React.ComponentType<MiniMapProps>;\nexport type ControlsRenderer = React.ComponentType<ControlProps>;\nexport type BackgroundRenderer = React.ComponentType<BackgroundProps>;\n\n// Context menu renderer types - using exported prop types from default components\nexport type DefaultContextMenuRenderer =\n React.ComponentType<DefaultContextMenuProps>;\nexport type NodeContextMenuRenderer = React.ComponentType<NodeContextMenuProps>;\nexport type SelectionContextMenuRenderer =\n React.ComponentType<SelectionContextMenuProps>;\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 registerEdgeRenderer(renderer: EdgeRenderer | undefined): this;\n getEdgeRenderer(): EdgeRenderer | undefined;\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 registerSelectionContextMenuRenderer(\n renderer: SelectionContextMenuRenderer | undefined\n ): this;\n getSelectionContextMenuRenderer(): SelectionContextMenuRenderer | 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 edgeRenderer?: EdgeRenderer;\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 private selectionContextMenuRenderer?: SelectionContextMenuRenderer;\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 registerEdgeRenderer(renderer: EdgeRenderer | undefined): this {\n this.edgeRenderer = renderer;\n return this;\n }\n getEdgeRenderer(): EdgeRenderer | undefined {\n return this.edgeRenderer;\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 registerSelectionContextMenuRenderer(\n renderer: SelectionContextMenuRenderer | undefined\n ): this {\n this.selectionContextMenuRenderer = renderer;\n return this;\n }\n getSelectionContextMenuRenderer(): SelectionContextMenuRenderer | undefined {\n return this.selectionContextMenuRenderer;\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 interface WorkbenchConstructorArgs {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n genId?: (prefix: string, used: Set<string>) => string;\n}\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 abstract get def(): GraphDefinition;\n\n constructor(args: WorkbenchConstructorArgs) {\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 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 RuntimeMetadata,\n NodeRuntimeMetadata,\n RuntimeHistoryInfo,\n Viewport,\n} from \"@bian-womp/spark-protocol\";\nimport {\n GraphBuilder,\n Registry,\n getInputDeclaredTypes,\n isTyped,\n unwrapValue,\n createSimpleGraphRegistry,\n} from \"@bian-womp/spark-graph\";\nimport lod from \"lodash\";\nimport {\n AbstractWorkbench,\n WorkbenchConstructorArgs,\n} from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\nimport { WorkbenchUIState } from \"../misc/types\";\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 size?: { width: number; height: 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 _registry: Registry;\n\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n\n private positions: Record<string, { x: number; y: number }> = {};\n private sizes: Record<string, { width: number; height: number }> = {};\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n private nodeNames: Record<string, string> = {};\n\n private customData: {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n } = {};\n\n private runtimeState: RuntimeMetadata | null = null;\n\n private viewport: Viewport | null = null;\n private historyState: RuntimeHistoryInfo | undefined = undefined;\n\n private copiedData: CopiedGraphData | null = null;\n\n constructor(args: WorkbenchConstructorArgs) {\n super(args);\n this._registry = createSimpleGraphRegistry();\n }\n\n get def(): GraphDefinition {\n return this._def;\n }\n\n get registry(): Registry {\n return this._registry;\n }\n\n setRegistry(registry: Registry): void {\n this._registry = registry;\n this.refreshValidation();\n this.emit(\"registryChanged\", { registry });\n }\n\n /**\n * Check if a node should auto run based on registry node description policy or node definition params policy.\n * @param nodeId - The node ID to check\n * @returns true if the node has autoRun enabled in either registry or params policy\n */\n shouldNodeAutoRun(nodeId: string): boolean {\n const node = this._def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return false;\n\n // Check registry node description policy\n const desc = this._registry.nodes.get(node.typeId);\n const registryAutoRun = desc?.policy?.autoRun === true;\n\n // Check node definition params policy (takes precedence over registry)\n const paramsAutoRun = node?.params?.policy?.autoRun === true;\n\n // Node has autoRun if either registry or params sets it\n return registryAutoRun || paramsAutoRun;\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 filteredSizes = Object.fromEntries(\n Object.entries(this.sizes).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 // Clean up extData for removed nodes/edges\n if (this.customData.nodes) {\n const filteredExtNodes = Object.fromEntries(\n Object.entries(this.customData.nodes).filter(([id]) =>\n defNodeIds.has(id)\n )\n );\n this.customData.nodes =\n Object.keys(filteredExtNodes).length > 0 ? filteredExtNodes : undefined;\n }\n if (this.customData.edges) {\n const filteredExtEdges = Object.fromEntries(\n Object.entries(this.customData.edges).filter(([id]) =>\n defEdgeIds.has(id)\n )\n );\n this.customData.edges =\n Object.keys(filteredExtEdges).length > 0 ? filteredExtEdges : undefined;\n }\n\n this.positions = filteredPositions;\n this.sizes = filteredSizes;\n this.selection = { nodes: filteredNodes, edges: filteredEdges };\n\n this.emit(\"graphChanged\", { def: this._def });\n this.refreshValidation();\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 setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean; commit?: boolean; reason?: string }\n ): void {\n this.emit(\"graphChanged\", {\n def: this._def,\n change: { type: \"setInputs\", nodeId, inputs },\n ...options,\n });\n this.refreshValidation();\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n },\n options?: {\n inputs?: Record<string, unknown>;\n position?: { x: number; y: number };\n size?: { width: number; height: number };\n copyOutputsFrom?: string;\n dry?: boolean;\n commit?: boolean;\n reason?: string;\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 (options?.position) this.positions[id] = options.position;\n if (options?.size) this.sizes[id] = options.size;\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 ...lod.pick(options, [\"dry\", \"commit\", \"reason\"]),\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(\n nodeId: string,\n options?: { commit?: boolean; reason?: string }\n ): 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 delete this.sizes[nodeId];\n delete this.nodeNames[nodeId];\n this.emit(\"graphChanged\", {\n def: this._def,\n change: { type: \"removeNode\", nodeId },\n ...options,\n });\n this.refreshValidation();\n }\n\n connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string },\n options?: { dry?: boolean; commit?: boolean; reason?: string }\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 ...options,\n });\n this.refreshValidation();\n return id;\n }\n\n disconnect(\n edgeId: string,\n options?: { commit?: boolean; reason?: string }\n ): 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 ...options,\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 updateResolvedHandles(\n nodeId: string,\n resolvedHandles: Partial<ResolvedHandles>,\n options?: { commit?: boolean; reason?: string }\n ): void {\n const n = this._def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return;\n n.resolvedHandles = { ...(n.resolvedHandles ?? {}), ...resolvedHandles };\n this.emit(\"graphChanged\", {\n def: this._def,\n change: { type: \"updateResolvedHandles\", nodeId },\n ...options,\n });\n this.refreshValidation();\n }\n\n // Position and selection APIs for React Flow bridge\n setPositions(\n positions: Record<string, { x: number; y: number }>,\n options?: { commit?: boolean; reason?: string }\n ): void {\n this.positions = { ...this.positions, ...positions };\n this.emit(\"graphUiChanged\", { change: { type: \"moveNodes\" }, ...options });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSizes(\n sizes: Record<string, { width: number; height: number } | null>,\n options?: { commit?: boolean; reason?: string }\n ): void {\n const updatedSizes = { ...this.sizes };\n for (const [nodeId, size] of Object.entries(sizes)) {\n if (size) {\n updatedSizes[nodeId] = size;\n } else {\n delete updatedSizes[nodeId];\n }\n }\n this.sizes = updatedSizes;\n this.emit(\"graphUiChanged\", {\n change: { type: \"resizeNodes\" },\n ...options,\n });\n }\n\n getSizes(): Record<string, { width: number; height: number }> {\n return { ...this.sizes };\n }\n\n private setSelectionInternal(\n sel: { nodes: string[]; edges: string[] },\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (lod.isEqual(this.selection, sel)) return;\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", { change: { type: \"selection\" }, ...options });\n }\n\n setSelection(\n sel: { nodes: string[]; edges: string[] },\n options?: { commit?: boolean; reason?: string }\n ): void {\n this.setSelectionInternal(sel, options);\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n /**\n * Delete all selected nodes and edges.\n */\n deleteSelection(options?: { commit?: boolean; reason?: string }): void {\n const selection = this.getSelection();\n\n // Delete all selected nodes (this will also remove connected edges)\n for (const nodeId of selection.nodes) {\n this.removeNode(nodeId);\n }\n\n // Delete remaining selected edges (edges not connected to deleted nodes)\n for (const edgeId of selection.edges) {\n this.disconnect(edgeId);\n }\n\n // Clear selection\n this.setSelectionInternal({ nodes: [], edges: [] }, options);\n }\n\n setViewport(viewport: Viewport): void {\n if (lod.isEqual(this.viewport, viewport)) return;\n this.viewport = { ...viewport };\n this.emit(\"graphUiChanged\", { change: { type: \"viewport\" } });\n }\n\n getViewport(): Viewport | null {\n return this.viewport ? { ...this.viewport } : null;\n }\n\n getUIState(): WorkbenchUIState {\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 const filteredNodeNames = Object.fromEntries(\n Object.entries(this.nodeNames).filter(([id]) => defNodeIds.has(id))\n );\n const filteredSizes = Object.fromEntries(\n Object.entries(this.sizes).filter(([id]) => defNodeIds.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 nodeNames:\n Object.keys(filteredNodeNames).length > 0\n ? filteredNodeNames\n : undefined,\n sizes: Object.keys(filteredSizes).length > 0 ? filteredSizes : undefined,\n };\n }\n\n setUIState(ui?: WorkbenchUIState): 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 this.emit(\"graphUiChanged\", {\n change: { type: \"selection\" },\n init: true,\n });\n }\n if (ui.viewport) {\n this.viewport = { ...ui.viewport };\n this.emit(\"graphUiChanged\", { change: { type: \"viewport\" }, init: true });\n }\n if (ui.nodeNames !== undefined) {\n this.nodeNames = { ...ui.nodeNames };\n for (const [nodeId, name] of Object.entries(ui.nodeNames)) {\n this.emit(\"graphUiChanged\", {\n change: { type: \"nodeName\", nodeId, name },\n init: true,\n });\n }\n }\n if (ui.sizes !== undefined) {\n const defNodeIds = new Set(this._def.nodes.map((n) => n.nodeId));\n this.sizes = Object.fromEntries(\n Object.entries(ui.sizes).filter(([id]) => defNodeIds.has(id))\n );\n }\n }\n\n getRuntimeState(): RuntimeMetadata | null {\n return this.runtimeState ? { ...this.runtimeState } : null;\n }\n\n setRuntimeState(runtime?: RuntimeMetadata | null): void {\n this.runtimeState = runtime ? { ...runtime } : null;\n this.emit(\"runtimeMetadataChanged\", {});\n }\n\n getHistory(): RuntimeHistoryInfo | undefined {\n return this.historyState;\n }\n\n setHistory(history?: RuntimeHistoryInfo | undefined): void {\n this.historyState = history;\n this.emit(\"historyChanged\", { history });\n }\n\n getNodeRuntimeMetadata(nodeId: string): NodeRuntimeMetadata | undefined {\n return this.runtimeState?.nodes[nodeId];\n }\n\n updateNodeRuntimeMetadata(\n nodeId: string,\n updater: (current: NodeRuntimeMetadata) => NodeRuntimeMetadata\n ): void {\n const current = this.runtimeState ?? { nodes: {} };\n const nodeMeta = current.nodes[nodeId] ?? {};\n const updated = updater({ ...nodeMeta });\n this.runtimeState = { nodes: { ...current.nodes, [nodeId]: updated } };\n this.emit(\"runtimeMetadataChanged\", { nodeId });\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 positions = this.getPositions();\n const sizes = this.getSizes();\n const selectedNodeSet = new Set(selection.nodes);\n\n // Collect nodes to copy\n const nodesToCopy = this.def.nodes.filter((n) =>\n selectedNodeSet.has(n.nodeId)\n );\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];\n const size =\n sizes[node.nodeId] || getNodeSize?.(node.nodeId, node.typeId);\n\n if (pos) {\n minX = Math.min(minX, pos.x);\n minY = Math.min(minY, pos.y);\n if (size) {\n maxX = Math.max(maxX, pos.x + size.width);\n maxY = Math.max(maxY, pos.y + size.height);\n }\n }\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(this.def);\n const selectedEdgeSet = new Set(selection.edges);\n const copiedNodes = nodesToCopy.map((node) => {\n const pos = positions[node.nodeId];\n const size = sizes[node.nodeId];\n\n // Get all inbound edges for this node\n const inboundEdges = this.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: pos\n ? {\n x: pos.x - centerX,\n y: pos.y - centerY,\n }\n : undefined,\n size,\n inputs: inputsToCopy,\n originalNodeId: node.nodeId,\n };\n });\n\n // Collect edges between copied nodes\n const copiedEdges = this.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 * Duplicate all selected nodes.\n * Returns the list of newly created node IDs.\n * Each duplicated node is offset by 24px in both x and y directions.\n * Copies inputs without bindings and uses copyOutputsFrom to copy outputs.\n */\n duplicateSelection(\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string[] {\n const selection = this.getSelection();\n if (selection.nodes.length === 0) return [];\n\n const positions = this.getPositions();\n const sizes = this.getSizes();\n const newNodes: string[] = [];\n\n // Get inputs without bindings (literal values only)\n const allInputs = runner.getInputs(this.def) || {};\n // Duplicate each selected node\n for (const nodeId of selection.nodes) {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) continue;\n\n const pos = positions[nodeId];\n const size = sizes[nodeId];\n\n const inboundHandles = new Set(\n this.def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n newNodes.push(newNodeId);\n }\n\n // Select all newly duplicated nodes\n if (newNodes.length > 0) {\n this.setSelectionInternal(\n { nodes: newNodes, edges: [] },\n options || { commit: true, reason: \"duplicate-selection\" }\n );\n }\n\n return newNodes;\n }\n\n /**\n * Bake an output value from a node into a new node.\n * Creates a new node based on the output type's bakeTarget configuration.\n * Returns the ID of the last created node (or undefined if none created).\n */\n async bake(\n registry: Registry,\n runner: IGraphRunner,\n outputValue: unknown,\n outputTypeId: string,\n nodePosition: { x: number; y: number },\n options?: { commit?: boolean; reason?: string }\n ): Promise<string | undefined> {\n try {\n if (!outputTypeId || outputValue === undefined) return undefined;\n\n const unwrap = (v: unknown) => (isTyped(v) ? unwrapValue(v) : v);\n\n const coerceIfNeeded = async (\n fromType: string,\n toTypes: string | string[] | undefined,\n value: unknown\n ) => {\n if (!toTypes) return value;\n const typesArray = Array.isArray(toTypes) ? toTypes : [toTypes];\n\n // If output type matches any input type exactly, no coercion needed\n if (typesArray.includes(fromType)) return value;\n\n // If no coercion function available, return as-is\n if (!runner?.coerce) return value;\n\n // Try coercing to each type until one succeeds\n for (const toType of typesArray) {\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n // Continue to next type\n }\n }\n\n // If all coercion attempts failed, return value as-is\n return value;\n };\n\n const pos = nodePosition;\n const isArray = outputTypeId.endsWith(\"[]\");\n const baseTypeId = isArray ? outputTypeId.slice(0, -2) : outputTypeId;\n const tArr = isArray ? registry.types.get(outputTypeId) : 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 let newNodeId: string | undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(\n outputTypeId,\n inTypes,\n unwrap(outputValue)\n );\n newNodeId = this.addNode(\n {\n typeId: singleTarget.nodeTypeId,\n },\n {\n inputs: { [singleTarget.inputHandle]: coerced },\n position: { x: pos.x + 180, y: pos.y },\n }\n );\n } else if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n arrTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(\n outputTypeId,\n inTypes,\n unwrap(outputValue)\n );\n newNodeId = this.addNode(\n {\n typeId: arrTarget.nodeTypeId,\n },\n {\n position: { x: pos.x + 180, y: pos.y },\n inputs: { [arrTarget.inputHandle]: coerced },\n }\n );\n } else if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inTypes = getInputDeclaredTypes(\n nodeDesc?.inputs,\n elemTarget.inputHandle\n );\n const src = unwrap(outputValue);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inTypes, 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 newNodeId = this.addNode(\n {\n typeId: elemTarget.nodeTypeId,\n },\n {\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n inputs: { [elemTarget.inputHandle]: coercedItems[idx] },\n }\n );\n }\n }\n\n if (newNodeId) {\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"bake\" }\n );\n }\n\n return newNodeId;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Duplicate a single node.\n * Returns the ID of the newly created node.\n * The duplicated node is offset by 24px in both x and y directions.\n * Copies inputs without bindings and uses copyOutputsFrom to copy outputs.\n */\n duplicateNode(\n nodeId: string,\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string | undefined {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return undefined;\n\n const pos = this.getPositions()[nodeId];\n const size = this.getSizes()[nodeId];\n\n // Get inputs without bindings (literal values only)\n const allInputs = runner.getInputs(this.def)[nodeId] || {};\n const inboundHandles = new Set(\n this.def.edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n const inputsWithoutBindings = Object.fromEntries(\n Object.entries(allInputs).filter(\n ([handle]) => !inboundHandles.has(handle)\n )\n );\n\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs: inputsWithoutBindings,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Select the newly duplicated node\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"duplicate-node\" }\n );\n\n return newNodeId;\n }\n\n /**\n * Duplicate a node and all its incoming edges.\n * Returns the ID of the newly created node.\n * The duplicated node is offset by 24px in both x and y directions.\n * All incoming edges are duplicated to point to the new node.\n */\n duplicateNodeWithEdges(\n nodeId: string,\n runner: IGraphRunner,\n options?: { commit?: boolean; reason?: string }\n ): string | undefined {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return undefined;\n\n const pos = this.getPositions()[nodeId];\n const size = this.getSizes()[nodeId];\n\n // Get all inputs (including those with bindings, since edges will be duplicated)\n const inputs = runner.getInputs(this.def)[nodeId] || {};\n\n // Add the duplicated node\n const newNodeId = this.addNode(\n {\n typeId: n.typeId,\n params: n.params,\n resolvedHandles: n.resolvedHandles,\n },\n {\n inputs,\n position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,\n size,\n copyOutputsFrom: nodeId,\n dry: true,\n }\n );\n\n // Find all incoming edges (edges where target is the original node)\n const incomingEdges = this.def.edges.filter(\n (e) => e.target.nodeId === nodeId\n );\n\n // Duplicate each incoming edge to point to the new node\n for (const edge of incomingEdges) {\n this.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\n if (newNodeId) {\n this.setSelectionInternal(\n { nodes: [newNodeId], edges: [] },\n options || { commit: true, reason: \"duplicate-node-with-edges\" }\n );\n }\n\n return newNodeId;\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 options?: { commit?: boolean; reason?: string }\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 },\n {\n inputs: nodeData.inputs,\n position: nodeData.position\n ? {\n x: nodeData.position.x + center.x,\n y: nodeData.position.y + center.y,\n }\n : undefined,\n size: nodeData.size,\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.setSelectionInternal(\n { nodes: Array.from(nodeIdMap.values()), edges: edgeIds },\n options\n );\n\n return { nodeIdMap, edgeIds };\n }\n\n /**\n * Get the currently copied graph data.\n */\n getCopiedData(): CopiedGraphData | null {\n return this.copiedData;\n }\n\n /**\n * Set the copied graph data (used for paste functionality).\n */\n setCopiedData(data: CopiedGraphData | null): void {\n this.copiedData = data;\n }\n\n /**\n * Get the custom name for a node, if set.\n */\n getNodeName(nodeId: string): string | undefined {\n return this.nodeNames[nodeId];\n }\n\n /**\n * Set a custom name for a node. Empty string or undefined removes the custom name.\n * This is included in undo/redo history via extData.ui.\n */\n setNodeName(\n nodeId: string,\n name: string | undefined,\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (name === undefined || name.trim() === \"\") {\n delete this.nodeNames[nodeId];\n } else {\n this.nodeNames[nodeId] = name.trim();\n }\n\n this.emit(\"graphUiChanged\", {\n change: { type: \"nodeName\", nodeId, name },\n ...options,\n });\n }\n\n /**\n * Get custom data for a specific node.\n */\n getCustomNodeData(nodeId: string): Record<string, unknown> | undefined {\n return this.customData.nodes?.[nodeId];\n }\n\n /**\n * Set custom data for a specific node (supports partial updates).\n */\n setCustomNodeData(\n nodeId: string,\n data: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (!this.customData.nodes) {\n this.customData.nodes = {};\n }\n if (data === undefined) {\n delete this.customData.nodes[nodeId];\n if (Object.keys(this.customData.nodes).length === 0) {\n delete this.customData.nodes;\n }\n } else {\n // If merge is true, merge with existing data; otherwise replace\n if (options?.merge && this.customData.nodes[nodeId]) {\n this.customData.nodes[nodeId] = {\n ...this.customData.nodes[nodeId],\n ...data,\n };\n } else {\n this.customData.nodes[nodeId] = data;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customNodeData\",\n nodeId,\n data: this.customData.nodes?.[nodeId],\n },\n ...options,\n });\n }\n\n /**\n * Get custom data for a specific edge.\n */\n getCustomEdgeData(edgeId: string): Record<string, unknown> | undefined {\n return this.customData.edges?.[edgeId];\n }\n\n /**\n * Set custom data for a specific edge (supports partial updates).\n */\n setCustomEdgeData(\n edgeId: string,\n data: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (!this.customData.edges) {\n this.customData.edges = {};\n }\n if (data === undefined) {\n delete this.customData.edges[edgeId];\n if (Object.keys(this.customData.edges).length === 0) {\n delete this.customData.edges;\n }\n } else {\n // If merge is true, merge with existing data; otherwise replace\n if (options?.merge && this.customData.edges[edgeId]) {\n this.customData.edges[edgeId] = {\n ...this.customData.edges[edgeId],\n ...data,\n };\n } else {\n this.customData.edges[edgeId] = data;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customEdgeData\",\n edgeId,\n data: this.customData.edges?.[edgeId],\n },\n ...options,\n });\n }\n\n /**\n * Get custom metadata.\n */\n getCustomMetaData(): Record<string, unknown> | undefined {\n return this.customData.meta;\n }\n\n /**\n * Set custom metadata (supports partial updates).\n */\n setCustomMetaData(\n meta: Record<string, unknown> | undefined,\n options?: { commit?: boolean; reason?: string; merge?: boolean }\n ): void {\n if (meta === undefined) {\n delete this.customData.meta;\n } else {\n // If merge is true, merge with existing metadata; otherwise replace\n if (options?.merge && this.customData.meta) {\n this.customData.meta = {\n ...this.customData.meta,\n ...meta,\n };\n } else {\n this.customData.meta = meta;\n }\n }\n this.emit(\"graphUiChanged\", {\n change: { type: \"customMetaData\", meta: this.customData.meta },\n ...options,\n });\n }\n\n /**\n * Get all custom data.\n */\n getCustomData(): {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n } {\n return { ...this.customData };\n }\n\n /**\n * Set all custom data.\n */\n setCustomData(\n custom:\n | {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n }\n | undefined,\n options?: { commit?: boolean; reason?: string }\n ): void {\n if (custom === undefined) {\n this.customData = {};\n } else {\n this.customData = lod.pick(custom, [\"nodes\", \"edges\", \"meta\"]);\n }\n this.emit(\"graphUiChanged\", {\n change: {\n type: \"customData\",\n nodes: custom?.nodes,\n edges: custom?.edges,\n meta: custom?.meta,\n },\n ...options,\n });\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(options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }) {\n const d = this.wb.def;\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 RunMode,\n RunnerOptions,\n RuntimeHistoryInfo,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Engine,\n Registry,\n GraphRuntime,\n createSimpleGraphRegistry,\n} 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 registry: Registry;\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\n constructor(protected backend: ExecutionBackend, registry?: Registry) {\n this.runnerId = \"\";\n this.registry = registry ?? createSimpleGraphRegistry();\n }\n\n abstract launch(def: GraphDefinition, opts: RunnerOptions): void;\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 computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): 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 | Promise<void>;\n\n abstract copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void | Promise<void>;\n\n abstract runFromHere(nodeId: string): Promise<void>;\n\n abstract cancelNodeRuns(nodeIds: string[]): 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; dry?: boolean }\n ): Promise<void>;\n\n abstract setExtData(data: Record<string, unknown>): Promise<void>;\n abstract updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void>;\n\n protected abstract createAndLaunchEngine(opts?: RunnerOptions): Promise<void>;\n\n abstract pause(): Promise<void>;\n abstract resume(): Promise<void>;\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\n }\n\n setRunMode(runMode: RunMode): void {\n if (this.engine) {\n this.engine.setRunMode(runMode);\n this.emit(\"status\", { running: true, runMode });\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 }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n // Optional undo/redo support\n async undo(): Promise<boolean> {\n return false;\n }\n async redo(): Promise<boolean> {\n return false;\n }\n\n // Optional commit support\n async commit(_reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n return undefined;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n LocalEngine,\n parseJsonPath,\n setValueAtPathWithCreation,\n buildValueConverter,\n convertSnapshot,\n} from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n RunnerOptions,\n RuntimeSnapshot,\n ConverterConfig,\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 protected engine?: LocalEngine;\n private extData: Record<string, unknown> = {};\n\n constructor(registry?: Registry) {\n super({ kind: \"local\" }, registry);\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, opts?: { startPaused?: boolean }): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def, opts);\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 // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = options?.dry ? this.runtime.requestPause() : null;\n try {\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } finally {\n releasePause?.();\n }\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\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 = new LocalEngine(this.runtime, opts?.runMode);\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, opts?.runMode, opts?.startPaused);\n const runMode = opts?.runMode ?? \"manual\";\n this.emit(\"status\", { running: true, runMode });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n if (this.engine) await this.engine.computeNode(nodeId, options);\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n if (this.engine) await this.engine.runFromHere(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n if (this.engine) {\n this.engine.cancelNodeRuns(nodeIds);\n }\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.engine) 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.engine.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 // Engine handles dry option via AbstractEngine\n this.engine?.triggerExternal(nodeId, event, options);\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 if (this.engine) {\n // Engine handles dry option via AbstractEngine\n this.engine.setInputs(nodeId, inputs, options);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n // Note: dry option doesn't apply when engine doesn't exist (no execution to prevent)\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 }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n if (this.engine) {\n this.engine.copyOutputs(fromNodeId, toNodeId, options);\n }\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean; dry?: boolean }\n ) => {\n if (!this.runtime) return;\n // Use requestPause for dry mode to temporarily pause without affecting base run mode\n const releasePause = opts?.dry ? this.runtime.requestPause() : null;\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 releasePause?.();\n }\n };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async setExtData(data: Record<string, unknown>): Promise<void> {\n if (!data || typeof data !== \"object\") {\n this.extData = {};\n return;\n }\n this.extData = { ...this.extData, ...data };\n }\n\n async updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void> {\n if (\n !this.extData ||\n typeof this.extData !== \"object\" ||\n Array.isArray(this.extData)\n ) {\n this.extData = {};\n }\n for (const { path, value } of updates) {\n const pathSegments = parseJsonPath(path);\n setValueAtPathWithCreation(this.extData, pathSegments, value);\n }\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 const extData = this.extData;\n return { def, environment, inputs, outputs, extData };\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean; dry?: 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, { dry: options?.dry });\n if (payload.extData) {\n await this.setExtData(payload.extData);\n }\n }\n\n async convertSnapshot(\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ): Promise<RuntimeSnapshotFull> {\n const snapshot = await this.snapshotFull();\n const converter = buildValueConverter(converterConfig);\n const converted = convertSnapshot(snapshot, converter);\n await this.applySnapshotFull(converted, {\n skipBuild: true,\n dry: options?.dry,\n });\n return converted;\n }\n\n async pause(): Promise<void> {\n if (!this.runtime) return;\n this.runtime.pause();\n }\n\n async resume(): Promise<void> {\n if (!this.runtime) return;\n this.runtime.resume();\n }\n\n private hydrate(snapshot: RuntimeSnapshot, opts?: { dry?: boolean }): 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\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n dry: opts?.dry,\n });\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\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n dry: opts?.dry,\n });\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 { Viewport } from \"@bian-womp/spark-protocol\";\n\nexport function isValidViewport(viewport: unknown): viewport is Viewport {\n return (\n viewport !== null &&\n typeof viewport === \"object\" &&\n \"x\" in viewport &&\n \"y\" in viewport &&\n \"zoom\" in viewport &&\n typeof (viewport as { x: unknown }).x === \"number\" &&\n typeof (viewport as { y: unknown }).y === \"number\" &&\n typeof (viewport as { zoom: unknown }).zoom === \"number\"\n );\n}\n\nexport function excludeViewportFromUIState<T extends { viewport?: unknown }>(\n uiState: T | null | undefined\n): Omit<T, \"viewport\"> {\n if (!uiState) {\n return {} as Omit<T, \"viewport\">;\n }\n const { viewport: _ignoredViewport, ...rest } = uiState;\n return rest;\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n RunnerOptions,\n RuntimeHistoryInfo,\n Viewport,\n RuntimeSnapshot,\n RunMode,\n ConverterConfig,\n} from \"@bian-womp/spark-protocol\";\nimport {\n RemoteEngine,\n RemoteRuntimeClient,\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\";\nimport { isValidViewport } from \"../misc/viewport-utils\";\n\n// Counter for generating readable runner IDs\nlet remoteRunnerCounter = 0;\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected client?: RemoteRuntimeClient;\n protected engine?: RemoteEngine;\n private clientPromise?: Promise<RemoteRuntimeClient>;\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 { value: unknown; runtimeTypeId?: string }\n >();\n\n private listenersBound = false;\n private registryFetched = false;\n private registryFetchPromise?: Promise<void>;\n private readonly MAX_REGISTRY_FETCH_ATTEMPTS = 3;\n private readonly INITIAL_RETRY_DELAY_MS = 1000; // 1 second\n private readonly REGISTRY_FETCH_TIMEOUT_MS = 3000; // 3 seconds\n\n /**\n * Generate cache key that includes io type to prevent collisions\n * between input and output handles with the same name\n */\n private getCacheKey(\n nodeId: string,\n handle: string,\n io: \"input\" | \"output\"\n ): string {\n return `${nodeId}.${io}.${handle}`;\n }\n\n /**\n * Fetch full registry description from remote and register it locally.\n * Simplified with straightforward retry loop.\n * Ensures only one fetch happens at a time, even with concurrent calls.\n */\n private async fetchRegistry(client: RemoteRuntimeClient): Promise<void> {\n if (this.registryFetched) {\n return;\n }\n\n // If already fetching, wait for that fetch to complete\n if (this.registryFetchPromise) {\n return this.registryFetchPromise;\n }\n\n // Create promise wrapper and assign atomically to prevent race conditions\n // This ensures concurrent calls will see the promise and wait for it\n let promise: Promise<void>;\n this.registryFetchPromise = promise = (async () => {\n try {\n await this._doFetchRegistry(client);\n } finally {\n // Clear the promise after completion (success or failure)\n this.registryFetchPromise = undefined;\n }\n })();\n\n return promise;\n }\n\n /**\n * Internal method that performs the actual registry fetch.\n */\n private async _doFetchRegistry(client: RemoteRuntimeClient): Promise<void> {\n let lastError: Error | undefined;\n\n for (\n let attempt = 1;\n attempt <= this.MAX_REGISTRY_FETCH_ATTEMPTS;\n attempt++\n ) {\n try {\n // Add timeout to registry fetch - if it exceeds 3s, retry\n let timeoutId: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(\n () => reject(new Error(\"Registry fetch timeout (3s exceeded)\")),\n this.REGISTRY_FETCH_TIMEOUT_MS\n );\n });\n\n const fetchPromise = client.api.describeRegistry().finally(() => {\n // Clear timeout if request completes first\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n });\n\n const desc = await Promise.race([fetchPromise, timeoutPromise]);\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 policy: n.policy || {},\n impl: () => {},\n });\n }\n }\n\n this.registryFetched = true;\n this.emit(\"registry\", this.registry);\n return;\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n\n if (attempt < this.MAX_REGISTRY_FETCH_ATTEMPTS) {\n const delayMs =\n 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 lastError\n );\n\n // Wait before retrying\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n }\n\n // Max attempts reached, emit final error and throw\n console.error(\n `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts:`,\n lastError\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: lastError,\n attempt: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n throw lastError;\n }\n\n /**\n * Build RemoteRuntimeClient 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: RemoteRuntimeClient): void {\n // Subscribe to transport status changes\n // Convert RemoteRuntimeClient.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<RemoteRuntimeClient> {\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 // Create promise wrapper first, then assign immediately before async work starts\n let promise: Promise<RemoteRuntimeClient>;\n this.clientPromise = promise = (async () => {\n // Build client config from backend config\n const clientConfig = this.buildClientConfig(backend);\n\n // Wrap custom event handler to intercept flow-viewport events and emit viewport event\n const wrappedOnCustomEvent = (event: any) => {\n const msg = event?.message;\n if (\n msg &&\n typeof msg === \"object\" &&\n \"type\" in msg &&\n msg.type === \"viewport\"\n ) {\n const viewport = msg.payload?.viewport;\n if (isValidViewport(viewport)) {\n this.emit(\"viewport\", { viewport });\n }\n }\n // Call original handler if provided\n if (backend.onCustomEvent) {\n backend.onCustomEvent(event);\n }\n };\n\n // Create client with wrapped custom event handler\n const client = new RemoteRuntimeClient(clientConfig, {\n onCustomEvent: wrappedOnCustomEvent,\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 // Fetch registry before returning (wait for it to complete)\n // Only fetch if not already fetched (handles concurrent calls)\n if (!this.registryFetched) {\n console.info(\"[RemoteGraphRunner] Loading registry from remote...\");\n await this.fetchRegistry(client);\n console.info(\"[RemoteGraphRunner] Loaded registry from remote\");\n }\n\n // Clear promise on success\n this.clientPromise = undefined;\n return client;\n })();\n\n return promise;\n }\n\n constructor(backend: RemoteExecutionBackend) {\n super(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.engine;\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.api.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 if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\n // Remote: build remotely then launch\n this.ensureClient().then(async (client) => {\n await client.api.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.api.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(this.getCacheKey(nodeId, handle, \"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(this.getCacheKey(nodeId, handle, \"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.api.launch(opts);\n\n // Get the remote engine proxy and wire up event listeners\n const eng = client.engine;\n if (!this.listenersBound) {\n eng.on(\"value\", (e: any) => {\n this.valueCache.set(this.getCacheKey(e.nodeId, e.handle, 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 const runMode = opts?.runMode ?? \"manual\";\n this.emit(\"status\", { running: true, runMode });\n // Re-apply staged inputs using client.setInputs for consistency\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n await eng.setInputs(nodeId, map, undefined).catch(() => {\n // Ignore errors during launch - inputs will be set when user calls setInputs\n });\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 if (this.engine) {\n this.engine.dispose();\n this.engine = undefined;\n }\n\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 setRunMode(runMode: RunMode): void {\n if (this.engine) {\n this.engine.setRunMode(runMode);\n this.emit(\"status\", { running: true, runMode });\n }\n }\n\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.computeNode(nodeId, options);\n }\n\n async runFromHere(nodeId: string): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.runFromHere(nodeId);\n }\n\n async cancelNodeRuns(nodeIds: string[]): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.cancelNodeRuns(nodeIds);\n }\n\n async setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): Promise<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 try {\n const client = await this.ensureClient();\n await client.engine.setInputs(nodeId, inputs, options);\n } catch (err) {\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 throw err;\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.engine.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n async triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.engine.triggerExternal(nodeId, event, options);\n }\n\n async setViewport(viewport: Viewport): Promise<void> {\n const client = await this.ensureClient();\n await client.api.setViewport(viewport);\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.api.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.api.setExtData(data);\n }\n\n async updateExtData(\n updates: Array<{ path: string; value: unknown }>\n ): Promise<void> {\n const client = await this.ensureClient();\n await client.api.updateExtData(updates);\n }\n\n async commit(reason?: string): Promise<RuntimeHistoryInfo | undefined> {\n const client = await this.ensureClient();\n try {\n const history = await client.api.commit(reason);\n return history;\n } catch (err) {\n console.error(\"[RemoteGraphRunner] Error committing:\", err);\n throw err;\n }\n }\n\n async undo(): Promise<boolean> {\n const client = await this.ensureClient();\n try {\n return await client.api.undo();\n } catch {\n return false;\n }\n }\n\n async redo(): Promise<boolean> {\n const client = await this.ensureClient();\n try {\n return await client.api.redo();\n } catch {\n return false;\n }\n }\n\n async snapshotFull() {\n const client = await this.ensureClient();\n try {\n return await client.api.snapshotFull();\n } catch {\n return { inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(\n payload: RuntimeSnapshotFull,\n options?: { skipBuild?: boolean; dry?: boolean }\n ) {\n // Hydrate local cache first so UI can display values immediately\n this.hydrateValueCache(payload, { dry: options?.dry });\n\n // Then sync with backend\n const client = await this.ensureClient();\n await client.api.applySnapshotFull(payload, {\n skipBuild: options?.skipBuild,\n });\n }\n\n async convertSnapshot(\n converterConfig: ConverterConfig,\n options?: { dry?: boolean }\n ): Promise<RuntimeSnapshotFull> {\n const client = await this.ensureClient();\n const converted = await client.api.convertSnapshot(converterConfig, {\n dry: options?.dry,\n });\n // Hydrate local cache with converted values\n this.hydrateValueCache(converted, { dry: options?.dry });\n return converted;\n }\n\n async pause(): Promise<void> {\n const client = await this.ensureClient();\n await client.api.pause();\n }\n\n async resume(): Promise<void> {\n const client = await this.ensureClient();\n await client.api.resume();\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: RuntimeSnapshot, opts?: { dry?: boolean }): 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(this.getCacheKey(nodeId, handle, \"input\"), {\n value,\n });\n this.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"input\",\n dry: opts?.dry,\n });\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(this.getCacheKey(nodeId, handle, \"output\"), {\n value,\n });\n this.emit(\"value\", {\n nodeId,\n handle,\n value,\n io: \"output\",\n dry: opts?.dry,\n });\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.api.setEnvironment(env, opts);\n } else {\n try {\n const client = await this.ensureClient();\n await client.api.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 RemoteRuntimeClient.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 = this.getCacheKey(n.nodeId, h, \"output\");\n const rec = cache.get(key);\n if (rec) {\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(this.getCacheKey(n.nodeId, h, \"input\"));\n if (rec) 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\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 isTyped,\n type Registry,\n unwrapTypeId,\n unwrapValue,\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 (isTyped(raw)) {\n return {\n typeId: unwrapTypeId(raw),\n value: unwrapValue(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 | undefined {\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 >= 3) 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 (isTyped(value)) {\n return preformatValueForDisplay(\n unwrapTypeId(value),\n unwrapValue(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 (isTyped(value)) {\n return summarizeDeep(unwrapValue(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 InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate, mergeInputHandleDescriptors } 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 missingInputs?: string[];\n missingOutputs?: string[];\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 missing?: boolean;\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 \n // Merge inputs properly, handling metadata\n const inputs: Record<string, InputHandleDescriptor> = {};\n \n // First, add all static handles\n if (desc?.inputs) {\n for (const [handle, staticDesc] of Object.entries(desc.inputs)) {\n inputs[handle] = staticDesc;\n }\n }\n \n // Then, merge dynamic handles (dynamic can override/extend static)\n if (resolved.inputs) {\n for (const [handle, dynamicDesc] of Object.entries(resolved.inputs)) {\n const staticDesc = desc?.inputs?.[handle];\n const merged = mergeInputHandleDescriptors(staticDesc, dynamicDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n \n // Finally, apply overrides from node definition\n if (node.resolvedHandles?.inputs) {\n for (const [handle, overrideDesc] of Object.entries(node.resolvedHandles.inputs)) {\n const existingDesc = inputs[handle];\n const merged = mergeInputHandleDescriptors(existingDesc, overrideDesc);\n if (merged) {\n inputs[handle] = merged;\n }\n }\n }\n \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 {\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n missingInputs = [],\n missingOutputs = [],\n } = 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 // Calculate base dimensions\n const baseRows = Math.max(inputOrder.length, outputOrder.length);\n const { width: baseWidth, height: baseHeight } = estimateNodeSizeFn({\n node,\n registry,\n showValues,\n overrides: sizeOverrides,\n });\n\n // Calculate final dimensions accounting for missing handles\n const finalRows = Math.max(\n inputOrder.length + missingInputs.length,\n outputOrder.length + missingOutputs.length\n );\n const width = baseWidth;\n const height =\n baseHeight + Math.max(0, finalRows - baseRows) * NODE_ROW_HEIGHT_PX;\n\n // Create bounds and layouts for regular handles\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\n // Create bounds and layouts for missing handles\n const missingHandleBounds = [\n ...missingInputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: inputOrder.length + i,\n nodeWidth: width,\n })\n ),\n ...missingOutputs.map((id, i) =>\n createHandleBoundsFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: outputOrder.length + i,\n nodeWidth: width,\n })\n ),\n ];\n\n const missingHandleLayout = [\n ...missingInputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"target\",\n position: Position.Left,\n rowIndex: inputOrder.length + i,\n }),\n missing: true as const,\n })),\n ...missingOutputs.map((id, i) => ({\n ...createHandleLayoutFn({\n id,\n type: \"source\",\n position: Position.Right,\n rowIndex: outputOrder.length + i,\n }),\n missing: true as const,\n })),\n ];\n\n return {\n width,\n height,\n inputOrder,\n outputOrder,\n handles: [...handles, ...missingHandleBounds],\n handleLayout: [...handleLayout, ...missingHandleLayout],\n };\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n Dimensions,\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n XYPosition,\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 exists = wb.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 {\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n },\n { commit: true }\n );\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n const positions: Record<string, XYPosition> = {};\n let commit = false;\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n positions[c.id] = c.position;\n if (!c.dragging) commit = true;\n }\n });\n\n const sizes: Record<string, Dimensions> = {};\n changes.forEach((c) => {\n if (c.type === \"dimensions\" && c.dimensions) {\n sizes[c.id] = c.dimensions;\n if (!c.resizing) commit = true;\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 if (Object.keys(positions).length > 0) {\n wb.setPositions(positions, {\n commit: commit && !Object.keys(sizes).length,\n });\n }\n if (Object.keys(sizes).length > 0) {\n wb.setSizes(sizes, { commit });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) =>\n edges.forEach((e, idx) =>\n wb.disconnect(e.id, { commit: idx === edges.length - 1 })\n ),\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 nodes.forEach((n, idx) =>\n wb.removeNode(n.id, { commit: idx === nodes.length - 1 })\n );\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 off = wb.on(\"graphChanged\", () => {\n setTick((t) => t + 1);\n });\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 off = wb.on(\"graphUiChanged\", (evt) => {\n if (evt.change?.type === \"viewport\") return;\n setTick((t) => t + 1);\n });\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 {\n GraphDefinition,\n ResolvedHandles,\n HandleMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n getInputHandleMetadata,\n} from \"@bian-womp/spark-graph\";\nimport { Position, type Edge, type Node } 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 layoutNode,\n createHandleBounds,\n createHandleLayout,\n estimateNodeSize,\n type EstimateNodeSizeFunction,\n type CreateHandleBoundsFunction,\n type CreateHandleLayoutFunction,\n LayoutNodeFunction,\n} from \"./layout\";\nimport type { UIExtensionRegistry } from \"../core/ui-extensions\";\n\nexport interface RFEdgeData extends Record<string, unknown> {\n sourceNodeId: string;\n sourceNodeTypeId: string;\n sourceHandle: string;\n sourceHandleTypeId: string;\n targetNodeId: string;\n targetNodeTypeId: string;\n targetHandle: string;\n targetHandleTypeId: string;\n edgeTypeId?: string;\n isRunning: boolean;\n hasError: boolean;\n isInvalid: boolean;\n isMissing: boolean;\n custom?: Record<string, unknown>;\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 // Full resolved handles (includes all inputs/outputs with metadata for filtering private inputs)\n handles?: ResolvedHandles;\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 node dimensions\n renderWidth?: number;\n renderHeight?: number;\n initialWidth?: number;\n initialHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n inputDefaults?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n handleMetadata?: Record<string, HandleMetadata | undefined>;\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 custom?: Record<string, unknown>;\n}\n\nexport type RFEdge = Edge<RFEdgeData>;\nexport type RFNode = Node<RFNodeData>;\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n sizes: Record<string, { width: number; height: 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 handles: Record<string, ResolvedHandles>;\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 customData?: {\n nodes?: Record<string, Record<string, unknown>>;\n edges?: Record<string, Record<string, unknown>>;\n meta?: Record<string, unknown>;\n };\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 and cache handle data\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 } = opts.handles[n.nodeId] || {\n inputs: {},\n outputs: {},\n };\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 // 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 computeLayout = (\n node: GraphDefinition[\"nodes\"][number],\n overrides?: { width?: number; height?: number },\n missingInputs?: string[],\n missingOutputs?: string[]\n ) => {\n return layoutNodeOverride\n ? layoutNodeOverride({\n node,\n registry,\n showValues: opts.showValues,\n overrides,\n missingInputs,\n missingOutputs,\n })\n : layoutNode(\n {\n node,\n registry,\n showValues: opts.showValues,\n overrides,\n missingInputs,\n missingOutputs,\n },\n {\n estimateNodeSize: estimateNodeSizeFn,\n createHandleBounds: createHandleBoundsFn,\n createHandleLayout: createHandleLayoutFn,\n }\n );\n };\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const effectiveHandles = opts.handles[n.nodeId] || {\n inputs: {},\n outputs: {},\n };\n const { inputs: inputSource, outputs: outputSource } = effectiveHandles;\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const customSize = sizes?.[n.nodeId];\n const sizeOverrides = customSize\n ? { ...overrideSize, width: customSize.width, height: customSize.height }\n : overrideSize;\n\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n\n const geom = computeLayout(n, sizeOverrides, extraInputs, extraOutputs);\n const renderWidth = customSize?.width ?? geom.width;\n const renderHeight = customSize?.height ?? geom.height;\n\n const initialGeom = customSize\n ? computeLayout(n, overrideSize, extraInputs, extraOutputs)\n : geom;\n\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id) ?? \"unknown\",\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]) ?? \"unknown\",\n }));\n\n const handleLayout = geom.handleLayout;\n const handles = geom.handles;\n\n const handleMetadata: Record<string, HandleMetadata | undefined> = {};\n for (const handleId of Object.keys(inputSource)) {\n handleMetadata[handleId] = getInputHandleMetadata(inputSource, handleId);\n }\n\n const baseData: RFNodeData = {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n handles: opts.handles[n.nodeId],\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,\n renderHeight,\n initialWidth: initialGeom.width,\n initialHeight: initialGeom.height,\n inputValues: opts.inputs?.[n.nodeId],\n inputDefaults: {\n ...opts.handles?.[n.nodeId]?.inputDefaults,\n ...opts.inputDefaults?.[n.nodeId],\n },\n outputValues: opts.outputs?.[n.nodeId],\n handleMetadata,\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\n const customNodeData = opts.customData?.nodes;\n const mergedData = customNodeData?.[n.nodeId]\n ? { ...baseData, custom: customNodeData[n.nodeId] }\n : baseData;\n\n return {\n id: n.nodeId,\n data: mergedData,\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 measured: {\n width: renderWidth,\n height: renderHeight,\n },\n handles,\n width: renderWidth,\n height: renderHeight,\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 const edgeTypeId = e.typeId || undefined;\n\n // Get handle type information from cached handles\n const sourceHandles = opts.handles[e.source.nodeId];\n const targetHandles = opts.handles[e.target.nodeId];\n const sourceNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const targetNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n\n const sourceHandleTypeId = sourceHandles?.outputs[e.source.handle]\n ? formatDeclaredTypeSignature(sourceHandles.outputs[e.source.handle]) ??\n \"unknown\"\n : \"unknown\";\n const targetHandleTypeId = targetHandles?.inputs[e.target.handle]\n ? getInputTypeId(targetHandles.inputs, e.target.handle) ?? \"unknown\"\n : \"unknown\";\n\n const baseEdgeData: RFEdgeData = {\n sourceNodeId: e.source.nodeId,\n sourceNodeTypeId: sourceNode?.typeId || \"unknown\",\n sourceHandle: e.source.handle,\n sourceHandleTypeId,\n targetNodeId: e.target.nodeId,\n targetNodeTypeId: targetNode?.typeId || \"unknown\",\n targetHandle: e.target.handle,\n targetHandleTypeId,\n edgeTypeId,\n isRunning,\n hasError,\n isInvalid: isInvalidEdge,\n isMissing,\n };\n\n const customEdgeData = opts.customData?.edges;\n const mergedEdgeData = customEdgeData?.[e.id]\n ? { ...baseEdgeData, custom: customEdgeData[e.id] }\n : baseEdgeData;\n\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: edgeTypeId,\n type: \"default\",\n data: mergedEdgeData,\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 {\n RuntimeMetadata,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../runtime/IGraphRunner\";\nimport { excludeViewportFromUIState } from \"./viewport-utils\";\nimport type { WorkbenchUIState } from \"./types\";\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 fullUiState = wb.getUIState();\n const uiState = excludeViewportFromUIState(fullUiState);\n const runtimeState = wb.getRuntimeState();\n\n let snapshot: RuntimeSnapshotFull;\n if (runner.isRunning()) {\n const fullSnapshot = await runner.snapshotFull();\n snapshot = {\n ...fullSnapshot,\n def: wb.def,\n extData: {\n ...(fullSnapshot.extData || {}),\n ui: Object.keys(uiState || {}).length > 0 ? uiState : undefined,\n runtime: runtimeState || undefined,\n },\n };\n } else {\n const inputs = runner.getInputs(wb.def);\n snapshot = {\n def: wb.def,\n inputs,\n outputs: {},\n environment: {},\n extData: {\n ui: Object.keys(uiState || {}).length > 0 ? uiState : undefined,\n runtime: runtimeState || undefined,\n },\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 const uiWithoutViewport = excludeViewportFromUIState(\n extData.ui as WorkbenchUIState\n );\n wb.setUIState(uiWithoutViewport as WorkbenchUIState);\n }\n\n if (extData.runtime && typeof extData.runtime === \"object\") {\n wb.setRuntimeState(extData.runtime as RuntimeMetadata);\n }\n\n if (extData.custom && typeof extData.custom === \"object\") {\n wb.setCustomData(extData.custom as Record<string, unknown>);\n }\n\n if (runner.isRunning()) {\n await runner.applySnapshotFull({\n def: wb.def,\n environment,\n inputs,\n outputs,\n extData,\n });\n } else {\n runner.build(wb.def);\n\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\n }\n }\n\n if (extData) {\n await runner.setExtData(extData);\n }\n }\n}\n","import type { WorkbenchUIState } from \"./types\";\nimport type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { offsetImportedPositions } from \"@bian-womp/spark-graph\";\n\n/**\n * Merge UI state from source into target, remapping node IDs using nodeIdMap.\n * Preserves target state and adds/updates source state with remapped IDs.\n * If anchorPos and sourceDef are provided, positions will be offset relative to anchorPos.\n */\nexport function mergeUIState(\n targetUI: WorkbenchUIState | null | undefined,\n sourceUI: WorkbenchUIState | null | undefined,\n nodeIdMap: Record<string, string>,\n anchorPos?: { x: number; y: number },\n sourceDef?: GraphDefinition\n): WorkbenchUIState {\n const result: WorkbenchUIState = {\n ...targetUI,\n };\n\n if (!sourceUI) return result;\n\n // Merge positions with optional offset\n if (sourceUI.positions) {\n if (anchorPos && sourceDef) {\n // Apply offset when anchorPos and sourceDef are provided\n result.positions = offsetImportedPositions(\n targetUI?.positions ?? {},\n sourceUI.positions,\n sourceDef,\n nodeIdMap,\n anchorPos\n );\n } else {\n // Simple remapping without offset\n result.positions = {\n ...(targetUI?.positions || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.positions).map(([oldId, pos]) => [\n nodeIdMap[oldId] || oldId,\n pos,\n ])\n ),\n };\n }\n }\n\n // Merge selection: remap node IDs and edge IDs\n if (sourceUI.selection) {\n const remappedNodes = (sourceUI.selection.nodes || [])\n .map((id) => nodeIdMap[id] || id)\n .filter((id) => id); // Filter out invalid mappings\n\n const remappedEdges = sourceUI.selection.edges || []; // Edge IDs don't need remapping typically\n\n result.selection = {\n nodes: [...(targetUI?.selection?.nodes || []), ...remappedNodes],\n edges: [...(targetUI?.selection?.edges || []), ...remappedEdges],\n };\n }\n\n // Merge nodeNames: remap node IDs\n if (sourceUI.nodeNames) {\n result.nodeNames = {\n ...(targetUI?.nodeNames || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.nodeNames).map(([oldId, name]) => [\n nodeIdMap[oldId] || oldId,\n name,\n ])\n ),\n };\n }\n\n if (sourceUI.sizes) {\n result.sizes = {\n ...(targetUI?.sizes || {}),\n ...Object.fromEntries(\n Object.entries(sourceUI.sizes).map(([oldId, size]) => [\n nodeIdMap[oldId] || oldId,\n size,\n ])\n ),\n };\n }\n\n return result;\n}\n","/**\n * Flow thumbnail capture utility\n * Captures React Flow canvas as SVG image\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface ViewportTransform {\n translateX: number;\n translateY: number;\n scale: number;\n}\n\ninterface VisibleBounds {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\ninterface EdgePath {\n d: string;\n stroke: string;\n strokeWidth: number;\n}\n\ninterface NodeHandle {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n type: \"source\" | \"target\";\n}\n\ninterface NodeTitle {\n text: string;\n x: number;\n y: number;\n fontSize: number;\n fill: string;\n fontWeight: string;\n}\n\ninterface NodeRect {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n rx: number;\n ry: number;\n handles: NodeHandle[];\n title?: NodeTitle;\n}\n\nexport interface ThumbnailOptions {\n /**\n * If true, export the whole graph instead of just the viewport. Default: true\n */\n ignoreViewport?: boolean;\n /**\n * Padding to add when exporting whole graph (in pixels). Default: 40\n */\n padding?: number;\n /**\n * Whether to export handles. Default: true\n */\n exportHandles?: boolean;\n /**\n * Whether to export node titles. Default: true\n */\n exportNodeTitle?: boolean;\n /**\n * Whether to export background dot pattern. Default: true\n */\n exportBackgroundPattern?: boolean;\n /**\n * Background color of nodes. Default: \"#f3f4f6\"\n */\n nodeBackgroundColor?: string;\n /**\n * Color of background dot pattern. Default: \"#f1f1f1\"\n */\n backgroundPatternColor?: string;\n /**\n * Background color of the SVG. Default: \"#ffffff\"\n */\n backgroundColor?: string;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Parses CSS transform string to extract translate and scale values\n */\nfunction parseViewportTransform(transform: string): ViewportTransform {\n let translateX = 0;\n let translateY = 0;\n let scale = 1;\n\n if (transform && transform !== \"none\") {\n // Try translate() scale() format first\n const translateMatch = transform.match(\n /translate\\(([^,]+)px,\\s*([^)]+)px\\)/\n );\n const scaleMatch = transform.match(/scale\\(([^)]+)\\)/);\n\n if (translateMatch) {\n translateX = parseFloat(translateMatch[1]);\n translateY = parseFloat(translateMatch[2]);\n }\n if (scaleMatch) {\n scale = parseFloat(scaleMatch[1]);\n }\n\n // Fallback to matrix format\n if (!translateMatch) {\n const matrixMatch = transform.match(/matrix\\(([^)]+)\\)/);\n if (matrixMatch) {\n const values = matrixMatch[1]\n .split(\",\")\n .map((v) => parseFloat(v.trim()));\n if (values.length >= 6) {\n scale = Math.sqrt(values[0] * values[0] + values[1] * values[1]);\n translateX = values[4];\n translateY = values[5];\n }\n }\n }\n }\n\n return { translateX, translateY, scale };\n}\n\n/**\n * Calculates visible viewport bounds in flow coordinates\n */\nfunction calculateVisibleBounds(\n viewportRect: DOMRect,\n transform: ViewportTransform\n): VisibleBounds {\n const { translateX, translateY, scale } = transform;\n // Guard against division by zero\n if (scale === 0) {\n console.warn(\"[flowThumbnail] Viewport scale is 0, using default bounds\");\n return {\n minX: -translateX,\n minY: -translateY,\n maxX: viewportRect.width - translateX,\n maxY: viewportRect.height - translateY,\n };\n }\n // Screen to flow: (screenX - translateX) / scale\n return {\n minX: (0 - translateX) / scale,\n minY: (0 - translateY) / scale,\n maxX: (viewportRect.width - translateX) / scale,\n maxY: (viewportRect.height - translateY) / scale,\n };\n}\n\n/**\n * Parses border radius string (px or rem) to pixels\n */\nfunction parseBorderRadius(borderRadiusStr: string): number {\n if (!borderRadiusStr || borderRadiusStr === \"0px\") {\n return 8; // default\n }\n\n const match = borderRadiusStr.match(/([\\d.]+)(px|rem)/);\n if (match) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n // Convert rem to px (assuming 16px base) or use px directly\n return unit === \"rem\" ? value * 16 : value;\n }\n\n // Try direct parseFloat as fallback\n const parsed = parseFloat(borderRadiusStr);\n return isNaN(parsed) ? 8 : parsed;\n}\n\n/**\n * Extracts stroke color from element, with fallback\n */\nfunction extractStrokeColor(element: SVGPathElement | HTMLElement): string {\n if (element instanceof SVGPathElement) {\n return (\n element.getAttribute(\"stroke\") ||\n window.getComputedStyle(element).stroke ||\n \"#b1b1b7\"\n );\n }\n const style = window.getComputedStyle(element);\n return (\n style.borderColor || style.borderTopColor || \"#6b7280\" // gray-500 default\n );\n}\n\n/**\n * Extracts stroke/border width from element, ensuring minimum value\n */\nfunction extractStrokeWidth(\n element: SVGPathElement | HTMLElement,\n minWidth: number = 1\n): number {\n if (element instanceof SVGPathElement) {\n const width =\n parseFloat(element.getAttribute(\"stroke-width\") || \"0\") ||\n parseFloat(window.getComputedStyle(element).strokeWidth || \"2\");\n return width > 0 ? width : minWidth;\n }\n const style = window.getComputedStyle(element);\n const width = parseFloat(style.borderWidth || style.borderTopWidth || \"0\");\n return width > 0 ? width : minWidth;\n}\n\n/**\n * Checks if a rectangle intersects with visible bounds\n */\nfunction isRectVisible(\n x: number,\n y: number,\n width: number,\n height: number,\n bounds: VisibleBounds\n): boolean {\n return (\n x + width >= bounds.minX &&\n x <= bounds.maxX &&\n y + height >= bounds.minY &&\n y <= bounds.maxY\n );\n}\n\n/**\n * Parses path data to get bounding box\n * Handles M (moveTo), L (lineTo), C (cubic Bezier), Q (quadratic Bezier), and H/V (horizontal/vertical) commands\n */\nfunction getPathBounds(pathData: string): {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n} {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n // Match coordinates from various path commands: M, L, C, Q, T, S, H, V\n // Pattern matches: command letter followed by coordinate pairs\n const coordPattern = /[MLCQTSHV](-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*)/g;\n const coords = pathData.match(coordPattern);\n\n if (coords) {\n coords.forEach((coord) => {\n const match = coord.match(/(-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*)/);\n if (match) {\n const x = parseFloat(match[1]);\n const y = parseFloat(match[2]);\n if (!isNaN(x) && !isNaN(y)) {\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n });\n }\n\n return { minX, minY, maxX, maxY };\n}\n\n// ============================================================================\n// Edge Extraction\n// ============================================================================\n\n/**\n * Extracts visible edge paths from React Flow viewport\n */\nfunction extractEdgePaths(\n viewport: HTMLElement,\n visibleBounds: VisibleBounds | null\n): {\n edges: EdgePath[];\n bounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n const edges: EdgePath[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const edgePathElements = viewport.querySelectorAll(\n \".react-flow__edge-path\"\n ) as NodeListOf<SVGPathElement>;\n\n edgePathElements.forEach((pathEl) => {\n const pathData = pathEl.getAttribute(\"d\");\n if (!pathData) return;\n\n const pathBounds = getPathBounds(pathData);\n\n // Only include edge if it intersects with visible viewport (or if ignoring viewport)\n if (\n !visibleBounds ||\n (pathBounds.maxX >= visibleBounds.minX &&\n pathBounds.minX <= visibleBounds.maxX &&\n pathBounds.maxY >= visibleBounds.minY &&\n pathBounds.minY <= visibleBounds.maxY)\n ) {\n edges.push({\n d: pathData,\n stroke: extractStrokeColor(pathEl),\n strokeWidth: extractStrokeWidth(pathEl, 2),\n });\n\n // Update bounding box\n minX = Math.min(minX, pathBounds.minX);\n minY = Math.min(minY, pathBounds.minY);\n maxX = Math.max(maxX, pathBounds.maxX);\n maxY = Math.max(maxY, pathBounds.maxY);\n }\n });\n\n return { edges, bounds: { minX, minY, maxX, maxY } };\n}\n\n// ============================================================================\n// Node Extraction\n// ============================================================================\n\n/**\n * Extracts node position from transform style\n */\nfunction extractNodePosition(nodeEl: HTMLDivElement): { x: number; y: number } {\n const transformStyle = nodeEl.style.transform || \"\";\n const translateMatch = transformStyle.match(\n /translate\\(([^,]+)px,\\s*([^)]+)px\\)/\n );\n if (translateMatch) {\n return {\n x: parseFloat(translateMatch[1]),\n y: parseFloat(translateMatch[2]),\n };\n }\n return { x: 0, y: 0 };\n}\n\n/**\n * Extracts node dimensions from inline styles\n */\nfunction extractNodeDimensions(nodeEl: HTMLDivElement): {\n width: number;\n height: number;\n} {\n const widthMatch = nodeEl.style.width?.match(/(\\d+)px/);\n const heightMatch = nodeEl.style.height?.match(/(\\d+)px/);\n return {\n width: widthMatch ? parseFloat(widthMatch[1]) : 150,\n height: heightMatch ? parseFloat(heightMatch[1]) : 40,\n };\n}\n\n/**\n * Extracts node styles (colors, border, radius) from computed styles\n */\nfunction extractNodeStyles(\n nodeContent: HTMLElement,\n nodeBackgroundColor?: string\n): {\n fill: string;\n stroke: string;\n strokeWidth: number;\n rx: number;\n ry: number;\n} {\n const computedStyle = window.getComputedStyle(nodeContent);\n // Use provided background color or default gray background for nodes in thumbnail\n const fill = nodeBackgroundColor || \"#f3f4f6\"; // gray-100 equivalent\n const stroke = extractStrokeColor(nodeContent);\n const strokeWidth = extractStrokeWidth(nodeContent, 1);\n const borderRadiusStr = computedStyle.borderRadius || \"8px\";\n const rx = parseBorderRadius(borderRadiusStr);\n const ry = rx; // Use same radius for both x and y\n\n return { fill, stroke, strokeWidth, rx, ry };\n}\n\n/**\n * Determines if a handle is a source (output) or target (input)\n */\nfunction isHandleSource(handleEl: HTMLElement): boolean {\n return (\n handleEl.classList.contains(\"react-flow__handle-right\") ||\n handleEl.classList.contains(\"react-flow__handle-source\")\n );\n}\n\n/**\n * Extracts handle position and calculates absolute coordinates\n */\nfunction extractHandlePosition(\n handleEl: HTMLElement,\n nodeX: number,\n nodeY: number,\n nodeWidth: number,\n isSource: boolean\n): { x: number; y: number } {\n const handleStyle = window.getComputedStyle(handleEl);\n const handleTop = parseFloat(handleStyle.top || \"0\");\n const handleLeft = handleStyle.left;\n const handleRight = handleStyle.right;\n\n const handleY = nodeY + handleTop;\n let handleX: number;\n\n if (isSource) {\n // Source handles are on the right edge\n if (handleRight !== \"auto\" && handleRight !== \"\") {\n const rightValue = parseFloat(handleRight) || 0;\n handleX = nodeX + nodeWidth + rightValue;\n } else {\n handleX = nodeX + nodeWidth;\n }\n } else {\n // Target handles are on the left edge\n if (handleLeft !== \"auto\" && handleLeft !== \"\") {\n const leftValue = parseFloat(handleLeft) || 0;\n handleX = nodeX + leftValue;\n } else {\n handleX = nodeX;\n }\n }\n\n return { x: handleX, y: handleY };\n}\n\n/**\n * Extracts handles from a node element\n */\nfunction extractNodeHandles(\n nodeEl: HTMLDivElement,\n nodeX: number,\n nodeY: number,\n nodeWidth: number\n): NodeHandle[] {\n const handles: NodeHandle[] = [];\n const handleElements = nodeEl.querySelectorAll(\n \".react-flow__handle\"\n ) as NodeListOf<HTMLElement>;\n\n handleElements.forEach((handleEl) => {\n const handleStyle = window.getComputedStyle(handleEl);\n const handleWidth = parseFloat(handleStyle.width || \"12\");\n const handleHeight = parseFloat(handleStyle.height || \"12\");\n\n const isSource = isHandleSource(handleEl);\n const position = extractHandlePosition(\n handleEl,\n nodeX,\n nodeY,\n nodeWidth,\n isSource\n );\n\n handles.push({\n x: position.x,\n y: position.y,\n width: handleWidth,\n height: handleHeight,\n fill: handleStyle.backgroundColor || \"rgba(255, 255, 255, 0.5)\",\n stroke: extractStrokeColor(handleEl),\n strokeWidth: extractStrokeWidth(handleEl, 1),\n type: isSource ? \"source\" : \"target\",\n });\n });\n\n return handles;\n}\n\n/**\n * Extracts node title text and position\n */\nfunction extractNodeTitle(\n nodeEl: HTMLDivElement,\n nodeX: number,\n nodeY: number\n): NodeTitle | undefined {\n const titleElement = nodeEl.querySelector(\n \".react-flow__node-title\"\n ) as HTMLElement | null;\n\n if (!titleElement) return undefined;\n\n const titleText = titleElement.textContent || titleElement.innerText || \"\";\n if (!titleText.trim()) return undefined;\n\n const titleStyle = window.getComputedStyle(titleElement);\n const titleRect = titleElement.getBoundingClientRect();\n const nodeRect = nodeEl.getBoundingClientRect();\n\n // Calculate title position relative to node (in flow coordinates)\n const titleRelativeX = titleRect.left - nodeRect.left;\n const titleRelativeY = titleRect.top - nodeRect.top;\n\n // Get font properties\n const fontSize = parseFloat(titleStyle.fontSize || \"14\");\n const fill = titleStyle.color || \"#374151\"; // gray-700 default\n const fontWeight = titleStyle.fontWeight || \"600\"; // bold default\n\n // Calculate text position (SVG text uses baseline)\n const lineHeight = parseFloat(\n titleStyle.lineHeight || String(fontSize * 1.2)\n );\n const textBaselineOffset = lineHeight * 0.8; // Approximate baseline offset\n\n return {\n text: titleText.trim(),\n x: nodeX + titleRelativeX,\n y: nodeY + titleRelativeY + textBaselineOffset,\n fontSize,\n fill,\n fontWeight,\n };\n}\n\n/**\n * Extracts visible nodes from React Flow viewport\n */\nfunction extractNodes(\n viewport: HTMLElement,\n visibleBounds: VisibleBounds | null,\n options: ThumbnailOptions = {}\n): {\n nodes: NodeRect[];\n bounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n const {\n exportHandles = true,\n exportNodeTitle = true,\n nodeBackgroundColor,\n } = options;\n\n const nodes: NodeRect[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const nodeElements = viewport.querySelectorAll(\n \".react-flow__node\"\n ) as NodeListOf<HTMLDivElement>;\n\n nodeElements.forEach((nodeEl) => {\n const position = extractNodePosition(nodeEl);\n const dimensions = extractNodeDimensions(nodeEl);\n\n // Get the actual node content div (first child)\n const nodeContent = nodeEl.firstElementChild as HTMLElement;\n if (!nodeContent) return;\n\n const styles = extractNodeStyles(nodeContent, nodeBackgroundColor);\n const handles = exportHandles\n ? extractNodeHandles(nodeEl, position.x, position.y, dimensions.width)\n : [];\n const title = exportNodeTitle\n ? extractNodeTitle(nodeEl, position.x, position.y)\n : undefined;\n\n // Only include node if it's within visible viewport (or if ignoring viewport)\n if (\n !visibleBounds ||\n isRectVisible(\n position.x,\n position.y,\n dimensions.width,\n dimensions.height,\n visibleBounds\n )\n ) {\n nodes.push({\n x: position.x,\n y: position.y,\n width: dimensions.width,\n height: dimensions.height,\n ...styles,\n handles,\n title,\n });\n\n // Update bounding box\n minX = Math.min(minX, position.x);\n minY = Math.min(minY, position.y);\n maxX = Math.max(maxX, position.x + dimensions.width);\n maxY = Math.max(maxY, position.y + dimensions.height);\n\n // Update bounding box to include handles\n handles.forEach((handle) => {\n minX = Math.min(minX, handle.x);\n minY = Math.min(minY, handle.y);\n maxX = Math.max(maxX, handle.x + handle.width);\n maxY = Math.max(maxY, handle.y + handle.height);\n });\n }\n });\n\n return { nodes, bounds: { minX, minY, maxX, maxY } };\n}\n\n// ============================================================================\n// SVG Rendering\n// ============================================================================\n\n/**\n * Creates SVG element with dot pattern background (matching React Flow)\n */\nfunction createSVGElement(\n width: number,\n height: number,\n options: ThumbnailOptions = {}\n): { svg: SVGSVGElement; group: SVGGElement } {\n const {\n exportBackgroundPattern = true,\n backgroundPatternColor = \"#f1f1f1\",\n backgroundColor = \"#ffffff\",\n } = options;\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", String(width));\n svg.setAttribute(\"height\", String(height));\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\n // Create background rectangle with configurable background color\n const bgRect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n bgRect.setAttribute(\"width\", String(width));\n bgRect.setAttribute(\"height\", String(height));\n bgRect.setAttribute(\"fill\", backgroundColor);\n svg.appendChild(bgRect);\n\n // Create dot pattern if enabled\n if (exportBackgroundPattern) {\n // Create defs section for patterns\n const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n\n // Create dot pattern (matching React Flow's BackgroundVariant.Dots)\n // React Flow uses gap={12} and size={1} by default\n const pattern = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"pattern\"\n );\n pattern.setAttribute(\"id\", \"dot-pattern\");\n pattern.setAttribute(\"x\", \"0\");\n pattern.setAttribute(\"y\", \"0\");\n pattern.setAttribute(\"width\", \"24\"); // gap between dots (matching React Flow default)\n pattern.setAttribute(\"height\", \"24\");\n pattern.setAttribute(\"patternUnits\", \"userSpaceOnUse\");\n\n // Create a circle for the dot (centered in the pattern cell)\n const circle = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"circle\"\n );\n circle.setAttribute(\"cx\", \"12\"); // Center of 24x24 pattern cell\n circle.setAttribute(\"cy\", \"12\");\n circle.setAttribute(\"r\", \"1\"); // dot radius = 1 (matching React Flow size={1})\n circle.setAttribute(\"fill\", backgroundPatternColor);\n\n pattern.appendChild(circle);\n defs.appendChild(pattern);\n svg.appendChild(defs);\n\n // Create pattern overlay rectangle\n const patternRect = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"rect\"\n );\n patternRect.setAttribute(\"width\", String(width));\n patternRect.setAttribute(\"height\", String(height));\n patternRect.setAttribute(\"fill\", \"url(#dot-pattern)\");\n svg.appendChild(patternRect);\n }\n\n // Create group with transform\n const group = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svg.appendChild(group);\n\n return { svg, group };\n}\n\n/**\n * Renders a node rectangle to SVG group\n */\nfunction renderNodeRect(group: SVGGElement, node: NodeRect): void {\n const rectEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rectEl.setAttribute(\"x\", String(node.x));\n rectEl.setAttribute(\"y\", String(node.y));\n rectEl.setAttribute(\"width\", String(node.width));\n rectEl.setAttribute(\"height\", String(node.height));\n rectEl.setAttribute(\"rx\", String(node.rx));\n rectEl.setAttribute(\"ry\", String(node.ry));\n rectEl.setAttribute(\"fill\", node.fill);\n rectEl.setAttribute(\"stroke\", node.stroke);\n rectEl.setAttribute(\"stroke-width\", String(node.strokeWidth));\n group.appendChild(rectEl);\n}\n\n/**\n * Renders a handle to SVG group\n */\nfunction renderHandle(group: SVGGElement, handle: NodeHandle): void {\n const handleEl = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"rect\"\n );\n // Handles are centered on edges\n handleEl.setAttribute(\"x\", String(handle.x - handle.width / 2));\n handleEl.setAttribute(\"y\", String(handle.y - handle.height / 2));\n handleEl.setAttribute(\"width\", String(handle.width));\n handleEl.setAttribute(\"height\", String(handle.height));\n handleEl.setAttribute(\"rx\", String(handle.width / 2)); // Make handles circular/rounded\n handleEl.setAttribute(\"ry\", String(handle.height / 2));\n handleEl.setAttribute(\"fill\", handle.fill);\n handleEl.setAttribute(\"stroke\", handle.stroke);\n handleEl.setAttribute(\"stroke-width\", String(handle.strokeWidth));\n group.appendChild(handleEl);\n}\n\n/**\n * Renders node title text to SVG group\n */\nfunction renderNodeTitle(group: SVGGElement, title: NodeTitle): void {\n const textEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n textEl.setAttribute(\"x\", String(title.x));\n textEl.setAttribute(\"y\", String(title.y));\n textEl.setAttribute(\"font-size\", String(title.fontSize));\n textEl.setAttribute(\"fill\", title.fill);\n textEl.setAttribute(\"font-weight\", title.fontWeight);\n textEl.setAttribute(\"font-family\", \"system-ui, -apple-system, sans-serif\");\n textEl.textContent = title.text;\n group.appendChild(textEl);\n}\n\n/**\n * Renders an edge path to SVG group\n */\nfunction renderEdgePath(group: SVGGElement, edge: EdgePath): void {\n const pathEl = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathEl.setAttribute(\"d\", edge.d);\n pathEl.setAttribute(\"fill\", \"none\");\n pathEl.setAttribute(\"stroke\", edge.stroke);\n pathEl.setAttribute(\"stroke-width\", String(edge.strokeWidth));\n group.appendChild(pathEl);\n}\n\n/**\n * Renders all nodes, handles, titles, and edges to SVG group\n */\nfunction renderContentToSVG(\n group: SVGGElement,\n nodes: NodeRect[],\n edges: EdgePath[],\n transformX: number,\n transformY: number,\n options: ThumbnailOptions = {}\n): void {\n const { exportHandles = true, exportNodeTitle = true } = options;\n\n group.setAttribute(\"transform\", `translate(${transformX}, ${transformY})`);\n\n // Render nodes\n nodes.forEach((node) => {\n renderNodeRect(group, node);\n if (exportHandles) {\n node.handles.forEach((handle) => renderHandle(group, handle));\n }\n if (exportNodeTitle && node.title) {\n renderNodeTitle(group, node.title);\n }\n });\n\n // Render edges\n edges.forEach((edge) => renderEdgePath(group, edge));\n}\n\n// ============================================================================\n// Main Capture Function\n// ============================================================================\n\n/**\n * Captures a React Flow container element as an SVG image and returns data URL\n * @param containerElement - The React Flow container DOM element\n * @param options - Options for thumbnail capture\n * @returns Promise resolving to SVG data URL string, or null if capture fails\n */\nexport async function captureCanvasThumbnail(\n containerElement: HTMLElement | null,\n options: ThumbnailOptions = {}\n): Promise<string | null> {\n const {\n ignoreViewport = true,\n padding = 40,\n exportHandles = true,\n exportNodeTitle = true,\n exportBackgroundPattern = true,\n nodeBackgroundColor,\n backgroundPatternColor,\n backgroundColor,\n } = options;\n\n if (!containerElement) {\n console.warn(\"[flowThumbnail] Container element is null\");\n return null;\n }\n\n try {\n // Find the React Flow viewport element\n const reactFlowViewport = containerElement.querySelector(\n \".react-flow__viewport\"\n ) as HTMLElement | null;\n\n if (!reactFlowViewport) {\n console.warn(\"[flowThumbnail] React Flow viewport not found\");\n return null;\n }\n\n // Parse viewport transform\n const viewportStyle = window.getComputedStyle(reactFlowViewport);\n const viewportTransform =\n viewportStyle.transform || viewportStyle.getPropertyValue(\"transform\");\n const transform = parseViewportTransform(viewportTransform);\n\n // Calculate visible bounds (null if ignoring viewport)\n const viewportRect = reactFlowViewport.getBoundingClientRect();\n const visibleBounds = ignoreViewport\n ? null\n : calculateVisibleBounds(viewportRect, transform);\n\n // Extract edges and nodes (pass null bounds if ignoring viewport to get all)\n const { edges, bounds: edgeBounds } = extractEdgePaths(\n reactFlowViewport,\n visibleBounds\n );\n const { nodes, bounds: nodeBounds } = extractNodes(\n reactFlowViewport,\n visibleBounds,\n {\n exportHandles,\n exportNodeTitle,\n nodeBackgroundColor,\n }\n );\n\n // Calculate overall bounding box\n // Handle case where one or both bounds might be Infinity (no content)\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n if (edgeBounds.minX !== Infinity) {\n minX = Math.min(minX, edgeBounds.minX);\n minY = Math.min(minY, edgeBounds.minY);\n maxX = Math.max(maxX, edgeBounds.maxX);\n maxY = Math.max(maxY, edgeBounds.maxY);\n }\n\n if (nodeBounds.minX !== Infinity) {\n minX = Math.min(minX, nodeBounds.minX);\n minY = Math.min(minY, nodeBounds.minY);\n maxX = Math.max(maxX, nodeBounds.maxX);\n maxY = Math.max(maxY, nodeBounds.maxY);\n }\n\n // If no content found, return null\n if (minX === Infinity || (nodes.length === 0 && edges.length === 0)) {\n if (ignoreViewport) {\n console.warn(\"[flowThumbnail] No content found in graph\");\n return null;\n }\n // Fallback to visible viewport bounds if not ignoring viewport\n minX = visibleBounds!.minX;\n minY = visibleBounds!.minY;\n maxX = visibleBounds!.maxX;\n maxY = visibleBounds!.maxY;\n }\n\n // Calculate content bounds with padding if ignoring viewport\n let contentMinX: number;\n let contentMinY: number;\n let contentMaxX: number;\n let contentMaxY: number;\n\n if (ignoreViewport) {\n // Add padding when exporting whole graph\n contentMinX = minX - padding;\n contentMinY = minY - padding;\n contentMaxX = maxX + padding;\n contentMaxY = maxY + padding;\n } else {\n // Use the visible viewport bounds exactly (what the user sees)\n contentMinX = visibleBounds!.minX;\n contentMinY = visibleBounds!.minY;\n contentMaxX = visibleBounds!.maxX;\n contentMaxY = visibleBounds!.maxY;\n }\n\n const contentWidth = contentMaxX - contentMinX;\n const contentHeight = contentMaxY - contentMinY;\n\n // Create SVG with options\n const { svg, group } = createSVGElement(contentWidth, contentHeight, {\n exportBackgroundPattern,\n backgroundPatternColor,\n backgroundColor,\n });\n\n // Render content with options\n renderContentToSVG(group, nodes, edges, -contentMinX, -contentMinY, {\n exportHandles,\n exportNodeTitle,\n });\n\n // Serialize SVG to string\n const serializer = new XMLSerializer();\n const svgString = serializer.serializeToString(svg);\n\n // Return SVG data URL\n const svgDataUrl = `data:image/svg+xml;base64,${btoa(\n unescape(encodeURIComponent(svgString))\n )}`;\n return svgDataUrl;\n } catch (error) {\n console.error(\"[flowThumbnail] Failed to capture thumbnail:\", error);\n return null;\n }\n}\n\n/**\n * Captures a React Flow container element as an SVG image and downloads it\n * @param containerElement - The React Flow container DOM element\n * @param options - Options for thumbnail capture\n * @returns Promise resolving to true if successful, false otherwise\n */\nexport async function downloadCanvasThumbnail(\n containerElement: HTMLElement | null,\n options: ThumbnailOptions = {}\n): Promise<boolean> {\n const svgDataUrl = await captureCanvasThumbnail(containerElement, options);\n if (!svgDataUrl) {\n return false;\n }\n\n // Create blob and download\n const base64Data = svgDataUrl.split(\",\")[1];\n const svgString = atob(base64Data);\n const blob = new Blob([svgString], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = `flow-thumbnail-${Date.now()}.svg`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n return true;\n}\n","import React, { createContext, useContext } from \"react\";\nimport type {\n GraphDefinition,\n InputValidationError,\n RegistryError,\n ResolvedHandles,\n SystemError,\n RunMode,\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\";\nimport {\n NodeContextMenuHandlers,\n DefaultContextMenuHandlers,\n SelectionContextMenuHandlers,\n} from \"../context-menu/ContextMenuHandlers\";\nimport type { CopiedGraphData } from \"../../core/InMemoryWorkbench\";\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};\n\nexport type KeyboardShortcutEnables = {\n undo?: boolean;\n redo?: boolean;\n copy?: boolean;\n paste?: boolean;\n duplicate?: boolean;\n selectAll?: boolean;\n delete?: boolean;\n};\n\nexport type KeyboardShortcuts = {\n undo?: string; // e.g., \"⌘/Ctrl + Z\"\n redo?: string; // e.g., \"⌘/Ctrl + Shift + Z\"\n copy?: string; // e.g., \"⌘/Ctrl + C\"\n paste?: string; // e.g., \"⌘/Ctrl + V\"\n duplicate?: string; // e.g., \"⌘/Ctrl + D\"\n delete?: string; // e.g., \"Delete\"\n selectAll?: string; // e.g., \"⌘/Ctrl + A\"\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 // Optional: customize selection context menu handlers\n getSelectionContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n selection: { nodes: string[]; edges: string[] },\n baseHandlers: SelectionContextMenuHandlers,\n ctx?: {\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n ) => SelectionContextMenuHandlers; // Optional: customize default context menu handlers\n getDefaultContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n baseHandlers: DefaultContextMenuHandlers\n ) => DefaultContextMenuHandlers;\n // Optional: customize node context menu handlers\n getNodeContextMenuHandlers?: (\n wb: InMemoryWorkbench,\n nodeId: string,\n baseHandlers: NodeContextMenuHandlers\n ) => NodeContextMenuHandlers;\n // Optional: provide custom storage for copied data\n // If not provided, workbench will use internal storage\n getCopiedDataStorage?: () => {\n get: () => CopiedGraphData | null;\n set: (data: CopiedGraphData | null) => void;\n };\n // Optional: enable/disable keyboard shortcuts per action (default: enabled)\n enableKeyboardShortcuts?: KeyboardShortcutEnables;\n // Optional: customize keyboard shortcut labels\n keyboardShortcuts?: KeyboardShortcuts;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n\n // Graph\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 handlesMap: Record<string, ResolvedHandles>;\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\n // Run mode\n runMode: RunMode;\n setRunMode: (mode: RunMode) => void;\n runNode: (nodeId: string) => Promise<void>;\n runFromHere: (nodeId: string) => Promise<void>;\n abortNode: (nodeId: string) => 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 // Registry version (increments when registry enums/types/nodes change)\n registryVersion: number;\n // Overrides for customizing behavior\n overrides?: WorkbenchOverrides;\n\n // Node naming\n getNodeDisplayName: (nodeId: string) => string;\n setNodeName: (nodeId: string, name: string | undefined) => void;\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 NodeRuntimeMetadata,\n RunMode,\n} from \"@bian-womp/spark-protocol\";\nimport { 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\";\nimport { excludeViewportFromUIState, isValidViewport } from \"../viewport-utils\";\n\n// Helper to compute invalidated status from runtime metadata\nfunction computeInvalidatedFromMetadata(\n metadata: NodeRuntimeMetadata | undefined\n): boolean {\n if (!metadata) return true;\n const { lastSuccessAt, lastInputAt, lastRunAt } = metadata;\n if (!lastSuccessAt && !lastRunAt) return true;\n if (!lastInputAt || Object.keys(lastInputAt).length === 0) return false;\n const maxInputTime = Math.max(...Object.values(lastInputAt));\n return maxInputTime > (lastSuccessAt ?? lastRunAt ?? 0);\n}\n\nexport function WorkbenchProvider({\n wb,\n runner,\n overrides,\n uiVersion,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\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 [runMode, setRunModeState] = useState<RunMode>(\"manual\");\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 [registryVersion, setRegistryVersion] = useState(0);\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 };\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 useEffect(() => {\n const offRunnerStatus = runner.on(\"status\", (status) => {\n if (status.runMode) {\n setRunModeState(status.runMode);\n }\n });\n\n return () => {\n offRunnerStatus();\n };\n }, [runner]);\n\n const handlesMap = useMemo(() => {\n const out: Record<string, ResolvedHandles> = {};\n for (const n of wb.def.nodes) {\n out[n.nodeId] = computeEffectiveHandles(n, wb.registry);\n }\n return out;\n }, [wb, wb.def, graphTick, wb.registry, registryVersion]);\n // Def and IO values\n const inputsMap = useMemo(\n () => runner.getInputs(wb.def),\n [runner, wb, wb.def, valuesTick]\n );\n const inputDefaultsMap = useMemo(\n () => runner.getInputDefaults(wb.def),\n [runner, wb, wb.def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(wb.def),\n [runner, wb, wb.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 wb.def.nodes) {\n const outputsDecl = handlesMap[n.nodeId]?.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 }, [wb, wb.def, outputsMap, handlesMap]);\n\n // Initialize nodes and derive invalidated status from persisted metadata\n useEffect(() => {\n const workbenchRuntimeState = wb.getRuntimeState() ?? { nodes: {} };\n setNodeStatus((prev) => {\n const next = { ...prev };\n const metadata = workbenchRuntimeState;\n for (const n of wb.def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n const nodeMeta = metadata.nodes[n.nodeId];\n const updates: Partial<NodeRunStatus> = {};\n if (cur.invalidated === undefined) {\n updates.invalidated = computeInvalidatedFromMetadata(nodeMeta);\n }\n if (cur.activeRunIds === undefined) {\n updates.activeRunIds = [];\n }\n if (cur.activeRuns === undefined) {\n updates.activeRuns = 0;\n }\n if (nodeMeta?.lastErrorSummary && cur.lastError === undefined) {\n updates.lastError = nodeMeta.lastErrorSummary;\n }\n if (Object.keys(updates).length > 0) {\n next[n.nodeId] = { ...cur, ...updates };\n }\n }\n return next;\n });\n }, [wb.def, wb]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of wb.def.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of wb.def.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 = wb.def.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: wb.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, reason: \"auto-layout\" });\n }, [wb, wb.def, wb.registry, registryVersion, 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 const getNodeDisplayName = useCallback(\n (nodeId: string): string => {\n const customName = wb.getNodeName(nodeId);\n if (customName) return customName;\n\n const node = wb.def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return nodeId;\n\n const desc = wb.registry.nodes.get(node.typeId);\n return desc?.displayName || node.typeId;\n },\n [wb, wb.registry, registryVersion]\n );\n\n const setNodeName = useCallback(\n (nodeId: string, name: string | undefined) => {\n wb.setNodeName(nodeId, name, { commit: true, reason: \"rename-node\" });\n },\n [wb]\n );\n\n // Helper to save runtime metadata and UI state to extData\n const saveUiRuntimeMetadata = useCallback(\n async (workbench: InMemoryWorkbench, graphRunner: IGraphRunner) => {\n try {\n const current = workbench.getRuntimeState() ?? { nodes: {} };\n const metadata = { nodes: { ...current.nodes } };\n\n // Clean up metadata for nodes that no longer exist\n const nodeIds = new Set(workbench.def.nodes.map((n) => n.nodeId));\n for (const nodeId of Object.keys(metadata.nodes)) {\n if (!nodeIds.has(nodeId)) {\n delete metadata.nodes[nodeId];\n }\n }\n\n // Save cleaned metadata to workbench state\n workbench.setRuntimeState(metadata);\n\n const fullUiState = workbench.getUIState();\n const uiWithoutViewport = excludeViewportFromUIState(fullUiState);\n\n // Use updateExtData for efficient batched partial updates\n const updates: Array<{ path: string; value: unknown }> = [];\n if (Object.keys(uiWithoutViewport || {}).length > 0) {\n updates.push({ path: \"ui\", value: uiWithoutViewport });\n }\n updates.push({ path: \"runtime\", value: metadata });\n await graphRunner.updateExtData(updates);\n } catch (err) {\n console.warn(\n \"[WorkbenchContext] Failed to save runtime metadata:\",\n err\n );\n }\n },\n []\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 (\n changeType === \"moveNode\" ||\n changeType === \"moveNodes\" ||\n changeType === \"resizeNodes\"\n )\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 for (const n of wb.def.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 wb.updateResolvedHandles(n.nodeId, updated);\n }\n }\n }\n };\n\n const offRunnerValue = runner.on(\"value\", (e) => {\n if (e?.dry) return;\n const now = Date.now();\n if (e?.io === \"input\") {\n const nodeId = e.nodeId;\n const handle = e.handle;\n // Track input timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastInputAt: {\n ...(nodeMeta.lastInputAt ?? {}),\n [handle]: now,\n },\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 } else if (e?.io === \"output\") {\n const nodeId = e.nodeId as string;\n const handle = e.handle as string;\n // Track output timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastOutputAt: {\n ...(nodeMeta.lastOutputAt ?? {}),\n [handle]: now,\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 const now = Date.now();\n // Track error timestamp and summary in workbench runtime state\n const err = nodeError.err;\n let errorSummary: { message: string; code?: number } | undefined;\n if (err && typeof err === \"object\") {\n const errAny = err as any;\n const message = errAny.userMessage || errAny.message || String(err);\n const code = errAny.statusCode || errAny.code;\n errorSummary = {\n message: typeof message === \"string\" ? message : String(message),\n code: typeof code === \"number\" ? code : undefined,\n };\n }\n wb.updateNodeRuntimeMetadata(nodeId, (nodeMeta) => ({\n ...nodeMeta,\n lastErrorAt: now,\n lastRunAt: now,\n ...(errorSummary ? { lastErrorSummary: errorSummary } : {}),\n }));\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: errorSummary,\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 const now = Date.now();\n // Track run timestamp in workbench runtime state\n wb.updateNodeRuntimeMetadata(id, (nodeMeta) => ({\n ...nodeMeta,\n lastRunAt: now,\n }));\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 },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: now }));\n } else if (s.kind === \"node-custom-data\") {\n const id = s.nodeId;\n wb.setCustomNodeData(id, s.data, { commit: false, merge: true });\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 const now = Date.now();\n // Validate runId is a non-empty string\n const isValidRunId =\n runId && typeof runId === \"string\" && runId.length > 0;\n const hadError = !!(isValidRunId && errorRunsRef.current[id]?.[runId]);\n // Track success timestamp if no error in workbench runtime state\n if (!hadError) {\n wb.updateNodeRuntimeMetadata(id, (nodeMeta) => {\n const updated = { ...nodeMeta, lastSuccessAt: now };\n // Clear error summary on success\n if (updated.lastErrorSummary) {\n delete updated.lastErrorSummary;\n }\n return updated;\n });\n }\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 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 offWbRegistryChanged = wb.on(\"registryChanged\", (evt) => {\n setRegistryVersion((v) => v + 1);\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 offWbGraphUiChangedForLog = 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 offWbGraphChangedForUpdate = wb.on(\"graphChanged\", async (event) => {\n // Build detailed reason from change type\n let reason = \"graph-changed\";\n if (event.change) {\n const changeType = event.change.type;\n if (changeType === \"addNode\") {\n reason = \"add-node\";\n } else if (changeType === \"removeNode\") {\n reason = \"remove-node\";\n } else if (changeType === \"connect\") {\n reason = \"connect-edge\";\n } else if (changeType === \"disconnect\") {\n reason = \"disconnect-edge\";\n } else if (changeType === \"updateParams\") {\n reason = \"update-node-params\";\n } else if (changeType === \"updateEdgeType\") {\n reason = \"update-edge-type\";\n } else if (changeType === \"setInputs\") {\n reason = \"set-inputs\";\n } else if (changeType === \"updateResolvedHandles\") {\n reason = \"update-resolved-handles\";\n }\n }\n\n if (event.change?.type === \"setInputs\") {\n const { nodeId, inputs } = event.change;\n await runner.setInputs(nodeId, inputs, { dry: event.dry });\n }\n\n if (!runner.isRunning()) {\n if (event.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner.commit(reason).catch((err) => {\n console.error(\"[WorkbenchContext] Error committing:\", err);\n return undefined;\n });\n if (history) wb.setHistory(history);\n }\n return;\n }\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 await runner.setInputs(nodeId, inputs, { dry: true });\n }\n if (copyOutputsFrom) {\n await runner.copyOutputs(copyOutputsFrom, nodeId, { dry: true });\n }\n } else {\n await runner.update(event.def, { dry: !!inputs });\n if (inputs) {\n await runner.setInputs(nodeId, inputs, { dry: false });\n }\n }\n } else if (event.change?.type !== \"setInputs\") {\n await runner.update(event.def, { dry: event.dry });\n }\n\n if (event.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(event.reason ?? reason)\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing after update:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\n } catch (err) {\n console.error(\"[WorkbenchContext] Error updating graph:\", err);\n }\n });\n const offWbSetValidation = wb.on(\"validationChanged\", (r) =>\n setValidation(r)\n );\n const offWbSelectionChanged = wb.on(\"selectionChanged\", async (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n if (sel.commit) {\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(sel.reason ?? \"selection\")\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing selection change:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\n });\n const offWbGraphUiChanged = wb.on(\"graphUiChanged\", async (event) => {\n // Handle viewport changes separately (send via SetViewport command, not commit)\n if (event.change?.type === \"viewport\") {\n const viewport = wb.getViewport();\n if (viewport && runner.setViewport) {\n runner.setViewport(viewport).catch((err) => {\n console.warn(\n \"[WorkbenchContext] Failed to send viewport update:\",\n err\n );\n });\n }\n return;\n }\n\n // Only commit if commit flag is true (e.g., drag end, not during dragging)\n if (event.commit) {\n // Build detailed reason from change type\n let reason = \"ui-changed\";\n if (event.change) {\n const changeType = event.change.type;\n if (changeType === \"moveNode\") {\n reason = \"move-node\";\n } else if (changeType === \"moveNodes\") {\n reason = \"move-nodes\";\n } else if (changeType === \"resizeNodes\") {\n reason = \"resize-nodes\";\n } else if (changeType === \"selection\") {\n reason = \"selection\";\n } else if (changeType === \"customNodeData\") {\n reason = \"custom-node-data\";\n } else if (changeType === \"customEdgeData\") {\n reason = \"custom-edge-data\";\n } else if (changeType === \"customMetaData\") {\n reason = \"custom-meta\";\n } else if (changeType === \"customData\") {\n reason = \"custom\";\n }\n }\n await saveUiRuntimeMetadata(wb, runner);\n const history = await runner\n .commit(event.reason ?? reason)\n .catch((err: unknown) => {\n console.error(\n \"[WorkbenchContext] Error committing UI changes:\",\n err\n );\n return undefined;\n });\n if (history) {\n wb.setHistory(history);\n }\n }\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 (registry) => {\n wb.setRegistry(registry);\n });\n\n const offFlowViewport = runner.on(\"viewport\", (event) => {\n const viewport = event.viewport;\n if (isValidViewport(viewport)) {\n wb.setViewport(viewport);\n }\n });\n\n const offRunnerTransport = runner.on(\"transport\", (t) => {\n if (t.state === \"disconnected\") {\n console.info(\n \"[WorkbenchContext] Transport disconnected, resetting node status\"\n );\n // Reinitialize node status with invalidated=true for all nodes\n setNodeStatus(() => {\n const next: Record<string, NodeRunStatus> = {};\n const metadata = wb.getRuntimeState() ?? { nodes: {} };\n for (const n of wb.def.nodes) {\n const nodeMeta = metadata.nodes[n.nodeId];\n next[n.nodeId] = {\n activeRuns: 0,\n activeRunIds: [],\n invalidated: computeInvalidatedFromMetadata(nodeMeta),\n };\n }\n return next;\n });\n setEdgeStatus({});\n setFallbackStarts({});\n errorRunsRef.current = {};\n }\n });\n\n const offWbRuntimeMetadataChanged = wb.on(\n \"runtimeMetadataChanged\",\n (event) => {\n const workbenchRuntimeState = wb.getRuntimeState() ?? { nodes: {} };\n setNodeStatus((prev) => {\n const next = { ...prev };\n const metadata = workbenchRuntimeState;\n let changed = false;\n\n // If nodeId is specified, only update that node; otherwise update all nodes\n const nodesToUpdate = event.nodeId\n ? wb.def.nodes.filter((n) => n.nodeId === event.nodeId)\n : wb.def.nodes;\n\n for (const n of nodesToUpdate) {\n const cur = next[n.nodeId];\n if (!cur) continue;\n const nodeMeta = metadata.nodes[n.nodeId];\n const newInvalidated = computeInvalidatedFromMetadata(nodeMeta);\n if (cur.invalidated !== newInvalidated) {\n next[n.nodeId] = { ...cur, invalidated: newInvalidated };\n changed = true;\n }\n }\n\n return changed ? next : prev;\n });\n }\n );\n\n wb.refreshValidation();\n\n return () => {\n offRunnerValue();\n offRunnerError();\n offRunnerInvalidate();\n offRunnerStats();\n offWbRegistryChanged();\n offWbGraphChanged();\n offWbGraphUiChangedForLog();\n offWbGraphUiChanged();\n offWbValidationChanged();\n offWbError();\n offWbGraphChangedForUpdate();\n offWbSetValidation();\n offWbSelectionChanged();\n offRunnerRegistry();\n offRunnerTransport();\n offFlowViewport();\n offWbRuntimeMetadataChanged();\n };\n }, [runner, wb]);\n\n const isRunning = useCallback(() => runner.isRunning(), [runner]);\n\n const setRunMode = useCallback(\n (mode: RunMode) => {\n if (mode === runMode) return;\n\n runner.setRunMode(mode);\n setRunModeState(mode);\n },\n [runMode, runner]\n );\n\n const runNodeAction = useCallback(\n async (nodeId: string) => {\n // Check if we're in auto mode or if node has autoRun policy\n const nodeHasAutoRun = wb.shouldNodeAutoRun(nodeId);\n const shouldUseTriggerExternal = runMode === \"auto\" || nodeHasAutoRun;\n\n if (shouldUseTriggerExternal) {\n // In auto mode or when node has autoRun, use triggerExternal with invalidate event\n await runner.triggerExternal(nodeId, { action: \"invalidate\" });\n } else {\n // In manual mode without autoRun, use computeNode\n await runner.computeNode(nodeId);\n }\n },\n [runner, wb, runMode]\n );\n\n const runFromHereAction = useCallback(\n async (nodeId: string) => {\n await runner.runFromHere(nodeId);\n },\n [runner]\n );\n\n const abortNodeAction = useCallback(\n (nodeId: string) => {\n runner.cancelNodeRuns([nodeId]);\n },\n [runner]\n );\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 selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n handlesMap,\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 runMode,\n setRunMode,\n runNode: runNodeAction,\n runFromHere: runFromHereAction,\n abortNode: abortNodeAction,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n uiVersion,\n registryVersion,\n overrides,\n getNodeDisplayName,\n setNodeName,\n }),\n [\n wb,\n runner,\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 handlesMap,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n runMode,\n setRunMode,\n runNodeAction,\n runFromHereAction,\n abortNodeAction,\n runAutoLayout,\n wb,\n runner,\n uiVersion,\n registryVersion,\n overrides,\n getNodeDisplayName,\n setNodeName,\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 from \"react\";\nimport { StopIcon, PlayIcon, FastForwardIcon } from \"@phosphor-icons/react\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function DefaultNodeHeader({\n id,\n typeId,\n validation,\n right,\n showId,\n}: {\n id: string;\n typeId?: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n}) {\n const ctx = useWorkbenchContext();\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Use getNodeDisplayName if typeId is provided, otherwise use title prop\n const displayName = typeId ? ctx.getNodeDisplayName(id) : id;\n const effectiveTypeId = typeId ?? id;\n\n // Get the default display name (without custom name) for comparison\n const getDefaultDisplayName = React.useCallback((): string => {\n if (!typeId) return id;\n const node = ctx.wb.def.nodes.find((n) => n.nodeId === id);\n if (!node) return id;\n const desc = ctx.wb.registry.nodes.get(node.typeId);\n return desc?.displayName || node.typeId;\n }, [ctx, id, typeId]);\n\n const handleDoubleClick = React.useCallback(\n (e: React.MouseEvent) => {\n // Only allow editing if typeId is provided (enables renaming)\n if (!typeId) return;\n e.stopPropagation();\n setIsEditing(true);\n setEditValue(displayName);\n },\n [typeId, displayName]\n );\n\n const handleSave = React.useCallback(() => {\n if (!typeId) return;\n const trimmed = editValue.trim();\n const defaultDisplayName = getDefaultDisplayName();\n // If the trimmed value matches the default display name or typeId, clear the custom name\n ctx.setNodeName(\n id,\n trimmed === defaultDisplayName || trimmed === effectiveTypeId\n ? undefined\n : trimmed\n );\n setIsEditing(false);\n }, [ctx, id, editValue, getDefaultDisplayName, effectiveTypeId, typeId]);\n\n const handleCancel = React.useCallback(() => {\n setIsEditing(false);\n setEditValue(displayName);\n }, [displayName]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n handleSave();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n handleCancel();\n }\n },\n [handleSave, handleCancel]\n );\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\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 {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"flex-1 h-full text-sm bg-transparent border border-blue-500 rounded px-1 outline-none wb-nodrag\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n />\n ) : (\n <strong\n className={`react-flow__node-title flex-1 h-full text-sm select-none truncate ${\n typeId ? \"cursor-text\" : \"\"\n }`}\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n onDoubleClick={handleDoubleClick}\n title={typeId ? \"Double-click to rename\" : undefined}\n >\n {displayName}\n </strong>\n )}\n <div className=\"flex items-center gap-1\">\n {/* Run node button shows in both manual and auto mode */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n void ctx.runNode(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-green-600 dark:hover:text-green-400 transition-colors\"\n title=\"Run node\"\n >\n <PlayIcon size={10} weight=\"fill\" />\n </button>\n {ctx.runMode === \"manual\" && (\n <>\n <button\n onClick={(e) => {\n e.stopPropagation();\n void ctx.runFromHere(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors\"\n title=\"Run from here\"\n >\n <FastForwardIcon size={10} weight=\"fill\" />\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n ctx.abortNode(id);\n }}\n className=\"w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors\"\n title=\"Abort node\"\n >\n <StopIcon size={10} weight=\"fill\" />\n </button>\n </>\n )}\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","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={`${labelClassName} ${\n 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 { type NodeProps, type Node } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport NodeHandles from \"./NodeHandles\";\nimport { resolveOutputDisplay, prettyHandle } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { getHandleClassName, type RFNode } from \"./mapping\";\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<RFNode>, \"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 data-handle-id={handleId}\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, { useRef } from \"react\";\nimport { type NodeProps, NodeResizer } from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { getNodeBorderClassNames, type RFNode } from \"./mapping\";\nimport { DefaultNodeHeader } from \"./DefaultNodeHeader\";\nimport { DefaultNodeContent } from \"./DefaultNodeContent\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<RFNode>) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const { typeId } = data;\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 ref={nodeRef}\n className={cx(\n \"rounded-lg bg-white/50 !dark:bg-stone-900 w-full h-full relative\",\n containerBorder\n )}\n >\n <NodeResizer\n isVisible={selected}\n minWidth={data.initialWidth}\n minHeight={data.initialHeight}\n />\n <DefaultNodeHeader\n id={id}\n typeId={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n","import React from \"react\";\nimport { BaseEdge, EdgeProps, getBezierPath } from \"@xyflow/react\";\nimport type { RFEdge } from \"./mapping\";\n\nexport const DefaultEdge = React.memo(function DefaultEdge({\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n style,\n markerEnd,\n data,\n}: EdgeProps<RFEdge>) {\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n return (\n <BaseEdge id={id} path={edgePath} style={style} markerEnd={markerEnd} />\n );\n});\n","import type { Registry } from \"@bian-womp/spark-graph\";\nimport type { RuntimeHistoryInfo } from \"@bian-womp/spark-protocol\";\nimport type { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport type { IGraphRunner } from \"../../runtime/IGraphRunner\";\nimport type {\n NodeContextMenuHandlers,\n SelectionContextMenuHandlers,\n DefaultContextMenuHandlers,\n} from \"./ContextMenuHandlers\";\nimport type { CopiedGraphData } from \"../../core/InMemoryWorkbench\";\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 getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void,\n runNode?: (nodeId: string) => Promise<void>,\n runFromHere?: (nodeId: string) => Promise<void>\n): NodeContextMenuHandlers {\n return {\n onDelete: () => {\n wb.removeNode(nodeId, { commit: true });\n onClose();\n },\n onDuplicate: async () => {\n wb.duplicateNodeWithEdges(nodeId, runner, {\n commit: true,\n reason: \"duplicate-node-with-edges\",\n });\n onClose();\n },\n onRunNode: runNode\n ? async () => {\n try {\n await runNode(nodeId);\n } catch {}\n onClose();\n }\n : undefined,\n onRunFromHere: runFromHere\n ? async () => {\n try {\n await runFromHere(nodeId);\n } catch {}\n onClose();\n }\n : undefined,\n onBake: async (handleId: string) => {\n const nodePosition = wb.getPositions()[nodeId] || { x: 0, y: 0 };\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n await wb.bake(registry, runner, raw, typeId || \"\", nodePosition, {\n commit: true,\n reason: \"bake\",\n });\n onClose();\n },\n onCopy: () => {\n const copyHandler = createNodeCopyHandler(\n wb,\n runner,\n nodeId,\n getDefaultNodeSize,\n onCopyResult\n );\n copyHandler();\n onClose();\n },\n onCopyId: async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n },\n onClose,\n };\n}\n\n/**\n * Creates a copy handler that copies the current selection and optionally stores the result.\n */\nexport function createCopyHandler(\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void\n): () => void {\n return () => {\n const getNodeSize = getDefaultNodeSize\n ? (nodeId: string, typeId: string) => getDefaultNodeSize(typeId)\n : undefined;\n const data = wb.copySelection(runner, getNodeSize);\n if (onCopyResult) {\n onCopyResult(data);\n }\n };\n}\n\n/**\n * Creates a copy handler for a single node (temporarily selects it, copies, then restores selection).\n */\nexport function createNodeCopyHandler(\n wb: InMemoryWorkbench,\n runner: IGraphRunner,\n nodeId: string,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void\n): () => void {\n return () => {\n // Select the node first, then copy\n const currentSelection = wb.getSelection();\n wb.setSelection({ nodes: [nodeId], edges: [] });\n const getNodeSize = getDefaultNodeSize\n ? (nodeId: string, typeId: string) => getDefaultNodeSize(typeId)\n : undefined;\n const data = wb.copySelection(runner, getNodeSize);\n // Restore original selection\n wb.setSelection(currentSelection);\n if (onCopyResult) {\n onCopyResult(data);\n }\n };\n}\n\n/**\n * Creates base selection context menu handlers.\n */\nexport function createSelectionContextMenuHandlers(\n wb: InMemoryWorkbench,\n onClose: () => void,\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined,\n onCopyResult?: (data: CopiedGraphData | null) => void,\n runner?: IGraphRunner\n): SelectionContextMenuHandlers {\n const onDuplicate = runner\n ? () => {\n wb.duplicateSelection(runner, {\n commit: true,\n reason: \"duplicate-selection\",\n });\n onClose();\n }\n : undefined;\n\n return {\n onCopy: runner\n ? createCopyHandler(wb, runner, getDefaultNodeSize, onCopyResult)\n : () => {\n // No-op if runner not available\n onClose();\n },\n onDelete: () => {\n wb.deleteSelection({ commit: true, reason: \"delete-selection\" });\n onClose();\n },\n onDuplicate,\n onClose,\n };\n}\n\n/**\n * Creates base default context menu handlers.\n */\nexport function createDefaultContextMenuHandlers(\n onAddNode: (\n typeId: string,\n opts: { position: { x: number; y: number } }\n ) => void,\n onClose: () => void,\n onPaste?: (position: { x: number; y: number }) => void,\n runner?: IGraphRunner,\n getCopiedData?: () => CopiedGraphData | null,\n clearCopiedData?: () => void,\n history?: RuntimeHistoryInfo | undefined,\n wb?: InMemoryWorkbench\n): DefaultContextMenuHandlers {\n // Wrap paste handler to clear storage after paste\n const wrappedOnPaste =\n onPaste && getCopiedData && clearCopiedData\n ? (position: { x: number; y: number }) => {\n onPaste(position);\n clearCopiedData();\n }\n : onPaste;\n\n const hasPasteData = getCopiedData ? () => !!getCopiedData() : undefined;\n const canUndo = history ? history.undoCount > 0 : undefined;\n const canRedo = history ? history.redoCount > 0 : undefined;\n\n const onSelectAll = wb\n ? () => {\n const allNodeIds = wb.def.nodes.map((n) => n.nodeId);\n const allEdgeIds = wb.def.edges.map((e) => e.id);\n wb.setSelection(\n { nodes: allNodeIds, edges: allEdgeIds },\n { commit: true, reason: \"select-all\" }\n );\n onClose();\n }\n : undefined;\n\n return {\n onAddNode,\n onPaste: wrappedOnPaste,\n hasPasteData,\n onUndo: runner ? () => runner.undo().then(() => onClose()) : undefined,\n onRedo: runner ? () => runner.redo().then(() => onClose()) : undefined,\n onSelectAll,\n canUndo,\n canRedo,\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 node = wb.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, { 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 {\n isInputPrivate,\n getInputTypeId,\n getInputDeclaredTypes,\n} 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\";\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 wb,\n registryVersion,\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 handlesMap,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = wb.def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = wb.def.edges.find((e) => e.id === selectedEdgeId);\n\n // Use precomputed handles map from context\n const effectiveHandles = selectedNode\n ? handlesMap[selectedNode.nodeId] ?? {\n inputs: {},\n outputs: {},\n inputDefaults: {},\n }\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 ? {\n ...effectiveHandles.inputDefaults,\n ...inputDefaultsMap[selectedNodeId],\n }\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, wb.registry, registryVersion, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\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 select-none`}\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(wb.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 declaredTypes = getInputDeclaredTypes(\n effectiveHandles.inputs,\n h\n );\n const typeLabel = Array.isArray(declaredTypes)\n ? declaredTypes.join(\" | \")\n : typeId ?? \"\";\n const isLinked = wb.def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const inbound = new Set(\n wb.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 {typeLabel}\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 select-text\"\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 {wb.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 select-text\"\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\";\n\nexport interface ContextMenuButtonProps {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n shortcut?: string;\n}\n\n// Helper to format shortcut for current platform\nfunction formatShortcut(shortcut: string): string {\n const isMac =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent.toLowerCase().includes(\"mac\");\n return shortcut.replace(/⌘\\/Ctrl/g, isMac ? \"⌘\" : \"Ctrl\");\n}\n\nexport function ContextMenuButton({\n label,\n onClick,\n disabled = false,\n shortcut,\n}: ContextMenuButtonProps) {\n return (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-between\"\n onClick={onClick}\n disabled={disabled}\n >\n <span>{label}</span>\n {shortcut && (\n <span className=\"text-gray-400 text-xs ml-4\">\n {formatShortcut(shortcut)}\n </span>\n )}\n </button>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport type { DefaultContextMenuProps } from \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n handlers,\n registry,\n nodeIds,\n keyboardShortcuts = {\n undo: \"⌘/Ctrl + Z\",\n redo: \"⌘/Ctrl + Shift + Z\",\n paste: \"⌘/Ctrl + V\",\n selectAll: \"⌘/Ctrl + A\",\n },\n}: DefaultContextMenuProps) {\n const rf = useReactFlow();\n const [query, setQuery] = useState(\"\");\n const [hasPasteData, setHasPasteData] = useState(false);\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? nodeIds.filter((id) => id.toLowerCase().includes(q))\n : nodeIds;\n\n const canUndo = handlers.canUndo ?? false;\n const canRedo = handlers.canRedo ?? false;\n useEffect(() => {\n if (!open) return;\n if (handlers.hasPasteData) {\n const result = handlers.hasPasteData();\n setHasPasteData(result);\n } else {\n setHasPasteData(false);\n }\n }, [open, handlers.hasPasteData]);\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 handlePaste = () => {\n if (!handlers.onPaste) return;\n const p = rf.screenToFlowPosition({ x: clientPos.x, y: clientPos.y });\n handlers.onPaste(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-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700 select-none\"\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 {hasPasteData && handlers.onPaste && (\n <ContextMenuButton\n label=\"Paste\"\n onClick={handlePaste}\n shortcut={keyboardShortcuts.paste}\n />\n )}\n {(handlers.onUndo || handlers.onRedo || handlers.onSelectAll) && (\n <>\n {hasPasteData && handlers.onPaste && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n {handlers.onSelectAll && (\n <ContextMenuButton\n label=\"Select All\"\n onClick={handlers.onSelectAll}\n shortcut={keyboardShortcuts.selectAll}\n />\n )}\n {handlers.onSelectAll && (handlers.onUndo || handlers.onRedo) && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n {handlers.onUndo && (\n <ContextMenuButton\n label=\"Undo\"\n onClick={handlers.onUndo}\n disabled={!canUndo}\n shortcut={keyboardShortcuts.undo}\n />\n )}\n {handlers.onRedo && (\n <ContextMenuButton\n label=\"Redo\"\n onClick={handlers.onRedo}\n disabled={!canRedo}\n shortcut={keyboardShortcuts.redo}\n />\n )}\n {(handlers.onUndo || handlers.onRedo) && (\n <div className=\"h-px bg-gray-200 my-1\" />\n )}\n </>\n )}\n {hasPasteData &&\n handlers.onPaste &&\n !handlers.onUndo &&\n !handlers.onRedo && <div className=\"h-px bg-gray-200 my-1\" />}\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 rounded px-2 py-1 text-sm outline-none focus:border-gray-400 select-text\"\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 \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n handlers,\n bakeableOutputs,\n runMode,\n wb,\n keyboardShortcuts = {\n copy: \"⌘/Ctrl + C\",\n duplicate: \"⌘/Ctrl + E\",\n delete: \"Delete\",\n },\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 // Determine if this is a start node (no inbound edges)\n const isStartNode = wb\n ? !wb.def.edges.some((e) => e.target.nodeId === nodeId)\n : false;\n\n // Check if node has outbound edges (required for \"Run workflow\" / \"Run from here\")\n const hasOutboundEdges = wb\n ? wb.def.edges.some((e) => e.source.nodeId === nodeId)\n : false;\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 select-none\"\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 <ContextMenuButton\n label=\"Delete\"\n onClick={handlers.onDelete}\n shortcut={keyboardShortcuts.delete}\n />\n <ContextMenuButton\n label=\"Duplicate\"\n onClick={handlers.onDuplicate}\n shortcut={keyboardShortcuts.duplicate}\n />\n {/* Run node is always visible (works in both manual and auto mode via triggerExternal) */}\n {handlers.onRunNode && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunNode}\n >\n Run node\n </button>\n )}\n {runMode === \"manual\" && handlers.onRunFromHere && hasOutboundEdges && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handlers.onRunFromHere}\n >\n {isStartNode ? \"Run workflow\" : \"Run from here\"}\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n <ContextMenuButton\n label=\"Copy\"\n onClick={handlers.onCopy}\n shortcut={keyboardShortcuts.copy}\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 {bakeableOutputs.length > 0 && (\n <>\n <div className=\"h-px bg-gray-200 my-1\" />\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 </>\n )}\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport type { SelectionContextMenuProps } from \"./ContextMenuHandlers\";\nimport { ContextMenuButton } from \"./ContextMenuButton\";\n\nexport function SelectionContextMenu({\n open,\n clientPos,\n handlers,\n keyboardShortcuts = {\n copy: \"⌘/Ctrl + C\",\n duplicate: \"⌘/Ctrl + E\",\n delete: \"Delete\",\n },\n}: SelectionContextMenuProps) {\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 useEffect(() => {\n if (open) ref.current?.focus();\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;\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) - 100\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 select-none\"\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\">Selection</div>\n <ContextMenuButton\n label=\"Copy\"\n onClick={handlers.onCopy}\n shortcut={keyboardShortcuts.copy}\n />\n {handlers.onDuplicate && (\n <ContextMenuButton\n label=\"Duplicate\"\n onClick={handlers.onDuplicate}\n shortcut={keyboardShortcuts.duplicate}\n />\n )}\n <ContextMenuButton\n label=\"Delete\"\n onClick={handlers.onDelete}\n shortcut={keyboardShortcuts.delete}\n />\n </div>\n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\n\ninterface KeyboardShortcutToastProps {\n message: string;\n duration?: number;\n onClose: () => void;\n}\n\nexport function KeyboardShortcutToast({\n message,\n duration = 1000,\n onClose,\n}: KeyboardShortcutToastProps) {\n const [isVisible, setIsVisible] = useState(true);\n const onCloseRef = useRef(onClose);\n const fadeOutTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Keep onClose ref up to date\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsVisible(false);\n // Wait for fade-out animation before calling onClose\n fadeOutTimerRef.current = setTimeout(() => {\n onCloseRef.current();\n }, 300);\n }, duration);\n\n return () => {\n clearTimeout(timer);\n if (fadeOutTimerRef.current) {\n clearTimeout(fadeOutTimerRef.current);\n }\n };\n }, [duration]);\n\n return (\n <div\n className={`fixed top-4 left-1/2 -translate-x-1/2 z-[2000] pointer-events-none transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"bg-white border border-gray-300 rounded-lg shadow-lg px-2 py-1 text-sm text-gray-700 font-medium whitespace-nowrap\">\n {message}\n </div>\n </div>\n );\n}\n\n// Hook to manage toast state\nexport function useKeyboardShortcutToast() {\n const [toast, setToast] = useState<{ message: string; id: number } | null>(\n null\n );\n\n const showToast = (message: string) => {\n const id = Date.now();\n setToast({ message, id });\n };\n\n const hideToast = () => {\n setToast(null);\n };\n\n return { toast, showToast, hideToast };\n}\n","import React, { useMemo, useRef, useEffect, useState } from \"react\";\nimport type { ReactFlowInstance, Node, Edge } from \"@xyflow/react\";\n\nexport const SelectionBoundOverlay: React.FC<{\n selection: { nodes: string[]; edges: string[] };\n rfInstance: ReactFlowInstance<Node, Edge> | null;\n viewportTick: number;\n}> = ({ selection, rfInstance, viewportTick }) => {\n const overlayRef = useRef<HTMLDivElement>(null);\n const [parentRect, setParentRect] = useState<DOMRect | null>(null);\n\n useEffect(() => {\n if (!overlayRef.current) return;\n const parent = overlayRef.current.parentElement;\n if (!parent) return;\n\n const updateRect = () => {\n setParentRect(parent.getBoundingClientRect());\n };\n\n updateRect();\n const resizeObserver = new ResizeObserver(updateRect);\n resizeObserver.observe(parent);\n\n const scrollHandler = () => updateRect();\n window.addEventListener(\"scroll\", scrollHandler, true);\n\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener(\"scroll\", scrollHandler, true);\n };\n }, [viewportTick]);\n\n const selectionBounds = useMemo(() => {\n if (\n typeof document === \"undefined\" ||\n !rfInstance ||\n !parentRect ||\n selection.nodes.length < 2\n ) {\n return null;\n }\n\n let bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null = null;\n\n for (const nodeId of selection.nodes) {\n const el = document.querySelector<HTMLElement>(\n `.react-flow__node[data-id=\"${nodeId}\"]`\n );\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n const relativeLeft = rect.left - parentRect.left;\n const relativeTop = rect.top - parentRect.top;\n const relativeRight = rect.right - parentRect.left;\n const relativeBottom = rect.bottom - parentRect.top;\n\n if (!bounds) {\n bounds = {\n left: relativeLeft,\n top: relativeTop,\n right: relativeRight,\n bottom: relativeBottom,\n };\n } else {\n bounds.left = Math.min(bounds.left, relativeLeft);\n bounds.top = Math.min(bounds.top, relativeTop);\n bounds.right = Math.max(bounds.right, relativeRight);\n bounds.bottom = Math.max(bounds.bottom, relativeBottom);\n }\n }\n\n return bounds;\n }, [selection.nodes, rfInstance, viewportTick, parentRect]);\n\n if (!selectionBounds || selection.nodes.length < 2) {\n return <div ref={overlayRef} style={{ display: \"none\" }} />;\n }\n\n const { left, top, right, bottom } = selectionBounds;\n const width = right - left;\n const height = bottom - top;\n\n return (\n <div\n ref={overlayRef}\n style={{\n position: \"absolute\",\n left: `${left}px`,\n top: `${top}px`,\n width: `${width}px`,\n height: `${height}px`,\n border: \"1px dashed #0ea5e9\",\n pointerEvents: \"none\",\n zIndex: 4,\n boxSizing: \"border-box\",\n }}\n />\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 ReactFlowInstance,\n Node,\n Edge,\n type ReactFlowProps,\n} from \"@xyflow/react\";\nimport lod from \"lodash\";\nimport type { Viewport } from \"@bian-womp/spark-protocol\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultEdge } from \"./DefaultEdge\";\nimport { DefaultContextMenu } from \"./context-menu/DefaultContextMenu\";\nimport { NodeContextMenu } from \"./context-menu/NodeContextMenu\";\nimport { SelectionContextMenu } from \"./context-menu/SelectionContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n createNodeContextMenuHandlers,\n createSelectionContextMenuHandlers,\n createDefaultContextMenuHandlers,\n getBakeableOutputs,\n} from \"./context-menu/ContextMenuHelpers\";\nimport type { CopiedGraphData } from \"../core/InMemoryWorkbench\";\nimport type { RuntimeHistoryInfo } from \"@bian-womp/spark-protocol\";\nimport {\n KeyboardShortcutToast,\n useKeyboardShortcutToast,\n} from \"./KeyboardShortcutToast\";\nimport { SelectionBoundOverlay } from \"./SelectionBoundOverlay\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n setViewport: (viewport: Viewport) => void;\n};\n\nexport interface WorkbenchCanvasProps {\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 reactFlowProps?: Partial<\n Omit<\n ReactFlowProps<Node, Edge>,\n | \"nodes\"\n | \"edges\"\n | \"nodeTypes\"\n | \"edgeTypes\"\n | \"connectionLineComponent\"\n | \"onInit\"\n | \"onConnect\"\n | \"onEdgesChange\"\n | \"onEdgesDelete\"\n | \"onNodesDelete\"\n | \"onNodesChange\"\n | \"onMoveEnd\"\n >\n > & {\n onInit?: (instance: ReactFlowInstance<Node, Edge>) => void;\n };\n}\n\nexport const WorkbenchCanvasComponent = React.forwardRef<\n WorkbenchCanvasHandle,\n WorkbenchCanvasProps\n>((props, ref) => {\n const {\n showValues,\n toString,\n toElement,\n getDefaultNodeSize,\n reactFlowProps,\n } = props;\n const {\n wb,\n handlesMap,\n inputsMap,\n inputDefaultsMap,\n outputsMap,\n outputTypesMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n uiVersion,\n registryVersion,\n runner,\n overrides,\n runNode,\n runFromHere,\n runMode,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n const [historyState, setHistoryState] = useState<\n RuntimeHistoryInfo | undefined\n >(wb.getHistory());\n\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\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 measured: n.measured,\n data: n.data && {\n typeId: n.data.typeId,\n handles: n.data.handles,\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 custom: n.data.custom,\n },\n });\n return lod.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 data: e.data && {\n edgeTypeId: e.data.edgeTypeId,\n isRunning: e.data.isRunning,\n hasError: e.data.hasError,\n isInvalid: e.data.isInvalid,\n isMissing: e.data.isMissing,\n custom: e.data.custom,\n },\n });\n return lod.isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<ReactFlowInstance<Node, Edge> | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(\n ref,\n () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView();\n } catch (err) {\n console.warn(\"Failed to fit view\", err);\n }\n },\n setViewport: (viewport: Viewport) => {\n if (rfInstanceRef.current) {\n rfInstanceRef.current.setViewport(lod.clone(viewport));\n }\n },\n }),\n []\n );\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const ui = useMemo(() => wb.getUI(), [wb, uiVersion]);\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 allNodeRenderers = ui.getAllNodeRenderers();\n for (const typeId of Object.keys(allNodeRenderers)) {\n custom.set(typeId, allNodeRenderers[typeId]);\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 // Include registryVersion to recompute when registry enums/types change\n }, [wb, wb.registry, registryVersion, ui, uiVersion]);\n\n const edgeTypes = useMemo(() => {\n // Use default edge renderer override if registered, otherwise use DefaultEdge\n const customEdgeRenderer = ui.getEdgeRenderer();\n return { default: customEdgeRenderer || DefaultEdge };\n }, [uiVersion, ui]);\n\n // Track selection state to prevent unnecessary re-renders\n const [selection, setSelection] = useState(() => wb.getSelection());\n useEffect(() => {\n const off = wb.on(\"selectionChanged\", (sel) => {\n setSelection({ nodes: sel.nodes, edges: sel.edges });\n });\n return () => off();\n }, [wb]);\n\n const rfData = useMemo(() => {\n const out = toReactFlow(\n wb.def,\n wb.getPositions(),\n wb.getSizes(),\n wb.registry,\n {\n showValues,\n inputs: inputsMap,\n inputDefaults: inputDefaultsMap,\n outputs: outputsMap,\n handles: handlesMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(selection.nodes),\n selectedEdgeIds: new Set(selection.edges),\n getDefaultNodeSize,\n ui,\n customData: wb.getCustomData(),\n }\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 inputDefaultsMap,\n outputsMap,\n handlesMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n selection,\n ui,\n getDefaultNodeSize,\n wb,\n uiVersion,\n ]);\n\n // const throttled = useThrottledValue(rfData, 100);\n\n type MenuState =\n | null\n | ({ type: \"default\" } & { menuPos: { x: number; y: number } })\n | ({ type: \"selection\" } & { menuPos: { x: number; y: number } })\n | ({ type: \"node\" } & {\n menuPos: { x: number; y: number };\n nodeId: string;\n });\n\n const [menuState, setMenuState] = useState<MenuState>(null);\n\n // Compute the rectangular screen-space bounds of the current selection\n const getSelectionScreenBounds = (): {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null => {\n if (typeof document === \"undefined\") return null;\n const selection = wb.getSelection();\n if (!selection.nodes.length) return null;\n\n let bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n } | null = null;\n\n for (const nodeId of selection.nodes) {\n const el = document.querySelector<HTMLElement>(\n `.react-flow__node[data-id=\"${nodeId}\"]`\n );\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n if (!bounds) {\n bounds = {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n };\n } else {\n bounds.left = Math.min(bounds.left, rect.left);\n bounds.top = Math.min(bounds.top, rect.top);\n bounds.right = Math.max(bounds.right, rect.right);\n bounds.bottom = Math.max(bounds.bottom, rect.bottom);\n }\n }\n\n return bounds;\n };\n\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n\n const selection = wb.getSelection();\n const isSingleNodeSelected = selection.nodes.length === 1;\n const hasMultipleNodesSelected = selection.nodes.length > 1;\n\n // Determine if right-clicked over a node by hit-testing\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 if (!nodeId) return;\n const isSelected = selection.nodes.includes(nodeId);\n\n if (isSelected && !isSingleNodeSelected) {\n // Right-clicked on a node that's part of multi-selection - show selection menu\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n } else {\n // Right-clicked on a non-selected node - show node menu\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n }\n }\n\n // Check if right-clicked on a selected edge\n const edgeTarget = (e.target as HTMLElement)?.closest(\".react-flow__edge\");\n if (edgeTarget) {\n const edgeId = edgeTarget.getAttribute(\"data-id\");\n const isSelected = edgeId && selection.edges.includes(edgeId);\n\n if (isSelected && isSingleNodeSelected) {\n // Right-clicked on an edge, but only one node is selected - show node menu\n const nodeId = selection.nodes[0];\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n } else if (isSelected) {\n // Right-clicked on a selected edge with multiple nodes - show selection menu\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n }\n }\n\n // Check if the cursor is inside the rectangular bounds of the current selection\n // (for multi-selection when right-clicking on empty space within selection bounds)\n const selectionBounds = getSelectionScreenBounds();\n if (selectionBounds && hasMultipleNodesSelected) {\n const { left, top, right, bottom } = selectionBounds;\n if (\n e.clientX >= left &&\n e.clientX <= right &&\n e.clientY >= top &&\n e.clientY <= bottom\n ) {\n // If only one node is selected (even with edges), show node menu for empty space clicks\n if (isSingleNodeSelected) {\n const nodeId = selection.nodes[0];\n setMenuState({\n type: \"node\",\n menuPos: { x: e.clientX, y: e.clientY },\n nodeId,\n });\n return;\n }\n\n setMenuState({\n type: \"selection\",\n menuPos: { x: e.clientX, y: e.clientY },\n });\n return;\n }\n }\n\n // Right-clicked on empty space with no selection - show default menu\n setMenuState({\n type: \"default\",\n menuPos: { x: e.clientX, y: e.clientY },\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(\n { typeId },\n { inputs: opts.inputs, position: opts.position, commit: true }\n ),\n [wb]\n );\n\n const onCloseMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n const onCloseSelectionMenu = useCallback(() => {\n setMenuState(null);\n }, []);\n\n useEffect(() => {\n const off = wb.on(\"historyChanged\", (event) => {\n setHistoryState(event.history);\n });\n return () => off();\n }, [wb]);\n\n const nodeIds = useMemo(\n () => Array.from(wb.registry.nodes.keys()),\n [wb.registry, registryVersion]\n );\n\n const defaultContextMenuHandlers = useMemo(() => {\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createDefaultContextMenuHandlers(\n addNodeAt,\n onCloseMenu,\n (position: { x: number; y: number }) => {\n const data = storage.get();\n if (!data) return;\n wb.pasteCopiedData(data, position, { commit: true, reason: \"paste\" });\n onCloseMenu();\n },\n runner,\n () => storage.get(),\n () => storage.set(null),\n historyState,\n wb\n );\n if (overrides?.getDefaultContextMenuHandlers) {\n return overrides.getDefaultContextMenuHandlers(wb, baseHandlers);\n }\n return baseHandlers;\n }, [addNodeAt, onCloseMenu, overrides, wb, runner, historyState]);\n\n const selectionContextMenuHandlers = useMemo(() => {\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createSelectionContextMenuHandlers(\n wb,\n onCloseSelectionMenu,\n overrides?.getDefaultNodeSize,\n (data) => {\n storage.set(data);\n },\n runner\n );\n if (overrides?.getSelectionContextMenuHandlers) {\n const selection = wb.getSelection();\n return overrides.getSelectionContextMenuHandlers(\n wb,\n selection,\n baseHandlers,\n { getDefaultNodeSize: overrides.getDefaultNodeSize }\n );\n }\n return baseHandlers;\n }, [wb, runner, overrides, onCloseSelectionMenu]);\n\n const nodeContextMenuHandlers = useMemo(() => {\n if (menuState?.type !== \"node\") return null;\n const nodeAtMenu = menuState.nodeId;\n // Get storage from override or use workbench's internal storage\n const storage = overrides?.getCopiedDataStorage\n ? overrides.getCopiedDataStorage()\n : {\n get: () => wb.getCopiedData(),\n set: (data: CopiedGraphData | null) => wb.setCopiedData(data),\n };\n\n const baseHandlers = createNodeContextMenuHandlers(\n nodeAtMenu,\n wb,\n runner,\n wb.registry,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n overrides?.getDefaultNodeSize,\n (data) => {\n storage.set(data);\n },\n runNode,\n runFromHere\n );\n if (overrides?.getNodeContextMenuHandlers) {\n return overrides.getNodeContextMenuHandlers(wb, nodeAtMenu, baseHandlers);\n }\n return baseHandlers;\n }, [\n menuState,\n wb,\n runner,\n wb.registry,\n registryVersion,\n outputsMap,\n outputTypesMap,\n onCloseNodeMenu,\n overrides?.getDefaultNodeSize,\n overrides?.getNodeContextMenuHandlers,\n overrides?.getCopiedDataStorage,\n ]);\n\n const bakeableOutputs = useMemo(() => {\n if (menuState?.type !== \"node\") return [];\n return getBakeableOutputs(\n menuState.nodeId,\n wb,\n wb.registry,\n outputTypesMap\n );\n }, [menuState, wb, wb.registry, registryVersion, outputTypesMap]);\n\n // Keyboard shortcuts configuration\n const keyboardShortcutEnables = useMemo(\n () => ({\n undo: true,\n redo: true,\n copy: true,\n paste: true,\n duplicate: true,\n selectAll: true,\n ...(overrides?.enableKeyboardShortcuts ?? {}),\n }),\n [overrides?.enableKeyboardShortcuts]\n );\n const isShortcutEnabled = useCallback(\n (action: keyof typeof keyboardShortcutEnables) =>\n keyboardShortcutEnables[action] !== false,\n [keyboardShortcutEnables]\n );\n const hasEnabledKeyboardShortcuts = useMemo(\n () => Object.values(keyboardShortcutEnables).some(Boolean),\n [keyboardShortcutEnables]\n );\n const keyboardShortcuts = useMemo(\n () =>\n overrides?.keyboardShortcuts || {\n undo: \"⌘/Ctrl + Z\",\n redo: \"⌘/Ctrl + Shift + Z\",\n copy: \"⌘/Ctrl + C\",\n paste: \"⌘/Ctrl + V\",\n duplicate: \"⌘/Ctrl + E\",\n selectAll: \"⌘/Ctrl + A\",\n delete: \"Delete\",\n },\n [overrides?.keyboardShortcuts]\n );\n\n // Toast notification for keyboard shortcuts\n const { toast, showToast, hideToast } = useKeyboardShortcutToast();\n\n // Keyboard shortcut handler\n useEffect(() => {\n if (!hasEnabledKeyboardShortcuts) return;\n\n const handleKeyDown = async (e: KeyboardEvent) => {\n // Check if target is inside WorkbenchCanvas container\n const target = e.target as HTMLElement;\n if (\n !containerRef.current ||\n !(\n containerRef.current.contains(target) ||\n containerRef.current == target\n )\n ) {\n return;\n }\n\n // Ignore if typing in input/textarea\n if (\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable\n ) {\n return;\n }\n\n // Detect Mac platform using userAgent (navigator.platform is deprecated)\n const isMac =\n typeof navigator !== \"undefined\" &&\n navigator.userAgent.toLowerCase().includes(\"mac\");\n const modKey = isMac ? e.metaKey : e.ctrlKey;\n const key = e.key.toLowerCase();\n\n // Undo: Cmd/Ctrl + Z\n if (modKey && key === \"z\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"undo\")) return;\n e.preventDefault();\n if (\n runner &&\n \"onUndo\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onUndo &&\n defaultContextMenuHandlers.canUndo\n ) {\n if (defaultContextMenuHandlers.canUndo) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Undo (${modKeyLabel} + Z)`);\n defaultContextMenuHandlers.onUndo();\n }\n }\n return;\n }\n\n // Redo: Cmd/Ctrl + Shift + Z\n if (modKey && e.shiftKey && key === \"z\" && !e.altKey) {\n if (!isShortcutEnabled(\"redo\")) return;\n e.preventDefault();\n if (\n runner &&\n \"onRedo\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onRedo &&\n defaultContextMenuHandlers.canRedo\n ) {\n if (defaultContextMenuHandlers.canRedo) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Redo (${modKeyLabel} + Shift + Z)`);\n defaultContextMenuHandlers.onRedo();\n }\n }\n return;\n }\n\n // Copy: Cmd/Ctrl + C\n if (modKey && key === \"c\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"copy\")) return;\n const selection = wb.getSelection();\n if (selection.nodes.length > 0 || selection.edges.length > 0) {\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Copy (${modKeyLabel} + C)`);\n // If single node selected, use node context menu handler; otherwise use selection handler\n if (selection.nodes.length === 1 && nodeContextMenuHandlers?.onCopy) {\n nodeContextMenuHandlers.onCopy();\n } else if (selectionContextMenuHandlers.onCopy) {\n selectionContextMenuHandlers.onCopy();\n }\n }\n return;\n }\n\n // Duplicate: Cmd/Ctrl + E\n if (modKey && key === \"e\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"duplicate\")) return;\n const selection = wb.getSelection();\n if (\n selection.nodes.length === 1 &&\n nodeContextMenuHandlers?.onDuplicate\n ) {\n // Single node selected - use node context menu handler\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Duplicate (${modKeyLabel} + E)`);\n nodeContextMenuHandlers.onDuplicate();\n } else if (\n selection.nodes.length > 1 &&\n selectionContextMenuHandlers.onDuplicate\n ) {\n // Multiple nodes selected - use selection context menu handler\n e.preventDefault();\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Duplicate (${modKeyLabel} + E)`);\n selectionContextMenuHandlers.onDuplicate();\n }\n return;\n }\n\n // Paste: Cmd/Ctrl + V\n if (modKey && key === \"v\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"paste\")) return;\n e.preventDefault();\n if (\n \"hasPasteData\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.hasPasteData &&\n defaultContextMenuHandlers.hasPasteData() &&\n \"onPaste\" in defaultContextMenuHandlers &&\n defaultContextMenuHandlers.onPaste\n ) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Paste (${modKeyLabel} + V)`);\n const center = rfInstanceRef.current?.screenToFlowPosition({\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n }) || { x: 0, y: 0 };\n defaultContextMenuHandlers.onPaste(center);\n }\n return;\n }\n\n // Select All: Cmd/Ctrl + A\n if (modKey && key === \"a\" && !e.shiftKey && !e.altKey) {\n if (!isShortcutEnabled(\"selectAll\")) return;\n e.preventDefault();\n if (defaultContextMenuHandlers.onSelectAll) {\n const modKeyLabel = isMac ? \"⌘\" : \"Ctrl\";\n showToast(`Select All (${modKeyLabel} + A)`);\n defaultContextMenuHandlers.onSelectAll();\n }\n return;\n }\n\n // Note: Delete/Backspace is handled by ReactFlow's deleteKeyCode prop\n // which triggers onNodesDelete/onEdgesDelete, so we don't need to handle it here\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n hasEnabledKeyboardShortcuts,\n wb,\n runner,\n defaultContextMenuHandlers,\n selectionContextMenuHandlers,\n nodeContextMenuHandlers,\n rfInstanceRef,\n showToast,\n isShortcutEnabled,\n ]);\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 SelectionContextMenuRenderer,\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 SelectionContextMenuRenderer: ui.getSelectionContextMenuRenderer(),\n connectionLineRenderer: ui.getConnectionLineRenderer(),\n };\n }, [ui, uiVersion]);\n\n const [selectionOverlayTick, setSelectionOverlayTick] = useState(0);\n\n const onMove = useCallback(() => {\n setSelectionOverlayTick((t) => t + 1);\n }, []);\n\n const onMoveEnd = useCallback(() => {\n if (rfInstanceRef.current) {\n const viewport = rfInstanceRef.current.getViewport();\n const viewportData = lod.clone(viewport);\n wb.setViewport(viewportData);\n }\n }, [wb]);\n\n // Sync viewport when workbench fires graphUiChanged with viewport event\n useEffect(() => {\n const off = wb.on(\"graphUiChanged\", (event) => {\n if (\n event.change?.type === \"viewport\" &&\n rfInstanceRef.current &&\n event.init\n ) {\n const viewport = wb.getViewport();\n if (viewport) {\n rfInstanceRef.current.setViewport(lod.clone(viewport));\n }\n }\n });\n return () => off();\n }, [wb]);\n\n const { onInit: userOnInit, ...restReactFlowProps } = reactFlowProps || {};\n\n return (\n <div\n ref={containerRef}\n className=\"w-full h-full relative overflow-hidden\"\n tabIndex={0}\n onContextMenu={onContextMenu}\n >\n <ReactFlowProvider>\n <ReactFlow\n {...restReactFlowProps}\n nodes={rfData.nodes}\n edges={rfData.edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineComponent={connectionLineRenderer}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n const savedViewport = wb.getViewport();\n if (savedViewport) {\n inst.setViewport(lod.clone(savedViewport));\n }\n if (userOnInit) {\n userOnInit(inst);\n }\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onMove={onMove}\n onMoveEnd={onMoveEnd}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\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 {menuState?.type === \"default\" &&\n (DefaultContextMenuRenderer ? (\n <DefaultContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n handlers={defaultContextMenuHandlers}\n registry={wb.registry}\n nodeIds={nodeIds}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <DefaultContextMenu\n open={true}\n clientPos={menuState.menuPos}\n handlers={defaultContextMenuHandlers}\n registry={wb.registry}\n nodeIds={nodeIds}\n keyboardShortcuts={keyboardShortcuts}\n />\n ))}\n {menuState?.type === \"node\" &&\n nodeContextMenuHandlers &&\n (NodeContextMenuRenderer ? (\n <NodeContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n nodeId={menuState.nodeId}\n handlers={nodeContextMenuHandlers}\n bakeableOutputs={bakeableOutputs}\n runMode={runMode}\n wb={wb}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <NodeContextMenu\n open={true}\n clientPos={menuState.menuPos}\n nodeId={menuState.nodeId}\n handlers={nodeContextMenuHandlers}\n bakeableOutputs={bakeableOutputs}\n runMode={runMode}\n />\n ))}\n {menuState?.type === \"selection\" &&\n (SelectionContextMenuRenderer ? (\n <SelectionContextMenuRenderer\n open={true}\n clientPos={menuState.menuPos}\n handlers={selectionContextMenuHandlers}\n keyboardShortcuts={keyboardShortcuts}\n />\n ) : (\n <SelectionContextMenu\n open={true}\n clientPos={menuState.menuPos}\n handlers={selectionContextMenuHandlers}\n keyboardShortcuts={keyboardShortcuts}\n />\n ))}\n </ReactFlow>\n <SelectionBoundOverlay\n selection={selection}\n rfInstance={rfInstanceRef.current}\n viewportTick={selectionOverlayTick}\n />\n </ReactFlowProvider>\n {toast && (\n <KeyboardShortcutToast\n key={toast.id}\n message={toast.message}\n onClose={hideToast}\n />\n )}\n </div>\n );\n});\n\nexport const WorkbenchCanvas = WorkbenchCanvasComponent;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GraphDefinition, RunMode } 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 isTyped,\n unwrapTypeId,\n unwrapValue,\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 ListBulletsIcon,\n BugBeetleIcon,\n TreeStructureIcon,\n DownloadIcon,\n UploadIcon,\n CornersOutIcon,\n ImageIcon,\n RocketLaunchIcon,\n RocketIcon,\n} from \"@phosphor-icons/react\";\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 { downloadCanvasThumbnail } from \"./thumbnail-utils\";\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 autoScroll,\n onAutoScrollChange,\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 overrides,\n onInit,\n onChange,\n}: {\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => 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 onRunModeChange?: (mode: RunMode) => void;\n}) {\n const {\n wb,\n registryVersion,\n runner,\n selectedNodeId,\n handlesMap,\n runAutoLayout,\n runMode,\n setRunMode,\n isRunning,\n } = useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = wb.def.nodes.find((n) => n.nodeId === selectedNodeId);\n const effectiveHandles = selectedNode\n ? handlesMap[selectedNode.nodeId] ?? {\n inputs: {},\n outputs: {},\n inputDefaults: {},\n }\n : { inputs: {}, outputs: {}, inputDefaults: {} };\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\n const isGraphRunning = isRunning();\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 // For local backend, always allow control (transport state is \"local\")\n // For remote backends, require connection\n const canControl =\n transportStatus.state === \"connected\" ||\n transportStatus.state === \"local\" ||\n backendKind === \"local\"; // Always allow control for local backend\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-white border-none bg-green-500 flex items-center gap-1 cursor-default pointer-events-none\"\n title=\"Running\"\n >\n <RocketLaunchIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Running</span>\n </button>\n );\n }\n\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:text-gray-400 disabled:border-gray-300 disabled:opacity-50\"\n onClick={(evt) => {\n if (evt.shiftKey && !confirm(\"Invalidate and re-run graph?\")) return;\n\n try {\n runner.launch(wb.def, {\n runMode,\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={!canControl}\n title={\n !canControl\n ? \"Waiting for connection\"\n : `Start ${runMode === \"manual\" ? \"manual\" : \"auto\"} mode`\n }\n >\n <RocketIcon size={16} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n );\n }, [transportStatus, isGraphRunning, runner, runMode, wb, backendKind]);\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 canvasContainerRef = useRef<HTMLDivElement | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\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 runner.build(wb.def);\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\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 offGraphChanged = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.def;\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const offGraphUiChanged = wb.on(\"graphUiChanged\", (evt) => {\n if (!evt.commit) return;\n try {\n const cur = wb.def;\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n offGraphChanged();\n offGraphUiChanged();\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, 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 (registry) {\n wb.setRegistry(registry);\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.def);\n // Set initial inputs if provided\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map, { dry: true });\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [runner, wb, onExampleChange, runAutoLayout, examples, backendKind]\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 useEffect(() => {\n if (isGraphRunning) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n if (!wb.def.nodes || wb.def.nodes.length === 0) return;\n try {\n runner.launch(wb.def, { runMode });\n } catch {\n // ignore\n }\n }, [runMode, 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 = wb.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 wb.setInputs(selectedNodeId, { [handle]: undefined }, { commit: true });\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 wb.setInputs(selectedNodeId, { [handle]: value }, { commit: true });\n },\n [selectedNodeId, wb.def.edges, effectiveHandles, wb]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry: wb.registry,\n });\n }\n return baseSetInput;\n }, [\n overrides,\n baseSetInput,\n runner,\n selectedNodeId,\n wb.registry,\n registryVersion,\n ]);\n\n const baseToString = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n // Normalize typed wrapper\n if (isTyped(value)) {\n return baseToString(unwrapTypeId(value), unwrapValue(value));\n }\n const pre = preformatValueForDisplay(typeId, value, wb.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 = wb.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 [wb.registry, registryVersion]\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: wb.registry });\n return baseToString;\n }, [overrides, baseToString, wb.registry, registryVersion]);\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: wb.registry });\n return baseToElement;\n }, [overrides, baseToElement, wb.registry, registryVersion]);\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: {runMode === \"manual\" ? \"Manual\" : \"Auto\"}\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={runMode}\n onChange={async (e) => {\n const mode = e.target.value as RunMode;\n if (mode !== runMode) {\n await setRunMode(mode);\n }\n }}\n title=\"Select run mode\"\n >\n <option value=\"manual\">Manual</option>\n <option value=\"auto\">Auto</option>\n </select>\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 <button\n className=\"border border-gray-300 rounded p-1\"\n onClick={async () => {\n await downloadCanvasThumbnail(canvasContainerRef.current);\n }}\n title=\"Download Flow Thumbnail (SVG)\"\n >\n <ImageIcon 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\" ref={canvasContainerRef}>\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n reactFlowProps={{\n minZoom: 0.1,\n maxZoom: 5,\n }}\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 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 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 [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n\n const backendKindToUse = useMemo(() => {\n if (!backendOptions) return \"local\";\n return backendKind;\n }, [backendOptions, backendKind]);\n\n const runner = useMemo(() => {\n let newRunner: IGraphRunner;\n if (backendKindToUse === \"remote-http\" && backendOptions) {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(backend);\n } else if (backendKindToUse === \"remote-ws\" && backendOptions) {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n connectOptions: backendOptions?.connectOptions,\n onCustomEvent: backendOptions?.onCustomEvent,\n };\n newRunner = new RemoteGraphRunner(backend);\n } else {\n newRunner = new LocalGraphRunner();\n }\n return newRunner;\n }, [backendKindToUse, httpBaseUrl, wsUrl, backendOptions]);\n\n // Dispose runner when it changes or component unmounts\n useEffect(() => {\n return () => {\n try {\n runner.dispose();\n } catch (err) {\n console.warn(\"Error disposing runner:\", err);\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 }, [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 overrides={overrides}\n uiVersion={uiVersion}\n >\n <WorkbenchStudioCanvas\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n backendKind={backendKindToUse}\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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"}