@nodetool-ai/execution 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +23 -127
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/app-debug/app-spec.d.ts.map +1 -1
  4. package/dist/app-debug/app-spec.js +3 -0
  5. package/dist/app-debug/app-spec.js.map +1 -1
  6. package/dist/app-debug/application-target.d.ts +1 -1
  7. package/dist/app-debug/application-target.d.ts.map +1 -1
  8. package/dist/app-debug/application-target.js +5 -3
  9. package/dist/app-debug/application-target.js.map +1 -1
  10. package/dist/app-debug/index.d.ts +4 -2
  11. package/dist/app-debug/index.d.ts.map +1 -1
  12. package/dist/app-debug/index.js +3 -2
  13. package/dist/app-debug/index.js.map +1 -1
  14. package/dist/app-debug/run-recording.d.ts +20 -0
  15. package/dist/app-debug/run-recording.d.ts.map +1 -0
  16. package/dist/app-debug/run-recording.js +105 -0
  17. package/dist/app-debug/run-recording.js.map +1 -0
  18. package/dist/app-debug/runtime.d.ts +2 -0
  19. package/dist/app-debug/runtime.d.ts.map +1 -1
  20. package/dist/app-debug/runtime.js +19 -4
  21. package/dist/app-debug/runtime.js.map +1 -1
  22. package/dist/app-debug/simulate.d.ts +10 -1
  23. package/dist/app-debug/simulate.d.ts.map +1 -1
  24. package/dist/app-debug/simulate.js +67 -27
  25. package/dist/app-debug/simulate.js.map +1 -1
  26. package/dist/app-debug/summarize.d.ts +1 -0
  27. package/dist/app-debug/summarize.d.ts.map +1 -1
  28. package/dist/app-debug/summarize.js +1 -0
  29. package/dist/app-debug/summarize.js.map +1 -1
  30. package/dist/app-debug/types.d.ts +6 -4
  31. package/dist/app-debug/types.d.ts.map +1 -1
  32. package/dist/app-run-generation.d.ts +8 -0
  33. package/dist/app-run-generation.d.ts.map +1 -0
  34. package/dist/app-run-generation.js +61 -0
  35. package/dist/app-run-generation.js.map +1 -0
  36. package/dist/browser-app-run.d.ts +10 -0
  37. package/dist/browser-app-run.d.ts.map +1 -0
  38. package/dist/browser-app-run.js +108 -0
  39. package/dist/browser-app-run.js.map +1 -0
  40. package/dist/browser-run-spans.d.ts +4 -0
  41. package/dist/browser-run-spans.d.ts.map +1 -0
  42. package/dist/browser-run-spans.js +115 -0
  43. package/dist/browser-run-spans.js.map +1 -0
  44. package/dist/browser-trace-policy.d.ts +12 -0
  45. package/dist/browser-trace-policy.d.ts.map +1 -0
  46. package/dist/browser-trace-policy.js +40 -0
  47. package/dist/browser-trace-policy.js.map +1 -0
  48. package/dist/cost-ledger.d.ts +3 -0
  49. package/dist/cost-ledger.d.ts.map +1 -1
  50. package/dist/cost-ledger.js +23 -2
  51. package/dist/cost-ledger.js.map +1 -1
  52. package/dist/debug/types.d.ts +1 -0
  53. package/dist/debug/types.d.ts.map +1 -1
  54. package/dist/debug/verdict.d.ts +26 -1
  55. package/dist/debug/verdict.d.ts.map +1 -1
  56. package/dist/debug/verdict.js +36 -0
  57. package/dist/debug/verdict.js.map +1 -1
  58. package/dist/generation-lifecycle.d.ts +5 -4
  59. package/dist/generation-lifecycle.d.ts.map +1 -1
  60. package/dist/generation-lifecycle.js +71 -10
  61. package/dist/generation-lifecycle.js.map +1 -1
  62. package/dist/generation-recovery-worker.d.ts.map +1 -1
  63. package/dist/generation-recovery-worker.js +2 -0
  64. package/dist/generation-recovery-worker.js.map +1 -1
  65. package/dist/generation-tracker.d.ts +2 -15
  66. package/dist/generation-tracker.d.ts.map +1 -1
  67. package/dist/generation-tracker.js +92 -6
  68. package/dist/generation-tracker.js.map +1 -1
  69. package/dist/index.d.ts +9 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +6 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/js-script-debug/index.d.ts +1 -0
  74. package/dist/js-script-debug/index.d.ts.map +1 -1
  75. package/dist/js-script-debug/index.js +1 -0
  76. package/dist/js-script-debug/index.js.map +1 -1
  77. package/dist/js-script-debug/report.d.ts.map +1 -1
  78. package/dist/js-script-debug/report.js +9 -24
  79. package/dist/js-script-debug/report.js.map +1 -1
  80. package/dist/js-script-debug/type-check.d.ts +16 -0
  81. package/dist/js-script-debug/type-check.d.ts.map +1 -0
  82. package/dist/js-script-debug/type-check.js +150 -0
  83. package/dist/js-script-debug/type-check.js.map +1 -0
  84. package/dist/js-script-debug/validate.d.ts +8 -0
  85. package/dist/js-script-debug/validate.d.ts.map +1 -1
  86. package/dist/js-script-debug/validate.js +4 -0
  87. package/dist/js-script-debug/validate.js.map +1 -1
  88. package/dist/message-stream.d.ts +1 -32
  89. package/dist/message-stream.d.ts.map +1 -1
  90. package/dist/message-stream.js +1 -57
  91. package/dist/message-stream.js.map +1 -1
  92. package/dist/partial-run.d.ts +65 -0
  93. package/dist/partial-run.d.ts.map +1 -0
  94. package/dist/partial-run.js +300 -0
  95. package/dist/partial-run.js.map +1 -0
  96. package/dist/preflight.d.ts +43 -2
  97. package/dist/preflight.d.ts.map +1 -1
  98. package/dist/preflight.js +78 -4
  99. package/dist/preflight.js.map +1 -1
  100. package/dist/run-trace-store.d.ts +9 -0
  101. package/dist/run-trace-store.d.ts.map +1 -0
  102. package/dist/run-trace-store.js +57 -0
  103. package/dist/run-trace-store.js.map +1 -0
  104. package/dist/runs.d.ts +16 -0
  105. package/dist/runs.d.ts.map +1 -0
  106. package/dist/runs.js +431 -0
  107. package/dist/runs.js.map +1 -0
  108. package/dist/service/app-debug-service.d.ts +4 -2
  109. package/dist/service/app-debug-service.d.ts.map +1 -1
  110. package/dist/service/app-debug-service.js +73 -31
  111. package/dist/service/app-debug-service.js.map +1 -1
  112. package/dist/service/app-operation.d.ts +39 -0
  113. package/dist/service/app-operation.d.ts.map +1 -0
  114. package/dist/service/app-operation.js +271 -0
  115. package/dist/service/app-operation.js.map +1 -0
  116. package/dist/service/app-run-server.d.ts +3 -1
  117. package/dist/service/app-run-server.d.ts.map +1 -1
  118. package/dist/service/app-run-server.js +22 -14
  119. package/dist/service/app-run-server.js.map +1 -1
  120. package/dist/service/index.d.ts +5 -1
  121. package/dist/service/index.d.ts.map +1 -1
  122. package/dist/service/index.js +2 -0
  123. package/dist/service/index.js.map +1 -1
  124. package/dist/service/run-trace-lifecycle.d.ts +34 -0
  125. package/dist/service/run-trace-lifecycle.d.ts.map +1 -0
  126. package/dist/service/run-trace-lifecycle.js +135 -0
  127. package/dist/service/run-trace-lifecycle.js.map +1 -0
  128. package/dist/service/workflow-run.d.ts +47 -16
  129. package/dist/service/workflow-run.d.ts.map +1 -1
  130. package/dist/service/workflow-run.js +210 -78
  131. package/dist/service/workflow-run.js.map +1 -1
  132. package/dist/session.d.ts +1 -1
  133. package/dist/session.d.ts.map +1 -1
  134. package/dist/session.js +109 -100
  135. package/dist/session.js.map +1 -1
  136. package/dist/sketch-debug/markdown.d.ts.map +1 -1
  137. package/dist/sketch-debug/markdown.js +1 -0
  138. package/dist/sketch-debug/markdown.js.map +1 -1
  139. package/dist/sketch-debug/report.d.ts.map +1 -1
  140. package/dist/sketch-debug/report.js +19 -28
  141. package/dist/sketch-debug/report.js.map +1 -1
  142. package/dist/sketch-debug/types.d.ts +2 -0
  143. package/dist/sketch-debug/types.d.ts.map +1 -1
  144. package/dist/timeline-debug/frame-geometry.d.ts +120 -0
  145. package/dist/timeline-debug/frame-geometry.d.ts.map +1 -0
  146. package/dist/timeline-debug/frame-geometry.js +238 -0
  147. package/dist/timeline-debug/frame-geometry.js.map +1 -0
  148. package/dist/timeline-debug/index.d.ts +1 -0
  149. package/dist/timeline-debug/index.d.ts.map +1 -1
  150. package/dist/timeline-debug/index.js +1 -0
  151. package/dist/timeline-debug/index.js.map +1 -1
  152. package/dist/timeline-debug/legibility.d.ts +8 -4
  153. package/dist/timeline-debug/legibility.d.ts.map +1 -1
  154. package/dist/timeline-debug/legibility.js +47 -18
  155. package/dist/timeline-debug/legibility.js.map +1 -1
  156. package/dist/timeline-debug/report.d.ts.map +1 -1
  157. package/dist/timeline-debug/report.js +16 -25
  158. package/dist/timeline-debug/report.js.map +1 -1
  159. package/dist/timeline-debug/score.d.ts +110 -0
  160. package/dist/timeline-debug/score.d.ts.map +1 -0
  161. package/dist/timeline-debug/score.js +231 -0
  162. package/dist/timeline-debug/score.js.map +1 -0
  163. package/dist/timeline-debug/showcase.d.ts +12 -0
  164. package/dist/timeline-debug/showcase.d.ts.map +1 -1
  165. package/dist/timeline-debug/showcase.js +669 -13
  166. package/dist/timeline-debug/showcase.js.map +1 -1
  167. package/dist/timeline-debug/validate.d.ts.map +1 -1
  168. package/dist/timeline-debug/validate.js +121 -2
  169. package/dist/timeline-debug/validate.js.map +1 -1
  170. package/dist/types.d.ts +18 -10
  171. package/dist/types.d.ts.map +1 -1
  172. package/package.json +13 -13
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Narrow a runnable graph to the nodes a caller asked for, the server-side
3
+ * counterpart of the editor's "Run Node" and "Run selected".
4
+ *
5
+ * The run keeps the named nodes plus what they need upstream. Unrelated
6
+ * branches and downstream nodes are dropped. An upstream node that auto-saves
7
+ * its generations (`auto_save_asset`: image, video, audio and LLM generators,
8
+ * the nodes a provider bills) is not run again when it has a previous
9
+ * generation: its saved output is written into the consuming node's property
10
+ * in place of the edge, the way `buildRunSubgraph` in `web/src/utils` inlines
11
+ * a generation's output. Inputs mixing cached and live edges rerun every
12
+ * contributor so live values cannot overwrite cached ones. Everything else
13
+ * upstream runs.
14
+ */
15
+ import { getAssetFileName } from "@nodetool-ai/protocol";
16
+ /** The ids in `nodeIds` that name no node of `graph`. */
17
+ export function unknownNodeIds(graph, nodeIds) {
18
+ const known = new Set(graph.nodes.map((n) => n.id));
19
+ return nodeIds.filter((id) => !known.has(id));
20
+ }
21
+ /**
22
+ * A generation's value for one output handle: the named handle, else the sole
23
+ * value of a single-output generation. Mirrors `outputOf` in
24
+ * `web/src/utils/nodeGenerations.ts`, except that a generation with several
25
+ * other handles yields nothing rather than the whole record.
26
+ */
27
+ export function generationOutputFor(outputs, handle) {
28
+ if (handle && Object.hasOwn(outputs, handle))
29
+ return outputs[handle];
30
+ const keys = Object.keys(outputs);
31
+ return keys.length === 1 ? outputs[keys[0]] : undefined;
32
+ }
33
+ const isListType = (type) => type?.type === "list";
34
+ /** Whether the target's input `handle` takes a list, so edges aggregate. */
35
+ function inputIsList(node, handle, metadata) {
36
+ const declared = metadata?.properties.find((p) => p.name === handle)?.type;
37
+ if (declared)
38
+ return isListType(declared);
39
+ const slot = node.dynamic_inputs?.[handle];
40
+ return isListType(slot?.type);
41
+ }
42
+ /** Write inlined values into a node, keeping dynamic inputs dynamic. */
43
+ function withInlinedInputs(node, values) {
44
+ const properties = { ...node.properties };
45
+ const dynamic = node.dynamic_properties
46
+ ? { ...node.dynamic_properties }
47
+ : undefined;
48
+ for (const [handle, value] of values) {
49
+ if (dynamic && Object.hasOwn(dynamic, handle)) {
50
+ dynamic[handle] = value;
51
+ }
52
+ else {
53
+ properties[handle] = value;
54
+ }
55
+ }
56
+ return dynamic
57
+ ? { ...node, properties, dynamic_properties: dynamic }
58
+ : { ...node, properties };
59
+ }
60
+ export async function planPartialRun(graph, nodeIds, deps) {
61
+ const unknown = unknownNodeIds(graph, nodeIds);
62
+ if (unknown.length > 0) {
63
+ return { kind: "unknown_nodes", ids: unknown };
64
+ }
65
+ const nodeById = new Map(graph.nodes.map((n) => [n.id, n]));
66
+ const inbound = new Map();
67
+ const outbound = new Map();
68
+ for (const edge of graph.edges) {
69
+ const list = inbound.get(edge.target);
70
+ if (list)
71
+ list.push(edge);
72
+ else
73
+ inbound.set(edge.target, [edge]);
74
+ const outgoing = outbound.get(edge.source);
75
+ if (outgoing)
76
+ outgoing.push(edge);
77
+ else
78
+ outbound.set(edge.source, [edge]);
79
+ }
80
+ const targets = new Set(nodeIds);
81
+ const keep = new Set(nodeIds);
82
+ const previous = new Map();
83
+ const previousOf = (node, metadata) => {
84
+ let pending = previous.get(node.id);
85
+ if (!pending) {
86
+ pending = deps.loadPreviousGeneration(node, metadata);
87
+ previous.set(node.id, pending);
88
+ }
89
+ return pending;
90
+ };
91
+ // Edges whose source is served from a previous generation. Only applied
92
+ // when the source does not end up running for another reason.
93
+ const inlined = [];
94
+ const stack = [...nodeIds];
95
+ const groups = new Map();
96
+ const groupOf = (edge) => {
97
+ const key = JSON.stringify([edge.target, edge.targetHandle]);
98
+ let group = groups.get(key);
99
+ if (!group) {
100
+ group = { live: false, cached: [] };
101
+ groups.set(key, group);
102
+ }
103
+ return group;
104
+ };
105
+ const requireRun = (id) => {
106
+ if (!keep.has(id)) {
107
+ keep.add(id);
108
+ stack.push(id);
109
+ }
110
+ };
111
+ const markLive = (edge) => {
112
+ if (edge.edge_type === "control" || !edge.targetHandle) {
113
+ return;
114
+ }
115
+ const group = groupOf(edge);
116
+ if (group.live) {
117
+ return;
118
+ }
119
+ group.live = true;
120
+ // Edge inputs replace properties in the kernel. A mixed input must run
121
+ // every contributor, otherwise a live edge discards the cached values.
122
+ for (const cached of group.cached) {
123
+ requireRun(cached.source);
124
+ }
125
+ };
126
+ while (stack.length > 0) {
127
+ const id = stack.pop();
128
+ for (const edge of outbound.get(id) ?? []) {
129
+ if (keep.has(edge.target)) {
130
+ markLive(edge);
131
+ }
132
+ }
133
+ for (const edge of inbound.get(id) ?? []) {
134
+ const source = nodeById.get(edge.source);
135
+ if (!source)
136
+ continue;
137
+ if (keep.has(source.id)) {
138
+ markLive(edge);
139
+ continue;
140
+ }
141
+ const metadata = deps.getMetadata(source.type);
142
+ if (deps.loadPreviousGeneration &&
143
+ metadata?.auto_save_asset &&
144
+ !targets.has(source.id) &&
145
+ edge.edge_type !== "control" &&
146
+ edge.targetHandle) {
147
+ const generation = await previousOf(source, metadata);
148
+ const value = generation
149
+ ? generationOutputFor(generation.outputs, edge.sourceHandle)
150
+ : undefined;
151
+ if (value !== undefined) {
152
+ const group = groupOf(edge);
153
+ if (!group.live) {
154
+ group.cached.push(edge);
155
+ inlined.push({ edge, value });
156
+ continue;
157
+ }
158
+ }
159
+ }
160
+ requireRun(source.id);
161
+ markLive(edge);
162
+ }
163
+ }
164
+ const valuesByTarget = new Map();
165
+ const reused = new Map();
166
+ for (const { edge, value } of inlined) {
167
+ // A source that runs anyway feeds this edge itself.
168
+ if (keep.has(edge.source))
169
+ continue;
170
+ const handle = edge.targetHandle;
171
+ let handles = valuesByTarget.get(edge.target);
172
+ if (!handles) {
173
+ handles = new Map();
174
+ valuesByTarget.set(edge.target, handles);
175
+ }
176
+ handles.set(handle, [...(handles.get(handle) ?? []), value]);
177
+ if (!reused.has(edge.source)) {
178
+ const generation = await previous.get(edge.source);
179
+ reused.set(edge.source, {
180
+ node_id: edge.source,
181
+ job_id: generation?.jobId ?? null,
182
+ asset_ids: generation?.assetIds ?? []
183
+ });
184
+ }
185
+ }
186
+ const nodes = graph.nodes
187
+ .filter((n) => keep.has(n.id))
188
+ .map((node) => {
189
+ const handles = valuesByTarget.get(node.id);
190
+ if (!handles)
191
+ return node;
192
+ const metadata = deps.getMetadata(node.type);
193
+ const values = new Map();
194
+ for (const [handle, list] of handles) {
195
+ // Several edges into a list input aggregate, as the kernel does;
196
+ // anywhere else the last edge wins.
197
+ values.set(handle, list.length > 1 && inputIsList(node, handle, metadata)
198
+ ? list
199
+ : list[list.length - 1]);
200
+ }
201
+ return withInlinedInputs(node, values);
202
+ });
203
+ return {
204
+ kind: "graph",
205
+ graph: {
206
+ nodes,
207
+ edges: graph.edges.filter((e) => keep.has(e.source) && keep.has(e.target))
208
+ },
209
+ ran: graph.nodes.filter((n) => keep.has(n.id)).map((n) => n.id),
210
+ reused: [...reused.values()]
211
+ };
212
+ }
213
+ const MEDIA_REF_TYPES = [
214
+ ["image/", "image"],
215
+ ["video/", "video"],
216
+ ["audio/", "audio"],
217
+ ["model/", "model_3d"]
218
+ ];
219
+ function mediaRefType(contentType) {
220
+ return MEDIA_REF_TYPES.find(([prefix]) => contentType.startsWith(prefix))?.[1] ?? null;
221
+ }
222
+ function generationIndexOf(row) {
223
+ return row.metadata?.["generation_index"];
224
+ }
225
+ /** The node's primary output name: `primary_output`, else the first output. */
226
+ function primaryOutputName(metadata) {
227
+ return metadata.primary_output ?? metadata.outputs[0]?.name ?? "output";
228
+ }
229
+ /**
230
+ * Rebuild a node's previous generation from the assets its auto-save wrote
231
+ * (`autoSaveAssets` in the websocket package), newest first. One generation is
232
+ * every asset one `generation_complete` produced: the same job and the same
233
+ * `generation_index`. Returns null when nothing usable is saved, so the node
234
+ * runs again:
235
+ *
236
+ * - `pinnedId` (the editor's `selected_generation`) names an asset not in
237
+ * `rows`;
238
+ * - a text generation was saved with a truncated inline copy;
239
+ * - a structured generation was too large to keep inline.
240
+ */
241
+ export function previousGenerationFromAssets(rows, metadata, pinnedId) {
242
+ const chosen = pinnedId ? rows.find((r) => r.id === pinnedId) : rows[0];
243
+ if (!chosen)
244
+ return null;
245
+ const members = (chosen.job_id
246
+ ? rows.filter((r) => r.job_id === chosen.job_id &&
247
+ generationIndexOf(r) === generationIndexOf(chosen))
248
+ : [chosen])
249
+ // Rows arrive newest first; a list output keeps the order it was saved in.
250
+ .slice()
251
+ .reverse();
252
+ const outputs = {};
253
+ const media = new Map();
254
+ for (const row of members) {
255
+ const ct = row.content_type ?? "";
256
+ const meta = row.metadata ?? {};
257
+ const refType = mediaRefType(ct);
258
+ if (refType) {
259
+ const handle = typeof meta["output_name"] === "string"
260
+ ? meta["output_name"]
261
+ : primaryOutputName(metadata);
262
+ media.set(handle, [
263
+ ...(media.get(handle) ?? []),
264
+ {
265
+ type: refType,
266
+ uri: `asset://${getAssetFileName(row.id, ct)}`,
267
+ asset_id: row.id
268
+ }
269
+ ]);
270
+ }
271
+ else if (ct.startsWith("text/")) {
272
+ const text = meta["text"];
273
+ if (typeof text !== "string")
274
+ continue;
275
+ // The inline copy is capped; a truncated one is not the output.
276
+ const bytes = Buffer.byteLength(text, "utf8");
277
+ if (row.size !== null && row.size !== bytes)
278
+ continue;
279
+ outputs[primaryOutputName(metadata)] = text;
280
+ }
281
+ else if (ct.includes("json")) {
282
+ const json = meta["json"];
283
+ if (json && typeof json === "object" && !Array.isArray(json)) {
284
+ Object.assign(outputs, json);
285
+ }
286
+ }
287
+ }
288
+ for (const [handle, refs] of media) {
289
+ const declared = metadata.outputs.find((o) => o.name === handle)?.type;
290
+ outputs[handle] = isListType(declared) ? refs : refs[refs.length - 1];
291
+ }
292
+ if (Object.keys(outputs).length === 0)
293
+ return null;
294
+ return {
295
+ outputs,
296
+ jobId: chosen.job_id,
297
+ assetIds: members.map((r) => r.id)
298
+ };
299
+ }
300
+ //# sourceMappingURL=partial-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partial-run.js","sourceRoot":"","sources":["../src/partial-run.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type NodeDescriptor } from "@nodetool-ai/protocol";
1
2
  /** Provider/model catalogs the preflight checks a graph's selections against. */
2
3
  export interface RunModelCatalogs {
3
4
  listProviderIds: () => readonly string[];
@@ -9,6 +10,26 @@ export declare const RUNTIME_CATALOGS: RunModelCatalogs;
9
10
  export declare function modelSelectionErrors(graph: {
10
11
  nodes?: unknown;
11
12
  }, catalogs?: RunModelCatalogs): string[];
13
+ /** The part of a node registry the unset-model check reads. */
14
+ export interface NodeModelValidator {
15
+ validateNode: (descriptor: NodeDescriptor, connectedHandles: ReadonlySet<string>) => ReadonlyArray<{
16
+ code?: string;
17
+ message: string;
18
+ }>;
19
+ }
20
+ /**
21
+ * Model properties a graph leaves unselected, one message each.
22
+ *
23
+ * A workflow may be saved with a generator whose model is not picked yet (a
24
+ * board that plans generations), so this is where an unpicked model is
25
+ * refused: before the run, instead of at the node after everything upstream
26
+ * of it ran and billed. A property fed by a data edge is supplied at run time,
27
+ * and a bypassed node never runs, so neither is reported.
28
+ */
29
+ export declare function unsetModelErrors(graph: {
30
+ nodes?: unknown;
31
+ edges?: unknown;
32
+ }, registry: NodeModelValidator): string[];
12
33
  /** How the preflight resolves a credential — the way the coming run will. */
13
34
  export interface CredentialResolver {
14
35
  resolveSecret: (key: string) => Promise<string | null | undefined> | string | null | undefined;
@@ -43,7 +64,7 @@ export type ProviderConfigurationChecker = (graph: {
43
64
  }, resolver: CredentialResolver) => Promise<readonly string[]> | readonly string[];
44
65
  /** A checker over an explicit provider list, for a host with its own registry. */
45
66
  export declare function providerConfigurationChecker(providerIds: readonly string[]): ProviderConfigurationChecker;
46
- export type PreflightIssueKind = "model" | "credential";
67
+ export type PreflightIssueKind = "unset_model" | "model" | "credential";
47
68
  /** One reason a run was refused before it started. */
48
69
  export interface ExecutionPreflightIssue {
49
70
  kind: PreflightIssueKind;
@@ -64,14 +85,34 @@ export declare class ExecutionPreflightError extends Error {
64
85
  export declare function isExecutionPreflightError(value: unknown): value is ExecutionPreflightError;
65
86
  export interface PreflightOptions {
66
87
  catalogs?: RunModelCatalogs;
88
+ /**
89
+ * The run's params. An input node the run fills is checked with the value
90
+ * it receives, so a default the run replaces never refuses it.
91
+ */
92
+ params?: Record<string, unknown>;
67
93
  providerConfiguration?: ProviderConfigurationChecker;
68
94
  /** Resolves a credential the way the coming run will. */
69
95
  resolveSecret: CredentialResolver["resolveSecret"];
96
+ /**
97
+ * Node registry for the unset-model check. Without one, unpicked models are
98
+ * left to the kernel's own node validation.
99
+ */
100
+ registry?: NodeModelValidator;
70
101
  }
102
+ /**
103
+ * `graph` with each input node's value replaced by the param the run passes
104
+ * for it, by the rule the kernel dispatches inputs with: a `nodetool.input.*`
105
+ * node takes the param under its `name`, and an undefined param keeps the
106
+ * default.
107
+ */
108
+ export declare function withRunParams<G extends {
109
+ nodes?: unknown;
110
+ edges?: unknown;
111
+ }>(graph: G, params: Record<string, unknown> | undefined): G;
71
112
  /**
72
113
  * Every reason to refuse `graph`, model selections first.
73
114
  *
74
- * A graph whose model selections are already unhonourable stops there: a
115
+ * A graph whose model selections are unset or unhonourable stops there: a
75
116
  * provider that is not registered has no credentials to check, so running the
76
117
  * second check would only add noise to a refusal that is already decided.
77
118
  */
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AA6BA,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACzC,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,KACd,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,gBAI9B,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1B,QAAQ,GAAE,gBAAmC,GAC5C,MAAM,EAAE,CAQV;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CACb,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,SAAS,MAAM,EAAgC,GAC3D,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,4BAA4B,GAAG,CACzC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,QAAQ,EAAE,kBAAkB,KACzB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;AAEpD,kFAAkF;AAClF,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,4BAA4B,CAG9B;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,YAAY,CAAC;AAExD,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,uBAAuB,EAAE,GACzC,MAAM,CAWR;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAEpD,YAAY,MAAM,EAAE,SAAS,uBAAuB,EAAE,EAGrD;CACF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAElC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;IACrD,yDAAyD;IACzD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAUpC;AAED,oDAAoD;AACpD,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAcxE,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACzC,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,KACd,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,gBAI9B,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1B,QAAQ,GAAE,gBAAmC,GAC5C,MAAM,EAAE,CAQV;AAED,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,CACZ,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,KAClC,aAAa,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,EAAE,CA4BV;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CACb,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,GAAE,SAAS,MAAM,EAAgC,GAC3D,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,4BAA4B,GAAG,CACzC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,QAAQ,EAAE,kBAAkB,KACzB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;AAEpD,kFAAkF;AAClF,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,4BAA4B,CAG9B;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;AAExE,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AASD,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,uBAAuB,EAAE,GACzC,MAAM,CAWR;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAEpD,YAAY,MAAM,EAAE,SAAS,uBAAuB,EAAE,EAGrD;CACF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAElC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;IACrD,yDAAyD;IACzD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD;;;OAGG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1E,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,CAAC,CAyBH;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAiBpC;AAED,oDAAoD;AACpD,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf"}
package/dist/preflight.js CHANGED
@@ -14,6 +14,7 @@
14
14
  * model-selection check rather than guessed at.
15
15
  */
16
16
  import { rewriteBypassedNodes } from "@nodetool-ai/kernel";
17
+ import { isDataEdge } from "@nodetool-ai/protocol";
17
18
  import { collectModelProviders, collectModelSelectionIssues } from "@nodetool-ai/node-sdk";
18
19
  import { getProviderSecretKey, isProviderConfigured, listOfflineModelIds, listRegisteredProviderIds } from "@nodetool-ai/runtime";
19
20
  import { normalizeGraph } from "./normalize-graph.js";
@@ -32,6 +33,42 @@ export function modelSelectionErrors(graph, catalogs = RUNTIME_CATALOGS) {
32
33
  .filter((issue) => issue.severity === "error")
33
34
  .map((issue) => `Node "${issue.nodeId}" (${issue.nodeType}): ${issue.message}`);
34
35
  }
36
+ /**
37
+ * Model properties a graph leaves unselected, one message each.
38
+ *
39
+ * A workflow may be saved with a generator whose model is not picked yet (a
40
+ * board that plans generations), so this is where an unpicked model is
41
+ * refused: before the run, instead of at the node after everything upstream
42
+ * of it ran and billed. A property fed by a data edge is supplied at run time,
43
+ * and a bypassed node never runs, so neither is reported.
44
+ */
45
+ export function unsetModelErrors(graph, registry) {
46
+ const nodes = graph.nodes;
47
+ if (!Array.isArray(nodes))
48
+ return [];
49
+ const effectiveGraph = rewriteBypassedNodes(normalizeGraph({
50
+ nodes: nodes.filter(isRecord),
51
+ edges: Array.isArray(graph.edges) ? graph.edges.filter(isRecord) : []
52
+ }));
53
+ const connected = new Map();
54
+ for (const edge of effectiveGraph.edges) {
55
+ if (!isDataEdge(edge))
56
+ continue;
57
+ const handles = connected.get(edge.target) ?? new Set();
58
+ handles.add(edge.targetHandle);
59
+ connected.set(edge.target, handles);
60
+ }
61
+ const errors = [];
62
+ for (const node of effectiveGraph.nodes) {
63
+ const issues = registry.validateNode(node, connected.get(node.id) ?? new Set());
64
+ for (const issue of issues) {
65
+ if (issue.code !== "unset_model")
66
+ continue;
67
+ errors.push(`Node "${node.id}" (${node.type}): ${issue.message}`);
68
+ }
69
+ }
70
+ return errors;
71
+ }
35
72
  /**
36
73
  * Providers a graph selects whose required credentials this runtime cannot
37
74
  * resolve, one message each.
@@ -80,13 +117,14 @@ export function providerConfigurationChecker(providerIds) {
80
117
  return (graph, resolver) => unconfiguredProviderErrors(graph, resolver, providerIds);
81
118
  }
82
119
  const HEADINGS = {
120
+ unset_model: "Workflow leaves model properties unselected. Pick a model on each before running:",
83
121
  model: "Workflow selects providers or models this runtime cannot honour:",
84
122
  credential: "Workflow selects providers whose credentials are not configured:"
85
123
  };
86
124
  /** The refusal text every host prints — one section per issue kind. */
87
125
  export function formatPreflightDetail(issues) {
88
126
  const sections = [];
89
- for (const kind of ["model", "credential"]) {
127
+ for (const kind of ["unset_model", "model", "credential"]) {
90
128
  const messages = issues
91
129
  .filter((issue) => issue.kind === kind)
92
130
  .map((issue) => issue.message);
@@ -112,17 +150,53 @@ export class ExecutionPreflightError extends Error {
112
150
  export function isExecutionPreflightError(value) {
113
151
  return value instanceof ExecutionPreflightError;
114
152
  }
153
+ /**
154
+ * `graph` with each input node's value replaced by the param the run passes
155
+ * for it, by the rule the kernel dispatches inputs with: a `nodetool.input.*`
156
+ * node takes the param under its `name`, and an undefined param keeps the
157
+ * default.
158
+ */
159
+ export function withRunParams(graph, params) {
160
+ const nodes = graph.nodes;
161
+ if (!params || !Array.isArray(nodes))
162
+ return graph;
163
+ return {
164
+ ...graph,
165
+ nodes: nodes.map((node) => {
166
+ if (!isRecord(node) ||
167
+ typeof node.type !== "string" ||
168
+ !node.type.startsWith("nodetool.input.")) {
169
+ return node;
170
+ }
171
+ const properties = isRecord(node.properties) ? node.properties : {};
172
+ const propertyName = typeof properties.name === "string" ? properties.name.trim() : "";
173
+ const name = propertyName ||
174
+ (typeof node.name === "string" ? node.name : String(node.id));
175
+ if (!Object.hasOwn(params, name) || params[name] === undefined) {
176
+ return node;
177
+ }
178
+ return { ...node, properties: { ...properties, value: params[name] } };
179
+ })
180
+ };
181
+ }
115
182
  /**
116
183
  * Every reason to refuse `graph`, model selections first.
117
184
  *
118
- * A graph whose model selections are already unhonourable stops there: a
185
+ * A graph whose model selections are unset or unhonourable stops there: a
119
186
  * provider that is not registered has no credentials to check, so running the
120
187
  * second check would only add noise to a refusal that is already decided.
121
188
  */
122
189
  export async function collectPreflightIssues(graph, options) {
190
+ graph = withRunParams(graph, options.params);
191
+ const unset = options.registry
192
+ ? unsetModelErrors(graph, options.registry)
193
+ : [];
123
194
  const models = modelSelectionErrors(graph, options.catalogs);
124
- if (models.length > 0) {
125
- return models.map((message) => ({ kind: "model", message }));
195
+ if (unset.length > 0 || models.length > 0) {
196
+ return [
197
+ ...unset.map((message) => ({ kind: "unset_model", message })),
198
+ ...models.map((message) => ({ kind: "model", message }))
199
+ ];
126
200
  }
127
201
  const checker = options.providerConfiguration ?? unconfiguredProviderErrors;
128
202
  const credentials = await checker(graph, {
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { StoredRunTraceUpdate } from "@nodetool-ai/protocol";
2
+ export type RunTraceUpdateListener = (userId: string, update: StoredRunTraceUpdate) => void;
3
+ /** Subscribe to committed, sanitized snapshots. Transport hosts still enforce ownership. */
4
+ export declare function subscribeRunTraceUpdates(listener: RunTraceUpdateListener): () => void;
5
+ /** Publish only records already committed and sanitized by the run store. */
6
+ export declare function publishCommittedRunTraceUpdate(userId: string, update: StoredRunTraceUpdate): void;
7
+ /** Install the database bridge even if an external sink initialized telemetry first. */
8
+ export declare function ensureRunTraceTelemetry(): Promise<void>;
9
+ //# sourceMappingURL=run-trace-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-trace-store.d.ts","sourceRoot":"","sources":["../src/run-trace-store.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,MAAM,sBAAsB,GAAG,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,oBAAoB,KACzB,IAAI,CAAC;AAKV,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAGrF;AAED,6EAA6E;AAC7E,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAKjG;AAoCD,wFAAwF;AACxF,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7D"}
@@ -0,0 +1,57 @@
1
+ import { getRegisteredTrace, getRunTrace, markRunTraceIncomplete, sanitizeRunTraceRecord, writeRunTraceUpdate } from "@nodetool-ai/models";
2
+ import { configureRunTraceStore, initTelemetry } from "@nodetool-ai/runtime";
3
+ const listeners = new Set();
4
+ let configured = false;
5
+ /** Subscribe to committed, sanitized snapshots. Transport hosts still enforce ownership. */
6
+ export function subscribeRunTraceUpdates(listener) {
7
+ listeners.add(listener);
8
+ return () => { listeners.delete(listener); };
9
+ }
10
+ /** Publish only records already committed and sanitized by the run store. */
11
+ export function publishCommittedRunTraceUpdate(userId, update) {
12
+ for (const listener of listeners) {
13
+ try {
14
+ listener(userId, update);
15
+ }
16
+ catch { /* A disconnected reader cannot fail durable recording. */ }
17
+ }
18
+ }
19
+ const adapter = {
20
+ lookup: getRegisteredTrace,
21
+ sanitize: sanitizeRunTraceRecord,
22
+ async write(updates) {
23
+ for (const write of updates) {
24
+ const registration = write.userId && write.runId
25
+ ? await getRunTrace(write.userId, write.runId)
26
+ : await getRegisteredTrace(write.update.record.trace_id);
27
+ if (!registration || registration.trace_id !== write.update.record.trace_id) {
28
+ continue;
29
+ }
30
+ const committed = await writeRunTraceUpdate(registration.user_id, registration.id, write.update, {
31
+ secretValues: write.secretValues,
32
+ contentSuppressed: write.contentSuppressed,
33
+ isRoot: write.isRoot
34
+ });
35
+ if (!committed) {
36
+ continue;
37
+ }
38
+ publishCommittedRunTraceUpdate(registration.user_id, committed);
39
+ }
40
+ },
41
+ async markIncomplete(traceId, reason) {
42
+ const registration = await getRegisteredTrace(traceId);
43
+ if (registration) {
44
+ await markRunTraceIncomplete(registration.user_id, traceId, reason);
45
+ }
46
+ },
47
+ async flush() { }
48
+ };
49
+ /** Install the database bridge even if an external sink initialized telemetry first. */
50
+ export async function ensureRunTraceTelemetry() {
51
+ if (!configured) {
52
+ configureRunTraceStore(adapter);
53
+ configured = true;
54
+ }
55
+ await initTelemetry();
56
+ }
57
+ //# sourceMappingURL=run-trace-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-trace-store.js","sourceRoot":"","sources":["../src/run-trace-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;AACpD,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,4FAA4F;AAC5F,MAAM,UAAU,wBAAwB,CAAC,QAAgC;IACvE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,8BAA8B,CAAC,MAAc,EAAE,MAA4B;IACzF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QACjC,MAAM,CAAC,CAAC,0DAA0D,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAkB;IAC7B,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,sBAAsB;IAChC,KAAK,CAAC,KAAK,CAAC,OAAO;QACjB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK;gBAC9C,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;gBAC9C,CAAC,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5E,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,mBAAmB,CACzC,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,EAAE,EACf,KAAK,CAAC,MAAM,EACZ;gBACE,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CACF,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7B,8BAA8B,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM;QAClC,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,sBAAsB,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,KAAK,CAAC,KAAK,KAAiE,CAAC;CAC9E,CAAC;AAEF,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChC,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC"}
package/dist/runs.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { type RunListOptions, type RunGetOptions, type RunTraceOptions, type RunLogsOptions, type RunAwaitOptions, type RunUpdatesOptions, type GetRunResult, type ListRunsResult, type GetRunTraceResult, type GetRunLogsResult, type RunUpdatesResult, type RunTraceRegistration } from "@nodetool-ai/protocol";
2
+ export declare class RunsError extends Error {
3
+ readonly code: "not_found" | "ambiguous" | "invalid_input" | "timeout" | "aborted";
4
+ constructor(code: "not_found" | "ambiguous" | "invalid_input" | "timeout" | "aborted", message: string);
5
+ }
6
+ export declare function findRunForSource(userId: string, kind: RunTraceRegistration["kind"], sourceId: string): Promise<RunTraceRegistration | null>;
7
+ export declare function listRuns(userId: string, options?: RunListOptions): Promise<ListRunsResult>;
8
+ export declare function getRun(userId: string, id: string, options?: RunGetOptions): Promise<GetRunResult>;
9
+ export declare function getRunTrace(userId: string, id: string, options?: RunTraceOptions): Promise<GetRunTraceResult>;
10
+ export declare function getRunLogs(userId: string, id: string, options?: RunLogsOptions): Promise<GetRunLogsResult>;
11
+ /** Polling reads latest snapshots. It deliberately never promises append-only replay. */
12
+ export declare function readRunUpdates(userId: string, id: string, options?: RunUpdatesOptions): Promise<RunUpdatesResult>;
13
+ export declare function awaitRun(userId: string, id: string, options?: RunAwaitOptions & {
14
+ signal?: AbortSignal;
15
+ }): Promise<GetRunResult>;
16
+ //# sourceMappingURL=runs.d.ts.map