@sema-agent/core 1.363.0 → 1.365.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/dist/agents/roster-store.d.ts +2 -2
- package/dist/agents/roster-store.d.ts.map +1 -1
- package/dist/agents/roster-store.js +0 -0
- package/dist/agents/roster-store.js.map +1 -1
- package/dist/agents/subagent.d.ts +4 -2
- package/dist/agents/subagent.d.ts.map +1 -1
- package/dist/agents/subagent.js +79 -24
- package/dist/agents/subagent.js.map +1 -1
- package/dist/core/background-agent-store.d.ts +110 -0
- package/dist/core/background-agent-store.d.ts.map +1 -0
- package/dist/core/background-agent-store.js +0 -0
- package/dist/core/background-agent-store.js.map +1 -0
- package/dist/core/runner/prepare-task.d.ts.map +1 -1
- package/dist/core/runner/prepare-task.js +2 -1
- package/dist/core/runner/prepare-task.js.map +1 -1
- package/dist/core/task-registry.d.ts +44 -0
- package/dist/core/task-registry.d.ts.map +1 -1
- package/dist/core/task-registry.js +354 -8
- package/dist/core/task-registry.js.map +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/workflow-journal-store.d.ts.map +1 -1
- package/dist/core/workflow-journal-store.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/stores/file/background-agent-store.d.ts +49 -0
- package/dist/stores/file/background-agent-store.d.ts.map +1 -0
- package/dist/stores/file/background-agent-store.js +227 -0
- package/dist/stores/file/background-agent-store.js.map +1 -0
- package/dist/stores/file/fs-atomic.d.ts.map +1 -1
- package/dist/stores/file/fs-atomic.js +17 -1
- package/dist/stores/file/fs-atomic.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ import type { AgentTool, ExecutionEnv } from "../internal/harness.js";
|
|
|
2
2
|
import type { ToolEffect } from "./types.js";
|
|
3
3
|
import { type BackgroundShellCapability, type BackgroundShellId } from "./background-shell.js";
|
|
4
4
|
import { type WorkflowRunStore } from "./workflow-run-store.js";
|
|
5
|
+
import { type BackgroundAgentRecord, type BackgroundAgentStore } from "./background-agent-store.js";
|
|
5
6
|
import type { WorkflowHandle } from "../orchestration/workflow.js";
|
|
6
7
|
import type { TaskNotificationPayload } from "./task-notification.js";
|
|
7
8
|
export type SemaTaskType = "background_bash" | "workflow" | "background_agent" | "monitor";
|
|
@@ -41,9 +42,20 @@ export interface TaskAccess {
|
|
|
41
42
|
scope?: string;
|
|
42
43
|
sessionId?: string;
|
|
43
44
|
}
|
|
45
|
+
interface DurableAgentLane {
|
|
46
|
+
store: BackgroundAgentStore;
|
|
47
|
+
record: BackgroundAgentRecord;
|
|
48
|
+
chain: Promise<void>;
|
|
49
|
+
written: boolean;
|
|
50
|
+
poisoned: boolean;
|
|
51
|
+
flushFailed: boolean;
|
|
52
|
+
redrives?: number;
|
|
53
|
+
}
|
|
44
54
|
interface BackgroundAgentTaskHandle extends SemaTaskHandle {
|
|
45
55
|
type: "background_agent";
|
|
46
56
|
abort: AbortController;
|
|
57
|
+
sessionId?: string;
|
|
58
|
+
durable?: DurableAgentLane;
|
|
47
59
|
notify?: (notification: import("./task-notification.js").TaskNotificationPayload, opts?: {
|
|
48
60
|
priority?: import("./task-notification.js").SystemInjectionPriority;
|
|
49
61
|
}) => void | "queued" | "parked" | "dropped_duplicate" | Promise<"queued" | "parked" | "dropped_duplicate">;
|
|
@@ -120,6 +132,8 @@ export interface RegisterBackgroundAgentInput extends TaskAccess {
|
|
|
120
132
|
abort: AbortController;
|
|
121
133
|
now?: number;
|
|
122
134
|
sessionScoped?: true;
|
|
135
|
+
id?: string;
|
|
136
|
+
store?: BackgroundAgentStore;
|
|
123
137
|
}
|
|
124
138
|
export interface RegisterWorkflowInput extends TaskAccess {
|
|
125
139
|
runId: string;
|
|
@@ -132,6 +146,7 @@ export interface RegisterWorkflowInput extends TaskAccess {
|
|
|
132
146
|
}
|
|
133
147
|
export interface TaskPollOptions {
|
|
134
148
|
workflowStore?: WorkflowRunStore;
|
|
149
|
+
agentStore?: BackgroundAgentStore;
|
|
135
150
|
filter?: string;
|
|
136
151
|
block?: boolean;
|
|
137
152
|
timeoutMs?: number;
|
|
@@ -139,12 +154,15 @@ export interface TaskPollOptions {
|
|
|
139
154
|
}
|
|
140
155
|
export interface TaskStopOptions {
|
|
141
156
|
workflowStore?: WorkflowRunStore;
|
|
157
|
+
agentStore?: BackgroundAgentStore;
|
|
142
158
|
}
|
|
143
159
|
export interface TaskToolOptions extends TaskAccess {
|
|
144
160
|
registry: TaskRegistry;
|
|
145
161
|
workflowStore?: WorkflowRunStore;
|
|
162
|
+
agentStore?: BackgroundAgentStore;
|
|
146
163
|
deadlineMs?: () => number | undefined;
|
|
147
164
|
}
|
|
165
|
+
export declare const DURABLE_AGENT_HEARTBEAT_MS = 60000;
|
|
148
166
|
export declare const BG_AGENT_REAP_STOP_ERROR = "stopped (parent task ended or TaskStop)";
|
|
149
167
|
export declare const MONITOR_BATCH_WINDOW_MS = 200;
|
|
150
168
|
export declare const MONITOR_DEFAULT_TIMEOUT_MS = 300000;
|
|
@@ -157,6 +175,31 @@ export declare class TaskRegistry {
|
|
|
157
175
|
private sessionReapHooks;
|
|
158
176
|
private bgQuiescenceWatchers;
|
|
159
177
|
private legacyToTaskId;
|
|
178
|
+
readonly writerId: string;
|
|
179
|
+
private reapingHandles;
|
|
180
|
+
private durableHeartbeatTimer;
|
|
181
|
+
private ensureDurableHeartbeat;
|
|
182
|
+
private durableAgentWrite;
|
|
183
|
+
durableAgentArmed(id: string): boolean;
|
|
184
|
+
durableAgentRowProbe(id: string): (() => Promise<boolean>) | undefined;
|
|
185
|
+
reapDurableAgents(scope: string, deps: {
|
|
186
|
+
store: BackgroundAgentStore;
|
|
187
|
+
sessions?: {
|
|
188
|
+
unpin?(sessionId: string): unknown;
|
|
189
|
+
release(sessionId: string): Promise<void> | void;
|
|
190
|
+
};
|
|
191
|
+
}, policy: {
|
|
192
|
+
now?: number;
|
|
193
|
+
maxAgeMs?: number;
|
|
194
|
+
keep?: number;
|
|
195
|
+
staleRunningMaxAgeMs?: number;
|
|
196
|
+
}): Promise<{
|
|
197
|
+
rowsReaped: number;
|
|
198
|
+
sessionsReleased: number;
|
|
199
|
+
skippedNoSessions: number;
|
|
200
|
+
}>;
|
|
201
|
+
releaseDurableTranscriptAnchor(id: string): void;
|
|
202
|
+
bindBackgroundAgentSession(id: string, sessionId: string): void;
|
|
160
203
|
mintTaskId(type: SemaTaskType): string;
|
|
161
204
|
registerBackgroundBash(input: RegisterBackgroundBashInput): string;
|
|
162
205
|
isBackgroundOutputFile(canonicalPath: string, access: TaskAccess, env: unknown): boolean;
|
|
@@ -217,6 +260,7 @@ export declare class TaskRegistry {
|
|
|
217
260
|
content: string;
|
|
218
261
|
details: UnifiedTaskOutput;
|
|
219
262
|
}>;
|
|
263
|
+
private serveDurableAgentRow;
|
|
220
264
|
stopTask(id: string, access: TaskAccess, opts?: TaskStopOptions): Promise<{
|
|
221
265
|
content: string;
|
|
222
266
|
details: UnifiedTaskOutput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-registry.d.ts","sourceRoot":"","sources":["../../src/core/task-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-registry.d.ts","sourceRoot":"","sources":["../../src/core/task-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { defineTool } from "./tools.js";
|
|
|
4
4
|
import { hasBackgroundShell } from "./background-shell.js";
|
|
5
5
|
import { shutdownDebug } from "./shutdown-debug.js";
|
|
6
6
|
import { summarizeWorkflowRun } from "./workflow-run-store.js";
|
|
7
|
+
import { canAccessAgentRecord, BackgroundAgentStoreError, } from "./background-agent-store.js";
|
|
7
8
|
import { delimitUntrusted } from "./untrusted-text.js";
|
|
8
9
|
import { boundedRedactedSummary } from "./untrusted-egress.js";
|
|
9
10
|
const defaultMonitorTimers = {
|
|
@@ -33,6 +34,8 @@ const sleepMs = (ms, signal) => new Promise((resolve) => {
|
|
|
33
34
|
signal?.addEventListener("abort", done, { once: true });
|
|
34
35
|
});
|
|
35
36
|
const BLOCK_WAIT_WRITEOUT_RESERVE_MS = 5_000;
|
|
37
|
+
export const DURABLE_AGENT_HEARTBEAT_MS = 60_000;
|
|
38
|
+
const DURABLE_AGENT_HANDLE_RE = /^a[0-9a-f]{6,32}$/;
|
|
36
39
|
const TASK_PREFIX = {
|
|
37
40
|
background_bash: "b",
|
|
38
41
|
workflow: "w",
|
|
@@ -169,10 +172,10 @@ function monitorInTimeoutWindow(handle) {
|
|
|
169
172
|
return handle.status === "running" && handle.deadlineAt !== undefined && handle.timers.now() < handle.deadlineAt;
|
|
170
173
|
}
|
|
171
174
|
function canAccess(handle, access) {
|
|
172
|
-
if (handle.scope
|
|
175
|
+
if (handle.scope === undefined || access.scope === undefined || access.scope !== handle.scope)
|
|
173
176
|
return false;
|
|
174
177
|
if (handle.owner === undefined)
|
|
175
|
-
return
|
|
178
|
+
return false;
|
|
176
179
|
if (access.owner === handle.owner)
|
|
177
180
|
return true;
|
|
178
181
|
if (handle.sessionScoped && access.sessionId !== undefined && access.sessionId === handle.owner)
|
|
@@ -180,8 +183,8 @@ function canAccess(handle, access) {
|
|
|
180
183
|
return false;
|
|
181
184
|
}
|
|
182
185
|
function assertOwnership(input, site) {
|
|
183
|
-
if (input.owner === undefined
|
|
184
|
-
throw new Error(`TaskRegistry.${site}:
|
|
186
|
+
if (input.owner === undefined || input.scope === undefined) {
|
|
187
|
+
throw new Error(`TaskRegistry.${site}: owner AND scope are both required (access is default-deny on both axes; use scope "default" for a single-tenant deployment)`);
|
|
185
188
|
}
|
|
186
189
|
}
|
|
187
190
|
function canAccessWorkflowRun(run, access) {
|
|
@@ -275,6 +278,221 @@ export class TaskRegistry {
|
|
|
275
278
|
sessionReapHooks = new Set();
|
|
276
279
|
bgQuiescenceWatchers = new Map();
|
|
277
280
|
legacyToTaskId = new Map();
|
|
281
|
+
writerId = randomBytes(8).toString("hex");
|
|
282
|
+
reapingHandles = new Set();
|
|
283
|
+
durableHeartbeatTimer;
|
|
284
|
+
ensureDurableHeartbeat() {
|
|
285
|
+
if (this.durableHeartbeatTimer !== undefined)
|
|
286
|
+
return;
|
|
287
|
+
const t = setInterval(() => {
|
|
288
|
+
let liveLanes = 0;
|
|
289
|
+
for (const h of this.handles.values()) {
|
|
290
|
+
if (h.type !== "background_agent")
|
|
291
|
+
continue;
|
|
292
|
+
const bh = h;
|
|
293
|
+
if (!bh.durable || bh.durable.poisoned)
|
|
294
|
+
continue;
|
|
295
|
+
if (bh.status === "running") {
|
|
296
|
+
liveLanes++;
|
|
297
|
+
this.durableAgentWrite(bh, {});
|
|
298
|
+
}
|
|
299
|
+
else if (bh.durable.flushFailed) {
|
|
300
|
+
if ((bh.durable.redrives = (bh.durable.redrives ?? 0) + 1) > 60) {
|
|
301
|
+
bh.durable.poisoned = true;
|
|
302
|
+
process.emitWarning(`sema durable-agents: terminal flush for ${bh.durable.record.handle} unrecoverable after 60 heartbeat re-drives — durable writes for this row stop here`);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
liveLanes++;
|
|
306
|
+
this.durableAgentWrite(bh, {});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (liveLanes === 0) {
|
|
310
|
+
clearInterval(t);
|
|
311
|
+
this.durableHeartbeatTimer = undefined;
|
|
312
|
+
}
|
|
313
|
+
}, DURABLE_AGENT_HEARTBEAT_MS);
|
|
314
|
+
t.unref?.();
|
|
315
|
+
this.durableHeartbeatTimer = t;
|
|
316
|
+
}
|
|
317
|
+
durableAgentWrite(handle, patch, clear) {
|
|
318
|
+
const lane = handle.durable;
|
|
319
|
+
if (!lane || lane.poisoned)
|
|
320
|
+
return;
|
|
321
|
+
lane.chain = lane.chain.then(async () => {
|
|
322
|
+
if (lane.poisoned)
|
|
323
|
+
return;
|
|
324
|
+
Object.assign(lane.record, patch);
|
|
325
|
+
if (clear !== undefined)
|
|
326
|
+
for (const k of clear)
|
|
327
|
+
delete lane.record[k];
|
|
328
|
+
lane.record.updatedAt = Date.now();
|
|
329
|
+
const poison = (why) => {
|
|
330
|
+
lane.poisoned = true;
|
|
331
|
+
process.emitWarning(`sema durable-agents: ${why} for ${lane.record.handle} — durable writes for this row stop here`);
|
|
332
|
+
};
|
|
333
|
+
const adoptOwnRow = async () => {
|
|
334
|
+
try {
|
|
335
|
+
const live = await lane.store.get(lane.record.handle, lane.record.scope);
|
|
336
|
+
if (!live)
|
|
337
|
+
return "gone";
|
|
338
|
+
if (live.writerId !== lane.record.writerId)
|
|
339
|
+
return "foreign";
|
|
340
|
+
lane.record.rev = live.rev;
|
|
341
|
+
lane.written = true;
|
|
342
|
+
return "adopted";
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return "unreadable";
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
349
|
+
if (attempt > 0) {
|
|
350
|
+
await new Promise((r) => {
|
|
351
|
+
const t = setTimeout(r, 50 * attempt);
|
|
352
|
+
t.unref?.();
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
if (!lane.written) {
|
|
357
|
+
await lane.store.put(structuredClone(lane.record));
|
|
358
|
+
lane.written = true;
|
|
359
|
+
lane.flushFailed = false;
|
|
360
|
+
lane.redrives = 0;
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const ok = await lane.store.update(lane.record.handle, lane.record.scope, structuredClone(lane.record), {
|
|
364
|
+
rev: lane.record.rev,
|
|
365
|
+
});
|
|
366
|
+
if (ok) {
|
|
367
|
+
lane.record.rev += 1;
|
|
368
|
+
lane.flushFailed = false;
|
|
369
|
+
lane.redrives = 0;
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const verdict = await adoptOwnRow();
|
|
373
|
+
if (verdict === "adopted")
|
|
374
|
+
continue;
|
|
375
|
+
if (verdict === "unreadable")
|
|
376
|
+
continue;
|
|
377
|
+
poison(verdict === "gone" ? "row reaped mid-write" : "CAS lost to a foreign writer");
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
catch (e) {
|
|
381
|
+
if (e instanceof BackgroundAgentStoreError && e.code === "agent_record.already_exists") {
|
|
382
|
+
const verdict = await adoptOwnRow();
|
|
383
|
+
if (verdict === "adopted")
|
|
384
|
+
continue;
|
|
385
|
+
if (verdict === "unreadable")
|
|
386
|
+
continue;
|
|
387
|
+
if (verdict === "gone")
|
|
388
|
+
continue;
|
|
389
|
+
poison("handle collision (foreign durable row left untouched)");
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
shutdownDebug(`durable-agents write failed for ${lane.record.handle} (attempt ${attempt + 1}/3)`, { error: String(e) });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
lane.flushFailed = true;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
durableAgentArmed(id) {
|
|
399
|
+
const h = this.handles.get(id);
|
|
400
|
+
if (!h || h.type !== "background_agent")
|
|
401
|
+
return false;
|
|
402
|
+
const lane = h.durable;
|
|
403
|
+
return lane !== undefined && !lane.poisoned;
|
|
404
|
+
}
|
|
405
|
+
durableAgentRowProbe(id) {
|
|
406
|
+
const h = this.handles.get(id);
|
|
407
|
+
if (!h || h.type !== "background_agent")
|
|
408
|
+
return undefined;
|
|
409
|
+
const lane = h.durable;
|
|
410
|
+
if (!lane)
|
|
411
|
+
return undefined;
|
|
412
|
+
return async () => {
|
|
413
|
+
await lane.chain.catch(() => undefined);
|
|
414
|
+
return lane.written && !lane.poisoned && !lane.flushFailed;
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
async reapDurableAgents(scope, deps, policy) {
|
|
418
|
+
const now = policy.now ?? Date.now();
|
|
419
|
+
if (policy.staleRunningMaxAgeMs !== undefined) {
|
|
420
|
+
await deps.store.reap(scope, now, { staleRunningMaxAgeMs: policy.staleRunningMaxAgeMs });
|
|
421
|
+
}
|
|
422
|
+
if (policy.maxAgeMs === undefined && policy.keep === undefined)
|
|
423
|
+
return { rowsReaped: 0, sessionsReleased: 0, skippedNoSessions: 0 };
|
|
424
|
+
const terminal = (await deps.store.listByScope(scope)).filter((r) => r.status !== "running");
|
|
425
|
+
terminal.sort((a, b) => b.spawnedAt - a.spawnedAt);
|
|
426
|
+
const doomed = new Map();
|
|
427
|
+
if (policy.maxAgeMs !== undefined) {
|
|
428
|
+
for (const r of terminal) {
|
|
429
|
+
if ((r.settledAt ?? r.spawnedAt) < now - policy.maxAgeMs)
|
|
430
|
+
doomed.set(r.handle, r);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
if (policy.keep !== undefined) {
|
|
434
|
+
for (const r of terminal.slice(Math.max(0, policy.keep)))
|
|
435
|
+
doomed.set(r.handle, r);
|
|
436
|
+
}
|
|
437
|
+
let rowsReaped = 0;
|
|
438
|
+
let sessionsReleased = 0;
|
|
439
|
+
let skippedNoSessions = 0;
|
|
440
|
+
for (const r of doomed.values()) {
|
|
441
|
+
this.reapingHandles.add(r.handle);
|
|
442
|
+
try {
|
|
443
|
+
let live;
|
|
444
|
+
try {
|
|
445
|
+
live = await deps.store.get(r.handle, scope);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
if (!live || live.status === "running")
|
|
451
|
+
continue;
|
|
452
|
+
const inProc = this.handles.get(r.handle);
|
|
453
|
+
if (inProc !== undefined && (inProc.status === "running" || inProc.status === "pending"))
|
|
454
|
+
continue;
|
|
455
|
+
if (live.sessionId !== undefined && deps.sessions === undefined) {
|
|
456
|
+
skippedNoSessions++;
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
try {
|
|
460
|
+
if (!(await deps.store.delete(r.handle, scope, { rev: live.rev })))
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
catch {
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
rowsReaped++;
|
|
467
|
+
if (live.sessionId !== undefined && deps.sessions !== undefined) {
|
|
468
|
+
try {
|
|
469
|
+
await deps.sessions.unpin?.(live.sessionId);
|
|
470
|
+
await deps.sessions.release(live.sessionId);
|
|
471
|
+
sessionsReleased++;
|
|
472
|
+
}
|
|
473
|
+
catch {
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
finally {
|
|
478
|
+
this.reapingHandles.delete(r.handle);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
return { rowsReaped, sessionsReleased, skippedNoSessions };
|
|
482
|
+
}
|
|
483
|
+
releaseDurableTranscriptAnchor(id) {
|
|
484
|
+
const handle = this.handles.get(id);
|
|
485
|
+
if (!handle || handle.type !== "background_agent")
|
|
486
|
+
return;
|
|
487
|
+
this.durableAgentWrite(handle, {}, ["sessionId"]);
|
|
488
|
+
}
|
|
489
|
+
bindBackgroundAgentSession(id, sessionId) {
|
|
490
|
+
const handle = this.handles.get(id);
|
|
491
|
+
if (!handle || handle.type !== "background_agent")
|
|
492
|
+
return;
|
|
493
|
+
handle.sessionId = sessionId;
|
|
494
|
+
this.durableAgentWrite(handle, { sessionId });
|
|
495
|
+
}
|
|
278
496
|
mintTaskId(type) {
|
|
279
497
|
const prefix = TASK_PREFIX[type];
|
|
280
498
|
for (let i = 0; i < 32; i++) {
|
|
@@ -326,7 +544,12 @@ export class TaskRegistry {
|
|
|
326
544
|
}
|
|
327
545
|
registerBackgroundAgent(input) {
|
|
328
546
|
assertOwnership(input, "registerBackgroundAgent");
|
|
329
|
-
|
|
547
|
+
if (input.id !== undefined && !DURABLE_AGENT_HANDLE_RE.test(input.id)) {
|
|
548
|
+
throw new Error(`TaskRegistry: background-agent id ${JSON.stringify(input.id)} does not match the a<hex> handle form`);
|
|
549
|
+
}
|
|
550
|
+
const id = input.id ?? this.mintTaskId("background_agent");
|
|
551
|
+
if (this.handles.has(id))
|
|
552
|
+
throw new Error(`TaskRegistry: task id already registered: ${id}`);
|
|
330
553
|
const now = input.now ?? Date.now();
|
|
331
554
|
this.handles.set(id, {
|
|
332
555
|
id,
|
|
@@ -347,6 +570,34 @@ export class TaskRegistry {
|
|
|
347
570
|
updatedAt: now,
|
|
348
571
|
abort: input.abort,
|
|
349
572
|
});
|
|
573
|
+
if (input.store) {
|
|
574
|
+
const handle = this.handles.get(id);
|
|
575
|
+
handle.durable = {
|
|
576
|
+
store: input.store,
|
|
577
|
+
record: {
|
|
578
|
+
handle: id,
|
|
579
|
+
scope: input.scope,
|
|
580
|
+
owner: input.owner,
|
|
581
|
+
sessionScoped: input.sessionScoped === true,
|
|
582
|
+
...(input.parentSessionId !== undefined ? { parentSessionId: input.parentSessionId } : {}),
|
|
583
|
+
...(input.parentTaskId !== undefined ? { parentTaskId: input.parentTaskId } : {}),
|
|
584
|
+
...(input.name !== undefined ? { name: input.name } : {}),
|
|
585
|
+
...(input.agentType !== undefined ? { agentType: input.agentType } : {}),
|
|
586
|
+
...(input.description !== undefined ? { description: input.description } : {}),
|
|
587
|
+
writerId: this.writerId,
|
|
588
|
+
spawnedAt: now,
|
|
589
|
+
updatedAt: now,
|
|
590
|
+
status: "running",
|
|
591
|
+
rev: 0,
|
|
592
|
+
},
|
|
593
|
+
chain: Promise.resolve(),
|
|
594
|
+
written: false,
|
|
595
|
+
poisoned: false,
|
|
596
|
+
flushFailed: false,
|
|
597
|
+
};
|
|
598
|
+
this.durableAgentWrite(handle, {});
|
|
599
|
+
this.ensureDurableHeartbeat();
|
|
600
|
+
}
|
|
350
601
|
return id;
|
|
351
602
|
}
|
|
352
603
|
getAccessibleTask(taskId, access) {
|
|
@@ -445,8 +696,14 @@ export class TaskRegistry {
|
|
|
445
696
|
handle.error = outcome.error;
|
|
446
697
|
backfilled = true;
|
|
447
698
|
}
|
|
448
|
-
if (backfilled)
|
|
699
|
+
if (backfilled) {
|
|
449
700
|
handle.updatedAt = Date.now();
|
|
701
|
+
this.durableAgentWrite(handle, {
|
|
702
|
+
...(handle.result !== undefined ? { finalOutput: handle.result } : {}),
|
|
703
|
+
...(handle.resultIsPartial ? { resultIsPartial: true } : {}),
|
|
704
|
+
...(handle.error !== undefined ? { error: handle.error } : {}),
|
|
705
|
+
});
|
|
706
|
+
}
|
|
450
707
|
}
|
|
451
708
|
return handle.status === "completed" || handle.status === "failed" || handle.status === "killed" ? handle.status : undefined;
|
|
452
709
|
}
|
|
@@ -471,6 +728,14 @@ export class TaskRegistry {
|
|
|
471
728
|
}
|
|
472
729
|
handle.updatedAt = Date.now();
|
|
473
730
|
this.pokeBgQuiescence(handle.owner);
|
|
731
|
+
this.durableAgentWrite(handle, {
|
|
732
|
+
status: outcome.status,
|
|
733
|
+
settledAt: Date.now(),
|
|
734
|
+
...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
735
|
+
...(handle.result !== undefined ? { finalOutput: handle.result } : {}),
|
|
736
|
+
...(handle.resultIsPartial ? { resultIsPartial: true } : {}),
|
|
737
|
+
...(handle.error !== undefined ? { error: handle.error } : {}),
|
|
738
|
+
});
|
|
474
739
|
return outcome.status;
|
|
475
740
|
}
|
|
476
741
|
abortBackgroundAgentsForOwner(access, opts) {
|
|
@@ -1137,8 +1402,57 @@ export class TaskRegistry {
|
|
|
1137
1402
|
await sleepPollStep(deadline, opts.signal);
|
|
1138
1403
|
}
|
|
1139
1404
|
}
|
|
1405
|
+
if (opts.agentStore && access.scope !== undefined && DURABLE_AGENT_HANDLE_RE.test(taskId)) {
|
|
1406
|
+
for (;;) {
|
|
1407
|
+
let row;
|
|
1408
|
+
try {
|
|
1409
|
+
row = await opts.agentStore.get(taskId, access.scope);
|
|
1410
|
+
}
|
|
1411
|
+
catch {
|
|
1412
|
+
break;
|
|
1413
|
+
}
|
|
1414
|
+
if (!row || !canAccessAgentRecord(row, access))
|
|
1415
|
+
break;
|
|
1416
|
+
if (row.status === "running" && row.writerId === this.writerId)
|
|
1417
|
+
break;
|
|
1418
|
+
if (row.status !== "running")
|
|
1419
|
+
return this.serveDurableAgentRow(row);
|
|
1420
|
+
if (deadline === undefined || Date.now() >= deadline || opts.signal?.aborted) {
|
|
1421
|
+
const body = `status: unknown (not running on this engine instance)
|
|
1422
|
+
The durable record is still marked running (last update ${new Date(row.updatedAt).toISOString()}), but this engine instance is not executing it — the outcome is unknown here. If its host process is gone, a retention sweep (staleRunningMaxAgeMs) settles the record as interrupted.`;
|
|
1423
|
+
return {
|
|
1424
|
+
content: delimitUntrusted(`TaskOutput ${row.handle}`, body),
|
|
1425
|
+
details: {
|
|
1426
|
+
task_id: row.handle,
|
|
1427
|
+
type: "background_agent",
|
|
1428
|
+
status: "running",
|
|
1429
|
+
retrieval_status: "not_ready",
|
|
1430
|
+
error: "not_local",
|
|
1431
|
+
},
|
|
1432
|
+
};
|
|
1433
|
+
}
|
|
1434
|
+
await sleepPollStep(deadline, opts.signal);
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1140
1437
|
return noTask(taskId);
|
|
1141
1438
|
}
|
|
1439
|
+
serveDurableAgentRow(row) {
|
|
1440
|
+
const body = `status: ${row.status}
|
|
1441
|
+
${row.error ? `error: ${row.error}
|
|
1442
|
+
` : ""}${row.finalOutput ? `--- result${row.resultIsPartial ? " (partial — produced before the task was stopped)" : ""} ---
|
|
1443
|
+
${clipTaskOutput(row.finalOutput)}` : "(no result text)"}`;
|
|
1444
|
+
return {
|
|
1445
|
+
content: delimitUntrusted(`TaskOutput ${row.handle}`, body),
|
|
1446
|
+
details: {
|
|
1447
|
+
task_id: row.handle,
|
|
1448
|
+
type: "background_agent",
|
|
1449
|
+
status: row.status,
|
|
1450
|
+
retrieval_status: "success",
|
|
1451
|
+
...(row.status === "killed" && row.stoppedBy !== undefined ? { stoppedBy: row.stoppedBy } : {}),
|
|
1452
|
+
...(row.resultIsPartial ? { partial_result: true } : {}),
|
|
1453
|
+
},
|
|
1454
|
+
};
|
|
1455
|
+
}
|
|
1142
1456
|
async stopTask(id, access, opts = {}) {
|
|
1143
1457
|
const taskId = id.trim();
|
|
1144
1458
|
const handle = this.resolveInternal(taskId, access);
|
|
@@ -1172,6 +1486,29 @@ export class TaskRegistry {
|
|
|
1172
1486
|
};
|
|
1173
1487
|
}
|
|
1174
1488
|
}
|
|
1489
|
+
if (opts.agentStore && access.scope !== undefined && DURABLE_AGENT_HANDLE_RE.test(taskId)) {
|
|
1490
|
+
let row = null;
|
|
1491
|
+
try {
|
|
1492
|
+
row = await opts.agentStore.get(taskId, access.scope);
|
|
1493
|
+
}
|
|
1494
|
+
catch {
|
|
1495
|
+
row = null;
|
|
1496
|
+
}
|
|
1497
|
+
if (row && canAccessAgentRecord(row, access) && !(row.status === "running" && row.writerId === this.writerId)) {
|
|
1498
|
+
return {
|
|
1499
|
+
content: row.status === "running"
|
|
1500
|
+
? `${row.handle} is not attached to this engine instance; cannot stop it here. If its host process is gone, a retention sweep (staleRunningMaxAgeMs) settles it as interrupted.`
|
|
1501
|
+
: `${row.handle} already ${row.status} — nothing to stop; poll TaskOutput for its final state.`,
|
|
1502
|
+
details: {
|
|
1503
|
+
task_id: row.handle,
|
|
1504
|
+
type: "background_agent",
|
|
1505
|
+
status: row.status,
|
|
1506
|
+
retrieval_status: "success",
|
|
1507
|
+
...(row.status === "running" ? { error: "not_local" } : {}),
|
|
1508
|
+
},
|
|
1509
|
+
};
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1175
1512
|
const byName = this.resolveBackgroundAgentByName(taskId, access);
|
|
1176
1513
|
if (byName.status === "found")
|
|
1177
1514
|
return this.stopBackgroundAgent(byName.handle);
|
|
@@ -1262,6 +1599,8 @@ export class TaskRegistry {
|
|
|
1262
1599
|
handle.retainedContinuation = true;
|
|
1263
1600
|
}
|
|
1264
1601
|
reviveBackgroundAgent(id, access, abort) {
|
|
1602
|
+
if (this.reapingHandles.has(id))
|
|
1603
|
+
return { ok: false, reason: "not_found" };
|
|
1265
1604
|
const handle = this.handles.get(id);
|
|
1266
1605
|
if (!handle || handle.type !== "background_agent" || !canAccess(handle, access))
|
|
1267
1606
|
return { ok: false, reason: "not_found" };
|
|
@@ -1278,6 +1617,7 @@ export class TaskRegistry {
|
|
|
1278
1617
|
handle.stopSource = undefined;
|
|
1279
1618
|
handle.reviveCycle = (handle.reviveCycle ?? 0) + 1;
|
|
1280
1619
|
handle.updatedAt = Date.now();
|
|
1620
|
+
this.durableAgentWrite(handle, { status: "running" }, ["settledAt", "stoppedBy", "finalOutput", "error", "resultIsPartial"]);
|
|
1281
1621
|
return { ok: true, cycle: handle.reviveCycle };
|
|
1282
1622
|
}
|
|
1283
1623
|
settleRevivedAgent(id, cycle, outcome) {
|
|
@@ -1846,6 +2186,11 @@ ${clipTaskOutput(handle.result, handle.outputFile)}` : "(no result text)"}`;
|
|
|
1846
2186
|
r({ ok: false, reason: "not_running" });
|
|
1847
2187
|
handle.inFlightDirect = undefined;
|
|
1848
2188
|
this.pokeBgQuiescence(handle.owner);
|
|
2189
|
+
this.durableAgentWrite(handle, {
|
|
2190
|
+
status: "killed",
|
|
2191
|
+
settledAt: Date.now(),
|
|
2192
|
+
...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
2193
|
+
});
|
|
1849
2194
|
}
|
|
1850
2195
|
return {
|
|
1851
2196
|
content: `Terminated ${handle.id}.`,
|
|
@@ -1928,8 +2273,9 @@ export function createTaskOutputTool(opts) {
|
|
|
1928
2273
|
waitClampNote = `\n\nNOTE: wait clamped to ${Math.round(remainMs / 1000)}s (requested ${Math.round(wantMs / 1000)}s) — the task's wall-clock deadline is near. If the task is still running after this wait, do NOT re-wait: proceed with other work or write out your results now.`;
|
|
1929
2274
|
}
|
|
1930
2275
|
}
|
|
1931
|
-
const r = await opts.registry.pollTask(id, { owner: ctx.taskId ?? opts.owner, scope: ctx.principal ?? opts.scope, ...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}) }, {
|
|
2276
|
+
const r = await opts.registry.pollTask(id, { owner: ctx.taskId ?? opts.owner, scope: ctx.principal ?? opts.scope, ...((ctx.sessionId ?? opts.sessionId) !== undefined ? { sessionId: ctx.sessionId ?? opts.sessionId } : {}) }, {
|
|
1932
2277
|
workflowStore: opts.workflowStore,
|
|
2278
|
+
agentStore: opts.agentStore,
|
|
1933
2279
|
filter: typeof args.filter === "string" ? args.filter : undefined,
|
|
1934
2280
|
block: args.block !== false,
|
|
1935
2281
|
timeoutMs: effectiveTimeoutMs,
|
|
@@ -1960,7 +2306,7 @@ export function createTaskStopTool(opts) {
|
|
|
1960
2306
|
const id = firstString(args.task_id, args.shell_id, args.runId);
|
|
1961
2307
|
if (!id)
|
|
1962
2308
|
return "Missing required parameter: task_id";
|
|
1963
|
-
const r = await opts.registry.stopTask(id, { owner: ctx.taskId ?? opts.owner, scope: ctx.principal ?? opts.scope, ...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}) }, { workflowStore: opts.workflowStore });
|
|
2309
|
+
const r = await opts.registry.stopTask(id, { owner: ctx.taskId ?? opts.owner, scope: ctx.principal ?? opts.scope, ...((ctx.sessionId ?? opts.sessionId) !== undefined ? { sessionId: ctx.sessionId ?? opts.sessionId } : {}) }, { workflowStore: opts.workflowStore, agentStore: opts.agentStore });
|
|
1964
2310
|
const { type: taskType, ...rest } = r.details;
|
|
1965
2311
|
return {
|
|
1966
2312
|
content: r.content,
|