@anthropic-ai/sdk 0.119.0 → 0.120.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.
- package/CHANGELOG.md +13 -0
- package/helpers/beta/environments.d.mts +5 -4
- package/helpers/beta/environments.d.mts.map +1 -1
- package/helpers/beta/environments.d.ts +5 -4
- package/helpers/beta/environments.d.ts.map +1 -1
- package/helpers/beta/environments.js +5 -4
- package/helpers/beta/environments.js.map +1 -1
- package/helpers/beta/environments.mjs +5 -4
- package/helpers/beta/environments.mjs.map +1 -1
- package/internal/file-store.d.mts +136 -0
- package/internal/file-store.d.mts.map +1 -0
- package/internal/file-store.d.ts +136 -0
- package/internal/file-store.d.ts.map +1 -0
- package/internal/file-store.js +531 -0
- package/internal/file-store.js.map +1 -0
- package/internal/file-store.mjs +523 -0
- package/internal/file-store.mjs.map +1 -0
- package/lib/environments/poller.d.mts +6 -0
- package/lib/environments/poller.d.mts.map +1 -1
- package/lib/environments/poller.d.ts +6 -0
- package/lib/environments/poller.d.ts.map +1 -1
- package/lib/environments/poller.js +46 -1
- package/lib/environments/poller.js.map +1 -1
- package/lib/environments/poller.mjs +46 -1
- package/lib/environments/poller.mjs.map +1 -1
- package/lib/environments/worker.d.mts +89 -12
- package/lib/environments/worker.d.mts.map +1 -1
- package/lib/environments/worker.d.ts +89 -12
- package/lib/environments/worker.d.ts.map +1 -1
- package/lib/environments/worker.js +336 -67
- package/lib/environments/worker.js.map +1 -1
- package/lib/environments/worker.mjs +336 -68
- package/lib/environments/worker.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/beta/agents/agents.d.mts +322 -27
- package/resources/beta/agents/agents.d.mts.map +1 -1
- package/resources/beta/agents/agents.d.ts +322 -27
- package/resources/beta/agents/agents.d.ts.map +1 -1
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/agents/index.d.mts +1 -1
- package/resources/beta/agents/index.d.mts.map +1 -1
- package/resources/beta/agents/index.d.ts +1 -1
- package/resources/beta/agents/index.d.ts.map +1 -1
- package/resources/beta/agents/index.js.map +1 -1
- package/resources/beta/agents/index.mjs.map +1 -1
- package/resources/beta/beta.d.mts +2 -2
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +2 -2
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/environments/work.d.mts +5 -1
- package/resources/beta/environments/work.d.mts.map +1 -1
- package/resources/beta/environments/work.d.ts +5 -1
- package/resources/beta/environments/work.d.ts.map +1 -1
- package/resources/beta/environments/work.js +0 -17
- package/resources/beta/environments/work.js.map +1 -1
- package/resources/beta/environments/work.mjs +0 -17
- package/resources/beta/environments/work.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -1
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -1
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/messages/messages.d.mts +1 -1
- package/resources/beta/messages/messages.d.ts +1 -1
- package/resources/messages/messages.d.mts +1 -1
- package/resources/messages/messages.d.ts +1 -1
- package/src/helpers/beta/environments.ts +5 -4
- package/src/internal/file-store.ts +550 -0
- package/src/lib/environments/poller.ts +47 -1
- package/src/lib/environments/worker.ts +419 -79
- package/src/resources/beta/agents/agents.ts +435 -30
- package/src/resources/beta/agents/index.ts +17 -0
- package/src/resources/beta/beta.ts +34 -0
- package/src/resources/beta/environments/work.ts +7 -0
- package/src/resources/beta/index.ts +17 -0
- package/src/resources/beta/messages/messages.ts +1 -1
- package/src/resources/messages/messages.ts +1 -1
- package/src/tools/agent-toolset/fs-util.ts +40 -24
- package/src/tools/agent-toolset/memories.ts +1017 -0
- package/src/tools/agent-toolset/node.browser.ts +68 -0
- package/src/tools/agent-toolset/node.ts +139 -53
- package/src/tools/agent-toolset/skills.ts +29 -9
- package/src/tools/agent-toolset/sync-interval.ts +30 -0
- package/src/version.ts +1 -1
- package/tools/agent-toolset/fs-util.d.mts +23 -10
- package/tools/agent-toolset/fs-util.d.mts.map +1 -1
- package/tools/agent-toolset/fs-util.d.ts +23 -10
- package/tools/agent-toolset/fs-util.d.ts.map +1 -1
- package/tools/agent-toolset/fs-util.js +40 -25
- package/tools/agent-toolset/fs-util.js.map +1 -1
- package/tools/agent-toolset/fs-util.mjs +38 -25
- package/tools/agent-toolset/fs-util.mjs.map +1 -1
- package/tools/agent-toolset/memories.d.mts +173 -0
- package/tools/agent-toolset/memories.d.mts.map +1 -0
- package/tools/agent-toolset/memories.d.ts +173 -0
- package/tools/agent-toolset/memories.d.ts.map +1 -0
- package/tools/agent-toolset/memories.js +902 -0
- package/tools/agent-toolset/memories.js.map +1 -0
- package/tools/agent-toolset/memories.mjs +895 -0
- package/tools/agent-toolset/memories.mjs.map +1 -0
- package/tools/agent-toolset/node.browser.d.mts +31 -0
- package/tools/agent-toolset/node.browser.d.mts.map +1 -1
- package/tools/agent-toolset/node.browser.d.ts +31 -0
- package/tools/agent-toolset/node.browser.d.ts.map +1 -1
- package/tools/agent-toolset/node.browser.js +59 -1
- package/tools/agent-toolset/node.browser.js.map +1 -1
- package/tools/agent-toolset/node.browser.mjs +54 -0
- package/tools/agent-toolset/node.browser.mjs.map +1 -1
- package/tools/agent-toolset/node.d.mts +54 -22
- package/tools/agent-toolset/node.d.mts.map +1 -1
- package/tools/agent-toolset/node.d.ts +54 -22
- package/tools/agent-toolset/node.d.ts.map +1 -1
- package/tools/agent-toolset/node.js +83 -44
- package/tools/agent-toolset/node.js.map +1 -1
- package/tools/agent-toolset/node.mjs +77 -44
- package/tools/agent-toolset/node.mjs.map +1 -1
- package/tools/agent-toolset/skills.d.mts +16 -7
- package/tools/agent-toolset/skills.d.mts.map +1 -1
- package/tools/agent-toolset/skills.d.ts +16 -7
- package/tools/agent-toolset/skills.d.ts.map +1 -1
- package/tools/agent-toolset/skills.js +27 -9
- package/tools/agent-toolset/skills.js.map +1 -1
- package/tools/agent-toolset/skills.mjs +27 -9
- package/tools/agent-toolset/skills.mjs.map +1 -1
- package/tools/agent-toolset/sync-interval.d.mts +19 -0
- package/tools/agent-toolset/sync-interval.d.mts.map +1 -0
- package/tools/agent-toolset/sync-interval.d.ts +19 -0
- package/tools/agent-toolset/sync-interval.d.ts.map +1 -0
- package/tools/agent-toolset/sync-interval.js +29 -0
- package/tools/agent-toolset/sync-interval.js.map +1 -0
- package/tools/agent-toolset/sync-interval.mjs +25 -0
- package/tools/agent-toolset/sync-interval.mjs.map +1 -0
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -1,18 +1,58 @@
|
|
|
1
|
-
var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem;
|
|
1
|
+
var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem, _Lease_ctrl, _Lease_endReason;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../../internal/tslib.mjs";
|
|
3
|
-
import { AnthropicError } from "../../core/error.mjs";
|
|
3
|
+
import { AnthropicError, APIError } from "../../core/error.mjs";
|
|
4
4
|
import { loggerFor } from "../../internal/utils/log.mjs";
|
|
5
|
+
import { fromBase64 } from "../../internal/utils/base64.mjs";
|
|
6
|
+
import { decodeUTF8 } from "../../internal/utils/bytes.mjs";
|
|
5
7
|
import { readEnv } from "../../internal/utils/env.mjs";
|
|
6
8
|
import { sleep } from "../../internal/utils/sleep.mjs";
|
|
7
9
|
import { isFatal4xx, isStatus } from "../../internal/utils/backoff.mjs";
|
|
8
10
|
import { linkAbort } from "../../internal/utils/abort.mjs";
|
|
11
|
+
import { isObj } from "../../internal/utils/values.mjs";
|
|
9
12
|
import { buildHeaders } from "../../internal/headers.mjs";
|
|
10
13
|
import { SessionToolRunner } from "../tools/SessionToolRunner.mjs";
|
|
11
14
|
import { WorkPoller } from "./poller.mjs";
|
|
12
15
|
import { copyClientForHelper } from "../helper-client.mjs";
|
|
16
|
+
import { checkMemorySyncInterval } from "../../tools/agent-toolset/sync-interval.mjs";
|
|
13
17
|
const HEARTBEAT_DEFAULT_MS = 30000;
|
|
14
18
|
const HEARTBEAT_TTL_DEFAULT_MS = 90000;
|
|
15
19
|
const NO_HEARTBEAT_SENTINEL = 'NO_HEARTBEAT';
|
|
20
|
+
/** True when the session has at least one memory store attached. */
|
|
21
|
+
function hasMemoryStore(session) {
|
|
22
|
+
return session.resources.some((r) => r.type === 'memory_store');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the per-item sessions token from a work item's `secret` payload.
|
|
26
|
+
*
|
|
27
|
+
* The `secret` the poll response populates is not itself a credential: it is a
|
|
28
|
+
* URL-safe base64 JSON payload matching {@link BetaWorkSecret} — the
|
|
29
|
+
* `sessions_token` (the bearer for this item's work lifecycle and
|
|
30
|
+
* session-level calls) plus fields this worker does not consume. Returns the
|
|
31
|
+
* sessions token, or `null` (meaning: fall back to the environment key) when
|
|
32
|
+
* the payload is missing, doesn't decode, or carries no token. Never log the
|
|
33
|
+
* payload or anything extracted from it.
|
|
34
|
+
*/
|
|
35
|
+
export function sessionsTokenFromSecret(secret) {
|
|
36
|
+
if (!secret)
|
|
37
|
+
return null;
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
// The payload may arrive URL-safe and without base64 padding; normalize
|
|
41
|
+
// both before decoding.
|
|
42
|
+
const normalized = secret.replace(/-/g, '+').replace(/_/g, '/');
|
|
43
|
+
const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=');
|
|
44
|
+
parsed = JSON.parse(decodeUTF8(fromBase64(padded)));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
50
|
+
return null;
|
|
51
|
+
// The payload is untrusted input, so the token is still checked at runtime
|
|
52
|
+
// rather than trusted to match the schema.
|
|
53
|
+
const token = parsed.sessions_token;
|
|
54
|
+
return typeof token === 'string' && token !== '' ? token : null;
|
|
55
|
+
}
|
|
16
56
|
/**
|
|
17
57
|
* The self-hosted environment runner, composed from the control-plane
|
|
18
58
|
* {@link WorkPoller} and the per-session {@link SessionToolRunner}.
|
|
@@ -21,9 +61,17 @@ const NO_HEARTBEAT_SENTINEL = 'NO_HEARTBEAT';
|
|
|
21
61
|
* {@link AgentToolContext}, downloads the session agent's skills
|
|
22
62
|
* (`setupSkills`), then runs a {@link SessionToolRunner} for the session
|
|
23
63
|
* while heartbeating the work-item lease on the same event loop; on exit it
|
|
24
|
-
* force-stops the work item
|
|
25
|
-
*
|
|
26
|
-
*
|
|
64
|
+
* force-stops the work item (unless the lease was lost, in which case the item
|
|
65
|
+
* is left to whoever holds it now), cleans up the downloaded skills, and loops
|
|
66
|
+
* to the next one. The lease heartbeat reports `state === "stopping"` / a lost
|
|
67
|
+
* lease back into the run by aborting the session runner.
|
|
68
|
+
*
|
|
69
|
+
* The `environmentKey` is the worker's standing credential. When a claimed
|
|
70
|
+
* work item carries a per-item `secret` (a short-lived payload the poll
|
|
71
|
+
* response may populate), the sessions token extracted from it is preferred
|
|
72
|
+
* over the environment key for that item's heartbeat / force-stop /
|
|
73
|
+
* skill-download / session calls; polling itself always uses the environment
|
|
74
|
+
* key, and items without a usable secret fall back to it entirely.
|
|
27
75
|
*
|
|
28
76
|
* Use {@link EnvironmentWorker.handleItem} if you already hold a claimed work
|
|
29
77
|
* item (e.g. a `worker poll --on-work` script handed one to a fresh process) and
|
|
@@ -48,14 +96,26 @@ export class EnvironmentWorker {
|
|
|
48
96
|
constructor(opts) {
|
|
49
97
|
_EnvironmentWorker_instances.add(this);
|
|
50
98
|
_EnvironmentWorker_signal.set(this, void 0);
|
|
99
|
+
if (opts.unrestrictedPaths !== undefined) {
|
|
100
|
+
throw new AnthropicError('The `unrestrictedPaths` option you passed to EnvironmentWorker (or ' +
|
|
101
|
+
'client.beta.environments.work.worker()) is no longer supported. ' +
|
|
102
|
+
"The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` " +
|
|
103
|
+
"plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the " +
|
|
104
|
+
'file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a ' +
|
|
105
|
+
'`tools` factory.');
|
|
106
|
+
}
|
|
51
107
|
this.client = opts.client;
|
|
52
108
|
this.environmentId = opts.environmentId;
|
|
53
109
|
this.environmentKey = opts.environmentKey;
|
|
54
110
|
this.tools = opts.tools;
|
|
55
111
|
this.workdir = opts.workdir ?? process.cwd();
|
|
56
|
-
this.unrestrictedPaths = opts.unrestrictedPaths;
|
|
57
112
|
this.maxFileBytes = opts.maxFileBytes;
|
|
58
113
|
this.maxIdleMs = opts.maxIdleMs;
|
|
114
|
+
if (opts.memorySyncIntervalMs != null) {
|
|
115
|
+
checkMemorySyncInterval(opts.memorySyncIntervalMs, 'memorySyncIntervalMs');
|
|
116
|
+
}
|
|
117
|
+
this.memorySyncIntervalMs = opts.memorySyncIntervalMs;
|
|
118
|
+
this.memorySyncDeletions = opts.memorySyncDeletions ?? 'enabled';
|
|
59
119
|
this.workerId = opts.workerId;
|
|
60
120
|
this.requestOptions = opts.requestOptions;
|
|
61
121
|
__classPrivateFieldSet(this, _EnvironmentWorker_signal, opts.signal, "f");
|
|
@@ -78,12 +138,24 @@ export class EnvironmentWorker {
|
|
|
78
138
|
...(this.workerId !== undefined ? { workerId: this.workerId } : {}),
|
|
79
139
|
...(externalSignal ? { signal: externalSignal } : {}),
|
|
80
140
|
...(this.requestOptions !== undefined ? { requestOptions: this.requestOptions } : {}),
|
|
81
|
-
// The per-item handler
|
|
82
|
-
// single owner of `work.stop` rather than double-posting from the
|
|
141
|
+
// The per-item handler stops or releases every work item on exit; let it
|
|
142
|
+
// be the single owner of `work.stop` rather than double-posting from the
|
|
143
|
+
// poller.
|
|
83
144
|
autoStop: false,
|
|
84
145
|
});
|
|
85
146
|
for await (const work of poller) {
|
|
86
|
-
|
|
147
|
+
try {
|
|
148
|
+
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
// One bad item fails that item, not the worker: the handler's teardown
|
|
152
|
+
// already stopped or released it, so the next poll claims the next
|
|
153
|
+
// item. A store directory left behind by a killed worker would
|
|
154
|
+
// otherwise crashloop this process forever.
|
|
155
|
+
if (poller.signal?.aborted)
|
|
156
|
+
throw e;
|
|
157
|
+
loggerFor(this.client).error('work item failed', { work_id: work.id, error: String(e) });
|
|
158
|
+
}
|
|
87
159
|
}
|
|
88
160
|
}
|
|
89
161
|
/**
|
|
@@ -92,7 +164,9 @@ export class EnvironmentWorker {
|
|
|
92
164
|
* download the session agent's skills (`setupSkills`), run a
|
|
93
165
|
* {@link SessionToolRunner} for the session while heartbeating the work-item
|
|
94
166
|
* lease, and force-stop the work item on exit (whether the runner finishes
|
|
95
|
-
* normally, throws, or the
|
|
167
|
+
* normally, throws, or the control plane signals shutdown). The one
|
|
168
|
+
* exception is a lost lease: the item then belongs to the queue or another
|
|
169
|
+
* worker and is left alone.
|
|
96
170
|
*
|
|
97
171
|
* Use this when something else does the claiming — e.g. a `worker poll
|
|
98
172
|
* --on-work` script that hands an already-claimed item to a fresh process. The
|
|
@@ -102,13 +176,25 @@ export class EnvironmentWorker {
|
|
|
102
176
|
* option, then the worker's own `environmentKey`, then
|
|
103
177
|
* `ANTHROPIC_ENVIRONMENT_KEY`. With no arguments inside that command it just
|
|
104
178
|
* works. Throws a clear error naming the first of the four required values
|
|
105
|
-
* still missing after resolution.
|
|
179
|
+
* still missing after resolution. Throws `SessionMemoryError` when the
|
|
180
|
+
* session has memory stores attached but they cannot be mounted — the work
|
|
181
|
+
* item carried no sessions token (unless `memorySyncIntervalMs` turned
|
|
182
|
+
* memory off), or a store failed to download.
|
|
183
|
+
*
|
|
184
|
+
* `workSecret` is the work item's per-item `secret` payload from the poll
|
|
185
|
+
* response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is
|
|
186
|
+
* optional — when present, the sessions token extracted from it is preferred
|
|
187
|
+
* as the Bearer credential for this item's heartbeat / force-stop / session
|
|
188
|
+
* calls; when absent (or undecodable) those calls use the environment key.
|
|
106
189
|
*/
|
|
107
190
|
async handleItem(opts) {
|
|
108
191
|
const workId = opts?.workId ?? readEnv('ANTHROPIC_WORK_ID');
|
|
109
192
|
const environmentId = opts?.environmentId ?? readEnv('ANTHROPIC_ENVIRONMENT_ID');
|
|
110
193
|
const sessionId = opts?.sessionId ?? readEnv('ANTHROPIC_SESSION_ID');
|
|
111
194
|
const environmentKey = opts?.environmentKey ?? this.environmentKey ?? readEnv('ANTHROPIC_ENVIRONMENT_KEY');
|
|
195
|
+
// `||` rather than `??` so an empty option still falls through to the env
|
|
196
|
+
// var and then to null (matching how `readEnv` treats empty values).
|
|
197
|
+
const workSecret = opts?.workSecret || readEnv('ANTHROPIC_WORK_SECRET') || null;
|
|
112
198
|
if (!workId) {
|
|
113
199
|
throw new AnthropicError('handleItem: workId is required — pass it or set ANTHROPIC_WORK_ID');
|
|
114
200
|
}
|
|
@@ -124,6 +210,7 @@ export class EnvironmentWorker {
|
|
|
124
210
|
const work = {
|
|
125
211
|
id: workId,
|
|
126
212
|
environment_id: environmentId,
|
|
213
|
+
secret: workSecret,
|
|
127
214
|
data: { type: 'session', id: sessionId },
|
|
128
215
|
};
|
|
129
216
|
await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f"));
|
|
@@ -133,80 +220,213 @@ _EnvironmentWorker_signal = new WeakMap(), _EnvironmentWorker_instances = new We
|
|
|
133
220
|
/**
|
|
134
221
|
* The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and
|
|
135
222
|
* {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the
|
|
136
|
-
* work item's session while heartbeating its lease, force-stopping on exit
|
|
137
|
-
* Non-session work items are ignored.
|
|
223
|
+
* work item's session while heartbeating its lease, force-stopping on exit
|
|
224
|
+
* unless the lease was lost. Non-session work items are ignored.
|
|
225
|
+
*
|
|
226
|
+
* When the poll response carried a per-item `secret` (a short-lived payload
|
|
227
|
+
* scoped to this work item), the sessions token extracted from it is
|
|
228
|
+
* preferred over `environmentKey` as the Bearer credential for those
|
|
229
|
+
* per-item calls; a missing/undecodable secret falls back to
|
|
230
|
+
* `environmentKey` unchanged.
|
|
138
231
|
*/
|
|
139
232
|
async function _EnvironmentWorker_handleItem(work, environmentKey, externalSignal) {
|
|
140
233
|
const log = loggerFor(this.client);
|
|
234
|
+
// The per-item credential: the sessions token carried inside the work
|
|
235
|
+
// item's secret payload when the server issued one, otherwise the
|
|
236
|
+
// environment key. Never log this value.
|
|
237
|
+
const sessionsToken = sessionsTokenFromSecret(work.secret);
|
|
238
|
+
if (work.secret && sessionsToken === null) {
|
|
239
|
+
log.warn('work item carried a secret payload but no sessions token could be extracted; ' +
|
|
240
|
+
'falling back to the environment key', { work_id: work.id });
|
|
241
|
+
}
|
|
242
|
+
const itemCredential = sessionsToken ?? environmentKey;
|
|
141
243
|
// Every per-session call — the SessionToolRunner event stream/list/send, the
|
|
142
|
-
// lease heartbeat, and the work force-stop —
|
|
143
|
-
//
|
|
144
|
-
// `copyClientForHelper` also clears the parent's
|
|
145
|
-
// emits *only* the bearer credential on the
|
|
146
|
-
// `withOptions({authToken})` would leave `X-Api-Key` set as
|
|
244
|
+
// lease heartbeat, the skill download, and the work force-stop —
|
|
245
|
+
// authenticates with the per-item credential. Scope a client to it once and
|
|
246
|
+
// thread that through. `copyClientForHelper` also clears the parent's
|
|
247
|
+
// `apiKey`, so the sub-client emits *only* the bearer credential on the
|
|
248
|
+
// wire (a plain `withOptions({authToken})` would leave `X-Api-Key` set as
|
|
249
|
+
// well).
|
|
147
250
|
const sessionClient = copyClientForHelper(this.client, {
|
|
148
|
-
authToken:
|
|
251
|
+
authToken: itemCredential,
|
|
149
252
|
helper: 'environments-worker',
|
|
150
253
|
});
|
|
151
254
|
// The poller runs with `autoStop: false`, so the per-item handler is the
|
|
152
255
|
// single owner of `work.stop` for every claimed item.
|
|
153
256
|
const sessionId = work.data.id;
|
|
154
|
-
const ctx = {
|
|
155
|
-
workdir: this.workdir,
|
|
156
|
-
client: this.client,
|
|
157
|
-
sessionId,
|
|
158
|
-
...(this.unrestrictedPaths !== undefined ? { unrestrictedPaths: this.unrestrictedPaths } : {}),
|
|
159
|
-
...(this.maxFileBytes !== undefined ? { maxFileBytes: this.maxFileBytes } : {}),
|
|
160
|
-
};
|
|
161
|
-
// Lazily load the Node-only toolset module — see the import note at the top.
|
|
162
|
-
const agentToolset = await import("../../tools/agent-toolset/node.mjs");
|
|
163
|
-
let cleanupSkills = async () => { };
|
|
164
|
-
try {
|
|
165
|
-
cleanupSkills = await agentToolset.setupSkills(ctx);
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
log.warn('skill setup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
169
|
-
}
|
|
170
|
-
const tools = typeof this.tools === 'function' ?
|
|
171
|
-
this.tools(ctx)
|
|
172
|
-
: this.tools ?? agentToolset.betaAgentToolset20260401(ctx);
|
|
173
257
|
// A per-session controller: aborts when the supplied signal aborts, when the
|
|
174
258
|
// session runner finishes, or when the lease heartbeat says to stop.
|
|
175
259
|
const ctrl = new AbortController();
|
|
176
260
|
const detachExternal = linkAbort(externalSignal, ctrl);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
261
|
+
const lease = new Lease(ctrl);
|
|
262
|
+
// Lazily load the Node-only toolset module — see the import note at the top.
|
|
263
|
+
const agentToolset = await import("../../tools/agent-toolset/node.mjs");
|
|
264
|
+
// Start the lease heartbeat BEFORE the session fetch and the skill /
|
|
265
|
+
// memory downloads: those can take longer than the lease TTL, and an
|
|
266
|
+
// unheartbeated lease lapsing mid-download would let another worker
|
|
267
|
+
// reclaim the item and serve the same session (split-brain).
|
|
268
|
+
//
|
|
185
269
|
// Each heartbeat reports the lease TTL the server is enforcing; it becomes
|
|
186
270
|
// the runner's tool-result send retry window so a send keeps retrying
|
|
187
|
-
// exactly as long as the lease could still be live.
|
|
188
|
-
|
|
271
|
+
// exactly as long as the lease could still be live. The runner is only
|
|
272
|
+
// built after the downloads, so hold the latest TTL until then.
|
|
273
|
+
let leaseTtlMs;
|
|
274
|
+
let runner;
|
|
275
|
+
const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => {
|
|
276
|
+
leaseTtlMs = ttlMs;
|
|
277
|
+
runner?._setSendRetryWindow(ttlMs);
|
|
278
|
+
}).catch((e) => {
|
|
189
279
|
if (!ctrl.signal.aborted)
|
|
190
280
|
log.error('heartbeat loop failed', { work_id: work.id, error: String(e) });
|
|
191
281
|
ctrl.abort();
|
|
192
282
|
});
|
|
283
|
+
let cleanupSkills = async () => { };
|
|
284
|
+
let stores;
|
|
285
|
+
let cleanEnd = false;
|
|
193
286
|
try {
|
|
287
|
+
if (work.data.type !== 'session') {
|
|
288
|
+
log.debug('skipping non-session work item', { work_id: work.id, type: work.data.type });
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// One session fetch, shared by the skills download and the memory-store
|
|
292
|
+
// download — two fetches could disagree about the attached resources.
|
|
293
|
+
// A failed fetch fails the work item (the teardown below still stops
|
|
294
|
+
// or releases it).
|
|
295
|
+
const session = await sessionClient.beta.sessions.retrieve(sessionId);
|
|
296
|
+
// Only with the session in hand can we tell one that simply has no
|
|
297
|
+
// memory from one whose memory we cannot mount. Turning memory off
|
|
298
|
+
// with the interval knob is a deliberate opt-out and stays quiet.
|
|
299
|
+
if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) {
|
|
300
|
+
throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token ` +
|
|
301
|
+
`(work_id=${work.id}, session_id=${sessionId}); ` +
|
|
302
|
+
'the memory endpoints reject the environment key, so the poller must issue a per-item ' +
|
|
303
|
+
'`secret` carrying `sessions_token`, or set `memorySyncIntervalMs: null` to run without memory');
|
|
304
|
+
}
|
|
305
|
+
const ctx = {
|
|
306
|
+
workdir: this.workdir,
|
|
307
|
+
// The scoped sub-client, not the parent: the skill download
|
|
308
|
+
// `setupSkills` performs for this session rides the same per-item
|
|
309
|
+
// credential as every other per-item call.
|
|
310
|
+
client: sessionClient,
|
|
311
|
+
session,
|
|
312
|
+
...(this.maxFileBytes !== undefined ? { maxFileBytes: this.maxFileBytes } : {}),
|
|
313
|
+
};
|
|
314
|
+
try {
|
|
315
|
+
cleanupSkills = await agentToolset.setupSkills(ctx);
|
|
316
|
+
}
|
|
317
|
+
catch (e) {
|
|
318
|
+
log.warn('skill setup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
319
|
+
}
|
|
320
|
+
// Memory stores: the memory_stores endpoints accept the per-item sessions
|
|
321
|
+
// token but reject the environment key, so download and sync only run when
|
|
322
|
+
// the item carried a usable secret (and the interval is set).
|
|
323
|
+
// `sessionClient` is already scoped to that token then, so the memory
|
|
324
|
+
// calls ride the same sub-client. A store that cannot be materialised
|
|
325
|
+
// throws `SessionMemoryError` out of `download` and fails the item.
|
|
326
|
+
if (sessionsToken !== null && this.memorySyncIntervalMs !== null) {
|
|
327
|
+
stores = new agentToolset.SessionMemoryStores(sessionClient, {
|
|
328
|
+
workdir: this.workdir,
|
|
329
|
+
...(this.memorySyncIntervalMs !== undefined ? { syncIntervalMs: this.memorySyncIntervalMs } : {}),
|
|
330
|
+
syncDeletions: this.memorySyncDeletions,
|
|
331
|
+
});
|
|
332
|
+
await stores.download(session);
|
|
333
|
+
// A store mounted outside the workdir must stay reachable by the file
|
|
334
|
+
// tools; read-only stores still refuse writes.
|
|
335
|
+
ctx.allowedRoots = stores.roots;
|
|
336
|
+
ctx.readOnlyRoots = stores.readOnlyRoots;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
log.debug('memory stores disabled for this item', { work_id: work.id });
|
|
340
|
+
}
|
|
341
|
+
const tools = typeof this.tools === 'function' ?
|
|
342
|
+
this.tools(ctx)
|
|
343
|
+
: this.tools ?? agentToolset.betaAgentToolset20260401(ctx);
|
|
344
|
+
runner = new SessionToolRunner(sessionId, {
|
|
345
|
+
client: sessionClient,
|
|
346
|
+
tools,
|
|
347
|
+
...(this.maxIdleMs !== undefined ? { maxIdleMs: this.maxIdleMs } : {}),
|
|
348
|
+
...(this.requestOptions !== undefined ? { requestOptions: this.requestOptions } : {}),
|
|
349
|
+
signal: ctrl.signal,
|
|
350
|
+
});
|
|
351
|
+
if (leaseTtlMs !== undefined)
|
|
352
|
+
runner._setSendRetryWindow(leaseTtlMs);
|
|
194
353
|
for await (const _ of runner) {
|
|
195
354
|
// Drive the runner to completion; per-call observability is not part
|
|
196
355
|
// of this composition's surface — use `SessionToolRunner` directly
|
|
197
356
|
// (via `client.beta.sessions.events.toolRunner`) if you want it.
|
|
357
|
+
if (stores)
|
|
358
|
+
await stores.syncIfDue();
|
|
198
359
|
}
|
|
360
|
+
// Only a clean stream end earns the last full sync; it runs in the
|
|
361
|
+
// teardown below.
|
|
362
|
+
cleanEnd = !ctrl.signal.aborted;
|
|
199
363
|
}
|
|
200
364
|
finally {
|
|
201
|
-
|
|
365
|
+
// The heartbeat keeps the lease alive until this teardown is done.
|
|
366
|
+
try {
|
|
367
|
+
// cleanupSkills first, so its failure cannot skip the memory flush.
|
|
368
|
+
await cleanupSkills().catch((e) => {
|
|
369
|
+
log.warn('skill cleanup failed', { session_id: sessionId, work_id: work.id, error: String(e) });
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
if (stores) {
|
|
374
|
+
const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS;
|
|
375
|
+
if (cleanEnd) {
|
|
376
|
+
const finishCutOff = await withTimeout(stores.finish(), boundMs);
|
|
377
|
+
if (finishCutOff) {
|
|
378
|
+
log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id });
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Also after finish(): it swallows its own failures, and a
|
|
382
|
+
// clean flush is a no-op.
|
|
383
|
+
const flushBound = new AbortController();
|
|
384
|
+
const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs);
|
|
385
|
+
if (flushCutOff) {
|
|
386
|
+
flushBound.abort();
|
|
387
|
+
log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id });
|
|
388
|
+
}
|
|
389
|
+
await stores.dispose().catch((e) => {
|
|
390
|
+
log.warn('memory store cleanup failed', {
|
|
391
|
+
session_id: sessionId,
|
|
392
|
+
work_id: work.id,
|
|
393
|
+
error: String(e),
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
lease.finish('runner_done');
|
|
202
399
|
detachExternal();
|
|
203
400
|
await heartbeatPromise;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
401
|
+
// Stop only an item this worker still holds — after a lost lease it
|
|
402
|
+
// belongs to the queue or another worker.
|
|
403
|
+
if (lease.lost) {
|
|
404
|
+
log.info('lease lost; released without stopping it', { session_id: sessionId, work_id: work.id });
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
await forceStop(sessionClient, work, log, this.requestOptions);
|
|
408
|
+
}
|
|
208
409
|
}
|
|
209
410
|
};
|
|
411
|
+
/**
|
|
412
|
+
* Resolve when `p` settles or `ms` elapses — `true` when `ms` elapsed
|
|
413
|
+
* first. A timed-out `p` keeps running — JS cannot cancel a promise.
|
|
414
|
+
*/
|
|
415
|
+
async function withTimeout(p, ms) {
|
|
416
|
+
let timer;
|
|
417
|
+
try {
|
|
418
|
+
return await Promise.race([
|
|
419
|
+
p.then(() => false, () => false),
|
|
420
|
+
new Promise((resolve) => {
|
|
421
|
+
timer = setTimeout(() => resolve(true), ms);
|
|
422
|
+
}),
|
|
423
|
+
]);
|
|
424
|
+
}
|
|
425
|
+
finally {
|
|
426
|
+
if (timer !== undefined)
|
|
427
|
+
clearTimeout(timer);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
210
430
|
/** Force-stop a claimed work item, swallowing the 409 that means it's already stopped. */
|
|
211
431
|
async function forceStop(client, work, log, requestOptions) {
|
|
212
432
|
try {
|
|
@@ -223,14 +443,51 @@ async function forceStop(client, work, log, requestOptions) {
|
|
|
223
443
|
}
|
|
224
444
|
}
|
|
225
445
|
/**
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
446
|
+
* This worker's view of one work-item lease: the per-item abort signal plus
|
|
447
|
+
* why heartbeating ended. The first recorded reason wins, so a run aborted
|
|
448
|
+
* *because* the lease was lost still reads as lost afterwards; an abort with
|
|
449
|
+
* no recorded reason (the external signal) is not lost.
|
|
450
|
+
*/
|
|
451
|
+
class Lease {
|
|
452
|
+
constructor(ctrl) {
|
|
453
|
+
_Lease_ctrl.set(this, void 0);
|
|
454
|
+
_Lease_endReason.set(this, void 0);
|
|
455
|
+
__classPrivateFieldSet(this, _Lease_ctrl, ctrl, "f");
|
|
456
|
+
}
|
|
457
|
+
get signal() {
|
|
458
|
+
return __classPrivateFieldGet(this, _Lease_ctrl, "f").signal;
|
|
459
|
+
}
|
|
460
|
+
finish(reason) {
|
|
461
|
+
__classPrivateFieldSet(this, _Lease_endReason, __classPrivateFieldGet(this, _Lease_endReason, "f") ?? reason, "f");
|
|
462
|
+
__classPrivateFieldGet(this, _Lease_ctrl, "f").abort();
|
|
463
|
+
}
|
|
464
|
+
/** True once the item belongs to the queue or another worker. */
|
|
465
|
+
get lost() {
|
|
466
|
+
return __classPrivateFieldGet(this, _Lease_endReason, "f") === 'lease_lost' || __classPrivateFieldGet(this, _Lease_endReason, "f") === 'assumed_lost';
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
_Lease_ctrl = new WeakMap(), _Lease_endReason = new WeakMap();
|
|
470
|
+
/** The server's view of the lease carried by a 412 heartbeat response, or empty if absent. */
|
|
471
|
+
function serverLeaseState(e) {
|
|
472
|
+
let node = e instanceof APIError ? e.error : undefined;
|
|
473
|
+
for (const key of ['error', 'details', 'current_state']) {
|
|
474
|
+
if (!isObj(node))
|
|
475
|
+
return {};
|
|
476
|
+
node = node[key];
|
|
477
|
+
}
|
|
478
|
+
return isObj(node) ? node : {};
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Keep the work-item lease alive while a session is being served. Runs until
|
|
482
|
+
* `lease` ends, and ends it itself when the control plane reports the work is
|
|
483
|
+
* `stopping`/`stopped` or no longer extends the lease, when a heartbeat is
|
|
484
|
+
* rejected (a 412 means the lease already belongs to someone else), or when no
|
|
229
485
|
* heartbeat has succeeded for longer than the lease ttl (the lease is assumed
|
|
230
|
-
* lost
|
|
231
|
-
*
|
|
486
|
+
* lost, so two runners don't end up serving the same work). Each heartbeat
|
|
487
|
+
* call is cut off after the current beat interval so a hung request cannot
|
|
488
|
+
* outlive the lease it is meant to renew.
|
|
232
489
|
*/
|
|
233
|
-
async function heartbeatLoop(client, work,
|
|
490
|
+
async function heartbeatLoop(client, work, lease, logger, requestOptions,
|
|
234
491
|
/** Called with the server-reported lease TTL after every successful beat. */
|
|
235
492
|
onLeaseTtl) {
|
|
236
493
|
let intervalMs = HEARTBEAT_DEFAULT_MS;
|
|
@@ -241,7 +498,7 @@ onLeaseTtl) {
|
|
|
241
498
|
// Not the request `timeout` option: the core client retries timeouts, so
|
|
242
499
|
// it would not bound the call as a whole.
|
|
243
500
|
const beatCtrl = new AbortController();
|
|
244
|
-
const detach = linkAbort(
|
|
501
|
+
const detach = linkAbort(lease.signal, beatCtrl);
|
|
245
502
|
const cutoff = setTimeout(() => beatCtrl.abort(), intervalMs);
|
|
246
503
|
try {
|
|
247
504
|
const resp = await client.beta.environments.work.heartbeat(work.id, { environment_id: work.environment_id, expected_last_heartbeat: last }, { ...requestOptions, headers: buildHeaders([requestOptions?.headers]), signal: beatCtrl.signal });
|
|
@@ -254,20 +511,31 @@ onLeaseTtl) {
|
|
|
254
511
|
}
|
|
255
512
|
if (resp.state === 'stopping' || resp.state === 'stopped') {
|
|
256
513
|
logger.info('heartbeat signals shutdown', { work_id: work.id, state: resp.state });
|
|
257
|
-
|
|
514
|
+
lease.finish('control_plane_stop');
|
|
258
515
|
}
|
|
259
516
|
if (!resp.lease_extended) {
|
|
260
517
|
logger.warn('lease not extended, shutting down', { work_id: work.id });
|
|
261
|
-
|
|
518
|
+
lease.finish('control_plane_stop');
|
|
262
519
|
}
|
|
263
520
|
}
|
|
264
521
|
catch (e) {
|
|
265
522
|
// An abort throws to unwind the caller (the `heartbeatLoop(...).catch`
|
|
266
523
|
// in `#handleItem`) rather than returning early.
|
|
267
|
-
|
|
524
|
+
lease.signal.throwIfAborted();
|
|
525
|
+
if (isStatus(e, 412)) {
|
|
526
|
+
const server = serverLeaseState(e);
|
|
527
|
+
logger.error('lease lost: heartbeat precondition failed', {
|
|
528
|
+
work_id: work.id,
|
|
529
|
+
server_state: server['state'],
|
|
530
|
+
server_ttl_seconds: server['ttl_seconds'],
|
|
531
|
+
server_last_heartbeat: server['last_heartbeat'],
|
|
532
|
+
});
|
|
533
|
+
lease.finish('lease_lost');
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
268
536
|
if (isFatal4xx(e)) {
|
|
269
537
|
logger.error('permanent heartbeat failure', { work_id: work.id, error: String(e) });
|
|
270
|
-
|
|
538
|
+
lease.finish('heartbeat_rejected');
|
|
271
539
|
throw e;
|
|
272
540
|
}
|
|
273
541
|
if (Date.now() - lastSuccessMs > ttlMs) {
|
|
@@ -276,7 +544,7 @@ onLeaseTtl) {
|
|
|
276
544
|
ttl_ms: ttlMs,
|
|
277
545
|
error: String(e),
|
|
278
546
|
});
|
|
279
|
-
|
|
547
|
+
lease.finish('assumed_lost');
|
|
280
548
|
return;
|
|
281
549
|
}
|
|
282
550
|
logger.warn('transient heartbeat failure', { work_id: work.id, error: String(e) });
|
|
@@ -287,9 +555,9 @@ onLeaseTtl) {
|
|
|
287
555
|
}
|
|
288
556
|
};
|
|
289
557
|
await beat();
|
|
290
|
-
while (!
|
|
291
|
-
await sleep(intervalMs,
|
|
292
|
-
|
|
558
|
+
while (!lease.signal.aborted) {
|
|
559
|
+
await sleep(intervalMs, lease.signal);
|
|
560
|
+
lease.signal.throwIfAborted();
|
|
293
561
|
await beat();
|
|
294
562
|
}
|
|
295
563
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.mjs","sourceRoot":"","sources":["../../src/lib/environments/worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.mjs","sourceRoot":"","sources":["../../src/lib/environments/worker.ts"],"names":[],"mappings":"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"}
|