diff --git a/packages/pi-coding-agent/src/modes/rpc/jsonl.ts b/packages/pi-coding-agent/src/modes/rpc/jsonl.ts index 8962c7340..5392defef 100644 --- a/packages/pi-coding-agent/src/modes/rpc/jsonl.ts +++ b/packages/pi-coding-agent/src/modes/rpc/jsonl.ts @@ -48,11 +48,17 @@ export function attachJsonlLineReader(stream: Readable, onLine: (line: string) = } }; + const onError = (_err: Error) => { + // Stream errors are non-fatal for JSONL reading + }; + stream.on("data", onData); stream.on("end", onEnd); + stream.on("error", onError); return () => { stream.off("data", onData); stream.off("end", onEnd); + stream.off("error", onError); }; } diff --git a/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts b/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts index c688a049f..7ffd94b65 100644 --- a/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +++ b/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts @@ -488,8 +488,6 @@ export class RpcClient { const fullCommand = { ...command, id } as RpcCommand; return new Promise((resolve, reject) => { - this.pendingRequests.set(id, { resolve, reject }); - const timeout = setTimeout(() => { this.pendingRequests.delete(id); reject(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`)); diff --git a/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts b/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts index fc80a9d3e..8f0f6a488 100644 --- a/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +++ b/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts @@ -710,8 +710,8 @@ export async function runRpcMode(session: AgentSession): Promise { } default: { - const unknownCommand = command as { type: string }; - return error(undefined, unknownCommand.type, `Unknown command: ${unknownCommand.type}`); + const unknownCommand = command as { type: string; id?: string }; + return error(unknownCommand.id, unknownCommand.type, `Unknown command: ${unknownCommand.type}`); } } };