feat(ui): hover preview of latest tasks on the running-tasks status row (#107297)

* feat(ui): add hover preview popover to running-tasks status row

* chore(ui-mock): exercise finished tasks and status-preview overflow in background-tasks mock

* refactor(ui): move status row into chat-background-tasks-status module (LOC ratchet)

* test(ui): add statusRowId to background-tasks props fixtures

* chore(i18n): record statusPreviewMore fallback baseline

* chore(i18n): sync locale bundles for statusPreviewMore
This commit is contained in:
Peter Steinberger
2026-07-14 01:57:30 -07:00
committed by GitHub
parent 4341d85268
commit d169dc4a12
69 changed files with 413 additions and 148 deletions
@@ -46,6 +46,29 @@ export function buildBackgroundTasksMock(baseTime: number) {
lastToolName: "read",
childSessionKey: taskSessionKey,
},
{
id: "task-mock-running-2",
taskId: "task-mock-running-2",
status: "running",
runtime: "subagent",
agentId: "openclaw-mock",
title: "Audit gateway event scope guards",
createdAt: now - 95_000,
startedAt: now - 95_000,
updatedAt: now - 1_000,
},
...[1, 2, 3, 4, 5].map((n) => ({
id: `task-mock-finished-${n}`,
taskId: `task-mock-finished-${n}`,
status: n === 3 ? "failed" : "completed",
runtime: "subagent",
agentId: "openclaw-mock",
title: `Finished mock task number ${n} with a fairly long title`,
createdAt: now - n * 600_000,
startedAt: now - n * 600_000,
endedAt: now - n * 500_000,
updatedAt: now - n * 500_000,
})),
],
},
};
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:23.793Z",
"generatedAt": "2026-07-14T08:44:41.065Z",
"locale": "ar",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1694,6 +1694,7 @@
{"cache_key":"f403a8cccaaef7bf1c768ee9d9d974450942ac5789c8ae64aaaaf4ca51f8aa3b","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"cron.suggestions.ideas.watchdog.prompt","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Check that my services and gateway are healthy: scan recent logs for new errors, restarts, or unusual load. Reply with a single short all-clear line when everything is fine; if something looks broken, report what failed and where to start looking.","text_hash":"81c27753a3ba9ba3f5687e7b00bf943abdf2bf187ac0f2aed10136f5dc043aec","tgt_lang":"ar","translated":"تحقق من أن خدماتي و Gateway بصحة جيدة: افحص السجلات الأخيرة بحثاً عن أخطاء جديدة، أو إعادة تشغيل، أو حمل غير معتاد. أجب بسطر قصير واحد يفيد بأن كل شيء على ما يرام عندما يكون كذلك؛ وإذا بدا أن شيئاً معطلاً، أفد بما فشل وأين تبدأ البحث.","updated_at":"2026-07-11T22:59:32.634Z"}
{"cache_key":"f44aace01ecddbcbc07a3ecd09837e5b6df1d2f55e59538ae47162940bd9ab79","model":"gpt-5.6-sol","provider":"openai","segment_id":"modelProviders.add.saved","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Provider {provider} added.","text_hash":"e5ddbd2d85055aa073b50d1bba07d4cf29cbd60520398f3da1d77e432f124f03","tgt_lang":"ar","translated":"تمت إضافة المزوّد {provider}.","updated_at":"2026-07-13T16:32:18.166Z"}
{"cache_key":"f4822cf5776f0b67e4895bf2c3625ce775e8a3012b6833e69c162c2f63fd3afd","model":"gpt-5.6-sol","provider":"openai","segment_id":"configView.viewPendingChange","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"View {count} pending change","text_hash":"c4850cc53c216a4f10641b44ad9dd1b6a89bc9ffde5697b6cba6e9e76c1fe376","tgt_lang":"ar","translated":"عرض تغيير معلّق واحد من أصل {count}","updated_at":"2026-07-12T06:59:07.079Z"}
{"cache_key":"f491a016942ff6737b0b236e98d5ead24c0f8d932c0ffe1cca44c84c12078d61","model":"gpt-5.6-sol","provider":"openai","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"ar","translated":"+{count} أخرى","updated_at":"2026-07-12T06:59:23.240Z"}
{"cache_key":"f49b25305df17d43d513ee2d7b88711e61dfb9eb3c69f9a91ebdf26944afd096","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.contextUsage.open","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Open context usage details","text_hash":"8765adde14aebe600e7c9c69196c5b4a9ccc654802a94626d0391d9eaed725b1","tgt_lang":"ar","translated":"فتح تفاصيل استخدام السياق","updated_at":"2026-07-05T10:16:14.365Z"}
{"cache_key":"f4ac00d519c812ca6aee67bb3ff6737d6130e02187c343b6efa70733049645cb","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.unknownStatus","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Unknown","text_hash":"b764cdc0eab7137467211272fa539f1260d1bf2e71bcf6ff3bdc960f5c16aa14","tgt_lang":"ar","translated":"غير معروف","updated_at":"2026-06-16T14:15:34.787Z"}
{"cache_key":"f4c1d2f3c85270540289f6aa90293ca0dc21f224a71ff3cf1ca07df6fc49c231","model":"gpt-5.5","provider":"openai","segment_id":"chat.pullRequests.merged","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Merged","text_hash":"bd0a06202c440a9ee86f50165aa66886259d89c3d219e2ef47a759cde6a38c00","tgt_lang":"ar","translated":"مدمج","updated_at":"2026-07-10T17:04:04.784Z"}
+1 -1
View File
@@ -1,5 +1,5 @@
{
"fallbacks": {},
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"version": 1
}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:22.410Z",
"generatedAt": "2026-07-14T08:44:38.456Z",
"locale": "de",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -649,6 +649,7 @@
{"cache_key":"5b0ab59138fd65f7f3a236db3c04458d74c99539c8ab736086c9637395c06d55","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.expand","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Expand session workspace","text_hash":"ac1d210db40c5026879774849ad74a9e1247523192a795ac33965b3ee72691c2","tgt_lang":"de","translated":"Sitzungsarbeitsbereich aufklappen","updated_at":"2026-06-16T14:12:59.821Z"}
{"cache_key":"5b10a9b2d0200a0314dc1fb79a78bb54e14890c29f048505a180a17401d71a6c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configView.secretCount","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"{count} secret","text_hash":"0e6d25bb2eb2d8b98f478224b4330f249de6465d2c06a012c51575b3dd56cb6b","tgt_lang":"de","translated":"{count} Geheimnis","updated_at":"2026-07-12T06:27:28.099Z"}
{"cache_key":"5b18396bb0c5597ea061c3d0fa03c2952dd5d6c7ef810eec6285449ba62e5840","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.sideChat.close","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Close side chat","text_hash":"2a1484f044f8f6a1108e2eaaf52849239fa7317678c770fc392907a9a45e6570","tgt_lang":"de","translated":"Seitenchat schließen","updated_at":"2026-07-12T06:29:30.665Z"}
{"cache_key":"5b1f05260942110f7fa00dd79ca5c78f3bac40b6874d2949229f063577741f14","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"de","translated":"+{count} weitere","updated_at":"2026-07-12T06:27:47.285Z"}
{"cache_key":"5b7965dfd48f4c45f15c3ffbe32367b3eb183bf5058a6b38f1a8a9b55fa2c2e8","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.detailPanel.discard","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Discard","text_hash":"eb1a70e39274bb762b5d7c1adb5debeea2b05e12af28207f21a375b596853273","tgt_lang":"de","translated":"Verwerfen","updated_at":"2026-07-12T06:29:30.665Z"}
{"cache_key":"5ba3b2fdc5d07dd3ae310f313f0e1753668ff9f34605e34af0abb0ae3da112a1","model":"gpt-5.5","provider":"openai","segment_id":"codexSessions.sidebar.viewAll","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"View all Codex sessions","text_hash":"0646a48bff46e85a2e25fccd3c8b7aeb7ba9136870564c1cfe66da32d8e494ff","tgt_lang":"de","translated":"Alle Codex-Sitzungen anzeigen","updated_at":"2026-07-11T10:24:46.061Z"}
{"cache_key":"5bfb68ecba459d574c0393241dc1ff639e34d1cb0da65740570d921a3a230c3a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.toolCatalog.groups.runtime","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Runtime","text_hash":"1093115897879aa3ad9511a1dc2850929cfb60ba45ec741605f69f5d20203472","tgt_lang":"de","translated":"Laufzeit","updated_at":"2026-07-12T06:25:43.020Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:22.632Z",
"generatedAt": "2026-07-14T08:44:38.882Z",
"locale": "es",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -864,6 +864,7 @@
{"cache_key":"753a5f5b7726788c8cde59c97d2ab04de0efd39772cf386a610ed42a5a9b0eaf","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.loadMore","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Load more","text_hash":"ac8991ef01019cf55a2426194a05959e0cb886333f1a332ff4f442320d165400","tgt_lang":"es","translated":"Cargar más","updated_at":"2026-07-09T10:01:43.721Z"}
{"cache_key":"75410af1327b1761d347bdda49c087b62dc7a1566a59a4d13ec581d28b1fd5e7","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.lastActive","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Last active","text_hash":"bcdf701c4dfbaee3a2162f9b9affd87a23a13426c391f95e964d983851b58a05","tgt_lang":"es","translated":"Última actividad","updated_at":"2026-07-05T21:00:41.074Z"}
{"cache_key":"754fb0d4b62e0e4c86bf28754b0f80070018b0cac8e4150f996afd10af34af88","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.detail.clickToPreview","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"· click to preview","text_hash":"e7122b28694c3a1928054e15e27f203aaae8d00f9c34ae04dedad01d8b652fb2","tgt_lang":"es","translated":"· haz clic para previsualizar","updated_at":"2026-07-12T06:34:29.611Z"}
{"cache_key":"75d33a2233e190e4403d41cb7d29ce41aa125f8914decd430a78bd2b03e6c6e1","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"es","translated":"+{count} más","updated_at":"2026-07-12T06:33:39.673Z"}
{"cache_key":"767ae24de02ebb17a5b498760a677c7b3694775e9596bdddaf3065f88e2d3e0e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.toolCatalog.groups.runtime","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Runtime","text_hash":"1093115897879aa3ad9511a1dc2850929cfb60ba45ec741605f69f5d20203472","tgt_lang":"es","translated":"Entorno de ejecución","updated_at":"2026-07-12T06:31:55.983Z"}
{"cache_key":"76af8a08c677eb76940779b68a532406252d95d69a7c89b01c82786e48d99f4c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.commands.fill","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"fill","text_hash":"dcd32479a72e55b29a03a586d8a483a05be0ce87cc5c25c7bad23079fc0356b3","tgt_lang":"es","translated":"rellenar","updated_at":"2026-07-12T06:35:10.787Z"}
{"cache_key":"76b540f6b811c94c53486c77b3eb80c4426ab7deb04960346f33117492f9658a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agentTools.loadConfig","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Load the gateway config to adjust tool profiles.","text_hash":"0e9291ef2bab7a6a96376087b37d281a973319e0c5b893360b67cf5681d8c863","tgt_lang":"es","translated":"Carga la configuración del gateway para ajustar los perfiles de herramientas.","updated_at":"2026-07-12T06:33:33.671Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:26.027Z",
"generatedAt": "2026-07-14T08:44:45.178Z",
"locale": "fa",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1445,6 +1445,7 @@
{"cache_key":"d249459b07714a3fed8c372f3c34f44ae6913d237e7cc038d6331c957cbe6c06","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.overview.fallbacks","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Fallbacks","text_hash":"7a508ceac71e07fa7d38ec2ef91c387e4a47d65c7edd799b8e70b15e9cda579d","tgt_lang":"fa","translated":"جایگزین‌ها","updated_at":"2026-07-12T06:53:17.312Z"}
{"cache_key":"d26497e841d86df0c24bb71aa610a5ca3ed3a03f7ad7158ffd48091e5f15aec5","model":"gpt-5.5","provider":"openai","segment_id":"workboard.badgeAttachments","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"{count} attachments","text_hash":"7bb1847693bc91e6e4624d996a96840396a71052786ab143ccb47fbdaa77cf41","tgt_lang":"fa","translated":"{count} پیوست","updated_at":"2026-05-30T15:38:53.293Z"}
{"cache_key":"d2cf99c3bc3afa18c2f65798dfc85d91d8aaad8fb13c8502f2cae27edaec0485","model":"gpt-5.6-sol","provider":"openai","segment_id":"agentScope.allAgents","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"All agents","text_hash":"54c32d3e2cfa1cc879f746643e6b41360541692fc0a163f3793595510398e6f5","tgt_lang":"fa","translated":"همه عامل‌ها","updated_at":"2026-07-13T11:01:33.963Z"}
{"cache_key":"d2d01dc1264c175214882254a81cac25c59e36624c0d4d60b3e3d52df7f0cf49","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"fa","translated":"+{count} مورد دیگر","updated_at":"2026-07-12T06:56:19.156Z"}
{"cache_key":"d36522949d6d08c2be1066e5a170756fdefb5f1a68da3e109583a2ef00fce803","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.actions.remove","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Remove","text_hash":"c3812fc4acb861d5182fc2b8155f327f736fbe5e5eb86a7bd7afcb6dc5497282","tgt_lang":"fa","translated":"حذف","updated_at":"2026-07-12T06:59:42.434Z"}
{"cache_key":"d370a07271724bff0901ca59a3a83a61be009a06ea72974d88871d536511a5b6","model":"claude-opus-4-8","provider":"anthropic","segment_id":"mcpPage.parallel","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"parallel","text_hash":"83a00300ad6a2502c3fd8f04f50b47f5ce60496614534ebf6bf9fc85c85e1b0d","tgt_lang":"fa","translated":"موازی","updated_at":"2026-07-12T06:56:55.723Z"}
{"cache_key":"d378ba71193e340b3bec7cfd67bd837a159cc83eac71e96ffef79b1f60f52786","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.revision.placeholder","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Example: Make this use Gmail labels instead of unread search, and add a safer dry-run step.","text_hash":"7edb7073a0feb0a4c7077e287eec6b05ceea500e1d0ed452b274c211562042ec","tgt_lang":"fa","translated":"مثال: این را به‌جای جستجوی خوانده‌نشده از برچسب‌های Gmail استفاده کن، و یک مرحله اجرای آزمایشی امن‌تر اضافه کن.","updated_at":"2026-07-12T06:57:42.109Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:23.308Z",
"generatedAt": "2026-07-14T08:44:40.147Z",
"locale": "fr",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1025,6 +1025,7 @@
{"cache_key":"8fbe3ddaee1855b6f3532db5de8e15561946607e558f67713b5d697ef238891e","model":"gpt-5.5","provider":"openai","segment_id":"subtitles.tasks","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Background tasks: subagents, cron runs, CLI.","text_hash":"86b1cdd143e0bee775431403456aa967dad1c7f0a952e10200c332d8ba382d35","tgt_lang":"fr","translated":"Tâches en arrière-plan : sous-agents, exécutions cron, CLI.","updated_at":"2026-07-06T08:42:28.841Z"}
{"cache_key":"9011fdf2adf6bd93b6a660abc0f27d3b089c8772bc7135f9ff8b2d173e505ced","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configPage.channels.whatsapp","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"WhatsApp","text_hash":"6a40edf1fc87a29f243a7eefdbed57d19bfe16ab2e039d7ae1a44c097297e2f3","tgt_lang":"fr","translated":"WhatsApp","updated_at":"2026-07-12T06:33:38.128Z"}
{"cache_key":"901f87ed7e72269c4f671b54f3e134f1fb90be7ed60221ef7c5fe7b4afcd1629","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.openSourcePage","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Open source page","text_hash":"adceca1a6bf7fd8414cfd2d97781d11393693b85e108d57998c6c7a90b861191","tgt_lang":"fr","translated":"Ouvrir la page source","updated_at":"2026-07-12T06:35:45.465Z"}
{"cache_key":"904b11824c22e7e3d847dbb96735079bee602762f15714fddaf36f91bb357407","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"fr","translated":"+{count} de plus","updated_at":"2026-07-12T06:32:07.279Z"}
{"cache_key":"9068ef1cd848bb0016a8e3a341f8dd37af78709f58df78f531af608e6f0a4f82","model":"gpt-5.6-sol","provider":"openai","segment_id":"modelProviders.notes.removeKey","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Remove API key for {provider} from Control UI","text_hash":"bec2c63b5f26f0dcc7a9d366736e31adab5e4550dfacf236c08f260c39831aee","tgt_lang":"fr","translated":"Supprimer la clé API pour {provider} depuis la Control UI","updated_at":"2026-07-13T16:31:59.089Z"}
{"cache_key":"907b09795789cf241ab4c1f560071c47dca23b82e4753a7a236f92801226603e","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.pinned","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Pinned","text_hash":"f20c879465551f0d1457a13d4390d0f1ece456b115d75463169c5d55341b9b1e","tgt_lang":"fr","translated":"Épinglée","updated_at":"2026-07-02T14:30:13.470Z"}
{"cache_key":"9081304fdf85ba875f2c56817d0143370a9baefc005fd5eb72d3d4428ca052f9","model":"gpt-5.5","provider":"openai","segment_id":"chat.pullRequests.checksPassed","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Passed","text_hash":"436fe71bb9561f0596161c4d50c7b23327b4189acaf63dc89f4f9205b67a7528","tgt_lang":"fr","translated":"Réussies","updated_at":"2026-07-10T16:20:01.450Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:23.547Z",
"generatedAt": "2026-07-14T08:44:40.625Z",
"locale": "hi",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1429,6 +1429,7 @@
{"cache_key":"718ccb58f6ef97f10a48761d6e4e23cc1953978bc0ae304da2294d9255010a0d","model":"gpt-5.5","provider":"openai","segment_id":"workboard.detailNotePlaceholder","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Add a decision, blocker, or proof note...","text_hash":"0e40ea8371be2fcbd8379458b0da541ca0dce5dc86357dea64a4d8fac1c742dc","tgt_lang":"hi","translated":"निर्णय, अवरोधक, या प्रमाण नोट जोड़ें...","updated_at":"2026-06-26T21:32:11.358Z"}
{"cache_key":"7201c54121eb72d2b7120920d6915e5c243c3ab47affbfff74b3bf045f3c9b4a","model":"gpt-5.5","provider":"openai","segment_id":"workboard.taskStatus.cancelled","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Task cancelled","text_hash":"1a7f1e13e7ad3ebeb832eeec64ef238c4ce3eb8d74df61aa0ef575835570cc05","tgt_lang":"hi","translated":"कार्य रद्द किया गया","updated_at":"2026-06-26T21:33:00.304Z"}
{"cache_key":"72028647b44b938dd3c3a47c33eb98369359dcbd051836a07dbb0b902014390c","model":"gpt-5","provider":"openai","segment_id":"codexSessions.untitled","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Untitled Codex session","text_hash":"c70b89c47992206d82993f9d295c9d3368a993fbc0899eef1bafb25277e5c88d","tgt_lang":"hi","translated":"बिना शीर्षक वाला Codex सेशन","updated_at":"2026-07-09T10:01:43.755Z"}
{"cache_key":"7205748bd80ec00a97c8ed286ae6d47d568ed7a87d7bcf2d66361abf045b653e","model":"gpt-5.5","provider":"openai","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"hi","translated":"+{count} और","updated_at":"2026-06-26T21:35:20.292Z"}
{"cache_key":"721d31e2c0929afd42ee138a26fca55aac6d9a1feb8f8464638986ec39532083","model":"gpt-5.5","provider":"openai","segment_id":"usage.presets.last7d","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"7d","text_hash":"a7c742643c7cc56cde61922fb5e8d3548a30b717e8e8b38bc5ec903f2c0be6d2","tgt_lang":"hi","translated":"7d","updated_at":"2026-06-26T21:34:31.303Z"}
{"cache_key":"722d1c060a41e12f2a041d594d463846a830e0900ac0c74e2a27e71160146cc5","model":"gpt-5.5","provider":"openai","segment_id":"cron.form.minutes","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Minutes","text_hash":"4f846a84e7fc9ef6e68468c270c9153c20204641bd7b839ad4b8e5233e1c86d0","tgt_lang":"hi","translated":"मिनट","updated_at":"2026-06-26T21:37:38.564Z"}
{"cache_key":"72433321e68e6184d42645d962c80eab5a7a33fdcaaef29e844eea0f6ea07ca2","model":"gpt-5.5","provider":"openai","segment_id":"usage.details.collapseAll","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Collapse All","text_hash":"55988e28a4e8720a588c5c53fd47616d929a404d3d2af7e6f8ba313dce6dc3e4","tgt_lang":"hi","translated":"सभी संक्षिप्त करें","updated_at":"2026-06-26T21:35:26.182Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:24.718Z",
"generatedAt": "2026-07-14T08:44:43.018Z",
"locale": "id",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -619,6 +619,7 @@
{"cache_key":"5bac50a3984a3f5c33d7a38a9ad3acff5062c14376a0e7b93d89bc86669ec757","model":"claude-opus-4-8","provider":"anthropic","segment_id":"pluginsPage.connectorDescriptions.github","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"PR review queues, issue triage, and repo Q&A through the official GitHub MCP.","text_hash":"56ac30344e3daa6df914513e72ae6a4b2043974ae3fa1c003388536d5635e3d1","tgt_lang":"id","translated":"Antrean tinjauan PR, triase isu, dan tanya jawab repo melalui MCP GitHub resmi.","updated_at":"2026-07-12T06:48:01.260Z"}
{"cache_key":"5baecf2bfca99c5cb9e9cb2c42d7cdbbcd5be85559579d95e2fea8c94fb21504","model":"gpt-5.6-sol","provider":"openai","segment_id":"cron.form.summaryCron","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Cron schedule {expr}","text_hash":"953e6a80deb2a7c7fd3a8a29e4c363baa92bc4df48ae58ac0c7dafee554fd510","tgt_lang":"id","translated":"Jadwal Cron {expr}","updated_at":"2026-07-12T09:22:20.313Z"}
{"cache_key":"5bdd3a4f3266fa546320e8fb9785c9ab4804675fcc13d993fdfa4fb1caf36fbb","model":"gpt-5.5","provider":"openai","segment_id":"newSession.worktreeNamePlaceholder","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"auto","text_hash":"929260ad9b9ea9fe0f3553dd964f4ff3deb5792efd031a2b90f573fe91f012bb","tgt_lang":"id","translated":"otomatis","updated_at":"2026-07-10T15:21:37.072Z"}
{"cache_key":"5c0dd32207ef1853b9900958aa8d6837cd560de3278938ea0c55c573bac48cd1","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"id","translated":"+{count} lainnya","updated_at":"2026-07-12T06:44:55.794Z"}
{"cache_key":"5c196176bd1822141e221eaded7d505337799478a7633ae23da4228c19cf8a83","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.inventory.active","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"active","text_hash":"96879611650f80a81392a52e0db9b0237669087c4518e1c130e541a505e0eeef","tgt_lang":"id","translated":"aktif","updated_at":"2026-07-12T06:45:01.302Z"}
{"cache_key":"5c493b810458baca1f3fc54dc4f81c67a883f82b50dd039e9bbc1b7cc3b0be0c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.compaction.description","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"The compacted transcript is preserved as a checkpoint. Open session checkpoints to branch or restore from that compacted view.","text_hash":"97c8fdc1029344f0bf90f8df9ca40048596738ef54806c3b903b44d823e1d03e","tgt_lang":"id","translated":"Transkrip yang dipadatkan disimpan sebagai checkpoint. Buka checkpoint sesi untuk membuat cabang atau memulihkan dari tampilan yang dipadatkan tersebut.","updated_at":"2026-07-12T06:49:01.783Z"}
{"cache_key":"5c54ae0e95e5d4c4d546795e9e6d91a8a18ef2beda212fd6230376084e5321c1","model":"claude-opus-4-8","provider":"anthropic","segment_id":"quickSettings.personal.assistantIdentity","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Assistant identity","text_hash":"a9335181b681b52ae4ab368b9c52b0ad6a0ec6f809f3dc33de3df596d1361569","tgt_lang":"id","translated":"Identitas assistant","updated_at":"2026-07-12T06:46:23.208Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:24.028Z",
"generatedAt": "2026-07-14T08:44:41.556Z",
"locale": "it",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -841,6 +841,7 @@
{"cache_key":"7af254caf9222bf3b3e7607f3904fda0b2da5432743ab068b817f6cec54cb47b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.overview.fallbacks","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Fallbacks","text_hash":"7a508ceac71e07fa7d38ec2ef91c387e4a47d65c7edd799b8e70b15e9cda579d","tgt_lang":"it","translated":"Fallback","updated_at":"2026-07-12T06:38:27.421Z"}
{"cache_key":"7b143d96aec7379d4c469825d69aa98455ab5fec717afc4f8bf7d56295e9b9cf","model":"gpt-5.6-sol","provider":"openai","segment_id":"cron.runs.emptyTitle","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"No runs yet","text_hash":"306b45db20163464c2774564e0d61aaabdcf961067fcddb3a14cbc29e65fd0f7","tgt_lang":"it","translated":"Ancora nessuna esecuzione","updated_at":"2026-07-12T08:38:10.855Z"}
{"cache_key":"7b236a6bd4776b29f6b6b45bc52e9c1aa80e823f19ed29406ec9f2c3b4405edb","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.form.repeat","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Repeat","text_hash":"b6b7a0065808a62e7d5781b356c5ddba4e000433c34b5d561d200158a4443eb1","tgt_lang":"it","translated":"Ripeti","updated_at":"2026-07-12T06:42:36.545Z"}
{"cache_key":"7b43f12af553cdce453d2ac51f2055f728a3ae778e47843b0bfc1b94e4b1ad82","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"it","translated":"+{count} altri","updated_at":"2026-07-12T06:40:25.148Z"}
{"cache_key":"7b474b2776a04ee47f22d88c9d4dee21367526f9fd4f8d9208ae1251ababb5a9","model":"gpt-5.6-sol","provider":"openai","segment_id":"chat.progressLabels.pearling","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Pearling","text_hash":"f9777b12e8f49df274c843c278ce466de6991d5f57b954686bd8fc2ebeed314d","tgt_lang":"it","translated":"Perlando","updated_at":"2026-07-14T04:54:09.261Z"}
{"cache_key":"7b54485c9bc6e8ba66776c143833409ce15bb393a7d3d1dc67b1762cd9fdfedf","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configView.sections.broadcast","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Broadcast","text_hash":"17bc9178343601795dbd6d0e4328dcade21e406e6514640250c79ac9317ee81a","tgt_lang":"it","translated":"Broadcast","updated_at":"2026-07-12T06:39:43.229Z"}
{"cache_key":"7b69d6ec9d622eb0427cec231db772635508b697987b21d2de1130d8dde27db8","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.pageDetails","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Page details","text_hash":"86bbe3b1127c4076f48948f6a5a526db2d32efdef1f116d951b8f790dbb811b9","tgt_lang":"it","translated":"Dettagli pagina","updated_at":"2026-07-12T06:42:00.950Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:22.856Z",
"generatedAt": "2026-07-14T08:44:39.294Z",
"locale": "ja-JP",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1556,6 +1556,7 @@
{"cache_key":"eb472182ec7521d199f725fd4e9c83a9ef7eb91bb34f851cc046c05a225969ab","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.pageDetails","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Page details","text_hash":"86bbe3b1127c4076f48948f6a5a526db2d32efdef1f116d951b8f790dbb811b9","tgt_lang":"ja-JP","translated":"ページの詳細","updated_at":"2026-07-12T06:35:46.041Z"}
{"cache_key":"eb68742ac7bd103bbee1f3eb52966f3fe3ff11975fbdbe78f29fd12056ac36da","model":"claude-opus-4-8","provider":"anthropic","segment_id":"quickSettings.appearance.themes.claw","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Claw","text_hash":"587cfbbbcd42a71ba7f33f8051d5c354707fa1ff227cab11452c3ba2147a8682","tgt_lang":"ja-JP","translated":"Claw","updated_at":"2026-07-12T06:32:58.919Z"}
{"cache_key":"eb88685affb39067dbaf9ed8c5515d447f11328c3ef7396c752521ad0e8e05c4","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.empty.searchTitle","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"No matching proposals","text_hash":"234a276112b9461d57c89b98e3fb75e83958d3ed2df5143927db7c77e99ff209","tgt_lang":"ja-JP","translated":"一致する提案はありません","updated_at":"2026-07-12T06:35:04.039Z"}
{"cache_key":"eb8a13af5e4fc9bc4ae97b3ddfa48467c5819beb15e863b3d2ea8e12abda9126","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"ja-JP","translated":"+{count}件","updated_at":"2026-07-12T06:31:38.844Z"}
{"cache_key":"eb8f78b67d3fcf8dd4e5b7ab019294f8920b2d84a05c4a3ebdfb8f93fe82b167","model":"claude-opus-4-8","provider":"anthropic","segment_id":"quickSettings.personal.avatarPlaceholder","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"JD or 🦞","text_hash":"0c8423364cee2ff9cfdda023eae04fb8f75f3be33eb2ea07cd9aa9b720e7a5fd","tgt_lang":"ja-JP","translated":"JD または 🦞","updated_at":"2026-07-12T06:33:11.331Z"}
{"cache_key":"eb9f2456f3b345830ced22648b81b7bb3a0e8bc2d977f92c77c485c35fe90394","model":"claude-opus-4-8","provider":"anthropic","segment_id":"pluginsPage.connectorDescriptions.grafana","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Grafana know-how and community connectors for dashboards and alerts.","text_hash":"5e33b161935bee02bb2a242d88518dcf5cee29ce9898e6176189e5af51c099b6","tgt_lang":"ja-JP","translated":"ダッシュボードとアラートのためのGrafanaのノウハウとコミュニティコネクタ。","updated_at":"2026-07-12T06:34:51.337Z"}
{"cache_key":"eba3b0f8128b91b14850c25d626a6997c16d0ebee07b899c49d6cf898d8f1f5f","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewRecentlyDone","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Recently done","text_hash":"46b889592a2f5e79197f62b5f96c76993545626bf207740ea58632ceed9623be","tgt_lang":"ja-JP","translated":"最近完了","updated_at":"2026-06-17T14:14:04.173Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:23.079Z",
"generatedAt": "2026-07-14T08:44:39.709Z",
"locale": "ko",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -573,6 +573,7 @@
{"cache_key":"55dc7975a66e560e42b8c1a69dc431391abbc44dd3a666ec8e7d71f3f16dabba","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.messages.deleteMessage","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Delete message","text_hash":"87e7176a7ce700af0c4afe34a922d1401eec9611ffc5a99bdbf032e8654c2e9b","tgt_lang":"ko","translated":"메시지 삭제","updated_at":"2026-07-12T06:36:13.954Z"}
{"cache_key":"566503efa262a223d812e4c7cd93affe462c6d5aca8d7e9d2c2c1fff2ba67d97","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configForm.sections.meta.label","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Metadata","text_hash":"9eddf573cb509f1f62df633e25c052ac1b2a0ff9241e70223c77c73e834c0045","tgt_lang":"ko","translated":"메타데이터","updated_at":"2026-07-12T06:32:58.583Z"}
{"cache_key":"5680c05711535d47eb28edea6b83ae99c449a0ace312d6d1b7a75f03a868b4fd","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.queue.noStatus","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"No {status} proposals.","text_hash":"544c678efbbaddc044e6193554b36e1ca8c8a6d688cdfecba0fb78ffa12c07c7","tgt_lang":"ko","translated":"{status} 제안이 없습니다.","updated_at":"2026-07-12T06:35:19.851Z"}
{"cache_key":"568d41123a62b8fd7f3ee7901d91dc599972719ae182eaac7ef7a2d1fc8a764f","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"ko","translated":"+{count}개 더보기","updated_at":"2026-07-12T06:31:59.316Z"}
{"cache_key":"569bd0c791ef788bf7eb55d2f8215c2b2229b495b75436a39423f2a8c775bf74","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.execApprovals.native","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Native","text_hash":"d509e493885298a23c55f83c133e5d725f24dd6cc67cf734baa2c11b220ab809","tgt_lang":"ko","translated":"네이티브","updated_at":"2026-07-12T06:32:06.418Z"}
{"cache_key":"56be37c3e44a0b1334d627212fddd5d277864f5d51c2e7e208742177655e2807","model":"gpt-5.5","provider":"openai","segment_id":"browser.title","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Browser","text_hash":"d31de1a5c5c8ba2a210a167cf0d0dc2425c57ea7525f4b73a4b7ab934af79dfc","tgt_lang":"ko","translated":"브라우저","updated_at":"2026-07-11T02:18:07.814Z"}
{"cache_key":"576cbf7a2f4e7f7b3dff70872c663dcc38eac2a10893d2ca7fca500bc30741a0","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.skillsPanel.loadAgent","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Load skills for this agent to view workspace-specific entries.","text_hash":"8071e15c0be9eb4b50a191485fa0537d85f7c834d61224dd4321140c438cc94b","tgt_lang":"ko","translated":"워크스페이스별 항목을 보려면 이 에이전트의 스킬을 로드하세요.","updated_at":"2026-07-12T06:32:38.783Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:25.782Z",
"generatedAt": "2026-07-14T08:44:44.754Z",
"locale": "nl",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -394,6 +394,7 @@
{"cache_key":"340d741dad02479420f25da0620b522a94aa632e4860053c07c41bf5232d5e9a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configView.notifications.permission","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Permission","text_hash":"229efc8f526335f103d962810fe99f785811ad8ed36b9437a4a215a44c7152fe","tgt_lang":"nl","translated":"Toestemming","updated_at":"2026-07-12T06:54:02.978Z"}
{"cache_key":"343691fec3a5dc9c8cd0a0e84f07d5a4456995761893fecaebe0d3876970b717","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configView.notifications.unsupported","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Unsupported","text_hash":"54324658e2eba91c826cb01a802414559c8b8b713b28b4df68cd5075611cf1b5","tgt_lang":"nl","translated":"Niet ondersteund","updated_at":"2026-07-12T06:54:02.978Z"}
{"cache_key":"3478636ffa72eb2b659e59e4777598b52a8413c12599eeffa8ac74953592d5e8","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.detailPanel.nextMatch","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Next match","text_hash":"825e5abd0762be6e7083ca449c61fc73862d150d429cc9351b8cfae2a05cecc8","tgt_lang":"nl","translated":"Volgende overeenkomst","updated_at":"2026-07-12T06:56:31.300Z"}
{"cache_key":"3483f4bddc15063b0d8a3b45a0b6aecf49f46c4371bd43a33e8fba3f7d805861","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"nl","translated":"+{count} meer","updated_at":"2026-07-12T06:52:09.077Z"}
{"cache_key":"3513fef39a494243567d645afea2afcf96776c05fab9e17fc8af5a9709ed8ed8","model":"gpt-5.5","provider":"openai","segment_id":"browser.inspectHint","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Hover to inspect; click to send the element to your chat.","text_hash":"eee42900227737c5b30d3497a2ea7831e46f089ca301e9ebcf301c985f96b1d2","tgt_lang":"nl","translated":"Beweeg de cursor om te inspecteren; klik om het element naar je chat te sturen.","updated_at":"2026-07-11T02:20:09.408Z"}
{"cache_key":"351ec3a0ed83418733b604485126dd13e7d1cda406a5fc69ee9143024dd18253","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.emptyPalaceHint","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Right now the wiki mostly has raw source imports and operational reports. This tab becomes useful once syntheses, entities, or concepts start getting written.","text_hash":"6ef1b621950befbe7531888ec6aa549260423c4d5601d99e936f6bdcf46b69d1","tgt_lang":"nl","translated":"Op dit moment bevat de wiki vooral ruwe bronimports en operationele rapporten. Dit tabblad wordt nuttig zodra syntheses, entiteiten of concepten worden geschreven.","updated_at":"2026-07-12T06:56:11.457Z"}
{"cache_key":"3542fda0c59a5e6a89e0827df3d5e1de2b9c3dded04f848e68518babc82552a1","model":"gpt-5.5","provider":"openai","segment_id":"chat.welcome.recentSessions","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Recent chats","text_hash":"2ccfecbca1011bad772fce00fa6479c9af2d398ce3b3951b7713b2655b6999eb","tgt_lang":"nl","translated":"Recente chats","updated_at":"2026-07-11T08:43:24.357Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:24.991Z",
"generatedAt": "2026-07-14T08:44:43.429Z",
"locale": "pl",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1027,6 +1027,7 @@
{"cache_key":"94837605c135753091c1b936d2bef16f268949be6c0e302378558f9b4dbab801","model":"claude-opus-4-8","provider":"anthropic","segment_id":"quickSettings.appearance.textSizes.small","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"S","text_hash":"8de0b3c47f112c59745f717a626932264c422a7563954872e237b223af4ad643","tgt_lang":"pl","translated":"S","updated_at":"2026-07-12T06:47:05.395Z"}
{"cache_key":"94cbb7c232317beb270f211eb25b22c1c6cef61b0e5abff6f09b059315d3aea5","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configView.sections.broadcast","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Broadcast","text_hash":"17bc9178343601795dbd6d0e4328dcade21e406e6514640250c79ac9317ee81a","tgt_lang":"pl","translated":"Nadawanie","updated_at":"2026-07-12T06:47:28.389Z"}
{"cache_key":"952667b504cc9b0728bf58b2a77d7611b9524fb9cac385aafd9ada69958b6a8c","model":"gpt-5.5","provider":"openai","segment_id":"browser.back","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Back","text_hash":"76900f1bfd16c8d4dd3d25e6f46638d7165aee23883ccea6bfe071c514421769","tgt_lang":"pl","translated":"Wstecz","updated_at":"2026-07-11T02:19:32.402Z"}
{"cache_key":"9554e8134f115596a74080923255e1c569305db0380d8e20f80c216354fd4ee2","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"pl","translated":"+{count} więcej","updated_at":"2026-07-12T06:48:18.206Z"}
{"cache_key":"957b0fc3c159c9f1e9f4d67c58be83ad6b55e39e73d53a9c1d049d01b50d298b","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.realtimeTalkRequiresMicrophone","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Realtime Talk requires browser microphone access.","text_hash":"e082e85327dc5d2905a34ca4ca60e76836f9b4d7e3b1834b821c81a9c456b39d","tgt_lang":"pl","translated":"Realtime Talk wymaga dostępu do mikrofonu w przeglądarce.","updated_at":"2026-07-06T17:57:07.854Z"}
{"cache_key":"958c632cc7971902b9d35848c936423cfda92efafd372bc5ce4ada425dafd834","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"cron.suggestions.ideas.dependencyRadar.name","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Dependency radar","text_hash":"87934151936f549abbc080b64b217a214f4501cf0b0a13a497719efedcc851ce","tgt_lang":"pl","translated":"Radar zależności","updated_at":"2026-07-11T22:47:58.550Z"}
{"cache_key":"95de173951e4a2a820b23f4c403598f9c5935a9e690a4776338cd1c07422c1b4","model":"claude-opus-4-8","provider":"anthropic","segment_id":"pluginsPage.connectorDescriptions.airtable","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Query and update records, tables, and bases in Airtable.","text_hash":"d50d210d4078f40825578718ef4891ae7c0a793081413c977803486e45bf3e05","tgt_lang":"pl","translated":"Przeszukuj i aktualizuj rekordy, tabele oraz bazy w Airtable.","updated_at":"2026-07-12T06:48:47.312Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:22.215Z",
"generatedAt": "2026-07-14T08:44:38.052Z",
"locale": "pt-BR",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -952,6 +952,7 @@
{"cache_key":"85cb4e6c4de65570dd4475c45d5dba088ff2f3357fbff1e733d3ab8faea26343","model":"gpt-5.5","provider":"openai","segment_id":"chat.splitView.splitDown","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Split down","text_hash":"8730b89df7caaf5b5090f9b7365a0a03e0a13d9682dc6418f556b8a676d9e98f","tgt_lang":"pt-BR","translated":"Dividir para baixo","updated_at":"2026-07-06T07:23:13.378Z"}
{"cache_key":"8624097f9d10fb615da66a4341195eba407f92f016c3bfc9d407283c100dfa3d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"githubPreview.ariaLabel","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"{state} {kind} {repo} #{number}: {title}, by {author}","text_hash":"e18c624550814e4318a45e1e0f8782913409763d046aa703519e91c887be205b","tgt_lang":"pt-BR","translated":"{state} {kind} {repo} #{number}: {title}, por {author}","updated_at":"2026-07-12T06:24:58.182Z"}
{"cache_key":"8626b07aa9a791dc6a5438a7bad1b0b86ce826ee1f24ea14c96e5d3daad755f7","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneFallback","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Microphone {number}","text_hash":"357eae20db9739dfdbb59ec21db70200f6ca9ee257c28ed637712f147af419ec","tgt_lang":"pt-BR","translated":"Microfone {number}","updated_at":"2026-07-06T17:56:11.051Z"}
{"cache_key":"8664caed8c1accb472a9c8353d80ddfbe8abc92e8fde18185a92b80add2d12b5","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"pt-BR","translated":"+{count} mais","updated_at":"2026-07-12T06:25:16.155Z"}
{"cache_key":"869adaaf933f58ebce0de74cca77566e54c11d15467234708b2838d31d125536","model":"gpt-5","provider":"openai","segment_id":"codexSessions.searchPlaceholder","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Search session titles","text_hash":"9a6bdede84234fa08d6294e1636a34d26cbdd8eca425248f8d3c6cf8844a0cf9","tgt_lang":"pt-BR","translated":"Pesquisar títulos de sessões","updated_at":"2026-07-09T10:01:43.718Z"}
{"cache_key":"869e8d4c7aacef3723f24c727154274125df8d963a93a7a3b751832bf7cb47fa","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.form.accountId","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Account ID","text_hash":"919bb4cb2182c322ed2e1d13d112570bfcff57a2b9260bf3ff19939975d042b2","tgt_lang":"pt-BR","translated":"ID da conta","updated_at":"2026-07-12T06:29:38.006Z"}
{"cache_key":"86c262fb848e799bf503fd243c754fa82b8b412bd48d38bd036e0ecdc7574561","model":"gpt-5.6-sol","provider":"openai","segment_id":"skillWorkshop.selfLearning.enable","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Enable self-learning","text_hash":"33a368430ce8e88b54c97c828fa272ed164a10a56e15e7cadc38523642119e50","tgt_lang":"pt-BR","translated":"Ativar autoaprendizado","updated_at":"2026-07-13T06:15:15.673Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:26.260Z",
"generatedAt": "2026-07-14T08:44:45.655Z",
"locale": "ru",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1502,6 +1502,7 @@
{"cache_key":"77b711ff02cb24b17d0da9dba8a826ce41ca754ad5aed8a35fb66a482b5e3718","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.toolCatalog.descriptions.sessionsSend","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Send to session","text_hash":"832b527e87a2c949b0af9f7220414adb15dcbe92d6b29d42f8bb427e3216d15e","tgt_lang":"ru","translated":"Отправить в сессию","updated_at":"2026-07-12T06:59:08.580Z"}
{"cache_key":"77bc75659bcb077046444e003ce6ce8ec0390cd98457a3c28a1825467c6dfcd7","model":"gpt-5.5","provider":"openai","segment_id":"overview.stats.cronNext","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Next wake {time}","text_hash":"e66ba10846e8db186b6d61def765932e1da962ecb4bf2ae2ab711934043413f3","tgt_lang":"ru","translated":"Следующее пробуждение {time}","updated_at":"2026-06-26T21:40:18.156Z"}
{"cache_key":"77e3cc3333079b6bb06dabba3a473cbae72706fbf6ac37985737eba21f7b6c59","model":"gpt-5.5","provider":"openai","segment_id":"newSession.worktreeNameInvalid","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Worktree names use lowercase letters, digits, and dashes.","text_hash":"6a34593b030e5dc2e8e8c55a2be4a5e9a6b415676d4d91e9f521b8586ea3c28f","tgt_lang":"ru","translated":"Имена рабочих деревьев могут содержать строчные буквы, цифры и дефисы.","updated_at":"2026-07-10T15:22:08.248Z"}
{"cache_key":"7808b750ea2e58d18d2783b325d615aed0e3d133ece57d24011a0ea98cd5592b","model":"gpt-5.5","provider":"openai","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"ru","translated":"+{count} ещё","updated_at":"2026-06-26T21:41:23.762Z"}
{"cache_key":"780a264bb89b3b2f12d4d5dcaf237bb0ea158ab9c222f39dce8660224c7b23da","model":"gpt-5.6-sol","provider":"openai","segment_id":"chat.progressLabels.scuttling","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Scuttling","text_hash":"4646155e9edc98598bf9b7f01a3ad8fbf13649cf53aa8c3710dd7a82ef1c5ba8","tgt_lang":"ru","translated":"Семенит","updated_at":"2026-07-14T04:55:30.458Z"}
{"cache_key":"7813a0cd9f869de997d9adaef2431b3856ed437433f88da0782f8e564f7f9b12","model":"gpt-5.5","provider":"openai","segment_id":"workboard.stopSession","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Stop session","text_hash":"e4d1dad5c74ad296c45ca01ac7e9e7fedffc7478a3556f8962465760b98c5391","tgt_lang":"ru","translated":"Остановить сеанс","updated_at":"2026-06-26T21:39:43.912Z"}
{"cache_key":"782d922cf4709b47f73afec02d66937579853fb09f659acb8b87d3826606d456","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.toolCatalog.descriptions.agentsList","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"List agents","text_hash":"14c11ce2c1ad03acc37cf3f89893cd4d986f1ab24ab2d7fb5e49bd89c923c72d","tgt_lang":"ru","translated":"Список агентов","updated_at":"2026-07-12T06:59:08.580Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:25.263Z",
"generatedAt": "2026-07-14T08:44:43.854Z",
"locale": "th",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1141,6 +1141,7 @@
{"cache_key":"9dbd09c81f15e3afb4d35352e89be6c4392d715adba920bc739be3ffd07806f7","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.inventory.roleUpgrade","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"role upgrade requires approval","text_hash":"c2c2a021e6839c8bb89fcf5d387a4a7c577bf4a042a110220ee1ffb78f238966","tgt_lang":"th","translated":"การอัปเกรด role ต้องได้รับการอนุมัติ","updated_at":"2026-07-12T06:50:13.234Z"}
{"cache_key":"9dc09c418dbde2db6ccb6a47ea858354665ca4d41f6fd39eb5d9a849ad8b6d70","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configForm.jsonValue","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"JSON value","text_hash":"0c2d485c9291cebc6440ef7f34304dfbba495f52cb5ea4580f4b2315342e6d42","tgt_lang":"th","translated":"ค่า JSON","updated_at":"2026-07-12T06:51:17.672Z"}
{"cache_key":"9dd1642939e3bef529b686ff187de5c5c68904a5abbd3de7b5ee1d816bab4663","model":"gpt-5.6-sol","provider":"openai","segment_id":"palette.footer.select","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"select","text_hash":"b1a36d25d9633ed2ac04939fcb614ccb2b513243c148f18694592ae037f9d35f","tgt_lang":"th","translated":"เลือก","updated_at":"2026-07-12T00:10:41.112Z"}
{"cache_key":"9de8e321c052f0d7017f33939ff2edfe9776eab8677e7923851dc9db0037324b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"th","translated":"+{count} เพิ่มเติม","updated_at":"2026-07-12T06:50:01.584Z"}
{"cache_key":"9e26fa092b3be589c99e51c2b1245665306290e180ed3a3463a88c30fc51da17","model":"gpt-5.6-sol","provider":"openai","segment_id":"nodes.pairing.limitedAccessHint","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Node, chat, and approvals without administrative controls.","text_hash":"875b64d38acce53b42fad8c29f5b91fb83b31234b509b9ea9d5afa909b915078","tgt_lang":"th","translated":"เข้าถึงโหนด แชท และการอนุมัติ โดยไม่มีการควบคุมระดับผู้ดูแลระบบ","updated_at":"2026-07-13T10:03:09.768Z"}
{"cache_key":"9e29643230f67744b1ccd0148fd9b8f3bf27715ef16dc97e72c41ba89ad4753c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configForm.sections.diagnostics.label","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Diagnostics","text_hash":"268f14bbfe119c1e92150583af960a086d7db9619a097f8aa72ff6779842f610","tgt_lang":"th","translated":"การวินิจฉัย","updated_at":"2026-06-16T14:17:16.747Z"}
{"cache_key":"9e3fe364d025a1cdc171e0c04c3efefe8736e11172389dc56f912858b748a2c2","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailUpdated","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Updated","text_hash":"3a5ecca188c0579c00ee24cf3cab21bd02c15a06f7a70cc8e0a8ff2381dcbbfd","tgt_lang":"th","translated":"อัปเดตแล้ว","updated_at":"2026-06-16T14:17:16.747Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:24.234Z",
"generatedAt": "2026-07-14T08:44:42.089Z",
"locale": "tr",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -214,6 +214,7 @@
{"cache_key":"21d0d39331a3b8122651c027bcfb3fc2e4af0343bc979bff54978020bbb90cd5","model":"claude-opus-4-8","provider":"anthropic","segment_id":"quickSettings.channels.connectedCount","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"{count} connected","text_hash":"894f17f96a432fbdce46c9e0ee1d66ec2d807daa4f0dd359e327ae5cbe43dd3a","tgt_lang":"tr","translated":"{count} bağlı","updated_at":"2026-07-12T06:39:49.200Z"}
{"cache_key":"21ed47c21072d3339e6d82f531855fa27fe966d443d2607df6fadc9ae5565898","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.actions.resume","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Resume","text_hash":"d640c7421da066618a39daf4266da5f61f66a9b1afcd626481b831a17064965d","tgt_lang":"tr","translated":"Devam ettir","updated_at":"2026-07-12T06:43:39.739Z"}
{"cache_key":"2215fe0002d914e87ad419c9bd73978d025cec6d4ab539f6c775640309e1b70f","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.execApprovals.hostNativeHint","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Read-only here. Edit from the companion app or CLI.","text_hash":"f40b6f5e3ead3a1a83b8c2cb0ffe80b8d105b35497ec464651dc8be98b7fe8cb","tgt_lang":"tr","translated":"Burada salt okunur. Yardımcı uygulamadan veya CLI'den düzenleyin.","updated_at":"2026-07-12T06:38:37.636Z"}
{"cache_key":"2220cca9293553f90ae57f1dda09cc9261d9b8267d3b6aed952cccda145416f3","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"tr","translated":"+{count} daha","updated_at":"2026-07-12T06:38:29.467Z"}
{"cache_key":"22bb530ef663d7a1a5b24541e40978d6ab2ad2f52891382cda5d914ffea2e09a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.empty.quarantinedTitle","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Nothing quarantined","text_hash":"6ab6de340b250b26c6bfc4415a19fffc241b304579304a2b0e8d9cf3f9941676","tgt_lang":"tr","translated":"Karantinaya alınan yok","updated_at":"2026-07-12T06:42:21.934Z"}
{"cache_key":"22c250c7eb8e6db6f3cbc26d8e09ddd3981061cc0205983c74c51a246ad3030b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.execApprovals.allShells","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"all shells","text_hash":"e273a637c04e803c47c367a83e2478b2fe87c374d6907a1570a5dc9f5228c540","tgt_lang":"tr","translated":"tüm kabuklar","updated_at":"2026-07-12T06:38:44.811Z"}
{"cache_key":"22d85524508bea41561640364241f5b28754461c98ccf68d38442efe02ee3601","model":"claude-opus-4-8","provider":"anthropic","segment_id":"palette.descriptions.verboseMode","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Toggle verbose mode.","text_hash":"b6b4efc3c03e4f99acc1df6ba5e76c49bb41fda420480a9b8a04b948821fbeda","tgt_lang":"tr","translated":"Ayrıntılı modu aç/kapat.","updated_at":"2026-07-12T06:42:51.542Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:24.475Z",
"generatedAt": "2026-07-14T08:44:42.559Z",
"locale": "uk",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -673,6 +673,7 @@
{"cache_key":"56ad3218a4ba7709f4c7180faf1a61f6013f1736fb96fc010c5c609b61ff1328","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configForm.noCustomEntries","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"No custom entries.","text_hash":"de38070e96ce715083fdc916ee46db5a1935131fbde6caf2b714043859eb6115","tgt_lang":"uk","translated":"Немає власних записів.","updated_at":"2026-07-12T06:45:39.834Z"}
{"cache_key":"56d60d14e1699bfec92e6964269ea6909ed1b0ce44177f22c4ec844b6f00d439","model":"gpt-5.5","provider":"openai","segment_id":"chat.backgroundTasks.loading","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Loading background tasks…","text_hash":"b8f8eaea7ccdee15740c7daa3d290a534fd3db2b4f0b2835243a6627d9ff7ff6","tgt_lang":"uk","translated":"Завантаження фонових завдань…","updated_at":"2026-07-11T00:45:26.267Z"}
{"cache_key":"56e9eb7a65ad9e8aacd92b0359207bfe422a55267ee35eed55e24dc1294cc622","model":"gpt-5.6-sol","provider":"openai","segment_id":"nodes.pairing.limitedAccessHint","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Node, chat, and approvals without administrative controls.","text_hash":"875b64d38acce53b42fad8c29f5b91fb83b31234b509b9ea9d5afa909b915078","tgt_lang":"uk","translated":"Вузол, чат і схвалення без адміністративного керування.","updated_at":"2026-07-13T10:02:54.685Z"}
{"cache_key":"570a28378e9f5da04e026ce2a6963632fe5aba6b03826e5d90554bb56ba5c8e4","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"uk","translated":"+ще {count}","updated_at":"2026-07-12T06:44:48.232Z"}
{"cache_key":"572054c3fea0ec86b3c959ff052ad88c4681e3126fc9b5a719b2fc61a4d97514","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.form.accountId","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Account ID","text_hash":"919bb4cb2182c322ed2e1d13d112570bfcff57a2b9260bf3ff19939975d042b2","tgt_lang":"uk","translated":"ID акаунта","updated_at":"2026-07-12T06:50:27.325Z"}
{"cache_key":"572bf779a2067af6bca5651dc4e96d9668c49cb6b12071226c7316056510b209","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.host.gateway","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Gateway","text_hash":"41ed52921661c7f0d68d92511589cc9d7aaeab2b5db49fb27f0be336cbfdb7df","tgt_lang":"uk","translated":"Gateway","updated_at":"2026-07-09T10:01:43.750Z"}
{"cache_key":"575ed755e675c34b9496f28c757f269b99fa08f5770cba064107a48fdc79f49d","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneFallback","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Microphone {number}","text_hash":"357eae20db9739dfdbb59ec21db70200f6ca9ee257c28ed637712f147af419ec","tgt_lang":"uk","translated":"Мікрофон {number}","updated_at":"2026-07-06T17:57:00.020Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:25.528Z",
"generatedAt": "2026-07-14T08:44:44.314Z",
"locale": "vi",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1033,6 +1033,7 @@
{"cache_key":"94b89081dea72d238e3d5ff7ea29478f6bd15d171cb201cb03b97a4c63288221","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.suggestions.schedules.everyMorning","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Daily at 8:00 AM","text_hash":"1cd9af2c3816010faaffc9adb5efa4e0a337f35e5af82eb4f5462d09ad62a94b","tgt_lang":"vi","translated":"Hằng ngày lúc 8:00 AM","updated_at":"2026-07-12T06:57:03.569Z"}
{"cache_key":"94e911614fd522e91bfc724eaabff1245dbb2b43e687b08a33ae3a6f670bc0b6","model":"gpt-5.5","provider":"openai","segment_id":"nav.exitSettings","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Back to app","text_hash":"a6989680b3528cd399ebaea75e660da6ce8d155d24226532180f90ab37c05e9e","tgt_lang":"vi","translated":"Quay lại ứng dụng","updated_at":"2026-07-09T08:08:12.733Z"}
{"cache_key":"956af5347779331dece26693cbf4fa5431285d7693d07c6338f3e0f5d8eb7017","model":"gpt-5.6-sol","provider":"openai","segment_id":"attention.cronOverdue","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"{count} cron job(s) overdue","text_hash":"31f2f925ab3c5a145026243be12d8c96a00885e1ab541f0d09bfc585a00bf9f4","tgt_lang":"vi","translated":"{count} tác vụ cron quá hạn","updated_at":"2026-07-12T00:10:50.384Z"}
{"cache_key":"95774625f04c2ac27442dd1f1fcd2ec18cf1e307cf4fd6b79e3745d41a6185c0","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"vi","translated":"+{count} nữa","updated_at":"2026-07-12T06:54:35.616Z"}
{"cache_key":"95b11fdc7cc941dc3aec80d1229fe752549bf09007010227ed891541e909f07b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.search","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Search files","text_hash":"179fed85ec50a433bb23932745d18f1ade2f84a6ebe145b0025ed3ce5f89fd5a","tgt_lang":"vi","translated":"Tìm tệp","updated_at":"2026-06-16T14:17:25.260Z"}
{"cache_key":"9605f4958b93fc56d928bc4d2429364297fa6f3765a71c49f3c8387238c6b9ec","model":"gpt-5.5","provider":"openai","segment_id":"common.colorModeOption","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Color mode: {mode}","text_hash":"d5b61a3af66f845d2ab32795685ca0b37889374de15f66ae3f848abf83169a43","tgt_lang":"vi","translated":"Chế độ màu: {mode}","updated_at":"2026-07-07T08:47:40.743Z"}
{"cache_key":"962781dcb6e2837b8a83c85ce0f8c2c22a62f0d33afc3d83b27cc55b698f8670","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.today.askAgent","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Ask the agent to change something","text_hash":"756d8c49d716577120af09971a16bf3771d6929e4ea2f38e4804928c64380147","tgt_lang":"vi","translated":"Yêu cầu tác nhân thay đổi điều gì đó","updated_at":"2026-07-12T06:55:56.454Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:21.655Z",
"generatedAt": "2026-07-14T08:44:36.832Z",
"locale": "zh-CN",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -1188,6 +1188,7 @@
{"cache_key":"b02c3b3ab2d71f27784fa7d5c31939ef0027133c8adca0b8aa43b198f427bbe0","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.howToEnable","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"How to enable","text_hash":"790e7baf165ea39118e9b759e63a42ccf7c741f4229d248508ed4ad1eeede3a3","tgt_lang":"zh-CN","translated":"如何启用","updated_at":"2026-07-12T06:29:01.870Z"}
{"cache_key":"b0412a23a4c8c387c63f344a0a88943a72f70c16d330fcee1f81616f2033a2f4","model":"claude-opus-4-8","provider":"anthropic","segment_id":"nodes.execApprovals.useDefault","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Use default","text_hash":"a769cedc799260e81ce23b3fc1533ae48004f6ab25f0dffcc783d95fea378e19","tgt_lang":"zh-CN","translated":"使用默认值","updated_at":"2026-07-12T06:25:34.328Z"}
{"cache_key":"b052360022a4be4121b6a788ef892b1c566332eb6c2db49a575f9092ccbcca09","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.empty.allTitle","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"No proposals here","text_hash":"30289613b7f4e190e5a04e8544571a9ef3fadac44112c7378c49a3bff5688270","tgt_lang":"zh-CN","translated":"此处没有提案","updated_at":"2026-07-12T06:28:31.142Z"}
{"cache_key":"b06849d2267ad9b93dab4ceacd98e260813091d7534d01efcfb48dc01caeea77","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"zh-CN","translated":"另有 {count} 项","updated_at":"2026-07-12T06:25:16.708Z"}
{"cache_key":"b07fd81688b646c639401340dac4b9d7b8fc87b40351ef05da1562112c77b7ee","model":"claude-opus-4-8","provider":"anthropic","segment_id":"configForm.sections.broadcast.description","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Broadcast and notification settings","text_hash":"ae4fa77fc6938b4e99acff0e7af3f12682b79f6c2f11e7c8189c72af5377ae29","tgt_lang":"zh-CN","translated":"广播与通知设置","updated_at":"2026-07-12T06:26:14.321Z"}
{"cache_key":"b08b52d1d1ad82adee610e29f622f08f5f10396e6bc4bcf8cc70324a0e133e28","model":"claude-opus-4-8","provider":"anthropic","segment_id":"channels.nostr.placeholders.username","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"satoshi","text_hash":"da2876b3eb31edb4436fa4650673fc6f01f90de2f1793c4ec332b2387b09726f","tgt_lang":"zh-CN","translated":"satoshi","updated_at":"2026-07-12T06:25:05.607Z"}
{"cache_key":"b0b1576e81afe3aea82eecfe959ee7f260e091db230c13be7894817a84cfcbb1","model":"claude-opus-4-8","provider":"anthropic","segment_id":"codexSessions.transcript.command","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Command","text_hash":"713166971d730f81fcf8b757f2ea239d1a0360d9f74e8f5afe60fba97105879c","tgt_lang":"zh-CN","translated":"命令","updated_at":"2026-06-16T14:13:09.659Z"}
+4 -4
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-14T05:17:22.023Z",
"generatedAt": "2026-07-14T08:44:37.623Z",
"locale": "zh-TW",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "622f10085ef94b6f07d88f35cf370b2ce3108dbb36897da543cfc3b82ccd2240",
"totalKeys": 3332,
"translatedKeys": 3332,
"sourceHash": "0c13460dca0cb1cfcf4d17d97316218cb003189bf09681a53dd54cedebb4225b",
"totalKeys": 3333,
"translatedKeys": 3333,
"workflow": 1
}
+1
View File
@@ -4,6 +4,7 @@
{"cache_key":"006c126d4c91423d27d9029a5c0cadefb42110dca26be77a89812a368ff3dcb0","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.actions.scrollToLatest","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Scroll to latest","text_hash":"60df3caee4bdbdad5b699375edc79340fbd86c484b4b24b6b50bb0562ea060cd","tgt_lang":"zh-TW","translated":"捲動至最新","updated_at":"2026-07-12T06:29:54.478Z"}
{"cache_key":"007609efe9d58bd04fb7ac58de11379b2391e91935878aed3489b30ce5c1a003","model":"claude-opus-4-8","provider":"anthropic","segment_id":"dreaming.wiki.contradictions","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Contradictions","text_hash":"c1c93b72082e87a5bcd5704fedddcc6acdc3c666dc77c2cfe18613889b9054db","tgt_lang":"zh-TW","translated":"矛盾","updated_at":"2026-07-12T06:29:48.180Z"}
{"cache_key":"007b9a391fa01b70a3f56a9b45d275c51d4971691bd43b9acda9191059451d1d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillsPage.disconnected","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Not connected to gateway.","text_hash":"c5ea4108f1f9b79d5316c2c6c07f6746ef801746094eb75e5d3cfcbef2cbbc18","tgt_lang":"zh-TW","translated":"未連線至 Gateway。","updated_at":"2026-07-12T06:28:22.466Z"}
{"cache_key":"008afa2d613c0072479e654454217ba2081c970537c66b66e40a713d871eaa8e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.backgroundTasks.statusPreviewMore","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"+{count} more","text_hash":"ecccea94c62457a718fff608b635a8fdeb2a9d43b60a9db2680fa35e800b5dd6","tgt_lang":"zh-TW","translated":"還有 +{count} 個","updated_at":"2026-07-12T06:28:16.237Z"}
{"cache_key":"00a09ca354e276c91fcec391e545263a523d4480c6a6f96b6825f4720f15ab1a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.queue.steered","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Steered","text_hash":"030ed66937ef8b9ec3a179ee4731715df00ee1dacc1fed0cdbdb4d251e02daaa","tgt_lang":"zh-TW","translated":"已引導","updated_at":"2026-07-12T06:30:00.937Z"}
{"cache_key":"00a50f2e0d3a9514848b06fbacaf9ca28918512b85e9211b2dba37d93cb00f60","model":"claude-opus-4-8","provider":"anthropic","segment_id":"agents.toolCatalog.descriptions.cron","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Schedule tasks","text_hash":"44c6425e3e6f0bb4df510671d2cf05cabd6d2070d94af0a4a961024db2a7f754","tgt_lang":"zh-TW","translated":"排程任務","updated_at":"2026-07-12T06:26:21.254Z"}
{"cache_key":"00e6dc5787663a773e01a7c45365b42b91da27a61171ebc03cfa380dd733a469","model":"gpt-5.6-sol","provider":"openai","segment_id":"subtitles.connection","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Gateway endpoint, credentials, and handshake status.","text_hash":"5d6324ca52f899e2db988c9a0b14314fe2240f17cb129b8ff2bf16bf87bef2e7","tgt_lang":"zh-TW","translated":"Gateway 端點、憑證和交握狀態。","updated_at":"2026-07-12T00:07:53.648Z"}
+1
View File
@@ -3649,6 +3649,7 @@ export const ar: TranslationMap = {
finished: "مكتملة ({count})",
statusRunningOne: "مهمة واحدة قيد التشغيل",
statusRunningMany: "{count} مهام قيد التشغيل",
statusPreviewMore: "+{count} أخرى",
stopTask: "إيقاف {title}",
viewTranscript: "عرض النص",
toolUseOne: "استخدام واحد لأداة",
+1
View File
@@ -3722,6 +3722,7 @@ export const de: TranslationMap = {
finished: "Abgeschlossen ({count})",
statusRunningOne: "1 laufende Aufgabe",
statusRunningMany: "{count} laufende Aufgaben",
statusPreviewMore: "+{count} weitere",
stopTask: "{title} stoppen",
viewTranscript: "Transkript anzeigen",
toolUseOne: "1 Tool-Aufruf",
+1
View File
@@ -3627,6 +3627,7 @@ export const en: TranslationMap = {
finished: "Finished ({count})",
statusRunningOne: "1 running task",
statusRunningMany: "{count} running tasks",
statusPreviewMore: "+{count} more",
stopTask: "Stop {title}",
viewTranscript: "View transcript",
toolUseOne: "1 tool use",
+1
View File
@@ -3718,6 +3718,7 @@ export const es: TranslationMap = {
finished: "Finalizadas ({count})",
statusRunningOne: "1 tarea en ejecución",
statusRunningMany: "{count} tareas en ejecución",
statusPreviewMore: "+{count} más",
stopTask: "Detener {title}",
viewTranscript: "Ver transcripción",
toolUseOne: "1 uso de herramienta",
+1
View File
@@ -3676,6 +3676,7 @@ export const fa: TranslationMap = {
finished: "پایان‌یافته ({count})",
statusRunningOne: "۱ وظیفه در حال اجرا",
statusRunningMany: "{count} وظیفه در حال اجرا",
statusPreviewMore: "+{count} مورد دیگر",
stopTask: "توقف {title}",
viewTranscript: "مشاهدهٔ رونوشت",
toolUseOne: "۱ بار استفاده از ابزار",
+1
View File
@@ -3746,6 +3746,7 @@ export const fr: TranslationMap = {
finished: "Terminées ({count})",
statusRunningOne: "1 tâche en cours",
statusRunningMany: "{count} tâches en cours",
statusPreviewMore: "+{count} de plus",
stopTask: "Arrêter {title}",
viewTranscript: "Afficher la transcription",
toolUseOne: "1 utilisation doutil",
+1
View File
@@ -3644,6 +3644,7 @@ export const hi: TranslationMap = {
finished: "समाप्त ({count})",
statusRunningOne: "1 कार्य चल रहा है",
statusRunningMany: "{count} कार्य चल रहे हैं",
statusPreviewMore: "+{count} और",
stopTask: "{title} रोकें",
viewTranscript: "ट्रांसक्रिप्ट देखें",
toolUseOne: "1 टूल उपयोग",
+1
View File
@@ -3681,6 +3681,7 @@ export const id: TranslationMap = {
finished: "Selesai ({count})",
statusRunningOne: "1 tugas sedang berjalan",
statusRunningMany: "{count} tugas sedang berjalan",
statusPreviewMore: "+{count} lainnya",
stopTask: "Hentikan {title}",
viewTranscript: "Lihat transkrip",
toolUseOne: "1 penggunaan alat",
+1
View File
@@ -3721,6 +3721,7 @@ export const it: TranslationMap = {
finished: "Completate ({count})",
statusRunningOne: "1 attività in esecuzione",
statusRunningMany: "{count} attività in esecuzione",
statusPreviewMore: "+{count} altri",
stopTask: "Interrompi {title}",
viewTranscript: "Visualizza trascrizione",
toolUseOne: "1 utilizzo dello strumento",
+1
View File
@@ -3694,6 +3694,7 @@ export const ja_JP: TranslationMap = {
finished: "完了({count}",
statusRunningOne: "1 件のタスクを実行中",
statusRunningMany: "{count} 件のタスクを実行中",
statusPreviewMore: "+{count}件",
stopTask: "{title}を停止",
viewTranscript: "トランスクリプトを表示",
toolUseOne: "ツール使用 1 回",
+1
View File
@@ -3663,6 +3663,7 @@ export const ko: TranslationMap = {
finished: "완료됨({count})",
statusRunningOne: "실행 중인 작업 1개",
statusRunningMany: "실행 중인 작업 {count}개",
statusPreviewMore: "+{count}개 더보기",
stopTask: "{title} 중지",
viewTranscript: "트랜스크립트 보기",
toolUseOne: "도구 사용 1회",
+1
View File
@@ -3698,6 +3698,7 @@ export const nl: TranslationMap = {
finished: "Voltooid ({count})",
statusRunningOne: "1 actieve taak",
statusRunningMany: "{count} actieve taken",
statusPreviewMore: "+{count} meer",
stopTask: "{title} stoppen",
viewTranscript: "Transcript bekijken",
toolUseOne: "1 toolgebruik",
+1
View File
@@ -3706,6 +3706,7 @@ export const pl: TranslationMap = {
finished: "Ukończone ({count})",
statusRunningOne: "1 uruchomione zadanie",
statusRunningMany: "{count} uruchomionych zadań",
statusPreviewMore: "+{count} więcej",
stopTask: "Zatrzymaj {title}",
viewTranscript: "Wyświetl transkrypcję",
toolUseOne: "1 użycie narzędzia",
+1
View File
@@ -3694,6 +3694,7 @@ export const pt_BR: TranslationMap = {
finished: "Concluídas ({count})",
statusRunningOne: "1 tarefa em execução",
statusRunningMany: "{count} tarefas em execução",
statusPreviewMore: "+{count} mais",
stopTask: "Parar {title}",
viewTranscript: "Ver transcrição",
toolUseOne: "1 uso de ferramenta",
+1
View File
@@ -3709,6 +3709,7 @@ export const ru: TranslationMap = {
finished: "Завершены ({count})",
statusRunningOne: "1 выполняющаяся задача",
statusRunningMany: "{count} выполняющихся задач",
statusPreviewMore: "+{count} ещё",
stopTask: "Остановить {title}",
viewTranscript: "Просмотреть расшифровку",
toolUseOne: "1 вызов инструмента",
+1
View File
@@ -3620,6 +3620,7 @@ export const th: TranslationMap = {
finished: "เสร็จสิ้น ({count})",
statusRunningOne: "งานที่กำลังทำงานอยู่ 1 รายการ",
statusRunningMany: "งานที่กำลังทำงานอยู่ {count} รายการ",
statusPreviewMore: "+{count} เพิ่มเติม",
stopTask: "หยุด {title}",
viewTranscript: "ดูบันทึกการสนทนา",
toolUseOne: "ใช้เครื่องมือ 1 ครั้ง",
+1
View File
@@ -3702,6 +3702,7 @@ export const tr: TranslationMap = {
finished: "Tamamlandı ({count})",
statusRunningOne: "1 görev çalışıyor",
statusRunningMany: "{count} görev çalışıyor",
statusPreviewMore: "+{count} daha",
stopTask: "{title} öğesini durdur",
viewTranscript: "Transkripti görüntüle",
toolUseOne: "1 araç kullanımı",
+1
View File
@@ -3691,6 +3691,7 @@ export const uk: TranslationMap = {
finished: "Завершено ({count})",
statusRunningOne: "1 активне завдання",
statusRunningMany: "{count} активних завдань",
statusPreviewMore: "+ще {count}",
stopTask: "Зупинити {title}",
viewTranscript: "Переглянути транскрипт",
toolUseOne: "1 використання інструмента",
+1
View File
@@ -3677,6 +3677,7 @@ export const vi: TranslationMap = {
finished: "Đã hoàn tất ({count})",
statusRunningOne: "1 tác vụ đang chạy",
statusRunningMany: "{count} tác vụ đang chạy",
statusPreviewMore: "+{count} nữa",
stopTask: "Dừng {title}",
viewTranscript: "Xem bản ghi",
toolUseOne: "1 lần sử dụng công cụ",
+1
View File
@@ -3600,6 +3600,7 @@ export const zh_CN: TranslationMap = {
finished: "已完成 ({count})",
statusRunningOne: "1 个正在运行的任务",
statusRunningMany: "{count} 个正在运行的任务",
statusPreviewMore: "另有 {count} 项",
stopTask: "停止 {title}",
viewTranscript: "查看转录",
toolUseOne: "1 次工具调用",
+1
View File
@@ -3606,6 +3606,7 @@ export const zh_TW: TranslationMap = {
finished: "已完成 ({count})",
statusRunningOne: "1 個執行中的任務",
statusRunningMany: "{count} 個執行中的任務",
statusPreviewMore: "還有 +{count} 個",
stopTask: "停止 {title}",
viewTranscript: "檢視文字記錄",
toolUseOne: "使用 1 次工具",
+2
View File
@@ -1650,6 +1650,7 @@ describe("chat composer workbench", () => {
it("moves the background-tasks rail to a bottom strip on narrow panes", () => {
const backgroundTasks = {
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: false,
narrowLayout: false,
connected: true,
@@ -1681,6 +1682,7 @@ describe("chat composer workbench", () => {
it("shows the running-tasks status row after the turn settles, not while working", () => {
const backgroundTasks = {
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: true,
narrowLayout: false,
connected: true,
@@ -0,0 +1,143 @@
// Registers <wa-tooltip>: the status row's hover preview uses it directly
// because openclaw-tooltip only carries plain-text content.
import "@awesome.me/webawesome/dist/components/tooltip/tooltip.js";
import { html, nothing, type TemplateResult } from "lit";
import "../../../components/elapsed-time.ts";
import { icons } from "../../../components/icons.ts";
import { t } from "../../../i18n/index.ts";
import { formatRelativeTimestamp } from "../../../lib/format.ts";
import {
isActiveTask,
partitionTasks,
taskStatusLabel,
taskTimestampMs,
taskTitle,
type TaskSummary,
} from "../../../lib/tasks/data.ts";
import { STATUS_TONES, type BackgroundTasksProps } from "./chat-background-tasks.ts";
type BackgroundTasksStatus = { count: number; startedMs: number | null };
/** Summary for the bottom-of-thread status row: active-task count plus the
* oldest active start time so the row ticks one elapsed label, not one per
* task. `startedMs` is null when no active task has a usable timestamp. */
function activeBackgroundTasksStatus(
props: BackgroundTasksProps | undefined,
): BackgroundTasksStatus | null {
const active = props?.tasks?.filter(isActiveTask) ?? [];
if (active.length === 0) {
return null;
}
let startedMs: number | null = null;
for (const task of active) {
const started = taskTimestampMs(task.startedAt ?? task.createdAt);
if (started > 0 && (startedMs === null || started < startedMs)) {
startedMs = started;
}
}
return { count: active.length, startedMs };
}
/** Rows the hover preview shows before deferring to the rail's full list. */
const STATUS_PREVIEW_LIMIT = 5;
function renderStatusPreviewRow(task: TaskSummary): TemplateResult {
const active = isActiveTask(task);
const tone = STATUS_TONES[task.status];
const timeMs = active
? taskTimestampMs(task.startedAt ?? task.createdAt)
: taskTimestampMs(task.updatedAt ?? task.createdAt);
return html`
<div class="chat-tasks-preview__row">
${task.status === "running"
? html`<span class="chat-tasks-rail__task-pulse" aria-hidden="true"></span>`
: nothing}
<span class="chat-tasks-preview__title">${taskTitle(task)}</span>
<span class="chat-tasks-preview__meta">
<span class="chat-tasks-rail__task-status chat-tasks-rail__task-status--${tone}"
>${taskStatusLabel(task.status)}</span
>
${timeMs > 0
? html`<span class="chat-tasks-rail__task-sep" aria-hidden="true">·</span>
<span>
${active
? html`<openclaw-elapsed-time .startMs=${timeMs}></openclaw-elapsed-time>`
: formatRelativeTimestamp(timeMs)}
</span>`
: nothing}
</span>
</div>
`;
}
/** Hover/focus preview on the status row: the latest tasks at a glance
* without opening the rail. Content is read-only a tooltip is a transient
* surface, so actions stay in the rail the click opens. */
function renderStatusPreview(props: BackgroundTasksProps): TemplateResult {
const { active, recent } = partitionTasks(props.tasks ?? []);
const tasks = [...active, ...recent];
const preview = tasks.slice(0, STATUS_PREVIEW_LIMIT);
const overflow = tasks.length - preview.length;
return html`
<wa-tooltip
class="chat-tasks-status__preview"
for=${props.statusRowId}
placement="top-start"
without-arrow
>
<div class="chat-tasks-preview">
${preview.map((task) => renderStatusPreviewRow(task))}
${overflow > 0
? html`<div class="chat-tasks-preview__more">
${t("chat.backgroundTasks.statusPreviewMore", { count: String(overflow) })}
</div>`
: nothing}
</div>
</wa-tooltip>
`;
}
/** Post-turn status row in the chat thread: once the agent turn settles while
* background tasks keep running, the running work stays visible next to a
* free composer. Hover previews the latest tasks; the link opens the tasks
* rail (noop when already open). */
export function renderBackgroundTasksStatusRow(
backgroundTasks: BackgroundTasksProps | undefined,
): TemplateResult | typeof nothing {
const status = activeBackgroundTasksStatus(backgroundTasks);
// Disconnected snapshots are stale: task events cannot arrive, so a ticking
// "running" claim would be a lie. The rail owns the disconnected state.
if (!backgroundTasks?.connected || !status) {
return nothing;
}
const label =
status.count === 1
? t("chat.backgroundTasks.statusRunningOne")
: t("chat.backgroundTasks.statusRunningMany", { count: String(status.count) });
const openRail = () => {
if (backgroundTasks.collapsed) {
backgroundTasks.onToggleCollapsed();
}
};
// The preview tooltip anchors the whole row (not the link button): wa-tooltip
// joins the anchor's aria-labelledby, which would replace the button's
// accessible name. It also stays a sibling so the ticking preview content
// never lives inside the polite live region.
return html`
<div class="chat-tasks-status" id=${backgroundTasks.statusRowId} role="status">
<span class="chat-tasks-status__claw" aria-hidden="true">${icons.claw}</span>
${status.startedMs !== null
? html`
<!-- Ticking time stays out of the polite live region: without
aria-hidden, screen readers would re-announce every second. -->
<span class="chat-tasks-status__time" aria-hidden="true">
<openclaw-elapsed-time .startMs=${status.startedMs}></openclaw-elapsed-time>
</span>
<span class="chat-tasks-status__sep" aria-hidden="true">·</span>
`
: nothing}
<button class="chat-tasks-status__link" type="button" @click=${openRail}>${label}</button>
</div>
${renderStatusPreview(backgroundTasks)}
`;
}
@@ -2,11 +2,11 @@ import { html, render } from "lit";
import { afterEach, describe, expect, it, vi } from "vitest";
import type { GatewayBrowserClient } from "../../../api/gateway.ts";
import type { TaskSummary } from "../../../lib/tasks/data.ts";
import { renderBackgroundTasksStatusRow } from "./chat-background-tasks-status.ts";
import {
createBackgroundTasksProps,
handleBackgroundTasksEvent,
renderBackgroundTasksRail,
renderBackgroundTasksStatusRow,
type BackgroundTasksHost,
type BackgroundTasksProps,
} from "./chat-background-tasks.ts";
@@ -215,6 +215,7 @@ describe("background tasks rail rendering", () => {
render(
html`${renderBackgroundTasksRail({
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: false,
narrowLayout: false,
connected: true,
@@ -258,6 +259,7 @@ describe("background tasks rail rendering", () => {
render(
html`${renderBackgroundTasksRail({
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: false,
narrowLayout: false,
connected: true,
@@ -303,6 +305,7 @@ describe("background tasks rail rendering", () => {
render(
html`${renderBackgroundTasksRail({
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: false,
narrowLayout: false,
connected: true,
@@ -332,6 +335,7 @@ describe("running-tasks status row", () => {
function makeProps(overrides: Partial<BackgroundTasksProps>): BackgroundTasksProps {
return {
agentId: "main",
statusRowId: "chat-tasks-status-test",
collapsed: true,
narrowLayout: false,
connected: true,
@@ -423,6 +427,57 @@ describe("running-tasks status row", () => {
expect(onToggleCollapsed).not.toHaveBeenCalled();
});
it("anchors a hover preview of the latest tasks, active first, capped at five", () => {
const container = document.createElement("div");
document.body.append(container);
render(
html`${renderBackgroundTasksStatusRow(
makeProps({
tasks: [
makeTask({ id: "a1", title: "Active one", updatedAt: 9_000 }),
makeTask({ id: "a2", status: "queued", title: "Queued two", updatedAt: 8_000 }),
makeTask({ id: "f1", status: "completed", title: "Finished one", updatedAt: 7_000 }),
makeTask({ id: "f2", status: "failed", title: "Finished two", updatedAt: 6_000 }),
makeTask({ id: "f3", status: "completed", title: "Finished three", updatedAt: 5_000 }),
makeTask({ id: "f4", status: "completed", title: "Finished four", updatedAt: 4_000 }),
],
}),
)}`,
container,
);
const preview = container.querySelector("wa-tooltip.chat-tasks-status__preview");
expect(preview?.getAttribute("for")).toBe("chat-tasks-status-test");
expect(container.querySelector(".chat-tasks-status")?.id).toBe("chat-tasks-status-test");
const titles = [...container.querySelectorAll(".chat-tasks-preview__title")].map((el) =>
el.textContent?.trim(),
);
expect(titles).toEqual([
"Active one",
"Queued two",
"Finished one",
"Finished two",
"Finished three",
]);
expect(container.querySelector(".chat-tasks-preview__more")?.textContent?.trim()).toBe(
"+1 more",
);
});
it("sizes the preview to the task list without an overflow line", () => {
const container = document.createElement("div");
document.body.append(container);
render(
html`${renderBackgroundTasksStatusRow(
makeProps({ tasks: [makeTask({ id: "t1", title: "Only task" })] }),
)}`,
container,
);
expect(container.querySelectorAll(".chat-tasks-preview__row").length).toBe(1);
expect(container.querySelector(".chat-tasks-preview__more")).toBeNull();
});
it("renders nothing without active tasks", () => {
const container = document.createElement("div");
document.body.append(container);
@@ -28,6 +28,7 @@ import { paneSessionAgentId } from "./chat-session-workspace.ts";
export type BackgroundTasksProps = {
agentId: string;
statusRowId: string;
collapsed: boolean;
/** Pane too narrow for a side rail: presentation moves to a bottom strip
* (mirrors the workspace rail's narrow mode). */
@@ -59,6 +60,9 @@ type BackgroundTasksState = {
loading: boolean;
pendingReload: boolean;
requestId: number;
// wa-tooltip anchors by document id, so the status row's id must stay unique
// per pane: two panes on the same agent would otherwise cross-anchor.
statusRowId: string;
tasks: TaskSummary[] | null;
};
@@ -79,12 +83,15 @@ export type BackgroundTasksHost = {
const ACTIVE_TASKS_LIMIT = 200;
const RECENT_TASKS_LIMIT = 100;
let nextStatusRowId = 0;
function getBackgroundTasksState(host: BackgroundTasksHost): BackgroundTasksState {
const agentId = paneSessionAgentId(host);
const current = host.backgroundTasksState;
if (current?.agentId === agentId) {
return current;
}
nextStatusRowId += 1;
const next: BackgroundTasksState = {
agentId,
cancellingTaskIds: new Set(),
@@ -97,6 +104,7 @@ function getBackgroundTasksState(host: BackgroundTasksHost): BackgroundTasksStat
loading: false,
pendingReload: false,
requestId: 0,
statusRowId: `chat-tasks-status-${nextStatusRowId}`,
tasks: null,
};
host.backgroundTasksState = next;
@@ -291,6 +299,7 @@ export function createBackgroundTasksProps(
}
return {
agentId: state.agentId,
statusRowId: state.statusRowId,
collapsed: state.collapsed,
narrowLayout: opts.narrowLayout === true,
connected: host.connected,
@@ -318,67 +327,6 @@ function backgroundTasksActiveCount(props: BackgroundTasksProps | undefined): nu
return props?.tasks?.filter(isActiveTask).length ?? 0;
}
type BackgroundTasksStatus = { count: number; startedMs: number | null };
/** Summary for the bottom-of-thread status row: active-task count plus the
* oldest active start time so the row ticks one elapsed label, not one per
* task. `startedMs` is null when no active task has a usable timestamp. */
function activeBackgroundTasksStatus(
props: BackgroundTasksProps | undefined,
): BackgroundTasksStatus | null {
const active = props?.tasks?.filter(isActiveTask) ?? [];
if (active.length === 0) {
return null;
}
let startedMs: number | null = null;
for (const task of active) {
const started = taskTimestampMs(task.startedAt ?? task.createdAt);
if (started > 0 && (startedMs === null || started < startedMs)) {
startedMs = started;
}
}
return { count: active.length, startedMs };
}
/** Post-turn status row in the chat thread: once the agent turn settles while
* background tasks keep running, the running work stays visible next to a
* free composer. The link opens the tasks rail (noop when already open). */
export function renderBackgroundTasksStatusRow(
backgroundTasks: BackgroundTasksProps | undefined,
): TemplateResult | typeof nothing {
const status = activeBackgroundTasksStatus(backgroundTasks);
// Disconnected snapshots are stale: task events cannot arrive, so a ticking
// "running" claim would be a lie. The rail owns the disconnected state.
if (!backgroundTasks?.connected || !status) {
return nothing;
}
const label =
status.count === 1
? t("chat.backgroundTasks.statusRunningOne")
: t("chat.backgroundTasks.statusRunningMany", { count: String(status.count) });
const openRail = () => {
if (backgroundTasks.collapsed) {
backgroundTasks.onToggleCollapsed();
}
};
return html`
<div class="chat-tasks-status" role="status">
<span class="chat-tasks-status__claw" aria-hidden="true">${icons.claw}</span>
${status.startedMs !== null
? html`
<!-- Ticking time stays out of the polite live region: without
aria-hidden, screen readers would re-announce every second. -->
<span class="chat-tasks-status__time" aria-hidden="true">
<openclaw-elapsed-time .startMs=${status.startedMs}></openclaw-elapsed-time>
</span>
<span class="chat-tasks-status__sep" aria-hidden="true">·</span>
`
: nothing}
<button class="chat-tasks-status__link" type="button" @click=${openRail}>${label}</button>
</div>
`;
}
export function renderBackgroundTasksToggle(
backgroundTasks: BackgroundTasksProps | undefined,
): TemplateResult | typeof nothing {
@@ -408,7 +356,8 @@ export function renderBackgroundTasksToggle(
// Status tone drives the meta line's colored word and the running pulse dot;
// pill chips read too heavy at rail width, so tone is typographic only.
const STATUS_TONES = {
// Shared with the status row's hover preview (chat-background-tasks-status.ts).
export const STATUS_TONES = {
queued: "warn",
running: "warn",
completed: "ok",
+2 -4
View File
@@ -49,10 +49,8 @@ import { PinnedMessages } from "../pinned-messages.ts";
import type { RealtimeTalkConversationEntry } from "../realtime-talk-conversation.ts";
import { getOrCreateSessionCacheValue } from "../session-cache.ts";
import { getToolTitlesVersion } from "../tool-titles.ts";
import {
renderBackgroundTasksStatusRow,
type BackgroundTasksProps,
} from "./chat-background-tasks.ts";
import { renderBackgroundTasksStatusRow } from "./chat-background-tasks-status.ts";
import type { BackgroundTasksProps } from "./chat-background-tasks.ts";
import { renderChatDivider } from "./chat-divider.ts";
import {
getAssistantAttachmentAvailabilityRenderVersion,
+54
View File
@@ -1287,6 +1287,60 @@
text-decoration-color: currentColor;
}
/* Hover preview on the status row: the latest tasks in a read-only card. The
tooltip body is content-sized (width: max-content up to --max-width), so a
single task stays one compact line instead of a fixed-size panel. */
wa-tooltip.chat-tasks-status__preview {
--max-width: min(360px, calc(100vw - 24px));
font-family: var(--font-body);
}
wa-tooltip.chat-tasks-status__preview::part(body) {
padding: 8px 10px;
border: 1px solid color-mix(in srgb, var(--border-strong) 84%, transparent);
border-radius: var(--radius-md);
background: color-mix(in srgb, var(--card) 94%, black 6%);
box-shadow: var(--shadow-md);
color: var(--text);
font-size: var(--control-ui-text-xs);
line-height: 1.35;
}
.chat-tasks-preview {
display: flex;
flex-direction: column;
gap: 6px;
}
.chat-tasks-preview__row {
display: flex;
align-items: center;
gap: 8px;
}
.chat-tasks-preview__title {
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--text);
font-weight: 550;
}
.chat-tasks-preview__meta {
display: inline-flex;
flex: none;
align-items: baseline;
gap: 5px;
color: var(--muted);
font-variant-numeric: tabular-nums;
}
.chat-tasks-preview__more {
color: var(--muted);
}
@keyframes chatTasksStatusBreath {
0%,
100% {