From bf44d5b79759c8aa2cce9e972f58e212b9b550ed Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Mon, 19 Oct 2026 18:34:56 +0800 Subject: [PATCH] chore: remove confirmed dead code Remove 52 unreferenced main-switch-domain i18n keys (families: label.*x20, memory.*x9, tool.*x9, hooks.*x8, agents.*x6) from all language catalogs (447 case/return pairs across 10 files, -898 lines). Verified via four channels: zero exact-literal references repo-wide, no prefix concatenation forms, Sprintf("tool.%s") in span_tree.go builds span names only (disjoint vocabulary, never fed to i18n lookup), and per-family bare-prefix guard found only unrelated JSON role names. Build (-tags goolm), go vet ./internal/tui/, and TestI18N* all pass. Co-Authored-By: ggcode --- internal/tui/i18n_de.go | 86 --------------------------------- internal/tui/i18n_en.go | 104 ---------------------------------------- internal/tui/i18n_es.go | 86 --------------------------------- internal/tui/i18n_fr.go | 86 --------------------------------- internal/tui/i18n_ja.go | 86 --------------------------------- internal/tui/i18n_ko.go | 86 --------------------------------- internal/tui/i18n_pt.go | 88 ---------------------------------- internal/tui/i18n_ru.go | 86 --------------------------------- internal/tui/i18n_vi.go | 86 --------------------------------- internal/tui/i18n_zh.go | 104 ---------------------------------------- 10 files changed, 898 deletions(-) diff --git a/internal/tui/i18n_de.go b/internal/tui/i18n_de.go index 37c773c42..ad384d3f8 100644 --- a/internal/tui/i18n_de.go +++ b/internal/tui/i18n_de.go @@ -15,8 +15,6 @@ func deCatalog(key string) string { // --- Agents --- case "agents.idle": return "inaktiv" - case "agents.running": - return "%d aktiv" case "cron.firing": return "⏰ Cron-Job ausgelöst" case "activity.idle": @@ -107,32 +105,16 @@ func deCatalog(key string) string { return "Sitzung" case "label.agents": return "Agenten" - case "label.cwd": - return "Verz." case "label.branch": return "Branch" case "label.context": return "Kontext" case "label.skills": return "Fähigkeiten" - case "label.activity": - return "Aktivität" - case "label.window": - return "Fenster" - case "label.usage": - return "Nutzung" - case "label.compact": - return "kompakt" case "label.total": return "gesamt" case "label.cost": return "gesch. Kosten" - case "label.approval_policy": - return "Genehmigung" - case "label.tool_policy": - return "Werkzeuge" - case "label.agent_policy": - return "Agent" case "label.tool": return "Werkzeug" case "label.input": @@ -145,28 +127,6 @@ func deCatalog(key string) string { return "Cache-Schreiben" case "label.cache_hit": return "Cache-Treffer" - case "label.turns": - return "Züge" - case "label.avg_ttft": - return "Ø TTFT" - case "label.p95_ttft": - return "p95 TTFT" - case "label.avg_duration": - return "Ø Dauer" - case "label.p95_duration": - return "p95 Dauer" - case "label.avg_think": - return "Ø Denken" - case "label.avg_tps": - return "Ø TPS" - case "label.p95_tps": - return "P95 TPS" - case "label.fail_rate": - return "Fehlerrate" - case "label.slow_tools": - return "langsame Werkz." - case "label.recent_turns": - return "aktuelle Züge" case "label.file": return "Datei" case "label.directory": @@ -304,24 +264,6 @@ func deCatalog(key string) string { // --- Tools --- case "status.tools_used": return "%d Werkzeuge verwendet" - case "tool.done": - return "fertig" - case "tool.failed": - return "fehlgeschlagen" - case "tool.no_output": - return "keine Ausgabe" - case "tool.output": - return "ausgabe" - case "tool.content": - return "inhalt" - case "tool.match": - return "treffer" - case "tool.matches": - return "treffer" - case "tool.entry": - return "eintrag" - case "tool.result": - return "ergebnis" // --- Approval --- case "approval.rejected": @@ -650,12 +592,6 @@ func deCatalog(key string) string { // --- Memory --- case "memory.auto_unavailable": return "Auto-Memory nicht initialisiert.\n\n" - case "memory.list_failed": - return "Fehler beim Auflisten der Erinnerungen: %v\n\n" - case "memory.none": - return "Keine Auto-Erinnerungen gespeichert.\n\n" - case "memory.auto_title": - return "Auto-Erinnerungen:\n" case "memory.clear_failed": return "Fehler beim Löschen der Erinnerungen: %v\n\n" case "memory.cleared": @@ -674,18 +610,6 @@ func deCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Memory:\n" - case "memory.project": - return "Projekt-Memory:\n" - case "memory.project_none": - return " Keine Projekt-Memory-Dateien geladen.\n" - case "memory.auto": - return "Auto-Memory:\n" - case "memory.auto_none": - return " Keine Auto-Erinnerungen geladen.\n" - case "memory.usage": - return "\nVerwendung: /memory [list|clear]\n\n" // --- Compact --- case "compact.unavailable": @@ -824,16 +748,6 @@ func deCatalog(key string) string { return "Kein Bild in der Zwischenablage gefunden. Unter Windows wird Ctrl+V oft vom Terminal abgefangen. Versuchen Sie Ctrl+Shift+V oder /image paste." // --- Agents --- - case "agents.unavailable": - return "Sub-Agent-Manager nicht konfiguriert.\n\n" - case "agents.none": - return "Noch keine Sub-Agenten erstellt.\nVerwendung: Die LLM kann das spawn_agent Werkzeug verwenden, um Sub-Agenten zu erstellen.\n\n" - case "agents.title": - return "%d Sub-Agent(en):\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\n/agent für Details verwenden, /agent cancel zum Abbrechen.\n\n" case "agent.usage": return "Verwendung: /agent oder /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_en.go b/internal/tui/i18n_en.go index e7bdecd61..9595c94f6 100644 --- a/internal/tui/i18n_en.go +++ b/internal/tui/i18n_en.go @@ -10,8 +10,6 @@ func enCatalog(key string) string { return "ephemeral" case "agents.idle": return "idle" - case "agents.running": - return "%d running" case "cron.firing": return "⏰ Cron job triggered" case "activity.idle": @@ -100,32 +98,16 @@ func enCatalog(key string) string { return "session" case "label.agents": return "agents" - case "label.cwd": - return "cwd" case "label.branch": return "branch" case "label.context": return "context" case "label.skills": return "skills" - case "label.activity": - return "activity" - case "label.window": - return "window" - case "label.usage": - return "usage" - case "label.compact": - return "compact" case "label.total": return "total" case "label.cost": return "est. cost" - case "label.approval_policy": - return "approval" - case "label.tool_policy": - return "tools" - case "label.agent_policy": - return "agent" case "label.tool": return "tool" case "label.input": @@ -138,28 +120,6 @@ func enCatalog(key string) string { return "cache write" case "label.cache_hit": return "cache hit" - case "label.turns": - return "turns" - case "label.avg_ttft": - return "avg ttft" - case "label.p95_ttft": - return "p95 ttft" - case "label.avg_duration": - return "avg dur" - case "label.p95_duration": - return "p95 dur" - case "label.avg_think": - return "avg think" - case "label.avg_tps": - return "avg tps" - case "label.p95_tps": - return "p95 tps" - case "label.fail_rate": - return "fail rate" - case "label.slow_tools": - return "slow tools" - case "label.recent_turns": - return "recent turns" case "label.file": return "file" case "label.directory": @@ -292,24 +252,6 @@ func enCatalog(key string) string { return " ↑↓←→ switch Esc close" case "status.tools_used": return "%d tools used" - case "tool.done": - return "done" - case "tool.failed": - return "failed" - case "tool.no_output": - return "no output" - case "tool.output": - return "output" - case "tool.content": - return "content" - case "tool.match": - return "match" - case "tool.matches": - return "matches" - case "tool.entry": - return "entry" - case "tool.result": - return "result" case "approval.rejected": return " Rejected.\n" case "approval.allow": @@ -721,12 +663,6 @@ func enCatalog(key string) string { return "Exported %d learnings to %s" case "traj.imported": return "Imported %d new learnings (duplicates skipped)" - case "memory.list_failed": - return "Error listing memories: %v\n\n" - case "memory.none": - return "No auto memories saved.\n\n" - case "memory.auto_title": - return "Auto Memories:\n" case "memory.clear_failed": return "Error clearing memories: %v\n\n" case "memory.cleared": @@ -745,18 +681,6 @@ func enCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Memory:\n" - case "memory.project": - return "Project Memory:\n" - case "memory.project_none": - return " No project memory files loaded.\n" - case "memory.auto": - return "Auto Memory:\n" - case "memory.auto_none": - return " No auto memories loaded.\n" - case "memory.usage": - return "\nUsage: /memory [list|clear]\n\n" case "compact.unavailable": return "Context manager not available.\n\n" case "compact.failed": @@ -831,8 +755,6 @@ func enCatalog(key string) string { return "not checked yet" case "update.restarting": return "Restarting to apply the update..." - case "label.tools": - return "Tools" case "label.active": return "Active" case "label.tasks": @@ -885,16 +807,6 @@ func enCatalog(key string) string { return "Could not paste an image from the clipboard: %v" case "image.clipboard_no_image_windows": return "No image found in clipboard. On Windows, Ctrl+V is often intercepted by the terminal. Try Ctrl+Shift+V or /image paste instead." - case "agents.unavailable": - return "Sub-agent manager not configured.\n\n" - case "agents.none": - return "No sub-agents spawned yet.\nUsage: LLM can use spawn_agent tool to create sub-agents.\n\n" - case "agents.title": - return "%d sub-agent(s):\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\nUse /agent for details, /agent cancel to cancel.\n\n" case "agent.usage": return "Usage: /agent or /agent cancel \n\n" case "agent.cancelled": @@ -1003,24 +915,10 @@ func enCatalog(key string) string { return "Stage changes and generate an AI commit message from the diff" case "slash.hooks": return "Open hooks configuration panel" - case "hooks.title": - return "Hooks Configuration" case "hooks.events": return "Events" - case "hooks.hooks": - return "Hooks" case "hooks.noHooks": return "(no hooks configured for this event)" - case "hooks.add": - return "+ Add Hook" - case "hooks.delete": - return "Delete" - case "hooks.edit": - return "Edit" - case "hooks.toggleInject": - return "Toggle Inject" - case "hooks.close": - return "Esc: Close" case "hooks.event.onUserMessage": return "On User Message" case "hooks.event.preToolUse": @@ -1057,8 +955,6 @@ func enCatalog(key string) string { return "hook updated" case "hooks.msg.toggled": return "inject_output toggled" - case "hooks.msg.saved": - return "hooks saved to config" case "hooks.addTitle": return " Add Hook " case "hooks.editTitle": diff --git a/internal/tui/i18n_es.go b/internal/tui/i18n_es.go index e094968ea..492572875 100644 --- a/internal/tui/i18n_es.go +++ b/internal/tui/i18n_es.go @@ -12,8 +12,6 @@ func esCatalog(key string) string { return "efímera" case "agents.idle": return "inactivo" - case "agents.running": - return "%d en ejecución" case "cron.firing": return "⏰ tarea cron activada" case "activity.idle": @@ -100,32 +98,16 @@ func esCatalog(key string) string { return "sesión" case "label.agents": return "agentes" - case "label.cwd": - return "dir. actual" case "label.branch": return "rama" case "label.context": return "contexto" case "label.skills": return "habilidades" - case "label.activity": - return "actividad" - case "label.window": - return "ventana" - case "label.usage": - return "uso" - case "label.compact": - return "compacto" case "label.total": return "total" case "label.cost": return "costo est." - case "label.approval_policy": - return "aprobación" - case "label.tool_policy": - return "herramientas" - case "label.agent_policy": - return "agente" case "label.tool": return "herramienta" case "label.input": @@ -138,28 +120,6 @@ func esCatalog(key string) string { return "escritura cache" case "label.cache_hit": return "aciertos cache" - case "label.turns": - return "turnos" - case "label.avg_ttft": - return "ttft medio" - case "label.p95_ttft": - return "ttft p95" - case "label.avg_duration": - return "dur. media" - case "label.p95_duration": - return "dur. p95" - case "label.avg_think": - return "pens. medio" - case "label.avg_tps": - return "tps medio" - case "label.p95_tps": - return "p95 tps" - case "label.fail_rate": - return "tasa fallos" - case "label.slow_tools": - return "herr. lentas" - case "label.recent_turns": - return "turnos recientes" case "label.file": return "archivo" case "label.directory": @@ -280,24 +240,6 @@ func esCatalog(key string) string { return " ↑↓←→ cambiar Esc cerrar" case "status.tools_used": return "%d herramientas usadas" - case "tool.done": - return "completado" - case "tool.failed": - return "fallido" - case "tool.no_output": - return "sin salida" - case "tool.output": - return "salida" - case "tool.content": - return "contenido" - case "tool.match": - return "coincidencia" - case "tool.matches": - return "coincidencias" - case "tool.entry": - return "entrada" - case "tool.result": - return "resultado" case "approval.rejected": return " Rechazado.\n" case "approval.allow": @@ -588,12 +530,6 @@ func esCatalog(key string) string { return "\nUse /undo para revertir la edición más reciente, /checkpoints para detalles.\n\n" case "memory.auto_unavailable": return "Memoria automatica no inicializada.\n\n" - case "memory.list_failed": - return "Error al listar memorias: %v\n\n" - case "memory.none": - return "Sin memorias automaticas guardadas.\n\n" - case "memory.auto_title": - return "Memorias Automaticas:\n" case "memory.clear_failed": return "Error al limpiar memorias: %v\n\n" case "memory.cleared": @@ -612,18 +548,6 @@ func esCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Memoria:\n" - case "memory.project": - return "Memoria del Proyecto:\n" - case "memory.project_none": - return " Sin archivos de memoria de proyecto cargados.\n" - case "memory.auto": - return "Memoria Automatica:\n" - case "memory.auto_none": - return " Sin memorias automaticas cargadas.\n" - case "memory.usage": - return "\nUso: /memory [list|clear]\n\n" case "compact.unavailable": return "Gestor de contexto no disponible.\n\n" case "compact.failed": @@ -744,16 +668,6 @@ func esCatalog(key string) string { return "No se pudo pegar una imagen del portapapeles: %v" case "image.clipboard_no_image_windows": return "Sin imagen en el portapapeles. En Windows, Ctrl+V a menudo es interceptado por la terminal. Pruebe Ctrl+Shift+V o /image paste." - case "agents.unavailable": - return "Gestor de sub-agentes no configurado.\n\n" - case "agents.none": - return "Sin sub-agentes creados aún.\nUso: el LLM puede usar la herramienta spawn_agent para crear sub-agentes.\n\n" - case "agents.title": - return "%d sub-agente(s):\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\nUse /agent para detalles, /agent cancel para cancelar.\n\n" case "agent.usage": return "Uso: /agent o /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_fr.go b/internal/tui/i18n_fr.go index 9f76eb136..85d864495 100644 --- a/internal/tui/i18n_fr.go +++ b/internal/tui/i18n_fr.go @@ -12,8 +12,6 @@ func frCatalog(key string) string { return "éphémère" case "agents.idle": return "inactif" - case "agents.running": - return "%d en cours" case "cron.firing": return "⏰ Tâche cron déclenchée" case "activity.idle": @@ -100,32 +98,16 @@ func frCatalog(key string) string { return "session" case "label.agents": return "agents" - case "label.cwd": - return "rép. courant" case "label.branch": return "branche" case "label.context": return "contexte" case "label.skills": return "compétences" - case "label.activity": - return "activité" - case "label.window": - return "fenêtre" - case "label.usage": - return "utilisation" - case "label.compact": - return "compact" case "label.total": return "total" case "label.cost": return "coût est." - case "label.approval_policy": - return "approbation" - case "label.tool_policy": - return "outils" - case "label.agent_policy": - return "agent" case "label.tool": return "outil" case "label.input": @@ -138,28 +120,6 @@ func frCatalog(key string) string { return "écriture cache" case "label.cache_hit": return "hits cache" - case "label.turns": - return "tours" - case "label.avg_ttft": - return "ttft moyen" - case "label.p95_ttft": - return "ttft p95" - case "label.avg_duration": - return "dur. moyenne" - case "label.p95_duration": - return "dur. p95" - case "label.avg_think": - return "réflex. moyenne" - case "label.avg_tps": - return "tps moyen" - case "label.p95_tps": - return "p95 tps" - case "label.fail_rate": - return "taux échec" - case "label.slow_tools": - return "outils lents" - case "label.recent_turns": - return "tours récents" case "label.file": return "fichier" case "label.directory": @@ -280,24 +240,6 @@ func frCatalog(key string) string { return " ↑↓←→ changer Esc fermér" case "status.tools_used": return "%d outils utilisés" - case "tool.done": - return "terminé" - case "tool.failed": - return "échoué" - case "tool.no_output": - return "sans sortie" - case "tool.output": - return "sortie" - case "tool.content": - return "contenu" - case "tool.match": - return "correspondance" - case "tool.matches": - return "correspondances" - case "tool.entry": - return "entrée" - case "tool.result": - return "résultat" case "approval.rejected": return " Rejeté.\n" case "approval.allow": @@ -588,12 +530,6 @@ func frCatalog(key string) string { return "\nUtilisez /undo pour annulér l'édition la plus récente, /checkpoints pour les détails.\n\n" case "memory.auto_unavailable": return "Mémoire automatique non initialisée.\n\n" - case "memory.list_failed": - return "Erreur lors du listâge des mémoires: %v\n\n" - case "memory.none": - return "Aucune mémoire automatique sauvegardée.\n\n" - case "memory.auto_title": - return "Mémoires Automatiques:\n" case "memory.clear_failed": return "Erreur lors du nettoyâge des mémoires: %v\n\n" case "memory.cleared": @@ -612,18 +548,6 @@ func frCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Mémoire:\n" - case "memory.project": - return "Mémoire du Projet:\n" - case "memory.project_none": - return " Aucun fichier de mémoire de projet chargé.\n" - case "memory.auto": - return "Mémoire Automatique:\n" - case "memory.auto_none": - return " Aucune mémoire automatique chargée.\n" - case "memory.usage": - return "\nUsâge: /memory [list|clear]\n\n" case "compact.unavailable": return "Gestionnaire de contexte non disponible.\n\n" case "compact.failed": @@ -744,16 +668,6 @@ func frCatalog(key string) string { return "Impossible de coller une imâge du presse-papiers: %v" case "image.clipboard_no_image_windows": return "Aucune imâge dans le presse-papiers. Sous Windows, Ctrl+V est souvent intercepte par le terminal. Essayez Ctrl+Shift+V ou /imâge paste." - case "agents.unavailable": - return "Gestionnaire de sous-agents non configuré.\n\n" - case "agents.none": - return "Aucun sous-agent créé pour le moment.\nUsâge: le LLM peut utilisér l'outil spawn_agent pour créer des sous-agents.\n\n" - case "agents.title": - return "%d sous-agent(s):\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\nUtilisez /agent pour les détails, /agent cancel pour annulér.\n\n" case "agent.usage": return "Usâge: /agent ou /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_ja.go b/internal/tui/i18n_ja.go index 3a179458a..e35e6d6b6 100644 --- a/internal/tui/i18n_ja.go +++ b/internal/tui/i18n_ja.go @@ -11,8 +11,6 @@ func jaCatalog(key string) string { return "一時的" case "agents.idle": return "アイドル" - case "agents.running": - return "%d 実行中" case "cron.firing": return "実行中" case "activity.idle": @@ -99,32 +97,16 @@ func jaCatalog(key string) string { return "セッション" case "label.agents": return "エージェント" - case "label.cwd": - return "作業ディレクトリ" case "label.branch": return "ブランチ" case "label.context": return "コンテキスト" case "label.skills": return "スキル" - case "label.activity": - return "アクティビティ" - case "label.window": - return "ウィンドウ" - case "label.usage": - return "使用量" - case "label.compact": - return "圧縮" case "label.total": return "合計" case "label.cost": return "コスト" - case "label.approval_policy": - return "承認" - case "label.tool_policy": - return "ツール" - case "label.agent_policy": - return "エージェント" case "label.tool": return "ツール" case "label.input": @@ -137,28 +119,6 @@ func jaCatalog(key string) string { return "キャッシュ書込" case "label.cache_hit": return "キャッシュヒット" - case "label.turns": - return "ターン" - case "label.avg_ttft": - return "平均TTFT" - case "label.p95_ttft": - return "P95 TTFT" - case "label.avg_duration": - return "平均時間" - case "label.p95_duration": - return "P95時間" - case "label.avg_think": - return "平均思考" - case "label.avg_tps": - return "平均TPS" - case "label.p95_tps": - return "P95 TPS" - case "label.fail_rate": - return "失敗率" - case "label.slow_tools": - return "低速ツール" - case "label.recent_turns": - return "最近のターン" case "label.file": return "ファイル" case "label.directory": @@ -279,24 +239,6 @@ func jaCatalog(key string) string { return " ↑↓←→ 切替 Esc 閉じる" case "status.tools_used": return "ツール %d 回使用" - case "tool.done": - return "完了" - case "tool.failed": - return "失敗" - case "tool.no_output": - return "出力なし" - case "tool.output": - return "出力" - case "tool.content": - return "内容" - case "tool.match": - return "一致" - case "tool.matches": - return "一致" - case "tool.entry": - return "エントリ" - case "tool.result": - return "結果" case "approval.rejected": return "拒否されました" case "approval.allow": @@ -633,12 +575,6 @@ func jaCatalog(key string) string { return "ファイルを選択" case "memory.auto_unavailable": return "自動メモリが初期化されていません。\n\n" - case "memory.list_failed": - return "メモリ一覧の取得エラー: %v\n\n" - case "memory.none": - return "メモリがありません" - case "memory.auto_title": - return "自動メモリ:\n" case "memory.clear_failed": return "メモリのクリアエラー: %v\n\n" case "memory.cleared": @@ -657,18 +593,6 @@ func jaCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "メモリ" - case "memory.project": - return "プロジェクト" - case "memory.project_none": - return " プロジェクトメモリファイルが読み込まれていません。\n" - case "memory.auto": - return "自動メモリ:\n" - case "memory.auto_none": - return " 自動メモリが読み込まれていません。\n" - case "memory.usage": - return "\n使用法: /memory [list|clear]\n\n" case "compact.unavailable": return "コンテキストマネージャーが利用できません。\n\n" case "compact.failed": @@ -789,16 +713,6 @@ func jaCatalog(key string) string { return "クリップボードから画像を貼り付けできませんでした: %v" case "image.clipboard_no_image_windows": return "クリップボードに画像が見つかりません。WindowsではCtrl+Vが端末に遮断されることがあります。Ctrl+Shift+Vまたは/image pasteを試してください。" - case "agents.unavailable": - return "サブエージェント管理が利用できません" - case "agents.none": - return "アクティブなサブエージェントがありません" - case "agents.title": - return "%d 個のサブエージェント:\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "タブでサブエージェントを選択、Enter で送信" case "agent.usage": return "使用法: /agent または /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_ko.go b/internal/tui/i18n_ko.go index 7213de1ba..17bfbedab 100644 --- a/internal/tui/i18n_ko.go +++ b/internal/tui/i18n_ko.go @@ -16,8 +16,6 @@ func koCatalog(key string) string { return "임시" case "agents.idle": return "대기 중" - case "agents.running": - return "%d개 실행 중" case "cron.firing": return "실행 중" case "activity.idle": @@ -104,32 +102,16 @@ func koCatalog(key string) string { return "세션" case "label.agents": return "에이전트" - case "label.cwd": - return "작업 디렉토리" case "label.branch": return "브랜치" case "label.context": return "컨텍스트" case "label.skills": return "스킬" - case "label.activity": - return "활동" - case "label.window": - return "창" - case "label.usage": - return "사용량" - case "label.compact": - return "압축" case "label.total": return "합계" case "label.cost": return "예상 비용" - case "label.approval_policy": - return "승인" - case "label.tool_policy": - return "도구" - case "label.agent_policy": - return "에이전트" case "label.tool": return "도구" case "label.input": @@ -142,28 +124,6 @@ func koCatalog(key string) string { return "캐시 쓰기" case "label.cache_hit": return "캐시 적중" - case "label.turns": - return "턴" - case "label.avg_ttft": - return "평균 TTFT" - case "label.p95_ttft": - return "P95 TTFT" - case "label.avg_duration": - return "평균 소요" - case "label.p95_duration": - return "P95 소요" - case "label.avg_think": - return "평균 사고" - case "label.avg_tps": - return "평균 TPS" - case "label.p95_tps": - return "P95 TPS" - case "label.fail_rate": - return "실패율" - case "label.slow_tools": - return "느린 도구" - case "label.recent_turns": - return "최근 턴" case "label.file": return "파일" case "label.directory": @@ -284,24 +244,6 @@ func koCatalog(key string) string { return " ↑↓←→ 전환 Esc 닫기" case "status.tools_used": return "도구 %d회 사용" - case "tool.done": - return "완료" - case "tool.failed": - return "실패" - case "tool.no_output": - return "출력 없음" - case "tool.output": - return "출력" - case "tool.content": - return "내용" - case "tool.match": - return "일치" - case "tool.matches": - return "일치" - case "tool.entry": - return "항목" - case "tool.result": - return "결과" case "approval.rejected": return "거부됨" case "approval.allow": @@ -592,12 +534,6 @@ func koCatalog(key string) string { return "파일 선택" case "memory.auto_unavailable": return "자동 메모리가 초기화되지 않았습니다.\n\n" - case "memory.list_failed": - return "메모리 목록 조회 오류: %v\n\n" - case "memory.none": - return "메모리가 없습니다" - case "memory.auto_title": - return "자동 메모리:\n" case "memory.clear_failed": return "메모리 삭제 오류: %v\n\n" case "memory.cleared": @@ -616,18 +552,6 @@ func koCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "메모리" - case "memory.project": - return "프로젝트 메모리:\n" - case "memory.project_none": - return " 로드된 프로젝트 메모리 파일이 없습니다.\n" - case "memory.auto": - return "자동 메모리:\n" - case "memory.auto_none": - return " 로드된 자동 메모리가 없습니다.\n" - case "memory.usage": - return "\n사용법: /memory [list|clear]\n\n" case "compact.unavailable": return "컨텍스트 관리자를 사용할 수 없습니다.\n\n" case "compact.failed": @@ -748,16 +672,6 @@ func koCatalog(key string) string { return "클립보드에서 이미지를 붙여널 수 없습니다: %v" case "image.clipboard_no_image_windows": return "클립보드에서 이미지를 찾을 수 없습니다. Windows에서는 Ctrl+V가 종종 가로채집니다." - case "agents.unavailable": - return "서브에이전트 관리자가 구성되지 않았습니다.\n\n" - case "agents.none": - return "아직 생성된 서브에이전트가 없습니다.\nLLLM이 spawn_agent 도구를 사용하여 서브에이전트를 생성할 수 있습니다.\n\n" - case "agents.title": - return "서브에이전트 %d개:\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\n/agent 로 상세 정보, /agent cancel 로 취소하세요.\n\n" case "agent.usage": return "사용법: /agent 또는 /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_pt.go b/internal/tui/i18n_pt.go index a2aa8809e..57d3b5282 100644 --- a/internal/tui/i18n_pt.go +++ b/internal/tui/i18n_pt.go @@ -15,8 +15,6 @@ func ptCatalog(key string) string { return "Endpoint" case "label.session": return "Sessão" - case "label.tools": - return "Ferramentas" case "label.context": return "Contexto" case "label.cost": @@ -163,12 +161,6 @@ func ptCatalog(key string) string { return "Arquivos modificados pelo agente (%d arquivos, %d edições):" // ── Memory ──────────────────────────────────────────────────── - case "memory.none": - return "Nenhuma memória automática salva." - case "memory.title": - return "Memória:" - case "memory.auto_title": - return "Memórias Automáticas:" case "memory.cleared": return "Todas as memórias automáticas foram limpas." case "memory.forget_usage": @@ -245,20 +237,8 @@ func ptCatalog(key string) string { return "Agente: %s\nStatus: %s\nTarefa: %s\n" case "agent.usage": return "Uso: /agent ou /agent cancel \n\n" - case "agents.hint": - return "\nUse /agent para detalhes, /agent cancel para cancelar.\n\n" case "agents.idle": return "inativo" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.none": - return "Nenhum sub-agente criado ainda.\nUso: o LLM pode usar a ferramenta spawn_agent para criar sub-agentes.\n\n" - case "agents.running": - return "%d em execução" - case "agents.title": - return "%d sub-agente(s):\n" - case "agents.unavailable": - return "Gerenciador de sub-agentes não configurado.\n\n" // ── Approval ────────────────────────────────────────────────── case "approval.accept": @@ -465,24 +445,8 @@ func ptCatalog(key string) string { return "Knight não está disponível" // ── Labels ──────────────────────────────────────────────────── - case "label.activity": - return "atividade" - case "label.agent_policy": - return "agente" case "label.agents": return "agentes" - case "label.approval_policy": - return "aprovação" - case "label.avg_duration": - return "duração média" - case "label.avg_think": - return "think médio" - case "label.avg_tps": - return "tps médio" - case "label.p95_tps": - return "p95 tps" - case "label.avg_ttft": - return "ttft médio" case "label.branch": return "branch" case "label.cache_hit": @@ -491,14 +455,8 @@ func ptCatalog(key string) string { return "leitura cache" case "label.cache_write": return "escrita cache" - case "label.compact": - return "compactar" - case "label.cwd": - return "cwd" case "label.directory": return "diretório" - case "label.fail_rate": - return "taxa falha" case "label.file": return "arquivo" case "label.input": @@ -507,30 +465,14 @@ func ptCatalog(key string) string { return "Mais recente" case "label.output": return "saída" - case "label.p95_duration": - return "p95 duração" - case "label.p95_ttft": - return "p95 ttft" - case "label.recent_turns": - return "turnos recentes" case "label.skills": return "skills" - case "label.slow_tools": - return "ferr. lentas" case "label.tool": return "ferramenta" - case "label.tool_policy": - return "ferramentas" case "label.total": return "total" - case "label.turns": - return "turnos" - case "label.usage": - return "uso" case "label.version": return "Versão" - case "label.window": - return "janela" // ── LAN Chat ────────────────────────────────────────────────── case "lanchat.unavailable": @@ -565,22 +507,10 @@ func ptCatalog(key string) string { return "Servidores MCP:\n" // ── Memory ──────────────────────────────────────────────────── - case "memory.auto": - return "Memória Automática:\n" - case "memory.auto_none": - return " Nenhuma memória automática carregada.\n" case "memory.auto_unavailable": return "Memória automática não inicializada.\n\n" case "memory.clear_failed": return "Erro ao limpar memórias: %v\n\n" - case "memory.list_failed": - return "Erro ao listar memórias: %v\n\n" - case "memory.project": - return "Memória do Projeto:\n" - case "memory.project_none": - return " Nenhum arquivo de memória do projeto carregado.\n" - case "memory.usage": - return "\nUso: /memory [list|clear]\n\n" // ── Metrics ─────────────────────────────────────────────────── case "metrics.empty": @@ -781,24 +711,6 @@ func ptCatalog(key string) string { return "Lista de todos:\n%s\n\n" // ── Tool ────────────────────────────────────────────────────── - case "tool.content": - return "conteúdo" - case "tool.done": - return "concluído" - case "tool.entry": - return "entrada" - case "tool.failed": - return "falhou" - case "tool.match": - return "correspondência" - case "tool.matches": - return "correspondências" - case "tool.no_output": - return "sem saída" - case "tool.output": - return "saída" - case "tool.result": - return "resultado" // ── Tunnel ──────────────────────────────────────────────────── case "tunnel.mobile_connected": diff --git a/internal/tui/i18n_ru.go b/internal/tui/i18n_ru.go index d844b5405..cb8970e8a 100644 --- a/internal/tui/i18n_ru.go +++ b/internal/tui/i18n_ru.go @@ -15,8 +15,6 @@ func ruCatalog(key string) string { // --- Agents --- case "agents.idle": return "ожидание" - case "agents.running": - return "%d активных" case "cron.firing": return "⏰ Сработала задача cron" case "activity.idle": @@ -107,32 +105,16 @@ func ruCatalog(key string) string { return "Сессия" case "label.agents": return "Агенты" - case "label.cwd": - return "Дир." case "label.branch": return "Ветвь" case "label.context": return "Контекст" case "label.skills": return "Навыки" - case "label.activity": - return "Активность" - case "label.window": - return "Окно" - case "label.usage": - return "Использ." - case "label.compact": - return "компакт." case "label.total": return "всего" case "label.cost": return "оц. стоимость" - case "label.approval_policy": - return "Подтверждение" - case "label.tool_policy": - return "Инструменты" - case "label.agent_policy": - return "Агент" case "label.tool": return "Инструмент" case "label.input": @@ -145,28 +127,6 @@ func ruCatalog(key string) string { return "Запись кэша" case "label.cache_hit": return "Попадание кэша" - case "label.turns": - return "Ходы" - case "label.avg_ttft": - return "Ø TTFT" - case "label.p95_ttft": - return "p95 TTFT" - case "label.avg_duration": - return "Ø длительность" - case "label.p95_duration": - return "p95 длительность" - case "label.avg_think": - return "Ø размышление" - case "label.avg_tps": - return "Ø TPS" - case "label.p95_tps": - return "P95 TPS" - case "label.fail_rate": - return "Уровень ошибок" - case "label.slow_tools": - return "медл. инструменты" - case "label.recent_turns": - return "недавние ходы" case "label.file": return "Файл" case "label.directory": @@ -304,24 +264,6 @@ func ruCatalog(key string) string { // --- Tools --- case "status.tools_used": return "%d инструментов использовано" - case "tool.done": - return "готово" - case "tool.failed": - return "ошибка" - case "tool.no_output": - return "нет вывода" - case "tool.output": - return "вывод" - case "tool.content": - return "содержимое" - case "tool.match": - return "совпадение" - case "tool.matches": - return "совпадений" - case "tool.entry": - return "запись" - case "tool.result": - return "результат" // --- Approval --- case "approval.rejected": @@ -642,12 +584,6 @@ func ruCatalog(key string) string { // --- Memory --- case "memory.auto_unavailable": return "Авто-память не инициализирована.\n\n" - case "memory.list_failed": - return "Ошибка получения списка воспоминаний: %v\n\n" - case "memory.none": - return "Нет сохранённых авто-воспоминаний.\n\n" - case "memory.auto_title": - return "Авто-воспоминания:\n" case "memory.clear_failed": return "Ошибка очистки воспоминаний: %v\n\n" case "memory.cleared": @@ -666,18 +602,6 @@ func ruCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Память:\n" - case "memory.project": - return "Память проекта:\n" - case "memory.project_none": - return " Нет загруженных файлов памяти проекта.\n" - case "memory.auto": - return "Авто-память:\n" - case "memory.auto_none": - return " Нет загруженных авто-воспоминаний.\n" - case "memory.usage": - return "\nИспользование: /memory [list|clear]\n\n" // --- Compact --- case "compact.unavailable": @@ -816,16 +740,6 @@ func ruCatalog(key string) string { return "Изображение в буфере обмена не найдено. В Windows Ctrl+V часто перехватывается терминалом. Попробуйте Ctrl+Shift+V или /image paste." // --- Agents --- - case "agents.unavailable": - return "Менеджер суб-агентов не настроен.\n\n" - case "agents.none": - return "Суб-агенты ещё не созданы.\nИспользование: LLM может использовать инструмент spawn_agent для создания суб-агентов.\n\n" - case "agents.title": - return "%d суб-агент(ов):\n" - case "agents.item": - return " %s [%s]%s — %s\n" - case "agents.hint": - return "\nИспользуйте /agent для деталей, /agent cancel для отмены.\n\n" case "agent.usage": return "Использование: /agent или /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_vi.go b/internal/tui/i18n_vi.go index d114db334..9944e4975 100644 --- a/internal/tui/i18n_vi.go +++ b/internal/tui/i18n_vi.go @@ -12,8 +12,6 @@ func viCatalog(key string) string { return "tạm thời" case "agents.idle": return "chờ" - case "agents.running": - return "%d đang chạy" case "cron.firing": return "Cron job đã kích hoạt" case "activity.idle": @@ -100,32 +98,16 @@ func viCatalog(key string) string { return "phiên" case "label.agents": return "tác tử" - case "label.cwd": - return "thư mục hiện tại" case "label.branch": return "nhánh" case "label.context": return "ngữ cảnh" case "label.skills": return "kỹ năng" - case "label.activity": - return "hoạt động" - case "label.window": - return "cửa sổ" - case "label.usage": - return "sử dụng" - case "label.compact": - return "nén" case "label.total": return "tổng" case "label.cost": return "chi phí ước tính" - case "label.approval_policy": - return "phê duyệt" - case "label.tool_policy": - return "công cụ" - case "label.agent_policy": - return "tác tử" case "label.tool": return "công cụ" case "label.input": @@ -138,28 +120,6 @@ func viCatalog(key string) string { return "ghi cache" case "label.cache_hit": return "trúng cache" - case "label.turns": - return "lượt" - case "label.avg_ttft": - return "ttft tb" - case "label.p95_ttft": - return "ttft p95" - case "label.avg_duration": - return "tg tb" - case "label.p95_duration": - return "tg p95" - case "label.avg_think": - return "suy nghĩ tb" - case "label.avg_tps": - return "tps tb" - case "label.p95_tps": - return "p95 tps" - case "label.fail_rate": - return "tỷ lệ lỗi" - case "label.slow_tools": - return "công cụ chậm" - case "label.recent_turns": - return "lượt gần đây" case "label.file": return "tệp" case "label.directory": @@ -280,24 +240,6 @@ func viCatalog(key string) string { return " ↑↓←→ chuyển Esc đóng" case "status.tools_used": return "đã dùng %d công cụ" - case "tool.done": - return "hoàn thành" - case "tool.failed": - return "lỗi" - case "tool.no_output": - return "không đầu ra" - case "tool.output": - return "đầu ra" - case "tool.content": - return "nội dung" - case "tool.match": - return "khớp" - case "tool.matches": - return "khớp" - case "tool.entry": - return "mục" - case "tool.result": - return "kết quả" case "approval.rejected": return " Đã từ chối.\n" case "approval.allow": @@ -588,12 +530,6 @@ func viCatalog(key string) string { return "\nDùng /undo để hoàn tác lần sửa gần nhất, /checkpoints để xem chi tiết.\n\n" case "memory.auto_unavailable": return "Auto memory chưa được khởi tạo.\n\n" - case "memory.list_failed": - return "Lỗi liệt kê bộ nhớ: %v\n\n" - case "memory.none": - return "Chưa có auto memory nào được lưu.\n\n" - case "memory.auto_title": - return "Bộ nhớ tự động:\n" case "memory.clear_failed": return "Lỗi xóa bộ nhớ: %v\n\n" case "memory.cleared": @@ -612,18 +548,6 @@ func viCatalog(key string) string { return "Memory %q restored to prompt injection.\n\n" case "memory.restore_failed": return "Error restoring memory: %v\n\n" - case "memory.title": - return "Bộ nhớ:\n" - case "memory.project": - return "Bộ nhớ dự án:\n" - case "memory.project_none": - return " Không có tệp bộ nhớ dự án nào được tải.\n" - case "memory.auto": - return "Bộ nhớ tự động:\n" - case "memory.auto_none": - return " Không có auto memory nào được tải.\n" - case "memory.usage": - return "\nCách dùng: /memory [list|clear]\n\n" case "compact.unavailable": return "Context manager không khả dụng.\n\n" case "compact.failed": @@ -744,16 +668,6 @@ func viCatalog(key string) string { return "Không thể dán ảnh từ clipboard: %v" case "image.clipboard_no_image_windows": return "Không tìm thấy ảnh trong clipboard. Trên Windows, Ctrl+V thường bị terminal chặn. Thử Ctrl+Shift+V hoặc /image paste." - case "agents.unavailable": - return "Trình quản lý sub-agent chưa được cấu hình.\n\n" - case "agents.none": - return "Chưa tạo sub-agent nào.\nCách dùng: LLM có thể dùng công cụ spawn_agent để tạo sub-agent.\n\n" - case "agents.title": - return "%d sub-agent:\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\nDùng /agent để xem chi tiết, /agent cancel để hủy.\n\n" case "agent.usage": return "Cách dùng: /agent hoặc /agent cancel \n\n" case "agent.cancelled": diff --git a/internal/tui/i18n_zh.go b/internal/tui/i18n_zh.go index 82a0544f1..ca68a7290 100644 --- a/internal/tui/i18n_zh.go +++ b/internal/tui/i18n_zh.go @@ -10,8 +10,6 @@ func zhCatalog(key string) string { return "临时会话" case "agents.idle": return "空闲" - case "agents.running": - return "%d 个运行中" case "activity.idle": return "空闲" case "panel.conversation": @@ -98,32 +96,16 @@ func zhCatalog(key string) string { return "会话" case "label.agents": return "子 Agent" - case "label.cwd": - return "目录" case "label.branch": return "分支" case "label.context": return "上下文" case "label.skills": return "技能" - case "label.activity": - return "活动" - case "label.window": - return "窗口" - case "label.usage": - return "占用" - case "label.compact": - return "压缩" case "label.total": return "总计" case "label.cost": return "预估费用" - case "label.approval_policy": - return "审批" - case "label.tool_policy": - return "工具" - case "label.agent_policy": - return "行为" case "label.tool": return "工具" case "label.input": @@ -136,28 +118,6 @@ func zhCatalog(key string) string { return "缓存写" case "label.cache_hit": return "缓存命中" - case "label.turns": - return "轮次" - case "label.avg_ttft": - return "平均首字" - case "label.p95_ttft": - return "P95首字" - case "label.avg_duration": - return "平均时长" - case "label.p95_duration": - return "P95时长" - case "label.avg_think": - return "平均思考" - case "label.avg_tps": - return "平均解码" - case "label.p95_tps": - return "P95解码" - case "label.fail_rate": - return "失败率" - case "label.slow_tools": - return "慢工具" - case "label.recent_turns": - return "最近轮次" case "label.file": return "文件" case "label.directory": @@ -300,24 +260,6 @@ func zhCatalog(key string) string { return " ↑↓←→ 切换 Esc 关闭" case "status.tools_used": return "已调用 %d 个工具" - case "tool.done": - return "完成" - case "tool.failed": - return "失败" - case "tool.no_output": - return "无输出" - case "tool.output": - return "输出" - case "tool.content": - return "内容" - case "tool.match": - return "匹配" - case "tool.matches": - return "匹配" - case "tool.entry": - return "项" - case "tool.result": - return "结果" case "approval.rejected": return " 已拒绝。\n" case "approval.allow": @@ -732,12 +674,6 @@ func zhCatalog(key string) string { return "已导出 %d 条学习到 %s" case "traj.imported": return "已导入 %d 条新学习(重复已跳过)" - case "memory.list_failed": - return "列出记忆失败:%v\n\n" - case "memory.none": - return "没有自动记忆。\n\n" - case "memory.auto_title": - return "自动记忆:\n" case "memory.clear_failed": return "清空记忆失败:%v\n\n" case "memory.cleared": @@ -756,18 +692,6 @@ func zhCatalog(key string) string { return "记忆 %q 已恢复注入。\n\n" case "memory.restore_failed": return "恢复记忆失败: %v\n\n" - case "memory.title": - return "记忆:\n" - case "memory.project": - return "项目记忆:\n" - case "memory.project_none": - return " 未加载项目记忆文件。\n" - case "memory.auto": - return "自动记忆:\n" - case "memory.auto_none": - return " 未加载自动记忆。\n" - case "memory.usage": - return "\n用法:/memory [list|clear]\n\n" case "compact.unavailable": return "上下文管理器不可用。\n\n" case "compact.failed": @@ -842,8 +766,6 @@ func zhCatalog(key string) string { return "尚未检查" case "update.restarting": return "正在重启以应用更新..." - case "label.tools": - return "工具调用" case "label.active": return "进行中" case "label.tasks": @@ -898,16 +820,6 @@ func zhCatalog(key string) string { return "剪贴板中没有找到图片。Windows 终端通常会拦截 Ctrl+V,请尝试 Ctrl+Shift+V 或输入 /image paste。" case "cron.firing": return "⏰ 定时任务触发" - case "agents.unavailable": - return "子 Agent 管理器未配置。\n\n" - case "agents.none": - return "还没有创建子 Agent。\n用法:LLM 可以使用 spawn_agent 工具创建子 Agent。\n\n" - case "agents.title": - return "%d 个子 Agent:\n" - case "agents.item": - return " %s [%s]%s - %s\n" - case "agents.hint": - return "\n使用 /agent 查看详情,/agent cancel 取消。\n\n" case "agent.usage": return "用法:/agent 或 /agent cancel \n\n" case "agent.cancelled": @@ -1018,24 +930,10 @@ func zhCatalog(key string) string { return "暂存变更并用 AI 从 diff 生成提交信息" case "slash.hooks": return "打开 hooks 配置面板" - case "hooks.title": - return "Hooks 配置" case "hooks.events": return "事件" - case "hooks.hooks": - return "Hooks" case "hooks.noHooks": return "(此事件暂无 hooks)" - case "hooks.add": - return "+ 添加 Hook" - case "hooks.delete": - return "删除" - case "hooks.edit": - return "编辑" - case "hooks.toggleInject": - return "切换注入" - case "hooks.close": - return "Esc: 关闭" case "hooks.event.onUserMessage": return "用户消息时" case "hooks.event.preToolUse": @@ -1072,8 +970,6 @@ func zhCatalog(key string) string { return "hook 已更新" case "hooks.msg.toggled": return "inject_output 已切换" - case "hooks.msg.saved": - return "hooks 已保存到配置" case "hooks.addTitle": return " 添加 Hook " case "hooks.editTitle":