@vercel/agent-runs 0.0.4 → 1.0.0-rc.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.
- package/CHANGELOG.md +5 -5
- package/dist/src/agent-run.d.ts.map +1 -1
- package/dist/src/agent-run.js +20 -3
- package/dist/src/agent-run.js.map +1 -1
- package/package.json +1 -1
- package/src/agent-run.ts +28 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# @vercel/agent-runs 0.0.
|
|
1
|
+
# @vercel/agent-runs 1.0.0-rc.1
|
|
2
2
|
|
|
3
|
-
Released 2026-
|
|
3
|
+
Released 2026-11-03 · [Compare with 1.0.0-rc.0](https://github.com/vercel/eve/compare/%40vercel%2Fagent-runs%401.0.0-rc.0...%40vercel%2Fagent-runs%401.0.0-rc.1)
|
|
4
4
|
|
|
5
5
|
## Bug Fixes
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
A
|
|
7
|
+
- Fix durable agent traces keeping every finished turn that called tools in parallel: each one stayed in the session's serialized context, so step inputs grew with every turn.
|
|
8
|
+
A checkpoint this process had already written, read back through another execution context, was treated as another process's write and forked the turn's trace tree; the stale copy then overwrote the tool completions and the checkpoint was never deleted. A replaced tree now also stops persisting. ([#5835](https://github.com/vercel/eve/pull/5835))
|
|
9
9
|
|
|
10
|
-
For an upgrade across multiple releases, review each version between the installed and target versions in the [target version's changelog](https://raw.githubusercontent.com/vercel/eve/refs/tags/%40vercel%2Fagent-runs%
|
|
10
|
+
For an upgrade across multiple releases, review each version between the installed and target versions in the [target version's changelog](https://raw.githubusercontent.com/vercel/eve/refs/tags/%40vercel%2Fagent-runs%401.0.0-rc.1/packages/tracing/CHANGELOG.md).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent-run.js
CHANGED
|
@@ -8,6 +8,7 @@ import { traceSnapshot } from "./core/snapshot.js";
|
|
|
8
8
|
import { operationHandle, wrappedOperation } from "./operations.js";
|
|
9
9
|
const METADATA_ONLY = { emit: true, recordInputs: false, recordOutputs: false };
|
|
10
10
|
const LIVE_TURNS = 1000;
|
|
11
|
+
const REVISIONS_PER_TURN = 10000;
|
|
11
12
|
export function createAgentRun(input) {
|
|
12
13
|
const telemetry = input.telemetry ?? otelTelemetry();
|
|
13
14
|
const checkpointer = input.checkpointer;
|
|
@@ -38,7 +39,7 @@ export function createAgentRun(input) {
|
|
|
38
39
|
let queue = Promise.resolve();
|
|
39
40
|
return () => {
|
|
40
41
|
const turn = entry();
|
|
41
|
-
if (checkpointer === undefined || turn === undefined)
|
|
42
|
+
if (checkpointer === undefined || turn === undefined || turn.retired)
|
|
42
43
|
return queue;
|
|
43
44
|
turn.writes++;
|
|
44
45
|
queue = queue.then(async () => {
|
|
@@ -51,6 +52,8 @@ export function createAgentRun(input) {
|
|
|
51
52
|
const revision = randomUUID();
|
|
52
53
|
await checkpointer.set(key, traceSnapshot({ ...turn.root.record(), revision }));
|
|
53
54
|
turn.revision = revision;
|
|
55
|
+
if (turn.revisions.size < REVISIONS_PER_TURN)
|
|
56
|
+
turn.revisions.add(revision);
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
catch (error) {
|
|
@@ -76,8 +79,11 @@ export function createAgentRun(input) {
|
|
|
76
79
|
const ceiling = currentAgentHandoff()?.capture;
|
|
77
80
|
capture = capture === undefined ? ceiling : intersectCapture(capture, ceiling);
|
|
78
81
|
const saved = checkpointer === undefined ? undefined : await loadCheckpoint(key);
|
|
82
|
+
const savedRevision = saved?.revision;
|
|
79
83
|
if (cached !== undefined &&
|
|
80
|
-
(cached.writes > 0 ||
|
|
84
|
+
(cached.writes > 0 ||
|
|
85
|
+
savedRevision === cached.revision ||
|
|
86
|
+
(savedRevision !== undefined && cached.revisions.has(savedRevision)))) {
|
|
81
87
|
if (context !== undefined)
|
|
82
88
|
cached.root.useContext(context);
|
|
83
89
|
// A re-entry may decline content the cached turn was allowed to record.
|
|
@@ -85,13 +91,24 @@ export function createAgentRun(input) {
|
|
|
85
91
|
cached.root.narrow(capture);
|
|
86
92
|
return cached;
|
|
87
93
|
}
|
|
94
|
+
// Another process wrote this checkpoint, so it replaces the cached tree.
|
|
95
|
+
// Callers may still hold the cached tree's operations; keep them from
|
|
96
|
+
// persisting their older view over the newer checkpoint.
|
|
97
|
+
if (cached !== undefined)
|
|
98
|
+
cached.retired = true;
|
|
88
99
|
let entry;
|
|
89
100
|
const onChange = persistence(key, () => entry);
|
|
90
101
|
const restored = saved === undefined ? undefined : await scopes.restore(saved, { capture, context, onChange });
|
|
91
102
|
const root = restored ?? (await open?.(onChange));
|
|
92
103
|
if (root === undefined)
|
|
93
104
|
return undefined;
|
|
94
|
-
entry = {
|
|
105
|
+
entry = {
|
|
106
|
+
root,
|
|
107
|
+
revision: savedRevision,
|
|
108
|
+
revisions: new Set(savedRevision === undefined ? [] : [savedRevision]),
|
|
109
|
+
retired: false,
|
|
110
|
+
writes: 0,
|
|
111
|
+
};
|
|
95
112
|
if (restored === undefined)
|
|
96
113
|
await onChange();
|
|
97
114
|
return entry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAsB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC;AA+FxF,MAAM,aAAa,GAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACjG,MAAM,UAAU,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/agent-run.ts
CHANGED
|
@@ -107,9 +107,20 @@ interface LiveTurn {
|
|
|
107
107
|
readonly root: LiveOperation;
|
|
108
108
|
/** Token of the last checkpoint this process wrote. */
|
|
109
109
|
revision: string | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Every checkpoint token this tree wrote. A checkpoint store scoped to an
|
|
112
|
+
* execution context (eve keeps it in the serialized workflow context) can
|
|
113
|
+
* hand a concurrent hook an older checkpoint of this same tree; that is not
|
|
114
|
+
* another process's write and must not fork the tree.
|
|
115
|
+
*/
|
|
116
|
+
readonly revisions: Set<string>;
|
|
117
|
+
/** Replaced by another process's checkpoint: the tree still records spans but no longer persists. */
|
|
118
|
+
retired: boolean;
|
|
110
119
|
writes: number;
|
|
111
120
|
}
|
|
112
121
|
|
|
122
|
+
const REVISIONS_PER_TURN = 10000;
|
|
123
|
+
|
|
113
124
|
export function createAgentRun(input: AgentRunOptions): AgentRun {
|
|
114
125
|
const telemetry = input.telemetry ?? otelTelemetry();
|
|
115
126
|
const checkpointer = input.checkpointer;
|
|
@@ -142,7 +153,7 @@ export function createAgentRun(input: AgentRunOptions): AgentRun {
|
|
|
142
153
|
let queue = Promise.resolve();
|
|
143
154
|
return () => {
|
|
144
155
|
const turn = entry();
|
|
145
|
-
if (checkpointer === undefined || turn === undefined) return queue;
|
|
156
|
+
if (checkpointer === undefined || turn === undefined || turn.retired) return queue;
|
|
146
157
|
turn.writes++;
|
|
147
158
|
queue = queue.then(async () => {
|
|
148
159
|
try {
|
|
@@ -153,6 +164,7 @@ export function createAgentRun(input: AgentRunOptions): AgentRun {
|
|
|
153
164
|
const revision = randomUUID();
|
|
154
165
|
await checkpointer.set(key, traceSnapshot({ ...turn.root.record(), revision }));
|
|
155
166
|
turn.revision = revision;
|
|
167
|
+
if (turn.revisions.size < REVISIONS_PER_TURN) turn.revisions.add(revision);
|
|
156
168
|
}
|
|
157
169
|
} catch (error) {
|
|
158
170
|
report(error, { phase: "checkpoint", operation: "activation" });
|
|
@@ -183,22 +195,35 @@ export function createAgentRun(input: AgentRunOptions): AgentRun {
|
|
|
183
195
|
const ceiling = currentAgentHandoff()?.capture;
|
|
184
196
|
capture = capture === undefined ? ceiling : intersectCapture(capture, ceiling);
|
|
185
197
|
const saved = checkpointer === undefined ? undefined : await loadCheckpoint(key);
|
|
198
|
+
const savedRevision = (saved as ScopeRecord | undefined)?.revision;
|
|
186
199
|
if (
|
|
187
200
|
cached !== undefined &&
|
|
188
|
-
(cached.writes > 0 ||
|
|
201
|
+
(cached.writes > 0 ||
|
|
202
|
+
savedRevision === cached.revision ||
|
|
203
|
+
(savedRevision !== undefined && cached.revisions.has(savedRevision)))
|
|
189
204
|
) {
|
|
190
205
|
if (context !== undefined) cached.root.useContext(context);
|
|
191
206
|
// A re-entry may decline content the cached turn was allowed to record.
|
|
192
207
|
if (capture !== undefined) cached.root.narrow(capture);
|
|
193
208
|
return cached;
|
|
194
209
|
}
|
|
210
|
+
// Another process wrote this checkpoint, so it replaces the cached tree.
|
|
211
|
+
// Callers may still hold the cached tree's operations; keep them from
|
|
212
|
+
// persisting their older view over the newer checkpoint.
|
|
213
|
+
if (cached !== undefined) cached.retired = true;
|
|
195
214
|
let entry: LiveTurn | undefined;
|
|
196
215
|
const onChange = persistence(key, () => entry);
|
|
197
216
|
const restored =
|
|
198
217
|
saved === undefined ? undefined : await scopes.restore(saved, { capture, context, onChange });
|
|
199
218
|
const root = restored ?? (await open?.(onChange));
|
|
200
219
|
if (root === undefined) return undefined;
|
|
201
|
-
entry = {
|
|
220
|
+
entry = {
|
|
221
|
+
root,
|
|
222
|
+
revision: savedRevision,
|
|
223
|
+
revisions: new Set(savedRevision === undefined ? [] : [savedRevision]),
|
|
224
|
+
retired: false,
|
|
225
|
+
writes: 0,
|
|
226
|
+
};
|
|
202
227
|
if (restored === undefined) await onChange();
|
|
203
228
|
return entry;
|
|
204
229
|
}
|