@sema-agent/core 1.279.0 → 1.280.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 +12 -0
- package/dist/agents/subagent.d.ts.map +1 -1
- package/dist/agents/subagent.js +221 -19
- package/dist/agents/subagent.js.map +1 -1
- package/dist/bin/sema-tb.d.ts +10 -0
- package/dist/bin/sema-tb.d.ts.map +1 -1
- package/dist/bin/sema-tb.js +81 -10
- package/dist/bin/sema-tb.js.map +1 -1
- package/dist/core/background-shell.d.ts +2 -0
- package/dist/core/background-shell.d.ts.map +1 -1
- package/dist/core/background-shell.js.map +1 -1
- package/dist/core/context-guard.d.ts +2 -0
- package/dist/core/context-guard.d.ts.map +1 -1
- package/dist/core/context-guard.js +10 -0
- package/dist/core/context-guard.js.map +1 -1
- package/dist/core/mcp.d.ts +4 -0
- package/dist/core/mcp.d.ts.map +1 -1
- package/dist/core/mcp.js +189 -32
- package/dist/core/mcp.js.map +1 -1
- package/dist/core/runner/call-cap.d.ts +4 -0
- package/dist/core/runner/call-cap.d.ts.map +1 -1
- package/dist/core/runner/call-cap.js +15 -1
- package/dist/core/runner/call-cap.js.map +1 -1
- package/dist/core/runner/prepare-task.d.ts.map +1 -1
- package/dist/core/runner/prepare-task.js +5 -3
- package/dist/core/runner/prepare-task.js.map +1 -1
- package/dist/core/runner/runtask.d.ts.map +1 -1
- package/dist/core/runner/runtask.js +28 -20
- package/dist/core/runner/runtask.js.map +1 -1
- package/dist/core/session-reconcile.d.ts +1 -1
- package/dist/core/session-reconcile.d.ts.map +1 -1
- package/dist/core/session-reconcile.js +7 -2
- package/dist/core/session-reconcile.js.map +1 -1
- package/dist/core/task-notification.d.ts +2 -0
- package/dist/core/task-notification.d.ts.map +1 -1
- package/dist/core/task-notification.js.map +1 -1
- package/dist/core/task-registry.d.ts +1 -0
- package/dist/core/task-registry.d.ts.map +1 -1
- package/dist/core/task-registry.js +184 -55
- package/dist/core/task-registry.js.map +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -1
- package/dist/engine/execution-env/node-execution-env.js +17 -0
- package/dist/engine/execution-env/node-execution-env.js.map +1 -1
- package/dist/engine/harness/types.d.ts.map +1 -1
- package/dist/engine/harness/types.js.map +1 -1
- package/dist/engine/loop/agent-loop.js +15 -5
- package/dist/engine/loop/agent-loop.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration/workflow.d.ts +19 -3
- package/dist/orchestration/workflow.d.ts.map +1 -1
- package/dist/orchestration/workflow.js +61 -11
- package/dist/orchestration/workflow.js.map +1 -1
- package/dist/tools/fs/index.d.ts +1 -0
- package/dist/tools/fs/index.d.ts.map +1 -1
- package/dist/tools/fs/index.js +137 -35
- package/dist/tools/fs/index.js.map +1 -1
- package/dist/tools/fs/pdf.d.ts +5 -0
- package/dist/tools/fs/pdf.d.ts.map +1 -1
- package/dist/tools/fs/pdf.js +58 -11
- package/dist/tools/fs/pdf.js.map +1 -1
- package/dist/tools/fs/safety.d.ts +1 -0
- package/dist/tools/fs/safety.d.ts.map +1 -1
- package/dist/tools/fs/safety.js +1 -0
- package/dist/tools/fs/safety.js.map +1 -1
- package/dist/tools/fs/search.d.ts +13 -0
- package/dist/tools/fs/search.d.ts.map +1 -1
- package/dist/tools/fs/search.js +58 -16
- package/dist/tools/fs/search.js.map +1 -1
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +141 -28
- package/dist/tools/web.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,8 @@ const INTERRUPTED_UNKNOWN = "[INTERRUPTED] The previous run ended before this to
|
|
|
6
6
|
const INTERRUPTED_SAFE = "[INTERRUPTED] The previous run ended before this tool call's result was recorded. This tool is " +
|
|
7
7
|
"read-only/idempotent, so its outcome carries no risk: simply call it again if you still need " +
|
|
8
8
|
"the result.";
|
|
9
|
+
const INTERRUPTED_NEVER_STARTED = "[INTERRUPTED] The run was aborted before this tool call started. It was never executed and had " +
|
|
10
|
+
"no side effects — it is safe to re-issue this call if you still need it.";
|
|
9
11
|
export function findOrphanToolCalls(messages, suspendedBatch) {
|
|
10
12
|
const resolved = new Set();
|
|
11
13
|
for (const m of messages) {
|
|
@@ -26,18 +28,21 @@ export function findOrphanToolCalls(messages, suspendedBatch) {
|
|
|
26
28
|
}
|
|
27
29
|
return orphans;
|
|
28
30
|
}
|
|
29
|
-
export async function reconcileInterruptedSession(session, toolEffects, suspendedBatch) {
|
|
31
|
+
export async function reconcileInterruptedSession(session, toolEffects, suspendedBatch, startedToolCallIds) {
|
|
30
32
|
const { messages } = await session.buildContext();
|
|
31
33
|
const orphans = findOrphanToolCalls(messages, suspendedBatch);
|
|
32
34
|
const recovered = [];
|
|
33
35
|
for (const orphan of orphans) {
|
|
34
36
|
const effect = toolEffects?.get(canonicalToolName(orphan.toolName)) ?? "write";
|
|
35
37
|
const safe = effect === "read" || effect === "idempotent";
|
|
38
|
+
const neverStarted = startedToolCallIds !== undefined && !startedToolCallIds.has(orphan.toolCallId);
|
|
39
|
+
const text = neverStarted ? INTERRUPTED_NEVER_STARTED : safe ? INTERRUPTED_SAFE : INTERRUPTED_UNKNOWN;
|
|
36
40
|
const entryId = await session.appendMessage({
|
|
37
41
|
role: "toolResult",
|
|
38
42
|
toolCallId: orphan.toolCallId,
|
|
39
43
|
toolName: orphan.toolName,
|
|
40
|
-
content: [{ type: "text", text
|
|
44
|
+
content: [{ type: "text", text }],
|
|
45
|
+
details: { errorKind: neverStarted ? "interrupted_never_started" : "interrupted_outcome_unknown" },
|
|
41
46
|
isError: true,
|
|
42
47
|
timestamp: Date.now(),
|
|
43
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-reconcile.js","sourceRoot":"","sources":["../../src/core/session-reconcile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA0C3D,MAAM,mBAAmB,GACvB,gGAAgG;IAChG,+FAA+F;IAC/F,8FAA8F;IAC9F,+FAA+F,CAAC;AAElG,MAAM,gBAAgB,GACpB,iGAAiG;IACjG,+FAA+F;IAC/F,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session-reconcile.js","sourceRoot":"","sources":["../../src/core/session-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,9 @@ export interface TaskNotificationPayload {
|
|
|
9
9
|
seq?: number;
|
|
10
10
|
stoppedBy?: "user" | "parent" | "system" | (string & {});
|
|
11
11
|
summary: string;
|
|
12
|
+
exitCode?: number;
|
|
12
13
|
result?: string;
|
|
14
|
+
partial?: boolean;
|
|
13
15
|
output_file?: string;
|
|
14
16
|
usage?: unknown;
|
|
15
17
|
sessionId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-notification.d.ts","sourceRoot":"","sources":["../../src/core/task-notification.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAC/F,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iBAAiB,GAAG,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IAI/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAIjB,GAAG,CAAC,EAAE,MAAM,CAAC;IAMb,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"task-notification.d.ts","sourceRoot":"","sources":["../../src/core/task-notification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-notification.js","sourceRoot":"","sources":["../../src/core/task-notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-notification.js","sourceRoot":"","sources":["../../src/core/task-notification.ts"],"names":[],"mappings":"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"}
|
|
@@ -139,6 +139,7 @@ export declare class TaskRegistry {
|
|
|
139
139
|
reapSessionBackground(sessionId: string, scope?: string): number;
|
|
140
140
|
reapAllSessionBackground(): number;
|
|
141
141
|
onSessionReap(hook: (sessionId: string, scope?: string) => void): () => void;
|
|
142
|
+
private notifyTerminalOnce;
|
|
142
143
|
private startBashWatcher;
|
|
143
144
|
sessionResidentShellIds(sessionId: string, env: unknown): BackgroundShellId[];
|
|
144
145
|
timeoutResidentShellIds(env: unknown): BackgroundShellId[];
|
|
@@ -1 +1 @@
|
|
|
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;AACnH,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGtF,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;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;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;
|
|
1
|
+
{"version":3,"file":"task-registry.d.ts","sourceRoot":"","sources":["../../src/core/task-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,6 +135,11 @@ function noTaskForStop(taskId, enrich) {
|
|
|
135
135
|
details: { task_id: taskId, retrieval_status: "not_ready", error: "not_found" },
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
+
function bashTerminalResult(spool) {
|
|
139
|
+
const out = spool.stdout.slice(-2_000);
|
|
140
|
+
const err = spool.stderr.slice(-2_000);
|
|
141
|
+
return err.length > 0 ? `${out}${out.length > 0 ? "\n" : ""}--- stderr (tail) ---\n${err}` : out;
|
|
142
|
+
}
|
|
138
143
|
function statusFromBackground(status, exitCode) {
|
|
139
144
|
if (status === "running")
|
|
140
145
|
return "running";
|
|
@@ -172,10 +177,12 @@ function canAccessWorkflowRun(run, access) {
|
|
|
172
177
|
return false;
|
|
173
178
|
return true;
|
|
174
179
|
}
|
|
180
|
+
const WORKFLOW_PARTIAL_RESULTS_MAX = 5;
|
|
175
181
|
function formatWorkflowRun(run) {
|
|
176
182
|
const summary = summarizeWorkflowRun(run);
|
|
177
183
|
const done = run.agents.filter((a) => a.status === "completed" || a.status === "failed").length;
|
|
178
184
|
const failed = run.agents.filter((a) => a.status === "failed").length;
|
|
185
|
+
const finishedAgents = run.status === "failed" ? run.agents.filter((a) => a.status === "completed" && a.output !== undefined && a.output !== "") : [];
|
|
179
186
|
return {
|
|
180
187
|
content: JSON.stringify({
|
|
181
188
|
task_id: run.id,
|
|
@@ -191,13 +198,26 @@ function formatWorkflowRun(run) {
|
|
|
191
198
|
...(run.status === "completed" && run.result !== undefined
|
|
192
199
|
? { result: delimitUntrusted("workflow result", run.resultFull ?? run.result) }
|
|
193
200
|
: {}),
|
|
201
|
+
...(finishedAgents.length > 0
|
|
202
|
+
? {
|
|
203
|
+
partial_results: finishedAgents.slice(0, WORKFLOW_PARTIAL_RESULTS_MAX).map((a) => ({
|
|
204
|
+
agent: a.label,
|
|
205
|
+
output: delimitUntrusted(`workflow agent ${a.label} output`, a.output),
|
|
206
|
+
})),
|
|
207
|
+
...(finishedAgents.length > WORKFLOW_PARTIAL_RESULTS_MAX
|
|
208
|
+
? { partial_results_note: `showing ${WORKFLOW_PARTIAL_RESULTS_MAX} of ${finishedAgents.length} completed agent outputs; the full set remains retrievable from the workflow run record (getWorkflowRun / the workflow journal).` }
|
|
209
|
+
: {}),
|
|
210
|
+
}
|
|
211
|
+
: {}),
|
|
194
212
|
note: run.status === "running"
|
|
195
213
|
? "still running — poll again shortly."
|
|
196
214
|
: run.status === "completed"
|
|
197
215
|
? run.result !== undefined
|
|
198
216
|
? "completed — `result` above is the workflow's return value."
|
|
199
217
|
: "completed — this run predates result persistence; its result was delivered on the completion notification."
|
|
200
|
-
:
|
|
218
|
+
: finishedAgents.length > 0
|
|
219
|
+
? `failed — see error. ${finishedAgents.length} agent(s) had already completed before the run ended; their outputs are inlined under \`partial_results\`.`
|
|
220
|
+
: "failed — see error.",
|
|
201
221
|
}),
|
|
202
222
|
details: {
|
|
203
223
|
task_id: run.id,
|
|
@@ -417,24 +437,22 @@ export class TaskRegistry {
|
|
|
417
437
|
handle.watcher = undefined;
|
|
418
438
|
}
|
|
419
439
|
const kill = await handle.env.killBackground(handle.shellId);
|
|
440
|
+
if (handle.status !== "running")
|
|
441
|
+
continue;
|
|
420
442
|
const killFailed = !kill.ok && kill.error.code !== "not_found";
|
|
421
443
|
handle.status = "killed";
|
|
422
444
|
handle.stoppedBy = handle.stopSource ?? source;
|
|
423
445
|
handle.updatedAt = Date.now();
|
|
424
|
-
const
|
|
425
|
-
|
|
426
|
-
handle.
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
catch {
|
|
437
|
-
}
|
|
446
|
+
const resultText = handle.spool !== undefined ? bashTerminalResult(handle.spool) : "";
|
|
447
|
+
this.notifyTerminalOnce(handle, () => handle.onTerminal?.({
|
|
448
|
+
task_id: handle.id,
|
|
449
|
+
task_type: "background_bash",
|
|
450
|
+
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
451
|
+
status: "killed",
|
|
452
|
+
stoppedBy: handle.stoppedBy,
|
|
453
|
+
summary: `${(handle.description ?? "background command").slice(0, 200)} — killed before completion (${clause(handle.stoppedBy)})${killFailed ? ` — kill attempt reported ${kill.ok ? "" : kill.error.code}: the process may still be terminating; the environment teardown retries` : ""}`,
|
|
454
|
+
...(resultText.length > 0 ? { result: resultText } : {}),
|
|
455
|
+
}));
|
|
438
456
|
}
|
|
439
457
|
else {
|
|
440
458
|
if (handle.watcher !== undefined) {
|
|
@@ -442,25 +460,23 @@ export class TaskRegistry {
|
|
|
442
460
|
handle.watcher = undefined;
|
|
443
461
|
}
|
|
444
462
|
const kill = await handle.env.killBackground(handle.shellId);
|
|
463
|
+
if (handle.status !== "running")
|
|
464
|
+
continue;
|
|
445
465
|
const killFailed = !kill.ok && kill.error.code !== "not_found";
|
|
446
466
|
handle.status = "killed";
|
|
447
467
|
handle.stoppedBy = handle.stopSource ?? source;
|
|
448
468
|
handle.updatedAt = Date.now();
|
|
449
469
|
const lastLines = handle.lineBuf !== "" ? [handle.lineBuf] : [];
|
|
450
470
|
handle.lineBuf = "";
|
|
451
|
-
|
|
452
|
-
handle.
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
catch {
|
|
463
|
-
}
|
|
471
|
+
this.notifyTerminalOnce(handle, () => handle.onEvent?.({
|
|
472
|
+
task_id: handle.id,
|
|
473
|
+
task_type: "monitor",
|
|
474
|
+
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
475
|
+
status: "killed",
|
|
476
|
+
stoppedBy: handle.stoppedBy,
|
|
477
|
+
summary: `${(handle.description ?? "monitor").slice(0, 200)} — killed before completion (${clause(handle.stoppedBy)}); watch ended.${killFailed ? ` Kill attempt reported ${kill.ok ? "" : kill.error.code}: the process may still be terminating; the environment teardown retries.` : ""}`,
|
|
478
|
+
...(lastLines.length > 0 ? { lines: lastLines, result: lastLines.join("\n") } : {}),
|
|
479
|
+
}));
|
|
464
480
|
}
|
|
465
481
|
settled++;
|
|
466
482
|
}
|
|
@@ -538,11 +554,21 @@ export class TaskRegistry {
|
|
|
538
554
|
this.sessionReapHooks.add(hook);
|
|
539
555
|
return () => void this.sessionReapHooks.delete(hook);
|
|
540
556
|
}
|
|
557
|
+
notifyTerminalOnce(handle, send) {
|
|
558
|
+
if (handle.terminalNotified === true)
|
|
559
|
+
return;
|
|
560
|
+
handle.terminalNotified = true;
|
|
561
|
+
try {
|
|
562
|
+
send();
|
|
563
|
+
}
|
|
564
|
+
catch {
|
|
565
|
+
}
|
|
566
|
+
}
|
|
541
567
|
startBashWatcher(id, onTerminal) {
|
|
542
568
|
const handle = this.handles.get(id);
|
|
543
569
|
if (!handle || handle.type !== "background_bash")
|
|
544
570
|
return;
|
|
545
|
-
handle.spool
|
|
571
|
+
handle.spool ??= { stdout: "", stderr: "", rolledChars: 0 };
|
|
546
572
|
const ROLL_CAP = 2 * TASK_OUTPUT_MAX_CHARS;
|
|
547
573
|
const roll = (s) => {
|
|
548
574
|
if (s.length <= ROLL_CAP)
|
|
@@ -552,6 +578,8 @@ export class TaskRegistry {
|
|
|
552
578
|
return s.slice(0, half) + s.slice(s.length - half);
|
|
553
579
|
};
|
|
554
580
|
let ticking = false;
|
|
581
|
+
const MAX_RETRYABLE_POLL_FAILURES = 3;
|
|
582
|
+
let pollFailures = 0;
|
|
555
583
|
const stop = () => {
|
|
556
584
|
if (handle.watcher !== undefined) {
|
|
557
585
|
clearInterval(handle.watcher);
|
|
@@ -570,34 +598,80 @@ export class TaskRegistry {
|
|
|
570
598
|
const r = await handle.env.pollBackground(handle.shellId);
|
|
571
599
|
if (this.handles.get(id) !== handle || handle.status !== "running")
|
|
572
600
|
return stop();
|
|
573
|
-
if (!r.ok)
|
|
574
|
-
|
|
601
|
+
if (!r.ok) {
|
|
602
|
+
if ((r.error.code === "timeout" || r.error.code === "io") && ++pollFailures <= MAX_RETRYABLE_POLL_FAILURES)
|
|
603
|
+
return;
|
|
604
|
+
handle.status = "failed";
|
|
605
|
+
handle.updatedAt = Date.now();
|
|
606
|
+
stop();
|
|
607
|
+
const lostResult = bashTerminalResult(handle.spool);
|
|
608
|
+
this.notifyTerminalOnce(handle, () => onTerminal({
|
|
609
|
+
task_id: id,
|
|
610
|
+
task_type: "background_bash",
|
|
611
|
+
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
612
|
+
status: "failed",
|
|
613
|
+
summary: `${(handle.description ?? "background command").slice(0, 200)} — lost its background process (${r.error.message}); no further output will arrive.`,
|
|
614
|
+
...(lostResult.length > 0 ? { result: lostResult } : {}),
|
|
615
|
+
}));
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
pollFailures = 0;
|
|
575
619
|
const spool = handle.spool;
|
|
576
620
|
spool.stdout = roll(spool.stdout + r.value.stdout);
|
|
577
621
|
spool.stderr = roll(spool.stderr + r.value.stderr);
|
|
578
622
|
handle.status = statusFromBackground(r.value.status, r.value.exitCode);
|
|
579
|
-
if (handle.status === "killed" && handle.stoppedBy === undefined)
|
|
580
|
-
handle.stoppedBy = handle.stopSource ?? "system";
|
|
623
|
+
if (handle.status === "killed" && handle.stoppedBy === undefined) {
|
|
624
|
+
handle.stoppedBy = handle.stopSource ?? (r.value.timedOut === true ? "timeout" : "system");
|
|
625
|
+
}
|
|
581
626
|
handle.updatedAt = Date.now();
|
|
582
627
|
if (r.value.status !== "running") {
|
|
583
628
|
spool.exitCode = r.value.exitCode;
|
|
629
|
+
if (r.value.timedOut === true) {
|
|
630
|
+
spool.timedOut = true;
|
|
631
|
+
if (r.value.timeoutSec !== undefined)
|
|
632
|
+
spool.timeoutSec = r.value.timeoutSec;
|
|
633
|
+
}
|
|
584
634
|
stop();
|
|
585
|
-
const
|
|
586
|
-
|
|
635
|
+
const desc = (handle.description ?? "background command").slice(0, 200);
|
|
636
|
+
const success = r.value.status === "exited" && r.value.exitCode === 0;
|
|
637
|
+
const resultText = success ? spool.stdout.slice(-2_000) : bashTerminalResult(spool);
|
|
638
|
+
this.notifyTerminalOnce(handle, () => onTerminal({
|
|
587
639
|
task_id: id,
|
|
588
640
|
task_type: "background_bash",
|
|
589
641
|
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
590
642
|
status: handle.status === "completed" ? "completed" : handle.status === "killed" ? "killed" : "failed",
|
|
591
643
|
...(handle.status === "killed" && handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
644
|
+
...(r.value.status === "exited" && r.value.exitCode !== undefined ? { exitCode: r.value.exitCode } : {}),
|
|
592
645
|
summary: r.value.status === "exited"
|
|
593
|
-
?
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
646
|
+
? r.value.exitCode === 0
|
|
647
|
+
? `Background command "${desc}" completed (exit code 0)`
|
|
648
|
+
: `Background command "${desc}" failed (exit code ${r.value.exitCode})`
|
|
649
|
+
: r.value.timedOut === true
|
|
650
|
+
? r.value.timeoutSec !== undefined
|
|
651
|
+
? `${desc} — timed out after ${r.value.timeoutSec}s (its own background time budget); the process was killed`
|
|
652
|
+
: `${desc} — timed out (its own background time budget); the process was killed`
|
|
653
|
+
: `${desc} — ${r.value.status}`,
|
|
654
|
+
...(resultText.length > 0 ? { result: resultText } : {}),
|
|
655
|
+
}));
|
|
597
656
|
}
|
|
598
657
|
}
|
|
599
|
-
catch {
|
|
658
|
+
catch (e) {
|
|
659
|
+
if (this.handles.get(id) !== handle || handle.status !== "running")
|
|
660
|
+
return stop();
|
|
661
|
+
if (++pollFailures <= MAX_RETRYABLE_POLL_FAILURES)
|
|
662
|
+
return;
|
|
663
|
+
handle.status = "failed";
|
|
664
|
+
handle.updatedAt = Date.now();
|
|
600
665
|
stop();
|
|
666
|
+
const crashedResult = bashTerminalResult(handle.spool);
|
|
667
|
+
this.notifyTerminalOnce(handle, () => onTerminal({
|
|
668
|
+
task_id: id,
|
|
669
|
+
task_type: "background_bash",
|
|
670
|
+
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
671
|
+
status: "failed",
|
|
672
|
+
summary: `${(handle.description ?? "background command").slice(0, 200)} — lost its background process (poll failed: ${e instanceof Error ? e.message : String(e)}); no further output will arrive.`,
|
|
673
|
+
...(crashedResult.length > 0 ? { result: crashedResult } : {}),
|
|
674
|
+
}));
|
|
601
675
|
}
|
|
602
676
|
finally {
|
|
603
677
|
ticking = false;
|
|
@@ -675,6 +749,8 @@ export class TaskRegistry {
|
|
|
675
749
|
return s.slice(0, half) + s.slice(s.length - half);
|
|
676
750
|
};
|
|
677
751
|
let ticking = false;
|
|
752
|
+
const MAX_RETRYABLE_POLL_FAILURES = 3;
|
|
753
|
+
let pollFailures = 0;
|
|
678
754
|
const stop = () => {
|
|
679
755
|
if (handle.watcher !== undefined) {
|
|
680
756
|
timers.clearInterval(handle.watcher);
|
|
@@ -697,7 +773,7 @@ export class TaskRegistry {
|
|
|
697
773
|
const terminal = (status, summary, finalLines) => {
|
|
698
774
|
handle.updatedAt = Date.now();
|
|
699
775
|
stop();
|
|
700
|
-
emit({
|
|
776
|
+
this.notifyTerminalOnce(handle, () => emit({
|
|
701
777
|
task_id: id,
|
|
702
778
|
task_type: "monitor",
|
|
703
779
|
...(handle.toolUseId !== undefined ? { toolUseId: handle.toolUseId } : {}),
|
|
@@ -705,7 +781,7 @@ export class TaskRegistry {
|
|
|
705
781
|
...(status === "killed" && handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
706
782
|
summary: `${(handle.description ?? "monitor").slice(0, 200)} — ${summary}`,
|
|
707
783
|
...(finalLines.length > 0 ? { lines: finalLines, result: clipEvent(finalLines.join("\n")) } : {}),
|
|
708
|
-
});
|
|
784
|
+
}));
|
|
709
785
|
};
|
|
710
786
|
const tick = async () => {
|
|
711
787
|
if (ticking)
|
|
@@ -720,9 +796,12 @@ export class TaskRegistry {
|
|
|
720
796
|
if (this.handles.get(id) !== handle || handle.status !== "running")
|
|
721
797
|
return stop();
|
|
722
798
|
if (!r.ok) {
|
|
799
|
+
if ((r.error.code === "timeout" || r.error.code === "io") && ++pollFailures <= MAX_RETRYABLE_POLL_FAILURES)
|
|
800
|
+
return;
|
|
723
801
|
handle.status = "failed";
|
|
724
802
|
return terminal("failed", `monitor lost its process (${r.error.message}); watch ended.`, pendingFinalLines([]));
|
|
725
803
|
}
|
|
804
|
+
pollFailures = 0;
|
|
726
805
|
const spool = handle.spool;
|
|
727
806
|
spool.stdout = roll(spool.stdout + r.value.stdout);
|
|
728
807
|
spool.stderr = roll(spool.stderr + r.value.stderr);
|
|
@@ -789,8 +868,13 @@ export class TaskRegistry {
|
|
|
789
868
|
result: clipEvent(lines.join("\n")),
|
|
790
869
|
});
|
|
791
870
|
}
|
|
792
|
-
catch {
|
|
793
|
-
|
|
871
|
+
catch (e) {
|
|
872
|
+
if (this.handles.get(id) !== handle || handle.status !== "running")
|
|
873
|
+
return stop();
|
|
874
|
+
if (++pollFailures <= MAX_RETRYABLE_POLL_FAILURES)
|
|
875
|
+
return;
|
|
876
|
+
handle.status = "failed";
|
|
877
|
+
terminal("failed", `monitor watcher crashed (${e instanceof Error ? e.message : String(e)}); watch ended.`, pendingFinalLines([]));
|
|
794
878
|
}
|
|
795
879
|
finally {
|
|
796
880
|
ticking = false;
|
|
@@ -1075,7 +1159,8 @@ export class TaskRegistry {
|
|
|
1075
1159
|
const shape = (text) => clipTaskOutput(rx ? text.split(/\r?\n/).filter((l) => rx.test(l)).join("\n") : text, handle.outputFile);
|
|
1076
1160
|
const running = handle.status === "running";
|
|
1077
1161
|
const retrieval = running && deadline !== undefined && Date.now() >= deadline ? "timeout" : "success";
|
|
1078
|
-
const
|
|
1162
|
+
const timedOutClause = spool.timedOut === true ? ` (timed out after ${spool.timeoutSec !== undefined ? `${spool.timeoutSec}s` : "its background time budget"})` : "";
|
|
1163
|
+
const displayStatus = (spool.exitCode !== undefined ? `exited(code ${spool.exitCode})` : running ? "running" : handle.status) + timedOutClause;
|
|
1079
1164
|
const rolledNote = spool.rolledChars > 0 ? `[!] ${spool.rolledChars} earlier char(s) dropped from the spool (memory bound)\n` : "";
|
|
1080
1165
|
const body = `status: ${displayStatus}\n${rolledNote}--- stdout (full, re-readable) ---\n${shape(spool.stdout) || "(none)"}\n` +
|
|
1081
1166
|
`--- stderr ---\n${shape(spool.stderr) || "(none)"}`;
|
|
@@ -1087,7 +1172,11 @@ export class TaskRegistry {
|
|
|
1087
1172
|
status: handle.status,
|
|
1088
1173
|
retrieval_status: retrieval,
|
|
1089
1174
|
...(handle.status === "killed" && handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
1090
|
-
details: {
|
|
1175
|
+
details: {
|
|
1176
|
+
status: running ? "running" : handle.status,
|
|
1177
|
+
exitCode: spool.exitCode,
|
|
1178
|
+
...(spool.timedOut === true ? { timedOut: true, ...(spool.timeoutSec !== undefined ? { timeoutSec: spool.timeoutSec } : {}) } : {}),
|
|
1179
|
+
},
|
|
1091
1180
|
},
|
|
1092
1181
|
};
|
|
1093
1182
|
}
|
|
@@ -1122,13 +1211,14 @@ export class TaskRegistry {
|
|
|
1122
1211
|
dropped += r.value.bytesDroppedBeforeCursor ?? 0;
|
|
1123
1212
|
handle.status = statusFromBackground(r.value.status, r.value.exitCode);
|
|
1124
1213
|
if (handle.status === "killed" && handle.stoppedBy === undefined)
|
|
1125
|
-
handle.stoppedBy = handle.stopSource ?? "system";
|
|
1214
|
+
handle.stoppedBy = handle.stopSource ?? (r.value.timedOut === true ? "timeout" : "system");
|
|
1126
1215
|
handle.updatedAt = Date.now();
|
|
1127
1216
|
const running = r.value.status === "running";
|
|
1128
1217
|
if (!running || deadline === undefined || Date.now() >= deadline || signal?.aborted) {
|
|
1129
1218
|
const retrieval = running && deadline !== undefined && Date.now() >= deadline ? "timeout" : "success";
|
|
1130
1219
|
const shape = (text) => clipTaskOutput(rx ? text.split(/\r?\n/).filter((l) => rx.test(l)).join("\n") : text, handle.outputFile);
|
|
1131
|
-
const
|
|
1220
|
+
const timedOutClause = r.value.timedOut === true ? ` (timed out after ${r.value.timeoutSec !== undefined ? `${r.value.timeoutSec}s` : "its background time budget"})` : "";
|
|
1221
|
+
const displayStatus = (r.value.status === "exited" ? `exited(code ${r.value.exitCode})` : r.value.status) + timedOutClause;
|
|
1132
1222
|
const droppedNote = (dropped > 0 ? `[!] ${dropped} earlier byte(s) permanently dropped before this window (8MB buffer evicted)\n` : "") +
|
|
1133
1223
|
(rolledChars > 0 ? `[!] ${rolledChars} accumulated char(s) dropped from the middle during the blocked wait (memory bound)\n` : "");
|
|
1134
1224
|
const body = `status: ${displayStatus}\n${droppedNote}--- new stdout ---\n${shape(stdout) || "(none)"}\n` +
|
|
@@ -1141,7 +1231,12 @@ export class TaskRegistry {
|
|
|
1141
1231
|
status: handle.status,
|
|
1142
1232
|
retrieval_status: retrieval,
|
|
1143
1233
|
...(handle.status === "killed" && handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}),
|
|
1144
|
-
details: {
|
|
1234
|
+
details: {
|
|
1235
|
+
status: r.value.status,
|
|
1236
|
+
exitCode: r.value.exitCode,
|
|
1237
|
+
bytesDroppedBeforeCursor: dropped,
|
|
1238
|
+
...(r.value.timedOut === true ? { timedOut: true, ...(r.value.timeoutSec !== undefined ? { timeoutSec: r.value.timeoutSec } : {}) } : {}),
|
|
1239
|
+
},
|
|
1145
1240
|
},
|
|
1146
1241
|
};
|
|
1147
1242
|
}
|
|
@@ -1219,12 +1314,30 @@ export class TaskRegistry {
|
|
|
1219
1314
|
}
|
|
1220
1315
|
this.markStopSource(handle.id, "parent");
|
|
1221
1316
|
const r = await handle.env.killBackground(handle.shellId);
|
|
1317
|
+
if (handle.status !== "running") {
|
|
1318
|
+
return {
|
|
1319
|
+
content: `Terminated ${handle.id}.`,
|
|
1320
|
+
details: { task_id: handle.id, type: "background_bash", status: handle.status, retrieval_status: "success", ...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}) },
|
|
1321
|
+
};
|
|
1322
|
+
}
|
|
1222
1323
|
if (!r.ok) {
|
|
1223
|
-
if (r.error.code === "not_found")
|
|
1224
|
-
|
|
1324
|
+
if (r.error.code === "not_found") {
|
|
1325
|
+
if (handle.stoppedBy === undefined)
|
|
1326
|
+
handle.stoppedBy = handle.stopSource ?? "parent";
|
|
1327
|
+
handle.status = "killed";
|
|
1328
|
+
handle.updatedAt = Date.now();
|
|
1329
|
+
return {
|
|
1330
|
+
content: `Terminated ${handle.id} (the process was already gone).`,
|
|
1331
|
+
details: { task_id: handle.id, type: "background_bash", status: "killed", retrieval_status: "success", stoppedBy: handle.stoppedBy },
|
|
1332
|
+
};
|
|
1333
|
+
}
|
|
1334
|
+
const restored = handle.onTerminal !== undefined;
|
|
1335
|
+
if (restored && handle.watcher === undefined)
|
|
1336
|
+
this.startBashWatcher(handle.id, handle.onTerminal);
|
|
1225
1337
|
const retrieval_status = r.error.code === "timeout" ? "timeout" : "not_ready";
|
|
1226
1338
|
return {
|
|
1227
|
-
content: `Error (TaskStop): ${r.error.message}
|
|
1339
|
+
content: `Error (TaskStop): ${r.error.message} — the kill did not land; the process may still be running.` +
|
|
1340
|
+
(restored ? " Its watcher keeps running: TaskOutput still works and the completion notification will still fire." : " TaskOutput still reflects its live status."),
|
|
1228
1341
|
details: { task_id: handle.id, type: "background_bash", status: handle.status, retrieval_status, error: r.error.code },
|
|
1229
1342
|
};
|
|
1230
1343
|
}
|
|
@@ -1280,12 +1393,28 @@ export class TaskRegistry {
|
|
|
1280
1393
|
}
|
|
1281
1394
|
this.markStopSource(handle.id, "parent");
|
|
1282
1395
|
const r = await handle.env.killBackground(handle.shellId);
|
|
1396
|
+
if (handle.status !== "running") {
|
|
1397
|
+
return {
|
|
1398
|
+
content: `Terminated ${handle.id}.`,
|
|
1399
|
+
details: { task_id: handle.id, type: "monitor", status: handle.status, retrieval_status: "success", ...(handle.stoppedBy !== undefined ? { stoppedBy: handle.stoppedBy } : {}) },
|
|
1400
|
+
};
|
|
1401
|
+
}
|
|
1283
1402
|
if (!r.ok) {
|
|
1284
|
-
if (r.error.code === "not_found")
|
|
1285
|
-
|
|
1403
|
+
if (r.error.code === "not_found") {
|
|
1404
|
+
if (handle.stoppedBy === undefined)
|
|
1405
|
+
handle.stoppedBy = handle.stopSource ?? "parent";
|
|
1406
|
+
handle.status = "killed";
|
|
1407
|
+
handle.updatedAt = Date.now();
|
|
1408
|
+
return {
|
|
1409
|
+
content: `Terminated ${handle.id} (the process was already gone).`,
|
|
1410
|
+
details: { task_id: handle.id, type: "monitor", status: "killed", retrieval_status: "success", stoppedBy: handle.stoppedBy },
|
|
1411
|
+
};
|
|
1412
|
+
}
|
|
1413
|
+
if (handle.watcher === undefined)
|
|
1414
|
+
this.startMonitorWatcher(handle.id);
|
|
1286
1415
|
const retrieval_status = r.error.code === "timeout" ? "timeout" : "not_ready";
|
|
1287
1416
|
return {
|
|
1288
|
-
content: `Error (TaskStop): ${r.error.message}
|
|
1417
|
+
content: `Error (TaskStop): ${r.error.message} — the kill did not land; the process may still be running. The watch keeps running: events and the terminal notification still fire.`,
|
|
1289
1418
|
details: { task_id: handle.id, type: "monitor", status: handle.status, retrieval_status, error: r.error.code },
|
|
1290
1419
|
};
|
|
1291
1420
|
}
|