@nodetool-ai/execution 0.8.1 → 0.8.2

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 (158) 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 +14 -3
  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 +57 -26
  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/generation-lifecycle.d.ts +5 -4
  55. package/dist/generation-lifecycle.d.ts.map +1 -1
  56. package/dist/generation-lifecycle.js +71 -10
  57. package/dist/generation-lifecycle.js.map +1 -1
  58. package/dist/generation-recovery-worker.d.ts.map +1 -1
  59. package/dist/generation-recovery-worker.js +2 -0
  60. package/dist/generation-recovery-worker.js.map +1 -1
  61. package/dist/generation-tracker.d.ts +2 -15
  62. package/dist/generation-tracker.d.ts.map +1 -1
  63. package/dist/generation-tracker.js +92 -6
  64. package/dist/generation-tracker.js.map +1 -1
  65. package/dist/index.d.ts +9 -2
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +6 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/js-script-debug/index.d.ts +1 -0
  70. package/dist/js-script-debug/index.d.ts.map +1 -1
  71. package/dist/js-script-debug/index.js +1 -0
  72. package/dist/js-script-debug/index.js.map +1 -1
  73. package/dist/js-script-debug/type-check.d.ts +16 -0
  74. package/dist/js-script-debug/type-check.d.ts.map +1 -0
  75. package/dist/js-script-debug/type-check.js +139 -0
  76. package/dist/js-script-debug/type-check.js.map +1 -0
  77. package/dist/js-script-debug/validate.d.ts +8 -0
  78. package/dist/js-script-debug/validate.d.ts.map +1 -1
  79. package/dist/js-script-debug/validate.js +4 -0
  80. package/dist/js-script-debug/validate.js.map +1 -1
  81. package/dist/message-stream.d.ts +1 -32
  82. package/dist/message-stream.d.ts.map +1 -1
  83. package/dist/message-stream.js +1 -57
  84. package/dist/message-stream.js.map +1 -1
  85. package/dist/preflight.d.ts +43 -2
  86. package/dist/preflight.d.ts.map +1 -1
  87. package/dist/preflight.js +78 -4
  88. package/dist/preflight.js.map +1 -1
  89. package/dist/run-trace-store.d.ts +9 -0
  90. package/dist/run-trace-store.d.ts.map +1 -0
  91. package/dist/run-trace-store.js +57 -0
  92. package/dist/run-trace-store.js.map +1 -0
  93. package/dist/runs.d.ts +16 -0
  94. package/dist/runs.d.ts.map +1 -0
  95. package/dist/runs.js +431 -0
  96. package/dist/runs.js.map +1 -0
  97. package/dist/service/app-debug-service.d.ts +4 -2
  98. package/dist/service/app-debug-service.d.ts.map +1 -1
  99. package/dist/service/app-debug-service.js +73 -31
  100. package/dist/service/app-debug-service.js.map +1 -1
  101. package/dist/service/app-operation.d.ts +38 -0
  102. package/dist/service/app-operation.d.ts.map +1 -0
  103. package/dist/service/app-operation.js +269 -0
  104. package/dist/service/app-operation.js.map +1 -0
  105. package/dist/service/app-run-server.d.ts +3 -1
  106. package/dist/service/app-run-server.d.ts.map +1 -1
  107. package/dist/service/app-run-server.js +22 -14
  108. package/dist/service/app-run-server.js.map +1 -1
  109. package/dist/service/index.d.ts +4 -0
  110. package/dist/service/index.d.ts.map +1 -1
  111. package/dist/service/index.js +2 -0
  112. package/dist/service/index.js.map +1 -1
  113. package/dist/service/run-trace-lifecycle.d.ts +34 -0
  114. package/dist/service/run-trace-lifecycle.d.ts.map +1 -0
  115. package/dist/service/run-trace-lifecycle.js +135 -0
  116. package/dist/service/run-trace-lifecycle.js.map +1 -0
  117. package/dist/service/workflow-run.d.ts +5 -16
  118. package/dist/service/workflow-run.d.ts.map +1 -1
  119. package/dist/service/workflow-run.js +54 -52
  120. package/dist/service/workflow-run.js.map +1 -1
  121. package/dist/session.d.ts +1 -1
  122. package/dist/session.d.ts.map +1 -1
  123. package/dist/session.js +109 -100
  124. package/dist/session.js.map +1 -1
  125. package/dist/sketch-debug/markdown.d.ts.map +1 -1
  126. package/dist/sketch-debug/markdown.js +1 -0
  127. package/dist/sketch-debug/markdown.js.map +1 -1
  128. package/dist/sketch-debug/report.d.ts.map +1 -1
  129. package/dist/sketch-debug/report.js +4 -4
  130. package/dist/sketch-debug/report.js.map +1 -1
  131. package/dist/sketch-debug/types.d.ts +2 -0
  132. package/dist/sketch-debug/types.d.ts.map +1 -1
  133. package/dist/timeline-debug/frame-geometry.d.ts +118 -0
  134. package/dist/timeline-debug/frame-geometry.d.ts.map +1 -0
  135. package/dist/timeline-debug/frame-geometry.js +231 -0
  136. package/dist/timeline-debug/frame-geometry.js.map +1 -0
  137. package/dist/timeline-debug/index.d.ts +1 -0
  138. package/dist/timeline-debug/index.d.ts.map +1 -1
  139. package/dist/timeline-debug/index.js +1 -0
  140. package/dist/timeline-debug/index.js.map +1 -1
  141. package/dist/timeline-debug/legibility.d.ts +8 -4
  142. package/dist/timeline-debug/legibility.d.ts.map +1 -1
  143. package/dist/timeline-debug/legibility.js +47 -18
  144. package/dist/timeline-debug/legibility.js.map +1 -1
  145. package/dist/timeline-debug/score.d.ts +110 -0
  146. package/dist/timeline-debug/score.d.ts.map +1 -0
  147. package/dist/timeline-debug/score.js +231 -0
  148. package/dist/timeline-debug/score.js.map +1 -0
  149. package/dist/timeline-debug/showcase.d.ts +12 -0
  150. package/dist/timeline-debug/showcase.d.ts.map +1 -1
  151. package/dist/timeline-debug/showcase.js +669 -13
  152. package/dist/timeline-debug/showcase.js.map +1 -1
  153. package/dist/timeline-debug/validate.d.ts.map +1 -1
  154. package/dist/timeline-debug/validate.js +121 -2
  155. package/dist/timeline-debug/validate.js.map +1 -1
  156. package/dist/types.d.ts +18 -10
  157. package/dist/types.d.ts.map +1 -1
  158. package/package.json +13 -13
@@ -18,9 +18,12 @@
18
18
  * or `done`.
19
19
  */
20
20
  import { randomUUID } from "node:crypto";
21
- import { createLogger } from "@nodetool-ai/config";
22
- import { Application, Workflow, createJsScriptResolver } from "@nodetool-ai/models";
23
- import { applicationTarget, inlineDocumentTarget, simulateApp, summarizeAppReport } from "../app-debug/index.js";
21
+ import { createLogger, getDefaultAssetsPath } from "@nodetool-ai/config";
22
+ import { FileStorageAdapter } from "@nodetool-ai/storage";
23
+ import { parseApplicationBundle } from "@nodetool-ai/app-runtime";
24
+ import { Application, AppRunError, Workflow, WorkflowVersion, getSecret, resolveAppInstanceApplicationId, createJsScriptResolver } from "@nodetool-ai/models";
25
+ import { ProcessingContext } from "@nodetool-ai/runtime";
26
+ import { applicationTarget, bundleTarget, createAppDebugRunRecording, inlineDocumentTarget, simulateApp, summarizeAppReport } from "../app-debug/index.js";
24
27
  import { createAppServerRunner } from "./app-run-server.js";
25
28
  import { debugSessions, InteractiveEscalationHandle } from "./debug-sessions.js";
26
29
  import { isNonEmptyString, isPositiveFiniteNumber } from "../predicates.js";
@@ -44,14 +47,34 @@ async function loadUserJsScript(userId, scriptId, scriptVersion) {
44
47
  return resolved ? { name: resolved.name, document: resolved.document } : null;
45
48
  }
46
49
  /** A workflow the user can read, in the shape the simulator wants. */
47
- async function loadUserWorkflow(userId, id) {
50
+ async function loadUserWorkflow(userId, id, version) {
48
51
  const workflow = await Workflow.find(userId, id);
49
- const graph = workflow?.getGraph();
52
+ if (!workflow) {
53
+ return null;
54
+ }
55
+ const pinned = version === undefined ? null : await WorkflowVersion.findByVersion(workflow.id, version);
56
+ if (version !== undefined && (!pinned || pinned.user_id !== workflow.user_id)) {
57
+ return null;
58
+ }
59
+ const graph = pinned?.graph ?? workflow.getGraph();
50
60
  return graph ? { graph } : null;
51
61
  }
52
62
  /** An application the user owns, with its document still unparsed. */
53
63
  async function loadUserApplication(userId, id) {
54
- const application = await Application.findById(id);
64
+ let fullId;
65
+ try {
66
+ fullId = await resolveAppInstanceApplicationId(userId, id);
67
+ }
68
+ catch (error) {
69
+ if (error instanceof AppRunError && error.code === "not_found") {
70
+ return null;
71
+ }
72
+ if (error instanceof AppRunError) {
73
+ throw new AppServiceError("invalid_input", error.message);
74
+ }
75
+ throw error;
76
+ }
77
+ const application = await Application.findById(fullId);
55
78
  if (!application || application.user_id !== userId)
56
79
  return null;
57
80
  return {
@@ -97,7 +120,7 @@ async function resolveTarget(userId, body, deps) {
97
120
  throw new AppServiceError("invalid_input", "Pass either application_id or document, not both — a saved row and a " +
98
121
  "live draft are different apps the moment the draft changes.");
99
122
  }
100
- const loadFromDb = (id) => (deps.loadWorkflow ?? loadUserWorkflow)(userId, id);
123
+ const loadFromDb = (id, version) => (deps.loadWorkflow ?? loadUserWorkflow)(userId, id, version);
101
124
  if (hasId) {
102
125
  const id = body.application_id;
103
126
  const application = await (deps.loadApplication ?? loadUserApplication)(userId, id);
@@ -107,6 +130,10 @@ async function resolveTarget(userId, body, deps) {
107
130
  return applicationTarget(id, application, loadFromDb);
108
131
  }
109
132
  if (hasDocument) {
133
+ const bundle = parseApplicationBundle(body.document);
134
+ if (bundle) {
135
+ return bundleTarget(bundle, "inline");
136
+ }
110
137
  return inlineDocumentTarget(body.document, loadFromDb);
111
138
  }
112
139
  throw new AppServiceError("invalid_input", "An app debug run needs either an application_id or a document.");
@@ -120,14 +147,14 @@ export async function runApplicationDebug(userId, body, defaultRegistry, deps =
120
147
  const resolved = await resolveTarget(userId, body, deps);
121
148
  const registry = deps.registry ?? defaultRegistry;
122
149
  const timeoutMs = positive(body.timeout_ms);
123
- // Cancelling a simulation settles its session with a failed report; the runs
124
- // already in flight finish in the background, since `simulateApp` takes no
125
- // signal. Nothing they touch is persisted, so a finished orphan run is spend,
126
- // not state.
127
- let cancelled = null;
128
- const abandoned = new Promise((resolve) => {
129
- cancelled = resolve;
130
- });
150
+ const controller = new AbortController();
151
+ const context = deps.context
152
+ ? deps.context.copy({ jobId: debugId })
153
+ : new ProcessingContext({ userId, jobId: debugId,
154
+ secretResolver: (key) => getSecret(key, userId),
155
+ storage: new FileStorageAdapter(getDefaultAssetsPath()), assetStorage: deps.assetStorage ?? null });
156
+ context.signal = deps.context ? AbortSignal.any([deps.context.signal, controller.signal]) : controller.signal;
157
+ const runIds = new Set();
131
158
  // The promise a session fronts must never reject: a rejected run would leave
132
159
  // the session parked forever with no report to hand back.
133
160
  const simulation = (async () => {
@@ -146,24 +173,47 @@ export async function runApplicationDebug(userId, body, defaultRegistry, deps =
146
173
  simulateOptions.timeoutMs = timeoutMs;
147
174
  }
148
175
  const simulateDeps = {
149
- loadFromDb: (id) => (deps.loadWorkflow ?? loadUserWorkflow)(userId, id),
176
+ loadFromDb: (id, version) => (deps.loadWorkflow ?? loadUserWorkflow)(userId, id, version),
150
177
  runOnServer: createAppServerRunner(userId, registry, {
151
178
  jobPrefix: "app-debug-run",
152
179
  assetStorage: deps.assetStorage ?? null
153
180
  }),
154
181
  loadScript: (scriptId, scriptVersion) => loadUserJsScript(userId, scriptId, scriptVersion)
155
182
  };
156
- if (deps.runScript) {
157
- simulateDeps.runScript = deps.runScript;
183
+ const scriptRunner = deps.scriptRunner;
184
+ const runScript = scriptRunner
185
+ ? (input) => scriptRunner(context, input)
186
+ : deps.runScript;
187
+ if (runScript) {
188
+ simulateDeps.runScript = runScript;
158
189
  }
190
+ const recording = createAppDebugRunRecording({ userId, target: resolved, registry, context,
191
+ onRunCreated: (id) => { runIds.add(id); },
192
+ loadWorkflow: simulateDeps.loadFromDb, loadScript: simulateDeps.loadScript,
193
+ applicationId: body.application_id,
194
+ runWorkflow: (parent, input) => createAppServerRunner(userId, registry, { context: parent })(input),
195
+ runScript: (parent, input) => {
196
+ if (deps.scriptRunner) {
197
+ return deps.scriptRunner(parent, input);
198
+ }
199
+ if (deps.runScript) {
200
+ return deps.runScript(input);
201
+ }
202
+ throw new Error("Host does not provide script execution");
203
+ }
204
+ });
205
+ Object.assign(simulateDeps, recording);
159
206
  const report = await simulateApp(resolved, simulateOptions, simulateDeps);
160
- return debugPayload(report, debugId);
207
+ report.run_ids = [...runIds];
208
+ const payload = debugPayload(report, debugId);
209
+ return controller.signal.aborted ? { ...payload, status: "failed", error: "cancelled" } : payload;
161
210
  }
162
211
  catch (error) {
163
212
  const message = error instanceof Error ? error.message : String(error);
164
213
  log.error("app debug failed outside the report", { debugId, message });
165
214
  return {
166
215
  debug_id: debugId,
216
+ run_ids: [...runIds],
167
217
  status: "failed",
168
218
  error: message,
169
219
  verdict: {
@@ -175,24 +225,16 @@ export async function runApplicationDebug(userId, body, defaultRegistry, deps =
175
225
  };
176
226
  }
177
227
  })();
178
- const done = Promise.race([simulation, abandoned]);
228
+ const done = simulation;
179
229
  const session = debugSessions.create({
180
230
  userId,
181
231
  workflowId: resolved.info.workflowId,
182
232
  jobId: debugId,
183
233
  handle: new InteractiveEscalationHandle(),
184
234
  done,
185
- cancel: () => cancelled?.({
186
- debug_id: debugId,
187
- status: "failed",
188
- error: "cancelled",
189
- verdict: {
190
- ok: false,
191
- headline: "App debug cancelled before it finished.",
192
- issues: ["cancelled"],
193
- warnings: []
194
- }
195
- })
235
+ cancel: () => {
236
+ controller.abort();
237
+ }
196
238
  });
197
239
  if (body.poll === true)
198
240
  return runningPayload(session, debugId);
@@ -1 +1 @@
1
- {"version":3,"file":"app-debug-service.js","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-debug-service.js","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type ResourceRef, type ScriptRunResult } from "@nodetool-ai/app-runtime";
2
+ import type { AppRunRecord } from "@nodetool-ai/protocol/api-schemas/app-runs.js";
3
+ import { ProcessingContext } from "@nodetool-ai/runtime";
4
+ import type { NodeRegistry } from "@nodetool-ai/node-sdk";
5
+ import { type AppServerRunInput, type AppServerRunOutcome, type JsScriptOperationRunner } from "../app-debug/index.js";
6
+ export interface ExecuteAppOperationOptions {
7
+ readonly userId: string;
8
+ readonly instanceId: string;
9
+ readonly operationId: string;
10
+ readonly invocationId: string;
11
+ readonly origin: AppRunRecord["origin"];
12
+ readonly context: ProcessingContext;
13
+ readonly registry: NodeRegistry;
14
+ /** Already reserved by a trusted host. */
15
+ readonly runId?: string;
16
+ readonly estimatedUsd?: number;
17
+ readonly runnerInstance?: string | null;
18
+ readonly requireFiniteBudget?: boolean;
19
+ readonly inputValues?: Readonly<Record<string, unknown>>;
20
+ /** Inputs already resolved by the headless app runtime against its interaction state. */
21
+ readonly resolvedInputs?: Record<string, unknown>;
22
+ /** Effective workflow property bindings alongside its operation parameters. */
23
+ readonly inputSnapshot?: Record<string, unknown>;
24
+ readonly onReserved?: (run: AppRunRecord) => void;
25
+ readonly resourceRef?: (id: string) => ResourceRef | undefined;
26
+ readonly scriptRunner?: (context: ProcessingContext, input: Parameters<JsScriptOperationRunner>[0]) => Promise<ScriptRunResult>;
27
+ readonly workflowRunner?: (context: ProcessingContext, input: AppServerRunInput) => Promise<AppServerRunOutcome>;
28
+ }
29
+ export interface AppOperationOutcome {
30
+ /** Deleted history returns a content-free terminal snapshot that is not persisted. */
31
+ readonly run: AppRunRecord;
32
+ readonly variables: Readonly<Record<string, unknown>>;
33
+ readonly messages: ReadonlyArray<Record<string, unknown>>;
34
+ readonly reused: boolean;
35
+ }
36
+ /** Reserve before resolving bindings, secrets, or executable targets. */
37
+ export declare function executeAppOperation(options: ExecuteAppOperationOptions): Promise<AppOperationOutcome>;
38
+ //# sourceMappingURL=app-operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-operation.d.ts","sourceRoot":"","sources":["../../src/service/app-operation.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAuB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,yFAAyF;IACzF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAC1C,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,yEAAyE;AACzE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAoQ9B"}
@@ -0,0 +1,269 @@
1
+ import { registerAppRunTrace, withRegisteredRunTrace, settleRegisteredRunTrace } from "./run-trace-lifecycle.js";
2
+ import { applyEvents, createInstanceState, messagesToEvents, operationTarget, parseApplicationDocument, outputVariableTargets, resolveOperationParams, stateKey } from "@nodetool-ai/app-runtime";
3
+ import { AppRunError, getAppRun, claimAppRun, reconcileAppRunCost, getAppInstance, reserveAppRun, setAppRunInputs, settleAppRun } from "@nodetool-ai/models";
4
+ import { inAppRunCostAccount } from "@nodetool-ai/runtime";
5
+ import { debugGraphOf, documentOperations, extractAppIO, jsScriptRunMessages, scriptAppIO, scriptOperationInvocation } from "../app-debug/index.js";
6
+ import { isRecord } from "../predicates.js";
7
+ import { attachRunCostLedger } from "../cost-ledger.js";
8
+ import { createFalGenerationLifecycleHooks } from "../generation-lifecycle.js";
9
+ import { createAppServerRunner } from "./app-run-server.js";
10
+ /** Reserve before resolving bindings, secrets, or executable targets. */
11
+ export async function executeAppOperation(options) {
12
+ let run;
13
+ if (options.runId) {
14
+ const existing = await getAppRun(options.userId, options.runId);
15
+ if (!existing ||
16
+ existing.instance_id !== options.instanceId ||
17
+ existing.operation_id !== options.operationId) {
18
+ throw new Error("App run does not match the requested operation");
19
+ }
20
+ run = existing;
21
+ }
22
+ else {
23
+ const reservation = await reserveAppRun({
24
+ userId: options.userId,
25
+ instanceId: options.instanceId,
26
+ operationId: options.operationId,
27
+ invocationId: options.invocationId,
28
+ origin: options.origin,
29
+ estimatedUsd: options.estimatedUsd,
30
+ requireFiniteBudget: options.requireFiniteBudget
31
+ });
32
+ if (!reservation.allowed) {
33
+ throw new Error(reservation.reason);
34
+ }
35
+ run = reservation.run;
36
+ if (!reservation.created) {
37
+ return { run, variables: {}, messages: [], reused: true };
38
+ }
39
+ }
40
+ options.onReserved?.(run);
41
+ if (run.status !== "running" ||
42
+ !(await claimAppRun(options.userId, run.id, options.runnerInstance))) {
43
+ return { run, variables: {}, messages: [], reused: true };
44
+ }
45
+ const identity = {
46
+ userId: options.userId,
47
+ instanceId: run.instance_id,
48
+ appRunId: run.id,
49
+ traceId: run.trace_id,
50
+ origin: run.origin
51
+ };
52
+ const context = options.context.copy({
53
+ jobId: run.id,
54
+ appRunContext: identity,
55
+ generationLifecycle: createFalGenerationLifecycleHooks({
56
+ userId: options.userId,
57
+ jobId: run.id,
58
+ appRunContext: identity,
59
+ publicUrl: process.env["NODETOOL_PUBLIC_URL"] ?? null
60
+ })
61
+ });
62
+ try {
63
+ await registerAppRunTrace(context, run);
64
+ }
65
+ catch (error) {
66
+ await settleOperationRun(options.userId, run, { status: "failed", actualUsd: 0, knownLlmUsd: 0, error: error instanceof Error ? error.message : String(error), secretValues: [...context.getResolvedSecretValues()] });
67
+ throw error;
68
+ }
69
+ return withRegisteredRunTrace(context, "app.run", async () => {
70
+ const messages = [];
71
+ let variableChanges = {};
72
+ try {
73
+ context.signal.throwIfAborted();
74
+ const instance = await getAppInstance(options.userId, run.instance_id);
75
+ if (!instance) {
76
+ throw new Error("App instance was deleted before execution");
77
+ }
78
+ if (instance.version !== run.version ||
79
+ (run.snapshot !== null && JSON.stringify(instance.snapshot) !== JSON.stringify(run.snapshot))) {
80
+ const error = "App instance snapshot changed before execution. Start a new run.";
81
+ run = await settleOperationRun(options.userId, run, {
82
+ status: "failed", actualUsd: 0, knownLlmUsd: 0, updateInstance: false, error
83
+ });
84
+ throw new Error(error);
85
+ }
86
+ const snapshot = run.snapshot ?? instance.snapshot;
87
+ const document = parseApplicationDocument(snapshot.document);
88
+ if (!document) {
89
+ throw new Error("Pinned application document is invalid");
90
+ }
91
+ const operation = documentOperations(document).find((candidate) => candidate.id === run.operation_id);
92
+ if (!operation) {
93
+ throw new Error("Operation is missing from the pinned application");
94
+ }
95
+ const target = operationTarget(operation);
96
+ const carriedScript = target.kind === "script"
97
+ ? snapshot.script_documents[`${target.scriptId}@${target.scriptVersion}`] ?? snapshot.script_documents[target.scriptId]
98
+ : undefined;
99
+ const graph = target.kind === "workflow"
100
+ ? debugGraphOf(snapshot.workflow_graphs[`${target.workflowId}@${target.workflowVersion ?? "latest"}`] ?? snapshot.workflow_graphs[target.workflowId])
101
+ : null;
102
+ const io = carriedScript
103
+ ? scriptAppIO(carriedScript)
104
+ : graph
105
+ ? extractAppIO(graph)
106
+ : null;
107
+ if (!io) {
108
+ throw new Error("Execution target is missing from the pinned application");
109
+ }
110
+ let state = createInstanceState();
111
+ state.variables = run.origin === "public" ? {} : { ...instance.variables };
112
+ const cachedInputs = state.variables["__app_inputs"];
113
+ const inputValues = options.inputValues ?? (isRecord(cachedInputs) ? cachedInputs : {});
114
+ for (const input of io.inputs) {
115
+ const key = stateKey({
116
+ kind: "input",
117
+ operationId: operation.id,
118
+ nodeId: input.nodeId
119
+ });
120
+ const stored = inputValues[key];
121
+ const value = stored && typeof stored === "object" && "value" in stored
122
+ ? stored.value
123
+ : (stored ?? input.defaultValue);
124
+ state.inputs[key] = { value, dirty: stored !== undefined, revision: 0 };
125
+ }
126
+ const params = options.resolvedInputs ?? resolveOperationParams({
127
+ operation,
128
+ state,
129
+ inputNodeIds: io.inputs.map((input) => input.nodeId),
130
+ inputName: (id) => io.inputs.find((input) => input.nodeId === id)?.name,
131
+ resourceRef: options.resourceRef
132
+ });
133
+ await setAppRunInputs(options.userId, run.id, options.inputSnapshot ?? params, [
134
+ ...context.getResolvedSecretValues()
135
+ ]);
136
+ const variableTargets = new Map(outputVariableTargets(operation).map((target) => [
137
+ target.nodeId,
138
+ target.variableId
139
+ ]));
140
+ state = applyEvents(state, [
141
+ {
142
+ type: "runStarted",
143
+ invocation: {
144
+ id: run.id,
145
+ operationId: operation.id,
146
+ status: "running",
147
+ startedAt: Date.parse(run.created_at)
148
+ },
149
+ outputKeys: io.outputs.map((output) => `${operation.id}:${output.nodeId}`),
150
+ variableKeys: [...variableTargets.values()]
151
+ }
152
+ ]);
153
+ let status = "completed";
154
+ let error = null;
155
+ if (target.kind === "script" && carriedScript) {
156
+ if (!options.scriptRunner) {
157
+ throw new Error("Host does not provide script execution");
158
+ }
159
+ const ledger = attachRunCostLedger(context, {
160
+ userId: options.userId,
161
+ workflowId: null,
162
+ appRunContext: identity
163
+ });
164
+ try {
165
+ const scriptRunner = options.scriptRunner;
166
+ const result = await inAppRunCostAccount(context.appRunCostAccount, () => scriptRunner(context, {
167
+ scriptId: target.scriptId,
168
+ scriptVersion: target.scriptVersion,
169
+ name: operation.name,
170
+ document: carriedScript,
171
+ ...scriptOperationInvocation(carriedScript, params),
172
+ timeoutMs: operation.timeoutMs
173
+ }));
174
+ messages.push(...jsScriptRunMessages(result));
175
+ if (!result.ok) {
176
+ status = context.signal.aborted ? "cancelled" : "failed";
177
+ error = result.error ?? "Script operation failed";
178
+ }
179
+ }
180
+ finally {
181
+ await ledger.settled();
182
+ ledger();
183
+ }
184
+ }
185
+ else if (target.kind === "workflow" && graph) {
186
+ const runner = options.workflowRunner ??
187
+ ((parent, input) => createAppServerRunner(options.userId, options.registry, {
188
+ context: parent
189
+ })(input));
190
+ const outcome = await runner(context, {
191
+ graph,
192
+ workflowId: target.workflowId,
193
+ params,
194
+ timeoutMs: operation.timeoutMs
195
+ });
196
+ messages.push(...outcome.rawMessages);
197
+ status = outcome.report.ok
198
+ ? "completed"
199
+ : outcome.report.status === "cancelled"
200
+ ? "cancelled"
201
+ : "failed";
202
+ error = outcome.report.error;
203
+ }
204
+ state = applyEvents(state, messagesToEvents(messages, {
205
+ resolveInvocation: () => state.invocations[run.id] ?? null,
206
+ outputKey: (_, nodeId) => `${operation.id}:${nodeId}`,
207
+ outputVariable: (_, nodeId) => variableTargets.get(nodeId) ?? null
208
+ }));
209
+ variableChanges = Object.fromEntries([...variableTargets.values()]
210
+ .filter((id) => id in state.variables)
211
+ .map((id) => [id, state.variables[id]]));
212
+ variableChanges["__app_outputs"] = Object.fromEntries(Object.entries(state.outputs).map(([key, slot]) => [key, slot.value]));
213
+ const settlement = {
214
+ status,
215
+ error: context.runTraceContext?.policy.contentSuppressed && error ? "Execution failed" : error,
216
+ outputs: variableChanges,
217
+ documents: context.getAppRunDocuments(),
218
+ expectedRevision: run.instance_revision,
219
+ contentSuppressed: context.runTraceContext?.policy.contentSuppressed,
220
+ secretValues: [...context.getResolvedSecretValues()]
221
+ };
222
+ const knownLlmUsd = context.getAppRunLlmCost();
223
+ if (knownLlmUsd !== null) {
224
+ settlement.knownLlmUsd = knownLlmUsd;
225
+ }
226
+ run = await settleOperationRun(options.userId, run, settlement);
227
+ }
228
+ catch (error) {
229
+ const settlement = {
230
+ status: context.signal.aborted ? "cancelled" : "failed",
231
+ error: context.runTraceContext?.policy.contentSuppressed ? "Execution failed" : error instanceof Error ? error.message : String(error),
232
+ contentSuppressed: context.runTraceContext?.policy.contentSuppressed,
233
+ secretValues: [...context.getResolvedSecretValues()],
234
+ documents: context.getAppRunDocuments()
235
+ };
236
+ const knownLlmUsd = context.getAppRunLlmCost();
237
+ if (knownLlmUsd !== null) {
238
+ settlement.knownLlmUsd = knownLlmUsd;
239
+ }
240
+ run = await settleOperationRun(options.userId, run, settlement);
241
+ }
242
+ await reconcileAppRunCost(options.userId, run.id);
243
+ run = (await getAppRun(options.userId, run.id)) ?? run;
244
+ await settleRegisteredRunTrace(context, run.status === "running" ? "failed" : run.status, run.error, run.actual_usd);
245
+ return { run, variables: variableChanges, messages, reused: false };
246
+ });
247
+ }
248
+ async function settleOperationRun(userId, run, settlement) {
249
+ try {
250
+ return await settleAppRun(userId, run.id, settlement);
251
+ }
252
+ catch (error) {
253
+ if (!(error instanceof AppRunError) || error.code !== "not_found") {
254
+ throw error;
255
+ }
256
+ return {
257
+ ...run,
258
+ status: settlement.status,
259
+ snapshot: null,
260
+ inputs: null,
261
+ outputs: null,
262
+ documents: null,
263
+ error: null,
264
+ content_expired: 1,
265
+ settled_at: new Date().toISOString()
266
+ };
267
+ }
268
+ }
269
+ //# sourceMappingURL=app-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-operation.js","sourceRoot":"","sources":["../../src/service/app-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,QAAQ,EAGT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAqB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EAI1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAwC5D,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,IAAI,GAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAChE,IACE,CAAC,QAAQ;YACT,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU;YAC3C,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,WAAW,EAC7C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,GAAG,GAAG,QAAQ,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1B,IACE,GAAG,CAAC,MAAM,KAAK,SAAS;QACxB,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,EACpE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,QAAQ,EAAE,GAAG,CAAC,EAAE;QAChB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,aAAa,EAAE,QAAQ;QACvB,mBAAmB,EAAE,iCAAiC,CAAC;YACrD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,aAAa,EAAE,QAAQ;YACvB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI;SACtD,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,CAAC;QACvN,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,QAAQ,GAAmC,EAAE,CAAC;QACpD,IAAI,eAAe,GAA4B,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;gBAClC,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAChG,MAAM,KAAK,GAAG,kEAAkE,CAAC;gBACjF,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;oBAClD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK;iBAC7E,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;YACnD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,YAAY,CACjD,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACtB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACvH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,KAAK,GACT,MAAM,CAAC,IAAI,KAAK,UAAU;gBACxB,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,eAAe,IAAI,QAAQ,EAAE,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrJ,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,GAAG,aAAa;gBACtB,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;gBAC5B,CAAC,CAAC,KAAK;oBACL,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;oBACrB,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,GAAG,mBAAmB,EAAE,CAAC;YAClC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACrD,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC;oBACnB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,KAAK,GACT,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;oBACvD,CAAC,CAAC,MAAM,CAAC,KAAK;oBACd,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;gBACrC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC1E,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,sBAAsB,CAAC;gBAC9D,SAAS;gBACT,KAAK;gBACL,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBACpD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,IAAI;gBACvE,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YACH,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,IAAI,MAAM,EAAE;gBAC7E,GAAG,OAAO,CAAC,uBAAuB,EAAE;aACrC,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,qBAAqB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/C,MAAM,CAAC,MAAM;gBACb,MAAM,CAAC,UAAU;aAClB,CAAC,CACH,CAAC;YACF,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE;gBACzB;oBACE,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE;wBACV,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,WAAW,EAAE,SAAS,CAAC,EAAE;wBACzB,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;qBACtC;oBACD,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CACxB,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,CAC/C;oBACD,YAAY,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;iBAC5C;aACF,CAAC,CAAC;YACH,IAAI,MAAM,GAAyC,WAAW,CAAC;YAC/D,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE;oBAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,QAAQ;iBACxB,CAAC,CAAC;gBACH,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;oBAC1C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,OAAO,CAAC,iBAAiB,EACzB,GAAG,EAAE,CACH,YAAY,CAAC,OAAO,EAAE;wBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,QAAQ,EAAE,aAAa;wBACvB,GAAG,yBAAyB,CAAC,aAAa,EAAE,MAAM,CAAC;wBACnD,SAAS,EAAE,SAAS,CAAC,SAAS;qBAC/B,CAAC,CACL,CAAC;oBACF,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACf,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;wBACzD,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC;oBACpD,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvB,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,EAAE,CAAC;gBAC/C,MAAM,MAAM,GACV,OAAO,CAAC,cAAc;oBACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACjB,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;wBACtD,OAAO,EAAE,MAAM;qBAChB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;oBACpC,KAAK;oBACL,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM;oBACN,SAAS,EAAE,SAAS,CAAC,SAAS;iBAC/B,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;gBACtC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE;oBACxB,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;wBACrC,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,QAAQ,CAAC;gBACf,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,CAAC;YACD,KAAK,GAAG,WAAW,CACjB,KAAK,EACL,gBAAgB,CAAC,QAAQ,EAAE;gBACzB,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;gBAC1D,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,MAAM,EAAE;gBACrD,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;aACnE,CAAC,CACH,CAAC;YACF,eAAe,GAAG,MAAM,CAAC,WAAW,CAClC,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC;iBACrC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAC1C,CAAC;YACF,eAAe,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,WAAW,CACnD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;YACF,MAAM,UAAU,GAAuC;gBACrD,MAAM;gBACN,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK;gBAC9F,OAAO,EAAE,eAAe;gBACxB,SAAS,EAAE,OAAO,CAAC,kBAAkB,EAAE;gBACvC,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;gBACvC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB;gBACpE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;aACrD,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;YACvC,CAAC;YACD,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,GAAuC;gBACrD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;gBACvD,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACtI,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB;gBACpE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;gBACpD,SAAS,EAAE,OAAO,CAAC,kBAAkB,EAAE;aACxC,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;YACvC,CAAC;YACD,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAClD,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;QACvD,MAAM,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACrH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAc,EACd,GAAiB,EACjB,UAA8C;IAE9C,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO;YACL,GAAG,GAAG;YACN,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,CAAC;YAClB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -13,10 +13,12 @@
13
13
  */
14
14
  import type { AppServerRunInput, AppServerRunOutcome } from "../app-debug/index.js";
15
15
  import type { NodeRegistry } from "@nodetool-ai/node-sdk";
16
- import { type StorageAdapter } from "@nodetool-ai/runtime";
16
+ import { ProcessingContext, type StorageAdapter } from "@nodetool-ai/runtime";
17
17
  export interface AppServerRunnerOptions {
18
18
  /** Job-id prefix, so a run is attributable to the surface that started it. */
19
19
  jobPrefix?: string;
20
+ /** Operation context inherited by this workflow child. */
21
+ context?: ProcessingContext;
20
22
  /**
21
23
  * The store `asset://<id>` inputs resolve through. Only the local assets dir
22
24
  * on a `file` backend, so a host on S3/Supabase must pass its own or the
@@ -1 +1 @@
1
- {"version":3,"file":"app-run-server.d.ts","sourceRoot":"","sources":["../../src/service/app-run-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG9E,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,sBAA2B,GACnC,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CA8E5D"}
1
+ {"version":3,"file":"app-run-server.d.ts","sourceRoot":"","sources":["../../src/service/app-run-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG9E,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,sBAA2B,GACnC,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAqF5D"}
@@ -25,20 +25,22 @@ export function createAppServerRunner(userId, registry, options = {}) {
25
25
  return async (input) => {
26
26
  const startedAt = Date.now();
27
27
  const jobId = `${jobPrefix}-${randomUUID()}`;
28
- const context = new ProcessingContext({
29
- jobId,
30
- workflowId: input.workflowId,
31
- userId,
32
- secretResolver: (key) => getSecret(key, userId),
33
- storage: new FileStorageAdapter(getDefaultAssetsPath()),
34
- assetStorage: options.assetStorage ?? null,
35
- generationLifecycle: createFalGenerationLifecycleHooks({
36
- userId,
28
+ const context = options.context
29
+ ? options.context.copy({ jobId, workflowId: input.workflowId })
30
+ : new ProcessingContext({
37
31
  jobId,
38
- projectId: null,
39
- publicUrl: process.env["NODETOOL_PUBLIC_URL"] ?? null
40
- })
41
- });
32
+ workflowId: input.workflowId,
33
+ userId,
34
+ secretResolver: (key) => getSecret(key, userId),
35
+ storage: new FileStorageAdapter(getDefaultAssetsPath()),
36
+ assetStorage: options.assetStorage ?? null,
37
+ generationLifecycle: createFalGenerationLifecycleHooks({
38
+ userId,
39
+ jobId,
40
+ projectId: null,
41
+ publicUrl: process.env["NODETOOL_PUBLIC_URL"] ?? null
42
+ })
43
+ });
42
44
  const sessionOptions = {
43
45
  graph: input.graph,
44
46
  registry,
@@ -78,7 +80,13 @@ export function createAppServerRunner(userId, registry, options = {}) {
78
80
  }
79
81
  // `session.result` never rejects: a kernel failure resolves as
80
82
  // `status: "failed"`, which the simulator turns into a complaint.
81
- const result = await session.result;
83
+ const cancel = () => session.cancel("cancelled");
84
+ options.context?.signal.addEventListener("abort", cancel, { once: true });
85
+ if (options.context?.signal.aborted)
86
+ cancel();
87
+ const result = await session.result.finally(() => {
88
+ options.context?.signal.removeEventListener("abort", cancel);
89
+ });
82
90
  const messages = result.messages ?? [];
83
91
  const summary = collectExecutionSummary(messages);
84
92
  summary.status = result.status ?? summary.status;