@bian-womp/spark-workbench 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/adapters/react-flow/index.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/hooks.ts","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/mapping.ts","../../src/misc/IssueBadge.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/runtime/GraphRunner.ts","../../src/examples/reactflow/WorkbenchStudio.tsx","../../src/examples/reactflow/App.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 ): void;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphDefinition[\"edges\"][number], \"id\"> & { id?: string }\n ): void;\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 { GraphBuilder, Registry, type GraphDefinition } 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 ): void {\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 }\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 ): void {\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 }\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 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 }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n toggleNodeSelection(nodeId: string): void {\n this.selection.nodes = this.selection.nodes.includes(nodeId)\n ? this.selection.nodes.filter((id) => id !== nodeId)\n : [...this.selection.nodes, nodeId];\n this.emit(\"selectionChanged\", this.selection);\n }\n\n toggleEdgeSelection(edgeId: string): void {\n this.selection.edges = this.selection.edges.includes(edgeId)\n ? this.selection.edges.filter((id) => id !== edgeId)\n : [...this.selection.edges, edgeId];\n this.emit(\"selectionChanged\", this.selection);\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 type { GraphDefinition } from \"@bian-womp/spark-graph\";\nimport type { GraphPositionMap } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface ReactFlowMappingResult {\n nodes: Array<{\n id: string;\n data: Record<string, unknown>;\n position: { x: number; y: number };\n type?: string;\n }>;\n edges: Array<{\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n }>;\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: GraphPositionMap = {}\n): ReactFlowMappingResult {\n const nodes = def.nodes.map((n) => ({\n id: n.nodeId,\n data: { typeId: n.typeId, params: n.params },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n }));\n const edges = def.edges.map((e) => ({\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 }));\n return { nodes, edges };\n}\n\nexport class ReactFlowWorkbench {\n constructor(private wb: InMemoryWorkbench) {}\n\n get actions() {\n return this.wb;\n }\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n export(def?: GraphDefinition) {\n const d = def ?? this.wb.export();\n return toReactFlow(d);\n }\n}\n","import React, { createContext, useContext } from \"react\";\nimport type { Registry, GraphDefinition } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { GraphRunner, type EngineKind } from \"../../runtime/GraphRunner\";\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: GraphRunner;\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\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\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 { useCallback, useEffect, useState, useMemo } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n OnSelectionChangeFunc,\n} from \"reactflow\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { GraphRunner } from \"../runtime/GraphRunner\";\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 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 changes.forEach((c) => {\n if (c.type === \"position\" && c.position)\n wb.setPosition(c.id, c.position);\n if (c.type === \"remove\") wb.removeNode(c.id);\n if (c.type === \"select\") wb.toggleNodeSelection(c.id);\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 changes.forEach((c) => {\n if (c.type === \"remove\") wb.disconnect(c.id);\n else if (c.type === \"select\") wb.toggleEdgeSelection(c.id);\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 const onSelectionChange: OnSelectionChangeFunc = useCallback(\n (sel) => {\n const next = {\n nodes: sel.nodes.map((n) => n.id),\n edges: sel.edges.map((e) => e.id),\n };\n const cur = wb.getSelection();\n const sameLen =\n cur.nodes.length === next.nodes.length &&\n cur.edges.length === next.edges.length;\n const same =\n sameLen &&\n cur.nodes.every((id, i) => id === next.nodes[i]) &&\n cur.edges.every((id, i) => id === next.edges[i]);\n if (!same) wb.setSelection(next);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n onSelectionChange,\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: GraphRunner) {\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\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 React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n Registry,\n EdgeConvertErrorEvent,\n NodeRunErrorEvent,\n} from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { GraphRunner, type EngineKind } from \"../../runtime/GraphRunner\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n SimpleIssue,\n DebugEvent,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport { WorkbenchContext, WorkbenchContextValue } from \"./WorkbenchContext\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: GraphRunner;\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 // Validation\n const [validation, setValidation] = useState<\n | {\n ok: boolean;\n issues: Array<{ level: any; code: any; message: any; data?: any }>;\n }\n | 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\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 = 360;\n const Y = 180;\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 // 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 any)?.change?.type as\n | string\n | undefined;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const next = [\n { at: Date.now(), source, type, payload: structuredClone(payload) },\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 EdgeConvertErrorEvent;\n const nodeError = e as NodeRunErrorEvent;\n if ((edgeError as any)?.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 as any)?.nodeId) {\n const nodeId = (nodeError as any)?.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...(s[nodeId] ?? {}),\n lastError: (nodeError as any)?.err,\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 ...prev,\n [id]: {\n ...(prev[id] ?? {}),\n running: true,\n progress: 0,\n invalidated: false,\n },\n }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...(prev[id] ?? {}),\n running: true,\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: false },\n }));\n } else if (s.kind === \"edge-start\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: true },\n }));\n } else if (s.kind === \"edge-done\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: false },\n }));\n }\n return add(\"runner\", \"stats\")(s);\n });\n const off4 = wb.on(\"graphChanged\", add(\"workbench\", \"graphChanged\"));\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 return () => {\n off1();\n off2();\n off3();\n off3b();\n off4();\n off4b();\n off5();\n off5b();\n off6();\n off7();\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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\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 ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import type { GraphDefinition, Registry } from \"@bian-womp/spark-graph\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { SimpleIssue, HandleIssue } from \"../core/contracts\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown>;\n type?: string;\n selected?: boolean;\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}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n selectedNodeIds?: Set<string>,\n selectedEdgeIds?: Set<string>,\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 toDisplay?: (typeId?: string, value?: unknown) => string;\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 }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n const nodes: RFNode[] = def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n const inputHandles = Object.entries(desc?.inputs ?? {}).map(\n ([id, typeId]) => ({ id, typeId })\n );\n const outputHandles = Object.entries(desc?.outputs ?? {}).map(\n ([id, typeId]) => ({ id, 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 return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n showValues: opts?.showValues,\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 toDisplay: opts?.toDisplay,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts?.resolveNodeType?.(n.typeId) ?? \"@bian-womp/spark:default\",\n selected: selectedNodeIds ? selectedNodeIds.has(n.nodeId) : undefined,\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 src.outputs.has(e.source.handle) && dst.inputs.has(e.target.handle);\n })\n .map((e) => {\n const st = opts?.edgeStatus?.[e.id];\n const isRunning = !!st?.running;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts?.edgeValidation?.[e.id];\n const style =\n hasError || isInvalidEdge\n ? { stroke: \"#ef4444\", strokeWidth: 2 }\n : isRunning\n ? { stroke: \"#3b82f6\" }\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: selectedEdgeIds ? selectedEdgeIds.has(e.id) : undefined,\n animated: isRunning,\n style,\n };\n });\n\n return { nodes, edges };\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React from \"react\";\nimport { Handle, Position, type NodeProps } from \"reactflow\";\nimport cx from \"classnames\";\nimport { XCircleIcon } from \"@phosphor-icons/react\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n SimpleIssue,\n} from \"../core/contracts\";\n\nexport const DefaultNode: React.FC<NodeProps> = React.memo(\n function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n }: NodeProps<{\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n outputHandles: Array<{ id: string; typeId: string }>;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n toDisplay?: (typeId?: string, value?: unknown) => string;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: SimpleIssue[];\n };\n }>) {\n const typeId = data.typeId;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n const status = data.status ?? {};\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const HEADER_SIZE = 24;\n const ROW_SIZE = 22;\n const maxRows = Math.max(inputEntries.length, outputEntries.length);\n const minHeight = HEADER_SIZE + maxRows * ROW_SIZE;\n const minWidth = data.showValues ? 320 : 160;\n\n const topFor = (i: number) => HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2;\n\n const hasError = !!status.lastError;\n const isRunning = !!status.running;\n const isInvalid = !!status.invalidated && !isRunning && !hasError;\n const borderClasses = selected\n ? \"border-2 border-gray-900 dark:border-gray-100\"\n : hasError\n ? \"border-2 border-red-500\"\n : isRunning\n ? \"border-2 border-blue-500 ring-2 ring-blue-200 dark:ring-blue-900\"\n : isInvalid\n ? \"border-2 border-amber-500 border-dashed\"\n : \"border border-gray-500 dark:border-gray-400\";\n\n const pct = Math.round(\n Math.max(0, Math.min(1, Number(status.progress) || 0)) * 100\n );\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/70 !dark:bg-stone-900 border-solid\",\n borderClasses\n )}\n style={{ position: \"relative\", minHeight: minHeight, minWidth }}\n >\n <div className=\"flex h-6 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 <strong className=\"flex-1 h-full leading-6 text-xs\">{typeId}</strong>\n <div className=\"flex items-center gap-1\">\n {hasError && (\n <span\n title={String(\n (status.lastError as any)?.message ?? status.lastError\n )}\n >\n <XCircleIcon size={12} weight=\"fill\" className=\"text-red-500\" />\n </span>\n )}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n <span className=\"text-[10px] opacity-70\">({id})</span>\n </div>\n </div>\n {(isRunning || pct > 0) && (\n <div className=\"h-1 bg-blue-200 dark:bg-blue-900\">\n <div\n className=\"h-1 bg-blue-500 transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n )}\n\n {inputEntries.map((entry, i) => {\n const vIssues = validation.inputs.filter(\n (v) => v.handle === entry.id\n );\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 return (\n <React.Fragment key={`in-${entry.id}`}>\n <Handle\n id={entry.id}\n type=\"target\"\n position={Position.Left}\n isConnectable={isConnectable}\n className={cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\n )}\n style={{ left: -5, top: topFor(i) }}\n />\n <div\n className=\"absolute left-2 text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\"\n style={{ top: topFor(i) - 8 }}\n title={`${entry.id}: ${entry.typeId}`}\n >\n {entry.id}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"ml-1\"\n title={title}\n />\n )}\n {data.showValues && (\n <span className=\"ml-1 opacity-60\">\n {data.toDisplay\n ? data.toDisplay(\n entry.typeId,\n data.inputValues?.[entry.id]\n )\n : String(data.inputValues?.[entry.id])}\n </span>\n )}\n </div>\n </React.Fragment>\n );\n })}\n\n {outputEntries.map((entry, i) => {\n const vIssues = validation.outputs.filter(\n (v) => v.handle === entry.id\n );\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 return (\n <React.Fragment key={`out-${entry.id}`}>\n <Handle\n id={entry.id}\n type=\"source\"\n position={Position.Right}\n isConnectable={isConnectable}\n className={cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400 !rounded-none\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\n )}\n style={{ right: -5, top: topFor(i) }}\n />\n <div\n className=\"absolute right-2 text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\"\n style={{ top: topFor(i) - 8, textAlign: \"right\" }}\n title={`${entry.id}: ${entry.typeId}`}\n >\n {entry.id}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"ml-1\"\n title={title}\n />\n )}\n {data.showValues && (\n <span className=\"ml-1 opacity-60\">\n {data.toDisplay\n ? data.toDisplay(\n entry.typeId,\n data.outputValues?.[entry.id]\n )\n : String(data.outputValues?.[entry.id])}\n </span>\n )}\n </div>\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n);\nDefaultNode.displayName = \"DefaultNode\";\n","import React from \"react\";\nimport { useReactFlow } from \"reactflow\";\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 if (!open || !clientPos) return null;\n const items = Array.from(registry.nodes.keys());\n\n const handleClick = (typeId: string) => {\n const p = rf.project({ x: clientPos.x, y: clientPos.y });\n onAdd(typeId, p);\n onClose();\n };\n\n return (\n <div\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: clientPos.x, top: clientPos.y }}\n onMouseLeave={onClose}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Add Node</div>\n <div className=\"max-h-60 overflow-auto\">\n {items.map((id) => (\n <button\n key={id}\n onClick={() => handleClick(id)}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100 cursor-pointer\"\n >\n {id}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport ReactFlow, { Background, Controls, MiniMap } from \"reactflow\";\nimport \"reactflow/dist/style.css\";\nimport { toReactFlow } from \"./mapping\";\nimport { useWorkbenchBridge } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function WorkbenchCanvas({\n showValues,\n toDisplay,\n}: {\n showValues?: boolean;\n toDisplay?: (typeId?: string, value?: unknown) => string;\n}) {\n const {\n wb,\n registry,\n inputsMap,\n outputsMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n } = useWorkbenchContext();\n const ioValues = { inputs: inputsMap, outputs: outputsMap };\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n onSelectionChange,\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> = { \"@bian-womp/spark:default\": DefaultNode };\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}` : \"@bian-womp/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 return toReactFlow(\n def,\n wb.getPositions(),\n registry,\n new Set(sel.nodes),\n new Set(sel.edges),\n {\n showValues,\n inputs: ioValues.inputs,\n outputs: ioValues.outputs,\n resolveNodeType,\n toDisplay,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n }\n );\n }, [\n showValues,\n ioValues,\n valuesTick,\n toDisplay,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n ]);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n };\n const addNodeAt = (typeId: string, pos: { x: number; y: number }) => {\n wb.addNode({ typeId, position: pos });\n };\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n selectionOnDrag\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onSelectionChange={onSelectionChange}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n fitView\n >\n <Background />\n <MiniMap />\n <Controls />\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n onAdd={addNodeAt}\n onClose={() => setMenuOpen(false)}\n />\n </ReactFlow>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\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 return JSON.stringify(v, 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, idx) => (\n <div\n key={`${ev.at}:${idx}`}\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-8 shrink-0 text-right text-gray-500 select-none\">\n {idx + 1}\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-10\">\n {renderPayload(ev.payload)}\n </pre>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\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 toDisplay,\n setInput,\n}: {\n debug?: boolean;\n autoScroll?: boolean;\n hideWorkbench?: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n onHideWorkbenchChange?: (v: boolean) => void;\n toDisplay: (typeId?: string, value?: unknown) => string;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n outputsMap,\n nodeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\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.keys(selectedDesc?.inputs ?? {});\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 = desc?.inputs?.[h];\n const current = nodeInputs[h];\n const display = toDisplay(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 <div className=\"font-semibold mb-2\">Inspector</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>Type: {selectedEdge.typeId}</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 = (selectedDesc?.inputs ?? {})[h];\n const isLinked = def.edges.some(\n (e) =>\n e.target.nodeId === selectedNodeId && 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] ?? toDisplay(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] ?? toDisplay(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-28\">\n {h}\n <span className=\"text-gray-500 ml-1 text-[11px]\">\n {selectedDesc?.inputs?.[h]}\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={drafts[h] ?? toDisplay(typeId, current)}\n onChange={(e) => {\n const label = String(e.target.value);\n const byLabel = registry.getEnumValue(\n typeId,\n label\n );\n let raw = (\n byLabel !== undefined ? byLabel : Number(label)\n ) as number | undefined;\n if (!Number.isFinite(raw as number))\n raw = undefined;\n setInput(h, raw);\n const display = toDisplay(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.getEnumOptions?.(typeId!).map((opt) => (\n <option key={opt.value} value={opt.label}>\n {opt.label}\n </option>\n ))}\n </select>\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\">{h}</label>\n <div className=\"flex-1\">\n {toDisplay(selectedDesc?.outputs?.[h], nodeOutputs[h])}\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 {\n Engine,\n EngineEventName,\n GraphDefinition,\n Registry,\n GraphRuntime,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n type RuntimeEventMap,\n} from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n RemoteRunner,\n WebSocketTransport,\n} from \"@bian-womp/spark-remote\";\n\ntype RunnerEventListener<K extends RunnerEventName> = (\n e: RunnerEventMap[K]\n) => void;\n\nexport type EngineKind = \"push\" | \"batched\" | \"pull\" | \"hybrid\" | \"step\";\n\nexport type RunnerEventName = EngineEventName | \"status\";\n\nexport type RemoteTransport = HttpPollingTransport | WebSocketTransport;\n\nexport interface RunnerStatusEvent {\n running: boolean;\n engine?: EngineKind;\n}\n\nexport interface RunnerEventMap extends RuntimeEventMap {\n status: RunnerStatusEvent;\n}\n\nexport interface RunnerOptions {\n engine: EngineKind;\n batched?: { flushIntervalMs?: number };\n hybrid?: { windowMs?: number; batchThreshold?: number };\n}\n\nexport type ExecutionBackend =\n | { kind: \"local\" }\n | { kind: \"remote-http\"; baseUrl: string }\n | { kind: \"remote-ws\"; url: string };\n\nexport class GraphRunner {\n private runtime?: GraphRuntime;\n private engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n private stagedInputs: Record<string, Record<string, unknown>> = {};\n private runningKind?: EngineKind;\n private backend: ExecutionBackend = { kind: \"local\" };\n // Remote state\n private remote?: {\n runner: RemoteRunner;\n transport: RemoteTransport;\n valueCache: Map<string, { io: \"input\" | \"output\"; value: unknown }>;\n listenersBound: boolean;\n };\n\n constructor(private registry: Registry, backend?: ExecutionBackend) {\n if (backend) this.backend = backend;\n }\n\n build(def: GraphDefinition): void {\n if (this.backend.kind === \"local\") {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n return;\n }\n // Remote: no-op here; build is performed on remote server during launch\n }\n\n update(def: GraphDefinition): void {\n if (this.backend.kind === \"local\") {\n if (!this.runtime) return;\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n return;\n }\n // Remote: forward update; ignore errors (fire-and-forget)\n void this.ensureRemote().then(async (rc) => {\n try {\n await rc.runner.update(def);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } catch {}\n });\n }\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 if (this.backend.kind === \"local\") {\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 for (const [handle, value] of Object.entries(map)) {\n this.engine.setInput(nodeId, handle, value);\n }\n }\n return;\n }\n // Remote: build remotely then launch\n void this.ensureRemote().then(async (rc) => {\n await rc.runner.build(def);\n const eng = rc.runner.getEngine();\n if (!rc.listenersBound) {\n eng.on(\"value\", (e: any) => {\n rc.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e: any) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e: any) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e: any) => this.emit(\"stats\", e));\n rc.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 for (const [handle, value] of Object.entries(map)) {\n this.engine.setInput(nodeId, handle, value);\n }\n }\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) this.engine.setInput(nodeId, handle, value);\n }\n\n async step(): Promise<void> {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\n const eng = this.engine;\n if (eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\n const eng = this.engine;\n if (eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n flush(): void {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\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.backend.kind === \"local\") {\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 const cache = this.remote?.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 if (this.backend.kind === \"local\") {\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.__unsafe_getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n if (this.isRunning()) {\n out[n.nodeId] = runtimeInputs;\n } else {\n const merged = { ...runtimeInputs, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n }\n return out;\n }\n const cache = this.remote?.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 = this.isRunning() ? cur : { ...cur, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\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 private 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 this.remote = 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 // Ensure remote transport/runner\n private async ensureRemote(): Promise<{\n runner: RemoteRunner;\n transport: RemoteTransport;\n valueCache: Map<string, { io: \"input\" | \"output\"; value: unknown }>;\n listenersBound: boolean;\n }> {\n if (this.remote) return this.remote;\n let transport: RemoteTransport;\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.remote = {\n runner,\n transport,\n valueCache: new Map(),\n listenersBound: false,\n };\n return this.remote;\n }\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n Registry,\n createAsyncGraphDef,\n createAsyncGraphRegistry,\n createProgressGraphDef,\n createProgressGraphRegistry,\n createValidationGraphDef,\n createValidationGraphRegistry,\n createSimpleGraphDef,\n createSimpleGraphRegistry,\n} from \"@bian-womp/spark-graph\";\nimport { useWorkbenchContext } from \"../../misc/context/WorkbenchContext\";\nimport { WorkbenchProvider } from \"../../misc/context/WorkbenchContext.provider\";\nimport { WorkbenchCanvas } from \"../../misc/WorkbenchCanvas\";\nimport { Inspector } from \"../../misc/Inspector\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { DefaultUIExtensionRegistry } from \"../../core/ui-extensions\";\nimport { EngineKind, GraphRunner } from \"../../runtime/GraphRunner\";\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}: {\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: \"local\" | \"remote-http\" | \"remote-ws\";\n onBackendKindChange: (v: \"local\" | \"remote-http\" | \"remote-ws\") => 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}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\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 ?? \"simple\");\n\n const lastAutoLaunched = useRef<string | undefined>(undefined);\n const autoLayoutRan = useRef(false);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n switch (key) {\n case \"simple\": {\n const r = createSimpleGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createSimpleGraphDef());\n break;\n }\n case \"async\": {\n const r = createAsyncGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createAsyncGraphDef());\n break;\n }\n case \"progress\": {\n const r = createProgressGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createProgressGraphDef());\n break;\n }\n case \"validation\": {\n const r = createValidationGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createValidationGraphDef());\n break;\n }\n default: {\n const r = createSimpleGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createSimpleGraphDef());\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [runner, wb, onExampleChange, runAutoLayout]\n );\n\n // Ensure initial example is loaded (and sync when example prop changes)\n useEffect(() => {\n applyExample(example ?? \"simple\");\n }, [example, wb]);\n\n useEffect(() => {\n if (!engine) return;\n if (runner.isRunning()) 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]);\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 setInput = 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 \"float\": {\n const n = Number(raw);\n value = Number.isFinite(n) ? n : 0;\n break;\n }\n case \"bool\": {\n value = Boolean(raw);\n break;\n }\n case \"string\": {\n value = String(raw);\n break;\n }\n case \"float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(x));\n break;\n }\n case \"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 \"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 toDisplay = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeId && typeId.startsWith(\"enum:\")) {\n const n = Number(value);\n const label = registry.getEnumLabel(typeId, n);\n return label ?? String(n);\n }\n const round4 = (n: number) => Math.round(Number(n) * 10000) / 10000;\n if (typeId === \"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 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 <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=\"simple\">Simple</option>\n <option value=\"async\">Async Chain</option>\n <option value=\"progress\">Progress + Errors</option>\n <option value=\"validation\">Validation</option>\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) => onBackendKindChange(e.target.value as any)}\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\" && (\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\" && (\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\"\n onClick={() => runner.step()}\n disabled={!runner.isRunning()}\n >\n Step\n </button>\n )}\n {runner.getRunningEngine() === \"batched\" && (\n <button\n className=\"ml-2\"\n onClick={() => runner.flush()}\n disabled={!runner.isRunning()}\n >\n Flush\n </button>\n )}\n {runner.isRunning() ? (\n <button\n onClick={() => runner.dispose()}\n disabled={!runner.isRunning()}\n >\n Stop\n </button>\n ) : (\n <button\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 >\n Start\n </button>\n )}\n <button onClick={runAutoLayout}>Auto Layout</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 key={exampleState}\n showValues={showValues}\n toDisplay={toDisplay}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toDisplay={toDisplay}\n />\n </div>\n </div>\n );\n}\n\nexport default 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}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: \"local\" | \"remote-http\" | \"remote-ws\";\n onBackendKindChange: (v: \"local\" | \"remote-http\" | \"remote-ws\") => 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}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n const runner = useMemo(() => {\n const backend =\n backendKind === \"remote-http\"\n ? ({ kind: \"remote-http\", baseUrl: httpBaseUrl } as const)\n : backendKind === \"remote-ws\"\n ? ({ kind: \"remote-ws\", url: wsUrl } as const)\n : ({ kind: \"local\" } as const);\n return new GraphRunner(registry, backend as any);\n }, [registry, backendKind, httpBaseUrl, wsUrl]);\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 />\n </WorkbenchProvider>\n );\n}\n","import { useEffect } from \"react\";\nimport WorkbenchStudio from \"./WorkbenchStudio\";\nimport { useQueryParamBoolean, useQueryParamString } from \"../../misc/hooks\";\nimport { ExecutionBackend } from \"src/runtime/GraphRunner\";\n\nexport default function App() {\n const [engine, setEngine] = useQueryParamString(\"engine\", \"\");\n const [example, setExample] = useQueryParamString(\"example\", \"simple\");\n const [debug, setDebug] = useQueryParamBoolean(\"debug\", false);\n const [showValues, setShowValues] = useQueryParamBoolean(\"values\", false);\n const [hideWorkbench, setHideWorkbench] = useQueryParamBoolean(\n \"hideWb\",\n false\n );\n const [autoScroll, setAutoScroll] = useQueryParamBoolean(\"autoScroll\", true);\n // Backend selection via URL params\n const [backendKind, setBackendKind] = useQueryParamString(\"backend\", \"local\");\n const [httpBaseUrl, setHttpBaseUrl] = useQueryParamString(\n \"sparkHttp\",\n \"http://127.0.0.1:18080\"\n );\n const [wsUrl, setWsUrl] = useQueryParamString(\n \"sparkWs\",\n \"ws://127.0.0.1:18081\"\n );\n\n useEffect(() => {\n document.getElementById(\"loading-screen\")?.remove();\n }, []);\n\n return (\n <WorkbenchStudio\n engine={engine}\n onEngineChange={setEngine}\n example={example}\n onExampleChange={setExample}\n backendKind={(backendKind || \"local\") as ExecutionBackend[\"kind\"]}\n onBackendKindChange={(v) => setBackendKind(v)}\n httpBaseUrl={httpBaseUrl || \"http://127.0.0.1:18080\"}\n onHttpBaseUrlChange={setHttpBaseUrl}\n wsUrl={wsUrl || \"ws://127.0.0.1:18081\"}\n onWsUrlChange={setWsUrl}\n debug={debug}\n onDebugChange={setDebug}\n showValues={showValues}\n onShowValuesChange={setShowValues}\n hideWorkbench={hideWorkbench}\n onHideWorkbenchChange={setHideWorkbench}\n autoScroll={autoScroll}\n onAutoScrollChange={setAutoScroll}\n />\n );\n}\n"],"names":["GraphBuilder","toReactFlow","createContext","useContext","useCallback","useState","useEffect","useMemo","_jsx","XCircleIcon","WarningCircleIcon","_jsxs","Handle","Position","useReactFlow","Background","MiniMap","Controls","useRef","PushEngine","BatchedEngine","PullEngine","HybridEngine","StepEngine","HttpPollingTransport","WebSocketTransport","RemoteRunner","createSimpleGraphRegistry","createSimpleGraphDef","createAsyncGraphRegistry","createAsyncGraphDef","createProgressGraphRegistry","createProgressGraphDef","createValidationGraphRegistry","createValidationGraphDef"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/core/ui-extensions.ts","../../src/core/AbstractWorkbench.ts","../../src/core/InMemoryWorkbench.ts","../../src/adapters/cli/index.ts","../../src/adapters/react-flow/index.ts","../../src/misc/context/WorkbenchContext.tsx","../../src/misc/hooks.ts","../../src/misc/context/WorkbenchContext.provider.tsx","../../src/misc/mapping.ts","../../src/misc/IssueBadge.tsx","../../src/misc/DefaultNode.tsx","../../src/misc/DefaultContextMenu.tsx","../../src/misc/WorkbenchCanvas.tsx","../../src/misc/DebugEvents.tsx","../../src/misc/Inspector.tsx","../../src/runtime/GraphRunner.ts","../../src/examples/reactflow/WorkbenchStudio.tsx","../../src/examples/reactflow/App.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 ): void;\n abstract removeNode(nodeId: string): void;\n abstract connect(\n edge: Omit<GraphDefinition[\"edges\"][number], \"id\"> & { id?: string }\n ): void;\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 { GraphBuilder, Registry, type GraphDefinition } 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 ): void {\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 }\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 ): void {\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 }\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 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 }\n\n getSelection(): { nodes: string[]; edges: string[] } {\n return {\n nodes: [...this.selection.nodes],\n edges: [...this.selection.edges],\n };\n }\n\n toggleNodeSelection(nodeId: string): void {\n this.selection.nodes = this.selection.nodes.includes(nodeId)\n ? this.selection.nodes.filter((id) => id !== nodeId)\n : [...this.selection.nodes, nodeId];\n this.emit(\"selectionChanged\", this.selection);\n }\n\n toggleEdgeSelection(edgeId: string): void {\n this.selection.edges = this.selection.edges.includes(edgeId)\n ? this.selection.edges.filter((id) => id !== edgeId)\n : [...this.selection.edges, edgeId];\n this.emit(\"selectionChanged\", this.selection);\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 type { GraphDefinition } from \"@bian-womp/spark-graph\";\nimport type { GraphPositionMap } from \"../../core/contracts\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\n\nexport interface ReactFlowMappingResult {\n nodes: Array<{\n id: string;\n data: Record<string, unknown>;\n position: { x: number; y: number };\n type?: string;\n }>;\n edges: Array<{\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n type?: string;\n }>;\n}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: GraphPositionMap = {}\n): ReactFlowMappingResult {\n const nodes = def.nodes.map((n) => ({\n id: n.nodeId,\n data: { typeId: n.typeId, params: n.params },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n }));\n const edges = def.edges.map((e) => ({\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 }));\n return { nodes, edges };\n}\n\nexport class ReactFlowWorkbench {\n constructor(private wb: InMemoryWorkbench) {}\n\n get actions() {\n return this.wb;\n }\n\n async load(def: GraphDefinition) {\n await this.wb.load(def);\n }\n\n export(def?: GraphDefinition) {\n const d = def ?? this.wb.export();\n return toReactFlow(d);\n }\n}\n","import React, { createContext, useContext } from \"react\";\nimport type { Registry, GraphDefinition } from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { GraphRunner, type EngineKind } from \"../../runtime/GraphRunner\";\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: GraphRunner;\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\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\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 { useCallback, useEffect, useState, useMemo } from \"react\";\nimport type {\n OnConnect,\n OnEdgesChange,\n OnEdgesDelete,\n OnNodesChange,\n OnNodesDelete,\n OnSelectionChangeFunc,\n} from \"reactflow\";\nimport type { InMemoryWorkbench } from \"../core/InMemoryWorkbench\";\nimport { GraphRunner } from \"../runtime/GraphRunner\";\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 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 changes.forEach((c) => {\n if (c.type === \"position\" && c.position)\n wb.setPosition(c.id, c.position);\n if (c.type === \"remove\") wb.removeNode(c.id);\n if (c.type === \"select\") wb.toggleNodeSelection(c.id);\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 changes.forEach((c) => {\n if (c.type === \"remove\") wb.disconnect(c.id);\n else if (c.type === \"select\") wb.toggleEdgeSelection(c.id);\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 const onSelectionChange: OnSelectionChangeFunc = useCallback(\n (sel) => {\n const next = {\n nodes: sel.nodes.map((n) => n.id),\n edges: sel.edges.map((e) => e.id),\n };\n const cur = wb.getSelection();\n const sameLen =\n cur.nodes.length === next.nodes.length &&\n cur.edges.length === next.edges.length;\n const same =\n sameLen &&\n cur.nodes.every((id, i) => id === next.nodes[i]) &&\n cur.edges.every((id, i) => id === next.edges[i]);\n if (!same) wb.setSelection(next);\n },\n [wb]\n );\n\n return {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n onSelectionChange,\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: GraphRunner) {\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\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 React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n Registry,\n EdgeConvertErrorEvent,\n NodeRunErrorEvent,\n} from \"@bian-womp/spark-graph\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { GraphRunner, type EngineKind } from \"../../runtime/GraphRunner\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n EdgeRunStatus,\n SimpleIssue,\n DebugEvent,\n} from \"../../core/contracts\";\nimport {\n useWorkbenchGraphTick,\n useWorkbenchGraphUiTick,\n useWorkbenchVersionTick,\n} from \"../hooks\";\nimport { WorkbenchContext, WorkbenchContextValue } from \"./WorkbenchContext\";\n\nexport function WorkbenchProvider({\n wb,\n runner,\n registry,\n setRegistry,\n children,\n}: {\n wb: InMemoryWorkbench;\n runner: GraphRunner;\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 // Validation\n const [validation, setValidation] = useState<\n | {\n ok: boolean;\n issues: Array<{ level: any; code: any; message: any; data?: any }>;\n }\n | 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\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 = 360;\n const Y = 180;\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 // 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 any)?.change?.type as\n | string\n | undefined;\n if (changeType === \"moveNode\" || changeType === \"moveNodes\")\n return prev;\n }\n const next = [\n { at: Date.now(), source, type, payload: structuredClone(payload) },\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 EdgeConvertErrorEvent;\n const nodeError = e as NodeRunErrorEvent;\n if ((edgeError as any)?.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 as any)?.nodeId) {\n const nodeId = (nodeError as any)?.nodeId as string;\n setNodeStatus((s) => ({\n ...s,\n [nodeId]: {\n ...(s[nodeId] ?? {}),\n lastError: (nodeError as any)?.err,\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 ...prev,\n [id]: {\n ...(prev[id] ?? {}),\n running: true,\n progress: 0,\n invalidated: false,\n },\n }));\n } else if (s.kind === \"node-progress\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: {\n ...(prev[id] ?? {}),\n running: true,\n progress: Number(s.progress) || 0,\n },\n }));\n } else if (s.kind === \"node-done\") {\n const id = s.nodeId;\n setNodeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: false },\n }));\n } else if (s.kind === \"edge-start\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: true },\n }));\n } else if (s.kind === \"edge-done\") {\n const id = s.edgeId;\n setEdgeStatus((prev) => ({\n ...prev,\n [id]: { ...(prev[id] ?? {}), running: false },\n }));\n }\n return add(\"runner\", \"stats\")(s);\n });\n const off4 = wb.on(\"graphChanged\", add(\"workbench\", \"graphChanged\"));\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 return () => {\n off1();\n off2();\n off3();\n off3b();\n off4();\n off4b();\n off5();\n off5b();\n off6();\n off7();\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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 as any)?.data;\n const level = (is as any)?.level;\n const code = String((is as any)?.code ?? \"\");\n const message = String((is as any)?.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 validationByNode,\n validationByEdge,\n validationGlobal,\n events,\n clearEvents,\n isRunning,\n engineKind,\n start,\n stop,\n step,\n flush,\n runAutoLayout,\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 ]\n );\n\n return (\n <WorkbenchContext.Provider value={value}>\n {children}\n </WorkbenchContext.Provider>\n );\n}\n","import type { GraphDefinition, Registry } from \"@bian-womp/spark-graph\";\nimport type { EdgeRunStatus, NodeRunStatus } from \"../core/contracts\";\nimport type { SimpleIssue, HandleIssue } from \"../core/contracts\";\n\nexport interface RFNode {\n id: string;\n position: { x: number; y: number };\n data: Record<string, unknown>;\n type?: string;\n selected?: boolean;\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}\n\nexport function toReactFlow(\n def: GraphDefinition,\n positions: Record<string, { x: number; y: number }>,\n registry: Registry,\n selectedNodeIds?: Set<string>,\n selectedEdgeIds?: Set<string>,\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 toDisplay?: (typeId?: string, value?: unknown) => string;\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 }\n): { nodes: RFNode[]; edges: RFEdge[] } {\n const nodeHandleMap: Record<\n string,\n { inputs: Set<string>; outputs: Set<string> }\n > = {};\n const nodes: RFNode[] = def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n const inputHandles = Object.entries(desc?.inputs ?? {}).map(\n ([id, typeId]) => ({ id, typeId })\n );\n const outputHandles = Object.entries(desc?.outputs ?? {}).map(\n ([id, typeId]) => ({ id, 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 return {\n id: n.nodeId,\n data: {\n typeId: n.typeId,\n params: n.params,\n inputHandles,\n outputHandles,\n showValues: opts?.showValues,\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 toDisplay: opts?.toDisplay,\n },\n position: positions[n.nodeId] ?? { x: 0, y: 0 },\n type: opts?.resolveNodeType?.(n.typeId) ?? \"@bian-womp/spark:default\",\n selected: selectedNodeIds ? selectedNodeIds.has(n.nodeId) : undefined,\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 src.outputs.has(e.source.handle) && dst.inputs.has(e.target.handle);\n })\n .map((e) => {\n const st = opts?.edgeStatus?.[e.id];\n const isRunning = !!st?.running;\n const hasError = !!st?.lastError;\n const isInvalidEdge = !!opts?.edgeValidation?.[e.id];\n const style =\n hasError || isInvalidEdge\n ? { stroke: \"#ef4444\", strokeWidth: 2 }\n : isRunning\n ? { stroke: \"#3b82f6\" }\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: selectedEdgeIds ? selectedEdgeIds.has(e.id) : undefined,\n animated: isRunning,\n style,\n };\n });\n\n return { nodes, edges };\n}\n","import React from \"react\";\nimport { WarningCircleIcon, XCircleIcon } from \"@phosphor-icons/react\";\n\nexport function IssueBadge({\n level,\n title,\n size = 12,\n className,\n}: {\n level: \"error\" | \"warning\";\n title?: string;\n size?: number;\n className?: string;\n}) {\n const colorClass = level === \"error\" ? \"text-red-600\" : \"text-amber-600\";\n return (\n <button\n type=\"button\"\n className={`inline-flex items-center justify-center shrink-0 ${colorClass} ${\n className ?? \"\"\n }`}\n title={title}\n style={{ width: size, height: size }}\n >\n {level === \"error\" ? (\n <XCircleIcon size={size} weight=\"fill\" />\n ) : (\n <WarningCircleIcon size={size} weight=\"fill\" />\n )}\n </button>\n );\n}\n","import React from \"react\";\nimport { Handle, Position, type NodeProps } from \"reactflow\";\nimport cx from \"classnames\";\nimport { XCircleIcon } from \"@phosphor-icons/react\";\nimport { IssueBadge } from \"./IssueBadge\";\nimport type {\n HandleIssue,\n NodeRunStatus,\n SimpleIssue,\n} from \"../core/contracts\";\n\nexport const DefaultNode: React.FC<NodeProps> = React.memo(\n function DefaultNode({\n id,\n data,\n selected,\n isConnectable,\n }: NodeProps<{\n typeId: string;\n inputHandles: Array<{ id: string; typeId: string }>;\n outputHandles: Array<{ id: string; typeId: string }>;\n showValues?: boolean;\n inputValues?: Record<string, unknown>;\n outputValues?: Record<string, unknown>;\n toDisplay?: (typeId?: string, value?: unknown) => string;\n status?: NodeRunStatus;\n validation?: {\n inputs: HandleIssue[];\n outputs: HandleIssue[];\n issues: SimpleIssue[];\n };\n }>) {\n const typeId = data.typeId;\n const inputEntries = data.inputHandles ?? [];\n const outputEntries = data.outputHandles ?? [];\n const status = data.status ?? {};\n const validation = data.validation ?? {\n inputs: [],\n outputs: [],\n issues: [],\n };\n\n const HEADER_SIZE = 24;\n const ROW_SIZE = 22;\n const maxRows = Math.max(inputEntries.length, outputEntries.length);\n const minHeight = HEADER_SIZE + maxRows * ROW_SIZE;\n const minWidth = data.showValues ? 320 : 160;\n\n const topFor = (i: number) => HEADER_SIZE + i * ROW_SIZE + ROW_SIZE / 2;\n\n const hasError = !!status.lastError;\n const isRunning = !!status.running;\n const isInvalid = !!status.invalidated && !isRunning && !hasError;\n const borderClasses = selected\n ? \"border-2 border-gray-900 dark:border-gray-100\"\n : hasError\n ? \"border-2 border-red-500\"\n : isRunning\n ? \"border-2 border-blue-500 ring-2 ring-blue-200 dark:ring-blue-900\"\n : isInvalid\n ? \"border-2 border-amber-500 border-dashed\"\n : \"border border-gray-500 dark:border-gray-400\";\n\n const pct = Math.round(\n Math.max(0, Math.min(1, Number(status.progress) || 0)) * 100\n );\n\n return (\n <div\n className={cx(\n \"rounded-lg bg-white/70 !dark:bg-stone-900 border-solid\",\n borderClasses\n )}\n style={{ position: \"relative\", minHeight: minHeight, minWidth }}\n >\n <div className=\"flex h-6 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 <strong className=\"flex-1 h-full leading-6 text-xs\">{typeId}</strong>\n <div className=\"flex items-center gap-1\">\n {hasError && (\n <span\n title={String(\n (status.lastError as any)?.message ?? status.lastError\n )}\n >\n <XCircleIcon size={12} weight=\"fill\" className=\"text-red-500\" />\n </span>\n )}\n {validation.issues && validation.issues.length > 0 && (\n <IssueBadge\n level={\n validation.issues.some((i) => i.level === \"error\")\n ? \"error\"\n : \"warning\"\n }\n size={12}\n className=\"w-3 h-3\"\n title={validation.issues\n .map((v) => `${v.code}: ${v.message}`)\n .join(\"; \")}\n />\n )}\n <span className=\"text-[10px] opacity-70\">({id})</span>\n </div>\n </div>\n {(isRunning || pct > 0) && (\n <div className=\"h-1 bg-blue-200 dark:bg-blue-900\">\n <div\n className=\"h-1 bg-blue-500 transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n )}\n\n {inputEntries.map((entry, i) => {\n const vIssues = validation.inputs.filter(\n (v) => v.handle === entry.id\n );\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 return (\n <React.Fragment key={`in-${entry.id}`}>\n <Handle\n id={entry.id}\n type=\"target\"\n position={Position.Left}\n isConnectable={isConnectable}\n className={cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\n )}\n style={{ left: -5, top: topFor(i) }}\n />\n <div\n className=\"absolute left-2 text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\"\n style={{ top: topFor(i) - 8 }}\n title={`${entry.id}: ${entry.typeId}`}\n >\n {entry.id}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"ml-1\"\n title={title}\n />\n )}\n {data.showValues && (\n <span className=\"ml-1 opacity-60\">\n {data.toDisplay\n ? data.toDisplay(\n entry.typeId,\n data.inputValues?.[entry.id]\n )\n : String(data.inputValues?.[entry.id])}\n </span>\n )}\n </div>\n </React.Fragment>\n );\n })}\n\n {outputEntries.map((entry, i) => {\n const vIssues = validation.outputs.filter(\n (v) => v.handle === entry.id\n );\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 return (\n <React.Fragment key={`out-${entry.id}`}>\n <Handle\n id={entry.id}\n type=\"source\"\n position={Position.Right}\n isConnectable={isConnectable}\n className={cx(\n \"!w-3 !h-3 !bg-white !dark:bg-stone-900 !border-gray-500 dark:!border-gray-400 !rounded-none\",\n hasAny && (hasErr ? \"!border-red-500\" : \"!border-amber-500\")\n )}\n style={{ right: -5, top: topFor(i) }}\n />\n <div\n className=\"absolute right-2 text-[11px] text-gray-700 dark:text-gray-300 pointer-events-none\"\n style={{ top: topFor(i) - 8, textAlign: \"right\" }}\n title={`${entry.id}: ${entry.typeId}`}\n >\n {entry.id}\n {hasAny && (\n <IssueBadge\n level={hasErr ? \"error\" : \"warning\"}\n size={12}\n className=\"ml-1\"\n title={title}\n />\n )}\n {data.showValues && (\n <span className=\"ml-1 opacity-60\">\n {data.toDisplay\n ? data.toDisplay(\n entry.typeId,\n data.outputValues?.[entry.id]\n )\n : String(data.outputValues?.[entry.id])}\n </span>\n )}\n </div>\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n);\nDefaultNode.displayName = \"DefaultNode\";\n","import React from \"react\";\nimport { useReactFlow } from \"reactflow\";\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 if (!open || !clientPos) return null;\n const items = Array.from(registry.nodes.keys());\n\n const handleClick = (typeId: string) => {\n const p = rf.project({ x: clientPos.x, y: clientPos.y });\n onAdd(typeId, p);\n onClose();\n };\n\n return (\n <div\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: clientPos.x, top: clientPos.y }}\n onMouseLeave={onClose}\n >\n <div className=\"px-2 py-1 font-semibold text-gray-700\">Add Node</div>\n <div className=\"max-h-60 overflow-auto\">\n {items.map((id) => (\n <button\n key={id}\n onClick={() => handleClick(id)}\n className=\"block w-full text-left px-2 py-1 hover:bg-gray-100 cursor-pointer\"\n >\n {id}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport ReactFlow, { Background, Controls, MiniMap } from \"reactflow\";\nimport \"reactflow/dist/style.css\";\nimport { toReactFlow } from \"./mapping\";\nimport { useWorkbenchBridge } from \"./hooks\";\nimport { DefaultNode } from \"./DefaultNode\";\nimport { DefaultContextMenu } from \"./DefaultContextMenu\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\n\nexport function WorkbenchCanvas({\n showValues,\n toDisplay,\n}: {\n showValues?: boolean;\n toDisplay?: (typeId?: string, value?: unknown) => string;\n}) {\n const {\n wb,\n registry,\n inputsMap,\n outputsMap,\n valuesTick,\n nodeStatus,\n edgeStatus,\n validationByNode,\n validationByEdge,\n } = useWorkbenchContext();\n const ioValues = { inputs: inputsMap, outputs: outputsMap };\n const nodeValidation = validationByNode;\n const edgeValidation = validationByEdge.errors;\n\n const {\n onConnect,\n onNodesChange,\n onEdgesChange,\n onEdgesDelete,\n onNodesDelete,\n onSelectionChange,\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> = { \"@bian-womp/spark:default\": DefaultNode };\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}` : \"@bian-womp/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 return toReactFlow(\n def,\n wb.getPositions(),\n registry,\n new Set(sel.nodes),\n new Set(sel.edges),\n {\n showValues,\n inputs: ioValues.inputs,\n outputs: ioValues.outputs,\n resolveNodeType,\n toDisplay,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n }\n );\n }, [\n showValues,\n ioValues,\n valuesTick,\n toDisplay,\n nodeStatus,\n edgeStatus,\n nodeValidation,\n edgeValidation,\n ]);\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [menuPos, setMenuPos] = useState<{ x: number; y: number } | null>(null);\n const onContextMenu: React.MouseEventHandler<HTMLDivElement> = (e) => {\n e.preventDefault();\n setMenuPos({ x: e.clientX, y: e.clientY });\n setMenuOpen(true);\n };\n const addNodeAt = (typeId: string, pos: { x: number; y: number }) => {\n wb.addNode({ typeId, position: pos });\n };\n\n return (\n <div className=\"w-full h-full\" onContextMenu={onContextMenu}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n selectionOnDrag\n onConnect={onConnect}\n onEdgesChange={onEdgesChange}\n onEdgesDelete={onEdgesDelete}\n onNodesDelete={onNodesDelete}\n onNodesChange={onNodesChange}\n onSelectionChange={onSelectionChange}\n deleteKeyCode={[\"Backspace\", \"Delete\"]}\n fitView\n >\n <Background />\n <MiniMap />\n <Controls />\n <DefaultContextMenu\n open={menuOpen}\n clientPos={menuPos}\n onAdd={addNodeAt}\n onClose={() => setMenuOpen(false)}\n />\n </ReactFlow>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport { useWorkbenchContext } from \"./context/WorkbenchContext\";\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 return JSON.stringify(v, 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, idx) => (\n <div\n key={`${ev.at}:${idx}`}\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-8 shrink-0 text-right text-gray-500 select-none\">\n {idx + 1}\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-10\">\n {renderPayload(ev.payload)}\n </pre>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\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 toDisplay,\n setInput,\n}: {\n debug?: boolean;\n autoScroll?: boolean;\n hideWorkbench?: boolean;\n onAutoScrollChange?: (v: boolean) => void;\n onHideWorkbenchChange?: (v: boolean) => void;\n toDisplay: (typeId?: string, value?: unknown) => string;\n setInput: (handle: string, value: string | number | undefined) => void;\n}) {\n const {\n registry,\n def,\n selectedNodeId,\n selectedEdgeId,\n inputsMap,\n outputsMap,\n nodeStatus,\n validationByNode,\n validationByEdge,\n validationGlobal,\n valuesTick,\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.keys(selectedDesc?.inputs ?? {});\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 = desc?.inputs?.[h];\n const current = nodeInputs[h];\n const display = toDisplay(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 <div className=\"font-semibold mb-2\">Inspector</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>Type: {selectedEdge.typeId}</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 = (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] ?? toDisplay(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] ?? toDisplay(typeId, current);\n setDrafts((d) => ({ ...d, [h]: orig }));\n };\n const isEnum = typeId?.includes(\"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-28\">\n {h}\n <span className=\"text-gray-500 ml-1 text-[11px]\">\n {selectedDesc?.inputs?.[h]}\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={drafts[h] ?? toDisplay(typeId, current)}\n onChange={(e) => {\n const label = String(e.target.value);\n const byLabel = registry.getEnumValue(\n typeId,\n label\n );\n let raw = (\n byLabel !== undefined ? byLabel : Number(label)\n ) as number | undefined;\n if (!Number.isFinite(raw as number))\n raw = undefined;\n setInput(h, raw);\n const display = toDisplay(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.getEnumOptions?.(typeId!).map((opt) => (\n <option key={opt.value} value={opt.label}>\n {opt.label}\n </option>\n ))}\n </select>\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\">{h}</label>\n <div className=\"flex-1\">\n {toDisplay(selectedDesc?.outputs?.[h], nodeOutputs[h])}\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 {\n Engine,\n EngineEventName,\n GraphDefinition,\n Registry,\n GraphRuntime,\n GraphBuilder,\n PushEngine,\n BatchedEngine,\n PullEngine,\n HybridEngine,\n StepEngine,\n type RuntimeEventMap,\n} from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n RemoteRunner,\n WebSocketTransport,\n} from \"@bian-womp/spark-remote\";\n\ntype RunnerEventListener<K extends RunnerEventName> = (\n e: RunnerEventMap[K]\n) => void;\n\nexport type EngineKind = \"push\" | \"batched\" | \"pull\" | \"hybrid\" | \"step\";\n\nexport type RunnerEventName = EngineEventName | \"status\";\n\nexport type RemoteTransport = HttpPollingTransport | WebSocketTransport;\n\nexport interface RunnerStatusEvent {\n running: boolean;\n engine?: EngineKind;\n}\n\nexport interface RunnerEventMap extends RuntimeEventMap {\n status: RunnerStatusEvent;\n}\n\nexport interface RunnerOptions {\n engine: EngineKind;\n batched?: { flushIntervalMs?: number };\n hybrid?: { windowMs?: number; batchThreshold?: number };\n}\n\nexport type ExecutionBackend =\n | { kind: \"local\" }\n | { kind: \"remote-http\"; baseUrl: string }\n | { kind: \"remote-ws\"; url: string };\n\nexport class GraphRunner {\n private runtime?: GraphRuntime;\n private engine?: Engine;\n private listeners = new Map<\n RunnerEventName,\n Set<RunnerEventListener<RunnerEventName>>\n >();\n private stagedInputs: Record<string, Record<string, unknown>> = {};\n private runningKind?: EngineKind;\n private backend: ExecutionBackend = { kind: \"local\" };\n // Remote state\n private remote?: {\n runner: RemoteRunner;\n transport: RemoteTransport;\n valueCache: Map<string, { io: \"input\" | \"output\"; value: unknown }>;\n listenersBound: boolean;\n };\n\n constructor(private registry: Registry, backend?: ExecutionBackend) {\n if (backend) this.backend = backend;\n }\n\n build(def: GraphDefinition): void {\n if (this.backend.kind === \"local\") {\n const builder = new GraphBuilder(this.registry);\n this.runtime = builder.build(def);\n return;\n }\n // Remote: no-op here; build is performed on remote server during launch\n }\n\n update(def: GraphDefinition): void {\n if (this.backend.kind === \"local\") {\n if (!this.runtime) return;\n this.runtime.update(def, this.registry);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n return;\n }\n // Remote: forward update; ignore errors (fire-and-forget)\n void this.ensureRemote().then(async (rc) => {\n try {\n await rc.runner.update(def);\n this.emit(\"invalidate\", { reason: \"graph-updated\" });\n } catch {}\n });\n }\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 if (this.backend.kind === \"local\") {\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 for (const [handle, value] of Object.entries(map)) {\n this.engine.setInput(nodeId, handle, value);\n }\n }\n return;\n }\n // Remote: build remotely then launch\n void this.ensureRemote().then(async (rc) => {\n await rc.runner.build(def);\n const eng = rc.runner.getEngine();\n if (!rc.listenersBound) {\n eng.on(\"value\", (e: any) => {\n rc.valueCache.set(`${e.nodeId}.${e.handle}`, {\n io: e.io,\n value: e.value,\n });\n this.emit(\"value\", e);\n });\n eng.on(\"error\", (e: any) => this.emit(\"error\", e));\n eng.on(\"invalidate\", (e: any) => this.emit(\"invalidate\", e));\n eng.on(\"stats\", (e: any) => this.emit(\"stats\", e));\n rc.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 for (const [handle, value] of Object.entries(map)) {\n this.engine.setInput(nodeId, handle, value);\n }\n }\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) this.engine.setInput(nodeId, handle, value);\n }\n\n async step(): Promise<void> {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\n const eng = this.engine;\n if (eng instanceof StepEngine) await eng.step();\n }\n\n async computeNode(nodeId: string): Promise<void> {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\n const eng = this.engine;\n if (eng instanceof PullEngine) await eng.computeNode(nodeId);\n }\n\n flush(): void {\n if (this.backend.kind !== \"local\") return; // unsupported remotely\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.backend.kind === \"local\") {\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 const cache = this.remote?.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 if (this.backend.kind === \"local\") {\n for (const n of def.nodes) {\n const staged = this.stagedInputs[n.nodeId] ?? {};\n const runtimeInputs = this.runtime\n ? this.runtime.__unsafe_getNodeData?.(n.nodeId)?.inputs ?? {}\n : {};\n if (this.isRunning()) {\n out[n.nodeId] = runtimeInputs;\n } else {\n const merged = { ...runtimeInputs, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n }\n return out;\n }\n const cache = this.remote?.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 = this.isRunning() ? cur : { ...cur, ...staged };\n if (Object.keys(merged).length > 0) out[n.nodeId] = merged;\n }\n return out;\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 private 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 this.remote = 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 // Ensure remote transport/runner\n private async ensureRemote(): Promise<{\n runner: RemoteRunner;\n transport: RemoteTransport;\n valueCache: Map<string, { io: \"input\" | \"output\"; value: unknown }>;\n listenersBound: boolean;\n }> {\n if (this.remote) return this.remote;\n let transport: RemoteTransport;\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.remote = {\n runner,\n transport,\n valueCache: new Map(),\n listenersBound: false,\n };\n return this.remote;\n }\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n Registry,\n createAsyncGraphDef,\n createAsyncGraphRegistry,\n createProgressGraphDef,\n createProgressGraphRegistry,\n createValidationGraphDef,\n createValidationGraphRegistry,\n createSimpleGraphDef,\n createSimpleGraphRegistry,\n NodeCategoryDescriptor,\n} from \"@bian-womp/spark-graph\";\nimport {\n HttpPollingTransport,\n WebSocketTransport,\n RemoteRunner,\n} from \"@bian-womp/spark-remote\";\nimport { useWorkbenchContext } from \"../../misc/context/WorkbenchContext\";\nimport { WorkbenchProvider } from \"../../misc/context/WorkbenchContext.provider\";\nimport { WorkbenchCanvas } from \"../../misc/WorkbenchCanvas\";\nimport { Inspector } from \"../../misc/Inspector\";\nimport { InMemoryWorkbench } from \"../../core/InMemoryWorkbench\";\nimport { DefaultUIExtensionRegistry } from \"../../core/ui-extensions\";\nimport { EngineKind, GraphRunner } from \"../../runtime/GraphRunner\";\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}: {\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: \"local\" | \"remote-http\" | \"remote-ws\";\n onBackendKindChange: (v: \"local\" | \"remote-http\" | \"remote-ws\") => 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}) {\n const { wb, runner, registry, def, selectedNodeId, runAutoLayout } =\n useWorkbenchContext();\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 ?? \"simple\");\n\n const lastAutoLaunched = useRef<string | undefined>(undefined);\n const autoLayoutRan = useRef(false);\n\n const applyExample = useCallback(\n async (key: string) => {\n if (runner.isRunning()) {\n alert(`Stop engine before switching example.`);\n return;\n }\n switch (key) {\n case \"simple\": {\n const r = createSimpleGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createSimpleGraphDef());\n break;\n }\n case \"async\": {\n const r = createAsyncGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createAsyncGraphDef());\n break;\n }\n case \"progress\": {\n const r = createProgressGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createProgressGraphDef());\n break;\n }\n case \"validation\": {\n const r = createValidationGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createValidationGraphDef());\n break;\n }\n default: {\n const r = createSimpleGraphRegistry();\n setRegistry(r);\n wb.setRegistry(r);\n await wb.load(createSimpleGraphDef());\n }\n }\n runAutoLayout();\n setExampleState(key);\n onExampleChange?.(key);\n },\n [runner, wb, onExampleChange, runAutoLayout]\n );\n\n const hydrateFromBackend = useCallback(\n async (kind: \"remote-http\" | \"remote-ws\", 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 r.registerType({\n id: t.id,\n displayName: t.displayName,\n validate: (_v: any) => true,\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 r.registerCoercion(c.from, c.to, (v) => v);\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 applyExample(example ?? \"simple\");\n }, [example, wb]);\n\n useEffect(() => {\n if (!engine) return;\n if (runner.isRunning()) 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]);\n\n // When switching to remote backend, auto-hydrate registry from backend\n useEffect(() => {\n if (backendKind === \"remote-http\" && httpBaseUrl) {\n void hydrateFromBackend(\"remote-http\", httpBaseUrl);\n } else if (backendKind === \"remote-ws\" && wsUrl) {\n void 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 setInput = 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.bool\": {\n value = Boolean(raw);\n break;\n }\n case \"base.string\": {\n value = String(raw);\n break;\n }\n case \"base.float[]\": {\n value = parseArray(String(raw), (x) => Number(x));\n break;\n }\n case \"base.bool[]\": {\n value = parseArray(String(raw), (x) => /^(true|1)$/i.test(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 toDisplay = useCallback(\n (typeId?: string, value?: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeId && typeId.includes(\"enum:\")) {\n const n = Number(value);\n const label = registry.getEnumLabel(typeId, 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 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 <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=\"simple\">Simple</option>\n <option value=\"async\">Async Chain</option>\n <option value=\"progress\">Progress + Errors</option>\n <option value=\"validation\">Validation</option>\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) => onBackendKindChange(e.target.value as any)}\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\" && (\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\" && (\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\"\n onClick={() => runner.step()}\n disabled={!runner.isRunning()}\n >\n Step\n </button>\n )}\n {runner.getRunningEngine() === \"batched\" && (\n <button\n className=\"ml-2\"\n onClick={() => runner.flush()}\n disabled={!runner.isRunning()}\n >\n Flush\n </button>\n )}\n {/* {(backendKind === \"remote-http\" || backendKind === \"remote-ws\") && (\n <button\n className=\"ml-2\"\n onClick={() =>\n hydrateFromBackend(\n backendKind as any,\n backendKind === \"remote-http\" ? httpBaseUrl : wsUrl\n )\n }\n disabled={runner.isRunning()}\n >\n Fetch Registry\n </button>\n )} */}\n {runner.isRunning() ? (\n <button\n onClick={() => runner.dispose()}\n disabled={!runner.isRunning()}\n >\n Stop\n </button>\n ) : (\n <button\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 >\n Start\n </button>\n )}\n <button onClick={runAutoLayout}>Auto Layout</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 key={exampleState}\n showValues={showValues}\n toDisplay={toDisplay}\n />\n </div>\n <Inspector\n setInput={setInput}\n debug={debug}\n autoScroll={autoScroll}\n hideWorkbench={hideWorkbench}\n onAutoScrollChange={onAutoScrollChange}\n onHideWorkbenchChange={onHideWorkbenchChange}\n toDisplay={toDisplay}\n />\n </div>\n </div>\n );\n}\n\nexport default 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}: {\n engine?: string;\n onEngineChange?: (v: string | undefined) => void;\n example?: string;\n onExampleChange?: (v: string | undefined) => void;\n backendKind: \"local\" | \"remote-http\" | \"remote-ws\";\n onBackendKindChange: (v: \"local\" | \"remote-http\" | \"remote-ws\") => 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}) {\n const [registry, setRegistry] = useState(createSimpleGraphRegistry());\n\n const [wb] = useState(\n () => new InMemoryWorkbench({ ui: new DefaultUIExtensionRegistry() })\n );\n const runner = useMemo(() => {\n const backend =\n backendKind === \"remote-http\"\n ? ({ kind: \"remote-http\", baseUrl: httpBaseUrl } as const)\n : backendKind === \"remote-ws\"\n ? ({ kind: \"remote-ws\", url: wsUrl } as const)\n : ({ kind: \"local\" } as const);\n return new GraphRunner(registry, backend as any);\n }, [registry, backendKind, httpBaseUrl, wsUrl]);\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 />\n </WorkbenchProvider>\n );\n}\n","import { useEffect } from \"react\";\nimport WorkbenchStudio from \"./WorkbenchStudio\";\nimport { useQueryParamBoolean, useQueryParamString } from \"../../misc/hooks\";\nimport { ExecutionBackend } from \"src/runtime/GraphRunner\";\n\nexport default function App() {\n const [engine, setEngine] = useQueryParamString(\"engine\", \"\");\n const [example, setExample] = useQueryParamString(\"example\", \"simple\");\n const [debug, setDebug] = useQueryParamBoolean(\"debug\", false);\n const [showValues, setShowValues] = useQueryParamBoolean(\"values\", false);\n const [hideWorkbench, setHideWorkbench] = useQueryParamBoolean(\n \"hideWb\",\n false\n );\n const [autoScroll, setAutoScroll] = useQueryParamBoolean(\"autoScroll\", true);\n // Backend selection via URL params\n const [backendKind, setBackendKind] = useQueryParamString(\"backend\", \"local\");\n const [httpBaseUrl, setHttpBaseUrl] = useQueryParamString(\n \"sparkHttp\",\n \"http://127.0.0.1:18080\"\n );\n const [wsUrl, setWsUrl] = useQueryParamString(\n \"sparkWs\",\n \"ws://127.0.0.1:18081\"\n );\n\n useEffect(() => {\n document.getElementById(\"loading-screen\")?.remove();\n }, []);\n\n return (\n <WorkbenchStudio\n engine={engine}\n onEngineChange={setEngine}\n example={example}\n onExampleChange={setExample}\n backendKind={(backendKind || \"local\") as ExecutionBackend[\"kind\"]}\n onBackendKindChange={(v) => setBackendKind(v)}\n httpBaseUrl={httpBaseUrl || \"http://127.0.0.1:18080\"}\n onHttpBaseUrlChange={setHttpBaseUrl}\n wsUrl={wsUrl || \"ws://127.0.0.1:18081\"}\n onWsUrlChange={setWsUrl}\n debug={debug}\n onDebugChange={setDebug}\n showValues={showValues}\n onShowValuesChange={setShowValues}\n hideWorkbench={hideWorkbench}\n onHideWorkbenchChange={setHideWorkbench}\n autoScroll={autoScroll}\n onAutoScrollChange={setAutoScroll}\n />\n );\n}\n"],"names":["GraphBuilder","toReactFlow","createContext","useContext","useCallback","useState","useEffect","useMemo","_jsx","XCircleIcon","WarningCircleIcon","_jsxs","Handle","Position","useReactFlow","Background","MiniMap","Controls","useRef","PushEngine","BatchedEngine","PullEngine","HybridEngine","StepEngine","HttpPollingTransport","WebSocketTransport","RemoteRunner","createSimpleGraphRegistry","createSimpleGraphDef","createAsyncGraphRegistry","createAsyncGraphDef","createProgressGraphRegistry","createProgressGraphDef","createValidationGraphRegistry","createValidationGraphDef","Registry"],"mappings":"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"}