From a262e2064107bfc82397b8fd4c5d94b18e658cee Mon Sep 17 00:00:00 2001 From: Logan Date: Thu, 19 Mar 2026 00:30:49 +0800 Subject: [PATCH] fix: recognize Cursor session-not-found error format Cursor CLI returns error code -32602 with message 'Session "xxx" not found' when session/load fails. This format was not recognized by isSessionNotFoundText(), preventing fallback to session/new. Added regex pattern to match 'Session "xxx" not found' format: - /session\s+["'\w\-]+\s+not found/i Fixes #161 --- src/acp-error-shapes.ts | 7 ++++++- test/error-normalization.test.ts | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/acp-error-shapes.ts b/src/acp-error-shapes.ts index 4ad72f2..0a208f3 100644 --- a/src/acp-error-shapes.ts +++ b/src/acp-error-shapes.ts @@ -89,6 +89,10 @@ export function formatUnknownErrorMessage(error: unknown): string { return String(error); } +// Matches "session" followed by optional ID (quoted or unquoted) followed by "not found" +// Examples: "Session \"abc\" not found", "Session abc-123 not found" +const SESSION_NOT_FOUND_PATTERN = /session\s+["'\w\-]+\s+not found/i; + function isSessionNotFoundText(value: unknown): boolean { if (typeof value !== "string") { return false; @@ -100,7 +104,8 @@ function isSessionNotFoundText(value: unknown): boolean { normalized.includes("resource not found") || normalized.includes("session not found") || normalized.includes("unknown session") || - normalized.includes("invalid session identifier") + normalized.includes("invalid session identifier") || + SESSION_NOT_FOUND_PATTERN.test(value) ); } diff --git a/test/error-normalization.test.ts b/test/error-normalization.test.ts index 130a534..ff9ef14 100644 --- a/test/error-normalization.test.ts +++ b/test/error-normalization.test.ts @@ -57,6 +57,19 @@ test("isAcpResourceNotFoundError recognizes session-not-found hints in nested er true, ); }); + +test("isAcpResourceNotFoundError recognizes Cursor session-not-found format", () => { + // Cursor returns: {"code":-32602,"message":"Invalid params","data":{"message":"Session \"xxx\" not found"}} + const cursorError = { + code: -32602, + message: "Invalid params", + data: { + message: 'Session "nonexistent-session-id" not found', + }, + }; + + assert.equal(isAcpResourceNotFoundError(cursorError), true); +}); test("isAcpQueryClosedBeforeResponseError matches typed ACP payload", () => { const error = { code: -32603,