diff --git a/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts b/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts index 6ce2d4fe13..566fd10083 100644 --- a/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts +++ b/packages/server/src/server/agent/providers/codex/tool-call-mapper.test.ts @@ -656,6 +656,29 @@ describe("codex tool-call mapper", () => { }); }); + it.each([ + { + type: "commandExecution", + id: "codex-declined-command", + status: "declined", + command: "printf ok > /outside/permission.txt", + cwd: "/tmp/repo", + aggregatedOutput: null, + exitCode: null, + }, + { + type: "fileChange", + id: "codex-declined-patch", + status: "declined", + changes: [], + }, + ])("settles a declined $type as failed instead of running", (threadItem) => { + const item = expectMapped(mapCodexToolCallFromThreadItem(threadItem)); + + expect(item.callId).toBe(threadItem.id); + expect(item.status).toBe("failed"); + }); + it("maps unknown tools to unknown detail with raw payloads", () => { const item = expectMapped( mapCodexToolCallEnvelope({ diff --git a/packages/server/src/server/agent/providers/tool-call-mapper-utils.ts b/packages/server/src/server/agent/providers/tool-call-mapper-utils.ts index 281a2bcf32..cd0e4776b7 100644 --- a/packages/server/src/server/agent/providers/tool-call-mapper-utils.ts +++ b/packages/server/src/server/agent/providers/tool-call-mapper-utils.ts @@ -7,6 +7,7 @@ const FAILED_STATUS_VOCAB = new Set([ "errored", "rejected", "denied", + "declined", ]); const CANCELED_STATUS_VOCAB = new Set(["canceled", "cancelled", "interrupted", "aborted"]); const COMPLETED_STATUS_VOCAB = new Set(["completed", "complete", "done", "success", "succeeded"]);