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}` ); }