From 648ed69f8273101e42e273f3ec13b3f9a5350ee4 Mon Sep 17 00:00:00 2001 From: "openclaw-clownfish[bot]" <280122609+openclaw-clownfish[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 14:22:36 -0500 Subject: [PATCH] fix(control-ui): repair zh-CN localization coverage Route remaining Control UI agent, debug, channel refresh, and exec approval copy through the locale source of truth. Preserve the English Cron Jobs tab label, keep the security audit command monospace, and regenerate locale metadata against current main. Verified locally: - pnpm test ui/src/ui/views/agents.test.ts ui/src/ui/views/debug.test.ts ui/src/ui/views/exec-approval.test.ts - pnpm ui:i18n:check - pnpm exec oxfmt --check --threads=1 ui/src/i18n/locales/en.ts ui/src/i18n/locales/zh-CN.ts ui/src/ui/views/agents-panels-status-files.ts ui/src/ui/views/agents.ts ui/src/ui/views/agents.test.ts ui/src/ui/views/debug.ts ui/src/ui/views/debug.test.ts ui/src/ui/views/exec-approval.ts ui/src/ui/views/exec-approval.test.ts - git diff --check origin/main...HEAD --- CHANGELOG.md | 1 + ui/src/i18n/.i18n/ar.meta.json | 122 ++++++++++++++- ui/src/i18n/.i18n/de.meta.json | 12 +- ui/src/i18n/.i18n/es.meta.json | 12 +- ui/src/i18n/.i18n/fa.meta.json | 122 ++++++++++++++- ui/src/i18n/.i18n/fr.meta.json | 12 +- ui/src/i18n/.i18n/id.meta.json | 12 +- ui/src/i18n/.i18n/it.meta.json | 122 ++++++++++++++- ui/src/i18n/.i18n/ja-JP.meta.json | 12 +- ui/src/i18n/.i18n/ko.meta.json | 12 +- ui/src/i18n/.i18n/nl.meta.json | 122 ++++++++++++++- ui/src/i18n/.i18n/pl.meta.json | 12 +- ui/src/i18n/.i18n/pt-BR.meta.json | 12 +- ui/src/i18n/.i18n/th.meta.json | 12 +- ui/src/i18n/.i18n/tr.meta.json | 12 +- ui/src/i18n/.i18n/uk.meta.json | 12 +- ui/src/i18n/.i18n/vi.meta.json | 122 ++++++++++++++- ui/src/i18n/.i18n/zh-CN.meta.json | 8 +- ui/src/i18n/.i18n/zh-TW.meta.json | 12 +- ui/src/i18n/locales/ar.ts | 133 ++++++++++++++++ ui/src/i18n/locales/de.ts | 133 ++++++++++++++++ ui/src/i18n/locales/en.ts | 133 ++++++++++++++++ ui/src/i18n/locales/es.ts | 133 ++++++++++++++++ ui/src/i18n/locales/fa.ts | 133 ++++++++++++++++ ui/src/i18n/locales/fr.ts | 133 ++++++++++++++++ ui/src/i18n/locales/id.ts | 133 ++++++++++++++++ ui/src/i18n/locales/it.ts | 133 ++++++++++++++++ ui/src/i18n/locales/ja-JP.ts | 133 ++++++++++++++++ ui/src/i18n/locales/ko.ts | 133 ++++++++++++++++ ui/src/i18n/locales/nl.ts | 133 ++++++++++++++++ ui/src/i18n/locales/pl.ts | 133 ++++++++++++++++ ui/src/i18n/locales/pt-BR.ts | 133 ++++++++++++++++ ui/src/i18n/locales/th.ts | 133 ++++++++++++++++ ui/src/i18n/locales/tr.ts | 133 ++++++++++++++++ ui/src/i18n/locales/uk.ts | 133 ++++++++++++++++ ui/src/i18n/locales/vi.ts | 133 ++++++++++++++++ ui/src/i18n/locales/zh-CN.ts | 133 ++++++++++++++++ ui/src/i18n/locales/zh-TW.ts | 133 ++++++++++++++++ ui/src/ui/views/agents-panels-status-files.ts | 145 ++++++++++-------- ui/src/ui/views/agents.test.ts | 36 +++++ ui/src/ui/views/agents.ts | 30 ++-- ui/src/ui/views/debug.test.ts | 64 ++++++++ ui/src/ui/views/debug.ts | 45 +++--- ui/src/ui/views/exec-approval.test.ts | 53 ++++++- ui/src/ui/views/exec-approval.ts | 39 +++-- 45 files changed, 3502 insertions(+), 200 deletions(-) create mode 100644 ui/src/ui/views/debug.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index a693b78000e..5c0ba494d18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Docs: https://docs.openclaw.ai - Anthropic/Meridian: preserve text and thinking content seeded on `content_block_start` in anthropic-messages streams, so `[thinking, text]` replies no longer persist as empty turns or trigger empty-response fallbacks. Fixes #74410. Thanks @vyctorbrzezowski. - Media: include redacted per-attempt resize failures and resolved model input capabilities in vision-pipeline errors so ARM64 image failures are diagnosable without closing the remaining routing investigation. Refs #74552. Thanks @1yihui. +- Control UI/i18n: route zh-CN agent, debug, channel-refresh, and exec-approval copy through the locale source while preserving the English `Cron Jobs` agent tab label and the security-audit command styling. Carries forward #39692 repair context. Thanks @hepeng154833488 and @vincentkoc. - Auto-reply: honor explicit `silentReply.direct: "allow"` for clean empty or reasoning-only direct chat turns while keeping the default direct-chat empty-response guard conservative. Fixes #74409. Thanks @jesuskannolis. - OpenAI Codex: send a non-empty Responses input item when a Codex turn only has systemPrompt-backed instructions, avoiding ChatGPT backend 400s from `input: []`. Fixes #73820. Thanks @woodhouse-bot. - Ollama: normalize provider-prefixed tool-call names at the native stream boundary so Kimi/Ollama calls such as `functions.exec` dispatch as `exec` instead of missing configured tools. Fixes #74487. Thanks @afurm and @carreipeia. diff --git a/ui/src/i18n/.i18n/ar.meta.json b/ui/src/i18n/.i18n/ar.meta.json index 990f5c9bed8..395033c7968 100644 --- a/ui/src/i18n/.i18n/ar.meta.json +++ b/ui/src/i18n/.i18n/ar.meta.json @@ -1,11 +1,125 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:40:46.712Z", + "fallbackKeys": [ + "agents.alreadyDefaultTitle", + "agents.channels.configuredCount", + "agents.channels.connectedCount", + "agents.channels.empty", + "agents.channels.enabledCount", + "agents.channels.lastRefresh", + "agents.channels.loadHint", + "agents.channels.noAccounts", + "agents.channels.notConfigured", + "agents.channels.setupGuide", + "agents.channels.subtitle", + "agents.channels.title", + "agents.context.configurationSubtitle", + "agents.context.default", + "agents.context.identityAvatar", + "agents.context.identityName", + "agents.context.openFilesTab", + "agents.context.primaryModel", + "agents.context.runtime", + "agents.context.schedulingSubtitle", + "agents.context.skillsFilter", + "agents.context.title", + "agents.context.workspace", + "agents.copyId", + "agents.copyIdTitle", + "agents.cronPanel.agentJobsSubtitle", + "agents.cronPanel.agentJobsTitle", + "agents.cronPanel.jobs", + "agents.cronPanel.nextWake", + "agents.cronPanel.noJobs", + "agents.cronPanel.runNow", + "agents.cronPanel.schedulerSubtitle", + "agents.cronPanel.schedulerTitle", + "agents.default", + "agents.files.closePreview", + "agents.files.collapsePreview", + "agents.files.content", + "agents.files.coreFilesSubtitle", + "agents.files.coreFilesTitle", + "agents.files.editFile", + "agents.files.empty", + "agents.files.emptyDraft", + "agents.files.expandPreview", + "agents.files.extensionPreview", + "agents.files.lines", + "agents.files.liveDraftPreview", + "agents.files.loadHint", + "agents.files.markdownPreview", + "agents.files.minRead", + "agents.files.missing", + "agents.files.missingHint", + "agents.files.notCreatedYet", + "agents.files.preview", + "agents.files.previewMarkdownTitle", + "agents.files.savedPreview", + "agents.files.selectFile", + "agents.files.updated", + "agents.files.updatedUnknown", + "agents.files.willCreateOnSave", + "agents.files.words", + "agents.files.workspace", + "agents.noAgents", + "agents.selectSubtitle", + "agents.selectTitle", + "agents.setDefault", + "agents.setDefaultTitle", + "agents.tabs.channels", + "agents.tabs.cronJobs", + "agents.tabs.files", + "agents.tabs.overview", + "agents.tabs.skills", + "agents.tabs.tools", + "common.never", + "common.reset", + "debug.eventLogSubtitle", + "debug.eventLogTitle", + "debug.health", + "debug.lastHeartbeat", + "debug.manualRpcSubtitle", + "debug.manualRpcTitle", + "debug.method", + "debug.modelsSubtitle", + "debug.modelsTitle", + "debug.noEvents", + "debug.paramsJson", + "debug.security.audit", + "debug.security.critical", + "debug.security.info", + "debug.security.noCriticalIssues", + "debug.security.runPrefix", + "debug.security.runSuffix", + "debug.security.warnings", + "debug.selectMethod", + "debug.snapshotsSubtitle", + "debug.snapshotsTitle", + "debug.status", + "execApproval.allowOnce", + "execApproval.alwaysAllow", + "execApproval.deny", + "execApproval.execApprovalNeeded", + "execApproval.expired", + "execApproval.expiresIn", + "execApproval.labels.agent", + "execApproval.labels.ask", + "execApproval.labels.cwd", + "execApproval.labels.host", + "execApproval.labels.plugin", + "execApproval.labels.resolved", + "execApproval.labels.security", + "execApproval.labels.session", + "execApproval.labels.severity", + "execApproval.pending", + "execApproval.pluginApprovalNeeded" + ], + "generatedAt": "2026-04-29T19:08:30.710Z", "locale": "ar", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, "translatedKeys": 768, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/de.meta.json b/ui/src/i18n/.i18n/de.meta.json index cbe97a57055..42bd9d11015 100644 --- a/ui/src/i18n/.i18n/de.meta.json +++ b/ui/src/i18n/.i18n/de.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:35:03.767Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:29.139Z", "locale": "de", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/es.meta.json b/ui/src/i18n/.i18n/es.meta.json index b54fc038e01..c6620b990d1 100644 --- a/ui/src/i18n/.i18n/es.meta.json +++ b/ui/src/i18n/.i18n/es.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:36:10.668Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:29.459Z", "locale": "es", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fa.meta.json b/ui/src/i18n/.i18n/fa.meta.json index 4da05556d26..a712d68588f 100644 --- a/ui/src/i18n/.i18n/fa.meta.json +++ b/ui/src/i18n/.i18n/fa.meta.json @@ -1,11 +1,125 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:45:53.092Z", + "fallbackKeys": [ + "agents.alreadyDefaultTitle", + "agents.channels.configuredCount", + "agents.channels.connectedCount", + "agents.channels.empty", + "agents.channels.enabledCount", + "agents.channels.lastRefresh", + "agents.channels.loadHint", + "agents.channels.noAccounts", + "agents.channels.notConfigured", + "agents.channels.setupGuide", + "agents.channels.subtitle", + "agents.channels.title", + "agents.context.configurationSubtitle", + "agents.context.default", + "agents.context.identityAvatar", + "agents.context.identityName", + "agents.context.openFilesTab", + "agents.context.primaryModel", + "agents.context.runtime", + "agents.context.schedulingSubtitle", + "agents.context.skillsFilter", + "agents.context.title", + "agents.context.workspace", + "agents.copyId", + "agents.copyIdTitle", + "agents.cronPanel.agentJobsSubtitle", + "agents.cronPanel.agentJobsTitle", + "agents.cronPanel.jobs", + "agents.cronPanel.nextWake", + "agents.cronPanel.noJobs", + "agents.cronPanel.runNow", + "agents.cronPanel.schedulerSubtitle", + "agents.cronPanel.schedulerTitle", + "agents.default", + "agents.files.closePreview", + "agents.files.collapsePreview", + "agents.files.content", + "agents.files.coreFilesSubtitle", + "agents.files.coreFilesTitle", + "agents.files.editFile", + "agents.files.empty", + "agents.files.emptyDraft", + "agents.files.expandPreview", + "agents.files.extensionPreview", + "agents.files.lines", + "agents.files.liveDraftPreview", + "agents.files.loadHint", + "agents.files.markdownPreview", + "agents.files.minRead", + "agents.files.missing", + "agents.files.missingHint", + "agents.files.notCreatedYet", + "agents.files.preview", + "agents.files.previewMarkdownTitle", + "agents.files.savedPreview", + "agents.files.selectFile", + "agents.files.updated", + "agents.files.updatedUnknown", + "agents.files.willCreateOnSave", + "agents.files.words", + "agents.files.workspace", + "agents.noAgents", + "agents.selectSubtitle", + "agents.selectTitle", + "agents.setDefault", + "agents.setDefaultTitle", + "agents.tabs.channels", + "agents.tabs.cronJobs", + "agents.tabs.files", + "agents.tabs.overview", + "agents.tabs.skills", + "agents.tabs.tools", + "common.never", + "common.reset", + "debug.eventLogSubtitle", + "debug.eventLogTitle", + "debug.health", + "debug.lastHeartbeat", + "debug.manualRpcSubtitle", + "debug.manualRpcTitle", + "debug.method", + "debug.modelsSubtitle", + "debug.modelsTitle", + "debug.noEvents", + "debug.paramsJson", + "debug.security.audit", + "debug.security.critical", + "debug.security.info", + "debug.security.noCriticalIssues", + "debug.security.runPrefix", + "debug.security.runSuffix", + "debug.security.warnings", + "debug.selectMethod", + "debug.snapshotsSubtitle", + "debug.snapshotsTitle", + "debug.status", + "execApproval.allowOnce", + "execApproval.alwaysAllow", + "execApproval.deny", + "execApproval.execApprovalNeeded", + "execApproval.expired", + "execApproval.expiresIn", + "execApproval.labels.agent", + "execApproval.labels.ask", + "execApproval.labels.cwd", + "execApproval.labels.host", + "execApproval.labels.plugin", + "execApproval.labels.resolved", + "execApproval.labels.security", + "execApproval.labels.session", + "execApproval.labels.severity", + "execApproval.pending", + "execApproval.pluginApprovalNeeded" + ], + "generatedAt": "2026-04-29T19:08:33.526Z", "locale": "fa", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, "translatedKeys": 768, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fr.meta.json b/ui/src/i18n/.i18n/fr.meta.json index 197aaebbeec..031820b7509 100644 --- a/ui/src/i18n/.i18n/fr.meta.json +++ b/ui/src/i18n/.i18n/fr.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:36:08.909Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:30.398Z", "locale": "fr", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/id.meta.json b/ui/src/i18n/.i18n/id.meta.json index 439693a57bf..e358c096616 100644 --- a/ui/src/i18n/.i18n/id.meta.json +++ b/ui/src/i18n/.i18n/id.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:37:59.703Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:31.956Z", "locale": "id", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/it.meta.json b/ui/src/i18n/.i18n/it.meta.json index 0dcab001213..6d1754c53bf 100644 --- a/ui/src/i18n/.i18n/it.meta.json +++ b/ui/src/i18n/.i18n/it.meta.json @@ -1,11 +1,125 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:39:53.120Z", + "fallbackKeys": [ + "agents.alreadyDefaultTitle", + "agents.channels.configuredCount", + "agents.channels.connectedCount", + "agents.channels.empty", + "agents.channels.enabledCount", + "agents.channels.lastRefresh", + "agents.channels.loadHint", + "agents.channels.noAccounts", + "agents.channels.notConfigured", + "agents.channels.setupGuide", + "agents.channels.subtitle", + "agents.channels.title", + "agents.context.configurationSubtitle", + "agents.context.default", + "agents.context.identityAvatar", + "agents.context.identityName", + "agents.context.openFilesTab", + "agents.context.primaryModel", + "agents.context.runtime", + "agents.context.schedulingSubtitle", + "agents.context.skillsFilter", + "agents.context.title", + "agents.context.workspace", + "agents.copyId", + "agents.copyIdTitle", + "agents.cronPanel.agentJobsSubtitle", + "agents.cronPanel.agentJobsTitle", + "agents.cronPanel.jobs", + "agents.cronPanel.nextWake", + "agents.cronPanel.noJobs", + "agents.cronPanel.runNow", + "agents.cronPanel.schedulerSubtitle", + "agents.cronPanel.schedulerTitle", + "agents.default", + "agents.files.closePreview", + "agents.files.collapsePreview", + "agents.files.content", + "agents.files.coreFilesSubtitle", + "agents.files.coreFilesTitle", + "agents.files.editFile", + "agents.files.empty", + "agents.files.emptyDraft", + "agents.files.expandPreview", + "agents.files.extensionPreview", + "agents.files.lines", + "agents.files.liveDraftPreview", + "agents.files.loadHint", + "agents.files.markdownPreview", + "agents.files.minRead", + "agents.files.missing", + "agents.files.missingHint", + "agents.files.notCreatedYet", + "agents.files.preview", + "agents.files.previewMarkdownTitle", + "agents.files.savedPreview", + "agents.files.selectFile", + "agents.files.updated", + "agents.files.updatedUnknown", + "agents.files.willCreateOnSave", + "agents.files.words", + "agents.files.workspace", + "agents.noAgents", + "agents.selectSubtitle", + "agents.selectTitle", + "agents.setDefault", + "agents.setDefaultTitle", + "agents.tabs.channels", + "agents.tabs.cronJobs", + "agents.tabs.files", + "agents.tabs.overview", + "agents.tabs.skills", + "agents.tabs.tools", + "common.never", + "common.reset", + "debug.eventLogSubtitle", + "debug.eventLogTitle", + "debug.health", + "debug.lastHeartbeat", + "debug.manualRpcSubtitle", + "debug.manualRpcTitle", + "debug.method", + "debug.modelsSubtitle", + "debug.modelsTitle", + "debug.noEvents", + "debug.paramsJson", + "debug.security.audit", + "debug.security.critical", + "debug.security.info", + "debug.security.noCriticalIssues", + "debug.security.runPrefix", + "debug.security.runSuffix", + "debug.security.warnings", + "debug.selectMethod", + "debug.snapshotsSubtitle", + "debug.snapshotsTitle", + "debug.status", + "execApproval.allowOnce", + "execApproval.alwaysAllow", + "execApproval.deny", + "execApproval.execApprovalNeeded", + "execApproval.expired", + "execApproval.expiresIn", + "execApproval.labels.agent", + "execApproval.labels.ask", + "execApproval.labels.cwd", + "execApproval.labels.host", + "execApproval.labels.plugin", + "execApproval.labels.resolved", + "execApproval.labels.security", + "execApproval.labels.session", + "execApproval.labels.severity", + "execApproval.pending", + "execApproval.pluginApprovalNeeded" + ], + "generatedAt": "2026-04-29T19:08:31.026Z", "locale": "it", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, "translatedKeys": 768, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ja-JP.meta.json b/ui/src/i18n/.i18n/ja-JP.meta.json index 9478a2efb50..9ef629ec2a5 100644 --- a/ui/src/i18n/.i18n/ja-JP.meta.json +++ b/ui/src/i18n/.i18n/ja-JP.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:36:05.788Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:29.768Z", "locale": "ja-JP", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ko.meta.json b/ui/src/i18n/.i18n/ko.meta.json index 449541e6fb6..31b7d2bc379 100644 --- a/ui/src/i18n/.i18n/ko.meta.json +++ b/ui/src/i18n/.i18n/ko.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:36:02.577Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:30.082Z", "locale": "ko", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/nl.meta.json b/ui/src/i18n/.i18n/nl.meta.json index 7ea8c2dafc2..e5ec030a399 100644 --- a/ui/src/i18n/.i18n/nl.meta.json +++ b/ui/src/i18n/.i18n/nl.meta.json @@ -1,11 +1,125 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:42:07.899Z", + "fallbackKeys": [ + "agents.alreadyDefaultTitle", + "agents.channels.configuredCount", + "agents.channels.connectedCount", + "agents.channels.empty", + "agents.channels.enabledCount", + "agents.channels.lastRefresh", + "agents.channels.loadHint", + "agents.channels.noAccounts", + "agents.channels.notConfigured", + "agents.channels.setupGuide", + "agents.channels.subtitle", + "agents.channels.title", + "agents.context.configurationSubtitle", + "agents.context.default", + "agents.context.identityAvatar", + "agents.context.identityName", + "agents.context.openFilesTab", + "agents.context.primaryModel", + "agents.context.runtime", + "agents.context.schedulingSubtitle", + "agents.context.skillsFilter", + "agents.context.title", + "agents.context.workspace", + "agents.copyId", + "agents.copyIdTitle", + "agents.cronPanel.agentJobsSubtitle", + "agents.cronPanel.agentJobsTitle", + "agents.cronPanel.jobs", + "agents.cronPanel.nextWake", + "agents.cronPanel.noJobs", + "agents.cronPanel.runNow", + "agents.cronPanel.schedulerSubtitle", + "agents.cronPanel.schedulerTitle", + "agents.default", + "agents.files.closePreview", + "agents.files.collapsePreview", + "agents.files.content", + "agents.files.coreFilesSubtitle", + "agents.files.coreFilesTitle", + "agents.files.editFile", + "agents.files.empty", + "agents.files.emptyDraft", + "agents.files.expandPreview", + "agents.files.extensionPreview", + "agents.files.lines", + "agents.files.liveDraftPreview", + "agents.files.loadHint", + "agents.files.markdownPreview", + "agents.files.minRead", + "agents.files.missing", + "agents.files.missingHint", + "agents.files.notCreatedYet", + "agents.files.preview", + "agents.files.previewMarkdownTitle", + "agents.files.savedPreview", + "agents.files.selectFile", + "agents.files.updated", + "agents.files.updatedUnknown", + "agents.files.willCreateOnSave", + "agents.files.words", + "agents.files.workspace", + "agents.noAgents", + "agents.selectSubtitle", + "agents.selectTitle", + "agents.setDefault", + "agents.setDefaultTitle", + "agents.tabs.channels", + "agents.tabs.cronJobs", + "agents.tabs.files", + "agents.tabs.overview", + "agents.tabs.skills", + "agents.tabs.tools", + "common.never", + "common.reset", + "debug.eventLogSubtitle", + "debug.eventLogTitle", + "debug.health", + "debug.lastHeartbeat", + "debug.manualRpcSubtitle", + "debug.manualRpcTitle", + "debug.method", + "debug.modelsSubtitle", + "debug.modelsTitle", + "debug.noEvents", + "debug.paramsJson", + "debug.security.audit", + "debug.security.critical", + "debug.security.info", + "debug.security.noCriticalIssues", + "debug.security.runPrefix", + "debug.security.runSuffix", + "debug.security.warnings", + "debug.selectMethod", + "debug.snapshotsSubtitle", + "debug.snapshotsTitle", + "debug.status", + "execApproval.allowOnce", + "execApproval.alwaysAllow", + "execApproval.deny", + "execApproval.execApprovalNeeded", + "execApproval.expired", + "execApproval.expiresIn", + "execApproval.labels.agent", + "execApproval.labels.ask", + "execApproval.labels.cwd", + "execApproval.labels.host", + "execApproval.labels.plugin", + "execApproval.labels.resolved", + "execApproval.labels.security", + "execApproval.labels.session", + "execApproval.labels.severity", + "execApproval.pending", + "execApproval.pluginApprovalNeeded" + ], + "generatedAt": "2026-04-29T19:08:33.205Z", "locale": "nl", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, "translatedKeys": 768, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pl.meta.json b/ui/src/i18n/.i18n/pl.meta.json index 281e65ec098..5bfc139c5e5 100644 --- a/ui/src/i18n/.i18n/pl.meta.json +++ b/ui/src/i18n/.i18n/pl.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:38:29.591Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:32.268Z", "locale": "pl", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pt-BR.meta.json b/ui/src/i18n/.i18n/pt-BR.meta.json index 55acbd4fe0f..9f13257de78 100644 --- a/ui/src/i18n/.i18n/pt-BR.meta.json +++ b/ui/src/i18n/.i18n/pt-BR.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:35:02.393Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:28.821Z", "locale": "pt-BR", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/th.meta.json b/ui/src/i18n/.i18n/th.meta.json index 2f5e9df722d..ae2105199df 100644 --- a/ui/src/i18n/.i18n/th.meta.json +++ b/ui/src/i18n/.i18n/th.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:38:48.503Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:32.585Z", "locale": "th", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/tr.meta.json b/ui/src/i18n/.i18n/tr.meta.json index a0685e2e61a..70a203f1b5e 100644 --- a/ui/src/i18n/.i18n/tr.meta.json +++ b/ui/src/i18n/.i18n/tr.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:36:58.183Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:31.341Z", "locale": "tr", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/uk.meta.json b/ui/src/i18n/.i18n/uk.meta.json index 0ff149fbd96..f60d475588a 100644 --- a/ui/src/i18n/.i18n/uk.meta.json +++ b/ui/src/i18n/.i18n/uk.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:37:08.260Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:31.648Z", "locale": "uk", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/vi.meta.json b/ui/src/i18n/.i18n/vi.meta.json index d29ec94c54b..1c6a51b7244 100644 --- a/ui/src/i18n/.i18n/vi.meta.json +++ b/ui/src/i18n/.i18n/vi.meta.json @@ -1,11 +1,125 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:42:15.736Z", + "fallbackKeys": [ + "agents.alreadyDefaultTitle", + "agents.channels.configuredCount", + "agents.channels.connectedCount", + "agents.channels.empty", + "agents.channels.enabledCount", + "agents.channels.lastRefresh", + "agents.channels.loadHint", + "agents.channels.noAccounts", + "agents.channels.notConfigured", + "agents.channels.setupGuide", + "agents.channels.subtitle", + "agents.channels.title", + "agents.context.configurationSubtitle", + "agents.context.default", + "agents.context.identityAvatar", + "agents.context.identityName", + "agents.context.openFilesTab", + "agents.context.primaryModel", + "agents.context.runtime", + "agents.context.schedulingSubtitle", + "agents.context.skillsFilter", + "agents.context.title", + "agents.context.workspace", + "agents.copyId", + "agents.copyIdTitle", + "agents.cronPanel.agentJobsSubtitle", + "agents.cronPanel.agentJobsTitle", + "agents.cronPanel.jobs", + "agents.cronPanel.nextWake", + "agents.cronPanel.noJobs", + "agents.cronPanel.runNow", + "agents.cronPanel.schedulerSubtitle", + "agents.cronPanel.schedulerTitle", + "agents.default", + "agents.files.closePreview", + "agents.files.collapsePreview", + "agents.files.content", + "agents.files.coreFilesSubtitle", + "agents.files.coreFilesTitle", + "agents.files.editFile", + "agents.files.empty", + "agents.files.emptyDraft", + "agents.files.expandPreview", + "agents.files.extensionPreview", + "agents.files.lines", + "agents.files.liveDraftPreview", + "agents.files.loadHint", + "agents.files.markdownPreview", + "agents.files.minRead", + "agents.files.missing", + "agents.files.missingHint", + "agents.files.notCreatedYet", + "agents.files.preview", + "agents.files.previewMarkdownTitle", + "agents.files.savedPreview", + "agents.files.selectFile", + "agents.files.updated", + "agents.files.updatedUnknown", + "agents.files.willCreateOnSave", + "agents.files.words", + "agents.files.workspace", + "agents.noAgents", + "agents.selectSubtitle", + "agents.selectTitle", + "agents.setDefault", + "agents.setDefaultTitle", + "agents.tabs.channels", + "agents.tabs.cronJobs", + "agents.tabs.files", + "agents.tabs.overview", + "agents.tabs.skills", + "agents.tabs.tools", + "common.never", + "common.reset", + "debug.eventLogSubtitle", + "debug.eventLogTitle", + "debug.health", + "debug.lastHeartbeat", + "debug.manualRpcSubtitle", + "debug.manualRpcTitle", + "debug.method", + "debug.modelsSubtitle", + "debug.modelsTitle", + "debug.noEvents", + "debug.paramsJson", + "debug.security.audit", + "debug.security.critical", + "debug.security.info", + "debug.security.noCriticalIssues", + "debug.security.runPrefix", + "debug.security.runSuffix", + "debug.security.warnings", + "debug.selectMethod", + "debug.snapshotsSubtitle", + "debug.snapshotsTitle", + "debug.status", + "execApproval.allowOnce", + "execApproval.alwaysAllow", + "execApproval.deny", + "execApproval.execApprovalNeeded", + "execApproval.expired", + "execApproval.expiresIn", + "execApproval.labels.agent", + "execApproval.labels.ask", + "execApproval.labels.cwd", + "execApproval.labels.host", + "execApproval.labels.plugin", + "execApproval.labels.resolved", + "execApproval.labels.security", + "execApproval.labels.session", + "execApproval.labels.severity", + "execApproval.pending", + "execApproval.pluginApprovalNeeded" + ], + "generatedAt": "2026-04-29T19:08:32.902Z", "locale": "vi", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, "translatedKeys": 768, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-CN.meta.json b/ui/src/i18n/.i18n/zh-CN.meta.json index f4e8af61ca1..f8c2e04b896 100644 --- a/ui/src/i18n/.i18n/zh-CN.meta.json +++ b/ui/src/i18n/.i18n/zh-CN.meta.json @@ -1,11 +1,11 @@ { "fallbackKeys": [], - "generatedAt": "2026-04-29T17:35:12.940Z", + "generatedAt": "2026-04-29T19:08:28.139Z", "locale": "zh-CN", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 881, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-TW.meta.json b/ui/src/i18n/.i18n/zh-TW.meta.json index daa6271f693..fcff10742d8 100644 --- a/ui/src/i18n/.i18n/zh-TW.meta.json +++ b/ui/src/i18n/.i18n/zh-TW.meta.json @@ -1,11 +1,13 @@ { - "fallbackKeys": [], - "generatedAt": "2026-04-29T17:35:07.758Z", + "fallbackKeys": [ + "agents.context.runtime" + ], + "generatedAt": "2026-04-29T19:08:28.498Z", "locale": "zh-TW", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4", - "totalKeys": 768, - "translatedKeys": 768, + "sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b", + "totalKeys": 881, + "translatedKeys": 880, "workflow": 1 } diff --git a/ui/src/i18n/locales/ar.ts b/ui/src/i18n/locales/ar.ts index b7ae8e48b95..4cbb84ac056 100644 --- a/ui/src/i18n/locales/ar.ts +++ b/ui/src/i18n/locales/ar.ts @@ -16,6 +16,7 @@ export const ar: TranslationMap = { connected: "متصل", refresh: "تحديث", reload: "إعادة التحميل", + reset: "Reset", probe: "فحص", call: "اتصال", confirm: "تأكيد", @@ -24,6 +25,7 @@ export const ar: TranslationMap = { enabled: "مفعّل", disabled: "معطّل", na: "غير متوفر", + never: "never", configured: "مهيأ", running: "قيد التشغيل", linked: "مرتبط", @@ -137,6 +139,137 @@ export const ar: TranslationMap = { lastInput: "آخر إدخال {time}", reason: "السبب {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "متصل: {id}", connected: "متصل", diff --git a/ui/src/i18n/locales/de.ts b/ui/src/i18n/locales/de.ts index 439cc5da76a..515f2a9c7e9 100644 --- a/ui/src/i18n/locales/de.ts +++ b/ui/src/i18n/locales/de.ts @@ -16,6 +16,7 @@ export const de: TranslationMap = { connected: "Verbunden", refresh: "Aktualisieren", reload: "Neu laden", + reset: "Reset", probe: "Prüfen", call: "Anrufen", confirm: "Bestätigen", @@ -24,6 +25,7 @@ export const de: TranslationMap = { enabled: "Aktiviert", disabled: "Deaktiviert", na: "k. A.", + never: "never", configured: "Konfiguriert", running: "Wird ausgeführt", linked: "Verknüpft", @@ -141,6 +143,137 @@ export const de: TranslationMap = { lastInput: "Letzte Eingabe {time}", reason: "Grund {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Verbunden: {id}", connected: "Verbunden", diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index d77773a933b..114bd9e50ce 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -15,6 +15,7 @@ export const en: TranslationMap = { connected: "Connected", refresh: "Refresh", reload: "Reload", + reset: "Reset", probe: "Probe", call: "Call", confirm: "Confirm", @@ -23,6 +24,7 @@ export const en: TranslationMap = { enabled: "Enabled", disabled: "Disabled", na: "n/a", + never: "never", configured: "Configured", running: "Running", linked: "Linked", @@ -136,6 +138,137 @@ export const en: TranslationMap = { lastInput: "Last input {time}", reason: "Reason {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Connected: {id}", connected: "Connected", diff --git a/ui/src/i18n/locales/es.ts b/ui/src/i18n/locales/es.ts index fb0c13405b9..dc58e44afc9 100644 --- a/ui/src/i18n/locales/es.ts +++ b/ui/src/i18n/locales/es.ts @@ -16,6 +16,7 @@ export const es: TranslationMap = { connected: "Conectado", refresh: "Actualizar", reload: "Recargar", + reset: "Reset", probe: "Probar", call: "Llamada", confirm: "Confirmar", @@ -24,6 +25,7 @@ export const es: TranslationMap = { enabled: "Habilitado", disabled: "Deshabilitado", na: "n/d", + never: "never", configured: "Configurado", running: "En ejecución", linked: "Vinculado", @@ -138,6 +140,137 @@ export const es: TranslationMap = { lastInput: "Última entrada {time}", reason: "Motivo {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Conectado: {id}", connected: "Conectado", diff --git a/ui/src/i18n/locales/fa.ts b/ui/src/i18n/locales/fa.ts index 2c41aff2a19..0329caeaae4 100644 --- a/ui/src/i18n/locales/fa.ts +++ b/ui/src/i18n/locales/fa.ts @@ -16,6 +16,7 @@ export const fa: TranslationMap = { connected: "متصل", refresh: "تازه‌سازی", reload: "بارگذاری مجدد", + reset: "Reset", probe: "بررسی", call: "فراخوانی", confirm: "تأیید", @@ -24,6 +25,7 @@ export const fa: TranslationMap = { enabled: "فعال", disabled: "غیرفعال", na: "n/a", + never: "never", configured: "پیکربندی‌شده", running: "در حال اجرا", linked: "پیوندشده", @@ -139,6 +141,137 @@ export const fa: TranslationMap = { lastInput: "آخرین ورودی {time}", reason: "دلیل {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "متصل: {id}", connected: "متصل", diff --git a/ui/src/i18n/locales/fr.ts b/ui/src/i18n/locales/fr.ts index d7a89a54d99..4d26a20e6d7 100644 --- a/ui/src/i18n/locales/fr.ts +++ b/ui/src/i18n/locales/fr.ts @@ -16,6 +16,7 @@ export const fr: TranslationMap = { connected: "Connecté", refresh: "Actualiser", reload: "Recharger", + reset: "Reset", probe: "Sonder", call: "Appeler", confirm: "Confirmer", @@ -24,6 +25,7 @@ export const fr: TranslationMap = { enabled: "Activé", disabled: "Désactivé", na: "n/d", + never: "never", configured: "Configuré", running: "En cours d’exécution", linked: "Lié", @@ -140,6 +142,137 @@ export const fr: TranslationMap = { lastInput: "Dernière entrée {time}", reason: "Raison {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Connecté : {id}", connected: "Connecté", diff --git a/ui/src/i18n/locales/id.ts b/ui/src/i18n/locales/id.ts index 02baffcc516..3cb6050cb91 100644 --- a/ui/src/i18n/locales/id.ts +++ b/ui/src/i18n/locales/id.ts @@ -16,6 +16,7 @@ export const id: TranslationMap = { connected: "Terhubung", refresh: "Muat ulang", reload: "Muat ulang", + reset: "Reset", probe: "Probe", call: "Panggil", confirm: "Konfirmasi", @@ -24,6 +25,7 @@ export const id: TranslationMap = { enabled: "Diaktifkan", disabled: "Dinonaktifkan", na: "t/a", + never: "never", configured: "Dikonfigurasi", running: "Berjalan", linked: "Ditautkan", @@ -138,6 +140,137 @@ export const id: TranslationMap = { lastInput: "Input terakhir {time}", reason: "Alasan {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Terhubung: {id}", connected: "Terhubung", diff --git a/ui/src/i18n/locales/it.ts b/ui/src/i18n/locales/it.ts index fc6398d4e71..c4052abbaf3 100644 --- a/ui/src/i18n/locales/it.ts +++ b/ui/src/i18n/locales/it.ts @@ -16,6 +16,7 @@ export const it: TranslationMap = { connected: "Connesso", refresh: "Aggiorna", reload: "Ricarica", + reset: "Reset", probe: "Sonda", call: "Chiama", confirm: "Conferma", @@ -24,6 +25,7 @@ export const it: TranslationMap = { enabled: "Abilitato", disabled: "Disabilitato", na: "n/d", + never: "never", configured: "Configurato", running: "In esecuzione", linked: "Collegato", @@ -138,6 +140,137 @@ export const it: TranslationMap = { lastInput: "Ultimo input {time}", reason: "Motivo {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Connesso: {id}", connected: "Connesso", diff --git a/ui/src/i18n/locales/ja-JP.ts b/ui/src/i18n/locales/ja-JP.ts index f42979fc658..9f2b5014e61 100644 --- a/ui/src/i18n/locales/ja-JP.ts +++ b/ui/src/i18n/locales/ja-JP.ts @@ -16,6 +16,7 @@ export const ja_JP: TranslationMap = { connected: "接続済み", refresh: "更新", reload: "再読み込み", + reset: "Reset", probe: "プローブ", call: "通話", confirm: "確認", @@ -24,6 +25,7 @@ export const ja_JP: TranslationMap = { enabled: "有効", disabled: "無効", na: "n/a", + never: "never", configured: "設定済み", running: "実行中", linked: "リンク済み", @@ -141,6 +143,137 @@ export const ja_JP: TranslationMap = { lastInput: "最後の入力 {time}", reason: "理由 {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "接続済み: {id}", connected: "接続済み", diff --git a/ui/src/i18n/locales/ko.ts b/ui/src/i18n/locales/ko.ts index 6b37123b41f..a25c02a9c44 100644 --- a/ui/src/i18n/locales/ko.ts +++ b/ui/src/i18n/locales/ko.ts @@ -16,6 +16,7 @@ export const ko: TranslationMap = { connected: "연결됨", refresh: "새로고침", reload: "다시 로드", + reset: "Reset", probe: "프로브", call: "호출", confirm: "확인", @@ -24,6 +25,7 @@ export const ko: TranslationMap = { enabled: "사용", disabled: "사용 안 함", na: "해당 없음", + never: "never", configured: "구성됨", running: "실행 중", linked: "연결됨", @@ -137,6 +139,137 @@ export const ko: TranslationMap = { lastInput: "마지막 입력 {time}", reason: "사유 {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "연결됨: {id}", connected: "연결됨", diff --git a/ui/src/i18n/locales/nl.ts b/ui/src/i18n/locales/nl.ts index 83118d0c7c4..bfd1ddc12f7 100644 --- a/ui/src/i18n/locales/nl.ts +++ b/ui/src/i18n/locales/nl.ts @@ -16,6 +16,7 @@ export const nl: TranslationMap = { connected: "Verbonden", refresh: "Vernieuwen", reload: "Opnieuw laden", + reset: "Reset", probe: "Testen", call: "Aanroepen", confirm: "Bevestigen", @@ -24,6 +25,7 @@ export const nl: TranslationMap = { enabled: "Ingeschakeld", disabled: "Uitgeschakeld", na: "n.v.t.", + never: "never", configured: "Geconfigureerd", running: "Actief", linked: "Gekoppeld", @@ -140,6 +142,137 @@ export const nl: TranslationMap = { lastInput: "Laatste invoer {time}", reason: "Reden {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Verbonden: {id}", connected: "Verbonden", diff --git a/ui/src/i18n/locales/pl.ts b/ui/src/i18n/locales/pl.ts index b5a87a62902..7a49e52874b 100644 --- a/ui/src/i18n/locales/pl.ts +++ b/ui/src/i18n/locales/pl.ts @@ -16,6 +16,7 @@ export const pl: TranslationMap = { connected: "Połączono", refresh: "Odśwież", reload: "Przeładuj", + reset: "Reset", probe: "Sprawdź", call: "Połączenie", confirm: "Potwierdź", @@ -24,6 +25,7 @@ export const pl: TranslationMap = { enabled: "Włączone", disabled: "Wyłączone", na: "n/d", + never: "never", configured: "Skonfigurowano", running: "Uruchomiono", linked: "Połączono", @@ -139,6 +141,137 @@ export const pl: TranslationMap = { lastInput: "Ostatnie wejście {time}", reason: "Powód {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Połączono: {id}", connected: "Połączono", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index cb6de3423d4..ebfe4d60dce 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -16,6 +16,7 @@ export const pt_BR: TranslationMap = { connected: "Conectado", refresh: "Atualizar", reload: "Recarregar", + reset: "Reset", probe: "Sondar", call: "Ligar", confirm: "Confirmar", @@ -24,6 +25,7 @@ export const pt_BR: TranslationMap = { enabled: "Ativado", disabled: "Desativado", na: "n/d", + never: "never", configured: "Configurado", running: "Em execução", linked: "Vinculado", @@ -138,6 +140,137 @@ export const pt_BR: TranslationMap = { lastInput: "Última entrada {time}", reason: "Motivo {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Conectado: {id}", connected: "Conectado", diff --git a/ui/src/i18n/locales/th.ts b/ui/src/i18n/locales/th.ts index 941111d1976..aacaf8f709b 100644 --- a/ui/src/i18n/locales/th.ts +++ b/ui/src/i18n/locales/th.ts @@ -16,6 +16,7 @@ export const th: TranslationMap = { connected: "เชื่อมต่อแล้ว", refresh: "รีเฟรช", reload: "โหลดใหม่", + reset: "Reset", probe: "ตรวจสอบ", call: "โทร", confirm: "ยืนยัน", @@ -24,6 +25,7 @@ export const th: TranslationMap = { enabled: "เปิดใช้งาน", disabled: "ปิดใช้งาน", na: "n/a", + never: "never", configured: "กำหนดค่าแล้ว", running: "กำลังทำงาน", linked: "เชื่อมโยงแล้ว", @@ -136,6 +138,137 @@ export const th: TranslationMap = { lastInput: "อินพุตล่าสุด {time}", reason: "เหตุผล {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "เชื่อมต่อแล้ว: {id}", connected: "เชื่อมต่อแล้ว", diff --git a/ui/src/i18n/locales/tr.ts b/ui/src/i18n/locales/tr.ts index 4b30224672b..0951a56d31e 100644 --- a/ui/src/i18n/locales/tr.ts +++ b/ui/src/i18n/locales/tr.ts @@ -16,6 +16,7 @@ export const tr: TranslationMap = { connected: "Bağlandı", refresh: "Yenile", reload: "Yeniden yükle", + reset: "Reset", probe: "Sına", call: "Ara", confirm: "Onayla", @@ -24,6 +25,7 @@ export const tr: TranslationMap = { enabled: "Etkin", disabled: "Devre dışı", na: "yok", + never: "never", configured: "Yapılandırıldı", running: "Çalışıyor", linked: "Bağlandı", @@ -140,6 +142,137 @@ export const tr: TranslationMap = { lastInput: "Son giriş {time}", reason: "Neden {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Bağlı: {id}", connected: "Bağlı", diff --git a/ui/src/i18n/locales/uk.ts b/ui/src/i18n/locales/uk.ts index 4dd0e77a0c7..50070b22936 100644 --- a/ui/src/i18n/locales/uk.ts +++ b/ui/src/i18n/locales/uk.ts @@ -16,6 +16,7 @@ export const uk: TranslationMap = { connected: "Підключено", refresh: "Оновити", reload: "Перезавантажити", + reset: "Reset", probe: "Перевірити", call: "Виклик", confirm: "Підтвердити", @@ -24,6 +25,7 @@ export const uk: TranslationMap = { enabled: "Увімкнено", disabled: "Вимкнено", na: "н/д", + never: "never", configured: "Налаштовано", running: "Запущено", linked: "Пов’язано", @@ -139,6 +141,137 @@ export const uk: TranslationMap = { lastInput: "Останнє введення {time}", reason: "Причина {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Підключено: {id}", connected: "Підключено", diff --git a/ui/src/i18n/locales/vi.ts b/ui/src/i18n/locales/vi.ts index 32666ef5338..d0c59965e82 100644 --- a/ui/src/i18n/locales/vi.ts +++ b/ui/src/i18n/locales/vi.ts @@ -16,6 +16,7 @@ export const vi: TranslationMap = { connected: "Đã kết nối", refresh: "Làm mới", reload: "Tải lại", + reset: "Reset", probe: "Thăm dò", call: "Gọi", confirm: "Xác nhận", @@ -24,6 +25,7 @@ export const vi: TranslationMap = { enabled: "Đã bật", disabled: "Đã tắt", na: "n/a", + never: "never", configured: "Đã cấu hình", running: "Đang chạy", linked: "Đã liên kết", @@ -138,6 +140,137 @@ export const vi: TranslationMap = { lastInput: "Đầu vào gần nhất {time}", reason: "Lý do {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "Đã kết nối: {id}", connected: "Đã kết nối", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index f082d29b357..2c2645a9183 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -16,6 +16,7 @@ export const zh_CN: TranslationMap = { connected: "已连接", refresh: "刷新", reload: "重新加载", + reset: "重置", probe: "探测", call: "调用", confirm: "确认", @@ -24,6 +25,7 @@ export const zh_CN: TranslationMap = { enabled: "已启用", disabled: "已禁用", na: "不适用", + never: "从未", configured: "已配置", running: "运行中", linked: "已关联", @@ -136,6 +138,137 @@ export const zh_CN: TranslationMap = { lastInput: "上次输入 {time}", reason: "原因 {reason}", }, + agents: { + noAgents: "无代理", + copyId: "复制 ID", + copyIdTitle: "将代理 ID 复制到剪贴板", + default: "默认", + setDefault: "设为默认", + alreadyDefaultTitle: "已是默认代理", + setDefaultTitle: "设为默认代理", + selectTitle: "选择代理", + selectSubtitle: "选择代理以查看其工作区和工具。", + tabs: { + overview: "概览", + files: "文件", + tools: "工具", + skills: "技能", + channels: "频道", + cronJobs: "Cron Jobs", + }, + context: { + title: "代理上下文", + workspace: "工作区", + openFilesTab: "打开文件标签", + primaryModel: "主模型", + runtime: "运行时", + identityName: "身份名称", + identityAvatar: "身份头像", + skillsFilter: "技能筛选器", + default: "默认", + configurationSubtitle: "工作区、身份和模型配置。", + schedulingSubtitle: "工作区和调度目标。", + }, + channels: { + title: "频道", + subtitle: "Gateway 全局频道状态快照。", + lastRefresh: "上次刷新:{time}", + loadHint: "加载频道以查看实时状态。", + empty: "未找到频道。", + connectedCount: "{connected}/{total} 已连接", + noAccounts: "无账户", + configuredCount: "已配置 {count} 个", + notConfigured: "未配置", + enabledCount: "已启用 {count} 个", + setupGuide: "设置指南", + }, + cronPanel: { + schedulerTitle: "调度器", + schedulerSubtitle: "Gateway 定时任务状态。", + jobs: "任务", + nextWake: "下次唤醒", + agentJobsTitle: "代理定时任务", + agentJobsSubtitle: "面向此代理的计划任务。", + noJobs: "未分配任务。", + runNow: "立即运行", + }, + files: { + emptyDraft: "空草稿", + minRead: "{count} 分钟阅读", + markdownPreview: "Markdown 预览", + extensionPreview: "{ext} 预览", + preview: "预览", + expandPreview: "展开预览", + collapsePreview: "收起预览", + editFile: "编辑文件", + closePreview: "关闭预览", + coreFilesTitle: "核心文件", + coreFilesSubtitle: "引导人格、身份和工具指引。", + workspace: "工作区", + loadHint: "加载代理工作区文件以编辑核心指令。", + empty: "未找到文件。", + missing: "缺失", + selectFile: "选择要编辑的文件。", + previewMarkdownTitle: "预览渲染后的 Markdown", + willCreateOnSave: "保存时将创建", + liveDraftPreview: "实时草稿预览", + savedPreview: "已保存预览", + updated: "更新于 {time}", + notCreatedYet: "尚未创建", + updatedUnknown: "更新时间未知", + missingHint: "此文件缺失。保存后将在代理工作区中创建它。", + content: "内容", + words: "{count} 个词", + lines: "行", + }, + }, + debug: { + snapshotsTitle: "快照", + snapshotsSubtitle: "状态、健康状况和心跳数据。", + status: "状态", + health: "健康状况", + lastHeartbeat: "上次心跳", + security: { + audit: "安全审计", + critical: "{count} 个严重问题", + warnings: "{count} 个警告", + noCriticalIssues: "无严重问题", + info: "{count} 条信息", + runPrefix: "运行", + runSuffix: "查看详情。", + }, + manualRpcTitle: "手动 RPC", + manualRpcSubtitle: "发送带 JSON 参数的原始 Gateway 方法。", + method: "方法", + selectMethod: "选择方法…", + paramsJson: "参数 (JSON)", + modelsTitle: "模型", + modelsSubtitle: "来自 models.list 的目录。", + eventLogTitle: "事件日志", + eventLogSubtitle: "最新 Gateway 事件。", + noEvents: "暂无事件。", + }, + execApproval: { + expiresIn: "{time} 后过期", + expired: "已过期", + execApprovalNeeded: "需要 Exec 审批", + pluginApprovalNeeded: "需要插件审批", + pending: "{count} 个待处理", + allowOnce: "允许一次", + alwaysAllow: "始终允许", + deny: "拒绝", + labels: { + host: "主机", + agent: "代理", + session: "会话", + cwd: "CWD", + resolved: "已解析", + security: "安全", + ask: "询问策略", + severity: "严重性", + plugin: "插件", + }, + }, agentTools: { connectedSource: "已连接:{id}", connected: "已连接", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index 8bac41c2229..f1321da5695 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -16,6 +16,7 @@ export const zh_TW: TranslationMap = { connected: "已連線", refresh: "刷新", reload: "重新載入", + reset: "Reset", probe: "探測", call: "呼叫", confirm: "確認", @@ -24,6 +25,7 @@ export const zh_TW: TranslationMap = { enabled: "已啟用", disabled: "已禁用", na: "不適用", + never: "never", configured: "已設定", running: "執行中", linked: "已連結", @@ -136,6 +138,137 @@ export const zh_TW: TranslationMap = { lastInput: "上次輸入 {time}", reason: "原因 {reason}", }, + agents: { + noAgents: "No agents", + copyId: "Copy ID", + copyIdTitle: "Copy agent ID to clipboard", + default: "Default", + setDefault: "Set Default", + alreadyDefaultTitle: "Already the default agent", + setDefaultTitle: "Set as the default agent", + selectTitle: "Select an agent", + selectSubtitle: "Pick an agent to inspect its workspace and tools.", + tabs: { + overview: "Overview", + files: "Files", + tools: "Tools", + skills: "Skills", + channels: "Channels", + cronJobs: "Cron Jobs", + }, + context: { + title: "Agent Context", + workspace: "Workspace", + openFilesTab: "Open Files tab", + primaryModel: "Primary Model", + runtime: "Runtime", + identityName: "Identity Name", + identityAvatar: "Identity Avatar", + skillsFilter: "Skills Filter", + default: "Default", + configurationSubtitle: "Workspace, identity, and model configuration.", + schedulingSubtitle: "Workspace and scheduling targets.", + }, + channels: { + title: "Channels", + subtitle: "Gateway-wide channel status snapshot.", + lastRefresh: "Last refresh: {time}", + loadHint: "Load channels to see live status.", + empty: "No channels found.", + connectedCount: "{connected}/{total} connected", + noAccounts: "no accounts", + configuredCount: "{count} configured", + notConfigured: "not configured", + enabledCount: "{count} enabled", + setupGuide: "Setup guide", + }, + cronPanel: { + schedulerTitle: "Scheduler", + schedulerSubtitle: "Gateway cron status.", + jobs: "Jobs", + nextWake: "Next wake", + agentJobsTitle: "Agent Cron Jobs", + agentJobsSubtitle: "Scheduled jobs targeting this agent.", + noJobs: "No jobs assigned.", + runNow: "Run Now", + }, + files: { + emptyDraft: "Empty draft", + minRead: "{count} min read", + markdownPreview: "Markdown Preview", + extensionPreview: "{ext} Preview", + preview: "Preview", + expandPreview: "Expand preview", + collapsePreview: "Collapse preview", + editFile: "Edit file", + closePreview: "Close preview", + coreFilesTitle: "Core Files", + coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.", + workspace: "Workspace", + loadHint: "Load the agent workspace files to edit core instructions.", + empty: "No files found.", + missing: "missing", + selectFile: "Select a file to edit.", + previewMarkdownTitle: "Preview rendered markdown", + willCreateOnSave: "Will Create on Save", + liveDraftPreview: "Live Draft Preview", + savedPreview: "Saved Preview", + updated: "Updated {time}", + notCreatedYet: "Not Created Yet", + updatedUnknown: "Updated Unknown", + missingHint: "This file is missing. Saving will create it in the agent workspace.", + content: "Content", + words: "{count} words", + lines: "lines", + }, + }, + debug: { + snapshotsTitle: "Snapshots", + snapshotsSubtitle: "Status, health, and heartbeat data.", + status: "Status", + health: "Health", + lastHeartbeat: "Last heartbeat", + security: { + audit: "Security audit", + critical: "{count} critical", + warnings: "{count} warnings", + noCriticalIssues: "No critical issues", + info: "{count} info", + runPrefix: "Run", + runSuffix: "for details.", + }, + manualRpcTitle: "Manual RPC", + manualRpcSubtitle: "Send a raw gateway method with JSON params.", + method: "Method", + selectMethod: "Select a method…", + paramsJson: "Params (JSON)", + modelsTitle: "Models", + modelsSubtitle: "Catalog from models.list.", + eventLogTitle: "Event Log", + eventLogSubtitle: "Latest gateway events.", + noEvents: "No events yet.", + }, + execApproval: { + expiresIn: "expires in {time}", + expired: "expired", + execApprovalNeeded: "Exec approval needed", + pluginApprovalNeeded: "Plugin approval needed", + pending: "{count} pending", + allowOnce: "Allow once", + alwaysAllow: "Always allow", + deny: "Deny", + labels: { + host: "Host", + agent: "Agent", + session: "Session", + cwd: "CWD", + resolved: "Resolved", + security: "Security", + ask: "Ask", + severity: "Severity", + plugin: "Plugin", + }, + }, agentTools: { connectedSource: "已連線:{id}", connected: "已連線", diff --git a/ui/src/ui/views/agents-panels-status-files.ts b/ui/src/ui/views/agents-panels-status-files.ts index 4790625a5b7..53f1c858fe8 100644 --- a/ui/src/ui/views/agents-panels-status-files.ts +++ b/ui/src/ui/views/agents-panels-status-files.ts @@ -34,17 +34,19 @@ function countLines(text: string) { function estimateReadingTimeLabel(wordCount: number) { if (wordCount <= 0) { - return "Empty draft"; + return t("agents.files.emptyDraft"); } - return `${Math.max(1, Math.round(wordCount / 220))} min read`; + return t("agents.files.minRead", { count: String(Math.max(1, Math.round(wordCount / 220))) }); } function getExtensionLabel(fileName: string) { const ext = fileName.split(".").pop()?.trim().toLowerCase(); if (ext === "md" || ext === "markdown") { - return "Markdown Preview"; + return t("agents.files.markdownPreview"); } - return ext ? `${ext.toUpperCase()} Preview` : "Preview"; + return ext + ? t("agents.files.extensionPreview", { ext: ext.toUpperCase() }) + : t("agents.files.preview"); } function formatWorkspaceRelativePath(filePath: string, workspace: string | null | undefined) { @@ -78,7 +80,7 @@ function setPreviewExpandButtonState(button: Element | null | undefined, isFulls if (!(button instanceof HTMLElement)) { return; } - const label = isFullscreen ? "Collapse preview" : "Expand preview"; + const label = isFullscreen ? t("agents.files.collapsePreview") : t("agents.files.expandPreview"); button.classList.toggle("is-fullscreen", isFullscreen); button.setAttribute("aria-pressed", String(isFullscreen)); button.setAttribute("aria-label", label); @@ -92,45 +94,45 @@ function renderAgentContextCard( ) { return html`
-
Agent Context
+
${t("agents.context.title")}
${subtitle}
-
Workspace
+
${t("agents.context.workspace")}
-
Primary Model
+
${t("agents.context.primaryModel")}
${context.model}
-
Runtime
+
${t("agents.context.runtime")}
${context.runtime}
-
Identity Name
+
${t("agents.context.identityName")}
${context.identityName}
-
Identity Avatar
+
${t("agents.context.identityAvatar")}
${context.identityAvatar}
-
Skills Filter
+
${t("agents.context.skillsFilter")}
${context.skillsLabel}
-
Default
-
${context.isDefault ? "yes" : "no"}
+
${t("agents.context.default")}
+
${context.isDefault ? t("common.yes") : t("common.no")}
@@ -227,48 +229,55 @@ export function renderAgentChannels(params: { const entries = resolveChannelEntries(params.snapshot); const lastSuccessLabel = params.lastSuccess ? formatRelativeTimestamp(params.lastSuccess) - : "never"; + : t("common.never"); return html`
${renderAgentContextCard( params.context, - "Workspace, identity, and model configuration.", + t("agents.context.configurationSubtitle"), params.onSelectPanel, )}
-
Channels
-
Gateway-wide channel status snapshot.
+
${t("agents.channels.title")}
+
${t("agents.channels.subtitle")}
-
Last refresh: ${lastSuccessLabel}
+
+ ${t("agents.channels.lastRefresh", { time: lastSuccessLabel })} +
${params.error ? html`
${params.error}
` : nothing} ${!params.snapshot ? html`
- Load channels to see live status. + ${t("agents.channels.loadHint")}
` : nothing} ${entries.length === 0 - ? html`
No channels found.
` + ? html`
${t("agents.channels.empty")}
` : html`
${entries.map((entry) => { const summary = summarizeChannelAccounts(entry.accounts); const status = summary.total - ? `${summary.connected}/${summary.total} connected` - : "no accounts"; + ? t("agents.channels.connectedCount", { + connected: String(summary.connected), + total: String(summary.total), + }) + : t("agents.channels.noAccounts"); const configLabel = summary.configured - ? `${summary.configured} configured` - : "not configured"; - const enabled = summary.total ? `${summary.enabled} enabled` : "disabled"; + ? t("agents.channels.configuredCount", { count: String(summary.configured) }) + : t("agents.channels.notConfigured"); + const enabled = summary.total + ? t("agents.channels.enabledCount", { count: String(summary.enabled) }) + : t("common.disabled"); const extras = resolveChannelExtrasFromConfig({ configForm: params.configForm, channelId: entry.id, @@ -292,7 +301,7 @@ export function renderAgentChannels(params: { target="_blank" rel="noopener" style="color: var(--accent); font-size: 12px" - >Setup guide${t("agents.channels.setupGuide")}
` @@ -327,14 +336,14 @@ export function renderAgentCron(params: {
${renderAgentContextCard( params.context, - "Workspace and scheduling targets.", + t("agents.context.schedulingSubtitle"), params.onSelectPanel, )}
-
Scheduler
-
Gateway cron status.
+
${t("agents.cronPanel.schedulerTitle")}
+
${t("agents.cronPanel.schedulerSubtitle")}
-
Jobs
+
${t("agents.cronPanel.jobs")}
${params.status?.jobs ?? t("common.na")}
-
Next wake
+
${t("agents.cronPanel.nextWake")}
${formatNextRun(params.status?.nextWakeAtMs ?? null)}
@@ -366,10 +375,10 @@ export function renderAgentCron(params: {
-
Agent Cron Jobs
-
Scheduled jobs targeting this agent.
+
${t("agents.cronPanel.agentJobsTitle")}
+
${t("agents.cronPanel.agentJobsSubtitle")}
${jobs.length === 0 - ? html`
No jobs assigned.
` + ? html`
${t("agents.cronPanel.noJobs")}
` : html`
${jobs.map( @@ -383,7 +392,7 @@ export function renderAgentCron(params: {
${formatCronSchedule(job)} - ${job.enabled ? "enabled" : "disabled"} + ${job.enabled ? t("common.enabled") : t("common.disabled")} ${job.sessionTarget}
@@ -397,7 +406,7 @@ export function renderAgentCron(params: { ?disabled=${!job.enabled} @click=${() => params.onRunNow(job.id)} > - Run Now + ${t("agents.cronPanel.runNow")}
@@ -444,27 +453,27 @@ export function renderAgentFiles(params: { : ""; const previewTitleId = activeEntry ? `agent-file-preview-title-${toDomId(activeEntry.name)}` : ""; const previewStatusLabel = activeEntry?.missing - ? "Will Create on Save" + ? t("agents.files.willCreateOnSave") : isDirty - ? "Live Draft Preview" - : "Saved Preview"; + ? t("agents.files.liveDraftPreview") + : t("agents.files.savedPreview"); const previewStatusClass = activeEntry?.missing ? "is-missing" : isDirty ? "is-dirty" : "is-synced"; const previewUpdatedLabel = activeEntry?.updatedAtMs - ? `Updated ${formatRelativeTimestamp(activeEntry.updatedAtMs)}` + ? t("agents.files.updated", { time: formatRelativeTimestamp(activeEntry.updatedAtMs) }) : activeEntry?.missing - ? "Not Created Yet" - : "Updated Unknown"; + ? t("agents.files.notCreatedYet") + : t("agents.files.updatedUnknown"); return html`
-
Core Files
-
Bootstrap persona, identity, and tool guidance.
+
${t("agents.files.coreFilesTitle")}
+
${t("agents.files.coreFilesSubtitle")}
`; })}
${!activeEntry - ? html`
Select a file to edit.
` + ? html`
+ ${t("agents.files.selectFile")} +
` : html`
@@ -521,7 +530,7 @@ export function renderAgentFiles(params: {
${activeEntry.missing ? html`
- This file is missing. Saving will create it in the agent workspace. + ${t("agents.files.missingHint")}
` : nothing}