@sema-agent/core 1.363.0 → 1.364.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.
@@ -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",
@@ -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
- const id = this.mintTaskId("background_agent");
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,39 @@ export class TaskRegistry {
347
570
  updatedAt: now,
348
571
  abort: input.abort,
349
572
  });
573
+ if (input.store) {
574
+ if (input.scope !== undefined && input.owner !== undefined) {
575
+ const handle = this.handles.get(id);
576
+ handle.durable = {
577
+ store: input.store,
578
+ record: {
579
+ handle: id,
580
+ scope: input.scope,
581
+ owner: input.owner,
582
+ sessionScoped: input.sessionScoped === true,
583
+ ...(input.parentSessionId !== undefined ? { parentSessionId: input.parentSessionId } : {}),
584
+ ...(input.parentTaskId !== undefined ? { parentTaskId: input.parentTaskId } : {}),
585
+ ...(input.name !== undefined ? { name: input.name } : {}),
586
+ ...(input.agentType !== undefined ? { agentType: input.agentType } : {}),
587
+ ...(input.description !== undefined ? { description: input.description } : {}),
588
+ writerId: this.writerId,
589
+ spawnedAt: now,
590
+ updatedAt: now,
591
+ status: "running",
592
+ rev: 0,
593
+ },
594
+ chain: Promise.resolve(),
595
+ written: false,
596
+ poisoned: false,
597
+ flushFailed: false,
598
+ };
599
+ this.durableAgentWrite(handle, {});
600
+ this.ensureDurableHeartbeat();
601
+ }
602
+ else {
603
+ process.emitWarning(`sema durable-agents: registration for ${id} carries a store but not both owner and scope — no durable row (the fail-closed read predicate could never serve it)`);
604
+ }
605
+ }
350
606
  return id;
351
607
  }
352
608
  getAccessibleTask(taskId, access) {
@@ -445,8 +701,14 @@ export class TaskRegistry {
445
701
  handle.error = outcome.error;
446
702
  backfilled = true;
447
703
  }
448
- if (backfilled)
704
+ if (backfilled) {
449
705
  handle.updatedAt = Date.now();
706
+ this.durableAgentWrite(handle, {
707
+ ...(handle.result !== undefined ? { finalOutput: handle.result } : {}),
708
+ ...(handle.resultIsPartial ? { resultIsPartial: true } : {}),
709
+ ...(handle.error !== undefined ? { error: handle.error } : {}),
710
+ });
711
+ }
450
712
  }
451
713
  return handle.status === "completed" || handle.status === "failed" || handle.status === "killed" ? handle.status : undefined;
452
714
  }
@@ -471,6 +733,14 @@ export class TaskRegistry {
471
733
  }
472
734
  handle.updatedAt = Date.now();
473
735
  this.pokeBgQuiescence(handle.owner);
736
+ this.durableAgentWrite(handle, {
737
+ status: outcome.status,
738
+ settledAt: Date.now(),
739
+ ...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
740
+ ...(handle.result !== undefined ? { finalOutput: handle.result } : {}),
741
+ ...(handle.resultIsPartial ? { resultIsPartial: true } : {}),
742
+ ...(handle.error !== undefined ? { error: handle.error } : {}),
743
+ });
474
744
  return outcome.status;
475
745
  }
476
746
  abortBackgroundAgentsForOwner(access, opts) {
@@ -1137,8 +1407,57 @@ export class TaskRegistry {
1137
1407
  await sleepPollStep(deadline, opts.signal);
1138
1408
  }
1139
1409
  }
1410
+ if (opts.agentStore && access.scope !== undefined && DURABLE_AGENT_HANDLE_RE.test(taskId)) {
1411
+ for (;;) {
1412
+ let row;
1413
+ try {
1414
+ row = await opts.agentStore.get(taskId, access.scope);
1415
+ }
1416
+ catch {
1417
+ break;
1418
+ }
1419
+ if (!row || !canAccessAgentRecord(row, access))
1420
+ break;
1421
+ if (row.status === "running" && row.writerId === this.writerId)
1422
+ break;
1423
+ if (row.status !== "running")
1424
+ return this.serveDurableAgentRow(row);
1425
+ if (deadline === undefined || Date.now() >= deadline || opts.signal?.aborted) {
1426
+ const body = `status: unknown (not running on this engine instance)
1427
+ 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.`;
1428
+ return {
1429
+ content: delimitUntrusted(`TaskOutput ${row.handle}`, body),
1430
+ details: {
1431
+ task_id: row.handle,
1432
+ type: "background_agent",
1433
+ status: "running",
1434
+ retrieval_status: "not_ready",
1435
+ error: "not_local",
1436
+ },
1437
+ };
1438
+ }
1439
+ await sleepPollStep(deadline, opts.signal);
1440
+ }
1441
+ }
1140
1442
  return noTask(taskId);
1141
1443
  }
1444
+ serveDurableAgentRow(row) {
1445
+ const body = `status: ${row.status}
1446
+ ${row.error ? `error: ${row.error}
1447
+ ` : ""}${row.finalOutput ? `--- result${row.resultIsPartial ? " (partial — produced before the task was stopped)" : ""} ---
1448
+ ${clipTaskOutput(row.finalOutput)}` : "(no result text)"}`;
1449
+ return {
1450
+ content: delimitUntrusted(`TaskOutput ${row.handle}`, body),
1451
+ details: {
1452
+ task_id: row.handle,
1453
+ type: "background_agent",
1454
+ status: row.status,
1455
+ retrieval_status: "success",
1456
+ ...(row.status === "killed" && row.stoppedBy !== undefined ? { stoppedBy: row.stoppedBy } : {}),
1457
+ ...(row.resultIsPartial ? { partial_result: true } : {}),
1458
+ },
1459
+ };
1460
+ }
1142
1461
  async stopTask(id, access, opts = {}) {
1143
1462
  const taskId = id.trim();
1144
1463
  const handle = this.resolveInternal(taskId, access);
@@ -1172,6 +1491,29 @@ export class TaskRegistry {
1172
1491
  };
1173
1492
  }
1174
1493
  }
1494
+ if (opts.agentStore && access.scope !== undefined && DURABLE_AGENT_HANDLE_RE.test(taskId)) {
1495
+ let row = null;
1496
+ try {
1497
+ row = await opts.agentStore.get(taskId, access.scope);
1498
+ }
1499
+ catch {
1500
+ row = null;
1501
+ }
1502
+ if (row && canAccessAgentRecord(row, access) && !(row.status === "running" && row.writerId === this.writerId)) {
1503
+ return {
1504
+ content: row.status === "running"
1505
+ ? `${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.`
1506
+ : `${row.handle} already ${row.status} — nothing to stop; poll TaskOutput for its final state.`,
1507
+ details: {
1508
+ task_id: row.handle,
1509
+ type: "background_agent",
1510
+ status: row.status,
1511
+ retrieval_status: "success",
1512
+ ...(row.status === "running" ? { error: "not_local" } : {}),
1513
+ },
1514
+ };
1515
+ }
1516
+ }
1175
1517
  const byName = this.resolveBackgroundAgentByName(taskId, access);
1176
1518
  if (byName.status === "found")
1177
1519
  return this.stopBackgroundAgent(byName.handle);
@@ -1262,6 +1604,8 @@ export class TaskRegistry {
1262
1604
  handle.retainedContinuation = true;
1263
1605
  }
1264
1606
  reviveBackgroundAgent(id, access, abort) {
1607
+ if (this.reapingHandles.has(id))
1608
+ return { ok: false, reason: "not_found" };
1265
1609
  const handle = this.handles.get(id);
1266
1610
  if (!handle || handle.type !== "background_agent" || !canAccess(handle, access))
1267
1611
  return { ok: false, reason: "not_found" };
@@ -1278,6 +1622,7 @@ export class TaskRegistry {
1278
1622
  handle.stopSource = undefined;
1279
1623
  handle.reviveCycle = (handle.reviveCycle ?? 0) + 1;
1280
1624
  handle.updatedAt = Date.now();
1625
+ this.durableAgentWrite(handle, { status: "running" }, ["settledAt", "stoppedBy", "finalOutput", "error", "resultIsPartial"]);
1281
1626
  return { ok: true, cycle: handle.reviveCycle };
1282
1627
  }
1283
1628
  settleRevivedAgent(id, cycle, outcome) {
@@ -1846,6 +2191,11 @@ ${clipTaskOutput(handle.result, handle.outputFile)}` : "(no result text)"}`;
1846
2191
  r({ ok: false, reason: "not_running" });
1847
2192
  handle.inFlightDirect = undefined;
1848
2193
  this.pokeBgQuiescence(handle.owner);
2194
+ this.durableAgentWrite(handle, {
2195
+ status: "killed",
2196
+ settledAt: Date.now(),
2197
+ ...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
2198
+ });
1849
2199
  }
1850
2200
  return {
1851
2201
  content: `Terminated ${handle.id}.`,
@@ -1928,8 +2278,9 @@ export function createTaskOutputTool(opts) {
1928
2278
  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
2279
  }
1930
2280
  }
1931
- const r = await opts.registry.pollTask(id, { owner: ctx.taskId ?? opts.owner, scope: ctx.principal ?? opts.scope, ...(opts.sessionId !== undefined ? { sessionId: opts.sessionId } : {}) }, {
2281
+ 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
2282
  workflowStore: opts.workflowStore,
2283
+ agentStore: opts.agentStore,
1933
2284
  filter: typeof args.filter === "string" ? args.filter : undefined,
1934
2285
  block: args.block !== false,
1935
2286
  timeoutMs: effectiveTimeoutMs,
@@ -1960,7 +2311,7 @@ export function createTaskStopTool(opts) {
1960
2311
  const id = firstString(args.task_id, args.shell_id, args.runId);
1961
2312
  if (!id)
1962
2313
  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 });
2314
+ 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
2315
  const { type: taskType, ...rest } = r.details;
1965
2316
  return {
1966
2317
  content: r.content,