mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
feat(ios): replace the tab bar with a black overlay sidebar (web parity + dashboard) (#111339)
* feat(ios): unify navigation on a black overlay sidebar and drop the phone tab bar * test(ios): rework navigation tests and snapshot UITests for the sidebar shell * chore(i18n): sync derived native catalogs for sidebar strings * feat(ios): reveal the sidebar beneath a push-away rounded content card * feat(ios): web-parity sidebar — agent switcher, pinned pages, sessions vocabulary, uniform content card * chore(i18n): translate sidebar and session strings across native catalogs * fix(ios): sidebar footer shows connection dot only when degraded, like the web * feat(ios): sidebar toggle top-left with edge-swipe open; card surface owns the drawer chrome * fix(ios): single sidebar refresh owner, alias-aware Home badges, RM tap-close, user pin order, drop vestigial idiom shims * feat(ios): align sidebar with the mobile prototype — agent roster, theme-following palette, web session subtitles, row badges * chore(i18n): translate agent roster and Recent strings across native catalogs * feat(ios): frosted-glass agent picker with uniform drawer insets * fix(ios): address sidebar review findings — settings toggle edge, per-agent scoping, alias-aware selection, cron paging, refresh cadence * fix(ios): clear landing CI blockers
This commit is contained in:
@@ -320,7 +320,6 @@
|
||||
"source": "Agent",
|
||||
"translations": [
|
||||
"Agent",
|
||||
"代理",
|
||||
"代理程式"
|
||||
]
|
||||
},
|
||||
@@ -861,14 +860,6 @@
|
||||
"Aufmerksamkeit erforderlich"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"توجه",
|
||||
"نیازمند توجه"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"source": "Attention",
|
||||
@@ -885,14 +876,6 @@
|
||||
"주의 필요"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"Aandacht",
|
||||
"Let op"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"source": "Attention",
|
||||
@@ -914,7 +897,6 @@
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"Kräver uppmärksamhet",
|
||||
"Observera",
|
||||
"Åtgärd krävs"
|
||||
]
|
||||
},
|
||||
@@ -923,8 +905,7 @@
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"ต้องดำเนินการ",
|
||||
"ต้องตรวจสอบ",
|
||||
"โปรดทราบ"
|
||||
"ต้องตรวจสอบ"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -935,14 +916,6 @@
|
||||
"Увага"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"Chú ý",
|
||||
"Cần chú ý"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-CN",
|
||||
"source": "Attention",
|
||||
@@ -951,14 +924,6 @@
|
||||
"需要注意"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Attention",
|
||||
"translations": [
|
||||
"注意",
|
||||
"需要注意"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "Automations",
|
||||
@@ -1093,7 +1058,6 @@
|
||||
"source": "Chat",
|
||||
"translations": [
|
||||
"Chat",
|
||||
"چت",
|
||||
"گفتوگو"
|
||||
]
|
||||
},
|
||||
@@ -1587,14 +1551,6 @@
|
||||
"已連線"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"source": "Connecting",
|
||||
"translations": [
|
||||
"Verbinden",
|
||||
"Verbindung wird hergestellt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Connecting",
|
||||
@@ -1756,22 +1712,6 @@
|
||||
"Devam et"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "Control",
|
||||
"translations": [
|
||||
"कंट्रोल",
|
||||
"नियंत्रण"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"source": "Control",
|
||||
"translations": [
|
||||
"การควบคุม",
|
||||
"ควบคุม"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"source": "Copy Session Key",
|
||||
@@ -2051,8 +1991,7 @@
|
||||
"source": "Default Agent",
|
||||
"translations": [
|
||||
"Varsayılan Agent",
|
||||
"Varsayılan Ajan",
|
||||
"Varsayılan Temsilci"
|
||||
"Varsayılan Ajan"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2076,8 +2015,7 @@
|
||||
"source": "Default Agent",
|
||||
"translations": [
|
||||
"預設 Agent",
|
||||
"預設代理",
|
||||
"預設代理程式"
|
||||
"預設代理"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2160,46 +2098,6 @@
|
||||
"删除群组"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "Delete Thread",
|
||||
"translations": [
|
||||
"حذف المحادثة",
|
||||
"حذف سلسلة المحادثة"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "sv",
|
||||
"source": "Delete Thread",
|
||||
"translations": [
|
||||
"Radera tråd",
|
||||
"Ta bort tråd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"source": "Delete Thread",
|
||||
"translations": [
|
||||
"İleti Dizisini Sil",
|
||||
"İş Parçacığını Sil"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-CN",
|
||||
"source": "Delete Thread",
|
||||
"translations": [
|
||||
"删除对话",
|
||||
"删除话题"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Delete Thread",
|
||||
"translations": [
|
||||
"刪除對話串",
|
||||
"刪除討論串"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Delete “%@”?",
|
||||
@@ -2771,8 +2669,7 @@
|
||||
"translations": [
|
||||
"Dreaming",
|
||||
"구상 중",
|
||||
"꿈꾸는 중",
|
||||
"드리밍"
|
||||
"꿈꾸는 중"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2830,8 +2727,7 @@
|
||||
"Dreaming",
|
||||
"Düş kuruyor",
|
||||
"Düşünüyor",
|
||||
"Hayal Kuruyor",
|
||||
"Rüya Görüyor"
|
||||
"Hayal Kuruyor"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -4420,6 +4316,150 @@
|
||||
"載入中"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Sitzungen werden geladen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Cargando sesiones",
|
||||
"Loading sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"در حال بارگذاری جلسهها"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Chargement des sessions",
|
||||
"Loading sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"सत्र लोड हो रहे हैं"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Memuat sesi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Caricamento delle sessioni",
|
||||
"Caricamento sessioni"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ja-JP",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"セッションを読み込み中"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ko",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"세션 불러오는 중"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Sessies laden"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Wczytywanie sesji"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pt-BR",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Carregando sessões",
|
||||
"Loading sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ru",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Загрузка сеансов"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "sv",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Läser in sessioner"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"กำลังโหลดเซสชัน"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"Завантаження сеансів"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Đang tải các phiên",
|
||||
"Đang tải phiên"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Loading sessions",
|
||||
"translations": [
|
||||
"Loading sessions",
|
||||
"正在載入工作階段"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Location",
|
||||
@@ -5064,7 +5104,6 @@
|
||||
"locale": "fr",
|
||||
"source": "Needs attention",
|
||||
"translations": [
|
||||
"Attention requise",
|
||||
"Nécessite une attention",
|
||||
"Nécessite votre attention"
|
||||
]
|
||||
@@ -5085,6 +5124,14 @@
|
||||
"Vereist aandacht"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pt-BR",
|
||||
"source": "Needs attention",
|
||||
"translations": [
|
||||
"Precisa de atenção",
|
||||
"Requer atenção"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "sv",
|
||||
"source": "Needs attention",
|
||||
@@ -5099,7 +5146,7 @@
|
||||
"translations": [
|
||||
"ต้องการการดูแล",
|
||||
"ต้องการความสนใจ",
|
||||
"ต้องดำเนินการ"
|
||||
"ต้องตรวจสอบ"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -5107,8 +5154,7 @@
|
||||
"source": "Needs attention",
|
||||
"translations": [
|
||||
"Dikkat gerekiyor",
|
||||
"Dikkat gerektiriyor",
|
||||
"İlgilenilmesi gerekiyor"
|
||||
"Dikkat gerektiriyor"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -5271,46 +5317,6 @@
|
||||
"沒有待處理的核准"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "No archived threads",
|
||||
"translations": [
|
||||
"Aucun fil archivé",
|
||||
"Aucun fil de discussion archivé"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "No archived threads",
|
||||
"translations": [
|
||||
"Geen gearchiveerde gesprekken",
|
||||
"Geen gearchiveerde threads"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"source": "No archived threads",
|
||||
"translations": [
|
||||
"Немає архівних гілок",
|
||||
"Немає архівованих гілок"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"source": "No archived threads",
|
||||
"translations": [
|
||||
"Không có luồng nào đã lưu trữ",
|
||||
"Không có luồng nào được lưu trữ"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "No archived threads",
|
||||
"translations": [
|
||||
"沒有已封存的對話串",
|
||||
"沒有已封存的討論串"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "No automations yet",
|
||||
@@ -5527,6 +5533,145 @@
|
||||
"尚無聊天訊息"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Keine kürzlich verwendeten Sitzungen",
|
||||
"Keine letzten Sitzungen",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No hay sesiones recientes",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"جلسه اخیری وجود ندارد",
|
||||
"نشست اخیری وجود ندارد"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Aucune session récente",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"कोई हालिया सत्र नहीं"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"Tidak ada sesi terbaru"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ja-JP",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"最近のセッションはありません"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ko",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"최근 세션 없음"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Geen recente sessies",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Brak ostatnich sesji",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "pt-BR",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Nenhuma sessão recente",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ru",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"Нет недавних сеансов"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "sv",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Inga senaste sessioner",
|
||||
"No recent sessions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"ไม่มีเซสชันล่าสุด"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"Son oturum yok",
|
||||
"Yakın zamanda oturum yok"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"Немає недавніх сеансів",
|
||||
"Немає нещодавніх сеансів"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "No recent sessions",
|
||||
"translations": [
|
||||
"No recent sessions",
|
||||
"沒有最近的工作階段"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "No skills found",
|
||||
@@ -6346,14 +6491,6 @@
|
||||
"開啟設定 / Gateway"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "Overview",
|
||||
"translations": [
|
||||
"अवलोकन",
|
||||
"ओवरव्यू"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"source": "Overview",
|
||||
@@ -6599,6 +6736,7 @@
|
||||
"locale": "it",
|
||||
"source": "Pinned",
|
||||
"translations": [
|
||||
"Fissata",
|
||||
"Fissati",
|
||||
"Fissato",
|
||||
"In evidenza"
|
||||
@@ -6965,6 +7103,22 @@
|
||||
"即時語音"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"source": "Recent",
|
||||
"translations": [
|
||||
"Reciente",
|
||||
"Recientes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Recent",
|
||||
"translations": [
|
||||
"Récent",
|
||||
"Récents"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"source": "Recent",
|
||||
@@ -7368,14 +7522,6 @@
|
||||
"重命名话题"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Rename Thread",
|
||||
"translations": [
|
||||
"重新命名對話串",
|
||||
"重新命名討論串"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "Rename…",
|
||||
@@ -8243,6 +8389,14 @@
|
||||
"Захищено (TLS)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "Selected",
|
||||
"translations": [
|
||||
"محدد",
|
||||
"محدّد"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"source": "Selected",
|
||||
@@ -8275,6 +8429,30 @@
|
||||
"Seçili"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"source": "Sessions unavailable",
|
||||
"translations": [
|
||||
"جلسهها در دسترس نیستند",
|
||||
"نشستها در دسترس نیستند"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"source": "Sessions unavailable",
|
||||
"translations": [
|
||||
"Không có phiên khả dụng",
|
||||
"Không thể truy cập các phiên"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Sessions unavailable",
|
||||
"translations": [
|
||||
"工作階段無法使用",
|
||||
"無法使用工作階段"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "Setup",
|
||||
@@ -9244,118 +9422,6 @@
|
||||
"话题名称"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Thread name",
|
||||
"translations": [
|
||||
"對話串名稱",
|
||||
"討論串名稱"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"Fils",
|
||||
"Fils de discussion"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"Conversazioni",
|
||||
"Thread"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"Gesprekken",
|
||||
"Threads"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"Diziler",
|
||||
"İş Parçacıkları"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"Chuỗi",
|
||||
"Luồng"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-CN",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"对话",
|
||||
"话题串"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Threads",
|
||||
"translations": [
|
||||
"對話串",
|
||||
"討論串"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"المحادثات…",
|
||||
"سلاسل المحادثات…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"Conversazioni…",
|
||||
"Thread…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "nl",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"Gesprekken…",
|
||||
"Threads…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"İletişim Dizileri…",
|
||||
"İş Parçacıkları…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-CN",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"会话…",
|
||||
"对话…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "zh-TW",
|
||||
"source": "Threads…",
|
||||
"translations": [
|
||||
"對話串…",
|
||||
"討論串…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"source": "Title",
|
||||
|
||||
+654
-590
File diff suppressed because it is too large
Load Diff
+242
-202
@@ -10581,7 +10581,7 @@
|
||||
{
|
||||
"id": "native.apple.463a0c3fc0724429",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
"translated": "الرموز"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.509cb464bd3190dd",
|
||||
@@ -10869,9 +10869,9 @@
|
||||
"translated": "ما الذي ترغب في العمل عليه؟"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "سيتم إرفاق سلسلة المحادثات بمجرد أن تصبح البوابة جاهزة."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "يتم إرفاق الجلسة بمجرد أن يصبح Gateway جاهزًا."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "خيارات جلسة جديدة…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "سلاسل المحادثات…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "الجلسات…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "إنشاء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "حذف سلسلة المحادثات؟"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "حذف الجلسة؟"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "حذف المحادثة"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "حذف الجلسة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "إلغاء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "يؤدي هذا إلى حذف المحادثة ونصها نهائيًا."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "يؤدي هذا إلى حذف الجلسة ونصها نهائيًا."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "مجموعة جديدة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "إعادة تسمية المحادثة"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "إعادة تسمية الجلسة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "اسم المجموعة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "اسم المحادثة"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "اسم الجلسة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "عرض المزيد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "مباشر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "غير مقروء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "الرموز"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "يفتح الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "الموافقات المعلّقة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "مشكلات الأتمتة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "استخدام 31 يومًا"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "يفتح الاستخدام"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "الوكلاء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "محادثة الوكيل"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "جلسة الوكيل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "المحادثات الأخيرة"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "الجلسات الأخيرة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway غير متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "لا توجد محادثات أخيرة"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "لا توجد جلسات حديثة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "دردشة مباشرة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "الآن"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "إلغاء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "المحادثات"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "المحادثات المؤرشفة"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "الجلسات المؤرشفة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "إظهار المؤرشفة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "المحادثات غير متاحة"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "الجلسات غير متاحة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "جارٍ تحميل المحادثات المؤرشفة"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "جارٍ تحميل الجلسات المؤرشفة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "جارٍ تحميل المحادثات الأخيرة"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "جارٍ تحميل الجلسات الأخيرة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) محادثة](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) جلسة](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "لا توجد محادثات مؤرشفة"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "لا توجد جلسات مؤرشفة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "ستظهر المحادثات المؤرشفة هنا."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "ستظهر الجلسات المؤرشفة هنا."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "مشاركة الإدخال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "جارٍ تحميل المحادثات"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "جارٍ تحميل الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "جارٍ جلب النشاط الأخير من Gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "المحادثات غير متاحة"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "الجلسات غير متاحة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "لا توجد محادثات أخيرة"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "لا توجد جلسات حديثة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "نشاط المحادثة غير متصل"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "نشاط الجلسة غير متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "بطاقة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "فتح المحادثة"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "فتح الجلسة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "غير متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "التحكم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "يفتح الإعدادات / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "محادثة الوكيل والعمل الأخير."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "نظرة عامة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "المثيلات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "الملفات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "يحلم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "الاستخدام"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "عمليات الأتمتة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "الوكيل الافتراضي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@، %2$@، %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@، %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "متصل بالإنترنت"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "جارٍ الاتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "تنبيه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "غير متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "يتبع النظام إعداد مظهر هذا الجهاز."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "وكلاء الشريط الجانبي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "عدد الوكلاء الذين يعرضهم الشريط الجانبي قبل قائمة التبديل."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "افتراضي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "تُستخدم لمحادثات الدردشة الجديدة وجلسات التحدث."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "يُستخدم لجلسات الدردشة والتحدث الجديدة."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "الإعدادات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "إخفاء الشريط الجانبي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "محدّد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "المزيد من الوكلاء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "البحث في الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "مسح بحث الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "جارٍ تحميل الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "لا توجد جلسات حديثة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "الأخيرة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "كل الجلسات…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "تعديل الصفحات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "الرئيسية"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "غير مقروء"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "تنبيه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "دردشة جديدة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "الاتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "جارٍ الاتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "يتطلب الانتباه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "غير متصل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "الدردشة"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "تظل الصفحات المثبتة في الشريط الجانبي. تظهر الصفحة الرئيسية دائمًا."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "الصفحات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "تم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "مثبّت"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "غير مثبّت"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "عمليات الأتمتة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "إظهار الشريط الجانبي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "العودة إلى %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "إخفاء الشريط الجانبي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "إظهار الشريط الجانبي"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "إغلاق اللوحة"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "دردشة، الصوت مفعّل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "التحكم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "الوكيل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "الإعدادات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "المثيلات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "المحادثات"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "الجلسات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Woran möchten Sie arbeiten?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Der Thread wird angehängt, sobald das Gateway bereit ist."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Die Sitzung wird verbunden, sobald das Gateway bereit ist."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Optionen für neue Sitzung…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Threads…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sitzungen…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Erstellen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Thread löschen?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Sitzung löschen?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Thread löschen"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Sitzung löschen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Abbrechen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Dadurch werden der Thread und sein Transkript dauerhaft gelöscht."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Dadurch werden die Sitzung und ihr Transkript dauerhaft gelöscht."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Neue Gruppe"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Thread umbenennen"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Sitzung umbenennen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Gruppenname"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Thread-Name"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Sitzungsname"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Mehr anzeigen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Ungelesen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Öffnet Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Ausstehende Genehmigungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agents"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Agenten-Thread"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Agentensitzung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Kürzlich verwendete Threads"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Letzte Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Keine kürzlich verwendeten Threads"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Keine letzten Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Direktchat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Abbrechen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Threads"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Archivierte Threads"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Archivierte Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Archivierte anzeigen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Threads nicht verfügbar"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sitzungen nicht verfügbar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Archivierte Threads werden geladen"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Archivierte Sitzungen werden geladen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Kürzlich verwendete Threads werden geladen"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Letzte Sitzungen werden geladen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) Thread](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) Sitzung](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Keine archivierten Threads"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Keine archivierten Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Archivierte Threads werden hier angezeigt."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Archivierte Sitzungen werden hier angezeigt."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Eingang teilen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Threads werden geladen"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Sitzungen werden geladen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Letzte Aktivität wird vom Gateway abgerufen."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Threads nicht verfügbar"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sitzungen nicht verfügbar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Keine kürzlich verwendeten Threads"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Keine kürzlich verwendeten Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Thread-Aktivität offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Sitzungsaktivität offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Karte"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Thread öffnen"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Sitzung öffnen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Steuerung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Öffnet Einstellungen / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Agent-Chat und aktuelle Arbeit."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Übersicht"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instanzen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Dateien"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Träumen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Nutzung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatisierungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Standard-Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Verbindung wird hergestellt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Achtung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Das System folgt der Erscheinungsbild-Einstellung dieses Geräts."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agenten in der Seitenleiste"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Wie viele Agenten die Seitenleiste vor dem Wechselmenü auflistet."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Standard"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Wird für neue Chat-Threads und Sprachsitzungen verwendet."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Wird für neue Chat- und Talk-Sitzungen verwendet."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Einstellungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Seitenleiste ausblenden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Ausgewählt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Weitere Agenten"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Zuletzt verwendet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Seiten bearbeiten"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Startseite"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Ungelesen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Achtung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Neuer Chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Verbindung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Verbinden"
|
||||
"translated": "Verbindung wird hergestellt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Aufmerksamkeit erforderlich"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Angeheftete Seiten bleiben in der Seitenleiste. Die Startseite wird immer angezeigt."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Fertig"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Angeheftet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Nicht angeheftet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatisierungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Seitenleiste einblenden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Zurück zu %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Seitenleiste ausblenden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Seitenleiste einblenden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Canvas schließen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, Sprache aktiv"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Steuerung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Einstellungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instanzen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Threads"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sitzungen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "¿En qué te gustaría trabajar?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "El hilo se conecta cuando el Gateway está listo."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "La sesión se conecta cuando el Gateway está listo."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opciones de nueva sesión…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Hilos…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sesiones…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Crear"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "¿Eliminar el hilo?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "¿Eliminar la sesión?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Eliminar hilo"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Eliminar sesión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Cancelar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Esto elimina permanentemente el hilo y su transcripción."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Esto elimina permanentemente la sesión y su transcripción."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nuevo grupo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Renombrar hilo"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Renombrar sesión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nombre del grupo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nombre del hilo"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nombre de la sesión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Ver más"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "No leído"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Abre Sesiones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Aprobaciones pendientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Hilo del agente"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Sesión del agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Hilos recientes"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Sesiones recientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway sin conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "No hay hilos recientes"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No hay sesiones recientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Chat directo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Cancelar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Hilos"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesiones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Hilos archivados"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Sesiones archivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Mostrar archivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Hilos no disponibles"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesiones no disponibles"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Cargando hilos archivados"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Cargando sesiones archivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Cargando hilos recientes"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Cargando sesiones recientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) hilo](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sesión](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "No hay hilos archivados"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "No hay sesiones archivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Los hilos archivados aparecerán aquí."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Las sesiones archivadas aparecerán aquí."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Compartir entrada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Cargando hilos"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Cargando sesiones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Obteniendo actividad reciente del gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Hilos no disponibles"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesiones no disponibles"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "No hay hilos recientes"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No hay sesiones recientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "La actividad de los hilos está sin conexión"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "La actividad de la sesión está sin conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Tarjeta"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Abrir hilo"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Abrir sesión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Sin conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Control"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Abre Configuración / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Chat del agente y trabajo reciente."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Resumen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instancias"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Archivos"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Soñando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Uso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatizaciones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Agente predeterminado"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "En línea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Conectando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Atención"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Sin conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "El sistema sigue el ajuste de apariencia de este dispositivo."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agentes de la barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Cuántos agentes muestra la barra lateral antes del menú de selección."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Predeterminado"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Se usa para nuevos hilos de Chat y sesiones de Talk."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Se usa para nuevas sesiones de chat y conversación."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Configuración"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ocultar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Seleccionado"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Más agentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Recientes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Editar páginas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Inicio"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "No leído"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Atención"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Nuevo chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "En línea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Conectando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Requiere atención"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Sin conexión"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Las páginas fijadas permanecen en la barra lateral. Inicio siempre se muestra."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Listo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Fijada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "No fijada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatizaciones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostrar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Volver a %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ocultar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostrar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Cerrar lienzo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, voz activada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Control"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Configuración"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instancias"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Hilos"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesiones"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "دوست دارید روی چه چیزی کار کنید؟"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "پس از آماده شدن Gateway، رشته متصل میشود."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "جلسه پس از آماده شدن Gateway متصل میشود."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "گزینههای نشست جدید…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "رشتهها…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "جلسهها…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "ایجاد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "رشته حذف شود؟"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "جلسه حذف شود؟"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "حذف رشته"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "حذف جلسه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "لغو"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "این کار رشته و رونوشت آن را برای همیشه حذف میکند."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "این کار جلسه و رونوشت آن را برای همیشه حذف میکند."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "گروه جدید"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "تغییر نام رشته"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "تغییر نام جلسه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "نام گروه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "نام رشته"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "نام جلسه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "نمایش بیشتر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "خواندهنشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "توکنها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "جلسهها را باز میکند"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "تأییدیههای در انتظار"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "عاملها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "رشته عامل"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "جلسه عامل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "رشتههای اخیر"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "جلسههای اخیر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway آفلاین است"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "هیچ رشته اخیری وجود ندارد"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "جلسه اخیری وجود ندارد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "گفتوگوی مستقیم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "لغو"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "رشتهها"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "جلسهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "رشتههای بایگانیشده"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "جلسههای بایگانیشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "نمایش بایگانیشدهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "رشتهها در دسترس نیستند"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "جلسهها در دسترس نیستند"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "در حال بارگذاری رشتههای بایگانیشده"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "در حال بارگذاری جلسههای بایگانیشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "در حال بارگذاری رشتههای اخیر"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "در حال بارگذاری جلسههای اخیر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) رشته](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) جلسه](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "هیچ رشته بایگانیشدهای وجود ندارد"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "جلسه بایگانیشدهای وجود ندارد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "رشتههای بایگانیشده اینجا نمایش داده میشوند."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "جلسههای بایگانیشده اینجا نمایش داده میشوند."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "اشتراکگذاری ورودی"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "در حال بارگذاری رشتهها"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "در حال بارگذاری جلسهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "در حال دریافت فعالیت اخیر از Gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "رشتهها در دسترس نیستند"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "نشستها در دسترس نیستند"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "هیچ رشته اخیری وجود ندارد"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "نشست اخیری وجود ندارد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "فعالیت رشته آفلاین است"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "فعالیت نشست آفلاین است"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "کارت"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "باز کردن رشته"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "باز کردن نشست"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "آفلاین"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "کنترل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "تنظیمات / Gateway را باز میکند"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "گفتگوی عامل و کارهای اخیر."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "نمای کلی"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "نمونهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "فایلها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "در حال رؤیاپردازی"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "مصرف"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "خودکارسازیها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "عامل پیشفرض"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@، %2$@، %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@، %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "آنلاین"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "در حال اتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "توجه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "آفلاین"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "سیستم از تنظیمات ظاهر این دستگاه پیروی میکند."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "عاملهای نوار کناری"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "تعداد عاملهایی که نوار کناری پیش از منوی جابهجایی فهرست میکند."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "پیشفرض"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "برای رشتههای گفتوگوی جدید و نشستهای مکالمه استفاده میشود."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "برای نشستهای جدید گفتوگو و مکالمه استفاده میشود."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "تنظیمات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "پنهان کردن نوار کناری"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "انتخابشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "عاملهای بیشتر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "اخیر"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "ویرایش صفحهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "خانه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "خواندهنشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "نیازمند توجه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "چت جدید"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "اتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "آنلاین"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "در حال اتصال"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "نیازمند توجه"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "آفلاین"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "چت"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "صفحههای سنجاقشده در نوار کناری باقی میمانند. خانه همیشه نمایش داده میشود."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "انجام شد"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "سنجاقشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "سنجاقنشده"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "خودکارسازیها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "نمایش نوار کناری"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "بازگشت به %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "پنهان کردن نوار کناری"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "نمایش نوار کناری"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "بستن بوم"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "چت، صدا فعال است"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "کنترل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "عامل"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "تنظیمات"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "نمونهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "رشتهها"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "جلسهها"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Sur quoi souhaitez-vous travailler ?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Le fil de discussion est joint une fois que le Gateway est prêt."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "La session se connecte une fois que le Gateway est prêt."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Options de la nouvelle session…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Fils de discussion…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Créer"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Supprimer le fil de discussion ?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Supprimer la session ?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Supprimer le fil"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Supprimer la session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Annuler"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Cette action supprime définitivement le fil et sa transcription."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Cette opération supprime définitivement la session et sa transcription."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nouveau groupe"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Renommer le fil"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Renommer la session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nom du groupe"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nom du fil"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nom de la session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Voir plus"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Non lu"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Jetons"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Ouvre les sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Approbations en attente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agents"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Fil de l’agent"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Session de l’agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Fils récents"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Sessions récentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway hors ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Aucun fil récent"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Aucune session récente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Chat direct"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Annuler"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Fils"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Fils archivés"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Sessions archivées"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Afficher les éléments archivés"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Fils indisponibles"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessions indisponibles"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Chargement des fils archivés"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Chargement des sessions archivées"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Chargement des fils récents"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Chargement des sessions récentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) fil](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) session](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Aucun fil archivé"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Aucune session archivée"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Les fils archivés apparaîtront ici."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Les sessions archivées apparaîtront ici."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Partager la réception"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Chargement des fils"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Chargement des sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Récupération de l’activité récente depuis le Gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Fils indisponibles"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessions indisponibles"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Aucun fil récent"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Aucune session récente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Activité du fil hors ligne"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Activité des sessions hors ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Carte"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Ouvrir le fil"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Ouvrir la session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Hors ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Contrôle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Ouvre Réglages / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Discussion de l'agent et travaux récents."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Vue d’ensemble"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instances"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Fichiers"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Rêve"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Utilisation"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatisations"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Agent par défaut"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "En ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Connexion"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Attention"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Hors ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Le système suit le réglage d’apparence de cet appareil."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agents de la barre latérale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Nombre d’agents affichés dans la barre latérale avant le menu de sélection."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Par défaut"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Utilisé pour les nouveaux fils de discussion Chat et les sessions Talk."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Utilisé pour les nouvelles sessions de discussion et de conversation."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Réglages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Masquer la barre latérale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Sélectionné"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Plus d’agents"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Récents"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Modifier les pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Accueil"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Non lu"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Attention"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Nouveau chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Connexion"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "En ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Connexion"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Attention requise"
|
||||
"translated": "Nécessite une attention"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Hors ligne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Discussion"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Les pages épinglées restent dans la barre latérale. L’accueil est toujours affiché."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Terminé"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Épinglé"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Non épinglé"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatisations"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Afficher la barre latérale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Retour à %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Masquer la barre latérale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Afficher la barre latérale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Fermer le canevas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, voix activée"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Contrôle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Réglages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instances"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Fils de discussion"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "आप किस पर काम करना चाहेंगे?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gateway तैयार होते ही थ्रेड संलग्न हो जाएगा।"
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gateway के तैयार होते ही सत्र जुड़ जाता है।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10906,7 +10906,7 @@
|
||||
{
|
||||
"id": "native.apple.7c87384c7d1370e1",
|
||||
"source": "New Chat",
|
||||
"translated": "नया चैट"
|
||||
"translated": "नई चैट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1876037e64a74110",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "नए सत्र के विकल्प…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "थ्रेड…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "सत्र…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "बनाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "थ्रेड हटाएँ?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "सत्र हटाएँ?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "थ्रेड हटाएँ"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "सत्र हटाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "रद्द करें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "यह थ्रेड और इसकी ट्रांसक्रिप्ट को स्थायी रूप से हटा देता है।"
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "इससे सत्र और उसका ट्रांसक्रिप्ट स्थायी रूप से हट जाएगा।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "नया समूह"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "थ्रेड का नाम बदलें"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "सत्र का नाम बदलें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "समूह का नाम"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "थ्रेड का नाम"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "सत्र का नाम"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "और देखें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "अपठित"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "टोकन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "सत्र खोलता है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "लंबित अनुमोदन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "एजेंट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "एजेंट थ्रेड"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "एजेंट सत्र"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "हाल के थ्रेड"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "हाल के सत्र"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway ऑफ़लाइन है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "कोई हालिया थ्रेड नहीं"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "कोई हालिया सत्र नहीं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "सीधी चैट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "रद्द करें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "थ्रेड"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "सत्र"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "संग्रहीत थ्रेड"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "संग्रहित सत्र"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "आर्काइव किए गए दिखाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "थ्रेड उपलब्ध नहीं हैं"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "सत्र उपलब्ध नहीं हैं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "संग्रहीत थ्रेड लोड हो रहे हैं"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "संग्रहित सत्र लोड हो रहे हैं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "हाल के थ्रेड लोड हो रहे हैं"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "हाल के सत्र लोड हो रहे हैं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) थ्रेड](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) सत्र](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "कोई संग्रहीत थ्रेड नहीं"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "कोई संग्रहित सत्र नहीं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "संग्रहीत थ्रेड यहाँ दिखाई देंगे।"
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "संग्रहित सत्र यहाँ दिखाई देंगे।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "इनटेक साझा करें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "थ्रेड लोड हो रहे हैं"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "सत्र लोड हो रहे हैं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Gateway से हाल की गतिविधि प्राप्त की जा रही है।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "थ्रेड उपलब्ध नहीं हैं"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "सत्र उपलब्ध नहीं हैं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "कोई हालिया थ्रेड नहीं"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "कोई हालिया सत्र नहीं"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "थ्रेड गतिविधि ऑफ़लाइन है"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "सत्र गतिविधि ऑफ़लाइन है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "कार्ड"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "थ्रेड खोलें"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "सत्र खोलें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "ऑफ़लाइन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "कंट्रोल"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Settings / Gateway खोलता है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "एजेंट चैट और हाल का कार्य।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "ओवरव्यू"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "इंस्टेंस"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "फ़ाइलें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "ड्रीमिंग"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "उपयोग"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "स्वचालन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "डिफ़ॉल्ट एजेंट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "ऑनलाइन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "कनेक्ट हो रहा है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "ध्यान दें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "ऑफ़लाइन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "सिस्टम इस डिवाइस की अपीयरेंस सेटिंग का पालन करता है।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "साइडबार एजेंट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "स्विचर मेनू से पहले साइडबार में सूचीबद्ध एजेंटों की संख्या।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "डिफ़ॉल्ट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "नई चैट थ्रेड और बातचीत सत्रों के लिए उपयोग किया जाता है।"
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "नए Chat और Talk सत्रों के लिए उपयोग किया जाता है।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "सेटिंग्स"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "साइडबार छिपाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "चयनित"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "और एजेंट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "हाल के"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "पेज संपादित करें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "होम"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "अपठित"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "ध्यान दें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "नई चैट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "कनेक्शन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "ऑनलाइन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "कनेक्ट हो रहा है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "ध्यान देने की आवश्यकता है"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "ऑफ़लाइन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "चैट"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "पिन किए गए पेज साइडबार में बने रहते हैं। होम हमेशा दिखाया जाता है।"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "पूर्ण"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "पिन किया गया"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "पिन नहीं किया गया"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "स्वचालन"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "साइडबार दिखाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "%@ पर वापस जाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "साइडबार छिपाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "साइडबार दिखाएँ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "कैनवास बंद करें"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "चैट, आवाज़ चालू"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "नियंत्रण"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "एजेंट"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "सेटिंग्स"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "इंस्टेंस"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "थ्रेड"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "सत्र"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Apa yang ingin Anda kerjakan?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Utas akan terhubung setelah Gateway siap."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Sesi akan terhubung setelah gateway siap."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opsi Sesi Baru…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Utas…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sesi…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Buat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Hapus Utas?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Hapus Sesi?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Hapus Utas"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Hapus Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Batal"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Tindakan ini akan menghapus utas dan transkripnya secara permanen."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Tindakan ini akan menghapus sesi dan transkripnya secara permanen."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Grup Baru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Ganti Nama Utas"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Ubah Nama Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nama grup"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nama utas"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nama sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Lihat Selengkapnya"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Belum dibaca"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Token"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Membuka Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Persetujuan tertunda"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Utas agen"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Sesi agen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Utas terbaru"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Sesi terbaru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Tidak ada utas terbaru"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Tidak ada sesi terbaru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Obrolan langsung"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Batal"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Utas"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Utas yang diarsipkan"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Sesi yang diarsipkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Tampilkan yang Diarsipkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Utas tidak tersedia"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesi tidak tersedia"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Memuat utas yang diarsipkan"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Memuat sesi yang diarsipkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Memuat utas terbaru"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Memuat sesi terbaru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) utas](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sesi](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Tidak ada utas yang diarsipkan"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Tidak ada sesi yang diarsipkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Utas yang diarsipkan akan muncul di sini."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Sesi yang diarsipkan akan muncul di sini."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Bagikan masukan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Memuat utas"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Memuat sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Mengambil aktivitas terbaru dari gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Utas tidak tersedia"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesi tidak tersedia"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Tidak ada utas terbaru"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Tidak ada sesi terbaru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Aktivitas utas offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Aktivitas sesi offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Kartu"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Buka Utas"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Buka Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Kontrol"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Membuka Pengaturan / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Obrolan agen dan pekerjaan terkini."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Ikhtisar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instans"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "File"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Bermimpi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Penggunaan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Otomatisasi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Agen Default"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Menghubungkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Perhatian"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Sistem mengikuti pengaturan tampilan perangkat ini."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agen di Bilah Samping"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Jumlah agen yang ditampilkan di bilah samping sebelum menu pengalih."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Default"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Digunakan untuk utas Chat baru dan sesi Talk."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Digunakan untuk sesi Chat dan Talk baru."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Pengaturan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Sembunyikan Bilah Samping"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Dipilih"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Agen Lainnya"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Terbaru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Edit Halaman"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Beranda"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Belum dibaca"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Perhatian"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Chat Baru"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Koneksi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Menghubungkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Perlu perhatian"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Luring"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Obrolan"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Halaman yang disematkan tetap berada di bilah sisi. Beranda selalu ditampilkan."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Selesai"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Disematkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Tidak disematkan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Otomatisasi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Tampilkan Bilah Samping"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Kembali ke %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Sembunyikan Bilah Samping"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Tampilkan Bilah Samping"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Tutup kanvas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, suara aktif"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Kontrol"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Pengaturan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instans"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Utas"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+269
-229
@@ -641,7 +641,7 @@
|
||||
{
|
||||
"id": "native.android.c65b61de70a063e7",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.7cd603c40e57e819",
|
||||
@@ -1241,12 +1241,12 @@
|
||||
{
|
||||
"id": "native.android.c4abd4ecd607865f",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.27c3e59e49776d1a",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.android.ff3944e9dcb605e1",
|
||||
@@ -2221,7 +2221,7 @@
|
||||
{
|
||||
"id": "native.android.cac027a1232254cd",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.81dd1b93e212709e",
|
||||
@@ -2236,7 +2236,7 @@
|
||||
{
|
||||
"id": "native.android.59602ad037679006",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.android.a328ef4e475c8fbe",
|
||||
@@ -2596,12 +2596,12 @@
|
||||
{
|
||||
"id": "native.android.a6785924afa501a6",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.0bbe0d733b1328fd",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.android.68032afddfa2d73c",
|
||||
@@ -4716,7 +4716,7 @@
|
||||
{
|
||||
"id": "native.android.326c79e18db465ce",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.c0cbf2ed1fc50e4c",
|
||||
@@ -4726,7 +4726,7 @@
|
||||
{
|
||||
"id": "native.android.dd5b083db9470281",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.android.62fe76eb7c0dbddc",
|
||||
@@ -5701,7 +5701,7 @@
|
||||
{
|
||||
"id": "native.android.29a2565d51411afe",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.android.2cfb87c0137347c5",
|
||||
@@ -5776,7 +5776,7 @@
|
||||
{
|
||||
"id": "native.android.c093a2297a02405a",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.6b13be9783f8dfd3",
|
||||
@@ -7076,7 +7076,7 @@
|
||||
{
|
||||
"id": "native.android.3ff5c1971783c590",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.d95742f0d232e1bf",
|
||||
@@ -7726,7 +7726,7 @@
|
||||
{
|
||||
"id": "native.android.278e466dce078f58",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.android.6c2e520fd54edeb4",
|
||||
@@ -10006,7 +10006,7 @@
|
||||
{
|
||||
"id": "native.apple.5fbed24f057edea8",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f1958c5f0d880a4a",
|
||||
@@ -10631,7 +10631,7 @@
|
||||
{
|
||||
"id": "native.apple.2be2d2e1fb0c140a",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a97cdae7c8e13f0e",
|
||||
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Su cosa vorresti lavorare?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Il thread verrà collegato quando il Gateway sarà pronto."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "La sessione si collega quando il gateway è pronto."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opzioni nuova sessione…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Thread…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sessioni…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Crea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Eliminare il thread?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Eliminare la sessione?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Elimina conversazione"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Elimina sessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Annulla"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Questa operazione elimina definitivamente la conversazione e la relativa trascrizione."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Questa operazione elimina definitivamente la sessione e la relativa trascrizione."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nuovo gruppo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Rinomina conversazione"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Rinomina sessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nome del gruppo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nome della conversazione"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nome della sessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Mostra altro"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "In diretta"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Da leggere"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Token"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Apre Sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Approvazioni in sospeso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Problemi di automazione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "Utilizzo di 31 giorni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Apre Utilizzo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agenti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Conversazione dell'agente"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Sessione dell'agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Conversazioni recenti"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Sessioni recenti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Nessuna conversazione recente"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Nessuna sessione recente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11211,7 +11251,7 @@
|
||||
{
|
||||
"id": "native.apple.e01aac63fda4c147",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a857bc74fd053781",
|
||||
@@ -11226,7 +11266,7 @@
|
||||
{
|
||||
"id": "native.apple.89989b6d557090e8",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a90a3aac6e2a6da8",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Chat diretta"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "proprio ora"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Annulla"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Conversazioni"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Conversazioni archiviate"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Sessioni archiviate"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Mostra archiviate"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Conversazioni non disponibili"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessioni non disponibili"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Caricamento delle conversazioni archiviate"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Caricamento delle sessioni archiviate"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Caricamento delle conversazioni recenti"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Caricamento delle sessioni recenti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) conversazione](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sessione](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Nessuna conversazione archiviata"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Nessuna sessione archiviata"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Le conversazioni archiviate appariranno qui."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Le sessioni archiviate verranno visualizzate qui."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Condividi acquisizione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Caricamento delle conversazioni"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Caricamento delle sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Recupero dell'attività recente dal gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Conversazioni non disponibili"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessioni non disponibili"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Nessuna conversazione recente"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Nessuna sessione recente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Attività delle conversazioni offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Attività della sessione offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11466,7 +11511,7 @@
|
||||
{
|
||||
"id": "native.apple.c61170392d1aa557",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.225dcb2dfdcaa76f",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Scheda"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Apri conversazione"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Apri sessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12086,7 +12131,7 @@
|
||||
{
|
||||
"id": "native.apple.72baecec6cf1b462",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ca9dfb05d9034ff7",
|
||||
@@ -12101,92 +12146,7 @@
|
||||
{
|
||||
"id": "native.apple.1fc3cbd16076f75f",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Controllo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Apre Impostazioni / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Chat dell'agente e lavori recenti."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Panoramica"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Istanze"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "File"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Sogno"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Utilizzo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automazioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Agente predefinito"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Connessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Attenzione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
@@ -12391,7 +12351,7 @@
|
||||
{
|
||||
"id": "native.apple.042fad5f44e4a00c",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.59c349b1b581354f",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Il sistema segue l'impostazione dell'aspetto di questo dispositivo."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agenti nella barra laterale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Numero di agenti elencati nella barra laterale prima del menu di selezione."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Predefinito"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Utilizzato per i nuovi thread di chat e le sessioni Talk."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Utilizzato per le nuove sessioni di Chat e Talk."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -14976,7 +14946,7 @@
|
||||
{
|
||||
"id": "native.apple.ae33908b61c6d70b",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4a98b3a346be2662",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Impostazioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Nascondi barra laterale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Selezionato"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Altri agenti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Cerca sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Cancella ricerca sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Caricamento sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Nessuna sessione recente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Recenti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "Tutte le sessioni…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Modifica pagine"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Home"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Da leggere"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Attenzione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Nuova chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Connessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Connessione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Richiede attenzione"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Le pagine fissate rimangono nella barra laterale. Home è sempre visibile."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pagine"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Fine"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Fissata"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Non fissata"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automazioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostra barra laterale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Torna a %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Nascondi barra laterale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostra barra laterale"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Chiudi canvas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, voce attiva"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Controllo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Impostazioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Istanze"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Thread"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessioni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
@@ -16151,7 +16191,7 @@
|
||||
{
|
||||
"id": "native.apple.c09f4e3bbef8177a",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d91efa5ed033446a",
|
||||
@@ -16576,7 +16616,7 @@
|
||||
{
|
||||
"id": "native.apple.1bbd3d2941ae7481",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.06fdaba1468c68e7",
|
||||
@@ -16961,12 +17001,12 @@
|
||||
{
|
||||
"id": "native.apple.60cdcd03d8b51965",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "Connesso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f748dad8f2ce22ae",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Non in linea"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.088f07637cc141c9",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "何に取り組みますか?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gatewayの準備が整うと、スレッドが接続されます。"
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gatewayの準備ができると、セッションが接続されます。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "新規セッションのオプション…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "スレッド…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "セッション…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "作成"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "スレッドを削除しますか?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "セッションを削除しますか?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "スレッドを削除"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "セッションを削除"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "キャンセル"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "この操作を行うと、スレッドとその記録が完全に削除されます。"
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "セッションとそのトランスクリプトが完全に削除されます。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "新規グループ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "スレッド名を変更"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "セッション名を変更"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "グループ名"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "スレッド名"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "セッション名"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "さらに表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "未読"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "トークン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "セッションを開く"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "保留中の承認"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "エージェント"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "エージェントスレッド"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "エージェントセッション"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "最近のスレッド"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "最近のセッション"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway がオフラインです"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "最近のスレッドはありません"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "最近のセッションはありません"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "ダイレクトチャット"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "キャンセル"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "スレッド"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "セッション"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "アーカイブ済みのスレッド"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "アーカイブ済みセッション"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "アーカイブを表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "スレッドを利用できません"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "セッションを利用できません"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "アーカイブ済みのスレッドを読み込み中"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "アーカイブ済みセッションを読み込み中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "最近のスレッドを読み込み中"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "最近のセッションを読み込み中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count)件のスレッド](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count)件のセッション](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "アーカイブ済みのスレッドはありません"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "アーカイブ済みセッションはありません"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "アーカイブ済みのスレッドがここに表示されます。"
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "アーカイブ済みセッションがここに表示されます。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "共有取り込み"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "スレッドを読み込み中"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "セッションを読み込み中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Gatewayから最近のアクティビティを取得しています。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "スレッドを利用できません"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "セッションを利用できません"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "最近のスレッドはありません"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "最近のセッションはありません"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "スレッドのアクティビティはオフラインです"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "セッションアクティビティはオフラインです"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "カード"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "スレッドを開く"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "セッションを開く"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "オフライン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "コントロール"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "設定 / Gateway を開く"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "エージェントチャットと最近の作業。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "概要"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "インスタンス"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "ファイル"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "ドリーミング"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "使用状況"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "自動化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "デフォルトエージェント"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@、%2$@、%3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@、%2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "オンライン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "接続中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "オフライン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "システムはこのデバイスの外観設定に従います。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "サイドバーのエージェント"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "切り替えメニューの前にサイドバーに表示するエージェントの数。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "デフォルト"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "新しいチャットスレッドとトークセッションに使用されます。"
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "新しいチャットおよび通話セッションに使用されます。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "設定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "サイドバーを非表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "選択済み"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "その他のエージェント"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "最近"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "ページを編集"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "ホーム"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "未読"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "新規チャット"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "接続"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "オンライン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "接続中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "対応が必要"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "オフライン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "チャット"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "ピン留めしたページはサイドバーに表示されます。ホームは常に表示されます。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "完了"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "ピン留め済み"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "ピン留めなし"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "自動化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "サイドバーを表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "%@ に戻る"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "サイドバーを非表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "サイドバーを表示"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "キャンバスを閉じる"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "チャット、音声オン"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "コントロール"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "エージェント"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "設定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "インスタンス"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "スレッド"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "セッション"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "무엇을 작업하시겠어요?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gateway가 준비되면 스레드가 연결됩니다."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gateway가 준비되면 세션이 연결됩니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "새 세션 옵션…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "스레드…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "세션…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "생성"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "스레드를 삭제하시겠습니까?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "세션을 삭제하시겠습니까?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "스레드 삭제"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "세션 삭제"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "취소"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "스레드와 대화 기록이 영구적으로 삭제됩니다."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "세션과 해당 대화 기록이 영구적으로 삭제됩니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "새 그룹"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "스레드 이름 변경"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "세션 이름 변경"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "그룹 이름"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "스레드 이름"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "세션 이름"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "더 보기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "읽지 않음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "토큰"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "세션 열기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "대기 중인 승인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "에이전트"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "에이전트 스레드"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "에이전트 세션"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "최근 스레드"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "최근 세션"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway 오프라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "최근 스레드 없음"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "최근 세션 없음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "다이렉트 채팅"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "취소"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "스레드"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "세션"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "보관된 스레드"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "보관된 세션"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "보관 항목 표시"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "스레드를 사용할 수 없음"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "세션을 사용할 수 없음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "보관된 스레드 불러오는 중"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "보관된 세션 불러오는 중"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "최근 스레드 불러오는 중"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "최근 세션 불러오는 중"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count)개 스레드](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[세션 \\(count)개](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "보관된 스레드 없음"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "보관된 세션 없음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "보관된 스레드가 여기에 표시됩니다."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "보관된 세션이 여기에 표시됩니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "공유 인테이크"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "스레드 불러오는 중"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "세션 불러오는 중"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Gateway에서 최근 활동을 가져오는 중입니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "스레드를 사용할 수 없음"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "세션을 사용할 수 없음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "최근 스레드 없음"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "최근 세션 없음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "스레드 활동 오프라인"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "세션 활동 오프라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "카드"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "스레드 열기"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "세션 열기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "오프라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "제어"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "설정 / Gateway 열기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "에이전트 채팅 및 최근 작업."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "개요"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "인스턴스"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "파일"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "드리밍"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "사용량"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "자동화"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "기본 에이전트"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "온라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "연결 중"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "주의"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "오프라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "시스템은 이 기기의 화면 모드 설정을 따릅니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "사이드바 에이전트"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "전환 메뉴 앞에 사이드바에 표시할 에이전트 수입니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "기본값"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "새 채팅 스레드와 Talk 세션에 사용됩니다."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "새로운 채팅 및 대화 세션에 사용됩니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "설정"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "사이드바 숨기기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "선택됨"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "더 많은 에이전트"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "최근"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "페이지 편집"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "홈"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "읽지 않음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "주의"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "새 채팅"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "연결"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "온라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "연결 중"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "주의 필요"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "오프라인"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "채팅"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "고정된 페이지는 사이드바에 유지됩니다. 홈은 항상 표시됩니다."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "완료"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "고정됨"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "고정되지 않음"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "자동화"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "사이드바 보기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "%@(으)로 돌아가기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "사이드바 숨기기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "사이드바 보기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "캔버스 닫기"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "채팅, 음성 켜짐"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "제어"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "에이전트"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "설정"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "인스턴스"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "스레드"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "세션"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Waar wilt u aan werken?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "De thread wordt gekoppeld zodra de Gateway gereed is."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "De sessie wordt gekoppeld zodra de Gateway gereed is."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opties voor nieuwe sessie…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Threads…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sessies…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Aanmaken"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Thread verwijderen?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Sessie verwijderen?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Thread verwijderen"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Sessie verwijderen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Annuleren"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Hiermee worden de thread en het transcript permanent verwijderd."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Hiermee worden de sessie en het transcript permanent verwijderd."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nieuwe groep"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Thread hernoemen"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Sessie hernoemen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Groepsnaam"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Threadnaam"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Sessienaam"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Meer weergeven"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Ongelezen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Opent Sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Openstaande goedkeuringen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agents"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Agentthread"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Agentsessie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Recente threads"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Recente sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Geen recente threads"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Geen recente sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Directe chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Annuleren"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Threads"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Gearchiveerde threads"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Gearchiveerde sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Gearchiveerde tonen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Threads niet beschikbaar"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessies niet beschikbaar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Gearchiveerde threads laden"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Gearchiveerde sessies laden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Recente threads laden"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Recente sessies laden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) thread](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sessie](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Geen gearchiveerde threads"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Geen gearchiveerde sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Gearchiveerde threads worden hier weergegeven."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Gearchiveerde sessies worden hier weergegeven."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Intake delen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Threads laden"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Sessies laden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Recente activiteit ophalen van de gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Threads niet beschikbaar"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessies niet beschikbaar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Geen recente threads"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Geen recente sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Threadactiviteit offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Sessieactiviteit offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Kaart"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Thread openen"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Sessie openen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Bediening"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Opent Instellingen / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Agentchat en recent werk."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Overzicht"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instanties"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Bestanden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Dromen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Gebruik"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatiseringen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Standaardagent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Verbinden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Let op"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Systeem volgt de weergave-instelling van dit apparaat."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agenten in de zijbalk"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Hoeveel agenten in de zijbalk worden weergegeven vóór het keuzemenu."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Standaard"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Wordt gebruikt voor nieuwe chatgesprekken en praatsessies."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Wordt gebruikt voor nieuwe Chat- en Talk-sessies."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Instellingen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Zijbalk verbergen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Geselecteerd"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Meer agenten"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Recent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Pagina's bewerken"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Start"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Ongelezen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Aandacht"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Nieuwe chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Verbinding"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Verbinden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Aandacht vereist"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Vastgezette pagina's blijven in de zijbalk staan. Start wordt altijd weergegeven."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Gereed"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Vastgezet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Niet vastgezet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatiseringen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Toon navigatiekolom"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Terug naar %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Zijbalk verbergen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Toon navigatiekolom"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Canvas sluiten"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, stem actief"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Bediening"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Instellingen"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instances"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Gesprekken"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessies"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Nad czym chcesz popracować?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Wątek zostanie dołączony, gdy Gateway będzie gotowy."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Sesja zostanie połączona, gdy Gateway będzie gotowy."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opcje nowej sesji…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Wątki…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sesje…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Utwórz"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Usunąć wątek?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Usunąć sesję?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Usuń wątek"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Usuń sesję"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Anuluj"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Spowoduje to trwałe usunięcie wątku i jego transkrypcji."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Spowoduje to trwałe usunięcie sesji i jej transkrypcji."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nowa grupa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Zmień nazwę wątku"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Zmień nazwę sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nazwa grupy"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nazwa wątku"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nazwa sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Pokaż więcej"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Nieprzeczytane"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokeny"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Otwiera sesje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Oczekujące zatwierdzenia"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agenci"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Wątek agenta"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Sesja agenta"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Ostatnie wątki"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Ostatnie sesje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Brak ostatnich wątków"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Brak ostatnich sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Czat bezpośredni"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Anuluj"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Wątki"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Zarchiwizowane wątki"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Zarchiwizowane sesje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Pokaż zarchiwizowane"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Wątki są niedostępne"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesje są niedostępne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Wczytywanie zarchiwizowanych wątków"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Wczytywanie zarchiwizowanych sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Wczytywanie ostatnich wątków"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Wczytywanie ostatnich sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) wątek](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sesja](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Brak zarchiwizowanych wątków"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Brak zarchiwizowanych sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Zarchiwizowane wątki pojawią się tutaj."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Zarchiwizowane sesje pojawią się tutaj."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Udostępnij dane wejściowe"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Wczytywanie wątków"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Wczytywanie sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Pobieranie ostatniej aktywności z gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Wątki są niedostępne"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sesje są niedostępne"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Brak ostatnich wątków"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Brak ostatnich sesji"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Aktywność wątku jest niedostępna offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Aktywność sesji jest niedostępna"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Karta"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Otwórz wątek"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Otwórz sesję"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Sterowanie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Otwiera Ustawienia / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Czat agenta i ostatnia praca."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Przegląd"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instancje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Pliki"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Śnienie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Użycie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatyzacje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Domyślny agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Łączenie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Uwaga"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "System stosuje ustawienie wyglądu tego urządzenia."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agenci na pasku bocznym"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Liczba agentów wyświetlanych na pasku bocznym przed menu przełączania."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Domyślnie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Używane w nowych wątkach czatu i sesjach rozmów."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Używany w nowych sesjach czatu i rozmów."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Ustawienia"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ukryj pasek boczny"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Wybrano"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Więcej agentów"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Ostatnie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Edytuj strony"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Strona główna"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Nieprzeczytane"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Uwaga"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Nowy czat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Połączenie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Łączenie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Wymaga uwagi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Czat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Przypięte strony pozostają na pasku bocznym. Strona główna jest zawsze wyświetlana."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Gotowe"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Przypięte"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Nieprzypięte"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatyzacje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Pokaż pasek boczny"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Wróć do %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ukryj pasek boczny"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Pokaż pasek boczny"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Zamknij obszar roboczy"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Czat, głos włączony"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Sterowanie"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Ustawienia"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instancje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Wątki"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sesje"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+244
-204
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Em que você gostaria de trabalhar?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "A conversa será anexada assim que o Gateway estiver pronto."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "A sessão será conectada quando o gateway estiver pronto."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Opções da nova sessão…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Conversas…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sessões…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Criar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Excluir conversa?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Excluir sessão?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Excluir conversa"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Excluir sessão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Cancelar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Isso exclui permanentemente a conversa e sua transcrição."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Isso exclui permanentemente a sessão e sua transcrição."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Novo grupo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Renomear conversa"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Renomear sessão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Nome do grupo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Nome da conversa"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Nome da sessão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Ver mais"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Não lida"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Abre Sessões"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Aprovações pendentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Conversa do agente"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Sessão do agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Conversas recentes"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Sessões recentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Nenhuma conversa recente"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Nenhuma sessão recente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Chat direto"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Cancelar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Conversas"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessões"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Conversas arquivadas"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Sessões arquivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Mostrar arquivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Conversas indisponíveis"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessões indisponíveis"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Carregando conversas arquivadas"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Carregando sessões arquivadas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Carregando conversas recentes"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Carregando sessões recentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) conversa](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) sessão](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Nenhuma conversa arquivada"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Nenhuma sessão arquivada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "As conversas arquivadas aparecerão aqui."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "As sessões arquivadas aparecerão aqui."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Compartilhar entrada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Carregando conversas"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Carregando sessões"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Buscando atividade recente no gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Conversas indisponíveis"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessões indisponíveis"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Nenhuma conversa recente"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Nenhuma sessão recente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Atividade das conversas offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Atividade da sessão offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Cartão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Abrir conversa"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Abrir sessão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Controle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Abre Ajustes / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Chat do agente e trabalho recente."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Visão geral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instâncias"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Arquivos"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Sonhando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Uso"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automações"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Agente padrão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Conectando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Atenção"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "O sistema segue a configuração de aparência deste dispositivo."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agentes da barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Quantos agentes a barra lateral lista antes do menu de seleção."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Padrão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Usado para novas conversas de Chat e sessões de Talk."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Usado para novas sessões de Chat e Talk."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Configurações"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ocultar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Selecionado"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Mais agentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Recentes"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Editar páginas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Início"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Não lida"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Atenção"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Novo Chat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Conexão"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
"translated": "On-line"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Conectando"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Requer atenção"
|
||||
"translated": "Precisa de atenção"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
"translated": "Off-line"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chat"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "As páginas fixadas permanecem na barra lateral. A página inicial é sempre exibida."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Concluído"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Fixada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Não fixada"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automações"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostrar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Voltar para %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ocultar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Mostrar barra lateral"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Fechar tela"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, voz ativa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Controle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agente"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Configurações"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instâncias"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Conversas"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessões"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Над чем вы хотите поработать?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Ветка подключится, когда Gateway будет готов."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Сеанс подключится, когда Gateway будет готов."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Параметры нового сеанса…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Ветки…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Сеансы…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Создать"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Удалить ветку?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Удалить сеанс?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Удалить ветку"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Удалить сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Отмена"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Это действие безвозвратно удалит ветку и её расшифровку."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Сеанс и его расшифровка будут удалены без возможности восстановления."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Новая группа"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Переименовать ветку"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Переименовать сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Название группы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Название ветки"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Название сеанса"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Показать еще"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Непрочитанное"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Токены"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Открывает раздел «Сеансы»"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Ожидающие подтверждения"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Агенты"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Ветка агента"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Сеанс агента"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Недавние ветки"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Недавние сеансы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Нет недавних веток"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Нет недавних сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Личный чат"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Отмена"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Ветки"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Сеансы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Архивные ветки"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Архивные сеансы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Показать архив"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Ветки недоступны"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Сеансы недоступны"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Загрузка архивных веток"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Загрузка архивных сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Загрузка недавних веток"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Загрузка недавних сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) ветка](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) сеанс](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Нет архивных веток"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Нет архивных сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Архивные ветки появятся здесь."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Архивные сеансы появятся здесь."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Поделиться приемом"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Загрузка веток"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Загрузка сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Получение недавней активности из Gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Ветки недоступны"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Сеансы недоступны"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Нет недавних веток"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Нет недавних сеансов"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Активность ветки недоступна офлайн"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Активность сеансов недоступна"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Карточка"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Открыть ветку"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Открыть сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Не в сети"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Управление"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Открывает Настройки / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Чат с агентом и недавняя работа."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Обзор"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Экземпляры"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Файлы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Сновидение"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Использование"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Автоматизации"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Агент по умолчанию"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "В сети"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Подключение"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Внимание"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Не в сети"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Система следует настройке оформления этого устройства."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Агенты на боковой панели"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Количество агентов, отображаемых на боковой панели перед меню переключения."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "По умолчанию"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Используется для новых веток чата и сеансов разговора."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Используется для новых сеансов чата и разговора."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Настройки"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Скрыть боковую панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Выбрано"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Другие агенты"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Недавние"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Изменить страницы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Главная"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Непрочитанное"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Требует внимания"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Новый чат"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Подключение"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "В сети"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Подключение"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Требует внимания"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Не в сети"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Чат"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Закреплённые страницы остаются на боковой панели. Главная отображается всегда."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Готово"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Закреплено"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Не закреплено"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Автоматизации"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Показать боковую панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Назад к %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Скрыть боковую панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Показать боковую панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Закрыть холст"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Чат, голос включён"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Управление"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Агент"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Настройки"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Экземпляры"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Ветки"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Сеансы"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Vad vill du arbeta med?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Tråden ansluts när Gateway är redo."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Sessionen ansluts när Gateway är redo."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Alternativ för ny session…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Trådar…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Sessioner…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Skapa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Ta bort tråden?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Radera sessionen?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Radera tråd"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Radera session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Avbryt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Detta raderar tråden och dess transkription permanent."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Detta raderar sessionen och dess transkription permanent."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Ny grupp"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Byt namn på tråd"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Byt namn på session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Gruppnamn"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Trådnamn"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Sessionsnamn"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Visa mer"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Oläst"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokens"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Öppnar Sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Väntande godkännanden"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Agenter"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Agenttråd"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Agentsession"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Senaste trådarna"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Senaste sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Inga senaste trådar"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Inga senaste sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Direktchatt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Avbryt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Trådar"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Arkiverade trådar"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Arkiverade sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Visa arkiverade"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Trådarna är inte tillgängliga"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessioner är inte tillgängliga"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Läser in arkiverade trådar"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Läser in arkiverade sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Läser in senaste trådarna"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Läser in senaste sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) tråd](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) session](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Inga arkiverade trådar"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Inga arkiverade sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Arkiverade trådar visas här."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Arkiverade sessioner visas här."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Dela intag"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Läser in trådar"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Läser in sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Hämtar senaste aktivitet från gatewayen."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Trådarna är inte tillgängliga"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Sessioner är inte tillgängliga"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Inga senaste trådar"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Inga senaste sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Trådaktiviteten är offline"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Sessionsaktiviteten är offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Kort"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Öppna tråd"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Öppna session"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Kontroll"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Öppnar Inställningar / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Agentchatt och senaste arbete."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Översikt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Instanser"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Filer"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Drömmer"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Användning"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Automatiseringar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Standardagent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Ansluter"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Observera"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Systemet följer den här enhetens utseendeinställning."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Agenter i sidofältet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Hur många agenter som visas i sidofältet före växlingsmenyn."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Standard"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Används för nya chatttrådar och samtalssessioner."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Används för nya chatt- och samtalssessioner."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Inställningar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Dölj sidofält"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Vald"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Fler agenter"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Senaste"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Redigera sidor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Hem"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Oläst"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Åtgärd krävs"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Ny chatt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Anslutning"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Online"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Ansluter"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Kräver uppmärksamhet"
|
||||
"translated": "Kräver åtgärd"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Offline"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Chatt"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Fästa sidor finns kvar i sidofältet. Hem visas alltid."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Klar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Fäst"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Inte fäst"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Automatiseringar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Visa sidofält"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Tillbaka till %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Dölj sidofält"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Visa sidofält"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Stäng canvas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chatt, röst aktiv"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Kontroll"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Inställningar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Instanser"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Trådar"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Sessioner"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "คุณต้องการทำงานอะไร?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "ระบบจะแนบเธรดเมื่อ Gateway พร้อมใช้งาน"
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "เซสชันจะเชื่อมต่อเมื่อ Gateway พร้อมใช้งาน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "ตัวเลือกเซสชันใหม่…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "เธรด…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "เซสชัน…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "สร้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "ลบเธรดหรือไม่?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "ลบเซสชันหรือไม่?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "ลบเธรด"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "ลบเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "ยกเลิก"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "การดำเนินการนี้จะลบเธรดและบันทึกการสนทนาอย่างถาวร"
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "การดำเนินการนี้จะลบเซสชันและบันทึกการสนทนาอย่างถาวร"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "กลุ่มใหม่"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "เปลี่ยนชื่อเธรด"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "เปลี่ยนชื่อเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "ชื่อกลุ่ม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "ชื่อเธรด"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "ชื่อเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "ดูเพิ่มเติม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "ยังไม่ได้อ่าน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "โทเค็น"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "เปิดเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "การอนุมัติที่รอดำเนินการ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "เอเจนต์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "เธรดของเอเจนต์"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "เซสชันของเอเจนต์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "เธรดล่าสุด"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "เซสชันล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway ออฟไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "ไม่มีเธรดล่าสุด"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "ไม่มีเซสชันล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "แชทโดยตรง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "ยกเลิก"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "เธรด"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "เซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "เธรดที่เก็บถาวร"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "เซสชันที่เก็บถาวร"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "แสดงที่เก็บถาวร"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "เธรดไม่พร้อมใช้งาน"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "เซสชันไม่พร้อมใช้งาน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "กำลังโหลดเธรดที่เก็บถาวร"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "กำลังโหลดเซสชันที่เก็บถาวร"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "กำลังโหลดเธรดล่าสุด"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "กำลังโหลดเซสชันล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) เธรด](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) เซสชัน](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "ไม่มีเธรดที่เก็บถาวร"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "ไม่มีเซสชันที่เก็บถาวร"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "เธรดที่เก็บถาวรจะแสดงที่นี่"
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "เซสชันที่เก็บถาวรจะแสดงที่นี่"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "แชร์ข้อมูลนำเข้า"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "กำลังโหลดเธรด"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "กำลังโหลดเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "กำลังดึงกิจกรรมล่าสุดจาก Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "เธรดไม่พร้อมใช้งาน"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "เซสชันไม่พร้อมใช้งาน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "ไม่มีเธรดล่าสุด"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "ไม่มีเซสชันล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "กิจกรรมของเธรดออฟไลน์"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "กิจกรรมของเซสชันออฟไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "การ์ด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "เปิดเธรด"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "เปิดเซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "ออฟไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "การควบคุม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "เปิด Settings / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "แชทกับเอเจนต์และงานล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "ภาพรวม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "อินสแตนซ์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "ไฟล์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "กำลังฝัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "การใช้งาน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "การทำงานอัตโนมัติ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "เอเจนต์เริ่มต้น"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "ออนไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "กำลังเชื่อมต่อ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "โปรดทราบ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "ออฟไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "ระบบจะทำตามการตั้งค่าลักษณะของอุปกรณ์นี้"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "เอเจนต์ในแถบด้านข้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "จำนวนเอเจนต์ที่แถบด้านข้างแสดงก่อนเมนูสลับ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "ค่าเริ่มต้น"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "ใช้สำหรับเธรดแชทและเซสชันการสนทนาใหม่"
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "ใช้สำหรับเซสชันแชทและการสนทนาใหม่"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "การตั้งค่า"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "ซ่อนแถบด้านข้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "เลือกแล้ว"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "เอเจนต์เพิ่มเติม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "ล่าสุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "แก้ไขหน้า"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "หน้าหลัก"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "ยังไม่ได้อ่าน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "ต้องดำเนินการ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "แชทใหม่"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "การเชื่อมต่อ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "ออนไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "กำลังเชื่อมต่อ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "ต้องดำเนินการ"
|
||||
"translated": "ต้องตรวจสอบ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "ออฟไลน์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "แชท"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "หน้าที่ปักหมุดจะอยู่ในแถบด้านข้าง โดยหน้าหลักจะแสดงอยู่เสมอ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "เสร็จสิ้น"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "ปักหมุดแล้ว"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "ไม่ได้ปักหมุด"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "การทำงานอัตโนมัติ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "แสดงแถบด้านข้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "กลับไปที่ %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "ซ่อนแถบด้านข้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "แสดงแถบด้านข้าง"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "ปิดแคนวาส"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "แชท เปิดเสียงอยู่"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "ควบคุม"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Agent"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "การตั้งค่า"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "อินสแตนซ์"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "เธรด"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "เซสชัน"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+250
-210
@@ -1491,7 +1491,7 @@
|
||||
{
|
||||
"id": "native.android.670121e54dbe286f",
|
||||
"source": "Threads",
|
||||
"translated": "Konular"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.android.d38be650b1bce4a0",
|
||||
@@ -3681,7 +3681,7 @@
|
||||
{
|
||||
"id": "native.android.a5845742daecb4ba",
|
||||
"source": "Threads",
|
||||
"translated": "Konular"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.android.439b324280869527",
|
||||
@@ -5751,7 +5751,7 @@
|
||||
{
|
||||
"id": "native.android.57177017a6a93826",
|
||||
"source": "Threads",
|
||||
"translated": "İletişim Dizileri"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.android.43320b54a68b00a1",
|
||||
@@ -8151,7 +8151,7 @@
|
||||
{
|
||||
"id": "native.android.6cf5d6fa8a4186d5",
|
||||
"source": "Threads",
|
||||
"translated": "İletişim Dizileri"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.android.e4dc7610b0898e37",
|
||||
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Ne üzerinde çalışmak istersiniz?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gateway hazır olduğunda iletişim dizisi bağlanır."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gateway hazır olduğunda oturum bağlanır."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Yeni Oturum Seçenekleri…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "İletişim Dizileri…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Oturumlar…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Oluştur"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "İletişim Dizisi Silinsin mi?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Oturum Silinsin mi?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "İş Parçacığını Sil"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Oturumu Sil"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "İptal"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Bu işlem, iş parçacığını ve dökümünü kalıcı olarak siler."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Bu işlem oturumu ve dökümünü kalıcı olarak siler."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Yeni Grup"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "İş Parçacığını Yeniden Adlandır"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Oturumu Yeniden Adlandır"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Grup adı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "İş parçacığı adı"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Oturum adı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Daha Fazla Göster"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Canlı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Okunmamış"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Tokenlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Oturumlar'ı açar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Bekleyen onaylar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Otomasyon sorunları"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31 günlük kullanım"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Kullanımı açar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Aracılar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Aracı iş parçacığı"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Aracı oturumu"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Son iş parçacıkları"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Son oturumlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway çevrimdışı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Son iş parçacığı yok"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Son oturum yok"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Doğrudan sohbet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "az önce"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "İptal"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "İş Parçacıkları"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Oturumlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Arşivlenmiş iş parçacıkları"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Arşivlenmiş oturumlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Arşivlenenleri Göster"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "İş parçacıkları kullanılamıyor"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Oturumlar kullanılamıyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Arşivlenmiş iş parçacıkları yükleniyor"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Arşivlenmiş oturumlar yükleniyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Son iş parçacıkları yükleniyor"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Son oturumlar yükleniyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) iş parçacığı](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) oturum](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Arşivlenmiş iş parçacığı yok"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Arşivlenmiş oturum yok"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Arşivlenmiş iş parçacıkları burada görünür."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Arşivlenmiş oturumlar burada görünür."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Paylaşım alımı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "İş parçacıkları yükleniyor"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Oturumlar yükleniyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Gateway üzerinden son etkinlik alınıyor."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "İş parçacıkları kullanılamıyor"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Oturumlar kullanılamıyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Son iş parçacığı yok"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Yakın zamanda oturum yok"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "İş parçacığı etkinliği çevrimdışı"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Oturum etkinliği çevrimdışı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Kart"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "İş Parçacığını Aç"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Oturumu Aç"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Çevrimdışı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Kontrol"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Ayarlar / Gateway'i açar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Aracı sohbeti ve son çalışmalar."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Genel Bakış"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Örnekler"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Dosyalar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Rüya Görüyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Kullanım"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Otomasyonlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Varsayılan Temsilci"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Çevrimiçi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Bağlanıyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Dikkat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Çevrimdışı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Sistem, bu aygıtın görünüm ayarını izler."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Kenar Çubuğu Aracıları"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Kenar çubuğunun, değiştirici menüsünden önce kaç aracı listeleyeceği."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Varsayılan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Yeni Sohbet dizileri ve Konuşma oturumları için kullanılır."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Yeni Sohbet ve Konuşma oturumları için kullanılır."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Ayarlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Kenar Çubuğunu Gizle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Seçili"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Daha Fazla Aracı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Oturumlarda ara"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Oturum aramasını temizle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Oturumlar yükleniyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Son oturum yok"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Son Kullanılanlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "Tüm Oturumlar…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Sayfaları Düzenle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Ana Sayfa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Okunmamış"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Dikkat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Yeni Sohbet"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Bağlantı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Çevrimiçi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Bağlanıyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "İlgilenilmesi gerekiyor"
|
||||
"translated": "Dikkat gerekiyor"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Çevrimdışı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Sohbet"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Sabitlenen sayfalar kenar çubuğunda kalır. Ana Sayfa her zaman gösterilir."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Sayfalar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Bitti"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Sabitlendi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Sabitlenmedi"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Otomasyonlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Kenar Çubuğunu Göster"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "%@ uygulamasına geri dön"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Kenar Çubuğunu Gizle"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Kenar Çubuğunu Göster"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Tuvali kapat"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Sohbet, ses açık"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Kontrol"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Aracı"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Ayarlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Örnekler"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Diziler"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Oturumlar"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
@@ -21991,7 +22031,7 @@
|
||||
{
|
||||
"id": "native.apple.3ec2afcbc298c673",
|
||||
"source": "Threads",
|
||||
"translated": "Diziler"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.74f66e96c112c3fa",
|
||||
@@ -22086,7 +22126,7 @@
|
||||
{
|
||||
"id": "native.apple.52e37e3a44ae516c",
|
||||
"source": "Threads",
|
||||
"translated": "Diziler"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.704924cd0704b5b5",
|
||||
@@ -24086,7 +24126,7 @@
|
||||
{
|
||||
"id": "native.apple.c0cc6acc36f413ce",
|
||||
"source": "Threads",
|
||||
"translated": "İş Parçacıkları"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.854d3928fe5a557c",
|
||||
@@ -24461,7 +24501,7 @@
|
||||
{
|
||||
"id": "native.apple.c0ada47504425f23",
|
||||
"source": "Threads",
|
||||
"translated": "İş Parçacıkları"
|
||||
"translated": "Mesaj dizileri"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c13dbe6b5c01e9bd",
|
||||
|
||||
+242
-202
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Над чим ви хотіли б попрацювати?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Гілку буде підключено, щойно Gateway буде готовий."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Сеанс підключиться, щойно Gateway буде готовий."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Параметри нового сеансу…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Гілки…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Сеанси…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Створити"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Видалити гілку?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Видалити сеанс?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Видалити гілку"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Видалити сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Скасувати"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Це назавжди видалить гілку та її розшифрування."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Це назавжди видалить сеанс і його стенограму."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Нова група"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Перейменувати гілку"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Перейменувати сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Назва групи"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Назва гілки"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Назва сеансу"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Показати більше"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Непрочитане"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Токени"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Відкриває сеанси"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Очікують схвалення"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Агенти"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Гілка агента"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Сеанс агента"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Недавні гілки"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Недавні сеанси"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Немає недавніх гілок"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Немає недавніх сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Прямий чат"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Скасувати"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Гілки"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Сеанси"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Архівні гілки"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Архівовані сеанси"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Показати архівовані"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Гілки недоступні"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Сеанси недоступні"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Завантаження архівних гілок"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Завантаження архівованих сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Завантаження недавніх гілок"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Завантаження недавніх сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) гілка](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) сеанс](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Немає архівних гілок"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Немає архівованих сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Архівні гілки з’являться тут."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Архівовані сеанси з’являться тут."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Поділитися надходженням"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Завантаження гілок"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Завантаження сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Отримання нещодавньої активності з Gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Гілки недоступні"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Сеанси недоступні"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Немає недавніх гілок"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Немає нещодавніх сеансів"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Активність гілок офлайн"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Активність сеансів офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Картка"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Відкрити гілку"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Відкрити сеанс"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Керування"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Відкриває Settings / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Чат агента та останні роботи."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Огляд"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Екземпляри"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Файли"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Сновидіння"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Використання"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Автоматизації"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Агент за замовчуванням"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Онлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Підключення"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Увага"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Система дотримується налаштувань вигляду цього пристрою."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Агенти на бічній панелі"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Кількість агентів, які відображаються на бічній панелі перед меню перемикання."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13191,7 +13161,7 @@
|
||||
{
|
||||
"id": "native.apple.8a6df64f48087b74",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Незавершені підтвердження"
|
||||
"translated": "Очікують схвалення"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e70b7e1453061f75",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "За замовчуванням"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Використовується для нових гілок чату та сеансів розмови."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Використовується для нових сеансів чату й розмов."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Налаштування"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Приховати бічну панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Вибрано"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Інші агенти"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Нещодавні"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Редагувати сторінки"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Головна"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Непрочитане"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Увага"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Новий чат"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Підключення"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Онлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Підключення"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Потребує уваги"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Офлайн"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Чат"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Закріплені сторінки залишаються на бічній панелі. Головна відображається завжди."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Готово"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Закріплено"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Не закріплено"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Автоматизації"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Показати бічну панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Назад до %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Приховати бічну панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Показати бічну панель"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Закрити полотно"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Чат, голос увімкнено"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Керування"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Агент"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Налаштування"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Екземпляри"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Гілки"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Сеанси"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+241
-201
@@ -10869,9 +10869,9 @@
|
||||
"translated": "Bạn muốn làm việc gì?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Luồng sẽ được đính kèm khi Gateway sẵn sàng."
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Phiên sẽ kết nối sau khi Gateway sẵn sàng."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "Tùy chọn phiên mới…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "Luồng…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "Phiên…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "Tạo"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "Xóa luồng?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "Xóa phiên?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "Xóa luồng"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "Xóa phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "Hủy"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "Thao tác này sẽ xóa vĩnh viễn luồng và bản ghi của luồng."
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "Thao tác này sẽ xóa vĩnh viễn phiên và bản ghi của phiên."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "Nhóm mới"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "Đổi tên luồng"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "Đổi tên phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "Tên nhóm"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "Tên luồng"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "Tên phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "Xem thêm"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Trực tiếp"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "Chưa đọc"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Token"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "Mở Phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "Phê duyệt đang chờ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Sự cố tự động hóa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "Mức sử dụng trong 31 ngày"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Mở mức sử dụng"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "Tác tử"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "Luồng tác nhân"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "Phiên tác nhân"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "Luồng gần đây"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "Phiên gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway ngoại tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "Không có luồng nào gần đây"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Không có phiên gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "Cuộc trò chuyện trực tiếp"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "vừa xong"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "Hủy"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "Luồng"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "Phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "Luồng đã lưu trữ"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "Phiên đã lưu trữ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "Hiển thị mục đã lưu trữ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Không thể truy cập các luồng"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Không thể truy cập các phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "Đang tải các luồng đã lưu trữ"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "Đang tải các phiên đã lưu trữ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "Đang tải các luồng gần đây"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "Đang tải các phiên gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) luồng](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) phiên](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "Không có luồng nào đã lưu trữ"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "Không có phiên đã lưu trữ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "Các luồng đã lưu trữ sẽ xuất hiện tại đây."
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "Các phiên đã lưu trữ sẽ xuất hiện ở đây."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "Chia sẻ đầu vào"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "Đang tải các luồng"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Đang tải các phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "Đang lấy hoạt động gần đây từ gateway."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "Không thể truy cập các luồng"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "Không có phiên khả dụng"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "Không có luồng nào gần đây"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Không có phiên gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "Hoạt động của luồng đang ngoại tuyến"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "Hoạt động phiên đang ngoại tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "Thẻ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "Mở luồng"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "Mở phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "Ngoại tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "Điều khiển"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "Mở Cài đặt / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "Trò chuyện với agent và công việc gần đây."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "Tổng quan"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "Phiên bản"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "Tệp"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Đang mơ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "Mức sử dụng"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "Tự động hóa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "Tác nhân mặc định"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@, %2$@, %3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@, %2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "Trực tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "Đang kết nối"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "Chú ý"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "Ngoại tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "Hệ thống tuân theo cài đặt giao diện của thiết bị này."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "Tác nhân trong thanh bên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "Số lượng tác nhân được liệt kê trong thanh bên trước menu chuyển đổi."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "Mặc định"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "Được dùng cho các chuỗi Chat và phiên Talk mới."
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "Được dùng cho các phiên Trò chuyện và Trò chuyện thoại mới."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "Cài đặt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ẩn thanh bên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "Đã chọn"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "Thêm tác nhân"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Tìm kiếm phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Xóa tìm kiếm phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Đang tải phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "Không có phiên gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "Gần đây"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "Tất cả phiên…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "Chỉnh sửa trang"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "Trang chủ"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "Chưa đọc"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "Cần chú ý"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "Trò chuyện mới"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "Kết nối"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "Trực tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "Đang kết nối"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "Cần chú ý"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "Ngoại tuyến"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "Trò chuyện"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "Các trang đã ghim sẽ nằm trong thanh bên. Trang chủ luôn được hiển thị."
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Trang"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "Xong"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "Đã ghim"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "Chưa ghim"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "Tự động hóa"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Hiển thị thanh bên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "Quay lại %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "Ẩn thanh bên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "Hiển thị thanh bên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "Đóng canvas"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "Chat, giọng nói đang bật"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "Điều khiển"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "Tác nhân"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "Cài đặt"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "Phiên bản"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "Chuỗi"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "Phiên"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+239
-199
@@ -10869,9 +10869,9 @@
|
||||
"translated": "你想处理什么?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gateway 准备就绪后将连接该会话。"
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gateway 准备就绪后,便会连接会话。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,8 +10919,8 @@
|
||||
"translated": "新会话选项…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "会话…"
|
||||
},
|
||||
{
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "创建"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "删除会话?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "删除对话"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "删除会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "取消"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "这将永久删除该对话及其对话记录。"
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "这将永久删除该会话及其记录。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "新建组"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "重命名对话"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "重命名会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "组名称"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "对话名称"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "会话名称"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "查看更多"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "实时"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "未读"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "Token"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "打开会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "待处理审批"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "自动化问题"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31 天用量"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "打开用量"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "智能体"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "智能体对话"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "代理会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "最近的对话"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "最近的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway 离线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "没有最近的对话"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "没有最近的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "直接聊天"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "刚刚"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "取消"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "对话"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "已归档的对话"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "已归档的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "显示已归档"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "对话不可用"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "会话不可用"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "正在加载已归档的对话"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "正在加载已归档的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "正在加载最近的对话"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "正在加载最近的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) 个对话](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) 个会话](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "没有已归档的对话"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "没有已归档的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "已归档的对话将显示在此处。"
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "已归档的会话将显示在此处。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "共享入口"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "正在加载对话"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "正在加载会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "正在从 Gateway 获取最近活动。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "对话不可用"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "会话不可用"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "没有最近的对话"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "没有最近的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "对话活动已离线"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "会话活动已离线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "卡片"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "打开对话"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "打开会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "离线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "控制"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "打开设置 / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "智能体聊天和近期工作。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "概览"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "实例"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "文件"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Dreaming"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "用量"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "自动化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "默认代理"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@,%2$@,%3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@,%2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "在线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "正在连接"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "离线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "系统遵循此设备的外观设置。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "侧边栏智能体"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "侧边栏在切换菜单前列出的智能体数量。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "默认"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "用于新的聊天话题串和通话会话。"
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "用于新的聊天和通话会话。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "设置"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "隐藏侧边栏"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "已选择"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "更多智能体"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "搜索会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "清除会话搜索"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "正在加载会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "没有最近的会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "最近"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "所有会话…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "编辑页面"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "主页"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "未读"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "新建聊天"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "连接"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "在线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "正在连接"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "需要注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "离线"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "聊天"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "固定的页面会保留在边栏中。主页始终显示。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "页面"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "完成"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "已固定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "未固定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "自动化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "显示侧边栏"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "返回 %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "隐藏侧边栏"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "显示侧边栏"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "关闭画布"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "聊天,语音已开启"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "控制"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "代理"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "设置"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "实例"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "话题串"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "会话"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
+243
-203
@@ -10581,7 +10581,7 @@
|
||||
{
|
||||
"id": "native.apple.463a0c3fc0724429",
|
||||
"source": "Tokens",
|
||||
"translated": "權杖"
|
||||
"translated": "詞元"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.509cb464bd3190dd",
|
||||
@@ -10869,9 +10869,9 @@
|
||||
"translated": "你想要處理什麼?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4da775013ac9b123",
|
||||
"source": "The thread attaches once the gateway is ready.",
|
||||
"translated": "Gateway 準備就緒後,將連結此討論串。"
|
||||
"id": "native.apple.ed7f703a8809b564",
|
||||
"source": "The session attaches once the gateway is ready.",
|
||||
"translated": "Gateway 準備就緒後,工作階段便會連線。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.02611ddddef7295a",
|
||||
@@ -10919,9 +10919,9 @@
|
||||
"translated": "新增工作階段選項…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.003b25ddafeb18e9",
|
||||
"source": "Threads…",
|
||||
"translated": "討論串…"
|
||||
"id": "native.apple.a1b0d289758e2213",
|
||||
"source": "Sessions…",
|
||||
"translated": "工作階段…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.17c13312e7532c89",
|
||||
@@ -11084,14 +11084,14 @@
|
||||
"translated": "建立"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31d5c7287cfb3abe",
|
||||
"source": "Delete Thread?",
|
||||
"translated": "要刪除討論串嗎?"
|
||||
"id": "native.apple.e7382c53c7dd48f7",
|
||||
"source": "Delete Session?",
|
||||
"translated": "刪除工作階段?"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.d3395564809f1120",
|
||||
"source": "Delete Thread",
|
||||
"translated": "刪除討論串"
|
||||
"id": "native.apple.702fd8b48da56065",
|
||||
"source": "Delete Session",
|
||||
"translated": "刪除工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1aed19568a048e",
|
||||
@@ -11099,9 +11099,9 @@
|
||||
"translated": "取消"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.092659256d26cb03",
|
||||
"source": "This permanently deletes the thread and its transcript.",
|
||||
"translated": "這會永久刪除討論串及其對話記錄。"
|
||||
"id": "native.apple.61f3f19ea24c6012",
|
||||
"source": "This permanently deletes the session and its transcript.",
|
||||
"translated": "這會永久刪除工作階段及其對話記錄。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.0965d8d2429c3b9f",
|
||||
@@ -11129,9 +11129,9 @@
|
||||
"translated": "新增群組"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.683032464c497bbd",
|
||||
"source": "Rename Thread",
|
||||
"translated": "重新命名討論串"
|
||||
"id": "native.apple.cd368674179237a0",
|
||||
"source": "Rename Session",
|
||||
"translated": "重新命名工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.31424500c53d6c32",
|
||||
@@ -11139,15 +11139,55 @@
|
||||
"translated": "群組名稱"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f887aa956588f237",
|
||||
"source": "Thread name",
|
||||
"translated": "討論串名稱"
|
||||
"id": "native.apple.8b54306971cfa8c9",
|
||||
"source": "Session name",
|
||||
"translated": "工作階段名稱"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8018adcccaa2a4d",
|
||||
"source": "View More",
|
||||
"translated": "查看更多"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3ef1aa93156bd67",
|
||||
"source": "Live",
|
||||
"translated": "Live"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bdfc040fb974b4aa",
|
||||
"source": "Unread",
|
||||
"translated": "未讀"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f94924c0a736fcf",
|
||||
"source": "Tokens",
|
||||
"translated": "詞元"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bec8b61a3a29b59a",
|
||||
"source": "Opens Sessions",
|
||||
"translated": "開啟工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69279daa342241c1",
|
||||
"source": "Pending approvals",
|
||||
"translated": "待處理的核准"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48af1bbb4fd06321",
|
||||
"source": "Automation issues",
|
||||
"translated": "Automation issues"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3e4f2dd3a0d41b97",
|
||||
"source": "31-day usage",
|
||||
"translated": "31-day usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c334a60ae7b4d508",
|
||||
"source": "Opens Usage",
|
||||
"translated": "Opens Usage"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65fb4d9ce6e5bbda",
|
||||
"source": "Gateway settings",
|
||||
@@ -11179,14 +11219,14 @@
|
||||
"translated": "代理程式"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7c8231b7b1ca480f",
|
||||
"source": "Agent thread",
|
||||
"translated": "代理程式討論串"
|
||||
"id": "native.apple.789d5d0790fd18ca",
|
||||
"source": "Agent session",
|
||||
"translated": "代理程式工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b3c553614f762a58",
|
||||
"source": "Recent threads",
|
||||
"translated": "最近的討論串"
|
||||
"id": "native.apple.ee45dce4a2e44737",
|
||||
"source": "Recent sessions",
|
||||
"translated": "最近的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9161ca3c61de6cc7",
|
||||
@@ -11194,9 +11234,9 @@
|
||||
"translated": "Gateway 離線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.5aa32afda85064ea",
|
||||
"source": "No recent threads",
|
||||
"translated": "沒有最近的討論串"
|
||||
"id": "native.apple.c97e0382e578a2f7",
|
||||
"source": "No recent sessions",
|
||||
"translated": "沒有最近的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.79937d7781fb65ae",
|
||||
@@ -11253,6 +11293,11 @@
|
||||
"source": "Direct chat",
|
||||
"translated": "直接聊天"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7a39e0991fa3cd53",
|
||||
"source": "just now",
|
||||
"translated": "just now"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dbd48d25920f342b",
|
||||
"source": "%@ on %@",
|
||||
@@ -11294,14 +11339,14 @@
|
||||
"translated": "取消"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b6855cf19a50f477",
|
||||
"source": "Threads",
|
||||
"translated": "討論串"
|
||||
"id": "native.apple.7a6511a467e34f69",
|
||||
"source": "Sessions",
|
||||
"translated": "工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9b1d0ef27a1333b0",
|
||||
"source": "Archived threads",
|
||||
"translated": "已封存的討論串"
|
||||
"id": "native.apple.e6b8913014b64f0a",
|
||||
"source": "Archived sessions",
|
||||
"translated": "已封存的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bc8e64efb095a625",
|
||||
@@ -11309,34 +11354,34 @@
|
||||
"translated": "顯示已封存"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98167401c7267735",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "無法使用討論串"
|
||||
"id": "native.apple.119433782518f199",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "無法使用工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d28a7def2337b9f",
|
||||
"source": "Loading archived threads",
|
||||
"translated": "正在載入已封存的討論串"
|
||||
"id": "native.apple.9882fbadac3bea03",
|
||||
"source": "Loading archived sessions",
|
||||
"translated": "正在載入已封存的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.777d7b706933bd7b",
|
||||
"source": "Loading recent threads",
|
||||
"translated": "正在載入最近的討論串"
|
||||
"id": "native.apple.16dca1cfac8a571b",
|
||||
"source": "Loading recent sessions",
|
||||
"translated": "正在載入最近的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22f81ea94bef8410",
|
||||
"source": "^[\\(count) thread](inflect: true)",
|
||||
"translated": "^[\\(count) 個討論串](inflect: true)"
|
||||
"id": "native.apple.207dad20d09f3160",
|
||||
"source": "^[\\(count) session](inflect: true)",
|
||||
"translated": "^[\\(count) 個工作階段](inflect: true)"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1cad51e14db59bf9",
|
||||
"source": "No archived threads",
|
||||
"translated": "沒有已封存的討論串"
|
||||
"id": "native.apple.a0b4091bf77d4060",
|
||||
"source": "No archived sessions",
|
||||
"translated": "沒有已封存的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.18ef832d3a7ddcf8",
|
||||
"source": "Archived threads will appear here.",
|
||||
"translated": "已封存的討論串會顯示在這裡。"
|
||||
"id": "native.apple.acfdf5c72e289736",
|
||||
"source": "Archived sessions will appear here.",
|
||||
"translated": "已封存的工作階段會顯示在這裡。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e8e8cea7ec44fe08",
|
||||
@@ -11419,9 +11464,9 @@
|
||||
"translated": "分享接收"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.21d9208d86a4d1fe",
|
||||
"source": "Loading threads",
|
||||
"translated": "正在載入討論串"
|
||||
"id": "native.apple.4c5b2ecf243cfbbc",
|
||||
"source": "Loading sessions",
|
||||
"translated": "正在載入工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.48655128d0a34e44",
|
||||
@@ -11429,19 +11474,19 @@
|
||||
"translated": "正在從 Gateway 擷取最近活動。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4be1f79aa2b230ff",
|
||||
"source": "Threads unavailable",
|
||||
"translated": "無法使用討論串"
|
||||
"id": "native.apple.c4479934c65c973c",
|
||||
"source": "Sessions unavailable",
|
||||
"translated": "工作階段無法使用"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.98b348873556bc46",
|
||||
"source": "No recent threads",
|
||||
"translated": "沒有最近的討論串"
|
||||
"id": "native.apple.6e67b64954ba3002",
|
||||
"source": "No recent sessions",
|
||||
"translated": "沒有最近的工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7396d205574d279f",
|
||||
"source": "Thread activity offline",
|
||||
"translated": "討論串活動已離線"
|
||||
"id": "native.apple.5dce07848bec08b5",
|
||||
"source": "Session activity offline",
|
||||
"translated": "工作階段活動已離線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e3586d8a603f67e0",
|
||||
@@ -11899,9 +11944,9 @@
|
||||
"translated": "卡片"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c9ec1b0e18074d8a",
|
||||
"source": "Open Thread",
|
||||
"translated": "開啟討論串"
|
||||
"id": "native.apple.3edbccb7c14b693c",
|
||||
"source": "Open Session",
|
||||
"translated": "開啟工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2732e4ff77a201b",
|
||||
@@ -12103,91 +12148,6 @@
|
||||
"source": "Offline",
|
||||
"translated": "離線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a2d8e7b4dba29764",
|
||||
"source": "Control",
|
||||
"translated": "控制"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.597471e86dda3d38",
|
||||
"source": "Opens Settings / Gateway",
|
||||
"translated": "開啟 Settings / Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ed16c9793f468dcd",
|
||||
"source": "Agent chat and recent work.",
|
||||
"translated": "代理聊天與近期工作。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a03e961ab14ba060",
|
||||
"source": "Overview",
|
||||
"translated": "總覽"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.feb28c9cba676ba2",
|
||||
"source": "Instances",
|
||||
"translated": "執行個體"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3f2726ccd1acd987",
|
||||
"source": "Files",
|
||||
"translated": "檔案"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.614c9b40919fb103",
|
||||
"source": "Dreaming",
|
||||
"translated": "Dreaming"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e2b5c2d7c5d461a3",
|
||||
"source": "Usage",
|
||||
"translated": "使用量"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f21bf1e3b5ec896c",
|
||||
"source": "Automations",
|
||||
"translated": "自動化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.57587fec1ca582ec",
|
||||
"source": "Default Agent",
|
||||
"translated": "預設代理程式"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e0e99a802f07cc68",
|
||||
"source": "Gateway",
|
||||
"translated": "Gateway"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.731e5fccde7cbc86",
|
||||
"source": "Gateway %1$@, %2$@, %3$@",
|
||||
"translated": "Gateway %1$@、%2$@、%3$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.ab0a315f69e3d5df",
|
||||
"source": "Gateway %1$@, %2$@",
|
||||
"translated": "Gateway %1$@,%2$@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01ad746119fbc27d",
|
||||
"source": "Online",
|
||||
"translated": "線上"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e253ef19f6e53371",
|
||||
"source": "Connecting",
|
||||
"translated": "連線中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6f28b07ebdc2b25d",
|
||||
"source": "Attention",
|
||||
"translated": "注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.1c931bcd1cd20334",
|
||||
"source": "Offline",
|
||||
"translated": "離線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.65602c216b89032d",
|
||||
"source": "Channels / Integrations",
|
||||
@@ -12988,6 +12948,16 @@
|
||||
"source": "System follows this device’s appearance setting.",
|
||||
"translated": "系統會遵循此裝置的外觀設定。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.6d48137a8f6a5e96",
|
||||
"source": "Sidebar Agents",
|
||||
"translated": "側邊欄代理程式"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.69cccbdee0bb0b56",
|
||||
"source": "How many agents the sidebar lists before the switcher menu.",
|
||||
"translated": "側邊欄在切換選單前列出的代理程式數量。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.70eca66c79335a6e",
|
||||
"source": "Connection",
|
||||
@@ -13389,9 +13359,9 @@
|
||||
"translated": "預設"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4ae5664c3eda95d",
|
||||
"source": "Used for new Chat threads and Talk sessions.",
|
||||
"translated": "用於新的聊天討論串和對話工作階段。"
|
||||
"id": "native.apple.6805480889265026",
|
||||
"source": "Used for new Chat and Talk sessions.",
|
||||
"translated": "用於新的聊天和通話工作階段。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.19552e71de246322",
|
||||
@@ -15624,39 +15594,134 @@
|
||||
"translated": "unknown relay error"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c23d35de8d70863f",
|
||||
"id": "native.apple.8855710a55de2ed5",
|
||||
"source": "OpenClaw",
|
||||
"translated": "OpenClaw"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e781c0183b79a76",
|
||||
"source": "OpenClaw %@",
|
||||
"translated": "OpenClaw %@"
|
||||
"id": "native.apple.7029e1235380a92c",
|
||||
"source": "Settings",
|
||||
"translated": "設定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.f4eea6473f43388d",
|
||||
"id": "native.apple.7042a7d70a7e5a20",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "隱藏側邊欄"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e779847164babc29",
|
||||
"source": "Selected",
|
||||
"translated": "已選取"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.698c71602b569378",
|
||||
"source": "More Agents",
|
||||
"translated": "更多代理程式"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.94772cbd85c42e6e",
|
||||
"source": "Search sessions",
|
||||
"translated": "Search sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.38e1e910f0958067",
|
||||
"source": "Clear session search",
|
||||
"translated": "Clear session search"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.58248484e54174e3",
|
||||
"source": "Loading sessions",
|
||||
"translated": "Loading sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.dfb5cbd55893c4e5",
|
||||
"source": "No recent sessions",
|
||||
"translated": "No recent sessions"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.01a4c3f6192bb1a3",
|
||||
"source": "Recent",
|
||||
"translated": "最近使用"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.c0a4d120556df169",
|
||||
"source": "All Sessions…",
|
||||
"translated": "All Sessions…"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.aa7c4ecffd2ba36a",
|
||||
"source": "Edit Pages",
|
||||
"translated": "編輯頁面"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4d724d2e5731583d",
|
||||
"source": "Home",
|
||||
"translated": "首頁"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3995f7f73d1ded5f",
|
||||
"source": "Unread",
|
||||
"translated": "未讀"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.b4567540cbcaf944",
|
||||
"source": "Attention",
|
||||
"translated": "需要注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.14858678ae3f059f",
|
||||
"source": "New Chat",
|
||||
"translated": "新聊天"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9d87aa7e7862a607",
|
||||
"source": "Connection",
|
||||
"translated": "連線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7e7c47f471dd2c69",
|
||||
"source": "Online",
|
||||
"translated": "線上"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.9e2aea6088887f1f",
|
||||
"id": "native.apple.02ff27780aad60aa",
|
||||
"source": "Connecting",
|
||||
"translated": "正在連線"
|
||||
"translated": "連線中"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3624978c7d43335a",
|
||||
"id": "native.apple.b2d0754aab434ea3",
|
||||
"source": "Needs attention",
|
||||
"translated": "需要注意"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.7da053dd774cb201",
|
||||
"id": "native.apple.342c72a01b0f4bb1",
|
||||
"source": "Offline",
|
||||
"translated": "離線"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a4256b2ab523ee60",
|
||||
"source": "Chat",
|
||||
"translated": "聊天"
|
||||
"id": "native.apple.9fc7dfa0dccea003",
|
||||
"source": "Pinned pages stay in the sidebar. Home is always shown.",
|
||||
"translated": "已釘選的頁面會保留在側邊欄中。首頁會一律顯示。"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.4bfe6dc45811d50f",
|
||||
"source": "Pages",
|
||||
"translated": "Pages"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.422767686f219093",
|
||||
"source": "Done",
|
||||
"translated": "完成"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.e197e8708ad3b2c8",
|
||||
"source": "Pinned",
|
||||
"translated": "已釘選"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.098013d7dd8cdfc7",
|
||||
"source": "Not pinned",
|
||||
"translated": "未釘選"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.64d7dc062ef4cc81",
|
||||
@@ -15693,46 +15758,21 @@
|
||||
"source": "Automations",
|
||||
"translated": "自動化"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "顯示側邊欄"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bb0ea6d61a32c7c2",
|
||||
"source": "Back to %@",
|
||||
"translated": "返回 %@"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.72fab75688479b3e",
|
||||
"source": "Hide Sidebar",
|
||||
"translated": "隱藏側邊欄"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.20f4753fc51c5341",
|
||||
"source": "Show Sidebar",
|
||||
"translated": "顯示側邊欄"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8af43f59602ec0d8",
|
||||
"source": "Close canvas",
|
||||
"translated": "關閉畫布"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.a1db6ce0aed1d18e",
|
||||
"source": "Chat, voice active",
|
||||
"translated": "聊天,語音已開啟"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.bda6cfa988e49a75",
|
||||
"source": "Control",
|
||||
"translated": "控制"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.3c80f5351055a5f3",
|
||||
"source": "Agent",
|
||||
"translated": "代理"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.22d107db5b905ef4",
|
||||
"source": "Settings",
|
||||
"translated": "設定"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.8a4751c86aa6fe77",
|
||||
"source": "Gateway needs attention",
|
||||
@@ -15794,9 +15834,9 @@
|
||||
"translated": "執行個體"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.11fe8b9941954dfb",
|
||||
"source": "Threads",
|
||||
"translated": "討論串"
|
||||
"id": "native.apple.e3e3ce1a79ebbd70",
|
||||
"source": "Sessions",
|
||||
"translated": "工作階段"
|
||||
},
|
||||
{
|
||||
"id": "native.apple.253cb2debeb51859",
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"محادثة OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"السماح بالوصول إلى مكتبة الصور."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"حلّ رد سابق هذه الموافقة بالفعل."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"لا توجد محادثات أخيرة"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"لا توجد سلاسل محادثات حديثة"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"لا توجد نتائج مطابقة"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"قراءة إشعارات التطبيقات المحددة"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"التوفر غير معروف"</string>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"OpenClaw-Thread"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Zugriff auf die Fotomediathek erlauben."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Eine frühere Antwort hat diese Genehmigung bereits bearbeitet."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Keine kürzlich verwendeten Threads"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Keine aktuellen Threads"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Keine Übereinstimmungen"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Benachrichtigungen ausgewählter Apps lesen"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Verfügbarkeit unbekannt"</string>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"گفتگوی OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"اجازه دسترسی به کتابخانه عکس را بدهید."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"پاسخ قبلی این تأیید را حل کرده است."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"هیچ رشته اخیری وجود ندارد"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"رشته اخیری وجود ندارد"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"موردی یافت نشد"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"خواندن اعلانهای برنامههای انتخابشده"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"وضعیت دسترسی نامشخص است"</string>
|
||||
@@ -371,7 +371,7 @@
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"متصل (گره آفلاین است)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"خانه"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"دیکته در حال شنیدن است"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"هیچ رشته بایگانیشدهای وجود ندارد"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"رشته بایگانیشدهای وجود ندارد"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"دستیارهای موجود در این Gateway را انتخاب و بررسی کنید."</string>
|
||||
<string name="native_3be0085a6bd88cdd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"حالت گفتوگو فعال است"</string>
|
||||
<string name="native_3bee4ede6bf4436c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"در حال کار · ۱ اجرای فعال"</string>
|
||||
@@ -1149,7 +1149,7 @@
|
||||
<string name="native_c2c631adbec7a8e3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"اگر Gateway در دسترس باشد، اتصال مجدد باید بدون مداخله تکمیل شود."</string>
|
||||
<string name="native_c2d60919f955cd83" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"نوبت عامل"</string>
|
||||
<string name="native_c2d66755e6d0b42f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"قرنطینه"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"توجه"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"نیازمند توجه"</string>
|
||||
<string name="native_c31723ab330289fe" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"در حال جستجو…"</string>
|
||||
<string name="native_c34dd5eb8b0af56e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"کد راهاندازی را از کجا دریافت کنم؟"</string>
|
||||
<string name="native_c3546b39ecbbed8a" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"فعالکردن مهارت ممکن نبود."</string>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Fil OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Autoriser l’accès à la photothèque."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Une réponse précédente a déjà résolu cette approbation."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Aucun fil récent"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Aucun fil de discussion récent"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Aucun résultat"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Lire les notifications des applications sélectionnées"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Disponibilité inconnue"</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"अपने Gateway से कनेक्ट करें"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"openclaw qr से सेटअप कोड दर्ज करें।"</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"डायग्नोस्टिक्स"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"यह थ्रेड और इसकी ट्रांसक्रिप्ट को स्थायी रूप से हटा देता है।"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"यह थ्रेड और इसकी प्रतिलिपि को स्थायी रूप से हटा देता है।"</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"डिवाइस स्वीकृत किया गया।"</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"अपने-आप फिर से प्रयास किया जा रहा है"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"विजेट इमेज कॉपी की गई"</string>
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<string name="native_0c79a9c222840ed0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Applicato"</string>
|
||||
<string name="native_0cab1c9617404faf" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"video"</string>
|
||||
<string name="native_0cf04463c4276a62" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Promosso"</string>
|
||||
<string name="native_0d21bd52022ca7f7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Online"</string>
|
||||
<string name="native_0d21bd52022ca7f7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Connesso"</string>
|
||||
<string name="native_0d5644ff52ce2ba3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Ambiti"</string>
|
||||
<string name="native_0d5efd432e4fedf5" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Il provider vocale in tempo reale non è configurato."</string>
|
||||
<string name="native_0d8ca811c3744a6d" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"%1$s · %2$s"</string>
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Conversazione OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Consenti l\'accesso alla libreria foto."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Una risposta precedente ha già risolto questa approvazione."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Nessuna conversazione recente"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Nessun thread recente"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Nessuna corrispondenza"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Leggi le notifiche delle app selezionate"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Disponibilità sconosciuta"</string>
|
||||
@@ -371,7 +371,7 @@
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Connesso (nodo offline)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Home"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"La dettatura è in ascolto"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Nessuna conversazione archiviata"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Nessun thread archiviato"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Scegli e ispeziona gli assistenti disponibili su questo Gateway."</string>
|
||||
<string name="native_3be0085a6bd88cdd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Modalità conversazione attiva"</string>
|
||||
<string name="native_3bee4ede6bf4436c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"In esecuzione · 1 esecuzione attiva"</string>
|
||||
@@ -971,7 +971,7 @@
|
||||
<string name="native_a10a36fa109818be" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Cerca app"</string>
|
||||
<string name="native_a12db0cfcad2e5f0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"1 modello configurato"</string>
|
||||
<string name="native_a135dd52de0ce45a" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Ignora avviso di approvazione"</string>
|
||||
<string name="native_a1794783aab72d20" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Offline"</string>
|
||||
<string name="native_a1794783aab72d20" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Non in linea"</string>
|
||||
<string name="native_a181b2c15994a7fc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Provider vocale"</string>
|
||||
<string name="native_a190013f72efad35" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"L\'approvazione del Gateway è in corso. OpenClaw riproverà automaticamente."</string>
|
||||
<string name="native_a1a5936d3b0f8a69" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Massimo"</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Gateway에 연결"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"openclaw qr의 설정 코드를 입력하세요."</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"진단"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"스레드와 대화 기록이 영구적으로 삭제됩니다."</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"이 작업은 스레드와 해당 대화 내용을 영구적으로 삭제합니다."</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"기기가 승인되었습니다."</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"자동으로 다시 시도 중"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"위젯 이미지가 복사되었습니다"</string>
|
||||
|
||||
@@ -371,7 +371,7 @@
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Verbonden (node offline)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Start"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Dicteren luistert"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Geen gearchiveerde threads"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Geen gearchiveerde gesprekken"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Kies en inspecteer de assistenten die beschikbaar zijn op deze Gateway."</string>
|
||||
<string name="native_3be0085a6bd88cdd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Praatmodus actief"</string>
|
||||
<string name="native_3bee4ede6bf4436c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Bezig · 1 actieve uitvoering"</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Подключитесь к вашему Gateway"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Введите код настройки из openclaw qr."</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Диагностика"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Это действие безвозвратно удалит ветку и её расшифровку."</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Это навсегда удалит ветку и её историю."</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Устройство одобрено."</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Автоматическая повторная попытка"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Изображение виджета скопировано"</string>
|
||||
@@ -1149,7 +1149,7 @@
|
||||
<string name="native_c2c631adbec7a8e3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Если Gateway доступен, повторное подключение завершится без вмешательства."</string>
|
||||
<string name="native_c2d60919f955cd83" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Ход агента"</string>
|
||||
<string name="native_c2d66755e6d0b42f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"поместить в карантин"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Внимание"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Требует внимания"</string>
|
||||
<string name="native_c31723ab330289fe" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Поиск…"</string>
|
||||
<string name="native_c34dd5eb8b0af56e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Где получить код настройки?"</string>
|
||||
<string name="native_c3546b39ecbbed8a" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Не удалось включить навык."</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Anslut till din Gateway"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Ange konfigurationskoden från openclaw qr."</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Diagnostik"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Detta raderar tråden och dess transkription permanent."</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Detta tar permanent bort tråden och dess transkription."</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Enheten har godkänts."</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Försöker igen automatiskt"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Widgetbilden har kopierats"</string>
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
<string name="native_3a386d2bb69adffc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"OC"</string>
|
||||
<string name="native_3a5ecca188c0579c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"อัปเดตแล้ว"</string>
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"เชื่อมต่อแล้ว (โหนดออฟไลน์)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"หน้าแรก"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"หน้าหลัก"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"การป้อนตามคำบอกกำลังฟังอยู่"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"ไม่มีเธรดที่เก็บถาวร"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"เลือกและตรวจสอบผู้ช่วยที่พร้อมใช้งานบน gateway นี้"</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Gateway\'nize bağlanın"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"openclaw qr tarafından oluşturulan kurulum kodunu girin."</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Tanılama"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Bu işlem, iş parçacığını ve dökümünü kalıcı olarak siler."</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Bu işlem, konu dizisini ve dökümünü kalıcı olarak siler."</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Cihaz onaylandı."</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Otomatik olarak yeniden deneniyor"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Widget görseli kopyalandı"</string>
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"OpenClaw konusu"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Fotoğraf arşivine erişime izin verin."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Önceki bir yanıt bu onayı zaten çözdü."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Son iş parçacığı yok"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Son iletişim dizisi yok"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Eşleşme yok"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Seçilen uygulamaların bildirimlerini oku"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Kullanılabilirlik bilinmiyor"</string>
|
||||
@@ -383,7 +383,7 @@
|
||||
<string name="native_3da4811eafea080a" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"%1$s://%2$s:%3$s"</string>
|
||||
<string name="native_3de3d401128d4395" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Onay ayrıntıları yüklenemedi. Yenileyip tekrar deneyin."</string>
|
||||
<string name="native_3e398e6fb979557a" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Tool Call"</string>
|
||||
<string name="native_3e42e385075b9b56" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Diziler"</string>
|
||||
<string name="native_3e42e385075b9b56" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Mesaj dizileri"</string>
|
||||
<string name="native_3f00927a719345ed" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Write"</string>
|
||||
<string name="native_3f25ccebfa99dcf3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Bir istemle başlayın veya sesinizi kullanın."</string>
|
||||
<string name="native_3f39d5c348e5b79d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"D"</string>
|
||||
@@ -636,7 +636,7 @@
|
||||
<string name="native_684889f0079cc145" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"SHA-256 parmak izi"</string>
|
||||
<string name="native_68944e10a8b4b9be" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Henüz konu dizisi yok"</string>
|
||||
<string name="native_68a0cdfcc76d6ebd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Bluetooth mikrofonu"</string>
|
||||
<string name="native_690dbe9dc0993c42" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Son"</string>
|
||||
<string name="native_690dbe9dc0993c42" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Son Kullanılanlar"</string>
|
||||
<string name="native_6930c8d1fc4f01d9" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Konuyu yeniden adlandır"</string>
|
||||
<string name="native_69384c1c4d99f6eb" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Çözüm sonucu bilinmiyor. Gateway kaydı doğrulanana kadar eylemler devre dışı kalır."</string>
|
||||
<string name="native_6940189433657105" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"dialog"</string>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Гілка OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Дозвольте доступ до фототеки."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Попередня відповідь уже вирішила це схвалення."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Немає недавніх гілок"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Немає нещодавніх гілок"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Збігів немає"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Читати сповіщення вибраних застосунків"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Доступність невідома"</string>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Luồng OpenClaw"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Cho phép truy cập thư viện ảnh."</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Một phản hồi trước đó đã xử lý phê duyệt này."</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không có luồng nào gần đây"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không có luồng gần đây"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không có kết quả phù hợp"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Đọc thông báo từ các ứng dụng đã chọn"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không rõ trạng thái khả dụng"</string>
|
||||
@@ -371,7 +371,7 @@
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Đã kết nối (nút đang ngoại tuyến)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Trang chủ"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Tính năng đọc chính tả đang lắng nghe"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không có luồng nào đã lưu trữ"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Không có luồng nào được lưu trữ"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Chọn và kiểm tra các trợ lý có sẵn trên gateway này."</string>
|
||||
<string name="native_3be0085a6bd88cdd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Chế độ nói đang hoạt động"</string>
|
||||
<string name="native_3bee4ede6bf4436c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"Đang hoạt động · 1 lượt chạy đang hoạt động"</string>
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<string name="native_262c897a1f408b0b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"连接到你的 Gateway"</string>
|
||||
<string name="native_2682bd813a3bccbc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"输入 openclaw qr 中的设置代码。"</string>
|
||||
<string name="native_268f14bbfe119c1e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"诊断"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"这将永久删除该对话及其对话记录。"</string>
|
||||
<string name="native_26d00d15c465cd73" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"这将永久删除该对话线程及其记录。"</string>
|
||||
<string name="native_26e47d73a55d7fa7" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"设备已批准。"</string>
|
||||
<string name="native_26f0dd993530eb2d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"正在自动重试"</string>
|
||||
<string name="native_270ff82f36da987f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"已复制小组件图片"</string>
|
||||
@@ -283,7 +283,7 @@
|
||||
<string name="native_2cd62f7a670b2819" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"OpenClaw 会话"</string>
|
||||
<string name="native_2d4dfe885f84629e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"允许访问照片图库。"</string>
|
||||
<string name="native_2d6416405eb44982" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"先前的响应已处理此批准。"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"没有最近的对话"</string>
|
||||
<string name="native_2d85de9d56c226e4" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"没有最近的会话"</string>
|
||||
<string name="native_2df01a03ff43400b" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"无匹配项"</string>
|
||||
<string name="native_2df30b117ad829ab" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"读取所选应用的通知"</string>
|
||||
<string name="native_2e0078a8322d6f1f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"可用性未知"</string>
|
||||
@@ -369,9 +369,9 @@
|
||||
<string name="native_3a386d2bb69adffc" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"OC"</string>
|
||||
<string name="native_3a5ecca188c0579c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"更新时间"</string>
|
||||
<string name="native_3a65cf1204f18864" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"已连接(节点离线)"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"首页"</string>
|
||||
<string name="native_3a78695388b38b5c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"主页"</string>
|
||||
<string name="native_3b28b535950f8175" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"正在听写"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"没有已归档的对话"</string>
|
||||
<string name="native_3b46b7912670bfb0" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"暂无已归档的对话线程"</string>
|
||||
<string name="native_3b851469ea31d489" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"选择并检查此 gateway 上可用的助手。"</string>
|
||||
<string name="native_3be0085a6bd88cdd" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"通话模式已启用"</string>
|
||||
<string name="native_3bee4ede6bf4436c" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"工作中 · 1 个活跃运行"</string>
|
||||
@@ -1437,7 +1437,7 @@
|
||||
<string name="native_f1c3989a92ef10d1" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"扫描二维码以配对"</string>
|
||||
<string name="native_f2000dce9b5d40c8" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"已拒绝批准。"</string>
|
||||
<string name="native_f200366d0c4352cb" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"无法检查 Skill Workshop 提案。"</string>
|
||||
<string name="native_f20c879465551f0d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"已置顶"</string>
|
||||
<string name="native_f20c879465551f0d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"已固定"</string>
|
||||
<string name="native_f211f2bf832dda14" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"个人资料与设备"</string>
|
||||
<string name="native_f22e1435c8dfffc1" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"关闭思考级别选择器"</string>
|
||||
<string name="native_f2316e644b1d2621" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"无法将消息加入队列以供稍后发送。"</string>
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="native_0303e18246708180" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"未連線"</string>
|
||||
<string name="native_030cab223a806ad6" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"檢查及管理已安裝技能的狀態。"</string>
|
||||
<string name="native_031a8f0f659df890" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"失敗"</string>
|
||||
<string name="native_0349070711a2323d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"預設代理程式"</string>
|
||||
<string name="native_0349070711a2323d" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"預設 Agent"</string>
|
||||
<string name="native_03494b0d1f803522" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"相機"</string>
|
||||
<string name="native_035edd9bd720fa18" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"從群組中移除"</string>
|
||||
<string name="native_03bd6fca9cf5c1fb" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"正在搜尋"</string>
|
||||
@@ -853,7 +853,7 @@
|
||||
<string name="native_8d0839802b4d6aca" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"重新整理記錄"</string>
|
||||
<string name="native_8d20273207a2fe99" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"openclaw nodes approve %1$s"</string>
|
||||
<string name="native_8d57374bc09c8756" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"語音訊息 · %1$s"</string>
|
||||
<string name="native_8d59829c1e15afe1" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"使用量"</string>
|
||||
<string name="native_8d59829c1e15afe1" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"用量"</string>
|
||||
<string name="native_8d99e5d18d734856" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"上下文 %1$s%%"</string>
|
||||
<string name="native_8da844efc33c91b3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"轉錄語音提示"</string>
|
||||
<string name="native_8dd6857baf026850" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"靜音"</string>
|
||||
@@ -1149,7 +1149,7 @@
|
||||
<string name="native_c2c631adbec7a8e3" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"如果可以連線至 Gateway,應會自動完成重新連線,無需介入。"</string>
|
||||
<string name="native_c2d60919f955cd83" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"代理執行回合"</string>
|
||||
<string name="native_c2d66755e6d0b42f" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"隔離"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"注意"</string>
|
||||
<string name="native_c2eb8cd9d9564314" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"需要注意"</string>
|
||||
<string name="native_c31723ab330289fe" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"搜尋中…"</string>
|
||||
<string name="native_c34dd5eb8b0af56e" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"如何取得設定代碼?"</string>
|
||||
<string name="native_c3546b39ecbbed8a" formatted="false" tools:ignore="Typos,TypographyDashes,TypographyEllipsis">"無法啟用技能。"</string>
|
||||
|
||||
+6
-3
@@ -4,7 +4,8 @@ OpenClaw follows the native iOS 26 design language while keeping an iOS 18 deplo
|
||||
|
||||
## Principles
|
||||
|
||||
- Prefer `NavigationStack`, `TabView`, `List`, `Form`, toolbars, sheets, and system controls. They adopt the current platform appearance automatically.
|
||||
- Prefer `NavigationStack`, `List`, `Form`, toolbars, sheets, and system controls. They adopt the current platform appearance automatically.
|
||||
- Root navigation uses one black sidebar on every idiom: persistent in wide landscape and a push-reveal layer behind the content on phones, portrait, and narrow layouts.
|
||||
- Reserve Liquid Glass for navigation and interactive controls. Do not apply glass to every card, row, or status surface.
|
||||
- Keep content hierarchy clear with typography, spacing, and grouping before adding backgrounds.
|
||||
- Use semantic colors. Red means destructive or stopped; orange means attention; green means healthy. Neutral actions use the app accent.
|
||||
@@ -20,6 +21,7 @@ Apple references: [Adopting Liquid Glass](https://developer.apple.com/documentat
|
||||
- `pagePadding`: standard page gutter
|
||||
- `cardRadius`: content group radius
|
||||
- `controlRadius`: inset control radius
|
||||
- `drawerRadius`: all-corner radius for compact content while the sidebar is revealed
|
||||
- `compactControlSize`: compact circular control size
|
||||
- `bottomScrollInset`: clearance above persistent navigation
|
||||
|
||||
@@ -33,14 +35,15 @@ Feature-local layout enums may define row heights and grid dimensions, but shoul
|
||||
- `OpenClawNoticeBanner`: shared connection and runtime notices
|
||||
- `OpenClawAdaptiveHeaderRow`: responsive destination heading
|
||||
- `OpenClawGlassControlGroup`: performance and morphing boundary for nearby glass controls
|
||||
- `OpenClawSidebarPalette`: fixed black-sidebar colors that remain dark in every app appearance
|
||||
- `OpenClawSidebarRevealButton`, `OpenClawSidebarHeaderLeadingSlot`: shared leading toolbar affordance
|
||||
- `openClawGlassButton(prominent:tint:)`: iOS 26 glass button with an iOS 18 bordered fallback
|
||||
- `openClawTabBarBehavior()`: iOS 26 tab-bar minimization with an earlier-system no-op
|
||||
|
||||
## Liquid Glass rules
|
||||
|
||||
Use `openClawGlassButton` for primary actions, compact header controls, and navigation-adjacent controls. Use the prominent style for one primary action per region. Wrap nearby controls in `OpenClawGlassControlGroup`.
|
||||
|
||||
Do not place Liquid Glass behind reading content, forms, metrics, or every card in a scroll view. Excess glass weakens hierarchy, increases rendering cost, and competes with the system tab bar and navigation chrome.
|
||||
Do not place Liquid Glass behind reading content, forms, metrics, or every card in a scroll view. Excess glass weakens hierarchy, increases rendering cost, and competes with the sidebar and navigation chrome.
|
||||
|
||||
Keep new iOS APIs behind `#available(iOS 26.0, *)`. The fallback must preserve the same label, action, tint meaning, accessibility, and approximate hit target.
|
||||
|
||||
|
||||
+4295
-2119
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@ import SwiftUI
|
||||
|
||||
struct AgentProDreamingDestination: View {
|
||||
@Environment(NodeAppModel.self) private var appModel
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let overview: AgentOverviewSnapshot?
|
||||
let gatewayConnected: Bool
|
||||
let overviewLoading: Bool
|
||||
@@ -62,14 +62,14 @@ struct AgentProDreamingDestination: View {
|
||||
|
||||
@ViewBuilder
|
||||
private var header: some View {
|
||||
if let headerLeadingAction {
|
||||
if let headerSidebarAction {
|
||||
OpenClawAdaptiveHeaderRow(
|
||||
title: "Dreaming",
|
||||
subtitle: .localized(self.dreamingDetail),
|
||||
titleFont: OpenClawType.title3SemiBold,
|
||||
subtitleFont: OpenClawType.subheadMedium)
|
||||
{
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
} accessory: {
|
||||
EmptyView()
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import SwiftUI
|
||||
import UIKit
|
||||
|
||||
struct AgentProNodesDestination: View {
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let overview: AgentOverviewSnapshot?
|
||||
let gatewayConnected: Bool
|
||||
let agentCount: Int
|
||||
@@ -36,14 +36,14 @@ struct AgentProNodesDestination: View {
|
||||
|
||||
@ViewBuilder
|
||||
private var header: some View {
|
||||
if let headerLeadingAction {
|
||||
if let headerSidebarAction {
|
||||
OpenClawAdaptiveHeaderRow(
|
||||
title: "Instances",
|
||||
subtitle: .verbatim(self.instancesDetail),
|
||||
titleFont: OpenClawType.title3SemiBold,
|
||||
subtitleFont: OpenClawType.subheadMedium)
|
||||
{
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
} accessory: {
|
||||
EmptyView()
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ extension AgentProTab {
|
||||
var filesDestination: some View {
|
||||
AgentWorkspaceFilesScreen(
|
||||
agentId: self.activeAgentID,
|
||||
headerLeadingAction: self.directHeaderLeadingAction(for: .files))
|
||||
headerSidebarAction: self.directHeaderSidebarAction(for: .files))
|
||||
}
|
||||
|
||||
var agentsDestination: some View {
|
||||
@@ -50,15 +50,15 @@ extension AgentProTab {
|
||||
}
|
||||
.font(OpenClawType.body)
|
||||
.toolbar {
|
||||
if let headerLeadingAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
}
|
||||
}
|
||||
ToolbarItemGroup(placement: .topBarTrailing) {
|
||||
self.agentFilterMenu
|
||||
self.gatewayToolbarButton
|
||||
}
|
||||
if let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ extension AgentProTab {
|
||||
|
||||
var instancesDestination: some View {
|
||||
AgentProNodesDestination(
|
||||
headerLeadingAction: self.directHeaderLeadingAction(for: .instances),
|
||||
headerSidebarAction: self.directHeaderSidebarAction(for: .instances),
|
||||
overview: self.overview,
|
||||
gatewayConnected: self.gatewayConnected,
|
||||
agentCount: self.appModel.gatewayAgents.count,
|
||||
@@ -166,7 +166,7 @@ extension AgentProTab {
|
||||
|
||||
var dreamingDestination: some View {
|
||||
AgentProDreamingDestination(
|
||||
headerLeadingAction: self.directHeaderLeadingAction(for: .dreaming),
|
||||
headerSidebarAction: self.directHeaderSidebarAction(for: .dreaming),
|
||||
overview: self.overview,
|
||||
gatewayConnected: self.gatewayConnected,
|
||||
overviewLoading: self.overviewLoading,
|
||||
@@ -180,14 +180,14 @@ extension AgentProTab {
|
||||
|
||||
@ViewBuilder
|
||||
func directHeader(for route: AgentRoute, title: String, subtitle: String) -> some View {
|
||||
if let headerLeadingAction = self.directHeaderLeadingAction(for: route) {
|
||||
if let headerSidebarAction = self.directHeaderSidebarAction(for: route) {
|
||||
OpenClawAdaptiveHeaderRow(
|
||||
title: .localized(title),
|
||||
subtitle: .localized(subtitle),
|
||||
titleFont: OpenClawType.title3SemiBold,
|
||||
subtitleFont: OpenClawType.subheadMedium)
|
||||
{
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
} accessory: {
|
||||
EmptyView()
|
||||
}
|
||||
@@ -195,8 +195,8 @@ extension AgentProTab {
|
||||
}
|
||||
}
|
||||
|
||||
func directHeaderLeadingAction(for route: AgentRoute) -> OpenClawSidebarHeaderAction? {
|
||||
self.directRoute == route ? self.headerLeadingAction : nil
|
||||
func directHeaderSidebarAction(for route: AgentRoute) -> OpenClawSidebarHeaderAction? {
|
||||
self.directRoute == route ? self.headerSidebarAction : nil
|
||||
}
|
||||
|
||||
func detailSummaryCard(
|
||||
|
||||
@@ -12,8 +12,8 @@ extension AgentProTab {
|
||||
subtitleFont: OpenClawType.subheadMedium,
|
||||
subtitleLineLimit: 1)
|
||||
{
|
||||
if let headerLeadingAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
if let headerSidebarAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
} accessory: {
|
||||
OpenClawGlassControlGroup {
|
||||
|
||||
@@ -6,7 +6,7 @@ struct AgentProTab: View {
|
||||
@Environment(NodeAppModel.self) var appModel
|
||||
@Environment(\.scenePhase) var scenePhase
|
||||
let directRoute: AgentRoute?
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let headerTitle: String
|
||||
let openSettings: (() -> Void)?
|
||||
@State var overview: AgentOverviewSnapshot?
|
||||
@@ -156,12 +156,12 @@ struct AgentProTab: View {
|
||||
|
||||
init(
|
||||
directRoute: AgentRoute? = nil,
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerTitle: String = "Agents",
|
||||
openSettings: (() -> Void)? = nil)
|
||||
{
|
||||
self.directRoute = directRoute
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.headerTitle = headerTitle
|
||||
self.openSettings = openSettings
|
||||
}
|
||||
@@ -231,7 +231,7 @@ struct AgentProTab: View {
|
||||
private func directDestination(for route: AgentRoute) -> some View {
|
||||
self.destination(for: route)
|
||||
.toolbar(
|
||||
route != .agents && self.directHeaderLeadingAction(for: route) != nil ? .hidden : .visible,
|
||||
route != .agents && self.directHeaderSidebarAction(for: route) != nil ? .hidden : .visible,
|
||||
for: .navigationBar)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,20 +7,20 @@ import SwiftUI
|
||||
/// `agents.workspace.list` / `agents.workspace.get` gateway RPCs.
|
||||
struct AgentWorkspaceFilesScreen: View {
|
||||
let agentId: String
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
OpenClawProBackground()
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
if let headerLeadingAction {
|
||||
if let headerSidebarAction {
|
||||
OpenClawAdaptiveHeaderRow(
|
||||
title: "Files",
|
||||
subtitle: .verbatim(self.agentId),
|
||||
titleFont: OpenClawType.title3SemiBold,
|
||||
subtitleFont: OpenClawType.subheadMedium)
|
||||
{
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
} accessory: {
|
||||
EmptyView()
|
||||
}
|
||||
|
||||
@@ -47,20 +47,20 @@ struct ChatProTab: View {
|
||||
@State private var viewModelHasVerifiedOfflineRoutingIdentity = false
|
||||
@State private var speech: OpenClawChatSpeechController?
|
||||
@State private var isGatewayStatusManuallyExpanded = false
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let headerTitle: String?
|
||||
let showsAgentBadge: Bool
|
||||
let ownsNavigationStack: Bool
|
||||
let openSettings: (() -> Void)?
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerTitle: String? = nil,
|
||||
showsAgentBadge: Bool = true,
|
||||
ownsNavigationStack: Bool = true,
|
||||
openSettings: (() -> Void)? = nil)
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.headerTitle = headerTitle
|
||||
self.showsAgentBadge = showsAgentBadge
|
||||
self.ownsNavigationStack = ownsNavigationStack
|
||||
@@ -82,6 +82,7 @@ struct ChatProTab: View {
|
||||
.task {
|
||||
await self.appModel.restoreChatSessionRoutingIdentityIfNeeded()
|
||||
self.syncChatViewModel()
|
||||
await self.handleNewChatRequest(self.appModel.newChatRequestID)
|
||||
if self.speech == nil {
|
||||
let gateway = self.appModel.operatorSession
|
||||
self.speech = OpenClawChatSpeechController { text in
|
||||
@@ -125,6 +126,9 @@ struct ChatProTab: View {
|
||||
self.syncChatViewModel()
|
||||
self.viewModel?.refresh()
|
||||
}
|
||||
.onChange(of: self.appModel.newChatRequestID) { _, requestID in
|
||||
Task { await self.handleNewChatRequest(requestID) }
|
||||
}
|
||||
}
|
||||
|
||||
private var content: some View {
|
||||
@@ -133,9 +137,9 @@ struct ChatProTab: View {
|
||||
.navigationTitle(self.showsAgentBadge ? "" : self.headerDisplayTitle)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
if let headerLeadingAction {
|
||||
if let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarRevealButton(action: headerLeadingAction)
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
if self.showsAgentBadge {
|
||||
@@ -229,7 +233,7 @@ struct ChatProTab: View {
|
||||
ContentUnavailableView(
|
||||
"Preparing Chat",
|
||||
systemImage: "bubble.left.and.bubble.right",
|
||||
description: Text("The thread attaches once the gateway is ready.")
|
||||
description: Text("The session attaches once the gateway is ready.")
|
||||
.font(OpenClawType.body))
|
||||
}
|
||||
}
|
||||
@@ -457,6 +461,13 @@ struct ChatProTab: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func handleNewChatRequest(_ requestID: Int) async {
|
||||
guard let viewModel,
|
||||
self.appModel.consumeNewChatRequest(requestID)
|
||||
else { return }
|
||||
_ = await viewModel.startNewSession()
|
||||
}
|
||||
|
||||
private func captureCurrentPresentationIdentity() {
|
||||
self.viewModelPresentationAgentID = self.currentAgentID
|
||||
self.viewModelPresentationAgentName = self.currentAgentDisplayName
|
||||
@@ -611,7 +622,7 @@ struct ChatProTab: View {
|
||||
self.showsSessions = true
|
||||
} label: {
|
||||
Label {
|
||||
Text(String(localized: "Threads…"))
|
||||
Text(String(localized: "Sessions…"))
|
||||
.font(OpenClawType.body)
|
||||
} icon: {
|
||||
Image(systemName: "rectangle.stack")
|
||||
|
||||
@@ -135,6 +135,8 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
let categories: [String]
|
||||
let isArchived: Bool
|
||||
let isEnabled: Bool
|
||||
let canArchive: Bool
|
||||
let canDelete: Bool
|
||||
let actions: CommandSessionActions
|
||||
|
||||
@State private var editor: Editor?
|
||||
@@ -156,7 +158,9 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
self.actionButton("Unarchive", systemImage: "archivebox") {
|
||||
self.actions.toggleArchived()
|
||||
}
|
||||
self.deleteButton
|
||||
if self.canDelete {
|
||||
self.deleteButton
|
||||
}
|
||||
} else {
|
||||
self.actionButton(
|
||||
self.session.pinned == true
|
||||
@@ -181,10 +185,14 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
self.actions.fork()
|
||||
}
|
||||
self.groupMenu
|
||||
self.actionButton("Archive", systemImage: "archivebox") {
|
||||
self.actions.toggleArchived()
|
||||
if self.canArchive {
|
||||
self.actionButton("Archive", systemImage: "archivebox") {
|
||||
self.actions.toggleArchived()
|
||||
}
|
||||
}
|
||||
if self.canDelete {
|
||||
self.deleteButton
|
||||
}
|
||||
self.deleteButton
|
||||
}
|
||||
}
|
||||
.alert(self.editorTitle, isPresented: self.editorBinding) {
|
||||
@@ -206,14 +214,14 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
}
|
||||
}
|
||||
.confirmationDialog(
|
||||
"Delete Thread?",
|
||||
"Delete Session?",
|
||||
isPresented: self.$confirmsDelete,
|
||||
titleVisibility: .visible)
|
||||
{
|
||||
Button(role: .destructive) {
|
||||
self.actions.delete()
|
||||
} label: {
|
||||
Text("Delete Thread")
|
||||
Text("Delete Session")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
Button(role: .cancel) {} label: {
|
||||
@@ -221,7 +229,7 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
} message: {
|
||||
Text("This permanently deletes the thread and its transcript.")
|
||||
Text("This permanently deletes the session and its transcript.")
|
||||
.font(OpenClawType.caption)
|
||||
}
|
||||
}
|
||||
@@ -266,13 +274,13 @@ struct CommandSessionActionsModifier: ViewModifier {
|
||||
private var editorTitle: String {
|
||||
self.editor == .newGroup
|
||||
? String(localized: "New Group")
|
||||
: String(localized: "Rename Thread")
|
||||
: String(localized: "Rename Session")
|
||||
}
|
||||
|
||||
private var editorPlaceholder: String {
|
||||
self.editor == .newGroup
|
||||
? String(localized: "Group name")
|
||||
: String(localized: "Thread name")
|
||||
: String(localized: "Session name")
|
||||
}
|
||||
|
||||
private func actionButton(
|
||||
@@ -328,6 +336,8 @@ extension View {
|
||||
categories: [String],
|
||||
isArchived: Bool = false,
|
||||
isEnabled: Bool = true,
|
||||
canArchive: Bool = true,
|
||||
canDelete: Bool = true,
|
||||
actions: CommandSessionActions) -> some View
|
||||
{
|
||||
self.modifier(CommandSessionActionsModifier(
|
||||
@@ -335,6 +345,8 @@ extension View {
|
||||
categories: categories,
|
||||
isArchived: isArchived,
|
||||
isEnabled: isEnabled,
|
||||
canArchive: canArchive,
|
||||
canDelete: canDelete,
|
||||
actions: actions))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,15 @@ struct CommandCenterTab: View {
|
||||
var ownsNavigationStack: Bool = true
|
||||
var usesNativeNavigationChrome: Bool = false
|
||||
var headerTitle: String = "OpenClaw"
|
||||
var headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
var headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
var dashboardModel: RootSidebarModel?
|
||||
var showsHeaderMark: Bool = true
|
||||
var openChat: () -> Void
|
||||
var openSettings: () -> Void
|
||||
var openSessions: (() -> Void)?
|
||||
var openApprovals: (() -> Void)?
|
||||
var openAutomations: (() -> Void)?
|
||||
var openUsage: (() -> Void)?
|
||||
|
||||
enum WorkRoute {
|
||||
case chat(String?)
|
||||
@@ -49,6 +53,7 @@ struct CommandCenterTab: View {
|
||||
}
|
||||
}
|
||||
.task(id: self.recentSessionsRefreshID) {
|
||||
guard self.dashboardModel == nil else { return }
|
||||
await self.refreshRecentSessionsIfNeeded()
|
||||
}
|
||||
}
|
||||
@@ -64,6 +69,12 @@ struct CommandCenterTab: View {
|
||||
self.header
|
||||
}
|
||||
self.gatewayCard
|
||||
self.threadTiles
|
||||
.padding(.horizontal, OpenClawProMetric.pagePadding)
|
||||
self.attentionCard
|
||||
.padding(.horizontal, OpenClawProMetric.pagePadding)
|
||||
self.usageSummaryCard
|
||||
.padding(.horizontal, OpenClawProMetric.pagePadding)
|
||||
if Self.usesSplitSectionsLayout(
|
||||
horizontalSizeClass: self.horizontalSizeClass,
|
||||
containerWidth: geometry.size.width)
|
||||
@@ -100,9 +111,183 @@ struct CommandCenterTab: View {
|
||||
.accessibilityLabel("Gateway settings")
|
||||
}
|
||||
}
|
||||
if self.usesNativeNavigationChrome, let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var threadTiles: some View {
|
||||
LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 8), count: 4), spacing: 8) {
|
||||
self.threadTile(
|
||||
title: String(localized: "Sessions"),
|
||||
value: self.overviewSessions.count.formatted())
|
||||
self.threadTile(
|
||||
title: String(localized: "Live"),
|
||||
value: self.overviewLiveCount.formatted())
|
||||
self.threadTile(
|
||||
title: String(localized: "Unread"),
|
||||
value: self.overviewUnreadCount.formatted())
|
||||
self.threadTile(
|
||||
title: String(localized: "Tokens"),
|
||||
value: self.overviewTokenText)
|
||||
}
|
||||
}
|
||||
|
||||
private func threadTile(title: String, value: String) -> some View {
|
||||
Button {
|
||||
self.openSessions?()
|
||||
} label: {
|
||||
ProCard(padding: 10) {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(verbatim: value)
|
||||
.font(OpenClawType.headline)
|
||||
.foregroundStyle(OpenClawBrand.accent)
|
||||
.lineLimit(1)
|
||||
.minimumScaleFactor(0.7)
|
||||
Text(verbatim: title)
|
||||
.font(OpenClawType.caption2Medium)
|
||||
.foregroundStyle(.secondary)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityHint(String(localized: "Opens Sessions"))
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var attentionCard: some View {
|
||||
let approvalCount = self.appModel.pendingExecApprovalCount
|
||||
let cronCount = (self.dashboardModel?.failedCronJobCount ?? 0) +
|
||||
(self.dashboardModel?.overdueCronJobCount ?? 0)
|
||||
if approvalCount > 0 || cronCount > 0 {
|
||||
CommandPanel(tint: OpenClawBrand.warn, padding: 12) {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
self.cardHeader(title: String(localized: "Attention"))
|
||||
if approvalCount > 0 {
|
||||
self.dashboardActionRow(
|
||||
title: String(localized: "Pending approvals"),
|
||||
value: approvalCount.formatted(),
|
||||
systemImage: "checkmark.shield",
|
||||
action: self.openApprovals ?? self.openSettings)
|
||||
}
|
||||
if cronCount > 0 {
|
||||
self.dashboardActionRow(
|
||||
title: String(localized: "Automation issues"),
|
||||
value: cronCount.formatted(),
|
||||
systemImage: "clock.badge.exclamationmark",
|
||||
action: self.openAutomations ?? {})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var usageSummaryCard: some View {
|
||||
if let usage = self.dashboardModel?.usage {
|
||||
Button(action: self.openUsage ?? {}) {
|
||||
CommandPanel(padding: 12) {
|
||||
HStack(spacing: 12) {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(String(localized: "31-day usage"))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(.primary)
|
||||
Text(self.usageCostText(usage.totalCost))
|
||||
.font(OpenClawType.title3SemiBold)
|
||||
.foregroundStyle(OpenClawBrand.accent)
|
||||
}
|
||||
Spacer(minLength: 8)
|
||||
self.usageTrend(usage.daily ?? [])
|
||||
}
|
||||
}
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityHint(String(localized: "Opens Usage"))
|
||||
}
|
||||
}
|
||||
|
||||
private func dashboardActionRow(
|
||||
title: String,
|
||||
value: String,
|
||||
systemImage: String,
|
||||
action: @escaping () -> Void) -> some View
|
||||
{
|
||||
Button(action: action) {
|
||||
HStack(spacing: 10) {
|
||||
Image(systemName: systemImage)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(OpenClawBrand.warn)
|
||||
Text(verbatim: title)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
Spacer(minLength: 8)
|
||||
Text(verbatim: value)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(OpenClawBrand.warn)
|
||||
Image(systemName: "chevron.right")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.frame(minHeight: 44)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
private func usageTrend(_ daily: [CostUsageDailyEntryLite]) -> some View {
|
||||
let values = daily.suffix(14).map { max(0, $0.totalCost ?? 0) }
|
||||
let maximum = values.max() ?? 0
|
||||
return HStack(alignment: .bottom, spacing: 2) {
|
||||
ForEach(Array(values.enumerated()), id: \.offset) { _, value in
|
||||
Capsule()
|
||||
.fill(OpenClawBrand.accent.opacity(0.75))
|
||||
.frame(width: 3, height: maximum > 0 ? max(3, 28 * value / maximum) : 3)
|
||||
}
|
||||
}
|
||||
.frame(height: 30, alignment: .bottom)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
|
||||
private func usageCostText(_ value: Double?) -> String {
|
||||
guard let value else { return "—" }
|
||||
return value.formatted(.currency(code: "USD"))
|
||||
}
|
||||
|
||||
private var overviewSessions: [OpenClawChatSessionEntry] {
|
||||
if let dashboardModel {
|
||||
return Self.visibleOverviewSessions(dashboardModel.sessions)
|
||||
}
|
||||
return [self.defaultChatSessionEntry].compactMap(\.self) + self.recentChatSessions
|
||||
}
|
||||
|
||||
static func visibleOverviewSessions(
|
||||
_ sessions: [OpenClawChatSessionEntry]) -> [OpenClawChatSessionEntry]
|
||||
{
|
||||
sessions.filter {
|
||||
$0.archived != true && !ChatSessionSidebarModel.isHiddenInternalSession($0.key)
|
||||
}
|
||||
}
|
||||
|
||||
private var overviewLiveCount: Int {
|
||||
self.overviewSessions.count { session in
|
||||
session.hasActiveRun == true || session.hasActiveSubagentRun == true ||
|
||||
session.status?.lowercased() == "running"
|
||||
}
|
||||
}
|
||||
|
||||
private var overviewUnreadCount: Int {
|
||||
self.overviewSessions.count { $0.unread == true }
|
||||
}
|
||||
|
||||
private var overviewTokenText: String {
|
||||
let summary = RootSidebarModel.tokenUsageSummary(for: self.overviewSessions)
|
||||
guard let total = summary.total else { return "n/a" }
|
||||
return "\(summary.isPartial ? "~" : "")\(total.formatted(.number.notation(.compactName)))"
|
||||
}
|
||||
|
||||
static func usesSplitSectionsLayout(
|
||||
horizontalSizeClass: UserInterfaceSizeClass?,
|
||||
containerWidth: CGFloat) -> Bool
|
||||
@@ -126,23 +311,27 @@ struct CommandCenterTab: View {
|
||||
subtitleFont: OpenClawType.caption,
|
||||
subtitleLineLimit: 1)
|
||||
{
|
||||
if let headerLeadingAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
if let headerSidebarAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
} else if Self.shouldShowHeaderMark(
|
||||
hasLeadingAction: headerLeadingAction != nil,
|
||||
hasLeadingAction: self.headerSidebarAction != nil,
|
||||
showsHeaderMark: self.showsHeaderMark)
|
||||
{
|
||||
OpenClawProMark(size: 28, shadowRadius: 5)
|
||||
}
|
||||
} accessory: {
|
||||
Button(action: self.openSettings) {
|
||||
Image(systemName: "gearshape.fill")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.frame(width: OpenClawProMetric.compactControlSize, height: OpenClawProMetric.compactControlSize)
|
||||
HStack(spacing: 10) {
|
||||
Button(action: self.openSettings) {
|
||||
Image(systemName: "gearshape.fill")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.frame(
|
||||
width: OpenClawProMetric.compactControlSize,
|
||||
height: OpenClawProMetric.compactControlSize)
|
||||
}
|
||||
.openClawGlassButton()
|
||||
.accessibilityLabel("Gateway settings")
|
||||
.accessibilityHint("Opens gateway settings")
|
||||
}
|
||||
.openClawGlassButton()
|
||||
.accessibilityLabel("Gateway settings")
|
||||
.accessibilityHint("Opens gateway settings")
|
||||
}
|
||||
.padding(.horizontal, OpenClawProMetric.pagePadding)
|
||||
}
|
||||
@@ -216,7 +405,7 @@ struct CommandCenterTab: View {
|
||||
private var defaultChatSessionSection: some View {
|
||||
CommandPanel(padding: 12) {
|
||||
VStack(spacing: 10) {
|
||||
self.cardHeader(title: "Agent thread")
|
||||
self.cardHeader(title: "Agent session")
|
||||
|
||||
Button {
|
||||
self.openDefaultChatSession()
|
||||
@@ -231,12 +420,12 @@ struct CommandCenterTab: View {
|
||||
private var recentSessions: some View {
|
||||
CommandPanel(padding: 12) {
|
||||
VStack(spacing: 10) {
|
||||
self.cardHeader(title: "Recent threads")
|
||||
self.cardHeader(title: "Recent sessions")
|
||||
|
||||
if self.recentSessionPreviewSessions.isEmpty {
|
||||
CommandEmptyStateRow(
|
||||
icon: self.gatewayConnected ? "bubble.left.and.text.bubble.right.fill" : "wifi.slash",
|
||||
title: self.gatewayConnected ? "No recent threads" : "Gateway offline",
|
||||
title: self.gatewayConnected ? "No recent sessions" : "Gateway offline",
|
||||
detail: self
|
||||
.gatewayConnected ? "Start a chat and it will appear here." : "Connect to the gateway.")
|
||||
} else {
|
||||
@@ -354,12 +543,13 @@ struct CommandCenterTab: View {
|
||||
color: isOpen ? OpenClawBrand.accent : OpenClawBrand.ok,
|
||||
progress: nil,
|
||||
route: .chat(nil),
|
||||
isUnread: self.defaultChatSessionEntry?.unread == true,
|
||||
isPinned: self.defaultChatSessionEntry?.pinned == true)
|
||||
isUnread: self.effectiveDefaultChatSessionEntry?.unread == true,
|
||||
isPinned: self.effectiveDefaultChatSessionEntry?.pinned == true)
|
||||
}
|
||||
|
||||
private var defaultChatActivityText: String {
|
||||
let activityAt = self.defaultChatSessionEntry?.lastActivityAt ?? self.defaultChatSessionEntry?.updatedAt
|
||||
let activityAt = self.effectiveDefaultChatSessionEntry?.lastActivityAt ??
|
||||
self.effectiveDefaultChatSessionEntry?.updatedAt
|
||||
guard let activityAt, activityAt > 0 else {
|
||||
return String(localized: "No recent activity")
|
||||
}
|
||||
@@ -368,20 +558,37 @@ struct CommandCenterTab: View {
|
||||
|
||||
private var recentSessionPreviewSessions: [OpenClawChatSessionEntry] {
|
||||
CommandSessionGrouping.previewSelection(
|
||||
self.recentChatSessions,
|
||||
self.effectiveRecentChatSessions,
|
||||
currentKey: self.appModel.chatSessionKey)
|
||||
}
|
||||
|
||||
private var hasMoreRecentSessions: Bool {
|
||||
self.recentChatSessions.count > self.recentSessionPreviewSessions.count
|
||||
self.effectiveRecentChatSessions.count > self.recentSessionPreviewSessions.count
|
||||
}
|
||||
|
||||
private var sessionCategories: [String] {
|
||||
CommandSessionGrouping.categories(
|
||||
from: self.recentChatSessions,
|
||||
from: self.effectiveRecentChatSessions,
|
||||
knownGroups: SessionGroupStore.load())
|
||||
}
|
||||
|
||||
private var effectiveDefaultChatSessionEntry: OpenClawChatSessionEntry? {
|
||||
guard let sessions = self.dashboardModel?.sessions else { return self.defaultChatSessionEntry }
|
||||
let mainKey = ChatSessionSidebarModel.selectedSessionKey(
|
||||
sessions: sessions,
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: self.appModel.defaultChatSessionKey,
|
||||
activeAgentID: self.appModel.chatAgentId)
|
||||
return sessions.first { $0.key == mainKey } ?? self.defaultChatSessionEntry
|
||||
}
|
||||
|
||||
private var effectiveRecentChatSessions: [OpenClawChatSessionEntry] {
|
||||
guard let dashboardModel else { return self.recentChatSessions }
|
||||
return Self.sessionChoices(
|
||||
dashboardModel.sessions,
|
||||
defaultSessionKey: self.appModel.defaultChatSessionKey)
|
||||
}
|
||||
|
||||
private var sessionControlsAvailable: Bool {
|
||||
!self.appModel.isLocalChatFixtureEnabled && self.appModel.isOperatorGatewayConnected
|
||||
}
|
||||
@@ -394,10 +601,6 @@ struct CommandCenterTab: View {
|
||||
].joined(separator: ":")
|
||||
}
|
||||
|
||||
private var sessionListAvailable: Bool {
|
||||
self.appModel.isLocalChatFixtureEnabled || self.appModel.isOperatorGatewayConnected
|
||||
}
|
||||
|
||||
private var sessionListMode: String {
|
||||
self.appModel.chatViewModelIdentityID
|
||||
}
|
||||
@@ -417,7 +620,7 @@ struct CommandCenterTab: View {
|
||||
}
|
||||
|
||||
private func openDefaultChatSession() {
|
||||
self.open(.chat(nil), unread: self.defaultChatSessionEntry?.unread == true)
|
||||
self.open(.chat(nil), unread: self.effectiveDefaultChatSessionEntry?.unread == true)
|
||||
}
|
||||
|
||||
private func patchSession(
|
||||
@@ -461,7 +664,11 @@ struct CommandCenterTab: View {
|
||||
Task {
|
||||
do {
|
||||
let key = try await self.appModel.makeChatTransport().forkSession(parentKey: session.key)
|
||||
await self.refreshRecentSessionsIfNeeded()
|
||||
if let dashboardModel {
|
||||
await dashboardModel.refreshSessions(appModel: self.appModel)
|
||||
} else {
|
||||
await self.refreshRecentSessionsIfNeeded()
|
||||
}
|
||||
self.open(.chat(key))
|
||||
} catch {}
|
||||
}
|
||||
@@ -477,24 +684,20 @@ struct CommandCenterTab: View {
|
||||
if resetActiveSessionKey == self.appModel.chatSessionKey {
|
||||
self.appModel.focusChatSession(nil)
|
||||
}
|
||||
await self.refreshRecentSessionsIfNeeded()
|
||||
if let dashboardModel {
|
||||
await dashboardModel.refreshSessions(appModel: self.appModel)
|
||||
} else {
|
||||
await self.refreshRecentSessionsIfNeeded()
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
private func refreshRecentSessionsIfNeeded() async {
|
||||
guard self.scenePhase == .active else { return }
|
||||
guard self.sessionListAvailable else {
|
||||
await self.applyCachedSessions()
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
let transport = self.appModel.makeChatTransport()
|
||||
let response = try await transport.listSessions(limit: Self.recentSessionsFetchLimit)
|
||||
self.applySessions(response.sessions)
|
||||
self.appModel.reconcileChatSessionReadState(response.sessions)
|
||||
await self.appModel.storeCachedChatSessions(response.sessions)
|
||||
let roster = try await self.appModel.loadChatSessionRoster(limit: Self.recentSessionsFetchLimit)
|
||||
self.applySessions(roster.sessions)
|
||||
} catch {
|
||||
await self.applyCachedSessions()
|
||||
}
|
||||
@@ -542,7 +745,7 @@ struct CommandCenterTab: View {
|
||||
isPinned: session.pinned == true)
|
||||
}
|
||||
|
||||
fileprivate static func sessionTitle(_ session: OpenClawChatSessionEntry) -> String {
|
||||
static func sessionTitle(_ session: OpenClawChatSessionEntry) -> String {
|
||||
let label = session.label?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if let label, !label.isEmpty {
|
||||
return label
|
||||
@@ -601,7 +804,7 @@ struct CommandCenterTab: View {
|
||||
.joined(separator: " ")
|
||||
}
|
||||
|
||||
fileprivate static func sessionDetail(_ session: OpenClawChatSessionEntry) -> String {
|
||||
static func sessionDetail(_ session: OpenClawChatSessionEntry) -> String {
|
||||
let activityAt = session.lastActivityAt ?? session.updatedAt
|
||||
if let activityAt, activityAt > 0 {
|
||||
return self.relativeTimeText(forMilliseconds: activityAt)
|
||||
@@ -609,12 +812,18 @@ struct CommandCenterTab: View {
|
||||
return session.key
|
||||
}
|
||||
|
||||
fileprivate static func relativeTimeText(forMilliseconds milliseconds: Double) -> String {
|
||||
static func relativeTimeText(
|
||||
forMilliseconds milliseconds: Double,
|
||||
relativeTo now: Date = .now) -> String
|
||||
{
|
||||
let date = Date(timeIntervalSince1970: milliseconds / 1000)
|
||||
guard now.timeIntervalSince(date) >= 60 else {
|
||||
return String(localized: "just now")
|
||||
}
|
||||
let formatter = RelativeDateTimeFormatter()
|
||||
formatter.dateTimeStyle = .numeric
|
||||
formatter.unitsStyle = .short
|
||||
return formatter.localizedString(for: date, relativeTo: .now)
|
||||
return formatter.localizedString(for: date, relativeTo: now)
|
||||
}
|
||||
|
||||
fileprivate nonisolated static func isHiddenInternalSession(_ key: String) -> Bool {
|
||||
@@ -710,16 +919,16 @@ struct CommandSessionsScreen: View {
|
||||
@State private var groupEditor: GroupEditor?
|
||||
@State private var groupDraftText = ""
|
||||
@State private var groupPendingDelete: String?
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let openChat: () -> Void
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
openChat: @escaping () -> Void)
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.openChat = openChat
|
||||
}
|
||||
@@ -739,7 +948,7 @@ struct CommandSessionsScreen: View {
|
||||
}
|
||||
.safeAreaPadding(.bottom, OpenClawProMetric.bottomScrollInset)
|
||||
}
|
||||
.navigationTitle("Threads")
|
||||
.navigationTitle("Sessions")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar(self.usesNativeNavigationChrome ? .visible : .hidden, for: .navigationBar)
|
||||
.task(id: self.refreshID) {
|
||||
@@ -781,25 +990,24 @@ struct CommandSessionsScreen: View {
|
||||
} message: { group in
|
||||
Text(verbatim: String(
|
||||
format: String(
|
||||
localized: "Threads in \u{201C}%@\u{201D} move back to Ungrouped."),
|
||||
localized: "Sessions in \u{201C}%@\u{201D} move back to Ungrouped."),
|
||||
group))
|
||||
.font(OpenClawType.caption)
|
||||
}
|
||||
}
|
||||
|
||||
private var header: some View {
|
||||
HStack(alignment: .top, spacing: 12) {
|
||||
if let headerLeadingAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text("Threads")
|
||||
.font(OpenClawType.title2)
|
||||
Text(self.headerDetail)
|
||||
.font(OpenClawType.captionMedium)
|
||||
.foregroundStyle(.secondary)
|
||||
OpenClawAdaptiveHeaderRow(
|
||||
title: "Sessions",
|
||||
subtitle: .verbatim(self.headerDetail),
|
||||
titleFont: OpenClawType.title2,
|
||||
subtitleFont: OpenClawType.captionMedium)
|
||||
{
|
||||
if let headerSidebarAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
} accessory: {
|
||||
EmptyView()
|
||||
}
|
||||
.padding(.horizontal, OpenClawProMetric.pagePadding)
|
||||
}
|
||||
@@ -809,8 +1017,8 @@ struct CommandSessionsScreen: View {
|
||||
VStack(spacing: 0) {
|
||||
HStack(spacing: 8) {
|
||||
Text(self.showArchived
|
||||
? LocalizedStringKey("Archived threads")
|
||||
: LocalizedStringKey("Recent threads"))
|
||||
? LocalizedStringKey("Archived sessions")
|
||||
: LocalizedStringKey("Recent sessions"))
|
||||
.font(OpenClawType.subheadBold)
|
||||
Spacer(minLength: 8)
|
||||
if self.isLoading {
|
||||
@@ -833,7 +1041,7 @@ struct CommandSessionsScreen: View {
|
||||
if let loadErrorText {
|
||||
CommandEmptyStateRow(
|
||||
icon: "exclamationmark.triangle.fill",
|
||||
title: "Threads unavailable",
|
||||
title: "Sessions unavailable",
|
||||
detail: .verbatim(loadErrorText))
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.bottom, 10)
|
||||
@@ -872,15 +1080,15 @@ struct CommandSessionsScreen: View {
|
||||
private var headerDetail: String {
|
||||
if self.isLoading, self.sessions.isEmpty {
|
||||
return self.showArchived
|
||||
? String(localized: "Loading archived threads")
|
||||
: String(localized: "Loading recent threads")
|
||||
? String(localized: "Loading archived sessions")
|
||||
: String(localized: "Loading recent sessions")
|
||||
}
|
||||
let count = self.visibleSessions.count
|
||||
if count == 0 {
|
||||
return self.emptyTitle
|
||||
}
|
||||
return String(
|
||||
AttributedString(localized: "^[\(count) thread](inflect: true)").characters)
|
||||
AttributedString(localized: "^[\(count) session](inflect: true)").characters)
|
||||
}
|
||||
|
||||
private var visibleSessions: [OpenClawChatSessionEntry] {
|
||||
@@ -910,13 +1118,13 @@ struct CommandSessionsScreen: View {
|
||||
return String(localized: "Gateway offline")
|
||||
}
|
||||
return self.showArchived
|
||||
? String(localized: "No archived threads")
|
||||
: String(localized: "No recent threads")
|
||||
? String(localized: "No archived sessions")
|
||||
: String(localized: "No recent sessions")
|
||||
}
|
||||
|
||||
private var emptyDetail: String {
|
||||
self.showArchived
|
||||
? String(localized: "Archived threads will appear here.")
|
||||
? String(localized: "Archived sessions will appear here.")
|
||||
: String(localized: "Start a chat and it will appear here.")
|
||||
}
|
||||
|
||||
@@ -1158,27 +1366,16 @@ struct CommandSessionsScreen: View {
|
||||
// New Group editor) alongside the fresh session list.
|
||||
self.knownGroups = SessionGroupStore.load()
|
||||
let requestsArchived = self.showArchived
|
||||
guard self.appModel.isCommandSessionListAvailable else {
|
||||
self.sessions = requestsArchived ? [] : await self.appModel.loadCachedChatSessions()
|
||||
self.loadErrorText = nil
|
||||
return
|
||||
}
|
||||
|
||||
self.isLoading = true
|
||||
self.loadErrorText = nil
|
||||
defer { self.isLoading = false }
|
||||
|
||||
do {
|
||||
let transport = self.appModel.makeChatTransport()
|
||||
let response = try await transport.listSessions(
|
||||
let roster = try await self.appModel.loadChatSessionRoster(
|
||||
limit: CommandCenterTab.recentSessionsFetchLimit,
|
||||
archived: requestsArchived)
|
||||
guard requestsArchived == self.showArchived else { return }
|
||||
self.sessions = response.sessions
|
||||
if !requestsArchived {
|
||||
self.appModel.reconcileChatSessionReadState(response.sessions)
|
||||
await self.appModel.storeCachedChatSessions(response.sessions)
|
||||
}
|
||||
self.sessions = roster.sessions
|
||||
} catch {
|
||||
guard requestsArchived == self.showArchived else { return }
|
||||
self.sessions = requestsArchived ? [] : await self.appModel.loadCachedChatSessions()
|
||||
|
||||
@@ -8,18 +8,18 @@ struct IPadActivityScreen: View {
|
||||
@State private var sessions: [OpenClawChatSessionEntry] = []
|
||||
@State private var isLoading = false
|
||||
@State private var loadErrorText: String?
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let openChat: () -> Void
|
||||
let openSettings: () -> Void
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
openChat: @escaping () -> Void,
|
||||
openSettings: @escaping () -> Void)
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.openChat = openChat
|
||||
self.openSettings = openSettings
|
||||
@@ -29,7 +29,7 @@ struct IPadActivityScreen: View {
|
||||
IPadSidebarScreenChrome(
|
||||
title: "Activity",
|
||||
subtitle: "Live device and gateway activity.",
|
||||
headerLeadingAction: self.headerLeadingAction,
|
||||
headerSidebarAction: self.headerSidebarAction,
|
||||
usesNativeNavigationChrome: self.usesNativeNavigationChrome,
|
||||
gatewayAction: self.openSettings)
|
||||
{
|
||||
@@ -58,7 +58,7 @@ struct IPadActivityScreen: View {
|
||||
color: OpenClawBrand.accentForeground),
|
||||
ProMetric(
|
||||
icon: "bubble.left.and.text.bubble.right",
|
||||
title: "Threads",
|
||||
title: "Sessions",
|
||||
value: self.isLoading ? "..." : "\(self.sessionRows.count)",
|
||||
color: OpenClawBrand.accentHotForeground),
|
||||
]
|
||||
@@ -112,7 +112,7 @@ struct IPadActivityScreen: View {
|
||||
Divider().padding(.leading, 58)
|
||||
ProStatusRow(
|
||||
icon: "hourglass",
|
||||
title: "Loading threads",
|
||||
title: "Loading sessions",
|
||||
detail: "Fetching recent activity from the gateway.",
|
||||
value: "loading",
|
||||
color: OpenClawBrand.accentForeground,
|
||||
@@ -122,7 +122,7 @@ struct IPadActivityScreen: View {
|
||||
Divider().padding(.leading, 58)
|
||||
ProStatusRow(
|
||||
icon: "exclamationmark.triangle.fill",
|
||||
title: "Threads unavailable",
|
||||
title: "Sessions unavailable",
|
||||
detail: .verbatim(loadErrorText),
|
||||
value: "error",
|
||||
color: OpenClawBrand.warn,
|
||||
@@ -132,7 +132,7 @@ struct IPadActivityScreen: View {
|
||||
Divider().padding(.leading, 58)
|
||||
ProStatusRow(
|
||||
icon: "bubble.left.and.text.bubble.right",
|
||||
title: self.sessionsAvailable ? "No recent threads" : "Thread activity offline",
|
||||
title: self.sessionsAvailable ? "No recent sessions" : "Session activity offline",
|
||||
detail: self.sessionsAvailable
|
||||
? "Start a chat and it will appear here."
|
||||
: "Connect to the gateway to load recent chat activity.",
|
||||
|
||||
@@ -235,7 +235,7 @@ private struct IPadActivityStatesPreview: View {
|
||||
tailRows: [
|
||||
ActivityPreviewRow(
|
||||
icon: "hourglass",
|
||||
title: "Loading threads",
|
||||
title: "Loading sessions",
|
||||
detail: "Fetching recent activity from the gateway.",
|
||||
value: "loading",
|
||||
color: OpenClawBrand.accent),
|
||||
@@ -251,7 +251,7 @@ private struct IPadActivityStatesPreview: View {
|
||||
tailRows: [
|
||||
ActivityPreviewRow(
|
||||
icon: "bubble.left.and.text.bubble.right",
|
||||
title: "No recent threads",
|
||||
title: "No recent sessions",
|
||||
detail: "Start a chat and it will appear here.",
|
||||
value: "empty",
|
||||
color: .secondary),
|
||||
@@ -267,7 +267,7 @@ private struct IPadActivityStatesPreview: View {
|
||||
tailRows: [
|
||||
ActivityPreviewRow(
|
||||
icon: "exclamationmark.triangle.fill",
|
||||
title: "Threads unavailable",
|
||||
title: "Sessions unavailable",
|
||||
detail: "Try again after the gateway reconnects.",
|
||||
value: "error",
|
||||
color: OpenClawBrand.warn),
|
||||
|
||||
@@ -4,7 +4,7 @@ struct IPadSidebarScreenChrome<Content: View>: View {
|
||||
@Environment(\.verticalSizeClass) private var verticalSizeClass
|
||||
let title: String
|
||||
let subtitle: String
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let gatewayAction: (() -> Void)?
|
||||
@ViewBuilder var content: Content
|
||||
@@ -12,14 +12,14 @@ struct IPadSidebarScreenChrome<Content: View>: View {
|
||||
init(
|
||||
title: String,
|
||||
subtitle: String,
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
gatewayAction: (() -> Void)? = nil,
|
||||
@ViewBuilder content: () -> Content)
|
||||
{
|
||||
self.title = title
|
||||
self.subtitle = subtitle
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.gatewayAction = gatewayAction
|
||||
self.content = content()
|
||||
@@ -37,8 +37,8 @@ struct IPadSidebarScreenChrome<Content: View>: View {
|
||||
titleFont: self.isCompactHeight ? OpenClawType.headline : OpenClawType.title2SemiBold,
|
||||
subtitleLineLimit: self.isCompactHeight ? 1 : 2)
|
||||
{
|
||||
if let headerLeadingAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
if let headerSidebarAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
} accessory: {
|
||||
self.gatewayPill
|
||||
@@ -64,6 +64,11 @@ struct IPadSidebarScreenChrome<Content: View>: View {
|
||||
.accessibilityLabel("Gateway settings")
|
||||
}
|
||||
}
|
||||
if self.usesNativeNavigationChrome, let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,16 +17,16 @@ struct IPadSkillWorkshopScreen: View {
|
||||
@State private var errorText: String?
|
||||
@State private var noticeText: String?
|
||||
@State private var presentedProposalRoute: IPadSkillProposalSheetRoute?
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let openSettings: () -> Void
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
openSettings: @escaping () -> Void = {})
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.openSettings = openSettings
|
||||
}
|
||||
@@ -35,7 +35,7 @@ struct IPadSkillWorkshopScreen: View {
|
||||
IPadSidebarScreenChrome(
|
||||
title: "Skill Workshop",
|
||||
subtitle: "Review and apply proposed skills.",
|
||||
headerLeadingAction: self.headerLeadingAction,
|
||||
headerSidebarAction: self.headerSidebarAction,
|
||||
usesNativeNavigationChrome: self.usesNativeNavigationChrome,
|
||||
gatewayAction: self.openSettings)
|
||||
{
|
||||
|
||||
@@ -20,18 +20,18 @@ struct IPadWorkboardScreen: View {
|
||||
@State private var busyCardID: String?
|
||||
@State private var dispatchSummaryText: String?
|
||||
@State private var presentedSheet: IPadWorkboardSheet?
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let openChat: () -> Void
|
||||
let openSettings: () -> Void
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
openChat: @escaping () -> Void,
|
||||
openSettings: @escaping () -> Void = {})
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.openChat = openChat
|
||||
self.openSettings = openSettings
|
||||
@@ -41,7 +41,7 @@ struct IPadWorkboardScreen: View {
|
||||
IPadSidebarScreenChrome(
|
||||
title: "Workboard",
|
||||
subtitle: self.currentWorkboardSubtitle,
|
||||
headerLeadingAction: self.headerLeadingAction,
|
||||
headerSidebarAction: self.headerSidebarAction,
|
||||
usesNativeNavigationChrome: self.usesNativeNavigationChrome,
|
||||
gatewayAction: self.openSettings)
|
||||
{
|
||||
@@ -1059,7 +1059,7 @@ private struct IPadWorkboardKanbanCard: View {
|
||||
Button(action: self.openSession) {
|
||||
Image(systemName: "bubble.left.and.text.bubble.right")
|
||||
}
|
||||
.accessibilityLabel("Open Thread")
|
||||
.accessibilityLabel("Open Session")
|
||||
.buttonStyle(.bordered)
|
||||
.controlSize(.mini)
|
||||
}
|
||||
@@ -1218,7 +1218,7 @@ struct IPadWorkboardQueueRow: View {
|
||||
private var actionMenuItems: some View {
|
||||
if self.card.sessionKey?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false {
|
||||
Button(action: self.openSession) {
|
||||
Text("Open Thread")
|
||||
Text("Open Session")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
}
|
||||
@@ -1316,7 +1316,7 @@ private struct IPadWorkboardCardDetailSheet: View {
|
||||
Button {
|
||||
self.openSession()
|
||||
} label: {
|
||||
Text("Open Thread")
|
||||
Text("Open Session")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,16 +4,16 @@ struct OpenClawDocsScreen: View {
|
||||
private let docsURL = URL(string: "https://docs.openclaw.ai")!
|
||||
private let gatewayURL = URL(string: "https://docs.openclaw.ai/gateway")!
|
||||
private let pairingURL = URL(string: "https://docs.openclaw.ai/channels/pairing")!
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let gatewayAction: (() -> Void)?
|
||||
|
||||
init(
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
gatewayAction: (() -> Void)? = nil)
|
||||
{
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.gatewayAction = gatewayAction
|
||||
}
|
||||
@@ -45,6 +45,11 @@ struct OpenClawDocsScreen: View {
|
||||
.accessibilityLabel("Gateway settings")
|
||||
}
|
||||
}
|
||||
if self.usesNativeNavigationChrome, let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,9 +61,9 @@ struct OpenClawDocsScreen: View {
|
||||
titleFont: OpenClawType.headline,
|
||||
subtitleFont: OpenClawType.caption)
|
||||
{
|
||||
HStack(alignment: .top, spacing: 12) {
|
||||
if let headerLeadingAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
HStack(spacing: 10) {
|
||||
if let headerSidebarAction {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
ProIconBadge(systemName: "book", color: OpenClawBrand.accent)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ enum OpenClawProMetric {
|
||||
static let pagePadding: CGFloat = 16
|
||||
static let cardRadius: CGFloat = 16
|
||||
static let controlRadius: CGFloat = 12
|
||||
static let drawerRadius: CGFloat = 28
|
||||
static let compactControlSize: CGFloat = 36
|
||||
static let bottomScrollInset: CGFloat = 96
|
||||
}
|
||||
@@ -179,16 +180,6 @@ private struct OpenClawGlassButtonModifier: ViewModifier {
|
||||
}
|
||||
}
|
||||
|
||||
private struct OpenClawTabBarBehaviorModifier: ViewModifier {
|
||||
func body(content: Content) -> some View {
|
||||
if #available(iOS 26.0, *) {
|
||||
content.tabBarMinimizeBehavior(.onScrollDown)
|
||||
} else {
|
||||
content
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct OpenClawGlassSurfaceModifier: ViewModifier {
|
||||
let radius: CGFloat
|
||||
|
||||
@@ -223,10 +214,6 @@ extension View {
|
||||
modifier(OpenClawGlassButtonModifier(prominent: prominent, tint: tint))
|
||||
}
|
||||
|
||||
func openClawTabBarBehavior() -> some View {
|
||||
modifier(OpenClawTabBarBehaviorModifier())
|
||||
}
|
||||
|
||||
func openClawGlassSurface(radius: CGFloat = OpenClawProMetric.controlRadius) -> some View {
|
||||
modifier(OpenClawGlassSurfaceModifier(radius: radius))
|
||||
}
|
||||
@@ -306,6 +293,7 @@ struct OpenClawSidebarRevealButton: View {
|
||||
height: OpenClawProMetric.compactControlSize)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.frame(width: 44, height: 44)
|
||||
.buttonBorderShape(.circle)
|
||||
.openClawGlassButton(tint: OpenClawBrand.accent)
|
||||
.accessibilityLabel(self.headerAction.accessibilityLabel.text)
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import SwiftUI
|
||||
import UIKit
|
||||
|
||||
/// Sidebar surface tokens mirroring the mobile-exp prototype palette; the
|
||||
/// drawer follows the app appearance (owner decision superseding always-dark).
|
||||
enum OpenClawSidebarPalette {
|
||||
static let background = adaptive(light: 0xFAFAFA, dark: 0x000000)
|
||||
static let elevated = adaptive(light: 0xF2F2F2, dark: 0x1A1A1A)
|
||||
static let selection = adaptive(light: 0xEDEDED, dark: 0x232327)
|
||||
static let text = adaptive(light: 0x171717, dark: 0xEDEDED)
|
||||
static let textStrong = adaptive(light: 0x171717, dark: 0xEDEDED)
|
||||
static let muted = adaptive(light: 0x8F8F8F, dark: 0x8F8F8F)
|
||||
static let accent = OpenClawBrand.accent
|
||||
|
||||
static let hairline = Color(uiColor: UIColor { traits in
|
||||
traits.userInterfaceStyle == .dark
|
||||
? UIColor(white: 1, alpha: 0.14)
|
||||
: UIColor(white: 0, alpha: 0.08)
|
||||
})
|
||||
|
||||
private static func adaptive(light: UInt32, dark: UInt32) -> Color {
|
||||
Color(uiColor: UIColor { traits in
|
||||
let value = traits.userInterfaceStyle == .dark ? dark : light
|
||||
return UIColor(
|
||||
red: CGFloat((value >> 16) & 0xFF) / 255,
|
||||
green: CGFloat((value >> 8) & 0xFF) / 255,
|
||||
blue: CGFloat(value & 0xFF) / 255,
|
||||
alpha: 1)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
import SwiftUI
|
||||
import UIKit
|
||||
|
||||
enum UnifiedChatVoiceTabIcon {
|
||||
enum State: Hashable {
|
||||
case inactive
|
||||
case active
|
||||
case listening
|
||||
case speaking
|
||||
|
||||
var isVoiceActive: Bool {
|
||||
self != .inactive
|
||||
}
|
||||
}
|
||||
|
||||
struct CacheKey: Hashable {
|
||||
let state: State
|
||||
let colorScheme: ColorScheme
|
||||
}
|
||||
|
||||
private static let canvasSize = CGSize(width: 30, height: 30)
|
||||
@MainActor private static var imageCache: [CacheKey: UIImage] = [:]
|
||||
|
||||
@MainActor
|
||||
static func image(state: State, colorScheme: ColorScheme) -> Image {
|
||||
// Voice-active icons render the adaptive brand color into bitmap pixels;
|
||||
// appearance must therefore participate in cache identity.
|
||||
let cacheKey = CacheKey(state: state, colorScheme: colorScheme)
|
||||
let rendered = self.imageCache[cacheKey] ?? {
|
||||
let image = self.renderedImage(state: state, colorScheme: colorScheme)
|
||||
self.imageCache[cacheKey] = image
|
||||
return image
|
||||
}()
|
||||
return Image(uiImage: rendered)
|
||||
.renderingMode(state.isVoiceActive ? .original : .template)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private static func renderedImage(state: State, colorScheme: ColorScheme) -> UIImage {
|
||||
let userInterfaceStyle: UIUserInterfaceStyle = colorScheme == .dark ? .dark : .light
|
||||
let traits = UITraitCollection(userInterfaceStyle: userInterfaceStyle)
|
||||
let format = UIGraphicsImageRendererFormat(for: traits)
|
||||
format.opaque = false
|
||||
format.scale = UIScreen.main.scale
|
||||
let renderer = UIGraphicsImageRenderer(size: self.canvasSize, format: format)
|
||||
let rendered = renderer.image { context in
|
||||
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 25, weight: .regular)
|
||||
guard let bubble = UIImage(systemName: "bubble.left.fill", withConfiguration: symbolConfig) else {
|
||||
return
|
||||
}
|
||||
let fill = state.isVoiceActive
|
||||
? UIColor(OpenClawBrand.accent).resolvedColor(with: traits)
|
||||
: UIColor.black
|
||||
let tintedBubble = bubble.withTintColor(fill, renderingMode: .alwaysOriginal)
|
||||
let bubbleRect = CGRect(
|
||||
x: (self.canvasSize.width - tintedBubble.size.width) / 2,
|
||||
y: (self.canvasSize.height - tintedBubble.size.height) / 2,
|
||||
width: tintedBubble.size.width,
|
||||
height: tintedBubble.size.height)
|
||||
tintedBubble.draw(in: bubbleRect)
|
||||
|
||||
// Cut one waveform out of the bubble so the tab keeps a single,
|
||||
// legible template silhouette at native tab-bar sizes.
|
||||
context.cgContext.setBlendMode(.clear)
|
||||
let heights: [CGFloat] = switch state {
|
||||
case .inactive: [6, 11, 7]
|
||||
case .active: [7, 12, 8]
|
||||
case .listening: [9, 15, 10]
|
||||
case .speaking: [13, 8, 14]
|
||||
}
|
||||
for index in heights.indices {
|
||||
let height = heights[index]
|
||||
let rect = CGRect(
|
||||
x: 10.1 + CGFloat(index) * 4.1,
|
||||
y: 13.4 - height / 2,
|
||||
width: 2.35,
|
||||
height: height)
|
||||
UIBezierPath(roundedRect: rect, cornerRadius: 1.2).fill()
|
||||
}
|
||||
}
|
||||
return rendered.withRenderingMode(state.isVoiceActive ? .alwaysOriginal : .alwaysTemplate)
|
||||
}
|
||||
}
|
||||
|
||||
/// Phone tabs push Settings routes (gateway, voice) onto their own stack so
|
||||
/// Back returns to the tab content the user navigated from; only global flows
|
||||
/// (deep links, onboarding, problem banner) jump to the canonical Settings tab.
|
||||
struct PhoneTabSettingsHost<Content: View>: View {
|
||||
@State private var settingsPath: [SettingsRoute] = []
|
||||
private let resetRequestID: Int
|
||||
private let content: (_ openSettingsRoute: @escaping (SettingsRoute) -> Void) -> Content
|
||||
|
||||
init(
|
||||
resetRequestID: Int = 0,
|
||||
@ViewBuilder content: @escaping (_ openSettingsRoute: @escaping (SettingsRoute) -> Void) -> Content)
|
||||
{
|
||||
self.resetRequestID = resetRequestID
|
||||
self.content = content
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationStack(path: self.$settingsPath) {
|
||||
self.content { route in
|
||||
self.settingsPath.append(route)
|
||||
}
|
||||
.navigationDestination(for: SettingsRoute.self) { route in
|
||||
SettingsProTab(directRoute: route)
|
||||
}
|
||||
}
|
||||
.onChange(of: self.resetRequestID) { _, _ in
|
||||
self.settingsPath.removeAll()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,442 +0,0 @@
|
||||
import OpenClawProtocol
|
||||
import SwiftUI
|
||||
|
||||
struct RootTabsPhoneControlHub: View {
|
||||
@Environment(NodeAppModel.self) private var appModel
|
||||
|
||||
let groups: [RootTabs.SidebarGroup]
|
||||
let initialDestination: RootTabs.SidebarDestination?
|
||||
let navigationRequest: RootTabs.PhoneControlNavigationRequest?
|
||||
let openRootDestination: (RootTabs.SidebarDestination) -> Void
|
||||
let openChatFromControlDetail: (RootTabs.SidebarDestination) -> Void
|
||||
|
||||
@State private var navigationPath: [RootTabs.SidebarDestination] = []
|
||||
@State private var didApplyInitialDestination = false
|
||||
@State private var handledNavigationRequestID = 0
|
||||
|
||||
var body: some View {
|
||||
NavigationStack(path: self.$navigationPath) {
|
||||
List {
|
||||
Section {
|
||||
self.gatewayHeader
|
||||
.listRowInsets(EdgeInsets(top: 4, leading: 16, bottom: 4, trailing: 16))
|
||||
.listRowBackground(Color.clear)
|
||||
.listRowSeparator(.hidden)
|
||||
}
|
||||
|
||||
Section {
|
||||
self.chatShortcut
|
||||
.listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 4, trailing: 0))
|
||||
.listRowBackground(Color.clear)
|
||||
.listRowSeparator(.hidden)
|
||||
}
|
||||
|
||||
Section {
|
||||
ForEach(self.phoneDestinations) { destination in
|
||||
self.destinationRow(destination)
|
||||
}
|
||||
}
|
||||
}
|
||||
.listStyle(.insetGrouped)
|
||||
.navigationTitle("Control")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.navigationDestination(for: RootTabs.SidebarDestination.self) { destination in
|
||||
self.detail(for: destination)
|
||||
}
|
||||
.onAppear {
|
||||
self.applyInitialDestinationIfNeeded()
|
||||
self.applyNavigationRequestIfNeeded()
|
||||
}
|
||||
.onChange(of: self.navigationRequest) { _, _ in
|
||||
self.applyNavigationRequestIfNeeded()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var gatewayHeader: some View {
|
||||
Button {
|
||||
self.openGatewayDetail()
|
||||
} label: {
|
||||
HStack(spacing: 12) {
|
||||
OpenClawProMark(size: 44, shadowRadius: 5)
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
self.gatewayIdentityTitle
|
||||
.foregroundStyle(.primary)
|
||||
.lineLimit(1)
|
||||
.truncationMode(.middle)
|
||||
HStack(spacing: 4) {
|
||||
Text(self.sidebarActiveAgentTitle)
|
||||
Text("•")
|
||||
.accessibilityHidden(true)
|
||||
Text(self.gatewayStateText)
|
||||
.foregroundStyle(self.gatewayStateColor)
|
||||
}
|
||||
.font(OpenClawType.captionMedium)
|
||||
.foregroundStyle(.secondary)
|
||||
.lineLimit(1)
|
||||
}
|
||||
Spacer(minLength: 8)
|
||||
Image(systemName: "slider.horizontal.3")
|
||||
.font(.system(size: 16, weight: .semibold))
|
||||
.foregroundStyle(.primary)
|
||||
.frame(width: 44, height: 44)
|
||||
.background(Color.primary.opacity(0.06), in: Circle())
|
||||
}
|
||||
.padding(.vertical, 6)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityElement(children: .combine)
|
||||
.accessibilityLabel(self.gatewayAccessibilityLabel)
|
||||
.accessibilityHint("Opens Settings / Gateway")
|
||||
}
|
||||
|
||||
private var chatShortcut: some View {
|
||||
self.prominentDestinationCard(
|
||||
.chat,
|
||||
subtitle: "Agent chat and recent work.")
|
||||
}
|
||||
|
||||
private func prominentDestinationCard(
|
||||
_ destination: RootTabs.SidebarDestination,
|
||||
subtitle: LocalizedStringKey) -> some View
|
||||
{
|
||||
Button {
|
||||
self.applyDestination(destination)
|
||||
} label: {
|
||||
ProCard(padding: 16, radius: OpenClawProMetric.cardRadius) {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
ControlCircleIcon(
|
||||
systemName: destination.systemImage,
|
||||
color: self.color(for: destination),
|
||||
size: 46)
|
||||
HStack(alignment: .top, spacing: 6) {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(destination.title)
|
||||
.font(OpenClawType.headline)
|
||||
.foregroundStyle(.primary)
|
||||
Text(subtitle)
|
||||
.font(OpenClawType.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
.lineLimit(2)
|
||||
}
|
||||
Spacer(minLength: 4)
|
||||
Image(systemName: "chevron.right")
|
||||
.font(OpenClawType.caption2Bold)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 128, alignment: .leading)
|
||||
}
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
|
||||
private func destinationRow(_ destination: RootTabs.SidebarDestination) -> some View {
|
||||
NavigationLink(value: destination) {
|
||||
self.rowLabel(destination)
|
||||
}
|
||||
}
|
||||
|
||||
private func rowLabel(_ destination: RootTabs.SidebarDestination) -> some View {
|
||||
Label {
|
||||
Text(destination.title)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(.primary)
|
||||
} icon: {
|
||||
ControlCircleIcon(
|
||||
systemName: destination.systemImage,
|
||||
color: self.color(for: destination),
|
||||
size: 34)
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func detail(for destination: RootTabs.SidebarDestination) -> some View {
|
||||
switch destination {
|
||||
case .chat, .agents:
|
||||
EmptyView()
|
||||
case .gateway:
|
||||
SettingsProTab(directRoute: .gateway)
|
||||
case .overview:
|
||||
CommandCenterTab(
|
||||
ownsNavigationStack: false,
|
||||
usesNativeNavigationChrome: true,
|
||||
headerTitle: "Overview",
|
||||
showsHeaderMark: false,
|
||||
openChat: { self.openChatFromControlDetail(.overview) },
|
||||
openSettings: { self.openGatewayDetail() },
|
||||
openSessions: { self.navigationPath.append(.sessions) })
|
||||
case .activity:
|
||||
IPadActivityScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
openChat: { self.openChatFromControlDetail(.activity) },
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .workboard:
|
||||
IPadWorkboardScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
openChat: { self.openChatFromControlDetail(.workboard) },
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .skillWorkshop:
|
||||
IPadSkillWorkshopScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .instances:
|
||||
AgentProTab(
|
||||
directRoute: .instances,
|
||||
headerTitle: "Instances",
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .sessions:
|
||||
CommandSessionsScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
openChat: { self.openChatFromControlDetail(.sessions) })
|
||||
case .files:
|
||||
AgentProTab(
|
||||
directRoute: .files,
|
||||
headerTitle: "Files",
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .dreaming:
|
||||
AgentProTab(
|
||||
directRoute: .dreaming,
|
||||
headerTitle: "Dreaming",
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .usage:
|
||||
AgentProTab(
|
||||
directRoute: .usage,
|
||||
headerTitle: "Usage",
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .cron:
|
||||
AgentProTab(
|
||||
directRoute: .cron,
|
||||
headerTitle: "Automations",
|
||||
openSettings: { self.openGatewayDetail() })
|
||||
case .terminal:
|
||||
TerminalHubScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
gatewayAction: { self.openGatewayDetail() })
|
||||
case .docs:
|
||||
OpenClawDocsScreen(
|
||||
usesNativeNavigationChrome: true,
|
||||
gatewayAction: { self.openGatewayDetail() })
|
||||
case .settings:
|
||||
SettingsProTab(directRoute: .voice)
|
||||
}
|
||||
}
|
||||
|
||||
/// Gateway settings open as a pushed detail on this stack so Back returns
|
||||
/// to the hub screen the user came from, not the canonical Settings tab.
|
||||
private func openGatewayDetail() {
|
||||
self.navigationPath.append(.gateway)
|
||||
}
|
||||
|
||||
private func openPhoneRootDestination(_ destination: RootTabs.SidebarDestination) {
|
||||
self.navigationPath.removeAll()
|
||||
self.openRootDestination(destination)
|
||||
}
|
||||
|
||||
private func opensRootTab(_ destination: RootTabs.SidebarDestination) -> Bool {
|
||||
RootTabs.shouldOpenRootTabFromPhoneHub(destination)
|
||||
}
|
||||
|
||||
private var phoneDestinations: [RootTabs.SidebarDestination] {
|
||||
self.groups.flatMap(\.destinations).filter { !self.opensRootTab($0) }
|
||||
}
|
||||
|
||||
private func applyInitialDestinationIfNeeded() {
|
||||
guard !self.didApplyInitialDestination else { return }
|
||||
self.didApplyInitialDestination = true
|
||||
guard let initialDestination, initialDestination != .overview else { return }
|
||||
self.applyDestination(initialDestination)
|
||||
}
|
||||
|
||||
private func applyNavigationRequestIfNeeded() {
|
||||
guard let navigationRequest, navigationRequest.id != self.handledNavigationRequestID else { return }
|
||||
self.handledNavigationRequestID = navigationRequest.id
|
||||
switch navigationRequest.target {
|
||||
case .root:
|
||||
self.navigationPath.removeAll()
|
||||
case let .detail(destination):
|
||||
self.applyDestination(destination)
|
||||
}
|
||||
}
|
||||
|
||||
private func applyDestination(_ destination: RootTabs.SidebarDestination) {
|
||||
if self.opensRootTab(destination) {
|
||||
self.openPhoneRootDestination(destination)
|
||||
} else {
|
||||
self.navigationPath = [destination]
|
||||
}
|
||||
}
|
||||
|
||||
private var sidebarActiveAgentTitle: String {
|
||||
let selectedID = self.normalized(self.appModel.selectedAgentId) ?? self.resolveDefaultAgentID()
|
||||
if let agent = self.appModel.gatewayAgents.first(where: { $0.id == selectedID }) {
|
||||
return self.agentTitle(for: agent)
|
||||
}
|
||||
return self.normalized(self.appModel.activeAgentName) ?? String(localized: "Default Agent")
|
||||
}
|
||||
|
||||
private var gatewayDisplayLabel: String? {
|
||||
self.normalized(self.appModel.gatewayServerName)
|
||||
?? self.normalized(self.appModel.gatewayRemoteAddress)
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var gatewayIdentityTitle: some View {
|
||||
// Gateway names are server data; only the product fallback is localizable.
|
||||
if let gatewayDisplayLabel {
|
||||
Text(verbatim: gatewayDisplayLabel)
|
||||
.font(OpenClawType.headlineBold)
|
||||
} else {
|
||||
Text("Gateway")
|
||||
.font(OpenClawType.headlineBold)
|
||||
}
|
||||
}
|
||||
|
||||
private var gatewayAccessibilityLabel: Text {
|
||||
if let gatewayDisplayLabel {
|
||||
Text(verbatim: String(
|
||||
format: String(localized: "Gateway %1$@, %2$@, %3$@"),
|
||||
self.gatewayStateText,
|
||||
gatewayDisplayLabel,
|
||||
self.sidebarActiveAgentTitle))
|
||||
.font(OpenClawType.captionMedium)
|
||||
} else {
|
||||
Text(verbatim: String(
|
||||
format: String(localized: "Gateway %1$@, %2$@"),
|
||||
self.gatewayStateText,
|
||||
self.sidebarActiveAgentTitle))
|
||||
.font(OpenClawType.captionMedium)
|
||||
}
|
||||
}
|
||||
|
||||
private var gatewayStateText: String {
|
||||
switch GatewayStatusBuilder.build(appModel: self.appModel) {
|
||||
case .connected: String(localized: "Online")
|
||||
case .connecting: String(localized: "Connecting")
|
||||
case .error: String(localized: "Attention")
|
||||
case .disconnected: String(localized: "Offline")
|
||||
}
|
||||
}
|
||||
|
||||
private var gatewayStateColor: Color {
|
||||
switch GatewayStatusBuilder.build(appModel: self.appModel) {
|
||||
case .connected:
|
||||
OpenClawBrand.ok
|
||||
case .connecting:
|
||||
OpenClawBrand.accent
|
||||
case .error:
|
||||
OpenClawBrand.warn
|
||||
case .disconnected:
|
||||
.secondary
|
||||
}
|
||||
}
|
||||
|
||||
private func color(for destination: RootTabs.SidebarDestination) -> Color {
|
||||
switch destination {
|
||||
case .chat:
|
||||
OpenClawBrand.ok
|
||||
case .skillWorkshop, .files:
|
||||
OpenClawBrand.info
|
||||
case .overview:
|
||||
OpenClawBrand.warn
|
||||
case .activity:
|
||||
OpenClawBrand.accent
|
||||
case .workboard:
|
||||
.purple
|
||||
case .instances, .sessions, .dreaming, .terminal:
|
||||
.secondary
|
||||
case .usage, .docs:
|
||||
OpenClawBrand.accentHot
|
||||
case .agents, .cron, .settings, .gateway:
|
||||
OpenClawBrand.ok
|
||||
}
|
||||
}
|
||||
|
||||
private func resolveDefaultAgentID() -> String {
|
||||
self.normalized(self.appModel.gatewayDefaultAgentId) ?? ""
|
||||
}
|
||||
|
||||
private func agentTitle(for agent: AgentSummary) -> String {
|
||||
let name = self.normalized(agent.name) ?? agent.id
|
||||
return name == agent.id ? name : "\(name) (\(agent.id))"
|
||||
}
|
||||
|
||||
private func normalized(_ value: String?) -> String? {
|
||||
guard let value else { return nil }
|
||||
let trimmed = value.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
return trimmed.isEmpty ? nil : trimmed
|
||||
}
|
||||
}
|
||||
|
||||
private struct ControlCircleIcon: View {
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
|
||||
let systemName: String
|
||||
let color: Color
|
||||
let size: CGFloat
|
||||
|
||||
var body: some View {
|
||||
Image(systemName: self.systemName)
|
||||
.font(.system(size: self.size * 0.42, weight: .semibold))
|
||||
.foregroundStyle(self.iconForegroundStyle)
|
||||
.frame(width: self.size, height: self.size)
|
||||
.background(
|
||||
LinearGradient(
|
||||
colors: [self.color.opacity(0.72), self.color],
|
||||
startPoint: .topLeading,
|
||||
endPoint: .bottomTrailing),
|
||||
in: Circle())
|
||||
}
|
||||
|
||||
private var iconForegroundStyle: Color {
|
||||
self.colorScheme == .dark ? .black.opacity(0.82) : .white
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
#Preview("Phone control hub offline") {
|
||||
RootTabsPhoneControlHub.preview(appModel: NodeAppModel())
|
||||
}
|
||||
|
||||
#Preview("Phone control hub connected") {
|
||||
let appModel = NodeAppModel()
|
||||
appModel.enterAppleReviewDemoMode()
|
||||
return RootTabsPhoneControlHub.preview(appModel: appModel)
|
||||
}
|
||||
|
||||
#Preview("Phone control hub connecting") {
|
||||
let appModel = NodeAppModel()
|
||||
appModel.gatewayStatusText = "Connecting..."
|
||||
return RootTabsPhoneControlHub.preview(appModel: appModel)
|
||||
}
|
||||
|
||||
#Preview("Phone control hub gateway error") {
|
||||
let appModel = NodeAppModel()
|
||||
appModel.gatewayStatusText = "Gateway error: connection refused"
|
||||
return RootTabsPhoneControlHub.preview(appModel: appModel)
|
||||
}
|
||||
|
||||
#Preview(
|
||||
"Phone control hub landscape",
|
||||
traits: .fixedLayout(width: 852, height: 393),
|
||||
.landscapeLeft)
|
||||
{
|
||||
RootTabsPhoneControlHub.preview(appModel: NodeAppModel())
|
||||
.environment(\.horizontalSizeClass, .regular)
|
||||
.environment(\.verticalSizeClass, .compact)
|
||||
}
|
||||
|
||||
extension RootTabsPhoneControlHub {
|
||||
fileprivate static func preview(appModel: NodeAppModel) -> some View {
|
||||
RootTabsPhoneControlHub(
|
||||
groups: RootTabs.phoneControlGroups,
|
||||
initialDestination: nil,
|
||||
navigationRequest: nil,
|
||||
openRootDestination: { _ in },
|
||||
openChatFromControlDetail: { _ in })
|
||||
.environment(appModel)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -90,7 +90,7 @@ struct SettingsProTab: View {
|
||||
let initialRoute: SettingsRoute?
|
||||
let directRoute: SettingsRoute?
|
||||
let acceptsGatewaySetupRequests: Bool
|
||||
let headerLeadingAction: OpenClawSidebarHeaderAction?
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let ownsNavigationStack: Bool
|
||||
let navigateToRoute: ((SettingsRoute) -> Void)?
|
||||
let onRouteChange: ((SettingsRoute?) -> Void)?
|
||||
@@ -102,7 +102,7 @@ struct SettingsProTab: View {
|
||||
initialRoute: SettingsRoute? = nil,
|
||||
directRoute: SettingsRoute? = nil,
|
||||
acceptsGatewaySetupRequests: Bool = false,
|
||||
headerLeadingAction: OpenClawSidebarHeaderAction? = nil,
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
ownsNavigationStack: Bool = true,
|
||||
navigateToRoute: ((SettingsRoute) -> Void)? = nil,
|
||||
onRouteChange: ((SettingsRoute?) -> Void)? = nil,
|
||||
@@ -113,7 +113,7 @@ struct SettingsProTab: View {
|
||||
self.initialRoute = initialRoute
|
||||
self.directRoute = directRoute
|
||||
self.acceptsGatewaySetupRequests = acceptsGatewaySetupRequests
|
||||
self.headerLeadingAction = headerLeadingAction
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.ownsNavigationStack = ownsNavigationStack
|
||||
self.navigateToRoute = navigateToRoute
|
||||
self.onRouteChange = onRouteChange
|
||||
@@ -158,9 +158,9 @@ struct SettingsProTab: View {
|
||||
self.destination(for: route)
|
||||
}
|
||||
.toolbar {
|
||||
if let headerLeadingAction {
|
||||
if let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarRevealButton(action: headerLeadingAction)
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ private struct AppearanceSettingsRow: View {
|
||||
private struct AppearanceSettingsScreen: View {
|
||||
@Environment(AppAppearanceModel.self) private var appearanceModel
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@AppStorage(RootSidebar.visibleAgentCountKey) private var sidebarVisibleAgentCount: Int = 1
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
@@ -86,6 +87,23 @@ private struct AppearanceSettingsScreen: View {
|
||||
Text("System follows this device’s appearance setting.")
|
||||
.font(OpenClawType.footnote)
|
||||
}
|
||||
|
||||
Section {
|
||||
Stepper(value: self.$sidebarVisibleAgentCount, in: 1...3) {
|
||||
HStack {
|
||||
Text("Sidebar Agents")
|
||||
.font(OpenClawType.body)
|
||||
Spacer()
|
||||
Text(verbatim: self.sidebarVisibleAgentCount.formatted())
|
||||
.font(OpenClawType.body)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
.accessibilityIdentifier("settings-appearance-sidebar-agents")
|
||||
} footer: {
|
||||
Text("How many agents the sidebar lists before the switcher menu.")
|
||||
.font(OpenClawType.footnote)
|
||||
}
|
||||
}
|
||||
.navigationTitle("Appearance")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
@@ -272,11 +290,6 @@ extension SettingsProTab {
|
||||
await self.appModel.refreshWatchMessagingStatus()
|
||||
}
|
||||
.toolbar {
|
||||
if let headerLeadingAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)
|
||||
}
|
||||
}
|
||||
ToolbarItem(placement: .principal) {
|
||||
Text(title(for: route))
|
||||
.font(OpenClawType.headline)
|
||||
@@ -294,6 +307,11 @@ extension SettingsProTab {
|
||||
.accessibilityLabel("Scan QR")
|
||||
}
|
||||
}
|
||||
if let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1045,7 +1063,7 @@ extension SettingsProTab {
|
||||
}
|
||||
.font(OpenClawType.body)
|
||||
} footer: {
|
||||
Text("Used for new Chat threads and Talk sessions.")
|
||||
Text("Used for new Chat and Talk sessions.")
|
||||
.font(OpenClawType.footnote)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -462,6 +462,12 @@ final class NodeAppModel {
|
||||
var homeCanvasRevision: Int = 0
|
||||
var lastShareEventText: String = "No share events yet."
|
||||
var openChatRequestID: Int = 0
|
||||
var newChatRequestID: Int = 0
|
||||
// RootTabs has one chat destination; keep its acknowledgement here so recreating
|
||||
// that destination cannot replay a request that the prior view already handled.
|
||||
@ObservationIgnored private var consumedNewChatRequestID: Int = 0
|
||||
var dashboardNavigationRequestID: Int = 0
|
||||
@ObservationIgnored private var consumedDashboardNavigationRequestID: Int = 0
|
||||
var gatewaySetupRequestID: Int = 0
|
||||
private(set) var pendingAgentDeepLinkPrompt: AgentDeepLinkPrompt?
|
||||
private var pendingGatewaySetupLink: GatewayConnectDeepLink?
|
||||
@@ -3553,6 +3559,28 @@ extension NodeAppModel {
|
||||
self.openChatRequestID &+= 1
|
||||
}
|
||||
|
||||
func requestNewChat() {
|
||||
self.newChatRequestID &+= 1
|
||||
}
|
||||
|
||||
func consumeNewChatRequest(_ requestID: Int) -> Bool {
|
||||
guard requestID != 0,
|
||||
requestID == self.newChatRequestID,
|
||||
requestID != self.consumedNewChatRequestID
|
||||
else { return false }
|
||||
self.consumedNewChatRequestID = requestID
|
||||
return true
|
||||
}
|
||||
|
||||
func consumeDashboardNavigationRequest(_ requestID: Int) -> Bool {
|
||||
guard requestID != 0,
|
||||
requestID == self.dashboardNavigationRequestID,
|
||||
requestID != self.consumedDashboardNavigationRequestID
|
||||
else { return false }
|
||||
self.consumedDashboardNavigationRequestID = requestID
|
||||
return true
|
||||
}
|
||||
|
||||
/// One acknowledgement per unread episode: the pending flag clears when a fresh
|
||||
/// snapshot confirms the read (unread != true), so a run finishing while the
|
||||
/// session stays open re-acknowledges without patch loops (the gateway stamps
|
||||
@@ -10252,7 +10280,7 @@ extension NodeAppModel {
|
||||
case let .gateway(link):
|
||||
self.stageGatewaySetupLink(link)
|
||||
case .dashboard:
|
||||
break
|
||||
self.dashboardNavigationRequestID &+= 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,908 @@
|
||||
import OpenClawChatUI
|
||||
import OpenClawProtocol
|
||||
import SwiftUI
|
||||
|
||||
struct RootSidebar: View {
|
||||
@Environment(NodeAppModel.self) private var appModel
|
||||
@Environment(\.displayScale) private var displayScale
|
||||
@Bindable var model: RootSidebarModel
|
||||
@State private var searchText = ""
|
||||
@State private var isSearchActive = false
|
||||
@State private var showsPagesEditor = false
|
||||
@FocusState private var isSearchFocused: Bool
|
||||
@AppStorage("sidebar.pinnedPages") private var pinnedPagesStorage: String = ""
|
||||
@AppStorage(RootSidebar.visibleAgentCountKey) private var visibleAgentCount: Int = 1
|
||||
|
||||
let selectedDestination: RootTabs.SidebarDestination
|
||||
let isDrawerLayout: Bool
|
||||
let selectDestination: (RootTabs.SidebarDestination) -> Void
|
||||
let selectSettingsRoute: (SettingsRoute) -> Void
|
||||
let hideSidebar: () -> Void
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
self.brandHeader
|
||||
if self.isSearchActive {
|
||||
self.searchField
|
||||
}
|
||||
ScrollView {
|
||||
// One 10pt unit everywhere: side insets, section gaps, and
|
||||
// the picker card's clearance all match.
|
||||
LazyVStack(alignment: .leading, spacing: 10) {
|
||||
self.agentsSection
|
||||
self.pagesSection
|
||||
self.sessionsSection
|
||||
}
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.vertical, 10)
|
||||
}
|
||||
self.footer
|
||||
}
|
||||
.foregroundStyle(OpenClawSidebarPalette.text)
|
||||
.background(OpenClawSidebarPalette.background)
|
||||
.sheet(isPresented: self.$showsPagesEditor) {
|
||||
RootSidebarPagesEditor(
|
||||
pinnedPages: self.pinnedPages,
|
||||
onSelect: { destination in
|
||||
self.showsPagesEditor = false
|
||||
self.selectSidebarDestination(destination)
|
||||
},
|
||||
onTogglePin: self.togglePinnedPage)
|
||||
}
|
||||
}
|
||||
|
||||
private var pinnedPages: [RootTabs.SidebarDestination] {
|
||||
RootTabs.pinnedSidebarPages(from: self.pinnedPagesStorage)
|
||||
}
|
||||
|
||||
private func togglePinnedPage(_ destination: RootTabs.SidebarDestination) {
|
||||
var pages = self.pinnedPages
|
||||
if let index = pages.firstIndex(of: destination) {
|
||||
pages.remove(at: index)
|
||||
} else {
|
||||
pages.append(destination)
|
||||
}
|
||||
self.pinnedPagesStorage = RootTabs.pinnedSidebarPagesStorage(pages)
|
||||
}
|
||||
|
||||
/// Brand header with compact actions; the gear owns Settings entry
|
||||
/// (prototype parity) so the footer stays connection-only.
|
||||
private var brandHeader: some View {
|
||||
HStack(spacing: 4) {
|
||||
HStack(spacing: 8) {
|
||||
OpenClawProMark(size: 26, shadowRadius: 2)
|
||||
.accessibilityHidden(true)
|
||||
Text(String(localized: "OpenClaw"))
|
||||
.font(OpenClawType.headline)
|
||||
.foregroundStyle(OpenClawSidebarPalette.textStrong)
|
||||
.lineLimit(1)
|
||||
}
|
||||
.padding(.leading, 6)
|
||||
|
||||
Spacer(minLength: 4)
|
||||
|
||||
self.headerIconButton(
|
||||
systemName: "magnifyingglass",
|
||||
label: String(localized: "Search sessions"))
|
||||
{
|
||||
withAnimation(.easeInOut(duration: 0.15)) {
|
||||
self.isSearchActive.toggle()
|
||||
}
|
||||
if self.isSearchActive {
|
||||
self.isSearchFocused = true
|
||||
} else {
|
||||
self.searchText = ""
|
||||
}
|
||||
}
|
||||
|
||||
self.headerIconButton(
|
||||
systemName: "gearshape",
|
||||
label: String(localized: "Settings"))
|
||||
{
|
||||
self.selectSidebarDestination(.settings)
|
||||
}
|
||||
|
||||
if self.isDrawerLayout {
|
||||
Button(action: self.dismissSidebar) {
|
||||
Image(systemName: "xmark")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.frame(width: 40, height: 44)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.accent)
|
||||
.accessibilityLabel(String(localized: "Hide Sidebar"))
|
||||
.accessibilityIdentifier(RootTabs.sidebarHideButtonAccessibilityIdentifier)
|
||||
}
|
||||
}
|
||||
.padding(.leading, 8)
|
||||
.padding(.trailing, 8)
|
||||
.padding(.vertical, 8)
|
||||
.background(OpenClawSidebarPalette.background)
|
||||
.overlay(alignment: .bottom) { self.separator }
|
||||
}
|
||||
|
||||
/// Prototype-style agent roster: up to `visibleAgentCount` rows inline
|
||||
/// (owner setting, default 1) and a switcher menu for the rest.
|
||||
@ViewBuilder
|
||||
private var agentsSection: some View {
|
||||
let agents = self.orderedAgents
|
||||
let shownCount = Self.shownAgentCount(configured: self.visibleAgentCount, total: agents.count)
|
||||
if !agents.isEmpty {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
ForEach(agents.prefix(shownCount), id: \.id) { agent in
|
||||
self.agentRow(agent)
|
||||
}
|
||||
if agents.count > shownCount {
|
||||
self.moreAgentsRow(Array(agents.dropFirst(shownCount)))
|
||||
}
|
||||
}
|
||||
.padding(4)
|
||||
.background(.ultraThinMaterial, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.cardRadius,
|
||||
style: .continuous))
|
||||
}
|
||||
}
|
||||
|
||||
static let visibleAgentCountKey = "sidebar.visibleAgentCount"
|
||||
|
||||
static func shownAgentCount(configured: Int, total: Int) -> Int {
|
||||
min(max(configured, 1), max(total, 1))
|
||||
}
|
||||
|
||||
/// Selected agent leads; the rest keep the gateway roster order.
|
||||
private var orderedAgents: [AgentSummary] {
|
||||
let agents = self.appModel.gatewayAgents
|
||||
guard let index = agents.firstIndex(where: { $0.id == self.currentAgentID }), index != 0 else {
|
||||
return agents
|
||||
}
|
||||
var ordered = agents
|
||||
let selected = ordered.remove(at: index)
|
||||
ordered.insert(selected, at: 0)
|
||||
return ordered
|
||||
}
|
||||
|
||||
private func agentRow(_ agent: AgentSummary) -> some View {
|
||||
let isSelected = agent.id == self.currentAgentID
|
||||
return Button {
|
||||
self.appModel.setSelectedAgentId(agent.id)
|
||||
} label: {
|
||||
HStack(spacing: 9) {
|
||||
ZStack(alignment: .bottomTrailing) {
|
||||
ZStack {
|
||||
Circle()
|
||||
.fill(OpenClawSidebarPalette.elevated)
|
||||
Text(verbatim: Self.agentBadge(name: Self.agentDisplayName(agent), identity: agent.identity))
|
||||
.font(OpenClawType.caption2Bold)
|
||||
.foregroundStyle(OpenClawSidebarPalette.textStrong)
|
||||
}
|
||||
.frame(width: 28, height: 28)
|
||||
if isSelected {
|
||||
Circle()
|
||||
.fill(OpenClawBrand.ok)
|
||||
.frame(width: 8, height: 8)
|
||||
.overlay(Circle().stroke(OpenClawSidebarPalette.background, lineWidth: 1.5))
|
||||
}
|
||||
}
|
||||
.accessibilityHidden(true)
|
||||
|
||||
VStack(alignment: .leading, spacing: 1) {
|
||||
Text(verbatim: Self.agentDisplayName(agent))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(OpenClawSidebarPalette.textStrong)
|
||||
.lineLimit(1)
|
||||
if let model = Self.agentModelLabel(agent) {
|
||||
Text(verbatim: model)
|
||||
.font(OpenClawType.caption2Medium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(minLength: 4)
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.background(isSelected ? OpenClawSidebarPalette.selection : Color.clear, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.controlRadius,
|
||||
style: .continuous))
|
||||
.accessibilityValue(isSelected ? String(localized: "Selected") : "")
|
||||
}
|
||||
|
||||
private func moreAgentsRow(_ agents: [AgentSummary]) -> some View {
|
||||
Menu {
|
||||
ForEach(agents, id: \.id) { agent in
|
||||
Button {
|
||||
self.appModel.setSelectedAgentId(agent.id)
|
||||
} label: {
|
||||
Text(verbatim: Self.agentDisplayName(agent))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
HStack(spacing: 9) {
|
||||
Image(systemName: "chevron.up.chevron.down")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.frame(width: 28)
|
||||
Text(String(localized: "More Agents"))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.lineLimit(1)
|
||||
Spacer(minLength: 4)
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 40, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
}
|
||||
|
||||
/// Same key order the Agents roster uses for its model subtitles.
|
||||
static func agentModelLabel(_ agent: AgentSummary) -> String? {
|
||||
guard let model = agent.model else { return nil }
|
||||
for key in ["primary", "name", "id", "model"] {
|
||||
if let value = (model[key]?.value as? String)?.trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
!value.isEmpty
|
||||
{
|
||||
return value
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private func headerIconButton(
|
||||
systemName: String,
|
||||
label: String,
|
||||
action: @escaping () -> Void) -> some View
|
||||
{
|
||||
Button(action: action) {
|
||||
Image(systemName: systemName)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.frame(width: 40, height: 44)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.text)
|
||||
.accessibilityLabel(label)
|
||||
}
|
||||
|
||||
private var currentAgentID: String {
|
||||
let selected = self.appModel.selectedAgentId?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||
if !selected.isEmpty { return selected }
|
||||
return self.appModel.gatewayDefaultAgentId?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||
}
|
||||
|
||||
static func agentDisplayName(_ agent: AgentSummary) -> String {
|
||||
let name = agent.name?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||
return name.isEmpty ? agent.id : name
|
||||
}
|
||||
|
||||
static func agentBadge(name: String, identity: [String: AnyCodable]?) -> String {
|
||||
if let emoji = (identity?["emoji"]?.value as? String)?.trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
!emoji.isEmpty
|
||||
{
|
||||
return emoji
|
||||
}
|
||||
let initials = name
|
||||
.split(whereSeparator: { $0.isWhitespace || $0 == "-" || $0 == "_" })
|
||||
.prefix(2)
|
||||
.compactMap(\.first)
|
||||
.map(String.init)
|
||||
.joined()
|
||||
return initials.isEmpty ? "OC" : initials.uppercased()
|
||||
}
|
||||
|
||||
private var searchField: some View {
|
||||
HStack(spacing: 8) {
|
||||
Image(systemName: "magnifyingglass")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.accessibilityHidden(true)
|
||||
ZStack(alignment: .leading) {
|
||||
if self.searchText.isEmpty {
|
||||
Text(String(localized: "Search sessions"))
|
||||
.font(OpenClawType.subhead)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
TextField("", text: self.$searchText)
|
||||
.font(OpenClawType.subhead)
|
||||
.foregroundStyle(OpenClawSidebarPalette.textStrong)
|
||||
.textInputAutocapitalization(.never)
|
||||
.autocorrectionDisabled()
|
||||
.focused(self.$isSearchFocused)
|
||||
.accessibilityLabel(String(localized: "Search sessions"))
|
||||
}
|
||||
if !self.searchText.isEmpty {
|
||||
Button {
|
||||
self.searchText = ""
|
||||
} label: {
|
||||
Image(systemName: "xmark.circle.fill")
|
||||
.font(OpenClawType.subhead)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityLabel(String(localized: "Clear session search"))
|
||||
}
|
||||
}
|
||||
.frame(minHeight: 44)
|
||||
.padding(.horizontal, 12)
|
||||
.background(OpenClawSidebarPalette.elevated, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.controlRadius,
|
||||
style: .continuous))
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.bottom, 4)
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var sessionsSection: some View {
|
||||
let sections = self.visibleSessionSections
|
||||
let selectedSessionKey = self.resolvedSelectedSessionKey
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
if let sessionErrorText = self.model.sessionErrorText {
|
||||
Text(verbatim: sessionErrorText)
|
||||
.font(OpenClawType.captionMedium)
|
||||
.foregroundStyle(OpenClawBrand.warn)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
}
|
||||
if self.model.isRefreshing, self.model.sessions.isEmpty {
|
||||
self.sessionsHeader(String(localized: "Recent"))
|
||||
HStack(spacing: 9) {
|
||||
ProgressView().controlSize(.small)
|
||||
Text(String(localized: "Loading sessions"))
|
||||
.font(OpenClawType.captionMedium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
}
|
||||
.frame(minHeight: 44)
|
||||
.padding(.horizontal, 10)
|
||||
} else if sections.isEmpty {
|
||||
self.sessionsHeader(String(localized: "Recent"))
|
||||
Text(String(localized: "No recent sessions"))
|
||||
.font(OpenClawType.captionMedium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
} else {
|
||||
ForEach(Array(sections.enumerated()), id: \.element.id) { index, section in
|
||||
// Sole ungrouped section carries no model title; the web
|
||||
// and apps agree on calling it Recent. New Chat rides the
|
||||
// first header so it lives where sessions live.
|
||||
let title = section.title ?? String(localized: "Recent")
|
||||
if index == 0 {
|
||||
self.sessionsHeader(title)
|
||||
} else {
|
||||
self.sectionTitle(title)
|
||||
}
|
||||
ForEach(self.sessionNodes(for: section)) { node in
|
||||
self.sessionButton(node, selectedSessionKey: selectedSessionKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
self.selectSidebarDestination(.sessions)
|
||||
} label: {
|
||||
Label {
|
||||
Text(String(localized: "All Sessions…"))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
} icon: {
|
||||
Image(systemName: "rectangle.stack")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.accent)
|
||||
}
|
||||
}
|
||||
|
||||
private var pagesSection: some View {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
HStack(spacing: 4) {
|
||||
self.sectionTitle(String(localized: "Pages"))
|
||||
Spacer(minLength: 4)
|
||||
Button {
|
||||
self.showsPagesEditor = true
|
||||
} label: {
|
||||
Image(systemName: "square.and.pencil")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.frame(width: 40, height: 32)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.accessibilityLabel(String(localized: "Edit Pages"))
|
||||
}
|
||||
self.homeRow
|
||||
ForEach(self.pinnedPages) { destination in
|
||||
self.destinationButton(destination)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Fixed first Pages row like the web "Home": opens the agent's chat and
|
||||
/// carries the main session's run/unread state.
|
||||
private var homeRow: some View {
|
||||
let mainKey = self.resolvedMainSessionKey
|
||||
let isSelected = self.selectedDestination == .chat &&
|
||||
self.resolvedSelectedSessionKey.caseInsensitiveCompare(mainKey) == .orderedSame
|
||||
let mainSession = self.mainSessionEntry
|
||||
return Button {
|
||||
self.appModel.openChat(sessionKey: mainKey, unread: mainSession?.unread == true)
|
||||
self.selectSidebarDestination(.chat)
|
||||
} label: {
|
||||
HStack(spacing: 9) {
|
||||
Image(systemName: "house")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.frame(width: 18)
|
||||
Text(String(localized: "Home"))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.lineLimit(1)
|
||||
Spacer(minLength: 4)
|
||||
if mainSession?.hasActiveRun == true {
|
||||
ProgressView()
|
||||
.controlSize(.mini)
|
||||
.tint(OpenClawSidebarPalette.accent)
|
||||
} else if mainSession?.unread == true {
|
||||
Circle()
|
||||
.fill(OpenClawSidebarPalette.accent)
|
||||
.frame(width: 7, height: 7)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(isSelected ? OpenClawSidebarPalette.accent : OpenClawSidebarPalette.text)
|
||||
.background(isSelected ? OpenClawSidebarPalette.selection : Color.clear, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.controlRadius,
|
||||
style: .continuous))
|
||||
.accessibilityValue(mainSession?.unread == true ? String(localized: "Unread") : "")
|
||||
}
|
||||
|
||||
/// Web-parity compact footer: connection state left, Settings gear right.
|
||||
private var footer: some View {
|
||||
VStack(spacing: 0) {
|
||||
self.separator
|
||||
HStack(spacing: 4) {
|
||||
Button {
|
||||
self.selectSidebarDestination(.gateway)
|
||||
} label: {
|
||||
HStack(spacing: 9) {
|
||||
// The agent card owns the healthy status; like the web
|
||||
// footer, a dot appears here only when degraded.
|
||||
if !self.isGatewayConnected {
|
||||
Circle()
|
||||
.fill(self.gatewayStatusColor)
|
||||
.frame(width: 8, height: 8)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
Text(verbatim: self.gatewayName)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.lineLimit(1)
|
||||
}
|
||||
.frame(minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.text)
|
||||
.accessibilityValue(self.gatewayStatusTitle)
|
||||
|
||||
Spacer(minLength: 4)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.bottom, 8)
|
||||
.background(OpenClawSidebarPalette.background)
|
||||
}
|
||||
|
||||
/// Alias-aware main lookup: rosters may return namespaced keys
|
||||
/// ("agent:<id>:main"), so raw comparison would drop Home's badges.
|
||||
private var mainSessionEntry: OpenClawChatSessionEntry? {
|
||||
self.model.sessions.first { $0.key == self.resolvedMainSessionKey }
|
||||
}
|
||||
|
||||
private var resolvedMainSessionKey: String {
|
||||
ChatSessionSidebarModel.selectedSessionKey(
|
||||
sessions: self.model.sessions,
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: self.appModel.defaultChatSessionKey,
|
||||
activeAgentID: self.appModel.chatAgentId)
|
||||
}
|
||||
|
||||
private var resolvedSelectedSessionKey: String {
|
||||
ChatSessionSidebarModel.selectedSessionKey(
|
||||
sessions: self.model.sessions,
|
||||
currentSessionKey: self.appModel.chatSessionKey,
|
||||
mainSessionKey: self.appModel.defaultChatSessionKey,
|
||||
activeAgentID: self.appModel.chatAgentId)
|
||||
}
|
||||
|
||||
private var visibleSessionSections: [ChatSessionSidebarModel.Section] {
|
||||
self.model.sections(
|
||||
query: self.searchText,
|
||||
currentSessionKey: self.appModel.chatSessionKey,
|
||||
mainSessionKey: self.appModel.defaultChatSessionKey,
|
||||
activeAgentID: self.appModel.chatAgentId,
|
||||
groups: self.sessionGroups)
|
||||
}
|
||||
|
||||
private var sessionCategories: [String] {
|
||||
CommandSessionGrouping.categories(from: self.model.sessions, knownGroups: SessionGroupStore.load())
|
||||
}
|
||||
|
||||
private var sessionGroups: [OpenClawChatSessionGroup] {
|
||||
self.sessionCategories.enumerated().map { offset, name in
|
||||
OpenClawChatSessionGroup(name: name, position: offset)
|
||||
}
|
||||
}
|
||||
|
||||
private func flattened(_ nodes: [ChatSessionSidebarModel.Node]) -> [ChatSessionSidebarModel.Node] {
|
||||
nodes.flatMap { [$0] + self.flattened($0.children) }
|
||||
}
|
||||
|
||||
private func sessionNodes(for section: ChatSessionSidebarModel.Section) -> [ChatSessionSidebarModel.Node] {
|
||||
let nodes = self.flattened(section.nodes)
|
||||
guard section.id == "recent", let limit = Self.recentSessionCap(searchText: self.searchText) else {
|
||||
return nodes
|
||||
}
|
||||
return Array(nodes.prefix(limit))
|
||||
}
|
||||
|
||||
static func recentSessionCap(searchText: String) -> Int? {
|
||||
searchText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? 20 : nil
|
||||
}
|
||||
|
||||
private func sessionButton(
|
||||
_ node: ChatSessionSidebarModel.Node,
|
||||
selectedSessionKey: String) -> some View
|
||||
{
|
||||
let session = node.session
|
||||
let isSelected = session.key == selectedSessionKey
|
||||
return Button {
|
||||
self.appModel.openChat(sessionKey: session.key, unread: session.unread == true)
|
||||
self.selectSidebarDestination(.chat)
|
||||
} label: {
|
||||
HStack(spacing: 9) {
|
||||
ZStack {
|
||||
if node.badges.runningCount > 0 {
|
||||
ProgressView()
|
||||
.controlSize(.mini)
|
||||
.tint(OpenClawSidebarPalette.accent)
|
||||
} else {
|
||||
Image(systemName: "bubble.left")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.foregroundStyle(isSelected
|
||||
? OpenClawSidebarPalette.accent
|
||||
: OpenClawSidebarPalette.muted)
|
||||
}
|
||||
}
|
||||
.frame(width: 18)
|
||||
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(verbatim: CommandCenterTab.sessionTitle(session))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(isSelected
|
||||
? OpenClawSidebarPalette.accent
|
||||
: OpenClawSidebarPalette.textStrong)
|
||||
.lineLimit(1)
|
||||
// Web-parity subtitle: the work line (repo/branch) names the
|
||||
// session; recency moves to the trailing metadata slot.
|
||||
if let workSubtitle = ChatSessionSidebarModel.workSubtitle(for: session) {
|
||||
Text(verbatim: workSubtitle)
|
||||
.font(OpenClawType.caption2Medium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(minLength: 4)
|
||||
Text(verbatim: CommandCenterTab.sessionDetail(session))
|
||||
.font(OpenClawType.caption2Medium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.lineLimit(1)
|
||||
if session.unread == true {
|
||||
Circle()
|
||||
.fill(OpenClawSidebarPalette.accent)
|
||||
.frame(width: 7, height: 7)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
if session.pinned == true {
|
||||
Image(systemName: "pin.fill")
|
||||
.font(OpenClawType.caption2Medium)
|
||||
.foregroundStyle(OpenClawSidebarPalette.accent)
|
||||
.accessibilityHidden(true)
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.background(isSelected ? OpenClawSidebarPalette.selection : Color.clear, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.controlRadius,
|
||||
style: .continuous))
|
||||
.commandSessionActions(
|
||||
session: session,
|
||||
categories: self.sessionCategories,
|
||||
isEnabled: self.appModel.isOperatorGatewayConnected,
|
||||
canArchive: ChatSessionSidebarModel.canArchiveSession(
|
||||
session,
|
||||
mainSessionKey: self.resolvedMainSessionKey),
|
||||
canDelete: ChatSessionSidebarModel.canDeleteSession(
|
||||
key: session.key,
|
||||
mainSessionKey: self.resolvedMainSessionKey),
|
||||
actions: CommandSessionActions(
|
||||
rename: { self.patchSession(session, label: .some($0)) },
|
||||
moveToGroup: { self.patchSession(session, category: .some($0)) },
|
||||
togglePinned: { self.patchSession(session, pinned: session.pinned != true) },
|
||||
toggleUnread: { self.patchSession(session, unread: session.unread != true) },
|
||||
fork: { self.forkSession(session) },
|
||||
toggleArchived: { self.patchSession(session, archived: true) },
|
||||
delete: { self.deleteSession(session) }))
|
||||
.accessibilityValue(session.unread == true ? String(localized: "Unread") : "")
|
||||
}
|
||||
|
||||
private func destinationButton(_ destination: RootTabs.SidebarDestination) -> some View {
|
||||
let isSelected = destination == self.selectedDestination
|
||||
let badgeCount = self.badgeCount(for: destination)
|
||||
return Button {
|
||||
self.selectSidebarDestination(destination)
|
||||
} label: {
|
||||
HStack(spacing: 0) {
|
||||
Label {
|
||||
Text(destination.sidebarTitle)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.lineLimit(1)
|
||||
} icon: {
|
||||
Image(systemName: destination.systemImage)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
Spacer(minLength: 6)
|
||||
if badgeCount > 0 {
|
||||
Text(verbatim: badgeCount.formatted())
|
||||
.font(OpenClawType.caption2Bold)
|
||||
.foregroundStyle(Color.white)
|
||||
.padding(.horizontal, 6)
|
||||
.frame(minWidth: 18, minHeight: 18)
|
||||
.background(OpenClawSidebarPalette.accent, in: Capsule())
|
||||
.accessibilityLabel(String(localized: "Attention"))
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, minHeight: 44, alignment: .leading)
|
||||
.padding(.horizontal, 10)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(isSelected ? OpenClawSidebarPalette.accent : OpenClawSidebarPalette.text)
|
||||
.background(isSelected ? OpenClawSidebarPalette.selection : Color.clear, in: RoundedRectangle(
|
||||
cornerRadius: OpenClawProMetric.controlRadius,
|
||||
style: .continuous))
|
||||
}
|
||||
|
||||
/// Attention lives on the rows that act on it (prototype parity): pending
|
||||
/// approvals surface on Overview, cron issues on Automations.
|
||||
private func badgeCount(for destination: RootTabs.SidebarDestination) -> Int {
|
||||
switch destination {
|
||||
case .overview: self.appModel.pendingExecApprovalCount
|
||||
case .cron: self.model.failedCronJobCount + self.model.overdueCronJobCount
|
||||
default: 0
|
||||
}
|
||||
}
|
||||
|
||||
private func sessionsHeader(_ title: String) -> some View {
|
||||
HStack(spacing: 4) {
|
||||
self.sectionTitle(title)
|
||||
Spacer(minLength: 4)
|
||||
Button {
|
||||
self.appModel.requestNewChat()
|
||||
self.selectSidebarDestination(.chat)
|
||||
} label: {
|
||||
Image(systemName: "plus.bubble")
|
||||
.font(OpenClawType.captionSemiBold)
|
||||
.frame(width: 40, height: 32)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.disabled(!self.appModel.isOperatorGatewayConnected)
|
||||
.accessibilityLabel(String(localized: "New Chat"))
|
||||
}
|
||||
}
|
||||
|
||||
private func sectionTitle(_ title: String) -> some View {
|
||||
Text(verbatim: title.uppercased())
|
||||
.font(OpenClawType.caption2Bold)
|
||||
.foregroundStyle(OpenClawSidebarPalette.muted)
|
||||
.tracking(0.5)
|
||||
.padding(.horizontal, 10)
|
||||
}
|
||||
|
||||
private var separator: some View {
|
||||
Rectangle()
|
||||
.fill(OpenClawSidebarPalette.hairline)
|
||||
.frame(height: 1 / self.displayScale)
|
||||
}
|
||||
|
||||
private var gatewayName: String {
|
||||
Self.gatewayName(
|
||||
serverName: self.appModel.gatewayServerName,
|
||||
remoteAddress: self.appModel.gatewayRemoteAddress)
|
||||
}
|
||||
|
||||
static func gatewayName(serverName: String?, remoteAddress: String?) -> String {
|
||||
for candidate in [serverName, remoteAddress] {
|
||||
let trimmed = candidate?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||
if !trimmed.isEmpty { return trimmed }
|
||||
}
|
||||
return String(localized: "Connection")
|
||||
}
|
||||
|
||||
private var gatewayStatusTitle: String {
|
||||
switch GatewayStatusBuilder.build(appModel: self.appModel) {
|
||||
case .connected: String(localized: "Online")
|
||||
case .connecting: String(localized: "Connecting")
|
||||
case .error: String(localized: "Needs attention")
|
||||
case .disconnected: String(localized: "Offline")
|
||||
}
|
||||
}
|
||||
|
||||
private var isGatewayConnected: Bool {
|
||||
GatewayStatusBuilder.build(appModel: self.appModel) == .connected
|
||||
}
|
||||
|
||||
private var gatewayStatusColor: Color {
|
||||
switch GatewayStatusBuilder.build(appModel: self.appModel) {
|
||||
case .connected: OpenClawBrand.ok
|
||||
case .connecting: OpenClawBrand.accent
|
||||
case .error: OpenClawBrand.warn
|
||||
case .disconnected: OpenClawSidebarPalette.muted
|
||||
}
|
||||
}
|
||||
|
||||
private func patchSession(
|
||||
_ session: OpenClawChatSessionEntry,
|
||||
label: String?? = nil,
|
||||
category: String?? = nil,
|
||||
pinned: Bool? = nil,
|
||||
archived: Bool? = nil,
|
||||
unread: Bool? = nil)
|
||||
{
|
||||
Task {
|
||||
do {
|
||||
try await self.appModel.makeChatTransport().patchSession(
|
||||
key: session.key,
|
||||
label: label,
|
||||
category: category,
|
||||
pinned: pinned,
|
||||
archived: archived,
|
||||
unread: unread)
|
||||
if archived == true, session.key == self.appModel.chatSessionKey {
|
||||
self.appModel.focusChatSession(nil)
|
||||
}
|
||||
await self.model.refreshSessions(appModel: self.appModel)
|
||||
} catch {
|
||||
self.model.reportSessionError(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func deleteSession(_ session: OpenClawChatSessionEntry) {
|
||||
Task {
|
||||
do {
|
||||
try await self.appModel.makeChatTransport().deleteSession(key: session.key)
|
||||
if session.key == self.appModel.chatSessionKey {
|
||||
self.appModel.focusChatSession(nil)
|
||||
}
|
||||
await self.model.refreshSessions(appModel: self.appModel)
|
||||
} catch {
|
||||
self.model.reportSessionError(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func forkSession(_ session: OpenClawChatSessionEntry) {
|
||||
Task {
|
||||
do {
|
||||
let key = try await self.appModel.makeChatTransport().forkSession(parentKey: session.key)
|
||||
self.appModel.openChat(sessionKey: key)
|
||||
self.selectSidebarDestination(.chat)
|
||||
await self.model.refreshSessions(appModel: self.appModel)
|
||||
} catch {
|
||||
self.model.reportSessionError(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func selectSidebarDestination(_ destination: RootTabs.SidebarDestination) {
|
||||
self.isSearchFocused = false
|
||||
self.selectDestination(destination)
|
||||
}
|
||||
|
||||
private func dismissSidebar() {
|
||||
self.isSearchFocused = false
|
||||
self.hideSidebar()
|
||||
}
|
||||
}
|
||||
|
||||
/// Web-parity Pages editor (the pen menu): navigate to any page, pin/unpin
|
||||
/// which ones stay in the sidebar. Home is fixed and not listed.
|
||||
struct RootSidebarPagesEditor: View {
|
||||
let pinnedPages: [RootTabs.SidebarDestination]
|
||||
let onSelect: (RootTabs.SidebarDestination) -> Void
|
||||
let onTogglePin: (RootTabs.SidebarDestination) -> Void
|
||||
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
List {
|
||||
Section {
|
||||
ForEach(RootTabs.pinnableSidebarPages) { destination in
|
||||
self.pageRow(destination)
|
||||
}
|
||||
} footer: {
|
||||
Text("Pinned pages stay in the sidebar. Home is always shown.")
|
||||
.font(OpenClawType.caption)
|
||||
}
|
||||
}
|
||||
.navigationTitle(String(localized: "Pages"))
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .confirmationAction) {
|
||||
Button {
|
||||
self.dismiss()
|
||||
} label: {
|
||||
Text(String(localized: "Done"))
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.openClawSheetChrome()
|
||||
}
|
||||
|
||||
private func pageRow(_ destination: RootTabs.SidebarDestination) -> some View {
|
||||
let isPinned = self.pinnedPages.contains(destination)
|
||||
return HStack(spacing: 10) {
|
||||
Button {
|
||||
self.onSelect(destination)
|
||||
} label: {
|
||||
Label {
|
||||
Text(destination.sidebarTitle)
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
} icon: {
|
||||
Image(systemName: destination.systemImage)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
|
||||
Button {
|
||||
self.onTogglePin(destination)
|
||||
} label: {
|
||||
Image(systemName: isPinned ? "pin.fill" : "pin")
|
||||
.font(OpenClawType.subheadSemiBold)
|
||||
.foregroundStyle(isPinned ? OpenClawBrand.accent : Color.secondary)
|
||||
.frame(width: 44, height: 44)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityLabel(destination.sidebarTitle)
|
||||
.accessibilityValue(
|
||||
isPinned
|
||||
? String(localized: "Pinned")
|
||||
: String(localized: "Not pinned"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
import Foundation
|
||||
import Observation
|
||||
import OpenClawChatUI
|
||||
import OpenClawProtocol
|
||||
|
||||
struct ChatSessionRosterSnapshot: Sendable {
|
||||
let sessions: [OpenClawChatSessionEntry]
|
||||
let isCached: Bool
|
||||
}
|
||||
|
||||
extension NodeAppModel {
|
||||
func loadChatSessionRoster(
|
||||
limit: Int,
|
||||
archived: Bool = false,
|
||||
allowCachedFallback: Bool = true) async throws -> ChatSessionRosterSnapshot
|
||||
{
|
||||
guard self.isLocalChatFixtureEnabled || self.isOperatorGatewayConnected else {
|
||||
guard allowCachedFallback else { throw URLError(.notConnectedToInternet) }
|
||||
return await ChatSessionRosterSnapshot(
|
||||
sessions: archived ? [] : self.loadCachedChatSessions(),
|
||||
isCached: true)
|
||||
}
|
||||
|
||||
do {
|
||||
let response = try await self.makeChatTransport().listSessions(limit: limit, archived: archived)
|
||||
if !archived {
|
||||
self.reconcileChatSessionReadState(response.sessions)
|
||||
await self.storeCachedChatSessions(response.sessions)
|
||||
}
|
||||
return ChatSessionRosterSnapshot(sessions: response.sessions, isCached: false)
|
||||
} catch {
|
||||
guard allowCachedFallback, !archived else { throw error }
|
||||
let cached = await self.loadCachedChatSessions()
|
||||
guard !cached.isEmpty else { throw error }
|
||||
return ChatSessionRosterSnapshot(sessions: cached, isCached: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
final class RootSidebarModel {
|
||||
static let sessionLimit = 200
|
||||
|
||||
struct TokenUsageSummary: Equatable {
|
||||
let total: Int?
|
||||
let isPartial: Bool
|
||||
}
|
||||
|
||||
private(set) var sessions: [OpenClawChatSessionEntry] = []
|
||||
private(set) var usage: CostUsageSummaryLite?
|
||||
private(set) var cronJobs: [CronJob] = []
|
||||
private(set) var isRefreshing = false
|
||||
private(set) var sessionErrorText: String?
|
||||
private var rosterGeneration = 0
|
||||
private var dashboardGeneration = 0
|
||||
|
||||
var failedCronJobCount: Int {
|
||||
self.cronJobs.count { Self.isFailedCronJob($0) }
|
||||
}
|
||||
|
||||
var overdueCronJobCount: Int {
|
||||
let threshold = Int(Date().timeIntervalSince1970 * 1000) - 300_000
|
||||
return self.cronJobs.count { job in
|
||||
job.enabled && (job.nextrunatms.map { $0 < threshold } ?? false)
|
||||
}
|
||||
}
|
||||
|
||||
func sections(
|
||||
query: String,
|
||||
currentSessionKey: String,
|
||||
mainSessionKey: String,
|
||||
activeAgentID: String?,
|
||||
groups: [OpenClawChatSessionGroup]) -> [ChatSessionSidebarModel.Section]
|
||||
{
|
||||
ChatSessionSidebarModel.sections(
|
||||
sessions: self.sessions,
|
||||
currentSessionKey: currentSessionKey,
|
||||
mainSessionKey: mainSessionKey,
|
||||
activeAgentID: activeAgentID,
|
||||
groups: groups,
|
||||
excludesMainSession: true,
|
||||
query: query)
|
||||
}
|
||||
|
||||
func refresh(appModel: NodeAppModel) async {
|
||||
self.rosterGeneration &+= 1
|
||||
let rosterGeneration = self.rosterGeneration
|
||||
self.dashboardGeneration &+= 1
|
||||
let dashboardGeneration = self.dashboardGeneration
|
||||
self.isRefreshing = true
|
||||
defer {
|
||||
if rosterGeneration == self.rosterGeneration {
|
||||
self.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
async let roster = self.loadRoster(appModel: appModel)
|
||||
async let dashboard = self.loadDashboard(appModel: appModel)
|
||||
let loadedRoster = await roster
|
||||
guard !Task.isCancelled else { return }
|
||||
if rosterGeneration == self.rosterGeneration {
|
||||
switch loadedRoster {
|
||||
case let .success(loadedRoster):
|
||||
self.sessions = loadedRoster.sessions
|
||||
self.sessionErrorText = nil
|
||||
case let .failure(message):
|
||||
self.sessionErrorText = message
|
||||
case .cancelled:
|
||||
return
|
||||
}
|
||||
self.isRefreshing = false
|
||||
}
|
||||
|
||||
let loadedDashboard = await dashboard
|
||||
guard !Task.isCancelled, dashboardGeneration == self.dashboardGeneration else { return }
|
||||
if let usage = loadedDashboard.usage {
|
||||
self.usage = usage
|
||||
}
|
||||
if let cronJobs = loadedDashboard.cronJobs {
|
||||
self.cronJobs = cronJobs
|
||||
}
|
||||
}
|
||||
|
||||
func refreshSessions(appModel: NodeAppModel) async {
|
||||
self.rosterGeneration &+= 1
|
||||
let rosterGeneration = self.rosterGeneration
|
||||
self.isRefreshing = true
|
||||
defer {
|
||||
if rosterGeneration == self.rosterGeneration {
|
||||
self.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
let loadedRoster = await self.loadRoster(appModel: appModel, allowCachedFallback: false)
|
||||
guard !Task.isCancelled, rosterGeneration == self.rosterGeneration else { return }
|
||||
switch loadedRoster {
|
||||
case let .success(roster):
|
||||
self.sessions = roster.sessions
|
||||
self.sessionErrorText = nil
|
||||
case let .failure(message):
|
||||
self.sessionErrorText = message
|
||||
case .cancelled:
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func reportSessionError(_ error: any Error) {
|
||||
self.sessionErrorText = error.localizedDescription
|
||||
}
|
||||
|
||||
static func tokenUsageSummary(for sessions: [OpenClawChatSessionEntry]) -> TokenUsageSummary {
|
||||
let knownTotals = sessions.compactMap(\.totalTokens)
|
||||
return TokenUsageSummary(
|
||||
total: knownTotals.isEmpty ? nil : knownTotals.reduce(0, +),
|
||||
isPartial: knownTotals.count < sessions.count || sessions.contains { $0.totalTokensFresh == false })
|
||||
}
|
||||
|
||||
private func loadRoster(
|
||||
appModel: NodeAppModel,
|
||||
allowCachedFallback: Bool = true) async -> RosterLoadResult
|
||||
{
|
||||
do {
|
||||
return try await .success(appModel.loadChatSessionRoster(
|
||||
limit: Self.sessionLimit,
|
||||
allowCachedFallback: allowCachedFallback))
|
||||
} catch is CancellationError {
|
||||
return .cancelled
|
||||
} catch {
|
||||
return .failure(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
|
||||
private func loadDashboard(appModel: NodeAppModel) async -> DashboardSnapshot {
|
||||
guard appModel.isOperatorGatewayConnected else {
|
||||
return DashboardSnapshot(usage: nil, cronJobs: nil)
|
||||
}
|
||||
async let usage = self.request(
|
||||
CostUsageSummaryLite.self,
|
||||
appModel: appModel,
|
||||
method: "usage.cost",
|
||||
paramsJSON: "{\"days\":31}")
|
||||
async let cronJobs = self.loadCronJobs(appModel: appModel)
|
||||
let loadedUsage = await usage
|
||||
let loadedCronJobs = await cronJobs
|
||||
return DashboardSnapshot(usage: loadedUsage, cronJobs: loadedCronJobs)
|
||||
}
|
||||
|
||||
private func loadCronJobs(appModel: NodeAppModel) async -> [CronJob]? {
|
||||
let pageLimit = 5
|
||||
let jobLimit = 1000
|
||||
var jobs: [CronJob] = []
|
||||
var seenJobIDs: Set<String> = []
|
||||
var expectedIdentity: CronJobsSnapshotIdentity?
|
||||
var offset = 0
|
||||
for _ in 0..<pageLimit {
|
||||
let paramsJSON = "{\"includeDisabled\":true,\"limit\":200,\"offset\":\(offset)," +
|
||||
"\"sortBy\":\"name\",\"sortDir\":\"asc\"}"
|
||||
let page = await self.request(
|
||||
CronJobsListLite.self,
|
||||
appModel: appModel,
|
||||
method: "cron.list",
|
||||
paramsJSON: paramsJSON)
|
||||
guard let page,
|
||||
let identity = cronJobsSnapshotIdentity(page: page, maximumCount: jobLimit)
|
||||
else { return nil }
|
||||
if let expectedIdentity, identity != expectedIdentity {
|
||||
return nil
|
||||
}
|
||||
expectedIdentity = identity
|
||||
let pageJobIDs = Set(page.jobs.map(\.id))
|
||||
guard pageJobIDs.count == page.jobs.count,
|
||||
seenJobIDs.isDisjoint(with: pageJobIDs)
|
||||
else { return nil }
|
||||
seenJobIDs.formUnion(pageJobIDs)
|
||||
jobs.append(contentsOf: page.jobs)
|
||||
guard jobs.count <= jobLimit else { return nil }
|
||||
if let total = identity.total {
|
||||
guard total >= jobs.count else { return nil }
|
||||
if jobs.count == total {
|
||||
guard !page.hasMore else { return nil }
|
||||
return jobs
|
||||
}
|
||||
}
|
||||
guard page.hasMore else { return jobs }
|
||||
guard let nextOffset = nextCronJobsListOffset(page: page, currentOffset: offset),
|
||||
nextOffset <= jobLimit
|
||||
else { return nil }
|
||||
offset = nextOffset
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private func request<T: Decodable>(
|
||||
_ type: T.Type,
|
||||
appModel: NodeAppModel,
|
||||
method: String,
|
||||
paramsJSON: String) async -> T?
|
||||
{
|
||||
do {
|
||||
let data = try await appModel.operatorSession.request(
|
||||
method: method,
|
||||
paramsJSON: paramsJSON,
|
||||
timeoutSeconds: 12)
|
||||
return try JSONDecoder().decode(type, from: data)
|
||||
} catch {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
static func isFailedCronJob(_ job: CronJob) -> Bool {
|
||||
let status = (job.lastrunstatus?.value as? String)?.lowercased()
|
||||
// This failure vocabulary mirrors the web sidebar-attention contract in ui/src/components/sidebar-attention.ts.
|
||||
return job.enabled && ["error", "failed", "timeout", "timed_out"].contains(status)
|
||||
}
|
||||
|
||||
private struct DashboardSnapshot {
|
||||
let usage: CostUsageSummaryLite?
|
||||
let cronJobs: [CronJob]?
|
||||
}
|
||||
|
||||
private enum RosterLoadResult {
|
||||
case success(ChatSessionRosterSnapshot)
|
||||
case failure(String)
|
||||
case cancelled
|
||||
}
|
||||
}
|
||||
+276
-420
File diff suppressed because it is too large
Load Diff
@@ -3,38 +3,17 @@ import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension RootTabs {
|
||||
struct PhoneChatReturn: Equatable {
|
||||
let destination: SidebarDestination
|
||||
let openChatRequestID: Int
|
||||
}
|
||||
|
||||
struct PhoneControlNavigationRequest: Equatable {
|
||||
enum Target: Equatable {
|
||||
case root
|
||||
case detail(SidebarDestination)
|
||||
}
|
||||
|
||||
let id: Int
|
||||
let target: Target
|
||||
}
|
||||
|
||||
private static var sidebarPersistentWidthThreshold: CGFloat {
|
||||
980
|
||||
}
|
||||
|
||||
static let sidebarSplitIdealWidth: CGFloat = 316
|
||||
static let sidebarSplitMaximumWidth: CGFloat = 340
|
||||
static let sidebarDrawerMaximumWidth: CGFloat = 340
|
||||
// Mirrors the web mobile drawer cap (min(86vw, 320px)).
|
||||
static let sidebarDrawerMaximumWidth: CGFloat = 320
|
||||
static let sidebarShowButtonAccessibilityIdentifier = "RootTabs.Sidebar.Show"
|
||||
static let sidebarHideButtonAccessibilityIdentifier = "RootTabs.Sidebar.Hide"
|
||||
|
||||
enum AppTab: Hashable {
|
||||
case control
|
||||
case chat
|
||||
case agent
|
||||
case settings
|
||||
}
|
||||
|
||||
enum SidebarDestination: String, CaseIterable, Hashable, Identifiable {
|
||||
case chat
|
||||
case overview
|
||||
@@ -66,7 +45,7 @@ extension RootTabs {
|
||||
case .workboard: String(localized: "Workboard")
|
||||
case .skillWorkshop: String(localized: "Skill Workshop")
|
||||
case .instances: String(localized: "Instances")
|
||||
case .sessions: String(localized: "Threads")
|
||||
case .sessions: String(localized: "Sessions")
|
||||
case .files: String(localized: "Files")
|
||||
case .dreaming: String(localized: "Dreaming")
|
||||
case .usage: String(localized: "Usage")
|
||||
@@ -106,22 +85,6 @@ extension RootTabs {
|
||||
}
|
||||
}
|
||||
|
||||
var appTab: AppTab {
|
||||
switch self {
|
||||
case .chat:
|
||||
.chat
|
||||
case .agents:
|
||||
.agent
|
||||
case .settings, .gateway:
|
||||
.settings
|
||||
case .overview, .activity, .workboard, .skillWorkshop, .instances, .sessions, .files,
|
||||
.dreaming,
|
||||
.usage,
|
||||
.cron, .terminal, .docs:
|
||||
.control
|
||||
}
|
||||
}
|
||||
|
||||
var settingsRoute: SettingsRoute? {
|
||||
switch self {
|
||||
case .gateway:
|
||||
@@ -156,11 +119,25 @@ extension RootTabs {
|
||||
|
||||
static func sidebarWidth(containerWidth: CGFloat, isDrawerLayout: Bool) -> CGFloat {
|
||||
if isDrawerLayout {
|
||||
return min(self.sidebarDrawerMaximumWidth, max(280, containerWidth * 0.86))
|
||||
return min(self.sidebarDrawerMaximumWidth, containerWidth * 0.86)
|
||||
}
|
||||
return min(self.sidebarSplitMaximumWidth, max(self.sidebarSplitIdealWidth, containerWidth * 0.25))
|
||||
}
|
||||
|
||||
static func sidebarContentOffset(
|
||||
sidebarWidth: CGFloat,
|
||||
isVisible: Bool,
|
||||
dragOffset: CGFloat,
|
||||
reduceMotion: Bool) -> CGFloat
|
||||
{
|
||||
guard !reduceMotion else { return 0 }
|
||||
if isVisible {
|
||||
return max(0, sidebarWidth + min(0, dragOffset))
|
||||
}
|
||||
// Closed: a positive drag is the interactive edge-open follow.
|
||||
return max(0, min(sidebarWidth, dragOffset))
|
||||
}
|
||||
|
||||
static func shouldShowSidebarRevealControl(isSidebarVisible: Bool) -> Bool {
|
||||
!isSidebarVisible
|
||||
}
|
||||
@@ -201,31 +178,6 @@ extension RootTabs {
|
||||
}
|
||||
}
|
||||
|
||||
static func shouldOpenRootTabFromPhoneHub(_ destination: SidebarDestination) -> Bool {
|
||||
switch destination {
|
||||
case .chat, .agents, .gateway, .settings:
|
||||
true
|
||||
case .overview, .activity, .workboard, .skillWorkshop, .instances, .sessions, .files,
|
||||
.dreaming,
|
||||
.usage,
|
||||
.cron, .terminal, .docs:
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
static func defaultSidebarDestination(for tab: AppTab) -> SidebarDestination {
|
||||
switch tab {
|
||||
case .control:
|
||||
.overview
|
||||
case .chat:
|
||||
.chat
|
||||
case .agent:
|
||||
.agents
|
||||
case .settings:
|
||||
.settings
|
||||
}
|
||||
}
|
||||
|
||||
enum StartupPresentationRoute: Equatable {
|
||||
case none
|
||||
case onboarding
|
||||
@@ -269,48 +221,51 @@ extension RootTabs {
|
||||
return discoveredGatewayCount > 0
|
||||
}
|
||||
|
||||
struct SidebarGroup: Identifiable {
|
||||
let title: String
|
||||
let destinations: [SidebarDestination]
|
||||
static let sidebarDestinations: [SidebarDestination] = [
|
||||
.chat,
|
||||
.overview,
|
||||
.workboard,
|
||||
.usage,
|
||||
.cron,
|
||||
.sessions,
|
||||
.activity,
|
||||
.skillWorkshop,
|
||||
.agents,
|
||||
.instances,
|
||||
.files,
|
||||
.dreaming,
|
||||
.terminal,
|
||||
.docs,
|
||||
]
|
||||
|
||||
var id: String {
|
||||
self.title
|
||||
/// Home (chat) is a fixed first row like the web sidebar; only these can be
|
||||
/// pinned/unpinned by the user.
|
||||
static let pinnableSidebarPages: [SidebarDestination] = sidebarDestinations.filter { $0 != .chat }
|
||||
|
||||
/// Echoes the web first-run Pages zone (Home, Usage, Automations, …):
|
||||
/// compact by default so sessions stay above the fold. The Sessions page is
|
||||
/// intentionally unpinned — the sessions section + "All Sessions…" own it.
|
||||
static let defaultPinnedSidebarPages: [SidebarDestination] = [.overview, .usage, .cron]
|
||||
|
||||
/// "" = never customized (defaults); "none" = user unpinned everything.
|
||||
/// Storage order is the user's pin order (web parity); unknown or
|
||||
/// unpinnable raw values are dropped.
|
||||
static func pinnedSidebarPages(from storage: String) -> [SidebarDestination] {
|
||||
let trimmed = storage.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if trimmed.isEmpty { return self.defaultPinnedSidebarPages }
|
||||
if trimmed == "none" { return [] }
|
||||
var seen = Set<String>()
|
||||
return trimmed.split(separator: ",").compactMap { raw in
|
||||
let value = String(raw)
|
||||
guard seen.insert(value).inserted,
|
||||
let destination = SidebarDestination(rawValue: value),
|
||||
self.pinnableSidebarPages.contains(destination)
|
||||
else { return nil }
|
||||
return destination
|
||||
}
|
||||
}
|
||||
|
||||
static let sidebarGroups: [SidebarGroup] = [
|
||||
SidebarGroup(title: "CHAT", destinations: [.chat]),
|
||||
SidebarGroup(
|
||||
title: "CONTROL",
|
||||
destinations: [
|
||||
.overview,
|
||||
.activity,
|
||||
.agents,
|
||||
.workboard,
|
||||
.skillWorkshop,
|
||||
.instances,
|
||||
.sessions,
|
||||
.files,
|
||||
.dreaming,
|
||||
.usage,
|
||||
.cron,
|
||||
.terminal,
|
||||
]),
|
||||
SidebarGroup(
|
||||
title: "SETTINGS",
|
||||
destinations: [.settings]),
|
||||
SidebarGroup(title: "REFERENCE", destinations: [.docs]),
|
||||
]
|
||||
|
||||
static var phoneControlGroups: [SidebarGroup] {
|
||||
// Agents owns a bottom tab and its hub entry duplicated the same destination.
|
||||
let tabOwned: Set<SidebarDestination> = [.agents]
|
||||
return self.sidebarGroups
|
||||
.map { group in
|
||||
SidebarGroup(
|
||||
title: group.title,
|
||||
destinations: group.destinations.filter { !tabOwned.contains($0) })
|
||||
}
|
||||
.filter { !$0.destinations.isEmpty }
|
||||
static func pinnedSidebarPagesStorage(_ pages: [SidebarDestination]) -> String {
|
||||
pages.isEmpty ? "none" : pages.map(\.rawValue).joined(separator: ",")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,13 +7,16 @@ import WebKit
|
||||
/// WKWebView, authenticated with the stored gateway credentials.
|
||||
struct TerminalHubScreen: View {
|
||||
@Environment(NodeAppModel.self) private var appModel
|
||||
let headerSidebarAction: OpenClawSidebarHeaderAction?
|
||||
let usesNativeNavigationChrome: Bool
|
||||
let gatewayAction: (() -> Void)?
|
||||
|
||||
init(
|
||||
headerSidebarAction: OpenClawSidebarHeaderAction? = nil,
|
||||
usesNativeNavigationChrome: Bool = false,
|
||||
gatewayAction: (() -> Void)? = nil)
|
||||
{
|
||||
self.headerSidebarAction = headerSidebarAction
|
||||
self.usesNativeNavigationChrome = usesNativeNavigationChrome
|
||||
self.gatewayAction = gatewayAction
|
||||
}
|
||||
@@ -41,7 +44,9 @@ struct TerminalHubScreen: View {
|
||||
}
|
||||
.navigationTitle("Terminal")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar(self.usesNativeNavigationChrome ? .visible : .hidden, for: .navigationBar)
|
||||
.toolbar(
|
||||
self.usesNativeNavigationChrome || self.headerSidebarAction != nil ? .visible : .hidden,
|
||||
for: .navigationBar)
|
||||
.toolbar {
|
||||
if self.usesNativeNavigationChrome, let gatewayAction {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
@@ -52,6 +57,11 @@ struct TerminalHubScreen: View {
|
||||
.accessibilityLabel("Gateway settings")
|
||||
}
|
||||
}
|
||||
if let headerSidebarAction {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
OpenClawSidebarRevealButton(action: headerSidebarAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,23 @@ import Testing
|
||||
import UIKit
|
||||
@testable import OpenClaw
|
||||
|
||||
struct RootSidebarTypographyTests {
|
||||
@Test func `root sidebar uses branded typography`() throws {
|
||||
let sidebar = try String(
|
||||
contentsOf: URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/RootSidebar.swift"),
|
||||
encoding: .utf8)
|
||||
|
||||
#expect(sidebar.contains("OpenClawType.headline"))
|
||||
#expect(sidebar.contains("OpenClawType.subheadSemiBold"))
|
||||
#expect(sidebar.contains("OpenClawType.captionMedium"))
|
||||
#expect(sidebar.contains("OpenClawType.caption2Bold"))
|
||||
#expect(!sidebar.contains(".font(."))
|
||||
}
|
||||
}
|
||||
|
||||
struct OpenClawTypographyTests {
|
||||
@Test func `thread controls use branded typography`() throws {
|
||||
let support = try String(
|
||||
@@ -222,7 +239,7 @@ struct OpenClawTypographyTests {
|
||||
#expect(proComponents.contains("secondaryActionTitle.text"))
|
||||
|
||||
#expect(chatTab.contains("Text(\"Export Transcript\")"))
|
||||
#expect(chatTab.contains("Text(String(localized: \"Threads…\"))"))
|
||||
#expect(chatTab.contains("Text(String(localized: \"Sessions…\"))"))
|
||||
#expect(chatTab.contains("Text(String(localized: \"Show reasoning & tool activity\"))"))
|
||||
#expect(chatTab.contains(".font(OpenClawType.body)"))
|
||||
#expect(!chatTab.contains("Button(\"Export Transcript\")"))
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import OpenClawChatUI
|
||||
import OpenClawProtocol
|
||||
import SwiftUI
|
||||
import Testing
|
||||
import UIKit
|
||||
@@ -5,6 +7,91 @@ import UIKit
|
||||
|
||||
@MainActor
|
||||
struct RootTabsPresentationTests {
|
||||
@Test func `session activity clamps current and future timestamps to just now`() {
|
||||
let now = Date(timeIntervalSince1970: 1_750_000_000)
|
||||
|
||||
#expect(CommandCenterTab.relativeTimeText(
|
||||
forMilliseconds: now.timeIntervalSince1970 * 1000,
|
||||
relativeTo: now) == "just now")
|
||||
#expect(CommandCenterTab.relativeTimeText(
|
||||
forMilliseconds: now.addingTimeInterval(30).timeIntervalSince1970 * 1000,
|
||||
relativeTo: now) == "just now")
|
||||
}
|
||||
|
||||
@Test func `dashboard deep link requests overview navigation`() async throws {
|
||||
let appModel = NodeAppModel()
|
||||
let initialRequestID = appModel.dashboardNavigationRequestID
|
||||
let url = try #require(URL(string: "openclaw://dashboard"))
|
||||
|
||||
await appModel.handleDeepLink(url: url)
|
||||
|
||||
#expect(appModel.dashboardNavigationRequestID == initialRequestID + 1)
|
||||
#expect(appModel.consumeDashboardNavigationRequest(appModel.dashboardNavigationRequestID))
|
||||
#expect(!appModel.consumeDashboardNavigationRequest(appModel.dashboardNavigationRequestID))
|
||||
}
|
||||
|
||||
@Test func `sidebar gateway label ignores empty identity values`() {
|
||||
#expect(RootSidebar.gatewayName(serverName: " ", remoteAddress: " gateway.example ") == "gateway.example")
|
||||
#expect(RootSidebar.gatewayName(serverName: "Gateway", remoteAddress: "fallback") == "Gateway")
|
||||
#expect(RootSidebar.gatewayName(serverName: nil, remoteAddress: "\n") == "Connection")
|
||||
}
|
||||
|
||||
@Test func `new chat request is consumed once by the active chat owner`() {
|
||||
let appModel = NodeAppModel()
|
||||
|
||||
appModel.requestNewChat()
|
||||
let firstRequestID = appModel.newChatRequestID
|
||||
#expect(appModel.consumeNewChatRequest(firstRequestID))
|
||||
#expect(!appModel.consumeNewChatRequest(firstRequestID))
|
||||
|
||||
appModel.requestNewChat()
|
||||
#expect(!appModel.consumeNewChatRequest(firstRequestID))
|
||||
#expect(appModel.consumeNewChatRequest(appModel.newChatRequestID))
|
||||
}
|
||||
|
||||
@Test func `overview session metrics exclude archived and internal sessions`() {
|
||||
let visible = CommandCenterTab.visibleOverviewSessions([
|
||||
Self.sessionEntry(key: "main"),
|
||||
Self.sessionEntry(key: "onboarding"),
|
||||
Self.sessionEntry(key: "agent:main:onboarding"),
|
||||
Self.sessionEntry(key: "archived", archived: true),
|
||||
])
|
||||
|
||||
#expect(visible.map(\.key) == ["main"])
|
||||
}
|
||||
|
||||
@Test func `overview token usage sums known totals and marks stale or missing rows partial`() {
|
||||
let summary = RootSidebarModel.tokenUsageSummary(for: [
|
||||
Self.sessionEntry(key: "fresh", totalTokens: 1200, totalTokensFresh: true, contextTokens: 200_000),
|
||||
Self.sessionEntry(key: "stale", totalTokens: 300, totalTokensFresh: false, contextTokens: 200_000),
|
||||
Self.sessionEntry(key: "missing", contextTokens: 200_000),
|
||||
])
|
||||
let complete = RootSidebarModel.tokenUsageSummary(for: [
|
||||
Self.sessionEntry(key: "one", totalTokens: 20, totalTokensFresh: true),
|
||||
Self.sessionEntry(key: "two", totalTokens: 80),
|
||||
])
|
||||
let unknown = RootSidebarModel.tokenUsageSummary(for: [Self.sessionEntry(key: "unknown")])
|
||||
|
||||
#expect(summary.total == 1500)
|
||||
#expect(summary.isPartial)
|
||||
#expect(complete.total == 100)
|
||||
#expect(!complete.isPartial)
|
||||
#expect(unknown.total == nil)
|
||||
#expect(unknown.isPartial)
|
||||
}
|
||||
|
||||
@Test func `failed cron attention ignores disabled jobs`() {
|
||||
#expect(RootSidebarModel.isFailedCronJob(Self.cronJob(enabled: true, status: "error")))
|
||||
#expect(!RootSidebarModel.isFailedCronJob(Self.cronJob(enabled: false, status: "error")))
|
||||
#expect(!RootSidebarModel.isFailedCronJob(Self.cronJob(enabled: true, status: "ok")))
|
||||
}
|
||||
|
||||
@Test func `recent session cap is disabled while search is active`() {
|
||||
#expect(RootSidebar.recentSessionCap(searchText: "") == 20)
|
||||
#expect(RootSidebar.recentSessionCap(searchText: " \n") == 20)
|
||||
#expect(RootSidebar.recentSessionCap(searchText: "deploy") == nil)
|
||||
}
|
||||
|
||||
@Test func `configured gateway bypasses launch request and stale onboarding markers`() {
|
||||
let route = RootTabs.startupPresentationRoute(
|
||||
gatewayConnected: false,
|
||||
@@ -74,49 +161,25 @@ struct RootTabsPresentationTests {
|
||||
#expect(!shouldPresent)
|
||||
}
|
||||
|
||||
@Test func `sidebar tabs enabled for I pad regular width`() {
|
||||
#expect(
|
||||
RootTabs.shouldUseSidebarTabs(
|
||||
idiom: .pad,
|
||||
horizontalSizeClass: .regular))
|
||||
}
|
||||
|
||||
@Test func `sidebar tabs enabled for I pad compact width`() {
|
||||
#expect(
|
||||
RootTabs.shouldUseSidebarTabs(
|
||||
idiom: .pad,
|
||||
horizontalSizeClass: .compact))
|
||||
}
|
||||
|
||||
@Test func `sidebar tabs disabled for I phone`() {
|
||||
#expect(
|
||||
!RootTabs.shouldUseSidebarTabs(
|
||||
idiom: .phone,
|
||||
horizontalSizeClass: .regular))
|
||||
}
|
||||
|
||||
@Test func `sidebar groups match adaptive navigation model`() {
|
||||
let groups = RootTabs.sidebarGroups
|
||||
@Test func `sidebar destinations match frozen page order`() {
|
||||
let destinationIDs = RootTabs.SidebarDestination.allCases.map(\.rawValue)
|
||||
|
||||
#expect(groups.map(\.title) == ["CHAT", "CONTROL", "SETTINGS", "REFERENCE"])
|
||||
#expect(groups[0].destinations.map(\.rawValue) == ["chat"])
|
||||
#expect(groups[1].destinations == [
|
||||
#expect(RootTabs.sidebarDestinations == [
|
||||
.chat,
|
||||
.overview,
|
||||
.activity,
|
||||
.agents,
|
||||
.workboard,
|
||||
.skillWorkshop,
|
||||
.instances,
|
||||
.sessions,
|
||||
.files,
|
||||
.dreaming,
|
||||
.usage,
|
||||
.cron,
|
||||
.sessions,
|
||||
.activity,
|
||||
.skillWorkshop,
|
||||
.agents,
|
||||
.instances,
|
||||
.files,
|
||||
.dreaming,
|
||||
.terminal,
|
||||
.docs,
|
||||
])
|
||||
#expect(groups[2].destinations == [.settings])
|
||||
#expect(groups[3].destinations == [.docs])
|
||||
#expect(destinationIDs == [
|
||||
"chat",
|
||||
"overview",
|
||||
@@ -136,18 +199,9 @@ struct RootTabsPresentationTests {
|
||||
"gateway",
|
||||
])
|
||||
#expect(!destinationIDs.contains("agent"))
|
||||
#expect(!RootTabs.sidebarGroups.flatMap(\.destinations).contains(.gateway))
|
||||
}
|
||||
|
||||
@Test func `phone control groups avoid duplicating the agent tab`() {
|
||||
let groups = RootTabs.phoneControlGroups
|
||||
let destinations = groups.flatMap(\.destinations)
|
||||
|
||||
#expect(groups.map(\.title) == ["CHAT", "CONTROL", "SETTINGS", "REFERENCE"])
|
||||
#expect(!destinations.contains(.agents))
|
||||
#expect(RootTabs.sidebarGroups.flatMap(\.destinations).contains(.agents))
|
||||
#expect(destinations.contains(.dreaming))
|
||||
#expect(destinations.contains(.instances))
|
||||
#expect(RootTabs.sidebarDestinations.contains(.chat))
|
||||
#expect(!RootTabs.sidebarDestinations.contains(.settings))
|
||||
#expect(!RootTabs.sidebarDestinations.contains(.gateway))
|
||||
}
|
||||
|
||||
@Test func `sidebar uses compact labels for long routes`() {
|
||||
@@ -156,56 +210,38 @@ struct RootTabsPresentationTests {
|
||||
#expect(RootTabs.SidebarDestination.gateway.sidebarTitle == "Connection")
|
||||
}
|
||||
|
||||
@Test func `phone hub routes only root destinations out of Control`() {
|
||||
#expect(RootTabs.shouldOpenRootTabFromPhoneHub(.chat))
|
||||
#expect(RootTabs.shouldOpenRootTabFromPhoneHub(.agents))
|
||||
#expect(RootTabs.shouldOpenRootTabFromPhoneHub(.gateway))
|
||||
#expect(RootTabs.shouldOpenRootTabFromPhoneHub(.settings))
|
||||
|
||||
for destination in RootTabs.SidebarDestination.allCases
|
||||
where destination != .chat && destination != .agents && destination != .gateway &&
|
||||
destination != .settings
|
||||
{
|
||||
#expect(!RootTabs.shouldOpenRootTabFromPhoneHub(destination))
|
||||
}
|
||||
}
|
||||
|
||||
@Test func `app launch defaults to chat tab`() {
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "unknown"]) == .chat)
|
||||
@Test func `app launch defaults to chat destination`() {
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw"]) == .chat)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab"]) == .chat)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "unknown"]) == .chat)
|
||||
}
|
||||
|
||||
@Test func `app launch uses requested destination before chat fallback`() {
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-destination", "overview"]) == .control)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-destination", "chat"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-destination", "agents"]) == .agent)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-destination", "gateway"]) == .settings)
|
||||
#expect(RootTabs
|
||||
.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-destination", "overview"]) == .overview)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-destination", "chat"]) == .chat)
|
||||
#expect(RootTabs
|
||||
.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-destination", "agents"]) == .agents)
|
||||
#expect(RootTabs
|
||||
.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-destination", "gateway"]) == .gateway)
|
||||
#expect(
|
||||
RootTabs.initialTab(arguments: [
|
||||
RootTabs.initialDestination(arguments: [
|
||||
"OpenClaw",
|
||||
"--openclaw-initial-tab",
|
||||
"unknown",
|
||||
"--openclaw-initial-destination",
|
||||
"activity",
|
||||
]) == .control)
|
||||
]) == .activity)
|
||||
}
|
||||
|
||||
@Test func `app launch respects explicit initial tab override`() {
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "control"]) == .control)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "overview"]) == .control)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "chat"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "talk"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "voice"]) == .chat)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "agents"]) == .agent)
|
||||
#expect(RootTabs.initialTab(arguments: ["OpenClaw", "--openclaw-initial-tab", "settings"]) == .settings)
|
||||
}
|
||||
|
||||
@Test func `initial tabs map to matching sidebar destinations`() {
|
||||
#expect(RootTabs.defaultSidebarDestination(for: .control) == .overview)
|
||||
#expect(RootTabs.defaultSidebarDestination(for: .chat) == .chat)
|
||||
#expect(RootTabs.defaultSidebarDestination(for: .agent) == .agents)
|
||||
#expect(RootTabs.defaultSidebarDestination(for: .settings) == .settings)
|
||||
@Test func `legacy initial tab aliases map directly to sidebar destinations`() {
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "control"]) == .overview)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "overview"]) == .overview)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "chat"]) == .chat)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "talk"]) == .chat)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "voice"]) == .chat)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "agents"]) == .agents)
|
||||
#expect(RootTabs.initialDestination(arguments: ["OpenClaw", "--openclaw-initial-tab", "settings"]) == .settings)
|
||||
}
|
||||
|
||||
@Test func `skill workshop mutations require admin scope`() {
|
||||
@@ -538,6 +574,94 @@ struct RootTabsPresentationTests {
|
||||
#expect(width <= RootTabs.sidebarDrawerMaximumWidth)
|
||||
}
|
||||
|
||||
@Test func `sidebar shows configured agent rows with sane clamping`() {
|
||||
#expect(RootSidebar.shownAgentCount(configured: 1, total: 5) == 1)
|
||||
#expect(RootSidebar.shownAgentCount(configured: 3, total: 5) == 3)
|
||||
#expect(RootSidebar.shownAgentCount(configured: 0, total: 5) == 1)
|
||||
#expect(RootSidebar.shownAgentCount(configured: 3, total: 2) == 2)
|
||||
#expect(RootSidebar.shownAgentCount(configured: 1, total: 0) == 1)
|
||||
}
|
||||
|
||||
@Test func `session work subtitle mirrors the web repo and branch line`() {
|
||||
func entry(repoRoot: String?, branch: String?) -> OpenClawChatSessionEntry {
|
||||
Self.sessionEntry(
|
||||
key: "agent:main:w1",
|
||||
worktree: OpenClawChatSessionWorktree(id: "w1", branch: branch, repoRoot: repoRoot))
|
||||
}
|
||||
#expect(ChatSessionSidebarModel.workSubtitle(
|
||||
for: entry(repoRoot: "/Users/dev/openclaw", branch: "openclaw/fix-thing")) == "openclaw \u{2387} fix-thing")
|
||||
#expect(ChatSessionSidebarModel.workSubtitle(
|
||||
for: entry(repoRoot: "/Users/dev/openclaw", branch: nil)) == "openclaw")
|
||||
#expect(ChatSessionSidebarModel.workSubtitle(for: entry(repoRoot: nil, branch: "main")) == nil)
|
||||
#expect(ChatSessionSidebarModel.workSubtitle(for: Self.sessionEntry(key: "plain")) == nil)
|
||||
}
|
||||
|
||||
@Test func `pinned pages storage round trips and preserves pin order`() {
|
||||
#expect(RootTabs.pinnedSidebarPages(from: "") == RootTabs.defaultPinnedSidebarPages)
|
||||
#expect(RootTabs.pinnedSidebarPages(from: "none").isEmpty)
|
||||
#expect(RootTabs.pinnedSidebarPagesStorage([]) == "none")
|
||||
|
||||
// Storage order is the user's pin order (web parity).
|
||||
let parsed = RootTabs.pinnedSidebarPages(from: "usage,overview,docs")
|
||||
#expect(parsed == [.usage, .overview, .docs])
|
||||
|
||||
let storage = RootTabs.pinnedSidebarPagesStorage([.docs, .overview, .usage])
|
||||
#expect(RootTabs.pinnedSidebarPages(from: storage) == [.docs, .overview, .usage])
|
||||
|
||||
// Duplicates collapse to first occurrence.
|
||||
#expect(RootTabs.pinnedSidebarPages(from: "usage,usage,docs") == [.usage, .docs])
|
||||
|
||||
// Unknown raw values are dropped; chat is never pinnable.
|
||||
#expect(RootTabs.pinnedSidebarPages(from: "chat,bogus").isEmpty)
|
||||
#expect(!RootTabs.pinnedSidebarPages(from: "chat,overview").contains(.chat))
|
||||
#expect(!RootTabs.pinnableSidebarPages.contains(.chat))
|
||||
}
|
||||
|
||||
@Test func `drawer content follows reveal and dismiss drag`() {
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: false,
|
||||
dragOffset: 0,
|
||||
reduceMotion: false) == 0)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: true,
|
||||
dragOffset: 0,
|
||||
reduceMotion: false) == 340)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: true,
|
||||
dragOffset: -120,
|
||||
reduceMotion: false) == 220)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: true,
|
||||
dragOffset: -400,
|
||||
reduceMotion: false) == 0)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: true,
|
||||
dragOffset: 40,
|
||||
reduceMotion: true) == 0)
|
||||
|
||||
// Closed + positive drag = interactive edge-open follow, clamped to width.
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: false,
|
||||
dragOffset: 120,
|
||||
reduceMotion: false) == 120)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: false,
|
||||
dragOffset: 500,
|
||||
reduceMotion: false) == 340)
|
||||
#expect(RootTabs.sidebarContentOffset(
|
||||
sidebarWidth: 340,
|
||||
isVisible: false,
|
||||
dragOffset: 120,
|
||||
reduceMotion: true) == 0)
|
||||
}
|
||||
|
||||
@Test func `narrow landscape keeps drawer sidebar`() {
|
||||
let mode = RootTabs.sidebarLayoutMode(containerSize: CGSize(width: 900, height: 600))
|
||||
|
||||
@@ -613,4 +737,52 @@ struct RootTabsPresentationTests {
|
||||
horizontalSizeClass: .regular,
|
||||
verticalSizeClass: .regular))
|
||||
}
|
||||
|
||||
private static func sessionEntry(
|
||||
key: String,
|
||||
archived: Bool? = nil,
|
||||
totalTokens: Int? = nil,
|
||||
totalTokensFresh: Bool? = nil,
|
||||
contextTokens: Int? = nil,
|
||||
worktree: OpenClawChatSessionWorktree? = nil) -> OpenClawChatSessionEntry
|
||||
{
|
||||
OpenClawChatSessionEntry(
|
||||
key: key,
|
||||
kind: nil,
|
||||
displayName: nil,
|
||||
surface: nil,
|
||||
subject: nil,
|
||||
room: nil,
|
||||
space: nil,
|
||||
updatedAt: nil,
|
||||
sessionId: nil,
|
||||
systemSent: nil,
|
||||
abortedLastRun: nil,
|
||||
thinkingLevel: nil,
|
||||
verboseLevel: nil,
|
||||
inputTokens: nil,
|
||||
outputTokens: nil,
|
||||
totalTokens: totalTokens,
|
||||
totalTokensFresh: totalTokensFresh,
|
||||
modelProvider: nil,
|
||||
model: nil,
|
||||
contextTokens: contextTokens,
|
||||
archived: archived,
|
||||
worktree: worktree)
|
||||
}
|
||||
|
||||
private static func cronJob(enabled: Bool, status: String) -> CronJob {
|
||||
CronJob(
|
||||
id: "sidebar-test",
|
||||
name: "Sidebar test",
|
||||
enabled: enabled,
|
||||
createdatms: 1,
|
||||
updatedatms: 1,
|
||||
schedule: AnyCodable(["kind": AnyCodable("every")]),
|
||||
sessiontarget: AnyCodable("isolated"),
|
||||
wakemode: AnyCodable("now"),
|
||||
payload: AnyCodable(["kind": AnyCodable("agentTurn")]),
|
||||
state: [:],
|
||||
lastrunstatus: AnyCodable(status))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import Foundation
|
||||
import Testing
|
||||
|
||||
@Suite struct RootTabsSidebarRegressionTests {
|
||||
@Test func iPadSplitHiddenSidebarUsesHeaderRevealInsteadOfReservedRail() throws {
|
||||
struct RootTabsSidebarRegressionTests {
|
||||
@Test func `i pad split hidden sidebar uses header reveal instead of reserved rail`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let navigationSource = try String(contentsOf: Self.rootTabsNavigationSourceURL(), encoding: .utf8)
|
||||
let splitContent = try Self.extract(
|
||||
source,
|
||||
from: "private func sidebarNavigationSplitContent(sidebarWidth: CGFloat) -> some View",
|
||||
to: "private func sidebarDrawerContent(sidebarWidth: CGFloat) -> some View")
|
||||
to: "private func sidebarDrawerContent(")
|
||||
|
||||
#expect(splitContent.contains("HStack(spacing: 0)"))
|
||||
#expect(splitContent.contains("self.sidebarColumn"))
|
||||
@@ -28,7 +28,7 @@ import Testing
|
||||
.contains("static func sidebarIsVisible(splitColumnVisibility: NavigationSplitViewVisibility)"))
|
||||
}
|
||||
|
||||
@Test func initialSidebarVisibilitySurvivesFirstLayoutMeasurement() throws {
|
||||
@Test func `initial sidebar visibility survives first layout measurement`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let layoutUpdate = try Self.extract(
|
||||
source,
|
||||
@@ -42,23 +42,50 @@ import Testing
|
||||
#expect(layoutUpdate.contains("guard force || !self.sidebarVisibilityUserOverridden else { return }"))
|
||||
}
|
||||
|
||||
@Test func drawerDimmingLayerDoesNotStealSidebarTouches() throws {
|
||||
@Test func `push reveal keeps sidebar behind an interactive dismissal card`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let drawerContent = try Self.extract(
|
||||
source,
|
||||
from: "private func sidebarDrawerContent(sidebarWidth: CGFloat) -> some View",
|
||||
from: "private func sidebarDrawerContent(",
|
||||
to: "private var sidebarDetailShell: some View")
|
||||
|
||||
#expect(drawerContent.contains("HStack(spacing: 0)"))
|
||||
#expect(drawerContent.contains("Color.clear"))
|
||||
#expect(drawerContent.contains(".frame(width: sidebarWidth)"))
|
||||
#expect(drawerContent.contains(".allowsHitTesting(false)"))
|
||||
#expect(drawerContent.contains("Color.black.opacity(0.28)"))
|
||||
#expect(drawerContent.contains(".zIndex(0)"))
|
||||
#expect(drawerContent.contains(".zIndex(1)"))
|
||||
let sidebarLayer = try Self.extract(
|
||||
drawerContent,
|
||||
from: "private func sidebarDrawerLayer(",
|
||||
to: "private func sidebarDrawerContentSurface(")
|
||||
let contentSurface = try Self.extract(
|
||||
drawerContent,
|
||||
from: "private func sidebarDrawerContentSurface(",
|
||||
to: "private func sidebarDrawerContentCard(")
|
||||
let contentCardStart = try #require(
|
||||
drawerContent.range(of: "private func sidebarDrawerContentCard("))
|
||||
let contentCard = String(drawerContent[contentCardStart.lowerBound...])
|
||||
|
||||
#expect(drawerContent.contains("ZStack(alignment: .leading)"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerLayer"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerContentSurface"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerContentCard"))
|
||||
#expect(drawerContent.contains(".background(OpenClawSidebarPalette.background)"))
|
||||
#expect(!drawerContent.contains("Color.black.opacity(0.35)"))
|
||||
#expect(!sidebarLayer.contains(".clipShape"))
|
||||
#expect(!sidebarLayer.contains(".shadow"))
|
||||
#expect(drawerContent.contains("self.sidebarColumn(drawerSafeAreaInsets: safeAreaInsets)"))
|
||||
#expect(sidebarLayer.contains(".ignoresSafeArea(.container, edges: .vertical)"))
|
||||
#expect(contentSurface.contains(".fill(Color(uiColor: .systemGroupedBackground))"))
|
||||
#expect(contentSurface.contains(".ignoresSafeArea(.container, edges: .vertical)"))
|
||||
#expect(contentSurface.contains(".shadow("))
|
||||
#expect(contentSurface.contains(".offset(x: Self.sidebarContentOffset("))
|
||||
#expect(contentCard.contains(".allowsHitTesting(!self.isSidebarVisible)"))
|
||||
#expect(contentCard.contains("if self.isSidebarVisible {"))
|
||||
#expect(contentCard.contains("self.hideSidebar()"))
|
||||
#expect(contentCard.contains("isEnabled: self.isSidebarVisible && !self.reduceMotion"))
|
||||
#expect(contentCard.contains("cornerRadius: OpenClawProMetric.drawerRadius * progress"))
|
||||
#expect(contentCard.contains(".offset(x: Self.sidebarContentOffset("))
|
||||
#expect(!contentCard.contains("OpenClawProBackground()"))
|
||||
#expect(!contentCard.contains(".shadow("))
|
||||
}
|
||||
|
||||
@Test func sidebarSelectionResetsEmbeddedSettingsNavigationPath() throws {
|
||||
@Test func `sidebar selection resets embedded settings navigation path`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let sidebarDetail = try Self.extract(
|
||||
source,
|
||||
@@ -67,11 +94,11 @@ import Testing
|
||||
let navigationShell = try Self.extract(
|
||||
source,
|
||||
from: "private var sidebarDetailNavigationShell: some View",
|
||||
to: "private var usesSidebarTabs: Bool")
|
||||
to: "private var sidebarDetailShellID: String")
|
||||
let selection = try Self.extract(
|
||||
source,
|
||||
from: "private func selectSidebarDestination(",
|
||||
to: "private func showSidebar()")
|
||||
to: "private func handleOpenChatRequest(")
|
||||
let resetRange = try #require(selection.range(of: "self.sidebarNavigationPath.removeAll()"))
|
||||
let destinationRange = try #require(selection.range(of: "self.selectedSidebarDestination = destination"))
|
||||
|
||||
@@ -82,10 +109,9 @@ import Testing
|
||||
#expect(resetRange.lowerBound < destinationRange.lowerBound)
|
||||
}
|
||||
|
||||
@Test func embeddedOverviewRoutesViewMoreThroughOwningNavigationStack() throws {
|
||||
@Test func `embedded overview routes view more through owning navigation stack`() throws {
|
||||
let rootTabsSource = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let commandCenterSource = try String(contentsOf: Self.commandCenterSourceURL(), encoding: .utf8)
|
||||
let phoneHubSource = try String(contentsOf: Self.phoneHubSourceURL(), encoding: .utf8)
|
||||
let sidebarDetail = try Self.extract(
|
||||
rootTabsSource,
|
||||
from: "private var sidebarDetail: some View",
|
||||
@@ -95,14 +121,11 @@ import Testing
|
||||
commandCenterSource,
|
||||
from: "private var recentSessions: some View",
|
||||
to: "private func cardHeader(")
|
||||
let phoneOverview = try Self.extract(phoneHubSource, from: "case .overview:", to: "case .activity:")
|
||||
|
||||
#expect(commandCenterSource.contains("var openSessions: (() -> Void)?"))
|
||||
#expect(recentSessions.contains("if let openSessions"))
|
||||
#expect(recentSessions.contains("Button(action: openSessions)"))
|
||||
#expect(recentSessions.contains("NavigationLink"))
|
||||
#expect(iPadOverview.contains("openSessions: { self.selectSidebarDestination(.sessions) }"))
|
||||
#expect(phoneOverview.contains("openSessions: { self.navigationPath.append(.sessions) }"))
|
||||
}
|
||||
|
||||
private static func rootTabsSourceURL() -> URL {
|
||||
@@ -126,13 +149,6 @@ import Testing
|
||||
.appendingPathComponent("Sources/Design/CommandCenterTab.swift")
|
||||
}
|
||||
|
||||
private static func phoneHubSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/Design/RootTabsPhoneControlHub.swift")
|
||||
}
|
||||
|
||||
private static func extract(_ source: String, from start: String, to end: String) throws -> String {
|
||||
let startRange = try #require(source.range(of: start))
|
||||
let tail = source[startRange.lowerBound...]
|
||||
|
||||
@@ -121,7 +121,7 @@ extension RootTabsSourceGuardTests {
|
||||
#expect(settingsSource.contains("let acceptsGatewaySetupRequests: Bool"))
|
||||
#expect(settingsSource.contains("guard self.acceptsGatewaySetupRequests else { return }"))
|
||||
#expect(settingsSource.contains(".onChange(of: self.acceptsGatewaySetupRequests)"))
|
||||
#expect(rootSource.matches(of: /acceptsGatewaySetupRequests: !self\.showOnboarding/).count == 2)
|
||||
#expect(rootSource.matches(of: /acceptsGatewaySetupRequests: !self\.showOnboarding/).count == 1)
|
||||
#expect(actionsSource.contains("func syncAfterOnboardingReset()"))
|
||||
#expect(actionsSource.contains("self.pendingManualAuthOverride = nil"))
|
||||
// The root toast is the only gateway problem surface outside covers, so it
|
||||
|
||||
@@ -4,15 +4,6 @@ import Testing
|
||||
@testable import OpenClaw
|
||||
|
||||
struct RootTabsSourceGuardTests {
|
||||
@Test func `unified chat voice tab icon cache follows appearance`() {
|
||||
let light = UnifiedChatVoiceTabIcon.CacheKey(state: .active, colorScheme: .light)
|
||||
let sameLight = UnifiedChatVoiceTabIcon.CacheKey(state: .active, colorScheme: .light)
|
||||
let dark = UnifiedChatVoiceTabIcon.CacheKey(state: .active, colorScheme: .dark)
|
||||
|
||||
#expect(light == sameLight)
|
||||
#expect(light != dark)
|
||||
}
|
||||
|
||||
@Test func `app applies initial scene phase before gateway admission`() throws {
|
||||
let source = try String(contentsOf: Self.openClawAppSourceURL(), encoding: .utf8)
|
||||
let startupTask = try Self.extract(
|
||||
@@ -32,13 +23,14 @@ struct RootTabsSourceGuardTests {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let componentSource = try String(contentsOf: Self.proComponentsSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source.contains("sidebarHeaderLeadingAction"))
|
||||
#expect(source.contains("sidebarHeaderAction"))
|
||||
#expect(source.contains("Hide Sidebar"))
|
||||
#expect(source.contains("Show Sidebar"))
|
||||
#expect(source.contains("shouldShowSidebarRevealInDestinationHeader"))
|
||||
#expect(source.contains("layoutMode: self.isSidebarDrawerLayout ? .drawer : .split"))
|
||||
#expect(componentSource.contains("OpenClawSidebarHeaderLeadingSlot"))
|
||||
#expect(componentSource.contains(".frame(width: 44, height: 44, alignment: .center)"))
|
||||
#expect(componentSource.contains(".frame(width: 44, height: 44)"))
|
||||
#expect(source.contains(".safeAreaPadding(.top, 8)"))
|
||||
#expect(source.contains("Self.sidebarShowButtonAccessibilityIdentifier"))
|
||||
#expect(source.contains("Self.sidebarHideButtonAccessibilityIdentifier"))
|
||||
@@ -57,22 +49,22 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(!source.contains("safeAreaInset(edge: .top"))
|
||||
#expect(!source.contains("thinMaterial, in: Circle"))
|
||||
#expect(!source.contains("sidebarRevealInset"))
|
||||
#expect(source.contains("Color.black.opacity(0.28)"))
|
||||
#expect(source.contains(".background(Color(uiColor: .systemBackground))"))
|
||||
#expect(source.contains(".background(OpenClawSidebarPalette.background)"))
|
||||
#expect(!source.contains("Color.black.opacity(0.35)"))
|
||||
#expect(!source.contains("sidebarRevealCornerButton"))
|
||||
#expect(!source.contains("shouldShowSidebarRevealOverlay"))
|
||||
#expect(!source.contains("shouldShowOverviewHeaderSidebarReveal"))
|
||||
}
|
||||
|
||||
@Test func `i pad split uses sliding sidebar while portrait keeps drawer overlay`() throws {
|
||||
@Test func `i pad split stays integrated while compact drawer uses push reveal`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let splitContent = try Self.extract(
|
||||
source,
|
||||
from: "private func sidebarNavigationSplitContent(sidebarWidth: CGFloat) -> some View",
|
||||
to: "private func sidebarDrawerContent(sidebarWidth: CGFloat) -> some View")
|
||||
to: "private func sidebarDrawerContent(")
|
||||
let drawerContent = try Self.extract(
|
||||
source,
|
||||
from: "private func sidebarDrawerContent(sidebarWidth: CGFloat) -> some View",
|
||||
from: "private func sidebarDrawerContent(",
|
||||
to: "private var sidebarDetailShell: some View")
|
||||
|
||||
#expect(!source.contains("@State private var splitColumnVisibility: NavigationSplitViewVisibility"))
|
||||
@@ -87,46 +79,34 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(!splitContent.contains("NavigationSplitView"))
|
||||
#expect(!splitContent.contains("self.collapsedSidebarRail"))
|
||||
#expect(!source.contains("Self.sidebarCollapsedRailWidth"))
|
||||
#expect(drawerContent.contains("ZStack(alignment: .topLeading)"))
|
||||
#expect(drawerContent.contains("Color.black.opacity(0.28)"))
|
||||
#expect(drawerContent.contains(".transition(.move(edge: .leading).combined(with: .opacity))"))
|
||||
#expect(drawerContent.contains("ZStack(alignment: .leading)"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerLayer"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerContentSurface"))
|
||||
#expect(drawerContent.contains("self.sidebarDrawerContentCard"))
|
||||
#expect(drawerContent.contains("self.sidebarContentDismissGesture(sidebarWidth: sidebarWidth)"))
|
||||
#expect(drawerContent.contains(".allowsHitTesting(!self.isSidebarVisible)"))
|
||||
#expect(drawerContent.contains(".clipShape(RoundedRectangle("))
|
||||
#expect(drawerContent.contains("cornerRadius: OpenClawProMetric.drawerRadius * progress"))
|
||||
#expect(drawerContent.contains(".offset(x: Self.sidebarContentOffset("))
|
||||
#expect(drawerContent.contains(".shadow("))
|
||||
#expect(drawerContent.contains(".fill(Color(uiColor: .systemGroupedBackground))"))
|
||||
#expect(drawerContent.contains(".ignoresSafeArea(.container, edges: .vertical)"))
|
||||
#expect(!drawerContent.contains("Color.black.opacity(0.35)"))
|
||||
#expect(!drawerContent.contains("UnevenRoundedRectangle"))
|
||||
#expect(!drawerContent.contains("sidebarDrawerShape"))
|
||||
#expect(!drawerContent.contains("NavigationSplitView"))
|
||||
}
|
||||
|
||||
@Test func `phone tab bar keeps chat control agent and settings in product order`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let phoneTabContent = try Self.extract(
|
||||
source,
|
||||
from: "private var phoneTabContent: some View",
|
||||
to: "extension RootTabs {\n private func updateCanvasState")
|
||||
|
||||
let chatRange = try #require(phoneTabContent.range(of: "ChatProTab("))
|
||||
let controlRange = try #require(phoneTabContent.range(of: "RootTabsPhoneControlHub("))
|
||||
let agentRange = try #require(phoneTabContent.range(of: "AgentProTab("))
|
||||
let settingsRange = try #require(phoneTabContent.range(of: "SettingsProTab("))
|
||||
|
||||
#expect(chatRange.lowerBound < controlRange.lowerBound)
|
||||
#expect(controlRange.lowerBound < agentRange.lowerBound)
|
||||
#expect(agentRange.lowerBound < settingsRange.lowerBound)
|
||||
#expect(!phoneTabContent.contains("TalkProTab("))
|
||||
#expect(!phoneTabContent.contains(".tag(AppTab.talk)"))
|
||||
#expect(phoneTabContent.contains("UnifiedChatVoiceTabIcon.image("))
|
||||
#expect(phoneTabContent.contains("state: self.phoneChatVoiceIconState"))
|
||||
#expect(!phoneTabContent.contains("micLevel"))
|
||||
#expect(!phoneTabContent.contains("playbackLevel"))
|
||||
#expect(phoneTabContent.contains("self.appModel.talkMode.isEnabled ? \"Chat, voice active\" : \"Chat\""))
|
||||
#expect(!phoneTabContent.contains("Label(\"Chat\", systemImage: \"bubble.left.fill\")"))
|
||||
#expect(phoneTabContent.matches(of: /PhoneTabSettingsHost(?:\([^\n]+\))? \{/).count == 2)
|
||||
}
|
||||
|
||||
@Test func `phone chat keeps one composer voice control without a tab bar accessory`() throws {
|
||||
@Test func `unified root shell removes phone tab chrome`() throws {
|
||||
let rootSource = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let chromeSource = try String(contentsOf: Self.rootTabsPhoneChromeSourceURL(), encoding: .utf8)
|
||||
let chatSource = try String(contentsOf: Self.chatProTabSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(!rootSource.contains("TabView("))
|
||||
#expect(!rootSource.contains("AppTab"))
|
||||
#expect(!rootSource.contains("RootTabsPhoneControlHub"))
|
||||
#expect(!rootSource.contains("PhoneTabSettingsHost"))
|
||||
#expect(!rootSource.contains("tabViewBottomAccessory"))
|
||||
#expect(!rootSource.contains("PhoneVoiceTabAccessory"))
|
||||
#expect(!chromeSource.contains("PhoneVoiceTabAccessory"))
|
||||
#expect(chatSource.contains("talkControl: Self.shouldExposeCaptureControl("))
|
||||
#expect(chatSource.contains("private var talkControl: OpenClawChatTalkControl"))
|
||||
#expect(chatSource.contains("self.appModel.setTalkEnabled(!self.appModel.talkMode.isEnabled)"))
|
||||
@@ -151,50 +131,133 @@ struct RootTabsSourceGuardTests {
|
||||
}
|
||||
|
||||
@Test func `sidebar keeps navigation model destination only`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let rootSource = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let source = try String(contentsOf: Self.rootSidebarSourceURL(), encoding: .utf8)
|
||||
let navigationSource = try String(contentsOf: Self.rootTabsNavigationSourceURL(), encoding: .utf8)
|
||||
let sidebarColumn = try Self.extract(
|
||||
source,
|
||||
from: "private var sidebarColumn: some View",
|
||||
to: "private var sidebarList: some View")
|
||||
|
||||
#expect(source.contains("ForEach(Self.sidebarGroups)"))
|
||||
#expect(!source.contains("Section(\"Context\")"))
|
||||
#expect(!source.contains("sidebarAgentMenu"))
|
||||
#expect(!source.contains("sidebarDeviceMenu"))
|
||||
#expect(sidebarColumn.contains("self.sidebarIdentityHeader"))
|
||||
#expect(source.contains("private var sidebarIdentityHeader: some View"))
|
||||
#expect(source.contains("OpenClawProMark(size: 30"))
|
||||
#expect(source.contains("Text(\"OpenClaw\")"))
|
||||
#expect(source.contains("private var sidebarGatewayStatusTitle: String"))
|
||||
#expect(source.contains("private var sidebarGatewayStatusColor: Color"))
|
||||
#expect(!sidebarColumn.contains("activeAgent"))
|
||||
#expect(!source.contains("shouldShowSidebarColumnHeader"))
|
||||
#expect(!source.contains("private var sidebarColumnHeader: some View"))
|
||||
#expect(sidebarColumn.contains(".safeAreaPadding(.top, 8)"))
|
||||
#expect(source.contains(".scrollContentBackground(.hidden)"))
|
||||
#expect(source.contains(".listStyle(.sidebar)"))
|
||||
#expect(source.contains("private var sidebarHorizontalSeparator: some View"))
|
||||
#expect(source.contains("private var sidebarVerticalSeparator: some View"))
|
||||
#expect(source.contains("1 / UIScreen.main.scale"))
|
||||
#expect(!source.contains("geometry.size.height >= Self.sidebarListNonScrollingMinimumHeight"))
|
||||
#expect(!source.contains("private var sidebarListContent: some View"))
|
||||
#expect(source.contains(".listRowSeparator(.hidden, edges: .all)"))
|
||||
#expect(source.contains(".listSectionSeparator(.hidden, edges: .all)"))
|
||||
#expect(source.contains("if self.isSidebarDrawerLayout {"))
|
||||
#expect(!source.contains("private var sidebarFooter: some View"))
|
||||
#expect(!source.contains("LabeledContent(\"Version\""))
|
||||
#expect(navigationSource.contains("SidebarGroup(title: \"CHAT\", destinations: [.chat])"))
|
||||
#expect(rootSource.contains("RootSidebar("))
|
||||
#expect(source.contains("ForEach(self.pinnedPages)"))
|
||||
#expect(source.contains("ForEach(RootTabs.pinnableSidebarPages)"))
|
||||
#expect(source.contains("private var brandHeader: some View"))
|
||||
#expect(source.contains("private var agentsSection: some View"))
|
||||
#expect(source.contains("static func shownAgentCount(configured: Int, total: Int) -> Int"))
|
||||
#expect(source.contains("ChatSessionSidebarModel.workSubtitle(for: session)"))
|
||||
#expect(source.contains("private var homeRow: some View"))
|
||||
#expect(source.contains("RootTabs.pinnedSidebarPages(from: self.pinnedPagesStorage)"))
|
||||
#expect(source.contains("struct RootSidebarPagesEditor: View"))
|
||||
#expect(source.contains("private var gatewayStatusTitle: String"))
|
||||
#expect(source.contains("private var gatewayStatusColor: Color"))
|
||||
#expect(source.contains("private var sessionsSection: some View"))
|
||||
#expect(source.contains("private var pagesSection: some View"))
|
||||
#expect(!source.contains("attentionSection"))
|
||||
#expect(source.contains("private func badgeCount(for destination: RootTabs.SidebarDestination) -> Int"))
|
||||
#expect(source.contains("private var footer: some View"))
|
||||
#expect(source.contains("TextField(\"\", text: self.$searchText)"))
|
||||
#expect(source.contains("commandSessionActions("))
|
||||
#expect(source.contains("1 / self.displayScale"))
|
||||
#expect(!source.contains("UIScreen.main.scale"))
|
||||
#expect(navigationSource.contains("static let sidebarDestinations"))
|
||||
#expect(!navigationSource.contains("SidebarGroup"))
|
||||
#expect(!navigationSource.contains("title: \"AGENT\""))
|
||||
#expect(navigationSource.contains("case settings"))
|
||||
#expect(!navigationSource.contains("case settingsChannels"))
|
||||
#expect(!navigationSource.contains("case settingsApprovals"))
|
||||
#expect(!navigationSource.contains("case settingsPrivacy"))
|
||||
#expect(navigationSource.contains("SidebarGroup(\n title: \"SETTINGS\""))
|
||||
#expect(navigationSource.contains("destinations: [.settings]"))
|
||||
#expect(!navigationSource.contains("destinations: [.gateway"))
|
||||
#expect(!navigationSource.contains("SidebarGroup(title: \"REFERENCE\", destinations: [.settings"))
|
||||
#expect(navigationSource.contains("SidebarGroup(title: \"REFERENCE\", destinations: [.docs])"))
|
||||
#expect(!navigationSource.contains("phoneControlGroups"))
|
||||
}
|
||||
|
||||
@Test func `sidebar refresh generations keep dashboard independent from roster replacements`() throws {
|
||||
let source = try String(contentsOf: Self.rootSidebarModelSourceURL(), encoding: .utf8)
|
||||
let refresh = try Self.extract(
|
||||
source,
|
||||
from: "func refresh(appModel: NodeAppModel) async {",
|
||||
to: "func refreshSessions(appModel: NodeAppModel) async {")
|
||||
let refreshSessions = try Self.extract(
|
||||
source,
|
||||
from: "func refreshSessions(appModel: NodeAppModel) async {",
|
||||
to: "func reportSessionError(_ error: any Error) {")
|
||||
let rosterCommit = try #require(refresh.range(of: "self.sessions = loadedRoster.sessions"))
|
||||
let dashboardWait = try #require(refresh.range(of: "let loadedDashboard = await dashboard"))
|
||||
|
||||
#expect(source.contains("private var rosterGeneration = 0"))
|
||||
#expect(source.contains("private var dashboardGeneration = 0"))
|
||||
#expect(source.matches(of: /self\.rosterGeneration &\+= 1/).count == 2)
|
||||
#expect(source.matches(of: /self\.dashboardGeneration &\+= 1/).count == 1)
|
||||
#expect(refresh.contains("if rosterGeneration == self.rosterGeneration"))
|
||||
#expect(refresh.contains(
|
||||
"guard !Task.isCancelled, dashboardGeneration == self.dashboardGeneration else { return }"))
|
||||
#expect(refreshSessions.contains(
|
||||
"guard !Task.isCancelled, rosterGeneration == self.rosterGeneration else { return }"))
|
||||
#expect(!refreshSessions.contains("dashboardGeneration"))
|
||||
#expect(source.contains("catch is CancellationError"))
|
||||
#expect(source.contains("case .cancelled:\n return"))
|
||||
#expect(rosterCommit.lowerBound < dashboardWait.lowerBound)
|
||||
#expect(source.contains("allowCachedFallback: false"))
|
||||
}
|
||||
|
||||
@Test func `sidebar refresh owner tracks sessions and periodically refreshes attention`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let refreshTask = try Self.extract(
|
||||
source,
|
||||
from: "private var sidebarSplitContent: some View",
|
||||
to: "private var sidebarRefreshID: String")
|
||||
let refreshID = try Self.extract(
|
||||
source,
|
||||
from: "private var sidebarRefreshID: String",
|
||||
to: "private func sidebarNavigationSplitContent(")
|
||||
|
||||
#expect(refreshTask.contains(".task(id: self.sidebarRefreshID)"))
|
||||
#expect(refreshTask.contains("try? await Task.sleep(for: .seconds(600))"))
|
||||
#expect(refreshTask.contains("while !Task.isCancelled"))
|
||||
#expect(refreshTask.contains("guard !Task.isCancelled else { return }"))
|
||||
#expect(refreshID.contains("self.appModel.chatViewModelIdentityID"))
|
||||
#expect(refreshID.contains("self.appModel.chatSessionKey"))
|
||||
#expect(refreshID.contains("self.scenePhase == .active"))
|
||||
}
|
||||
|
||||
@Test func `sidebar dashboard keeps per field last known good values and drains cron pages`() throws {
|
||||
let source = try String(contentsOf: Self.rootSidebarModelSourceURL(), encoding: .utf8)
|
||||
let dashboardCommit = try Self.extract(
|
||||
source,
|
||||
from: "let loadedDashboard = await dashboard",
|
||||
to: "func refreshSessions(appModel: NodeAppModel) async {")
|
||||
let cronLoad = try Self.extract(
|
||||
source,
|
||||
from: "private func loadCronJobs(appModel: NodeAppModel) async -> [CronJob]? {",
|
||||
to: "private func request<T: Decodable>(")
|
||||
|
||||
#expect(dashboardCommit.contains("if let usage = loadedDashboard.usage"))
|
||||
#expect(dashboardCommit.contains("if let cronJobs = loadedDashboard.cronJobs"))
|
||||
#expect(cronLoad.contains("let pageLimit = 5"))
|
||||
#expect(cronLoad.contains("let jobLimit = 1000"))
|
||||
#expect(cronLoad.contains("cronJobsSnapshotIdentity"))
|
||||
#expect(cronLoad.contains("nextCronJobsListOffset"))
|
||||
#expect(source.contains("return job.enabled &&"))
|
||||
}
|
||||
|
||||
@Test func `sidebar session selections use resolved keys groups and eligibility`() throws {
|
||||
let source = try String(contentsOf: Self.rootSidebarSourceURL(), encoding: .utf8)
|
||||
let actionsSource = try String(contentsOf: Self.commandCenterSupportSourceURL(), encoding: .utf8)
|
||||
let commandCenterSource = try String(contentsOf: Self.commandCenterSourceURL(), encoding: .utf8)
|
||||
let defaultSession = try Self.extract(
|
||||
commandCenterSource,
|
||||
from: "private var effectiveDefaultChatSessionEntry: OpenClawChatSessionEntry?",
|
||||
to: "private var effectiveRecentChatSessions:")
|
||||
|
||||
#expect(source.contains("private var resolvedSelectedSessionKey: String"))
|
||||
#expect(source.contains("private var resolvedMainSessionKey: String"))
|
||||
#expect(source.contains("groups: self.sessionGroups"))
|
||||
#expect(source.contains("let isSelected = session.key == selectedSessionKey"))
|
||||
#expect(source.contains("self.appModel.openChat(sessionKey: mainKey"))
|
||||
#expect(source.contains("self.resolvedSelectedSessionKey.caseInsensitiveCompare(mainKey)"))
|
||||
#expect(source.contains("canArchive: ChatSessionSidebarModel.canArchiveSession("))
|
||||
#expect(source.contains("canDelete: ChatSessionSidebarModel.canDeleteSession("))
|
||||
#expect(actionsSource.contains("if self.canArchive"))
|
||||
#expect(actionsSource.contains("if self.canDelete"))
|
||||
#expect(source.contains("private func selectSidebarDestination("))
|
||||
#expect(source.contains("self.isSearchFocused = false"))
|
||||
#expect(defaultSession.contains("ChatSessionSidebarModel.selectedSessionKey("))
|
||||
#expect(defaultSession.contains("sessions.first { $0.key == mainKey }"))
|
||||
}
|
||||
|
||||
@Test func `sidebar routes use destination headers instead of repeated product branding`() throws {
|
||||
@@ -206,7 +269,8 @@ struct RootTabsSourceGuardTests {
|
||||
from: "private var sidebarDetail: some View",
|
||||
to: "private var sidebarDetailNavigationShell: some View")
|
||||
|
||||
#expect(sidebarDetail.contains("headerTitle: \"Chat\""))
|
||||
#expect(!sidebarDetail.contains("headerTitle: \"Chat\""))
|
||||
#expect(!sidebarDetail.contains("showsAgentBadge: false"))
|
||||
#expect(sidebarDetail.contains("headerTitle: \"Overview\""))
|
||||
#expect(sidebarDetail.contains("headerTitle: \"Agents\""))
|
||||
#expect(sidebarDetail.contains("headerTitle: \"Instances\""))
|
||||
@@ -238,18 +302,18 @@ struct RootTabsSourceGuardTests {
|
||||
let dreamingSource = try String(contentsOf: Self.agentProDreamingDestinationSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source
|
||||
.contains("route != .agents && self.directHeaderLeadingAction(for: route) != nil ? .hidden : .visible"))
|
||||
.contains("route != .agents && self.directHeaderSidebarAction(for: route) != nil ? .hidden : .visible"))
|
||||
#expect(destinationsSource.contains(".navigationTitle(self.headerTitle)"))
|
||||
#expect(destinationsSource.contains(".searchable(text: self.$agentSearchText"))
|
||||
#expect(destinationsSource.contains("ToolbarItemGroup(placement: .topBarTrailing)"))
|
||||
#expect(!destinationsSource.contains(".toolbar(.hidden, for: .navigationBar)"))
|
||||
#expect(destinationsSource.contains("self.directHeaderLeadingAction(for: .instances)"))
|
||||
#expect(destinationsSource.contains("self.directHeaderLeadingAction(for: .dreaming)"))
|
||||
#expect(destinationsSource.contains("self.directHeaderSidebarAction(for: .instances)"))
|
||||
#expect(destinationsSource.contains("self.directHeaderSidebarAction(for: .dreaming)"))
|
||||
#expect(destinationsSource.contains("self.directHeader(\n for: .usage"))
|
||||
#expect(destinationsSource.contains("self.directHeader(\n for: .cron"))
|
||||
#expect(destinationsSource.contains("self.directRoute == route ? self.headerLeadingAction : nil"))
|
||||
#expect(nodesSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)"))
|
||||
#expect(dreamingSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)"))
|
||||
#expect(destinationsSource.contains("self.directRoute == route ? self.headerSidebarAction : nil"))
|
||||
#expect(nodesSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)"))
|
||||
#expect(dreamingSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)"))
|
||||
}
|
||||
|
||||
@Test func `iOS 26 chrome uses native glass while content cards stay quiet`() throws {
|
||||
@@ -261,10 +325,11 @@ struct RootTabsSourceGuardTests {
|
||||
from: "private struct ProPanelSurfaceModifier: ViewModifier",
|
||||
to: "struct ProIconBadge: View")
|
||||
|
||||
#expect(rootSource.contains(".openClawTabBarBehavior()"))
|
||||
#expect(!rootSource.contains(".openClawTabBarBehavior()"))
|
||||
#expect(!rootSource.contains("TabView("))
|
||||
#expect(appSource.contains(".preferredColorScheme(self.appearanceModel.preference.colorScheme)"))
|
||||
#expect(!appSource.contains("overrideUserInterfaceStyle"))
|
||||
#expect(componentsSource.contains("content.tabBarMinimizeBehavior(.onScrollDown)"))
|
||||
#expect(!componentsSource.contains("tabBarMinimizeBehavior"))
|
||||
#expect(componentsSource.contains(".buttonStyle(.glassProminent)"))
|
||||
#expect(componentsSource.contains(".buttonStyle(.glass)"))
|
||||
#expect(componentsSource.contains("GlassEffectContainer(spacing: 8)"))
|
||||
@@ -404,7 +469,7 @@ struct RootTabsSourceGuardTests {
|
||||
let overviewSource = try String(contentsOf: Self.commandCenterSourceURL(), encoding: .utf8)
|
||||
let chatSource = try String(contentsOf: Self.chatProTabSourceURL(), encoding: .utf8)
|
||||
let agentOverviewSource = try String(contentsOf: Self.agentProTabOverviewSourceURL(), encoding: .utf8)
|
||||
let settingsSource = try String(contentsOf: Self.settingsProTabSectionsSourceURL(), encoding: .utf8)
|
||||
let settingsSource = try String(contentsOf: Self.settingsProTabSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(componentsSource.contains("struct OpenClawAdaptiveHeaderRow<Leading: View, Accessory: View>: View"))
|
||||
#expect(componentsSource.contains("ViewThatFits(in: .horizontal)"))
|
||||
@@ -413,7 +478,7 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(componentsSource.contains(".fixedSize(horizontal: true, vertical: false)"))
|
||||
#expect(featureChromeSource.contains("OpenClawAdaptiveHeaderRow("))
|
||||
#expect(featureChromeSource.contains("if !self.usesNativeNavigationChrome"))
|
||||
#expect(!featureChromeSource.contains("if self.headerLeadingAction != nil"))
|
||||
#expect(!featureChromeSource.contains("if self.headerSidebarAction != nil"))
|
||||
#expect(docsSource.contains("OpenClawAdaptiveHeaderRow("))
|
||||
#expect(docsSource.contains("if !self.usesNativeNavigationChrome"))
|
||||
#expect(overviewSource.contains("OpenClawAdaptiveHeaderRow("))
|
||||
@@ -422,10 +487,11 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(chatSource.contains("self.headerAgentIdentity"))
|
||||
#expect(!chatSource.contains("headerAgentModelPicker"))
|
||||
#expect(chatSource.contains(".sharedBackgroundVisibility(.hidden)"))
|
||||
#expect(chatSource.contains("OpenClawSidebarRevealButton(action: headerLeadingAction)"))
|
||||
#expect(chatSource.contains("OpenClawSidebarRevealButton(action: headerSidebarAction)"))
|
||||
#expect(!chatSource.contains("OpenClawAdaptiveHeaderRow("))
|
||||
#expect(agentOverviewSource.contains("OpenClawAdaptiveHeaderRow("))
|
||||
#expect(settingsSource.contains("ToolbarItem(placement: .topBarLeading)"))
|
||||
#expect(!settingsSource.contains("ToolbarItem(placement: .topBarTrailing)"))
|
||||
}
|
||||
|
||||
@Test func `chat keeps layered canvas behind soft native scroll edges`() throws {
|
||||
@@ -436,21 +502,11 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(!source.contains(".background(Color(uiColor: .systemBackground))"))
|
||||
}
|
||||
|
||||
@Test func `phone hub keeps docs as destination only`() throws {
|
||||
let source = try String(contentsOf: Self.phoneHubSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source.contains("case .docs:"))
|
||||
#expect(source.contains("OpenClawDocsScreen("))
|
||||
#expect(source.contains("gatewayAction: { self.openGatewayDetail() }"))
|
||||
#expect(!source.contains("phoneDetailBackAction"))
|
||||
#expect(!source.contains("Label(\"Docs\", systemImage: \"book\")"))
|
||||
#expect(!source.contains("https://docs.openclaw.ai"))
|
||||
}
|
||||
|
||||
@Test func `root shell preview matrix covers phone and I pad states`() throws {
|
||||
let source = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source.contains("#Preview(\n \"Shell iPhone portrait\""))
|
||||
#expect(source.contains("#Preview(\n \"Shell iPhone drawer open\""))
|
||||
#expect(source.contains("#Preview(\n \"Shell iPhone landscape\""))
|
||||
#expect(source.contains("#Preview(\n \"Shell iPhone connected\""))
|
||||
#expect(source.contains("#Preview(\n \"Shell iPhone gateway error\""))
|
||||
@@ -474,62 +530,6 @@ struct RootTabsSourceGuardTests {
|
||||
#expect(source.contains("case error"))
|
||||
#expect(source.contains("Gateway not connected. Check Tailscale and retry."))
|
||||
}
|
||||
|
||||
@Test func `phone hub lets the native list respect the floating tab bar`() throws {
|
||||
let source = try String(contentsOf: Self.phoneHubSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source.contains("List {"))
|
||||
#expect(source.contains(".listStyle(.insetGrouped)"))
|
||||
#expect(!source.contains("bottomScrollInset"))
|
||||
#expect(!source.contains("safeAreaPadding(.bottom"))
|
||||
}
|
||||
|
||||
@Test func `phone hub promotes unified chat while filtering root tabs from its destination list`() throws {
|
||||
let source = try String(contentsOf: Self.phoneHubSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(source.contains("private var gatewayHeader: some View"))
|
||||
#expect(source.contains("private var gatewayIdentityTitle: some View"))
|
||||
#expect(source.contains("Text(verbatim: gatewayDisplayLabel)"))
|
||||
#expect(source.contains("Text(\"Gateway\")"))
|
||||
#expect(source.contains(".accessibilityLabel(self.gatewayAccessibilityLabel)"))
|
||||
#expect(source.contains("private var chatShortcut: some View"))
|
||||
#expect(source.contains(
|
||||
".listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 4, trailing: 0))"))
|
||||
#expect(source.contains("self.prominentDestinationCard(\n .chat,"))
|
||||
#expect(source.contains("Agent chat and recent work."))
|
||||
#expect(!source.contains("TalkProTab("))
|
||||
#expect(source.contains("private var phoneDestinations: [RootTabs.SidebarDestination]"))
|
||||
#expect(source.contains("self.groups.flatMap(\\.destinations).filter { !self.opensRootTab($0) }"))
|
||||
#expect(source.contains("private struct ControlCircleIcon: View"))
|
||||
#expect(source.contains(".foregroundStyle(self.iconForegroundStyle)"))
|
||||
#expect(!source.contains("ProValuePill(value: self.gatewayStateText"))
|
||||
#expect(!source.contains("destination.subtitle"))
|
||||
#expect(source.contains("self.openGatewayDetail()"))
|
||||
#expect(!source.contains("self.openPhoneRootDestination(.gateway)"))
|
||||
#expect(!source.contains("phoneDetailBackAction"))
|
||||
#expect(!source.contains(".navigationBarBackButtonHidden(true)"))
|
||||
#expect(!source.contains(".toolbar(.hidden, for: .navigationBar)"))
|
||||
#expect(source.matches(of: /usesNativeNavigationChrome: true/).count == 7)
|
||||
#expect(!source.contains("directRoute: .agents"))
|
||||
#expect(source.contains("Image(systemName: \"slider.horizontal.3\")"))
|
||||
#expect(!source.contains("self.metric(label:"))
|
||||
#expect(!source.contains("private func metric(label:"))
|
||||
}
|
||||
|
||||
@Test func `phone hub clears detail path before root tab handoff`() throws {
|
||||
let source = try String(contentsOf: Self.phoneHubSourceURL(), encoding: .utf8)
|
||||
let handoff = try Self.extract(
|
||||
source,
|
||||
from: "private func openPhoneRootDestination(_ destination: RootTabs.SidebarDestination)",
|
||||
to: "private func opensRootTab(_ destination: RootTabs.SidebarDestination)")
|
||||
let clearRange = try #require(handoff.range(of: "self.navigationPath.removeAll()"))
|
||||
let openRange = try #require(handoff.range(of: "self.openRootDestination(destination)"))
|
||||
|
||||
#expect(source.contains("NavigationStack(path: self.$navigationPath)"))
|
||||
#expect(!source.contains("self.openRootDestination(.gateway)"))
|
||||
#expect(source.contains("self.navigationPath.append(.gateway)"))
|
||||
#expect(clearRange.lowerBound < openRange.lowerBound)
|
||||
}
|
||||
}
|
||||
|
||||
extension RootTabsSourceGuardTests {
|
||||
@@ -716,9 +716,9 @@ extension RootTabsSourceGuardTests {
|
||||
#expect(source.contains("self.previewHeader(\"Loading\")"))
|
||||
#expect(source.contains("self.previewHeader(\"Empty\")"))
|
||||
#expect(source.contains("self.previewHeader(\"Error\")"))
|
||||
#expect(source.contains("title: \"Threads unavailable\""))
|
||||
#expect(source.contains("title: \"No recent threads\""))
|
||||
#expect(source.contains("title: \"Loading threads\""))
|
||||
#expect(source.contains("title: \"Sessions unavailable\""))
|
||||
#expect(source.contains("title: \"No recent sessions\""))
|
||||
#expect(source.contains("title: \"Loading sessions\""))
|
||||
}
|
||||
|
||||
@Test func `routed feature screens reuse shared pro components`() throws {
|
||||
@@ -763,7 +763,7 @@ extension RootTabsSourceGuardTests {
|
||||
let projectSource = try String(contentsOf: Self.xcodeProjectSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(chromeSource.contains("struct IPadSidebarScreenChrome<Content: View>: View"))
|
||||
#expect(chromeSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerLeadingAction)"))
|
||||
#expect(chromeSource.contains("OpenClawSidebarHeaderLeadingSlot(action: headerSidebarAction)"))
|
||||
#expect(chromeSource.contains("OpenClawGatewayCompactPill()"))
|
||||
#expect(!taskSource.contains("struct IPadSidebarScreenChrome"))
|
||||
#expect(projectSource.contains("IPadSidebarScreenChrome.swift in Sources"))
|
||||
@@ -801,7 +801,7 @@ extension RootTabsSourceGuardTests {
|
||||
encoding: .utf8)
|
||||
let settingsRoutePattern = try Regex(
|
||||
#"case \.settings:[\s\S]*?SettingsProTab\("#
|
||||
+ #"[\s\S]*?headerLeadingAction: self\.sidebarHeaderLeadingAction,"#
|
||||
+ #"[\s\S]*?headerSidebarAction: self\.sidebarHeaderAction,"#
|
||||
+ #"[\s\S]*?ownsNavigationStack: false"#
|
||||
+ #"[\s\S]*?onRouteChange: handleSettingsRouteChange"#)
|
||||
let approvalSuppression = try Self.extract(
|
||||
@@ -811,7 +811,7 @@ extension RootTabsSourceGuardTests {
|
||||
let sidebarNavigationShell = try Self.extract(
|
||||
rootSource,
|
||||
from: "private var sidebarDetailNavigationShell: some View",
|
||||
to: "private var usesSidebarTabs: Bool")
|
||||
to: "private var sidebarDetailShellID: String")
|
||||
let settingsRoutePropagation = try Self.extract(
|
||||
rootSource,
|
||||
from: "private func handleSettingsRouteChange(_ route: SettingsRoute?)",
|
||||
@@ -863,8 +863,7 @@ extension RootTabsSourceGuardTests {
|
||||
#expect(rootSource.contains("@State private var sidebarNavigationPath: [SettingsRoute] = []"))
|
||||
#expect(rootSource.contains("NavigationStack(path: self.$sidebarNavigationPath)"))
|
||||
#expect(rootSource.contains("self.sidebarNavigationPath.removeAll()"))
|
||||
#expect(rootSource.matches(of: /SettingsProTab\(\s*initialRoute: self\.selectedSettingsRoute,/).count == 1)
|
||||
#expect(rootSource.contains(".id(self.settingsTabViewID)"))
|
||||
#expect(rootSource.contains("directRoute: selectedSettingsRoute"))
|
||||
#expect(rootSource.contains("@State private var selectedSettingsRouteRequestID: Int = 0"))
|
||||
#expect(rootSource.contains("@State private var activeSettingsRoute: SettingsRoute?"))
|
||||
#expect(rootSource.contains("self.selectedSettingsRouteRequestID &+= 1"))
|
||||
@@ -889,7 +888,7 @@ extension RootTabsSourceGuardTests {
|
||||
#expect(rootSource.contains(
|
||||
"self.suppressedExecApprovalForNotificationSettings = NodeAppModel.execApprovalInboxKey(prompt)"))
|
||||
#expect(rootSource.contains(
|
||||
"onApprovalNotificationsRoute: self.suppressExecApprovalPromptForNotificationSettings"))
|
||||
"onApprovalNotificationsRoute: suppressExecApprovalPromptForNotificationSettings"))
|
||||
#expect(rootSource.contains("private func suppressExecApprovalPromptForNotificationSettings("))
|
||||
#expect(rootSource.contains("onRouteChange: handleSettingsRouteChange"))
|
||||
#expect(rootSource.contains("navigateToRoute: pushSidebarSettingsRoute"))
|
||||
@@ -1275,7 +1274,7 @@ extension RootTabsSourceGuardTests {
|
||||
let onboardingContent = try #require(onboardingScannerSheet.range(of: "content: {"))
|
||||
|
||||
#expect(appSource.contains("deferDiscoveryUntilLocalNetworkRequest: true"))
|
||||
#expect(appSource.contains("func application(\n _ app: UIApplication,\n open url: URL,"))
|
||||
#expect(appSource.contains("func application(\n _: UIApplication,\n open url: URL,"))
|
||||
#expect(appSource.contains("self.pendingOpenURLs.append(url)"))
|
||||
#expect(appSource.contains("model.stageGatewaySetupLink(link)"))
|
||||
#expect(appSource.contains(".onOpenURL"))
|
||||
@@ -1520,12 +1519,12 @@ extension RootTabsSourceGuardTests {
|
||||
}
|
||||
|
||||
@Test func `approval inbox stays reopenable and modal isolates accessibility`() throws {
|
||||
let rootSource = try String(contentsOf: Self.rootTabsSourceURL(), encoding: .utf8)
|
||||
let rootSource = try String(contentsOf: Self.rootSidebarSourceURL(), encoding: .utf8)
|
||||
let modelSource = try String(contentsOf: Self.nodeAppModelSourceURL(), encoding: .utf8)
|
||||
let dialogSource = try String(contentsOf: Self.execApprovalPromptDialogSourceURL(), encoding: .utf8)
|
||||
let settingsSource = try String(contentsOf: Self.settingsProTabSectionsSourceURL(), encoding: .utf8)
|
||||
|
||||
#expect(rootSource.contains(".badge(self.appModel.pendingExecApprovalCount)"))
|
||||
#expect(rootSource.contains("case .overview: self.appModel.pendingExecApprovalCount"))
|
||||
#expect(modelSource.contains("var pendingExecApprovalInboxItems: [ExecApprovalInboxItem]"))
|
||||
#expect(modelSource.contains("self.dismissedExecApprovalPresentationKeys.insert(inboxKey)"))
|
||||
#expect(modelSource.contains("func presentPendingExecApprovalFromInbox("))
|
||||
@@ -1545,6 +1544,20 @@ extension RootTabsSourceGuardTests {
|
||||
.appendingPathComponent("Sources/RootTabs.swift")
|
||||
}
|
||||
|
||||
private static func rootSidebarSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/RootSidebar.swift")
|
||||
}
|
||||
|
||||
private static func rootSidebarModelSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/RootSidebarModel.swift")
|
||||
}
|
||||
|
||||
static func nodeAppModelSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
@@ -1566,13 +1579,6 @@ extension RootTabsSourceGuardTests {
|
||||
.appendingPathComponent("Sources/Chat/IOSGatewayChatTransport.swift")
|
||||
}
|
||||
|
||||
private static func phoneHubSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/Design/RootTabsPhoneControlHub.swift")
|
||||
}
|
||||
|
||||
private static func proComponentsSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
@@ -1695,13 +1701,6 @@ extension RootTabsSourceGuardTests {
|
||||
.appendingPathComponent("Sources/Design/ChatProTab.swift")
|
||||
}
|
||||
|
||||
private static func rootTabsPhoneChromeSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
.deletingLastPathComponent()
|
||||
.appendingPathComponent("Sources/Design/RootTabsPhoneChrome.swift")
|
||||
}
|
||||
|
||||
private static func docsSourceURL() -> URL {
|
||||
URL(fileURLWithPath: #filePath)
|
||||
.deletingLastPathComponent()
|
||||
|
||||
@@ -47,12 +47,11 @@ struct RuntimeLocalizationSourceGuardTests {
|
||||
let widget = try Self.source("ActivityWidget/OpenClawLiveActivity.swift")
|
||||
let project = try Self.source("project.yml")
|
||||
let dreaming = try Self.source("Sources/Design/AgentProDreamingDestination.swift")
|
||||
let phoneControlHub = try Self.source("Sources/Design/RootTabsPhoneControlHub.swift")
|
||||
let rootSidebar = try Self.source("Sources/RootSidebar.swift")
|
||||
let proComponents = try Self.source("Sources/Design/OpenClawProComponents.swift")
|
||||
let skillWorkshop = try Self.source("Sources/Design/IPadSkillWorkshopScreen.swift")
|
||||
let workboard = try Self.source("Sources/Design/IPadWorkboardScreen.swift")
|
||||
let talkManager = try Self.source("Sources/Voice/TalkModeManager.swift")
|
||||
let rootTabs = try Self.source("Sources/RootTabs.swift")
|
||||
let rootTabsNavigation = try Self.source("Sources/RootTabsNavigation.swift")
|
||||
let watchInbox = try Self.source("WatchApp/Sources/WatchInboxView.swift")
|
||||
let chat = try Self.sharedSource("OpenClawChatUI/ChatMessageViews.swift")
|
||||
@@ -82,7 +81,7 @@ struct RuntimeLocalizationSourceGuardTests {
|
||||
#expect(!watchInbox.contains("WatchTextValue: ExpressibleByStringLiteral"))
|
||||
#expect(watchInbox.contains("accessory: .verbatim(self.store.talkSummaryText)"))
|
||||
for status in ["Online", "Connecting", "Needs attention", "Offline"] {
|
||||
#expect(rootTabs.contains("String(localized: \"\(status)\")"))
|
||||
#expect(rootSidebar.contains("String(localized: \"\(status)\")"))
|
||||
}
|
||||
let destinationTitles = [
|
||||
"Chat",
|
||||
@@ -107,10 +106,9 @@ struct RuntimeLocalizationSourceGuardTests {
|
||||
}
|
||||
#expect(rootTabsNavigation.contains("case .gateway: String(localized: \"Connection\")"))
|
||||
for status in ["Online", "Connecting", "Attention", "Offline"] {
|
||||
#expect(phoneControlHub.contains("String(localized: \"\(status)\")"))
|
||||
#expect(proComponents.contains("String(localized: \"\(status)\")"))
|
||||
}
|
||||
#expect(phoneControlHub.contains("String(localized: \"Default Agent\")"))
|
||||
#expect(rootSidebar.contains("String(localized: \"New Chat\")"))
|
||||
#expect(proComponents.contains("OpenClawStatusBadge(label: .verbatim(self.title)"))
|
||||
#expect(
|
||||
skillWorkshop.components(separatedBy: "String(localized: \"Default agent\")").count - 1 == 2)
|
||||
@@ -170,5 +168,5 @@ struct RuntimeLocalizationSourceGuardTests {
|
||||
var isDisconnected = false
|
||||
var isConnecting = false
|
||||
var startedAt = Date(timeIntervalSince1970: 1234)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,12 +294,11 @@ struct SwiftUIRenderSmokeTests {
|
||||
let appModel = NodeAppModel()
|
||||
let gatewayController = GatewayConnectionController(appModel: appModel, startDiscovery: false)
|
||||
|
||||
let root = RootTabs()
|
||||
let root = RootTabs(initialSidebarVisibility: scenario.sidebarVisible)
|
||||
.environment(AppAppearanceModel())
|
||||
.environment(appModel)
|
||||
.environment(appModel.voiceWake)
|
||||
.environment(gatewayController)
|
||||
.environment(\.rootTabsUserInterfaceIdiomOverride, scenario.idiom)
|
||||
.environment(\.horizontalSizeClass, scenario.horizontalSizeClass)
|
||||
.environment(\.verticalSizeClass, scenario.verticalSizeClass)
|
||||
|
||||
@@ -488,33 +487,35 @@ struct SwiftUIRenderSmokeTests {
|
||||
await controller.connectManual(host: host, port: port, useTLS: true)
|
||||
}
|
||||
|
||||
@Test @MainActor func `phone control hub builds gateway state view hierarchies`() {
|
||||
@Test @MainActor func `root sidebar builds gateway state view hierarchies`() {
|
||||
for appModel in Self.rootTabsGatewayStateModels() {
|
||||
let root = RootTabsPhoneControlHub(
|
||||
groups: RootTabs.phoneControlGroups,
|
||||
initialDestination: nil,
|
||||
navigationRequest: nil,
|
||||
openRootDestination: { _ in },
|
||||
openChatFromControlDetail: { _ in })
|
||||
let root = RootSidebar(
|
||||
model: RootSidebarModel(),
|
||||
selectedDestination: .overview,
|
||||
isDrawerLayout: true,
|
||||
selectDestination: { _ in },
|
||||
selectSettingsRoute: { _ in },
|
||||
hideSidebar: {})
|
||||
.environment(appModel)
|
||||
|
||||
_ = Self.host(root)
|
||||
_ = Self.host(root, size: CGSize(width: 340, height: 852))
|
||||
}
|
||||
}
|
||||
|
||||
@Test @MainActor func `phone control hub builds landscape compact state`() {
|
||||
@Test @MainActor func `root sidebar builds landscape compact state`() {
|
||||
let appModel = NodeAppModel()
|
||||
let root = RootTabsPhoneControlHub(
|
||||
groups: RootTabs.phoneControlGroups,
|
||||
initialDestination: nil,
|
||||
navigationRequest: nil,
|
||||
openRootDestination: { _ in },
|
||||
openChatFromControlDetail: { _ in })
|
||||
let root = RootSidebar(
|
||||
model: RootSidebarModel(),
|
||||
selectedDestination: .chat,
|
||||
isDrawerLayout: true,
|
||||
selectDestination: { _ in },
|
||||
selectSettingsRoute: { _ in },
|
||||
hideSidebar: {})
|
||||
.environment(appModel)
|
||||
.environment(\.horizontalSizeClass, .regular)
|
||||
.environment(\.verticalSizeClass, .compact)
|
||||
|
||||
_ = Self.host(root)
|
||||
_ = Self.host(root, size: CGSize(width: 340, height: 393))
|
||||
}
|
||||
|
||||
@Test @MainActor func `routed sidebar screens build offline states`() {
|
||||
@@ -598,22 +599,32 @@ struct SwiftUIRenderSmokeTests {
|
||||
idiom: .phone,
|
||||
size: CGSize(width: 393, height: 852),
|
||||
horizontalSizeClass: .compact,
|
||||
verticalSizeClass: .regular),
|
||||
verticalSizeClass: .regular,
|
||||
sidebarVisible: false),
|
||||
RootTabsShellScenario(
|
||||
idiom: .phone,
|
||||
size: CGSize(width: 393, height: 852),
|
||||
horizontalSizeClass: .compact,
|
||||
verticalSizeClass: .regular,
|
||||
sidebarVisible: true),
|
||||
RootTabsShellScenario(
|
||||
idiom: .phone,
|
||||
size: CGSize(width: 852, height: 393),
|
||||
horizontalSizeClass: .regular,
|
||||
verticalSizeClass: .compact),
|
||||
verticalSizeClass: .compact,
|
||||
sidebarVisible: false),
|
||||
RootTabsShellScenario(
|
||||
idiom: .pad,
|
||||
size: CGSize(width: 1024, height: 1366),
|
||||
horizontalSizeClass: .regular,
|
||||
verticalSizeClass: .regular),
|
||||
verticalSizeClass: .regular,
|
||||
sidebarVisible: true),
|
||||
RootTabsShellScenario(
|
||||
idiom: .pad,
|
||||
size: CGSize(width: 1366, height: 1024),
|
||||
horizontalSizeClass: .regular,
|
||||
verticalSizeClass: .regular),
|
||||
verticalSizeClass: .regular,
|
||||
sidebarVisible: true),
|
||||
]
|
||||
}
|
||||
|
||||
@@ -622,6 +633,7 @@ struct SwiftUIRenderSmokeTests {
|
||||
let size: CGSize
|
||||
let horizontalSizeClass: UserInterfaceSizeClass
|
||||
let verticalSizeClass: UserInterfaceSizeClass
|
||||
let sidebarVisible: Bool
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,18 +77,17 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
self.attachScreenshot(named: "onboarding-capabilities-and-trust")
|
||||
}
|
||||
|
||||
func testControlOverviewNavigation() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone control hub only")
|
||||
func testSidebarOverviewNavigation() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone sidebar only")
|
||||
self.launchApp(for: ScreenshotTarget(
|
||||
initialTab: "control",
|
||||
initialDestination: "control",
|
||||
initialDestination: "overview",
|
||||
name: "control-overview-navigation"))
|
||||
|
||||
let overview = self.app?.buttons.containing(.staticText, identifier: "Overview").firstMatch
|
||||
XCTAssertTrue(overview?.waitForExistence(timeout: 5) == true)
|
||||
overview?.tap()
|
||||
XCTAssertTrue(self.app?.staticTexts["Agent session"].waitForExistence(timeout: 8) == true)
|
||||
try self.selectSidebarDestination("Overview")
|
||||
|
||||
XCTAssertTrue(self.app?.navigationBars.buttons["Control"].waitForExistence(timeout: 5) == true)
|
||||
XCTAssertTrue(self.app?.buttons["RootTabs.Sidebar.Show"].waitForExistence(timeout: 5) == true)
|
||||
XCTAssertTrue(self.app?.buttons["Gateway settings"].waitForExistence(timeout: 5) == true)
|
||||
XCTAssertEqual(self.app?.state, .runningForeground)
|
||||
}
|
||||
@@ -205,8 +204,8 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
XCTAssertTrue(self.app?.buttons["While Using"].isSelected == true)
|
||||
}
|
||||
|
||||
func testSettingsBackReturnsToOriginatingPhoneTab() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone settings navigation only")
|
||||
func testSettingsBackReturnsToOriginatingSidebarDestination() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone sidebar navigation only")
|
||||
|
||||
self.launchApp(for: ScreenshotTarget(
|
||||
initialTab: "chat",
|
||||
@@ -216,12 +215,12 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
try self.openChatGatewaySettings()
|
||||
let gatewayNavigationBar = try XCTUnwrap(self.app?.navigationBars["Gateway"])
|
||||
XCTAssertTrue(gatewayNavigationBar.waitForExistence(timeout: 5))
|
||||
XCTAssertTrue(self.app?.tabBars.buttons["Chat"].isSelected == true)
|
||||
XCTAssertTrue(self.app?.buttons["RootTabs.Sidebar.Show"].exists == true)
|
||||
self.attachScreenshot(named: "chat-gateway-origin-stack")
|
||||
|
||||
gatewayNavigationBar.buttons["BackButton"].tap()
|
||||
XCTAssertTrue(self.app?.otherElements["chat-agent-identity"].waitForExistence(timeout: 5) == true)
|
||||
XCTAssertTrue(self.app?.tabBars.buttons["Chat"].isSelected == true)
|
||||
XCTAssertTrue(self.app?.buttons["RootTabs.Sidebar.Show"].exists == true)
|
||||
self.attachScreenshot(named: "chat-after-settings-back")
|
||||
}
|
||||
|
||||
@@ -508,8 +507,8 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
self.attachScreenshot(named: "onboarding-connected-go-to-chat")
|
||||
|
||||
app.buttons["Go to Chat"].tap()
|
||||
XCTAssertTrue(app.tabBars.buttons["Chat"].waitForExistence(timeout: 5))
|
||||
XCTAssertTrue(app.tabBars.buttons["Chat"].isSelected)
|
||||
XCTAssertTrue(app.otherElements["chat-agent-identity"].waitForExistence(timeout: 5))
|
||||
XCTAssertTrue(app.buttons["RootTabs.Sidebar.Show"].exists)
|
||||
}
|
||||
|
||||
func testAppearanceUsesSettingsRow() throws {
|
||||
@@ -561,65 +560,39 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
self.attachScreenshot(named: "appearance-system-restored")
|
||||
}
|
||||
|
||||
func testChatReturnsToOriginatingControlDetail() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone Control proof only")
|
||||
func testChatAndOverviewNavigateThroughSidebar() throws {
|
||||
try XCTSkipIf(UIDevice.current.userInterfaceIdiom != .phone, "Phone sidebar proof only")
|
||||
self.launchApp(for: ScreenshotTarget(
|
||||
initialTab: "control",
|
||||
initialDestination: "activity",
|
||||
name: "control-chat-return"))
|
||||
|
||||
let chatTab = try XCTUnwrap(self.app?.tabBars.buttons["Chat"])
|
||||
let controlTab = try XCTUnwrap(self.app?.tabBars.buttons["Control"])
|
||||
|
||||
// Retain an embedded Chat Settings route, then prove contextual routing pops it.
|
||||
chatTab.tap()
|
||||
try self.openChatGatewaySettings()
|
||||
XCTAssertTrue(self.app?.navigationBars["Gateway"].waitForExistence(timeout: 5) == true)
|
||||
|
||||
controlTab.tap()
|
||||
XCTAssertTrue(self.app?.navigationBars["Control"].waitForExistence(timeout: 8) == true)
|
||||
let activity = try XCTUnwrap(self.app?.buttons["Activity"])
|
||||
XCTAssertTrue(activity.waitForExistence(timeout: 5))
|
||||
activity.tap()
|
||||
|
||||
let recentActivity = try XCTUnwrap(self.app?.staticTexts["Recent activity"])
|
||||
XCTAssertTrue(recentActivity.waitForExistence(timeout: 8))
|
||||
self.attachScreenshot(named: "control-activity-before-chat")
|
||||
|
||||
let activityChat = try self.controlDetailChatButton(above: chatTab)
|
||||
activityChat.tap()
|
||||
XCTAssertTrue(chatTab.isSelected)
|
||||
|
||||
let returnButton = try XCTUnwrap(self.app?.buttons["OpenClawChatBackToControlDetailButton"])
|
||||
XCTAssertTrue(returnButton.waitForExistence(timeout: 5))
|
||||
XCTAssertEqual(returnButton.label, "Back to Activity")
|
||||
try self.startNewChatFromSidebar()
|
||||
XCTAssertTrue(self.app?.otherElements["chat-composer-surface"].waitForExistence(timeout: 8) == true)
|
||||
self.attachScreenshot(named: "chat-return-to-activity")
|
||||
|
||||
returnButton.tap()
|
||||
try self.selectSidebarDestination("Activity")
|
||||
XCTAssertTrue(recentActivity.waitForExistence(timeout: 8))
|
||||
XCTAssertTrue(controlTab.isSelected)
|
||||
self.attachScreenshot(named: "control-activity-after-chat")
|
||||
|
||||
try self.controlDetailChatButton(above: chatTab).tap()
|
||||
XCTAssertTrue(chatTab.isSelected)
|
||||
controlTab.tap()
|
||||
XCTAssertTrue(self.app?.navigationBars["Control"].waitForExistence(timeout: 8) == true)
|
||||
let overview = try XCTUnwrap(self.app?.buttons["Overview"])
|
||||
XCTAssertTrue(overview.exists)
|
||||
try self.startNewChatFromSidebar()
|
||||
try self.selectSidebarDestination("Overview")
|
||||
XCTAssertTrue(self.app?.staticTexts["Agent session"].waitForExistence(timeout: 8) == true)
|
||||
self.attachScreenshot(named: "control-tab-returns-to-root")
|
||||
|
||||
overview.tap()
|
||||
XCTAssertTrue(self.app?.staticTexts["Agent session"].waitForExistence(timeout: 8) == true)
|
||||
let agentSession = try XCTUnwrap(
|
||||
self.app?.buttons.containing(.staticText, identifier: "Molty").firstMatch)
|
||||
XCTAssertTrue(agentSession.waitForExistence(timeout: 8))
|
||||
agentSession.tap()
|
||||
|
||||
XCTAssertTrue(returnButton.waitForExistence(timeout: 8))
|
||||
XCTAssertEqual(returnButton.label, "Back to Overview")
|
||||
XCTAssertTrue(self.app?.otherElements["chat-composer-surface"].waitForExistence(timeout: 8) == true)
|
||||
self.attachScreenshot(named: "chat-session-return-to-overview")
|
||||
returnButton.tap()
|
||||
XCTAssertTrue(self.app?.navigationBars["Overview"].waitForExistence(timeout: 8) == true)
|
||||
try self.selectSidebarDestination("Overview")
|
||||
XCTAssertTrue(self.app?.staticTexts["Agent session"].waitForExistence(timeout: 8) == true)
|
||||
}
|
||||
|
||||
func testAgentUsesToolbarFilter() throws {
|
||||
@@ -646,9 +619,9 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
|
||||
let controlApp = self.relaunchConnectedLiveGatewayApp(
|
||||
initialTab: "control",
|
||||
initialDestination: "control")
|
||||
let overview = controlApp.buttons.containing(.staticText, identifier: "Overview").firstMatch
|
||||
XCTAssertTrue(overview.waitForExistence(timeout: 8))
|
||||
initialDestination: "overview")
|
||||
XCTAssertTrue(controlApp.staticTexts["Agent session"].waitForExistence(timeout: 8))
|
||||
XCTAssertTrue(controlApp.buttons["RootTabs.Sidebar.Show"].exists)
|
||||
XCTAssertEqual(controlApp.state, .runningForeground)
|
||||
}
|
||||
|
||||
@@ -691,12 +664,10 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
|
||||
let controlApp = self.relaunchConnectedLiveGatewayApp(
|
||||
initialTab: "control",
|
||||
initialDestination: "control")
|
||||
let overview = controlApp.buttons.containing(.staticText, identifier: "Overview").firstMatch
|
||||
XCTAssertTrue(overview.waitForExistence(timeout: 8))
|
||||
initialDestination: "overview")
|
||||
XCTAssertTrue(controlApp.staticTexts["Agent session"].waitForExistence(timeout: 8))
|
||||
self.attachScreenshot(named: "live-gateway-control")
|
||||
overview.tap()
|
||||
XCTAssertTrue(controlApp.navigationBars.buttons["Control"].waitForExistence(timeout: 8))
|
||||
try self.selectSidebarDestination("Overview")
|
||||
XCTAssertTrue(controlApp.buttons["Gateway settings"].waitForExistence(timeout: 5))
|
||||
self.attachScreenshot(named: "live-gateway-overview")
|
||||
XCTAssertEqual(controlApp.state, .runningForeground)
|
||||
@@ -856,9 +827,48 @@ final class OpenClawSnapshotUITests: XCTestCase {
|
||||
XCTAssertEqual(XCTWaiter.wait(for: [expectation], timeout: 3), .completed)
|
||||
}
|
||||
|
||||
private func controlDetailChatButton(above chatTab: XCUIElement) throws -> XCUIElement {
|
||||
let buttons = try XCTUnwrap(self.app?.buttons.matching(NSPredicate(format: "label == 'Chat'")))
|
||||
return try XCTUnwrap(buttons.allElementsBoundByIndex.first { $0.frame.maxY < chatTab.frame.minY })
|
||||
private func selectSidebarDestination(
|
||||
_ title: String,
|
||||
file: StaticString = #filePath,
|
||||
line: UInt = #line) throws
|
||||
{
|
||||
let app = try XCTUnwrap(self.app, file: file, line: line)
|
||||
let hideSidebar = app.buttons["RootTabs.Sidebar.Hide"]
|
||||
if !hideSidebar.exists {
|
||||
let showSidebar = app.buttons["RootTabs.Sidebar.Show"]
|
||||
XCTAssertTrue(showSidebar.waitForExistence(timeout: 5), file: file, line: line)
|
||||
showSidebar.tap()
|
||||
XCTAssertTrue(hideSidebar.waitForExistence(timeout: 5), file: file, line: line)
|
||||
}
|
||||
|
||||
let destination = app.buttons[title]
|
||||
XCTAssertTrue(destination.waitForExistence(timeout: 5), file: file, line: line)
|
||||
destination.tap()
|
||||
|
||||
XCTAssertTrue(hideSidebar.waitForNonExistence(timeout: 5), file: file, line: line)
|
||||
XCTAssertTrue(app.buttons["RootTabs.Sidebar.Show"].waitForExistence(timeout: 5), file: file, line: line)
|
||||
}
|
||||
|
||||
private func startNewChatFromSidebar(
|
||||
file: StaticString = #filePath,
|
||||
line: UInt = #line) throws
|
||||
{
|
||||
let app = try XCTUnwrap(self.app, file: file, line: line)
|
||||
let hideSidebar = app.buttons["RootTabs.Sidebar.Hide"]
|
||||
if !hideSidebar.exists {
|
||||
let showSidebar = app.buttons["RootTabs.Sidebar.Show"]
|
||||
XCTAssertTrue(showSidebar.waitForExistence(timeout: 5), file: file, line: line)
|
||||
showSidebar.tap()
|
||||
XCTAssertTrue(hideSidebar.waitForExistence(timeout: 5), file: file, line: line)
|
||||
}
|
||||
|
||||
let newChat = app.buttons["New Chat"]
|
||||
XCTAssertTrue(newChat.waitForExistence(timeout: 5), file: file, line: line)
|
||||
XCTAssertTrue(newChat.isEnabled, file: file, line: line)
|
||||
newChat.tap()
|
||||
|
||||
XCTAssertTrue(hideSidebar.waitForNonExistence(timeout: 5), file: file, line: line)
|
||||
XCTAssertTrue(app.buttons["RootTabs.Sidebar.Show"].waitForExistence(timeout: 5), file: file, line: line)
|
||||
}
|
||||
|
||||
private func launchPairedLiveGatewayApp(
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
import AppKit
|
||||
import SwiftUI
|
||||
|
||||
extension ChatSessionSidebarModel.Node {
|
||||
fileprivate var outlineChildren: [Self]? {
|
||||
self.children.isEmpty ? nil : self.children
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
struct ChatSessionSidebar: View {
|
||||
@Bindable var viewModel: OpenClawChatViewModel
|
||||
@@ -222,7 +228,9 @@ struct ChatSessionSidebar: View {
|
||||
let isCurrentSession = self.viewModel.matchesCurrentSessionKey(
|
||||
incoming: node.session.key,
|
||||
current: self.viewModel.sessionKey)
|
||||
if node.hasUnreadDescendant || (node.session.unread == true && !isCurrentSession) {
|
||||
if node.children.contains(where: \.badges.hasUnread) ||
|
||||
(node.session.unread == true && !isCurrentSession)
|
||||
{
|
||||
Circle()
|
||||
.fill(.tint)
|
||||
.frame(width: 7, height: 7)
|
||||
|
||||
@@ -1,55 +1,46 @@
|
||||
import Foundation
|
||||
|
||||
/// Pure grouping/filtering for the macOS sessions sidebar. Kept UI-free so the
|
||||
/// pin/search/ordering rules stay unit-testable.
|
||||
enum ChatSessionSidebarModel {
|
||||
struct Badges: Equatable {
|
||||
let runningCount: Int
|
||||
let failedCount: Int
|
||||
let hasUnread: Bool
|
||||
/// Pure grouping/filtering shared by the Apple sessions sidebars. Kept UI-free
|
||||
/// so pin/search/ordering rules stay unit-testable across macOS and iOS.
|
||||
public enum ChatSessionSidebarModel {
|
||||
public struct Badges: Equatable, Sendable {
|
||||
public let runningCount: Int
|
||||
public let failedCount: Int
|
||||
public let hasUnread: Bool
|
||||
}
|
||||
|
||||
struct Node: Identifiable, Equatable {
|
||||
let session: OpenClawChatSessionEntry
|
||||
let children: [Node]
|
||||
let badges: Badges
|
||||
public struct Node: Identifiable, Equatable, Sendable {
|
||||
public let session: OpenClawChatSessionEntry
|
||||
public let children: [Node]
|
||||
public let badges: Badges
|
||||
|
||||
var id: String {
|
||||
public var id: String {
|
||||
self.session.key
|
||||
}
|
||||
|
||||
var outlineChildren: [Node]? {
|
||||
self.children.isEmpty ? nil : self.children
|
||||
}
|
||||
|
||||
var hasUnreadDescendant: Bool {
|
||||
self.children.contains { $0.badges.hasUnread }
|
||||
}
|
||||
}
|
||||
|
||||
struct Section: Identifiable, Equatable {
|
||||
let id: String
|
||||
let title: String?
|
||||
let nodes: [Node]
|
||||
|
||||
var sessions: [OpenClawChatSessionEntry] {
|
||||
self.nodes.map(\.session)
|
||||
}
|
||||
public struct Section: Identifiable, Equatable, Sendable {
|
||||
public let id: String
|
||||
public let title: String?
|
||||
public let nodes: [Node]
|
||||
}
|
||||
|
||||
static func isHiddenInternalSession(_ key: String) -> Bool {
|
||||
public static func isHiddenInternalSession(_ key: String) -> Bool {
|
||||
let trimmed = key.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
guard !trimmed.isEmpty else { return false }
|
||||
return trimmed == "onboarding" || trimmed.hasSuffix(":onboarding")
|
||||
}
|
||||
|
||||
/// `excludesMainSession` is for sidebars with a dedicated Home row (iOS);
|
||||
/// the macOS sidebar keeps the main session inside its sections.
|
||||
@MainActor
|
||||
static func sections(
|
||||
public static func sections(
|
||||
sessions: [OpenClawChatSessionEntry],
|
||||
currentSessionKey: String,
|
||||
mainSessionKey: String = "main",
|
||||
activeAgentID: String? = nil,
|
||||
groups: [OpenClawChatSessionGroup] = [],
|
||||
excludesMainSession: Bool = false,
|
||||
query: String) -> [Section]
|
||||
{
|
||||
let visible = self.visibleSessions(
|
||||
@@ -57,6 +48,7 @@ enum ChatSessionSidebarModel {
|
||||
currentSessionKey: currentSessionKey,
|
||||
mainSessionKey: mainSessionKey,
|
||||
activeAgentID: activeAgentID,
|
||||
excludesMainSession: excludesMainSession,
|
||||
query: query)
|
||||
// Pin state owns first placement. Group sections then preserve the
|
||||
// same tree builder, so grouped parent/child rosters still nest.
|
||||
@@ -182,7 +174,7 @@ enum ChatSessionSidebarModel {
|
||||
return trimmed?.isEmpty == false ? trimmed : nil
|
||||
}
|
||||
|
||||
static func displayName(for session: OpenClawChatSessionEntry) -> String {
|
||||
public static func displayName(for session: OpenClawChatSessionEntry) -> String {
|
||||
for candidate in [session.displayName, session.label] {
|
||||
if let trimmed = candidate?.trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
!trimmed.isEmpty
|
||||
@@ -193,13 +185,25 @@ enum ChatSessionSidebarModel {
|
||||
return self.displayName(forKey: session.key)
|
||||
}
|
||||
|
||||
static func canDeleteSession(key: String, mainSessionKey: String) -> Bool {
|
||||
/// Compact "repo \u{2387} branch" line for worktree/work sessions; mirrors the
|
||||
/// web sidebar row subtitle (ui/src/lib/session-display.ts).
|
||||
public static func workSubtitle(for session: OpenClawChatSessionEntry) -> String? {
|
||||
let repoRoot = session.worktree?.repoRoot?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
let branch = session.worktree?.branch?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
let repoName = repoRoot?.split(separator: "/").last.map(String.init)
|
||||
let shortBranch = branch.map { $0.hasPrefix("openclaw/") ? String($0.dropFirst("openclaw/".count)) : $0 }
|
||||
guard let repoName, !repoName.isEmpty else { return nil }
|
||||
guard let shortBranch, !shortBranch.isEmpty else { return repoName }
|
||||
return "\(repoName) \u{2387} \(shortBranch)"
|
||||
}
|
||||
|
||||
public static func canDeleteSession(key: String, mainSessionKey: String) -> Bool {
|
||||
let normalized = key.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
|
||||
let normalizedMain = mainSessionKey.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
|
||||
return normalized != "main" && normalized != "global" && normalized != normalizedMain
|
||||
}
|
||||
|
||||
static func canArchiveSession(
|
||||
public static func canArchiveSession(
|
||||
_ session: OpenClawChatSessionEntry,
|
||||
mainSessionKey: String) -> Bool
|
||||
{
|
||||
@@ -210,8 +214,16 @@ enum ChatSessionSidebarModel {
|
||||
status != "running"
|
||||
}
|
||||
|
||||
static func isSessionInActiveAgentScope(key: String, activeAgentID: String?) -> Bool {
|
||||
let normalizedAgent = activeAgentID?.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() ?? ""
|
||||
guard !normalizedAgent.isEmpty else { return true }
|
||||
let parts = key.split(separator: ":", maxSplits: 2, omittingEmptySubsequences: false)
|
||||
guard parts.count == 3, parts[0].lowercased() == "agent" else { return true }
|
||||
return parts[1].lowercased() == normalizedAgent
|
||||
}
|
||||
|
||||
@MainActor
|
||||
static func selectedSessionKey(
|
||||
public static func selectedSessionKey(
|
||||
sessions: [OpenClawChatSessionEntry],
|
||||
currentSessionKey: String,
|
||||
mainSessionKey: String,
|
||||
@@ -248,7 +260,7 @@ enum ChatSessionSidebarModel {
|
||||
|
||||
/// Session keys read as routing ids ("agent:main:main"); show the human
|
||||
/// part and keep the owning agent as a suffix only when it disambiguates.
|
||||
static func displayName(forKey key: String) -> String {
|
||||
public static func displayName(forKey key: String) -> String {
|
||||
let trimmed = key.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
let parts = trimmed.split(separator: ":", maxSplits: 2, omittingEmptySubsequences: false)
|
||||
guard parts.count == 3, parts[0] == "agent" else {
|
||||
@@ -266,24 +278,44 @@ enum ChatSessionSidebarModel {
|
||||
currentSessionKey: String,
|
||||
mainSessionKey: String,
|
||||
activeAgentID: String?,
|
||||
excludesMainSession: Bool,
|
||||
query: String) -> [OpenClawChatSessionEntry]
|
||||
{
|
||||
let scopedSessions = sessions.filter {
|
||||
self.isSessionInActiveAgentScope(key: $0.key, activeAgentID: activeAgentID)
|
||||
}
|
||||
let selectedSessionKey = self.selectedSessionKey(
|
||||
sessions: sessions,
|
||||
sessions: scopedSessions,
|
||||
currentSessionKey: currentSessionKey,
|
||||
mainSessionKey: mainSessionKey,
|
||||
activeAgentID: activeAgentID)
|
||||
let resolvedMainSessionKey = self.selectedSessionKey(
|
||||
sessions: scopedSessions,
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: mainSessionKey,
|
||||
activeAgentID: activeAgentID)
|
||||
let normalizedCurrent = currentSessionKey.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
|
||||
let selectedIsResolvedAlias = (normalizedCurrent == "main" || normalizedCurrent == "global") &&
|
||||
selectedSessionKey.lowercased() != normalizedCurrent
|
||||
var entries = sessions.filter { entry in
|
||||
let selectedIsMain = normalizedCurrent == "main" ||
|
||||
selectedSessionKey.caseInsensitiveCompare(resolvedMainSessionKey) == .orderedSame
|
||||
var entries = scopedSessions.filter { entry in
|
||||
if excludesMainSession,
|
||||
entry.key.caseInsensitiveCompare(resolvedMainSessionKey) == .orderedSame
|
||||
{
|
||||
// Home owns the main row. Removing it before tree construction
|
||||
// naturally promotes any retained child rows to section roots.
|
||||
return false
|
||||
}
|
||||
if selectedIsResolvedAlias, entry.key.lowercased() == normalizedCurrent {
|
||||
return false
|
||||
}
|
||||
return entry.key == selectedSessionKey ||
|
||||
(!self.isHiddenInternalSession(entry.key) && entry.archived != true)
|
||||
}
|
||||
if !entries.contains(where: { $0.key == selectedSessionKey }),
|
||||
if !(excludesMainSession && selectedIsMain),
|
||||
!entries.contains(where: { $0.key == selectedSessionKey }),
|
||||
self.isSessionInActiveAgentScope(key: selectedSessionKey, activeAgentID: activeAgentID),
|
||||
!currentSessionKey.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|
||||
{
|
||||
// Sessions can lag behind a fresh switch/new-session; keep the
|
||||
|
||||
@@ -240,6 +240,12 @@ public struct OpenClawChatSessionWorktree: Codable, Sendable, Hashable {
|
||||
public let id: String?
|
||||
public let branch: String?
|
||||
public let repoRoot: String?
|
||||
|
||||
public init(id: String?, branch: String?, repoRoot: String?) {
|
||||
self.id = id
|
||||
self.branch = branch
|
||||
self.repoRoot = repoRoot
|
||||
}
|
||||
}
|
||||
|
||||
public struct OpenClawChatAgentRuntime: Codable, Sendable, Hashable {
|
||||
@@ -255,6 +261,11 @@ public struct OpenClawChatSessionGroup: Codable, Identifiable, Sendable, Hashabl
|
||||
|
||||
public let name: String
|
||||
public let position: Int
|
||||
|
||||
public init(name: String, position: Int) {
|
||||
self.name = name
|
||||
self.position = position
|
||||
}
|
||||
}
|
||||
|
||||
public struct OpenClawChatSessionGroupsResponse: Codable, Sendable, Equatable {
|
||||
|
||||
@@ -62,8 +62,8 @@ struct ChatSessionSidebarModelTests {
|
||||
query: "")
|
||||
|
||||
#expect(sections.map(\.id) == ["pinned", "recent"])
|
||||
#expect(sections[0].sessions.map(\.key) == ["b"])
|
||||
#expect(sections[1].sessions.map(\.key) == ["c", "a"])
|
||||
#expect(sections[0].nodes.map(\.session.key) == ["b"])
|
||||
#expect(sections[1].nodes.map(\.session.key) == ["c", "a"])
|
||||
#expect(sections[1].title == "Recent")
|
||||
}
|
||||
|
||||
@@ -106,8 +106,8 @@ struct ChatSessionSidebarModelTests {
|
||||
query: "")
|
||||
|
||||
#expect(sections.map(\.id) == ["group:Projects", "recent"])
|
||||
#expect(sections[0].sessions.map(\.key) == ["exact"])
|
||||
#expect(Set(sections[1].sessions.map(\.key)) == Set(["case", "spaces"]))
|
||||
#expect(sections[0].nodes.map(\.session.key) == ["exact"])
|
||||
#expect(Set(sections[1].nodes.map(\.session.key)) == Set(["case", "spaces"]))
|
||||
}
|
||||
|
||||
@Test func `pinned descendants move to pinned section independently`() {
|
||||
@@ -134,7 +134,9 @@ struct ChatSessionSidebarModelTests {
|
||||
currentSessionKey: "main",
|
||||
query: "")
|
||||
|
||||
#expect(sections.flatMap(\.sessions).map(\.key) == ["main"])
|
||||
// Default (macOS) sections keep the main row; only Home-row sidebars
|
||||
// opt into excludesMainSession.
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["main"])
|
||||
}
|
||||
|
||||
@Test func `active session gets a placeholder row before lists load`() {
|
||||
@@ -143,7 +145,7 @@ struct ChatSessionSidebarModelTests {
|
||||
currentSessionKey: "agent:main:main",
|
||||
query: "")
|
||||
|
||||
#expect(sections.flatMap(\.sessions).map(\.key) == ["agent:main:main"])
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:main:main"])
|
||||
}
|
||||
|
||||
@Test func `main aliases select the resolved row without adding a placeholder`() {
|
||||
@@ -153,9 +155,10 @@ struct ChatSessionSidebarModelTests {
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: "agent:default:main",
|
||||
activeAgentID: "default",
|
||||
excludesMainSession: true,
|
||||
query: "")
|
||||
|
||||
#expect(sections.flatMap(\.sessions).map(\.key) == ["agent:default:main"])
|
||||
#expect(sections.flatMap(\.nodes).isEmpty)
|
||||
#expect(ChatSessionSidebarModel.selectedSessionKey(
|
||||
sessions: sessions,
|
||||
currentSessionKey: "main",
|
||||
@@ -163,6 +166,53 @@ struct ChatSessionSidebarModelTests {
|
||||
activeAgentID: "default") == "agent:default:main")
|
||||
}
|
||||
|
||||
@Test func `agent scope keeps active agent and unprefixed sessions`() {
|
||||
let sections = ChatSessionSidebarModel.sections(
|
||||
sessions: [
|
||||
self.entry(key: "agent:ops:main", updatedAt: 400),
|
||||
self.entry(key: "agent:ops:deploy", updatedAt: 300),
|
||||
self.entry(key: "agent:other:private", updatedAt: 200),
|
||||
self.entry(key: "global-tool", updatedAt: 100),
|
||||
],
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: "agent:ops:main",
|
||||
activeAgentID: "ops",
|
||||
excludesMainSession: true,
|
||||
query: "")
|
||||
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:ops:deploy", "global-tool"])
|
||||
#expect(ChatSessionSidebarModel.isSessionInActiveAgentScope(
|
||||
key: "agent:OPS:deploy",
|
||||
activeAgentID: "ops"))
|
||||
#expect(!ChatSessionSidebarModel.isSessionInActiveAgentScope(
|
||||
key: "agent:other:private",
|
||||
activeAgentID: "ops"))
|
||||
#expect(ChatSessionSidebarModel.isSessionInActiveAgentScope(
|
||||
key: "global-tool",
|
||||
activeAgentID: "ops"))
|
||||
}
|
||||
|
||||
@Test func `main row is excluded while its children are promoted`() {
|
||||
let sections = ChatSessionSidebarModel.sections(
|
||||
sessions: [
|
||||
self.entry(
|
||||
key: "agent:ops:main",
|
||||
updatedAt: 300,
|
||||
childSessions: ["agent:ops:child"]),
|
||||
self.entry(
|
||||
key: "agent:ops:child",
|
||||
updatedAt: 200,
|
||||
parentSessionKey: "agent:ops:main"),
|
||||
],
|
||||
currentSessionKey: "main",
|
||||
mainSessionKey: "agent:ops:main",
|
||||
activeAgentID: "ops",
|
||||
excludesMainSession: true,
|
||||
query: "")
|
||||
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:ops:child"])
|
||||
}
|
||||
|
||||
@Test func `global aliases select their agent wrapped row`() {
|
||||
let sessions = [
|
||||
self.entry(key: "global", updatedAt: 200),
|
||||
@@ -180,7 +230,7 @@ struct ChatSessionSidebarModelTests {
|
||||
currentSessionKey: "global",
|
||||
mainSessionKey: "agent:main:main",
|
||||
activeAgentID: "ops") == "agent:ops:global")
|
||||
#expect(sections.flatMap(\.sessions).map(\.key) == ["agent:ops:global"])
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:ops:global"])
|
||||
}
|
||||
|
||||
@Test func `query filters on display name and key`() {
|
||||
@@ -192,7 +242,7 @@ struct ChatSessionSidebarModelTests {
|
||||
currentSessionKey: "agent:main:main",
|
||||
query: "research")
|
||||
|
||||
#expect(sections.flatMap(\.sessions).map(\.key) == ["agent:main:research"])
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:main:research"])
|
||||
}
|
||||
|
||||
@Test func `session keys render as human names`() {
|
||||
@@ -316,7 +366,7 @@ struct ChatSessionSidebarModelTests {
|
||||
#expect(nodes[0].children.map(\.id) == ["child"])
|
||||
#expect(nodes[0].children[0].children.map(\.id) == ["grandchild"])
|
||||
#expect(nodes[0].badges == .init(runningCount: 1, failedCount: 1, hasUnread: true))
|
||||
#expect(nodes[0].hasUnreadDescendant)
|
||||
#expect(nodes[0].children.contains { $0.badges.hasUnread })
|
||||
}
|
||||
|
||||
@Test func `tree breaks cycles without dropping or duplicating sessions`() {
|
||||
|
||||
Reference in New Issue
Block a user