@bian-womp/spark-remote 0.2.18 → 0.2.20
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,7 +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
|
-
let lastDef;
|
|
471
470
|
// Seed defaults for any missing inputs for a single node
|
|
472
471
|
function seedDefaultsForNode(nodeId, defaultValues) {
|
|
473
472
|
if (!graphRuntime || !defaultValues)
|
|
@@ -590,7 +589,6 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
590
589
|
const env = opts || {};
|
|
591
590
|
const enriched = computeResolvedHandles(def, {}, env);
|
|
592
591
|
graphRuntime = builder.build(enriched, { environment: env });
|
|
593
|
-
lastDef = enriched;
|
|
594
592
|
// Seed defaults for dynamic inputs on initial build
|
|
595
593
|
seedDefaultsFromDef(enriched);
|
|
596
594
|
graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
|
|
@@ -610,7 +608,7 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
610
608
|
return;
|
|
611
609
|
// Recompute resolved handles for only this node using current inputs
|
|
612
610
|
const envNow = graphRuntime.getEnvironment?.() ?? env;
|
|
613
|
-
const curDef =
|
|
611
|
+
const curDef = graphRuntime.getGraphDef();
|
|
614
612
|
const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);
|
|
615
613
|
if (!target)
|
|
616
614
|
return;
|
|
@@ -622,9 +620,9 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
622
620
|
environment: envNow || {},
|
|
623
621
|
inputs: nd.inputs || {},
|
|
624
622
|
}) || {};
|
|
625
|
-
const inputs = { ...
|
|
626
|
-
const outputs = { ...
|
|
627
|
-
const inputDefaults = r.inputDefaults
|
|
623
|
+
const inputs = { ...desc.inputs, ...r.inputs };
|
|
624
|
+
const outputs = { ...desc.outputs, ...r.outputs };
|
|
625
|
+
const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
|
|
628
626
|
const nextHandles = { inputs, outputs, inputDefaults };
|
|
629
627
|
// If nothing changed, skip
|
|
630
628
|
const before = target.resolvedHandles || {};
|
|
@@ -667,8 +665,9 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
667
665
|
snapshotFull() {
|
|
668
666
|
const snap = api.snapshot();
|
|
669
667
|
const env = graphRuntime?.getEnvironment?.() ?? {};
|
|
668
|
+
const def = graphRuntime?.getGraphDef();
|
|
670
669
|
return {
|
|
671
|
-
def
|
|
670
|
+
def,
|
|
672
671
|
environment: env,
|
|
673
672
|
inputs: snap.inputs,
|
|
674
673
|
outputs: snap.outputs,
|
|
@@ -706,6 +705,7 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
706
705
|
displayName: n.displayName,
|
|
707
706
|
inputs: n.inputs || {},
|
|
708
707
|
outputs: n.outputs || {},
|
|
708
|
+
inputDefaults: n.inputDefaults || {},
|
|
709
709
|
}));
|
|
710
710
|
const coercions = registry.listCoercions();
|
|
711
711
|
return { types, categories, nodes, coercions, schemaVersion: 4 };
|
|
@@ -725,9 +725,14 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
725
725
|
}
|
|
726
726
|
const enriched = computeResolvedHandles(def, inputsMap, env);
|
|
727
727
|
graphRuntime.update(enriched, registry);
|
|
728
|
-
lastDef = enriched;
|
|
729
728
|
// Seed defaults for newly added dynamic inputs on update
|
|
730
729
|
seedDefaultsFromDef(enriched);
|
|
730
|
+
send({
|
|
731
|
+
message: {
|
|
732
|
+
type: "invalidate",
|
|
733
|
+
payload: { reason: "graph-updated" },
|
|
734
|
+
},
|
|
735
|
+
});
|
|
731
736
|
},
|
|
732
737
|
setEnvironment(env, opts) {
|
|
733
738
|
if (!graphRuntime)
|
package/lib/cjs/index.cjs.map
CHANGED
|
@@ -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 let lastDef: GraphDefinition | 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 lastDef = enriched;\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 = lastDef || def;\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 = 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 return {\n def: lastDef,\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 }));\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 lastDef = enriched;\n // Seed defaults for newly added dynamic inputs on update\n seedDefaultsFromDef(enriched);\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 // 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 +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,
|
|
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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -465,7 +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
|
-
let lastDef;
|
|
469
468
|
// Seed defaults for any missing inputs for a single node
|
|
470
469
|
function seedDefaultsForNode(nodeId, defaultValues) {
|
|
471
470
|
if (!graphRuntime || !defaultValues)
|
|
@@ -588,7 +587,6 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
588
587
|
const env = opts || {};
|
|
589
588
|
const enriched = computeResolvedHandles(def, {}, env);
|
|
590
589
|
graphRuntime = builder.build(enriched, { environment: env });
|
|
591
|
-
lastDef = enriched;
|
|
592
590
|
// Seed defaults for dynamic inputs on initial build
|
|
593
591
|
seedDefaultsFromDef(enriched);
|
|
594
592
|
graphRuntime.on("value", (p) => send({ message: { type: "value", payload: p } }));
|
|
@@ -608,7 +606,7 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
608
606
|
return;
|
|
609
607
|
// Recompute resolved handles for only this node using current inputs
|
|
610
608
|
const envNow = graphRuntime.getEnvironment?.() ?? env;
|
|
611
|
-
const curDef =
|
|
609
|
+
const curDef = graphRuntime.getGraphDef();
|
|
612
610
|
const target = (curDef.nodes || []).find((n) => n.nodeId === nodeId);
|
|
613
611
|
if (!target)
|
|
614
612
|
return;
|
|
@@ -620,9 +618,9 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
620
618
|
environment: envNow || {},
|
|
621
619
|
inputs: nd.inputs || {},
|
|
622
620
|
}) || {};
|
|
623
|
-
const inputs = { ...
|
|
624
|
-
const outputs = { ...
|
|
625
|
-
const inputDefaults = r.inputDefaults
|
|
621
|
+
const inputs = { ...desc.inputs, ...r.inputs };
|
|
622
|
+
const outputs = { ...desc.outputs, ...r.outputs };
|
|
623
|
+
const inputDefaults = { ...desc.inputDefaults, ...r.inputDefaults };
|
|
626
624
|
const nextHandles = { inputs, outputs, inputDefaults };
|
|
627
625
|
// If nothing changed, skip
|
|
628
626
|
const before = target.resolvedHandles || {};
|
|
@@ -665,8 +663,9 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
665
663
|
snapshotFull() {
|
|
666
664
|
const snap = api.snapshot();
|
|
667
665
|
const env = graphRuntime?.getEnvironment?.() ?? {};
|
|
666
|
+
const def = graphRuntime?.getGraphDef();
|
|
668
667
|
return {
|
|
669
|
-
def
|
|
668
|
+
def,
|
|
670
669
|
environment: env,
|
|
671
670
|
inputs: snap.inputs,
|
|
672
671
|
outputs: snap.outputs,
|
|
@@ -704,6 +703,7 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
704
703
|
displayName: n.displayName,
|
|
705
704
|
inputs: n.inputs || {},
|
|
706
705
|
outputs: n.outputs || {},
|
|
706
|
+
inputDefaults: n.inputDefaults || {},
|
|
707
707
|
}));
|
|
708
708
|
const coercions = registry.listCoercions();
|
|
709
709
|
return { types, categories, nodes, coercions, schemaVersion: 4 };
|
|
@@ -723,9 +723,14 @@ async function createRuntimeAdapter(createRegistry, send) {
|
|
|
723
723
|
}
|
|
724
724
|
const enriched = computeResolvedHandles(def, inputsMap, env);
|
|
725
725
|
graphRuntime.update(enriched, registry);
|
|
726
|
-
lastDef = enriched;
|
|
727
726
|
// Seed defaults for newly added dynamic inputs on update
|
|
728
727
|
seedDefaultsFromDef(enriched);
|
|
728
|
+
send({
|
|
729
|
+
message: {
|
|
730
|
+
type: "invalidate",
|
|
731
|
+
payload: { reason: "graph-updated" },
|
|
732
|
+
},
|
|
733
|
+
});
|
|
729
734
|
},
|
|
730
735
|
setEnvironment(env, opts) {
|
|
731
736
|
if (!graphRuntime)
|
package/lib/esm/index.js.map
CHANGED
|
@@ -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 let lastDef: GraphDefinition | 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 lastDef = enriched;\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 = lastDef || def;\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 = 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 return {\n def: lastDef,\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 }));\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 lastDef = enriched;\n // Seed defaults for newly added dynamic inputs on update\n seedDefaultsFromDef(enriched);\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
|
+
{"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":"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"}
|
|
@@ -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,
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bian-womp/spark-remote",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.20",
|
|
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.
|
|
52
|
-
"@bian-womp/spark-protocol": "^0.2.
|
|
51
|
+
"@bian-womp/spark-graph": "^0.2.20",
|
|
52
|
+
"@bian-womp/spark-protocol": "^0.2.20",
|
|
53
53
|
"ws": "^8.18.3"
|
|
54
54
|
}
|
|
55
55
|
}
|