@narumitw/pi-subagents 2.0.1 → 2.0.2
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/README.md +21 -8
- package/dist/chunks/auto-transport-SY2VHUFH.ts +109 -0
- package/dist/chunks/auto-transport-SY2VHUFH.ts.map +7 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts +19 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts.map +7 -0
- package/dist/chunks/chunk-434NII74.ts +282 -0
- package/dist/chunks/chunk-434NII74.ts.map +7 -0
- package/dist/chunks/chunk-47SK2QYC.ts +56 -0
- package/dist/chunks/chunk-47SK2QYC.ts.map +7 -0
- package/dist/chunks/chunk-6KJ34M6S.ts +159 -0
- package/dist/chunks/chunk-6KJ34M6S.ts.map +7 -0
- package/dist/chunks/chunk-7OBINKFM.ts +80 -0
- package/dist/chunks/chunk-7OBINKFM.ts.map +7 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts +335 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +7 -0
- package/dist/chunks/chunk-AEUYS7JC.ts +73 -0
- package/dist/chunks/chunk-AEUYS7JC.ts.map +7 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts +189 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts.map +7 -0
- package/dist/chunks/chunk-BOAXY55Y.ts +153 -0
- package/dist/chunks/chunk-BOAXY55Y.ts.map +7 -0
- package/dist/chunks/chunk-C4L6P266.ts +22 -0
- package/dist/chunks/chunk-C4L6P266.ts.map +7 -0
- package/dist/chunks/chunk-DPPVEQAM.ts +29 -0
- package/dist/chunks/chunk-DPPVEQAM.ts.map +7 -0
- package/dist/chunks/chunk-DQMN4OYM.ts +913 -0
- package/dist/chunks/chunk-DQMN4OYM.ts.map +7 -0
- package/dist/chunks/chunk-DSOOH73Y.ts +238 -0
- package/dist/chunks/chunk-DSOOH73Y.ts.map +7 -0
- package/dist/chunks/chunk-EFBPISNT.ts +421 -0
- package/dist/chunks/chunk-EFBPISNT.ts.map +7 -0
- package/dist/chunks/chunk-EWWXFU7N.ts +150 -0
- package/dist/chunks/chunk-EWWXFU7N.ts.map +7 -0
- package/dist/chunks/chunk-F4L2UVSK.ts +380 -0
- package/dist/chunks/chunk-F4L2UVSK.ts.map +7 -0
- package/dist/chunks/chunk-F5YWVHQX.ts +1543 -0
- package/dist/chunks/chunk-F5YWVHQX.ts.map +7 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts +63 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +7 -0
- package/dist/chunks/chunk-G6VZTCFH.ts +70 -0
- package/dist/chunks/chunk-G6VZTCFH.ts.map +7 -0
- package/dist/chunks/chunk-H3FP6DLR.ts +160 -0
- package/dist/chunks/chunk-H3FP6DLR.ts.map +7 -0
- package/dist/chunks/chunk-HA36LPCO.ts +130 -0
- package/dist/chunks/chunk-HA36LPCO.ts.map +7 -0
- package/dist/chunks/chunk-HKC4ES4B.ts +65 -0
- package/dist/chunks/chunk-HKC4ES4B.ts.map +7 -0
- package/dist/chunks/chunk-HOP5FXDT.ts +27 -0
- package/dist/chunks/chunk-HOP5FXDT.ts.map +7 -0
- package/dist/chunks/chunk-I2FAK44T.ts +324 -0
- package/dist/chunks/chunk-I2FAK44T.ts.map +7 -0
- package/dist/chunks/chunk-IGAMVWFN.ts +139 -0
- package/dist/chunks/chunk-IGAMVWFN.ts.map +7 -0
- package/dist/chunks/chunk-KMGKCEO4.ts +38 -0
- package/dist/chunks/chunk-KMGKCEO4.ts.map +7 -0
- package/dist/chunks/chunk-N7BLVXKK.ts +73 -0
- package/dist/chunks/chunk-N7BLVXKK.ts.map +7 -0
- package/dist/chunks/chunk-NIF42QMF.ts +297 -0
- package/dist/chunks/chunk-NIF42QMF.ts.map +7 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts +52 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts.map +7 -0
- package/dist/chunks/chunk-ONDTY4EL.ts +91 -0
- package/dist/chunks/chunk-ONDTY4EL.ts.map +7 -0
- package/dist/chunks/chunk-OVPHFGKO.ts +1769 -0
- package/dist/chunks/chunk-OVPHFGKO.ts.map +7 -0
- package/dist/chunks/chunk-P7OH4XMF.ts +60 -0
- package/dist/chunks/chunk-P7OH4XMF.ts.map +7 -0
- package/dist/chunks/chunk-PSK43Y6A.ts +339 -0
- package/dist/chunks/chunk-PSK43Y6A.ts.map +7 -0
- package/dist/chunks/chunk-QBORTI4W.ts +468 -0
- package/dist/chunks/chunk-QBORTI4W.ts.map +7 -0
- package/dist/chunks/chunk-QDVGH2X7.ts +171 -0
- package/dist/chunks/chunk-QDVGH2X7.ts.map +7 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts +490 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts.map +7 -0
- package/dist/chunks/chunk-RRR66UWR.ts +28 -0
- package/dist/chunks/chunk-RRR66UWR.ts.map +7 -0
- package/dist/chunks/chunk-RSUXZD6S.ts +275 -0
- package/dist/chunks/chunk-RSUXZD6S.ts.map +7 -0
- package/dist/chunks/chunk-RTCVYIZA.ts +221 -0
- package/dist/chunks/chunk-RTCVYIZA.ts.map +7 -0
- package/dist/chunks/chunk-S2IWVK3J.ts +44 -0
- package/dist/chunks/chunk-S2IWVK3J.ts.map +7 -0
- package/dist/chunks/chunk-SCZ33MYW.ts +52 -0
- package/dist/chunks/chunk-SCZ33MYW.ts.map +7 -0
- package/dist/chunks/chunk-SWGQLFSD.ts +60 -0
- package/dist/chunks/chunk-SWGQLFSD.ts.map +7 -0
- package/dist/chunks/chunk-UMBPMVJW.ts +22 -0
- package/dist/chunks/chunk-UMBPMVJW.ts.map +7 -0
- package/dist/chunks/chunk-UVFVHIOP.ts +735 -0
- package/dist/chunks/chunk-UVFVHIOP.ts.map +7 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts +16 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts.map +7 -0
- package/dist/chunks/config-status-J4GPWP46.ts +34 -0
- package/dist/chunks/config-status-J4GPWP46.ts.map +7 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts +1146 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts.map +7 -0
- package/dist/chunks/consult-NYXVDN5G.ts +518 -0
- package/dist/chunks/consult-NYXVDN5G.ts.map +7 -0
- package/dist/chunks/context-QDKLVQXE.ts +11 -0
- package/dist/chunks/context-QDKLVQXE.ts.map +7 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts +130 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts.map +7 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts +17 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +7 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts +24 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts.map +7 -0
- package/dist/chunks/discovery-K25T3SH4.ts +12 -0
- package/dist/chunks/discovery-K25T3SH4.ts.map +7 -0
- package/dist/chunks/execution-DS2DEIQZ.ts +4034 -0
- package/dist/chunks/execution-DS2DEIQZ.ts.map +7 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts +38 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts.map +7 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts +619 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts.map +7 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts +294 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts.map +7 -0
- package/dist/chunks/persistence-VSGXAW4P.ts +344 -0
- package/dist/chunks/persistence-VSGXAW4P.ts.map +7 -0
- package/dist/chunks/registry-E6XPJB7L.ts +1324 -0
- package/dist/chunks/registry-E6XPJB7L.ts.map +7 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts +81 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts.map +7 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts +1154 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +7 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts +15 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts.map +7 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +19 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +7 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts +13 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts.map +7 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +15 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +7 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts +158 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts.map +7 -0
- package/dist/chunks/workspace-WDKLN72J.ts +11 -0
- package/dist/chunks/workspace-WDKLN72J.ts.map +7 -0
- package/dist/index.ts +1057 -0
- package/dist/index.ts.map +7 -0
- package/package.json +7 -3
- package/src/index.ts +1 -1
- package/src/settings-reader.ts +208 -0
- package/src/settings.ts +22 -187
- package/src/stateful-registration.ts +1230 -0
- package/src/stateful-safety.ts +1 -1
- package/src/stateful.ts +2 -1234
- package/src/subagents-extension.ts +307 -0
- package/src/subagents.ts +1 -308
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
FALLBACK_TIMEOUT_MS,
|
|
5
|
+
assertSubagentDepthAllowed,
|
|
6
|
+
parsePositiveInteger,
|
|
7
|
+
resolveDefaultSubagentTimeoutMs
|
|
8
|
+
} from "./chunk-RRR66UWR.js";
|
|
9
|
+
export {
|
|
10
|
+
FALLBACK_TIMEOUT_MS,
|
|
11
|
+
assertSubagentDepthAllowed,
|
|
12
|
+
parsePositiveInteger,
|
|
13
|
+
resolveDefaultSubagentTimeoutMs
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-policy-5YELCOVC.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
SEMANTIC_SNAPSHOT_VERSION,
|
|
5
|
+
captureRepositoryGeneration,
|
|
6
|
+
captureSemanticResourceGeneration,
|
|
7
|
+
captureSemanticSnapshot,
|
|
8
|
+
evaluateSemanticCompatibility,
|
|
9
|
+
isSemanticSnapshot
|
|
10
|
+
} from "./chunk-BOAXY55Y.js";
|
|
11
|
+
export {
|
|
12
|
+
SEMANTIC_SNAPSHOT_VERSION,
|
|
13
|
+
captureRepositoryGeneration,
|
|
14
|
+
captureSemanticResourceGeneration,
|
|
15
|
+
captureSemanticSnapshot,
|
|
16
|
+
evaluateSemanticCompatibility,
|
|
17
|
+
isSemanticSnapshot
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=semantic-snapshot-WPJ3UAFW.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,
|
|
5
|
+
assertSpawnIdempotencyKey,
|
|
6
|
+
hashSpawnRequest
|
|
7
|
+
} from "./chunk-S2IWVK3J.js";
|
|
8
|
+
export {
|
|
9
|
+
MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,
|
|
10
|
+
assertSpawnIdempotencyKey,
|
|
11
|
+
hashSpawnRequest
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=spawn-idempotency-QGHO2WKC.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
assertCurrentSpawn,
|
|
5
|
+
cleanupPersistedWorkspaces,
|
|
6
|
+
disposeStatefulRuntime,
|
|
7
|
+
waitForOwnedSpawn
|
|
8
|
+
} from "./chunk-P7OH4XMF.js";
|
|
9
|
+
export {
|
|
10
|
+
assertCurrentSpawn,
|
|
11
|
+
cleanupPersistedWorkspaces,
|
|
12
|
+
disposeStatefulRuntime,
|
|
13
|
+
waitForOwnedSpawn
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=stateful-lifecycle-JAR6K55H.ts.map
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
buildStatefulTurnPrompt,
|
|
5
|
+
resolveStatefulTurnTimeout
|
|
6
|
+
} from "./chunk-SCZ33MYW.js";
|
|
7
|
+
import {
|
|
8
|
+
runSingleAgent
|
|
9
|
+
} from "./chunk-DQMN4OYM.js";
|
|
10
|
+
import "./chunk-IGAMVWFN.js";
|
|
11
|
+
import "./chunk-47SK2QYC.js";
|
|
12
|
+
import "./chunk-HKC4ES4B.js";
|
|
13
|
+
import "./chunk-DSOOH73Y.js";
|
|
14
|
+
import {
|
|
15
|
+
CHILD_PEER_TOOL_NAMES,
|
|
16
|
+
childPeerBridgePath,
|
|
17
|
+
peerBridgeEnvironment
|
|
18
|
+
} from "./chunk-EWWXFU7N.js";
|
|
19
|
+
import {
|
|
20
|
+
resolvePiPromptResources
|
|
21
|
+
} from "./chunk-G6VZTCFH.js";
|
|
22
|
+
import "./chunk-G3RSMSXJ.js";
|
|
23
|
+
import {
|
|
24
|
+
getResultFinalOutput
|
|
25
|
+
} from "./chunk-AEUYS7JC.js";
|
|
26
|
+
import "./chunk-RTCVYIZA.js";
|
|
27
|
+
import "./chunk-ONDTY4EL.js";
|
|
28
|
+
import {
|
|
29
|
+
discoverAgents
|
|
30
|
+
} from "./chunk-PSK43Y6A.js";
|
|
31
|
+
import "./chunk-RSUXZD6S.js";
|
|
32
|
+
import {
|
|
33
|
+
resolveSubagentThinkingLevel
|
|
34
|
+
} from "./chunk-7QPPBBXZ.js";
|
|
35
|
+
import {
|
|
36
|
+
readSubagentSettings
|
|
37
|
+
} from "./chunk-QBORTI4W.js";
|
|
38
|
+
import "./chunk-7OBINKFM.js";
|
|
39
|
+
import "./chunk-DPPVEQAM.js";
|
|
40
|
+
import "./chunk-I2FAK44T.js";
|
|
41
|
+
import "./chunk-H3FP6DLR.js";
|
|
42
|
+
import "./chunk-RRR66UWR.js";
|
|
43
|
+
|
|
44
|
+
// src/subprocess-transport.ts
|
|
45
|
+
function resolveStatefulSubprocessThinkingLevel(agents, record) {
|
|
46
|
+
return resolveSubagentThinkingLevel(agents, record.agent, record.thinkingLevel);
|
|
47
|
+
}
|
|
48
|
+
var SubprocessTransport = class {
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.options = options;
|
|
51
|
+
}
|
|
52
|
+
options;
|
|
53
|
+
kind = "subprocess";
|
|
54
|
+
async runTurn(record, task, signal, onProgress) {
|
|
55
|
+
const startedAt = Date.now();
|
|
56
|
+
const starting = {
|
|
57
|
+
transport: "subprocess",
|
|
58
|
+
phase: "starting",
|
|
59
|
+
updatedAt: startedAt,
|
|
60
|
+
timing: { startedAt, transportStartedAt: startedAt }
|
|
61
|
+
};
|
|
62
|
+
onProgress?.(starting);
|
|
63
|
+
const settings = this.options.getSettings ? this.options.getSettings() : readSubagentSettings();
|
|
64
|
+
const discovery = discoverAgents(record.cwd, record.agentScope ?? "user", settings);
|
|
65
|
+
const agent = discovery.agents.find((candidate) => candidate.name === record.agent);
|
|
66
|
+
const boundedTask = buildStatefulTurnPrompt(record, task);
|
|
67
|
+
const projectTrust = record.target?.trust.projectTrusted ?? (record.agentScope === "project" || record.agentScope === "both");
|
|
68
|
+
const promptResources = agent?.systemPrompt.trim() ? await resolvePiPromptResources(record.cwd, projectTrust) : void 0;
|
|
69
|
+
const makeDetails = (results) => ({
|
|
70
|
+
mode: "single",
|
|
71
|
+
agentScope: record.agentScope ?? "user",
|
|
72
|
+
projectAgentsDir: discovery.projectAgentsDir,
|
|
73
|
+
results
|
|
74
|
+
});
|
|
75
|
+
const credentials = this.options.peerRuntime ? await this.options.peerRuntime.issueCredentials(
|
|
76
|
+
record.id,
|
|
77
|
+
record.currentTurnGeneration ?? record.turnGeneration ?? 1
|
|
78
|
+
) : void 0;
|
|
79
|
+
let single;
|
|
80
|
+
try {
|
|
81
|
+
single = await runSingleAgent(
|
|
82
|
+
record.cwd,
|
|
83
|
+
discovery.agents,
|
|
84
|
+
record.agent,
|
|
85
|
+
boundedTask.text,
|
|
86
|
+
void 0,
|
|
87
|
+
void 0,
|
|
88
|
+
signal,
|
|
89
|
+
resolveStatefulSubprocessThinkingLevel(discovery.agents, record),
|
|
90
|
+
record.currentTimeoutMs ?? record.timeoutMs ?? resolveStatefulTurnTimeout(agent),
|
|
91
|
+
void 0,
|
|
92
|
+
makeDetails,
|
|
93
|
+
void 0,
|
|
94
|
+
{
|
|
95
|
+
projectTrust,
|
|
96
|
+
...record.executionPlan ? { tools: record.executionPlan.effectiveTools } : {},
|
|
97
|
+
appendSystemPromptPaths: promptResources?.appendSystemPromptPaths,
|
|
98
|
+
extensionPaths: credentials ? [childPeerBridgePath()] : void 0,
|
|
99
|
+
additionalTools: credentials ? [...CHILD_PEER_TOOL_NAMES] : void 0,
|
|
100
|
+
env: credentials ? peerBridgeEnvironment(credentials) : void 0,
|
|
101
|
+
timeoutResultFormat: record.resultFormat,
|
|
102
|
+
turnLimits: {
|
|
103
|
+
idleTimeoutMs: record.currentIdleTimeoutMs ?? record.idleTimeoutMs,
|
|
104
|
+
maxTurns: record.currentMaxTurns ?? record.maxTurns,
|
|
105
|
+
maxToolCalls: record.currentMaxToolCalls ?? record.maxToolCalls
|
|
106
|
+
},
|
|
107
|
+
resultFormat: record.resultFormat,
|
|
108
|
+
contract: record.contract,
|
|
109
|
+
executionPlan: record.executionPlan,
|
|
110
|
+
displayTask: task
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
} finally {
|
|
114
|
+
this.options.peerRuntime?.revoke(record.id);
|
|
115
|
+
}
|
|
116
|
+
const settledAt = Date.now();
|
|
117
|
+
const telemetry = {
|
|
118
|
+
...starting,
|
|
119
|
+
phase: single.aborted ? "interrupted" : single.exitCode === 0 ? "settled" : "failed",
|
|
120
|
+
failurePhase: single.exitCode === 0 ? void 0 : "running",
|
|
121
|
+
updatedAt: settledAt,
|
|
122
|
+
timing: {
|
|
123
|
+
...starting.timing,
|
|
124
|
+
promptAcceptedAt: single.processStarted ? startedAt : void 0,
|
|
125
|
+
firstActivityAt: single.messages.length > 0 ? settledAt : void 0,
|
|
126
|
+
settledAt
|
|
127
|
+
},
|
|
128
|
+
provider: single.actualProvider,
|
|
129
|
+
model: single.actualModel ?? single.model,
|
|
130
|
+
thinkingLevel: single.thinkingLevel,
|
|
131
|
+
usage: {
|
|
132
|
+
input: single.usage.input,
|
|
133
|
+
output: single.usage.output,
|
|
134
|
+
cacheRead: single.usage.cacheRead,
|
|
135
|
+
cacheWrite: single.usage.cacheWrite,
|
|
136
|
+
totalTokens: single.usage.totalTokens ?? 0,
|
|
137
|
+
cost: single.usage.cost,
|
|
138
|
+
turns: single.usage.turns
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
onProgress?.(telemetry);
|
|
142
|
+
return {
|
|
143
|
+
output: getResultFinalOutput(single),
|
|
144
|
+
exitCode: single.exitCode,
|
|
145
|
+
aborted: single.aborted,
|
|
146
|
+
truncated: single.truncated || boundedTask.truncated,
|
|
147
|
+
error: single.errorMessage || single.stderr || void 0,
|
|
148
|
+
policy: single.policy,
|
|
149
|
+
termination: single.termination,
|
|
150
|
+
telemetry
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
export {
|
|
155
|
+
SubprocessTransport,
|
|
156
|
+
resolveStatefulSubprocessThinkingLevel
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=subprocess-transport-C2XVR25R.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/subprocess-transport.ts"],
|
|
4
|
+
"sourcesContent": ["import { discoverAgents } from \"./agents/discovery.js\";\nimport type { AgentConfig, SubagentSettings, SubagentThinkingLevel } from \"./agents/types.js\";\nimport {\n\tCHILD_PEER_TOOL_NAMES,\n\tchildPeerBridgePath,\n\ttype PeerTransportRuntime,\n\tpeerBridgeEnvironment,\n} from \"./peer-transport.js\";\nimport { resolvePiPromptResources } from \"./prompt-resources.js\";\nimport type { ManagedAgent, TurnOutcome } from \"./registry.js\";\nimport { getResultFinalOutput, runSingleAgent, type SubagentDetails } from \"./runner.js\";\nimport { readSubagentSettings, resolveSubagentThinkingLevel } from \"./settings.js\";\nimport { buildStatefulTurnPrompt, resolveStatefulTurnTimeout } from \"./stateful-prompt.js\";\nimport type { SubagentTransport } from \"./transport.js\";\nimport type { TransportProgressCallback, TransportTelemetry } from \"./transport-types.js\";\n\nexport function resolveStatefulSubprocessThinkingLevel(\n\tagents: readonly Pick<AgentConfig, \"name\" | \"thinkingLevel\">[],\n\trecord: Pick<ManagedAgent, \"agent\" | \"thinkingLevel\">,\n): SubagentThinkingLevel | undefined {\n\treturn resolveSubagentThinkingLevel(agents, record.agent, record.thinkingLevel);\n}\n\nexport interface SubprocessTransportOptions {\n\tgetSettings?: () => SubagentSettings | undefined;\n\tpeerRuntime?: PeerTransportRuntime;\n}\n\nexport class SubprocessTransport implements SubagentTransport {\n\treadonly kind = \"subprocess\" as const;\n\n\tconstructor(private readonly options: SubprocessTransportOptions = {}) {}\n\n\tasync runTurn(\n\t\trecord: 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\tconst starting: TransportTelemetry = {\n\t\t\ttransport: \"subprocess\",\n\t\t\tphase: \"starting\",\n\t\t\tupdatedAt: startedAt,\n\t\t\ttiming: { startedAt, transportStartedAt: startedAt },\n\t\t};\n\t\tonProgress?.(starting);\n\t\tconst settings = this.options.getSettings ? this.options.getSettings() : readSubagentSettings();\n\t\tconst discovery = discoverAgents(record.cwd, record.agentScope ?? \"user\", settings);\n\t\tconst agent = discovery.agents.find((candidate) => candidate.name === record.agent);\n\t\tconst boundedTask = buildStatefulTurnPrompt(record, task);\n\t\tconst projectTrust =\n\t\t\trecord.target?.trust.projectTrusted ??\n\t\t\t(record.agentScope === \"project\" || record.agentScope === \"both\");\n\t\tconst promptResources = agent?.systemPrompt.trim()\n\t\t\t? await resolvePiPromptResources(record.cwd, projectTrust)\n\t\t\t: undefined;\n\t\tconst makeDetails = (results: SubagentDetails[\"results\"]): SubagentDetails => ({\n\t\t\tmode: \"single\",\n\t\t\tagentScope: record.agentScope ?? \"user\",\n\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\tresults,\n\t\t});\n\t\tconst credentials = this.options.peerRuntime\n\t\t\t? await this.options.peerRuntime.issueCredentials(\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.currentTurnGeneration ?? record.turnGeneration ?? 1,\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tlet single: Awaited<ReturnType<typeof runSingleAgent>>;\n\t\ttry {\n\t\t\tsingle = await runSingleAgent(\n\t\t\t\trecord.cwd,\n\t\t\t\tdiscovery.agents,\n\t\t\t\trecord.agent,\n\t\t\t\tboundedTask.text,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tsignal,\n\t\t\t\tresolveStatefulSubprocessThinkingLevel(discovery.agents, record),\n\t\t\t\trecord.currentTimeoutMs ?? record.timeoutMs ?? resolveStatefulTurnTimeout(agent),\n\t\t\t\tundefined,\n\t\t\t\tmakeDetails,\n\t\t\t\tundefined,\n\t\t\t\t{\n\t\t\t\t\tprojectTrust,\n\t\t\t\t\t...(record.executionPlan ? { tools: record.executionPlan.effectiveTools } : {}),\n\t\t\t\t\tappendSystemPromptPaths: promptResources?.appendSystemPromptPaths,\n\t\t\t\t\textensionPaths: credentials ? [childPeerBridgePath()] : undefined,\n\t\t\t\t\tadditionalTools: credentials ? [...CHILD_PEER_TOOL_NAMES] : undefined,\n\t\t\t\t\tenv: credentials ? peerBridgeEnvironment(credentials) : undefined,\n\t\t\t\t\ttimeoutResultFormat: record.resultFormat,\n\t\t\t\t\tturnLimits: {\n\t\t\t\t\t\tidleTimeoutMs: record.currentIdleTimeoutMs ?? record.idleTimeoutMs,\n\t\t\t\t\t\tmaxTurns: record.currentMaxTurns ?? record.maxTurns,\n\t\t\t\t\t\tmaxToolCalls: record.currentMaxToolCalls ?? record.maxToolCalls,\n\t\t\t\t\t},\n\t\t\t\t\tresultFormat: record.resultFormat,\n\t\t\t\t\tcontract: record.contract,\n\t\t\t\t\texecutionPlan: record.executionPlan,\n\t\t\t\t\tdisplayTask: task,\n\t\t\t\t},\n\t\t\t);\n\t\t} finally {\n\t\t\tthis.options.peerRuntime?.revoke(record.id);\n\t\t}\n\t\tconst settledAt = Date.now();\n\t\tconst telemetry: TransportTelemetry = {\n\t\t\t...starting,\n\t\t\tphase: single.aborted ? \"interrupted\" : single.exitCode === 0 ? \"settled\" : \"failed\",\n\t\t\tfailurePhase: single.exitCode === 0 ? undefined : \"running\",\n\t\t\tupdatedAt: settledAt,\n\t\t\ttiming: {\n\t\t\t\t...starting.timing,\n\t\t\t\tpromptAcceptedAt: single.processStarted ? startedAt : undefined,\n\t\t\t\tfirstActivityAt: single.messages.length > 0 ? settledAt : undefined,\n\t\t\t\tsettledAt,\n\t\t\t},\n\t\t\tprovider: single.actualProvider,\n\t\t\tmodel: single.actualModel ?? single.model,\n\t\t\tthinkingLevel: single.thinkingLevel,\n\t\t\tusage: {\n\t\t\t\tinput: single.usage.input,\n\t\t\t\toutput: single.usage.output,\n\t\t\t\tcacheRead: single.usage.cacheRead,\n\t\t\t\tcacheWrite: single.usage.cacheWrite,\n\t\t\t\ttotalTokens: single.usage.totalTokens ?? 0,\n\t\t\t\tcost: single.usage.cost,\n\t\t\t\tturns: single.usage.turns,\n\t\t\t},\n\t\t};\n\t\tonProgress?.(telemetry);\n\t\treturn {\n\t\t\toutput: getResultFinalOutput(single),\n\t\t\texitCode: single.exitCode,\n\t\t\taborted: single.aborted,\n\t\t\ttruncated: single.truncated || boundedTask.truncated,\n\t\t\terror: single.errorMessage || single.stderr || undefined,\n\t\t\tpolicy: single.policy,\n\t\t\ttermination: single.termination,\n\t\t\ttelemetry,\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
WorkspaceManager,
|
|
5
|
+
assertWorkspaceIsolationReady
|
|
6
|
+
} from "./chunk-6KJ34M6S.js";
|
|
7
|
+
export {
|
|
8
|
+
WorkspaceManager,
|
|
9
|
+
assertWorkspaceIsolationReady
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=workspace-WDKLN72J.ts.map
|