@bian-womp/spark-workbench 0.3.88 → 0.3.90
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/src/adapters/cli/index.d.ts +22 -0
- package/lib/src/adapters/cli/index.d.ts.map +1 -0
- package/lib/src/adapters/cli/index.js +50 -0
- package/lib/src/adapters/cli/index.js.map +1 -0
- package/lib/src/core/AbstractWorkbench.d.ts +40 -0
- package/lib/src/core/AbstractWorkbench.d.ts.map +1 -0
- package/lib/src/core/AbstractWorkbench.js +15 -0
- package/lib/src/core/AbstractWorkbench.js.map +1 -0
- package/lib/src/core/InMemoryWorkbench.d.ts +304 -0
- package/lib/src/core/InMemoryWorkbench.d.ts.map +1 -0
- package/lib/src/core/InMemoryWorkbench.js +1016 -0
- package/lib/src/core/InMemoryWorkbench.js.map +1 -0
- package/lib/src/core/contracts.d.ts +172 -0
- package/lib/src/core/contracts.d.ts.map +1 -0
- package/lib/src/core/contracts.js +2 -0
- package/lib/src/core/contracts.js.map +1 -0
- package/lib/src/core/ui-extensions.d.ts +85 -0
- package/lib/src/core/ui-extensions.d.ts.map +1 -0
- package/lib/src/core/ui-extensions.js +111 -0
- package/lib/src/core/ui-extensions.js.map +1 -0
- package/lib/src/examples/cli.d.ts +2 -0
- package/lib/src/examples/cli.d.ts.map +1 -0
- package/lib/src/examples/cli.js +244 -0
- package/lib/src/examples/cli.js.map +1 -0
- package/lib/src/examples/reactflow/App.d.ts +2 -0
- package/lib/src/examples/reactflow/App.d.ts.map +1 -0
- package/lib/src/examples/reactflow/App.js +20 -0
- package/lib/src/examples/reactflow/App.js.map +1 -0
- package/lib/src/index.d.ts +30 -0
- package/lib/src/index.d.ts.map +1 -0
- package/lib/src/index.js +30 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/misc/DebugEvents.d.ts +7 -0
- package/lib/src/misc/DebugEvents.d.ts.map +1 -0
- package/lib/src/misc/DebugEvents.js +51 -0
- package/lib/src/misc/DebugEvents.js.map +1 -0
- package/lib/src/misc/DefaultEdge.d.ts +5 -0
- package/lib/src/misc/DefaultEdge.d.ts.map +1 -0
- package/lib/src/misc/DefaultEdge.js +15 -0
- package/lib/src/misc/DefaultEdge.js.map +1 -0
- package/lib/src/misc/DefaultNode.d.ts +5 -0
- package/lib/src/misc/DefaultNode.d.ts.map +1 -0
- package/lib/src/misc/DefaultNode.js +25 -0
- package/lib/src/misc/DefaultNode.js.map +1 -0
- package/lib/src/misc/DefaultNodeContent.d.ts +4 -0
- package/lib/src/misc/DefaultNodeContent.d.ts.map +1 -0
- package/lib/src/misc/DefaultNodeContent.js +58 -0
- package/lib/src/misc/DefaultNodeContent.js.map +1 -0
- package/lib/src/misc/DefaultNodeHeader.d.ts +13 -0
- package/lib/src/misc/DefaultNodeHeader.d.ts.map +1 -0
- package/lib/src/misc/DefaultNodeHeader.js +78 -0
- package/lib/src/misc/DefaultNodeHeader.js.map +1 -0
- package/lib/src/misc/Inspector.d.ts +12 -0
- package/lib/src/misc/Inspector.d.ts.map +1 -0
- package/lib/src/misc/Inspector.js +253 -0
- package/lib/src/misc/Inspector.js.map +1 -0
- package/lib/src/misc/IssueBadge.d.ts +7 -0
- package/lib/src/misc/IssueBadge.d.ts.map +1 -0
- package/lib/src/misc/IssueBadge.js +7 -0
- package/lib/src/misc/IssueBadge.js.map +1 -0
- package/lib/src/misc/KeyboardShortcutToast.d.ts +16 -0
- package/lib/src/misc/KeyboardShortcutToast.d.ts.map +1 -0
- package/lib/src/misc/KeyboardShortcutToast.js +40 -0
- package/lib/src/misc/KeyboardShortcutToast.js.map +1 -0
- package/lib/src/misc/NodeHandles.d.ts +18 -0
- package/lib/src/misc/NodeHandles.d.ts.map +1 -0
- package/lib/src/misc/NodeHandles.js +67 -0
- package/lib/src/misc/NodeHandles.js.map +1 -0
- package/lib/src/misc/SelectionActiveSync.d.ts +10 -0
- package/lib/src/misc/SelectionActiveSync.d.ts.map +1 -0
- package/lib/src/misc/SelectionActiveSync.js +21 -0
- package/lib/src/misc/SelectionActiveSync.js.map +1 -0
- package/lib/src/misc/WorkbenchCanvas.d.ts +23 -0
- package/lib/src/misc/WorkbenchCanvas.d.ts.map +1 -0
- package/lib/src/misc/WorkbenchCanvas.js +669 -0
- package/lib/src/misc/WorkbenchCanvas.js.map +1 -0
- package/lib/src/misc/WorkbenchStudio.d.ts +43 -0
- package/lib/src/misc/WorkbenchStudio.d.ts.map +1 -0
- package/lib/src/misc/WorkbenchStudio.js +463 -0
- package/lib/src/misc/WorkbenchStudio.js.map +1 -0
- package/lib/src/misc/constants.d.ts +4 -0
- package/lib/src/misc/constants.d.ts.map +1 -0
- package/lib/src/misc/constants.js +5 -0
- package/lib/src/misc/constants.js.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.d.ts +133 -0
- package/lib/src/misc/context/WorkbenchContext.d.ts.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.js +9 -0
- package/lib/src/misc/context/WorkbenchContext.js.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.provider.d.ts +12 -0
- package/lib/src/misc/context/WorkbenchContext.provider.d.ts.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.provider.js +995 -0
- package/lib/src/misc/context/WorkbenchContext.provider.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuButton.d.ts +8 -0
- package/lib/src/misc/context-menu/ContextMenuButton.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuButton.js +10 -0
- package/lib/src/misc/context-menu/ContextMenuButton.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts +85 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.js +2 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts +45 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.js +182 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.js.map +1 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.js +111 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.js.map +1 -0
- package/lib/src/misc/context-menu/NodeContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/NodeContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/NodeContextMenu.js +51 -0
- package/lib/src/misc/context-menu/NodeContextMenu.js.map +1 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.js +47 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.js.map +1 -0
- package/lib/src/misc/hooks.d.ts +18 -0
- package/lib/src/misc/hooks.d.ts.map +1 -0
- package/lib/src/misc/hooks.js +275 -0
- package/lib/src/misc/hooks.js.map +1 -0
- package/lib/src/misc/layout.d.ts +117 -0
- package/lib/src/misc/layout.d.ts.map +1 -0
- package/lib/src/misc/layout.js +205 -0
- package/lib/src/misc/layout.js.map +1 -0
- package/lib/src/misc/load.d.ts +5 -0
- package/lib/src/misc/load.d.ts.map +1 -0
- package/lib/src/misc/load.js +106 -0
- package/lib/src/misc/load.js.map +1 -0
- package/lib/src/misc/mapping.d.ts +128 -0
- package/lib/src/misc/mapping.d.ts.map +1 -0
- package/lib/src/misc/mapping.js +270 -0
- package/lib/src/misc/mapping.js.map +1 -0
- package/lib/src/misc/merge-utils.d.ts +12 -0
- package/lib/src/misc/merge-utils.d.ts.map +1 -0
- package/lib/src/misc/merge-utils.js +51 -0
- package/lib/src/misc/merge-utils.js.map +1 -0
- package/lib/src/misc/thumbnail-utils.d.ts +53 -0
- package/lib/src/misc/thumbnail-utils.d.ts.map +1 -0
- package/lib/src/misc/thumbnail-utils.js +629 -0
- package/lib/src/misc/thumbnail-utils.js.map +1 -0
- package/lib/src/misc/types.d.ts +18 -0
- package/lib/src/misc/types.d.ts.map +1 -0
- package/lib/src/misc/types.js +2 -0
- package/lib/src/misc/types.js.map +1 -0
- package/lib/src/misc/value.d.ts +16 -0
- package/lib/src/misc/value.d.ts.map +1 -0
- package/lib/src/misc/value.js +114 -0
- package/lib/src/misc/value.js.map +1 -0
- package/lib/src/misc/viewport-utils.d.ts +6 -0
- package/lib/src/misc/viewport-utils.d.ts.map +1 -0
- package/lib/src/misc/viewport-utils.js +18 -0
- package/lib/src/misc/viewport-utils.js.map +1 -0
- package/lib/src/runtime/AbstractGraphRunner.d.ts +61 -0
- package/lib/src/runtime/AbstractGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/AbstractGraphRunner.js +63 -0
- package/lib/src/runtime/AbstractGraphRunner.js.map +1 -0
- package/lib/src/runtime/IGraphRunner.d.ts +100 -0
- package/lib/src/runtime/IGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/IGraphRunner.js +2 -0
- package/lib/src/runtime/IGraphRunner.js.map +1 -0
- package/lib/src/runtime/LocalGraphRunner.d.ts +60 -0
- package/lib/src/runtime/LocalGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/LocalGraphRunner.js +294 -0
- package/lib/src/runtime/LocalGraphRunner.js.map +1 -0
- package/lib/src/runtime/RemoteGraphRunner.d.ts +109 -0
- package/lib/src/runtime/RemoteGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/RemoteGraphRunner.js +696 -0
- package/lib/src/runtime/RemoteGraphRunner.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { GraphBuilder, LocalEngine, parseJsonPath, setValueAtPathWithCreation, buildValueConverter, convertSnapshot, } from "@bian-womp/spark-graph";
|
|
2
|
+
import { AbstractGraphRunner } from "./AbstractGraphRunner";
|
|
3
|
+
// Counter for generating readable runner IDs
|
|
4
|
+
let localRunnerCounter = 0;
|
|
5
|
+
export class LocalGraphRunner extends AbstractGraphRunner {
|
|
6
|
+
constructor(registry) {
|
|
7
|
+
super({ kind: "local" }, registry);
|
|
8
|
+
this.extData = {};
|
|
9
|
+
this.setEnvironment = (env, opts) => {
|
|
10
|
+
if (!this.runtime)
|
|
11
|
+
return;
|
|
12
|
+
// Use requestPause for dry mode to temporarily pause without affecting base run mode
|
|
13
|
+
const releasePause = opts?.dry ? this.runtime.requestPause() : null;
|
|
14
|
+
try {
|
|
15
|
+
if (opts?.merge) {
|
|
16
|
+
const current = this.runtime.getEnvironment();
|
|
17
|
+
const next = { ...(current || {}), ...(env || {}) };
|
|
18
|
+
this.runtime.setEnvironment(next);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.runtime.setEnvironment(env);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
releasePause?.();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
this.getEnvironment = () => {
|
|
29
|
+
return this.runtime?.getEnvironment?.();
|
|
30
|
+
};
|
|
31
|
+
// Generate readable ID for this runner instance (e.g., local-001, local-002)
|
|
32
|
+
localRunnerCounter++;
|
|
33
|
+
this.runnerId = `local-${String(localRunnerCounter).padStart(3, "0")}`;
|
|
34
|
+
console.info(`[LocalGraphRunner] Created runner with ID: ${this.runnerId}`);
|
|
35
|
+
this.emit("transport", { runnerId: this.runnerId, state: "local" });
|
|
36
|
+
}
|
|
37
|
+
build(def, opts) {
|
|
38
|
+
// Rebuilding should not leave the previous runtime alive.
|
|
39
|
+
// In practice, launch() calls build() and can be triggered multiple times for the same UI "flow".
|
|
40
|
+
// Disposing here avoids multiple GraphRuntime instances accumulating and emitting events.
|
|
41
|
+
if (this.runtime) {
|
|
42
|
+
console.info(`[LocalGraphRunner] Disposing previous runtime before building new one`);
|
|
43
|
+
this.runtime.dispose();
|
|
44
|
+
this.runtime = undefined;
|
|
45
|
+
}
|
|
46
|
+
const builder = new GraphBuilder(this.registry);
|
|
47
|
+
this.runtime = builder.build(def, opts);
|
|
48
|
+
// Signal UI that freshly built graph should be considered invalidated
|
|
49
|
+
this.emit("invalidate", { reason: "graph-built" });
|
|
50
|
+
}
|
|
51
|
+
update(def, options) {
|
|
52
|
+
if (!this.runtime)
|
|
53
|
+
return;
|
|
54
|
+
// Use requestPause for dry mode to temporarily pause without affecting base run mode
|
|
55
|
+
const releasePause = options?.dry ? this.runtime.requestPause() : null;
|
|
56
|
+
try {
|
|
57
|
+
this.runtime.update(def, this.registry);
|
|
58
|
+
this.emit("invalidate", { reason: "graph-updated" });
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
releasePause?.();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
launch(def, opts) {
|
|
65
|
+
if (this.engine) {
|
|
66
|
+
this.engine.dispose();
|
|
67
|
+
this.engine = undefined;
|
|
68
|
+
}
|
|
69
|
+
this.build(def);
|
|
70
|
+
if (!this.runtime)
|
|
71
|
+
throw new Error("Runtime not built");
|
|
72
|
+
// Use the async method to create engine
|
|
73
|
+
this.createAndLaunchEngine(opts).catch((err) => {
|
|
74
|
+
console.error("Failed to launch engine:", err);
|
|
75
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
76
|
+
this.emit("error", {
|
|
77
|
+
kind: "system",
|
|
78
|
+
message: errorMessage,
|
|
79
|
+
err: err instanceof Error ? err : new Error(errorMessage),
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async createAndLaunchEngine(opts) {
|
|
84
|
+
if (!this.runtime)
|
|
85
|
+
throw new Error("Runtime not built");
|
|
86
|
+
// Use shared engine factory
|
|
87
|
+
this.engine = new LocalEngine(this.runtime, opts?.runMode);
|
|
88
|
+
if (!this.engine)
|
|
89
|
+
throw new Error("Failed to create engine");
|
|
90
|
+
this.engine.on("value", (e) => this.emit("value", e));
|
|
91
|
+
this.engine.on("error", (e) => this.emit("error", e));
|
|
92
|
+
this.engine.on("invalidate", (e) => this.emit("invalidate", e));
|
|
93
|
+
this.engine.on("stats", (e) => this.emit("stats", e));
|
|
94
|
+
this.engine.launch(opts?.invalidate, opts?.runMode, opts?.startPaused);
|
|
95
|
+
const runMode = opts?.runMode ?? "manual";
|
|
96
|
+
this.emit("status", { running: true, runMode });
|
|
97
|
+
for (const [nodeId, map] of Object.entries(this.stagedInputs)) {
|
|
98
|
+
this.engine.setInputs(nodeId, map);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async computeNode(nodeId) {
|
|
102
|
+
if (this.engine)
|
|
103
|
+
await this.engine.computeNode(nodeId);
|
|
104
|
+
}
|
|
105
|
+
async runFromHere(nodeId) {
|
|
106
|
+
if (this.engine)
|
|
107
|
+
await this.engine.runFromHere(nodeId);
|
|
108
|
+
}
|
|
109
|
+
cancelNodeRuns(nodeIds) {
|
|
110
|
+
if (this.engine) {
|
|
111
|
+
this.engine.cancelNodeRuns(nodeIds);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
getOutputs(def) {
|
|
115
|
+
const out = {};
|
|
116
|
+
if (!this.engine)
|
|
117
|
+
return out;
|
|
118
|
+
for (const n of def.nodes) {
|
|
119
|
+
const desc = this.registry.nodes.get(n.typeId);
|
|
120
|
+
const handles = Object.keys(desc?.outputs ?? {});
|
|
121
|
+
for (const h of handles) {
|
|
122
|
+
const v = this.engine.getOutput(n.nodeId, h);
|
|
123
|
+
if (v !== undefined) {
|
|
124
|
+
if (!out[n.nodeId])
|
|
125
|
+
out[n.nodeId] = {};
|
|
126
|
+
out[n.nodeId][h] = v;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
getInputs(def) {
|
|
133
|
+
const out = {};
|
|
134
|
+
for (const n of def.nodes) {
|
|
135
|
+
const staged = this.stagedInputs[n.nodeId] ?? {};
|
|
136
|
+
const runtimeInputs = this.runtime ? (this.runtime.getNodeData?.(n.nodeId)?.inputs ?? {}) : {};
|
|
137
|
+
// Build inbound handle set for this node from current def
|
|
138
|
+
const inbound = new Set(def.edges.filter((e) => e.target.nodeId === n.nodeId).map((e) => e.target.handle));
|
|
139
|
+
// Merge staged only for non-inbound handles so UI reflects runtime values for wired inputs
|
|
140
|
+
const merged = { ...runtimeInputs };
|
|
141
|
+
for (const [h, v] of Object.entries(staged)) {
|
|
142
|
+
if (!inbound.has(h))
|
|
143
|
+
merged[h] = v;
|
|
144
|
+
}
|
|
145
|
+
if (Object.keys(merged).length > 0)
|
|
146
|
+
out[n.nodeId] = merged;
|
|
147
|
+
}
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
triggerExternal(nodeId, event, options) {
|
|
151
|
+
// Engine handles dry option via AbstractEngine
|
|
152
|
+
this.engine?.triggerExternal(nodeId, event, options);
|
|
153
|
+
}
|
|
154
|
+
// Batch update multiple inputs on a node and trigger a single run
|
|
155
|
+
setInputs(nodeId, inputs, options) {
|
|
156
|
+
if (!inputs)
|
|
157
|
+
return;
|
|
158
|
+
if (!this.stagedInputs[nodeId])
|
|
159
|
+
this.stagedInputs[nodeId] = {};
|
|
160
|
+
for (const [handle, value] of Object.entries(inputs)) {
|
|
161
|
+
if (value === undefined) {
|
|
162
|
+
delete this.stagedInputs[nodeId][handle];
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.stagedInputs[nodeId][handle] = value;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (this.engine) {
|
|
169
|
+
// Engine handles dry option via AbstractEngine
|
|
170
|
+
this.engine.setInputs(nodeId, inputs, options);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// Not running: emit a single synthetic value event per handle; UI will coalesce
|
|
174
|
+
// Note: dry option doesn't apply when engine doesn't exist (no execution to prevent)
|
|
175
|
+
console.warn("Engine does not exists");
|
|
176
|
+
for (const [handle, value] of Object.entries(inputs)) {
|
|
177
|
+
this.emit("value", { nodeId, handle, value, io: "input" });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
copyOutputs(fromNodeId, toNodeId, options) {
|
|
182
|
+
if (this.engine) {
|
|
183
|
+
this.engine.copyOutputs(fromNodeId, toNodeId, options);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async setExtData(data) {
|
|
187
|
+
if (!data || typeof data !== "object") {
|
|
188
|
+
this.extData = {};
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.extData = { ...this.extData, ...data };
|
|
192
|
+
}
|
|
193
|
+
async updateExtData(updates) {
|
|
194
|
+
if (!this.extData || typeof this.extData !== "object" || Array.isArray(this.extData)) {
|
|
195
|
+
this.extData = {};
|
|
196
|
+
}
|
|
197
|
+
let hasCustomUpdate = false;
|
|
198
|
+
for (const { path, value } of updates) {
|
|
199
|
+
const pathSegments = parseJsonPath(path);
|
|
200
|
+
const updated = setValueAtPathWithCreation(this.extData, pathSegments, value);
|
|
201
|
+
if (updated && pathSegments.length > 0 && pathSegments[0] === "custom") {
|
|
202
|
+
hasCustomUpdate = true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return hasCustomUpdate;
|
|
206
|
+
}
|
|
207
|
+
async snapshotFull() {
|
|
208
|
+
const def = undefined; // UI will supply def/positions on download for local
|
|
209
|
+
const inputs = this.getInputs(this.runtime
|
|
210
|
+
? {
|
|
211
|
+
nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({
|
|
212
|
+
nodeId: id,
|
|
213
|
+
typeId: "",
|
|
214
|
+
})),
|
|
215
|
+
edges: [],
|
|
216
|
+
}
|
|
217
|
+
: { nodes: [], edges: [] });
|
|
218
|
+
const outputs = this.getOutputs(this.runtime
|
|
219
|
+
? {
|
|
220
|
+
nodes: Array.from(this.runtime.getNodeIds()).map((id) => ({
|
|
221
|
+
nodeId: id,
|
|
222
|
+
typeId: "",
|
|
223
|
+
})),
|
|
224
|
+
edges: [],
|
|
225
|
+
}
|
|
226
|
+
: { nodes: [], edges: [] });
|
|
227
|
+
const environment = this.getEnvironment() || {};
|
|
228
|
+
const extData = this.extData;
|
|
229
|
+
return { def, environment, inputs, outputs, extData };
|
|
230
|
+
}
|
|
231
|
+
async applySnapshotFull(payload, options) {
|
|
232
|
+
if (payload.def && !options?.skipBuild) {
|
|
233
|
+
this.build(payload.def);
|
|
234
|
+
}
|
|
235
|
+
this.setEnvironment?.(payload.environment || {}, { merge: false });
|
|
236
|
+
this.hydrate(payload, { dry: options?.dry });
|
|
237
|
+
if (payload.extData) {
|
|
238
|
+
await this.setExtData(payload.extData);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async convertSnapshot(converterConfig, options) {
|
|
242
|
+
const snapshot = await this.snapshotFull();
|
|
243
|
+
const converter = buildValueConverter(converterConfig);
|
|
244
|
+
const converted = convertSnapshot(snapshot, converter);
|
|
245
|
+
await this.applySnapshotFull(converted, { skipBuild: true, dry: options?.dry });
|
|
246
|
+
return converted;
|
|
247
|
+
}
|
|
248
|
+
async pause() {
|
|
249
|
+
if (!this.runtime)
|
|
250
|
+
return;
|
|
251
|
+
this.runtime.pause();
|
|
252
|
+
}
|
|
253
|
+
async resume() {
|
|
254
|
+
if (!this.runtime)
|
|
255
|
+
return;
|
|
256
|
+
this.runtime.resume();
|
|
257
|
+
}
|
|
258
|
+
hydrate(snapshot, opts) {
|
|
259
|
+
// Hydrate via runtime for exact restore (this emits events on runtime emitter)
|
|
260
|
+
this.runtime?.hydrate({
|
|
261
|
+
inputs: snapshot.inputs || {},
|
|
262
|
+
outputs: snapshot.outputs || {},
|
|
263
|
+
});
|
|
264
|
+
// Also emit directly from runner to ensure UI gets events even if engine isn't running
|
|
265
|
+
for (const [nodeId, map] of Object.entries(snapshot.inputs || {})) {
|
|
266
|
+
for (const [handle, value] of Object.entries(map || {})) {
|
|
267
|
+
this.emit("value", {
|
|
268
|
+
nodeId,
|
|
269
|
+
handle,
|
|
270
|
+
value,
|
|
271
|
+
io: "input",
|
|
272
|
+
dry: opts?.dry,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
for (const [nodeId, map] of Object.entries(snapshot.outputs || {})) {
|
|
277
|
+
for (const [handle, value] of Object.entries(map || {})) {
|
|
278
|
+
this.emit("value", {
|
|
279
|
+
nodeId,
|
|
280
|
+
handle,
|
|
281
|
+
value,
|
|
282
|
+
io: "output",
|
|
283
|
+
dry: opts?.dry,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
dispose() {
|
|
289
|
+
super.dispose();
|
|
290
|
+
this.runtime = undefined;
|
|
291
|
+
this.emit("transport", { runnerId: this.runnerId, state: "local" });
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=LocalGraphRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalGraphRunner.js","sourceRoot":"","sources":["../../../src/runtime/LocalGraphRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { RuntimeSnapshotFull, GraphDefinition, RunnerOptions, RuntimeHistoryInfo, Viewport, RuntimeSnapshot, RunMode, ConverterConfig } from "@bian-womp/spark-protocol";
|
|
2
|
+
import { RemoteEngine, RemoteRuntimeClient } from "@bian-womp/spark-remote";
|
|
3
|
+
import { RemoteExecutionBackend, RunnerEventName, RunnerEventListener } from "./IGraphRunner";
|
|
4
|
+
import { AbstractGraphRunner } from "./AbstractGraphRunner";
|
|
5
|
+
export declare class RemoteGraphRunner extends AbstractGraphRunner {
|
|
6
|
+
protected lastDef?: GraphDefinition;
|
|
7
|
+
protected client?: RemoteRuntimeClient;
|
|
8
|
+
protected engine?: RemoteEngine;
|
|
9
|
+
private clientPromise?;
|
|
10
|
+
private transportStatusUnsubscribe?;
|
|
11
|
+
private disposed;
|
|
12
|
+
private currentTransportStatus;
|
|
13
|
+
readonly runnerId: string;
|
|
14
|
+
private valueCache;
|
|
15
|
+
private listenersBound;
|
|
16
|
+
private registryFetched;
|
|
17
|
+
private registryBootstrapPromise?;
|
|
18
|
+
private registryBootstrapResolve?;
|
|
19
|
+
private registryBootstrapReject?;
|
|
20
|
+
private readonly REGISTRY_BOOTSTRAP_TIMEOUT_MS;
|
|
21
|
+
/**
|
|
22
|
+
* Generate cache key that includes io type to prevent collisions
|
|
23
|
+
* between input and output handles with the same name
|
|
24
|
+
*/
|
|
25
|
+
private getCacheKey;
|
|
26
|
+
private applyRegistryDescriptor;
|
|
27
|
+
private isRecord;
|
|
28
|
+
private isRegistryEvent;
|
|
29
|
+
private waitForRegistryBootstrap;
|
|
30
|
+
/**
|
|
31
|
+
* Build RemoteRuntimeClient config from RemoteExecutionBackend config.
|
|
32
|
+
*/
|
|
33
|
+
private buildClientConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Setup event subscriptions for the client.
|
|
36
|
+
*/
|
|
37
|
+
private setupClientSubscriptions;
|
|
38
|
+
protected ensureClient(): Promise<RemoteRuntimeClient>;
|
|
39
|
+
constructor(backend: RemoteExecutionBackend);
|
|
40
|
+
build(def: GraphDefinition): void;
|
|
41
|
+
update(def: GraphDefinition, options?: {
|
|
42
|
+
dry?: boolean;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
launch(def: GraphDefinition, opts: RunnerOptions): void;
|
|
45
|
+
protected createAndLaunchEngine(opts?: RunnerOptions): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Launch using an existing backend runtime that has already been built and hydrated.
|
|
48
|
+
* This is used when resuming from a snapshot where the backend has already applied
|
|
49
|
+
* ApplySnapshotFull (which builds the graph and hydrates inputs/outputs).
|
|
50
|
+
* Unlike launch(), this method does NOT call client.build() to avoid destroying
|
|
51
|
+
* the runtime state that was just restored.
|
|
52
|
+
*/
|
|
53
|
+
launchExisting(def: GraphDefinition, opts: RunnerOptions): void;
|
|
54
|
+
setRunMode(runMode: RunMode): void;
|
|
55
|
+
computeNode(nodeId: string): Promise<void>;
|
|
56
|
+
runFromHere(nodeId: string): Promise<void>;
|
|
57
|
+
cancelNodeRuns(nodeIds: string[]): Promise<void>;
|
|
58
|
+
setInputs(nodeId: string, inputs: Record<string, unknown>, options?: {
|
|
59
|
+
dry?: boolean;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
copyOutputs(fromNodeId: string, toNodeId: string, options?: {
|
|
62
|
+
dry?: boolean;
|
|
63
|
+
}): Promise<void>;
|
|
64
|
+
triggerExternal(nodeId: string, event: unknown, options?: {
|
|
65
|
+
dry?: boolean;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
setViewport(viewport: Viewport): Promise<void>;
|
|
68
|
+
coerce(from: string, to: string, value: unknown): Promise<unknown>;
|
|
69
|
+
setExtData(data: Record<string, unknown>): Promise<void>;
|
|
70
|
+
updateExtData(updates: Array<{
|
|
71
|
+
path: string;
|
|
72
|
+
value: unknown;
|
|
73
|
+
}>): Promise<boolean>;
|
|
74
|
+
commit(reason?: string): Promise<RuntimeHistoryInfo | undefined>;
|
|
75
|
+
undo(): Promise<boolean>;
|
|
76
|
+
redo(): Promise<boolean>;
|
|
77
|
+
snapshotFull(): Promise<RuntimeSnapshotFull>;
|
|
78
|
+
applySnapshotFull(payload: RuntimeSnapshotFull, options?: {
|
|
79
|
+
skipBuild?: boolean;
|
|
80
|
+
dry?: boolean;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
convertSnapshot(converterConfig: ConverterConfig, options?: {
|
|
83
|
+
dry?: boolean;
|
|
84
|
+
}): Promise<RuntimeSnapshotFull>;
|
|
85
|
+
pause(): Promise<void>;
|
|
86
|
+
resume(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Hydrates the local valueCache from a snapshot and emits value events.
|
|
89
|
+
* This ensures the UI can display inputs/outputs immediately without waiting
|
|
90
|
+
* for value events from the remote backend.
|
|
91
|
+
*/
|
|
92
|
+
hydrateValueCache(snapshot: RuntimeSnapshot, opts?: {
|
|
93
|
+
dry?: boolean;
|
|
94
|
+
}): void;
|
|
95
|
+
setEnvironment(env: Record<string, unknown>, opts?: {
|
|
96
|
+
merge?: boolean;
|
|
97
|
+
dry?: boolean;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
getEnvironment(): Record<string, unknown> | undefined;
|
|
100
|
+
getOutputs(def: GraphDefinition): Record<string, Record<string, unknown>>;
|
|
101
|
+
getInputs(def: GraphDefinition): Record<string, Record<string, unknown>>;
|
|
102
|
+
dispose(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Override on() to emit current transport status immediately when a new listener subscribes.
|
|
105
|
+
* This ensures listeners don't miss the current status when they attach after connection.
|
|
106
|
+
*/
|
|
107
|
+
on<K extends RunnerEventName>(event: K, handler: RunnerEventListener<K>): () => void;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=RemoteGraphRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteGraphRunner.d.ts","sourceRoot":"","sources":["../../../src/runtime/RemoteGraphRunner.ts"],"names":[],"mappings":"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"}
|