@sema-agent/core 1.362.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.
- package/dist/agents/subagent.d.ts +2 -0
- package/dist/agents/subagent.d.ts.map +1 -1
- package/dist/agents/subagent.js +77 -22
- 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 +355 -4
- 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/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/prompts/coordinator.d.ts +3 -2
- package/dist/prompts/coordinator.d.ts.map +1 -1
- package/dist/prompts/coordinator.js +6 -0
- package/dist/prompts/coordinator.js.map +1 -1
- package/dist/scenarios/full-body.d.ts +2 -0
- package/dist/scenarios/full-body.d.ts.map +1 -1
- package/dist/scenarios/full-body.js +1 -1
- package/dist/scenarios/full-body.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/dist/tools/task-list.d.ts +11 -1
- package/dist/tools/task-list.d.ts.map +1 -1
- package/dist/tools/task-list.js +108 -32
- package/dist/tools/task-list.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":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAsB,KAAK,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEnH,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAQ3F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AACrG,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IACjC,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,UAAU,CAAC;IAGvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoED,UAAU,gBAAgB;IACxB,KAAK,EAAE,oBAAoB,CAAC;IAE5B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAErB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAKlB,WAAW,EAAE,OAAO,CAAC;IAGrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAA0B,SAAQ,cAAc;IACxD,IAAI,EAAE,kBAAkB,CAAC;IAEzB,KAAK,EAAE,eAAe,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAK3B,MAAM,CAAC,EAAE,CACP,YAAY,EAAE,OAAO,wBAAwB,EAAE,uBAAuB,EACtE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,wBAAwB,EAAE,uBAAuB,CAAA;KAAE,KAC3E,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC,QAAQ,GAAG,QAAQ,GAAG,mBAAmB,CAAC,CAAC;IAM3G,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAA;KAAE,KAAK,IAAI,CAAC,CAAC;IAGtJ,YAAY,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACxC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,OAAO,wBAAwB,EAAE,uBAAuB;QACxD;YAAE,QAAQ,CAAC,EAAE,OAAO,wBAAwB,EAAE,uBAAuB,CAAA;SAAE,GAAG,SAAS;QAInF,CACI,CAAC,CAAC,CAAC,EAAE;YAAE,EAAE,EAAE,IAAI,CAAC;YAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAA;SAAE,KAAK,IAAI,CAAC,GACjI,SAAS,CACZ,CAAC;KACH,CAAC,CAAC;IAKH,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,aAAa,CAAC,EAAE,IAAI,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,eAAe,CAAC,EAAE,OAAO,CAAC;IAI1B,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB;AAKD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAoDD,MAAM,WAAW,2BAA4B,SAAQ,UAAU;IAC7D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE,YAAY,GAAG,yBAAyB,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IAIb,aAAa,CAAC,EAAE,IAAI,CAAC;IAIrB,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAM7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE,YAAY,GAAG,yBAAyB,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,aAAa,CAAC,EAAE,IAAI,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAE/C,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,4BAA6B,SAAQ,UAAU;IAK9D,eAAe,CAAC,EAAE,WAAW,CAAC;IAM9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,aAAa,CAAC,EAAE,IAAI,CAAC;IAIrB,EAAE,CAAC,EAAE,MAAM,CAAC;IAKZ,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IAOb,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAGjC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA2BD,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAGjC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAEjC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAOlC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACvC;AAQD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAoBjD,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAElF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAChD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AA+BjD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAUzE;AAsBD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpD;AAyPD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA2C;IAI1D,OAAO,CAAC,gBAAgB,CAA0D;IAOlF,OAAO,CAAC,oBAAoB,CAAqE;IACjG,OAAO,CAAC,cAAc,CAA6B;IAKnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAkC;IAa3D,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,qBAAqB,CAA6C;IAC1E,OAAO,CAAC,sBAAsB;IAqD9B,OAAO,CAAC,iBAAiB;IA0FzB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAatC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS;IA6BhE,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QACJ,KAAK,EAAE,oBAAoB,CAAC;QAC5B,QAAQ,CAAC,EAAE;YAAE,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;YAAC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;SAAE,CAAC;KACrG,EACD,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GACxF,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IA+EvF,8BAA8B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMhD,0BAA0B,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAO/D,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAStC,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,MAAM;IAwClE,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO;IAaxF,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM;IA2EpE,iBAAiB,CACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GACjB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IA2BzR,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAepD,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IA6BjF,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IAyBzF,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAgBtD,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAkFjM,6BAA6B,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IA4B9H,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IAgDxG,oBAAoB,CACxB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,UAAU,CAAC;QACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;QAKnB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GACA,OAAO,CAAC,MAAM,CAAC;IAsJlB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAmFhE,wBAAwB,IAAI,MAAM;IAelC,aAAa,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAW5E,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAoBrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAS;IAW3D,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAmChG,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,gBAAgB;IA8JxB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE;IAiB7E,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE;IAgB1D,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE;IAUnD,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IA0CpD,OAAO,CAAC,mBAAmB;IAmL3B,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM;IA6ChD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAiEpI,OAAO,CAAC,oBAAoB;IAkBtB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAqGpI,4BAA4B,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GAEhB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,yBAAyB,CAAA;KAAE,GACtD;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACxC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAuFhD,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAU1C,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAAA;KAAE;IAsClK,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAcrL,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA6DvG,qBAAqB,CACzB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,OAAO,wBAAwB,EAAE,uBAAuB,EACtE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,wBAAwB,EAAE,uBAAuB,CAAA;KAAE,GAC7E,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAA;KAAE,CAAC;IA4F1I,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE;IAW1D,uBAAuB,SAAU;IAEjC,OAAO,CAAC,QAAQ,CAAK;IASrB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,KAAK,CAAC;QAC7D,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,YAAY,CAAC;QACnB,MAAM,EAAE,cAAc,CAAC;QAKvB,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAsBF,OAAO,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM;IAMzC,EAAE,CAAC,GAAG,GAAE,MAAmB,EAAE,aAAa,GAAE,MAAuB,GAAG,MAAM;IAmB5E,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IA8CnD,OAAO,CAAC,eAAe;YAQT,kBAAkB;IAuIhC,OAAO,CAAC,kBAAkB;YAWZ,YAAY;YA0DZ,kBAAkB;YA0DlB,WAAW;YA8CX,WAAW;YAsDX,mBAAmB;YA8BnB,mBAAmB;YAwCnB,YAAY;CAmC3B;AAED,eAAO,MAAM,mBAAmB,cAAqB,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAmFrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAuCnE"}
|
|
@@ -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
|
-
|
|
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,
|