@bian-womp/spark-remote 0.2.20 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.cjs CHANGED
@@ -467,67 +467,6 @@ async function createRuntimeAdapter(createRegistry, send) {
467
467
  const registry = await createRegistry();
468
468
  const builder = new sparkGraph.GraphBuilder(registry);
469
469
  let graphRuntime;
470
- // Seed defaults for any missing inputs for a single node
471
- function seedDefaultsForNode(nodeId, defaultValues) {
472
- if (!graphRuntime || !defaultValues)
473
- return;
474
- try {
475
- const nd = graphRuntime.getNodeData(nodeId);
476
- const existing = nd?.inputs || {};
477
- const toSet = {};
478
- for (const [k, v] of Object.entries(defaultValues)) {
479
- if (!(k in existing))
480
- toSet[k] = v;
481
- }
482
- if (Object.keys(toSet).length > 0) {
483
- graphRuntime.setInputs(nodeId, toSet);
484
- }
485
- }
486
- catch { }
487
- }
488
- // Seed defaults for all nodes based on a graph definition with resolvedHandles
489
- function seedDefaultsFromDef(def) {
490
- if (!graphRuntime)
491
- return;
492
- for (const n of def.nodes || []) {
493
- const defs = n.resolvedHandles?.inputDefaults;
494
- if (defs)
495
- seedDefaultsForNode(n.nodeId, defs);
496
- }
497
- }
498
- const computeResolvedHandles = (def, nodeInputs, env) => {
499
- try {
500
- const enriched = {
501
- ...def,
502
- nodes: def.nodes.map((n) => {
503
- const desc = registry.nodes.get(n.typeId);
504
- if (!desc || typeof desc.resolveHandles !== "function")
505
- return n;
506
- try {
507
- const r = desc.resolveHandles({
508
- environment: env || {},
509
- params: n.params,
510
- inputs: nodeInputs?.[n.nodeId],
511
- }) || {};
512
- const inputs = { ...desc.inputs, ...r.inputs };
513
- const outputs = { ...desc.outputs, ...r.outputs };
514
- const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
515
- return {
516
- ...n,
517
- resolvedHandles: { inputs, outputs, inputDefaults },
518
- };
519
- }
520
- catch {
521
- return n;
522
- }
523
- }),
524
- };
525
- return enriched;
526
- }
527
- catch {
528
- return def;
529
- }
530
- };
531
470
  const api = {
532
471
  async coerce(from, to, value) {
533
472
  const resolved = registry.resolveCoercion(from, to);
@@ -587,63 +526,11 @@ async function createRuntimeAdapter(createRegistry, send) {
587
526
  },
588
527
  async build(def, opts) {
589
528
  const env = opts || {};
590
- const enriched = computeResolvedHandles(def, {}, env);
591
- graphRuntime = builder.build(enriched, { environment: env });
592
- // Seed defaults for dynamic inputs on initial build
593
- seedDefaultsFromDef(enriched);
529
+ graphRuntime = builder.build(def, { environment: env });
594
530
  graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
595
531
  graphRuntime.on("invalidate", (p) => send({ message: { type: "invalidate", payload: p } }));
596
532
  graphRuntime.on("error", (p) => send({ message: { type: "error", payload: p } }));
597
533
  graphRuntime.on("stats", (p) => send({ message: { type: "stats", payload: p } }));
598
- // Listen for input changes to recompute dynamic handles per node (generalized)
599
- graphRuntime.on("value", (e) => {
600
- try {
601
- if (!graphRuntime)
602
- return;
603
- if (!e || e.io !== "input")
604
- return;
605
- const nodeId = e.nodeId;
606
- const nd = graphRuntime.getNodeData(nodeId);
607
- if (!nd)
608
- return;
609
- // Recompute resolved handles for only this node using current inputs
610
- const envNow = graphRuntime.getEnvironment?.() ?? env;
611
- const curDef = graphRuntime.getGraphDef();
612
- const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);
613
- if (!target)
614
- return;
615
- const desc = registry.nodes.get(target.typeId);
616
- if (!desc || typeof desc.resolveHandles !== "function")
617
- return;
618
- const r = desc.resolveHandles({
619
- params: target.params,
620
- environment: envNow || {},
621
- inputs: nd.inputs || {},
622
- }) || {};
623
- const inputs = { ...desc.inputs, ...r.inputs };
624
- const outputs = { ...desc.outputs, ...r.outputs };
625
- const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
626
- const nextHandles = { inputs, outputs, inputDefaults };
627
- // If nothing changed, skip
628
- const before = target.resolvedHandles || {};
629
- if (JSON.stringify(before) === JSON.stringify(nextHandles))
630
- return;
631
- // Apply per-node update and keep lastDef in sync for this node only
632
- graphRuntime.updateNodeHandles(nodeId, nextHandles, registry);
633
- target.resolvedHandles = nextHandles;
634
- // Seed newly added dynamic inputs with defaults if provided and not present
635
- seedDefaultsForNode(nodeId, inputDefaults);
636
- send({
637
- message: {
638
- type: "invalidate",
639
- payload: { reason: "graph-updated" },
640
- },
641
- });
642
- }
643
- catch {
644
- // ignore
645
- }
646
- });
647
534
  },
648
535
  snapshot() {
649
536
  const inputs = {};
@@ -713,20 +600,7 @@ async function createRuntimeAdapter(createRegistry, send) {
713
600
  async update(def) {
714
601
  if (!graphRuntime)
715
602
  return;
716
- const env = graphRuntime.getEnvironment?.() ?? {};
717
- // Build current inputs map from runtime so resolveHandles can depend on inputs
718
- const inputsMap = {};
719
- const ids = graphRuntime.getNodeIds();
720
- for (const id of ids) {
721
- const nd = graphRuntime.getNodeData(id);
722
- if (nd?.inputs && Object.keys(nd.inputs).length > 0) {
723
- inputsMap[id] = nd.inputs;
724
- }
725
- }
726
- const enriched = computeResolvedHandles(def, inputsMap, env);
727
- graphRuntime.update(enriched, registry);
728
- // Seed defaults for newly added dynamic inputs on update
729
- seedDefaultsFromDef(enriched);
603
+ graphRuntime.update(def, registry);
730
604
  send({
731
605
  message: {
732
606
  type: "invalidate",
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/RemoteEngine.ts","../../src/RemoteRunner.ts","../../src/server/errors.ts","../../src/server/command.ts","../../src/server/runtime.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private url: string;\n private seq = new SeqGenerator();\n\n constructor(url: string) {\n this.url = url;\n }\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n this.ws = window\n ? new (window as any).WebSocket(this.url)\n : new WebSocket(this.url);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n this.ws.onopen = () => resolve();\n this.ws.onerror = (e) => reject(e);\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n });\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n // For now, just send and wait for the next message with matching seq (simple demo)\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(): Promise<void> {\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const res = await fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","import type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"@bian-womp/spark-protocol\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<\n EngineEventName,\n Set<EngineEventListener<EngineEventName>>\n >();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = `${msg.payload.nodeId}.${msg.payload.handle}`;\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n this.transport.send({ message: { type: \"Launch\" } });\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.transport.send({\n message: { type: \"SetInput\", payload: { nodeId, handle, value } },\n });\n }\n\n // Batch inputs for a single network round-trip\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.transport.send({\n message: { type: \"SetInputs\", payload: { nodeId, inputs } },\n });\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.transport.send({\n message: { type: \"TriggerExternal\", payload: { nodeId, event } },\n });\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(\n event: K,\n payload: EngineEventMap[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 getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(`${nodeId}.${output}`)?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n RunnerControl,\n GraphDefinition,\n Engine,\n} from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport type { Transport } from \"./transport/Transport\";\nimport {\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport class RemoteRunner implements RunnerControl {\n private engine: RemoteEngine;\n constructor(private transport: Transport) {\n this.engine = new RemoteEngine(transport);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition): Promise<void> {\n await this.transport.request({\n message: { type: \"Update\", payload: { def } },\n });\n }\n\n async describeRegistry(): Promise<RegisteryDescriptor> {\n const res = await this.transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegisteryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<any>): Promise<void> {\n await this.transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const res = await this.transport.request({ message: { type: \"Snapshot\" } });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const res = await this.transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void> {\n await this.transport.request({\n message: { type: \"ApplySnapshotFull\", payload },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const res = await this.transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload =\n (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const res = await this.transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n getEngine(): Engine {\n return this.engine;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type { Envelope, Command } from \"@bian-womp/spark-protocol\";\nimport type { Json, RuntimeApi } from \"./runtime\";\nimport { summarize } from \"./errors\";\n\nexport async function handleCommand(\n label: string,\n env: Envelope<Command>,\n runtimeApi: RuntimeApi,\n ack: (payload?: Json) => void\n): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n console.debug(\n `[${label}] rx Build seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(\n msg.payload.environment ?? {}\n ).join(\",\")}`\n );\n await runtimeApi.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n console.debug(\n `[${label}] rx Update seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0}`\n );\n await runtimeApi.update(msg.payload.def);\n ack();\n break;\n }\n case \"SetEnvironment\": {\n console.debug(`[${label}] rx SetEnvironment seq=${env.seq}`);\n runtimeApi.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n });\n ack();\n break;\n }\n case \"SetInput\": {\n console.debug(\n `[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${\n msg.payload.handle\n }=${summarize(msg.payload.value)}`\n );\n runtimeApi.setInput(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.value\n );\n ack();\n break;\n }\n case \"SetInputs\": {\n console.debug(\n `[${label}] rx SetInputs seq=${env.seq} ${\n msg.payload.nodeId\n } keys=${Object.keys(msg.payload.inputs || {}).join(\",\")}`\n );\n const nodeId = msg.payload.nodeId;\n const inputs = msg.payload.inputs;\n runtimeApi.setInputs(nodeId, inputs);\n ack();\n break;\n }\n case \"TriggerExternal\": {\n console.debug(\n `[${label}] rx TriggerExternal seq=${env.seq} ${\n msg.payload.nodeId\n } event=${summarize(msg.payload.event)}`\n );\n runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);\n ack();\n break;\n }\n case \"Launch\": {\n console.debug(`[${label}] rx Launch seq=${env.seq}`);\n runtimeApi.launch();\n ack();\n break;\n }\n case \"WhenIdle\": {\n console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);\n await runtimeApi.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n console.debug(`[${label}] rx Snapshot seq=${env.seq}`);\n const snap = runtimeApi.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n console.debug(`[${label}] rx SnapshotFull seq=${env.seq}`);\n const snap = runtimeApi.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n console.debug(`[${label}] rx GetEnvironment seq=${env.seq}`);\n const environment = runtimeApi.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n console.debug(`[${label}] rx ApplySnapshotFull seq=${env.seq}`);\n await runtimeApi.applySnapshotFull(msg.payload);\n ack();\n break;\n }\n case \"Coerce\": {\n console.debug(\n `[${label}] rx Coerce seq=${env.seq} ${msg.payload.from} -> ${msg.payload.to}`\n );\n const value = await runtimeApi.coerce(\n msg.payload?.from,\n msg.payload?.to,\n msg.payload?.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n console.debug(`[${label}] rx DescribeRegistry seq=${env.seq}`);\n const desc = runtimeApi.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n console.debug(`[${label}] rx RegistryApply seq=${env.seq}`);\n await runtimeApi.applyRegistry((msg as any).payload?.deltas || []);\n ack();\n break;\n }\n case \"Dispose\": {\n console.debug(`[${label}] rx Dispose seq=${env.seq}`);\n runtimeApi.dispose();\n ack();\n break;\n }\n case \"Pause\":\n case \"Resume\": {\n console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);\n ack();\n break;\n }\n default: {\n console.debug(`[${label}] rx Unknown type seq=${env.seq}`);\n ack();\n }\n }\n}\n","import { GraphBuilder, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport type {\n Envelope,\n RuntimeEvent,\n GraphDefinition,\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport type Json = Record<string, unknown>;\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n applyRegistry: (deltas: any[]) => Promise<void>;\n setEnvironment: (env: Json, opts?: { merge?: boolean }) => void;\n getEnvironment: () => Record<string, unknown>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n setInputs: (nodeId: string, inputs: Record<string, unknown>) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: () => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n describeRegistry: () => RegisteryDescriptor;\n snapshot: () => RuntimeSnapshot;\n coerce: (from: string, to: string, value: unknown) => Promise<unknown>;\n snapshotFull: () => RuntimeSnapshotFull;\n applySnapshotFull: (payload: RuntimeSnapshotFull) => Promise<void>;\n}\n\nexport async function createRuntimeAdapter(\n createRegistry: () => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void\n): Promise<RuntimeApi> {\n const registry = await createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n\n // Seed defaults for any missing inputs for a single node\n function seedDefaultsForNode(\n nodeId: string,\n defaultValues?: Record<string, unknown>\n ): void {\n if (!graphRuntime || !defaultValues) return;\n try {\n const nd = graphRuntime.getNodeData(nodeId);\n const existing = nd?.inputs || {};\n const toSet: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(defaultValues)) {\n if (!(k in existing)) toSet[k] = v;\n }\n if (Object.keys(toSet).length > 0) {\n graphRuntime.setInputs(nodeId, toSet);\n }\n } catch {}\n }\n\n // Seed defaults for all nodes based on a graph definition with resolvedHandles\n function seedDefaultsFromDef(def: GraphDefinition): void {\n if (!graphRuntime) return;\n for (const n of def.nodes || []) {\n const defs = n.resolvedHandles?.inputDefaults;\n if (defs) seedDefaultsForNode(n.nodeId, defs);\n }\n }\n\n const computeResolvedHandles = (\n def: GraphDefinition,\n nodeInputs: Record<string, Record<string, unknown>>,\n env?: Record<string, unknown>\n ): GraphDefinition => {\n try {\n const enriched: GraphDefinition = {\n ...def,\n nodes: def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n if (!desc || typeof desc.resolveHandles !== \"function\") return n;\n try {\n const r =\n desc.resolveHandles({\n environment: env || {},\n params: n.params,\n inputs: nodeInputs?.[n.nodeId],\n }) || {};\n const inputs = { ...desc.inputs, ...r.inputs };\n const outputs = { ...desc.outputs, ...r.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };\n return {\n ...n,\n resolvedHandles: { inputs, outputs, inputDefaults },\n };\n } catch {\n return n;\n }\n }),\n };\n return enriched;\n } catch {\n return def;\n }\n };\n const api: RuntimeApi = {\n async coerce(from, to, value) {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment() {\n return graphRuntime?.getEnvironment?.() ?? {};\n },\n async applyRegistry(deltas) {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n async build(def, opts) {\n const env = opts || {};\n const enriched = computeResolvedHandles(def, {}, env);\n graphRuntime = builder.build(enriched, { environment: env });\n // Seed defaults for dynamic inputs on initial build\n seedDefaultsFromDef(enriched);\n graphRuntime.on(\"value\", (p) =>\n send({ message: { type: \"value\", payload: p } })\n );\n graphRuntime.on(\"invalidate\", (p) =>\n send({ message: { type: \"invalidate\", payload: p } })\n );\n graphRuntime.on(\"error\", (p) =>\n send({ message: { type: \"error\", payload: p } })\n );\n graphRuntime.on(\"stats\", (p) =>\n send({ message: { type: \"stats\", payload: p } })\n );\n // Listen for input changes to recompute dynamic handles per node (generalized)\n graphRuntime.on(\"value\", (e) => {\n try {\n if (!graphRuntime) return;\n if (!e || e.io !== \"input\") return;\n const nodeId = e.nodeId;\n const nd = graphRuntime.getNodeData(nodeId);\n if (!nd) return;\n // Recompute resolved handles for only this node using current inputs\n const envNow = graphRuntime.getEnvironment?.() ?? env;\n const curDef = graphRuntime.getGraphDef();\n const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);\n if (!target) return;\n const desc = registry.nodes.get(target.typeId);\n if (!desc || typeof desc.resolveHandles !== \"function\") return;\n const r =\n desc.resolveHandles({\n params: target.params,\n environment: envNow || {},\n inputs: nd.inputs || {},\n }) || {};\n const inputs = { ...desc.inputs, ...r.inputs };\n const outputs = { ...desc.outputs, ...r.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };\n const nextHandles = { inputs, outputs, inputDefaults };\n // If nothing changed, skip\n const before = target.resolvedHandles || {};\n if (JSON.stringify(before) === JSON.stringify(nextHandles)) return;\n // Apply per-node update and keep lastDef in sync for this node only\n graphRuntime.updateNodeHandles(nodeId, nextHandles, registry);\n target.resolvedHandles = nextHandles;\n // Seed newly added dynamic inputs with defaults if provided and not present\n seedDefaultsForNode(nodeId, inputDefaults);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n } catch {\n // ignore\n }\n });\n },\n snapshot(): RuntimeSnapshot {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull() {\n const snap = api.snapshot();\n const env = graphRuntime?.getEnvironment?.() ?? {};\n const def = graphRuntime?.getGraphDef();\n return {\n def,\n environment: env,\n inputs: snap.inputs,\n outputs: snap.outputs,\n };\n },\n async applySnapshotFull(payload) {\n const def = payload.def;\n if (!def) return;\n await api.build(def, payload.environment);\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n graphRuntime?.hydrate(\n { inputs: payload.inputs, outputs: payload.outputs },\n { reemit: true }\n );\n },\n describeRegistry() {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n async update(def) {\n if (!graphRuntime) return;\n const env = graphRuntime.getEnvironment?.() ?? {};\n // Build current inputs map from runtime so resolveHandles can depend on inputs\n const inputsMap: Record<string, Record<string, unknown>> = {};\n const ids = graphRuntime.getNodeIds();\n for (const id of ids) {\n const nd = graphRuntime.getNodeData(id);\n if (nd?.inputs && Object.keys(nd.inputs).length > 0) {\n inputsMap[id] = nd.inputs;\n }\n }\n const enriched = computeResolvedHandles(def, inputsMap, env);\n graphRuntime.update(enriched, registry);\n // Seed defaults for newly added dynamic inputs on update\n seedDefaultsFromDef(enriched);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n },\n setEnvironment(env, opts) {\n if (!graphRuntime) return;\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n return;\n }\n graphRuntime.setEnvironment(env);\n },\n setInput(nodeId, handle, value) {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n setInputs(nodeId, inputs) {\n graphRuntime?.setInputs(nodeId, inputs);\n },\n triggerExternal(nodeId, event) {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch() {\n graphRuntime?.launch();\n },\n whenIdle() {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose() {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n return api;\n}\n"],"names":["WebSocket","GraphBuilder"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/RemoteEngine.ts","../../src/RemoteRunner.ts","../../src/server/errors.ts","../../src/server/command.ts","../../src/server/runtime.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private url: string;\n private seq = new SeqGenerator();\n\n constructor(url: string) {\n this.url = url;\n }\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n this.ws = window\n ? new (window as any).WebSocket(this.url)\n : new WebSocket(this.url);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n this.ws.onopen = () => resolve();\n this.ws.onerror = (e) => reject(e);\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n });\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n // For now, just send and wait for the next message with matching seq (simple demo)\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(): Promise<void> {\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const res = await fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","import type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"@bian-womp/spark-protocol\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<\n EngineEventName,\n Set<EngineEventListener<EngineEventName>>\n >();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = `${msg.payload.nodeId}.${msg.payload.handle}`;\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n this.transport.send({ message: { type: \"Launch\" } });\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.transport.send({\n message: { type: \"SetInput\", payload: { nodeId, handle, value } },\n });\n }\n\n // Batch inputs for a single network round-trip\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.transport.send({\n message: { type: \"SetInputs\", payload: { nodeId, inputs } },\n });\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.transport.send({\n message: { type: \"TriggerExternal\", payload: { nodeId, event } },\n });\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(\n event: K,\n payload: EngineEventMap[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 getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(`${nodeId}.${output}`)?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n RunnerControl,\n GraphDefinition,\n Engine,\n} from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport type { Transport } from \"./transport/Transport\";\nimport {\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport class RemoteRunner implements RunnerControl {\n private engine: RemoteEngine;\n constructor(private transport: Transport) {\n this.engine = new RemoteEngine(transport);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition): Promise<void> {\n await this.transport.request({\n message: { type: \"Update\", payload: { def } },\n });\n }\n\n async describeRegistry(): Promise<RegisteryDescriptor> {\n const res = await this.transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegisteryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<any>): Promise<void> {\n await this.transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const res = await this.transport.request({ message: { type: \"Snapshot\" } });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const res = await this.transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void> {\n await this.transport.request({\n message: { type: \"ApplySnapshotFull\", payload },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const res = await this.transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload =\n (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const res = await this.transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n getEngine(): Engine {\n return this.engine;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type { Envelope, Command } from \"@bian-womp/spark-protocol\";\nimport type { Json, RuntimeApi } from \"./runtime\";\nimport { summarize } from \"./errors\";\n\nexport async function handleCommand(\n label: string,\n env: Envelope<Command>,\n runtimeApi: RuntimeApi,\n ack: (payload?: Json) => void\n): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n console.debug(\n `[${label}] rx Build seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(\n msg.payload.environment ?? {}\n ).join(\",\")}`\n );\n await runtimeApi.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n console.debug(\n `[${label}] rx Update seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0}`\n );\n await runtimeApi.update(msg.payload.def);\n ack();\n break;\n }\n case \"SetEnvironment\": {\n console.debug(`[${label}] rx SetEnvironment seq=${env.seq}`);\n runtimeApi.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n });\n ack();\n break;\n }\n case \"SetInput\": {\n console.debug(\n `[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${\n msg.payload.handle\n }=${summarize(msg.payload.value)}`\n );\n runtimeApi.setInput(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.value\n );\n ack();\n break;\n }\n case \"SetInputs\": {\n console.debug(\n `[${label}] rx SetInputs seq=${env.seq} ${\n msg.payload.nodeId\n } keys=${Object.keys(msg.payload.inputs || {}).join(\",\")}`\n );\n const nodeId = msg.payload.nodeId;\n const inputs = msg.payload.inputs;\n runtimeApi.setInputs(nodeId, inputs);\n ack();\n break;\n }\n case \"TriggerExternal\": {\n console.debug(\n `[${label}] rx TriggerExternal seq=${env.seq} ${\n msg.payload.nodeId\n } event=${summarize(msg.payload.event)}`\n );\n runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);\n ack();\n break;\n }\n case \"Launch\": {\n console.debug(`[${label}] rx Launch seq=${env.seq}`);\n runtimeApi.launch();\n ack();\n break;\n }\n case \"WhenIdle\": {\n console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);\n await runtimeApi.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n console.debug(`[${label}] rx Snapshot seq=${env.seq}`);\n const snap = runtimeApi.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n console.debug(`[${label}] rx SnapshotFull seq=${env.seq}`);\n const snap = runtimeApi.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n console.debug(`[${label}] rx GetEnvironment seq=${env.seq}`);\n const environment = runtimeApi.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n console.debug(`[${label}] rx ApplySnapshotFull seq=${env.seq}`);\n await runtimeApi.applySnapshotFull(msg.payload);\n ack();\n break;\n }\n case \"Coerce\": {\n console.debug(\n `[${label}] rx Coerce seq=${env.seq} ${msg.payload.from} -> ${msg.payload.to}`\n );\n const value = await runtimeApi.coerce(\n msg.payload?.from,\n msg.payload?.to,\n msg.payload?.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n console.debug(`[${label}] rx DescribeRegistry seq=${env.seq}`);\n const desc = runtimeApi.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n console.debug(`[${label}] rx RegistryApply seq=${env.seq}`);\n await runtimeApi.applyRegistry((msg as any).payload?.deltas || []);\n ack();\n break;\n }\n case \"Dispose\": {\n console.debug(`[${label}] rx Dispose seq=${env.seq}`);\n runtimeApi.dispose();\n ack();\n break;\n }\n case \"Pause\":\n case \"Resume\": {\n console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);\n ack();\n break;\n }\n default: {\n console.debug(`[${label}] rx Unknown type seq=${env.seq}`);\n ack();\n }\n }\n}\n","import { GraphBuilder, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport type {\n Envelope,\n RuntimeEvent,\n GraphDefinition,\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport type Json = Record<string, unknown>;\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n applyRegistry: (deltas: any[]) => Promise<void>;\n setEnvironment: (env: Json, opts?: { merge?: boolean }) => void;\n getEnvironment: () => Record<string, unknown>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n setInputs: (nodeId: string, inputs: Record<string, unknown>) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: () => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n describeRegistry: () => RegisteryDescriptor;\n snapshot: () => RuntimeSnapshot;\n coerce: (from: string, to: string, value: unknown) => Promise<unknown>;\n snapshotFull: () => RuntimeSnapshotFull;\n applySnapshotFull: (payload: RuntimeSnapshotFull) => Promise<void>;\n}\n\nexport async function createRuntimeAdapter(\n createRegistry: () => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void\n): Promise<RuntimeApi> {\n const registry = await createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n\n const api: RuntimeApi = {\n async coerce(from, to, value) {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment() {\n return graphRuntime?.getEnvironment?.() ?? {};\n },\n async applyRegistry(deltas) {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n async build(def, opts) {\n const env = opts || {};\n graphRuntime = builder.build(def, { environment: env });\n graphRuntime.on(\"value\", (p) =>\n send({ message: { type: \"value\", payload: p } })\n );\n graphRuntime.on(\"invalidate\", (p) =>\n send({ message: { type: \"invalidate\", payload: p } })\n );\n graphRuntime.on(\"error\", (p) =>\n send({ message: { type: \"error\", payload: p } })\n );\n graphRuntime.on(\"stats\", (p) =>\n send({ message: { type: \"stats\", payload: p } })\n );\n },\n snapshot(): RuntimeSnapshot {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull() {\n const snap = api.snapshot();\n const env = graphRuntime?.getEnvironment?.() ?? {};\n const def = graphRuntime?.getGraphDef();\n return {\n def,\n environment: env,\n inputs: snap.inputs,\n outputs: snap.outputs,\n };\n },\n async applySnapshotFull(payload) {\n const def = payload.def;\n if (!def) return;\n await api.build(def, payload.environment);\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n graphRuntime?.hydrate(\n { inputs: payload.inputs, outputs: payload.outputs },\n { reemit: true }\n );\n },\n describeRegistry() {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n async update(def) {\n if (!graphRuntime) return;\n graphRuntime.update(def, registry);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n },\n setEnvironment(env, opts) {\n if (!graphRuntime) return;\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n return;\n }\n graphRuntime.setEnvironment(env);\n },\n setInput(nodeId, handle, value) {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n setInputs(nodeId, inputs) {\n graphRuntime?.setInputs(nodeId, inputs);\n },\n triggerExternal(nodeId, event) {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch() {\n graphRuntime?.launch();\n },\n whenIdle() {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose() {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n return api;\n}\n"],"names":["WebSocket","GraphBuilder"],"mappings":"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"}
@@ -1,8 +1,6 @@
1
- import { type Engine } from "@bian-womp/spark-graph";
2
1
  import type { GraphDefinition } from "@bian-womp/spark-protocol";
3
2
  import type { RemoteRunner } from "../RemoteRunner";
4
3
  export type ExampleName = "simple" | "async" | "progress" | "validation";
5
4
  export declare function buildDef(example: ExampleName): GraphDefinition;
6
5
  export declare function runExample(example: ExampleName, engine: ReturnType<RemoteRunner["getEngine"]>): Promise<void>;
7
- export declare function installLogging(engine: Engine): void;
8
6
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAKZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAM9D;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,iBAmD9C;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,QAqC5C"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAM9D;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,iBAmD9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAgB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;IAC5C,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,EAAE,MAAM,mBAAmB,CAAC;IACxC,iBAAiB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,GACxC,OAAO,CAAC,UAAU,CAAC,CA8SrB"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAgB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;IAC5C,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,EAAE,MAAM,mBAAmB,CAAC;IACxC,iBAAiB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,GACxC,OAAO,CAAC,UAAU,CAAC,CAoLrB"}
package/lib/esm/index.js CHANGED
@@ -465,67 +465,6 @@ async function createRuntimeAdapter(createRegistry, send) {
465
465
  const registry = await createRegistry();
466
466
  const builder = new GraphBuilder(registry);
467
467
  let graphRuntime;
468
- // Seed defaults for any missing inputs for a single node
469
- function seedDefaultsForNode(nodeId, defaultValues) {
470
- if (!graphRuntime || !defaultValues)
471
- return;
472
- try {
473
- const nd = graphRuntime.getNodeData(nodeId);
474
- const existing = nd?.inputs || {};
475
- const toSet = {};
476
- for (const [k, v] of Object.entries(defaultValues)) {
477
- if (!(k in existing))
478
- toSet[k] = v;
479
- }
480
- if (Object.keys(toSet).length > 0) {
481
- graphRuntime.setInputs(nodeId, toSet);
482
- }
483
- }
484
- catch { }
485
- }
486
- // Seed defaults for all nodes based on a graph definition with resolvedHandles
487
- function seedDefaultsFromDef(def) {
488
- if (!graphRuntime)
489
- return;
490
- for (const n of def.nodes || []) {
491
- const defs = n.resolvedHandles?.inputDefaults;
492
- if (defs)
493
- seedDefaultsForNode(n.nodeId, defs);
494
- }
495
- }
496
- const computeResolvedHandles = (def, nodeInputs, env) => {
497
- try {
498
- const enriched = {
499
- ...def,
500
- nodes: def.nodes.map((n) => {
501
- const desc = registry.nodes.get(n.typeId);
502
- if (!desc || typeof desc.resolveHandles !== "function")
503
- return n;
504
- try {
505
- const r = desc.resolveHandles({
506
- environment: env || {},
507
- params: n.params,
508
- inputs: nodeInputs?.[n.nodeId],
509
- }) || {};
510
- const inputs = { ...desc.inputs, ...r.inputs };
511
- const outputs = { ...desc.outputs, ...r.outputs };
512
- const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
513
- return {
514
- ...n,
515
- resolvedHandles: { inputs, outputs, inputDefaults },
516
- };
517
- }
518
- catch {
519
- return n;
520
- }
521
- }),
522
- };
523
- return enriched;
524
- }
525
- catch {
526
- return def;
527
- }
528
- };
529
468
  const api = {
530
469
  async coerce(from, to, value) {
531
470
  const resolved = registry.resolveCoercion(from, to);
@@ -585,63 +524,11 @@ async function createRuntimeAdapter(createRegistry, send) {
585
524
  },
586
525
  async build(def, opts) {
587
526
  const env = opts || {};
588
- const enriched = computeResolvedHandles(def, {}, env);
589
- graphRuntime = builder.build(enriched, { environment: env });
590
- // Seed defaults for dynamic inputs on initial build
591
- seedDefaultsFromDef(enriched);
527
+ graphRuntime = builder.build(def, { environment: env });
592
528
  graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
593
529
  graphRuntime.on("invalidate", (p) => send({ message: { type: "invalidate", payload: p } }));
594
530
  graphRuntime.on("error", (p) => send({ message: { type: "error", payload: p } }));
595
531
  graphRuntime.on("stats", (p) => send({ message: { type: "stats", payload: p } }));
596
- // Listen for input changes to recompute dynamic handles per node (generalized)
597
- graphRuntime.on("value", (e) => {
598
- try {
599
- if (!graphRuntime)
600
- return;
601
- if (!e || e.io !== "input")
602
- return;
603
- const nodeId = e.nodeId;
604
- const nd = graphRuntime.getNodeData(nodeId);
605
- if (!nd)
606
- return;
607
- // Recompute resolved handles for only this node using current inputs
608
- const envNow = graphRuntime.getEnvironment?.() ?? env;
609
- const curDef = graphRuntime.getGraphDef();
610
- const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);
611
- if (!target)
612
- return;
613
- const desc = registry.nodes.get(target.typeId);
614
- if (!desc || typeof desc.resolveHandles !== "function")
615
- return;
616
- const r = desc.resolveHandles({
617
- params: target.params,
618
- environment: envNow || {},
619
- inputs: nd.inputs || {},
620
- }) || {};
621
- const inputs = { ...desc.inputs, ...r.inputs };
622
- const outputs = { ...desc.outputs, ...r.outputs };
623
- const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
624
- const nextHandles = { inputs, outputs, inputDefaults };
625
- // If nothing changed, skip
626
- const before = target.resolvedHandles || {};
627
- if (JSON.stringify(before) === JSON.stringify(nextHandles))
628
- return;
629
- // Apply per-node update and keep lastDef in sync for this node only
630
- graphRuntime.updateNodeHandles(nodeId, nextHandles, registry);
631
- target.resolvedHandles = nextHandles;
632
- // Seed newly added dynamic inputs with defaults if provided and not present
633
- seedDefaultsForNode(nodeId, inputDefaults);
634
- send({
635
- message: {
636
- type: "invalidate",
637
- payload: { reason: "graph-updated" },
638
- },
639
- });
640
- }
641
- catch {
642
- // ignore
643
- }
644
- });
645
532
  },
646
533
  snapshot() {
647
534
  const inputs = {};
@@ -711,20 +598,7 @@ async function createRuntimeAdapter(createRegistry, send) {
711
598
  async update(def) {
712
599
  if (!graphRuntime)
713
600
  return;
714
- const env = graphRuntime.getEnvironment?.() ?? {};
715
- // Build current inputs map from runtime so resolveHandles can depend on inputs
716
- const inputsMap = {};
717
- const ids = graphRuntime.getNodeIds();
718
- for (const id of ids) {
719
- const nd = graphRuntime.getNodeData(id);
720
- if (nd?.inputs && Object.keys(nd.inputs).length > 0) {
721
- inputsMap[id] = nd.inputs;
722
- }
723
- }
724
- const enriched = computeResolvedHandles(def, inputsMap, env);
725
- graphRuntime.update(enriched, registry);
726
- // Seed defaults for newly added dynamic inputs on update
727
- seedDefaultsFromDef(enriched);
601
+ graphRuntime.update(def, registry);
728
602
  send({
729
603
  message: {
730
604
  type: "invalidate",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/RemoteEngine.ts","../../src/RemoteRunner.ts","../../src/server/errors.ts","../../src/server/command.ts","../../src/server/runtime.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private url: string;\n private seq = new SeqGenerator();\n\n constructor(url: string) {\n this.url = url;\n }\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n this.ws = window\n ? new (window as any).WebSocket(this.url)\n : new WebSocket(this.url);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n this.ws.onopen = () => resolve();\n this.ws.onerror = (e) => reject(e);\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n });\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n // For now, just send and wait for the next message with matching seq (simple demo)\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(): Promise<void> {\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const res = await fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","import type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"@bian-womp/spark-protocol\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<\n EngineEventName,\n Set<EngineEventListener<EngineEventName>>\n >();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = `${msg.payload.nodeId}.${msg.payload.handle}`;\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n this.transport.send({ message: { type: \"Launch\" } });\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.transport.send({\n message: { type: \"SetInput\", payload: { nodeId, handle, value } },\n });\n }\n\n // Batch inputs for a single network round-trip\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.transport.send({\n message: { type: \"SetInputs\", payload: { nodeId, inputs } },\n });\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.transport.send({\n message: { type: \"TriggerExternal\", payload: { nodeId, event } },\n });\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(\n event: K,\n payload: EngineEventMap[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 getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(`${nodeId}.${output}`)?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n RunnerControl,\n GraphDefinition,\n Engine,\n} from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport type { Transport } from \"./transport/Transport\";\nimport {\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport class RemoteRunner implements RunnerControl {\n private engine: RemoteEngine;\n constructor(private transport: Transport) {\n this.engine = new RemoteEngine(transport);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition): Promise<void> {\n await this.transport.request({\n message: { type: \"Update\", payload: { def } },\n });\n }\n\n async describeRegistry(): Promise<RegisteryDescriptor> {\n const res = await this.transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegisteryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<any>): Promise<void> {\n await this.transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const res = await this.transport.request({ message: { type: \"Snapshot\" } });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const res = await this.transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void> {\n await this.transport.request({\n message: { type: \"ApplySnapshotFull\", payload },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const res = await this.transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload =\n (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const res = await this.transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n getEngine(): Engine {\n return this.engine;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type { Envelope, Command } from \"@bian-womp/spark-protocol\";\nimport type { Json, RuntimeApi } from \"./runtime\";\nimport { summarize } from \"./errors\";\n\nexport async function handleCommand(\n label: string,\n env: Envelope<Command>,\n runtimeApi: RuntimeApi,\n ack: (payload?: Json) => void\n): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n console.debug(\n `[${label}] rx Build seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(\n msg.payload.environment ?? {}\n ).join(\",\")}`\n );\n await runtimeApi.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n console.debug(\n `[${label}] rx Update seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0}`\n );\n await runtimeApi.update(msg.payload.def);\n ack();\n break;\n }\n case \"SetEnvironment\": {\n console.debug(`[${label}] rx SetEnvironment seq=${env.seq}`);\n runtimeApi.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n });\n ack();\n break;\n }\n case \"SetInput\": {\n console.debug(\n `[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${\n msg.payload.handle\n }=${summarize(msg.payload.value)}`\n );\n runtimeApi.setInput(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.value\n );\n ack();\n break;\n }\n case \"SetInputs\": {\n console.debug(\n `[${label}] rx SetInputs seq=${env.seq} ${\n msg.payload.nodeId\n } keys=${Object.keys(msg.payload.inputs || {}).join(\",\")}`\n );\n const nodeId = msg.payload.nodeId;\n const inputs = msg.payload.inputs;\n runtimeApi.setInputs(nodeId, inputs);\n ack();\n break;\n }\n case \"TriggerExternal\": {\n console.debug(\n `[${label}] rx TriggerExternal seq=${env.seq} ${\n msg.payload.nodeId\n } event=${summarize(msg.payload.event)}`\n );\n runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);\n ack();\n break;\n }\n case \"Launch\": {\n console.debug(`[${label}] rx Launch seq=${env.seq}`);\n runtimeApi.launch();\n ack();\n break;\n }\n case \"WhenIdle\": {\n console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);\n await runtimeApi.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n console.debug(`[${label}] rx Snapshot seq=${env.seq}`);\n const snap = runtimeApi.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n console.debug(`[${label}] rx SnapshotFull seq=${env.seq}`);\n const snap = runtimeApi.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n console.debug(`[${label}] rx GetEnvironment seq=${env.seq}`);\n const environment = runtimeApi.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n console.debug(`[${label}] rx ApplySnapshotFull seq=${env.seq}`);\n await runtimeApi.applySnapshotFull(msg.payload);\n ack();\n break;\n }\n case \"Coerce\": {\n console.debug(\n `[${label}] rx Coerce seq=${env.seq} ${msg.payload.from} -> ${msg.payload.to}`\n );\n const value = await runtimeApi.coerce(\n msg.payload?.from,\n msg.payload?.to,\n msg.payload?.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n console.debug(`[${label}] rx DescribeRegistry seq=${env.seq}`);\n const desc = runtimeApi.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n console.debug(`[${label}] rx RegistryApply seq=${env.seq}`);\n await runtimeApi.applyRegistry((msg as any).payload?.deltas || []);\n ack();\n break;\n }\n case \"Dispose\": {\n console.debug(`[${label}] rx Dispose seq=${env.seq}`);\n runtimeApi.dispose();\n ack();\n break;\n }\n case \"Pause\":\n case \"Resume\": {\n console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);\n ack();\n break;\n }\n default: {\n console.debug(`[${label}] rx Unknown type seq=${env.seq}`);\n ack();\n }\n }\n}\n","import { GraphBuilder, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport type {\n Envelope,\n RuntimeEvent,\n GraphDefinition,\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport type Json = Record<string, unknown>;\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n applyRegistry: (deltas: any[]) => Promise<void>;\n setEnvironment: (env: Json, opts?: { merge?: boolean }) => void;\n getEnvironment: () => Record<string, unknown>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n setInputs: (nodeId: string, inputs: Record<string, unknown>) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: () => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n describeRegistry: () => RegisteryDescriptor;\n snapshot: () => RuntimeSnapshot;\n coerce: (from: string, to: string, value: unknown) => Promise<unknown>;\n snapshotFull: () => RuntimeSnapshotFull;\n applySnapshotFull: (payload: RuntimeSnapshotFull) => Promise<void>;\n}\n\nexport async function createRuntimeAdapter(\n createRegistry: () => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void\n): Promise<RuntimeApi> {\n const registry = await createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n\n // Seed defaults for any missing inputs for a single node\n function seedDefaultsForNode(\n nodeId: string,\n defaultValues?: Record<string, unknown>\n ): void {\n if (!graphRuntime || !defaultValues) return;\n try {\n const nd = graphRuntime.getNodeData(nodeId);\n const existing = nd?.inputs || {};\n const toSet: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(defaultValues)) {\n if (!(k in existing)) toSet[k] = v;\n }\n if (Object.keys(toSet).length > 0) {\n graphRuntime.setInputs(nodeId, toSet);\n }\n } catch {}\n }\n\n // Seed defaults for all nodes based on a graph definition with resolvedHandles\n function seedDefaultsFromDef(def: GraphDefinition): void {\n if (!graphRuntime) return;\n for (const n of def.nodes || []) {\n const defs = n.resolvedHandles?.inputDefaults;\n if (defs) seedDefaultsForNode(n.nodeId, defs);\n }\n }\n\n const computeResolvedHandles = (\n def: GraphDefinition,\n nodeInputs: Record<string, Record<string, unknown>>,\n env?: Record<string, unknown>\n ): GraphDefinition => {\n try {\n const enriched: GraphDefinition = {\n ...def,\n nodes: def.nodes.map((n) => {\n const desc = registry.nodes.get(n.typeId);\n if (!desc || typeof desc.resolveHandles !== \"function\") return n;\n try {\n const r =\n desc.resolveHandles({\n environment: env || {},\n params: n.params,\n inputs: nodeInputs?.[n.nodeId],\n }) || {};\n const inputs = { ...desc.inputs, ...r.inputs };\n const outputs = { ...desc.outputs, ...r.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };\n return {\n ...n,\n resolvedHandles: { inputs, outputs, inputDefaults },\n };\n } catch {\n return n;\n }\n }),\n };\n return enriched;\n } catch {\n return def;\n }\n };\n const api: RuntimeApi = {\n async coerce(from, to, value) {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment() {\n return graphRuntime?.getEnvironment?.() ?? {};\n },\n async applyRegistry(deltas) {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n async build(def, opts) {\n const env = opts || {};\n const enriched = computeResolvedHandles(def, {}, env);\n graphRuntime = builder.build(enriched, { environment: env });\n // Seed defaults for dynamic inputs on initial build\n seedDefaultsFromDef(enriched);\n graphRuntime.on(\"value\", (p) =>\n send({ message: { type: \"value\", payload: p } })\n );\n graphRuntime.on(\"invalidate\", (p) =>\n send({ message: { type: \"invalidate\", payload: p } })\n );\n graphRuntime.on(\"error\", (p) =>\n send({ message: { type: \"error\", payload: p } })\n );\n graphRuntime.on(\"stats\", (p) =>\n send({ message: { type: \"stats\", payload: p } })\n );\n // Listen for input changes to recompute dynamic handles per node (generalized)\n graphRuntime.on(\"value\", (e) => {\n try {\n if (!graphRuntime) return;\n if (!e || e.io !== \"input\") return;\n const nodeId = e.nodeId;\n const nd = graphRuntime.getNodeData(nodeId);\n if (!nd) return;\n // Recompute resolved handles for only this node using current inputs\n const envNow = graphRuntime.getEnvironment?.() ?? env;\n const curDef = graphRuntime.getGraphDef();\n const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);\n if (!target) return;\n const desc = registry.nodes.get(target.typeId);\n if (!desc || typeof desc.resolveHandles !== \"function\") return;\n const r =\n desc.resolveHandles({\n params: target.params,\n environment: envNow || {},\n inputs: nd.inputs || {},\n }) || {};\n const inputs = { ...desc.inputs, ...r.inputs };\n const outputs = { ...desc.outputs, ...r.outputs };\n const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };\n const nextHandles = { inputs, outputs, inputDefaults };\n // If nothing changed, skip\n const before = target.resolvedHandles || {};\n if (JSON.stringify(before) === JSON.stringify(nextHandles)) return;\n // Apply per-node update and keep lastDef in sync for this node only\n graphRuntime.updateNodeHandles(nodeId, nextHandles, registry);\n target.resolvedHandles = nextHandles;\n // Seed newly added dynamic inputs with defaults if provided and not present\n seedDefaultsForNode(nodeId, inputDefaults);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n } catch {\n // ignore\n }\n });\n },\n snapshot(): RuntimeSnapshot {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull() {\n const snap = api.snapshot();\n const env = graphRuntime?.getEnvironment?.() ?? {};\n const def = graphRuntime?.getGraphDef();\n return {\n def,\n environment: env,\n inputs: snap.inputs,\n outputs: snap.outputs,\n };\n },\n async applySnapshotFull(payload) {\n const def = payload.def;\n if (!def) return;\n await api.build(def, payload.environment);\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n graphRuntime?.hydrate(\n { inputs: payload.inputs, outputs: payload.outputs },\n { reemit: true }\n );\n },\n describeRegistry() {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n async update(def) {\n if (!graphRuntime) return;\n const env = graphRuntime.getEnvironment?.() ?? {};\n // Build current inputs map from runtime so resolveHandles can depend on inputs\n const inputsMap: Record<string, Record<string, unknown>> = {};\n const ids = graphRuntime.getNodeIds();\n for (const id of ids) {\n const nd = graphRuntime.getNodeData(id);\n if (nd?.inputs && Object.keys(nd.inputs).length > 0) {\n inputsMap[id] = nd.inputs;\n }\n }\n const enriched = computeResolvedHandles(def, inputsMap, env);\n graphRuntime.update(enriched, registry);\n // Seed defaults for newly added dynamic inputs on update\n seedDefaultsFromDef(enriched);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n },\n setEnvironment(env, opts) {\n if (!graphRuntime) return;\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n return;\n }\n graphRuntime.setEnvironment(env);\n },\n setInput(nodeId, handle, value) {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n setInputs(nodeId, inputs) {\n graphRuntime?.setInputs(nodeId, inputs);\n },\n triggerExternal(nodeId, event) {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch() {\n graphRuntime?.launch();\n },\n whenIdle() {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose() {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n return api;\n}\n"],"names":[],"mappings":";;;MAAa,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,OAAO,GAAG,CAAC;IAYrB;IAVE,IAAI,GAAA;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI;QAC1C;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAClB;AACA,QAAA,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO;IAClC;AACD;;ACRD,MAAM,IAAI,GAAG,CAAC;MAID,kBAAkB,CAAA;AAM7B,IAAA,WAAA,CAAY,GAAW,EAAA;AAJf,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAkC;AAErD,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAE;AAG9B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAChB;AAEA,IAAA,MAAM,OAAO,GAAA;QACX,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,IAAI;YAAE;QAC5C,IAAI,CAAC,EAAE,GAAG;cACN,IAAK,MAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;cACtC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;YAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,KAAI;AACzB,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAkB;oBACxD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBAAE,CAAC,CAAC,GAAG,CAAC;gBACpD;gBAAE,MAAM,EAAC;AACX,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,OAAO,CACX,GAAmB,EAAA;;QAGnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAC3B,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,KAAI;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtC,gBAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE;AACxB,oBAAA,GAAG,EAAE;oBACL,OAAO,CAAC,QAAQ,CAAC;gBACnB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACd,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,IAAI,CAAiB,GAAmB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,IAAI;YAAE;AAC7C,QAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC;AAEA,IAAA,SAAS,CAAC,EAAkC,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IACxC;AAEA,IAAA,MAAM,KAAK,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE;AACd,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAClB,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS;AACnB,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YAClC,EAAE,CAAC,OAAO,GAAG,MAAM,OAAO,EAAE;AAC5B,YAAA,IAAI;gBACF,EAAE,CAAC,KAAK,EAAE;YACZ;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC,CAAC;IACJ;AACD;;MC5EY,oBAAoB,CAAA;AAM/B,IAAA,WAAA,CAAY,OAAe,EAAA;AAJnB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAkC;QAK3D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC3C;AAEA,IAAA,MAAM,OAAO,GAAA;;QAEX,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,MAAM,IAAI,GAAG,YAAW;AACtB,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBAC7C,IAAI,IAAI,CAAC,MAAM;oBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAAE;gBACb,MAAM,KAAK,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoB;AACnD,gBAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,oBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBAAE,CAAC,CAAC,GAAG,CAAC;gBACpD;YACF;YAAE,MAAM,EAAC;AACX,QAAA,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;IACvC;IAEA,MAAM,OAAO,CACX,GAAmB,EAAA;QAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,EAAE;AACjD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC;QACF,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB;AACjD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,CAAiB,GAAmB,EAAA;AACtC,QAAA,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,EAAE;AAC/B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,EAAkC,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IACxC;AAEA,IAAA,MAAM,KAAK,GAAA;QACT,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;IAC1B;AACD;;MCpDY,YAAY,CAAA;AAOvB,IAAA,WAAA,CAAoB,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;AANrB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;AACK,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAsD;AAG3E,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzD;AAEQ,IAAA,UAAU,CAAC,GAA2B,EAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AAClB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;AACxB,gBAAA,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa;AACzC,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QACjC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QACjC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC;QACtC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QACjC;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;IACtD;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AAClE,SAAA,CAAC;IACJ;;IAGA,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;AAC5D,SAAA,CAAC;IACJ;IAEA,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AACjE,SAAA,CAAC;IACJ;IAEA,EAAE,CACA,KAAQ,EACR,OAA+B,EAAA;QAE/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiC;AACrE,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAChB,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC;IAEQ,IAAI,CACV,KAAQ,EACR,OAA0B,EAAA;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,GAAG;YAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC;IACtD;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC,EAAE,KAAK;IACrD;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;IACjE;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACvD;AACD;;MC9EY,YAAY,CAAA;AAEvB,IAAA,WAAA,CAAoB,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC;IAC3C;AAEA,IAAA,MAAM,KAAK,CACT,GAAoB,EACpB,IAAgD,EAAA;AAEhD,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3B,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;AACjD,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,MAAM,MAAM,CAAC,GAAoB,EAAA;AAC/B,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE;AAC9C,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,gBAAgB,GAAA;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;AACtC,SAAA,CAAC;AACF,QAAA,MAAM,OAAO,GAAI,GAAG,EAAE,OAA6C,IAAI,EAAE;AACzE,QAAA,QACE,OAAO,CAAC,QAAQ,IAAI;AAClB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,aAAa,EAAE,CAAC;AACjB,SAAA;IAEL;IAEA,MAAM,aAAa,CAAC,MAAkB,EAAA;AACpC,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;AACxD,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;AAC3E,QAAA,MAAM,OAAO,GAAI,GAAG,EAAE,OAAyC,IAAI,EAAE;AACrE,QAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACxD;AAEA,IAAA,MAAM,YAAY,GAAA;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;AAClC,SAAA,CAAC;AACF,QAAA,MAAM,OAAO,GAAI,GAAG,EAAE,OAA6C,IAAI,EAAE;AACzE,QAAA,QACE,OAAO,CAAC,QAAQ,IAAI;AAClB,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACZ,SAAA;IAEL;IAEA,MAAM,iBAAiB,CAAC,OAA4B,EAAA;AAClD,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3B,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE;AAChD,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,cAAc,CAClB,WAAoC,EACpC,IAA0B,EAAA;AAE1B,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3B,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7C,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,cAAc,GAAA;QAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;AACpC,SAAA,CAAC;AACF,QAAA,MAAM,OAAO,GACV,GAAG,EAAE,OAAqD,IAAI,EAAE;AACnE,QAAA,OAAO,OAAO,CAAC,WAAW,IAAI,EAAE;IAClC;AAEA,IAAA,MAAM,MAAM,CAAC,IAAY,EAAE,EAAU,EAAE,KAAc,EAAA;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;AAC1D,SAAA,CAAC;AACF,QAAA,MAAM,OAAO,GAAI,GAAG,EAAE,OAA6C,IAAI,EAAE;QACzE,OAAO,OAAO,CAAC,KAAK;IACtB;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AACD;;ACtHD;SACgB,SAAS,CAAC,KAAc,EAAE,MAAM,GAAG,GAAG,EAAA;AACpD,IAAA,IAAI;AACF,QAAA,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnE,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACzD;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AACF;AAEM,SAAU,cAAc,CAAC,GAAY,EAAA;AACzC,IAAA,IAAI;AACF,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;QACzC,MAAM,MAAM,GAAG,GAAU;AACzB,QAAA,IAAI,GAAG,YAAY,KAAK,EAAE;AACxB,YAAA,MAAM,IAAI,GAAQ;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB;YACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACxD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,OAAO;AAChC,YAAA,MAAM,SAAS,GAAG,MAAM,EAAE,IAAI;AAC9B,YAAA,MAAM,UAAU,GAAG,MAAM,EAAE,KAAK;AAChC,YAAA,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE;AACzB,YAAA,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO;AAAE,gBAAA,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5D,YAAA,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI;AAAE,gBAAA,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AACxD,YAAA,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,gBAAA,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5D,YAAA,OAAO,GAAG;QACZ;QACA,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;IACjC;AAAE,IAAA,MAAM;QACN,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;IACjC;AACF;;ACjCO,eAAe,aAAa,CACjC,KAAa,EACb,GAAsB,EACtB,UAAsB,EACtB,GAA6B,EAAA;AAE7B,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAkB;AAClC,IAAA,QAAQ,GAAG,CAAC,IAAI;QACd,KAAK,OAAO,EAAE;YACZ,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,kBAAkB,GAAG,CAAC,GAAG,CAAA,OAAA,EAChC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CACnC,CAAA,OAAA,EAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CACjE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAC9B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CACd;AACD,YAAA,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,WAAmB,CAAC;AACxE,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,CAAA,gBAAA,EAAmB,GAAG,CAAC,GAAG,UACjC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CACnC,CAAA,OAAA,EAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAA,CAAE,CAC/C;YACD,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,gBAAgB,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,wBAAA,EAA2B,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;YAC5D,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE;gBACjD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,aAAA,CAAC;AACF,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,CAAA,kBAAA,EAAqB,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA,CAAA,EACzD,GAAG,CAAC,OAAO,CAAC,MACd,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAE,CACnC;YACD,UAAU,CAAC,QAAQ,CACjB,GAAG,CAAC,OAAO,CAAC,MAAM,EAClB,GAAG,CAAC,OAAO,CAAC,MAAM,EAClB,GAAG,CAAC,OAAO,CAAC,KAAK,CAClB;AACD,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,WAAW,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,CAAA,mBAAA,EAAsB,GAAG,CAAC,GAAG,IACpC,GAAG,CAAC,OAAO,CAAC,MACd,CAAA,MAAA,EAAS,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAC3D;AACD,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM;AACjC,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM;AACjC,YAAA,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;AACpC,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,iBAAiB,EAAE;YACtB,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,CAAA,yBAAA,EAA4B,GAAG,CAAC,GAAG,CAAA,CAAA,EAC1C,GAAG,CAAC,OAAO,CAAC,MACd,CAAA,OAAA,EAAU,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAE,CACzC;AACD,YAAA,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AACjE,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,QAAQ,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,gBAAA,EAAmB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;YACpD,UAAU,CAAC,MAAM,EAAE;AACnB,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,UAAU,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,kBAAA,EAAqB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AACtD,YAAA,MAAM,UAAU,CAAC,QAAQ,EAAE;AAC3B,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,UAAU,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,kBAAA,EAAqB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AACtD,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE;AAClC,YAAA,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACvB;QACF;QACA,KAAK,cAAc,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,sBAAA,EAAyB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AAC1D,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE;AACtC,YAAA,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACvB;QACF;QACA,KAAK,gBAAgB,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,wBAAA,EAA2B,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AAC5D,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE;AAC/C,YAAA,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC;YACpB;QACF;QACA,KAAK,mBAAmB,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,2BAAA,EAA8B,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;YAC/D,MAAM,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,QAAQ,EAAE;YACb,OAAO,CAAC,KAAK,CACX,CAAA,CAAA,EAAI,KAAK,CAAA,gBAAA,EAAmB,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA,IAAA,EAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAA,CAAE,CAC/E;YACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CACnC,GAAG,CAAC,OAAO,EAAE,IAAI,EACjB,GAAG,CAAC,OAAO,EAAE,EAAE,EACf,GAAG,CAAC,OAAO,EAAE,KAAK,CACnB;AACD,YAAA,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;YACd;QACF;QACA,KAAK,kBAAkB,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,0BAAA,EAA6B,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AAC9D,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,EAAE;AAC1C,YAAA,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACvB;QACF;QACA,KAAK,eAAe,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,uBAAA,EAA0B,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AAC3D,YAAA,MAAM,UAAU,CAAC,aAAa,CAAE,GAAW,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;AAClE,YAAA,GAAG,EAAE;YACL;QACF;QACA,KAAK,SAAS,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,iBAAA,EAAoB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;YACrD,UAAU,CAAC,OAAO,EAAE;AACpB,YAAA,GAAG,EAAE;YACL;QACF;AACA,QAAA,KAAK,OAAO;QACZ,KAAK,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,KAAA,EAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAA,WAAA,CAAa,CAAC;AACpE,YAAA,GAAG,EAAE;YACL;QACF;QACA,SAAS;YACP,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,sBAAA,EAAyB,GAAG,CAAC,GAAG,CAAA,CAAE,CAAC;AAC1D,YAAA,GAAG,EAAE;QACP;;AAEJ;;AC5HO,eAAe,oBAAoB,CACxC,cAAuC,EACvC,IAAyC,EAAA;AAEzC,IAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE;AACvC,IAAA,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC;AAC1C,IAAA,IAAI,YAAsC;;AAG1C,IAAA,SAAS,mBAAmB,CAC1B,MAAc,EACd,aAAuC,EAAA;AAEvC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa;YAAE;AACrC,QAAA,IAAI;YACF,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,EAAE,EAAE,MAAM,IAAI,EAAE;YACjC,MAAM,KAAK,GAA4B,EAAE;AACzC,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAClD,gBAAA,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;AAAE,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACpC;YACA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,gBAAA,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;YACvC;QACF;QAAE,MAAM,EAAC;IACX;;IAGA,SAAS,mBAAmB,CAAC,GAAoB,EAAA;AAC/C,QAAA,IAAI,CAAC,YAAY;YAAE;QACnB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa;AAC7C,YAAA,IAAI,IAAI;AAAE,gBAAA,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/C;IACF;IAEA,MAAM,sBAAsB,GAAG,CAC7B,GAAoB,EACpB,UAAmD,EACnD,GAA6B,KACV;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAoB;AAChC,gBAAA,GAAG,GAAG;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACzB,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU;AAAE,wBAAA,OAAO,CAAC;AAChE,oBAAA,IAAI;AACF,wBAAA,MAAM,CAAC,GACL,IAAI,CAAC,cAAc,CAAC;4BAClB,WAAW,EAAE,GAAG,IAAI,EAAE;4BACtB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,4BAAA,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;yBAC/B,CAAC,IAAI,EAAE;AACV,wBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AAC9C,wBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;AACjD,wBAAA,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE;wBACnE,OAAO;AACL,4BAAA,GAAG,CAAC;AACJ,4BAAA,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE;yBACpD;oBACH;AAAE,oBAAA,MAAM;AACN,wBAAA,OAAO,CAAC;oBACV;AACF,gBAAA,CAAC,CAAC;aACH;AACD,YAAA,OAAO,QAAQ;QACjB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,GAAG;QACZ;AACF,IAAA,CAAC;AACD,IAAA,MAAM,GAAG,GAAe;AACtB,QAAA,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAA;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,OAAO,KAAK;AAC3B,YAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5D,YAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;YAChC,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC;QACtD,CAAC;QACD,cAAc,GAAA;AACZ,YAAA,OAAO,YAAY,EAAE,cAAc,IAAI,IAAI,EAAE;QAC/C,CAAC;QACD,MAAM,aAAa,CAAC,MAAM,EAAA;;;AAGxB,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE;AACjC,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;oBAC9B,QAAQ,CAAC,YAAY,CAAC;wBACpB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,wBAAA,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;wBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;oBACrC,QAAQ,CAAC,YAAY,CAAC;wBACpB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;AACxB,wBAAA,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI;AACvB,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;AACrC,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;oBACzB,QAAQ,CAAC,YAAY,CAAC;wBACpB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;wBACzB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;wBAChD,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,wBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;AACzB,wBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;;AAE3B,wBAAA,IAAI,EAAE,MAAK,EAAE,CAAC;AACf,qBAAA,CAAC;gBACJ;YACF;;AAEA,YAAA,IAAI,CAAC;AACH,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE;AAChD,iBAAA;AACF,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,EAAA;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACrD,YAAA,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;;YAE5D,mBAAmB,CAAC,QAAQ,CAAC;YAC7B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KACzB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACjD;YACD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,KAC9B,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACtD;YACD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KACzB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACjD;YACD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KACzB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACjD;;YAED,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AAC7B,gBAAA,IAAI;AACF,oBAAA,IAAI,CAAC,YAAY;wBAAE;AACnB,oBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO;wBAAE;AAC5B,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;oBACvB,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3C,oBAAA,IAAI,CAAC,EAAE;wBAAE;;oBAET,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,IAAI,IAAI,GAAG;AACrD,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE;oBACzC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;AACpE,oBAAA,IAAI,CAAC,MAAM;wBAAE;AACb,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU;wBAAE;AACxD,oBAAA,MAAM,CAAC,GACL,IAAI,CAAC,cAAc,CAAC;wBAClB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EAAE,MAAM,IAAI,EAAE;AACzB,wBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE;qBACxB,CAAC,IAAI,EAAE;AACV,oBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AAC9C,oBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;AACjD,oBAAA,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE;oBACnE,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE;;AAEtD,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE;AAC3C,oBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;wBAAE;;oBAE5D,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC7D,oBAAA,MAAM,CAAC,eAAe,GAAG,WAAW;;AAEpC,oBAAA,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;AAC1C,oBAAA,IAAI,CAAC;AACH,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,YAAY;AAClB,4BAAA,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;AACrC,yBAAA;AACF,qBAAA,CAAC;gBACJ;AAAE,gBAAA,MAAM;;gBAER;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,QAAQ,GAAA;YACN,MAAM,MAAM,GAA8B,EAAE;YAC5C,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,IAAI,CAAC,YAAY;AAAE,gBAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC7C,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE;AACvC,YAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;gBAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7C,gBAAA,IAAI,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;gBACrC;AACA,gBAAA,IAAI,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;gBACvC;YACF;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC5B,CAAC;QACD,YAAY,GAAA;AACV,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,EAAE,cAAc,IAAI,IAAI,EAAE;AAClD,YAAA,MAAM,GAAG,GAAG,YAAY,EAAE,WAAW,EAAE;YACvC,OAAO;gBACL,GAAG;AACH,gBAAA,WAAW,EAAE,GAAG;gBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;QACH,CAAC;QACD,MAAM,iBAAiB,CAAC,OAAO,EAAA;AAC7B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;AACvB,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;;YAEzC,YAAY,EAAE,OAAO,CACnB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB;QACH,CAAC;QACD,gBAAgB,GAAA;;YAEd,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAI;gBACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,EAAE;oBACF,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;AACxB,oBAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;iBACvC;AACH,YAAA,CAAC,CAAC;;AAEF,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACrD,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;AAC1D,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;gBAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC;gBACzC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;AAC9C,YAAA,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;gBAClC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,gBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;AACtB,gBAAA,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;AACxB,gBAAA,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,EAAE;AACrC,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE;AAC1C,YAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE;QAClE,CAAC;QACD,MAAM,MAAM,CAAC,GAAG,EAAA;AACd,YAAA,IAAI,CAAC,YAAY;gBAAE;YACnB,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,IAAI,IAAI,EAAE;;YAEjD,MAAM,SAAS,GAA4C,EAAE;AAC7D,YAAA,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE;AACrC,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;gBACpB,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;AACvC,gBAAA,IAAI,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,oBAAA,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM;gBAC3B;YACF;YACA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC;AAC5D,YAAA,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;;YAEvC,mBAAmB,CAAC,QAAQ,CAAC;AAC7B,YAAA,IAAI,CAAC;AACH,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;AACrC,iBAAA;AACF,aAAA,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,IAAI,EAAA;AACtB,YAAA,IAAI,CAAC,YAAY;gBAAE;AACnB,YAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE;AAC7C,gBAAA,MAAM,IAAI,GAAG,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE;AACnD,gBAAA,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;gBACjC;YACF;AACA,YAAA,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC;QAClC,CAAC;AACD,QAAA,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAA;YAC5B,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QAC/C,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAA;AACtB,YAAA,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;QACzC,CAAC;QACD,eAAe,CAAC,MAAM,EAAE,KAAK,EAAA;AAC3B,YAAA,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QAC9C,CAAC;QACD,MAAM,GAAA;YACJ,YAAY,EAAE,MAAM,EAAE;QACxB,CAAC;QACD,QAAQ,GAAA;YACN,OAAO,YAAY,EAAE,QAAQ,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;QACxD,CAAC;QACD,OAAO,GAAA;AACL,YAAA,YAAY,EAAE,OAAO,IAAI;YACzB,YAAY,GAAG,SAAS;QAC1B,CAAC;KACF;AACD,IAAA,OAAO,GAAG;AACZ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/transport/Seq.ts","../../src/transport/WebSocketTransport.ts","../../src/transport/HttpPollingTransport.ts","../../src/RemoteEngine.ts","../../src/RemoteRunner.ts","../../src/server/errors.ts","../../src/server/command.ts","../../src/server/runtime.ts"],"sourcesContent":["export class SeqGenerator {\n private lastMs = 0;\n private seqInMs = 0;\n\n next(): number {\n const now = Date.now();\n if (now === this.lastMs) {\n this.seqInMs = (this.seqInMs + 1) % 1000;\n } else {\n this.lastMs = now;\n this.seqInMs = 0;\n }\n return now * 1000 + this.seqInMs;\n }\n}\n\n","import { WebSocket } from \"ws\";\nimport type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\nimport { SeqGenerator } from \"./Seq\";\n\nconst CONNECTING = 0;\nconst OPEN = 1;\nconst CLOSING = 2;\nconst CLOSED = 3;\n\nexport class WebSocketTransport implements Transport {\n private ws?: WebSocket;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private url: string;\n private seq = new SeqGenerator();\n\n constructor(url: string) {\n this.url = url;\n }\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === OPEN) return;\n this.ws = window\n ? new (window as any).WebSocket(this.url)\n : new WebSocket(this.url);\n await new Promise<void>((resolve, reject) => {\n if (!this.ws) return reject(new Error(\"ws init failed\"));\n this.ws.onopen = () => resolve();\n this.ws.onerror = (e) => reject(e);\n this.ws.onmessage = (ev) => {\n try {\n const env = JSON.parse(String(ev.data)) as Envelope<any>;\n for (const l of Array.from(this.listeners)) l(env);\n } catch {}\n };\n });\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n // For now, just send and wait for the next message with matching seq (simple demo)\n const seq = this.seq.next();\n const env = { ...msg, seq };\n const p = new Promise<Envelope<TRes>>((resolve) => {\n const off = this.subscribe((incoming) => {\n if (incoming.seq === seq) {\n off();\n resolve(incoming);\n }\n });\n });\n this.send(env);\n return p;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n if (!this.ws || this.ws.readyState !== OPEN) return;\n this.ws.send(JSON.stringify(msg));\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (!this.ws) return;\n const ws = this.ws;\n this.ws = undefined;\n await new Promise<void>((resolve) => {\n ws.onclose = () => resolve();\n try {\n ws.close();\n } catch {\n resolve();\n }\n });\n }\n}\n","import type { Envelope } from \"@bian-womp/spark-protocol\";\nimport type { Transport } from \"./Transport\";\n\nexport class HttpPollingTransport implements Transport {\n private baseUrl: string;\n private listeners = new Set<(event: Envelope<any>) => void>();\n private polling?: NodeJS.Timeout;\n private cursor?: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n async connect(): Promise<void> {\n // Start polling loop\n if (this.polling) return;\n const tick = async () => {\n try {\n const url = new URL(this.baseUrl + \"/events\");\n if (this.cursor) url.searchParams.set(\"cursor\", this.cursor);\n const res = await fetch(url.toString());\n if (!res.ok) return;\n const batch = (await res.json()) as Envelope<any>[];\n for (const env of batch) {\n this.cursor = String(env.seq ?? Date.now());\n for (const l of Array.from(this.listeners)) l(env);\n }\n } catch {}\n };\n this.polling = setInterval(tick, 200);\n }\n\n async request<TReq = unknown, TRes = unknown>(\n msg: Envelope<TReq>\n ): Promise<Envelope<TRes>> {\n const res = await fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n const data = (await res.json()) as Envelope<TRes>;\n return data;\n }\n\n send<TReq = unknown>(msg: Envelope<TReq>): void {\n fetch(this.baseUrl + \"/command\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(msg),\n });\n }\n\n subscribe(cb: (event: Envelope<any>) => void): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n async close(): Promise<void> {\n if (this.polling) clearInterval(this.polling);\n this.polling = undefined;\n }\n}\n","import type {\n Engine,\n EngineEventListener,\n EngineEventName,\n EngineEventMap,\n} from \"@bian-womp/spark-graph\";\nimport type { Transport } from \"./transport/Transport\";\nimport type { Envelope, RuntimeEvent } from \"@bian-womp/spark-protocol\";\n\nexport class RemoteEngine implements Engine {\n private listeners = new Map<\n EngineEventName,\n Set<EngineEventListener<EngineEventName>>\n >();\n private cache = new Map<string, { value: unknown; runtimeTypeId?: string }>();\n\n constructor(private transport: Transport) {\n this.transport.subscribe((env) => this.onEnvelope(env));\n }\n\n private onEnvelope(env: Envelope<RuntimeEvent>): void {\n const msg = env.message;\n if (!msg) return;\n if (msg.type === \"value\") {\n const key = `${msg.payload.nodeId}.${msg.payload.handle}`;\n this.cache.set(key, {\n value: msg.payload.value,\n runtimeTypeId: msg.payload.runtimeTypeId,\n });\n this.emit(\"value\", msg.payload);\n } else if (msg.type === \"error\") {\n this.emit(\"error\", msg.payload);\n } else if (msg.type === \"invalidate\") {\n this.emit(\"invalidate\", msg.payload);\n } else if (msg.type === \"stats\") {\n this.emit(\"stats\", msg.payload);\n }\n }\n\n launch(): void {\n this.transport.send({ message: { type: \"Launch\" } });\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.transport.send({\n message: { type: \"SetInput\", payload: { nodeId, handle, value } },\n });\n }\n\n // Batch inputs for a single network round-trip\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.transport.send({\n message: { type: \"SetInputs\", payload: { nodeId, inputs } },\n });\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.transport.send({\n message: { type: \"TriggerExternal\", payload: { nodeId, event } },\n });\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event)! as Set<EngineEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends EngineEventName>(\n event: K,\n payload: EngineEventMap[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 getOutput(nodeId: string, output: string): unknown {\n return this.cache.get(`${nodeId}.${output}`)?.value;\n }\n\n async whenIdle(): Promise<void> {\n await this.transport.request({ message: { type: \"WhenIdle\" } });\n }\n\n dispose(): void {\n this.transport.send({ message: { type: \"Dispose\" } });\n }\n}\n","import type {\n RunnerControl,\n GraphDefinition,\n Engine,\n} from \"@bian-womp/spark-graph\";\nimport { RemoteEngine } from \"./RemoteEngine\";\nimport type { Transport } from \"./transport/Transport\";\nimport {\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport class RemoteRunner implements RunnerControl {\n private engine: RemoteEngine;\n constructor(private transport: Transport) {\n this.engine = new RemoteEngine(transport);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"Build\",\n payload: { def, environment: opts?.environment },\n },\n });\n }\n\n async update(def: GraphDefinition): Promise<void> {\n await this.transport.request({\n message: { type: \"Update\", payload: { def } },\n });\n }\n\n async describeRegistry(): Promise<RegisteryDescriptor> {\n const res = await this.transport.request({\n message: { type: \"DescribeRegistry\" },\n });\n const payload = (res?.message as { registry: RegisteryDescriptor }) || {};\n return (\n payload.registry || {\n types: [],\n categories: [],\n nodes: [],\n coercions: [],\n schemaVersion: 4,\n }\n );\n }\n\n async applyRegistry(deltas: Array<any>): Promise<void> {\n await this.transport.request({\n message: { type: \"RegistryApply\", payload: { deltas } },\n });\n }\n\n async snapshot(): Promise<RuntimeSnapshot> {\n const res = await this.transport.request({ message: { type: \"Snapshot\" } });\n const payload = (res?.message as { snapshot: RuntimeSnapshot }) || {};\n return payload.snapshot || { inputs: {}, outputs: {} };\n }\n\n async snapshotFull(): Promise<RuntimeSnapshotFull> {\n const res = await this.transport.request({\n message: { type: \"SnapshotFull\" },\n });\n const payload = (res?.message as { snapshot: RuntimeSnapshotFull }) || {};\n return (\n payload.snapshot || {\n def: undefined,\n environment: {},\n inputs: {},\n outputs: {},\n }\n );\n }\n\n async applySnapshotFull(payload: RuntimeSnapshotFull): Promise<void> {\n await this.transport.request({\n message: { type: \"ApplySnapshotFull\", payload },\n });\n }\n\n async setEnvironment(\n environment: Record<string, unknown>,\n opts?: { merge?: boolean }\n ): Promise<void> {\n await this.transport.request({\n message: {\n type: \"SetEnvironment\",\n payload: { environment, merge: opts?.merge },\n },\n });\n }\n\n async getEnvironment(): Promise<Record<string, unknown>> {\n const res = await this.transport.request({\n message: { type: \"GetEnvironment\" },\n });\n const payload =\n (res?.message as { environment?: Record<string, unknown> }) || {};\n return payload.environment || {};\n }\n\n async coerce(from: string, to: string, value: unknown): Promise<unknown> {\n const res = await this.transport.request({\n message: { type: \"Coerce\", payload: { from, to, value } },\n });\n const payload = (res?.message as { ok?: boolean; value?: unknown }) || {};\n return payload.value;\n }\n\n getEngine(): Engine {\n return this.engine;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function summarize(value: unknown, maxLen = 120): string {\n try {\n const s = typeof value === \"string\" ? value : JSON.stringify(value);\n return s.length > maxLen ? s.slice(0, maxLen) + \"…\" : s;\n } catch {\n return String(value);\n }\n}\n\nexport function serializeError(err: unknown): any {\n try {\n if (!err) return { message: String(err) };\n const errAny = err as any;\n if (err instanceof Error) {\n const base: any = {\n name: err.name,\n message: err.message,\n stack: err.stack,\n };\n for (const k of Object.keys(errAny)) base[k] = errAny[k];\n return base;\n }\n if (typeof err === \"object\") {\n const maybeMsg = errAny?.message;\n const maybeName = errAny?.name;\n const maybeStack = errAny?.stack;\n const out = { ...errAny };\n if (maybeMsg && !out.message) out.message = String(maybeMsg);\n if (maybeName && !out.name) out.name = String(maybeName);\n if (maybeStack && !out.stack) out.stack = String(maybeStack);\n return out;\n }\n return { message: String(err) };\n } catch {\n return { message: String(err) };\n }\n}\n","import type { Envelope, Command } from \"@bian-womp/spark-protocol\";\nimport type { Json, RuntimeApi } from \"./runtime\";\nimport { summarize } from \"./errors\";\n\nexport async function handleCommand(\n label: string,\n env: Envelope<Command>,\n runtimeApi: RuntimeApi,\n ack: (payload?: Json) => void\n): Promise<void> {\n const msg = env.message as Command;\n switch (msg.type) {\n case \"Build\": {\n console.debug(\n `[${label}] rx Build seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0} envKeys=${Object.keys(\n msg.payload.environment ?? {}\n ).join(\",\")}`\n );\n await runtimeApi.build(msg.payload.def, msg.payload.environment as Json);\n ack();\n break;\n }\n case \"Update\": {\n console.debug(\n `[${label}] rx Update seq=${env.seq} nodes=${\n msg.payload.def.nodes?.length ?? 0\n } edges=${msg.payload.def.edges?.length ?? 0}`\n );\n await runtimeApi.update(msg.payload.def);\n ack();\n break;\n }\n case \"SetEnvironment\": {\n console.debug(`[${label}] rx SetEnvironment seq=${env.seq}`);\n runtimeApi.setEnvironment(msg.payload.environment, {\n merge: Boolean(msg.payload.merge),\n });\n ack();\n break;\n }\n case \"SetInput\": {\n console.debug(\n `[${label}] rx SetInput seq=${env.seq} ${msg.payload.nodeId}.${\n msg.payload.handle\n }=${summarize(msg.payload.value)}`\n );\n runtimeApi.setInput(\n msg.payload.nodeId,\n msg.payload.handle,\n msg.payload.value\n );\n ack();\n break;\n }\n case \"SetInputs\": {\n console.debug(\n `[${label}] rx SetInputs seq=${env.seq} ${\n msg.payload.nodeId\n } keys=${Object.keys(msg.payload.inputs || {}).join(\",\")}`\n );\n const nodeId = msg.payload.nodeId;\n const inputs = msg.payload.inputs;\n runtimeApi.setInputs(nodeId, inputs);\n ack();\n break;\n }\n case \"TriggerExternal\": {\n console.debug(\n `[${label}] rx TriggerExternal seq=${env.seq} ${\n msg.payload.nodeId\n } event=${summarize(msg.payload.event)}`\n );\n runtimeApi.triggerExternal(msg.payload.nodeId, msg.payload.event);\n ack();\n break;\n }\n case \"Launch\": {\n console.debug(`[${label}] rx Launch seq=${env.seq}`);\n runtimeApi.launch();\n ack();\n break;\n }\n case \"WhenIdle\": {\n console.debug(`[${label}] rx WhenIdle seq=${env.seq}`);\n await runtimeApi.whenIdle();\n ack();\n break;\n }\n case \"Snapshot\": {\n console.debug(`[${label}] rx Snapshot seq=${env.seq}`);\n const snap = runtimeApi.snapshot();\n ack({ snapshot: snap });\n break;\n }\n case \"SnapshotFull\": {\n console.debug(`[${label}] rx SnapshotFull seq=${env.seq}`);\n const snap = runtimeApi.snapshotFull();\n ack({ snapshot: snap });\n break;\n }\n case \"GetEnvironment\": {\n console.debug(`[${label}] rx GetEnvironment seq=${env.seq}`);\n const environment = runtimeApi.getEnvironment();\n ack({ environment });\n break;\n }\n case \"ApplySnapshotFull\": {\n console.debug(`[${label}] rx ApplySnapshotFull seq=${env.seq}`);\n await runtimeApi.applySnapshotFull(msg.payload);\n ack();\n break;\n }\n case \"Coerce\": {\n console.debug(\n `[${label}] rx Coerce seq=${env.seq} ${msg.payload.from} -> ${msg.payload.to}`\n );\n const value = await runtimeApi.coerce(\n msg.payload?.from,\n msg.payload?.to,\n msg.payload?.value\n );\n ack({ value });\n break;\n }\n case \"DescribeRegistry\": {\n console.debug(`[${label}] rx DescribeRegistry seq=${env.seq}`);\n const desc = runtimeApi.describeRegistry();\n ack({ registry: desc });\n break;\n }\n case \"RegistryApply\": {\n console.debug(`[${label}] rx RegistryApply seq=${env.seq}`);\n await runtimeApi.applyRegistry((msg as any).payload?.deltas || []);\n ack();\n break;\n }\n case \"Dispose\": {\n console.debug(`[${label}] rx Dispose seq=${env.seq}`);\n runtimeApi.dispose();\n ack();\n break;\n }\n case \"Pause\":\n case \"Resume\": {\n console.debug(`[${label}] rx ${msg.type} seq=${env.seq} (not-impl)`);\n ack();\n break;\n }\n default: {\n console.debug(`[${label}] rx Unknown type seq=${env.seq}`);\n ack();\n }\n }\n}\n","import { GraphBuilder, Registry, GraphRuntime } from \"@bian-womp/spark-graph\";\nimport type {\n Envelope,\n RuntimeEvent,\n GraphDefinition,\n RegisteryDescriptor,\n RuntimeSnapshot,\n RuntimeSnapshotFull,\n} from \"@bian-womp/spark-protocol\";\n\nexport type Json = Record<string, unknown>;\n\nexport interface RuntimeApi {\n build: (def: GraphDefinition, env?: Json) => Promise<void>;\n update: (def: GraphDefinition) => Promise<void>;\n applyRegistry: (deltas: any[]) => Promise<void>;\n setEnvironment: (env: Json, opts?: { merge?: boolean }) => void;\n getEnvironment: () => Record<string, unknown>;\n setInput: (nodeId: string, handle: string, value: unknown) => void;\n setInputs: (nodeId: string, inputs: Record<string, unknown>) => void;\n triggerExternal: (nodeId: string, event: unknown) => void;\n launch: () => void;\n whenIdle: () => Promise<void>;\n dispose: () => void;\n describeRegistry: () => RegisteryDescriptor;\n snapshot: () => RuntimeSnapshot;\n coerce: (from: string, to: string, value: unknown) => Promise<unknown>;\n snapshotFull: () => RuntimeSnapshotFull;\n applySnapshotFull: (payload: RuntimeSnapshotFull) => Promise<void>;\n}\n\nexport async function createRuntimeAdapter(\n createRegistry: () => Promise<Registry>,\n send: (e: Envelope<RuntimeEvent>) => void\n): Promise<RuntimeApi> {\n const registry = await createRegistry();\n const builder = new GraphBuilder(registry);\n let graphRuntime: GraphRuntime | undefined;\n\n const api: RuntimeApi = {\n async coerce(from, to, value) {\n const resolved = registry.resolveCoercion(from, to);\n if (!resolved) return value;\n if (resolved.kind === \"sync\") return resolved.convert(value);\n const ac = new AbortController();\n return await resolved.convertAsync(value, ac.signal);\n },\n getEnvironment() {\n return graphRuntime?.getEnvironment?.() ?? {};\n },\n async applyRegistry(deltas) {\n // Pause runtime if exists\n // Apply each delta to the live registry\n for (const d of deltas || []) {\n if (!d || typeof d !== \"object\") continue;\n if (d.kind === \"register-enum\") {\n registry.registerEnum({\n id: d.id,\n displayName: d.displayName,\n options: d.options || [],\n bakeTarget: d.bakeTarget,\n opts: d.opts,\n });\n } else if (d.kind === \"register-type\") {\n registry.registerType({\n id: d.id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n validate: (_v) => true,\n });\n } else if (d.kind === \"register-node\") {\n const desc = d.desc || {};\n registry.registerNode({\n id: String(desc.id || \"\"),\n categoryId: String(desc.categoryId || \"compute\"),\n displayName: desc.displayName,\n inputs: desc.inputs || {},\n outputs: desc.outputs || {},\n // impl must be empty per frontend registration contract\n impl: () => {},\n });\n }\n }\n // Notify clients (include deltas in invalidate payload)\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"registry-changed\", deltas },\n },\n });\n },\n async build(def, opts) {\n const env = opts || {};\n graphRuntime = builder.build(def, { environment: env });\n graphRuntime.on(\"value\", (p) =>\n send({ message: { type: \"value\", payload: p } })\n );\n graphRuntime.on(\"invalidate\", (p) =>\n send({ message: { type: \"invalidate\", payload: p } })\n );\n graphRuntime.on(\"error\", (p) =>\n send({ message: { type: \"error\", payload: p } })\n );\n graphRuntime.on(\"stats\", (p) =>\n send({ message: { type: \"stats\", payload: p } })\n );\n },\n snapshot(): RuntimeSnapshot {\n const inputs: RuntimeSnapshot[\"inputs\"] = {};\n const outputs: RuntimeSnapshot[\"outputs\"] = {};\n if (!graphRuntime) return { inputs, outputs };\n const nodes = graphRuntime.getNodeIds();\n for (const nodeId of nodes) {\n const data = graphRuntime.getNodeData(nodeId);\n if (data?.inputs && Object.keys(data.inputs).length > 0) {\n inputs[nodeId] = { ...data.inputs };\n }\n if (data?.outputs && Object.keys(data.outputs).length > 0) {\n outputs[nodeId] = { ...data.outputs };\n }\n }\n return { inputs, outputs };\n },\n snapshotFull() {\n const snap = api.snapshot();\n const env = graphRuntime?.getEnvironment?.() ?? {};\n const def = graphRuntime?.getGraphDef();\n return {\n def,\n environment: env,\n inputs: snap.inputs,\n outputs: snap.outputs,\n };\n },\n async applySnapshotFull(payload) {\n const def = payload.def;\n if (!def) return;\n await api.build(def, payload.environment);\n // Hydrate inputs/outputs exactly, then re-emit outputs without scheduling runs\n graphRuntime?.hydrate(\n { inputs: payload.inputs, outputs: payload.outputs },\n { reemit: true }\n );\n },\n describeRegistry() {\n // types (include enum options when available)\n const types = Array.from(registry.types.entries()).map(([id, d]) => {\n const en = registry.enums.get(id);\n return {\n id,\n displayName: d.displayName,\n bakeTarget: d.bakeTarget,\n ...(en ? { options: en.options } : {}),\n };\n });\n // categories: not directly enumerable; derive from node descriptors\n const nodeDescs = Array.from(registry.nodes.values());\n const catIds = new Set(nodeDescs.map((n) => n.categoryId));\n const categories = Array.from(catIds).map((id) => {\n const cat = registry.categories.get?.(id);\n return { id, displayName: cat?.displayName };\n });\n const nodes = nodeDescs.map((n) => ({\n id: n.id,\n categoryId: n.categoryId,\n displayName: n.displayName,\n inputs: n.inputs || {},\n outputs: n.outputs || {},\n inputDefaults: n.inputDefaults || {},\n }));\n const coercions = registry.listCoercions();\n return { types, categories, nodes, coercions, schemaVersion: 4 };\n },\n async update(def) {\n if (!graphRuntime) return;\n graphRuntime.update(def, registry);\n send({\n message: {\n type: \"invalidate\",\n payload: { reason: \"graph-updated\" },\n },\n });\n },\n setEnvironment(env, opts) {\n if (!graphRuntime) return;\n if (opts?.merge) {\n const current = graphRuntime.getEnvironment();\n const next = { ...(current || {}), ...(env || {}) };\n graphRuntime.setEnvironment(next);\n return;\n }\n graphRuntime.setEnvironment(env);\n },\n setInput(nodeId, handle, value) {\n graphRuntime?.setInput(nodeId, handle, value);\n },\n setInputs(nodeId, inputs) {\n graphRuntime?.setInputs(nodeId, inputs);\n },\n triggerExternal(nodeId, event) {\n graphRuntime?.triggerExternal(nodeId, event);\n },\n launch() {\n graphRuntime?.launch();\n },\n whenIdle() {\n return graphRuntime?.whenIdle?.() ?? Promise.resolve();\n },\n dispose() {\n graphRuntime?.dispose?.();\n graphRuntime = undefined;\n },\n };\n return api;\n}\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
- import { type Engine } from "@bian-womp/spark-graph";
2
1
  import type { GraphDefinition } from "@bian-womp/spark-protocol";
3
2
  import type { RemoteRunner } from "../RemoteRunner";
4
3
  export type ExampleName = "simple" | "async" | "progress" | "validation";
5
4
  export declare function buildDef(example: ExampleName): GraphDefinition;
6
5
  export declare function runExample(example: ExampleName, engine: ReturnType<RemoteRunner["getEngine"]>): Promise<void>;
7
- export declare function installLogging(engine: Engine): void;
8
6
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAKZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAM9D;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,iBAmD9C;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,QAqC5C"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAM9D;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,iBAmD9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAgB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;IAC5C,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,EAAE,MAAM,mBAAmB,CAAC;IACxC,iBAAiB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,GACxC,OAAO,CAAC,UAAU,CAAC,CA8SrB"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAgB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;IAC5C,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,EAAE,MAAM,mBAAmB,CAAC;IACxC,iBAAiB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,GACxC,OAAO,CAAC,UAAU,CAAC,CAoLrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bian-womp/spark-remote",
3
- "version": "0.2.20",
3
+ "version": "0.2.22",
4
4
  "description": "Spark Remote - Remote execution engine for distributed graph processing",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -48,8 +48,8 @@
48
48
  "typescript": "5.6.3"
49
49
  },
50
50
  "dependencies": {
51
- "@bian-womp/spark-graph": "^0.2.20",
52
- "@bian-womp/spark-protocol": "^0.2.20",
51
+ "@bian-womp/spark-graph": "^0.2.22",
52
+ "@bian-womp/spark-protocol": "^0.2.22",
53
53
  "ws": "^8.18.3"
54
54
  }
55
55
  }