@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 @@
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAChI,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EACvF,KAAK,oBAAoB,EAC/C,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS;IAA9F,YAAqB,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAE9G;CACF;AAkBD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAEjJ;AAID,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUpG;AAqDD,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwC3G;AAgCD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2BvH;AAGD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BpH;AACD,yFAAyF;AACzF,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB3H;AACD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAe,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1I"}
package/dist/runs.js ADDED
@@ -0,0 +1,431 @@
1
+ import { setTimeout as delay } from "node:timers/promises";
2
+ import { z } from "zod";
3
+ import { TRACE_RESTRICTED_CAPABILITY_MODULES, RUN_SUMMARY_SPAN_LIMIT, RUN_READER_STRING_LIMIT, RUN_READER_CONTENT_LIMIT, recombineTraceRecord, runListOptionsSchema, runGetOptionsSchema, runTraceOptionsSchema, runLogsOptionsSchema, runAwaitOptionsSchema, runUpdatesOptionsSchema } from "@nodetool-ai/protocol";
4
+ import { resolveRunReader, findRunReaderSource, queryRunReaders, queryRunReaderSpans, queryRunReaderGenerationIds, queryRunReaderDocuments, queryRunReaderAppMetadata, queryRunReaderAppContent, queryRunReaderAppContentPresent, queryRunReaderGenerationCosts, encodeRunListCursor, RunTraceError } from "@nodetool-ai/models";
5
+ export class RunsError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.code = code;
10
+ this.name = "RunsError";
11
+ }
12
+ }
13
+ function validate(schema, input) {
14
+ const result = schema.safeParse(input);
15
+ if (!result.success) {
16
+ throw new RunsError("invalid_input", result.error.message);
17
+ }
18
+ return result.data;
19
+ }
20
+ async function modelRead(read) {
21
+ try {
22
+ return await read();
23
+ }
24
+ catch (error) {
25
+ if (error instanceof RunTraceError) {
26
+ throw new RunsError(error.code === "conflict" ? "ambiguous" : error.code, error.message);
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ async function resolve(userId, id) {
32
+ const run = await modelRead(() => resolveRunReader(userId, id));
33
+ if (!run) {
34
+ throw new RunsError("not_found", "Run not found");
35
+ }
36
+ return run;
37
+ }
38
+ export async function findRunForSource(userId, kind, sourceId) {
39
+ return modelRead(() => findRunReaderSource(userId, kind, sourceId));
40
+ }
41
+ function publicRunRecord(run) {
42
+ return { ...run, error: run.error?.slice(0, 500) ?? null, parents: run.parents.slice(0, 20), parents_limited: run.parents.length > 20 };
43
+ }
44
+ export async function listRuns(userId, options = {}) {
45
+ const parsed = validate(runListOptionsSchema, options);
46
+ if (parsed.since && parsed.until && parsed.since > parsed.until) {
47
+ throw new RunsError("invalid_input", "since must precede until");
48
+ }
49
+ const rows = await modelRead(() => queryRunReaders(userId, parsed));
50
+ const runs = rows.slice(0, parsed.limit);
51
+ const last = runs.at(-1);
52
+ return { runs: runs.map((run) => {
53
+ const record = publicRunRecord(run);
54
+ if (run.app) {
55
+ record.app = run.app;
56
+ }
57
+ return record;
58
+ }), next_cursor: rows.length > parsed.limit && last ? encodeRunListCursor(last) : null };
59
+ }
60
+ function compareSpans(a, b) {
61
+ return a.metadata.start_time_ms - b.metadata.start_time_ms || a.span_id.localeCompare(b.span_id);
62
+ }
63
+ /** Iterative traversal visits each span once, including disconnected and cyclic components. */
64
+ function spanTree(rows) {
65
+ const sorted = [...rows].sort(compareSpans);
66
+ const byId = new Map(sorted.map((row) => [row.span_id, row]));
67
+ const children = new Map();
68
+ const roots = [];
69
+ let incomplete = false;
70
+ for (const row of sorted) {
71
+ const parent = row.metadata.parent_span_id;
72
+ if (parent && byId.has(parent) && parent !== row.span_id) {
73
+ const siblings = children.get(parent) ?? [];
74
+ siblings.push(row);
75
+ children.set(parent, siblings);
76
+ }
77
+ else {
78
+ roots.push(row);
79
+ if (parent) {
80
+ incomplete = true;
81
+ }
82
+ }
83
+ }
84
+ const seen = new Set();
85
+ const ordered = [];
86
+ const visit = (root) => {
87
+ const queue = [{ row: root, depth: 0 }];
88
+ for (let index = 0; index < queue.length; index++) {
89
+ const entry = queue[index];
90
+ if (!entry || seen.has(entry.row.span_id)) {
91
+ continue;
92
+ }
93
+ seen.add(entry.row.span_id);
94
+ ordered.push(entry);
95
+ for (const child of children.get(entry.row.span_id) ?? []) {
96
+ queue.push({ row: child, depth: entry.depth + 1 });
97
+ }
98
+ }
99
+ };
100
+ for (const root of roots) {
101
+ visit(root);
102
+ }
103
+ for (const row of sorted) {
104
+ if (!seen.has(row.span_id)) {
105
+ incomplete = true;
106
+ visit(row);
107
+ }
108
+ }
109
+ return { ordered, byId, children, incomplete };
110
+ }
111
+ function scopedRows(run, rows) {
112
+ if (!run.parent_run_id) {
113
+ return rows;
114
+ }
115
+ if (!run.root_span_id) {
116
+ return rows.filter((row) => row.run_id === run.id);
117
+ }
118
+ const tree = spanTree(rows);
119
+ const allowed = new Set();
120
+ const queue = [run.root_span_id];
121
+ for (let index = 0; index < queue.length; index++) {
122
+ const id = queue[index];
123
+ if (!id || allowed.has(id)) {
124
+ continue;
125
+ }
126
+ allowed.add(id);
127
+ for (const child of tree.children.get(id) ?? []) {
128
+ queue.push(child.span_id);
129
+ }
130
+ }
131
+ return rows.filter((row) => allowed.has(row.span_id));
132
+ }
133
+ function flags(run, rows, incomplete = false) {
134
+ const expired = Boolean(run.content_expired || rows.some((row) => row.content_expired));
135
+ const suppressed = rows.some((row) => TRACE_RESTRICTED_CAPABILITY_MODULES.some((module) => row.metadata.attributes["tool.module"] === module || row.metadata.attributes["capability.module"] === module));
136
+ return { content_state: run.origin === "public" ? "public" : expired ? "expired" : rows.some((row) => row.has_content) ? "available" : suppressed ? "suppressed" : "absent",
137
+ content_expired: expired, truncated: Boolean(run.truncated || rows.some((row) => row.truncated)), incomplete: Boolean(run.incomplete || incomplete || rows.some((row) => row.incomplete)) };
138
+ }
139
+ function spanSummary(row) {
140
+ return { span_id: row.span_id, parent_span_id: row.metadata.parent_span_id, name: row.metadata.name, status: row.metadata.status.code,
141
+ duration_ms: row.metadata.duration_ms, error: row.error_summary?.slice(0, 500) ?? null };
142
+ }
143
+ export async function getRun(userId, id, options = {}) {
144
+ const parsed = validate(runGetOptionsSchema, options);
145
+ const run = await resolve(userId, id);
146
+ const all = await queryRunReaderSpans(userId, run);
147
+ const rows = scopedRows(run, all);
148
+ const tree = spanTree(rows);
149
+ const depths = new Map(tree.ordered.map((entry) => [entry.row.span_id, entry.depth]));
150
+ const failed = [...rows].filter((row) => row.metadata.status.code === "ERROR").sort((a, b) => a.metadata.end_time_ms - b.metadata.end_time_ms || (depths.get(b.span_id) ?? 0) - (depths.get(a.span_id) ?? 0) || compareSpans(a, b))[0];
151
+ const path = [];
152
+ const pathIds = new Set();
153
+ let current = failed;
154
+ while (current && !pathIds.has(current.span_id)) {
155
+ pathIds.add(current.span_id);
156
+ path.push(current);
157
+ current = current.metadata.parent_span_id ? tree.byId.get(current.metadata.parent_span_id) : undefined;
158
+ }
159
+ path.reverse();
160
+ const counts = new Map();
161
+ const costs = new Map();
162
+ const generations = new Set();
163
+ const documents = new Set();
164
+ const chargedGenerations = new Set();
165
+ for (const row of rows) {
166
+ counts.set(row.metadata.name, (counts.get(row.metadata.name) ?? 0) + 1);
167
+ const attrs = row.metadata.attributes;
168
+ const cost = attrs["gen_ai.usage.cost_usd"];
169
+ const provider = attrs["llm.provider"] ?? attrs["gen_ai.system"] ?? attrs["generation.provider"];
170
+ if (typeof cost === "number" && Number.isFinite(cost) && typeof provider === "string") {
171
+ const name = provider.slice(0, 200);
172
+ costs.set(name, (costs.get(name) ?? 0) + cost);
173
+ if (typeof attrs["generation.id"] === "string") {
174
+ chargedGenerations.add(attrs["generation.id"]);
175
+ }
176
+ }
177
+ if (typeof attrs["generation.id"] === "string") {
178
+ generations.add(attrs["generation.id"]);
179
+ }
180
+ if (run.kind !== "app" && run.origin !== "public" && !run.content_expired && typeof attrs["document.id"] === "string") {
181
+ documents.add(attrs["document.id"]);
182
+ }
183
+ }
184
+ for (const generation of await queryRunReaderGenerationIds(userId, run)) {
185
+ generations.add(generation);
186
+ }
187
+ const documentReferences = await queryRunReaderDocuments(userId, run);
188
+ for (const document of documentReferences) {
189
+ documents.add(document.id);
190
+ }
191
+ for (const generation of await queryRunReaderGenerationCosts(userId, run, [...generations].slice(0, 100))) {
192
+ generations.add(generation.id);
193
+ if (!chargedGenerations.has(generation.id) && generation.cost !== null && Number.isFinite(generation.cost)) {
194
+ const provider = generation.provider.slice(0, 200);
195
+ costs.set(provider, (costs.get(provider) ?? 0) + generation.cost);
196
+ }
197
+ }
198
+ const app = await queryRunReaderAppMetadata(userId, run);
199
+ const record = publicRunRecord(run);
200
+ if (app) {
201
+ record.app = app;
202
+ }
203
+ if (record.app && parsed.include_content) {
204
+ const content = await queryRunReaderAppContent(userId, run);
205
+ const budget = { remaining: RUN_READER_CONTENT_LIMIT, string_limit: RUN_READER_CONTENT_LIMIT };
206
+ record.app.inputs = content.inputs ? boundedAttributes(content.inputs, budget) : null;
207
+ record.app.outputs = content.outputs ? boundedAttributes(content.outputs, budget) : null;
208
+ record.app.content_limited = Boolean(content.content_limited || budget.limited);
209
+ }
210
+ const recordingFlags = flags(run, rows, tree.incomplete);
211
+ if (recordingFlags.content_state === "absent" && await queryRunReaderAppContentPresent(userId, run)) {
212
+ recordingFlags.content_state = "available";
213
+ }
214
+ const failurePath = path.length > RUN_SUMMARY_SPAN_LIMIT ? [...path.slice(0, RUN_SUMMARY_SPAN_LIMIT - 1), ...path.slice(-1)] : path;
215
+ return { run: record, summary: { ...recordingFlags, first_failed_span_id: failed?.span_id ?? null,
216
+ failure_path: failurePath.map(spanSummary), cost_by_provider: Object.fromEntries([...costs].sort(([a], [b]) => a.localeCompare(b)).slice(0, 20)),
217
+ slowest_spans: [...rows].sort((a, b) => b.metadata.duration_ms - a.metadata.duration_ms || compareSpans(a, b)).slice(0, RUN_SUMMARY_SPAN_LIMIT).map(spanSummary),
218
+ counts_by_name: Object.fromEntries([...counts].sort(([a], [b]) => a.localeCompare(b)).slice(0, 50)), span_count: rows.length, event_count: rows.reduce((count, row) => count + row.metadata.events.length, 0),
219
+ documents: documentReferences.slice(0, 100), documents_limited: documentReferences.length > 100, generation_ids: [...generations].sort().slice(0, 100), document_ids: [...documents].sort().slice(0, 100),
220
+ summary_truncated: path.length > RUN_SUMMARY_SPAN_LIMIT || counts.size > 50 || costs.size > 20 || generations.size > 100 || documents.size > 100 } };
221
+ }
222
+ function boundedValue(value, budget) {
223
+ if (budget.remaining <= 0) {
224
+ return "[reader limit]";
225
+ }
226
+ const encoded = JSON.stringify(value) ?? "null";
227
+ const limit = Math.min(budget.string_limit ?? RUN_READER_STRING_LIMIT, budget.remaining);
228
+ if (Buffer.byteLength(encoded) > limit) {
229
+ budget.limited = true;
230
+ }
231
+ const result = Buffer.byteLength(encoded) > limit ? `${Buffer.from(typeof value === "string" ? value : encoded).subarray(0, Math.max(0, limit / 2 - 20)).toString()}[reader limit]` : value;
232
+ const size = Buffer.byteLength(JSON.stringify(result) ?? "null");
233
+ if (size > budget.remaining) {
234
+ budget.remaining = 0;
235
+ budget.limited = true;
236
+ return "[reader limit]";
237
+ }
238
+ budget.remaining -= size;
239
+ return result;
240
+ }
241
+ function boundedAttributes(attrs, budget) {
242
+ const result = {};
243
+ if (Object.keys(attrs).length > 100) {
244
+ budget.limited = true;
245
+ }
246
+ for (const [inputKey, value] of Object.entries(attrs).slice(0, 100)) {
247
+ const key = inputKey.slice(0, 200);
248
+ const size = Buffer.byteLength(JSON.stringify(key)) + 3;
249
+ if (budget.remaining <= size) {
250
+ budget.remaining = 0;
251
+ budget.limited = true;
252
+ break;
253
+ }
254
+ budget.remaining -= size;
255
+ result[key] = boundedValue(value, budget);
256
+ }
257
+ return result;
258
+ }
259
+ function boundedRecord(record, budget, fullEvents = false) {
260
+ const attributes = (attrs) => boundedAttributes(attrs, budget);
261
+ const status = { code: record.status.code };
262
+ if (record.status.message !== undefined) {
263
+ status.message = String(boundedValue(record.status.message, budget));
264
+ }
265
+ const events = record.events.slice(0, Math.min(fullEvents ? 1_000 : 128, budget.events));
266
+ budget.events -= events.length;
267
+ if (events.length < record.events.length) {
268
+ budget.limited = true;
269
+ }
270
+ return { ...record, name: record.name.slice(0, 200), status, attributes: attributes(record.attributes), resource: attributes(record.resource),
271
+ events: events.map((event) => ({ ...event, name: event.name.slice(0, 200), attributes: attributes(event.attributes ?? {}) })) };
272
+ }
273
+ export async function getRunTrace(userId, id, options = {}) {
274
+ const parsed = validate(runTraceOptionsSchema, options);
275
+ if (parsed.include_content && !parsed.focus_span_id) {
276
+ throw new RunsError("invalid_input", "Content drill-down requires focus_span_id");
277
+ }
278
+ const run = await resolve(userId, id);
279
+ const rows = scopedRows(run, await queryRunReaderSpans(userId, run));
280
+ const tree = spanTree(rows);
281
+ let entries = tree.ordered;
282
+ if (parsed.focus_span_id) {
283
+ const focus = tree.byId.get(parsed.focus_span_id);
284
+ if (!focus) {
285
+ throw new RunsError("not_found", "Span not found in run");
286
+ }
287
+ entries = [];
288
+ const seen = new Set();
289
+ const queue = [{ row: focus, depth: 0 }];
290
+ for (let index = 0; index < queue.length; index++) {
291
+ const entry = queue[index];
292
+ if (!entry || seen.has(entry.row.span_id)) {
293
+ continue;
294
+ }
295
+ seen.add(entry.row.span_id);
296
+ entries.push(entry);
297
+ for (const child of tree.children.get(entry.row.span_id) ?? []) {
298
+ queue.push({ row: child, depth: entry.depth + 1 });
299
+ }
300
+ }
301
+ }
302
+ const errorPath = new Set();
303
+ if (parsed.errors_only) {
304
+ for (const entry of entries) {
305
+ if (entry.row.metadata.status.code !== "ERROR") {
306
+ continue;
307
+ }
308
+ let row = entry.row;
309
+ while (row && !errorPath.has(row.span_id)) {
310
+ errorPath.add(row.span_id);
311
+ row = row.metadata.parent_span_id ? tree.byId.get(row.metadata.parent_span_id) : undefined;
312
+ }
313
+ }
314
+ }
315
+ const filtered = entries.filter((entry) => entry.depth <= parsed.depth && (!parsed.name || entry.row.metadata.name.includes(parsed.name)) && (!parsed.errors_only || errorPath.has(entry.row.span_id)));
316
+ const contentRows = parsed.include_content && parsed.focus_span_id ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: [parsed.focus_span_id] }) : [];
317
+ const content = new Map(contentRows.map((row) => [row.span_id, row.content]));
318
+ const budget = { remaining: RUN_READER_CONTENT_LIMIT, events: 200 };
319
+ const nodes = filtered.slice(0, parsed.limit).map(({ row, depth }) => {
320
+ budget.string_limit = parsed.include_content && row.span_id === parsed.focus_span_id ? RUN_READER_CONTENT_LIMIT : RUN_READER_STRING_LIMIT;
321
+ return { depth, record: boundedRecord(recombineTraceRecord(row.metadata, content.get(row.span_id) ?? null), budget) };
322
+ });
323
+ return { run: publicRunRecord(run), nodes, ...flags(run, rows, tree.incomplete), next_cursor: null, limited: filtered.length > parsed.limit || Boolean(budget.limited) || budget.remaining <= 0 || budget.events <= 0 };
324
+ }
325
+ const logsCursorSchema = z.object({ time_ms: z.number(), id: z.string() });
326
+ function logCursor(log) { return Buffer.from(JSON.stringify({ time_ms: log.time_ms, id: log.id })).toString("base64url"); }
327
+ export async function getRunLogs(userId, id, options = {}) {
328
+ const parsed = validate(runLogsOptionsSchema, options);
329
+ const run = await resolve(userId, id);
330
+ const rows = scopedRows(run, await queryRunReaderSpans(userId, run));
331
+ const logs = [];
332
+ let cursor;
333
+ if (parsed.cursor) {
334
+ try {
335
+ cursor = logsCursorSchema.parse(JSON.parse(Buffer.from(parsed.cursor, "base64url").toString()));
336
+ }
337
+ catch {
338
+ throw new RunsError("invalid_input", "Invalid log cursor");
339
+ }
340
+ }
341
+ for (const row of rows) {
342
+ if (parsed.span_id && row.span_id !== parsed.span_id) {
343
+ continue;
344
+ }
345
+ const record = recombineTraceRecord(row.metadata, parsed.include_content ? row.content : null);
346
+ for (const [index, event] of record.events.entries()) {
347
+ const attrs = event.attributes ?? {};
348
+ const level = attrs["log.level"] ?? attrs.level;
349
+ const source = attrs["log.source"] ?? attrs.source;
350
+ const entry = { id: `${row.span_id}:${event.id ?? index}`, span_id: row.span_id, span_name: record.name, time_ms: event.time_ms, name: event.name,
351
+ level: typeof level === "string" ? level : null, source: typeof source === "string" ? source : null, attributes: attrs };
352
+ if ((parsed.level && entry.level !== parsed.level) || (parsed.source && entry.source !== parsed.source) || (parsed.since_ms !== undefined && entry.time_ms < parsed.since_ms) || (parsed.until_ms !== undefined && entry.time_ms > parsed.until_ms)) {
353
+ continue;
354
+ }
355
+ if (cursor && (entry.time_ms < cursor.time_ms || entry.time_ms === cursor.time_ms && entry.id <= cursor.id)) {
356
+ continue;
357
+ }
358
+ logs.push(entry);
359
+ }
360
+ }
361
+ logs.sort((a, b) => a.time_ms - b.time_ms || a.id.localeCompare(b.id));
362
+ const page = parsed.newest ? logs.slice(-parsed.limit) : logs.slice(0, parsed.limit);
363
+ const budget = { remaining: RUN_READER_CONTENT_LIMIT, string_limit: parsed.include_content && parsed.span_id ? RUN_READER_CONTENT_LIMIT : RUN_READER_STRING_LIMIT };
364
+ const spanIds = [...new Set(page.map((entry) => entry.span_id))];
365
+ const contentRows = parsed.include_content ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: spanIds.slice(0, 10) }) : [];
366
+ const contents = new Map();
367
+ for (const row of contentRows) {
368
+ for (const [index, event] of recombineTraceRecord(row.metadata, row.content).events.entries()) {
369
+ contents.set(`${row.span_id}:${event.id ?? index}`, event);
370
+ }
371
+ }
372
+ const bounded = page.map((entry) => {
373
+ const content = contents.get(entry.id);
374
+ const attrs = content?.attributes ?? entry.attributes;
375
+ return { ...entry, name: (content?.name ?? entry.name).slice(0, 200), attributes: boundedAttributes(attrs, budget) };
376
+ });
377
+ const last = page.at(-1);
378
+ return { run: publicRunRecord(run), logs: bounded, ...flags(run, rows), next_cursor: !parsed.newest && logs.length > parsed.limit && last ? logCursor(last) : null, limited: Boolean(budget.limited) || budget.remaining <= 0 || parsed.include_content && spanIds.length > 10 };
379
+ }
380
+ /** Polling reads latest snapshots. It deliberately never promises append-only replay. */
381
+ export async function readRunUpdates(userId, id, options = {}) {
382
+ const parsed = validate(runUpdatesOptionsSchema, options);
383
+ const run = await resolve(userId, id);
384
+ const all = scopedRows(run, await queryRunReaderSpans(userId, run));
385
+ const rows = all.filter((row) => row.cursor > parsed.cursor);
386
+ const page = [];
387
+ let eventCount = 0;
388
+ for (const row of rows) {
389
+ if (page.length >= (parsed.include_content ? Math.min(10, parsed.limit) : parsed.limit) || page.length > 0 && eventCount + row.metadata.events.length > 200) {
390
+ break;
391
+ }
392
+ page.push(row);
393
+ eventCount += row.metadata.events.length;
394
+ }
395
+ const budget = { remaining: RUN_READER_CONTENT_LIMIT, events: Math.max(200, eventCount) };
396
+ const contentRows = parsed.include_content ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: page.map((row) => row.span_id) }) : [];
397
+ const content = new Map(contentRows.map((row) => [row.span_id, row.content]));
398
+ const recordingFlags = flags(run, all);
399
+ return { run: publicRunRecord(run), ...recordingFlags, records: page.map((row) => ({ kind: validate(z.enum(["span_started", "span_updated", "span_ended", "span_event"]), row.update_kind),
400
+ record: boundedRecord(recombineTraceRecord(row.metadata, content.get(row.span_id) ?? null), budget, true), run_id: row.run_id, cursor: row.cursor,
401
+ content_expired: Boolean(row.content_expired), truncated: Boolean(row.truncated), incomplete: Boolean(row.incomplete) })), cursor: page.at(-1)?.cursor ?? parsed.cursor,
402
+ has_more: rows.length > page.length, resnapshot_required: true, limited: Boolean(budget.limited) || budget.remaining <= 0 || budget.events <= 0,
403
+ trace_settled: Boolean(run.root_span_id && all.some((row) => row.span_id === run.root_span_id && row.update_kind === "span_ended") && all.every((row) => row.update_kind === "span_ended")) };
404
+ }
405
+ export async function awaitRun(userId, id, options = {}) {
406
+ const parsed = validate(runAwaitOptionsSchema, options);
407
+ const deadline = Date.now() + parsed.timeout_ms;
408
+ while (true) {
409
+ if (options.signal?.aborted) {
410
+ throw new RunsError("aborted", "Waiting for run was aborted");
411
+ }
412
+ const run = await resolve(userId, id);
413
+ if (run.status !== "running") {
414
+ return getRun(userId, run.id);
415
+ }
416
+ const remaining = deadline - Date.now();
417
+ if (remaining <= 0) {
418
+ throw new RunsError("timeout", "Timed out waiting for run");
419
+ }
420
+ try {
421
+ await delay(Math.min(parsed.poll_interval_ms, remaining), undefined, { signal: options.signal });
422
+ }
423
+ catch (error) {
424
+ if (options.signal?.aborted) {
425
+ throw new RunsError("aborted", "Waiting for run was aborted");
426
+ }
427
+ throw error;
428
+ }
429
+ }
430
+ }
431
+ //# sourceMappingURL=runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import type { JsScriptOperationRunner } from "../app-debug/script-operation.js";
21
21
  import type { NodeRegistry } from "@nodetool-ai/node-sdk";
22
- import type { StorageAdapter } from "@nodetool-ai/runtime";
22
+ import { ProcessingContext, type StorageAdapter } from "@nodetool-ai/runtime";
23
23
  import type { AppWorkflowRecord, InteractionStep } from "../app-debug/index.js";
24
24
  /**
25
25
  * A refusal the caller turns into its own transport error. `code` is the
@@ -54,7 +54,7 @@ export interface AppDebugRequest {
54
54
  export interface AppDebugDeps {
55
55
  registry?: NodeRegistry;
56
56
  /** Load a workflow's graph by id, scoped to the user. */
57
- loadWorkflow?: (userId: string, id: string) => Promise<AppWorkflowRecord | null>;
57
+ loadWorkflow?: (userId: string, id: string, version?: number) => Promise<AppWorkflowRecord | null>;
58
58
  /** Load an application row by id. */
59
59
  loadApplication?: (userId: string, id: string) => Promise<{
60
60
  id: string;
@@ -67,6 +67,8 @@ export interface AppDebugDeps {
67
67
  * such an operation reports as unexecutable instead of being skipped.
68
68
  */
69
69
  runScript?: JsScriptOperationRunner;
70
+ context?: ProcessingContext;
71
+ scriptRunner?: (context: ProcessingContext, input: Parameters<JsScriptOperationRunner>[0]) => ReturnType<JsScriptOperationRunner>;
70
72
  /** The store `asset://<id>` inputs in the app's workflows resolve through. */
71
73
  assetStorage?: StorageAdapter | null;
72
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-debug-service.d.ts","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAc/B;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;IAD9C,YACW,IAAI,EAAE,eAAe,GAAG,WAAW,EAC5C,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACvC,qCAAqC;IACrC,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE;;;;OAIG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAmHD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,EACrB,eAAe,EAAE,YAAY,EAC7B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwFlC"}
1
+ {"version":3,"file":"app-debug-service.d.ts","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS9E,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAc/B;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;IAD9C,YACW,IAAI,EAAE,eAAe,GAAG,WAAW,EAC5C,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACvC,qCAAqC;IACrC,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE;;;;OAIG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAClI,8EAA8E;IAC9E,YAAY,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAgID;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,EACrB,eAAe,EAAE,YAAY,EAC7B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkGlC"}