diff --git a/packages/web-core/src/i18n/locales/en/common.json b/packages/web-core/src/i18n/locales/en/common.json index 2fdbb996bf1..dc8ae167dac 100644 --- a/packages/web-core/src/i18n/locales/en/common.json +++ b/packages/web-core/src/i18n/locales/en/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "Claude CLI", + "titleShort": "CLI", "persistentHint": "persistent tmux session", "backToChat": "Back to chat", "agentRunningTitle": "Claude is working on your prompt", diff --git a/packages/web-core/src/i18n/locales/es/common.json b/packages/web-core/src/i18n/locales/es/common.json index 69bfad73312..0a7a87a4002 100644 --- a/packages/web-core/src/i18n/locales/es/common.json +++ b/packages/web-core/src/i18n/locales/es/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "CLI de Claude", + "titleShort": "CLI", "persistentHint": "sesión tmux persistente", "backToChat": "Volver al chat", "agentRunningTitle": "Claude está trabajando en tu prompt", diff --git a/packages/web-core/src/i18n/locales/fr/common.json b/packages/web-core/src/i18n/locales/fr/common.json index 68aad865352..59bdbcd021a 100644 --- a/packages/web-core/src/i18n/locales/fr/common.json +++ b/packages/web-core/src/i18n/locales/fr/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "CLI Claude", + "titleShort": "CLI", "persistentHint": "session tmux persistante", "backToChat": "Retour au chat", "agentRunningTitle": "Claude travaille sur votre prompt", diff --git a/packages/web-core/src/i18n/locales/ja/common.json b/packages/web-core/src/i18n/locales/ja/common.json index be469d84da3..3a6e2eb270f 100644 --- a/packages/web-core/src/i18n/locales/ja/common.json +++ b/packages/web-core/src/i18n/locales/ja/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "Claude CLI", + "titleShort": "CLI", "persistentHint": "永続的な tmux セッション", "backToChat": "チャットに戻る", "agentRunningTitle": "Claude がプロンプトを処理しています", diff --git a/packages/web-core/src/i18n/locales/ko/common.json b/packages/web-core/src/i18n/locales/ko/common.json index 35cbed41e21..d538a6f6c2c 100644 --- a/packages/web-core/src/i18n/locales/ko/common.json +++ b/packages/web-core/src/i18n/locales/ko/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "Claude CLI", + "titleShort": "CLI", "persistentHint": "지속되는 tmux 세션", "backToChat": "채팅으로 돌아가기", "agentRunningTitle": "Claude가 프롬프트를 처리하고 있습니다", diff --git a/packages/web-core/src/i18n/locales/zh-Hans/common.json b/packages/web-core/src/i18n/locales/zh-Hans/common.json index 93bcdbfaf76..31dd7acec88 100644 --- a/packages/web-core/src/i18n/locales/zh-Hans/common.json +++ b/packages/web-core/src/i18n/locales/zh-Hans/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "Claude CLI", + "titleShort": "CLI", "persistentHint": "持久 tmux 会话", "backToChat": "返回聊天", "agentRunningTitle": "Claude 正在处理你的提示", diff --git a/packages/web-core/src/i18n/locales/zh-Hant/common.json b/packages/web-core/src/i18n/locales/zh-Hant/common.json index 93806fed3cf..9491007d4b9 100644 --- a/packages/web-core/src/i18n/locales/zh-Hant/common.json +++ b/packages/web-core/src/i18n/locales/zh-Hant/common.json @@ -1,6 +1,7 @@ { "cliMode": { "title": "Claude CLI", + "titleShort": "CLI", "persistentHint": "持久 tmux 工作階段", "backToChat": "返回聊天", "agentRunningTitle": "Claude 正在處理你的提示", diff --git a/packages/web-core/src/pages/workspaces/CliMainPane.tsx b/packages/web-core/src/pages/workspaces/CliMainPane.tsx index 69126b670e3..94c3f7a2d41 100644 --- a/packages/web-core/src/pages/workspaces/CliMainPane.tsx +++ b/packages/web-core/src/pages/workspaces/CliMainPane.tsx @@ -65,23 +65,29 @@ export function CliMainPane({ return (
-
- - {t('cliMode.title')} - + {/* md: (>=768px) pairs with useIsMobile's 767px max-width — keep in + sync with MOBILE_BREAKPOINT in useIsMobile.ts. */} +
+ + {t('cliMode.title')} + {t('cliMode.titleShort')} + {t('cliMode.persistentHint')} -
+
diff --git a/packages/web-core/src/shared/components/LoopAutomationControl.tsx b/packages/web-core/src/shared/components/LoopAutomationControl.tsx index 607e1bf1311..cd1ed26cd5b 100644 --- a/packages/web-core/src/shared/components/LoopAutomationControl.tsx +++ b/packages/web-core/src/shared/components/LoopAutomationControl.tsx @@ -129,26 +129,40 @@ export function LoopAutomationControl({ const attemptsUsed = policy ? Number(policy.attempts_used) : 0; const showAttempts = enabled && maxAttemptsCount > 0; + // Mobile (<768px) shows only the bare time next to the moon/clock icon; the + // full "Waking/Retrying at …" string stays in the accessibility tree via + // sr-only (the attempts counter is hidden on mobile for AT and sighted + // users alike). md: pairs with useIsMobile's 767px max-width — keep in + // sync with MOBILE_BREAKPOINT in useIsMobile.ts. + const isUsageLimitWake = nextWakeup?.kind === 'usage_limit_wake'; + const wakeupTimeText = nextWakeup + ? isUsageLimitWake + ? formatUtcTime(nextWakeup.fire_at) + : formatLocalTime(nextWakeup.fire_at) + : null; + const wakeupStatusText = nextWakeup + ? isUsageLimitWake + ? t('loopAutomation.wakingAt', { time: wakeupTimeText }) + : t('loopAutomation.retryingAt', { time: wakeupTimeText }) + : null; + return ( -
+
{enabled && nextWakeup && ( - - {nextWakeup.kind === 'usage_limit_wake' ? ( + + {isUsageLimitWake ? ( ) : ( )} - - {nextWakeup.kind === 'usage_limit_wake' - ? t('loopAutomation.wakingAt', { - time: formatUtcTime(nextWakeup.fire_at), - }) - : t('loopAutomation.retryingAt', { - time: formatLocalTime(nextWakeup.fire_at), - })} + + {wakeupStatusText} + + + {wakeupTimeText} {showAttempts && ( - + {'· '} {t('loopAutomation.attempts', { used: attemptsUsed, @@ -167,7 +181,7 @@ export function LoopAutomationControl({ )} {showAttempts && !nextWakeup && ( - + {t('loopAutomation.attempts', { used: attemptsUsed, max: maxAttemptsCount, @@ -176,13 +190,13 @@ export function LoopAutomationControl({ )} - + - + {t('loopAutomation.label')}