diff --git a/app/src/lib/i18n/ar.ts b/app/src/lib/i18n/ar.ts index 59068537e..0541b9ab4 100644 --- a/app/src/lib/i18n/ar.ts +++ b/app/src/lib/i18n/ar.ts @@ -58,6 +58,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'في هذه المحادثة', + 'conversations.backgroundTasks.sectionScheduled': 'المهام المجدولة', + 'conversations.backgroundTasks.sectionSubconscious': 'التفكير اللاواعي', + 'conversations.backgroundTasks.sectionMemory': 'مزامنة الذاكرة', + 'conversations.backgroundTasks.cronEmpty': 'لا توجد مهام مجدولة.', + 'conversations.backgroundTasks.cronUnnamed': 'مهمة بدون عنوان', + 'conversations.backgroundTasks.cronPaused': 'متوقفة مؤقتًا', + 'conversations.backgroundTasks.cronNext': 'التالي {time}', + 'conversations.backgroundTasks.cronLast': 'آخر تشغيل {time}', + 'conversations.backgroundTasks.cronNever': 'لم تُشغَّل بعد', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'كل {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'مرة واحدة', + 'conversations.backgroundTasks.subOff': 'متوقف', + 'conversations.backgroundTasks.subWorking': 'يعمل…', + 'conversations.backgroundTasks.subIdle': 'خامل', + 'conversations.backgroundTasks.subLastRan': 'آخر تشغيل {time}', + 'conversations.backgroundTasks.subNeverRan': 'لم يُشغَّل بعد', + 'conversations.backgroundTasks.subTicks': '{count} عمليات تشغيل', + 'conversations.backgroundTasks.subQueued': '{count} في قائمة الانتظار', + 'conversations.backgroundTasks.memUpToDate': 'كل الذكريات محدَّثة', + 'conversations.backgroundTasks.memIngesting': 'فهرسة {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'فهرسة الذكريات', + 'conversations.backgroundTasks.memQueued': '{count} في قائمة الانتظار', + 'conversations.backgroundTasks.memProviderActive': 'تتم المزامنة الآن', + 'conversations.backgroundTasks.memProviderRecent': 'تمت المزامنة مؤخرًا', + 'conversations.backgroundTasks.memProviderIdle': 'خامل', 'nav.home': 'الرئيسية', 'nav.human': 'إنسان', 'nav.chat': 'المحادثة', diff --git a/app/src/lib/i18n/bn.ts b/app/src/lib/i18n/bn.ts index 524f8322c..941b30393 100644 --- a/app/src/lib/i18n/bn.ts +++ b/app/src/lib/i18n/bn.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'এই চ্যাটে', + 'conversations.backgroundTasks.sectionScheduled': 'নির্ধারিত কাজ', + 'conversations.backgroundTasks.sectionSubconscious': 'অবচেতন চিন্তা', + 'conversations.backgroundTasks.sectionMemory': 'মেমরি সিঙ্ক হচ্ছে', + 'conversations.backgroundTasks.cronEmpty': 'কোনো নির্ধারিত কাজ নেই।', + 'conversations.backgroundTasks.cronUnnamed': 'শিরোনামহীন কাজ', + 'conversations.backgroundTasks.cronPaused': 'বিরতি দেওয়া', + 'conversations.backgroundTasks.cronNext': 'পরবর্তী {time}', + 'conversations.backgroundTasks.cronLast': 'শেষ চালানো {time}', + 'conversations.backgroundTasks.cronNever': 'এখনও চালানো হয়নি', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'প্রতি {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'একবার', + 'conversations.backgroundTasks.subOff': 'বন্ধ', + 'conversations.backgroundTasks.subWorking': 'কাজ করছে…', + 'conversations.backgroundTasks.subIdle': 'নিষ্ক্রিয়', + 'conversations.backgroundTasks.subLastRan': 'শেষ চালানো {time}', + 'conversations.backgroundTasks.subNeverRan': 'এখনও চালানো হয়নি', + 'conversations.backgroundTasks.subTicks': '{count} বার চালানো', + 'conversations.backgroundTasks.subQueued': '{count} সারিবদ্ধ', + 'conversations.backgroundTasks.memUpToDate': 'সব মেমরি হালনাগাদ', + 'conversations.backgroundTasks.memIngesting': '{title} সূচিবদ্ধ হচ্ছে', + 'conversations.backgroundTasks.memIngestingUntitled': 'মেমরি সূচিবদ্ধ হচ্ছে', + 'conversations.backgroundTasks.memQueued': '{count} সারিবদ্ধ', + 'conversations.backgroundTasks.memProviderActive': 'এখন সিঙ্ক হচ্ছে', + 'conversations.backgroundTasks.memProviderRecent': 'সম্প্রতি সিঙ্ক হয়েছে', + 'conversations.backgroundTasks.memProviderIdle': 'নিষ্ক্রিয়', 'nav.home': 'হোম', 'nav.human': 'হিউম্যান', 'nav.chat': 'চ্যাট', diff --git a/app/src/lib/i18n/de.ts b/app/src/lib/i18n/de.ts index 319dc784e..781f4c040 100644 --- a/app/src/lib/i18n/de.ts +++ b/app/src/lib/i18n/de.ts @@ -60,6 +60,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'In diesem Chat', + 'conversations.backgroundTasks.sectionScheduled': 'Geplante Aufgaben', + 'conversations.backgroundTasks.sectionSubconscious': 'Unterbewusstes Denken', + 'conversations.backgroundTasks.sectionMemory': 'Speicher wird synchronisiert', + 'conversations.backgroundTasks.cronEmpty': 'Keine geplanten Aufgaben.', + 'conversations.backgroundTasks.cronUnnamed': 'Unbenannte Aufgabe', + 'conversations.backgroundTasks.cronPaused': 'Pausiert', + 'conversations.backgroundTasks.cronNext': 'Nächste {time}', + 'conversations.backgroundTasks.cronLast': 'Zuletzt {time}', + 'conversations.backgroundTasks.cronNever': 'Noch nicht ausgeführt', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Alle {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Einmalig', + 'conversations.backgroundTasks.subOff': 'Aus', + 'conversations.backgroundTasks.subWorking': 'Arbeitet…', + 'conversations.backgroundTasks.subIdle': 'Inaktiv', + 'conversations.backgroundTasks.subLastRan': 'Zuletzt ausgeführt {time}', + 'conversations.backgroundTasks.subNeverRan': 'Noch nicht ausgeführt', + 'conversations.backgroundTasks.subTicks': '{count} Durchläufe', + 'conversations.backgroundTasks.subQueued': '{count} in Warteschlange', + 'conversations.backgroundTasks.memUpToDate': 'Alle Erinnerungen aktuell', + 'conversations.backgroundTasks.memIngesting': '{title} wird indexiert', + 'conversations.backgroundTasks.memIngestingUntitled': 'Erinnerungen werden indexiert', + 'conversations.backgroundTasks.memQueued': '{count} in Warteschlange', + 'conversations.backgroundTasks.memProviderActive': 'Wird jetzt synchronisiert', + 'conversations.backgroundTasks.memProviderRecent': 'Kürzlich synchronisiert', + 'conversations.backgroundTasks.memProviderIdle': 'Inaktiv', 'nav.home': 'Start', 'nav.human': 'Mensch', 'nav.chat': 'Chat', diff --git a/app/src/lib/i18n/en.ts b/app/src/lib/i18n/en.ts index 7c696ce66..089a93126 100644 --- a/app/src/lib/i18n/en.ts +++ b/app/src/lib/i18n/en.ts @@ -3658,6 +3658,37 @@ const en: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + // Section headers for the broader background-activity panel. + 'conversations.backgroundTasks.sectionThisChat': 'In this chat', + 'conversations.backgroundTasks.sectionScheduled': 'Scheduled jobs', + 'conversations.backgroundTasks.sectionSubconscious': 'Subconscious thinking', + 'conversations.backgroundTasks.sectionMemory': 'Memory syncing', + // Scheduled (cron) jobs. + 'conversations.backgroundTasks.cronEmpty': 'No scheduled jobs.', + 'conversations.backgroundTasks.cronUnnamed': 'Untitled job', + 'conversations.backgroundTasks.cronPaused': 'Paused', + 'conversations.backgroundTasks.cronNext': 'Next {time}', + 'conversations.backgroundTasks.cronLast': 'Last run {time}', + 'conversations.backgroundTasks.cronNever': 'Hasn’t run yet', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Every {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Once', + // Subconscious / heartbeat loop. + 'conversations.backgroundTasks.subOff': 'Off', + 'conversations.backgroundTasks.subWorking': 'Working…', + 'conversations.backgroundTasks.subIdle': 'Idle', + 'conversations.backgroundTasks.subLastRan': 'Last ran {time}', + 'conversations.backgroundTasks.subNeverRan': 'Hasn’t run yet', + 'conversations.backgroundTasks.subTicks': '{count} runs', + 'conversations.backgroundTasks.subQueued': '{count} queued', + // Memory syncing / ingestion. + 'conversations.backgroundTasks.memUpToDate': 'All memories up to date', + 'conversations.backgroundTasks.memIngesting': 'Indexing {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indexing memories', + 'conversations.backgroundTasks.memQueued': '{count} queued', + 'conversations.backgroundTasks.memProviderActive': 'Syncing now', + 'conversations.backgroundTasks.memProviderRecent': 'Synced recently', + 'conversations.backgroundTasks.memProviderIdle': 'Idle', 'conversations.subagent.statusRunning': 'running', 'conversations.subagent.statusCompleted': 'completed', 'conversations.subagent.statusFailed': 'failed', diff --git a/app/src/lib/i18n/es.ts b/app/src/lib/i18n/es.ts index e5e7c7735..427ea7c81 100644 --- a/app/src/lib/i18n/es.ts +++ b/app/src/lib/i18n/es.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'En este chat', + 'conversations.backgroundTasks.sectionScheduled': 'Tareas programadas', + 'conversations.backgroundTasks.sectionSubconscious': 'Pensamiento subconsciente', + 'conversations.backgroundTasks.sectionMemory': 'Sincronizando memoria', + 'conversations.backgroundTasks.cronEmpty': 'No hay tareas programadas.', + 'conversations.backgroundTasks.cronUnnamed': 'Tarea sin título', + 'conversations.backgroundTasks.cronPaused': 'En pausa', + 'conversations.backgroundTasks.cronNext': 'Próxima {time}', + 'conversations.backgroundTasks.cronLast': 'Última ejecución {time}', + 'conversations.backgroundTasks.cronNever': 'Aún no se ha ejecutado', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Cada {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Una vez', + 'conversations.backgroundTasks.subOff': 'Desactivado', + 'conversations.backgroundTasks.subWorking': 'Trabajando…', + 'conversations.backgroundTasks.subIdle': 'Inactivo', + 'conversations.backgroundTasks.subLastRan': 'Última ejecución {time}', + 'conversations.backgroundTasks.subNeverRan': 'Aún no se ha ejecutado', + 'conversations.backgroundTasks.subTicks': '{count} ejecuciones', + 'conversations.backgroundTasks.subQueued': '{count} en cola', + 'conversations.backgroundTasks.memUpToDate': 'Todas las memorias actualizadas', + 'conversations.backgroundTasks.memIngesting': 'Indexando {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indexando memorias', + 'conversations.backgroundTasks.memQueued': '{count} en cola', + 'conversations.backgroundTasks.memProviderActive': 'Sincronizando ahora', + 'conversations.backgroundTasks.memProviderRecent': 'Sincronizado recientemente', + 'conversations.backgroundTasks.memProviderIdle': 'Inactivo', 'nav.home': 'Inicio', 'nav.human': 'Humano', 'nav.chat': 'Charla', diff --git a/app/src/lib/i18n/fr.ts b/app/src/lib/i18n/fr.ts index 710a3dd26..6c699b27a 100644 --- a/app/src/lib/i18n/fr.ts +++ b/app/src/lib/i18n/fr.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'Dans ce chat', + 'conversations.backgroundTasks.sectionScheduled': 'Tâches planifiées', + 'conversations.backgroundTasks.sectionSubconscious': 'Pensée subconsciente', + 'conversations.backgroundTasks.sectionMemory': 'Synchronisation de la mémoire', + 'conversations.backgroundTasks.cronEmpty': 'Aucune tâche planifiée.', + 'conversations.backgroundTasks.cronUnnamed': 'Tâche sans titre', + 'conversations.backgroundTasks.cronPaused': 'En pause', + 'conversations.backgroundTasks.cronNext': 'Prochaine {time}', + 'conversations.backgroundTasks.cronLast': 'Dernière exécution {time}', + 'conversations.backgroundTasks.cronNever': 'Pas encore exécutée', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Toutes les {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Une fois', + 'conversations.backgroundTasks.subOff': 'Désactivé', + 'conversations.backgroundTasks.subWorking': 'En cours…', + 'conversations.backgroundTasks.subIdle': 'Inactif', + 'conversations.backgroundTasks.subLastRan': 'Dernière exécution {time}', + 'conversations.backgroundTasks.subNeverRan': 'Pas encore exécutée', + 'conversations.backgroundTasks.subTicks': '{count} exécutions', + 'conversations.backgroundTasks.subQueued': '{count} en file d’attente', + 'conversations.backgroundTasks.memUpToDate': 'Tous les souvenirs à jour', + 'conversations.backgroundTasks.memIngesting': 'Indexation de {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indexation des souvenirs', + 'conversations.backgroundTasks.memQueued': '{count} en file d’attente', + 'conversations.backgroundTasks.memProviderActive': 'Synchronisation en cours', + 'conversations.backgroundTasks.memProviderRecent': 'Synchronisé récemment', + 'conversations.backgroundTasks.memProviderIdle': 'Inactif', 'nav.home': 'Accueil', 'nav.human': 'Humain', 'nav.chat': 'Chat', diff --git a/app/src/lib/i18n/hi.ts b/app/src/lib/i18n/hi.ts index 9c16843a2..8420419f8 100644 --- a/app/src/lib/i18n/hi.ts +++ b/app/src/lib/i18n/hi.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'इस चैट में', + 'conversations.backgroundTasks.sectionScheduled': 'शेड्यूल किए गए कार्य', + 'conversations.backgroundTasks.sectionSubconscious': 'अवचेतन सोच', + 'conversations.backgroundTasks.sectionMemory': 'मेमोरी सिंक हो रही है', + 'conversations.backgroundTasks.cronEmpty': 'कोई शेड्यूल किए गए कार्य नहीं।', + 'conversations.backgroundTasks.cronUnnamed': 'शीर्षकहीन कार्य', + 'conversations.backgroundTasks.cronPaused': 'रुका हुआ', + 'conversations.backgroundTasks.cronNext': 'अगला {time}', + 'conversations.backgroundTasks.cronLast': 'अंतिम बार चला {time}', + 'conversations.backgroundTasks.cronNever': 'अभी तक नहीं चला', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'हर {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'एक बार', + 'conversations.backgroundTasks.subOff': 'बंद', + 'conversations.backgroundTasks.subWorking': 'काम कर रहा है…', + 'conversations.backgroundTasks.subIdle': 'निष्क्रिय', + 'conversations.backgroundTasks.subLastRan': 'अंतिम बार चला {time}', + 'conversations.backgroundTasks.subNeverRan': 'अभी तक नहीं चला', + 'conversations.backgroundTasks.subTicks': '{count} बार चला', + 'conversations.backgroundTasks.subQueued': '{count} कतार में', + 'conversations.backgroundTasks.memUpToDate': 'सभी यादें अद्यतित', + 'conversations.backgroundTasks.memIngesting': '{title} अनुक्रमित हो रहा है', + 'conversations.backgroundTasks.memIngestingUntitled': 'यादें अनुक्रमित हो रही हैं', + 'conversations.backgroundTasks.memQueued': '{count} कतार में', + 'conversations.backgroundTasks.memProviderActive': 'अभी सिंक हो रहा है', + 'conversations.backgroundTasks.memProviderRecent': 'हाल ही में सिंक हुआ', + 'conversations.backgroundTasks.memProviderIdle': 'निष्क्रिय', 'nav.home': 'होम', 'nav.human': 'मानव', 'nav.chat': 'चैट', diff --git a/app/src/lib/i18n/id.ts b/app/src/lib/i18n/id.ts index 1bee6e442..0c844ef73 100644 --- a/app/src/lib/i18n/id.ts +++ b/app/src/lib/i18n/id.ts @@ -58,6 +58,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'Di obrolan ini', + 'conversations.backgroundTasks.sectionScheduled': 'Tugas terjadwal', + 'conversations.backgroundTasks.sectionSubconscious': 'Pemikiran bawah sadar', + 'conversations.backgroundTasks.sectionMemory': 'Menyinkronkan memori', + 'conversations.backgroundTasks.cronEmpty': 'Tidak ada tugas terjadwal.', + 'conversations.backgroundTasks.cronUnnamed': 'Tugas tanpa judul', + 'conversations.backgroundTasks.cronPaused': 'Dijeda', + 'conversations.backgroundTasks.cronNext': 'Berikutnya {time}', + 'conversations.backgroundTasks.cronLast': 'Terakhir dijalankan {time}', + 'conversations.backgroundTasks.cronNever': 'Belum pernah dijalankan', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Setiap {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Sekali', + 'conversations.backgroundTasks.subOff': 'Mati', + 'conversations.backgroundTasks.subWorking': 'Bekerja…', + 'conversations.backgroundTasks.subIdle': 'Diam', + 'conversations.backgroundTasks.subLastRan': 'Terakhir dijalankan {time}', + 'conversations.backgroundTasks.subNeverRan': 'Belum pernah dijalankan', + 'conversations.backgroundTasks.subTicks': '{count} kali dijalankan', + 'conversations.backgroundTasks.subQueued': '{count} dalam antrean', + 'conversations.backgroundTasks.memUpToDate': 'Semua memori terkini', + 'conversations.backgroundTasks.memIngesting': 'Mengindeks {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Mengindeks memori', + 'conversations.backgroundTasks.memQueued': '{count} dalam antrean', + 'conversations.backgroundTasks.memProviderActive': 'Menyinkronkan sekarang', + 'conversations.backgroundTasks.memProviderRecent': 'Baru saja disinkronkan', + 'conversations.backgroundTasks.memProviderIdle': 'Diam', 'nav.home': 'Beranda', 'nav.human': 'Manusia', 'nav.chat': 'Obrolan', diff --git a/app/src/lib/i18n/it.ts b/app/src/lib/i18n/it.ts index 2ce02735b..be39d88e2 100644 --- a/app/src/lib/i18n/it.ts +++ b/app/src/lib/i18n/it.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'In questa chat', + 'conversations.backgroundTasks.sectionScheduled': 'Attività pianificate', + 'conversations.backgroundTasks.sectionSubconscious': 'Pensiero subconscio', + 'conversations.backgroundTasks.sectionMemory': 'Sincronizzazione memoria', + 'conversations.backgroundTasks.cronEmpty': 'Nessuna attività pianificata.', + 'conversations.backgroundTasks.cronUnnamed': 'Attività senza titolo', + 'conversations.backgroundTasks.cronPaused': 'In pausa', + 'conversations.backgroundTasks.cronNext': 'Prossima {time}', + 'conversations.backgroundTasks.cronLast': 'Ultima esecuzione {time}', + 'conversations.backgroundTasks.cronNever': 'Non ancora eseguita', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Ogni {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Una volta', + 'conversations.backgroundTasks.subOff': 'Disattivato', + 'conversations.backgroundTasks.subWorking': 'In corso…', + 'conversations.backgroundTasks.subIdle': 'Inattivo', + 'conversations.backgroundTasks.subLastRan': 'Ultima esecuzione {time}', + 'conversations.backgroundTasks.subNeverRan': 'Non ancora eseguita', + 'conversations.backgroundTasks.subTicks': '{count} esecuzioni', + 'conversations.backgroundTasks.subQueued': '{count} in coda', + 'conversations.backgroundTasks.memUpToDate': 'Tutti i ricordi aggiornati', + 'conversations.backgroundTasks.memIngesting': 'Indicizzazione di {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indicizzazione dei ricordi', + 'conversations.backgroundTasks.memQueued': '{count} in coda', + 'conversations.backgroundTasks.memProviderActive': 'Sincronizzazione in corso', + 'conversations.backgroundTasks.memProviderRecent': 'Sincronizzato di recente', + 'conversations.backgroundTasks.memProviderIdle': 'Inattivo', 'nav.home': 'Home', 'nav.human': 'Umano', 'nav.chat': 'Chat', diff --git a/app/src/lib/i18n/ko.ts b/app/src/lib/i18n/ko.ts index b8a3e51e6..861917969 100644 --- a/app/src/lib/i18n/ko.ts +++ b/app/src/lib/i18n/ko.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': '이 채팅에서', + 'conversations.backgroundTasks.sectionScheduled': '예약된 작업', + 'conversations.backgroundTasks.sectionSubconscious': '잠재의식 사고', + 'conversations.backgroundTasks.sectionMemory': '메모리 동기화 중', + 'conversations.backgroundTasks.cronEmpty': '예약된 작업이 없습니다.', + 'conversations.backgroundTasks.cronUnnamed': '제목 없는 작업', + 'conversations.backgroundTasks.cronPaused': '일시 중지됨', + 'conversations.backgroundTasks.cronNext': '다음 {time}', + 'conversations.backgroundTasks.cronLast': '마지막 실행 {time}', + 'conversations.backgroundTasks.cronNever': '아직 실행되지 않음', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': '{duration}마다', + 'conversations.backgroundTasks.cronSchedAt': '한 번', + 'conversations.backgroundTasks.subOff': '꺼짐', + 'conversations.backgroundTasks.subWorking': '작업 중…', + 'conversations.backgroundTasks.subIdle': '대기 중', + 'conversations.backgroundTasks.subLastRan': '마지막 실행 {time}', + 'conversations.backgroundTasks.subNeverRan': '아직 실행되지 않음', + 'conversations.backgroundTasks.subTicks': '{count}회 실행', + 'conversations.backgroundTasks.subQueued': '{count}개 대기 중', + 'conversations.backgroundTasks.memUpToDate': '모든 메모리가 최신 상태', + 'conversations.backgroundTasks.memIngesting': '{title} 색인 중', + 'conversations.backgroundTasks.memIngestingUntitled': '메모리 색인 중', + 'conversations.backgroundTasks.memQueued': '{count}개 대기 중', + 'conversations.backgroundTasks.memProviderActive': '지금 동기화 중', + 'conversations.backgroundTasks.memProviderRecent': '최근 동기화됨', + 'conversations.backgroundTasks.memProviderIdle': '대기 중', 'nav.home': '홈', 'nav.human': '휴먼', 'nav.chat': '채팅', diff --git a/app/src/lib/i18n/pl.ts b/app/src/lib/i18n/pl.ts index ee271494c..583817dc8 100644 --- a/app/src/lib/i18n/pl.ts +++ b/app/src/lib/i18n/pl.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'W tym czacie', + 'conversations.backgroundTasks.sectionScheduled': 'Zaplanowane zadania', + 'conversations.backgroundTasks.sectionSubconscious': 'Myślenie podświadome', + 'conversations.backgroundTasks.sectionMemory': 'Synchronizacja pamięci', + 'conversations.backgroundTasks.cronEmpty': 'Brak zaplanowanych zadań.', + 'conversations.backgroundTasks.cronUnnamed': 'Zadanie bez nazwy', + 'conversations.backgroundTasks.cronPaused': 'Wstrzymane', + 'conversations.backgroundTasks.cronNext': 'Następne {time}', + 'conversations.backgroundTasks.cronLast': 'Ostatnie uruchomienie {time}', + 'conversations.backgroundTasks.cronNever': 'Jeszcze nie uruchomiono', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Co {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Jednorazowo', + 'conversations.backgroundTasks.subOff': 'Wyłączone', + 'conversations.backgroundTasks.subWorking': 'Pracuje…', + 'conversations.backgroundTasks.subIdle': 'Bezczynne', + 'conversations.backgroundTasks.subLastRan': 'Ostatnie uruchomienie {time}', + 'conversations.backgroundTasks.subNeverRan': 'Jeszcze nie uruchomiono', + 'conversations.backgroundTasks.subTicks': '{count} uruchomień', + 'conversations.backgroundTasks.subQueued': '{count} w kolejce', + 'conversations.backgroundTasks.memUpToDate': 'Wszystkie wspomnienia aktualne', + 'conversations.backgroundTasks.memIngesting': 'Indeksowanie {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indeksowanie wspomnień', + 'conversations.backgroundTasks.memQueued': '{count} w kolejce', + 'conversations.backgroundTasks.memProviderActive': 'Synchronizowanie teraz', + 'conversations.backgroundTasks.memProviderRecent': 'Niedawno zsynchronizowano', + 'conversations.backgroundTasks.memProviderIdle': 'Bezczynne', 'nav.home': 'Start', 'nav.human': 'Człowiek', 'nav.chat': 'Czat', diff --git a/app/src/lib/i18n/pt.ts b/app/src/lib/i18n/pt.ts index aedb7496d..80694700f 100644 --- a/app/src/lib/i18n/pt.ts +++ b/app/src/lib/i18n/pt.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'Neste chat', + 'conversations.backgroundTasks.sectionScheduled': 'Tarefas agendadas', + 'conversations.backgroundTasks.sectionSubconscious': 'Pensamento subconsciente', + 'conversations.backgroundTasks.sectionMemory': 'Sincronizando memória', + 'conversations.backgroundTasks.cronEmpty': 'Nenhuma tarefa agendada.', + 'conversations.backgroundTasks.cronUnnamed': 'Tarefa sem título', + 'conversations.backgroundTasks.cronPaused': 'Pausada', + 'conversations.backgroundTasks.cronNext': 'Próxima {time}', + 'conversations.backgroundTasks.cronLast': 'Última execução {time}', + 'conversations.backgroundTasks.cronNever': 'Ainda não executada', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'A cada {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Uma vez', + 'conversations.backgroundTasks.subOff': 'Desligado', + 'conversations.backgroundTasks.subWorking': 'Trabalhando…', + 'conversations.backgroundTasks.subIdle': 'Ocioso', + 'conversations.backgroundTasks.subLastRan': 'Última execução {time}', + 'conversations.backgroundTasks.subNeverRan': 'Ainda não executada', + 'conversations.backgroundTasks.subTicks': '{count} execuções', + 'conversations.backgroundTasks.subQueued': '{count} na fila', + 'conversations.backgroundTasks.memUpToDate': 'Todas as memórias atualizadas', + 'conversations.backgroundTasks.memIngesting': 'Indexando {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Indexando memórias', + 'conversations.backgroundTasks.memQueued': '{count} na fila', + 'conversations.backgroundTasks.memProviderActive': 'Sincronizando agora', + 'conversations.backgroundTasks.memProviderRecent': 'Sincronizado recentemente', + 'conversations.backgroundTasks.memProviderIdle': 'Ocioso', 'nav.home': 'Início', 'nav.human': 'Humano', 'nav.chat': 'Bate-papo', diff --git a/app/src/lib/i18n/ru.ts b/app/src/lib/i18n/ru.ts index 6c82da9cc..c6776f0b9 100644 --- a/app/src/lib/i18n/ru.ts +++ b/app/src/lib/i18n/ru.ts @@ -59,6 +59,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': 'В этом чате', + 'conversations.backgroundTasks.sectionScheduled': 'Запланированные задачи', + 'conversations.backgroundTasks.sectionSubconscious': 'Подсознательное мышление', + 'conversations.backgroundTasks.sectionMemory': 'Синхронизация памяти', + 'conversations.backgroundTasks.cronEmpty': 'Нет запланированных задач.', + 'conversations.backgroundTasks.cronUnnamed': 'Задача без названия', + 'conversations.backgroundTasks.cronPaused': 'Приостановлено', + 'conversations.backgroundTasks.cronNext': 'Следующий запуск {time}', + 'conversations.backgroundTasks.cronLast': 'Последний запуск {time}', + 'conversations.backgroundTasks.cronNever': 'Ещё не запускалась', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': 'Каждые {duration}', + 'conversations.backgroundTasks.cronSchedAt': 'Один раз', + 'conversations.backgroundTasks.subOff': 'Выключено', + 'conversations.backgroundTasks.subWorking': 'Работает…', + 'conversations.backgroundTasks.subIdle': 'Простаивает', + 'conversations.backgroundTasks.subLastRan': 'Последний запуск {time}', + 'conversations.backgroundTasks.subNeverRan': 'Ещё не запускалась', + 'conversations.backgroundTasks.subTicks': '{count} запусков', + 'conversations.backgroundTasks.subQueued': '{count} в очереди', + 'conversations.backgroundTasks.memUpToDate': 'Все воспоминания актуальны', + 'conversations.backgroundTasks.memIngesting': 'Индексация {title}', + 'conversations.backgroundTasks.memIngestingUntitled': 'Индексация воспоминаний', + 'conversations.backgroundTasks.memQueued': '{count} в очереди', + 'conversations.backgroundTasks.memProviderActive': 'Синхронизация сейчас', + 'conversations.backgroundTasks.memProviderRecent': 'Недавно синхронизировано', + 'conversations.backgroundTasks.memProviderIdle': 'Простаивает', 'nav.home': 'Главная', 'nav.human': 'Человек', 'nav.chat': 'Чат', diff --git a/app/src/lib/i18n/zh-CN.ts b/app/src/lib/i18n/zh-CN.ts index 61d2202d9..33aee0891 100644 --- a/app/src/lib/i18n/zh-CN.ts +++ b/app/src/lib/i18n/zh-CN.ts @@ -58,6 +58,33 @@ const messages: TranslationMap = { 'conversations.backgroundTasks.steps': '{count} steps', 'conversations.backgroundTasks.viewDetails': 'View details →', 'conversations.backgroundTasks.close': 'Close', + 'conversations.backgroundTasks.sectionThisChat': '在此对话中', + 'conversations.backgroundTasks.sectionScheduled': '计划任务', + 'conversations.backgroundTasks.sectionSubconscious': '潜意识思考', + 'conversations.backgroundTasks.sectionMemory': '正在同步记忆', + 'conversations.backgroundTasks.cronEmpty': '没有计划任务。', + 'conversations.backgroundTasks.cronUnnamed': '未命名任务', + 'conversations.backgroundTasks.cronPaused': '已暂停', + 'conversations.backgroundTasks.cronNext': '下次 {time}', + 'conversations.backgroundTasks.cronLast': '上次运行 {time}', + 'conversations.backgroundTasks.cronNever': '尚未运行', + 'conversations.backgroundTasks.cronSchedCron': 'Cron {expr}', + 'conversations.backgroundTasks.cronSchedEvery': '每 {duration}', + 'conversations.backgroundTasks.cronSchedAt': '一次', + 'conversations.backgroundTasks.subOff': '关闭', + 'conversations.backgroundTasks.subWorking': '工作中…', + 'conversations.backgroundTasks.subIdle': '空闲', + 'conversations.backgroundTasks.subLastRan': '上次运行 {time}', + 'conversations.backgroundTasks.subNeverRan': '尚未运行', + 'conversations.backgroundTasks.subTicks': '{count} 次运行', + 'conversations.backgroundTasks.subQueued': '{count} 个排队中', + 'conversations.backgroundTasks.memUpToDate': '所有记忆均为最新', + 'conversations.backgroundTasks.memIngesting': '正在索引 {title}', + 'conversations.backgroundTasks.memIngestingUntitled': '正在索引记忆', + 'conversations.backgroundTasks.memQueued': '{count} 个排队中', + 'conversations.backgroundTasks.memProviderActive': '正在同步', + 'conversations.backgroundTasks.memProviderRecent': '最近已同步', + 'conversations.backgroundTasks.memProviderIdle': '空闲', 'nav.home': '首页', 'nav.human': '助手', 'nav.chat': '对话', diff --git a/app/src/pages/Conversations.tsx b/app/src/pages/Conversations.tsx index b88214c78..17da04465 100644 --- a/app/src/pages/Conversations.tsx +++ b/app/src/pages/Conversations.tsx @@ -105,6 +105,7 @@ import { getComposerBlockedSendFeedback, handleComposerSlashCommand, } from './conversations/composerSendDecision'; +import { useMemorySyncActive } from './conversations/hooks/useBackgroundActivity'; import { runDecidePlan } from './conversations/taskPlanActions'; import { type AgentBubblePosition, @@ -1458,6 +1459,9 @@ const Conversations = ({ [selectedThreadToolTimeline] ); const runningBackgroundCount = backgroundProcesses.filter(p => p.status === 'running').length; + // Poll-free live signal: lights the badge when memories are syncing even if + // no sub-agent is running and the panel is closed. + const memorySyncActive = useMemorySyncActive(); // Re-derive the open subagent's live activity (and its row status) from the // timeline on every render so the drawer streams token-by-token as // subagent_text_delta / subagent_thinking_delta events land in Redux. @@ -2808,11 +2812,16 @@ const Conversations = ({ d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z" /> - {runningBackgroundCount > 0 && ( + {runningBackgroundCount > 0 ? ( {runningBackgroundCount} - )} + ) : memorySyncActive ? ( + + ) : null} )} {(selectedThreadId ?? firstActiveThreadId) && ( diff --git a/app/src/pages/conversations/components/BackgroundActivityRows.tsx b/app/src/pages/conversations/components/BackgroundActivityRows.tsx new file mode 100644 index 000000000..4f150f606 --- /dev/null +++ b/app/src/pages/conversations/components/BackgroundActivityRows.tsx @@ -0,0 +1,277 @@ +import { useT } from '../../../lib/i18n/I18nContext'; +import type { CoreCronJob, CoreCronSchedule } from '../../../utils/tauriCommands/cron'; +import type { MemorySyncStatusRow } from '../../../utils/tauriCommands/memoryTree'; +import type { MemorySyncSummary, SubconsciousSummary } from '../hooks/useBackgroundActivity'; +import { formatRelativeTime, formatResetTime } from '../utils/format'; + +/** Small, grey section divider shared across the background-activity sections. */ +export function SectionHeader({ title, hint }: { title: string; hint?: string }) { + return ( +