feat(runtime): add user-controlled turn recovery

This commit is contained in:
Xubin Ren
2026-08-24 00:58:04 +08:00
parent ffa58aa5ef
commit 12029f8812
60 changed files with 4027 additions and 169 deletions
+16 -1
View File
@@ -198,6 +198,7 @@
"fileEditDisplay": "File edit display",
"codeWrap": "Code wrapping",
"brandLogos": "Brand logos",
"browserNotifications": "Task notifications",
"maxResults": "Max results",
"timeout": "Timeout",
"jinaReader": "Jina reader",
@@ -243,6 +244,7 @@
"fileEditDisplay": "Choose whether file edit activity opens as line counts or a diff.",
"codeWrap": "Keep long code lines readable on smaller screens.",
"brandLogos": "Show third-party provider and CLI logos in Settings.",
"browserNotifications": "Notify only when this page is in the background. Off by default.",
"maxResults": "Results returned by each web_search call.",
"timeout": "Seconds before a search provider request times out.",
"jinaReader": "Use Jina Reader for web_fetch when available.",
@@ -1013,7 +1015,8 @@
"activity": {
"running": "Agent running",
"complete": "Agent finished",
"updated": "New activity"
"updated": "New activity",
"recovery": "This conversation needs your attention"
},
"pin": "Pin",
"unpin": "Unpin",
@@ -1436,6 +1439,18 @@
"estimated": "Includes estimated usage"
}
},
"recovery": {
"actionFailed": "Recovery action failed. Try again.",
"interrupted": "Task interrupted",
"completed": "Task completed",
"failed": "Task recovery failed",
"failedHelp": "The saved task could not be restored safely. Review it before continuing.",
"resuming": "Restoring interrupted task…",
"review": "Review the task before continuing. Tools will not be replayed automatically.",
"safeResume": "Continuing from saved conversation context.",
"dismiss": "Dismiss",
"continue": "Continue"
},
"lightbox": {
"title": "Image preview",
"open": "View image",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "Acceso predeterminado",
"currentModel": "Configuración actual",
"brandLogos": "Logos de marca",
"browserNotifications": "Notificaciones de tareas",
"cliAppsCatalog": "Catálogo",
"cliAppsFilter": "Filtro",
"engine": "Motor",
@@ -204,6 +205,7 @@
"selectedModelProvider": "Definido por el modelo seleccionado.",
"selectedModelValue": "Definido por el modelo seleccionado.",
"brandLogos": "Muestra logos de proveedores de terceros y CLI en Ajustes.",
"browserNotifications": "Notifica solo cuando esta página está en segundo plano. Desactivado de forma predeterminada.",
"cliAppsCatalog": "Instala solo adaptadores CLI de aplicaciones que nanobot puede ejecutar localmente; las aplicaciones nativas no se modifican.",
"cliAppsFilter": "Busca por aplicación, categoría o capacidad.",
"logs": "Abre la carpeta de registros del motor nativo.",
@@ -1000,7 +1002,8 @@
"activity": {
"running": "Agente en ejecución",
"complete": "Agente terminado",
"updated": "Nueva actividad"
"updated": "Nueva actividad",
"recovery": "Esta conversación requiere tu atención"
},
"pin": "Fijar",
"unpin": "Desfijar",
@@ -1423,6 +1426,18 @@
"automationSourceFallback": "Automatización",
"automationTriggered": "Activada automáticamente"
},
"recovery": {
"actionFailed": "La recuperación falló. Inténtalo de nuevo.",
"interrupted": "Tarea interrumpida",
"completed": "Tarea completada",
"failed": "La recuperación de la tarea falló",
"failedHelp": "La tarea guardada no se pudo restaurar de forma segura. Revísala antes de continuar.",
"resuming": "Restaurando la tarea interrumpida…",
"review": "Revisa la tarea antes de continuar. Las herramientas no se repetirán automáticamente.",
"safeResume": "Continuando desde el contexto guardado de la conversación.",
"dismiss": "Descartar",
"continue": "Continuar"
},
"lightbox": {
"title": "Vista previa de imagen",
"open": "Ver imagen",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "Accès par défaut",
"currentModel": "Configuration actuelle",
"brandLogos": "Logos de marque",
"browserNotifications": "Notifications de tâches",
"cliAppsCatalog": "Catalogue",
"cliAppsFilter": "Filtre",
"engine": "Moteur",
@@ -204,6 +205,7 @@
"selectedModelProvider": "Défini par le modèle sélectionné.",
"selectedModelValue": "Défini par le modèle sélectionné.",
"brandLogos": "Affiche les logos de fournisseurs tiers et CLI dans les Réglages.",
"browserNotifications": "Notifier uniquement lorsque cette page est en arrière-plan. Désactivé par défaut.",
"cliAppsCatalog": "Installe uniquement les adaptateurs CLI dapplications que nanobot peut exécuter localement ; les applications natives restent inchangées.",
"cliAppsFilter": "Recherchez par application, catégorie ou capacité.",
"logs": "Ouvre le dossier des journaux du moteur natif.",
@@ -999,7 +1001,8 @@
"activity": {
"running": "Agent en cours",
"complete": "Agent terminé",
"updated": "Nouvelle activité"
"updated": "Nouvelle activité",
"recovery": "Cette conversation nécessite votre attention"
},
"pin": "Épingler",
"unpin": "Désépingler",
@@ -1422,6 +1425,18 @@
"automationSourceFallback": "Automatisation",
"automationTriggered": "Déclenché automatiquement"
},
"recovery": {
"actionFailed": "La récupération a échoué. Réessayez.",
"interrupted": "Tâche interrompue",
"completed": "Tâche terminée",
"failed": "Échec de la récupération de la tâche",
"failedHelp": "La tâche enregistrée na pas pu être restaurée en toute sécurité. Vérifiez-la avant de continuer.",
"resuming": "Restauration de la tâche interrompue…",
"review": "Vérifiez la tâche avant de continuer. Les outils ne seront pas relancés automatiquement.",
"safeResume": "Reprise depuis le contexte de conversation enregistré.",
"dismiss": "Ignorer",
"continue": "Continuer"
},
"lightbox": {
"title": "Aperçu de limage",
"open": "Voir limage",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "Akses bawaan",
"currentModel": "Konfigurasi saat ini",
"brandLogos": "Logo merek",
"browserNotifications": "Notifikasi tugas",
"cliAppsCatalog": "Katalog",
"cliAppsFilter": "Saring",
"engine": "Mesin",
@@ -204,6 +205,7 @@
"selectedModelProvider": "Ditentukan oleh model yang dipilih.",
"selectedModelValue": "Ditentukan oleh model yang dipilih.",
"brandLogos": "Tampilkan logo penyedia pihak ketiga dan CLI di Pengaturan.",
"browserNotifications": "Beri tahu hanya saat halaman ini di latar belakang. Nonaktif secara bawaan.",
"cliAppsCatalog": "Instal hanya adaptor CLI aplikasi yang dapat dijalankan nanobot secara lokal; aplikasi asli tidak diubah.",
"cliAppsFilter": "Cari berdasarkan aplikasi, kategori, atau kemampuan.",
"logs": "Buka folder log mesin asli.",
@@ -999,7 +1001,8 @@
"activity": {
"running": "Agen sedang berjalan",
"complete": "Agen selesai",
"updated": "Aktivitas baru"
"updated": "Aktivitas baru",
"recovery": "Percakapan ini memerlukan perhatian Anda"
},
"pin": "Sematkan",
"unpin": "Lepas sematan",
@@ -1422,6 +1425,18 @@
"automationSourceFallback": "Otomatisasi",
"automationTriggered": "Dipicu otomatis"
},
"recovery": {
"actionFailed": "Pemulihan gagal. Coba lagi.",
"interrupted": "Tugas terputus",
"completed": "Tugas selesai",
"failed": "Pemulihan tugas gagal",
"failedHelp": "Tugas tersimpan tidak dapat dipulihkan dengan aman. Tinjau sebelum melanjutkan.",
"resuming": "Memulihkan tugas yang terputus…",
"review": "Tinjau tugas sebelum melanjutkan. Alat tidak akan dijalankan ulang secara otomatis.",
"safeResume": "Melanjutkan dari konteks percakapan yang tersimpan.",
"dismiss": "Abaikan",
"continue": "Lanjutkan"
},
"lightbox": {
"title": "Pratinjau gambar",
"open": "Lihat gambar",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "既定の権限",
"currentModel": "現在の設定",
"brandLogos": "ブランドロゴ",
"browserNotifications": "タスク通知",
"cliAppsCatalog": "カタログ",
"cliAppsFilter": "フィルター",
"engine": "エンジン",
@@ -204,6 +205,7 @@
"selectedModelProvider": "選択したモデルによって設定されます。",
"selectedModelValue": "選択したモデルによって設定されます。",
"brandLogos": "設定で第三者プロバイダーと CLI のロゴを表示します。",
"browserNotifications": "このページがバックグラウンドにある場合のみ通知します。既定ではオフです。",
"cliAppsCatalog": "nanobot がローカルで実行できるアプリ CLI アダプターだけをインストールします。ネイティブアプリは変更しません。",
"cliAppsFilter": "アプリ、カテゴリ、機能で検索します。",
"logs": "ネイティブエンジンのログフォルダーを開きます。",
@@ -999,7 +1001,8 @@
"activity": {
"running": "エージェント実行中",
"complete": "エージェント完了",
"updated": "新しいアクティビティ"
"updated": "新しいアクティビティ",
"recovery": "この会話には対応が必要です"
},
"pin": "ピン留め",
"unpin": "ピン留めを解除",
@@ -1422,6 +1425,18 @@
"automationSourceFallback": "自動化",
"automationTriggered": "自動実行"
},
"recovery": {
"actionFailed": "復元操作に失敗しました。もう一度お試しください。",
"interrupted": "タスクが中断されました",
"completed": "タスクが完了しました",
"failed": "タスクの復元に失敗しました",
"failedHelp": "保存されたタスクを安全に復元できませんでした。続行前に確認してください。",
"resuming": "中断されたタスクを復元しています…",
"review": "続行する前にタスクを確認してください。ツールは自動的に再実行されません。",
"safeResume": "保存された会話コンテキストから続行しています。",
"dismiss": "閉じる",
"continue": "続行"
},
"lightbox": {
"title": "画像プレビュー",
"open": "画像を表示",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "기본 권한",
"currentModel": "현재 구성",
"brandLogos": "브랜드 로고",
"browserNotifications": "작업 알림",
"cliAppsCatalog": "카탈로그",
"cliAppsFilter": "필터",
"engine": "엔진",
@@ -204,6 +205,7 @@
"selectedModelProvider": "선택한 모델에 의해 설정됩니다.",
"selectedModelValue": "선택한 모델에 의해 설정됩니다.",
"brandLogos": "설정에서 타사 제공자와 CLI 로고를 표시합니다.",
"browserNotifications": "이 페이지가 백그라운드에 있을 때만 알립니다. 기본값은 꺼짐입니다.",
"cliAppsCatalog": "nanobot이 로컬에서 실행할 수 있는 앱 CLI 어댑터만 설치합니다. 네이티브 앱은 변경하지 않습니다.",
"cliAppsFilter": "앱, 카테고리 또는 기능으로 검색합니다.",
"logs": "네이티브 엔진 로그 폴더를 엽니다.",
@@ -999,7 +1001,8 @@
"activity": {
"running": "에이전트 실행 중",
"complete": "에이전트 완료",
"updated": "새 활동"
"updated": "새 활동",
"recovery": "이 대화에는 확인이 필요합니다"
},
"pin": "고정",
"unpin": "고정 해제",
@@ -1422,6 +1425,18 @@
"automationSourceFallback": "자동화",
"automationTriggered": "자동 실행됨"
},
"recovery": {
"actionFailed": "복구 작업에 실패했습니다. 다시 시도하세요.",
"interrupted": "작업이 중단됨",
"completed": "작업 완료",
"failed": "작업 복구 실패",
"failedHelp": "저장된 작업을 안전하게 복구할 수 없습니다. 계속하기 전에 검토하세요.",
"resuming": "중단된 작업을 복구하는 중…",
"review": "계속하기 전에 작업을 검토하세요. 도구는 자동으로 다시 실행되지 않습니다.",
"safeResume": "저장된 대화 컨텍스트에서 계속합니다.",
"dismiss": "닫기",
"continue": "계속"
},
"lightbox": {
"title": "이미지 미리보기",
"open": "이미지 보기",
+16 -1
View File
@@ -198,6 +198,7 @@
"fileEditDisplay": "Exibição de edição de arquivo",
"codeWrap": "Quebra de linha no código",
"brandLogos": "Logos de marca",
"browserNotifications": "Notificações de tarefas",
"maxResults": "Máx. de resultados",
"timeout": "Tempo limite",
"jinaReader": "Leitor Jina",
@@ -243,6 +244,7 @@
"fileEditDisplay": "Escolha se a atividade de edição de arquivo é exibida como contagem de linhas ou como diferenças.",
"codeWrap": "Mantém linhas longas de código legíveis em telas menores.",
"brandLogos": "Mostra logotipos de provedores terceiros e de CLIs em Configurações.",
"browserNotifications": "Notifica somente quando esta página está em segundo plano. Desativado por padrão.",
"maxResults": "Resultados retornados por cada chamada de web_search.",
"timeout": "Segundos antes de uma requisição de busca expirar.",
"jinaReader": "Usa o Jina Reader para web_fetch quando disponível.",
@@ -1013,7 +1015,8 @@
"activity": {
"running": "Agente em execução",
"complete": "Agente finalizado",
"updated": "Nova atividade"
"updated": "Nova atividade",
"recovery": "Esta conversa precisa da sua atenção"
},
"pin": "Fixar",
"unpin": "Desafixar",
@@ -1436,6 +1439,18 @@
"estimated": "Inclui uso estimado"
}
},
"recovery": {
"actionFailed": "A recuperação falhou. Tente novamente.",
"interrupted": "Tarefa interrompida",
"completed": "Tarefa concluída",
"failed": "Falha ao recuperar a tarefa",
"failedHelp": "Não foi possível restaurar a tarefa salva com segurança. Revise-a antes de continuar.",
"resuming": "Restaurando a tarefa interrompida…",
"review": "Revise a tarefa antes de continuar. As ferramentas não serão executadas novamente de forma automática.",
"safeResume": "Continuando a partir do contexto de conversa salvo.",
"dismiss": "Descartar",
"continue": "Continuar"
},
"lightbox": {
"title": "Pré-visualização de imagem",
"open": "Ver imagem",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "Quyền mặc định",
"currentModel": "Cấu hình hiện tại",
"brandLogos": "Logo thương hiệu",
"browserNotifications": "Thông báo tác vụ",
"cliAppsCatalog": "Danh mục",
"cliAppsFilter": "Bộ lọc",
"engine": "Bộ máy",
@@ -204,6 +205,7 @@
"selectedModelProvider": "Được đặt bởi mô hình đã chọn.",
"selectedModelValue": "Được đặt bởi mô hình đã chọn.",
"brandLogos": "Hiển thị logo nhà cung cấp bên thứ ba và CLI trong Cài đặt.",
"browserNotifications": "Chỉ thông báo khi trang này ở nền. Mặc định tắt.",
"cliAppsCatalog": "Chỉ cài đặt các bộ chuyển đổi CLI ứng dụng mà nanobot có thể chạy cục bộ; ứng dụng gốc không bị thay đổi.",
"cliAppsFilter": "Tìm theo ứng dụng, danh mục hoặc khả năng.",
"logs": "Mở thư mục nhật ký của bộ máy gốc.",
@@ -999,7 +1001,8 @@
"activity": {
"running": "Tác nhân đang chạy",
"complete": "Tác nhân đã hoàn tất",
"updated": "Hoạt động mới"
"updated": "Hoạt động mới",
"recovery": "Cuộc trò chuyện này cần bạn xử lý"
},
"pin": "Ghim",
"unpin": "Bỏ ghim",
@@ -1422,6 +1425,18 @@
"automationSourceFallback": "Tự động hóa",
"automationTriggered": "Tự động kích hoạt"
},
"recovery": {
"actionFailed": "Khôi phục thất bại. Hãy thử lại.",
"interrupted": "Tác vụ bị gián đoạn",
"completed": "Tác vụ đã hoàn tất",
"failed": "Khôi phục tác vụ thất bại",
"failedHelp": "Không thể khôi phục an toàn tác vụ đã lưu. Hãy xem lại trước khi tiếp tục.",
"resuming": "Đang khôi phục tác vụ bị gián đoạn…",
"review": "Hãy xem lại tác vụ trước khi tiếp tục. Công cụ sẽ không tự động chạy lại.",
"safeResume": "Đang tiếp tục từ ngữ cảnh hội thoại đã lưu.",
"dismiss": "Bỏ qua",
"continue": "Tiếp tục"
},
"lightbox": {
"title": "Xem trước ảnh",
"open": "Xem ảnh",
+16 -1
View File
@@ -198,6 +198,7 @@
"fileEditDisplay": "文件编辑显示",
"codeWrap": "代码换行",
"brandLogos": "品牌 Logo",
"browserNotifications": "任务通知",
"maxResults": "最大结果数",
"timeout": "超时",
"jinaReader": "Jina 阅读器",
@@ -243,6 +244,7 @@
"fileEditDisplay": "选择文件编辑活动默认显示行数还是差异。",
"codeWrap": "让长代码行在小屏幕上也易读。",
"brandLogos": "在设置中显示第三方提供商和 CLI 图标。",
"browserNotifications": "仅在页面位于后台时通知,默认关闭。",
"maxResults": "每次 web_search 调用返回的结果数。",
"timeout": "搜索提供商请求超时前等待的秒数。",
"jinaReader": "可用时为 web_fetch 使用 Jina Reader。",
@@ -1013,7 +1015,8 @@
"activity": {
"running": "智能体正在运行",
"complete": "智能体已完成",
"updated": "有新内容"
"updated": "有新内容",
"recovery": "此对话需要你的处理"
},
"pin": "置顶",
"unpin": "取消置顶",
@@ -1436,6 +1439,18 @@
"estimated": "包含估算用量"
}
},
"recovery": {
"actionFailed": "恢复操作失败,请重试。",
"interrupted": "任务已中断",
"completed": "任务已完成",
"failed": "任务恢复失败",
"failedHelp": "无法安全恢复已保存的任务,继续前请先检查。",
"resuming": "正在恢复中断的任务…",
"review": "继续前请检查任务。工具不会被自动重放。",
"safeResume": "正在从已保存的对话上下文继续。",
"dismiss": "忽略",
"continue": "继续"
},
"lightbox": {
"title": "图片预览",
"open": "查看图片",
+16 -1
View File
@@ -161,6 +161,7 @@
"webuiDefaultAccess": "預設存取權",
"currentModel": "目前設定",
"brandLogos": "品牌 Logo",
"browserNotifications": "任務通知",
"cliAppsCatalog": "目錄",
"cliAppsFilter": "篩選",
"engine": "引擎",
@@ -204,6 +205,7 @@
"selectedModelProvider": "由選取的模型決定。",
"selectedModelValue": "由選取的模型決定。",
"brandLogos": "在設定中顯示第三方供應商與 CLI 圖示。",
"browserNotifications": "僅在頁面位於背景時通知,預設關閉。",
"cliAppsCatalog": "只安裝 nanobot 可在本機執行的應用程式專用 CLI 轉接器;不會改動原生應用程式。",
"cliAppsFilter": "依應用程式、類別或功能搜尋。",
"logs": "開啟原生引擎日誌資料夾。",
@@ -999,7 +1001,8 @@
"activity": {
"running": "智能體正在執行",
"complete": "智能體已完成",
"updated": "有新內容"
"updated": "有新內容",
"recovery": "此對話需要你的處理"
},
"pin": "置頂",
"unpin": "取消置頂",
@@ -1422,6 +1425,18 @@
"automationTriggered": "已自動觸發",
"askAboutSelection": "繼續提問"
},
"recovery": {
"actionFailed": "復原操作失敗,請再試一次。",
"interrupted": "任務已中斷",
"completed": "任務已完成",
"failed": "任務復原失敗",
"failedHelp": "無法安全復原已儲存的任務,繼續前請先檢查。",
"resuming": "正在復原中斷的任務…",
"review": "繼續前請檢查任務。工具不會自動重播。",
"safeResume": "正在從已儲存的對話上下文繼續。",
"dismiss": "略過",
"continue": "繼續"
},
"lightbox": {
"title": "圖片預覽",
"open": "檢視圖片",