Skip to content

Commit d0fdfe8

Browse files
authored
fix(codex): return JSON-RPC codes for handler errors (#100713)
Co-authored-by: lin-hongkuan <[email protected]>
1 parent f1f8c1e commit d0fdfe8

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

extensions/codex/src/app-server/client.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,38 @@ describe("CodexAppServerClient", () => {
481481
});
482482
});
483483

484+
it("returns JSON-RPC internal errors when server request handlers throw", async () => {
485+
const warn = vi.spyOn(embeddedAgentLog, "warn").mockImplementation(() => undefined);
486+
const harness = createClientHarness();
487+
clients.push(harness.client);
488+
harness.client.addRequestHandler((request) => {
489+
if (request.method === "account/chatgptAuthTokens/refresh") {
490+
throw new Error("refresh_token_invalidated: reauthentication required");
491+
}
492+
return undefined;
493+
});
494+
495+
harness.send({
496+
id: "srv-refresh",
497+
method: "account/chatgptAuthTokens/refresh",
498+
params: { accountId: "acct-1" },
499+
});
500+
await vi.waitFor(() => expect(harness.writes.length).toBe(1));
501+
502+
expect(JSON.parse(harness.writes[0] ?? "{}")).toEqual({
503+
id: "srv-refresh",
504+
error: {
505+
code: -32603,
506+
message: "refresh_token_invalidated: reauthentication required",
507+
},
508+
});
509+
expect(warn).toHaveBeenCalledWith("codex app-server server request handler failed", {
510+
id: "srv-refresh",
511+
method: "account/chatgptAuthTokens/refresh",
512+
error: expect.any(Error),
513+
});
514+
});
515+
484516
it("fails closed when a dynamic tool server request handler hangs", async () => {
485517
vi.useFakeTimers();
486518
const warn = vi.spyOn(embeddedAgentLog, "warn").mockImplementation(() => undefined);

extensions/codex/src/app-server/client.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,10 +468,17 @@ export class CodexAppServerClient {
468468
}
469469
this.writeMessage({ id: request.id, result: defaultServerRequestResponse(request) });
470470
} catch (error) {
471+
const message = error instanceof Error ? error.message : String(error);
472+
embeddedAgentLog.warn("codex app-server server request handler failed", {
473+
id: request.id,
474+
method: request.method,
475+
error,
476+
});
471477
this.writeMessage({
472478
id: request.id,
473479
error: {
474-
message: error instanceof Error ? error.message : String(error),
480+
code: -32603,
481+
message,
475482
},
476483
});
477484
}

0 commit comments

Comments
 (0)