From a011344e48b17de61908c79d2bfdf4aad87f356b Mon Sep 17 00:00:00 2001 From: Logan Yang Date: Mon, 29 Jun 2026 17:16:39 -0700 Subject: [PATCH] fix(copilot-plus): render usage-cap link as plain text for ErrorBlock The streaming error path renders the message via ErrorBlock as plain text (whitespace-pre-wrap), so the Markdown link syntax showed literally as `[purchase credits ...](url)`. Switch formatUsageCapError to a plain-text message with a bare URL, which is readable on the streaming path and still auto-links in any Markdown-rendered context. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_018ou7V5v4UYHkzP3csodLLm --- src/utils/usageCapError.test.ts | 3 ++- src/utils/usageCapError.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/utils/usageCapError.test.ts b/src/utils/usageCapError.test.ts index 68ff987b..0f3a54f5 100644 --- a/src/utils/usageCapError.test.ts +++ b/src/utils/usageCapError.test.ts @@ -25,7 +25,8 @@ describe("formatUsageCapError", () => { const msg = formatUsageCapError(err); expect(msg).toContain("usage cap"); expect(msg).toContain("purchase credits"); - expect(msg).toContain(`(${DASH})`); // markdown link target + expect(msg).toContain(DASH); // bare URL (plain text, renders in ErrorBlock) + expect(msg).not.toContain("]("); // not Markdown link syntax }); it("detects a cap error nested under other transport wrappers", () => { diff --git a/src/utils/usageCapError.ts b/src/utils/usageCapError.ts index 30e1db74..7aa81b6e 100644 --- a/src/utils/usageCapError.ts +++ b/src/utils/usageCapError.ts @@ -66,8 +66,12 @@ export function formatUsageCapError(error: unknown): string | null { const fields = findCapFields(error); if (!fields) return null; const url = fields.dashboard_url || USAGE_DASHBOARD_URL; + // Plain text with a bare URL (no Markdown). The main streaming error path renders + // this via ErrorBlock as plain text (whitespace-pre-wrap), so Markdown link syntax + // would show literally; a bare URL stays readable there and still auto-links in any + // Markdown-rendered context. return ( - `**You've reached your usage cap.** To keep going beyond your plan's limit, ` + - `[purchase credits on your usage dashboard](${url}).` + `You've reached your usage cap. To keep going beyond your plan's limit, ` + + `purchase credits on your usage dashboard: ${url}` ); }