From 3a3aa300bb846ae60391ba96c5f1f4aa9a9a5d74 Mon Sep 17 00:00:00 2001 From: Alex Yaroshuk <34632190+alexyaroshuk@users.noreply.github.com> Date: Mon, 16 Feb 2026 00:40:09 +0800 Subject: feat(app): localize "free usage exceeded" error & "Add credits" clickable link (#13652) --- packages/ui/src/components/session-turn.css | 6 ++++++ packages/ui/src/components/session-turn.tsx | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'packages/ui/src/components') diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 9887ce2fc..414e8a359 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -560,6 +560,12 @@ overflow-y: auto; } + .retry-error-link, + .error-card-link { + color: var(--text-strong); + text-decoration: underline; + } + [data-slot="session-turn-collapsible-content-inner"] { width: 100%; min-width: 0; diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 9ffa671e6..c03622105 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -436,6 +436,11 @@ export function SessionTurn( if (s.type !== "retry") return return s }) + const isRetryFreeUsageLimitError = createMemo(() => { + const r = retry() + if (!r) return false + return r.message.includes("Free usage exceeded") + }) const response = createMemo(() => lastTextPart()?.text) const responsePartId = createMemo(() => lastTextPart()?.id) @@ -691,10 +696,22 @@ export function SessionTurn( {(() => { const r = retry() if (!r) return "" - const msg = unwrap(r.message) + const msg = isRetryFreeUsageLimitError() + ? i18n.t("ui.sessionTurn.error.freeUsageExceeded") + : unwrap(r.message) return msg.length > 60 ? msg.slice(0, 60) + "..." : msg })()} + + + {i18n.t("ui.sessionTurn.error.addCredits")} + + ยท {i18n.t("ui.sessionTurn.retry.retrying")} {store.retrySeconds > 0 -- cgit v1.2.3