From 78a9dc36c10d433c8c12fca9257b348d1b4f78c4 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Tue, 20 Oct 2026 00:35:52 +0800 Subject: [PATCH] chore: remove confirmed dead code Remove 24 dead i18n keys across 10 language catalogs (r67 scan, pool batch 1): - agent.* x7 (cancel_failed/cancelled/error/not_found/result/title/usage) - plugins.* x3 (none/title/unavailable) - image.attached + image.attached_hint - startup.banner / metrics.empty / queued.output - compact.done / config.language_set / config.title / mcp.title / status.title / hooks.toggleInject / context.unavailable / context.until_compact / activity.idle All verified zero-reference via 5-channel scan (go literals incl tests, dynamic prefix concat, frontend js/ts/html, json/yaml/sh/md, backtick variant) plus double-check against main worktree HEAD delta and the 4 uncommitted files. update.pm_hint.* x4 adjudicated ALIVE (dynamic concat update.go:140 + PackageManagerHint returns brew/scoop/snap/winget) - r66 pool ledger erratum. update.restart_failed deferred with update family. Baseline: origin/main d631d9058; go build/vet -tags goolm pass. Co-Authored-By: ggcode --- internal/tui/i18n_de.go | 46 --------------------------------------- internal/tui/i18n_en.go | 48 ----------------------------------------- internal/tui/i18n_es.go | 46 --------------------------------------- internal/tui/i18n_fr.go | 46 --------------------------------------- internal/tui/i18n_ja.go | 46 --------------------------------------- internal/tui/i18n_ko.go | 48 ----------------------------------------- internal/tui/i18n_pt.go | 46 --------------------------------------- internal/tui/i18n_ru.go | 46 --------------------------------------- internal/tui/i18n_vi.go | 46 --------------------------------------- internal/tui/i18n_zh.go | 48 ----------------------------------------- 10 files changed, 466 deletions(-) diff --git a/internal/tui/i18n_de.go b/internal/tui/i18n_de.go index 37c773c42..00d44801c 100644 --- a/internal/tui/i18n_de.go +++ b/internal/tui/i18n_de.go @@ -19,8 +19,6 @@ func deCatalog(key string) string { return "%d aktiv" case "cron.firing": return "⏰ Cron-Job ausgelöst" - case "activity.idle": - return "inaktiv" // --- Panel --- case "panel.conversation": @@ -173,10 +171,6 @@ func deCatalog(key string) string { return "Verzeichnis" // --- Context & metrics --- - case "context.unavailable": - return "Noch keine Kontextdaten" - case "metrics.empty": - return "Noch keine Metriken" case "im.none": return "Keine Adapter konfiguriert" case "im.summary": @@ -191,16 +185,12 @@ func deCatalog(key string) string { return "aktiviert • Neustart zum Initialisieren" case "im.status.not_started": return "nicht gestartet" - case "context.until_compact": - return "übrig" // --- Empty --- case "empty.ask": return "Fragen Sie nach einem Refactor, Bugfix, Erklärung oder Tests." case "empty.tips": return "Tipps: @pfad für Dateien, /? für Hilfe, Shift+Tab zum Moduswechsel." - case "startup.banner": - return "Terminal-UI wird vorbereitet und Start-Terminalrauschen wird gefiltert. Sie können sofort tippen; dieser Banner verschwindet, sobald der Start abgeschlossen ist." case "hint.autocomplete": return "Tab/Shift+Tab wechseln • Enter anwenden • Esc schließen" @@ -260,8 +250,6 @@ func deCatalog(key string) string { // --- Queued --- case "queued.count": return "%d eingereiht" - case "queued.output": - return "[eingereiht %d ausstehend]\n\n" case "interrupt.delivered": return "[an aktiven Lauf geliefert; Plan wird überarbeitet]\n" @@ -692,8 +680,6 @@ func deCatalog(key string) string { return "Kontext-Manager nicht verfügbar.\n\n" case "compact.failed": return "Komprimierung fehlgeschlagen: %v\n\n" - case "compact.done": - return "Unterhaltungsverlauf komprimiert.\n\n" case "compact.done_with_stats": return "Unterhaltungsverlauf komprimiert (%d → %d Tokens).\n\n" @@ -742,14 +728,8 @@ func deCatalog(key string) string { return "Konfig: model = %s\n\n" case "config.provider_set": return "Konfig: anbieter = %s\n\n" - case "config.language_set": - return "Konfig: sprache = %s\n\n" case "config.unknown_key": return "Unbekannter Konfig-Schlüssel: %s\nUnterstützt: model, provider, language\n\n" - case "config.title": - return "Aktuelle Konfiguration:\n" - case "status.title": - return "Status:\n" // --- Update --- case "panel.update": @@ -792,18 +772,10 @@ func deCatalog(key string) string { return "Warnung: Sowohl Benutzer- als auch systemweite ggcode-Installationen gefunden:\n Benutzer: %s\n System: %s\nDies kann zu PATH-Konflikten führen. Erwägen Sie, eine über Einstellungen > Apps zu deinstallieren.\n\n" // --- Plugins --- - case "plugins.unavailable": - return "Plugin-Manager nicht verfügbar.\n\n" - case "plugins.none": - return "Keine Plugins geladen.\n\n" - case "plugins.title": - return "Plugins:\n" // --- MCP --- case "mcp.none": return "Keine MCP-Server konfiguriert.\n\n" - case "mcp.title": - return "MCP-Server:\n" case "mcp.active_tools": return "Aktive Werkzeuge" case "mcp.more": @@ -814,10 +786,6 @@ func deCatalog(key string) string { return "Verwendung: /image oder /image paste\n" case "image.formats": return "Unterstützte Formate: PNG, JPEG, GIF, WebP (max. 20MB)\n\n" - case "image.attached": - return "Bild angehängt: %s\n" - case "image.attached_hint": - return "Nachricht senden, um das Bild einzuschließen, oder /image für ein weiteres.\n\n" case "image.clipboard_failed": return "Bild konnte nicht aus der Zwischenablage eingefügt werden: %v" case "image.clipboard_no_image_windows": @@ -834,20 +802,6 @@ func deCatalog(key string) string { 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": - return "Sub-Agent %s abgebrochen\n\n" - case "agent.cancel_failed": - return "%s konnte nicht abgebrochen werden (nicht gefunden oder nicht aktiv)\n\n" - case "agent.not_found": - return "Sub-Agent %s nicht gefunden\n\n" - case "agent.title": - return "Agent: %s\nStatus: %s\nAufgabe: %s\n" - case "agent.result": - return "Ergebnis: %s\n" - case "agent.error": - return "Fehler: %v\n" // --- Slash command descriptions --- case "slash.help": diff --git a/internal/tui/i18n_en.go b/internal/tui/i18n_en.go index e7bdecd61..fa6278129 100644 --- a/internal/tui/i18n_en.go +++ b/internal/tui/i18n_en.go @@ -14,8 +14,6 @@ func enCatalog(key string) string { return "%d running" case "cron.firing": return "⏰ Cron job triggered" - case "activity.idle": - return "idle" case "panel.conversation": return "Conversation" case "panel.composer": @@ -164,10 +162,6 @@ func enCatalog(key string) string { return "file" case "label.directory": return "directory" - case "context.unavailable": - return "No context data yet" - case "metrics.empty": - return "No metrics yet" case "im.none": return "No adapters configured" case "im.summary": @@ -182,14 +176,10 @@ func enCatalog(key string) string { return "enabled • restart to initialize" case "im.status.not_started": return "not started" - case "context.until_compact": - return "left" case "empty.ask": return "Ask for a refactor, bug fix, explanation, or tests." case "empty.tips": return "Tips: use @path to include files, /? for help, and Shift+Tab to change mode." - case "startup.banner": - return "Preparing the terminal UI and filtering startup terminal noise. You can type right away; this banner disappears once startup settles." case "hint.autocomplete": return "Tab/Shift+Tab cycle • Enter apply • Esc close" case "hint.mention": @@ -242,8 +232,6 @@ func enCatalog(key string) string { return "Ctrl+N unfollow" case "queued.count": return "%d queued" - case "queued.output": - return "[queued %d pending]\n\n" case "interrupt.delivered": return "[delivered to active run; revising plan]\n" case "status.thinking": @@ -761,8 +749,6 @@ func enCatalog(key string) string { return "Context manager not available.\n\n" case "compact.failed": return "Compact failed: %v\n\n" - case "compact.done": - return "Conversation history compacted.\n\n" case "compact.done_with_stats": return "Conversation history compacted (%d → %d tokens).\n\n" case "todo.cleared": @@ -805,14 +791,8 @@ func enCatalog(key string) string { return "Config: model = %s\n\n" case "config.provider_set": return "Config: provider = %s\n\n" - case "config.language_set": - return "Config: language = %s\n\n" case "config.unknown_key": return "Unknown config key: %s\nSupported: model, provider, language\n\n" - case "config.title": - return "Current Configuration:\n" - case "status.title": - return "Status:\n" case "panel.update": return "Update" case "label.version": @@ -859,16 +839,8 @@ func enCatalog(key string) string { return "Other ggcode installations detected on this system:\n%s\nIf a different ggcode appears first in PATH, consider updating it too or adjusting PATH order.\n\n" case "update.dual_scope": return "Warning: Both user and system-wide ggcode installations found:\n User: %s\n System: %s\nThis may cause PATH conflicts. Consider uninstalling one from Settings > Apps.\n\n" - case "plugins.unavailable": - return "Plugin manager not available.\n\n" - case "plugins.none": - return "No plugins loaded.\n\n" - case "plugins.title": - return "Plugins:\n" case "mcp.none": return "No MCP servers configured.\n\n" - case "mcp.title": - return "MCP Servers:\n" case "mcp.active_tools": return "Active tools" case "mcp.more": @@ -877,10 +849,6 @@ func enCatalog(key string) string { return "Usage: /image or /image paste\n" case "image.formats": return "Supported formats: PNG, JPEG, GIF, WebP (max 20MB)\n\n" - case "image.attached": - return "Image attached: %s\n" - case "image.attached_hint": - return "Send a message to include the image, or /image to attach another.\n\n" case "image.clipboard_failed": return "Could not paste an image from the clipboard: %v" case "image.clipboard_no_image_windows": @@ -895,20 +863,6 @@ func enCatalog(key string) string { 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": - return "Cancelled sub-agent %s\n\n" - case "agent.cancel_failed": - return "Could not cancel %s (not found or not running)\n\n" - case "agent.not_found": - return "Sub-agent %s not found\n\n" - case "agent.title": - return "Agent: %s\nStatus: %s\nTask: %s\n" - case "agent.result": - return "Result: %s\n" - case "agent.error": - return "Error: %v\n" case "slash.help": return "Show help message" case "slash.sessions": @@ -1017,8 +971,6 @@ func enCatalog(key string) string { return "Delete" case "hooks.edit": return "Edit" - case "hooks.toggleInject": - return "Toggle Inject" case "hooks.close": return "Esc: Close" case "hooks.event.onUserMessage": diff --git a/internal/tui/i18n_es.go b/internal/tui/i18n_es.go index e094968ea..a1b36a712 100644 --- a/internal/tui/i18n_es.go +++ b/internal/tui/i18n_es.go @@ -16,8 +16,6 @@ func esCatalog(key string) string { return "%d en ejecución" case "cron.firing": return "⏰ tarea cron activada" - case "activity.idle": - return "inactivo" case "panel.conversation": return "Conversación" case "panel.composer": @@ -164,10 +162,6 @@ func esCatalog(key string) string { return "archivo" case "label.directory": return "directorio" - case "context.unavailable": - return "Sin datos de contexto aún" - case "metrics.empty": - return "Sin métricas aún" case "im.none": return "Sin adaptadores configurados" case "im.summary": @@ -182,14 +176,10 @@ func esCatalog(key string) string { return "habilitado • reinicie para inicializar" case "im.status.not_started": return "no iniciado" - case "context.until_compact": - return "restánte" case "empty.ask": return "Pida una refactorización, corrección de errores, explicación o pruebas." case "empty.tips": return "Consejos: use @ruta para incluir archivos, /? para ayuda, y Shift+Tab para cambiar de modo." - case "startup.banner": - return "Preparando la interfaz de terminal y filtrando el ruido de inicio. Puede escribir de inmediato; este banner desaparece una vez que el inicio se complete." case "hint.autocomplete": return "Tab/Shift+Tab ciclo • Enter aplicar • Esc cerrar" case "hint.mention": @@ -242,8 +232,6 @@ func esCatalog(key string) string { return "Ctrl+N dejar seguir" case "queued.count": return "%d en cola" - case "queued.output": - return "[en cola %d pendientes]\n\n" case "interrupt.delivered": return "[entregado a la ejecución activa; revisando plan]\n" case "status.thinking": @@ -628,8 +616,6 @@ func esCatalog(key string) string { return "Gestor de contexto no disponible.\n\n" case "compact.failed": return "Error de compactación: %v\n\n" - case "compact.done": - return "Historial de conversación compactado.\n\n" case "compact.done_with_stats": return "Historial de conversación compactado (%d → %d tokens).\n\n" case "todo.cleared": @@ -672,14 +658,8 @@ func esCatalog(key string) string { return "Config: modelo = %s\n\n" case "config.provider_set": return "Config: proveedor = %s\n\n" - case "config.language_set": - return "Config: idioma = %s\n\n" case "config.unknown_key": return "Clave de config desconocida: %s\nSoportadas: model, provider, language\n\n" - case "config.title": - return "Configuración Actual:\n" - case "status.title": - return "Estado:\n" case "panel.update": return "Actualización" case "label.version": @@ -718,16 +698,8 @@ func esCatalog(key string) string { return "Otras instalaciones de ggcode detectadas en este sistema:\n%s\nSi un ggcode diferente aparece primero en PATH, considere actualizarlo también o ajustar el orden de PATH.\n\n" case "update.dual_scope": return "Advertencia: Se encontraron instalaciones de ggcode de usuario y de sistema:\n Usuario: %s\n Sistema: %s\nEsto puede causar conflictos de PATH. Considere desinstalar una desde Configuración > Aplicaciónes.\n\n" - case "plugins.unavailable": - return "Gestor de plugins no disponible.\n\n" - case "plugins.none": - return "Sin plugins cargados.\n\n" - case "plugins.title": - return "Plugins:\n" case "mcp.none": return "Sin servidores MCP configurados.\n\n" - case "mcp.title": - return "Servidores MCP:\n" case "mcp.active_tools": return "Herramientas activas" case "mcp.more": @@ -736,10 +708,6 @@ func esCatalog(key string) string { return "Uso: /image o /image paste\n" case "image.formats": return "Formatos soportados: PNG, JPEG, GIF, WebP (max 20MB)\n\n" - case "image.attached": - return "Imagen adjunta: %s\n" - case "image.attached_hint": - return "Envie un mensaje para incluir la imagen, o /image para adjuntar otra.\n\n" case "image.clipboard_failed": return "No se pudo pegar una imagen del portapapeles: %v" case "image.clipboard_no_image_windows": @@ -754,20 +722,6 @@ func esCatalog(key string) string { 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": - return "Sub-agente %s cancelado\n\n" - case "agent.cancel_failed": - return "No se pudo cancelar %s (no encontrado o no en ejecución)\n\n" - case "agent.not_found": - return "Sub-agente %s no encontrado\n\n" - case "agent.title": - return "Agente: %s\nEstado: %s\ntarea: %s\n" - case "agent.result": - return "Resultado: %s\n" - case "agent.error": - return "Error: %v\n" case "slash.help": return "Mostrar mensaje de ayuda" case "slash.sessions": diff --git a/internal/tui/i18n_fr.go b/internal/tui/i18n_fr.go index 9f76eb136..14f4e675e 100644 --- a/internal/tui/i18n_fr.go +++ b/internal/tui/i18n_fr.go @@ -16,8 +16,6 @@ func frCatalog(key string) string { return "%d en cours" case "cron.firing": return "⏰ Tâche cron déclenchée" - case "activity.idle": - return "inactif" case "panel.conversation": return "Conversation" case "panel.composer": @@ -164,10 +162,6 @@ func frCatalog(key string) string { return "fichier" case "label.directory": return "répertoire" - case "context.unavailable": - return "Pas encore de données de contexte" - case "metrics.empty": - return "Pas encore de métriques" case "im.none": return "Aucun adapteur configuré" case "im.summary": @@ -182,14 +176,10 @@ func frCatalog(key string) string { return "active • redémarréz pour initialisér" case "im.status.not_started": return "non démarré" - case "context.until_compact": - return "restant" case "empty.ask": return "Demandez un refactoring, une correction de bug, une explication ou des tests." case "empty.tips": return "Astuces: utiliséz @chemin pour inclure des fichiers, /? pour l'aide, et Shift+Tab pour changer de mode." - case "startup.banner": - return "Préparation de l'interface terminal et filtrâge du bruit de démarrâge. Vous pouvez saisir immediatement; cette bannière disparaitra une fois le démarrâge terminé." case "hint.autocomplete": return "Tab/Shift+Tab naviguer • Enter appliquér • Esc fermér" case "hint.mention": @@ -242,8 +232,6 @@ func frCatalog(key string) string { return "Ctrl+N ne plus suivre" case "queued.count": return "%d en fîle" - case "queued.output": - return "[en fîle %d en attente]\n\n" case "interrupt.delivered": return "[livre a l'exécution active; reexamen du plan]\n" case "status.thinking": @@ -628,8 +616,6 @@ func frCatalog(key string) string { return "Gestionnaire de contexte non disponible.\n\n" case "compact.failed": return "Erreur de compactâge: %v\n\n" - case "compact.done": - return "Historique de conversation compacté.\n\n" case "compact.done_with_stats": return "Historique de conversation compacté (%d → %d tokens).\n\n" case "todo.cleared": @@ -672,14 +658,8 @@ func frCatalog(key string) string { return "Config: modèle = %s\n\n" case "config.provider_set": return "Config: fournisseur = %s\n\n" - case "config.language_set": - return "Config: langue = %s\n\n" case "config.unknown_key": return "Cle de config inconnue: %s\nSupportées: model, provider, languâge\n\n" - case "config.title": - return "Configuration Actuelle:\n" - case "status.title": - return "Statut:\n" case "panel.update": return "Mise à jour" case "label.version": @@ -718,16 +698,8 @@ func frCatalog(key string) string { return "Autres installations de ggcode détectées sur ce système:\n%s\nSi un ggcode différent apparaît en premier dans PATH, envisagez de le mettre à jour aussi ou d'ajuster l'ordre de PATH.\n\n" case "update.dual_scope": return "Attention: Installations utilisateur et système de ggcode trouvées:\n Utilisateur: %s\n Système: %s\nCela peut causer des conflits de PATH. Envisagez de désinstaller une via Paramètres > Applications.\n\n" - case "plugins.unavailable": - return "Gestionnaire de plugins non disponible.\n\n" - case "plugins.none": - return "Aucun plugin chargé.\n\n" - case "plugins.title": - return "Plugins:\n" case "mcp.none": return "Aucun serveur MCP configuré.\n\n" - case "mcp.title": - return "Serveurs MCP:\n" case "mcp.active_tools": return "Outils actifs" case "mcp.more": @@ -736,10 +708,6 @@ func frCatalog(key string) string { return "Usâge: /imâge ou /imâge paste\n" case "image.formats": return "Formats supportes: PNG, JPEG, GIF, WebP (max 20MB)\n\n" - case "image.attached": - return "Imâge jointe: %s\n" - case "image.attached_hint": - return "Envoyéz un messâge pour inclure l'imâge, ou /imâge pour en joindre une autre.\n\n" case "image.clipboard_failed": return "Impossible de coller une imâge du presse-papiers: %v" case "image.clipboard_no_image_windows": @@ -754,20 +722,6 @@ func frCatalog(key string) string { 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": - return "Sous-agent %s annulé\n\n" - case "agent.cancel_failed": - return "Impossible d'annulér %s (introuvable ou pas en cours)\n\n" - case "agent.not_found": - return "Sous-agent %s introuvable\n\n" - case "agent.title": - return "Agent: %s\nStatut: %s\nTâche: %s\n" - case "agent.result": - return "Résultat: %s\n" - case "agent.error": - return "Erreur: %v\n" case "slash.help": return "Afficher le messâge d'aide" case "slash.sessions": diff --git a/internal/tui/i18n_ja.go b/internal/tui/i18n_ja.go index 3a179458a..c0dedb943 100644 --- a/internal/tui/i18n_ja.go +++ b/internal/tui/i18n_ja.go @@ -15,8 +15,6 @@ func jaCatalog(key string) string { return "%d 実行中" case "cron.firing": return "実行中" - case "activity.idle": - return "アイドル" case "panel.conversation": return "会話" case "panel.composer": @@ -163,10 +161,6 @@ func jaCatalog(key string) string { return "ファイル" case "label.directory": return "ディレクトリ" - case "context.unavailable": - return "コンテキストデータがまだありません" - case "metrics.empty": - return "メトリクスがまだありません" case "im.none": return "IMアダプタなし" case "im.summary": @@ -181,14 +175,10 @@ func jaCatalog(key string) string { return "有効 • 再起動して初期化" case "im.status.not_started": return "未開始" - case "context.until_compact": - return "残り" case "empty.ask": return "リファクタリング、バグ修正、説明、テストなどを依頼してください。" case "empty.tips": return "ヒント: @path でファイルを含める、/? でヘルプ、Shift+Tab でモード切替" - case "startup.banner": - return "ターミナル UI を準備し、起動時のターミナルノイズをフィルタリングしています。すぐに入力できます; バナーは起動が完了すると消えます。" case "hint.autocomplete": return "Tab/Shift+Tab 切替 • Enter 適用 • Esc 閉じる" case "hint.mention": @@ -241,8 +231,6 @@ func jaCatalog(key string) string { return "Ctrl+N フォロー解除" case "queued.count": return "%d 件キュー中" - case "queued.output": - return "[キュー %d 件保留中]\n\n" case "interrupt.delivered": return "[アクティブ実行に配信; 計画修正中]\n" case "status.thinking": @@ -673,8 +661,6 @@ func jaCatalog(key string) string { return "コンテキストマネージャーが利用できません。\n\n" case "compact.failed": return "圧縮に失敗しました: %v\n\n" - case "compact.done": - return "圧縮完了" case "compact.done_with_stats": return "会話履歴を圧縮しました(%d → %d トークン)。\n\n" case "todo.cleared": @@ -717,14 +703,8 @@ func jaCatalog(key string) string { return "設定: model = %s\n\n" case "config.provider_set": return "設定: provider = %s\n\n" - case "config.language_set": - return "設定: language = %s\n\n" case "config.unknown_key": return "不明な設定キー: %s\n対応: model, provider, language\n\n" - case "config.title": - return "現在の設定:\n" - case "status.title": - return "ステータス" case "panel.update": return "更新" case "label.version": @@ -763,16 +743,8 @@ func jaCatalog(key string) string { return "このシステムで他の ggcode インストールが検出されました:\n%s\n別の ggcode が PATH の先頭にある場合、そちらも更新するか PATH の順序を調整することを検討してください。\n\n" case "update.dual_scope": return "警告: ユーザーとシステム全体の両方に ggcode インストールが見つかりました:\n ユーザー: %s\n システム: %s\nPATH の競合が発生する可能性があります。設定 > アプリからどちらかをアンインストールすることを検討してください。\n\n" - case "plugins.unavailable": - return "プラグインマネージャーが利用できません。\n\n" - case "plugins.none": - return "プラグインが読み込まれていません" - case "plugins.title": - return "プラグイン" case "mcp.none": return "MCP サーバが設定されていません。\n\n" - case "mcp.title": - return "MCPサーバ" case "mcp.active_tools": return "アクティブツール" case "mcp.more": @@ -781,10 +753,6 @@ func jaCatalog(key string) string { return "使用法: /image <ファイルパス> または /image paste\n" case "image.formats": return "対応形式: PNG, JPEG, GIF, WebP(最大20MB)\n\n" - case "image.attached": - return "画像を添付しました: %s\n" - case "image.attached_hint": - return "画像を含めるにはメッセージを送信するか、/image で別の画像を添付できます。\n\n" case "image.clipboard_failed": return "クリップボードから画像を貼り付けできませんでした: %v" case "image.clipboard_no_image_windows": @@ -799,20 +767,6 @@ func jaCatalog(key string) string { return " %s [%s]%s - %s\n" case "agents.hint": return "タブでサブエージェントを選択、Enter で送信" - case "agent.usage": - return "使用法: /agent または /agent cancel \n\n" - case "agent.cancelled": - return "サブエージェント %s をキャンセルしました\n\n" - case "agent.cancel_failed": - return "エージェントのキャンセルに失敗: %s" - case "agent.not_found": - return "エージェント %s が見つかりません" - case "agent.title": - return "エージェント: %s\nステータス: %s\nタスク: %s\n" - case "agent.result": - return "結果: %s\n" - case "agent.error": - return "エージェントエラー: %v" case "slash.help": return "ヘルプを表示" case "slash.sessions": diff --git a/internal/tui/i18n_ko.go b/internal/tui/i18n_ko.go index 7213de1ba..7272032a3 100644 --- a/internal/tui/i18n_ko.go +++ b/internal/tui/i18n_ko.go @@ -20,8 +20,6 @@ func koCatalog(key string) string { return "%d개 실행 중" case "cron.firing": return "실행 중" - case "activity.idle": - return "대기 중" case "panel.conversation": return "대화" case "panel.composer": @@ -168,10 +166,6 @@ func koCatalog(key string) string { return "파일" case "label.directory": return "디렉토리" - case "context.unavailable": - return "아직 컨텍스트 데이터가 없습니다" - case "metrics.empty": - return "메트릭이 없습니다" case "im.none": return "IM 어댑터 없음" case "im.summary": @@ -186,14 +180,10 @@ func koCatalog(key string) string { return "활성화됨 • 초기화하려면 재시작" case "im.status.not_started": return "시작되지 않음" - case "context.until_compact": - return "남음" case "empty.ask": return "리팩토링, 버그 수정, 설명 또는 테스트를 요청하세요." case "empty.tips": return "팁: @path로 파일 포함, /?로 도움말, Shift+Tab으로 모드 변경." - case "startup.banner": - return "터미널 UI를 준비하고 시작 터미널 노이즈를 필터링하는 중입니다. 지금 바로 입력할 수 있으며, 시작이 완료되면 이 배너가 사라집니다." case "hint.autocomplete": return "Tab/Shift+Tab 전환 • Enter 적용 • Esc 닫기" case "hint.mention": @@ -246,8 +236,6 @@ func koCatalog(key string) string { return "Ctrl+N 언팔로우" case "queued.count": return "%d개 대기 중" - case "queued.output": - return "[대기 %d 보류 중]\n\n" case "interrupt.delivered": return "[활성 실행에 전달됨; 계획 수정 중]\n" case "status.thinking": @@ -632,8 +620,6 @@ func koCatalog(key string) string { return "컨텍스트 관리자를 사용할 수 없습니다.\n\n" case "compact.failed": return "압축 실패: %v\n\n" - case "compact.done": - return "압축 완료" case "compact.done_with_stats": return "대화 기록이 압축되었습니다 (%d → %d 토큰).\n\n" case "todo.cleared": @@ -676,14 +662,8 @@ func koCatalog(key string) string { return "설정: 모델 = %s\n\n" case "config.provider_set": return "설정: 제공자 = %s\n\n" - case "config.language_set": - return "설정: 언어 = %s\n\n" case "config.unknown_key": return "알 수 없는 설정 키: %s\n지원됨: model, provider, language\n\n" - case "config.title": - return "현재 설정:\n" - case "status.title": - return "상태:\n" case "panel.update": return "업데이트" case "label.version": @@ -722,16 +702,8 @@ func koCatalog(key string) string { return "이 시스템에서 다른 ggcode 설치가 감지되었습니다:\n%s\n다른 ggcode가 PATH에 먼저 나타나면 함께 업데이트하거나 PATH 순서를 조정하세요.\n\n" case "update.dual_scope": return "경고: 사용자 및 시스템 전체 ggcode 설치가 모두 발견되었습니다:\n 사용자: %s\n 시스템: %s\nPATH 충돌이 발생할 수 있습니다. 설정 > 앱에서 하나를 제거하는 것을 고려하세요.\n\n" - case "plugins.unavailable": - return "플러그인 관리자를 사용할 수 없습니다.\n\n" - case "plugins.none": - return "로드된 플러그인이 없습니다.\n\n" - case "plugins.title": - return "플러그인:\n" case "mcp.none": return "구성된 MCP 서버가 없습니다.\n\n" - case "mcp.title": - return "MCP 서버:\n" case "mcp.active_tools": return "활성 도구" case "mcp.more": @@ -740,10 +712,6 @@ func koCatalog(key string) string { return "사용법: /image <경로/파일.png> 또는 /image paste\n" case "image.formats": return "지원 형식: PNG, JPEG, GIF, WebP (최대 20MB)\n\n" - case "image.attached": - return "이미지 첨부됨: %s\n" - case "image.attached_hint": - return "메시지를 보내 이미지를 포함하거나, /image로 다른 이미지를 첨부하세요.\n\n" case "image.clipboard_failed": return "클립보드에서 이미지를 붙여널 수 없습니다: %v" case "image.clipboard_no_image_windows": @@ -758,22 +726,6 @@ func koCatalog(key string) string { 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": - // #1373: en baseline takes the agent id - the verb-less ko text - // silently dropped it in Sprintf. - return "하위 에이전트 %s 취소됨\n\n" - case "agent.cancel_failed": - return "%s을(를) 취소할 수 없습니다 (찾을 수 없거나 실행 중이 아님)\n\n" - case "agent.not_found": - return "서브에이전트 %s을(를) 찾을 수 없습니다\n\n" - case "agent.title": - return "에이전트: %s\n상태: %s\n작업: %s\n" - case "agent.result": - return "결과: %s\n" - case "agent.error": - return "오류: %v\n" case "slash.help": return "도움말 표시" case "slash.sessions": diff --git a/internal/tui/i18n_pt.go b/internal/tui/i18n_pt.go index a2aa8809e..8d266bbdc 100644 --- a/internal/tui/i18n_pt.go +++ b/internal/tui/i18n_pt.go @@ -227,24 +227,8 @@ func ptCatalog(key string) string { return " y = criar AGENTS.md • n/Esc = pular" // ── Activity ────────────────────────────────────────────────── - case "activity.idle": - return "inativo" // ── Agent ───────────────────────────────────────────────────── - case "agent.cancel_failed": - return "Não foi possível cancelar %s (não encontrado ou não em execução)\n\n" - case "agent.cancelled": - return "Sub-agente %s cancelado\n\n" - case "agent.error": - return "Erro: %v\n" - case "agent.not_found": - return "Sub-agente %s não encontrado\n\n" - case "agent.result": - return "Resultado: %s\n" - case "agent.title": - 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": @@ -287,10 +271,6 @@ func ptCatalog(key string) string { return "Desfazer falhou: %v\n\n" // ── Context ─────────────────────────────────────────────────── - case "context.unavailable": - return "Sem dados de contexto ainda" - case "context.until_compact": - return "restante" // ── Cron ────────────────────────────────────────────────────── case "cron.firing": @@ -329,8 +309,6 @@ func ptCatalog(key string) string { return "Versão: %s\n" // ── Compact ─────────────────────────────────────────────────── - case "compact.done": - return "Histórico de conversa compactado.\n\n" case "compact.done_with_stats": return "Histórico de conversa compactado (%d → %d tokens).\n\n" case "compact.failed": @@ -341,8 +319,6 @@ func ptCatalog(key string) string { // ── Config ──────────────────────────────────────────────────── case "config.instance_unavailable": return "Configuração de instância não disponível para este workspace" - case "config.language_set": - return "Config: idioma = %s\n\n" case "config.model_set": return "Config: modelo = %s\n\n" case "config.not_loaded": @@ -363,8 +339,6 @@ func ptCatalog(key string) string { return "Global" case "config.scope_instance": return "Instância" - case "config.title": - return "Configuração Atual:\n" case "config.unknown_key": return "Chave de config desconhecida: %s\nSuportadas: model, provider, language\n\n" case "config.usage": @@ -425,10 +399,6 @@ func ptCatalog(key string) string { return "Ctrl+N parar de acompanhar" // ── Image ───────────────────────────────────────────────────── - case "image.attached": - return "Imagem anexada: %s\n" - case "image.attached_hint": - return "Envie uma mensagem para incluir a imagem, ou /image para anexar outra.\n\n" case "image.clipboard_failed": return "Não foi possível colar uma imagem da área de transferência: %v" case "image.clipboard_no_image_windows": @@ -561,8 +531,6 @@ func ptCatalog(key string) string { return "… %d mais • /mcp" case "mcp.none": return "Nenhum servidor MCP configurado.\n\n" - case "mcp.title": - return "Servidores MCP:\n" // ── Memory ──────────────────────────────────────────────────── case "memory.auto": @@ -583,8 +551,6 @@ func ptCatalog(key string) string { return "\nUso: /memory [list|clear]\n\n" // ── Metrics ─────────────────────────────────────────────────── - case "metrics.empty": - return "Sem métricas ainda" // ── Mode details ────────────────────────────────────────────── case "mode.agent.autocontinue": @@ -617,18 +583,10 @@ func ptCatalog(key string) string { return "A solicitação de pareamento atual foi rejeitada. Inicie novamente para continuar." // ── Plugins ─────────────────────────────────────────────────── - case "plugins.none": - return "Nenhum plugin carregado.\n\n" - case "plugins.title": - return "Plugins:\n" - case "plugins.unavailable": - return "Gerenciador de plugins não disponível.\n\n" // ── Queued ──────────────────────────────────────────────────── case "queued.count": return "%d na fila" - case "queued.output": - return "[%d na fila pendentes]\n\n" // ── Reasoning ───────────────────────────────────────────────── case "reasoning.effort.set": @@ -747,8 +705,6 @@ func ptCatalog(key string) string { return "Gerenciar vinculação do canal WhatsApp" // ── Startup ─────────────────────────────────────────────────── - case "startup.banner": - return "Preparando a interface do terminal e filtrando ruído de inicialização. Você pode digitar imediatamente; este banner desaparece quando a inicialização estabilizar." // ── Status ──────────────────────────────────────────────────── case "status.cancelling": @@ -759,8 +715,6 @@ func ptCatalog(key string) string { return "Comprimindo contexto..." case "status.thinking": return "Pensando..." - case "status.title": - return "Status:\n" case "status.tools_used": return "%d ferramentas usadas" case "status.writing": diff --git a/internal/tui/i18n_ru.go b/internal/tui/i18n_ru.go index d844b5405..049b4d63c 100644 --- a/internal/tui/i18n_ru.go +++ b/internal/tui/i18n_ru.go @@ -19,8 +19,6 @@ func ruCatalog(key string) string { return "%d активных" case "cron.firing": return "⏰ Сработала задача cron" - case "activity.idle": - return "ожидание" // --- Panel --- case "panel.conversation": @@ -173,10 +171,6 @@ func ruCatalog(key string) string { return "Каталог" // --- Context & metrics --- - case "context.unavailable": - return "Данные контекста пока недоступны" - case "metrics.empty": - return "Метрики пока недоступны" case "im.none": return "Адаптеры не настроены" case "im.summary": @@ -191,16 +185,12 @@ func ruCatalog(key string) string { return "включено • перезапустите для инициализации" case "im.status.not_started": return "не запущено" - case "context.until_compact": - return "осталось" // --- Empty --- case "empty.ask": return "Запросите рефакторинг, исправление бага, объяснение или тесты." case "empty.tips": return "Подсказки: @путь для файлов, /? для справки, Shift+Tab для смены режима." - case "startup.banner": - return "Подготовка интерфейса терминала и фильтрация шумов запуска. Вы можете начать вводить сразу; этот баннер исчезнет после завершения инициализации." case "hint.autocomplete": return "Tab/Shift+Tab переключать • Enter применить • Esc закрыть" @@ -260,8 +250,6 @@ func ruCatalog(key string) string { // --- Queued --- case "queued.count": return "%d в очереди" - case "queued.output": - return "[в очереди %d ожидающих]\n\n" case "interrupt.delivered": return "[доставлено в активный запуск; план пересматривается]\n" @@ -684,8 +672,6 @@ func ruCatalog(key string) string { return "Менеджер контекста недоступен.\n\n" case "compact.failed": return "Компактация не удалась: %v\n\n" - case "compact.done": - return "История беседы скомпактирована.\n\n" case "compact.done_with_stats": return "История беседы скомпактирована (%d → %d токенов).\n\n" @@ -734,14 +720,8 @@ func ruCatalog(key string) string { return "Конфиг: model = %s\n\n" case "config.provider_set": return "Конфиг: поставщик = %s\n\n" - case "config.language_set": - return "Конфиг: язык = %s\n\n" case "config.unknown_key": return "Неизвестный ключ конфигурации: %s\nПоддерживаются: model, provider, language\n\n" - case "config.title": - return "Текущая конфигурация:\n" - case "status.title": - return "Статус:\n" // --- Update --- case "panel.update": @@ -784,18 +764,10 @@ func ruCatalog(key string) string { return "Предупреждение: Найдены как пользовательская, так и системная установки ggcode:\n Пользовательская: %s\n Системная: %s\nЭто может привести к конфликтам PATH. Рассмотрите удаление одной через Настройки > Приложения.\n\n" // --- Plugins --- - case "plugins.unavailable": - return "Менеджер плагинов недоступен.\n\n" - case "plugins.none": - return "Плагины не загружены.\n\n" - case "plugins.title": - return "Плагины:\n" // --- MCP --- case "mcp.none": return "MCP-серверы не настроены.\n\n" - case "mcp.title": - return "MCP-серверы:\n" case "mcp.active_tools": return "Активные инструменты" case "mcp.more": @@ -806,10 +778,6 @@ func ruCatalog(key string) string { return "Использование: /image <путь/к/файлу.png> или /image paste\n" case "image.formats": return "Поддерживаемые форматы: PNG, JPEG, GIF, WebP (макс. 20МБ)\n\n" - case "image.attached": - return "Изображение прикреплено: %s\n" - case "image.attached_hint": - return "Отправьте сообщение, чтобы включить изображение, или /image для ещё одного.\n\n" case "image.clipboard_failed": return "Не удалось вставить изображение из буфера обмена: %v" case "image.clipboard_no_image_windows": @@ -826,20 +794,6 @@ func ruCatalog(key string) string { 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": - return "Суб-агент %s отменён\n\n" - case "agent.cancel_failed": - return "Не удалось отменить %s (не найден или не активен)\n\n" - case "agent.not_found": - return "Суб-агент %s не найден\n\n" - case "agent.title": - return "Агент: %s\nСтатус: %s\nЗадача: %s\n" - case "agent.result": - return "Результат: %s\n" - case "agent.error": - return "Ошибка: %v\n" // --- Slash command descriptions --- case "slash.help": diff --git a/internal/tui/i18n_vi.go b/internal/tui/i18n_vi.go index d114db334..3fba010b1 100644 --- a/internal/tui/i18n_vi.go +++ b/internal/tui/i18n_vi.go @@ -16,8 +16,6 @@ func viCatalog(key string) string { return "%d đang chạy" case "cron.firing": return "Cron job đã kích hoạt" - case "activity.idle": - return "chờ" case "panel.conversation": return "Hội thoại" case "panel.composer": @@ -164,10 +162,6 @@ func viCatalog(key string) string { return "tệp" case "label.directory": return "thư mục" - case "context.unavailable": - return "Chưa có dữ liệu ngữ cảnh" - case "metrics.empty": - return "Chưa có chỉ số" case "im.none": return "Chưa cấu hình adapter nào" case "im.summary": @@ -182,14 +176,10 @@ func viCatalog(key string) string { return "đã bật • khởi động lại để khởi tạo" case "im.status.not_started": return "chưa bắt đầu" - case "context.until_compact": - return "còn lại" case "empty.ask": return "Yêu cầu tái cấu trúc, sửa lỗi, giải thích, hoặc kiểm thử." case "empty.tips": return "Mẹo: dùng @path để thêm tệp, /? để xem trợ giúp, Shift+Tab để đổi chế độ." - case "startup.banner": - return "Đang chuẩn bị giao diện terminal và lọc nhiễu khởi động. Bạn có thể gõ ngay; banner này sẽ biến mất khi khởi động hoàn tất." case "hint.autocomplete": return "Tab/Shift+Tab xoay vòng • Enter áp dụng • Esc đóng" case "hint.mention": @@ -242,8 +232,6 @@ func viCatalog(key string) string { return "Ctrl+N bỏ theo dõi" case "queued.count": return "%d trong hàng đợi" - case "queued.output": - return "[đã xếp hàng %d đang chờ]\n\n" case "interrupt.delivered": return "[đã gửi đến lượt chạy hoạt động; đang sửa đổi kế hoạch]\n" case "status.thinking": @@ -628,8 +616,6 @@ func viCatalog(key string) string { return "Context manager không khả dụng.\n\n" case "compact.failed": return "Nén thất bại: %v\n\n" - case "compact.done": - return "Lịch sử hội thoại đã được nén.\n\n" case "compact.done_with_stats": return "Lịch sử hội thoại đã được nén (%d → %d token).\n\n" case "todo.cleared": @@ -672,14 +658,8 @@ func viCatalog(key string) string { return "Cấu hình: model = %s\n\n" case "config.provider_set": return "Cấu hình: provider = %s\n\n" - case "config.language_set": - return "Cấu hình: language = %s\n\n" case "config.unknown_key": return "Khóa cấu hình không xác định: %s\nHỗ trợ: model, provider, language\n\n" - case "config.title": - return "Cấu hình hiện tại:\n" - case "status.title": - return "Trạng thái:\n" case "panel.update": return "Cập nhật" case "label.version": @@ -718,16 +698,8 @@ func viCatalog(key string) string { return "Phát hiện cài đặt ggcode khác trên hệ thống:\n%s\nNếu ggcode khác xuất hiện đầu trong PATH, hãy cân nhắc cập nhật nó hoặc điều chỉnh thứ tự PATH.\n\n" case "update.dual_scope": return "Cảnh báo: Tìm thấy cả cài đặt ggcode người dùng và toàn hệ thống:\n Người dùng: %s\n Hệ thống: %s\nĐiều này có thể gây xung đột PATH. Cân nhắc gỡ một bản trong Settings > Apps.\n\n" - case "plugins.unavailable": - return "Trình quản lý plugin không khả dụng.\n\n" - case "plugins.none": - return "Không có plugin nào được tải.\n\n" - case "plugins.title": - return "Plugin:\n" case "mcp.none": return "Chưa cấu hình MCP server.\n\n" - case "mcp.title": - return "MCP Server:\n" case "mcp.active_tools": return "Công cụ hoạt động" case "mcp.more": @@ -736,10 +708,6 @@ func viCatalog(key string) string { return "Cách dùng: /image <đường/dẫn/tệp.png> hoặc /image paste\n" case "image.formats": return "Định dạng hỗ trợ: PNG, JPEG, GIF, WebP (tối đa 20MB)\n\n" - case "image.attached": - return "Đã đính kèm ảnh: %s\n" - case "image.attached_hint": - return "Gửi tin nhắn để bao gồm ảnh, hoặc /image để đính kèm ảnh khác.\n\n" case "image.clipboard_failed": return "Không thể dán ảnh từ clipboard: %v" case "image.clipboard_no_image_windows": @@ -754,20 +722,6 @@ func viCatalog(key string) string { 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": - return "Đã hủy sub-agent %s\n\n" - case "agent.cancel_failed": - return "Không thể hủy %s (không tìm thấy hoặc không đang chạy)\n\n" - case "agent.not_found": - return "Không tìm thấy sub-agent %s\n\n" - case "agent.title": - return "Agent: %s\nTrạng thái: %s\nTác vụ: %s\n" - case "agent.result": - return "Kết quả: %s\n" - case "agent.error": - return "Lỗi: %v\n" case "slash.help": return "Hiện thông báo trợ giúp" case "slash.sessions": diff --git a/internal/tui/i18n_zh.go b/internal/tui/i18n_zh.go index 82a0544f1..d54b1e45c 100644 --- a/internal/tui/i18n_zh.go +++ b/internal/tui/i18n_zh.go @@ -12,8 +12,6 @@ func zhCatalog(key string) string { return "空闲" case "agents.running": return "%d 个运行中" - case "activity.idle": - return "空闲" case "panel.conversation": return "对话" case "panel.composer": @@ -162,10 +160,6 @@ func zhCatalog(key string) string { return "文件" case "label.directory": return "目录" - case "context.unavailable": - return "暂无上下文数据" - case "metrics.empty": - return "暂无指标" case "im.none": return "未配置适配器" case "im.summary": @@ -180,14 +174,10 @@ func zhCatalog(key string) string { return "已启用 • 重启后初始化" case "im.status.not_started": return "未启动" - case "context.until_compact": - return "后触发" case "empty.ask": return "你可以让我做重构、修复 bug、解释代码或补测试。" case "empty.tips": return "提示:用 @path 引用文件,/? 查看帮助,Shift+Tab 切换模式。" - case "startup.banner": - return "正在准备终端界面并过滤启动期的终端噪声。你现在就可以输入;一旦界面进入可交互状态,这个提示会自动消失。" case "hint.autocomplete": return "Tab/Shift+Tab 切换 • Enter 应用 • Esc 关闭" case "hint.mention": @@ -250,8 +240,6 @@ func zhCatalog(key string) string { return "该渠道因多次被拒绝,已被加入黑名单。" case "queued.count": return "%d 条排队中" - case "queued.output": - return "[已排队 %d 条待发送]\n\n" case "interrupt.delivered": return "[已送达当前运行,正在调整方向]\n" case "status.thinking": @@ -772,8 +760,6 @@ func zhCatalog(key string) string { return "上下文管理器不可用。\n\n" case "compact.failed": return "压缩失败:%v\n\n" - case "compact.done": - return "已压缩对话历史。\n\n" case "compact.done_with_stats": return "已压缩对话历史(%d → %d tokens)。\n\n" case "todo.cleared": @@ -816,14 +802,8 @@ func zhCatalog(key string) string { return "配置:model = %s\n\n" case "config.provider_set": return "配置:provider = %s\n\n" - case "config.language_set": - return "配置:language = %s\n\n" case "config.unknown_key": return "未知配置项:%s\n支持:model, provider, language\n\n" - case "config.title": - return "当前配置:\n" - case "status.title": - return "状态:\n" case "panel.update": return "更新" case "label.version": @@ -870,16 +850,8 @@ func zhCatalog(key string) string { return "检测到系统中还有其他 ggcode 安装:\n%s\n如果 PATH 中另一个 ggcode 优先级更高,建议一并更新或调整 PATH 顺序。\n\n" case "update.dual_scope": return "警告:检测到用户级和系统级 ggcode 安装同时存在:\n 用户级:%s\n 系统级:%s\n这可能导致 PATH 冲突。建议从“设置 > 应用”中卸载其中一个。\n\n" - case "plugins.unavailable": - return "插件管理器不可用。\n\n" - case "plugins.none": - return "没有加载插件。\n\n" - case "plugins.title": - return "插件:\n" case "mcp.none": return "没有配置 MCP 服务器。\n\n" - case "mcp.title": - return "MCP 服务器:\n" case "mcp.active_tools": return "活动工具" case "mcp.more": @@ -888,10 +860,6 @@ func zhCatalog(key string) string { return "用法:/image 或 /image paste\n" case "image.formats": return "支持格式:PNG、JPEG、GIF、WebP(最大 20MB)\n\n" - case "image.attached": - return "已附加图片:%s\n" - case "image.attached_hint": - return "发送一条消息即可携带这张图片,或继续用 /image 再附加一张。\n\n" case "image.clipboard_failed": return "无法从剪贴板粘贴图片:%v" case "image.clipboard_no_image_windows": @@ -908,20 +876,6 @@ func zhCatalog(key string) string { 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": - return "已取消子 Agent %s\n\n" - case "agent.cancel_failed": - return "无法取消 %s(未找到或未在运行)\n\n" - case "agent.not_found": - return "未找到子 Agent %s\n\n" - case "agent.title": - return "Agent:%s\n状态:%s\n任务:%s\n" - case "agent.result": - return "结果:%s\n" - case "agent.error": - return "错误:%v\n" case "slash.help": return "显示帮助" case "slash.sessions": @@ -1032,8 +986,6 @@ func zhCatalog(key string) string { return "删除" case "hooks.edit": return "编辑" - case "hooks.toggleInject": - return "切换注入" case "hooks.close": return "Esc: 关闭" case "hooks.event.onUserMessage":