@smithers-orchestrator/devtools 0.16.0
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/LICENSE +21 -0
- package/package.json +31 -0
- package/src/DevToolsDelta.ts +8 -0
- package/src/DevToolsDeltaOp.ts +8 -0
- package/src/DevToolsEngineEvent.ts +98 -0
- package/src/DevToolsEventBus.ts +9 -0
- package/src/DevToolsEventHandler.ts +6 -0
- package/src/DevToolsNode.ts +23 -0
- package/src/DevToolsRunStore.js +232 -0
- package/src/DevToolsRunStoreOptions.ts +6 -0
- package/src/DevToolsSnapshot.ts +48 -0
- package/src/DevToolsSnapshotV1.ts +9 -0
- package/src/InvalidDeltaError.js +11 -0
- package/src/RunExecutionState.ts +18 -0
- package/src/SMITHERS_NODE_ICONS.js +21 -0
- package/src/SNAPSHOT_SERIALIZER_DEFAULT_MAX_DEPTH.js +2 -0
- package/src/SmithersDevToolsCore.js +146 -0
- package/src/SmithersDevToolsOptions.ts +11 -0
- package/src/SmithersNodeType.ts +17 -0
- package/src/SnapshotSerializerOptions.ts +7 -0
- package/src/SnapshotSerializerWarning.ts +9 -0
- package/src/TaskExecutionState.ts +21 -0
- package/src/applyDelta.js +115 -0
- package/src/buildSnapshot.js +15 -0
- package/src/collectTasks.js +15 -0
- package/src/countNodes.js +16 -0
- package/src/diffSnapshots.js +211 -0
- package/src/findNodeById.js +17 -0
- package/src/index.d.ts +550 -0
- package/src/index.js +30 -0
- package/src/printTree.js +35 -0
- package/src/snapshotSerializer.js +143 -0
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
type SmithersNodeType$2 = "workflow" | "task" | "sequence" | "parallel" | "merge-queue" | "branch" | "loop" | "worktree" | "approval" | "timer" | "subflow" | "wait-for-event" | "saga" | "try-catch" | "fragment" | "unknown";
|
|
2
|
+
|
|
3
|
+
type DevToolsNode$7 = {
|
|
4
|
+
id: number;
|
|
5
|
+
/** Smithers-level type: "workflow" | "task" | "sequence" | etc. */
|
|
6
|
+
type: SmithersNodeType$2;
|
|
7
|
+
/** Display name (component function name or host tag) */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Props snapshot (serializable subset) */
|
|
10
|
+
props: Record<string, unknown>;
|
|
11
|
+
/** Task-specific fields extracted from renderer raw props */
|
|
12
|
+
task?: {
|
|
13
|
+
nodeId: string;
|
|
14
|
+
kind: "agent" | "compute" | "static";
|
|
15
|
+
agent?: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
outputTableName?: string;
|
|
18
|
+
iteration?: number;
|
|
19
|
+
};
|
|
20
|
+
children: DevToolsNode$7[];
|
|
21
|
+
/** Depth in the Smithers tree (not renderer tree depth) */
|
|
22
|
+
depth: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
type DevToolsDeltaOp$1 = {
|
|
26
|
+
op: "addNode";
|
|
27
|
+
parentId: number;
|
|
28
|
+
index: number;
|
|
29
|
+
node: DevToolsNode$7;
|
|
30
|
+
} | {
|
|
31
|
+
op: "removeNode";
|
|
32
|
+
id: number;
|
|
33
|
+
} | {
|
|
34
|
+
op: "updateProps";
|
|
35
|
+
id: number;
|
|
36
|
+
props: Record<string, unknown>;
|
|
37
|
+
} | {
|
|
38
|
+
op: "updateTask";
|
|
39
|
+
id: number;
|
|
40
|
+
task: DevToolsNode$7["task"];
|
|
41
|
+
} | {
|
|
42
|
+
op: "replaceRoot";
|
|
43
|
+
node: DevToolsNode$7;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type DevToolsDelta$3 = {
|
|
47
|
+
version: 1;
|
|
48
|
+
baseSeq: number;
|
|
49
|
+
seq: number;
|
|
50
|
+
ops: DevToolsDeltaOp$1[];
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
type DevToolsSnapshotV1$3 = {
|
|
54
|
+
version: 1;
|
|
55
|
+
runId: string;
|
|
56
|
+
frameNo: number;
|
|
57
|
+
seq: number;
|
|
58
|
+
root: DevToolsNode$7;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
type SnapshotSerializerWarning$1 = {
|
|
62
|
+
code: "CircularReference" | "MaxDepthExceeded" | "MaxEntriesExceeded" | "UnsupportedType";
|
|
63
|
+
path: string;
|
|
64
|
+
detail?: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
type SnapshotSerializerOptions$2 = {
|
|
68
|
+
maxDepth?: number;
|
|
69
|
+
maxEntries?: number;
|
|
70
|
+
onWarning?: (warning: SnapshotSerializerWarning$1) => void;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** Execution state for a task, derived from SmithersEvent stream */
|
|
74
|
+
type TaskExecutionState$3 = {
|
|
75
|
+
nodeId: string;
|
|
76
|
+
iteration: number;
|
|
77
|
+
status: "pending" | "started" | "finished" | "failed" | "cancelled" | "skipped" | "waiting-approval" | "waiting-event" | "waiting-timer" | "retrying";
|
|
78
|
+
attempt: number;
|
|
79
|
+
startedAt?: number;
|
|
80
|
+
finishedAt?: number;
|
|
81
|
+
error?: unknown;
|
|
82
|
+
toolCalls: Array<{
|
|
83
|
+
name: string;
|
|
84
|
+
seq: number;
|
|
85
|
+
status?: "success" | "error";
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Discriminated union of Smithers engine events that {@link DevToolsRunStore}
|
|
91
|
+
* understands when reducing engine state. Any other `type` value flows through
|
|
92
|
+
* the open-ended tail so future event kinds can be added without changes to
|
|
93
|
+
* consumers.
|
|
94
|
+
*/
|
|
95
|
+
type DevToolsEngineEvent$2 = RunStartedEvent | RunFinishedEvent | RunFailedEvent | RunCancelledEvent | FrameCommittedEvent | NodePendingEvent | NodeStartedEvent | NodeFinishedEvent | NodeFailedEvent | NodeCancelledEvent | NodeSkippedEvent | NodeRetryingEvent | NodeWaitingApprovalEvent | NodeWaitingEventEvent | NodeWaitingTimerEvent | ToolCallStartedEvent | ToolCallFinishedEvent | UnknownEngineEvent;
|
|
96
|
+
type RunEventBase = {
|
|
97
|
+
runId: string;
|
|
98
|
+
timestampMs: number;
|
|
99
|
+
};
|
|
100
|
+
type NodeEventBase = RunEventBase & {
|
|
101
|
+
nodeId: string;
|
|
102
|
+
iteration: number;
|
|
103
|
+
};
|
|
104
|
+
type RunStartedEvent = RunEventBase & {
|
|
105
|
+
type: "RunStarted";
|
|
106
|
+
};
|
|
107
|
+
type RunFinishedEvent = RunEventBase & {
|
|
108
|
+
type: "RunFinished";
|
|
109
|
+
};
|
|
110
|
+
type RunFailedEvent = RunEventBase & {
|
|
111
|
+
type: "RunFailed";
|
|
112
|
+
error?: unknown;
|
|
113
|
+
};
|
|
114
|
+
type RunCancelledEvent = RunEventBase & {
|
|
115
|
+
type: "RunCancelled";
|
|
116
|
+
};
|
|
117
|
+
type FrameCommittedEvent = RunEventBase & {
|
|
118
|
+
type: "FrameCommitted";
|
|
119
|
+
frameNo: number;
|
|
120
|
+
};
|
|
121
|
+
type NodePendingEvent = NodeEventBase & {
|
|
122
|
+
type: "NodePending";
|
|
123
|
+
};
|
|
124
|
+
type NodeStartedEvent = NodeEventBase & {
|
|
125
|
+
type: "NodeStarted";
|
|
126
|
+
attempt: number;
|
|
127
|
+
};
|
|
128
|
+
type NodeFinishedEvent = NodeEventBase & {
|
|
129
|
+
type: "NodeFinished";
|
|
130
|
+
attempt: number;
|
|
131
|
+
};
|
|
132
|
+
type NodeFailedEvent = NodeEventBase & {
|
|
133
|
+
type: "NodeFailed";
|
|
134
|
+
attempt: number;
|
|
135
|
+
error?: unknown;
|
|
136
|
+
};
|
|
137
|
+
type NodeCancelledEvent = NodeEventBase & {
|
|
138
|
+
type: "NodeCancelled";
|
|
139
|
+
};
|
|
140
|
+
type NodeSkippedEvent = NodeEventBase & {
|
|
141
|
+
type: "NodeSkipped";
|
|
142
|
+
};
|
|
143
|
+
type NodeRetryingEvent = NodeEventBase & {
|
|
144
|
+
type: "NodeRetrying";
|
|
145
|
+
attempt: number;
|
|
146
|
+
};
|
|
147
|
+
type NodeWaitingApprovalEvent = NodeEventBase & {
|
|
148
|
+
type: "NodeWaitingApproval";
|
|
149
|
+
};
|
|
150
|
+
type NodeWaitingEventEvent = NodeEventBase & {
|
|
151
|
+
type: "NodeWaitingEvent";
|
|
152
|
+
};
|
|
153
|
+
type NodeWaitingTimerEvent = NodeEventBase & {
|
|
154
|
+
type: "NodeWaitingTimer";
|
|
155
|
+
};
|
|
156
|
+
type ToolCallStartedEvent = NodeEventBase & {
|
|
157
|
+
type: "ToolCallStarted";
|
|
158
|
+
toolName: string;
|
|
159
|
+
seq: number;
|
|
160
|
+
};
|
|
161
|
+
type ToolCallFinishedEvent = NodeEventBase & {
|
|
162
|
+
type: "ToolCallFinished";
|
|
163
|
+
toolName: string;
|
|
164
|
+
seq: number;
|
|
165
|
+
status?: string;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Open tail: any future engine event with the minimal shape we require
|
|
169
|
+
* (`type` + `runId` + `timestampMs`). The store ignores unknown `type`s but
|
|
170
|
+
* still records them in `run.events`.
|
|
171
|
+
*/
|
|
172
|
+
type UnknownEngineEvent = {
|
|
173
|
+
type: string;
|
|
174
|
+
runId: string;
|
|
175
|
+
timestampMs: number;
|
|
176
|
+
} & Record<string, unknown>;
|
|
177
|
+
|
|
178
|
+
type RunState = "running" | "waiting-approval" | "waiting-event" | "waiting-timer" | "recovering" | "stale" | "orphaned" | "failed" | "cancelled" | "succeeded" | "unknown";
|
|
179
|
+
type ReasonBlocked = {
|
|
180
|
+
kind: "approval";
|
|
181
|
+
nodeId: string;
|
|
182
|
+
requestedAt: string;
|
|
183
|
+
} | {
|
|
184
|
+
kind: "event";
|
|
185
|
+
nodeId: string;
|
|
186
|
+
correlationKey: string;
|
|
187
|
+
} | {
|
|
188
|
+
kind: "timer";
|
|
189
|
+
nodeId: string;
|
|
190
|
+
wakeAt: string;
|
|
191
|
+
} | {
|
|
192
|
+
kind: "provider";
|
|
193
|
+
nodeId: string;
|
|
194
|
+
code: "rate-limit" | "auth" | "timeout";
|
|
195
|
+
} | {
|
|
196
|
+
kind: "tool";
|
|
197
|
+
nodeId: string;
|
|
198
|
+
toolName: string;
|
|
199
|
+
code: string;
|
|
200
|
+
};
|
|
201
|
+
type ReasonUnhealthy = {
|
|
202
|
+
kind: "engine-heartbeat-stale";
|
|
203
|
+
lastHeartbeatAt: string;
|
|
204
|
+
} | {
|
|
205
|
+
kind: "ui-heartbeat-stale";
|
|
206
|
+
lastSeenAt: string;
|
|
207
|
+
} | {
|
|
208
|
+
kind: "db-lock";
|
|
209
|
+
} | {
|
|
210
|
+
kind: "sandbox-unreachable";
|
|
211
|
+
} | {
|
|
212
|
+
kind: "supervisor-backoff";
|
|
213
|
+
attempt: number;
|
|
214
|
+
nextAt: string;
|
|
215
|
+
};
|
|
216
|
+
type RunStateView = {
|
|
217
|
+
runId: string;
|
|
218
|
+
state: RunState;
|
|
219
|
+
blocked?: ReasonBlocked;
|
|
220
|
+
unhealthy?: ReasonUnhealthy;
|
|
221
|
+
computedAt: string;
|
|
222
|
+
};
|
|
223
|
+
type DevToolsSnapshot$3 = {
|
|
224
|
+
tree: DevToolsNode$7 | null;
|
|
225
|
+
nodeCount: number;
|
|
226
|
+
taskCount: number;
|
|
227
|
+
timestamp: number;
|
|
228
|
+
runState?: RunStateView;
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
type DevToolsEventHandler$1 = (event: "commit" | "unmount", snapshot: DevToolsSnapshot$3) => void;
|
|
232
|
+
|
|
233
|
+
type SmithersDevToolsOptions$2 = {
|
|
234
|
+
/** Called on every renderer commit that touches the Smithers tree */
|
|
235
|
+
onCommit?: DevToolsEventHandler$1;
|
|
236
|
+
/** Called on every SmithersEvent from an attached EventBus */
|
|
237
|
+
onEngineEvent?: (event: DevToolsEngineEvent$2) => void;
|
|
238
|
+
/** Enable verbose console logging */
|
|
239
|
+
verbose?: boolean;
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
/** Execution state for a run, aggregated from SmithersEvent stream */
|
|
243
|
+
type RunExecutionState$3 = {
|
|
244
|
+
runId: string;
|
|
245
|
+
status: "running" | "finished" | "failed" | "cancelled" | "waiting-approval" | "waiting-timer";
|
|
246
|
+
frameNo: number;
|
|
247
|
+
tasks: Map<string, TaskExecutionState$3>;
|
|
248
|
+
events: Array<{
|
|
249
|
+
type: string;
|
|
250
|
+
timestampMs: number;
|
|
251
|
+
[key: string]: unknown;
|
|
252
|
+
}>;
|
|
253
|
+
startedAt?: number;
|
|
254
|
+
finishedAt?: number;
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
type DevToolsRunStoreOptions$2 = Pick<SmithersDevToolsOptions$2, "onEngineEvent" | "verbose">;
|
|
258
|
+
|
|
259
|
+
type DevToolsEventBus$3 = {
|
|
260
|
+
on: (event: "event", handler: (e: DevToolsEngineEvent$2) => void) => void;
|
|
261
|
+
removeListener: (event: "event", handler: (e: DevToolsEngineEvent$2) => void) => void;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
265
|
+
/**
|
|
266
|
+
* @param {DevToolsNode} node
|
|
267
|
+
* @returns {{ nodes: number; tasks: number }}
|
|
268
|
+
*/
|
|
269
|
+
declare function countNodes(node: DevToolsNode$6): {
|
|
270
|
+
nodes: number;
|
|
271
|
+
tasks: number;
|
|
272
|
+
};
|
|
273
|
+
type DevToolsNode$6 = DevToolsNode$7;
|
|
274
|
+
|
|
275
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
276
|
+
/** @typedef {import("./DevToolsSnapshot.ts").DevToolsSnapshot} DevToolsSnapshot */
|
|
277
|
+
/**
|
|
278
|
+
* @param {DevToolsNode | null} root
|
|
279
|
+
* @returns {DevToolsSnapshot}
|
|
280
|
+
*/
|
|
281
|
+
declare function buildSnapshot(root: DevToolsNode$5 | null): DevToolsSnapshot$2;
|
|
282
|
+
type DevToolsNode$5 = DevToolsNode$7;
|
|
283
|
+
type DevToolsSnapshot$2 = DevToolsSnapshot$3;
|
|
284
|
+
|
|
285
|
+
/** @typedef {import("./SmithersNodeType.ts").SmithersNodeType} SmithersNodeType */
|
|
286
|
+
/** @type {Record<SmithersNodeType, string>} */
|
|
287
|
+
declare const SMITHERS_NODE_ICONS: Record<SmithersNodeType$1, string>;
|
|
288
|
+
type SmithersNodeType$1 = SmithersNodeType$2;
|
|
289
|
+
|
|
290
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
291
|
+
/**
|
|
292
|
+
* @param {DevToolsNode} node
|
|
293
|
+
* @param {string} [indent]
|
|
294
|
+
* @returns {string}
|
|
295
|
+
*/
|
|
296
|
+
declare function printTree(node: DevToolsNode$4, indent?: string): string;
|
|
297
|
+
type DevToolsNode$4 = DevToolsNode$7;
|
|
298
|
+
|
|
299
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
300
|
+
/**
|
|
301
|
+
* @param {DevToolsNode} node
|
|
302
|
+
* @param {string} nodeId
|
|
303
|
+
* @returns {DevToolsNode | null}
|
|
304
|
+
*/
|
|
305
|
+
declare function findNodeById(node: DevToolsNode$3, nodeId: string): DevToolsNode$3 | null;
|
|
306
|
+
type DevToolsNode$3 = DevToolsNode$7;
|
|
307
|
+
|
|
308
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
309
|
+
/**
|
|
310
|
+
* @param {DevToolsNode} node
|
|
311
|
+
* @param {DevToolsNode[]} [out]
|
|
312
|
+
* @returns {DevToolsNode[]}
|
|
313
|
+
*/
|
|
314
|
+
declare function collectTasks(node: DevToolsNode$2, out?: DevToolsNode$2[]): DevToolsNode$2[];
|
|
315
|
+
type DevToolsNode$2 = DevToolsNode$7;
|
|
316
|
+
|
|
317
|
+
/** @typedef {import("./DevToolsEngineEvent.ts").DevToolsEngineEvent} DevToolsEngineEvent */
|
|
318
|
+
/** @typedef {import("./DevToolsEventBus.ts").DevToolsEventBus} DevToolsEventBus */
|
|
319
|
+
/** @typedef {import("./DevToolsRunStoreOptions.ts").DevToolsRunStoreOptions} DevToolsRunStoreOptions */
|
|
320
|
+
/** @typedef {import("./RunExecutionState.ts").RunExecutionState} RunExecutionState */
|
|
321
|
+
/** @typedef {import("./TaskExecutionState.ts").TaskExecutionState} TaskExecutionState */
|
|
322
|
+
declare class DevToolsRunStore {
|
|
323
|
+
/**
|
|
324
|
+
* @param {DevToolsRunStoreOptions} [options]
|
|
325
|
+
*/
|
|
326
|
+
constructor(options?: DevToolsRunStoreOptions$1);
|
|
327
|
+
/** @type {DevToolsRunStoreOptions} */
|
|
328
|
+
options: DevToolsRunStoreOptions$1;
|
|
329
|
+
/** @type {Map<string, RunExecutionState>} */
|
|
330
|
+
_runs: Map<string, RunExecutionState$2>;
|
|
331
|
+
/** @type {Array<{ bus: DevToolsEventBus; handler: (event: DevToolsEngineEvent) => void }>} */
|
|
332
|
+
_eventBusListeners: Array<{
|
|
333
|
+
bus: DevToolsEventBus$2;
|
|
334
|
+
handler: (event: DevToolsEngineEvent$1) => void;
|
|
335
|
+
}>;
|
|
336
|
+
/**
|
|
337
|
+
* Attach to a Smithers EventBus-like source.
|
|
338
|
+
* @param {DevToolsEventBus} bus
|
|
339
|
+
* @returns {this}
|
|
340
|
+
*/
|
|
341
|
+
attachEventBus(bus: DevToolsEventBus$2): this;
|
|
342
|
+
/**
|
|
343
|
+
* Detach all EventBus listeners registered by this store.
|
|
344
|
+
* @returns {void}
|
|
345
|
+
*/
|
|
346
|
+
detachEventBuses(): void;
|
|
347
|
+
/**
|
|
348
|
+
* Get execution state for a specific run.
|
|
349
|
+
* @param {string} runId
|
|
350
|
+
* @returns {RunExecutionState | undefined}
|
|
351
|
+
*/
|
|
352
|
+
getRun(runId: string): RunExecutionState$2 | undefined;
|
|
353
|
+
/**
|
|
354
|
+
* Get all tracked runs.
|
|
355
|
+
* @returns {Map<string, RunExecutionState>}
|
|
356
|
+
*/
|
|
357
|
+
get runs(): Map<string, RunExecutionState$2>;
|
|
358
|
+
/**
|
|
359
|
+
* Get task execution state by nodeId within a run. Searches all iterations.
|
|
360
|
+
* @param {string} runId
|
|
361
|
+
* @param {string} nodeId
|
|
362
|
+
* @param {number} [iteration]
|
|
363
|
+
* @returns {TaskExecutionState | undefined}
|
|
364
|
+
*/
|
|
365
|
+
getTaskState(runId: string, nodeId: string, iteration?: number): TaskExecutionState$2 | undefined;
|
|
366
|
+
/**
|
|
367
|
+
* @param {DevToolsEngineEvent} event
|
|
368
|
+
* @returns {void}
|
|
369
|
+
*/
|
|
370
|
+
processEngineEvent(event: DevToolsEngineEvent$1): void;
|
|
371
|
+
/**
|
|
372
|
+
* @param {string} runId
|
|
373
|
+
* @returns {RunExecutionState}
|
|
374
|
+
*/
|
|
375
|
+
ensureRun(runId: string): RunExecutionState$2;
|
|
376
|
+
/**
|
|
377
|
+
* @param {RunExecutionState} run
|
|
378
|
+
* @param {string} nodeId
|
|
379
|
+
* @param {number} iteration
|
|
380
|
+
* @returns {TaskExecutionState}
|
|
381
|
+
*/
|
|
382
|
+
ensureTask(run: RunExecutionState$2, nodeId: string, iteration: number): TaskExecutionState$2;
|
|
383
|
+
}
|
|
384
|
+
type DevToolsEngineEvent$1 = DevToolsEngineEvent$2;
|
|
385
|
+
type DevToolsEventBus$2 = DevToolsEventBus$3;
|
|
386
|
+
type DevToolsRunStoreOptions$1 = DevToolsRunStoreOptions$2;
|
|
387
|
+
type RunExecutionState$2 = RunExecutionState$3;
|
|
388
|
+
type TaskExecutionState$2 = TaskExecutionState$3;
|
|
389
|
+
|
|
390
|
+
/** @typedef {import("./DevToolsEngineEvent.ts").DevToolsEngineEvent} DevToolsEngineEvent */
|
|
391
|
+
/** @typedef {import("./DevToolsEventBus.ts").DevToolsEventBus} DevToolsEventBus */
|
|
392
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
393
|
+
/** @typedef {import("./DevToolsSnapshot.ts").DevToolsSnapshot} DevToolsSnapshot */
|
|
394
|
+
/** @typedef {import("./RunExecutionState.ts").RunExecutionState} RunExecutionState */
|
|
395
|
+
/** @typedef {import("./SmithersDevToolsOptions.ts").SmithersDevToolsOptions} SmithersDevToolsOptions */
|
|
396
|
+
/** @typedef {import("./TaskExecutionState.ts").TaskExecutionState} TaskExecutionState */
|
|
397
|
+
declare class SmithersDevToolsCore {
|
|
398
|
+
/**
|
|
399
|
+
* @param {SmithersDevToolsOptions} [options]
|
|
400
|
+
*/
|
|
401
|
+
constructor(options?: SmithersDevToolsOptions$1);
|
|
402
|
+
/** @type {SmithersDevToolsOptions} */
|
|
403
|
+
options: SmithersDevToolsOptions$1;
|
|
404
|
+
/** @type {DevToolsSnapshot | null} */
|
|
405
|
+
_lastSnapshot: DevToolsSnapshot$1 | null;
|
|
406
|
+
/** @type {DevToolsRunStore} */
|
|
407
|
+
_runStore: DevToolsRunStore;
|
|
408
|
+
/**
|
|
409
|
+
* @param {DevToolsNode | null} tree
|
|
410
|
+
* @returns {DevToolsSnapshot}
|
|
411
|
+
*/
|
|
412
|
+
captureSnapshot(tree: DevToolsNode$1 | null): DevToolsSnapshot$1;
|
|
413
|
+
/**
|
|
414
|
+
* @param {DevToolsSnapshot} [snapshot]
|
|
415
|
+
* @returns {DevToolsSnapshot}
|
|
416
|
+
*/
|
|
417
|
+
emitCommit(snapshot?: DevToolsSnapshot$1): DevToolsSnapshot$1;
|
|
418
|
+
/**
|
|
419
|
+
* @param {DevToolsNode | null} tree
|
|
420
|
+
* @returns {DevToolsSnapshot}
|
|
421
|
+
*/
|
|
422
|
+
captureCommit(tree: DevToolsNode$1 | null): DevToolsSnapshot$1;
|
|
423
|
+
/**
|
|
424
|
+
* @param {DevToolsSnapshot} [snapshot]
|
|
425
|
+
* @returns {DevToolsSnapshot}
|
|
426
|
+
*/
|
|
427
|
+
emitUnmount(snapshot?: DevToolsSnapshot$1): DevToolsSnapshot$1;
|
|
428
|
+
/**
|
|
429
|
+
* @param {DevToolsEventBus} bus
|
|
430
|
+
* @returns {this}
|
|
431
|
+
*/
|
|
432
|
+
attachEventBus(bus: DevToolsEventBus$1): this;
|
|
433
|
+
/** @returns {void} */
|
|
434
|
+
detachEventBuses(): void;
|
|
435
|
+
/**
|
|
436
|
+
* @param {DevToolsEngineEvent} event
|
|
437
|
+
* @returns {void}
|
|
438
|
+
*/
|
|
439
|
+
processEngineEvent(event: DevToolsEngineEvent): void;
|
|
440
|
+
/**
|
|
441
|
+
* @param {string} runId
|
|
442
|
+
* @returns {RunExecutionState | undefined}
|
|
443
|
+
*/
|
|
444
|
+
getRun(runId: string): RunExecutionState$1 | undefined;
|
|
445
|
+
/**
|
|
446
|
+
* @returns {Map<string, RunExecutionState>}
|
|
447
|
+
*/
|
|
448
|
+
get runs(): Map<string, RunExecutionState$1>;
|
|
449
|
+
/**
|
|
450
|
+
* @param {string} runId
|
|
451
|
+
* @param {string} nodeId
|
|
452
|
+
* @param {number} [iteration]
|
|
453
|
+
* @returns {TaskExecutionState | undefined}
|
|
454
|
+
*/
|
|
455
|
+
getTaskState(runId: string, nodeId: string, iteration?: number): TaskExecutionState$1 | undefined;
|
|
456
|
+
/**
|
|
457
|
+
* Get the last captured snapshot.
|
|
458
|
+
* @returns {DevToolsSnapshot | null}
|
|
459
|
+
*/
|
|
460
|
+
get snapshot(): DevToolsSnapshot$1 | null;
|
|
461
|
+
/**
|
|
462
|
+
* Get the current tree (shorthand).
|
|
463
|
+
* @returns {DevToolsNode | null}
|
|
464
|
+
*/
|
|
465
|
+
get tree(): DevToolsNode$1 | null;
|
|
466
|
+
/**
|
|
467
|
+
* Pretty-print the current tree to a string.
|
|
468
|
+
* @returns {string}
|
|
469
|
+
*/
|
|
470
|
+
printTree(): string;
|
|
471
|
+
/**
|
|
472
|
+
* Find a node by task nodeId.
|
|
473
|
+
* @param {string} nodeId
|
|
474
|
+
* @returns {DevToolsNode | null}
|
|
475
|
+
*/
|
|
476
|
+
findTask(nodeId: string): DevToolsNode$1 | null;
|
|
477
|
+
/**
|
|
478
|
+
* List all tasks in the current tree.
|
|
479
|
+
* @returns {DevToolsNode[]}
|
|
480
|
+
*/
|
|
481
|
+
listTasks(): DevToolsNode$1[];
|
|
482
|
+
}
|
|
483
|
+
type DevToolsEngineEvent = DevToolsEngineEvent$2;
|
|
484
|
+
type DevToolsEventBus$1 = DevToolsEventBus$3;
|
|
485
|
+
type DevToolsNode$1 = DevToolsNode$7;
|
|
486
|
+
type DevToolsSnapshot$1 = DevToolsSnapshot$3;
|
|
487
|
+
type RunExecutionState$1 = RunExecutionState$3;
|
|
488
|
+
type SmithersDevToolsOptions$1 = SmithersDevToolsOptions$2;
|
|
489
|
+
type TaskExecutionState$1 = TaskExecutionState$3;
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Serialize arbitrary values into a stable JSON-safe shape for devtools snapshots.
|
|
493
|
+
*
|
|
494
|
+
* @param {unknown} value
|
|
495
|
+
* @param {SnapshotSerializerOptions} [options]
|
|
496
|
+
* @returns {unknown}
|
|
497
|
+
*/
|
|
498
|
+
declare function snapshotSerialize(value: unknown, options?: SnapshotSerializerOptions$1): unknown;
|
|
499
|
+
type SnapshotSerializerOptions$1 = SnapshotSerializerOptions$2;
|
|
500
|
+
|
|
501
|
+
/** @type {number} */
|
|
502
|
+
declare const SNAPSHOT_SERIALIZER_DEFAULT_MAX_DEPTH: number;
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Compute a delta from snapshot `a` to snapshot `b`.
|
|
506
|
+
*
|
|
507
|
+
* @param {DevToolsSnapshotV1} a
|
|
508
|
+
* @param {DevToolsSnapshotV1} b
|
|
509
|
+
* @returns {DevToolsDelta}
|
|
510
|
+
*/
|
|
511
|
+
declare function diffSnapshots(a: DevToolsSnapshotV1$2, b: DevToolsSnapshotV1$2): DevToolsDelta$2;
|
|
512
|
+
type DevToolsDelta$2 = DevToolsDelta$3;
|
|
513
|
+
type DevToolsSnapshotV1$2 = DevToolsSnapshotV1$3;
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* Apply a delta to a snapshot. Throws `InvalidDeltaError` for malformed ops.
|
|
517
|
+
*
|
|
518
|
+
* @param {DevToolsSnapshotV1} snapshot
|
|
519
|
+
* @param {DevToolsDelta} delta
|
|
520
|
+
* @returns {DevToolsSnapshotV1}
|
|
521
|
+
*/
|
|
522
|
+
declare function applyDelta(snapshot: DevToolsSnapshotV1$1, delta: DevToolsDelta$1): DevToolsSnapshotV1$1;
|
|
523
|
+
type DevToolsDelta$1 = DevToolsDelta$3;
|
|
524
|
+
type DevToolsSnapshotV1$1 = DevToolsSnapshotV1$3;
|
|
525
|
+
|
|
526
|
+
declare class InvalidDeltaError extends Error {
|
|
527
|
+
/**
|
|
528
|
+
* @param {string} message
|
|
529
|
+
*/
|
|
530
|
+
constructor(message: string);
|
|
531
|
+
/** @type {"InvalidDelta"} */
|
|
532
|
+
code: "InvalidDelta";
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
type DevToolsEventBus = DevToolsEventBus$3;
|
|
536
|
+
type DevToolsEventHandler = DevToolsEventHandler$1;
|
|
537
|
+
type DevToolsNode = DevToolsNode$7;
|
|
538
|
+
type DevToolsRunStoreOptions = DevToolsRunStoreOptions$2;
|
|
539
|
+
type DevToolsSnapshot = DevToolsSnapshot$3;
|
|
540
|
+
type RunExecutionState = RunExecutionState$3;
|
|
541
|
+
type SmithersDevToolsOptions = SmithersDevToolsOptions$2;
|
|
542
|
+
type SmithersNodeType = SmithersNodeType$2;
|
|
543
|
+
type TaskExecutionState = TaskExecutionState$3;
|
|
544
|
+
type SnapshotSerializerOptions = SnapshotSerializerOptions$2;
|
|
545
|
+
type SnapshotSerializerWarning = SnapshotSerializerWarning$1;
|
|
546
|
+
type DevToolsSnapshotV1 = DevToolsSnapshotV1$3;
|
|
547
|
+
type DevToolsDelta = DevToolsDelta$3;
|
|
548
|
+
type DevToolsDeltaOp = DevToolsDeltaOp$1;
|
|
549
|
+
|
|
550
|
+
export { type DevToolsDelta, type DevToolsDeltaOp, type DevToolsEventBus, type DevToolsEventHandler, type DevToolsNode, DevToolsRunStore, type DevToolsRunStoreOptions, type DevToolsSnapshot, type DevToolsSnapshotV1, InvalidDeltaError, type RunExecutionState, SMITHERS_NODE_ICONS, SNAPSHOT_SERIALIZER_DEFAULT_MAX_DEPTH, SmithersDevToolsCore, type SmithersDevToolsOptions, type SmithersNodeType, type SnapshotSerializerOptions, type SnapshotSerializerWarning, type TaskExecutionState, applyDelta, buildSnapshot, collectTasks, countNodes, diffSnapshots, findNodeById, printTree, snapshotSerialize };
|
package/src/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("./DevToolsEventBus.ts").DevToolsEventBus} DevToolsEventBus
|
|
3
|
+
* @typedef {import("./DevToolsEventHandler.ts").DevToolsEventHandler} DevToolsEventHandler
|
|
4
|
+
* @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode
|
|
5
|
+
* @typedef {import("./DevToolsRunStoreOptions.ts").DevToolsRunStoreOptions} DevToolsRunStoreOptions
|
|
6
|
+
* @typedef {import("./DevToolsSnapshot.ts").DevToolsSnapshot} DevToolsSnapshot
|
|
7
|
+
* @typedef {import("./RunExecutionState.ts").RunExecutionState} RunExecutionState
|
|
8
|
+
* @typedef {import("./SmithersDevToolsOptions.ts").SmithersDevToolsOptions} SmithersDevToolsOptions
|
|
9
|
+
* @typedef {import("./SmithersNodeType.ts").SmithersNodeType} SmithersNodeType
|
|
10
|
+
* @typedef {import("./TaskExecutionState.ts").TaskExecutionState} TaskExecutionState
|
|
11
|
+
* @typedef {import("./SnapshotSerializerOptions.ts").SnapshotSerializerOptions} SnapshotSerializerOptions
|
|
12
|
+
* @typedef {import("./SnapshotSerializerWarning.ts").SnapshotSerializerWarning} SnapshotSerializerWarning
|
|
13
|
+
* @typedef {import("./DevToolsSnapshotV1.ts").DevToolsSnapshotV1} DevToolsSnapshotV1
|
|
14
|
+
* @typedef {import("./DevToolsDelta.ts").DevToolsDelta} DevToolsDelta
|
|
15
|
+
* @typedef {import("./DevToolsDeltaOp.ts").DevToolsDeltaOp} DevToolsDeltaOp
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export { countNodes } from "./countNodes.js";
|
|
19
|
+
export { buildSnapshot } from "./buildSnapshot.js";
|
|
20
|
+
export { SMITHERS_NODE_ICONS } from "./SMITHERS_NODE_ICONS.js";
|
|
21
|
+
export { printTree } from "./printTree.js";
|
|
22
|
+
export { findNodeById } from "./findNodeById.js";
|
|
23
|
+
export { collectTasks } from "./collectTasks.js";
|
|
24
|
+
export { DevToolsRunStore } from "./DevToolsRunStore.js";
|
|
25
|
+
export { SmithersDevToolsCore } from "./SmithersDevToolsCore.js";
|
|
26
|
+
export { snapshotSerialize } from "./snapshotSerializer.js";
|
|
27
|
+
export { SNAPSHOT_SERIALIZER_DEFAULT_MAX_DEPTH } from "./SNAPSHOT_SERIALIZER_DEFAULT_MAX_DEPTH.js";
|
|
28
|
+
export { diffSnapshots } from "./diffSnapshots.js";
|
|
29
|
+
export { applyDelta } from "./applyDelta.js";
|
|
30
|
+
export { InvalidDeltaError } from "./InvalidDeltaError.js";
|
package/src/printTree.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SMITHERS_NODE_ICONS } from "./SMITHERS_NODE_ICONS.js";
|
|
2
|
+
/** @typedef {import("./DevToolsNode.ts").DevToolsNode} DevToolsNode */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @param {DevToolsNode} node
|
|
6
|
+
* @param {string} [indent]
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export function printTree(node, indent = "") {
|
|
10
|
+
const icon = SMITHERS_NODE_ICONS[node.type] ?? "❓";
|
|
11
|
+
let line = `${indent}${icon} ${node.type}`;
|
|
12
|
+
if (node.task) {
|
|
13
|
+
line += ` [${node.task.nodeId}]`;
|
|
14
|
+
if (node.task.kind === "agent" && node.task.agent) {
|
|
15
|
+
line += ` (${node.task.agent})`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
line += ` (${node.task.kind})`;
|
|
19
|
+
}
|
|
20
|
+
if (node.task.label) {
|
|
21
|
+
line += ` "${node.task.label}"`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (node.props.name) {
|
|
25
|
+
line += ` "${node.props.name}"`;
|
|
26
|
+
}
|
|
27
|
+
else if (node.props.id) {
|
|
28
|
+
line += ` [${node.props.id}]`;
|
|
29
|
+
}
|
|
30
|
+
let output = line + "\n";
|
|
31
|
+
for (const child of node.children) {
|
|
32
|
+
output += printTree(child, indent + " ");
|
|
33
|
+
}
|
|
34
|
+
return output;
|
|
35
|
+
}
|