diff --git a/src/adapters/cursor/call-id.ts b/src/adapters/cursor/call-id.ts index a76707d00a..03f7677ed4 100644 --- a/src/adapters/cursor/call-id.ts +++ b/src/adapters/cursor/call-id.ts @@ -37,6 +37,7 @@ export function decodeCursorCallId(id: string): string { const decoded = Buffer.from(payload, "base64url").toString("utf8"); // Round-trip guard: only trust payloads our encoder could have produced. if (Buffer.from(decoded, "utf8").toString("base64url") !== payload) return id; + if (!needsEncoding(decoded)) return id; return decoded; } catch { return id; diff --git a/tests/cursor-call-id.test.ts b/tests/cursor-call-id.test.ts index def2ece14c..faa170a793 100644 --- a/tests/cursor-call-id.test.ts +++ b/tests/cursor-call-id.test.ts @@ -17,6 +17,12 @@ describe("cursor call-id codec", () => { expect(decodeCursorCallId("call_abc123")).toBe("call_abc123"); }); + test("plain ids in the reserved namespace pass through unchanged", () => { + const id = "ocxc1_Y2FsbF8x"; + expect(encodeCursorCallId(id)).toBe(id); + expect(decodeCursorCallId(id)).toBe(id); + }); + test("newline composite id round-trips through a single-line form", () => { const encoded = encodeCursorCallId(COMPOSITE); expect(encoded).not.toContain("\n");