@clemrig/flow 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,7 @@
1
- import { spawn } from "node:child_process";
1
+ import { execFile, execFileSync, spawn } from "node:child_process";
2
+ import { readFileSync } from "node:fs";
3
+ import { open, readFile } from "node:fs/promises";
4
+ import { promisify } from "node:util";
2
5
  const MAX_CAPTURE_BYTES = 2 * 1024 * 1024;
3
6
  const MAX_LINE_BYTES = 32 * 1024 * 1024;
4
7
  const KILL_GRACE_MS = 1_000;
@@ -100,7 +103,7 @@ function groupStillExists(child) {
100
103
  return false;
101
104
  }
102
105
  }
103
- /** Children still running, each with how to interrupt it. */
106
+ /** Children still running, each with how to interrupt it and where its commands register their groups. */
104
107
  const running = new Map();
105
108
  /** Called by the signal that interrupts the children: what else must stop with them. */
106
109
  const interrupted = new Set();
@@ -118,17 +121,17 @@ export function whenInterrupted(handler) {
118
121
  * all, so that none outlives an interrupted program.
119
122
  */
120
123
  function onSignal(signal) {
121
- for (const interrupt of running.values())
124
+ for (const { interrupt } of running.values())
122
125
  interrupt(signal);
123
126
  for (const handler of [...interrupted])
124
127
  handler(signal);
125
128
  }
126
- function track(child, interrupt) {
129
+ function track(child, interrupt, groups) {
127
130
  if (running.size === 0) {
128
131
  process.on("SIGINT", onSignal);
129
132
  process.on("SIGTERM", onSignal);
130
133
  }
131
- running.set(child, interrupt);
134
+ running.set(child, { interrupt, ...(groups ? { groups } : {}) });
132
135
  }
133
136
  function untrack(child) {
134
137
  running.delete(child);
@@ -139,42 +142,189 @@ function untrack(child) {
139
142
  }
140
143
  /**
141
144
  * Kills the process group of every child still running in this process, of
142
- * every run, at once: for a program about to quit.
145
+ * every run, and the groups their commands registered, at once: for a program
146
+ * about to quit.
143
147
  */
144
148
  export function killChildProcesses() {
145
- for (const child of running.keys())
149
+ for (const [child, { groups }] of running) {
146
150
  signalGroup(child, "SIGKILL");
151
+ if (groups)
152
+ killRegistered(groups);
153
+ }
154
+ }
155
+ /** Lists every process with its group and start, dated in the C locale. */
156
+ const listing = () => [
157
+ "ps",
158
+ ["-ax", "-o", "pid=,pgid=,lstart="],
159
+ {
160
+ env: { ...process.env, LC_ALL: "C" },
161
+ encoding: "utf8",
162
+ maxBuffer: 64 * 1024 * 1024,
163
+ },
164
+ ];
165
+ /** A line of the listing: pid, group and start. */
166
+ const listed = (line) => {
167
+ const [, pid = "", group = "", start = ""] = /^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/.exec(line) ?? [];
168
+ return { pid, group, start };
169
+ };
170
+ const execFileAsync = promisify(execFile);
171
+ /**
172
+ * Why this machine cannot end the groups a program's commands register, if it
173
+ * cannot: `ps` must list every process with its group and start, as that of
174
+ * macOS and that of procps on Linux do.
175
+ */
176
+ export async function groupsProblem() {
177
+ try {
178
+ const { stdout } = await execFileAsync(...listing());
179
+ const own = stdout
180
+ .split("\n")
181
+ .map(listed)
182
+ .find(({ pid }) => pid === String(process.pid));
183
+ if (own && !Number.isNaN(Date.parse(own.start)))
184
+ return undefined;
185
+ return "ps -ax -o pid=,pgid=,lstart= does not list this process with its group and start";
186
+ }
187
+ catch (error) {
188
+ return `ps -ax -o pid=,pgid=,lstart= failed: ${error instanceof Error ? error.message : String(error)}`;
189
+ }
190
+ }
191
+ /**
192
+ * The groups a registry names that still hold processes, each with how many.
193
+ * A registered group whose leader runs but started at another time is no
194
+ * longer the command's: once a group has emptied, the system may give its
195
+ * number to another, which it never does while the group holds a process.
196
+ */
197
+ function registered(registry, processes) {
198
+ const startedAt = new Map();
199
+ for (const line of registry.split("\n")) {
200
+ const [group = Number.NaN, at = Number.NaN] = line
201
+ .trim()
202
+ .split(/\s+/)
203
+ .map(Number);
204
+ if (Number.isInteger(group) && group > 1 && Number.isFinite(at))
205
+ startedAt.set(group, at);
206
+ }
207
+ const held = new Map();
208
+ const replaced = new Set();
209
+ for (const line of processes.split("\n")) {
210
+ const { pid, group, start } = listed(line);
211
+ const at = startedAt.get(Number(group));
212
+ if (at === undefined)
213
+ continue;
214
+ held.set(Number(group), (held.get(Number(group)) ?? 0) + 1);
215
+ // Registered just after its leader started, to the second.
216
+ if (pid === group && Math.abs(Date.parse(start) / 1000 - at) > 2)
217
+ replaced.add(Number(group));
218
+ }
219
+ for (const group of replaced)
220
+ held.delete(group);
221
+ return held;
147
222
  }
148
- /** `runCommand` with its arguments in order: the form workflows use. */
223
+ const signalled = (group, signal) => {
224
+ try {
225
+ process.kill(-group, signal);
226
+ return true;
227
+ }
228
+ catch {
229
+ // The group is gone.
230
+ return false;
231
+ }
232
+ };
233
+ /**
234
+ * Ends the groups a program's commands registered in `file` that still hold
235
+ * processes: SIGTERM, then SIGKILL for what remains after the grace period.
236
+ * Returns how many processes they held.
237
+ */
238
+ async function endRegistered(file) {
239
+ const registry = await readFile(file, "utf8").catch((error) => {
240
+ // No command registered.
241
+ if (error.code === "ENOENT")
242
+ return "";
243
+ throw error;
244
+ });
245
+ if (!registry)
246
+ return 0;
247
+ const { stdout } = await execFileAsync(...listing());
248
+ const groups = registered(registry, stdout);
249
+ for (const group of groups.keys())
250
+ signalled(group, "SIGTERM");
251
+ const deadline = Date.now() + KILL_GRACE_MS;
252
+ while ([...groups.keys()].some((group) => signalled(group, 0)) &&
253
+ Date.now() < deadline)
254
+ await new Promise((resolve) => setTimeout(resolve, 50));
255
+ for (const group of groups.keys())
256
+ signalled(group, "SIGKILL");
257
+ return [...groups.values()].reduce((sum, count) => sum + count, 0);
258
+ }
259
+ /** `endRegistered` at once, without waiting: for a program about to quit. */
260
+ function killRegistered(file) {
261
+ try {
262
+ const groups = registered(readFileSync(file, "utf8"), execFileSync(...listing()));
263
+ for (const group of groups.keys())
264
+ signalled(group, "SIGKILL");
265
+ }
266
+ catch {
267
+ // Nothing registered, or nothing left to list: the program quits anyway.
268
+ }
269
+ }
270
+ /**
271
+ * `runCommand` with its arguments in order: the form workflows use, whose line
272
+ * callback never stops the program.
273
+ */
149
274
  export async function runProcess(command, cwd, timeoutMs, onLine, stdin) {
150
- return runCommand(command, { cwd, timeoutMs, onLine, stdin });
275
+ return runCommand(command, {
276
+ cwd,
277
+ timeoutMs,
278
+ stdin,
279
+ ...(onLine
280
+ ? {
281
+ onLine: (line) => {
282
+ onLine(line);
283
+ },
284
+ }
285
+ : {}),
286
+ });
151
287
  }
152
288
  /**
153
- * Runs an executable without a shell, in its own process group. A failure
154
- * terminates the entire group, with the program's stop signal then SIGKILL, and
155
- * settles only after the child closes and the grace period finishes.
289
+ * Runs an executable without a shell, in its own process group. A failure, or
290
+ * the caller's stop, terminates the entire group with the program's stop
291
+ * signal, then SIGKILL for what remains once the program's time to stop has
292
+ * passed, and settles once the child has closed and its group is gone, after
293
+ * ending the groups its commands registered.
156
294
  */
157
295
  export async function runCommand(command, options) {
158
- const { cwd, timeoutMs, onLine, stdin, env, stopSignal = "SIGTERM", } = options;
296
+ const { cwd, timeoutMs, onLine, stdin, env, stopSignal = "SIGTERM", stopGraceMs = KILL_GRACE_MS, groups, signal, output, } = options;
159
297
  if (command.length === 0 || !command[0])
160
298
  throw new Error("Process command must include an executable");
161
- if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
299
+ if (timeoutMs === undefined && !signal)
300
+ throw new Error("Process needs a timeout or its caller's signal");
301
+ if (timeoutMs !== undefined &&
302
+ (!Number.isFinite(timeoutMs) || timeoutMs <= 0))
162
303
  throw new Error("Process timeout must be positive");
163
304
  const executable = command[0];
305
+ const file = output === undefined ? undefined : await open(output, "a");
164
306
  return new Promise((resolve, reject) => {
165
307
  const child = spawn(executable, command.slice(1), {
166
308
  cwd,
167
309
  ...(env ? { env: { ...process.env, ...env } } : {}),
168
310
  detached: process.platform !== "win32",
169
311
  shell: false,
170
- stdio: [stdin === undefined ? "ignore" : "pipe", "pipe", "pipe"],
312
+ stdio: [
313
+ stdin === undefined ? "ignore" : "pipe",
314
+ file?.fd ?? "pipe",
315
+ file?.fd ?? "pipe",
316
+ ],
171
317
  });
318
+ // The program has its own copy of the file.
319
+ void file?.close().catch(() => undefined);
172
320
  const stdout = new BoundedCapture();
173
321
  const stderr = new BoundedCapture();
174
322
  let pending = Buffer.alloc(0);
175
323
  let failure;
176
324
  let closeResult;
177
325
  let terminating = false;
326
+ /** The caller asked for the stop: it is no failure. */
327
+ let stopping = false;
178
328
  let killSent = false;
179
329
  let killTimer;
180
330
  let settled = false;
@@ -184,13 +334,23 @@ export async function runCommand(command, options) {
184
334
  const cleanup = () => {
185
335
  untrack(child);
186
336
  cancelTimeout();
337
+ signal?.removeEventListener("abort", requestStop);
187
338
  if (killTimer)
188
339
  clearTimeout(killTimer);
189
340
  };
190
341
  const settle = () => {
191
- if (settled || !closeResult || (terminating && !killSent))
342
+ if (settled ||
343
+ !closeResult ||
344
+ (terminating && !killSent && groupStillExists(child)))
192
345
  return;
193
346
  settled = true;
347
+ const { code, signal } = closeResult;
348
+ void (groups ? endRegistered(groups) : Promise.resolve(0)).then((left) => finish(code, signal, left), (error) => {
349
+ failure ??= new Error(`Could not end what the commands of ${executable} left running: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
350
+ finish(code, signal, 0);
351
+ });
352
+ };
353
+ const finish = (code, signal, left) => {
194
354
  cleanup();
195
355
  if (failure) {
196
356
  if (failure instanceof ProcessTimeoutError) {
@@ -201,11 +361,13 @@ export async function runCommand(command, options) {
201
361
  return;
202
362
  }
203
363
  resolve({
204
- exitCode: closeResult.code ?? (closeResult.signal ? 1 : 0),
364
+ exitCode: code ?? (signal ? 1 : 0),
205
365
  stdout: stdout.text(),
206
366
  stderr: stderr.text(),
207
367
  stdoutTruncated: stdout.truncated,
208
368
  stderrTruncated: stderr.truncated,
369
+ stopped: stopping,
370
+ left,
209
371
  });
210
372
  };
211
373
  const sendKill = () => {
@@ -214,17 +376,32 @@ export async function runCommand(command, options) {
214
376
  signalGroup(child, "SIGKILL");
215
377
  settle();
216
378
  };
217
- const requestTermination = (error) => {
218
- if (!failure || error instanceof ProcessInterruptedError)
219
- failure = error;
379
+ const terminate = () => {
220
380
  if (terminating)
221
381
  return;
222
382
  terminating = true;
383
+ // Its timeout bounds the program's work, not its stop.
384
+ cancelTimeout();
223
385
  signalGroup(child, stopSignal);
224
- killTimer = setTimeout(sendKill, KILL_GRACE_MS);
386
+ killTimer = setTimeout(sendKill, stopGraceMs);
225
387
  };
226
- const cancelTimeout = after(timeoutMs, () => requestTermination(new ProcessTimeoutError(timeoutMs, executable)));
227
- track(child, onParentSignal);
388
+ const requestTermination = (error) => {
389
+ if (!failure || error instanceof ProcessInterruptedError)
390
+ failure = error;
391
+ terminate();
392
+ };
393
+ const requestStop = () => {
394
+ stopping = true;
395
+ terminate();
396
+ };
397
+ const cancelTimeout = timeoutMs === undefined
398
+ ? () => { }
399
+ : after(timeoutMs, () => requestTermination(new ProcessTimeoutError(timeoutMs, executable)));
400
+ track(child, onParentSignal, groups);
401
+ if (signal?.aborted)
402
+ requestStop();
403
+ else
404
+ signal?.addEventListener("abort", requestStop, { once: true });
228
405
  child.once("error", (error) => {
229
406
  requestTermination(new ProcessStartError(executable, error));
230
407
  });
@@ -240,14 +417,14 @@ export async function runCommand(command, options) {
240
417
  child.stdin.end(stdin);
241
418
  }
242
419
  }
243
- if (!child.stdout || !child.stderr)
420
+ if (!file && (!child.stdout || !child.stderr))
244
421
  requestTermination(new Error("Process output streams are unavailable"));
245
422
  child.stdout?.on("data", (chunk) => {
246
423
  stdout.append(chunk);
247
- if (!onLine || failure)
424
+ if (!onLine || failure || stopping)
248
425
  return;
249
426
  pending = Buffer.concat([pending, chunk]);
250
- while (!failure) {
427
+ while (!failure && !stopping) {
251
428
  const newline = pending.indexOf(0x0a);
252
429
  if (newline < 0)
253
430
  break;
@@ -261,26 +438,30 @@ export async function runCommand(command, options) {
261
438
  break;
262
439
  }
263
440
  try {
264
- onLine(line);
441
+ if (onLine(line) === "stop")
442
+ requestStop();
265
443
  }
266
444
  catch (error) {
267
445
  requestTermination(error instanceof Error ? error : new Error(String(error)));
268
446
  }
269
447
  }
270
- if (!failure && pending.length > MAX_LINE_BYTES)
448
+ if (!failure && !stopping && pending.length > MAX_LINE_BYTES)
271
449
  requestTermination(new Error(`Process output line exceeded ${MAX_LINE_BYTES} byte limit`));
272
450
  });
273
451
  child.stderr?.on("data", (chunk) => stderr.append(chunk));
274
452
  child.once("close", (code, signal) => {
275
453
  closeResult = { code, signal };
276
- if (!failure && groupStillExists(child))
454
+ // Done on time, however long its registered groups take to end.
455
+ cancelTimeout();
456
+ if (!failure && !stopping && groupStillExists(child))
277
457
  requestTermination(new Error(`Process group remained after ${executable} exited`));
278
- if (!failure && onLine && pending.length > 0) {
458
+ if (!failure && !stopping && onLine && pending.length > 0) {
279
459
  if (pending.length > MAX_LINE_BYTES)
280
460
  requestTermination(new Error(`Process output line exceeded ${MAX_LINE_BYTES} byte limit`));
281
461
  else {
282
462
  try {
283
- onLine(pending.toString("utf8").replace(/\r$/, ""));
463
+ if (onLine(pending.toString("utf8").replace(/\r$/, "")) === "stop")
464
+ requestStop();
284
465
  }
285
466
  catch (error) {
286
467
  requestTermination(error instanceof Error ? error : new Error(String(error)));
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/system/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/system/process.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { z } from "zod";
2
2
  import type { AgentUsage, TokenCounts } from "../../engine/metrics.js";
3
+ import type { NoticeKind } from "../../engine/types.js";
3
4
  import type { ProfileOf, Runtime } from "../../engine/profiles.js";
4
5
  export type { ProfileOf } from "../../engine/profiles.js";
5
6
  /** One agent call, as a runtime prepares it. */
@@ -14,6 +15,12 @@ export interface RuntimeCall<R extends Runtime> {
14
15
  runId: string;
15
16
  directory: string;
16
17
  };
18
+ /**
19
+ * Where the call's commands register the process group each runs in, so
20
+ * that what they leave running ends with the call: an adapter that
21
+ * `registersGroups` has them do it.
22
+ */
23
+ groups: string;
17
24
  }
18
25
  /** What an output line of a runtime means for the call, the same for every runtime. */
19
26
  export type RuntimeEvent = {
@@ -41,16 +48,54 @@ export type RuntimeEvent = {
41
48
  type: "warning";
42
49
  message: string;
43
50
  }
51
+ /**
52
+ * What the session confirms it runs with, as the runtime announces it: its
53
+ * whole configuration for the call's record, how it differs from the
54
+ * profile for the journal.
55
+ */
56
+ | {
57
+ type: "effective";
58
+ config: Record<string, unknown>;
59
+ differences: string[];
60
+ }
61
+ /** Something the runtime reported that explains the call without stopping it. */
62
+ | {
63
+ type: "notice";
64
+ notice: NoticeKind;
65
+ message: string;
66
+ }
67
+ /** A hook of the runtime's configuration that ran. */
68
+ | {
69
+ type: "hook";
70
+ name: string;
71
+ outcome: string;
72
+ exitCode?: number;
73
+ output?: string;
74
+ }
44
75
  /** The runtime reported that the call failed: it stops there. */
45
76
  | {
46
77
  type: "failure";
47
78
  message: string;
48
79
  }
49
- /** The agent's final text. */
80
+ /**
81
+ * The agent's final text. From a runtime that keeps running after it for
82
+ * its agent's background work, `background` comes with the latest turn's
83
+ * text and says what still runs.
84
+ */
50
85
  | {
51
86
  type: "result";
52
87
  text: string;
88
+ background?: Background;
53
89
  };
90
+ /**
91
+ * How many tasks a runtime still runs for its agent as its latest turn ends:
92
+ * sub-agents, whose reports the answer may wait for, and commands, which it
93
+ * only uses.
94
+ */
95
+ export interface Background {
96
+ agents: number;
97
+ commands: number;
98
+ }
54
99
  /** What stands for the workflow's prompt in the arguments a call records. */
55
100
  export declare const shownPrompt = "\u2039workflow prompt\u203A";
56
101
  /** A prepared call: the arguments after the executable, and the reader of its output. */
@@ -91,6 +136,13 @@ export interface RuntimeAdapter<R extends Runtime> {
91
136
  minimumVersion: string;
92
137
  /** The signal on which the runtime stops cleanly, its commands included. */
93
138
  stopSignal: NodeJS.Signals;
139
+ /** How long its clean stop may take, when longer than the second a command has. */
140
+ stopGraceMs?: number;
141
+ /**
142
+ * Its commands register their process groups where the call says: the
143
+ * machine must then list processes as flow ends them, checked before a run.
144
+ */
145
+ registersGroups?: true;
94
146
  /**
95
147
  * The environment variables the runtime reads, as its documentation names
96
148
  * them: a launch records which ones are set, never their values.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/system/runtimes/adapter.ts"],"names":[],"mappings":"AA2CA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AA0D/C;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,MAAoB,EACpB,KAAc;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACvC,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG;QAClB,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;SAC/B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0BAA0B,IAAI,UAAU,MAAM,EAAE,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/system/runtimes/adapter.ts"],"names":[],"mappings":"AAoFA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAiE/C;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,MAAoB,EACpB,KAAc;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACvC,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG;QAClB,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;SAC/B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0BAA0B,IAAI,UAAU,MAAM,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -17,15 +17,20 @@ export interface CallOptions {
17
17
  /**
18
18
  * One agent call, the same for every runtime: the request goes through standard
19
19
  * input, the adapter reads each output line, and the final text is the result.
20
- * The call's activity is recorded as it goes; a call that started always reports
21
- * its measures, even when it fails. With `calls`, the call keeps a record of what
20
+ * The agent's answer ends the call: the runtime is stopped with the background
21
+ * commands it still runs for the agent, which the journal counts. What the
22
+ * agent's commands leave running, once registered, ends with the call. The call's
23
+ * activity is recorded as it goes; a call that started always reports its
24
+ * measures, even when it fails. With `calls`, the call keeps a record of what
22
25
  * flow sent before it starts, and of the agent's final text once it has it.
23
26
  */
24
- export declare function runCall<R extends Runtime>(adapter: RuntimeAdapter<R>, call: RuntimeCall<R> & {
27
+ export declare function runCall<R extends Runtime>(adapter: RuntimeAdapter<R>, call: Omit<RuntimeCall<R>, "groups"> & {
25
28
  context: unknown;
26
29
  schema: Record<string, unknown>;
27
30
  /** Why the run had stopped, when it was resumed at this call's stage. */
28
31
  resumedAfter?: string;
32
+ /** Variables the request adds to the runtime's environment, under its own. */
33
+ env?: Record<string, string>;
29
34
  /** Recorded when the call starts. */
30
35
  settings: AgentSettings;
31
36
  /** The workflow prompt's name, recorded with it. */