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