From 50f1e414bc5a4eb7ee83c38003b0adca428bc6ce Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Fri, 21 Aug 2026 13:01:57 -0700 Subject: [PATCH] polish(desktop): rename error-card action to 'Copy error details' 'Copy diagnostics' was dev-speak; match the familiar OS-error phrasing. All five locales + docs updated. --- .../src/components/assistant-ui/thread/assistant-message.tsx | 2 +- apps/desktop/src/i18n/ar.ts | 2 +- apps/desktop/src/i18n/en.ts | 2 +- apps/desktop/src/i18n/ja.ts | 2 +- apps/desktop/src/i18n/zh-hant.ts | 2 +- apps/desktop/src/i18n/zh.ts | 2 +- apps/desktop/src/lib/error-surface.ts | 2 +- website/docs/user-guide/desktop.md | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx b/apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx index a8b9729e78..eaad962d41 100644 --- a/apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx +++ b/apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx @@ -449,7 +449,7 @@ const StreamingMarker: FC = () => { // descriptor (metadata.custom.errorSurface — see agent/error_surface.py). // These leaves render the layer label + recovery actions. Older backends // never send the descriptor: the label falls back to a generic title and the -// action row still offers Retry / Open Logs / Copy diagnostics, so nothing +// action row still offers Retry / Open Logs / Copy error details, so nothing // regresses on version skew. const ErrorLayerLabel: FC = () => { diff --git a/apps/desktop/src/i18n/ar.ts b/apps/desktop/src/i18n/ar.ts index 86eaa3b229..b0aec6714f 100644 --- a/apps/desktop/src/i18n/ar.ts +++ b/apps/desktop/src/i18n/ar.ts @@ -2449,7 +2449,7 @@ export const ar = defineLocale({ errorSwitchProvider: 'تبديل المزوّد', errorOpenLogs: 'فتح السجلات', errorOpenLogsFailed: 'تعذّر فتح مجلد السجلات', - errorCopyDiagnostics: 'نسخ التشخيصات', + errorCopyDiagnostics: 'نسخ تفاصيل الخطأ', filesChanged: count => `${count} ملفات تم تغييرها`, reviewChanges: 'مراجعة', readAloudFailed: 'فشلت القراءة بصوت عال', diff --git a/apps/desktop/src/i18n/en.ts b/apps/desktop/src/i18n/en.ts index 5870321a6a..6a10372ed7 100644 --- a/apps/desktop/src/i18n/en.ts +++ b/apps/desktop/src/i18n/en.ts @@ -3094,7 +3094,7 @@ export const en: Translations = { errorSwitchProvider: 'Switch provider', errorOpenLogs: 'Open logs', errorOpenLogsFailed: 'Could not open the logs folder', - errorCopyDiagnostics: 'Copy diagnostics', + errorCopyDiagnostics: 'Copy error details', filesChanged: count => (count === 1 ? '1 file changed' : `${count} files changed`), reviewChanges: 'Review', readAloudFailed: 'Read aloud failed', diff --git a/apps/desktop/src/i18n/ja.ts b/apps/desktop/src/i18n/ja.ts index e1a492ecb8..a65a18bab6 100644 --- a/apps/desktop/src/i18n/ja.ts +++ b/apps/desktop/src/i18n/ja.ts @@ -2746,7 +2746,7 @@ export const ja = defineLocale({ errorSwitchProvider: 'プロバイダーを切り替え', errorOpenLogs: 'ログを開く', errorOpenLogsFailed: 'ログフォルダを開けませんでした', - errorCopyDiagnostics: '診断情報をコピー', + errorCopyDiagnostics: 'エラー詳細をコピー', filesChanged: count => `${count} 件のファイルを変更`, reviewChanges: 'レビュー', readAloudFailed: '読み上げに失敗しました', diff --git a/apps/desktop/src/i18n/zh-hant.ts b/apps/desktop/src/i18n/zh-hant.ts index 378a90662a..e44d2397f1 100644 --- a/apps/desktop/src/i18n/zh-hant.ts +++ b/apps/desktop/src/i18n/zh-hant.ts @@ -2656,7 +2656,7 @@ export const zhHant = defineLocale({ errorSwitchProvider: '切換服務商', errorOpenLogs: '開啟日誌', errorOpenLogsFailed: '無法開啟日誌資料夾', - errorCopyDiagnostics: '複製診斷資訊', + errorCopyDiagnostics: '複製錯誤詳細資訊', filesChanged: count => `${count} 個檔案已變更`, reviewChanges: '檢視', readAloudFailed: '朗讀失敗', diff --git a/apps/desktop/src/i18n/zh.ts b/apps/desktop/src/i18n/zh.ts index 5cdbc9db25..7212cf1eec 100644 --- a/apps/desktop/src/i18n/zh.ts +++ b/apps/desktop/src/i18n/zh.ts @@ -3258,7 +3258,7 @@ export const zh: Translations = { errorSwitchProvider: '切换服务商', errorOpenLogs: '打开日志', errorOpenLogsFailed: '无法打开日志文件夹', - errorCopyDiagnostics: '复制诊断信息', + errorCopyDiagnostics: '复制错误详情', filesChanged: count => `${count} 个文件已更改`, reviewChanges: '查看', readAloudFailed: '朗读失败', diff --git a/apps/desktop/src/lib/error-surface.ts b/apps/desktop/src/lib/error-surface.ts index 2297afa023..cf41e3c480 100644 --- a/apps/desktop/src/lib/error-surface.ts +++ b/apps/desktop/src/lib/error-surface.ts @@ -47,7 +47,7 @@ export function parseErrorSurface(value: unknown): ErrorSurface | null { } } -/** Plain-text diagnostics blob for the error card's "Copy diagnostics". */ +/** Plain-text error-details blob for the error card's "Copy error details". */ export function formatErrorDiagnostics(input: { appVersion?: string errorText: string diff --git a/website/docs/user-guide/desktop.md b/website/docs/user-guide/desktop.md index ea4ca3b93e..80ade53afd 100644 --- a/website/docs/user-guide/desktop.md +++ b/website/docs/user-guide/desktop.md @@ -421,13 +421,13 @@ generic error toast. The card offers recovery actions matched to the failure: - **Switch provider** — jumps to Settings → Models for provider, endpoint, auth, and billing failures. - **Open logs** — opens `HERMES_HOME/logs` in your file manager. -- **Copy diagnostics** — copies a compact plain-text summary (layer, code, +- **Copy error details** — copies a compact plain-text summary (layer, code, provider/model, error message) you can paste into a bug report or Discord. The layer comes from the same error classifier the agent's retry loop uses, so it reflects the real failure semantics, not a guess from the message text. Older backends that predate the descriptor still render the card with a -generic title and the Retry / Open logs / Copy diagnostics actions. +generic title and the Retry / Open logs / Copy error details actions. Boot logs land in `HERMES_HOME/logs/desktop.log` (it includes backend output and recent Python tracebacks) — check it first if the app reports a boot failure. You can also tail it from the CLI: