diff --git a/packages/adapters/claude-local/src/server/parse.test.ts b/packages/adapters/claude-local/src/server/parse.test.ts index 2c88106f..d8cd65b0 100644 --- a/packages/adapters/claude-local/src/server/parse.test.ts +++ b/packages/adapters/claude-local/src/server/parse.test.ts @@ -3,6 +3,7 @@ import { extractClaudeRetryNotBefore, isClaudeTransientUpstreamError, isClaudePoisonedPreviousMessageIdError, + isClaudeUnknownSessionError, } from "./parse.js"; describe("isClaudeTransientUpstreamError", () => { @@ -144,6 +145,46 @@ describe("isClaudePoisonedPreviousMessageIdError", () => { }); }); +describe("isClaudeUnknownSessionError", () => { + it("detects the legacy 'no conversation found' message", () => { + expect( + isClaudeUnknownSessionError({ + result: "Error: No conversation found with session id 1234", + }), + ).toBe(true); + }); + + it("detects 'session ... not found' style errors", () => { + expect( + isClaudeUnknownSessionError({ + errors: [{ message: "Session abc123 not found" }], + }), + ).toBe(true); + }); + + it("detects '--resume requires a valid session' validation error from non-UUID input", () => { + expect( + isClaudeUnknownSessionError({ + errors: [ + { + message: + 'Error: --resume requires a valid session ID or session title when used with --print. Usage: claude -p --resume . Provided value "ses_268c2d0a5ffemYbEaeG7c86Uvo" is not a UUID and does not match any session title.', + }, + ], + }), + ).toBe(true); + }); + + it("returns false for unrelated error text", () => { + expect( + isClaudeUnknownSessionError({ + result: "Some other failure", + errors: [{ message: "Network timeout" }], + }), + ).toBe(false); + }); +}); + describe("extractClaudeRetryNotBefore", () => { it("parses the 'resets 4pm' hint in its explicit timezone", () => { const now = new Date("2026-04-22T15:15:00.000Z"); diff --git a/packages/adapters/claude-local/src/server/parse.ts b/packages/adapters/claude-local/src/server/parse.ts index 6fee0d84..36d13fd6 100644 --- a/packages/adapters/claude-local/src/server/parse.ts +++ b/packages/adapters/claude-local/src/server/parse.ts @@ -192,7 +192,9 @@ export function isClaudeUnknownSessionError(parsed: Record): bo .filter(Boolean); return allMessages.some((msg) => - /no conversation found with session id|unknown session|session .* not found|not a valid UUID/i.test(msg), + /no conversation found with session id|unknown session|session .* not found|not a valid UUID|--resume requires a valid session|is not a UUID|does not match any session title/i.test( + msg, + ), ); }