@narumitw/pi-subagents 2.0.3 → 2.0.5

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.
Files changed (36) hide show
  1. package/README.md +250 -157
  2. package/dist/chunks/child-peer-bridge.ts +108 -0
  3. package/dist/chunks/child-peer-bridge.ts.map +7 -0
  4. package/dist/chunks/{chunk-EWWXFU7N.ts → chunk-5DGRMKNV.ts} +3 -27
  5. package/dist/chunks/{chunk-EWWXFU7N.ts.map → chunk-5DGRMKNV.ts.map} +3 -3
  6. package/dist/chunks/{chunk-F5YWVHQX.ts → chunk-CBP76ARQ.ts} +6 -6
  7. package/dist/chunks/{chunk-UVFVHIOP.ts → chunk-H3BFJ7HJ.ts} +6 -4
  8. package/dist/chunks/{chunk-UVFVHIOP.ts.map → chunk-H3BFJ7HJ.ts.map} +1 -1
  9. package/dist/chunks/chunk-RY2AEGMZ.ts +34 -0
  10. package/dist/chunks/chunk-RY2AEGMZ.ts.map +7 -0
  11. package/dist/chunks/{chunk-RHRQMT7Q.ts → chunk-YBUWBRF7.ts} +2 -2
  12. package/dist/chunks/{chunk-F4L2UVSK.ts → chunk-ZHTNCZIA.ts} +2 -2
  13. package/dist/chunks/{config-ui-3IBMHTQB.ts → config-ui-2YUCUEBM.ts} +3 -3
  14. package/dist/chunks/{consult-NYXVDN5G.ts → consult-IV7UBNQQ.ts} +3 -3
  15. package/dist/chunks/{create-stateful-transport-4WKZHRSI.ts → create-stateful-transport-ZP3IXNV3.ts} +4 -4
  16. package/dist/chunks/{execution-DS2DEIQZ.ts → execution-LA7HN5YF.ts} +5 -5
  17. package/dist/chunks/{in-process-transport-TEYAWSEC.ts → in-process-transport-4RF3J6XK.ts} +4 -3
  18. package/dist/chunks/{inspect-UOQQ3KNL.ts → inspect-XV2QALMR.ts} +5 -5
  19. package/dist/chunks/{rpc-transport-Y6LA5BOP.ts → rpc-transport-NEHBHWX4.ts} +103 -31
  20. package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +7 -0
  21. package/dist/chunks/{subprocess-transport-C2XVR25R.ts → subprocess-transport-NSHOGDC4.ts} +7 -6
  22. package/dist/chunks/{subprocess-transport-C2XVR25R.ts.map → subprocess-transport-NSHOGDC4.ts.map} +1 -1
  23. package/dist/index.ts +15 -15
  24. package/package.json +2 -2
  25. package/src/rpc-transport.ts +20 -6
  26. package/src/rpc-turn-capture.ts +98 -23
  27. package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +0 -7
  28. /package/dist/chunks/{chunk-F5YWVHQX.ts.map → chunk-CBP76ARQ.ts.map} +0 -0
  29. /package/dist/chunks/{chunk-RHRQMT7Q.ts.map → chunk-YBUWBRF7.ts.map} +0 -0
  30. /package/dist/chunks/{chunk-F4L2UVSK.ts.map → chunk-ZHTNCZIA.ts.map} +0 -0
  31. /package/dist/chunks/{config-ui-3IBMHTQB.ts.map → config-ui-2YUCUEBM.ts.map} +0 -0
  32. /package/dist/chunks/{consult-NYXVDN5G.ts.map → consult-IV7UBNQQ.ts.map} +0 -0
  33. /package/dist/chunks/{create-stateful-transport-4WKZHRSI.ts.map → create-stateful-transport-ZP3IXNV3.ts.map} +0 -0
  34. /package/dist/chunks/{execution-DS2DEIQZ.ts.map → execution-LA7HN5YF.ts.map} +0 -0
  35. /package/dist/chunks/{in-process-transport-TEYAWSEC.ts.map → in-process-transport-4RF3J6XK.ts.map} +0 -0
  36. /package/dist/chunks/{inspect-UOQQ3KNL.ts.map → inspect-XV2QALMR.ts.map} +0 -0
package/dist/index.ts CHANGED
@@ -1,21 +1,26 @@
1
1
  // @generated by scripts/build-runtime.mjs; do not edit.
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
+ import {
4
+ discoverAgentCatalog,
5
+ formatAgentCatalog,
6
+ formatUsageStats,
7
+ registerSubagentConsult
8
+ } from "./chunks/chunk-YBUWBRF7.ts";
3
9
  import {
4
10
  registerSubagentInspect
5
- } from "./chunks/chunk-F4L2UVSK.ts";
11
+ } from "./chunks/chunk-ZHTNCZIA.ts";
6
12
  import {
7
13
  SubagentParams,
8
14
  hasUsableAggregator
9
15
  } from "./chunks/chunk-NIF42QMF.ts";
10
16
  import {
11
- registerStatefulSubagents
12
- } from "./chunks/chunk-F5YWVHQX.ts";
17
+ cachedModuleLoader,
18
+ throwIfAborted
19
+ } from "./chunks/chunk-HOP5FXDT.ts";
13
20
  import {
14
- discoverAgentCatalog,
15
- formatAgentCatalog,
16
- formatUsageStats,
17
- registerSubagentConsult
18
- } from "./chunks/chunk-RHRQMT7Q.ts";
21
+ registerStatefulSubagents
22
+ } from "./chunks/chunk-CBP76ARQ.ts";
23
+ import "./chunks/chunk-S2IWVK3J.ts";
19
24
  import "./chunks/chunk-P7OH4XMF.ts";
20
25
  import "./chunks/chunk-N7BLVXKK.ts";
21
26
  import {
@@ -25,10 +30,6 @@ import {
25
30
  import "./chunks/chunk-RTCVYIZA.ts";
26
31
  import "./chunks/chunk-ONDTY4EL.ts";
27
32
  import "./chunks/chunk-O4VO6JUJ.ts";
28
- import {
29
- cachedModuleLoader,
30
- throwIfAborted
31
- } from "./chunks/chunk-HOP5FXDT.ts";
32
33
  import "./chunks/chunk-PSK43Y6A.ts";
33
34
  import "./chunks/chunk-RSUXZD6S.ts";
34
35
  import {
@@ -57,7 +58,6 @@ import "./chunks/chunk-I2FAK44T.ts";
57
58
  import {
58
59
  MAX_BLOCKING_PARALLEL_CONCURRENCY
59
60
  } from "./chunks/chunk-H3FP6DLR.ts";
60
- import "./chunks/chunk-S2IWVK3J.ts";
61
61
 
62
62
  // src/subagents-extension.ts
63
63
  import {
@@ -85,7 +85,7 @@ function registerSubagentConfigLifecycle(pi) {
85
85
  }
86
86
  function registerSubagentConfigCommand(pi, runtime, owner = registerSubagentConfigLifecycle(pi), dependencies = {}) {
87
87
  const loadConfigUi = cachedModuleLoader(
88
- dependencies.loadConfigUi ?? (() => import("./chunks/config-ui-3IBMHTQB.ts"))
88
+ dependencies.loadConfigUi ?? (() => import("./chunks/config-ui-2YUCUEBM.ts"))
89
89
  );
90
90
  const loadConfigStatus = cachedModuleLoader(
91
91
  dependencies.loadConfigStatus ?? (() => import("./chunks/config-status-J4GPWP46.ts"))
@@ -832,7 +832,7 @@ ${expansionHint()}`;
832
832
  function subagents_extension_default(pi, dependencies = {}) {
833
833
  pi.registerMessageRenderer(SUBAGENT_COMPLETION_MESSAGE_TYPE, renderCompletionMessage);
834
834
  const loadBlockingExecution = cachedModuleLoader(
835
- dependencies.loadBlockingExecution ?? (() => import("./chunks/execution-DS2DEIQZ.ts"))
835
+ dependencies.loadBlockingExecution ?? (() => import("./chunks/execution-LA7HN5YF.ts"))
836
836
  );
837
837
  const configOwner = registerSubagentConfigLifecycle(pi);
838
838
  const settings = readSubagentSettings();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@narumitw/pi-subagents",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Pi extension for delegating work to specialized isolated subagents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -52,7 +52,7 @@
52
52
  "typescript": "7.0.2"
53
53
  },
54
54
  "dependencies": {
55
- "@narumitw/pi-tui-kit": "^0.56.0",
55
+ "@narumitw/pi-tui-kit": "^0.56.1",
56
56
  "proper-lockfile": "^4.1.2"
57
57
  },
58
58
  "repository": {
@@ -37,8 +37,10 @@ import {
37
37
  } from "./rpc-transport-metadata.js";
38
38
  import {
39
39
  captureRpcEvent,
40
+ commitRpcInFlightUsage,
40
41
  createRpcTurnCapture,
41
42
  observeRpcBudgetEvent,
43
+ snapshotRpcUsage,
42
44
  } from "./rpc-turn-capture.js";
43
45
  import { terminateProcess } from "./runner.js";
44
46
  import { safeTerminalText } from "./safe-text.js";
@@ -501,11 +503,17 @@ export class RpcTransport implements SubagentTransport {
501
503
  });
502
504
  void settled.catch(() => undefined);
503
505
  const unsubscribeEvent = child.client.onEvent((event) => {
504
- captureRpcEvent(event, capture);
506
+ const usageChanged = captureRpcEvent(event, capture);
505
507
  observeRpcBudgetEvent(event, budgetMonitor);
506
508
  if (!capture.firstActivityAt && isActivityEvent(event)) {
507
509
  capture.firstActivityAt = Date.now();
508
- publish({ phase: "running", timing: { firstActivityAt: capture.firstActivityAt } });
510
+ publish({
511
+ phase: "running",
512
+ timing: { firstActivityAt: capture.firstActivityAt },
513
+ ...(usageChanged ? { usage: snapshotRpcUsage(capture) } : {}),
514
+ });
515
+ } else if (usageChanged) {
516
+ publish({ usage: snapshotRpcUsage(capture) });
509
517
  }
510
518
  const type = eventType(event);
511
519
  if (type === "auto_retry_start") publish({ phase: "retrying" });
@@ -572,7 +580,7 @@ export class RpcTransport implements SubagentTransport {
572
580
  phase: explicitAbort ? "interrupted" : "failed",
573
581
  failurePhase: "running",
574
582
  timing: { settledAt: Date.now() },
575
- usage: capture.usage,
583
+ usage: snapshotRpcUsage(capture),
576
584
  });
577
585
  const checkpointOutput = termination
578
586
  ? formatTimeoutCheckpoint(termination.checkpoint)
@@ -591,7 +599,11 @@ export class RpcTransport implements SubagentTransport {
591
599
  };
592
600
  }
593
601
 
594
- publish({ phase: "finalizing", failurePhase: "running" });
602
+ publish({
603
+ phase: "finalizing",
604
+ failurePhase: "running",
605
+ usage: snapshotRpcUsage(capture),
606
+ });
595
607
  const finalizationStartedAt = Date.now();
596
608
  const summary = await finalizeTimedOutRpcTurn({
597
609
  client: child.client,
@@ -605,6 +617,7 @@ export class RpcTransport implements SubagentTransport {
605
617
  finalizationTimeoutMs: this.options.timeoutFinalizationMs,
606
618
  abortGraceMs: this.options.abortGraceMs ?? ABORT_GRACE_MS,
607
619
  resetCapture() {
620
+ commitRpcInFlightUsage(capture);
608
621
  capture.output = "";
609
622
  capture.partial = "";
610
623
  capture.stopReason = undefined;
@@ -625,7 +638,7 @@ export class RpcTransport implements SubagentTransport {
625
638
  phase: "failed",
626
639
  failurePhase: "running",
627
640
  timing: { settledAt: Date.now() },
628
- usage: capture.usage,
641
+ usage: snapshotRpcUsage(capture),
629
642
  });
630
643
  const checkpointOutput = termination ? formatTimeoutCheckpoint(termination.checkpoint) : "";
631
644
  return {
@@ -651,7 +664,7 @@ export class RpcTransport implements SubagentTransport {
651
664
  timing: { settledAt: Date.now() },
652
665
  provider: capture.provider ?? telemetry.provider,
653
666
  model: capture.model ?? telemetry.model,
654
- usage: capture.usage,
667
+ usage: snapshotRpcUsage(capture),
655
668
  });
656
669
  return {
657
670
  output: output.text,
@@ -686,6 +699,7 @@ export class RpcTransport implements SubagentTransport {
686
699
  phase: signal.aborted ? "interrupted" : "failed",
687
700
  failurePhase: accepted ? "running" : "ready",
688
701
  timing: { settledAt: Date.now() },
702
+ usage: snapshotRpcUsage(capture),
689
703
  });
690
704
  return {
691
705
  output:
@@ -12,6 +12,7 @@ export interface RpcTurnCapture {
12
12
  provider?: string;
13
13
  model?: string;
14
14
  usage: TransportUsage;
15
+ inFlightUsage?: TransportUsage;
15
16
  firstActivityAt?: number;
16
17
  journal: TimeoutProgressJournal;
17
18
  }
@@ -25,8 +26,9 @@ export function createRpcTurnCapture(): RpcTurnCapture {
25
26
  };
26
27
  }
27
28
 
28
- export function captureRpcEvent(event: unknown, capture: RpcTurnCapture): void {
29
- if (!isRecord(event)) return;
29
+ export function captureRpcEvent(event: unknown, capture: RpcTurnCapture): boolean {
30
+ if (!isRecord(event)) return false;
31
+ const previousUsage = snapshotRpcUsage(capture);
30
32
  if (event.type === "tool_execution_start") {
31
33
  capture.journal.recordToolCall(
32
34
  typeof event.toolCallId === "string" ? event.toolCallId : "",
@@ -42,7 +44,12 @@ export function captureRpcEvent(event: unknown, capture: RpcTurnCapture): void {
42
44
  { content: result.content, isError: event.isError },
43
45
  );
44
46
  }
47
+ if (event.type === "message_start" && isRecord(event.message)) {
48
+ if (event.message.role === "assistant") commitRpcInFlightUsage(capture);
49
+ }
45
50
  if (event.type === "message_update") {
51
+ const usage = normalizeUsage(event.usage);
52
+ if (usage) capture.inFlightUsage = usage;
46
53
  const delta = event.assistantMessageEvent;
47
54
  if (isRecord(delta) && delta.type === "text_delta" && typeof delta.delta === "string") {
48
55
  capture.partial = truncateUtf8(
@@ -51,10 +58,28 @@ export function captureRpcEvent(event: unknown, capture: RpcTurnCapture): void {
51
58
  ).text;
52
59
  }
53
60
  }
54
- if (event.type !== "message_end" || !isRecord(event.message)) return;
55
- const candidate = event.message;
56
- if (candidate.role !== "toolResult") journalMessages(capture.journal, [candidate]);
57
- if (candidate.role !== "assistant") return;
61
+ if (event.type === "message_end" && isRecord(event.message)) {
62
+ const candidate = event.message;
63
+ if (candidate.role !== "toolResult") journalMessages(capture.journal, [candidate]);
64
+ if (candidate.role === "assistant") captureAssistantEnd(candidate, capture);
65
+ }
66
+ return !sameUsage(previousUsage, snapshotRpcUsage(capture));
67
+ }
68
+
69
+ export function snapshotRpcUsage(capture: RpcTurnCapture): TransportUsage {
70
+ const usage = { ...capture.usage };
71
+ if (capture.inFlightUsage) addUsage(usage, capture.inFlightUsage);
72
+ return usage;
73
+ }
74
+
75
+ export function commitRpcInFlightUsage(capture: RpcTurnCapture): boolean {
76
+ if (!capture.inFlightUsage) return false;
77
+ addUsage(capture.usage, capture.inFlightUsage);
78
+ capture.inFlightUsage = undefined;
79
+ return true;
80
+ }
81
+
82
+ function captureAssistantEnd(candidate: Record<string, unknown>, capture: RpcTurnCapture): void {
58
83
  capture.output = truncateUtf8(
59
84
  assistantText(candidate.content) || capture.partial,
60
85
  DEFAULT_MAX_OUTPUT_BYTES,
@@ -76,8 +101,11 @@ export function captureRpcEvent(event: unknown, capture: RpcTurnCapture): void {
76
101
  ? candidate.model
77
102
  : undefined;
78
103
  capture.model = responseModel ? boundedPrivateText(responseModel, 256) : undefined;
79
- capture.usage.turns++;
80
- addUsage(capture.usage, candidate.usage);
104
+ const finalUsage = normalizeUsage(candidate.usage);
105
+ const completedUsage = finalUsage ?? capture.inFlightUsage;
106
+ if (completedUsage) addUsage(capture.usage, completedUsage);
107
+ capture.inFlightUsage = undefined;
108
+ capture.usage.turns = addUsageValue(capture.usage.turns, 1);
81
109
  }
82
110
 
83
111
  export function observeRpcBudgetEvent(event: unknown, monitor: TurnBudgetMonitor): void {
@@ -101,29 +129,76 @@ function assistantToolCallCount(content: unknown): number {
101
129
  return content.filter((part) => isRecord(part) && part.type === "toolCall").length;
102
130
  }
103
131
 
104
- function addUsage(target: TransportUsage, value: unknown): void {
105
- if (!isRecord(value)) return;
106
- target.input += safeNonNegative(value.input);
107
- target.output += safeNonNegative(value.output);
108
- target.cacheRead += safeNonNegative(value.cacheRead);
109
- target.cacheWrite += safeNonNegative(value.cacheWrite);
132
+ function normalizeUsage(value: unknown): TransportUsage | undefined {
133
+ if (!isRecord(value)) return undefined;
134
+ const input = safeNonNegative(value.input);
135
+ const output = safeNonNegative(value.output);
136
+ const cacheRead = safeNonNegative(value.cacheRead);
137
+ const cacheWrite = safeNonNegative(value.cacheWrite);
110
138
  const reportedTotal = safeNonNegative(value.totalTokens);
111
- target.totalTokens +=
112
- reportedTotal ||
113
- safeNonNegative(value.input) +
114
- safeNonNegative(value.output) +
115
- safeNonNegative(value.cacheRead) +
116
- safeNonNegative(value.cacheWrite);
117
- if (isRecord(value.cost)) target.cost += safeNonNegative(value.cost.total);
139
+ const cost = isRecord(value.cost) ? safeNonNegative(value.cost.total) : undefined;
140
+ if (
141
+ input === undefined &&
142
+ output === undefined &&
143
+ cacheRead === undefined &&
144
+ cacheWrite === undefined &&
145
+ reportedTotal === undefined &&
146
+ cost === undefined
147
+ ) {
148
+ return undefined;
149
+ }
150
+ const components = [input, output, cacheRead, cacheWrite].reduce<number>(
151
+ (total, current) => addUsageValue(total, current ?? 0),
152
+ 0,
153
+ );
154
+ return {
155
+ input: input ?? 0,
156
+ output: output ?? 0,
157
+ cacheRead: cacheRead ?? 0,
158
+ cacheWrite: cacheWrite ?? 0,
159
+ totalTokens: reportedTotal ?? components,
160
+ cost: cost ?? 0,
161
+ turns: 0,
162
+ };
163
+ }
164
+
165
+ function addUsage(target: TransportUsage, value: TransportUsage): void {
166
+ for (const key of [
167
+ "input",
168
+ "output",
169
+ "cacheRead",
170
+ "cacheWrite",
171
+ "totalTokens",
172
+ "cost",
173
+ "turns",
174
+ ] as const) {
175
+ target[key] = addUsageValue(target[key], value[key]);
176
+ }
118
177
  }
119
178
 
120
- function safeNonNegative(value: unknown): number {
179
+ function addUsageValue(current: number, addition: number): number {
180
+ return Math.min(Number.MAX_SAFE_INTEGER, current + addition);
181
+ }
182
+
183
+ function safeNonNegative(value: unknown): number | undefined {
121
184
  return typeof value === "number" &&
122
185
  Number.isFinite(value) &&
123
186
  value >= 0 &&
124
187
  value <= Number.MAX_SAFE_INTEGER
125
188
  ? value
126
- : 0;
189
+ : undefined;
190
+ }
191
+
192
+ function sameUsage(left: TransportUsage, right: TransportUsage): boolean {
193
+ return (
194
+ left.input === right.input &&
195
+ left.output === right.output &&
196
+ left.cacheRead === right.cacheRead &&
197
+ left.cacheWrite === right.cacheWrite &&
198
+ left.totalTokens === right.totalTokens &&
199
+ left.cost === right.cost &&
200
+ left.turns === right.turns
201
+ );
127
202
  }
128
203
 
129
204
  function assistantText(value: unknown): string {
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/rpc-transport.ts", "../../src/rpc-timeout-finalization.ts", "../../src/rpc-transport-metadata.ts", "../../src/rpc-turn-capture.ts"],
4
- "sourcesContent": ["import { type ChildProcess, spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { RpcSessionState } from \"@earendil-works/pi-coding-agent\";\nimport { discoverAgents } from \"./agents/discovery.js\";\nimport type { AgentConfig, SubagentSettings } from \"./agents/types.js\";\nimport { formatPeerMessage } from \"./child-peer-tools.js\";\nimport {\n\tbuildCurrentTurnPrompt,\n\ttype ParentRuntimeSnapshot,\n\tvalidateInProcessTools,\n} from \"./in-process-transport.js\";\nimport {\n\tappendBounded,\n\tDEFAULT_MAX_OUTPUT_BYTES,\n\tDEFAULT_MAX_STDERR_BYTES,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport {\n\tCHILD_PEER_TOOL_NAMES,\n\tchildPeerBridgePath,\n\ttype PeerTransportRuntime,\n\tpeerBridgeEnvironment,\n} from \"./peer-transport.js\";\nimport { type PiInvocation, resolvePiInvocation } from \"./pi-invocation.js\";\nimport { resolvePiPromptResources } from \"./prompt-resources.js\";\nimport { JsonLineDecoder } from \"./protocol.js\";\nimport type { AgentMailboxMessage, ManagedAgent, TurnOutcome } from \"./registry.js\";\nimport { finalizeTimedOutRpcTurn } from \"./rpc-timeout-finalization.js\";\nimport {\n\tboundedError,\n\tinterruptedRpcOutcome,\n\tmodelIdentity,\n\tnormalizeThinking,\n\trpcPolicy,\n} from \"./rpc-transport-metadata.js\";\nimport {\n\tcaptureRpcEvent,\n\tcreateRpcTurnCapture,\n\tobserveRpcBudgetEvent,\n} from \"./rpc-turn-capture.js\";\nimport { terminateProcess } from \"./runner.js\";\nimport { safeTerminalText } from \"./safe-text.js\";\nimport { readSubagentSettings } from \"./settings.js\";\nimport { buildStatefulTurnPrompt, resolveStatefulTurnTimeout } from \"./stateful-prompt.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\tformatTurnTerminationMessage,\n\tTURN_TERMINATION_VERSION,\n\ttype TurnTerminationReport,\n} from \"./timeout-checkpoint.js\";\nimport type { SubagentTransport } from \"./transport.js\";\nimport {\n\tPI_SUBAGENTS_RPC_PROTOCOL,\n\ttype TransportProgressCallback,\n\ttype TransportTelemetry,\n} from \"./transport-types.js\";\nimport { TurnBudgetMonitor, type TurnBudgetStop } from \"./turn-budget.js\";\n\nconst COMMAND_TIMEOUT_MS = 30_000;\nconst STARTUP_TIMEOUT_MS = 30_000;\nconst ABORT_GRACE_MS = 5_000;\nconst BUILT_IN_TOOL_NAMES = new Set([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"]);\n\ninterface RpcCommandInput {\n\ttype: string;\n\t[key: string]: unknown;\n}\n\ninterface RpcResponse {\n\tid?: string;\n\ttype: \"response\";\n\tcommand: string;\n\tsuccess: boolean;\n\tdata?: unknown;\n\terror?: string;\n}\n\ninterface PendingRequest {\n\tcommand: string;\n\tresolve(value: RpcResponse): void;\n\treject(error: Error): void;\n\ttimer: NodeJS.Timeout;\n}\n\nexport interface RpcProtocolClientOptions {\n\tcwd: string;\n\targs: string[];\n\tenv?: NodeJS.ProcessEnv;\n\tstartupTimeoutMs?: number;\n\tcommandTimeoutMs?: number;\n\tabortTimeoutMs?: number;\n\tterminationGraceMs?: number;\n\tinvocation?: PiInvocation;\n}\n\nexport interface RpcProtocolSnapshot {\n\tstate: RpcSessionState;\n\tstderr: string;\n\tmalformedLines: number;\n\toversizedLines: number;\n}\n\nexport class RpcProtocolClient {\n\tprivate process?: ChildProcess;\n\tprivate processClosed = false;\n\tprivate decoder?: JsonLineDecoder;\n\tprivate readonly pending = new Map<string, PendingRequest>();\n\tprivate readonly listeners = new Set<(event: unknown) => void>();\n\tprivate readonly closeListeners = new Set<(error: Error) => void>();\n\tprivate nextRequestId = 0;\n\tprivate stderr = \"\";\n\tprivate malformedLines = 0;\n\tprivate oversizedLines = 0;\n\tprivate closedError?: Error;\n\tprivate closePromise?: Promise<void>;\n\tprivate cleanupTermination?: () => void;\n\n\tconstructor(private readonly options: RpcProtocolClientOptions) {}\n\n\tasync start(signal?: AbortSignal): Promise<RpcProtocolSnapshot> {\n\t\tif (this.process) throw new Error(\"RPC subagent client already started\");\n\t\tif (signal?.aborted) throw abortError(\"RPC subagent start aborted\");\n\t\tconst invocation = this.options.invocation\n\t\t\t? {\n\t\t\t\t\tcommand: this.options.invocation.command,\n\t\t\t\t\targs: [...this.options.invocation.args, ...this.options.args],\n\t\t\t\t}\n\t\t\t: resolvePiInvocation(this.options.args);\n\t\tconst proc = spawn(invocation.command, invocation.args, {\n\t\t\tcwd: this.options.cwd,\n\t\t\tdetached: process.platform !== \"win32\",\n\t\t\tshell: false,\n\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\tenv: { ...process.env, ...this.options.env },\n\t\t});\n\t\tthis.process = proc;\n\t\tthis.processClosed = false;\n\t\tthis.decoder = new JsonLineDecoder({\n\t\t\tonValue: (value) => this.handleValue(value),\n\t\t\tonMalformed: () => {\n\t\t\t\tthis.malformedLines++;\n\t\t\t\tthis.fail(new Error(\"RPC subagent emitted malformed JSONL\"));\n\t\t\t},\n\t\t\tonOversized: () => {\n\t\t\t\tthis.oversizedLines++;\n\t\t\t\tthis.fail(new Error(\"RPC subagent emitted an oversized JSONL record\"));\n\t\t\t},\n\t\t});\n\t\tproc.stdout?.on(\"data\", (chunk) => this.decoder?.push(chunk));\n\t\tproc.stdin?.on(\"error\", (error) => this.fail(errorMessage(\"RPC stdin failed\", error)));\n\t\tproc.stderr?.on(\"data\", (chunk) => {\n\t\t\tthis.stderr = appendBounded(\n\t\t\t\tthis.stderr,\n\t\t\t\tBuffer.isBuffer(chunk) ? chunk.toString(\"utf8\") : String(chunk),\n\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t).text;\n\t\t});\n\t\tproc.once(\"error\", (error) => this.fail(errorMessage(\"RPC process failed\", error)));\n\t\tproc.once(\"close\", (code, childSignal) => {\n\t\t\tthis.processClosed = true;\n\t\t\tthis.decoder?.finish();\n\t\t\tthis.fail(\n\t\t\t\tnew Error(\n\t\t\t\t\t`RPC subagent exited (code=${code ?? \"null\"}, signal=${childSignal ?? \"null\"})${this.stderr ? `: ${safeTerminalText(this.stderr)}` : \"\"}`,\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\t\ttry {\n\t\t\tawait waitForSpawn(proc, signal, this.options.startupTimeoutMs ?? STARTUP_TIMEOUT_MS);\n\t\t\tif (signal?.aborted) throw abortError(\"RPC subagent start aborted\");\n\t\t\tconst state = await raceWithAbort(\n\t\t\t\tthis.requestData<RpcSessionState>(\n\t\t\t\t\t{ type: \"get_state\" },\n\t\t\t\t\tthis.options.startupTimeoutMs ?? STARTUP_TIMEOUT_MS,\n\t\t\t\t),\n\t\t\t\tsignal,\n\t\t\t\t\"RPC subagent readiness aborted\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tstate,\n\t\t\t\tstderr: this.stderr,\n\t\t\t\tmalformedLines: this.malformedLines,\n\t\t\t\toversizedLines: this.oversizedLines,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tawait this.stop();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tonEvent(listener: (event: unknown) => void): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => this.listeners.delete(listener);\n\t}\n\n\tonClose(listener: (error: Error) => void): () => void {\n\t\tthis.closeListeners.add(listener);\n\t\treturn () => this.closeListeners.delete(listener);\n\t}\n\n\tasync prompt(message: string, timeoutMs?: number): Promise<void> {\n\t\tawait this.request({ type: \"prompt\", message }, timeoutMs);\n\t}\n\n\tasync steer(message: string, timeoutMs?: number): Promise<void> {\n\t\tawait this.request({ type: \"steer\", message }, timeoutMs);\n\t}\n\n\tasync abort(): Promise<void> {\n\t\tawait this.request(\n\t\t\t{ type: \"abort\" },\n\t\t\tthis.options.abortTimeoutMs ?? Math.min(COMMAND_TIMEOUT_MS, ABORT_GRACE_MS),\n\t\t);\n\t}\n\n\tasync getState(): Promise<RpcSessionState> {\n\t\treturn this.requestData<RpcSessionState>({ type: \"get_state\" });\n\t}\n\n\tgetStderr(): string {\n\t\treturn this.stderr;\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tif (this.closePromise) return this.closePromise;\n\t\tconst proc = this.process;\n\t\tif (!proc) return;\n\t\tif (this.processClosed) {\n\t\t\tthis.cleanupTermination?.();\n\t\t\tthis.cleanupTermination = undefined;\n\t\t\tthis.process = undefined;\n\t\t\tthis.rejectPending(this.closedError ?? new Error(\"RPC subagent process already exited\"));\n\t\t\tthis.listeners.clear();\n\t\t\tthis.closeListeners.clear();\n\t\t\treturn;\n\t\t}\n\t\tthis.closePromise = new Promise<void>((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet terminationDeadline: NodeJS.Timeout | undefined;\n\t\t\tconst finish = () => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (terminationDeadline) clearTimeout(terminationDeadline);\n\t\t\t\tproc.off(\"close\", finish);\n\t\t\t\tthis.cleanupTermination?.();\n\t\t\t\tthis.cleanupTermination = undefined;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\tproc.once(\"close\", finish);\n\t\t\ttry {\n\t\t\t\tproc.stdin?.end();\n\t\t\t} catch {\n\t\t\t\t// Termination below remains authoritative.\n\t\t\t}\n\t\t\tconst graceMs = this.options.terminationGraceMs ?? ABORT_GRACE_MS;\n\t\t\tthis.cleanupTermination?.();\n\t\t\tthis.cleanupTermination = terminateProcess(proc, graceMs);\n\t\t\tterminationDeadline = setTimeout(() => {\n\t\t\t\tproc.stdin?.destroy();\n\t\t\t\tproc.stdout?.destroy();\n\t\t\t\tproc.stderr?.destroy();\n\t\t\t\tfinish();\n\t\t\t}, graceMs + 1_000);\n\t\t});\n\t\tawait this.closePromise;\n\t\tthis.process = undefined;\n\t\tthis.rejectPending(new Error(\"RPC subagent client stopped\"));\n\t\tthis.listeners.clear();\n\t\tthis.closeListeners.clear();\n\t}\n\n\tprivate async requestData<T>(\n\t\tcommand: RpcCommandInput,\n\t\ttimeoutMs = this.options.commandTimeoutMs ?? COMMAND_TIMEOUT_MS,\n\t): Promise<T> {\n\t\tconst response = await this.request(command, timeoutMs);\n\t\treturn response.data as T;\n\t}\n\n\tprivate request(\n\t\tcommand: RpcCommandInput,\n\t\ttimeoutMs = this.options.commandTimeoutMs ?? COMMAND_TIMEOUT_MS,\n\t): Promise<RpcResponse> {\n\t\tconst proc = this.process;\n\t\tif (!proc?.stdin || proc.stdin.destroyed || !proc.stdin.writable) {\n\t\t\treturn Promise.reject(this.closedError ?? new Error(\"RPC subagent stdin is unavailable\"));\n\t\t}\n\t\tconst id = `psa_${++this.nextRequestId}`;\n\t\treturn new Promise<RpcResponse>((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(rpcTimeoutError(`RPC ${command.type} response timed out after ${timeoutMs}ms`));\n\t\t\t}, timeoutMs);\n\t\t\ttimer.unref();\n\t\t\tthis.pending.set(id, { command: command.type, resolve, reject, timer });\n\t\t\ttry {\n\t\t\t\tproc.stdin?.write(`${JSON.stringify({ ...command, id })}\\n`, (error) => {\n\t\t\t\t\tif (!error) return;\n\t\t\t\t\tthis.fail(errorMessage(\"RPC stdin write failed\", error));\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\tclearTimeout(timer);\n\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}).then((response) => {\n\t\t\tif (!response.success) throw new Error(response.error || `RPC ${command.type} failed`);\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tprivate handleValue(value: unknown): void {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return;\n\t\tconst event = value as Record<string, unknown>;\n\t\tif (event.type === \"response\" && typeof event.id === \"string\") {\n\t\t\tconst pending = this.pending.get(event.id);\n\t\t\tif (!pending) return;\n\t\t\tif (typeof event.command !== \"string\" || event.command !== pending.command) {\n\t\t\t\tthis.fail(\n\t\t\t\t\tnew Error(`RPC response command mismatch for ${event.id}: expected ${pending.command}`),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.pending.delete(event.id);\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.resolve(event as unknown as RpcResponse);\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"extension_ui_request\" && typeof event.id === \"string\") {\n\t\t\tthis.writeFireAndForget({\n\t\t\t\ttype: \"extension_ui_response\",\n\t\t\t\tid: event.id,\n\t\t\t\tcancelled: true,\n\t\t\t});\n\t\t}\n\t\tfor (const listener of this.listeners) listener(value);\n\t}\n\n\tprivate writeFireAndForget(value: Record<string, unknown>): void {\n\t\ttry {\n\t\t\tthis.process?.stdin?.write(`${JSON.stringify(value)}\\n`);\n\t\t} catch {\n\t\t\t// Process failure will be reported through close/error handling.\n\t\t}\n\t}\n\n\tprivate fail(error: Error): void {\n\t\tif (this.closedError) return;\n\t\tthis.closedError = error;\n\t\tthis.rejectPending(error);\n\t\tfor (const listener of this.closeListeners) listener(error);\n\t\tif (this.process && !this.closePromise) {\n\t\t\tthis.cleanupTermination = terminateProcess(\n\t\t\t\tthis.process,\n\t\t\t\tthis.options.terminationGraceMs ?? ABORT_GRACE_MS,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate rejectPending(error: Error): void {\n\t\tfor (const pending of this.pending.values()) {\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.reject(error);\n\t\t}\n\t\tthis.pending.clear();\n\t}\n}\n\nexport interface RpcTransportOptions {\n\tgetSettings?: () => SubagentSettings | undefined;\n\tgetParentRuntime: () => ParentRuntimeSnapshot;\n\tcreateClient?: (options: RpcProtocolClientOptions) => RpcProtocolClient;\n\tresolvePromptResources?: typeof resolvePiPromptResources;\n\tdefaultTimeoutMs?: number;\n\tabortGraceMs?: number;\n\ttimeoutFinalizationMs?: number;\n\tpeerRuntime?: PeerTransportRuntime;\n}\n\ninterface RpcChildRecord {\n\tclient: RpcProtocolClient;\n\tstate: RpcSessionState;\n\tstarted: boolean;\n\ttemporaryPrompt?: { dir: string; filePath: string };\n}\n\nexport class RpcTransport implements SubagentTransport {\n\treadonly kind = \"rpc\" as const;\n\tprivate readonly children = new Map<string, RpcChildRecord>();\n\tprivate readonly createClient: (options: RpcProtocolClientOptions) => RpcProtocolClient;\n\n\tconstructor(private readonly options: RpcTransportOptions) {\n\t\tthis.createClient =\n\t\t\toptions.createClient ?? ((clientOptions) => new RpcProtocolClient(clientOptions));\n\t}\n\n\tasync runTurn(\n\t\tagent: ManagedAgent,\n\t\ttask: string,\n\t\tsignal: AbortSignal,\n\t\tonProgress?: TransportProgressCallback,\n\t): Promise<TurnOutcome> {\n\t\tconst startedAt = Date.now();\n\t\tlet telemetry: TransportTelemetry = {\n\t\t\ttransport: \"rpc\",\n\t\t\tprotocol: PI_SUBAGENTS_RPC_PROTOCOL,\n\t\t\tphase: \"starting\",\n\t\t\tupdatedAt: startedAt,\n\t\t\ttiming: { startedAt, transportStartedAt: startedAt },\n\t\t};\n\t\tconst publish = (patch: Partial<TransportTelemetry>) => {\n\t\t\ttelemetry = {\n\t\t\t\t...telemetry,\n\t\t\t\t...patch,\n\t\t\t\ttiming: { ...telemetry.timing, ...patch.timing },\n\t\t\t\tusage: patch.usage ? { ...patch.usage } : telemetry.usage,\n\t\t\t\tupdatedAt: Date.now(),\n\t\t\t};\n\t\t\tonProgress?.({\n\t\t\t\t...telemetry,\n\t\t\t\ttiming: { ...telemetry.timing },\n\t\t\t\tusage: telemetry.usage ? { ...telemetry.usage } : undefined,\n\t\t\t});\n\t\t};\n\t\tpublish({});\n\t\tif (signal.aborted) return interruptedRpcOutcome(\"\", telemetry, \"starting\");\n\t\tconst settings = this.options.getSettings ? this.options.getSettings() : readSubagentSettings();\n\t\tconst agentConfig = discoverAgents(agent.cwd, agent.agentScope ?? \"user\", settings).agents.find(\n\t\t\t(candidate) => candidate.name === agent.agent,\n\t\t);\n\t\tif (!agentConfig) {\n\t\t\tpublish({ phase: \"failed\", failurePhase: \"starting\" });\n\t\t\treturn { output: \"\", exitCode: 1, error: `Unknown subagent: ${agent.agent}`, telemetry };\n\t\t}\n\t\tconst effectiveAgentConfig = {\n\t\t\t...agentConfig,\n\t\t\ttools: agent.executionPlan?.effectiveTools ?? agentConfig.tools,\n\t\t};\n\t\ttry {\n\t\t\tvalidateRpcTools(effectiveAgentConfig.tools);\n\t\t} catch (error) {\n\t\t\tpublish({ phase: \"failed\", failurePhase: \"starting\" });\n\t\t\treturn { output: \"\", exitCode: 1, error: boundedError(error), telemetry };\n\t\t}\n\t\tlet child: RpcChildRecord;\n\t\ttry {\n\t\t\tchild = await this.getOrCreate(agent, effectiveAgentConfig, signal);\n\t\t} catch (error) {\n\t\t\tpublish({ phase: signal.aborted ? \"interrupted\" : \"failed\", failurePhase: \"starting\" });\n\t\t\treturn {\n\t\t\t\toutput: \"\",\n\t\t\t\texitCode: signal.aborted ? 130 : 1,\n\t\t\t\taborted: signal.aborted,\n\t\t\t\terror: boundedError(error),\n\t\t\t\ttelemetry,\n\t\t\t};\n\t\t}\n\t\tconst stateModel = modelIdentity(child.state.model);\n\t\tpublish({\n\t\t\tphase: \"ready\",\n\t\t\tprovider: stateModel.provider,\n\t\t\tmodel: stateModel.model,\n\t\t\tthinkingLevel: normalizeThinking(child.state.thinkingLevel),\n\t\t\ttiming: { readyAt: Date.now() },\n\t\t});\n\t\tif (signal.aborted) {\n\t\t\tawait this.releaseById(agent.id).catch(() => undefined);\n\t\t\treturn interruptedRpcOutcome(\"\", telemetry, \"ready\");\n\t\t}\n\t\tconst timeoutMs =\n\t\t\tagent.currentTimeoutMs ??\n\t\t\tagent.timeoutMs ??\n\t\t\tagentConfig.timeoutMs ??\n\t\t\tthis.options.defaultTimeoutMs ??\n\t\t\tresolveStatefulTurnTimeout(agentConfig);\n\t\tconst capture = createRpcTurnCapture();\n\t\tlet resolveBudget!: (stop: TurnBudgetStop) => void;\n\t\tlet resolvePreAcceptanceIdle!: (stop: TurnBudgetStop) => void;\n\t\tconst budgetExceeded = new Promise<TurnBudgetStop>((resolve) => {\n\t\t\tresolveBudget = resolve;\n\t\t});\n\t\tconst preAcceptanceIdleExceeded = new Promise<TurnBudgetStop>((resolve) => {\n\t\t\tresolvePreAcceptanceIdle = resolve;\n\t\t});\n\t\tconst budgetMonitor = new TurnBudgetMonitor({\n\t\t\tidleTimeoutMs: agent.currentIdleTimeoutMs ?? agent.idleTimeoutMs,\n\t\t\tmaxTurns: agent.currentMaxTurns ?? agent.maxTurns,\n\t\t\tmaxToolCalls: agent.currentMaxToolCalls ?? agent.maxToolCalls,\n\t\t\tonExceeded(stop) {\n\t\t\t\tresolveBudget(stop);\n\t\t\t\tif (stop.reason === \"idle_timeout\") resolvePreAcceptanceIdle(stop);\n\t\t\t},\n\t\t});\n\t\tlet settledResolve!: () => void;\n\t\tlet settledReject!: (error: Error) => void;\n\t\tconst settled = new Promise<void>((resolve, reject) => {\n\t\t\tsettledResolve = resolve;\n\t\t\tsettledReject = reject;\n\t\t});\n\t\tvoid settled.catch(() => undefined);\n\t\tconst unsubscribeEvent = child.client.onEvent((event) => {\n\t\t\tcaptureRpcEvent(event, capture);\n\t\t\tobserveRpcBudgetEvent(event, budgetMonitor);\n\t\t\tif (!capture.firstActivityAt && isActivityEvent(event)) {\n\t\t\t\tcapture.firstActivityAt = Date.now();\n\t\t\t\tpublish({ phase: \"running\", timing: { firstActivityAt: capture.firstActivityAt } });\n\t\t\t}\n\t\t\tconst type = eventType(event);\n\t\t\tif (type === \"auto_retry_start\") publish({ phase: \"retrying\" });\n\t\t\tif (type === \"compaction_start\" || type === \"summarization_retry_attempt_start\") {\n\t\t\t\tpublish({ phase: \"compacting\" });\n\t\t\t}\n\t\t\tif (type === \"agent_settled\") settledResolve();\n\t\t});\n\t\tconst unsubscribeClose = child.client.onClose(settledReject);\n\t\tconst prompt = child.started\n\t\t\t? buildCurrentTurnPrompt(agent, task)\n\t\t\t: buildStatefulTurnPrompt(agent, task).text;\n\t\tlet accepted = false;\n\t\tlet preAcceptanceStop: TurnBudgetStop | undefined;\n\t\tconst deadline = Date.now() + timeoutMs;\n\t\ttry {\n\t\t\tawait Promise.race([\n\t\t\t\traceWithAbort(\n\t\t\t\t\tchild.client.prompt(prompt, remainingMs(deadline)),\n\t\t\t\t\tsignal,\n\t\t\t\t\t\"RPC subagent prompt acceptance aborted\",\n\t\t\t\t),\n\t\t\t\tpreAcceptanceIdleExceeded.then((stop) => {\n\t\t\t\t\tpreAcceptanceStop = stop;\n\t\t\t\t\tthrow new Error(formatTurnTerminationMessage(stop.reason, stop.limit, \"RPC subagent\"));\n\t\t\t\t}),\n\t\t\t]);\n\t\t\taccepted = true;\n\t\t\tchild.started = true;\n\t\t\tpublish({ phase: \"accepted\", timing: { promptAcceptedAt: Date.now() } });\n\t\t\tconst settlement = await Promise.race([\n\t\t\t\twaitForTurnSettlement(settled, signal, remainingMs(deadline)).then((kind) => ({\n\t\t\t\t\tkind,\n\t\t\t\t})),\n\t\t\t\tbudgetExceeded.then((stop) => ({ kind: \"limit\" as const, stop })),\n\t\t\t]);\n\t\t\tif (settlement.kind !== \"settled\") {\n\t\t\t\tconst [, stopped] = await Promise.all([\n\t\t\t\t\tchild.client.abort().catch(() => undefined),\n\t\t\t\t\tsettlesWithin(settled, this.options.abortGraceMs ?? ABORT_GRACE_MS),\n\t\t\t\t]);\n\t\t\t\tconst partial = truncateUtf8(capture.output || capture.partial, DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\t\tconst stop =\n\t\t\t\t\tsettlement.kind === \"limit\"\n\t\t\t\t\t\t? settlement.stop\n\t\t\t\t\t\t: ({ reason: \"work_timeout\", limit: timeoutMs } as const);\n\t\t\t\tconst explicitAbort = settlement.kind === \"aborted\" || signal.aborted;\n\t\t\t\tconst termination: TurnTerminationReport | undefined = explicitAbort\n\t\t\t\t\t? undefined\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\t\t\t\treason: stop.reason,\n\t\t\t\t\t\t\tlimit: stop.limit,\n\t\t\t\t\t\t\tcheckpoint: capture.journal.checkpoint(task, partial.text),\n\t\t\t\t\t\t\tfinalization: {\n\t\t\t\t\t\t\t\tattempted: false,\n\t\t\t\t\t\t\t\tstatus: \"skipped\",\n\t\t\t\t\t\t\t\tdurationMs: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\tif (explicitAbort || !stopped) {\n\t\t\t\t\tif (!stopped) await this.releaseById(agent.id);\n\t\t\t\t\tpublish({\n\t\t\t\t\t\tphase: explicitAbort ? \"interrupted\" : \"failed\",\n\t\t\t\t\t\tfailurePhase: \"running\",\n\t\t\t\t\t\ttiming: { settledAt: Date.now() },\n\t\t\t\t\t\tusage: capture.usage,\n\t\t\t\t\t});\n\t\t\t\t\tconst checkpointOutput = termination\n\t\t\t\t\t\t? formatTimeoutCheckpoint(termination.checkpoint)\n\t\t\t\t\t\t: partial.text;\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: partial.text || checkpointOutput,\n\t\t\t\t\t\texitCode: explicitAbort ? 130 : 124,\n\t\t\t\t\t\taborted: explicitAbort,\n\t\t\t\t\t\ttruncated: partial.truncated || agent.contextTruncated,\n\t\t\t\t\t\terror: explicitAbort\n\t\t\t\t\t\t\t? \"RPC subagent was aborted\"\n\t\t\t\t\t\t\t: `${formatTurnTerminationMessage(stop.reason, stop.limit, \"RPC subagent\")}; abort did not settle`,\n\t\t\t\t\t\tpolicy: rpcPolicy(agentConfig, agent),\n\t\t\t\t\t\ttermination,\n\t\t\t\t\t\ttelemetry,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpublish({ phase: \"finalizing\", failurePhase: \"running\" });\n\t\t\t\tconst finalizationStartedAt = Date.now();\n\t\t\t\tconst summary = await finalizeTimedOutRpcTurn({\n\t\t\t\t\tclient: child.client,\n\t\t\t\t\ttask,\n\t\t\t\t\tpartialOutput: partial.text,\n\t\t\t\t\tcheckpoint: termination?.checkpoint,\n\t\t\t\t\tterminationReason: stop.reason,\n\t\t\t\t\tresultFormat: agent.resultFormat,\n\t\t\t\t\tsignal,\n\t\t\t\t\tworkTimeoutMs: timeoutMs,\n\t\t\t\t\tfinalizationTimeoutMs: this.options.timeoutFinalizationMs,\n\t\t\t\t\tabortGraceMs: this.options.abortGraceMs ?? ABORT_GRACE_MS,\n\t\t\t\t\tresetCapture() {\n\t\t\t\t\t\tcapture.output = \"\";\n\t\t\t\t\t\tcapture.partial = \"\";\n\t\t\t\t\t\tcapture.stopReason = undefined;\n\t\t\t\t\t\tcapture.error = undefined;\n\t\t\t\t\t},\n\t\t\t\t\tgetCapture: () => capture,\n\t\t\t\t\trelease: () => this.releaseById(agent.id),\n\t\t\t\t});\n\t\t\t\tif (termination) {\n\t\t\t\t\ttermination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: summary.status,\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\terror: summary.error,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tpublish({\n\t\t\t\t\tphase: \"failed\",\n\t\t\t\t\tfailurePhase: \"running\",\n\t\t\t\t\ttiming: { settledAt: Date.now() },\n\t\t\t\t\tusage: capture.usage,\n\t\t\t\t});\n\t\t\t\tconst checkpointOutput = termination ? formatTimeoutCheckpoint(termination.checkpoint) : \"\";\n\t\t\t\treturn {\n\t\t\t\t\toutput: summary.error ? partial.text || checkpointOutput : summary.output,\n\t\t\t\t\texitCode: 124,\n\t\t\t\t\ttruncated: partial.truncated || summary.truncated || agent.contextTruncated,\n\t\t\t\t\terror: [\n\t\t\t\t\t\tformatTurnTerminationMessage(stop.reason, stop.limit, \"RPC subagent\"),\n\t\t\t\t\t\tsummary.error,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"; \"),\n\t\t\t\t\tpolicy: rpcPolicy(agentConfig, agent),\n\t\t\t\t\ttermination,\n\t\t\t\t\ttelemetry,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst output = truncateUtf8(capture.output || capture.partial, DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\tconst failed = capture.stopReason === \"error\" || !output.text.trim();\n\t\t\tpublish({\n\t\t\t\tphase: failed ? \"failed\" : \"settled\",\n\t\t\t\tfailurePhase: failed ? \"running\" : undefined,\n\t\t\t\ttiming: { settledAt: Date.now() },\n\t\t\t\tprovider: capture.provider ?? telemetry.provider,\n\t\t\t\tmodel: capture.model ?? telemetry.model,\n\t\t\t\tusage: capture.usage,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\toutput: output.text,\n\t\t\t\texitCode: failed ? 1 : 0,\n\t\t\t\ttruncated: output.truncated || agent.contextTruncated,\n\t\t\t\terror: failed ? capture.error || \"RPC subagent completed without final text\" : undefined,\n\t\t\t\tpolicy: rpcPolicy(agentConfig, agent),\n\t\t\t\ttelemetry,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tawait this.releaseById(agent.id).catch(() => undefined);\n\t\t\tconst timedOut = isTimeoutError(error);\n\t\t\tconst stop =\n\t\t\t\tpreAcceptanceStop ??\n\t\t\t\t(timedOut ? ({ reason: \"work_timeout\", limit: timeoutMs } as const) : undefined);\n\t\t\tconst partial = truncateUtf8(capture.output || capture.partial, DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\tconst termination: TurnTerminationReport | undefined =\n\t\t\t\tstop && !signal.aborted\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\t\t\t\treason: stop.reason,\n\t\t\t\t\t\t\tlimit: stop.limit,\n\t\t\t\t\t\t\tcheckpoint: capture.journal.checkpoint(task, partial.text),\n\t\t\t\t\t\t\tfinalization: {\n\t\t\t\t\t\t\t\tattempted: false,\n\t\t\t\t\t\t\t\tstatus: \"skipped\",\n\t\t\t\t\t\t\t\tdurationMs: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\tpublish({\n\t\t\t\tphase: signal.aborted ? \"interrupted\" : \"failed\",\n\t\t\t\tfailurePhase: accepted ? \"running\" : \"ready\",\n\t\t\t\ttiming: { settledAt: Date.now() },\n\t\t\t});\n\t\t\treturn {\n\t\t\t\toutput:\n\t\t\t\t\tpartial.text || (termination ? formatTimeoutCheckpoint(termination.checkpoint) : \"\"),\n\t\t\t\texitCode: signal.aborted ? 130 : stop ? 124 : 1,\n\t\t\t\taborted: signal.aborted,\n\t\t\t\terror: stop\n\t\t\t\t\t? formatTurnTerminationMessage(stop.reason, stop.limit, \"RPC subagent\")\n\t\t\t\t\t: boundedError(error),\n\t\t\t\tpolicy: rpcPolicy(agentConfig, agent),\n\t\t\t\ttermination,\n\t\t\t\ttelemetry,\n\t\t\t};\n\t\t} finally {\n\t\t\tbudgetMonitor.dispose();\n\t\t\tunsubscribeEvent();\n\t\t\tunsubscribeClose();\n\t\t}\n\t}\n\n\tasync deliverMessage(agent: ManagedAgent, message: AgentMailboxMessage): Promise<boolean> {\n\t\tconst child = this.children.get(agent.id);\n\t\tif (!child) return false;\n\t\tawait child.client.steer(formatPeerMessage(message));\n\t\treturn true;\n\t}\n\n\tasync release(agent: ManagedAgent): Promise<void> {\n\t\tawait this.releaseById(agent.id);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tconst results = await Promise.allSettled(\n\t\t\t[...this.children.keys()].map((agentId) => this.releaseById(agentId)),\n\t\t);\n\t\tconst failures = results.flatMap((result) =>\n\t\t\tresult.status === \"rejected\" ? [result.reason] : [],\n\t\t);\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(failures, `Failed to release ${failures.length} RPC subagent(s)`);\n\t\t}\n\t}\n\n\tprivate async getOrCreate(\n\t\tagent: ManagedAgent,\n\t\tagentConfig: AgentConfig,\n\t\tsignal: AbortSignal,\n\t): Promise<RpcChildRecord> {\n\t\tconst existing = this.children.get(agent.id);\n\t\tif (existing) return existing;\n\t\tconst hasRolePrompt = agentConfig.systemPrompt.trim().length > 0;\n\t\tconst resources = hasRolePrompt\n\t\t\t? await (this.options.resolvePromptResources ?? resolvePiPromptResources)(\n\t\t\t\t\tagent.cwd,\n\t\t\t\t\tagent.target?.trust.projectTrusted ?? false,\n\t\t\t\t)\n\t\t\t: { appendSystemPromptPaths: [] };\n\t\tif (signal.aborted) throw abortError(\"RPC subagent start aborted\");\n\t\tconst temporaryPrompt = hasRolePrompt\n\t\t\t? await writeRolePrompt(agentConfig.name, agentConfig.systemPrompt)\n\t\t\t: undefined;\n\t\tif (signal.aborted) {\n\t\t\tcleanupRolePrompt(temporaryPrompt);\n\t\t\tthrow abortError(\"RPC subagent start aborted\");\n\t\t}\n\t\tlet client: RpcProtocolClient | undefined;\n\t\ttry {\n\t\t\tconst credentials = this.options.peerRuntime\n\t\t\t\t? await this.options.peerRuntime.issueCredentials(\n\t\t\t\t\t\tagent.id,\n\t\t\t\t\t\tagent.currentTurnGeneration ?? agent.turnGeneration ?? 1,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tif (signal.aborted) throw abortError(\"RPC subagent start aborted\");\n\t\t\tclient = this.createClient({\n\t\t\t\tcwd: agent.cwd,\n\t\t\t\tabortTimeoutMs: this.options.abortGraceMs ?? ABORT_GRACE_MS,\n\t\t\t\tterminationGraceMs: this.options.abortGraceMs ?? ABORT_GRACE_MS,\n\t\t\t\targs: buildRpcArgs(\n\t\t\t\t\tagent,\n\t\t\t\t\tagentConfig,\n\t\t\t\t\tthis.options.getParentRuntime(),\n\t\t\t\t\ttemporaryPrompt?.filePath,\n\t\t\t\t\tresources.appendSystemPromptPaths,\n\t\t\t\t\tcredentials !== undefined,\n\t\t\t\t),\n\t\t\t\tenv: {\n\t\t\t\t\tPI_SUBAGENT_DEPTH: String(\n\t\t\t\t\t\t(Number.parseInt(process.env.PI_SUBAGENT_DEPTH ?? \"0\", 10) || 0) + 1,\n\t\t\t\t\t),\n\t\t\t\t\tPI_SUBAGENT_RPC_PROTOCOL: PI_SUBAGENTS_RPC_PROTOCOL,\n\t\t\t\t\t...(credentials ? peerBridgeEnvironment(credentials) : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst snapshot = await client.start(signal);\n\t\t\tif (signal.aborted) throw abortError(\"RPC subagent start aborted\");\n\t\t\tconst record: RpcChildRecord = {\n\t\t\t\tclient,\n\t\t\t\tstate: snapshot.state,\n\t\t\t\tstarted: false,\n\t\t\t\ttemporaryPrompt,\n\t\t\t};\n\t\t\tthis.children.set(agent.id, record);\n\t\t\treturn record;\n\t\t} catch (error) {\n\t\t\tawait client?.stop().catch(() => undefined);\n\t\t\tthis.options.peerRuntime?.revoke(agent.id);\n\t\t\tcleanupRolePrompt(temporaryPrompt);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async releaseById(agentId: string): Promise<void> {\n\t\tconst child = this.children.get(agentId);\n\t\tif (!child) return;\n\t\tthis.children.delete(agentId);\n\t\tthis.options.peerRuntime?.revoke(agentId);\n\t\ttry {\n\t\t\tawait child.client.abort().catch(() => undefined);\n\t\t\tawait child.client.stop();\n\t\t} finally {\n\t\t\tcleanupRolePrompt(child.temporaryPrompt);\n\t\t}\n\t}\n}\n\nexport function validateRpcTools(tools: string[] | undefined): string[] | undefined {\n\tconst validated = validateInProcessTools(tools);\n\tif (validated?.some((tool) => !BUILT_IN_TOOL_NAMES.has(tool))) {\n\t\tthrow new Error(\"RPC subagents support only built-in Pi tools in pi-subagents:v1\");\n\t}\n\treturn validated;\n}\n\nexport function buildRpcArgs(\n\tagent: ManagedAgent,\n\tagentConfig: AgentConfig,\n\tparentRuntime: ParentRuntimeSnapshot,\n\trolePromptPath?: string,\n\tappendSystemPromptPaths: readonly string[] = [],\n\tpeerBridge = false,\n): string[] {\n\tconst args = [\"--mode\", \"rpc\", \"--no-session\", \"--no-extensions\"];\n\tif (peerBridge) args.push(\"-e\", childPeerBridgePath());\n\tconst model =\n\t\tagentConfig.model ??\n\t\t(parentRuntime.model ? `${parentRuntime.model.provider}/${parentRuntime.model.id}` : undefined);\n\tif (model) args.push(\"--model\", model);\n\tconst modelSelectsThinking = agentConfig.model\n\t\t? /:(?:off|minimal|low|medium|high|xhigh|max)$/u.test(agentConfig.model.trim())\n\t\t: false;\n\tconst thinking =\n\t\tagent.thinkingLevel ??\n\t\tagentConfig.thinkingLevel ??\n\t\t(modelSelectsThinking ? undefined : parentRuntime.thinkingLevel);\n\tif (thinking) args.push(\"--thinking\", thinking);\n\tif (agent.target?.trust.projectTrusted ?? false) args.push(\"--approve\");\n\telse args.push(\"--no-approve\");\n\tif (Array.isArray(agentConfig.tools)) {\n\t\tconst tools = [...agentConfig.tools, ...(peerBridge ? CHILD_PEER_TOOL_NAMES : [])];\n\t\tif (tools.length > 0) args.push(\"--tools\", [...new Set(tools)].join(\",\"));\n\t\telse args.push(\"--no-tools\");\n\t}\n\tfor (const promptPath of appendSystemPromptPaths) {\n\t\targs.push(\"--append-system-prompt\", promptPath);\n\t}\n\tif (rolePromptPath) args.push(\"--append-system-prompt\", rolePromptPath);\n\treturn args;\n}\n\nfunction eventType(value: unknown): string | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst type = (value as Record<string, unknown>).type;\n\treturn typeof type === \"string\" ? type : undefined;\n}\n\nfunction isActivityEvent(value: unknown): boolean {\n\treturn [\n\t\t\"message_start\",\n\t\t\"message_update\",\n\t\t\"message_end\",\n\t\t\"tool_execution_start\",\n\t\t\"tool_execution_update\",\n\t\t\"auto_retry_start\",\n\t\t\"compaction_start\",\n\t].includes(eventType(value) ?? \"\");\n}\n\nasync function writeRolePrompt(\n\tagentName: string,\n\tprompt: string,\n): Promise<{ dir: string; filePath: string }> {\n\tconst dir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"pi-subagent-rpc-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/gu, \"_\");\n\tconst filePath = path.join(dir, `prompt-${safeName}.md`);\n\tawait fs.promises.writeFile(filePath, prompt, {\n\t\tencoding: \"utf8\",\n\t\tmode: 0o600,\n\t});\n\treturn { dir, filePath };\n}\n\nfunction cleanupRolePrompt(value: { dir: string; filePath: string } | undefined): void {\n\tif (!value) return;\n\ttry {\n\t\tfs.rmSync(value.dir, { recursive: true, force: true });\n\t} catch {\n\t\t// Best-effort cleanup is repeated when the owning runtime shuts down.\n\t}\n}\n\nfunction waitForSpawn(\n\tproc: ChildProcess,\n\tsignal: AbortSignal | undefined,\n\ttimeoutMs: number,\n): Promise<void> {\n\treturn new Promise<void>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tconst finish = (error?: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(timer);\n\t\t\tproc.off(\"spawn\", onSpawn);\n\t\t\tproc.off(\"error\", onError);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tif (error) reject(error);\n\t\t\telse resolve();\n\t\t};\n\t\tconst onSpawn = () => finish();\n\t\tconst onError = (error: Error) => finish(error);\n\t\tconst onAbort = () => finish(abortError(\"RPC subagent start aborted\"));\n\t\tconst timer = setTimeout(\n\t\t\t() => finish(new Error(`RPC subagent start timed out after ${timeoutMs}ms`)),\n\t\t\ttimeoutMs,\n\t\t);\n\t\ttimer.unref();\n\t\tproc.once(\"spawn\", onSpawn);\n\t\tproc.once(\"error\", onError);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal?.aborted) onAbort();\n\t});\n}\n\nasync function raceWithAbort<T>(\n\tpromise: Promise<T>,\n\tsignal: AbortSignal | undefined,\n\tmessage: string,\n): Promise<T> {\n\tif (!signal) return promise;\n\tif (signal.aborted) throw abortError(message);\n\tlet onAbort: (() => void) | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<T>((_resolve, reject) => {\n\t\t\t\tonAbort = () => reject(abortError(message));\n\t\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nfunction waitForTurnSettlement(\n\tsettled: Promise<void>,\n\tsignal: AbortSignal,\n\ttimeoutMs: number,\n): Promise<\"settled\" | \"aborted\" | \"timeout\"> {\n\tif (signal.aborted) return Promise.resolve(\"aborted\");\n\treturn new Promise((resolve, reject) => {\n\t\tlet finished = false;\n\t\tconst finish = (value: \"settled\" | \"aborted\" | \"timeout\", error?: unknown) => {\n\t\t\tif (finished) return;\n\t\t\tfinished = true;\n\t\t\tclearTimeout(timer);\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tif (error) reject(error);\n\t\t\telse resolve(value);\n\t\t};\n\t\tconst onAbort = () => finish(\"aborted\");\n\t\tconst timer = setTimeout(() => finish(\"timeout\"), timeoutMs);\n\t\ttimer.unref();\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t\tsettled.then(\n\t\t\t() => finish(\"settled\"),\n\t\t\t(error) => finish(\"settled\", error),\n\t\t);\n\t});\n}\n\nasync function settlesWithin(settled: Promise<void>, timeoutMs: number): Promise<boolean> {\n\tlet timer: NodeJS.Timeout | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tsettled.then(\n\t\t\t\t() => true,\n\t\t\t\t() => true,\n\t\t\t),\n\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(false), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\nfunction remainingMs(deadline: number): number {\n\treturn Math.max(1, deadline - Date.now());\n}\n\nfunction rpcTimeoutError(message: string): Error {\n\tconst error = new Error(message);\n\terror.name = \"RpcTimeoutError\";\n\treturn error;\n}\n\nfunction isTimeoutError(error: unknown): boolean {\n\treturn error instanceof Error && error.name === \"RpcTimeoutError\";\n}\n\nfunction abortError(message: string): Error {\n\tconst error = new Error(message);\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction errorMessage(prefix: string, error: Error): Error {\n\treturn new Error(`${prefix}: ${error.message}`);\n}\n", "import { DEFAULT_MAX_OUTPUT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { SubagentResultFormat } from \"./result-contract.js\";\nimport type { TimeoutCheckpoint, TurnTerminationReason } from \"./timeout-checkpoint.js\";\nimport {\n\tbuildTimeoutFinalizationPrompt,\n\tresolveTimeoutFinalizationMs,\n} from \"./timeout-finalization.js\";\n\ninterface RpcTimeoutFinalizationClient {\n\tprompt(message: string, timeoutMs?: number): Promise<void>;\n\tabort(): Promise<void>;\n\tonEvent(listener: (event: unknown) => void): () => void;\n\tonClose(listener: (error: Error) => void): () => void;\n}\n\ninterface RpcSummaryCapture {\n\toutput: string;\n\tpartial: string;\n\tstopReason?: string;\n\terror?: string;\n}\n\nexport interface RpcTimeoutFinalizationOptions {\n\tclient: RpcTimeoutFinalizationClient;\n\ttask: string;\n\tpartialOutput: string;\n\tcheckpoint?: TimeoutCheckpoint;\n\tterminationReason?: TurnTerminationReason;\n\tresultFormat?: SubagentResultFormat;\n\tsignal: AbortSignal;\n\tworkTimeoutMs: number;\n\tfinalizationTimeoutMs?: number;\n\tabortGraceMs: number;\n\tresetCapture(): void;\n\tgetCapture(): RpcSummaryCapture;\n\trelease(): Promise<void>;\n}\n\nexport interface RpcTimeoutFinalizationResult {\n\toutput: string;\n\ttruncated: boolean;\n\tstatus: \"completed\" | \"failed\" | \"timed_out\";\n\terror?: string;\n}\n\nexport async function finalizeTimedOutRpcTurn(\n\toptions: RpcTimeoutFinalizationOptions,\n): Promise<RpcTimeoutFinalizationResult> {\n\toptions.resetCapture();\n\tlet settleResolve!: () => void;\n\tlet settleReject!: (error: Error) => void;\n\tconst settled = new Promise<void>((resolve, reject) => {\n\t\tsettleResolve = resolve;\n\t\tsettleReject = reject;\n\t});\n\tvoid settled.catch(() => undefined);\n\tconst unsubscribeEvent = options.client.onEvent((event) => {\n\t\tif (eventType(event) === \"agent_settled\") settleResolve();\n\t});\n\tconst unsubscribeClose = options.client.onClose(settleReject);\n\tlet error: string | undefined;\n\ttry {\n\t\tconst finalizationMs = resolveTimeoutFinalizationMs(\n\t\t\toptions.workTimeoutMs,\n\t\t\toptions.finalizationTimeoutMs,\n\t\t);\n\t\tconst deadline = Date.now() + finalizationMs;\n\t\tawait raceWithAbort(\n\t\t\t() =>\n\t\t\t\toptions.client.prompt(\n\t\t\t\t\tbuildTimeoutFinalizationPrompt({\n\t\t\t\t\t\ttask: options.task,\n\t\t\t\t\t\tpartialOutput: options.partialOutput,\n\t\t\t\t\t\tcheckpoint: options.checkpoint,\n\t\t\t\t\t\tterminationReason: options.terminationReason,\n\t\t\t\t\t\tresultFormat: options.resultFormat,\n\t\t\t\t\t}),\n\t\t\t\t\tremainingMs(deadline),\n\t\t\t\t),\n\t\t\toptions.signal,\n\t\t\tremainingMs(deadline),\n\t\t);\n\t\tconst settlement = await waitForSettlement(settled, options.signal, remainingMs(deadline));\n\t\tif (settlement !== \"settled\") {\n\t\t\tconst [abortCompleted, stopped] = await Promise.all([\n\t\t\t\tsettlesWithin(options.client.abort(), options.abortGraceMs),\n\t\t\t\tsettlesWithin(settled, options.abortGraceMs),\n\t\t\t]);\n\t\t\tif (!stopped) await boundedRelease(options);\n\t\t\terror = [\n\t\t\t\t`timeout summary ${settlement}`,\n\t\t\t\tabortCompleted ? undefined : \"summary abort command did not settle\",\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\"; \");\n\t\t}\n\t} catch (caught) {\n\t\terror = boundedError(caught);\n\t\tawait boundedRelease(options);\n\t} finally {\n\t\tunsubscribeEvent();\n\t\tunsubscribeClose();\n\t}\n\tconst capture = options.getCapture();\n\tconst output = truncateUtf8(capture.output || capture.partial, DEFAULT_MAX_OUTPUT_BYTES);\n\tif (!error && (capture.stopReason === \"error\" || !output.text.trim())) {\n\t\terror = capture.error || \"Timeout summary produced no final text\";\n\t}\n\treturn {\n\t\toutput: output.text,\n\t\ttruncated: output.truncated,\n\t\tstatus: error ? (/timed out|timeout/iu.test(error) ? \"timed_out\" : \"failed\") : \"completed\",\n\t\terror,\n\t};\n}\n\nfunction eventType(value: unknown): string | undefined {\n\treturn value &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as { type?: unknown }).type === \"string\"\n\t\t? ((value as { type: string }).type ?? undefined)\n\t\t: undefined;\n}\n\nfunction remainingMs(deadline: number): number {\n\treturn Math.max(1, deadline - Date.now());\n}\n\nasync function raceWithAbort<T>(\n\tstart: () => Promise<T>,\n\tsignal: AbortSignal,\n\ttimeoutMs: number,\n): Promise<T> {\n\tif (signal.aborted) throw abortError();\n\tlet onAbort: (() => void) | undefined;\n\tlet timer: NodeJS.Timeout | undefined;\n\tconst aborted = new Promise<never>((_resolve, reject) => {\n\t\tonAbort = () => reject(abortError());\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t});\n\tconst timedOut = new Promise<never>((_resolve, reject) => {\n\t\ttimer = setTimeout(() => reject(new Error(\"RPC timeout summary prompt timed out\")), timeoutMs);\n\t});\n\ttry {\n\t\treturn await Promise.race([start(), aborted, timedOut]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t\tif (onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function waitForSettlement(\n\tsettled: Promise<void>,\n\tsignal: AbortSignal,\n\ttimeoutMs: number,\n): Promise<\"settled\" | \"aborted\" | \"timeout\"> {\n\tif (signal.aborted) return \"aborted\";\n\tlet timer: NodeJS.Timeout | undefined;\n\tlet onAbort: (() => void) | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tsettled.then(() => \"settled\" as const),\n\t\t\tnew Promise<\"aborted\">((resolve) => {\n\t\t\t\tonAbort = () => resolve(\"aborted\");\n\t\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t}),\n\t\t\tnew Promise<\"timeout\">((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t\tif (onAbort) signal.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function boundedRelease(options: RpcTimeoutFinalizationOptions): Promise<boolean> {\n\treturn settlesWithin(options.release(), options.abortGraceMs + 1_000);\n}\n\nasync function settlesWithin(settled: Promise<void>, timeoutMs: number): Promise<boolean> {\n\tlet timer: NodeJS.Timeout | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tsettled.then(\n\t\t\t\t() => true,\n\t\t\t\t() => true,\n\t\t\t),\n\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => resolve(false), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\nfunction abortError(): Error {\n\tconst error = new Error(\"RPC timeout summary aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction boundedError(error: unknown): string {\n\treturn truncateUtf8(error instanceof Error ? error.message : String(error), 16 * 1024).text;\n}\n", "import type { AgentConfig, SubagentThinkingLevel } from \"./agents/types.js\";\nimport { DEFAULT_MAX_OUTPUT_BYTES } from \"./limits.js\";\nimport type { ManagedAgent, TurnOutcome } from \"./registry.js\";\nimport { boundedPrivateText } from \"./safe-text.js\";\nimport type { TransportTelemetry } from \"./transport-types.js\";\n\nexport function modelIdentity(value: unknown): { provider?: string; model?: string } {\n\tif (!value || typeof value !== \"object\") return {};\n\tconst model = value as Record<string, unknown>;\n\treturn {\n\t\tprovider:\n\t\t\ttypeof model.provider === \"string\" ? boundedPrivateText(model.provider, 256) : undefined,\n\t\tmodel: typeof model.id === \"string\" ? boundedPrivateText(model.id, 256) : undefined,\n\t};\n}\n\nexport function normalizeThinking(value: unknown): SubagentThinkingLevel | undefined {\n\treturn typeof value === \"string\" &&\n\t\t[\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"].includes(value)\n\t\t? (value as SubagentThinkingLevel)\n\t\t: undefined;\n}\n\nexport function rpcPolicy(\n\tconfig: AgentConfig,\n\tagent: ManagedAgent,\n): NonNullable<TurnOutcome[\"policy\"]> {\n\treturn {\n\t\tinherited: [\"environment\", \"cwdResources\"],\n\t\toverridden: [\n\t\t\t\"cwd\",\n\t\t\t\"extensions\",\n\t\t\t...(config.model ? [\"model\"] : []),\n\t\t\t...(agent.thinkingLevel || config.thinkingLevel ? [\"thinkingLevel\"] : []),\n\t\t\t...(config.tools ? [\"tools\"] : []),\n\t\t],\n\t\tunsupported: [\"approvalPolicy\", \"sandboxProfile\", \"providerHeaders\", \"extensionState\"],\n\t};\n}\n\nexport function interruptedRpcOutcome(\n\toutput: string,\n\ttelemetry: TransportTelemetry,\n\tfailurePhase: TransportTelemetry[\"phase\"],\n): TurnOutcome {\n\treturn {\n\t\toutput,\n\t\texitCode: 130,\n\t\taborted: true,\n\t\terror: \"RPC subagent was aborted\",\n\t\ttelemetry: {\n\t\t\t...telemetry,\n\t\t\tphase: \"interrupted\",\n\t\t\tfailurePhase,\n\t\t\tupdatedAt: Date.now(),\n\t\t},\n\t};\n}\n\nexport function boundedError(error: unknown): string {\n\treturn boundedPrivateText(\n\t\terror instanceof Error ? error.message : String(error),\n\t\tDEFAULT_MAX_OUTPUT_BYTES,\n\t);\n}\n", "import { DEFAULT_MAX_OUTPUT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport { boundedPrivateText } from \"./safe-text.js\";\nimport { journalMessages, TimeoutProgressJournal } from \"./timeout-checkpoint.js\";\nimport { emptyTransportUsage, type TransportUsage } from \"./transport-types.js\";\nimport type { TurnBudgetMonitor } from \"./turn-budget.js\";\n\nexport interface RpcTurnCapture {\n\toutput: string;\n\tpartial: string;\n\tstopReason?: string;\n\terror?: string;\n\tprovider?: string;\n\tmodel?: string;\n\tusage: TransportUsage;\n\tfirstActivityAt?: number;\n\tjournal: TimeoutProgressJournal;\n}\n\nexport function createRpcTurnCapture(): RpcTurnCapture {\n\treturn {\n\t\toutput: \"\",\n\t\tpartial: \"\",\n\t\tusage: emptyTransportUsage(),\n\t\tjournal: new TimeoutProgressJournal(),\n\t};\n}\n\nexport function captureRpcEvent(event: unknown, capture: RpcTurnCapture): void {\n\tif (!isRecord(event)) return;\n\tif (event.type === \"tool_execution_start\") {\n\t\tcapture.journal.recordToolCall(\n\t\t\ttypeof event.toolCallId === \"string\" ? event.toolCallId : \"\",\n\t\t\ttypeof event.toolName === \"string\" ? event.toolName : \"tool\",\n\t\t\tisRecord(event.args) ? event.args : {},\n\t\t);\n\t}\n\tif (event.type === \"tool_execution_end\") {\n\t\tconst result = isRecord(event.result) ? event.result : {};\n\t\tcapture.journal.recordToolResult(\n\t\t\ttypeof event.toolCallId === \"string\" ? event.toolCallId : \"\",\n\t\t\ttypeof event.toolName === \"string\" ? event.toolName : \"tool\",\n\t\t\t{ content: result.content, isError: event.isError },\n\t\t);\n\t}\n\tif (event.type === \"message_update\") {\n\t\tconst delta = event.assistantMessageEvent;\n\t\tif (isRecord(delta) && delta.type === \"text_delta\" && typeof delta.delta === \"string\") {\n\t\t\tcapture.partial = truncateUtf8(\n\t\t\t\t`${capture.partial}${delta.delta}`,\n\t\t\t\tDEFAULT_MAX_OUTPUT_BYTES,\n\t\t\t).text;\n\t\t}\n\t}\n\tif (event.type !== \"message_end\" || !isRecord(event.message)) return;\n\tconst candidate = event.message;\n\tif (candidate.role !== \"toolResult\") journalMessages(capture.journal, [candidate]);\n\tif (candidate.role !== \"assistant\") return;\n\tcapture.output = truncateUtf8(\n\t\tassistantText(candidate.content) || capture.partial,\n\t\tDEFAULT_MAX_OUTPUT_BYTES,\n\t).text;\n\tcapture.partial = capture.output;\n\tcapture.stopReason = typeof candidate.stopReason === \"string\" ? candidate.stopReason : undefined;\n\tcapture.error =\n\t\ttypeof candidate.errorMessage === \"string\"\n\t\t\t? boundedPrivateText(candidate.errorMessage, 4 * 1024)\n\t\t\t: undefined;\n\tcapture.provider =\n\t\ttypeof candidate.provider === \"string\"\n\t\t\t? boundedPrivateText(candidate.provider, 256)\n\t\t\t: undefined;\n\tconst responseModel =\n\t\ttypeof candidate.responseModel === \"string\"\n\t\t\t? candidate.responseModel\n\t\t\t: typeof candidate.model === \"string\"\n\t\t\t\t? candidate.model\n\t\t\t\t: undefined;\n\tcapture.model = responseModel ? boundedPrivateText(responseModel, 256) : undefined;\n\tcapture.usage.turns++;\n\taddUsage(capture.usage, candidate.usage);\n}\n\nexport function observeRpcBudgetEvent(event: unknown, monitor: TurnBudgetMonitor): void {\n\tif (!isRecord(event)) return;\n\tif (event.type === \"tool_execution_end\") monitor.recordActivity();\n\tif (event.type !== \"message_end\" || !isRecord(event.message)) return;\n\tconst message = event.message;\n\tif (message.role === \"toolResult\") {\n\t\tmonitor.recordActivity();\n\t\treturn;\n\t}\n\tif (message.role !== \"assistant\") return;\n\tmonitor.recordToolCalls(assistantToolCallCount(message.content));\n\tmonitor.recordAssistantTurn(\n\t\ttypeof message.stopReason === \"string\" ? message.stopReason : undefined,\n\t);\n}\n\nfunction assistantToolCallCount(content: unknown): number {\n\tif (!Array.isArray(content)) return 0;\n\treturn content.filter((part) => isRecord(part) && part.type === \"toolCall\").length;\n}\n\nfunction addUsage(target: TransportUsage, value: unknown): void {\n\tif (!isRecord(value)) return;\n\ttarget.input += safeNonNegative(value.input);\n\ttarget.output += safeNonNegative(value.output);\n\ttarget.cacheRead += safeNonNegative(value.cacheRead);\n\ttarget.cacheWrite += safeNonNegative(value.cacheWrite);\n\tconst reportedTotal = safeNonNegative(value.totalTokens);\n\ttarget.totalTokens +=\n\t\treportedTotal ||\n\t\tsafeNonNegative(value.input) +\n\t\t\tsafeNonNegative(value.output) +\n\t\t\tsafeNonNegative(value.cacheRead) +\n\t\t\tsafeNonNegative(value.cacheWrite);\n\tif (isRecord(value.cost)) target.cost += safeNonNegative(value.cost.total);\n}\n\nfunction safeNonNegative(value: unknown): number {\n\treturn typeof value === \"number\" &&\n\t\tNumber.isFinite(value) &&\n\t\tvalue >= 0 &&\n\t\tvalue <= Number.MAX_SAFE_INTEGER\n\t\t? value\n\t\t: 0;\n}\n\nfunction assistantText(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (!Array.isArray(value)) return \"\";\n\treturn value\n\t\t.flatMap((part) => {\n\t\t\tif (!isRecord(part)) return [];\n\t\t\treturn part.type === \"text\" && typeof part.text === \"string\" ? [part.text] : [];\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n"],
5
- "mappings": "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",
6
- "names": ["boundedError", "abortError", "raceWithAbort", "boundedError", "eventType", "remainingMs", "settlesWithin", "checkpointOutput"]
7
- }