@bian-womp/spark-workbench 0.2.25 → 0.2.26

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.cjs","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/hooks.ts","../../src/misc/value.ts","../../src/misc/constants.ts","../../src/misc/layout.ts","../../src/misc/mapping.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/NodeContextMenu.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["export type NodeRenderer = unknown; // bound by adapter (React component or CLI fn)\nexport type PortRenderer = unknown;\nexport type EdgeRenderer = unknown;\nexport type InspectorRenderer = unknown;\nexport type PaletteRenderer = unknown;\nexport type ToolbarRenderer = unknown;\nexport type ContextMenuRenderer = unknown;\nexport type MiniMapRenderer = unknown;\nexport type IconProvider = (nodeTypeId: string) => unknown;\n\nexport interface UIExtensionRegistry {\n registerNodeRenderer(nodeTypeId: string, renderer: NodeRenderer): this;\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined;\n\n registerPortRenderer(dataTypeId: string, renderer: PortRenderer): this;\n getPortRenderer(dataTypeId: string): PortRenderer | undefined;\n\n registerEdgeRenderer(typeId: string, renderer: EdgeRenderer): this;\n getEdgeRenderer(typeId: string): EdgeRenderer | undefined;\n\n setInspector(renderer: InspectorRenderer): this;\n getInspector(): InspectorRenderer | undefined;\n\n setPalette(renderer: PaletteRenderer): this;\n getPalette(): PaletteRenderer | undefined;\n\n setToolbar(renderer: ToolbarRenderer): this;\n getToolbar(): ToolbarRenderer | undefined;\n\n setContextMenu(renderer: ContextMenuRenderer): this;\n getContextMenu(): ContextMenuRenderer | undefined;\n\n setMiniMap(renderer: MiniMapRenderer): this;\n getMiniMap(): MiniMapRenderer | undefined;\n\n setIconProvider(provider: IconProvider): this;\n getIconProvider(): IconProvider | undefined;\n}\n\nexport class DefaultUIExtensionRegistry implements UIExtensionRegistry {\n private nodeRenderers = new Map<string, NodeRenderer>();\n private portRenderers = new Map<string, PortRenderer>();\n private edgeRenderers = new Map<string, EdgeRenderer>();\n private inspector?: InspectorRenderer;\n private palette?: PaletteRenderer;\n private toolbar?: ToolbarRenderer;\n private contextMenu?: ContextMenuRenderer;\n private miniMap?: MiniMapRenderer;\n private iconProvider?: IconProvider;\n\n registerNodeRenderer(nodeTypeId: string, renderer: NodeRenderer): this {\n this.nodeRenderers.set(nodeTypeId, renderer);\n return this;\n }\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined {\n return this.nodeRenderers.get(nodeTypeId);\n }\n\n registerPortRenderer(dataTypeId: string, renderer: PortRenderer): this {\n this.portRenderers.set(dataTypeId, renderer);\n return this;\n }\n getPortRenderer(dataTypeId: string): PortRenderer | undefined {\n return this.portRenderers.get(dataTypeId);\n }\n\n registerEdgeRenderer(typeId: string, renderer: EdgeRenderer): this {\n this.edgeRenderers.set(typeId, renderer);\n return this;\n }\n getEdgeRenderer(typeId: string): EdgeRenderer | undefined {\n return this.edgeRenderers.get(typeId);\n }\n\n setInspector(renderer: InspectorRenderer): this {\n this.inspector = renderer;\n return this;\n }\n getInspector(): InspectorRenderer | undefined {\n return this.inspector;\n }\n\n setPalette(renderer: PaletteRenderer): this {\n this.palette = renderer;\n return this;\n }\n getPalette(): PaletteRenderer | undefined {\n return this.palette;\n }\n\n setToolbar(renderer: ToolbarRenderer): this {\n this.toolbar = renderer;\n return this;\n }\n getToolbar(): ToolbarRenderer | undefined {\n return this.toolbar;\n }\n\n setContextMenu(renderer: ContextMenuRenderer): this {\n this.contextMenu = renderer;\n return this;\n }\n getContextMenu(): ContextMenuRenderer | undefined {\n return this.contextMenu;\n }\n\n setMiniMap(renderer: MiniMapRenderer): this {\n this.miniMap = renderer;\n return this;\n }\n getMiniMap(): MiniMapRenderer | undefined {\n return this.miniMap;\n }\n\n setIconProvider(provider: IconProvider): this {\n this.iconProvider = provider;\n return this;\n }\n getIconProvider(): IconProvider | undefined {\n return this.iconProvider;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n\n constructor(args: {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n }) {\n this.ui = args.ui;\n this.layout = args.layout;\n this.storage = args.storage;\n this.serializer = args.serializer;\n }\n\n abstract load(def: GraphDefinition): Promise<void>;\n abstract export(): GraphDefinition;\n abstract validate(): ValidationResult;\n abstract addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n params?: Record<string, unknown>;\n }\n ): string;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }\n ): string;\n abstract disconnect(edgeId: string): void;\n abstract updateParams(nodeId: string, params: Record<string, unknown>): void;\n\n abstract on<K extends WorkbenchEventName>(\n event: K,\n handler: (e: WorkbenchEventMap[K]) => void\n ): () => void;\n\n // Expose UI registry to adapters (React Flow, CLI) to allow overrides\n getUI(): UIExtensionRegistry {\n return this.ui;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder, Registry } from \"@bian-womp/spark-graph\";\nimport { AbstractWorkbench } from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\n\nexport class InMemoryWorkbench extends AbstractWorkbench {\n private def: GraphDefinition = { nodes: [], edges: [] };\n private positions: Record<string, { x: number; y: number }> = {};\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n private registry?: Registry;\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n async load(def: GraphDefinition): Promise<void> {\n this.def = { nodes: [...def.nodes], edges: [...def.edges] };\n if (this.layout) {\n const { positions } = await this.layout.layout(this.def);\n this.positions = positions;\n }\n this.emit(\"graphChanged\", { def: this.def });\n this.refreshValidation();\n }\n\n export(): GraphDefinition {\n return this.def;\n }\n\n refreshValidation(): void {\n this.emit(\"validationChanged\", this.validate());\n }\n\n validate(): ValidationResult {\n if (this.registry) {\n const builder = new GraphBuilder(this.registry);\n const report = builder.validate(this.def);\n return report;\n }\n const issues: ValidationResult[\"issues\"] = [];\n const nodeIds = new Set<string>();\n for (const n of this.def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n });\n } else nodeIds.add(n.nodeId);\n }\n const edgeIds = new Set<string>();\n for (const e of this.def.edges) {\n if (edgeIds.has(e.id)) {\n issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n });\n } else edgeIds.add(e.id);\n }\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n }\n ): string {\n const id = node.nodeId ?? this.generateId(\"n\");\n this.def.nodes.push({\n nodeId: id,\n typeId: node.typeId,\n params: node.params,\n });\n if (node.position) this.positions[id] = node.position;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"addNode\", nodeId: id },\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(nodeId: string): void {\n this.def.nodes = this.def.nodes.filter((n) => n.nodeId !== nodeId);\n this.def.edges = this.def.edges.filter(\n (e) => e.source.nodeId !== nodeId && e.target.nodeId !== nodeId\n );\n delete this.positions[nodeId];\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"removeNode\", nodeId },\n });\n this.refreshValidation();\n }\n\n connect(edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }): string {\n const id = edge.id ?? this.generateId(\"e\");\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 });\n this.refreshValidation();\n return id;\n }\n\n disconnect(edgeId: string): void {\n this.def.edges = this.def.edges.filter((e) => e.id !== edgeId);\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"disconnect\", edgeId },\n });\n this.emit(\"validationChanged\", this.validate());\n }\n\n updateEdgeType(edgeId: string, typeId: string | undefined): void {\n const e = this.def.edges.find((x) => x.id === edgeId);\n if (!e) return;\n if (!typeId) delete (e as any).typeId;\n else e.typeId = typeId as any;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateEdgeType\", edgeId, typeId },\n });\n this.refreshValidation();\n }\n\n updateParams(nodeId: string, params: Record<string, unknown>): void {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return;\n n.params = { ...(n.params ?? {}), ...params };\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateParams\", nodeId },\n });\n }\n\n // Position and selection APIs for React Flow bridge\n setPosition(nodeId: string, pos: { x: number; y: number }): void {\n this.positions[nodeId] = pos;\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNode\", nodeId, pos },\n });\n }\n\n setPositions(map: Record<string, { x: number; y: number }>): void {\n this.positions = { ...map };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNodes\" },\n });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSelection(sel: { nodes: string[]; edges: string[] }): void {\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"selection\" },\n });\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n on<K extends WorkbenchEventName>(\n event: K,\n handler: WorkbenchEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<WorkbenchEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends WorkbenchEventName>(\n event: K,\n payload: WorkbenchEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n private generateId(prefix: string): string {\n return `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n }\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { Serializer, Storage } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface CLIAdapterDeps {\n storage?: Storage;\n serializer?: Serializer;\n}\n\nexport class CLIWorkbench {\n constructor(\n private wb: InMemoryWorkbench,\n private deps: CLIAdapterDeps = {}\n ) {}\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n print(\n def?: GraphDefinition,\n options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }\n ) {\n const d = def ?? this.wb.export();\n const detail = !!options?.detail;\n const lines: string[] = [];\n lines.push(`Nodes (${d.nodes.length})`);\n for (const n of d.nodes) {\n if (!detail) {\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n } else {\n const reg = this.wb[\"registry\"];\n const desc = reg?.nodes?.get(n.typeId);\n const inputs = Object.entries(desc?.inputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const outputs = Object.entries(desc?.outputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const params = n.params ? JSON.stringify(n.params) : \"{}\";\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n lines.push(` inputs: ${inputs || \"-\"}`);\n lines.push(` outputs: ${outputs || \"-\"}`);\n lines.push(` params: ${params}`);\n const inVals = options?.values?.inputs?.[n.nodeId];\n const outVals = options?.values?.outputs?.[n.nodeId];\n if (inVals && Object.keys(inVals).length > 0)\n lines.push(` inputValues: ${JSON.stringify(inVals)}`);\n if (outVals && Object.keys(outVals).length > 0)\n lines.push(` outputValues: ${JSON.stringify(outVals)}`);\n }\n }\n lines.push(`Edges (${d.edges.length})`);\n for (const e of d.edges) {\n lines.push(\n ` - ${e.id}: ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle} (${e.typeId})`\n );\n }\n return lines.join(\"\\n\");\n }\n\n get actions() {\n return this.wb;\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport {\n IGraphRunner,\n RunnerEventName,\n type RunnerEventListener,\n EngineKind,\n ExecutionBackend,\n RunnerOptions,\n RunnerEventMap,\n} from \"./IGraphRunner\";\n\nexport abstract class AbstractGraphRunner implements IGraphRunner {\n protected runtime?: GraphRuntime;\n protected engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n protected stagedInputs: Record<string, Record<string, unknown>> = {};\n protected runningKind?: EngineKind;\n\n constructor(\n protected registry: Registry,\n protected backend: ExecutionBackend\n ) {}\n\n abstract build(def: GraphDefinition): void;\n abstract update(def: GraphDefinition): void;\n abstract step(): Promise<void>;\n abstract computeNode(nodeId: string): Promise<void>;\n abstract flush(): void;\n abstract getOutputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n abstract getInputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): void;\n\n abstract getEnvironment(): Record<string, unknown> | undefined;\n\n abstract snapshotFull(): Promise<RuntimeSnapshotFull>;\n\n abstract applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void>;\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n if (this.engine) {\n throw new Error(\"Engine already running. Stop the current engine first.\");\n }\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n this.stagedInputs[nodeId][handle] = value;\n if (this.engine) {\n this.engine.setInput(nodeId, handle, value);\n } else {\n // Emit a value event so UI updates even when engine isn't running\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.engine?.triggerExternal(nodeId, event);\n }\n\n // Batch update multiple inputs on a node and trigger a single run\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n if (!inputs) return;\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n Object.assign(this.stagedInputs[nodeId], inputs);\n if (this.engine) {\n // Running: set all inputs\n this.engine.setInputs(nodeId, inputs);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n console.warn(\"Engine does not exists\");\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n }\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\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 {\n this.engine?.dispose();\n this.engine = undefined;\n this.runtime?.dispose();\n this.runtime = undefined;\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n getRunningEngine(): EngineKind | undefined {\n return this.runningKind;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n} from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport type { RunnerOptions } from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\nexport class LocalGraphRunner extends AbstractGraphRunner {\n constructor(registry: Registry) {\n super(registry, { kind: \"local\" });\n this.emit(\"transport\", { state: \"local\" });\n }\n\n build(def: GraphDefinition): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n // Signal UI that freshly built graph should be considered invalidated\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n }\n\n update(def: GraphDefinition): void {\n if (!this.runtime) return;\n // Prevent mid-run churn while wiring changes are applied\n this.runtime.pause();\n this.runtime.update(def, this.registry);\n this.runtime.resume();\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n this.build(def);\n if (!this.runtime) throw new Error(\"Runtime not built\");\n const rt = this.runtime;\n switch (opts.engine) {\n case \"push\":\n this.engine = new PushEngine(rt);\n break;\n case \"batched\":\n this.engine = new BatchedEngine(rt, {\n flushIntervalMs: opts.batched?.flushIntervalMs ?? 0,\n });\n break;\n case \"pull\":\n this.engine = new PullEngine(rt);\n break;\n case \"hybrid\":\n this.engine = new HybridEngine(rt, {\n windowMs: opts.hybrid?.windowMs ?? 250,\n batchThreshold: opts.hybrid?.batchThreshold ?? 3,\n });\n break;\n case \"step\":\n this.engine = new StepEngine(rt);\n break;\n default:\n throw new Error(\"Unknown engine kind\");\n }\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();\n this.runningKind = opts.engine;\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const eng = this.engine;\n if (eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const eng = this.engine;\n if (eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n flush(): void {\n const eng = this.engine;\n if (eng instanceof BatchedEngine) eng.flush();\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.runtime) return out;\n for (const n of def.nodes) {\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(desc?.outputs ?? {});\n for (const h of handles) {\n const v = this.runtime.getOutput(n.nodeId, h);\n if (v !== undefined) {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = v;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n const merged = { ...runtimeInputs, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean }\n ) => {\n if (!this.runtime) return;\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 };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async snapshotFull() {\n const def = undefined as any; // UI will supply def/positions on download for local\n const inputs = this.getInputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const outputs = this.getOutputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const environment = this.getEnvironment() || {};\n return { def, environment, inputs, outputs };\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull) {\n if (payload.def) this.build(payload.def);\n this.setEnvironment?.(payload.environment || {}, { merge: false });\n // Hydrate via runtime for exact restore and re-emit\n this.runtime?.hydrate(\n { inputs: payload.inputs || {}, outputs: payload.outputs || {} },\n { reemit: true }\n );\n }\n\n dispose(): void {\n super.dispose();\n this.runtime = undefined;\n this.emit(\"transport\", { state: \"local\" });\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry } from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n RemoteRunner,\n WebSocketTransport,\n} from \"@bian-womp/spark-remote\";\nimport {\n RemoteExecutionBackend,\n RemoteExecutionBackendKind,\n RemoteTransport,\n RunnerOptions,\n} from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected runner?: RemoteRunner;\n protected transport?: RemoteTransport;\n\n valueCache = new Map<\n string,\n { io: \"input\" | \"output\"; value: unknown; runtimeTypeId?: string }\n >();\n listenersBound = false;\n\n constructor(registry: Registry, backend: RemoteExecutionBackend) {\n super(registry, backend);\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.ensureRemoteRunner().then(async (runner) => {\n const eng = runner.getEngine();\n if (!this.listenersBound) {\n eng.on(\"invalidate\", async (e) => {\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) 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 console.warn(\"Unsupported operation for remote runner\");\n }\n\n update(def: GraphDefinition): void {\n // Remote: forward update; ignore errors (fire-and-forget)\n this.ensureRemoteRunner().then(async (runner) => {\n try {\n await runner.update(def);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n this.lastDef = def;\n } catch {}\n });\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: build remotely then launch\n this.ensureRemoteRunner().then(async (runner) => {\n await runner.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 runner.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snap.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n } catch {\n console.error(\"Failed to hydrate remote inputs/outputs\");\n }\n const eng = runner.getEngine();\n if (!this.listenersBound) {\n eng.on(\"value\", (e) => {\n this.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n runtimeTypeId: e.runtimeTypeId,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e) => this.emit(\"stats\", e));\n this.listenersBound = true;\n }\n this.engine = eng as Engine;\n this.engine.launch();\n this.runningKind = \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n });\n }\n\n async step(): Promise<void> {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n async computeNode(nodeId: string): Promise<void> {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n flush(): void {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.ensureRemoteRunner().then(async (runner) => {\n try {\n await runner.getEngine().triggerExternal(nodeId, event);\n } catch {}\n });\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const runner = await this.ensureRemoteRunner();\n try {\n return await runner.coerce(from, to, value);\n } catch {\n return value;\n }\n }\n\n async snapshotFull() {\n const runner = await this.ensureRemoteRunner();\n try {\n return await runner.snapshotFull();\n } catch {\n return { def: undefined, environment: {}, inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull) {\n const runner = await this.ensureRemoteRunner();\n await runner.applySnapshotFull(payload);\n }\n\n setEnvironment(env: Record<string, unknown>, opts?: { merge?: boolean }) {\n const t = this.transport;\n if (!t) return;\n t.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment: env, merge: opts?.merge },\n },\n }).catch(() => {});\n }\n\n getEnvironment(): Record<string, unknown> | undefined {\n // Fetch from remote via lightweight command\n // Note: returns undefined synchronously; callers needing value should use snapshotFull or call runner directly\n // For now, we expose an async helper on RemoteRunner. Keep sync signature per interface.\n return undefined;\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n if (!cache) return out;\n for (const n of def.nodes) {\n const resolved = n.resolvedHandles?.outputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.outputs ?? {});\n for (const h of handles) {\n const key = `${n.nodeId}.${h}`;\n const rec = cache.get(key);\n if (rec && rec.io === \"output\") {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = rec.value;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const resolved = n.resolvedHandles?.inputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.inputs ?? {});\n const cur: Record<string, unknown> = {};\n for (const h of handles) {\n const rec = cache.get(`${n.nodeId}.${h}`);\n if (rec && rec.io === \"input\") cur[h] = rec.value;\n }\n const merged = { ...cur, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n dispose(): void {\n super.dispose();\n this.runner = undefined;\n this.transport = undefined;\n\n this.emit(\"transport\", {\n state: \"disconnected\",\n kind: this.backend.kind as RemoteExecutionBackendKind,\n });\n }\n\n // Ensure remote transport/runner\n protected async ensureRemoteRunner(): Promise<RemoteRunner> {\n if (this.runner) return this.runner;\n let transport: RemoteTransport;\n const kind = this.backend.kind as RemoteExecutionBackendKind;\n const backend = this.backend as RemoteExecutionBackend;\n const connectOptions = backend.connectOptions;\n this.emit(\"transport\", { state: \"connecting\", kind });\n if (backend.kind === \"remote-http\") {\n if (!HttpPollingTransport)\n throw new Error(\"HttpPollingTransport not available\");\n transport = new HttpPollingTransport(backend.baseUrl);\n await transport.connect(connectOptions);\n } else if (backend.kind === \"remote-ws\") {\n if (!WebSocketTransport)\n throw new Error(\"WebSocketTransport not available\");\n transport = new WebSocketTransport(backend.url);\n await transport.connect(connectOptions);\n } else {\n throw new Error(\"Remote backend not configured\");\n }\n\n // Subscribe to custom events if handler provided\n if (backend.onCustomEvent) {\n transport.subscribe((event) => {\n // Filter out standard runtime events, pass others to custom handler\n const msg = event.message as any;\n if (msg && typeof msg === \"object\" && \"type\" in msg) {\n const type = msg.type;\n // Standard runtime events: stats, value, error, invalidate\n // Custom events are anything else (e.g., flow-opened, flow-latest)\n if (![\"stats\", \"value\", \"error\", \"invalidate\"].includes(type)) {\n backend.onCustomEvent?.(event);\n }\n }\n });\n }\n\n const runner = new RemoteRunner(transport);\n this.runner = runner;\n this.transport = transport;\n this.valueCache.clear();\n this.listenersBound = false;\n this.emit(\"transport\", { state: \"connected\", kind });\n return runner;\n }\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n} from \"@xyflow/react\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nexport function useWorkbenchBridge(wb: InMemoryWorkbench) {\n const onConnect: OnConnect = useCallback(\n (params) => {\n if (!params.source || !params.target) return;\n if (!params.sourceHandle || !params.targetHandle) return;\n // Prevent duplicate edges between the same endpoints\n const def = wb.export();\n const exists = def.edges.some(\n (e) =>\n e.source.nodeId === params.source &&\n e.source.handle === params.sourceHandle &&\n e.target.nodeId === params.target &&\n e.target.handle === params.targetHandle\n );\n if (exists) return;\n wb.connect({\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n });\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n // Apply position updates\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n wb.setPosition(c.id, c.position);\n }\n });\n\n // Derive next node selection from change set\n const current = wb.getSelection();\n const nextNodeIds = new Set(current.nodes);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextNodeIds.has(id)) {\n nextNodeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextNodeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextNodeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: Array.from(nextNodeIds),\n edges: current.edges,\n });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) => edges.forEach((e) => wb.disconnect(e.id)),\n [wb]\n );\n\n const onEdgesChange: OnEdgesChange = useCallback(\n (changes) => {\n const current = wb.getSelection();\n const nextEdgeIds = new Set(current.edges);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextEdgeIds.has(id)) {\n nextEdgeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextEdgeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextEdgeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: current.nodes,\n edges: Array.from(nextEdgeIds),\n });\n }\n },\n [wb]\n );\n\n const onNodesDelete: OnNodesDelete = useCallback(\n (nodes) => {\n for (const n of nodes) wb.removeNode(n.id);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n };\n}\n\nexport function useWorkbenchGraphTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchGraphUiTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphUiChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchVersionTick(runner: IGraphRunner) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const bump = () => setVersion((v) => v + 1);\n const u1 = runner.on(\"value\", bump);\n const u2 = runner.on(\"error\", bump);\n const u3 = runner.on(\"invalidate\", bump);\n const u4 = runner.on(\"status\", bump);\n const u5 = runner.on(\"stats\", bump);\n return () => {\n u1();\n u2();\n u3();\n u4();\n u5();\n };\n }, [runner]);\n\n return version;\n}\n\nexport function useThrottledValue<T>(value: T, intervalMs: number): T {\n const [throttled, setThrottled] = useState<T>(value);\n const lastSetAtRef = useRef(0);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n const now =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n const elapsed = now - lastSetAtRef.current;\n if (elapsed >= intervalMs) {\n lastSetAtRef.current = now;\n setThrottled(value);\n } else {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n lastSetAtRef.current =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n setThrottled(value);\n timeoutRef.current = null;\n }, Math.max(0, intervalMs - elapsed));\n }\n return () => {};\n }, [value, intervalMs]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n return throttled;\n}\n\n// Query param helpers\nfunction setSearchParam(key: string, val: string | undefined) {\n if (typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (val === undefined || val === \"\") url.searchParams.delete(key);\n else url.searchParams.set(key, val);\n window.history.replaceState({}, \"\", url.toString());\n}\n\nexport function useQueryParamBoolean(\n key: string,\n defaultValue: boolean\n): [boolean, (v: boolean) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n if (v === null) return defaultValue;\n return v === \"1\" || v === \"true\";\n }, [key, defaultValue]);\n const [val, setVal] = useState<boolean>(initial);\n const set = useCallback(\n (v: boolean) => {\n setVal(v);\n setSearchParam(key, v ? \"1\" : undefined);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n setVal(v === \"1\" || v === \"true\");\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n\nexport function useQueryParamString(\n key: string,\n defaultValue?: string\n): [string | undefined, (v: string | undefined) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n return v ?? defaultValue;\n }, [key, defaultValue]);\n const [val, setVal] = useState<string | undefined>(initial);\n const set = useCallback(\n (v: string | undefined) => {\n setVal(v);\n setSearchParam(key, v);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key) ?? undefined;\n setVal(v);\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n","import {\n isTypedOutput,\n type Registry,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function formatDataUrlAsLabel(dataUrl: string): string {\n try {\n const semi = dataUrl.indexOf(\";\");\n const comma = dataUrl.indexOf(\",\");\n const mime = dataUrl.slice(5, semi > 0 ? semi : undefined).toUpperCase();\n const b64 = comma >= 0 ? dataUrl.slice(comma + 1) : \"\";\n const bytes = Math.floor((b64.length * 3) / 4);\n return `${mime} Data (${bytes} bytes)`;\n } catch {\n return dataUrl.length > 64 ? dataUrl.slice(0, 64) + \"…\" : dataUrl;\n }\n}\n\nexport function resolveOutputDisplay(\n raw: unknown,\n declared: string | string[] | undefined\n): { typeId?: string; value: unknown } {\n if (isTypedOutput(raw)) {\n return {\n typeId: getTypedOutputTypeId(raw),\n value: getTypedOutputValue(raw),\n };\n }\n let typeId: string | undefined = undefined;\n if (Array.isArray(declared)) {\n typeId = declared.length === 1 ? declared[0] : undefined;\n } else if (typeof declared === \"string\") {\n typeId = declared.includes(\"|\") ? undefined : declared;\n }\n return { typeId, value: raw };\n}\n\nexport function formatDeclaredTypeSignature(\n declared: string | string[] | undefined\n): string {\n if (Array.isArray(declared)) return declared.join(\" | \");\n return declared ?? \"\";\n}\n\n// 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 = 22;\n\n\n","import type {\n ResolvedHandles,\n GraphNodeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate } from \"@bian-womp/spark-graph\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport { Position } from \"@xyflow/react\";\n\nexport function computeEffectiveHandles(\n node: GraphNodeDefinition,\n registry: Registry\n): ResolvedHandles {\n const desc = registry.nodes.get(node.typeId);\n const resolved = node.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n const inputDefaults = { ...desc?.inputDefaults, ...resolved.inputDefaults };\n return { inputs, outputs, inputDefaults };\n}\n\nexport function countVisibleHandles(\n handles: Omit<ResolvedHandles, \"inputDefaults\">\n): {\n inputsCount: number;\n outputsCount: number;\n} {\n const inputIds = Object.keys(handles.inputs).filter(\n (k) => !isInputPrivate(handles.inputs, k)\n );\n const outputIds = Object.keys(handles.outputs);\n return { inputsCount: inputIds.length, outputsCount: outputIds.length };\n}\n\nexport function estimateNodeSize(args: {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n}): {\n width: number;\n height: number;\n inputsCount: number;\n outputsCount: number;\n rowCount: number;\n} {\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, inputsCount, outputsCount, rowCount: rows };\n}\n\nexport function layoutNode(args: {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n}): {\n width: number;\n height: number;\n inputOrder: string[];\n outputOrder: string[];\n handles: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n handleLayout: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n }>;\n} {\n const { node, registry, showValues, overrides } = 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 const { width, height } = estimateNodeSize({\n node,\n registry,\n showValues,\n overrides,\n });\n const HEADER = NODE_HEADER_HEIGHT_PX;\n const ROW = NODE_ROW_HEIGHT_PX;\n const handles = [\n ...inputOrder.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER + i * ROW,\n width: 1,\n height: ROW + 2,\n })),\n ...outputOrder.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n x: width - 1,\n y: HEADER + i * ROW,\n width: 1,\n height: ROW + 2,\n })),\n ];\n const handleLayout = [\n ...inputOrder.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER + i * ROW + ROW / 2,\n })),\n ...outputOrder.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER + i * ROW + ROW / 2,\n })),\n ];\n return { width, height, inputOrder, outputOrder, handles, handleLayout };\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n} from \"@bian-womp/spark-graph\";\nimport { Position } from \"@xyflow/react\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport { computeEffectiveHandles, layoutNode } from \"./layout\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown> extends RFNodeData\n ? RFNodeData\n : Record<string, unknown>;\n type?: string;\n selected?: boolean;\n // Provide initial dimensions so XYFlow doesn't hide nodes while waiting for measurement\n initialWidth?: number;\n initialHeight?: number;\n // Pre-supply handle bounds to avoid waiting for DOM measurement\n handles?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n // Optional explicit node dimensions\n width?: number;\n height?: number;\n}\nexport interface RFEdge {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n selected?: boolean;\n animated?: boolean;\n className?: string;\n style?: any;\n label?: string;\n}\n\nexport interface RFNodeData extends Record<string, unknown> {\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n // For outputs, \"typeId\" is a display signature only; runtime type comes on value event\n outputHandles: Array<{ id: string; typeId: string }>;\n // Connectivity flags by input handle id (true if this input has an incoming edge)\n inputConnected?: Record<string, boolean>;\n // Optional explicit handle placement for consistent rendering across nodes\n handleLayout?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number; // center offset used for <Handle style={{ top }} />\n // When true, this handle does not exist in the node spec but is shown\n // to visualize dangling/missing connections. Rendered in yellow.\n missing?: boolean;\n }>;\n // Optional preferred render dimensions\n renderWidth?: number;\n renderHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: ValidationIssue[];\n };\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n opts: {\n showValues?: boolean;\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n resolveNodeType?: (nodeTypeId: string) => string;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n nodeStatus?: Record<string, NodeRunStatus>;\n edgeStatus?: Record<string, EdgeRunStatus>;\n nodeValidation?: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n edgeValidation?: Record<string, boolean>;\n selectedNodeIds?: Set<string>;\n selectedEdgeIds?: Set<string>;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const EDGE_STYLE_MISSING = { stroke: \"#f59e0b\", strokeWidth: 2 } as const; // amber-500\n const EDGE_STYLE_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n // Build a map of valid handles per node up-front\n const validHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n for (const n of def.nodes) {\n const { inputs, outputs } = computeEffectiveHandles(n, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n validHandleMap[n.nodeId] = {\n inputs: new Set(inputOrder),\n outputs: new Set(outputOrder),\n };\n }\n\n // Track which inputs are connected (for UI) and which handles are missing (for layout)\n const connectedInputs: Record<string, Set<string>> = {};\n const missingInputsByNode: Record<string, Set<string>> = {};\n const missingOutputsByNode: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const tgtId = e.target.nodeId;\n const tgtHandle = e.target.handle;\n if (!connectedInputs[tgtId]) connectedInputs[tgtId] = new Set<string>();\n connectedInputs[tgtId].add(tgtHandle);\n const tgtValid = !!validHandleMap[tgtId]?.inputs.has(tgtHandle);\n if (!tgtValid) {\n (missingInputsByNode[tgtId] ||= new Set<string>()).add(tgtHandle);\n }\n\n const srcId = e.source.nodeId;\n const srcHandle = e.source.handle;\n const srcValid = !!validHandleMap[srcId]?.outputs.has(srcHandle);\n if (!srcValid) {\n (missingOutputsByNode[srcId] ||= new Set<string>()).add(srcHandle);\n }\n }\n\n // This map is still used later for certain checks; align with valid handles\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n Object.assign(nodeHandleMap, validHandleMap);\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const { inputs: inputSource, outputs: outputSource } =\n computeEffectiveHandles(n, registry);\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const geom = layoutNode({\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n });\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id),\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]),\n }));\n nodeHandleMap[n.nodeId] = {\n inputs: new Set(inputHandles.map((h) => h.id)),\n outputs: new Set(outputHandles.map((h) => h.id)),\n };\n\n // Append placeholder entries for any missing handles (below valid ones)\n const baseLeftCount = geom.inputOrder.length;\n const baseRightCount = geom.outputOrder.length;\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n const HEADER = NODE_HEADER_HEIGHT_PX;\n const ROW = NODE_ROW_HEIGHT_PX;\n\n const extraHandleLayoutLeft = extraInputs.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER + (baseLeftCount + i) * ROW + ROW / 2,\n missing: true as const,\n }));\n const extraHandleLayoutRight = extraOutputs.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER + (baseRightCount + i) * ROW + ROW / 2,\n missing: true as const,\n }));\n const handleLayout = [\n ...geom.handleLayout,\n ...extraHandleLayoutLeft,\n ...extraHandleLayoutRight,\n ];\n\n // Precompute handle bounds (including missing) so edges can render immediately\n const missingBoundsLeft = extraInputs.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER + (baseLeftCount + i) * ROW,\n width: 1,\n height: ROW + 2,\n }));\n const missingBoundsRight = extraOutputs.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n x: geom.width - 1,\n y: HEADER + (baseRightCount + i) * ROW,\n width: 1,\n height: ROW + 2,\n }));\n const handles = [\n ...geom.handles,\n ...missingBoundsLeft,\n ...missingBoundsRight,\n ];\n\n // Adjust node height to accommodate missing handle rows\n const baseRows = Math.max(baseLeftCount, baseRightCount);\n const newRows = Math.max(\n baseLeftCount + extraInputs.length,\n baseRightCount + extraOutputs.length\n );\n const initialWidth = geom.width;\n const initialHeight = geom.height + Math.max(0, newRows - baseRows) * ROW;\n\n return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n inputConnected: Object.fromEntries(\n inputHandles.map((h: { id: string }) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout,\n showValues: opts.showValues,\n renderWidth: initialWidth,\n renderHeight: initialHeight,\n inputValues: opts.inputs?.[n.nodeId],\n outputValues: opts.outputs?.[n.nodeId],\n status: opts.nodeStatus?.[n.nodeId],\n validation: {\n inputs: opts.nodeValidation?.inputs?.[n.nodeId] ?? [],\n outputs: opts.nodeValidation?.outputs?.[n.nodeId] ?? [],\n issues: opts.nodeValidation?.issues?.[n.nodeId] ?? [],\n },\n toString: opts.toString,\n toElement: opts.toElement,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts.resolveNodeType?.(n.typeId) ?? \"spark-default\",\n selected: opts.selectedNodeIds\n ? opts.selectedNodeIds.has(n.nodeId)\n : undefined,\n initialWidth,\n initialHeight,\n handles,\n width: initialWidth,\n height: initialHeight,\n };\n });\n\n const edges: RFEdge[] = def.edges.map((e) => {\n const st = opts.edgeStatus?.[e.id];\n const isRunning = !!st?.activeRuns;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts.edgeValidation?.[e.id];\n const sourceMissing = !validHandleMap[e.source.nodeId]?.outputs.has(\n e.source.handle\n );\n const targetMissing = !validHandleMap[e.target.nodeId]?.inputs.has(\n e.target.handle\n );\n const isMissing = sourceMissing || targetMissing;\n const style = isMissing\n ? EDGE_STYLE_MISSING\n : hasError || isInvalidEdge\n ? EDGE_STYLE_ERROR\n : isRunning\n ? EDGE_STYLE_RUNNING\n : undefined;\n return {\n id: e.id,\n source: e.source.nodeId,\n target: e.target.nodeId,\n sourceHandle: e.source.handle,\n targetHandle: e.target.handle,\n selected: opts.selectedEdgeIds\n ? opts.selectedEdgeIds.has(e.id)\n : undefined,\n animated: isRunning && !isMissing,\n style,\n label: e.typeId || undefined,\n };\n });\n\n return { nodes, edges };\n}\n\n// Shared node container border class composition for consistent visuals\nexport function getNodeBorderClassNames(args: {\n selected?: boolean;\n status?: NodeRunStatus;\n validation?: { issues?: ValidationIssue[] };\n}): string {\n const selected = !!args.selected;\n const status = args.status || ({} as NodeRunStatus);\n const issues = args.validation?.issues ?? [];\n\n const hasError = !!status.lastError;\n const hasValidationError = issues.some((i) => i.level === \"error\");\n const hasValidationWarning = !hasValidationError && issues.length > 0;\n const isRunning = !!status.activeRuns;\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","import React, { createContext, useContext } from \"react\";\nimport type { GraphDefinition } 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, type EngineKind } from \"../../runtime/IGraphRunner\";\n\nexport type ExampleDescriptor = {\n id: string;\n label: string;\n // If registry is omitted, the current (possibly remote-hydrated) registry is kept\n load: () => Promise<{ registry?: Registry; def: GraphDefinition }>;\n defaultEngine?: EngineKind;\n};\n\nexport type WorkbenchOverrides = {\n toString?: (\n baseToString: (typeId?: string, value?: unknown) => string,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => string;\n toElement?: (\n baseToElement: (typeId?: string, value?: unknown) => JSX.Element,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => JSX.Element;\n setInput?: (\n baseSetInput: (handle: string, raw: string | number | undefined) => void,\n ctx: {\n runner: IGraphRunner;\n selectedNodeId?: string;\n registry: Registry;\n // lightweight context; extend if needed later\n }\n ) => (handle: string, raw: string | number | undefined) => void;\n registerUI?: (\n baseRegisterUI: (wb: AbstractWorkbench) => void,\n ctx: { wb: AbstractWorkbench; wbRunner: IGraphRunner }\n ) => void;\n // Allow consumers to customize the example list (remove/replace/add)\n getExamples?: (defaults: ExampleDescriptor[]) => ExampleDescriptor[];\n contextPanel?: React.ReactNode;\n // Optional: per-type default sizing for nodes\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n\n // Graph\n def: GraphDefinition;\n selectedNodeId?: string;\n selectedEdgeId?: string;\n setSelection: (sel: { nodes: string[]; edges: string[] }) => void;\n\n // Runtime\n nodeStatus: Record<string, NodeRunStatus>;\n edgeStatus: Record<string, EdgeRunStatus>;\n valuesTick: number;\n inputsMap: Record<string, Record<string, unknown>>;\n 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 // Engine controls\n isRunning: () => boolean;\n engineKind: () => EngineKind | undefined;\n start: (engine: EngineKind) => void;\n stop: () => void;\n step: () => void;\n flush: () => void;\n\n // Layout\n runAutoLayout: () => void;\n\n // Graph edits\n updateEdgeType: (edgeId: string, typeId: string | undefined) => void;\n\n // Invoke node external event\n triggerExternal: (nodeId: string, event: unknown) => void;\n}\n\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 GraphNodeDefinition,\n NodeRunError,\n} from \"@bian-womp/spark-protocol\";\nimport { type Registry, type ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { IGraphRunner, type EngineKind } 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 } from \"../layout\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n overrides,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n overrides?: WorkbenchOverrides;\n children: React.ReactNode;\n}) {\n const [nodeStatus, setNodeStatus] = useState<Record<string, NodeRunStatus>>(\n {}\n );\n const [edgeStatus, setEdgeStatus] = useState<Record<string, EdgeRunStatus>>(\n {}\n );\n const [events, setEvents] = useState<Array<DebugEvent>>([]);\n const clearEvents = useCallback(() => setEvents([]), []);\n\n // Fallback progress animation: drive progress to 100% over ~2 minutes\n const FALLBACK_TOTAL_MS = 2 * 60 * 1000;\n const [fallbackStarts, setFallbackStarts] = useState<Record<string, number>>(\n {}\n );\n // Track runs that emitted an error so we can keep progress on completion\n const errorRunsRef = useRef<Record<string, Record<string, true>>>({});\n\n // Periodically advance fallback progress for running nodes without explicit progress\n useEffect(() => {\n const interval = setInterval(() => {\n setNodeStatus((prev) => {\n let changed = false;\n const next = { ...prev } as typeof prev;\n const now = Date.now();\n for (const id of Object.keys(prev)) {\n const st = prev[id];\n if (!st) continue;\n const runs = st.activeRuns ?? 0;\n const startAt = fallbackStarts[id];\n if (runs > 0 && startAt) {\n const cur = Math.max(0, Math.min(1, Number(st.progress) || 0));\n const elapsed = Math.max(0, now - startAt);\n // Approach 100% over the target window, but cap below 1 until done\n const target = Math.max(\n 0,\n Math.min(0.99, elapsed / FALLBACK_TOTAL_MS)\n );\n const merged = Math.max(cur, target);\n if (merged > cur + 0.005 && merged <= 1) {\n next[id] = { ...st, progress: merged };\n changed = true;\n }\n }\n }\n return changed ? next : prev;\n });\n }, 200);\n return () => clearInterval(interval);\n }, [fallbackStarts]);\n\n // Validation\n const [validation, setValidation] = useState<\n { ok: boolean; issues: Array<ValidationIssue> } | undefined\n >(undefined);\n\n // Selection (mirror workbench selectionChanged)\n const [selectedNodeId, setSelectedNodeId] = useState<string | undefined>();\n const [selectedEdgeId, setSelectedEdgeId] = useState<string | undefined>();\n const setSelection = useCallback(\n (sel: { nodes: string[]; edges: string[] }) => wb.setSelection(sel),\n [wb]\n );\n\n // Ticks\n const graphTick = useWorkbenchGraphTick(wb);\n const graphUiTick = useWorkbenchGraphUiTick(wb);\n const versionTick = useWorkbenchVersionTick(runner);\n const valuesTick = versionTick + graphTick + graphUiTick;\n\n // Def and IO values\n const def = wb.export();\n\n const inputsMap = useMemo(\n () => runner.getInputs(def),\n [runner, def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(def),\n [runner, def, valuesTick]\n );\n const outputTypesMap = useMemo(() => {\n const out: Record<string, Record<string, string | undefined>> = {};\n // Local: runtimeTypeId is not stored; derive from typed wrapper in outputsMap\n for (const n of def.nodes) {\n const outputsDecl = registry.nodes.get(n.typeId)?.outputs ?? {};\n const handles = Object.keys(outputsDecl);\n const cur: Record<string, string | undefined> = {};\n for (const h of handles) {\n const v = outputsMap[n.nodeId]?.[h];\n const declared = outputsDecl[h];\n const { typeId } = resolveOutputDisplay(v, declared);\n cur[h] = typeId;\n }\n if (Object.keys(cur).length > 0) out[n.nodeId] = cur;\n }\n return out;\n }, [def, outputsMap, registry]);\n\n // Initialize nodes as invalidated by default until first successful run\n useEffect(() => {\n setNodeStatus((prev) => {\n const next = { ...prev } as Record<string, NodeRunStatus>;\n for (const n of def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n if (cur.invalidated === undefined) {\n next[n.nodeId] = { ...cur, invalidated: true };\n }\n }\n return next;\n });\n }, [def]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n const cur = wb.export();\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of cur.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of cur.edges) {\n indegree[e.target.nodeId] = (indegree[e.target.nodeId] ?? 0) + 1;\n adj[e.source.nodeId].push(e.target.nodeId);\n }\n const q = Object.keys(indegree).filter((k) => indegree[k] === 0);\n const layers: string[][] = [];\n while (q.length) {\n const layer: string[] = [];\n const next: string[] = [];\n for (const id of q) {\n layer.push(id);\n for (const nb of adj[id]) {\n indegree[nb] -= 1;\n if (indegree[nb] === 0) next.push(nb);\n }\n }\n layers.push(layer);\n q.splice(0, q.length, ...next);\n }\n // Size-aware placement: columns by layer, stacking nodes vertically in each column\n // Use the same sizing heuristic as mapping via estimateNodeSize\n const H_GAP = 160;\n const V_GAP = 24;\n const pos: Record<string, { x: number; y: number }> = {};\n let curX = 0;\n for (const layer of layers) {\n // Compute max width in this layer and individual heights\n let maxWidth = 0;\n const heights: Record<string, number> = {};\n for (const id of layer) {\n const node = cur.nodes.find((n) => n.nodeId === id);\n if (!node) continue;\n // Prefer showValues sizing similar to node rendering\n // Consider per-type overrides when available via UI\n const overrideSize =\n overrides?.getDefaultNodeSize?.(node.typeId) ?? undefined;\n const size = estimateNodeSize({\n node,\n registry,\n showValues: true,\n overrides: overrideSize,\n });\n heights[id] = size.height;\n if (size.width > maxWidth) maxWidth = size.width;\n }\n // Place nodes in this column\n let curY = 0;\n for (const id of layer) {\n const h = heights[id] ?? 0;\n pos[id] = { x: curX, y: curY };\n curY += h + V_GAP;\n }\n curX += maxWidth + H_GAP;\n }\n wb.setPositions(pos);\n }, [wb, registry, overrides?.getDefaultNodeSize]);\n\n const updateEdgeType = useCallback(\n (edgeId: string, typeId: string | undefined) =>\n wb.updateEdgeType(edgeId, typeId),\n [wb]\n );\n\n const triggerExternal = useCallback(\n (nodeId: string, event: unknown) => runner.triggerExternal(nodeId, event),\n [runner]\n );\n\n // Subscribe to runner/workbench events\n useEffect(() => {\n const add =\n (source: \"runner\" | \"workbench\", type: string) => (payload: unknown) =>\n setEvents((prev: Array<DebugEvent>) => {\n if (\n source === \"workbench\" &&\n (type === \"graphChanged\" || type === \"graphUiChanged\")\n ) {\n const changeType = (payload as WorkbenchEventMap[typeof type])\n .change?.type;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const nextNo = prev.length > 0 ? (prev[0]?.no ?? 0) + 1 : 1;\n const next = [\n {\n no: nextNo,\n at: Date.now(),\n source,\n type,\n payload: structuredClone(payload),\n },\n ...prev,\n ];\n return next.length > 200 ? next.slice(0, 200) : next;\n });\n\n // Helper to refresh resolved handles from remote and merge into workbench\n const refreshResolvedHandles = async () => {\n try {\n const snap = await runner.snapshotFull();\n const remoteDef = snap?.def;\n if (remoteDef && Array.isArray(remoteDef.nodes)) {\n // Mutate current def in-place to avoid emitting graphChanged and causing update loop\n const cur = wb.export();\n const byId = new Map<string, GraphNodeDefinition>(\n (remoteDef.nodes || []).map((n) => [n.nodeId, n])\n );\n let changed = false;\n for (const n of cur.nodes) {\n const rn = byId.get(n.nodeId);\n if (rn && rn.resolvedHandles) {\n const before = JSON.stringify(n.resolvedHandles || {});\n const after = JSON.stringify(rn.resolvedHandles || {});\n if (before !== after) {\n n.resolvedHandles = rn.resolvedHandles;\n changed = true;\n }\n }\n }\n if (changed) wb.refreshValidation();\n }\n } catch {}\n };\n\n const off1 = runner.on(\"value\", (e) => {\n if (e?.io === \"input\") {\n const nodeId = e?.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: { ...s[nodeId], invalidated: true },\n }));\n }\n return add(\"runner\", \"value\")(e);\n });\n const off2 = runner.on(\"error\", (e) => {\n const edgeError = e as EdgeConvertError;\n const nodeError = e as NodeRunError;\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.nodeId) {\n const nodeId = nodeError.nodeId;\n const runId = nodeError.runId;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: nodeError.err,\n },\n }));\n // Mark this runId as errored\n if (runId) {\n errorRunsRef.current[nodeId] = {\n ...errorRunsRef.current[nodeId],\n [runId]: true,\n };\n }\n }\n return add(\"runner\", \"error\")(e);\n });\n const off3 = runner.on(\"invalidate\", (e) => {\n // After build/update, pull resolved handles and merge in-place (no graphChanged)\n if (e?.reason === \"graph-updated\" || e?.reason === \"graph-built\") {\n refreshResolvedHandles();\n }\n return add(\"runner\", \"invalidate\")(e);\n });\n const off3b = runner.on(\"stats\", (s) => {\n if (!s) return;\n if (s.kind === \"node-start\") {\n const id = s.nodeId;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: current + 1,\n progress: 0,\n invalidated: false,\n },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: Date.now() }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...prev[id],\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n const runId = s.runId;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const nextActive = current - 1;\n const hadError = !!(runId && errorRunsRef.current[id]?.[runId]);\n const keepProgress = hadError || nextActive > 0;\n\n // Clear error flag for this runId\n if (runId && errorRunsRef.current[id]?.[runId]) {\n delete errorRunsRef.current[id]?.[runId];\n }\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: nextActive,\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: current - 1 },\n };\n });\n }\n return add(\"runner\", \"stats\")(s);\n });\n const off4 = wb.on(\"graphChanged\", add(\"workbench\", \"graphChanged\"));\n // Ensure newly added nodes start as invalidated until first evaluation\n const off4c = wb.on(\"graphChanged\", (e) => {\n const change = e.change;\n if (change?.type === \"addNode\" && typeof change.nodeId === \"string\") {\n const id = change.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [id]: { ...s[id], invalidated: true },\n }));\n }\n });\n const off4b = wb.on(\"graphUiChanged\", add(\"workbench\", \"graphUiChanged\"));\n const off5 = wb.on(\n \"validationChanged\",\n add(\"workbench\", \"validationChanged\")\n );\n const off5b = wb.on(\"validationChanged\", (r) => setValidation(r));\n const off6 = wb.on(\"selectionChanged\", (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n });\n const off7 = wb.on(\"error\", add(\"workbench\", \"error\"));\n wb.refreshValidation();\n // Registry updates: swap registry and refresh graph validation/UI\n const offReg = runner.on(\"registry\", (newReg) => {\n try {\n setRegistry(newReg);\n wb.setRegistry(newReg);\n // Trigger a graph update so the UI revalidates with new types/enums/nodes\n try {\n runner.update(wb.export());\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n });\n\n return () => {\n off1();\n off2();\n off3();\n off3b();\n off4();\n off4b();\n off4c();\n off5();\n off5b();\n off6();\n off7();\n offReg();\n };\n }, [runner, wb]);\n\n // Push incremental updates into running engine without full reload\n useEffect(() => {\n if (runner.isRunning()) {\n try {\n runner.update(def);\n } catch {}\n }\n }, [runner, def, graphTick]);\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 isRunning = useCallback(() => runner.isRunning(), [runner]);\n const engineKind = useCallback(() => runner.getRunningEngine(), [runner]);\n const start = useCallback(\n (engine: EngineKind) => {\n try {\n runner.launch(wb.export(), { engine });\n } catch {}\n },\n [runner, wb]\n );\n const stop = useCallback(() => runner.dispose(), [runner]);\n const step = useCallback(() => runner.step(), [runner]);\n const flush = useCallback(() => runner.flush(), [runner]);\n\n const value = useMemo<WorkbenchContextValue>(\n () => ({\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n outputsMap,\n outputTypesMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n }),\n [\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n wb,\n runner,\n ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React, { useEffect, useMemo, useRef } from \"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\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 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={clearEvents}\n className=\"text-xs px-2 py-0.5 border border-gray-300 rounded\"\n >\n Clear\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, { useEffect, useState } from \"react\";\nimport { isInputPrivate, getInputTypeId } from \"@bian-womp/spark-graph\";\nimport { resolveOutputDisplay } 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 toElement,\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 toElement: (typeId?: string, value?: unknown) => JSX.Element;\n contextPanel?: React.ReactNode;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const safeToString = (typeId?: string, value?: unknown) => {\n try {\n if (typeof toString === \"function\") {\n return toString(typeId, value);\n }\n return String(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n };\n\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n outputsMap,\n outputTypesMap,\n nodeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\n updateEdgeType,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = def.edges.find((e) => e.id === selectedEdgeId);\n const selectedDesc = selectedNode\n ? registry.nodes.get(selectedNode.typeId)\n : undefined;\n const inputHandles = Object.entries(selectedDesc?.inputs ?? {})\n .filter(([k]) => !isInputPrivate(selectedDesc?.inputs, k))\n .map(([k]) => k);\n const outputHandles = Object.keys(selectedDesc?.outputs ?? {});\n const nodeInputs = selectedNodeId ? inputsMap[selectedNodeId] ?? {} : {};\n const nodeOutputs = selectedNodeId ? outputsMap[selectedNodeId] ?? {} : {};\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 // 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 desc = selectedDesc;\n const handles = Object.keys(desc?.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(desc?.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, selectedDesc, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\n const { wb } = useWorkbenchContext();\n const deleteEdgeById = (edgeId?: string) => {\n if (!edgeId) return;\n try {\n wb.disconnect(edgeId);\n } catch {}\n };\n\n return (\n <div\n className={`${widthClass} border-l border-gray-300 p-3 flex flex-col h-full min-h-0 overflow-hidden`}\n >\n {contextPanel && <div className=\"mb-2\">{contextPanel}</div>}\n <div className=\"font-semibold mb-2\">Inspector</div>\n <div className=\"text-xs text-gray-500 mb-2\">valuesTick: {valuesTick}</div>\n <div className=\"flex-1 overflow-auto\">\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 <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]\">DataTypeId</span>\n </label>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n value={selectedEdge.typeId ?? \"\"}\n onChange={(e) => {\n const v = e.target.value;\n const next = v === \"\" ? undefined : v;\n updateEdgeType(selectedEdge.id, next);\n }}\n >\n <option value=\"\">(infer from source)</option>\n {Array.from(registry.types.keys()).map((tid) => (\n <option key={tid} value={tid}>\n {tid}\n </option>\n ))}\n </select>\n </div>\n </div>\n {selectedEdgeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedEdgeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div>\n {selectedNode && (\n <div className=\"mb-2\">\n <div>Node: {selectedNode.nodeId}</div>\n <div>Type: {selectedNode.typeId}</div>\n {!!selectedNodeStatus?.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(selectedDesc?.inputs, h);\n const isLinked = def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const commonProps = {\n style: { flex: 1 },\n disabled: isLinked,\n };\n const current = nodeInputs[h];\n const value = drafts[h] ?? safeToString(typeId, current);\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 setInput(h, draft);\n setOriginals((o) => ({ ...o, [h]: draft }));\n };\n const revert = () => {\n const orig = originals[h] ?? safeToString(typeId, current);\n setDrafts((d) => ({ ...d, [h]: orig }));\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>{h}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {typeId}\n </span>\n </label>\n {hasValidation && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={title}\n />\n )}\n {isEnum ? (\n <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={\n current !== undefined && current !== null\n ? String(current)\n : \"\"\n }\n onChange={(e) => {\n const val = e.target.value;\n const raw = 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=\"\">(select)</option>\n {registry.enums.get(typeId!)?.options.map((opt) => (\n <option key={opt.value} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n ) : isLinked ? (\n toElement(typeId, current)\n ) : (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n placeholder={isLinked ? \"wired\" : undefined}\n value={value}\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 )}\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>{h}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {outputTypesMap[selectedNodeId!]?.[h] ?? \"\"}\n </span>\n </label>\n <div className=\"flex-1\">\n {(() => {\n const { typeId, value } = resolveOutputDisplay(\n nodeOutputs[h],\n selectedDesc?.outputs?.[h]\n );\n return toElement(typeId, value);\n })()}\n </div>\n {(() => {\n const outIssues =\n selectedNodeHandleValidation.outputs.filter(\n (m) => m.handle === h\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 </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 {debug && (\n <div className=\"mt-3 flex-none min-h-0 h-[50%]\">\n <DebugEvents\n autoScroll={!!autoScroll}\n hideWorkbench={!!hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n />\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport type { RFNodeData } from \"./mapping\";\n\ntype HandleKind = \"input\" | \"output\";\n\nfunction NodeHandleItem({\n kind,\n id,\n type,\n position,\n y,\n isConnectable,\n className,\n labelClassName,\n renderLabel,\n}: {\n kind: HandleKind;\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y?: number;\n isConnectable: boolean;\n className: string;\n labelClassName: string;\n renderLabel?: (args: { kind: HandleKind; id: string }) => React.ReactNode;\n}) {\n return (\n <>\n <Handle\n id={id}\n type={type}\n position={position}\n isConnectable={isConnectable}\n className={className}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={\n labelClassName + (kind === \"input\" ? \" left-2\" : \" right-2\")\n }\n style={{\n top: (y ?? 0) - 8,\n ...(kind === \"input\"\n ? { right: \"50%\" }\n : { left: \"50%\", textAlign: \"right\" }),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind, id })}\n </div>\n )}\n </>\n );\n}\n\nexport function NodeHandles({\n data,\n isConnectable,\n inputClassName = \"!w-2 !h-2 !bg-gray-600\",\n outputClassName = \"!w-2 !h-2 !bg-gray-600\",\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 inputClassName?: string;\n outputClassName?: string;\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 inputClassName;\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 = \"!w-3 !h-3 !bg-amber-400 !border-amber-500\";\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}\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 outputClassName;\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} wb-nodrag wb-nowheel`}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing output handles (rendered in yellow) */}\n {missingOutputs.map((h) => {\n const key = `missing-output:${h.id}`;\n const position = h.position ?? Position.Right;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 !rounded-none wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={false}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n </>\n );\n}\n\nexport default NodeHandles;\n","import React from \"react\";\nimport {\n useUpdateNodeInternals,\n type NodeProps,\n type Node,\n} from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { ArrowClockwiseIcon } from \"@phosphor-icons/react\";\nimport NodeHandles from \"./NodeHandles\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { resolveOutputDisplay } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { getNodeBorderClassNames, type RFNodeData } from \"./mapping\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<Node<RFNodeData>>) {\n const updateNodeInternals = useUpdateNodeInternals();\n const { typeId, showValues } = data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n React.useEffect(() => {\n updateNodeInternals(id);\n }, [\n id,\n inputEntries.length,\n outputEntries.length,\n showValues,\n updateNodeInternals,\n ]);\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const containerBorder = getNodeBorderClassNames({\n selected,\n status,\n validation,\n });\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/70 !dark:bg-stone-900\",\n containerBorder\n )}\n style={{\n position: \"relative\",\n minWidth:\n typeof data.renderWidth === \"number\" ? data.renderWidth : undefined,\n minHeight:\n typeof data.renderHeight === \"number\" ? data.renderHeight : undefined,\n }}\n >\n <DefaultNodeHeader\n id={id}\n title={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n\nexport function DefaultNodeHeader({\n id,\n title,\n validation,\n right,\n showId,\n onInvalidate,\n}: {\n id: string;\n title: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n onInvalidate?: () => void;\n}) {\n const ctx = useWorkbenchContext();\n const handleInvalidate = React.useCallback(() => {\n try {\n if (onInvalidate) return onInvalidate();\n const kind = ctx.engineKind?.();\n if (kind === \"pull\") ctx.runner.computeNode(id);\n else ctx.triggerExternal?.(id, { type: \"invalidate\" });\n } catch {}\n }, [ctx, id, onInvalidate]);\n\n return (\n <div\n className=\"flex items-center justify-center px-2 border-b border-solid border-gray-500 dark:border-gray-400 text-gray-600 dark:text-gray-300\"\n style={{\n maxHeight: NODE_HEADER_HEIGHT_PX,\n minHeight: NODE_HEADER_HEIGHT_PX,\n }}\n >\n <strong\n className=\"flex-1 h-full text-sm\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n >\n {title}\n </strong>\n <div className=\"flex items-center gap-1\">\n {/* Invalidate button */}\n <button\n className=\"w-4 h-4 border border-gray-400 rounded text-[10px] leading-3 flex items-center justify-center\"\n title=\"Invalidate and re-run\"\n onClick={(e) => {\n e.stopPropagation();\n handleInvalidate();\n }}\n >\n <ArrowClockwiseIcon size={10} />\n </button>\n {right}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n {showId && <span className=\"text-[10px] opacity-70\">({id})</span>}\n </div>\n </div>\n );\n}\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<Node<RFNodeData>>, \"data\" | \"isConnectable\">) {\n const { showValues, inputValues, outputValues, toString } = data;\n const prettyHandle = React.useCallback((id: string) => {\n try {\n const parts = String(id).split(\":\");\n // If there are exactly 3 colons (4 parts), display only the second part\n if (parts.length === 4) return parts[1] || id;\n return id;\n } catch {\n return id;\n }\n }, []);\n 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 const vIssues = (\n kind === \"input\" ? validation.inputs : validation.outputs\n ).filter((v) => v.handle === id);\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n return cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400\",\n kind === \"output\" && \"!rounded-none\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\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 txt = toString(entry.typeId, inputValues?.[entry.id]);\n return typeof txt === \"string\" ? txt : String(txt);\n }\n const resolved = resolveOutputDisplay(\n outputValues?.[entry.id],\n entry.typeId\n );\n const txt = toString(resolved.typeId, resolved.value);\n return typeof txt === \"string\" ? txt : String(txt);\n })();\n\n return (\n <span className=\"flex items-center gap-1 w-full\">\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}\n </span>\n ) : (\n <span style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }} />\n )}\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n {valueText !== undefined && (\n <span\n className=\"opacity-60 truncate pr-1\"\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText}\n </span>\n )}\n </>\n )}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"shrink-0\"\n title={title}\n />\n )}\n </span>\n );\n }}\n />\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n onAdd,\n onClose,\n}: {\n open: boolean;\n clientPos: { x: number; y: number } | null;\n onAdd: (typeId: string, position: { x: number; y: number }) => void;\n onClose: () => void;\n}) {\n const { registry } = useWorkbenchContext();\n const rf = useReactFlow();\n const ids = Array.from(registry.nodes.keys());\n const [query, setQuery] = useState(\"\");\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? ids.filter((id) => id.toLowerCase().includes(q))\n : ids;\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)) onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") 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, onClose]);\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 onAdd(typeId, p);\n onClose();\n };\n\n const renderTree = (tree: Tree, path: string[] = []) => {\n const entries = Object.entries(tree?.__children ?? {}).sort((a, b) =>\n a[0].localeCompare(b[0])\n );\n return (\n <div>\n {entries.map(([key, child]) => {\n const label = key;\n const hasChildren =\n !!child?.__children && Object.keys(child.__children).length > 0;\n const idKey = [...path, key].join(\".\");\n if (!hasChildren) {\n // Leaf: render only the action button, no group header\n return child.__self ? (\n <button\n key={idKey}\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n ) : null;\n }\n // Group: show label, optional action for id at this level, and children\n return (\n <div key={idKey}>\n <div className=\"px-2 py-1 text-[11px] uppercase tracking-wide text-gray-400\">\n {label}\n </div>\n {child.__self && (\n <button\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n )}\n <div className=\"pl-2 border-l border-gray-200 ml-2\">\n {renderTree(child, [...path, key])}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-none shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Add Node{\" \"}\n <span className=\"text-gray-500 font-normal\">({totalCount})</span>\n </div>\n <div className=\"px-2 pb-1\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter nodes...\"\n className=\"w-full border border-gray-300 px-2 py-1 text-sm outline-none focus:border-gray-400\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n />\n </div>\n <div className=\"max-h-60 overflow-auto\">\n {totalCount > 0 ? (\n renderTree(root)\n ) : (\n <div className=\"px-3 py-2 text-gray-400\">No matches</div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef, useCallback } from \"react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n getInputTypeId,\n isTypedOutput,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n onClose,\n}: {\n open: boolean;\n clientPos: { x: number; y: number } | null;\n nodeId: string;\n onClose: () => void;\n}) {\n const { wb, runner, engineKind, registry, outputsMap, outputTypesMap } =\n useWorkbenchContext();\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)) onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") 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, onClose]);\n\n useEffect(() => {\n if (open) ref.current?.focus();\n }, [open]);\n\n // Bake helpers\n const getBakeableOutputs = (): string[] => {\n try {\n const def = wb.export();\n const node = def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return [];\n const desc = registry.nodes.get(node.typeId);\n const handles = Object.keys(desc?.outputs || {});\n const out: string[] = [];\n for (const h of handles) {\n const tId = outputTypesMap?.[nodeId]?.[h];\n if (!tId) continue;\n if (tId.endsWith(\"[]\")) {\n const base = tId.slice(0, -2);\n const tArr = registry.types.get(tId);\n const tElem = registry.types.get(base);\n const arrT = tArr?.bakeTarget;\n const elemT = tElem?.bakeTarget;\n if (\n (arrT && registry.nodes.has(arrT.nodeTypeId)) ||\n (elemT && registry.nodes.has(elemT.nodeTypeId))\n )\n out.push(h);\n } else {\n const t = registry.types.get(tId);\n const bt = t?.bakeTarget;\n if (bt && registry.nodes.has(bt.nodeTypeId)) out.push(h);\n }\n }\n return out;\n } catch {\n return [];\n }\n };\n\n const doBake = async (handleId: string) => {\n try {\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n if (!typeId || raw === undefined) return;\n const unwrap = (v: unknown) =>\n isTypedOutput(v) ? getTypedOutputValue(v) : v;\n const clone = (v: unknown) =>\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(v));\n const coerceIfNeeded = async (\n fromType: string,\n toType: string | undefined,\n value: unknown\n ) => {\n if (!toType || toType === fromType || !runner?.coerce) return value;\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n return value;\n }\n };\n\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n const isArray = typeId.endsWith(\"[]\");\n const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;\n const tArr = isArray ? registry.types.get(typeId) : undefined;\n const tElem = registry.types.get(baseTypeId);\n const singleTarget = !isArray ? tElem?.bakeTarget : undefined;\n const arrTarget = isArray ? tArr?.bakeTarget : undefined;\n const elemTarget = isArray ? tElem?.bakeTarget : undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inType = getInputTypeId(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n const newId = wb.addNode({\n typeId: singleTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n params: {},\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [singleTarget.inputHandle]: coerced });\n return;\n }\n\n if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, arrTarget.inputHandle);\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n const newId = `n${Math.random().toString(36).slice(2, 8)}`;\n wb.addNode({\n nodeId: newId,\n typeId: arrTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n params: {},\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [arrTarget.inputHandle]: coerced });\n return;\n }\n\n if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, elemTarget.inputHandle);\n const src = unwrap(raw);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inType, v))\n );\n const COLS = 4;\n const DX = 180;\n const DY = 160;\n for (let idx = 0; idx < coercedItems.length; idx++) {\n const cv = coercedItems[idx];\n const col = idx % COLS;\n const row = Math.floor(idx / COLS);\n const newId = wb.addNode({\n typeId: elemTarget.nodeTypeId,\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n params: {},\n initialInputs: { [elemTarget.inputHandle]: clone(cv) },\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [elemTarget.inputHandle]: cv });\n }\n return;\n }\n } catch {}\n };\n\n // actions\n const handleDelete = useCallback(() => {\n wb.removeNode(nodeId);\n onClose();\n }, [nodeId, wb, onClose]);\n\n const handleDuplicate = useCallback(() => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n wb.addNode({\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n });\n onClose();\n }, [nodeId, wb, onClose]);\n\n const handleBake = useCallback(\n async (handleId: string) => {\n await doBake(handleId);\n onClose();\n },\n [doBake, onClose]\n );\n\n const handleCopyId = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n }, [nodeId, onClose]);\n\n const handleRunPull = useCallback(async () => {\n try {\n await runner.computeNode(nodeId);\n } catch {}\n onClose();\n }, [nodeId, runner, onClose]);\n\n if (!open || !clientPos || !nodeId) return null;\n\n // clamp\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16;\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n const canRunPull = engineKind()?.toString() === \"pull\";\n const outs = getBakeableOutputs();\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Node ({nodeId})\n </div>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleDelete}\n >\n Delete\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleDuplicate}\n >\n Duplicate\n </button>\n {canRunPull && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleRunPull}\n >\n Run (pull)\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n {outs.length > 0 && (\n <>\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Bake</div>\n {outs.map((h) => (\n <button\n key={h}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={async () => {\n await doBake(h);\n onClose();\n }}\n >\n Bake: {h}\n </button>\n ))}\n <div className=\"h-px bg-gray-200 my-1\" />\n </>\n )}\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleCopyId}\n >\n Copy Node ID\n </button>\n </div>\n );\n}\n","import React, {\n useMemo,\n useState,\n useRef,\n useImperativeHandle,\n useCallback,\n} from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ReactFlowProvider,\n ReactFlowInstance,\n} from \"@xyflow/react\";\nimport isEqual from \"lodash/isEqual\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { NodeContextMenu } from \"./NodeContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n};\n\nexport const WorkbenchCanvas = React.forwardRef<\n WorkbenchCanvasHandle,\n {\n showValues?: boolean;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n>(({ showValues, toString, toElement, getDefaultNodeSize }, ref) => {\n const {\n wb,\n registry,\n inputsMap,\n outputsMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n\n // Keep stable references for nodes/edges to avoid unnecessary updates\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\n\n function retainStabilityById<T extends { id: string }>(\n prev: T[],\n next: T[],\n isSame: (a: T, b: T) => boolean\n ): T[] {\n if (prev.length === 0) return next;\n const map = new Map<string, T>();\n for (const p of prev) map.set(p.id, p);\n const out: T[] = new Array(next.length);\n for (let i = 0; i < next.length; i++) {\n const n = next[i];\n const p = map.get(n.id);\n out[i] = p && isSame(p, n) ? p : n;\n }\n return out;\n }\n\n const isSameNode = (a: RFNode, b: RFNode): boolean => {\n // Compare the parts that affect rendering\n const pick = (n: RFNode) => ({\n position: n.position,\n type: n.type,\n selected: n.selected,\n initialWidth: n.initialWidth,\n initialHeight: n.initialHeight,\n data: n.data && {\n typeId: n.data.typeId,\n inputHandles: n.data.inputHandles,\n outputHandles: n.data.outputHandles,\n showValues: n.data.showValues,\n inputValues: n.data.inputValues,\n outputValues: n.data.outputValues,\n status: n.data.status,\n validation: n.data.validation,\n inputConnected: n.data.inputConnected,\n },\n });\n return isEqual(pick(a), pick(b));\n };\n\n const isSameEdge = (a: RFEdge, b: RFEdge): boolean => {\n const pick = (e: RFEdge) => ({\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n selected: e.selected,\n animated: e.animated,\n style: e.style,\n label: e.label,\n type: e.type,\n });\n return isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<any>(null);\n useImperativeHandle(ref, () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView({ padding: 0.2 });\n } catch {}\n },\n }));\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const { nodeTypes, resolveNodeType } = useMemo(() => {\n // Build nodeTypes map using UI extension registry\n const ui = wb.getUI();\n const custom = new Map<string, any>();\n for (const typeId of Array.from(registry.nodes.keys())) {\n const renderer = ui.getNodeRenderer(typeId);\n if (renderer) custom.set(typeId, renderer);\n }\n\n const types: Record<string, any> = {\n \"spark-default\": DefaultNode,\n default: DefaultNode,\n };\n for (const [typeId, comp] of custom.entries()) {\n types[`spark-${typeId}`] = comp;\n }\n\n const resolver = (nodeTypeId: string): string =>\n custom.has(nodeTypeId) ? `spark-${nodeTypeId}` : \"spark-default\";\n\n return { nodeTypes: types, resolveNodeType: resolver };\n // registry is stable; ui renderers expected to be set up before mount\n }, [wb, registry]);\n\n const { nodes, edges } = useMemo(() => {\n const def = wb.export();\n const sel = wb.getSelection();\n const out = toReactFlow(def, wb.getPositions(), registry, {\n showValues,\n inputs: inputsMap,\n outputs: outputsMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(sel.nodes),\n selectedEdgeIds: new Set(sel.edges),\n getDefaultNodeSize,\n });\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) ? arr.map((h: unknown) => (h && typeof h === \"object\" && \"id\" in h ? String(h.id) : \"\")).filter(Boolean) : [];\n const handlesEqual = (a: unknown, b: unknown) => {\n const aIds = toIds(a);\n const bIds = toIds(b);\n if (aIds.length !== bIds.length) return false;\n for (let i = 0; i < aIds.length; i++) {\n if (aIds[i] !== bIds[i]) return false;\n }\n return true;\n };\n const handleChanged = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n if (!p) return false;\n const inChanged = !handlesEqual(\n p.data?.inputHandles,\n n.data?.inputHandles\n );\n const outChanged = !handlesEqual(\n p.data?.outputHandles,\n n.data?.outputHandles\n );\n return inChanged || outChanged;\n })\n .map((n) => n.id);\n\n const prevEdgeIds = new Set(prevEdgesRef.current.map((e) => e.id));\n const nextEdgeIds = new Set(out.edges.map((e) => e.id));\n const addedEdgeIds = out.edges\n .filter((e) => !prevEdgeIds.has(e.id))\n .map((e) => e.id);\n const removedEdgeIds = prevEdgesRef.current\n .filter((e) => !nextEdgeIds.has(e.id))\n .map((e) => e.id);\n const prevEdgeMap = new Map(prevEdgesRef.current.map((e) => [e.id, e]));\n const changedEdgeIds = out.edges\n .filter((e) => {\n const p = prevEdgeMap.get(e.id);\n return p ? !isSameEdge(p, e) : false;\n })\n .map((e) => e.id);\n\n if (\n addedNodeIds.length ||\n removedNodeIds.length ||\n changedNodeIds.length ||\n handleChanged.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] node updates\", {\n added: addedNodeIds,\n removed: removedNodeIds,\n changed: changedNodeIds,\n handleChanged,\n });\n }\n\n if (\n addedEdgeIds.length ||\n removedEdgeIds.length ||\n changedEdgeIds.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] edge updates\", {\n added: addedEdgeIds,\n removed: removedEdgeIds,\n changed: changedEdgeIds,\n });\n }\n } catch {}\n prevNodesRef.current = stableNodes;\n prevEdgesRef.current = stableEdges;\n return { nodes: stableNodes, edges: stableEdges };\n }, [\n showValues,\n inputsMap,\n outputsMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n ]);\n\n const throttled = useThrottledValue({ nodes, edges }, 100);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const [nodeMenuOpen, setNodeMenuOpen] = useState(false);\n const [nodeMenuPos, setNodeMenuPos] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [nodeAtMenu, setNodeAtMenu] = useState<string | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n // Determine if right-clicked over a node by hit-testing selection\n const target = (e.target as HTMLElement)?.closest(\".react-flow__node\");\n if (target) {\n // Resolve node id from data-id attribute React Flow sets\n const nodeId = target.getAttribute(\"data-id\");\n setNodeAtMenu(nodeId);\n setNodeMenuPos({ x: e.clientX, y: e.clientY });\n setNodeMenuOpen(true);\n setMenuOpen(false);\n } else {\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n setNodeMenuOpen(false);\n }\n };\n\n const addNodeAt = useCallback(\n (typeId: string, pos: { x: number; y: number }) => {\n wb.addNode({ typeId, position: pos });\n },\n [wb]\n );\n\n const onInit = useCallback((inst: ReactFlowInstance) => {\n rfInstanceRef.current = inst;\n }, []);\n\n const onCloseMenu = useCallback(() => {\n setMenuOpen(false);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setNodeMenuOpen(false);\n }, []);\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlowProvider>\n <ReactFlow\n nodes={throttled.nodes}\n edges={throttled.edges}\n nodeTypes={nodeTypes}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\n fitView\n >\n <Background\n id=\"workbench-canvas-background\"\n variant={BackgroundVariant.Dots}\n gap={12}\n size={1}\n />\n <MiniMap />\n <Controls />\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n onAdd={addNodeAt}\n onClose={onCloseMenu}\n />\n {!!nodeAtMenu && (\n <NodeContextMenu\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n onClose={onCloseNodeMenu}\n />\n )}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n );\n});\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n type NodeCategoryDescriptor,\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} from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n WebSocketTransport,\n RemoteRunner,\n type TransportConnectOptions,\n} from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\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 {\n EngineKind,\n ExecutionBackend,\n ExecutionBackendKind,\n IGraphRunner,\n TransportStatus,\n RemoteExecutionBackend,\n} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\n\n/**\n * Optional backend configuration for remote runners.\n * Allows extensions to pass connection options and custom event handlers.\n */\nexport interface BackendOptions {\n connectOptions?: TransportConnectOptions;\n onCustomEvent?: (event: any) => void;\n}\n\nfunction WorkbenchStudioCanvas({\n setRegistry,\n autoScroll,\n onAutoScrollChange,\n example,\n onExampleChange,\n engine,\n onEngineChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n overrides,\n onInit,\n onChange,\n}: {\n setRegistry: (r: Registry) => void;\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => void;\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n autoScroll: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>,\n augmentRegistry?: (r: Registry) => void\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedDesc = selectedNode\n ? registry.nodes.get(selectedNode.typeId)\n : undefined;\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\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 [hydrated, setHydrated] = useState(false);\n\n const lastAutoLaunched = useRef<string | undefined>(undefined);\n const autoLayoutRan = useRef(false);\n const canvasRef = useRef<WorkbenchCanvasHandle | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\n\n // Expose init callback with setInitialGraph helper\n const initCalled = useRef(false);\n useEffect(() => {\n if (initCalled.current) return;\n initCalled.current = true;\n if (!onInit) return;\n const setInitialGraph = async (\n d: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => {\n await wb.load(d);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n };\n onInit({ wb, runner, setInitialGraph });\n }, [onInit, wb, runner, runAutoLayout, registry, setRegistry]);\n\n // Expose change callback on graph/value changes\n useEffect(() => {\n if (!onChange) return;\n const off1 = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off2 = runner.on(\"value\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n off1();\n off2();\n };\n }, [wb, runner, onChange]);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n const ex = examples.find((e) => e.id === key) ?? examples[0];\n if (!ex) return;\n const { registry: r, def } = await ex.load();\n // Keep registry consistent with backend:\n // - For local backend, allow example to provide its own registry\n // - For remote backend, NEVER overwrite the hydrated remote registry\n if (backendKind === \"local\") {\n if (r) {\n setRegistry(r);\n wb.setRegistry(r);\n }\n } else {\n // For remote backends, rely on the backend hydration effect to keep\n // the registry in sync. Do not mutate the registry here.\n }\n await wb.load(def);\n // Build a local runtime so seeded defaults are visible pre-run\n runner.build(wb.export());\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [\n runner,\n wb,\n onExampleChange,\n runAutoLayout,\n examples,\n setRegistry,\n backendKind,\n ]\n );\n\n const downloadGraph = useCallback(() => {\n try {\n const def = wb.export();\n const inputs = runner.getInputs(def);\n const payload = { def, inputs };\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 const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const ts = `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(\n d.getHours()\n )}${pad(d.getMinutes())}`;\n a.href = url;\n a.download = `spark-graph-${ts}.json`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\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 // Support both Graph and Snapshot payloads\n const isSnapshot =\n parsed &&\n typeof parsed === \"object\" &&\n (parsed.def || parsed.inputs || parsed.outputs || parsed.environment);\n if (isSnapshot) {\n const def = parsed.def;\n const positions = parsed.positions || {};\n const environment = parsed.environment || {};\n const inputs = parsed.inputs || {};\n if (def && runner.isRunning()) {\n // Remote exact restore path\n await runner.applySnapshotFull({\n def,\n environment,\n inputs,\n outputs: parsed.outputs || {},\n });\n await wb.load(def);\n if (positions && typeof positions === \"object\")\n wb.setPositions(positions);\n } else if (!runner.isRunning()) {\n alert(\"Engine is not running\");\n } else {\n alert(\"Graph definition is empty\");\n }\n } else {\n const def = parsed?.def ?? parsed;\n const inputs = parsed?.inputs ?? {};\n await wb.load(def);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(\n inputs as Record<string, Record<string, unknown>>\n )) {\n try {\n runner.setInputs(nodeId, map);\n } catch {}\n }\n }\n }\n runAutoLayout();\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, runAutoLayout]\n );\n\n const triggerUpload = useCallback(() => {\n uploadInputRef.current?.click();\n }, []);\n\n const hydrateFromBackend = useCallback(\n async (kind: ExecutionBackendKind, base: string) => {\n try {\n const transport =\n kind === \"remote-http\"\n ? new HttpPollingTransport(base)\n : new WebSocketTransport(base);\n await transport.connect();\n const rr = new RemoteRunner(transport);\n const desc = await rr.describeRegistry();\n const r = new Registry();\n\n // Types\n for (const t of desc.types) {\n if (t.options) {\n r.registerEnum({\n id: t.id,\n options: t.options,\n bakeTarget: t.bakeTarget,\n });\n } else {\n r.registerType({\n id: t.id,\n displayName: t.displayName,\n validate: (_v) => true,\n bakeTarget: t.bakeTarget,\n });\n }\n }\n // Categories: create placeholders for display name\n for (const c of desc.categories || []) {\n // If you later expose real category descriptors, register them here\n // For now, rely on ComputeCategory for behavior\n const category: NodeCategoryDescriptor<() => void, {}> = {\n id: c.id,\n displayName: c.displayName,\n createRuntime: () => ({\n async onInputsChanged() {},\n }),\n policy: { asyncConcurrency: \"switch\" },\n };\n r.categories.register(category);\n }\n // Coercions (client-side no-op to satisfy validation) if provided\n for (const c of desc.coercions) {\n if (c.async) {\n r.registerAsyncCoercion(c.from, c.to, async (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n } else {\n r.registerCoercion(c.from, c.to, (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n }\n }\n // Nodes (use no-op impl for compute)\n for (const n of desc.nodes) {\n r.registerNode({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n impl: () => {},\n });\n }\n setRegistry(r);\n wb.setRegistry(r);\n await transport.close();\n } catch (err) {\n console.error(\"Failed to hydrate registry from backend:\", err);\n }\n },\n [setRegistry, wb]\n );\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\", (s) => setTransportStatus(s));\n return () => off();\n }, [runner]);\n\n useEffect(() => {\n if (!engine) return;\n if (runner.isRunning()) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n const d = wb.export();\n if (!d.nodes || d.nodes.length === 0) return;\n if (lastAutoLaunched.current === engine) return;\n try {\n runner.launch(d, { engine: engine as EngineKind });\n lastAutoLaunched.current = engine;\n } catch {\n // ignore\n }\n }, [engine, runner, wb, backendKind]);\n\n // When switching to remote backend, auto-hydrate registry from backend\n useEffect(() => {\n let hydrate: Promise<void> | undefined;\n if (backendKind === \"remote-http\" && httpBaseUrl) {\n hydrate = hydrateFromBackend(\"remote-http\", httpBaseUrl);\n } else if (backendKind === \"remote-ws\" && wsUrl) {\n hydrate = hydrateFromBackend(\"remote-ws\", wsUrl);\n }\n if (hydrate) {\n hydrate.then(() => {\n setHydrated(true);\n });\n }\n }, [backendKind, httpBaseUrl, wsUrl, hydrateFromBackend, setHydrated]);\n\n useEffect(() => {\n if (autoLayoutRan.current) return;\n if (backendKind !== \"local\" && !hydrated) return;\n const cur = wb.export();\n const positions = wb.getPositions();\n const allMissing = cur.nodes.every((n) => !positions[n.nodeId]);\n if (allMissing) {\n autoLayoutRan.current = true;\n runAutoLayout();\n }\n }, [wb, runAutoLayout, backendKind, hydrated]);\n\n const baseSetInput = useCallback(\n (handle: string, raw: string | number | undefined) => {\n if (!selectedNodeId) return;\n // If selected input is wired (has inbound edge), ignore user input to respect runtime value\n const isLinked = def.edges.some(\n (e) => e.target.nodeId === selectedNodeId && e.target.handle === handle\n );\n if (isLinked) return;\n const typeId = selectedDesc?.inputs?.[handle];\n let value: unknown = raw;\n const parseArray = <T,>(s: string, map: (x: string) => T): T[] => {\n const str = String(s).trim();\n try {\n const parsed = JSON.parse(str);\n if (Array.isArray(parsed)) return parsed.map((x) => map(String(x)));\n } catch {}\n if (!str) return [] as T[];\n return str\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n .map(map);\n };\n\n switch (typeId) {\n case \"base.float\": {\n const n = Number(raw);\n value = Number.isFinite(n) ? n : 0;\n break;\n }\n case \"base.float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"base.bool\": {\n value = raw === \"true\" || raw === \"1\" ? true : false;\n break;\n }\n case \"base.bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(x));\n break;\n }\n case \"base.string\": {\n value = String(raw);\n break;\n }\n case \"base.string[]\": {\n value = parseArray(String(raw), (x) => String(x));\n break;\n }\n case \"base.vec3\": {\n const arr = parseArray(String(raw), (x) => Number(x));\n value = [arr[0] ?? 0, arr[1] ?? 0, arr[2] ?? 0];\n break;\n }\n case \"base.vec3[]\": {\n try {\n const parsed = JSON.parse(String(raw));\n if (Array.isArray(parsed)) {\n value = parsed.map((v) => [\n Number(v?.[0] ?? 0),\n Number(v?.[1] ?? 0),\n Number(v?.[2] ?? 0),\n ]);\n break;\n }\n } catch {}\n // fallback CSV triples: \"x1,y1,z1; x2,y2,z2\"\n value = String(raw)\n .split(\";\")\n .map((seg) => seg.trim())\n .filter(Boolean)\n .map((seg) => seg.split(\",\").map((n) => Number(n.trim())))\n .map((a) => [a[0] ?? 0, a[1] ?? 0, a[2] ?? 0]);\n break;\n }\n default: {\n // fallback to string\n value = raw;\n }\n }\n runner.setInput(selectedNodeId, handle, value);\n },\n [selectedNodeId, def.edges, selectedDesc, runner]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry,\n });\n }\n return baseSetInput;\n }, [overrides, baseSetInput, runner, selectedNodeId, registry]);\n\n const baseToString = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n // Normalize typed wrapper\n if (isTypedOutput(value)) {\n return baseToString(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value)\n );\n }\n const pre = preformatValueForDisplay(typeId, value, registry);\n if (pre !== undefined) return pre;\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"url\" in value &&\n typeof value.url === \"string\"\n ) {\n const title =\n \"title\" in value && typeof value.title === \"string\"\n ? value.title\n : \"\";\n const url = String(value.url || \"\");\n // value.ts handles data URL formatting\n return title || url.slice(0, 32) + (url.length > 32 ? \"…\" : \"\");\n }\n if (typeId && typeId.startsWith(\"enum:\")) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n return label ?? String(n);\n }\n const round4 = (n: number) => Math.round(Number(n) * 10000) / 10000;\n if (typeId === \"base.vec3\" && Array.isArray(value)) {\n const a = value as unknown[];\n return [\n round4(Number(a[0] ?? 0)),\n round4(Number(a[1] ?? 0)),\n round4(Number(a[2] ?? 0)),\n ].join(\",\");\n }\n const stringifyRounded = (v: unknown) => {\n try {\n return JSON.stringify(v, (_k, val) =>\n typeof val === \"number\" ? round4(val) : val\n );\n } catch {\n return String(v);\n }\n };\n if (\n typeId?.endsWith(\"[]\") ||\n Array.isArray(value) ||\n (typeof value === \"object\" && value !== null)\n ) {\n return stringifyRounded(value);\n }\n if (typeof value === \"number\") {\n const rounded = Math.round(Number(value) * 10000) / 10000;\n return String(rounded);\n }\n return String(value);\n },\n [registry]\n );\n\n const baseToElement = useCallback(\n (typeId?: string, value?: unknown) => {\n return (\n <span className=\"ml-1 opacity-60\">{baseToString(typeId, value)}</span>\n );\n },\n [baseToString]\n );\n\n const toString = useMemo(() => {\n if (overrides?.toString)\n return overrides.toString(baseToString, { registry });\n return baseToString;\n }, [overrides, baseToString, registry]);\n\n // Optional: toElement (not currently consumed by core UI)\n // Consumers can access it by passing through their own node renderers.\n const toElement = useMemo(() => {\n if (overrides?.toElement)\n return overrides.toElement(baseToElement, { registry });\n return baseToElement;\n }, [overrides, baseToElement, registry]);\n\n return (\n <div className=\"w-full h-screen flex flex-col\">\n <div className=\"p-2 border-b border-gray-300 flex gap-2 items-center\">\n {runner.isRunning() ? (\n <span className=\"ml-2 text-sm text-green-700\">\n Running: {runner.getRunningEngine()}\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 <label className=\"ml-2 text-sm\">Example:</label>\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={runner.isRunning()}\n title={\n runner.isRunning()\n ? \"Stop engine before switching example\"\n : 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 <label className=\"ml-2 text-sm\">Backend:</label>\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={runner.isRunning()}\n title={\n runner.isRunning()\n ? \"Stop engine before switching backend\"\n : 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=\"ml-2 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=\"ml-2 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={runner.getRunningEngine() ?? engine ?? \"\"}\n onChange={(e) => {\n const kind = e.target.value || undefined;\n onEngineChange?.(kind);\n }}\n >\n <option value=\"\">Select Engine…</option>\n <option value=\"push\">Push</option>\n <option value=\"batched\">Batched</option>\n <option value=\"pull\">Pull</option>\n <option value=\"hybrid\">Hybrid</option>\n <option value=\"step\">Step</option>\n </select>\n {runner.getRunningEngine() === \"step\" && (\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => runner.step()}\n disabled={!runner.isRunning()}\n >\n Step\n </button>\n )}\n {runner.getRunningEngine() === \"batched\" && (\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => runner.flush()}\n disabled={!runner.isRunning()}\n >\n Flush\n </button>\n )}\n {runner.isRunning() ? (\n <button\n className=\"border rounded px-2 py-1.5 text-red-700 border-red-600 flex items-center gap-1\"\n onClick={() => runner.dispose()}\n title=\"Stop engine\"\n >\n <StopIcon size={14} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Stop</span>\n </button>\n ) : (\n <button\n className=\"border rounded px-2 py-1.5 text-green-700 border-green-600 flex items-center gap-1 disabled:text-gray-400 disabled:border-gray-300\"\n onClick={() => {\n const kind = engine as EngineKind | undefined;\n if (!kind) return alert(\"Select an engine first.\");\n try {\n runner.launch(wb.export(), { engine: kind });\n } catch (err: unknown) {\n const message =\n err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n disabled={!engine}\n title={engine ? \"Start engine\" : \"Select an engine first\"}\n >\n <PlayIcon size={14} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n )}\n <button\n className=\"border border-gray-300 rounded px-2 py-1.5\"\n onClick={runAutoLayout}\n >\n Auto Layout\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => canvasRef.current?.fitView?.()}\n title=\"Fit View\"\n >\n Fit View\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={downloadGraph}\n >\n Download Graph\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={async () => {\n try {\n const def = wb.export();\n const positions = wb.getPositions();\n const snapshot = await runner.snapshotFull();\n const payload = {\n ...snapshot,\n def,\n positions,\n schemaVersion: 1,\n };\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 const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const ts = `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(\n d.getHours()\n )}${pad(d.getMinutes())}`;\n a.href = url;\n a.download = `spark-snapshot-${ts}.json`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n >\n Download Snapshot\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=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={triggerUpload}\n >\n Upload Graph/Snapshot\n </button>\n <label className=\"ml-2 flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={debug}\n onChange={(e) => onDebugChange(e.target.checked)}\n />\n <span>Debug events</span>\n </label>\n <label className=\"ml-2 flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={showValues}\n onChange={(e) => onShowValuesChange(e.target.checked)}\n />\n <span>Show values in nodes</span>\n </label>\n </div>\n <div className=\"flex flex-1 min-h-0\">\n <div className=\"flex-1 min-w-0\">\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toString={toString}\n toElement={toElement}\n contextPanel={overrides?.contextPanel}\n />\n </div>\n </div>\n );\n}\n\nexport function WorkbenchStudio({\n engine,\n onEngineChange,\n example,\n onExampleChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n autoScroll,\n onAutoScrollChange,\n backendOptions,\n overrides,\n onInit,\n onChange,\n}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n showValues: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n autoScroll: boolean;\n onAutoScrollChange: (v: boolean) => void;\n backendOptions?: BackendOptions;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n const runner = useMemo(() => {\n if (backendKind === \"remote-http\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n ...(backendOptions?.connectOptions && {\n connectOptions: backendOptions.connectOptions,\n }),\n ...(backendOptions?.onCustomEvent && {\n onCustomEvent: backendOptions.onCustomEvent,\n }),\n };\n return new RemoteGraphRunner(registry, backend);\n }\n\n if (backendKind === \"remote-ws\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n ...(backendOptions?.connectOptions && {\n connectOptions: backendOptions.connectOptions,\n }),\n ...(backendOptions?.onCustomEvent && {\n onCustomEvent: backendOptions.onCustomEvent,\n }),\n };\n return new RemoteGraphRunner(registry, backend);\n }\n\n return new LocalGraphRunner(registry);\n }, [registry, backendKind, httpBaseUrl, wsUrl, backendOptions]);\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wb, runner, overrides]);\n\n return (\n <WorkbenchProvider\n wb={wb}\n runner={runner}\n registry={registry}\n setRegistry={setRegistry}\n overrides={overrides}\n >\n <WorkbenchStudioCanvas\n setRegistry={setRegistry}\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n engine={engine}\n onEngineChange={onEngineChange}\n backendKind={backendKind}\n onBackendKindChange={(v) => {\n if (runner.isRunning()) runner.dispose();\n onBackendKindChange(v);\n }}\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":["GraphBuilder","PushEngine","BatchedEngine","PullEngine","HybridEngine","StepEngine","HttpPollingTransport","WebSocketTransport","RemoteRunner","useCallback","useState","useEffect","useRef","useMemo","isTypedOutput","getTypedOutputTypeId","getTypedOutputValue","isInputPrivate","Position","getInputTypeId","createContext","useContext","_jsx","XCircleIcon","WarningCircleIcon","_jsxs","_Fragment","Handle","useUpdateNodeInternals","ArrowClockwiseIcon","useReactFlow","useImperativeHandle","ReactFlowProvider","ReactFlow","Background","BackgroundVariant","MiniMap","Controls","createSimpleGraphRegistry","createSimpleGraphDef","createAsyncGraphRegistry","createAsyncGraphDef","createProgressGraphRegistry","createProgressGraphDef","createValidationGraphRegistry","createValidationGraphDef","Registry","PlugsConnectedIcon","ClockClockwiseIcon","WifiHighIcon","WifiSlashIcon","StopIcon","PlayIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/hooks.ts","../../src/misc/value.ts","../../src/misc/constants.ts","../../src/misc/layout.ts","../../src/misc/mapping.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/IssueBadge.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/misc/NodeHandles.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/NodeContextMenu.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/WorkbenchStudio.tsx"],"sourcesContent":["export type NodeRenderer = unknown; // bound by adapter (React component or CLI fn)\nexport type PortRenderer = unknown;\nexport type EdgeRenderer = unknown;\nexport type InspectorRenderer = unknown;\nexport type PaletteRenderer = unknown;\nexport type ToolbarRenderer = unknown;\nexport type ContextMenuRenderer = unknown;\nexport type MiniMapRenderer = unknown;\nexport type IconProvider = (nodeTypeId: string) => unknown;\n\nexport interface UIExtensionRegistry {\n registerNodeRenderer(nodeTypeId: string, renderer: NodeRenderer): this;\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined;\n\n registerPortRenderer(dataTypeId: string, renderer: PortRenderer): this;\n getPortRenderer(dataTypeId: string): PortRenderer | undefined;\n\n registerEdgeRenderer(typeId: string, renderer: EdgeRenderer): this;\n getEdgeRenderer(typeId: string): EdgeRenderer | undefined;\n\n setInspector(renderer: InspectorRenderer): this;\n getInspector(): InspectorRenderer | undefined;\n\n setPalette(renderer: PaletteRenderer): this;\n getPalette(): PaletteRenderer | undefined;\n\n setToolbar(renderer: ToolbarRenderer): this;\n getToolbar(): ToolbarRenderer | undefined;\n\n setContextMenu(renderer: ContextMenuRenderer): this;\n getContextMenu(): ContextMenuRenderer | undefined;\n\n setMiniMap(renderer: MiniMapRenderer): this;\n getMiniMap(): MiniMapRenderer | undefined;\n\n setIconProvider(provider: IconProvider): this;\n getIconProvider(): IconProvider | undefined;\n}\n\nexport class DefaultUIExtensionRegistry implements UIExtensionRegistry {\n private nodeRenderers = new Map<string, NodeRenderer>();\n private portRenderers = new Map<string, PortRenderer>();\n private edgeRenderers = new Map<string, EdgeRenderer>();\n private inspector?: InspectorRenderer;\n private palette?: PaletteRenderer;\n private toolbar?: ToolbarRenderer;\n private contextMenu?: ContextMenuRenderer;\n private miniMap?: MiniMapRenderer;\n private iconProvider?: IconProvider;\n\n registerNodeRenderer(nodeTypeId: string, renderer: NodeRenderer): this {\n this.nodeRenderers.set(nodeTypeId, renderer);\n return this;\n }\n getNodeRenderer(nodeTypeId: string): NodeRenderer | undefined {\n return this.nodeRenderers.get(nodeTypeId);\n }\n\n registerPortRenderer(dataTypeId: string, renderer: PortRenderer): this {\n this.portRenderers.set(dataTypeId, renderer);\n return this;\n }\n getPortRenderer(dataTypeId: string): PortRenderer | undefined {\n return this.portRenderers.get(dataTypeId);\n }\n\n registerEdgeRenderer(typeId: string, renderer: EdgeRenderer): this {\n this.edgeRenderers.set(typeId, renderer);\n return this;\n }\n getEdgeRenderer(typeId: string): EdgeRenderer | undefined {\n return this.edgeRenderers.get(typeId);\n }\n\n setInspector(renderer: InspectorRenderer): this {\n this.inspector = renderer;\n return this;\n }\n getInspector(): InspectorRenderer | undefined {\n return this.inspector;\n }\n\n setPalette(renderer: PaletteRenderer): this {\n this.palette = renderer;\n return this;\n }\n getPalette(): PaletteRenderer | undefined {\n return this.palette;\n }\n\n setToolbar(renderer: ToolbarRenderer): this {\n this.toolbar = renderer;\n return this;\n }\n getToolbar(): ToolbarRenderer | undefined {\n return this.toolbar;\n }\n\n setContextMenu(renderer: ContextMenuRenderer): this {\n this.contextMenu = renderer;\n return this;\n }\n getContextMenu(): ContextMenuRenderer | undefined {\n return this.contextMenu;\n }\n\n setMiniMap(renderer: MiniMapRenderer): this {\n this.miniMap = renderer;\n return this;\n }\n getMiniMap(): MiniMapRenderer | undefined {\n return this.miniMap;\n }\n\n setIconProvider(provider: IconProvider): this {\n this.iconProvider = provider;\n return this;\n }\n getIconProvider(): IconProvider | undefined {\n return this.iconProvider;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n\n constructor(args: {\n ui: UIExtensionRegistry;\n layout?: LayoutEngine;\n storage?: Storage;\n serializer?: Serializer;\n }) {\n this.ui = args.ui;\n this.layout = args.layout;\n this.storage = args.storage;\n this.serializer = args.serializer;\n }\n\n abstract load(def: GraphDefinition): Promise<void>;\n abstract export(): GraphDefinition;\n abstract validate(): ValidationResult;\n abstract addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n params?: Record<string, unknown>;\n }\n ): string;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }\n ): string;\n abstract disconnect(edgeId: string): void;\n abstract updateParams(nodeId: string, params: Record<string, unknown>): void;\n\n abstract on<K extends WorkbenchEventName>(\n event: K,\n handler: (e: WorkbenchEventMap[K]) => void\n ): () => void;\n\n // Expose UI registry to adapters (React Flow, CLI) to allow overrides\n getUI(): UIExtensionRegistry {\n return this.ui;\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder, Registry } from \"@bian-womp/spark-graph\";\nimport { AbstractWorkbench } from \"./AbstractWorkbench\";\nimport type {\n ValidationResult,\n WorkbenchEventName,\n WorkbenchEventMap,\n WorkbenchEventListener,\n} from \"./contracts\";\n\nexport class InMemoryWorkbench extends AbstractWorkbench {\n private def: GraphDefinition = { nodes: [], edges: [] };\n private positions: Record<string, { x: number; y: number }> = {};\n private listeners = new Map<\n WorkbenchEventName,\n Set<WorkbenchEventListener<WorkbenchEventName>>\n >();\n private registry?: Registry;\n private selection: { nodes: string[]; edges: string[] } = {\n nodes: [],\n edges: [],\n };\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n async load(def: GraphDefinition): Promise<void> {\n this.def = { nodes: [...def.nodes], edges: [...def.edges] };\n if (this.layout) {\n const { positions } = await this.layout.layout(this.def);\n this.positions = positions;\n }\n this.emit(\"graphChanged\", { def: this.def });\n this.refreshValidation();\n }\n\n export(): GraphDefinition {\n return this.def;\n }\n\n refreshValidation(): void {\n this.emit(\"validationChanged\", this.validate());\n }\n\n validate(): ValidationResult {\n if (this.registry) {\n const builder = new GraphBuilder(this.registry);\n const report = builder.validate(this.def);\n return report;\n }\n const issues: ValidationResult[\"issues\"] = [];\n const nodeIds = new Set<string>();\n for (const n of this.def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n });\n } else nodeIds.add(n.nodeId);\n }\n const edgeIds = new Set<string>();\n for (const e of this.def.edges) {\n if (edgeIds.has(e.id)) {\n issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n });\n } else edgeIds.add(e.id);\n }\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n addNode(\n node: Omit<GraphNodeDefinition, \"nodeId\"> & {\n nodeId?: string;\n position?: { x: number; y: number };\n }\n ): string {\n const id = node.nodeId ?? this.generateId(\"n\");\n this.def.nodes.push({\n nodeId: id,\n typeId: node.typeId,\n params: node.params,\n });\n if (node.position) this.positions[id] = node.position;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"addNode\", nodeId: id },\n });\n this.refreshValidation();\n return id;\n }\n\n removeNode(nodeId: string): void {\n this.def.nodes = this.def.nodes.filter((n) => n.nodeId !== nodeId);\n this.def.edges = this.def.edges.filter(\n (e) => e.source.nodeId !== nodeId && e.target.nodeId !== nodeId\n );\n delete this.positions[nodeId];\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"removeNode\", nodeId },\n });\n this.refreshValidation();\n }\n\n connect(edge: Omit<GraphEdgeDefinition, \"id\"> & { id?: string }): string {\n const id = edge.id ?? this.generateId(\"e\");\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 });\n this.refreshValidation();\n return id;\n }\n\n disconnect(edgeId: string): void {\n this.def.edges = this.def.edges.filter((e) => e.id !== edgeId);\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"disconnect\", edgeId },\n });\n this.emit(\"validationChanged\", this.validate());\n }\n\n updateEdgeType(edgeId: string, typeId: string | undefined): void {\n const e = this.def.edges.find((x) => x.id === edgeId);\n if (!e) return;\n if (!typeId) delete (e as any).typeId;\n else e.typeId = typeId as any;\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateEdgeType\", edgeId, typeId },\n });\n this.refreshValidation();\n }\n\n updateParams(nodeId: string, params: Record<string, unknown>): void {\n const n = this.def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return;\n n.params = { ...(n.params ?? {}), ...params };\n this.emit(\"graphChanged\", {\n def: this.def,\n change: { type: \"updateParams\", nodeId },\n });\n }\n\n // Position and selection APIs for React Flow bridge\n setPosition(nodeId: string, pos: { x: number; y: number }): void {\n this.positions[nodeId] = pos;\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNode\", nodeId, pos },\n });\n }\n\n setPositions(map: Record<string, { x: number; y: number }>): void {\n this.positions = { ...map };\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"moveNodes\" },\n });\n }\n\n getPositions(): Record<string, { x: number; y: number }> {\n return { ...this.positions };\n }\n\n setSelection(sel: { nodes: string[]; edges: string[] }): void {\n this.selection = { nodes: [...sel.nodes], edges: [...sel.edges] };\n this.emit(\"selectionChanged\", this.selection);\n this.emit(\"graphUiChanged\", {\n def: this.def,\n change: { type: \"selection\" },\n });\n }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n on<K extends WorkbenchEventName>(\n event: K,\n handler: WorkbenchEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<WorkbenchEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends WorkbenchEventName>(\n event: K,\n payload: WorkbenchEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n private generateId(prefix: string): string {\n return `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n }\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { Serializer, Storage } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface CLIAdapterDeps {\n storage?: Storage;\n serializer?: Serializer;\n}\n\nexport class CLIWorkbench {\n constructor(\n private wb: InMemoryWorkbench,\n private deps: CLIAdapterDeps = {}\n ) {}\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n print(\n def?: GraphDefinition,\n options?: {\n detail?: boolean;\n values?: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n };\n }\n ) {\n const d = def ?? this.wb.export();\n const detail = !!options?.detail;\n const lines: string[] = [];\n lines.push(`Nodes (${d.nodes.length})`);\n for (const n of d.nodes) {\n if (!detail) {\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n } else {\n const reg = this.wb[\"registry\"];\n const desc = reg?.nodes?.get(n.typeId);\n const inputs = Object.entries(desc?.inputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const outputs = Object.entries(desc?.outputs ?? {})\n .map(([h, t]) => `${h}:${t}`)\n .join(\", \");\n const params = n.params ? JSON.stringify(n.params) : \"{}\";\n lines.push(` - ${n.nodeId}: ${n.typeId}`);\n lines.push(` inputs: ${inputs || \"-\"}`);\n lines.push(` outputs: ${outputs || \"-\"}`);\n lines.push(` params: ${params}`);\n const inVals = options?.values?.inputs?.[n.nodeId];\n const outVals = options?.values?.outputs?.[n.nodeId];\n if (inVals && Object.keys(inVals).length > 0)\n lines.push(` inputValues: ${JSON.stringify(inVals)}`);\n if (outVals && Object.keys(outVals).length > 0)\n lines.push(` outputValues: ${JSON.stringify(outVals)}`);\n }\n }\n lines.push(`Edges (${d.edges.length})`);\n for (const e of d.edges) {\n lines.push(\n ` - ${e.id}: ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle} (${e.typeId})`\n );\n }\n return lines.join(\"\\n\");\n }\n\n get actions() {\n return this.wb;\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport {\n IGraphRunner,\n RunnerEventName,\n type RunnerEventListener,\n EngineKind,\n ExecutionBackend,\n RunnerOptions,\n RunnerEventMap,\n} from \"./IGraphRunner\";\n\nexport abstract class AbstractGraphRunner implements IGraphRunner {\n protected runtime?: GraphRuntime;\n protected engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n protected stagedInputs: Record<string, Record<string, unknown>> = {};\n protected runningKind?: EngineKind;\n\n constructor(\n protected registry: Registry,\n protected backend: ExecutionBackend\n ) {}\n\n abstract build(def: GraphDefinition): void;\n abstract update(def: GraphDefinition): void;\n abstract step(): Promise<void>;\n abstract computeNode(nodeId: string): Promise<void>;\n abstract flush(): void;\n abstract getOutputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n abstract getInputs(\n def: GraphDefinition\n ): Record<string, Record<string, unknown>>;\n\n abstract setEnvironment(\n env: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): void;\n\n abstract getEnvironment(): Record<string, unknown> | undefined;\n\n abstract snapshotFull(): Promise<RuntimeSnapshotFull>;\n\n abstract applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void>;\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n if (this.engine) {\n throw new Error(\"Engine already running. Stop the current engine first.\");\n }\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n this.stagedInputs[nodeId][handle] = value;\n if (this.engine) {\n this.engine.setInput(nodeId, handle, value);\n } else {\n // Emit a value event so UI updates even when engine isn't running\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.engine?.triggerExternal(nodeId, event);\n }\n\n // Batch update multiple inputs on a node and trigger a single run\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n if (!inputs) return;\n if (!this.stagedInputs[nodeId]) this.stagedInputs[nodeId] = {};\n Object.assign(this.stagedInputs[nodeId], inputs);\n if (this.engine) {\n // Running: set all inputs\n this.engine.setInputs(nodeId, inputs);\n } else {\n // Not running: emit a single synthetic value event per handle; UI will coalesce\n console.warn(\"Engine does not exists\");\n for (const [handle, value] of Object.entries(inputs)) {\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n }\n\n async whenIdle(): Promise<void> {\n await this.engine?.whenIdle();\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 {\n this.engine?.dispose();\n this.engine = undefined;\n this.runtime?.dispose();\n this.runtime = undefined;\n if (this.runningKind) {\n this.runningKind = undefined;\n this.emit(\"status\", { running: false, engine: undefined });\n }\n }\n\n isRunning(): boolean {\n return !!this.engine;\n }\n\n getRunningEngine(): EngineKind | undefined {\n return this.runningKind;\n }\n}\n","import {\n Registry,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n} from \"@bian-womp/spark-graph\";\nimport type {\n GraphDefinition,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\nimport type { RunnerOptions } from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\nexport class LocalGraphRunner extends AbstractGraphRunner {\n constructor(registry: Registry) {\n super(registry, { kind: \"local\" });\n this.emit(\"transport\", { state: \"local\" });\n }\n\n build(def: GraphDefinition): void {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n // Signal UI that freshly built graph should be considered invalidated\n this.emit(\"invalidate\", { reason: \"graph-built\" });\n }\n\n update(def: GraphDefinition): void {\n if (!this.runtime) return;\n // Prevent mid-run churn while wiring changes are applied\n this.runtime.pause();\n this.runtime.update(def, this.registry);\n this.runtime.resume();\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n this.build(def);\n if (!this.runtime) throw new Error(\"Runtime not built\");\n const rt = this.runtime;\n switch (opts.engine) {\n case \"push\":\n this.engine = new PushEngine(rt);\n break;\n case \"batched\":\n this.engine = new BatchedEngine(rt, {\n flushIntervalMs: opts.batched?.flushIntervalMs ?? 0,\n });\n break;\n case \"pull\":\n this.engine = new PullEngine(rt);\n break;\n case \"hybrid\":\n this.engine = new HybridEngine(rt, {\n windowMs: opts.hybrid?.windowMs ?? 250,\n batchThreshold: opts.hybrid?.batchThreshold ?? 3,\n });\n break;\n case \"step\":\n this.engine = new StepEngine(rt);\n break;\n default:\n throw new Error(\"Unknown engine kind\");\n }\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();\n this.runningKind = opts.engine;\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n }\n\n async step(): Promise<void> {\n const eng = this.engine;\n if (eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n const eng = this.engine;\n if (eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n flush(): void {\n const eng = this.engine;\n if (eng instanceof BatchedEngine) eng.flush();\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n if (!this.runtime) return out;\n for (const n of def.nodes) {\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(desc?.outputs ?? {});\n for (const h of handles) {\n const v = this.runtime.getOutput(n.nodeId, h);\n if (v !== undefined) {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = v;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n const merged = { ...runtimeInputs, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n setEnvironment = (\n env: Record<string, unknown>,\n opts?: { merge?: boolean }\n ) => {\n if (!this.runtime) return;\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 };\n\n getEnvironment = (): Record<string, unknown> | undefined => {\n return this.runtime?.getEnvironment?.();\n };\n\n async snapshotFull() {\n const def = undefined as any; // UI will supply def/positions on download for local\n const inputs = this.getInputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const outputs = this.getOutputs(\n this.runtime\n ? {\n nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({\n nodeId: id,\n typeId: \"\",\n })),\n edges: [],\n }\n : { nodes: [], edges: [] }\n );\n const environment = this.getEnvironment() || {};\n return { def, environment, inputs, outputs };\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull) {\n if (payload.def) this.build(payload.def);\n this.setEnvironment?.(payload.environment || {}, { merge: false });\n // Hydrate via runtime for exact restore and re-emit\n this.runtime?.hydrate(\n { inputs: payload.inputs || {}, outputs: payload.outputs || {} },\n { reemit: true }\n );\n }\n\n dispose(): void {\n super.dispose();\n this.runtime = undefined;\n this.emit(\"transport\", { state: \"local\" });\n }\n}\n","import type {\n RuntimeSnapshotFull,\n GraphDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Engine, Registry } from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n RemoteRunner,\n WebSocketTransport,\n} from \"@bian-womp/spark-remote\";\nimport {\n RemoteExecutionBackend,\n RemoteExecutionBackendKind,\n RemoteTransport,\n RunnerOptions,\n} from \"./IGraphRunner\";\nimport { AbstractGraphRunner } from \"./AbstractGraphRunner\";\n\nexport class RemoteGraphRunner extends AbstractGraphRunner {\n protected lastDef?: GraphDefinition;\n protected runner?: RemoteRunner;\n protected transport?: RemoteTransport;\n\n valueCache = new Map<\n string,\n { io: \"input\" | \"output\"; value: unknown; runtimeTypeId?: string }\n >();\n listenersBound = false;\n private registryFetched = false;\n private registryFetching = false;\n private readonly MAX_REGISTRY_FETCH_ATTEMPTS = 3;\n private readonly INITIAL_RETRY_DELAY_MS = 1000; // 1 second\n\n constructor(registry: Registry, backend: RemoteExecutionBackend) {\n super(registry, backend);\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.ensureRemoteRunner().then(async (runner) => {\n const eng = runner.getEngine();\n if (!this.listenersBound) {\n eng.on(\"invalidate\", async (e) => {\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) 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 console.warn(\"Unsupported operation for remote runner\");\n }\n\n update(def: GraphDefinition): void {\n // Remote: forward update; ignore errors (fire-and-forget)\n this.ensureRemoteRunner().then(async (runner) => {\n try {\n await runner.update(def);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n this.lastDef = def;\n } catch {}\n });\n }\n\n launch(def: GraphDefinition, opts: RunnerOptions): void {\n super.launch(def, opts);\n // Remote: build remotely then launch\n this.ensureRemoteRunner().then(async (runner) => {\n await runner.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 runner.snapshot();\n for (const [nodeId, map] of Object.entries(snap.inputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"input\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n }\n for (const [nodeId, map] of Object.entries(snap.outputs || {})) {\n for (const [handle, value] of Object.entries(map || {})) {\n this.valueCache.set(`${nodeId}.${handle}`, {\n io: \"output\",\n value,\n });\n this.emit(\"value\", { nodeId, handle, value, io: \"output\" });\n }\n }\n } catch {\n console.error(\"Failed to hydrate remote inputs/outputs\");\n }\n const eng = runner.getEngine();\n if (!this.listenersBound) {\n eng.on(\"value\", (e) => {\n this.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n runtimeTypeId: e.runtimeTypeId,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e) => this.emit(\"stats\", e));\n this.listenersBound = true;\n }\n this.engine = eng as Engine;\n this.engine.launch();\n this.runningKind = \"push\";\n this.emit(\"status\", { running: true, engine: this.runningKind });\n for (const [nodeId, map] of Object.entries(this.stagedInputs)) {\n this.engine.setInputs(nodeId, map);\n }\n });\n }\n\n async step(): Promise<void> {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n async computeNode(nodeId: string): Promise<void> {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n flush(): void {\n console.warn(\"Unsupported operation for remote runner\");\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.ensureRemoteRunner().then(async (runner) => {\n try {\n await runner.getEngine().triggerExternal(nodeId, event);\n } catch {}\n });\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const runner = await this.ensureRemoteRunner();\n try {\n return await runner.coerce(from, to, value);\n } catch {\n return value;\n }\n }\n\n async snapshotFull() {\n const runner = await this.ensureRemoteRunner();\n try {\n return await runner.snapshotFull();\n } catch {\n return { def: undefined, environment: {}, inputs: {}, outputs: {} };\n }\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull) {\n const runner = await this.ensureRemoteRunner();\n await runner.applySnapshotFull(payload);\n }\n\n setEnvironment(env: Record<string, unknown>, opts?: { merge?: boolean }) {\n const t = this.transport;\n if (!t) return;\n t.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment: env, merge: opts?.merge },\n },\n }).catch(() => {});\n }\n\n getEnvironment(): Record<string, unknown> | undefined {\n // Fetch from remote via lightweight command\n // Note: returns undefined synchronously; callers needing value should use snapshotFull or call runner directly\n // For now, we expose an async helper on RemoteRunner. Keep sync signature per interface.\n return undefined;\n }\n\n getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n if (!cache) return out;\n for (const n of def.nodes) {\n const resolved = n.resolvedHandles?.outputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.outputs ?? {});\n for (const h of handles) {\n const key = `${n.nodeId}.${h}`;\n const rec = cache.get(key);\n if (rec && rec.io === \"output\") {\n if (!out[n.nodeId]) out[n.nodeId] = {};\n out[n.nodeId][h] = rec.value;\n }\n }\n }\n return out;\n }\n\n getInputs(def: GraphDefinition): Record<string, Record<string, unknown>> {\n const out: Record<string, Record<string, unknown>> = {};\n const cache = this.valueCache;\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const resolved = n.resolvedHandles?.inputs;\n const desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(resolved ?? desc?.inputs ?? {});\n const cur: Record<string, unknown> = {};\n for (const h of handles) {\n const rec = cache.get(`${n.nodeId}.${h}`);\n if (rec && rec.io === \"input\") cur[h] = rec.value;\n }\n const merged = { ...cur, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\n }\n\n dispose(): void {\n super.dispose();\n this.runner = undefined;\n this.transport = undefined;\n this.registryFetched = false; // Reset so registry is fetched again on reconnect\n this.registryFetching = false; // Reset fetching state\n\n this.emit(\"transport\", {\n state: \"disconnected\",\n kind: this.backend.kind as RemoteExecutionBackendKind,\n });\n }\n\n /**\n * Fetch full registry description from remote and register it locally.\n * Called automatically on first connection with retry mechanism.\n */\n private async fetchRegistry(\n runner: RemoteRunner,\n attempt = 1\n ): Promise<void> {\n if (this.registryFetching) {\n // Already fetching, don't start another fetch\n return;\n }\n\n this.registryFetching = true;\n\n try {\n const desc = await runner.describeRegistry();\n\n // Register types\n for (const t of desc.types) {\n if (t.options) {\n this.registry.registerEnum({\n id: t.id,\n options: t.options,\n bakeTarget: t.bakeTarget,\n });\n } else {\n if (!this.registry.types.has(t.id)) {\n this.registry.registerType({\n id: t.id,\n displayName: t.displayName,\n validate: (_v) => true,\n bakeTarget: t.bakeTarget,\n });\n }\n }\n }\n\n // Register categories\n for (const c of desc.categories || []) {\n if (!this.registry.categories.has(c.id)) {\n // Create placeholder category descriptor\n const category: any = {\n id: c.id,\n displayName: c.displayName,\n createRuntime: () => ({\n async onInputsChanged() {},\n }),\n policy: { asyncConcurrency: \"switch\" },\n };\n this.registry.categories.register(category);\n }\n }\n\n // Register coercions\n for (const c of desc.coercions) {\n if (c.async) {\n this.registry.registerAsyncCoercion(c.from, c.to, async (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n } else {\n this.registry.registerCoercion(c.from, c.to, (v) => v, {\n nonTransitive: c.nonTransitive,\n });\n }\n }\n\n // Register nodes\n for (const n of desc.nodes) {\n if (!this.registry.nodes.has(n.id)) {\n this.registry.registerNode({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n impl: () => {},\n });\n }\n }\n\n this.registryFetched = true;\n this.registryFetching = false;\n this.emit(\"registry\", this.registry);\n } catch (err) {\n this.registryFetching = false;\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Retry with exponential backoff if attempts remaining\n if (attempt < this.MAX_REGISTRY_FETCH_ATTEMPTS) {\n const delayMs = this.INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n console.warn(\n `Failed to fetch registry (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying in ${delayMs}ms...`,\n error\n );\n\n // Emit error event for UI feedback\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Registry fetch failed (attempt ${attempt}/${this.MAX_REGISTRY_FETCH_ATTEMPTS}), retrying...`,\n err: error,\n attempt,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n\n // Retry after delay\n setTimeout(() => {\n this.fetchRegistry(runner, attempt + 1).catch(() => {\n // Final failure handled below\n });\n }, delayMs);\n } else {\n // Max attempts reached, emit final error\n console.error(\n `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts:`,\n error\n );\n this.emit(\"error\", {\n kind: \"registry\",\n message: `Failed to fetch registry after ${this.MAX_REGISTRY_FETCH_ATTEMPTS} attempts. Please check your connection and try refreshing.`,\n err: error,\n attempt: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n maxAttempts: this.MAX_REGISTRY_FETCH_ATTEMPTS,\n });\n }\n }\n }\n\n // Ensure remote transport/runner\n protected async ensureRemoteRunner(): Promise<RemoteRunner> {\n if (this.runner) return this.runner;\n let transport: RemoteTransport;\n const kind = this.backend.kind as RemoteExecutionBackendKind;\n const backend = this.backend as RemoteExecutionBackend;\n const connectOptions = backend.connectOptions;\n this.emit(\"transport\", { state: \"connecting\", kind });\n if (backend.kind === \"remote-http\") {\n if (!HttpPollingTransport)\n throw new Error(\"HttpPollingTransport not available\");\n transport = new HttpPollingTransport(backend.baseUrl);\n await transport.connect(connectOptions);\n } else if (backend.kind === \"remote-ws\") {\n if (!WebSocketTransport)\n throw new Error(\"WebSocketTransport not available\");\n transport = new WebSocketTransport(backend.url);\n await transport.connect(connectOptions);\n } else {\n throw new Error(\"Remote backend not configured\");\n }\n\n // Subscribe to custom events if handler provided\n if (backend.onCustomEvent) {\n transport.subscribe((event) => {\n // Filter out standard runtime events, pass others to custom handler\n const msg = event.message as any;\n if (msg && typeof msg === \"object\" && \"type\" in msg) {\n const type = msg.type;\n // Standard runtime events: stats, value, error, invalidate\n // Custom events are anything else (e.g., flow-opened, flow-latest)\n if (![\"stats\", \"value\", \"error\", \"invalidate\"].includes(type)) {\n backend.onCustomEvent?.(event);\n }\n }\n });\n }\n\n const runner = new RemoteRunner(transport);\n this.runner = runner;\n this.transport = transport;\n this.valueCache.clear();\n this.listenersBound = false;\n this.emit(\"transport\", { state: \"connected\", kind });\n\n // Auto-fetch registry on first connection (only once)\n if (!this.registryFetched && !this.registryFetching) {\n // Log loading state (UI can listen to transport status for loading indication)\n console.info(\"Loading registry from remote...\");\n this.fetchRegistry(runner).catch(() => {\n // Error handling is done inside fetchRegistry\n });\n }\n\n return runner;\n }\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n} from \"@xyflow/react\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { IGraphRunner } from \"../runtime/IGraphRunner\";\n\nexport function useWorkbenchBridge(wb: InMemoryWorkbench) {\n const onConnect: OnConnect = useCallback(\n (params) => {\n if (!params.source || !params.target) return;\n if (!params.sourceHandle || !params.targetHandle) return;\n // Prevent duplicate edges between the same endpoints\n const def = wb.export();\n const exists = def.edges.some(\n (e) =>\n e.source.nodeId === params.source &&\n e.source.handle === params.sourceHandle &&\n e.target.nodeId === params.target &&\n e.target.handle === params.targetHandle\n );\n if (exists) return;\n wb.connect({\n source: { nodeId: params.source, handle: params.sourceHandle },\n target: { nodeId: params.target, handle: params.targetHandle },\n });\n },\n [wb]\n );\n\n const onNodesChange: OnNodesChange = useCallback(\n (changes) => {\n // Apply position updates\n changes.forEach((c) => {\n if (c.type === \"position\" && c.position) {\n wb.setPosition(c.id, c.position);\n }\n });\n\n // Derive next node selection from change set\n const current = wb.getSelection();\n const nextNodeIds = new Set(current.nodes);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextNodeIds.has(id)) {\n nextNodeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextNodeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextNodeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: Array.from(nextNodeIds),\n edges: current.edges,\n });\n }\n },\n [wb]\n );\n\n const onEdgesDelete: OnEdgesDelete = useCallback(\n (edges) => edges.forEach((e) => wb.disconnect(e.id)),\n [wb]\n );\n\n const onEdgesChange: OnEdgesChange = useCallback(\n (changes) => {\n const current = wb.getSelection();\n const nextEdgeIds = new Set(current.edges);\n let selectionChanged = false;\n\n for (const change of changes) {\n const type = change?.type;\n if (type === \"select\") {\n const id: string = change.id;\n const selected: boolean | undefined = change.selected;\n if (typeof selected === \"boolean\") {\n if (selected) {\n if (!nextEdgeIds.has(id)) {\n nextEdgeIds.add(id);\n selectionChanged = true;\n }\n } else if (nextEdgeIds.delete(id)) {\n selectionChanged = true;\n }\n }\n } else if (type === \"remove\") {\n const id: string = change.id;\n if (nextEdgeIds.delete(id)) selectionChanged = true;\n }\n }\n\n if (selectionChanged) {\n wb.setSelection({\n nodes: current.nodes,\n edges: Array.from(nextEdgeIds),\n });\n }\n },\n [wb]\n );\n\n const onNodesDelete: OnNodesDelete = useCallback(\n (nodes) => {\n for (const n of nodes) wb.removeNode(n.id);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n };\n}\n\nexport function useWorkbenchGraphTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchGraphUiTick(wb: InMemoryWorkbench) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const bump = () => setTick((t) => t + 1);\n const off = wb.on(\"graphUiChanged\", bump);\n return () => off();\n }, [wb]);\n\n return tick;\n}\n\nexport function useWorkbenchVersionTick(runner: IGraphRunner) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const bump = () => setVersion((v) => v + 1);\n const u1 = runner.on(\"value\", bump);\n const u2 = runner.on(\"error\", bump);\n const u3 = runner.on(\"invalidate\", bump);\n const u4 = runner.on(\"status\", bump);\n const u5 = runner.on(\"stats\", bump);\n return () => {\n u1();\n u2();\n u3();\n u4();\n u5();\n };\n }, [runner]);\n\n return version;\n}\n\nexport function useThrottledValue<T>(value: T, intervalMs: number): T {\n const [throttled, setThrottled] = useState<T>(value);\n const lastSetAtRef = useRef(0);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n const now =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n const elapsed = now - lastSetAtRef.current;\n if (elapsed >= intervalMs) {\n lastSetAtRef.current = now;\n setThrottled(value);\n } else {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n lastSetAtRef.current =\n typeof performance !== \"undefined\" && performance.now\n ? performance.now()\n : Date.now();\n setThrottled(value);\n timeoutRef.current = null;\n }, Math.max(0, intervalMs - elapsed));\n }\n return () => {};\n }, [value, intervalMs]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, []);\n\n return throttled;\n}\n\n// Query param helpers\nfunction setSearchParam(key: string, val: string | undefined) {\n if (typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (val === undefined || val === \"\") url.searchParams.delete(key);\n else url.searchParams.set(key, val);\n window.history.replaceState({}, \"\", url.toString());\n}\n\nexport function useQueryParamBoolean(\n key: string,\n defaultValue: boolean\n): [boolean, (v: boolean) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n if (v === null) return defaultValue;\n return v === \"1\" || v === \"true\";\n }, [key, defaultValue]);\n const [val, setVal] = useState<boolean>(initial);\n const set = useCallback(\n (v: boolean) => {\n setVal(v);\n setSearchParam(key, v ? \"1\" : undefined);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n setVal(v === \"1\" || v === \"true\");\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n\nexport function useQueryParamString(\n key: string,\n defaultValue?: string\n): [string | undefined, (v: string | undefined) => void] {\n const initial = useMemo(() => {\n if (typeof window === \"undefined\") return defaultValue;\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key);\n return v ?? defaultValue;\n }, [key, defaultValue]);\n const [val, setVal] = useState<string | undefined>(initial);\n const set = useCallback(\n (v: string | undefined) => {\n setVal(v);\n setSearchParam(key, v);\n },\n [key]\n );\n useEffect(() => {\n const onPop = () => {\n const sp = new URLSearchParams(window.location.search);\n const v = sp.get(key) ?? undefined;\n setVal(v);\n };\n window.addEventListener(\"popstate\", onPop);\n return () => window.removeEventListener(\"popstate\", onPop);\n }, [key]);\n return [val, set];\n}\n","import {\n isTypedOutput,\n type Registry,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function formatDataUrlAsLabel(dataUrl: string): string {\n try {\n const semi = dataUrl.indexOf(\";\");\n const comma = dataUrl.indexOf(\",\");\n const mime = dataUrl.slice(5, semi > 0 ? semi : undefined).toUpperCase();\n const b64 = comma >= 0 ? dataUrl.slice(comma + 1) : \"\";\n const bytes = Math.floor((b64.length * 3) / 4);\n return `${mime} Data (${bytes} bytes)`;\n } catch {\n return dataUrl.length > 64 ? dataUrl.slice(0, 64) + \"…\" : dataUrl;\n }\n}\n\nexport function resolveOutputDisplay(\n raw: unknown,\n declared: string | string[] | undefined\n): { typeId?: string; value: unknown } {\n if (isTypedOutput(raw)) {\n return {\n typeId: getTypedOutputTypeId(raw),\n value: getTypedOutputValue(raw),\n };\n }\n let typeId: string | undefined = undefined;\n if (Array.isArray(declared)) {\n typeId = declared.length === 1 ? declared[0] : undefined;\n } else if (typeof declared === \"string\") {\n typeId = declared.includes(\"|\") ? undefined : declared;\n }\n return { typeId, value: raw };\n}\n\nexport function formatDeclaredTypeSignature(\n declared: string | string[] | undefined\n): string {\n if (Array.isArray(declared)) return declared.join(\" | \");\n return declared ?? \"\";\n}\n\n// 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 = 22;\n\n\n","import type {\n ResolvedHandles,\n GraphNodeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"@bian-womp/spark-graph\";\nimport { isInputPrivate } from \"@bian-womp/spark-graph\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport { Position } from \"@xyflow/react\";\n\nexport function computeEffectiveHandles(\n node: GraphNodeDefinition,\n registry: Registry\n): ResolvedHandles {\n const desc = registry.nodes.get(node.typeId);\n const resolved = node.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n const inputDefaults = { ...desc?.inputDefaults, ...resolved.inputDefaults };\n return { inputs, outputs, inputDefaults };\n}\n\nexport function countVisibleHandles(\n handles: Omit<ResolvedHandles, \"inputDefaults\">\n): {\n inputsCount: number;\n outputsCount: number;\n} {\n const inputIds = Object.keys(handles.inputs).filter(\n (k) => !isInputPrivate(handles.inputs, k)\n );\n const outputIds = Object.keys(handles.outputs);\n return { inputsCount: inputIds.length, outputsCount: outputIds.length };\n}\n\nexport function estimateNodeSize(args: {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n}): {\n width: number;\n height: number;\n inputsCount: number;\n outputsCount: number;\n rowCount: number;\n} {\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, inputsCount, outputsCount, rowCount: rows };\n}\n\nexport function layoutNode(args: {\n node: GraphNodeDefinition;\n registry: Registry;\n showValues?: boolean;\n overrides?: { width?: number; height?: number };\n}): {\n width: number;\n height: number;\n inputOrder: string[];\n outputOrder: string[];\n handles: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n handleLayout: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number;\n }>;\n} {\n const { node, registry, showValues, overrides } = 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 const { width, height } = estimateNodeSize({\n node,\n registry,\n showValues,\n overrides,\n });\n const HEADER = NODE_HEADER_HEIGHT_PX;\n const ROW = NODE_ROW_HEIGHT_PX;\n const handles = [\n ...inputOrder.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER + i * ROW,\n width: 1,\n height: ROW + 2,\n })),\n ...outputOrder.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n x: width - 1,\n y: HEADER + i * ROW,\n width: 1,\n height: ROW + 2,\n })),\n ];\n const handleLayout = [\n ...inputOrder.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER + i * ROW + ROW / 2,\n })),\n ...outputOrder.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER + i * ROW + ROW / 2,\n })),\n ];\n return { width, height, inputOrder, outputOrder, handles, handleLayout };\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n Registry,\n ValidationIssue,\n getInputTypeId,\n isInputPrivate,\n} from \"@bian-womp/spark-graph\";\nimport { Position } from \"@xyflow/react\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport { computeEffectiveHandles, layoutNode } from \"./layout\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown> extends RFNodeData\n ? RFNodeData\n : Record<string, unknown>;\n type?: string;\n selected?: boolean;\n // Provide initial dimensions so XYFlow doesn't hide nodes while waiting for measurement\n initialWidth?: number;\n initialHeight?: number;\n // Pre-supply handle bounds to avoid waiting for DOM measurement\n handles?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n x: number;\n y: number;\n width?: number;\n height?: number;\n }>;\n // Optional explicit node dimensions\n width?: number;\n height?: number;\n}\nexport interface RFEdge {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n selected?: boolean;\n animated?: boolean;\n className?: string;\n style?: any;\n label?: string;\n}\n\nexport interface RFNodeData extends Record<string, unknown> {\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n // For outputs, \"typeId\" is a display signature only; runtime type comes on value event\n outputHandles: Array<{ id: string; typeId: string }>;\n // Connectivity flags by input handle id (true if this input has an incoming edge)\n inputConnected?: Record<string, boolean>;\n // Optional explicit handle placement for consistent rendering across nodes\n handleLayout?: Array<{\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y: number; // center offset used for <Handle style={{ top }} />\n // When true, this handle does not exist in the node spec but is shown\n // to visualize dangling/missing connections. Rendered in yellow.\n missing?: boolean;\n }>;\n // Optional preferred render dimensions\n renderWidth?: number;\n renderHeight?: number;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: ValidationIssue[];\n };\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n opts: {\n showValues?: boolean;\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n resolveNodeType?: (nodeTypeId: string) => string;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n nodeStatus?: Record<string, NodeRunStatus>;\n edgeStatus?: Record<string, EdgeRunStatus>;\n nodeValidation?: {\n inputs: Record<string, HandleIssue[]>;\n outputs: Record<string, HandleIssue[]>;\n issues: Record<string, ValidationIssue[]>;\n };\n edgeValidation?: Record<string, boolean>;\n selectedNodeIds?: Set<string>;\n selectedEdgeIds?: Set<string>;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const EDGE_STYLE_MISSING = { stroke: \"#f59e0b\", strokeWidth: 2 } as const; // amber-500\n const EDGE_STYLE_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n // Build a map of valid handles per node up-front\n const validHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n for (const n of def.nodes) {\n const { inputs, outputs } = computeEffectiveHandles(n, registry);\n const inputOrder = Object.keys(inputs).filter(\n (k) => !isInputPrivate(inputs, k)\n );\n const outputOrder = Object.keys(outputs);\n validHandleMap[n.nodeId] = {\n inputs: new Set(inputOrder),\n outputs: new Set(outputOrder),\n };\n }\n\n // Track which inputs are connected (for UI) and which handles are missing (for layout)\n const connectedInputs: Record<string, Set<string>> = {};\n const missingInputsByNode: Record<string, Set<string>> = {};\n const missingOutputsByNode: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const tgtId = e.target.nodeId;\n const tgtHandle = e.target.handle;\n if (!connectedInputs[tgtId]) connectedInputs[tgtId] = new Set<string>();\n connectedInputs[tgtId].add(tgtHandle);\n const tgtValid = !!validHandleMap[tgtId]?.inputs.has(tgtHandle);\n if (!tgtValid) {\n (missingInputsByNode[tgtId] ||= new Set<string>()).add(tgtHandle);\n }\n\n const srcId = e.source.nodeId;\n const srcHandle = e.source.handle;\n const srcValid = !!validHandleMap[srcId]?.outputs.has(srcHandle);\n if (!srcValid) {\n (missingOutputsByNode[srcId] ||= new Set<string>()).add(srcHandle);\n }\n }\n\n // This map is still used later for certain checks; align with valid handles\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n Object.assign(nodeHandleMap, validHandleMap);\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const { inputs: inputSource, outputs: outputSource } =\n computeEffectiveHandles(n, registry);\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const geom = layoutNode({\n node: n,\n registry,\n showValues: opts.showValues,\n overrides: overrideSize,\n });\n const inputHandles = geom.inputOrder.map((id: string) => ({\n id,\n typeId: getInputTypeId(inputSource, id),\n }));\n const outputHandles = geom.outputOrder.map((id: string) => ({\n id,\n typeId: formatDeclaredTypeSignature(outputSource[id]),\n }));\n nodeHandleMap[n.nodeId] = {\n inputs: new Set(inputHandles.map((h) => h.id)),\n outputs: new Set(outputHandles.map((h) => h.id)),\n };\n\n // Append placeholder entries for any missing handles (below valid ones)\n const baseLeftCount = geom.inputOrder.length;\n const baseRightCount = geom.outputOrder.length;\n const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);\n const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);\n const HEADER = NODE_HEADER_HEIGHT_PX;\n const ROW = NODE_ROW_HEIGHT_PX;\n\n const extraHandleLayoutLeft = extraInputs.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER + (baseLeftCount + i) * ROW + ROW / 2,\n missing: true as const,\n }));\n const extraHandleLayoutRight = extraOutputs.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER + (baseRightCount + i) * ROW + ROW / 2,\n missing: true as const,\n }));\n const handleLayout = [\n ...geom.handleLayout,\n ...extraHandleLayoutLeft,\n ...extraHandleLayoutRight,\n ];\n\n // Precompute handle bounds (including missing) so edges can render immediately\n const missingBoundsLeft = extraInputs.map((id, i) => ({\n id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER + (baseLeftCount + i) * ROW,\n width: 1,\n height: ROW + 2,\n }));\n const missingBoundsRight = extraOutputs.map((id, i) => ({\n id,\n type: \"source\" as const,\n position: Position.Right,\n x: geom.width - 1,\n y: HEADER + (baseRightCount + i) * ROW,\n width: 1,\n height: ROW + 2,\n }));\n const handles = [\n ...geom.handles,\n ...missingBoundsLeft,\n ...missingBoundsRight,\n ];\n\n // Adjust node height to accommodate missing handle rows\n const baseRows = Math.max(baseLeftCount, baseRightCount);\n const newRows = Math.max(\n baseLeftCount + extraInputs.length,\n baseRightCount + extraOutputs.length\n );\n const initialWidth = geom.width;\n const initialHeight = geom.height + Math.max(0, newRows - baseRows) * ROW;\n\n return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n inputConnected: Object.fromEntries(\n inputHandles.map((h: { id: string }) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout,\n showValues: opts.showValues,\n renderWidth: initialWidth,\n renderHeight: initialHeight,\n inputValues: opts.inputs?.[n.nodeId],\n outputValues: opts.outputs?.[n.nodeId],\n status: opts.nodeStatus?.[n.nodeId],\n validation: {\n inputs: opts.nodeValidation?.inputs?.[n.nodeId] ?? [],\n outputs: opts.nodeValidation?.outputs?.[n.nodeId] ?? [],\n issues: opts.nodeValidation?.issues?.[n.nodeId] ?? [],\n },\n toString: opts.toString,\n toElement: opts.toElement,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts.resolveNodeType?.(n.typeId) ?? \"spark-default\",\n selected: opts.selectedNodeIds\n ? opts.selectedNodeIds.has(n.nodeId)\n : undefined,\n initialWidth,\n initialHeight,\n handles,\n width: initialWidth,\n height: initialHeight,\n };\n });\n\n const edges: RFEdge[] = def.edges.map((e) => {\n const st = opts.edgeStatus?.[e.id];\n const isRunning = !!st?.activeRuns;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts.edgeValidation?.[e.id];\n const sourceMissing = !validHandleMap[e.source.nodeId]?.outputs.has(\n e.source.handle\n );\n const targetMissing = !validHandleMap[e.target.nodeId]?.inputs.has(\n e.target.handle\n );\n const isMissing = sourceMissing || targetMissing;\n const style = isMissing\n ? EDGE_STYLE_MISSING\n : hasError || isInvalidEdge\n ? EDGE_STYLE_ERROR\n : isRunning\n ? EDGE_STYLE_RUNNING\n : undefined;\n return {\n id: e.id,\n source: e.source.nodeId,\n target: e.target.nodeId,\n sourceHandle: e.source.handle,\n targetHandle: e.target.handle,\n selected: opts.selectedEdgeIds\n ? opts.selectedEdgeIds.has(e.id)\n : undefined,\n animated: isRunning && !isMissing,\n style,\n label: e.typeId || undefined,\n };\n });\n\n return { nodes, edges };\n}\n\n// Shared node container border class composition for consistent visuals\nexport function getNodeBorderClassNames(args: {\n selected?: boolean;\n status?: NodeRunStatus;\n validation?: { issues?: ValidationIssue[] };\n}): string {\n const selected = !!args.selected;\n const status = args.status || ({} as NodeRunStatus);\n const issues = args.validation?.issues ?? [];\n\n const hasError = !!status.lastError;\n const hasValidationError = issues.some((i) => i.level === \"error\");\n const hasValidationWarning = !hasValidationError && issues.length > 0;\n const isRunning = !!status.activeRuns;\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","import React, { createContext, useContext } from \"react\";\nimport type { GraphDefinition } 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, type EngineKind } from \"../../runtime/IGraphRunner\";\n\nexport type ExampleDescriptor = {\n id: string;\n label: string;\n // If registry is omitted, the current (possibly remote-hydrated) registry is kept\n load: () => Promise<{ registry?: Registry; def: GraphDefinition }>;\n defaultEngine?: EngineKind;\n};\n\nexport type WorkbenchOverrides = {\n toString?: (\n baseToString: (typeId?: string, value?: unknown) => string,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => string;\n toElement?: (\n baseToElement: (typeId?: string, value?: unknown) => JSX.Element,\n ctx: { registry: Registry }\n ) => (typeId?: string, value?: unknown) => JSX.Element;\n setInput?: (\n baseSetInput: (handle: string, raw: string | number | undefined) => void,\n ctx: {\n runner: IGraphRunner;\n selectedNodeId?: string;\n registry: Registry;\n // lightweight context; extend if needed later\n }\n ) => (handle: string, raw: string | number | undefined) => void;\n registerUI?: (\n baseRegisterUI: (wb: AbstractWorkbench) => void,\n ctx: { wb: AbstractWorkbench; wbRunner: IGraphRunner }\n ) => void;\n // Allow consumers to customize the example list (remove/replace/add)\n getExamples?: (defaults: ExampleDescriptor[]) => ExampleDescriptor[];\n contextPanel?: React.ReactNode;\n // Optional: per-type default sizing for nodes\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n};\n\nexport interface WorkbenchContextValue {\n // Instances\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n\n // Graph\n def: GraphDefinition;\n selectedNodeId?: string;\n selectedEdgeId?: string;\n setSelection: (sel: { nodes: string[]; edges: string[] }) => void;\n\n // Runtime\n nodeStatus: Record<string, NodeRunStatus>;\n edgeStatus: Record<string, EdgeRunStatus>;\n valuesTick: number;\n inputsMap: Record<string, Record<string, unknown>>;\n 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 // Engine controls\n isRunning: () => boolean;\n engineKind: () => EngineKind | undefined;\n start: (engine: EngineKind) => void;\n stop: () => void;\n step: () => void;\n flush: () => void;\n\n // Layout\n runAutoLayout: () => void;\n\n // Graph edits\n updateEdgeType: (edgeId: string, typeId: string | undefined) => void;\n\n // Invoke node external event\n triggerExternal: (nodeId: string, event: unknown) => void;\n}\n\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 GraphNodeDefinition,\n NodeRunError,\n} from \"@bian-womp/spark-protocol\";\nimport { type Registry, type ValidationIssue } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { IGraphRunner, type EngineKind } 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 } from \"../layout\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n overrides,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\n overrides?: WorkbenchOverrides;\n children: React.ReactNode;\n}) {\n const [nodeStatus, setNodeStatus] = useState<Record<string, NodeRunStatus>>(\n {}\n );\n const [edgeStatus, setEdgeStatus] = useState<Record<string, EdgeRunStatus>>(\n {}\n );\n const [events, setEvents] = useState<Array<DebugEvent>>([]);\n const clearEvents = useCallback(() => setEvents([]), []);\n\n // Fallback progress animation: drive progress to 100% over ~2 minutes\n const FALLBACK_TOTAL_MS = 2 * 60 * 1000;\n const [fallbackStarts, setFallbackStarts] = useState<Record<string, number>>(\n {}\n );\n // Track runs that emitted an error so we can keep progress on completion\n const errorRunsRef = useRef<Record<string, Record<string, true>>>({});\n\n // Periodically advance fallback progress for running nodes without explicit progress\n useEffect(() => {\n const interval = setInterval(() => {\n setNodeStatus((prev) => {\n let changed = false;\n const next = { ...prev } as typeof prev;\n const now = Date.now();\n for (const id of Object.keys(prev)) {\n const st = prev[id];\n if (!st) continue;\n const runs = st.activeRuns ?? 0;\n const startAt = fallbackStarts[id];\n if (runs > 0 && startAt) {\n const cur = Math.max(0, Math.min(1, Number(st.progress) || 0));\n const elapsed = Math.max(0, now - startAt);\n // Approach 100% over the target window, but cap below 1 until done\n const target = Math.max(\n 0,\n Math.min(0.99, elapsed / FALLBACK_TOTAL_MS)\n );\n const merged = Math.max(cur, target);\n if (merged > cur + 0.005 && merged <= 1) {\n next[id] = { ...st, progress: merged };\n changed = true;\n }\n }\n }\n return changed ? next : prev;\n });\n }, 200);\n return () => clearInterval(interval);\n }, [fallbackStarts]);\n\n // Validation\n const [validation, setValidation] = useState<\n { ok: boolean; issues: Array<ValidationIssue> } | undefined\n >(undefined);\n\n // Selection (mirror workbench selectionChanged)\n const [selectedNodeId, setSelectedNodeId] = useState<string | undefined>();\n const [selectedEdgeId, setSelectedEdgeId] = useState<string | undefined>();\n const setSelection = useCallback(\n (sel: { nodes: string[]; edges: string[] }) => wb.setSelection(sel),\n [wb]\n );\n\n // Ticks\n const graphTick = useWorkbenchGraphTick(wb);\n const graphUiTick = useWorkbenchGraphUiTick(wb);\n const versionTick = useWorkbenchVersionTick(runner);\n const valuesTick = versionTick + graphTick + graphUiTick;\n\n // Def and IO values\n const def = wb.export();\n\n const inputsMap = useMemo(\n () => runner.getInputs(def),\n [runner, def, valuesTick]\n );\n const outputsMap = useMemo(\n () => runner.getOutputs(def),\n [runner, def, valuesTick]\n );\n const outputTypesMap = useMemo(() => {\n const out: Record<string, Record<string, string | undefined>> = {};\n // Local: runtimeTypeId is not stored; derive from typed wrapper in outputsMap\n for (const n of def.nodes) {\n const outputsDecl = registry.nodes.get(n.typeId)?.outputs ?? {};\n const handles = Object.keys(outputsDecl);\n const cur: Record<string, string | undefined> = {};\n for (const h of handles) {\n const v = outputsMap[n.nodeId]?.[h];\n const declared = outputsDecl[h];\n const { typeId } = resolveOutputDisplay(v, declared);\n cur[h] = typeId;\n }\n if (Object.keys(cur).length > 0) out[n.nodeId] = cur;\n }\n return out;\n }, [def, outputsMap, registry]);\n\n // Initialize nodes as invalidated by default until first successful run\n useEffect(() => {\n setNodeStatus((prev) => {\n const next = { ...prev } as Record<string, NodeRunStatus>;\n for (const n of def.nodes) {\n const cur = next[n.nodeId] ?? (next[n.nodeId] = {} as NodeRunStatus);\n if (cur.invalidated === undefined) {\n next[n.nodeId] = { ...cur, invalidated: true };\n }\n }\n return next;\n });\n }, [def]);\n\n // Auto layout (simple layered layout)\n const runAutoLayout = useCallback(() => {\n const cur = wb.export();\n // Build DAG layers by indegree\n const indegree: Record<string, number> = {};\n const adj: Record<string, string[]> = {};\n for (const n of cur.nodes) {\n indegree[n.nodeId] = 0;\n adj[n.nodeId] = [];\n }\n for (const e of cur.edges) {\n indegree[e.target.nodeId] = (indegree[e.target.nodeId] ?? 0) + 1;\n adj[e.source.nodeId].push(e.target.nodeId);\n }\n const q = Object.keys(indegree).filter((k) => indegree[k] === 0);\n const layers: string[][] = [];\n while (q.length) {\n const layer: string[] = [];\n const next: string[] = [];\n for (const id of q) {\n layer.push(id);\n for (const nb of adj[id]) {\n indegree[nb] -= 1;\n if (indegree[nb] === 0) next.push(nb);\n }\n }\n layers.push(layer);\n q.splice(0, q.length, ...next);\n }\n // Size-aware placement: columns by layer, stacking nodes vertically in each column\n // Use the same sizing heuristic as mapping via estimateNodeSize\n const H_GAP = 160;\n const V_GAP = 24;\n const pos: Record<string, { x: number; y: number }> = {};\n let curX = 0;\n for (const layer of layers) {\n // Compute max width in this layer and individual heights\n let maxWidth = 0;\n const heights: Record<string, number> = {};\n for (const id of layer) {\n const node = cur.nodes.find((n) => n.nodeId === id);\n if (!node) continue;\n // Prefer showValues sizing similar to node rendering\n // Consider per-type overrides when available via UI\n const overrideSize =\n overrides?.getDefaultNodeSize?.(node.typeId) ?? undefined;\n const size = estimateNodeSize({\n node,\n registry,\n showValues: true,\n overrides: overrideSize,\n });\n heights[id] = size.height;\n if (size.width > maxWidth) maxWidth = size.width;\n }\n // Place nodes in this column\n let curY = 0;\n for (const id of layer) {\n const h = heights[id] ?? 0;\n pos[id] = { x: curX, y: curY };\n curY += h + V_GAP;\n }\n curX += maxWidth + H_GAP;\n }\n wb.setPositions(pos);\n }, [wb, registry, overrides?.getDefaultNodeSize]);\n\n const updateEdgeType = useCallback(\n (edgeId: string, typeId: string | undefined) =>\n wb.updateEdgeType(edgeId, typeId),\n [wb]\n );\n\n const triggerExternal = useCallback(\n (nodeId: string, event: unknown) => runner.triggerExternal(nodeId, event),\n [runner]\n );\n\n // Subscribe to runner/workbench events\n useEffect(() => {\n const add =\n (source: \"runner\" | \"workbench\", type: string) => (payload: unknown) =>\n setEvents((prev: Array<DebugEvent>) => {\n if (\n source === \"workbench\" &&\n (type === \"graphChanged\" || type === \"graphUiChanged\")\n ) {\n const changeType = (payload as WorkbenchEventMap[typeof type])\n .change?.type;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const nextNo = prev.length > 0 ? (prev[0]?.no ?? 0) + 1 : 1;\n const next = [\n {\n no: nextNo,\n at: Date.now(),\n source,\n type,\n payload: structuredClone(payload),\n },\n ...prev,\n ];\n return next.length > 200 ? next.slice(0, 200) : next;\n });\n\n // Helper to refresh resolved handles from remote and merge into workbench\n const refreshResolvedHandles = async () => {\n try {\n const snap = await runner.snapshotFull();\n const remoteDef = snap?.def;\n if (remoteDef && Array.isArray(remoteDef.nodes)) {\n // Mutate current def in-place to avoid emitting graphChanged and causing update loop\n const cur = wb.export();\n const byId = new Map<string, GraphNodeDefinition>(\n (remoteDef.nodes || []).map((n) => [n.nodeId, n])\n );\n let changed = false;\n for (const n of cur.nodes) {\n const rn = byId.get(n.nodeId);\n if (rn && rn.resolvedHandles) {\n const before = JSON.stringify(n.resolvedHandles || {});\n const after = JSON.stringify(rn.resolvedHandles || {});\n if (before !== after) {\n n.resolvedHandles = rn.resolvedHandles;\n changed = true;\n }\n }\n }\n if (changed) wb.refreshValidation();\n }\n } catch {}\n };\n\n const off1 = runner.on(\"value\", (e) => {\n if (e?.io === \"input\") {\n const nodeId = e?.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: { ...s[nodeId], invalidated: true },\n }));\n }\n return add(\"runner\", \"value\")(e);\n });\n const off2 = runner.on(\"error\", (e) => {\n const edgeError = e as EdgeConvertError;\n const nodeError = e as NodeRunError;\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.nodeId) {\n const nodeId = nodeError.nodeId;\n const runId = nodeError.runId;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...s[nodeId],\n lastError: nodeError.err,\n },\n }));\n // Mark this runId as errored\n if (runId) {\n errorRunsRef.current[nodeId] = {\n ...errorRunsRef.current[nodeId],\n [runId]: true,\n };\n }\n }\n return add(\"runner\", \"error\")(e);\n });\n const off3 = runner.on(\"invalidate\", (e) => {\n // After build/update, pull resolved handles and merge in-place (no graphChanged)\n if (e?.reason === \"graph-updated\" || e?.reason === \"graph-built\") {\n refreshResolvedHandles();\n }\n return add(\"runner\", \"invalidate\")(e);\n });\n const off3b = runner.on(\"stats\", (s) => {\n if (!s) return;\n if (s.kind === \"node-start\") {\n const id = s.nodeId;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: current + 1,\n progress: 0,\n invalidated: false,\n },\n };\n });\n // Start fallback animation window\n setFallbackStarts((prev) => ({ ...prev, [id]: Date.now() }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...prev[id],\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n const runId = s.runId;\n setNodeStatus((prev) => {\n const current = prev[id]?.activeRuns ?? 0;\n const nextActive = current - 1;\n const hadError = !!(runId && errorRunsRef.current[id]?.[runId]);\n const keepProgress = hadError || nextActive > 0;\n\n // Clear error flag for this runId\n if (runId && errorRunsRef.current[id]?.[runId]) {\n delete errorRunsRef.current[id]?.[runId];\n }\n return {\n ...prev,\n [id]: {\n ...prev[id],\n activeRuns: nextActive,\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: current - 1 },\n };\n });\n }\n return add(\"runner\", \"stats\")(s);\n });\n const off4 = wb.on(\"graphChanged\", add(\"workbench\", \"graphChanged\"));\n // Ensure newly added nodes start as invalidated until first evaluation\n const off4c = wb.on(\"graphChanged\", (e) => {\n const change = e.change;\n if (change?.type === \"addNode\" && typeof change.nodeId === \"string\") {\n const id = change.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [id]: { ...s[id], invalidated: true },\n }));\n }\n });\n const off4b = wb.on(\"graphUiChanged\", add(\"workbench\", \"graphUiChanged\"));\n const off5 = wb.on(\n \"validationChanged\",\n add(\"workbench\", \"validationChanged\")\n );\n const off5b = wb.on(\"validationChanged\", (r) => setValidation(r));\n const off6 = wb.on(\"selectionChanged\", (sel) => {\n setSelectedNodeId(sel.nodes?.[0]);\n setSelectedEdgeId(sel.edges?.[0]);\n });\n const off7 = wb.on(\"error\", add(\"workbench\", \"error\"));\n wb.refreshValidation();\n // Registry updates: swap registry and refresh graph validation/UI\n const offReg = runner.on(\"registry\", (newReg) => {\n try {\n setRegistry(newReg);\n wb.setRegistry(newReg);\n // Trigger a graph update so the UI revalidates with new types/enums/nodes\n try {\n runner.update(wb.export());\n } catch {\n console.error(\n \"Failed to update graph definition after registry changed\"\n );\n }\n } catch {\n console.error(\"Failed to handle registry changed event\");\n }\n });\n\n return () => {\n off1();\n off2();\n off3();\n off3b();\n off4();\n off4b();\n off4c();\n off5();\n off5b();\n off6();\n off7();\n offReg();\n };\n }, [runner, wb]);\n\n // Push incremental updates into running engine without full reload\n useEffect(() => {\n if (runner.isRunning()) {\n try {\n runner.update(def);\n } catch {}\n }\n }, [runner, def, graphTick]);\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 isRunning = useCallback(() => runner.isRunning(), [runner]);\n const engineKind = useCallback(() => runner.getRunningEngine(), [runner]);\n const start = useCallback(\n (engine: EngineKind) => {\n try {\n runner.launch(wb.export(), { engine });\n } catch {}\n },\n [runner, wb]\n );\n const stop = useCallback(() => runner.dispose(), [runner]);\n const step = useCallback(() => runner.step(), [runner]);\n const flush = useCallback(() => runner.flush(), [runner]);\n\n const value = useMemo<WorkbenchContextValue>(\n () => ({\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n outputsMap,\n outputTypesMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n updateEdgeType,\n triggerExternal,\n }),\n [\n wb,\n runner,\n registry,\n setRegistry,\n def,\n selectedNodeId,\n selectedEdgeId,\n setSelection,\n nodeStatus,\n edgeStatus,\n valuesTick,\n inputsMap,\n outputsMap,\n validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\n wb,\n runner,\n ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React, { useEffect, useMemo, useRef } from \"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\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 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={clearEvents}\n className=\"text-xs px-2 py-0.5 border border-gray-300 rounded\"\n >\n Clear\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, { useEffect, useState } from \"react\";\nimport { isInputPrivate, getInputTypeId } from \"@bian-womp/spark-graph\";\nimport { resolveOutputDisplay } 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 toElement,\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 toElement: (typeId?: string, value?: unknown) => JSX.Element;\n contextPanel?: React.ReactNode;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const safeToString = (typeId?: string, value?: unknown) => {\n try {\n if (typeof toString === \"function\") {\n return toString(typeId, value);\n }\n return String(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n };\n\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n outputsMap,\n outputTypesMap,\n nodeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\n updateEdgeType,\n } = useWorkbenchContext();\n const nodeValidationIssues = validationByNode.issues;\n const edgeValidationIssues = validationByEdge.issues;\n const nodeValidationHandles = validationByNode;\n const globalValidationIssues = validationGlobal;\n\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedEdge = def.edges.find((e) => e.id === selectedEdgeId);\n const selectedDesc = selectedNode\n ? registry.nodes.get(selectedNode.typeId)\n : undefined;\n const inputHandles = Object.entries(selectedDesc?.inputs ?? {})\n .filter(([k]) => !isInputPrivate(selectedDesc?.inputs, k))\n .map(([k]) => k);\n const outputHandles = Object.keys(selectedDesc?.outputs ?? {});\n const nodeInputs = selectedNodeId ? inputsMap[selectedNodeId] ?? {} : {};\n const nodeOutputs = selectedNodeId ? outputsMap[selectedNodeId] ?? {} : {};\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 // 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 desc = selectedDesc;\n const handles = Object.keys(desc?.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(desc?.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, selectedDesc, valuesTick]);\n\n const widthClass = debug ? \"w-[480px]\" : \"w-[320px]\";\n const { wb } = useWorkbenchContext();\n const deleteEdgeById = (edgeId?: string) => {\n if (!edgeId) return;\n try {\n wb.disconnect(edgeId);\n } catch {}\n };\n\n return (\n <div\n className={`${widthClass} border-l border-gray-300 p-3 flex flex-col h-full min-h-0 overflow-hidden`}\n >\n {contextPanel && <div className=\"mb-2\">{contextPanel}</div>}\n <div className=\"font-semibold mb-2\">Inspector</div>\n <div className=\"text-xs text-gray-500 mb-2\">valuesTick: {valuesTick}</div>\n <div className=\"flex-1 overflow-auto\">\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 <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]\">DataTypeId</span>\n </label>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n value={selectedEdge.typeId ?? \"\"}\n onChange={(e) => {\n const v = e.target.value;\n const next = v === \"\" ? undefined : v;\n updateEdgeType(selectedEdge.id, next);\n }}\n >\n <option value=\"\">(infer from source)</option>\n {Array.from(registry.types.keys()).map((tid) => (\n <option key={tid} value={tid}>\n {tid}\n </option>\n ))}\n </select>\n </div>\n </div>\n {selectedEdgeValidation.length > 0 && (\n <div className=\"mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1\">\n <div className=\"font-semibold mb-1\">Validation</div>\n <ul className=\"list-disc ml-4\">\n {selectedEdgeValidation.map((m, i) => (\n <li key={i} className=\"flex items-center gap-1\">\n <IssueBadge\n level={m.level}\n size={24}\n className=\"w-6 h-6\"\n />\n <span>{`${m.code}: ${m.message}`}</span>\n <button\n className=\"ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50\"\n onClick={(e) => {\n e.stopPropagation();\n deleteEdgeById(selectedEdge.id);\n }}\n title=\"Delete this edge\"\n >\n Delete edge\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div>\n {selectedNode && (\n <div className=\"mb-2\">\n <div>Node: {selectedNode.nodeId}</div>\n <div>Type: {selectedNode.typeId}</div>\n {!!selectedNodeStatus?.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(selectedDesc?.inputs, h);\n const isLinked = def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId &&\n e.target.handle === h\n );\n const commonProps = {\n style: { flex: 1 },\n disabled: isLinked,\n };\n const current = nodeInputs[h];\n const value = drafts[h] ?? safeToString(typeId, current);\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 setInput(h, draft);\n setOriginals((o) => ({ ...o, [h]: draft }));\n };\n const revert = () => {\n const orig = originals[h] ?? safeToString(typeId, current);\n setDrafts((d) => ({ ...d, [h]: orig }));\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>{h}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {typeId}\n </span>\n </label>\n {hasValidation && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={24}\n className=\"ml-1 w-6 h-6\"\n title={title}\n />\n )}\n {isEnum ? (\n <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={\n current !== undefined && current !== null\n ? String(current)\n : \"\"\n }\n onChange={(e) => {\n const val = e.target.value;\n const raw = 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=\"\">(select)</option>\n {registry.enums.get(typeId!)?.options.map((opt) => (\n <option key={opt.value} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n ) : isLinked ? (\n toElement(typeId, current)\n ) : (\n <input\n className=\"border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full\"\n placeholder={isLinked ? \"wired\" : undefined}\n value={value}\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 )}\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>{h}</span>\n <span className=\"text-gray-500 text-[11px]\">\n {outputTypesMap[selectedNodeId!]?.[h] ?? \"\"}\n </span>\n </label>\n <div className=\"flex-1\">\n {(() => {\n const { typeId, value } = resolveOutputDisplay(\n nodeOutputs[h],\n selectedDesc?.outputs?.[h]\n );\n return toElement(typeId, value);\n })()}\n </div>\n {(() => {\n const outIssues =\n selectedNodeHandleValidation.outputs.filter(\n (m) => m.handle === h\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 </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 {debug && (\n <div className=\"mt-3 flex-none min-h-0 h-[50%]\">\n <DebugEvents\n autoScroll={!!autoScroll}\n hideWorkbench={!!hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n />\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport type { RFNodeData } from \"./mapping\";\n\ntype HandleKind = \"input\" | \"output\";\n\nfunction NodeHandleItem({\n kind,\n id,\n type,\n position,\n y,\n isConnectable,\n className,\n labelClassName,\n renderLabel,\n}: {\n kind: HandleKind;\n id: string;\n type: \"source\" | \"target\";\n position: Position;\n y?: number;\n isConnectable: boolean;\n className: string;\n labelClassName: string;\n renderLabel?: (args: { kind: HandleKind; id: string }) => React.ReactNode;\n}) {\n return (\n <>\n <Handle\n id={id}\n type={type}\n position={position}\n isConnectable={isConnectable}\n className={className}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={\n labelClassName + (kind === \"input\" ? \" left-2\" : \" right-2\")\n }\n style={{\n top: (y ?? 0) - 8,\n ...(kind === \"input\"\n ? { right: \"50%\" }\n : { left: \"50%\", textAlign: \"right\" }),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind, id })}\n </div>\n )}\n </>\n );\n}\n\nexport function NodeHandles({\n data,\n isConnectable,\n inputClassName = \"!w-2 !h-2 !bg-gray-600\",\n outputClassName = \"!w-2 !h-2 !bg-gray-600\",\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 inputClassName?: string;\n outputClassName?: string;\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 inputClassName;\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 = \"!w-3 !h-3 !bg-amber-400 !border-amber-500\";\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}\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 outputClassName;\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} wb-nodrag wb-nowheel`}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n {/* Missing output handles (rendered in yellow) */}\n {missingOutputs.map((h) => {\n const key = `missing-output:${h.id}`;\n const position = h.position ?? Position.Right;\n const y = h.y;\n const cls =\n \"!w-3 !h-3 !bg-amber-400 !border-amber-500 !rounded-none wb-nodrag wb-nowheel\";\n return (\n <NodeHandleItem\n key={key}\n kind=\"output\"\n id={h.id}\n type=\"source\"\n position={position}\n y={y}\n isConnectable={false}\n className={cls}\n labelClassName={labelClassName}\n renderLabel={renderLabel}\n />\n );\n })}\n </>\n );\n}\n\nexport default NodeHandles;\n","import React from \"react\";\nimport {\n useUpdateNodeInternals,\n type NodeProps,\n type Node,\n} from \"@xyflow/react\";\nimport cx from \"classnames\";\nimport { ArrowClockwiseIcon } from \"@phosphor-icons/react\";\nimport NodeHandles from \"./NodeHandles\";\nimport { NODE_HEADER_HEIGHT_PX } from \"./constants\";\nimport { resolveOutputDisplay } from \"./value\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport { getNodeBorderClassNames, type RFNodeData } from \"./mapping\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport const DefaultNode = React.memo(function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n}: NodeProps<Node<RFNodeData>>) {\n const updateNodeInternals = useUpdateNodeInternals();\n const { typeId, showValues } = data;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n React.useEffect(() => {\n updateNodeInternals(id);\n }, [\n id,\n inputEntries.length,\n outputEntries.length,\n showValues,\n updateNodeInternals,\n ]);\n const status = data.status ?? { activeRuns: 0 };\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const containerBorder = getNodeBorderClassNames({\n selected,\n status,\n validation,\n });\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/70 !dark:bg-stone-900\",\n containerBorder\n )}\n style={{\n position: \"relative\",\n minWidth:\n typeof data.renderWidth === \"number\" ? data.renderWidth : undefined,\n minHeight:\n typeof data.renderHeight === \"number\" ? data.renderHeight : undefined,\n }}\n >\n <DefaultNodeHeader\n id={id}\n title={typeId}\n validation={validation}\n showId={data.showValues}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n\nexport function DefaultNodeHeader({\n id,\n title,\n validation,\n right,\n showId,\n onInvalidate,\n}: {\n id: string;\n title: string;\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\n showId?: boolean;\n onInvalidate?: () => void;\n}) {\n const ctx = useWorkbenchContext();\n const handleInvalidate = React.useCallback(() => {\n try {\n if (onInvalidate) return onInvalidate();\n const kind = ctx.engineKind?.();\n if (kind === \"pull\") ctx.runner.computeNode(id);\n else ctx.triggerExternal?.(id, { type: \"invalidate\" });\n } catch {}\n }, [ctx, id, onInvalidate]);\n\n return (\n <div\n className=\"flex items-center justify-center px-2 border-b border-solid border-gray-500 dark:border-gray-400 text-gray-600 dark:text-gray-300\"\n style={{\n maxHeight: NODE_HEADER_HEIGHT_PX,\n minHeight: NODE_HEADER_HEIGHT_PX,\n }}\n >\n <strong\n className=\"flex-1 h-full text-sm\"\n style={{ lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }}\n >\n {title}\n </strong>\n <div className=\"flex items-center gap-1\">\n {/* Invalidate button */}\n <button\n className=\"w-4 h-4 border border-gray-400 rounded text-[10px] leading-3 flex items-center justify-center\"\n title=\"Invalidate and re-run\"\n onClick={(e) => {\n e.stopPropagation();\n handleInvalidate();\n }}\n >\n <ArrowClockwiseIcon size={10} />\n </button>\n {right}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n {showId && <span className=\"text-[10px] opacity-70\">({id})</span>}\n </div>\n </div>\n );\n}\n\nexport function DefaultNodeContent({\n data,\n isConnectable,\n}: Pick<NodeProps<Node<RFNodeData>>, \"data\" | \"isConnectable\">) {\n const { showValues, inputValues, outputValues, toString } = data;\n const prettyHandle = React.useCallback((id: string) => {\n try {\n const parts = String(id).split(\":\");\n // If there are exactly 3 colons (4 parts), display only the second part\n if (parts.length === 4) return parts[1] || id;\n return id;\n } catch {\n return id;\n }\n }, []);\n 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 const vIssues = (\n kind === \"input\" ? validation.inputs : validation.outputs\n ).filter((v) => v.handle === id);\n const hasAny = vIssues.length > 0;\n const hasErr = vIssues.some((v) => v.level === \"error\");\n return cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400\",\n kind === \"output\" && \"!rounded-none\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\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 txt = toString(entry.typeId, inputValues?.[entry.id]);\n return typeof txt === \"string\" ? txt : String(txt);\n }\n const resolved = resolveOutputDisplay(\n outputValues?.[entry.id],\n entry.typeId\n );\n const txt = toString(resolved.typeId, resolved.value);\n return typeof txt === \"string\" ? txt : String(txt);\n })();\n\n return (\n <span className=\"flex items-center gap-1 w-full\">\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}\n </span>\n ) : (\n <span style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }} />\n )}\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {prettyHandle(handleId)}\n </span>\n {valueText !== undefined && (\n <span\n className=\"opacity-60 truncate pr-1\"\n style={{ flex: 1, minWidth: 0, maxWidth: \"100%\" }}\n >\n {valueText}\n </span>\n )}\n </>\n )}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"shrink-0\"\n title={title}\n />\n )}\n </span>\n );\n }}\n />\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useReactFlow } from \"@xyflow/react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function DefaultContextMenu({\n open,\n clientPos,\n onAdd,\n onClose,\n}: {\n open: boolean;\n clientPos: { x: number; y: number } | null;\n onAdd: (typeId: string, position: { x: number; y: number }) => void;\n onClose: () => void;\n}) {\n const { registry } = useWorkbenchContext();\n const rf = useReactFlow();\n const ids = Array.from(registry.nodes.keys());\n const [query, setQuery] = useState(\"\");\n const q = query.trim().toLowerCase();\n const filteredIds = q\n ? ids.filter((id) => id.toLowerCase().includes(q))\n : ids;\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)) onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") 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, onClose]);\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 onAdd(typeId, p);\n onClose();\n };\n\n const renderTree = (tree: Tree, path: string[] = []) => {\n const entries = Object.entries(tree?.__children ?? {}).sort((a, b) =>\n a[0].localeCompare(b[0])\n );\n return (\n <div>\n {entries.map(([key, child]) => {\n const label = key;\n const hasChildren =\n !!child?.__children && Object.keys(child.__children).length > 0;\n const idKey = [...path, key].join(\".\");\n if (!hasChildren) {\n // Leaf: render only the action button, no group header\n return child.__self ? (\n <button\n key={idKey}\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n ) : null;\n }\n // Group: show label, optional action for id at this level, and children\n return (\n <div key={idKey}>\n <div className=\"px-2 py-1 text-[11px] uppercase tracking-wide text-gray-400\">\n {label}\n </div>\n {child.__self && (\n <button\n onClick={() => handleClick(child.__self!)}\n className=\"block w-full text-left px-3 py-1 hover:bg-gray-100 cursor-pointer\"\n title={child.__self}\n >\n {label}\n </button>\n )}\n <div className=\"pl-2 border-l border-gray-200 ml-2\">\n {renderTree(child, [...path, key])}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-none shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Add Node{\" \"}\n <span className=\"text-gray-500 font-normal\">({totalCount})</span>\n </div>\n <div className=\"px-2 pb-1\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter nodes...\"\n className=\"w-full border border-gray-300 px-2 py-1 text-sm outline-none focus:border-gray-400\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n />\n </div>\n <div className=\"max-h-60 overflow-auto\">\n {totalCount > 0 ? (\n renderTree(root)\n ) : (\n <div className=\"px-3 py-2 text-gray-400\">No matches</div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef, useCallback } from \"react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\nimport {\n getInputTypeId,\n isTypedOutput,\n getTypedOutputValue,\n} from \"@bian-womp/spark-graph\";\n\nexport function NodeContextMenu({\n open,\n clientPos,\n nodeId,\n onClose,\n}: {\n open: boolean;\n clientPos: { x: number; y: number } | null;\n nodeId: string;\n onClose: () => void;\n}) {\n const { wb, runner, engineKind, registry, outputsMap, outputTypesMap } =\n useWorkbenchContext();\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)) onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") 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, onClose]);\n\n useEffect(() => {\n if (open) ref.current?.focus();\n }, [open]);\n\n // Bake helpers\n const getBakeableOutputs = (): string[] => {\n try {\n const def = wb.export();\n const node = def.nodes.find((n) => n.nodeId === nodeId);\n if (!node) return [];\n const desc = registry.nodes.get(node.typeId);\n const handles = Object.keys(desc?.outputs || {});\n const out: string[] = [];\n for (const h of handles) {\n const tId = outputTypesMap?.[nodeId]?.[h];\n if (!tId) continue;\n if (tId.endsWith(\"[]\")) {\n const base = tId.slice(0, -2);\n const tArr = registry.types.get(tId);\n const tElem = registry.types.get(base);\n const arrT = tArr?.bakeTarget;\n const elemT = tElem?.bakeTarget;\n if (\n (arrT && registry.nodes.has(arrT.nodeTypeId)) ||\n (elemT && registry.nodes.has(elemT.nodeTypeId))\n )\n out.push(h);\n } else {\n const t = registry.types.get(tId);\n const bt = t?.bakeTarget;\n if (bt && registry.nodes.has(bt.nodeTypeId)) out.push(h);\n }\n }\n return out;\n } catch {\n return [];\n }\n };\n\n const doBake = async (handleId: string) => {\n try {\n const typeId = outputTypesMap?.[nodeId]?.[handleId];\n const raw = outputsMap?.[nodeId]?.[handleId];\n if (!typeId || raw === undefined) return;\n const unwrap = (v: unknown) =>\n isTypedOutput(v) ? getTypedOutputValue(v) : v;\n const clone = (v: unknown) =>\n typeof structuredClone === \"function\"\n ? structuredClone(v)\n : JSON.parse(JSON.stringify(v));\n const coerceIfNeeded = async (\n fromType: string,\n toType: string | undefined,\n value: unknown\n ) => {\n if (!toType || toType === fromType || !runner?.coerce) return value;\n try {\n return await runner.coerce(fromType, toType, value);\n } catch {\n return value;\n }\n };\n\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n const isArray = typeId.endsWith(\"[]\");\n const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;\n const tArr = isArray ? registry.types.get(typeId) : undefined;\n const tElem = registry.types.get(baseTypeId);\n const singleTarget = !isArray ? tElem?.bakeTarget : undefined;\n const arrTarget = isArray ? tArr?.bakeTarget : undefined;\n const elemTarget = isArray ? tElem?.bakeTarget : undefined;\n\n if (singleTarget) {\n const nodeDesc = registry.nodes.get(singleTarget.nodeTypeId);\n const inType = getInputTypeId(\n nodeDesc?.inputs,\n singleTarget.inputHandle\n );\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n const newId = wb.addNode({\n typeId: singleTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n params: {},\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [singleTarget.inputHandle]: coerced });\n return;\n }\n\n if (isArray && arrTarget) {\n const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, arrTarget.inputHandle);\n const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));\n const newId = `n${Math.random().toString(36).slice(2, 8)}`;\n wb.addNode({\n nodeId: newId,\n typeId: arrTarget.nodeTypeId,\n position: { x: pos.x + 180, y: pos.y },\n params: {},\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [arrTarget.inputHandle]: coerced });\n return;\n }\n\n if (isArray && elemTarget) {\n const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);\n const inType = getInputTypeId(nodeDesc?.inputs, elemTarget.inputHandle);\n const src = unwrap(raw);\n const items = Array.isArray(src) ? src : [src];\n const coercedItems = await Promise.all(\n items.map((v) => coerceIfNeeded(baseTypeId, inType, v))\n );\n const COLS = 4;\n const DX = 180;\n const DY = 160;\n for (let idx = 0; idx < coercedItems.length; idx++) {\n const cv = coercedItems[idx];\n const col = idx % COLS;\n const row = Math.floor(idx / COLS);\n const newId = wb.addNode({\n typeId: elemTarget.nodeTypeId,\n position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },\n params: {},\n initialInputs: { [elemTarget.inputHandle]: clone(cv) },\n });\n runner.update(wb.export());\n await runner.whenIdle();\n runner.setInputs(newId, { [elemTarget.inputHandle]: cv });\n }\n return;\n }\n } catch {}\n };\n\n // actions\n const handleDelete = useCallback(() => {\n wb.removeNode(nodeId);\n onClose();\n }, [nodeId, wb, onClose]);\n\n const handleDuplicate = useCallback(() => {\n const def = wb.export();\n const n = def.nodes.find((n) => n.nodeId === nodeId);\n if (!n) return onClose();\n const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };\n wb.addNode({\n typeId: n.typeId,\n params: n.params,\n position: { x: pos.x + 24, y: pos.y + 24 },\n });\n onClose();\n }, [nodeId, wb, onClose]);\n\n const handleBake = useCallback(\n async (handleId: string) => {\n await doBake(handleId);\n onClose();\n },\n [doBake, onClose]\n );\n\n const handleCopyId = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(nodeId);\n } catch {}\n onClose();\n }, [nodeId, onClose]);\n\n const handleRunPull = useCallback(async () => {\n try {\n await runner.computeNode(nodeId);\n } catch {}\n onClose();\n }, [nodeId, runner, onClose]);\n\n if (!open || !clientPos || !nodeId) return null;\n\n // clamp\n const MENU_MIN_WIDTH = 180;\n const PADDING = 16;\n const x = Math.min(\n clientPos.x,\n (typeof window !== \"undefined\" ? window.innerWidth : 0) -\n (MENU_MIN_WIDTH + PADDING)\n );\n const y = Math.min(\n clientPos.y,\n (typeof window !== \"undefined\" ? window.innerHeight : 0) - 240\n );\n\n const canRunPull = engineKind()?.toString() === \"pull\";\n const outs = getBakeableOutputs();\n\n return (\n <div\n ref={ref}\n tabIndex={-1}\n className=\"fixed z-[1000] bg-white border border-gray-300 rounded-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700\"\n style={{ left: x, top: y }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">\n Node ({nodeId})\n </div>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleDelete}\n >\n Delete\n </button>\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleDuplicate}\n >\n Duplicate\n </button>\n {canRunPull && (\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleRunPull}\n >\n Run (pull)\n </button>\n )}\n <div className=\"h-px bg-gray-200 my-1\" />\n {outs.length > 0 && (\n <>\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Bake</div>\n {outs.map((h) => (\n <button\n key={h}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={async () => {\n await doBake(h);\n onClose();\n }}\n >\n Bake: {h}\n </button>\n ))}\n <div className=\"h-px bg-gray-200 my-1\" />\n </>\n )}\n <button\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100\"\n onClick={handleCopyId}\n >\n Copy Node ID\n </button>\n </div>\n );\n}\n","import React, {\n useMemo,\n useState,\n useRef,\n useImperativeHandle,\n useCallback,\n} from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n BackgroundVariant,\n ReactFlowProvider,\n ReactFlowInstance,\n} from \"@xyflow/react\";\nimport isEqual from \"lodash/isEqual\";\nimport { toReactFlow, type RFNode, type RFEdge } from \"./mapping\";\nimport { useWorkbenchBridge, useThrottledValue } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { NodeContextMenu } from \"./NodeContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport type WorkbenchCanvasHandle = {\n fitView: () => void;\n};\n\nexport const WorkbenchCanvas = React.forwardRef<\n WorkbenchCanvasHandle,\n {\n showValues?: boolean;\n toString: (typeId?: string, value?: unknown) => string;\n toElement: (typeId?: string, value?: unknown) => JSX.Element;\n getDefaultNodeSize?: (\n typeId: string\n ) => { width: number; height: number } | undefined;\n }\n>(({ showValues, toString, toElement, getDefaultNodeSize }, ref) => {\n const {\n wb,\n registry,\n inputsMap,\n outputsMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n } = useWorkbenchContext();\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n\n // Keep stable references for nodes/edges to avoid unnecessary updates\n const prevNodesRef = useRef<RFNode[]>([]);\n const prevEdgesRef = useRef<RFEdge[]>([]);\n\n function retainStabilityById<T extends { id: string }>(\n prev: T[],\n next: T[],\n isSame: (a: T, b: T) => boolean\n ): T[] {\n if (prev.length === 0) return next;\n const map = new Map<string, T>();\n for (const p of prev) map.set(p.id, p);\n const out: T[] = new Array(next.length);\n for (let i = 0; i < next.length; i++) {\n const n = next[i];\n const p = map.get(n.id);\n out[i] = p && isSame(p, n) ? p : n;\n }\n return out;\n }\n\n const isSameNode = (a: RFNode, b: RFNode): boolean => {\n // Compare the parts that affect rendering\n const pick = (n: RFNode) => ({\n position: n.position,\n type: n.type,\n selected: n.selected,\n initialWidth: n.initialWidth,\n initialHeight: n.initialHeight,\n data: n.data && {\n typeId: n.data.typeId,\n inputHandles: n.data.inputHandles,\n outputHandles: n.data.outputHandles,\n showValues: n.data.showValues,\n inputValues: n.data.inputValues,\n outputValues: n.data.outputValues,\n status: n.data.status,\n validation: n.data.validation,\n inputConnected: n.data.inputConnected,\n },\n });\n return isEqual(pick(a), pick(b));\n };\n\n const isSameEdge = (a: RFEdge, b: RFEdge): boolean => {\n const pick = (e: RFEdge) => ({\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n selected: e.selected,\n animated: e.animated,\n style: e.style,\n label: e.label,\n type: e.type,\n });\n return isEqual(pick(a), pick(b));\n };\n\n // Expose imperative API\n const rfInstanceRef = useRef<any>(null);\n useImperativeHandle(ref, () => ({\n fitView: () => {\n try {\n rfInstanceRef.current?.fitView({ padding: 0.2 });\n } catch {}\n },\n }));\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n } = useWorkbenchBridge(wb);\n\n const { nodeTypes, resolveNodeType } = useMemo(() => {\n // Build nodeTypes map using UI extension registry\n const ui = wb.getUI();\n const custom = new Map<string, any>();\n for (const typeId of Array.from(registry.nodes.keys())) {\n const renderer = ui.getNodeRenderer(typeId);\n if (renderer) custom.set(typeId, renderer);\n }\n\n const types: Record<string, any> = {\n \"spark-default\": DefaultNode,\n default: DefaultNode,\n };\n for (const [typeId, comp] of custom.entries()) {\n types[`spark-${typeId}`] = comp;\n }\n\n const resolver = (nodeTypeId: string): string =>\n custom.has(nodeTypeId) ? `spark-${nodeTypeId}` : \"spark-default\";\n\n return { nodeTypes: types, resolveNodeType: resolver };\n // registry is stable; ui renderers expected to be set up before mount\n }, [wb, registry]);\n\n const { nodes, edges } = useMemo(() => {\n const def = wb.export();\n const sel = wb.getSelection();\n const out = toReactFlow(def, wb.getPositions(), registry, {\n showValues,\n inputs: inputsMap,\n outputs: outputsMap,\n resolveNodeType,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n selectedNodeIds: new Set(sel.nodes),\n selectedEdgeIds: new Set(sel.edges),\n getDefaultNodeSize,\n });\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) ? arr.map((h: unknown) => (h && typeof h === \"object\" && \"id\" in h ? String(h.id) : \"\")).filter(Boolean) : [];\n const handlesEqual = (a: unknown, b: unknown) => {\n const aIds = toIds(a);\n const bIds = toIds(b);\n if (aIds.length !== bIds.length) return false;\n for (let i = 0; i < aIds.length; i++) {\n if (aIds[i] !== bIds[i]) return false;\n }\n return true;\n };\n const handleChanged = out.nodes\n .filter((n) => {\n const p = prevNodeMap.get(n.id);\n if (!p) return false;\n const inChanged = !handlesEqual(\n p.data?.inputHandles,\n n.data?.inputHandles\n );\n const outChanged = !handlesEqual(\n p.data?.outputHandles,\n n.data?.outputHandles\n );\n return inChanged || outChanged;\n })\n .map((n) => n.id);\n\n const prevEdgeIds = new Set(prevEdgesRef.current.map((e) => e.id));\n const nextEdgeIds = new Set(out.edges.map((e) => e.id));\n const addedEdgeIds = out.edges\n .filter((e) => !prevEdgeIds.has(e.id))\n .map((e) => e.id);\n const removedEdgeIds = prevEdgesRef.current\n .filter((e) => !nextEdgeIds.has(e.id))\n .map((e) => e.id);\n const prevEdgeMap = new Map(prevEdgesRef.current.map((e) => [e.id, e]));\n const changedEdgeIds = out.edges\n .filter((e) => {\n const p = prevEdgeMap.get(e.id);\n return p ? !isSameEdge(p, e) : false;\n })\n .map((e) => e.id);\n\n if (\n addedNodeIds.length ||\n removedNodeIds.length ||\n changedNodeIds.length ||\n handleChanged.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] node updates\", {\n added: addedNodeIds,\n removed: removedNodeIds,\n changed: changedNodeIds,\n handleChanged,\n });\n }\n\n if (\n addedEdgeIds.length ||\n removedEdgeIds.length ||\n changedEdgeIds.length\n ) {\n // eslint-disable-next-line no-console\n console.debug(\"[WorkbenchCanvas] edge updates\", {\n added: addedEdgeIds,\n removed: removedEdgeIds,\n changed: changedEdgeIds,\n });\n }\n } catch {}\n prevNodesRef.current = stableNodes;\n prevEdgesRef.current = stableEdges;\n return { nodes: stableNodes, edges: stableEdges };\n }, [\n showValues,\n inputsMap,\n outputsMap,\n valuesTick,\n toString,\n toElement,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n resolveNodeType,\n ]);\n\n const throttled = useThrottledValue({ nodes, edges }, 100);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const [nodeMenuOpen, setNodeMenuOpen] = useState(false);\n const [nodeMenuPos, setNodeMenuPos] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [nodeAtMenu, setNodeAtMenu] = useState<string | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n // Determine if right-clicked over a node by hit-testing selection\n const target = (e.target as HTMLElement)?.closest(\".react-flow__node\");\n if (target) {\n // Resolve node id from data-id attribute React Flow sets\n const nodeId = target.getAttribute(\"data-id\");\n setNodeAtMenu(nodeId);\n setNodeMenuPos({ x: e.clientX, y: e.clientY });\n setNodeMenuOpen(true);\n setMenuOpen(false);\n } else {\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n setNodeMenuOpen(false);\n }\n };\n\n const addNodeAt = useCallback(\n (typeId: string, pos: { x: number; y: number }) => {\n wb.addNode({ typeId, position: pos });\n },\n [wb]\n );\n\n const onInit = useCallback((inst: ReactFlowInstance) => {\n rfInstanceRef.current = inst;\n }, []);\n\n const onCloseMenu = useCallback(() => {\n setMenuOpen(false);\n }, []);\n\n const onCloseNodeMenu = useCallback(() => {\n setNodeMenuOpen(false);\n }, []);\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlowProvider>\n <ReactFlow\n nodes={throttled.nodes}\n edges={throttled.edges}\n nodeTypes={nodeTypes}\n selectionOnDrag\n onInit={(inst) => {\n rfInstanceRef.current = inst;\n }}\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n proOptions={{ hideAttribution: true }}\n noDragClassName=\"wb-nodrag\"\n noWheelClassName=\"wb-nowheel\"\n noPanClassName=\"wb-nopan\"\n fitView\n >\n <Background\n id=\"workbench-canvas-background\"\n variant={BackgroundVariant.Dots}\n gap={12}\n size={1}\n />\n <MiniMap />\n <Controls />\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n onAdd={addNodeAt}\n onClose={onCloseMenu}\n />\n {!!nodeAtMenu && (\n <NodeContextMenu\n open={nodeMenuOpen}\n clientPos={nodeMenuPos}\n nodeId={nodeAtMenu}\n onClose={onCloseNodeMenu}\n />\n )}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n );\n});\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GraphDefinition } 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} from \"@bian-womp/spark-graph\";\nimport { type TransportConnectOptions } from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\n} 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 {\n EngineKind,\n ExecutionBackend,\n ExecutionBackendKind,\n IGraphRunner,\n TransportStatus,\n RemoteExecutionBackend,\n} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\n\n/**\n * Optional backend configuration for remote runners.\n * Allows extensions to pass connection options and custom event handlers.\n */\nexport interface BackendOptions {\n connectOptions?: TransportConnectOptions;\n onCustomEvent?: (event: any) => void;\n}\n\nfunction WorkbenchStudioCanvas({\n setRegistry,\n autoScroll,\n onAutoScrollChange,\n example,\n onExampleChange,\n engine,\n onEngineChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n backendOptions,\n overrides,\n onInit,\n onChange,\n}: {\n setRegistry: (r: Registry) => void;\n showValues: boolean;\n onAutoScrollChange: (v: boolean) => void;\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n autoScroll: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n 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 augmentRegistry?: (r: Registry) => void\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\n const [transportStatus, setTransportStatus] = useState<TransportStatus>({\n state: \"local\",\n });\n const selectedNode = def.nodes.find((n) => n.nodeId === selectedNodeId);\n const selectedDesc = selectedNode\n ? registry.nodes.get(selectedNode.typeId)\n : undefined;\n\n const [exampleState, setExampleState] = useState<string>(example ?? \"\");\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 lastAutoLaunched = useRef<string | undefined>(undefined);\n const autoLayoutRan = useRef(false);\n const canvasRef = useRef<WorkbenchCanvasHandle | null>(null);\n const uploadInputRef = useRef<HTMLInputElement | null>(null);\n const [registryReady, setRegistryReady] = useState(() => {\n // For local backends, registry is always ready\n return backendKind === \"local\";\n });\n\n // Expose init callback with setInitialGraph helper\n const initCalled = useRef(false);\n useEffect(() => {\n if (initCalled.current) return;\n initCalled.current = true;\n if (!onInit) return;\n const setInitialGraph = async (\n d: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => {\n await wb.load(d);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs) {\n for (const [nodeId, map] of Object.entries(inputs)) {\n runner.setInputs(nodeId, map);\n }\n }\n };\n onInit({ wb, runner, setInitialGraph });\n }, [onInit, wb, runner, runAutoLayout, registry, setRegistry]);\n\n // Expose change callback on graph/value changes\n useEffect(() => {\n if (!onChange) return;\n const off1 = wb.on(\"graphChanged\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n const off2 = runner.on(\"value\", () => {\n try {\n const cur = wb.export();\n const inputs = runner.getInputs(cur);\n onChange({ def: cur, inputs });\n } catch {}\n });\n return () => {\n off1();\n off2();\n };\n }, [wb, runner, onChange]);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n const ex = examples.find((e) => e.id === key) ?? examples[0];\n if (!ex) return;\n const { registry: r, def } = await ex.load();\n // Keep registry consistent with backend:\n // - For local backend, allow example to provide its own registry\n // - For remote backend, registry is automatically managed by RemoteGraphRunner\n if (backendKind === \"local\") {\n if (r) {\n setRegistry(r);\n wb.setRegistry(r);\n }\n } else {\n // For remote backends, registry is automatically fetched and updated by RemoteGraphRunner\n // Do not overwrite it here - it will be synced via registry events\n }\n await wb.load(def);\n // Build a local runtime so seeded defaults are visible pre-run\n runner.build(wb.export());\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [\n runner,\n wb,\n onExampleChange,\n runAutoLayout,\n examples,\n setRegistry,\n backendKind,\n ]\n );\n\n const downloadGraph = useCallback(() => {\n try {\n const def = wb.export();\n const inputs = runner.getInputs(def);\n const payload = { def, inputs };\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 const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const ts = `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(\n d.getHours()\n )}${pad(d.getMinutes())}`;\n a.href = url;\n a.download = `spark-graph-${ts}.json`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\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 // Support both Graph and Snapshot payloads\n const isSnapshot =\n parsed &&\n typeof parsed === \"object\" &&\n (parsed.def || parsed.inputs || parsed.outputs || parsed.environment);\n if (isSnapshot) {\n const def = parsed.def;\n const positions = parsed.positions || {};\n const environment = parsed.environment || {};\n const inputs = parsed.inputs || {};\n if (def && runner.isRunning()) {\n // Remote exact restore path\n await runner.applySnapshotFull({\n def,\n environment,\n inputs,\n outputs: parsed.outputs || {},\n });\n await wb.load(def);\n if (positions && typeof positions === \"object\")\n wb.setPositions(positions);\n } else if (!runner.isRunning()) {\n alert(\"Engine is not running\");\n } else {\n alert(\"Graph definition is empty\");\n }\n } else {\n const def = parsed?.def ?? parsed;\n const inputs = parsed?.inputs ?? {};\n await wb.load(def);\n try {\n runner.build(wb.export());\n } catch {}\n if (inputs && typeof inputs === \"object\") {\n for (const [nodeId, map] of Object.entries(\n inputs as Record<string, Record<string, unknown>>\n )) {\n try {\n runner.setInputs(nodeId, map);\n } catch {}\n }\n }\n }\n runAutoLayout();\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, runAutoLayout]\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\", (s) => setTransportStatus(s));\n return () => off();\n }, [runner]);\n\n // Track registry readiness for remote backends\n useEffect(() => {\n // For local backends, registry is always ready\n if (backendKind === \"local\") {\n setRegistryReady(true);\n return;\n }\n\n // Reset readiness when switching to remote backend\n setRegistryReady(false);\n\n // For remote backends, wait for registry event\n const off = runner.on(\"registry\", () => {\n setRegistryReady(true);\n });\n return () => off();\n }, [runner, backendKind]);\n\n useEffect(() => {\n if (!engine) return;\n if (runner.isRunning()) return;\n // Only auto-launch for local backend; require explicit Start for remote\n if (backendKind !== \"local\") return;\n const d = wb.export();\n if (!d.nodes || d.nodes.length === 0) return;\n if (lastAutoLaunched.current === engine) return;\n try {\n runner.launch(d, { engine: engine as EngineKind });\n lastAutoLaunched.current = engine;\n } catch {\n // ignore\n }\n }, [engine, runner, wb, backendKind]);\n\n // Registry is automatically fetched by RemoteGraphRunner when it connects\n\n // Run auto layout after registry is hydrated (for remote backends)\n useEffect(() => {\n if (autoLayoutRan.current) return;\n // Wait for registry to be ready for remote backends\n if (backendKind !== \"local\" && !registryReady) return;\n\n const cur = wb.export();\n const positions = wb.getPositions();\n const allMissing = cur.nodes.every((n) => !positions[n.nodeId]);\n if (allMissing) {\n autoLayoutRan.current = true;\n runAutoLayout();\n }\n }, [wb, runAutoLayout, backendKind, registryReady, registry]);\n\n const baseSetInput = useCallback(\n (handle: string, raw: string | number | undefined) => {\n if (!selectedNodeId) return;\n // If selected input is wired (has inbound edge), ignore user input to respect runtime value\n const isLinked = def.edges.some(\n (e) => e.target.nodeId === selectedNodeId && e.target.handle === handle\n );\n if (isLinked) return;\n const typeId = selectedDesc?.inputs?.[handle];\n let value: unknown = raw;\n const parseArray = <T,>(s: string, map: (x: string) => T): T[] => {\n const str = String(s).trim();\n try {\n const parsed = JSON.parse(str);\n if (Array.isArray(parsed)) return parsed.map((x) => map(String(x)));\n } catch {}\n if (!str) return [] as T[];\n return str\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n .map(map);\n };\n\n switch (typeId) {\n case \"base.float\": {\n const n = Number(raw);\n value = Number.isFinite(n) ? n : 0;\n break;\n }\n case \"base.float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"base.bool\": {\n value = raw === \"true\" || raw === \"1\" ? true : false;\n break;\n }\n case \"base.bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(x));\n break;\n }\n case \"base.string\": {\n value = String(raw);\n break;\n }\n case \"base.string[]\": {\n value = parseArray(String(raw), (x) => String(x));\n break;\n }\n case \"base.vec3\": {\n const arr = parseArray(String(raw), (x) => Number(x));\n value = [arr[0] ?? 0, arr[1] ?? 0, arr[2] ?? 0];\n break;\n }\n case \"base.vec3[]\": {\n try {\n const parsed = JSON.parse(String(raw));\n if (Array.isArray(parsed)) {\n value = parsed.map((v) => [\n Number(v?.[0] ?? 0),\n Number(v?.[1] ?? 0),\n Number(v?.[2] ?? 0),\n ]);\n break;\n }\n } catch {}\n // fallback CSV triples: \"x1,y1,z1; x2,y2,z2\"\n value = String(raw)\n .split(\";\")\n .map((seg) => seg.trim())\n .filter(Boolean)\n .map((seg) => seg.split(\",\").map((n) => Number(n.trim())))\n .map((a) => [a[0] ?? 0, a[1] ?? 0, a[2] ?? 0]);\n break;\n }\n default: {\n // fallback to string\n value = raw;\n }\n }\n runner.setInput(selectedNodeId, handle, value);\n },\n [selectedNodeId, def.edges, selectedDesc, runner]\n );\n\n const setInput = useMemo(() => {\n if (overrides?.setInput) {\n return overrides.setInput(baseSetInput, {\n runner,\n selectedNodeId,\n registry,\n });\n }\n return baseSetInput;\n }, [overrides, baseSetInput, runner, selectedNodeId, registry]);\n\n const baseToString = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n // Normalize typed wrapper\n if (isTypedOutput(value)) {\n return baseToString(\n getTypedOutputTypeId(value),\n getTypedOutputValue(value)\n );\n }\n const pre = preformatValueForDisplay(typeId, value, registry);\n if (pre !== undefined) return pre;\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"url\" in value &&\n typeof value.url === \"string\"\n ) {\n const title =\n \"title\" in value && typeof value.title === \"string\"\n ? value.title\n : \"\";\n const url = String(value.url || \"\");\n // value.ts handles data URL formatting\n return title || url.slice(0, 32) + (url.length > 32 ? \"…\" : \"\");\n }\n if (typeId && typeId.startsWith(\"enum:\")) {\n const n = Number(value);\n const label = registry.enums.get(typeId)?.valueToLabel.get(n);\n return label ?? String(n);\n }\n const round4 = (n: number) => Math.round(Number(n) * 10000) / 10000;\n if (typeId === \"base.vec3\" && Array.isArray(value)) {\n const a = value as unknown[];\n return [\n round4(Number(a[0] ?? 0)),\n round4(Number(a[1] ?? 0)),\n round4(Number(a[2] ?? 0)),\n ].join(\",\");\n }\n const stringifyRounded = (v: unknown) => {\n try {\n return JSON.stringify(v, (_k, val) =>\n typeof val === \"number\" ? round4(val) : val\n );\n } catch {\n return String(v);\n }\n };\n if (\n typeId?.endsWith(\"[]\") ||\n Array.isArray(value) ||\n (typeof value === \"object\" && value !== null)\n ) {\n return stringifyRounded(value);\n }\n if (typeof value === \"number\") {\n const rounded = Math.round(Number(value) * 10000) / 10000;\n return String(rounded);\n }\n return String(value);\n },\n [registry]\n );\n\n const baseToElement = useCallback(\n (typeId?: string, value?: unknown) => {\n return (\n <span className=\"ml-1 opacity-60\">{baseToString(typeId, value)}</span>\n );\n },\n [baseToString]\n );\n\n const toString = useMemo(() => {\n if (overrides?.toString)\n return overrides.toString(baseToString, { registry });\n return baseToString;\n }, [overrides, baseToString, registry]);\n\n // Optional: toElement (not currently consumed by core UI)\n // Consumers can access it by passing through their own node renderers.\n const toElement = useMemo(() => {\n if (overrides?.toElement)\n return overrides.toElement(baseToElement, { registry });\n return baseToElement;\n }, [overrides, baseToElement, registry]);\n\n return (\n <div className=\"w-full h-screen flex flex-col\">\n <div className=\"p-2 border-b border-gray-300 flex gap-2 items-center\">\n {runner.isRunning() ? (\n <span className=\"ml-2 text-sm text-green-700\">\n Running: {runner.getRunningEngine()}\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 <label className=\"ml-2 text-sm\">Example:</label>\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={runner.isRunning()}\n title={\n runner.isRunning()\n ? \"Stop engine before switching example\"\n : 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 <label className=\"ml-2 text-sm\">Backend:</label>\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={runner.isRunning()}\n title={\n runner.isRunning()\n ? \"Stop engine before switching backend\"\n : 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=\"ml-2 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=\"ml-2 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={runner.getRunningEngine() ?? engine ?? \"\"}\n onChange={(e) => {\n const kind = e.target.value || undefined;\n onEngineChange?.(kind);\n }}\n >\n <option value=\"\">Select Engine…</option>\n <option value=\"push\">Push</option>\n <option value=\"batched\">Batched</option>\n <option value=\"pull\">Pull</option>\n <option value=\"hybrid\">Hybrid</option>\n <option value=\"step\">Step</option>\n </select>\n {runner.getRunningEngine() === \"step\" && (\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => runner.step()}\n disabled={!runner.isRunning()}\n >\n Step\n </button>\n )}\n {runner.getRunningEngine() === \"batched\" && (\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => runner.flush()}\n disabled={!runner.isRunning()}\n >\n Flush\n </button>\n )}\n {runner.isRunning() ? (\n <button\n className=\"border rounded px-2 py-1.5 text-red-700 border-red-600 flex items-center gap-1\"\n onClick={() => runner.dispose()}\n title=\"Stop engine\"\n >\n <StopIcon size={14} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Stop</span>\n </button>\n ) : (\n <button\n className=\"border rounded px-2 py-1.5 text-green-700 border-green-600 flex items-center gap-1 disabled:text-gray-400 disabled:border-gray-300\"\n onClick={() => {\n const kind = engine as EngineKind | undefined;\n if (!kind) return alert(\"Select an engine first.\");\n try {\n runner.launch(wb.export(), { engine: kind });\n } catch (err: unknown) {\n const message =\n err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n disabled={!engine}\n title={engine ? \"Start engine\" : \"Select an engine first\"}\n >\n <PlayIcon size={14} weight=\"fill\" />\n <span className=\"font-medium ml-1\">Start</span>\n </button>\n )}\n <button\n className=\"border border-gray-300 rounded px-2 py-1.5\"\n onClick={runAutoLayout}\n >\n Auto Layout\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={() => canvasRef.current?.fitView?.()}\n title=\"Fit View\"\n >\n Fit View\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={downloadGraph}\n >\n Download Graph\n </button>\n <button\n className=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={async () => {\n try {\n const def = wb.export();\n const positions = wb.getPositions();\n const snapshot = await runner.snapshotFull();\n const payload = {\n ...snapshot,\n def,\n positions,\n schemaVersion: 1,\n };\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 const d = new Date();\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const ts = `${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(\n d.getHours()\n )}${pad(d.getMinutes())}`;\n a.href = url;\n a.download = `spark-snapshot-${ts}.json`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n alert(message);\n }\n }}\n >\n Download Snapshot\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=\"ml-2 border border-gray-300 rounded px-2 py-1.5\"\n onClick={triggerUpload}\n >\n Upload Graph/Snapshot\n </button>\n <label className=\"ml-2 flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={debug}\n onChange={(e) => onDebugChange(e.target.checked)}\n />\n <span>Debug events</span>\n </label>\n <label className=\"ml-2 flex items-center gap-1\">\n <input\n type=\"checkbox\"\n checked={showValues}\n onChange={(e) => onShowValuesChange(e.target.checked)}\n />\n <span>Show values in nodes</span>\n </label>\n </div>\n <div className=\"flex flex-1 min-h-0\">\n <div className=\"flex-1 min-w-0\">\n <WorkbenchCanvas\n ref={canvasRef}\n showValues={showValues}\n toString={toString}\n toElement={toElement}\n getDefaultNodeSize={overrides?.getDefaultNodeSize}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toString={toString}\n toElement={toElement}\n contextPanel={overrides?.contextPanel}\n />\n </div>\n </div>\n );\n}\n\nexport function WorkbenchStudio({\n engine,\n onEngineChange,\n example,\n onExampleChange,\n backendKind,\n onBackendKindChange,\n httpBaseUrl,\n onHttpBaseUrlChange,\n wsUrl,\n onWsUrlChange,\n debug,\n onDebugChange,\n showValues,\n onShowValuesChange,\n hideWorkbench,\n onHideWorkbenchChange,\n autoScroll,\n onAutoScrollChange,\n backendOptions,\n overrides,\n onInit,\n onChange,\n}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: ExecutionBackendKind;\n onBackendKindChange: (v: ExecutionBackendKind) => void;\n httpBaseUrl: string;\n onHttpBaseUrlChange?: (v: string) => void;\n wsUrl: string;\n onWsUrlChange?: (v: string) => void;\n debug: boolean;\n onDebugChange: (v: boolean) => void;\n showValues: boolean;\n onShowValuesChange: (v: boolean) => void;\n hideWorkbench: boolean;\n onHideWorkbenchChange: (v: boolean) => void;\n autoScroll: boolean;\n onAutoScrollChange: (v: boolean) => void;\n backendOptions?: BackendOptions;\n overrides?: WorkbenchOverrides;\n onInit?: (args: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n setInitialGraph: (\n def: GraphDefinition,\n inputs?: Record<string, Record<string, unknown>>\n ) => Promise<void>;\n }) => void;\n onChange?: (args: {\n def: GraphDefinition;\n inputs: Record<string, Record<string, unknown>>;\n }) => void;\n}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n const runner = useMemo(() => {\n if (backendKind === \"remote-http\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n ...(backendOptions?.connectOptions && {\n connectOptions: backendOptions.connectOptions,\n }),\n ...(backendOptions?.onCustomEvent && {\n onCustomEvent: backendOptions.onCustomEvent,\n }),\n };\n return new RemoteGraphRunner(registry, backend);\n }\n\n if (backendKind === \"remote-ws\") {\n const backend: RemoteExecutionBackend = {\n kind: \"remote-ws\",\n url: wsUrl,\n ...(backendOptions?.connectOptions && {\n connectOptions: backendOptions.connectOptions,\n }),\n ...(backendOptions?.onCustomEvent && {\n onCustomEvent: backendOptions.onCustomEvent,\n }),\n };\n return new RemoteGraphRunner(registry, backend);\n }\n\n return new LocalGraphRunner(registry);\n }, [registry, backendKind, httpBaseUrl, wsUrl, backendOptions]);\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wb, runner, overrides]);\n\n return (\n <WorkbenchProvider\n wb={wb}\n runner={runner}\n registry={registry}\n setRegistry={setRegistry}\n overrides={overrides}\n >\n <WorkbenchStudioCanvas\n setRegistry={setRegistry}\n autoScroll={autoScroll}\n onAutoScrollChange={onAutoScrollChange}\n example={example}\n onExampleChange={onExampleChange}\n engine={engine}\n onEngineChange={onEngineChange}\n backendKind={backendKind}\n onBackendKindChange={(v) => {\n if (runner.isRunning()) runner.dispose();\n onBackendKindChange(v);\n }}\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 backendOptions={backendOptions}\n overrides={overrides}\n onInit={onInit}\n onChange={onChange}\n />\n </WorkbenchProvider>\n );\n}\n"],"names":["GraphBuilder","PushEngine","BatchedEngine","PullEngine","HybridEngine","StepEngine","HttpPollingTransport","WebSocketTransport","RemoteRunner","useCallback","useState","useEffect","useRef","useMemo","isTypedOutput","getTypedOutputTypeId","getTypedOutputValue","isInputPrivate","Position","getInputTypeId","createContext","useContext","_jsx","XCircleIcon","WarningCircleIcon","_jsxs","_Fragment","Handle","useUpdateNodeInternals","ArrowClockwiseIcon","useReactFlow","useImperativeHandle","ReactFlowProvider","ReactFlow","Background","BackgroundVariant","MiniMap","Controls","createSimpleGraphRegistry","createSimpleGraphDef","createAsyncGraphRegistry","createAsyncGraphDef","createProgressGraphRegistry","createProgressGraphDef","createValidationGraphRegistry","createValidationGraphDef","PlugsConnectedIcon","ClockClockwiseIcon","WifiHighIcon","WifiSlashIcon","StopIcon","PlayIcon"],"mappings":"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"}