@bian-womp/spark-workbench 0.2.13 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/hooks.ts","../../src/misc/value.ts","../../src/misc/constants.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 { GraphDefinition } from \"@bian-womp/spark-graph\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n\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<GraphDefinition[\"nodes\"][number], \"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<GraphDefinition[\"edges\"][number], \"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 {\n GraphBuilder,\n Registry,\n type GraphDefinition,\n} 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<GraphDefinition[\"nodes\"][number], \"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(\n edge: Omit<GraphDefinition[\"edges\"][number], \"id\"> & { id?: string }\n ): 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-graph\";\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 { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport {\n Engine,\n GraphDefinition,\n Registry,\n GraphRuntime,\n} 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 GraphDefinition,\n Registry,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n} from \"@bian-womp/spark-graph\";\nimport { RuntimeSnapshotFull } 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(\n (id) => ({ nodeId: id, typeId: \"\" } as any)\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(\n (id) => ({ nodeId: id, typeId: \"\" } as any)\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 { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport { Engine, GraphDefinition, 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 desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(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 desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(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 this.emit(\"transport\", { state: \"connecting\", kind });\n if (this.backend.kind === \"remote-http\") {\n if (!HttpPollingTransport)\n throw new Error(\"HttpPollingTransport not available\");\n transport = new HttpPollingTransport(this.backend.baseUrl);\n await transport.connect();\n } else if (this.backend.kind === \"remote-ws\") {\n if (!WebSocketTransport)\n throw new Error(\"WebSocketTransport not available\");\n transport = new WebSocketTransport(this.backend.url);\n await transport.connect();\n } else {\n throw new Error(\"Remote backend not configured\");\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 {\n type GraphDefinition,\n type Registry,\n isInputPrivate,\n getInputTypeId,\n} from \"@bian-womp/spark-graph\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { SimpleIssue, HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport { Position } from \"@xyflow/react\";\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 }>;\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: SimpleIssue[];\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, SimpleIssue[]>;\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_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n // Precompute which inputs are connected per node\n const connectedInputs: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const nid = e.target.nodeId;\n const hid = e.target.handle;\n if (!connectedInputs[nid]) connectedInputs[nid] = new Set<string>();\n connectedInputs[nid].add(hid);\n }\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n const inputHandles = Object.entries(desc?.inputs ?? {})\n .filter(([id]) => !isInputPrivate(desc?.inputs, id))\n .map(([id, v]) => ({ id, typeId: getInputTypeId(desc?.inputs, id) }));\n const outputHandles = Object.entries(desc?.outputs ?? {}).map(\n ([id, typeId]) => ({ id, typeId: formatDeclaredTypeSignature(typeId) })\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 // Match DefaultNode sizing heuristics to avoid hidden nodes during re-measure\n const HEADER_SIZE = NODE_HEADER_HEIGHT_PX;\n const ROW_SIZE = NODE_ROW_HEIGHT_PX;\n const maxRows = Math.max(inputHandles.length, outputHandles.length);\n // Allow external override to dictate initial size\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const initialWidth = overrideSize?.width ?? (opts.showValues ? 320 : 240);\n const initialHeight =\n overrideSize?.height ?? HEADER_SIZE + maxRows * ROW_SIZE;\n // Precompute handle bounds so edges can render immediately without waiting for measurement\n const handles = [\n // Inputs on the left as targets\n ...inputHandles.map((h, i) => ({\n id: h.id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER_SIZE + i * ROW_SIZE,\n width: 1,\n height: ROW_SIZE + 2,\n })),\n // Outputs on the right as sources\n ...outputHandles.map((h, i) => ({\n id: h.id,\n type: \"source\" as const,\n position: Position.Right,\n x: initialWidth - 1,\n y: HEADER_SIZE + i * ROW_SIZE,\n width: 1,\n height: ROW_SIZE + 2,\n })),\n ];\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) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout: [\n ...inputHandles.map((h, i) => ({\n id: h.id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2,\n })),\n ...outputHandles.map((h, i) => ({\n id: h.id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2,\n })),\n ],\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\n .filter((e) => {\n const src = nodeHandleMap[e.source.nodeId];\n const dst = nodeHandleMap[e.target.nodeId];\n if (!src || !dst) return false;\n return (\n src.outputs.has(e.source.handle) && dst.inputs.has(e.target.handle)\n );\n })\n .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 style =\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,\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?: SimpleIssue[] };\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 { Registry, GraphDefinition } 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 SimpleIssue,\n DebugEvent,\n} from \"../../core/contracts\";\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, SimpleIssue[]>;\n };\n validationByEdge: {\n errors: Record<string, boolean>;\n issues: Record<string, SimpleIssue[]>;\n };\n validationGlobal: SimpleIssue[];\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 { EdgeConvertError, NodeRunError } 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 SimpleIssue,\n DebugEvent,\n WorkbenchEventMap,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport { WorkbenchContext, WorkbenchContextValue } from \"./WorkbenchContext\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\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 } as NodeRunStatus;\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 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 const X = 720;\n const Y = 600;\n const pos: Record<string, { x: number; y: number }> = {};\n layers.forEach((layer, layerIndex) => {\n layer.forEach((id, itemIndex) => {\n pos[id] = { x: layerIndex * X, y: itemIndex * Y };\n });\n });\n wb.setPositions(pos);\n }, [wb]);\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 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 if (e?.reason === \"graph-updated\") {\n setNodeStatus((s) => {\n const next: typeof s = {};\n for (const n of wb.export().nodes) {\n next[n.nodeId] = { ...s[n.nodeId], invalidated: true };\n }\n return next;\n });\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, SimpleIssue[]> = {};\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({ level, message, code });\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({ level, message, code });\n }\n if (!d.input && !d.output) {\n const arr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n arr.push({ level, message, code });\n }\n }\n }\n return { inputs, outputs, issues };\n }, [validation]);\n\n const validationGlobal = useMemo(() => {\n const list: SimpleIssue[] = [];\n if (!validation) return list;\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 || (!d.nodeId && !d.edgeId)) {\n list.push({ level, code, message });\n }\n }\n return list;\n }, [validation]);\n\n const validationByEdge = useMemo(() => {\n const errors: Record<string, boolean> = {};\n const issues: Record<string, SimpleIssue[]> = {};\n if (!validation) return { errors, 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?.edgeId) {\n if (level === \"error\") errors[d.edgeId] = true;\n const arr = issues[d.edgeId] ?? (issues[d.edgeId] = []);\n arr.push({ level, message, code });\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 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 </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=\"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 </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 </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\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 { position: Position; y: number; type: \"source\" | \"target\" }\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 });\n // Back-compat: also store by id-only if not already set\n if (!m.has(h.id))\n m.set(h.id, { position: h.position, y: h.y, type: h.type });\n }\n return m;\n }, [layout]);\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 <React.Fragment key={h.id}>\n <Handle\n id={h.id}\n type=\"target\"\n position={position}\n isConnectable={isConnectable}\n className={cls}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={labelClassName + \" left-2\"}\n style={{\n top: (y ?? 0) - 8,\n right: \"50%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind: \"input\", id: h.id })}\n </div>\n )}\n </React.Fragment>\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 <React.Fragment key={h.id}>\n <Handle\n id={h.id}\n type=\"source\"\n position={position}\n isConnectable={isConnectable}\n className={`${cls} wb-nodrag wb-nowheel`}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={labelClassName + \" right-2\"}\n style={{\n top: (y ?? 0) - 8,\n left: \"50%\",\n textAlign: \"right\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind: \"output\", id: h.id })}\n </div>\n )}\n </React.Fragment>\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 {\n isTypedOutput,\n getTypedOutputValue,\n getInputTypeId,\n} from \"@bian-womp/spark-graph\";\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 status={status}\n validation={validation}\n />\n <DefaultNodeContent data={data} isConnectable={isConnectable} />\n </div>\n );\n});\nDefaultNode.displayName = \"DefaultNode\";\n\nexport function DefaultNodeHeader({\n id,\n title,\n status,\n validation,\n right,\n onInvalidate,\n}: {\n id: string;\n title: string;\n status: {\n activeRuns?: number;\n progress?: number;\n invalidated?: boolean;\n lastError?: unknown;\n };\n validation: { inputs?: any[]; outputs?: any[]; issues?: any[] };\n right?: React.ReactNode;\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 ↻\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: any) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n <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 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 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 {handleId}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {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 as any[]).map((h: any) => h?.id) : [];\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 {\n type GraphDefinition,\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} from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\n} from \"@phosphor-icons/react\";\nimport { useWorkbenchContext } 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} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\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\ntype 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\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 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 runAutoLayout();\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: any) {\n alert(String(err?.message ?? err));\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 {\n alert(\"Graph definition is empty or engine is not running\");\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: any) {\n alert(String(err?.message ?? err));\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: { mode: \"push\", 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 if (backendKind === \"remote-http\" && httpBaseUrl) {\n hydrateFromBackend(\"remote-http\", httpBaseUrl);\n } else if (backendKind === \"remote-ws\" && wsUrl) {\n hydrateFromBackend(\"remote-ws\", wsUrl);\n }\n }, [backendKind, httpBaseUrl, wsUrl, hydrateFromBackend]);\n\n useEffect(() => {\n if (autoLayoutRan.current) return;\n const cur = wb.export();\n const allMissing = cur.nodes.every((n) => !wb.getPositions()[n.nodeId]);\n if (allMissing) {\n autoLayoutRan.current = true;\n runAutoLayout();\n }\n }, [wb, runAutoLayout]);\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?: any) => {\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 typeof value.url === \"string\"\n ) {\n const title = value.title || \"\";\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 any[];\n return [round4(a[0] ?? 0), round4(a[1] ?? 0), round4(a[2] ?? 0)].join(\n \",\"\n );\n }\n const stringifyRounded = (v: any) => {\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: any) {\n alert(String(err?.message ?? err));\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: any) {\n alert(String(err?.message ?? err));\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 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 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 return new RemoteGraphRunner(registry, {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n });\n }\n\n if (backendKind === \"remote-ws\") {\n return new RemoteGraphRunner(registry, { kind: \"remote-ws\", url: wsUrl });\n }\n\n return new LocalGraphRunner(registry);\n }, [registry, backendKind, httpBaseUrl, wsUrl]);\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 >\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":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/runtime/AbstractGraphRunner.ts","../../src/runtime/LocalGraphRunner.ts","../../src/runtime/RemoteGraphRunner.ts","../../src/misc/hooks.ts","../../src/misc/value.ts","../../src/misc/constants.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 { GraphDefinition } from \"@bian-womp/spark-graph\";\nimport type {\n GraphActions,\n GraphEvents,\n LayoutEngine,\n Storage,\n Serializer,\n WorkbenchEventName,\n ValidationResult,\n WorkbenchEventMap,\n} from \"./contracts\";\nimport type { UIExtensionRegistry } from \"./ui-extensions\";\n\nexport abstract class AbstractWorkbench implements GraphActions, GraphEvents {\n protected layout?: LayoutEngine;\n protected storage?: Storage;\n protected serializer?: Serializer;\n protected ui: UIExtensionRegistry;\n\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<GraphDefinition[\"nodes\"][number], \"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<GraphDefinition[\"edges\"][number], \"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 {\n GraphBuilder,\n Registry,\n type GraphDefinition,\n} 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<GraphDefinition[\"nodes\"][number], \"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(\n edge: Omit<GraphDefinition[\"edges\"][number], \"id\"> & { id?: string }\n ): 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-graph\";\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 { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport {\n Engine,\n GraphDefinition,\n Registry,\n GraphRuntime,\n} 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 GraphDefinition,\n Registry,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n} from \"@bian-womp/spark-graph\";\nimport { RuntimeSnapshotFull } 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(\n (id) => ({ nodeId: id, typeId: \"\" } as any)\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(\n (id) => ({ nodeId: id, typeId: \"\" } as any)\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 { RuntimeSnapshotFull } from \"@bian-womp/spark-protocol\";\nimport { Engine, GraphDefinition, 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 desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(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 desc = this.registry.nodes.get(n.typeId);\n const handles = Object.keys(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 this.emit(\"transport\", { state: \"connecting\", kind });\n if (this.backend.kind === \"remote-http\") {\n if (!HttpPollingTransport)\n throw new Error(\"HttpPollingTransport not available\");\n transport = new HttpPollingTransport(this.backend.baseUrl);\n await transport.connect();\n } else if (this.backend.kind === \"remote-ws\") {\n if (!WebSocketTransport)\n throw new Error(\"WebSocketTransport not available\");\n transport = new WebSocketTransport(this.backend.url);\n await transport.connect();\n } else {\n throw new Error(\"Remote backend not configured\");\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 {\n type GraphDefinition,\n type Registry,\n isInputPrivate,\n getInputTypeId,\n} from \"@bian-womp/spark-graph\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { SimpleIssue, HandleIssue } from \"../core/contracts\";\nimport { formatDeclaredTypeSignature } from \"./value\";\nimport { NODE_HEADER_HEIGHT_PX, NODE_ROW_HEIGHT_PX } from \"./constants\";\nimport { Position } from \"@xyflow/react\";\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 }>;\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: SimpleIssue[];\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, SimpleIssue[]>;\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_ERROR = { stroke: \"#ef4444\", strokeWidth: 2 } as const;\n const EDGE_STYLE_RUNNING = { stroke: \"#3b82f6\" } as const;\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n // Precompute which inputs are connected per node\n const connectedInputs: Record<string, Set<string>> = {};\n for (const e of def.edges) {\n const nid = e.target.nodeId;\n const hid = e.target.handle;\n if (!connectedInputs[nid]) connectedInputs[nid] = new Set<string>();\n connectedInputs[nid].add(hid);\n }\n\n const nodes: RFNode[] = def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n const inputHandles = Object.entries(desc?.inputs ?? {})\n .filter(([id]) => !isInputPrivate(desc?.inputs, id))\n .map(([id, v]) => ({ id, typeId: getInputTypeId(desc?.inputs, id) }));\n const outputHandles = Object.entries(desc?.outputs ?? {}).map(\n ([id, typeId]) => ({ id, typeId: formatDeclaredTypeSignature(typeId) })\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 // Match DefaultNode sizing heuristics to avoid hidden nodes during re-measure\n const HEADER_SIZE = NODE_HEADER_HEIGHT_PX;\n const ROW_SIZE = NODE_ROW_HEIGHT_PX;\n const maxRows = Math.max(inputHandles.length, outputHandles.length);\n // Allow external override to dictate initial size\n const overrideSize = opts.getDefaultNodeSize?.(n.typeId);\n const initialWidth = overrideSize?.width ?? (opts.showValues ? 320 : 240);\n const initialHeight =\n overrideSize?.height ?? HEADER_SIZE + maxRows * ROW_SIZE;\n // Precompute handle bounds so edges can render immediately without waiting for measurement\n const handles = [\n // Inputs on the left as targets\n ...inputHandles.map((h, i) => ({\n id: h.id,\n type: \"target\" as const,\n position: Position.Left,\n x: 0,\n y: HEADER_SIZE + i * ROW_SIZE,\n width: 1,\n height: ROW_SIZE + 2,\n })),\n // Outputs on the right as sources\n ...outputHandles.map((h, i) => ({\n id: h.id,\n type: \"source\" as const,\n position: Position.Right,\n x: initialWidth - 1,\n y: HEADER_SIZE + i * ROW_SIZE,\n width: 1,\n height: ROW_SIZE + 2,\n })),\n ];\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) => [\n h.id,\n !!connectedInputs[n.nodeId]?.has(h.id),\n ])\n ),\n handleLayout: [\n ...inputHandles.map((h, i) => ({\n id: h.id,\n type: \"target\" as const,\n position: Position.Left,\n y: HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2,\n })),\n ...outputHandles.map((h, i) => ({\n id: h.id,\n type: \"source\" as const,\n position: Position.Right,\n y: HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2,\n })),\n ],\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\n .filter((e) => {\n const src = nodeHandleMap[e.source.nodeId];\n const dst = nodeHandleMap[e.target.nodeId];\n if (!src || !dst) return false;\n return (\n src.outputs.has(e.source.handle) && dst.inputs.has(e.target.handle)\n );\n })\n .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 style =\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,\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?: SimpleIssue[] };\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 { Registry, GraphDefinition } 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 SimpleIssue,\n DebugEvent,\n} from \"../../core/contracts\";\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, SimpleIssue[]>;\n };\n validationByEdge: {\n errors: Record<string, boolean>;\n issues: Record<string, SimpleIssue[]>;\n };\n validationGlobal: SimpleIssue[];\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 { EdgeConvertError, NodeRunError } 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 SimpleIssue,\n DebugEvent,\n WorkbenchEventMap,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport { WorkbenchContext, WorkbenchContextValue } from \"./WorkbenchContext\";\nimport { resolveOutputDisplay } from \"../value\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: IGraphRunner;\n registry: Registry;\n setRegistry: (r: Registry) => void;\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 } as NodeRunStatus;\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 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 const X = 720;\n const Y = 600;\n const pos: Record<string, { x: number; y: number }> = {};\n layers.forEach((layer, layerIndex) => {\n layer.forEach((id, itemIndex) => {\n pos[id] = { x: layerIndex * X, y: itemIndex * Y };\n });\n });\n wb.setPositions(pos);\n }, [wb]);\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 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 if (e?.reason === \"graph-updated\") {\n setNodeStatus((s) => {\n const next: typeof s = {};\n for (const n of wb.export().nodes) {\n next[n.nodeId] = { ...s[n.nodeId], invalidated: true };\n }\n return next;\n });\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, SimpleIssue[]> = {};\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({ level, message, code });\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({ level, message, code });\n }\n if (!d.input && !d.output) {\n const arr = issues[d.nodeId] ?? (issues[d.nodeId] = []);\n arr.push({ level, message, code });\n }\n }\n }\n return { inputs, outputs, issues };\n }, [validation]);\n\n const validationGlobal = useMemo(() => {\n const list: SimpleIssue[] = [];\n if (!validation) return list;\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 || (!d.nodeId && !d.edgeId)) {\n list.push({ level, code, message });\n }\n }\n return list;\n }, [validation]);\n\n const validationByEdge = useMemo(() => {\n const errors: Record<string, boolean> = {};\n const issues: Record<string, SimpleIssue[]> = {};\n if (!validation) return { errors, 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?.edgeId) {\n if (level === \"error\") errors[d.edgeId] = true;\n const arr = issues[d.edgeId] ?? (issues[d.edgeId] = []);\n arr.push({ level, message, code });\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 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 </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=\"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 </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 </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\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 { position: Position; y: number; type: \"source\" | \"target\" }\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 });\n // Back-compat: also store by id-only if not already set\n if (!m.has(h.id))\n m.set(h.id, { position: h.position, y: h.y, type: h.type });\n }\n return m;\n }, [layout]);\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 <React.Fragment key={h.id}>\n <Handle\n id={h.id}\n type=\"target\"\n position={position}\n isConnectable={isConnectable}\n className={cls}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={labelClassName + \" left-2\"}\n style={{\n top: (y ?? 0) - 8,\n right: \"50%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind: \"input\", id: h.id })}\n </div>\n )}\n </React.Fragment>\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 <React.Fragment key={h.id}>\n <Handle\n id={h.id}\n type=\"source\"\n position={position}\n isConnectable={isConnectable}\n className={`${cls} wb-nodrag wb-nowheel`}\n style={y !== undefined ? { top: y } : undefined}\n />\n {renderLabel && (\n <div\n className={labelClassName + \" right-2\"}\n style={{\n top: (y ?? 0) - 8,\n left: \"50%\",\n textAlign: \"right\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {renderLabel({ kind: \"output\", id: h.id })}\n </div>\n )}\n </React.Fragment>\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: any) => `${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 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 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 {handleId}\n </span>\n </>\n ) : (\n <>\n <span\n className=\"truncate shrink-0\"\n style={valueText !== undefined ? { maxWidth: \"40%\" } : {}}\n >\n {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 as any[]).map((h: any) => h?.id) : [];\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 {\n type GraphDefinition,\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} from \"@bian-womp/spark-remote\";\nimport {\n WifiHighIcon,\n WifiSlashIcon,\n ClockClockwiseIcon,\n PlugsConnectedIcon,\n PlayIcon,\n StopIcon,\n} from \"@phosphor-icons/react\";\nimport { useWorkbenchContext } 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} from \"../runtime/IGraphRunner\";\nimport { RemoteGraphRunner } from \"../runtime/RemoteGraphRunner\";\nimport { LocalGraphRunner } from \"../runtime/LocalGraphRunner\";\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\ntype 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\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 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 runAutoLayout();\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: any) {\n alert(String(err?.message ?? err));\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: any) {\n alert(String(err?.message ?? err));\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: { mode: \"push\", 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 if (backendKind === \"remote-http\" && httpBaseUrl) {\n hydrateFromBackend(\"remote-http\", httpBaseUrl);\n } else if (backendKind === \"remote-ws\" && wsUrl) {\n hydrateFromBackend(\"remote-ws\", wsUrl);\n }\n }, [backendKind, httpBaseUrl, wsUrl, hydrateFromBackend]);\n\n useEffect(() => {\n if (autoLayoutRan.current) return;\n const cur = wb.export();\n const allMissing = cur.nodes.every((n) => !wb.getPositions()[n.nodeId]);\n if (allMissing) {\n autoLayoutRan.current = true;\n runAutoLayout();\n }\n }, [wb, runAutoLayout]);\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?: any) => {\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 typeof value.url === \"string\"\n ) {\n const title = value.title || \"\";\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 any[];\n return [round4(a[0] ?? 0), round4(a[1] ?? 0), round4(a[2] ?? 0)].join(\n \",\"\n );\n }\n const stringifyRounded = (v: any) => {\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: any) {\n alert(String(err?.message ?? err));\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: any) {\n alert(String(err?.message ?? err));\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 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 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 return new RemoteGraphRunner(registry, {\n kind: \"remote-http\",\n baseUrl: httpBaseUrl,\n });\n }\n\n if (backendKind === \"remote-ws\") {\n return new RemoteGraphRunner(registry, { kind: \"remote-ws\", url: wsUrl });\n }\n\n return new LocalGraphRunner(registry);\n }, [registry, backendKind, httpBaseUrl, wsUrl]);\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 >\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":["_jsx","_jsxs","_Fragment"],"mappings":"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"}