@nodetool-ai/execution 0.8.1

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 (231) hide show
  1. package/README.md +129 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/app-debug/app-spec.d.ts +94 -0
  4. package/dist/app-debug/app-spec.d.ts.map +1 -0
  5. package/dist/app-debug/app-spec.js +710 -0
  6. package/dist/app-debug/app-spec.js.map +1 -0
  7. package/dist/app-debug/application-target.d.ts +53 -0
  8. package/dist/app-debug/application-target.d.ts.map +1 -0
  9. package/dist/app-debug/application-target.js +126 -0
  10. package/dist/app-debug/application-target.js.map +1 -0
  11. package/dist/app-debug/bundle-target.d.ts +21 -0
  12. package/dist/app-debug/bundle-target.d.ts.map +1 -0
  13. package/dist/app-debug/bundle-target.js +51 -0
  14. package/dist/app-debug/bundle-target.js.map +1 -0
  15. package/dist/app-debug/graph-shape.d.ts +14 -0
  16. package/dist/app-debug/graph-shape.d.ts.map +1 -0
  17. package/dist/app-debug/graph-shape.js +23 -0
  18. package/dist/app-debug/graph-shape.js.map +1 -0
  19. package/dist/app-debug/index.d.ts +26 -0
  20. package/dist/app-debug/index.d.ts.map +1 -0
  21. package/dist/app-debug/index.js +19 -0
  22. package/dist/app-debug/index.js.map +1 -0
  23. package/dist/app-debug/markdown.d.ts +6 -0
  24. package/dist/app-debug/markdown.d.ts.map +1 -0
  25. package/dist/app-debug/markdown.js +133 -0
  26. package/dist/app-debug/markdown.js.map +1 -0
  27. package/dist/app-debug/runtime.d.ts +267 -0
  28. package/dist/app-debug/runtime.d.ts.map +1 -0
  29. package/dist/app-debug/runtime.js +633 -0
  30. package/dist/app-debug/runtime.js.map +1 -0
  31. package/dist/app-debug/script-operation.d.ts +58 -0
  32. package/dist/app-debug/script-operation.d.ts.map +1 -0
  33. package/dist/app-debug/script-operation.js +44 -0
  34. package/dist/app-debug/script-operation.js.map +1 -0
  35. package/dist/app-debug/simulate.d.ts +85 -0
  36. package/dist/app-debug/simulate.d.ts.map +1 -0
  37. package/dist/app-debug/simulate.js +991 -0
  38. package/dist/app-debug/simulate.js.map +1 -0
  39. package/dist/app-debug/summarize.d.ts +64 -0
  40. package/dist/app-debug/summarize.d.ts.map +1 -0
  41. package/dist/app-debug/summarize.js +65 -0
  42. package/dist/app-debug/summarize.js.map +1 -0
  43. package/dist/app-debug/types.d.ts +343 -0
  44. package/dist/app-debug/types.d.ts.map +1 -0
  45. package/dist/app-debug/types.js +2 -0
  46. package/dist/app-debug/types.js.map +1 -0
  47. package/dist/cost-ledger.d.ts +147 -0
  48. package/dist/cost-ledger.d.ts.map +1 -0
  49. package/dist/cost-ledger.js +288 -0
  50. package/dist/cost-ledger.js.map +1 -0
  51. package/dist/debug/collector.d.ts +28 -0
  52. package/dist/debug/collector.d.ts.map +1 -0
  53. package/dist/debug/collector.js +284 -0
  54. package/dist/debug/collector.js.map +1 -0
  55. package/dist/debug/index.d.ts +15 -0
  56. package/dist/debug/index.d.ts.map +1 -0
  57. package/dist/debug/index.js +16 -0
  58. package/dist/debug/index.js.map +1 -0
  59. package/dist/debug/types.d.ts +179 -0
  60. package/dist/debug/types.d.ts.map +1 -0
  61. package/dist/debug/types.js +11 -0
  62. package/dist/debug/types.js.map +1 -0
  63. package/dist/debug/verdict.d.ts +27 -0
  64. package/dist/debug/verdict.d.ts.map +1 -0
  65. package/dist/debug/verdict.js +51 -0
  66. package/dist/debug/verdict.js.map +1 -0
  67. package/dist/executor-resolver.d.ts +13 -0
  68. package/dist/executor-resolver.d.ts.map +1 -0
  69. package/dist/executor-resolver.js +13 -0
  70. package/dist/executor-resolver.js.map +1 -0
  71. package/dist/fal-output-decoder.d.ts +36 -0
  72. package/dist/fal-output-decoder.d.ts.map +1 -0
  73. package/dist/fal-output-decoder.js +129 -0
  74. package/dist/fal-output-decoder.js.map +1 -0
  75. package/dist/generation-lifecycle.d.ts +54 -0
  76. package/dist/generation-lifecycle.d.ts.map +1 -0
  77. package/dist/generation-lifecycle.js +431 -0
  78. package/dist/generation-lifecycle.js.map +1 -0
  79. package/dist/generation-recovery-worker.d.ts +100 -0
  80. package/dist/generation-recovery-worker.d.ts.map +1 -0
  81. package/dist/generation-recovery-worker.js +995 -0
  82. package/dist/generation-recovery-worker.js.map +1 -0
  83. package/dist/generation-tracker.d.ts +83 -0
  84. package/dist/generation-tracker.d.ts.map +1 -0
  85. package/dist/generation-tracker.js +436 -0
  86. package/dist/generation-tracker.js.map +1 -0
  87. package/dist/index.d.ts +28 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +21 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/js-script-debug/index.d.ts +13 -0
  92. package/dist/js-script-debug/index.d.ts.map +1 -0
  93. package/dist/js-script-debug/index.js +12 -0
  94. package/dist/js-script-debug/index.js.map +1 -0
  95. package/dist/js-script-debug/markdown.d.ts +6 -0
  96. package/dist/js-script-debug/markdown.d.ts.map +1 -0
  97. package/dist/js-script-debug/markdown.js +62 -0
  98. package/dist/js-script-debug/markdown.js.map +1 -0
  99. package/dist/js-script-debug/outputs.d.ts +20 -0
  100. package/dist/js-script-debug/outputs.d.ts.map +1 -0
  101. package/dist/js-script-debug/outputs.js +30 -0
  102. package/dist/js-script-debug/outputs.js.map +1 -0
  103. package/dist/js-script-debug/report.d.ts +15 -0
  104. package/dist/js-script-debug/report.d.ts.map +1 -0
  105. package/dist/js-script-debug/report.js +90 -0
  106. package/dist/js-script-debug/report.js.map +1 -0
  107. package/dist/js-script-debug/types.d.ts +63 -0
  108. package/dist/js-script-debug/types.d.ts.map +1 -0
  109. package/dist/js-script-debug/types.js +10 -0
  110. package/dist/js-script-debug/types.js.map +1 -0
  111. package/dist/js-script-debug/validate.d.ts +38 -0
  112. package/dist/js-script-debug/validate.d.ts.map +1 -0
  113. package/dist/js-script-debug/validate.js +137 -0
  114. package/dist/js-script-debug/validate.js.map +1 -0
  115. package/dist/message-stream.d.ts +33 -0
  116. package/dist/message-stream.d.ts.map +1 -0
  117. package/dist/message-stream.js +58 -0
  118. package/dist/message-stream.js.map +1 -0
  119. package/dist/normalize-graph.d.ts +13 -0
  120. package/dist/normalize-graph.d.ts.map +1 -0
  121. package/dist/normalize-graph.js +63 -0
  122. package/dist/normalize-graph.js.map +1 -0
  123. package/dist/output-names.d.ts +13 -0
  124. package/dist/output-names.d.ts.map +1 -0
  125. package/dist/output-names.js +13 -0
  126. package/dist/output-names.js.map +1 -0
  127. package/dist/predicates.d.ts +6 -0
  128. package/dist/predicates.d.ts.map +1 -0
  129. package/dist/predicates.js +6 -0
  130. package/dist/predicates.js.map +1 -0
  131. package/dist/preflight.d.ts +87 -0
  132. package/dist/preflight.d.ts.map +1 -0
  133. package/dist/preflight.js +139 -0
  134. package/dist/preflight.js.map +1 -0
  135. package/dist/provider-secret-key.d.ts +3 -0
  136. package/dist/provider-secret-key.d.ts.map +1 -0
  137. package/dist/provider-secret-key.js +7 -0
  138. package/dist/provider-secret-key.js.map +1 -0
  139. package/dist/service/app-debug-service.d.ts +78 -0
  140. package/dist/service/app-debug-service.d.ts.map +1 -0
  141. package/dist/service/app-debug-service.js +201 -0
  142. package/dist/service/app-debug-service.js.map +1 -0
  143. package/dist/service/app-run-server.d.ts +28 -0
  144. package/dist/service/app-run-server.d.ts.map +1 -0
  145. package/dist/service/app-run-server.js +104 -0
  146. package/dist/service/app-run-server.js.map +1 -0
  147. package/dist/service/debug-sessions.d.ts +158 -0
  148. package/dist/service/debug-sessions.d.ts.map +1 -0
  149. package/dist/service/debug-sessions.js +358 -0
  150. package/dist/service/debug-sessions.js.map +1 -0
  151. package/dist/service/index.d.ts +22 -0
  152. package/dist/service/index.d.ts.map +1 -0
  153. package/dist/service/index.js +17 -0
  154. package/dist/service/index.js.map +1 -0
  155. package/dist/service/job-progress.d.ts +40 -0
  156. package/dist/service/job-progress.d.ts.map +1 -0
  157. package/dist/service/job-progress.js +53 -0
  158. package/dist/service/job-progress.js.map +1 -0
  159. package/dist/service/workflow-run.d.ts +279 -0
  160. package/dist/service/workflow-run.d.ts.map +1 -0
  161. package/dist/service/workflow-run.js +598 -0
  162. package/dist/service/workflow-run.js.map +1 -0
  163. package/dist/service/workflow-workspace.d.ts +89 -0
  164. package/dist/service/workflow-workspace.d.ts.map +1 -0
  165. package/dist/service/workflow-workspace.js +160 -0
  166. package/dist/service/workflow-workspace.js.map +1 -0
  167. package/dist/session.d.ts +62 -0
  168. package/dist/session.d.ts.map +1 -0
  169. package/dist/session.js +353 -0
  170. package/dist/session.js.map +1 -0
  171. package/dist/sketch-debug/index.d.ts +11 -0
  172. package/dist/sketch-debug/index.d.ts.map +1 -0
  173. package/dist/sketch-debug/index.js +10 -0
  174. package/dist/sketch-debug/index.js.map +1 -0
  175. package/dist/sketch-debug/markdown.d.ts +6 -0
  176. package/dist/sketch-debug/markdown.d.ts.map +1 -0
  177. package/dist/sketch-debug/markdown.js +93 -0
  178. package/dist/sketch-debug/markdown.js.map +1 -0
  179. package/dist/sketch-debug/report.d.ts +15 -0
  180. package/dist/sketch-debug/report.d.ts.map +1 -0
  181. package/dist/sketch-debug/report.js +98 -0
  182. package/dist/sketch-debug/report.js.map +1 -0
  183. package/dist/sketch-debug/types.d.ts +62 -0
  184. package/dist/sketch-debug/types.d.ts.map +1 -0
  185. package/dist/sketch-debug/types.js +10 -0
  186. package/dist/sketch-debug/types.js.map +1 -0
  187. package/dist/sketch-debug/validate.d.ts +14 -0
  188. package/dist/sketch-debug/validate.d.ts.map +1 -0
  189. package/dist/sketch-debug/validate.js +478 -0
  190. package/dist/sketch-debug/validate.js.map +1 -0
  191. package/dist/supervisor.d.ts +45 -0
  192. package/dist/supervisor.d.ts.map +1 -0
  193. package/dist/supervisor.js +97 -0
  194. package/dist/supervisor.js.map +1 -0
  195. package/dist/timeline-debug/index.d.ts +11 -0
  196. package/dist/timeline-debug/index.d.ts.map +1 -0
  197. package/dist/timeline-debug/index.js +10 -0
  198. package/dist/timeline-debug/index.js.map +1 -0
  199. package/dist/timeline-debug/legibility.d.ts +23 -0
  200. package/dist/timeline-debug/legibility.d.ts.map +1 -0
  201. package/dist/timeline-debug/legibility.js +240 -0
  202. package/dist/timeline-debug/legibility.js.map +1 -0
  203. package/dist/timeline-debug/markdown.d.ts +6 -0
  204. package/dist/timeline-debug/markdown.d.ts.map +1 -0
  205. package/dist/timeline-debug/markdown.js +103 -0
  206. package/dist/timeline-debug/markdown.js.map +1 -0
  207. package/dist/timeline-debug/motion.d.ts +20 -0
  208. package/dist/timeline-debug/motion.d.ts.map +1 -0
  209. package/dist/timeline-debug/motion.js +362 -0
  210. package/dist/timeline-debug/motion.js.map +1 -0
  211. package/dist/timeline-debug/report.d.ts +16 -0
  212. package/dist/timeline-debug/report.d.ts.map +1 -0
  213. package/dist/timeline-debug/report.js +100 -0
  214. package/dist/timeline-debug/report.js.map +1 -0
  215. package/dist/timeline-debug/showcase.d.ts +7 -0
  216. package/dist/timeline-debug/showcase.d.ts.map +1 -0
  217. package/dist/timeline-debug/showcase.js +347 -0
  218. package/dist/timeline-debug/showcase.js.map +1 -0
  219. package/dist/timeline-debug/types.d.ts +64 -0
  220. package/dist/timeline-debug/types.d.ts.map +1 -0
  221. package/dist/timeline-debug/types.js +10 -0
  222. package/dist/timeline-debug/types.js.map +1 -0
  223. package/dist/timeline-debug/validate.d.ts +24 -0
  224. package/dist/timeline-debug/validate.d.ts.map +1 -0
  225. package/dist/timeline-debug/validate.js +1432 -0
  226. package/dist/timeline-debug/validate.js.map +1 -0
  227. package/dist/types.d.ts +211 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +2 -0
  230. package/dist/types.js.map +1 -0
  231. package/package.json +103 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/js-script-debug/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Turns `ProcessingContext`'s push-based `addMessageListener` into a pull-based
3
+ * `AsyncIterable<ProcessingMessage>`. Modeled on the queue/wake pattern in
4
+ * `packages/workflow-runner/src/run.ts`'s `runWorkflow` generator — the one
5
+ * other place in the repo already streams a kernel run as an async sequence.
6
+ *
7
+ * The queue is bounded. A caller that opts into capture (see
8
+ * `ExecutionSessionOptions.captureMessages`) but never iterates would
9
+ * otherwise retain every message of the run — including real-time audio
10
+ * chunks, which the kernel's own message retention deliberately avoids
11
+ * holding (roughly 25 MB/minute). Past the limit the stream stops queueing
12
+ * and the iterator throws, so a non-draining consumer fails loudly instead of
13
+ * growing until the run ends.
14
+ */
15
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
16
+ import type { ProcessingMessage } from "@nodetool-ai/protocol";
17
+ /** Queued messages allowed to pile up before the stream gives up. */
18
+ export declare const DEFAULT_MESSAGE_BUFFER_LIMIT = 10000;
19
+ export declare class MessageStream implements AsyncIterable<ProcessingMessage> {
20
+ private readonly queue;
21
+ private waiter;
22
+ private closed;
23
+ private overflowedAt;
24
+ private readonly limit;
25
+ private readonly unsubscribe;
26
+ /** `limit` of 0 (or a negative number) means unbounded. */
27
+ constructor(context: ProcessingContext, limit?: number);
28
+ private wake;
29
+ /** Stop feeding new messages into the queue. Already-queued messages still drain. */
30
+ close(): void;
31
+ [Symbol.asyncIterator](): AsyncIterator<ProcessingMessage>;
32
+ }
33
+ //# sourceMappingURL=message-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qEAAqE;AACrE,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,qBAAa,aAAc,YAAW,aAAa,CAAC,iBAAiB,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,2DAA2D;IAC3D,YAAY,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAA+B,EAa3E;IAED,OAAO,CAAC,IAAI;IAMZ,qFAAqF;IACrF,KAAK,IAAI,IAAI,CAKZ;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAmBhE;CACF"}
@@ -0,0 +1,58 @@
1
+ /** Queued messages allowed to pile up before the stream gives up. */
2
+ export const DEFAULT_MESSAGE_BUFFER_LIMIT = 10_000;
3
+ export class MessageStream {
4
+ queue = [];
5
+ waiter = null;
6
+ closed = false;
7
+ overflowedAt = null;
8
+ limit;
9
+ unsubscribe;
10
+ /** `limit` of 0 (or a negative number) means unbounded. */
11
+ constructor(context, limit = DEFAULT_MESSAGE_BUFFER_LIMIT) {
12
+ this.limit = limit > 0 ? limit : Number.POSITIVE_INFINITY;
13
+ this.unsubscribe = context.addMessageListener((message) => {
14
+ if (this.queue.length >= this.limit) {
15
+ if (this.overflowedAt === null) {
16
+ this.overflowedAt = this.queue.length;
17
+ this.unsubscribe();
18
+ }
19
+ return;
20
+ }
21
+ this.queue.push(message);
22
+ this.wake();
23
+ });
24
+ }
25
+ wake() {
26
+ const w = this.waiter;
27
+ this.waiter = null;
28
+ w?.();
29
+ }
30
+ /** Stop feeding new messages into the queue. Already-queued messages still drain. */
31
+ close() {
32
+ if (this.closed)
33
+ return;
34
+ this.closed = true;
35
+ this.unsubscribe();
36
+ this.wake();
37
+ }
38
+ async *[Symbol.asyncIterator]() {
39
+ for (;;) {
40
+ while (this.queue.length > 0) {
41
+ yield this.queue.shift();
42
+ }
43
+ if (this.overflowedAt !== null) {
44
+ throw new Error(`ExecutionSession message stream overflowed after ${this.overflowedAt} ` +
45
+ `queued messages (limit ${this.limit}) — the consumer fell behind, ` +
46
+ "so messages past that point were dropped rather than retained. " +
47
+ "Iterate `session.messages` as the run progresses, or raise " +
48
+ "`limits.messageBufferLimit`.");
49
+ }
50
+ if (this.closed)
51
+ return;
52
+ await new Promise((resolve) => {
53
+ this.waiter = resolve;
54
+ });
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=message-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-stream.js","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAiBA,qEAAqE;AACrE,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD,MAAM,OAAO,aAAa;IACP,KAAK,GAAwB,EAAE,CAAC;IACzC,MAAM,GAAwB,IAAI,CAAC;IACnC,MAAM,GAAG,KAAK,CAAC;IACf,YAAY,GAAkB,IAAI,CAAC;IAC1B,KAAK,CAAS;IACd,WAAW,CAAa;IAEzC,2DAA2D;IAC3D,YAAY,OAA0B,EAAE,KAAK,GAAG,4BAA4B;QAC1E,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE;YACxD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,CAAC,EAAE,EAAE,CAAC;IACR,CAAC;IAED,qFAAqF;IACrF,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,SAAS,CAAC;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,oDAAoD,IAAI,CAAC,YAAY,GAAG;oBACtE,0BAA0B,IAAI,CAAC,KAAK,gCAAgC;oBACpE,iEAAiE;oBACjE,6DAA6D;oBAC7D,8BAA8B,CACjC,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { GraphData } from "@nodetool-ai/protocol";
2
+ import type { RawGraphInput } from "./types.js";
3
+ /**
4
+ * Present an already-typed graph as the facade's raw input.
5
+ *
6
+ * `RawGraphInput` describes saved-graph JSON, so its elements are indexable
7
+ * records; `NodeDescriptor` and `Edge` are not. A shallow copy per element
8
+ * bridges the two without asserting one is the other — the normalizer copies
9
+ * every element anyway, so nothing is paid twice.
10
+ */
11
+ export declare function toRawGraphInput(graph: GraphData): RawGraphInput;
12
+ export declare function normalizeGraph(graph: RawGraphInput): GraphData;
13
+ //# sourceMappingURL=normalize-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-graph.d.ts","sourceRoot":"","sources":["../src/normalize-graph.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAQ,SAAS,EAAkB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAK/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CA4C9D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Normalize a raw saved graph into the kernel's descriptor contract: node
3
+ * properties under `properties` (the editor stores them under `data`), edges
4
+ * carrying `edge_type`, and editor-only nodes (Comment/Group/Reroute) pruned
5
+ * the way the web editor prunes them at serialize time.
6
+ *
7
+ * Ported from `packages/websocket/src/headless-job-runner.ts`'s
8
+ * `normalizeRunnableGraph` / `packages/cli/src/debug/server-runner.ts`'s
9
+ * inline filter — the two call sites this logic drifted between before this
10
+ * package existed.
11
+ */
12
+ import { isEditorOnlyType } from "@nodetool-ai/node-sdk";
13
+ /**
14
+ * Present an already-typed graph as the facade's raw input.
15
+ *
16
+ * `RawGraphInput` describes saved-graph JSON, so its elements are indexable
17
+ * records; `NodeDescriptor` and `Edge` are not. A shallow copy per element
18
+ * bridges the two without asserting one is the other — the normalizer copies
19
+ * every element anyway, so nothing is paid twice.
20
+ */
21
+ export function toRawGraphInput(graph) {
22
+ return {
23
+ nodes: graph.nodes.map((n) => Object.fromEntries(Object.entries(n))),
24
+ edges: graph.edges.map((e) => Object.fromEntries(Object.entries(e)))
25
+ };
26
+ }
27
+ export function normalizeGraph(graph) {
28
+ // `RawGraphInput` declares two arrays; the stored row or file behind it has
29
+ // never been checked against that, and a non-array used to reach `.filter()`.
30
+ if (!Array.isArray(graph?.nodes) || !Array.isArray(graph?.edges)) {
31
+ throw new Error("Invalid workflow: nodes and edges must be arrays");
32
+ }
33
+ const executable = graph.nodes.filter((n) => !isEditorOnlyType(String(n["type"] ?? "")));
34
+ const keep = new Set(executable.map((n) => String(n["id"] ?? "")));
35
+ const nodes = executable.map((n) => {
36
+ const record = { ...n };
37
+ if (record["properties"] === undefined && record["data"] !== undefined) {
38
+ const { data, ...rest } = record;
39
+ // SAFETY: the editor stores a node's inputs under `data` and the kernel
40
+ // reads them under `properties`; renaming that one key is the only
41
+ // difference between a saved node and a NodeDescriptor.
42
+ return { ...rest, properties: data };
43
+ }
44
+ // SAFETY: a saved node that already carries `properties` is a
45
+ // NodeDescriptor as stored — `id` and `type` are written on every save.
46
+ return record;
47
+ });
48
+ const edges = graph.edges
49
+ .filter((e) => keep.has(String(e["source"] ?? "")) &&
50
+ keep.has(String(e["target"] ?? "")))
51
+ .map((e) => {
52
+ const record = { ...e };
53
+ const rawEdgeType = record["edge_type"] ?? record["type"];
54
+ const edge_type = rawEdgeType === "control" ? "control" : "data";
55
+ const { type: _type, ...rest } = record;
56
+ // SAFETY: `keep` above already proved this edge's source and target are
57
+ // strings naming retained nodes; `edge_type` is normalized just above,
58
+ // and Edge carries an index signature for whatever else was saved.
59
+ return { ...rest, edge_type };
60
+ });
61
+ return { nodes, edges };
62
+ }
63
+ //# sourceMappingURL=normalize-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-graph.js","sourceRoot":"","sources":["../src/normalize-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Renames terminal Output-node keys to their public `properties.name` before
3
+ * the run starts. The kernel keys terminal outputs by `node.name`; SDK/API
4
+ * callers that need `output_update`/terminal-result addressing to agree with
5
+ * their declared interface names set `requireTerminalResult`.
6
+ *
7
+ * Ported from `websocket-client-session.ts`'s `startJobInner`
8
+ * (`req.require_terminal_result` branch) — the only site that did this
9
+ * before this package existed.
10
+ */
11
+ import type { HydratedGraphData } from "@nodetool-ai/protocol";
12
+ export declare function rewriteOutputNames(graph: HydratedGraphData): void;
13
+ //# sourceMappingURL=output-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-names.d.ts","sourceRoot":"","sources":["../src/output-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CASjE"}
@@ -0,0 +1,13 @@
1
+ import { isNonBlankString } from "./predicates.js";
2
+ export function rewriteOutputNames(graph) {
3
+ for (const node of graph.nodes) {
4
+ if (!node.type.startsWith("nodetool.output."))
5
+ continue;
6
+ const properties = node.properties;
7
+ const publicName = properties?.["name"];
8
+ if (isNonBlankString(publicName)) {
9
+ node.name = publicName;
10
+ }
11
+ }
12
+ }
13
+ //# sourceMappingURL=output-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-names.js","sourceRoot":"","sources":["../src/output-names.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,SAAS;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,UAA4C,CAAC;QACrE,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The workspace's named type predicates, re-exported for the debug harnesses'
3
+ * call sites. The definitions live in `@nodetool-ai/protocol`.
4
+ */
5
+ export { isBoolean, isFiniteNumber, isNonBlankString, isNonEmptyString, isNumber, isObjectLike, isPositiveFiniteNumber, isRecord, isString, isCallable as isFunctionValue } from "@nodetool-ai/protocol";
6
+ //# sourceMappingURL=predicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../src/predicates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,UAAU,IAAI,eAAe,EAC9B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The workspace's named type predicates, re-exported for the debug harnesses'
3
+ * call sites. The definitions live in `@nodetool-ai/protocol`.
4
+ */
5
+ export { isBoolean, isFiniteNumber, isNonBlankString, isNonEmptyString, isNumber, isObjectLike, isPositiveFiniteNumber, isRecord, isString, isCallable as isFunctionValue } from "@nodetool-ai/protocol";
6
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../src/predicates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,UAAU,IAAI,eAAe,EAC9B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,87 @@
1
+ /** Provider/model catalogs the preflight checks a graph's selections against. */
2
+ export interface RunModelCatalogs {
3
+ listProviderIds: () => readonly string[];
4
+ listModelIds: (provider: string, modelType: string) => readonly string[] | undefined;
5
+ }
6
+ /** The catalogs of the process-wide provider registry. */
7
+ export declare const RUNTIME_CATALOGS: RunModelCatalogs;
8
+ /** Model selections in a graph that no configured provider can honour. */
9
+ export declare function modelSelectionErrors(graph: {
10
+ nodes?: unknown;
11
+ }, catalogs?: RunModelCatalogs): string[];
12
+ /** How the preflight resolves a credential — the way the coming run will. */
13
+ export interface CredentialResolver {
14
+ resolveSecret: (key: string) => Promise<string | null | undefined> | string | null | undefined;
15
+ }
16
+ /**
17
+ * Providers a graph selects whose required credentials this runtime cannot
18
+ * resolve, one message each.
19
+ *
20
+ * The provider registry knows exactly which kwargs are load-bearing (an empty
21
+ * declaration means "resolve from store, then env"), and a provider built
22
+ * without one throws the `*_API_KEY is required` error mid-run that this check
23
+ * exists to front-run. Unregistered ids are skipped: the model-selection check
24
+ * already reports those as errors, and guessing at an unknown provider's
25
+ * credentials would be noise.
26
+ */
27
+ export declare function unconfiguredProviderErrors(graph: {
28
+ nodes?: unknown;
29
+ edges?: unknown;
30
+ }, resolver: CredentialResolver, providerIds?: readonly string[]): Promise<string[]>;
31
+ /**
32
+ * How the preflight decides whether a provider a graph selects is configured.
33
+ *
34
+ * Defaults to {@link unconfiguredProviderErrors} over the process-wide
35
+ * provider registry. A host whose providers are not in that registry (a
36
+ * cassette, a fake, an in-process custom provider) supplies its own — together
37
+ * with its own {@link RunModelCatalogs}, since the two checks read the same
38
+ * registry.
39
+ */
40
+ export type ProviderConfigurationChecker = (graph: {
41
+ nodes?: unknown;
42
+ edges?: unknown;
43
+ }, resolver: CredentialResolver) => Promise<readonly string[]> | readonly string[];
44
+ /** A checker over an explicit provider list, for a host with its own registry. */
45
+ export declare function providerConfigurationChecker(providerIds: readonly string[]): ProviderConfigurationChecker;
46
+ export type PreflightIssueKind = "model" | "credential";
47
+ /** One reason a run was refused before it started. */
48
+ export interface ExecutionPreflightIssue {
49
+ kind: PreflightIssueKind;
50
+ message: string;
51
+ }
52
+ /** The refusal text every host prints — one section per issue kind. */
53
+ export declare function formatPreflightDetail(issues: readonly ExecutionPreflightIssue[]): string;
54
+ /**
55
+ * The refusal contract shared by `ExecutionSession`, the run service, and the
56
+ * CLI adapters: a typed error whose `issues` are machine-readable and whose
57
+ * `message` is the text a host prints verbatim.
58
+ */
59
+ export declare class ExecutionPreflightError extends Error {
60
+ readonly name = "ExecutionPreflightError";
61
+ readonly issues: readonly ExecutionPreflightIssue[];
62
+ constructor(issues: readonly ExecutionPreflightIssue[]);
63
+ }
64
+ export declare function isExecutionPreflightError(value: unknown): value is ExecutionPreflightError;
65
+ export interface PreflightOptions {
66
+ catalogs?: RunModelCatalogs;
67
+ providerConfiguration?: ProviderConfigurationChecker;
68
+ /** Resolves a credential the way the coming run will. */
69
+ resolveSecret: CredentialResolver["resolveSecret"];
70
+ }
71
+ /**
72
+ * Every reason to refuse `graph`, model selections first.
73
+ *
74
+ * A graph whose model selections are already unhonourable stops there: a
75
+ * provider that is not registered has no credentials to check, so running the
76
+ * second check would only add noise to a refusal that is already decided.
77
+ */
78
+ export declare function collectPreflightIssues(graph: {
79
+ nodes?: unknown;
80
+ edges?: unknown;
81
+ }, options: PreflightOptions): Promise<ExecutionPreflightIssue[]>;
82
+ /** {@link collectPreflightIssues}, as a refusal. */
83
+ export declare function assertPreflight(graph: {
84
+ nodes?: unknown;
85
+ edges?: unknown;
86
+ }, options: PreflightOptions): Promise<void>;
87
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Run preflight — the checks that must refuse a graph *before* anything is
3
+ * paid for.
4
+ *
5
+ * A graph that names a provider this runtime does not have, or a model that
6
+ * provider does not offer, or a credential nobody stored, fails at the node
7
+ * that needs it — after the upstream half of the graph has already run and
8
+ * billed. Both checks front-run that failure, and both live here (rather than
9
+ * in the run service) so `ExecutionSession` can call them without importing
10
+ * the models database.
11
+ *
12
+ * Both fail toward silence: an empty provider registry means the registry
13
+ * could not be reached, and an unregistered provider id is left to the
14
+ * model-selection check rather than guessed at.
15
+ */
16
+ import { rewriteBypassedNodes } from "@nodetool-ai/kernel";
17
+ import { collectModelProviders, collectModelSelectionIssues } from "@nodetool-ai/node-sdk";
18
+ import { getProviderSecretKey, isProviderConfigured, listOfflineModelIds, listRegisteredProviderIds } from "@nodetool-ai/runtime";
19
+ import { normalizeGraph } from "./normalize-graph.js";
20
+ import { isRecord } from "./predicates.js";
21
+ /** The catalogs of the process-wide provider registry. */
22
+ export const RUNTIME_CATALOGS = {
23
+ listProviderIds: () => listRegisteredProviderIds(),
24
+ listModelIds: (provider, modelType) => listOfflineModelIds(provider, modelType)
25
+ };
26
+ /** Model selections in a graph that no configured provider can honour. */
27
+ export function modelSelectionErrors(graph, catalogs = RUNTIME_CATALOGS) {
28
+ const nodes = graph.nodes;
29
+ if (!Array.isArray(nodes))
30
+ return [];
31
+ return collectModelSelectionIssues({ nodes: nodes }, catalogs)
32
+ .filter((issue) => issue.severity === "error")
33
+ .map((issue) => `Node "${issue.nodeId}" (${issue.nodeType}): ${issue.message}`);
34
+ }
35
+ /**
36
+ * Providers a graph selects whose required credentials this runtime cannot
37
+ * resolve, one message each.
38
+ *
39
+ * The provider registry knows exactly which kwargs are load-bearing (an empty
40
+ * declaration means "resolve from store, then env"), and a provider built
41
+ * without one throws the `*_API_KEY is required` error mid-run that this check
42
+ * exists to front-run. Unregistered ids are skipped: the model-selection check
43
+ * already reports those as errors, and guessing at an unknown provider's
44
+ * credentials would be noise.
45
+ */
46
+ export async function unconfiguredProviderErrors(graph, resolver, providerIds = listRegisteredProviderIds()) {
47
+ const nodes = graph.nodes;
48
+ if (!Array.isArray(nodes))
49
+ return [];
50
+ const graphNodes = nodes.filter(isRecord);
51
+ const graphEdges = Array.isArray(graph.edges)
52
+ ? graph.edges.filter(isRecord)
53
+ : [];
54
+ const effectiveGraph = rewriteBypassedNodes(normalizeGraph({ nodes: graphNodes, edges: graphEdges }));
55
+ const known = new Set(providerIds);
56
+ const errors = [];
57
+ for (const provider of collectModelProviders({
58
+ nodes: effectiveGraph.nodes,
59
+ edges: effectiveGraph.edges
60
+ })) {
61
+ if (!known.has(provider))
62
+ continue;
63
+ if (await isProviderConfigured(provider, (key) => resolver.resolveSecret(key))) {
64
+ continue;
65
+ }
66
+ const keyName = getProviderSecretKey(provider);
67
+ errors.push(keyName
68
+ ? `Provider "${provider}" needs "${keyName}", which is not set on ` +
69
+ "this server. Store the secret " +
70
+ `"${keyName}" for this user (Settings → Credentials), or switch ` +
71
+ "the model to a provider you have configured."
72
+ : `Provider "${provider}" is missing its required configuration ` +
73
+ "(base URL or credential) on this server. Complete it in " +
74
+ "Settings → Providers before running.");
75
+ }
76
+ return errors;
77
+ }
78
+ /** A checker over an explicit provider list, for a host with its own registry. */
79
+ export function providerConfigurationChecker(providerIds) {
80
+ return (graph, resolver) => unconfiguredProviderErrors(graph, resolver, providerIds);
81
+ }
82
+ const HEADINGS = {
83
+ model: "Workflow selects providers or models this runtime cannot honour:",
84
+ credential: "Workflow selects providers whose credentials are not configured:"
85
+ };
86
+ /** The refusal text every host prints — one section per issue kind. */
87
+ export function formatPreflightDetail(issues) {
88
+ const sections = [];
89
+ for (const kind of ["model", "credential"]) {
90
+ const messages = issues
91
+ .filter((issue) => issue.kind === kind)
92
+ .map((issue) => issue.message);
93
+ if (messages.length > 0) {
94
+ sections.push(`${HEADINGS[kind]}\n${messages.join("\n")}`);
95
+ }
96
+ }
97
+ return sections.join("\n\n");
98
+ }
99
+ /**
100
+ * The refusal contract shared by `ExecutionSession`, the run service, and the
101
+ * CLI adapters: a typed error whose `issues` are machine-readable and whose
102
+ * `message` is the text a host prints verbatim.
103
+ */
104
+ export class ExecutionPreflightError extends Error {
105
+ name = "ExecutionPreflightError";
106
+ issues;
107
+ constructor(issues) {
108
+ super(formatPreflightDetail(issues));
109
+ this.issues = issues;
110
+ }
111
+ }
112
+ export function isExecutionPreflightError(value) {
113
+ return value instanceof ExecutionPreflightError;
114
+ }
115
+ /**
116
+ * Every reason to refuse `graph`, model selections first.
117
+ *
118
+ * A graph whose model selections are already unhonourable stops there: a
119
+ * provider that is not registered has no credentials to check, so running the
120
+ * second check would only add noise to a refusal that is already decided.
121
+ */
122
+ export async function collectPreflightIssues(graph, options) {
123
+ const models = modelSelectionErrors(graph, options.catalogs);
124
+ if (models.length > 0) {
125
+ return models.map((message) => ({ kind: "model", message }));
126
+ }
127
+ const checker = options.providerConfiguration ?? unconfiguredProviderErrors;
128
+ const credentials = await checker(graph, {
129
+ resolveSecret: options.resolveSecret
130
+ });
131
+ return credentials.map((message) => ({ kind: "credential", message }));
132
+ }
133
+ /** {@link collectPreflightIssues}, as a refusal. */
134
+ export async function assertPreflight(graph, options) {
135
+ const issues = await collectPreflightIssues(graph, options);
136
+ if (issues.length > 0)
137
+ throw new ExecutionPreflightError(issues);
138
+ }
139
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Resolve FAL's configured key for both its node and generic provider IDs. */
2
+ export declare function providerBillingSecretKey(provider: string): string;
3
+ //# sourceMappingURL=provider-secret-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-secret-key.d.ts","sourceRoot":"","sources":["../src/provider-secret-key.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjE"}
@@ -0,0 +1,7 @@
1
+ /** Resolve FAL's configured key for both its node and generic provider IDs. */
2
+ export function providerBillingSecretKey(provider) {
3
+ return provider === "fal_ai"
4
+ ? "FAL_API_KEY"
5
+ : `${provider.toUpperCase()}_API_KEY`;
6
+ }
7
+ //# sourceMappingURL=provider-secret-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-secret-key.js","sourceRoot":"","sources":["../src/provider-secret-key.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,OAAO,QAAQ,KAAK,QAAQ;QAC1B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * `nodetool app debug` as a service — the engine behind
3
+ * `POST /api/applications/debug` and the `debug_app` agent tool.
4
+ *
5
+ * The simulation itself is `simulateApp`, unchanged: this module supplies the
6
+ * three things it cannot get for itself — the target (an application row, or
7
+ * the document the caller posted inline), the workflow loader its operations
8
+ * resolve against, and a kernel runner for the runs.
9
+ *
10
+ * The inline `document` path is the one that matters for an editor assistant.
11
+ * A draft lives in the browser until the user saves, so anything keyed on
12
+ * `application_id` grades a stale row — a verdict that lies exactly when the
13
+ * assistant is mid-edit.
14
+ *
15
+ * A run with `run: true` executes real workflows, so it can take minutes:
16
+ * `poll: true` fronts it with the same session registry a build uses. A
17
+ * simulation parks no escalations, so its session only ever reports `running`
18
+ * or `done`.
19
+ */
20
+ import type { JsScriptOperationRunner } from "../app-debug/script-operation.js";
21
+ import type { NodeRegistry } from "@nodetool-ai/node-sdk";
22
+ import type { StorageAdapter } from "@nodetool-ai/runtime";
23
+ import type { AppWorkflowRecord, InteractionStep } from "../app-debug/index.js";
24
+ /**
25
+ * A refusal the caller turns into its own transport error. `code` is the
26
+ * vocabulary the HTTP layer maps onto `ApiErrorCode`; nothing here knows about
27
+ * Fastify or tRPC.
28
+ */
29
+ export declare class AppServiceError extends Error {
30
+ readonly code: "invalid_input" | "not_found";
31
+ constructor(code: "invalid_input" | "not_found", message: string);
32
+ }
33
+ /** The request body of `POST /api/applications/debug`. */
34
+ export interface AppDebugRequest {
35
+ /** A saved application, read from the row. Either this or `document`. */
36
+ application_id?: string;
37
+ /** The live draft, verbatim. Either this or `application_id`. */
38
+ document?: unknown;
39
+ /** Reactive values applied before the interactions, keyed by input name. */
40
+ params?: Record<string, unknown>;
41
+ /** The interaction script. Omitted, the app's natural run trigger fires. */
42
+ interact?: InteractionStep[];
43
+ /** Execute workflow runs (default true). false = static wiring check only. */
44
+ run?: boolean;
45
+ /** Per-run timeout, ms. */
46
+ timeout_ms?: number;
47
+ /**
48
+ * Return a session id as soon as the simulation starts instead of holding
49
+ * the request open for it. The caller then polls the debug-session endpoints.
50
+ */
51
+ poll?: boolean;
52
+ }
53
+ /** Test seams. Production passes none of these. */
54
+ export interface AppDebugDeps {
55
+ registry?: NodeRegistry;
56
+ /** Load a workflow's graph by id, scoped to the user. */
57
+ loadWorkflow?: (userId: string, id: string) => Promise<AppWorkflowRecord | null>;
58
+ /** Load an application row by id. */
59
+ loadApplication?: (userId: string, id: string) => Promise<{
60
+ id: string;
61
+ name: string;
62
+ document: unknown;
63
+ } | null>;
64
+ /**
65
+ * Execute a script operation. Running a sandbox body lives above this
66
+ * package, so a host that wants script operations passes one in; without it
67
+ * such an operation reports as unexecutable instead of being skipped.
68
+ */
69
+ runScript?: JsScriptOperationRunner;
70
+ /** The store `asset://<id>` inputs in the app's workflows resolve through. */
71
+ assetStorage?: StorageAdapter | null;
72
+ }
73
+ /**
74
+ * Debug an app. Resolves with the compacted report (plus the session id), or —
75
+ * with `poll: true` — with the session id as soon as the run is under way.
76
+ */
77
+ export declare function runApplicationDebug(userId: string, body: AppDebugRequest, defaultRegistry: NodeRegistry, deps?: AppDebugDeps): Promise<Record<string, unknown>>;
78
+ //# sourceMappingURL=app-debug-service.d.ts.map
@@ -0,0 +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"}